#50514 Issue 50507 - Fix Cockpit UI styling for PF4
Closed 3 years ago by spichugi. Opened 4 years ago by mreynolds.
mreynolds/389-ds-base cockput-PF4  into  master

file modified
+1 -1
@@ -310,7 +310,7 @@ 

  %package -n cockpit-389-ds

  Summary:          Cockpit UI Plugin for configuring and administering the 389 Directory Server

  BuildArch:        noarch

- Requires:         cockpit

+ Requires:         cockpit >= 198

  Requires:         python%{python3_pkgversion}

  Requires:         python%{python3_pkgversion}-lib389

  

@@ -266,7 +266,6 @@ 

        "version": "7.0.0",

        "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",

        "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",

-       "dev": true,

        "requires": {

          "@babel/types": "^7.0.0"

        }
@@ -297,8 +296,7 @@ 

      "@babel/helper-plugin-utils": {

        "version": "7.0.0",

        "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",

-       "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",

-       "dev": true

+       "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA=="

      },

      "@babel/helper-regex": {

        "version": "7.0.0",
@@ -951,13 +949,144 @@ 

        "version": "7.1.3",

        "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.1.3.tgz",

        "integrity": "sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA==",

-       "dev": true,

        "requires": {

          "esutils": "^2.0.2",

          "lodash": "^4.17.10",

          "to-fast-properties": "^2.0.0"

        }

      },

+     "@emotion/babel-utils": {

+       "version": "0.6.10",

+       "resolved": "https://registry.npmjs.org/@emotion/babel-utils/-/babel-utils-0.6.10.tgz",

+       "integrity": "sha512-/fnkM/LTEp3jKe++T0KyTszVGWNKPNOUJfjNKLO17BzQ6QPxgbg3whayom1Qr2oLFH3V92tDymU+dT5q676uow==",

+       "requires": {

+         "@emotion/hash": "^0.6.6",

+         "@emotion/memoize": "^0.6.6",

+         "@emotion/serialize": "^0.9.1",

+         "convert-source-map": "^1.5.1",

+         "find-root": "^1.1.0",

+         "source-map": "^0.7.2"

+       },

+       "dependencies": {

+         "source-map": {

+           "version": "0.7.3",

+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",

+           "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="

+         }

+       }

+     },

+     "@emotion/hash": {

+       "version": "0.6.6",

+       "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.6.6.tgz",

+       "integrity": "sha512-ojhgxzUHZ7am3D2jHkMzPpsBAiB005GF5YU4ea+8DNPybMk01JJUM9V9YRlF/GE95tcOm8DxQvWA2jq19bGalQ=="

+     },

+     "@emotion/memoize": {

+       "version": "0.6.6",

+       "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.6.6.tgz",

+       "integrity": "sha512-h4t4jFjtm1YV7UirAFuSuFGyLa+NNxjdkq6DpFLANNQY5rHueFZHVY+8Cu1HYVP6DrheB0kv4m5xPjo7eKT7yQ=="

+     },

+     "@emotion/serialize": {

+       "version": "0.9.1",

+       "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-0.9.1.tgz",

+       "integrity": "sha512-zTuAFtyPvCctHBEL8KZ5lJuwBanGSutFEncqLn/m9T1a6a93smBStK+bZzcNPgj4QS8Rkw9VTwJGhRIUVO8zsQ==",

+       "requires": {

+         "@emotion/hash": "^0.6.6",

+         "@emotion/memoize": "^0.6.6",

+         "@emotion/unitless": "^0.6.7",

+         "@emotion/utils": "^0.8.2"

+       }

+     },

+     "@emotion/stylis": {

+       "version": "0.7.1",

+       "resolved": "https://registry.npmjs.org/@emotion/stylis/-/stylis-0.7.1.tgz",

+       "integrity": "sha512-/SLmSIkN13M//53TtNxgxo57mcJk/UJIDFRKwOiLIBEyBHEcipgR6hNMQ/59Sl4VjCJ0Z/3zeAZyvnSLPG/1HQ=="

+     },

+     "@emotion/unitless": {

+       "version": "0.6.7",

+       "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.6.7.tgz",

+       "integrity": "sha512-Arj1hncvEVqQ2p7Ega08uHLr1JuRYBuO5cIvcA+WWEQ5+VmkOE3ZXzl04NbQxeQpWX78G7u6MqxKuNX3wvYZxg=="

+     },

+     "@emotion/utils": {

+       "version": "0.8.2",

+       "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-0.8.2.tgz",

+       "integrity": "sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw=="

+     },

+     "@fortawesome/fontawesome-common-types": {

+       "version": "0.2.19",

+       "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.19.tgz",

+       "integrity": "sha512-nd2Ul/CUs8U9sjofQYAALzOGpgkVJQgEhIJnOHaoyVR/LeC3x2mVg4eB910a4kS6WgLPebAY0M2fApEI497raQ=="

+     },

+     "@fortawesome/free-brands-svg-icons": {

+       "version": "5.9.0",

+       "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.9.0.tgz",

+       "integrity": "sha512-sOz1wFyslaHUak8tY6IEhSAV1mAWbCLssBR8yFQV6f065k8nUCkjyrcxW4RVl9+wiLXmeG1CJUABUJV9DiW+7Q==",

+       "requires": {

+         "@fortawesome/fontawesome-common-types": "^0.2.19"

+       }

+     },

+     "@patternfly/react-core": {

+       "version": "3.58.1",

+       "resolved": "https://registry.npmjs.org/@patternfly/react-core/-/react-core-3.58.1.tgz",

+       "integrity": "sha512-ahb7cbWsLWZu69sHnn3ZdB5tcpXAbgHcUbAttWuG01KVpleK50qkwZMWW0JzuDlUfnelpW3kbaVfNE14HZo+Eg==",

+       "requires": {

+         "@patternfly/react-icons": "^3.10.6",

+         "@patternfly/react-styles": "^3.4.6",

+         "@patternfly/react-tokens": "^2.6.5",

+         "@tippy.js/react": "^1.1.1",

+         "emotion": "^9.2.9",

+         "exenv": "^1.2.2",

+         "focus-trap-react": "^4.0.1"

+       }

+     },

+     "@patternfly/react-icons": {

+       "version": "3.10.13",

+       "resolved": "https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-3.10.13.tgz",

+       "integrity": "sha512-UFiofUekWTAAaoFKVYvasj2KsFAirnMHofgabv9FPHVfJREHY9hU7aV1LAX+bO16lSh8/Qo88TjcVY1nawOnuQ==",

+       "requires": {

+         "@fortawesome/free-brands-svg-icons": "^5.8.1"

+       }

+     },

+     "@patternfly/react-styles": {

+       "version": "3.4.6",

+       "resolved": "https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-3.4.6.tgz",

+       "integrity": "sha512-m9ynr85EMmBAxGhCguwRiGgpLDA9+YKtwF83ORK7ylHHsrK9JC/RFPvTj8d/80oUMmlzcL765ZwG7sT9qR3ybA==",

+       "requires": {

+         "@babel/helper-plugin-utils": "^7.0.0-beta.48",

+         "camel-case": "^3.0.0",

+         "css": "^2.2.3",

+         "cssom": "^0.3.4",

+         "cssstyle": "^0.3.1",

+         "emotion": "^9.2.9",

+         "emotion-server": "^9.2.9",

+         "fbjs-scripts": "^0.8.3",

+         "fs-extra": "^6.0.1",

+         "jsdom": "^15.1.0",

+         "relative": "^3.0.2",

+         "resolve-from": "^4.0.0",

+         "typescript": "3.4.5"

+       },

+       "dependencies": {

+         "resolve-from": {

+           "version": "4.0.0",

+           "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",

+           "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="

+         }

+       }

+     },

+     "@patternfly/react-tokens": {

+       "version": "2.6.5",

+       "resolved": "https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-2.6.5.tgz",

+       "integrity": "sha512-HZ0LLAOugMmnD9n5T5Hp6vDnZ86ikm+MXu7kbfNqK9dTOVmEroPai0rUN6hnnPP4mCzFrLXmh4rzecDr2273yg=="

+     },

+     "@tippy.js/react": {

+       "version": "1.1.1",

+       "resolved": "https://registry.npmjs.org/@tippy.js/react/-/react-1.1.1.tgz",

+       "integrity": "sha512-TkL1VufxgUvTMouDoBGv2vTdtUxtLUaRpspI4Rv0DsoKe2Ex1E5bl/qISk434mhuAhEnXuemrcgTaPWrfDvmGw==",

+       "requires": {

+         "prop-types": "^15.6.2",

+         "tippy.js": "^3.2.0"

+       }

+     },

      "@types/c3": {

        "version": "0.6.4",

        "resolved": "https://registry.npmjs.org/@types/c3/-/c3-0.6.4.tgz",
@@ -1420,6 +1549,11 @@ 

        "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==",

        "dev": true

      },

+     "abab": {

+       "version": "2.0.0",

+       "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz",

+       "integrity": "sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w=="

+     },

      "abbrev": {

        "version": "1.1.1",

        "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -1440,6 +1574,22 @@ 

          "acorn": "^5.0.0"

        }

      },

+     "acorn-globals": {

+       "version": "4.3.2",

+       "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz",

+       "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==",

+       "requires": {

+         "acorn": "^6.0.1",

+         "acorn-walk": "^6.0.1"

+       },

+       "dependencies": {

+         "acorn": {

+           "version": "6.2.1",

+           "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz",

+           "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q=="

+         }

+       }

+     },

      "acorn-jsx": {

        "version": "4.1.1",

        "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-4.1.1.tgz",
@@ -1449,11 +1599,15 @@ 

          "acorn": "^5.0.3"

        }

      },

+     "acorn-walk": {

+       "version": "6.2.0",

+       "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz",

+       "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA=="

+     },

      "ajv": {

        "version": "6.5.4",

        "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.4.tgz",

        "integrity": "sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg==",

-       "dev": true,

        "requires": {

          "fast-deep-equal": "^2.0.1",

          "fast-json-stable-stringify": "^2.0.0",
@@ -1470,20 +1624,51 @@ 

      "ajv-keywords": {

        "version": "3.2.0",

        "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",

-       "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",

-       "dev": true

+       "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo="

      },

      "amdefine": {

        "version": "1.0.1",

        "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",

        "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="

      },

+     "ansi-colors": {

+       "version": "1.1.0",

+       "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",

+       "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",

+       "requires": {

+         "ansi-wrap": "^0.1.0"

+       }

+     },

+     "ansi-cyan": {

+       "version": "0.1.1",

+       "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz",

+       "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=",

+       "requires": {

+         "ansi-wrap": "0.1.0"

+       }

+     },

      "ansi-escapes": {

        "version": "3.1.0",

        "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",

        "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==",

        "dev": true

      },

+     "ansi-gray": {

+       "version": "0.1.1",

+       "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",

+       "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",

+       "requires": {

+         "ansi-wrap": "0.1.0"

+       }

+     },

+     "ansi-red": {

+       "version": "0.1.1",

+       "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz",

+       "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=",

+       "requires": {

+         "ansi-wrap": "0.1.0"

+       }

+     },

      "ansi-regex": {

        "version": "2.1.1",

        "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
@@ -1494,6 +1679,11 @@ 

        "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",

        "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4="

      },

+     "ansi-wrap": {

+       "version": "0.1.0",

+       "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",

+       "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768="

+     },

      "anymatch": {

        "version": "2.0.0",

        "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
@@ -1522,7 +1712,6 @@ 

        "version": "1.0.10",

        "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",

        "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",

-       "dev": true,

        "requires": {

          "sprintf-js": "~1.0.2"

        }
@@ -1536,8 +1725,7 @@ 

      "arr-flatten": {

        "version": "1.1.0",

        "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",

-       "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",

-       "dev": true

+       "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg=="

      },

      "arr-union": {

        "version": "3.1.0",
@@ -1545,6 +1733,11 @@ 

        "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",

        "dev": true

      },

+     "array-equal": {

+       "version": "1.0.0",

+       "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz",

+       "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM="

+     },

      "array-find-index": {

        "version": "1.0.2",

        "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
@@ -1560,6 +1753,11 @@ 

          "es-abstract": "^1.7.0"

        }

      },

+     "array-slice": {

+       "version": "0.2.3",

+       "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz",

+       "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU="

+     },

      "array-union": {

        "version": "1.0.2",

        "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
@@ -1671,8 +1869,7 @@ 

      "async-limiter": {

        "version": "1.0.0",

        "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz",

-       "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",

-       "dev": true

+       "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg=="

      },

      "asynckit": {

        "version": "0.4.0",
@@ -1682,8 +1879,7 @@ 

      "atob": {

        "version": "2.1.2",

        "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",

-       "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",

-       "dev": true

+       "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="

      },

      "audit-ci": {

        "version": "1.7.0",
@@ -1929,6 +2125,69 @@ 

        "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",

        "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="

      },

+     "babel-code-frame": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",

+       "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",

+       "requires": {

+         "chalk": "^1.1.3",

+         "esutils": "^2.0.2",

+         "js-tokens": "^3.0.2"

+       },

+       "dependencies": {

+         "js-tokens": {

+           "version": "3.0.2",

+           "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",

+           "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls="

+         }

+       }

+     },

+     "babel-core": {

+       "version": "6.26.3",

+       "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz",

+       "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==",

+       "requires": {

+         "babel-code-frame": "^6.26.0",

+         "babel-generator": "^6.26.0",

+         "babel-helpers": "^6.24.1",

+         "babel-messages": "^6.23.0",

+         "babel-register": "^6.26.0",

+         "babel-runtime": "^6.26.0",

+         "babel-template": "^6.26.0",

+         "babel-traverse": "^6.26.0",

+         "babel-types": "^6.26.0",

+         "babylon": "^6.18.0",

+         "convert-source-map": "^1.5.1",

+         "debug": "^2.6.9",

+         "json5": "^0.5.1",

+         "lodash": "^4.17.4",

+         "minimatch": "^3.0.4",

+         "path-is-absolute": "^1.0.1",

+         "private": "^0.1.8",

+         "slash": "^1.0.0",

+         "source-map": "^0.5.7"

+       },

+       "dependencies": {

+         "debug": {

+           "version": "2.6.9",

+           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",

+           "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",

+           "requires": {

+             "ms": "2.0.0"

+           }

+         },

+         "ms": {

+           "version": "2.0.0",

+           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",

+           "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="

+         },

+         "source-map": {

+           "version": "0.5.7",

+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",

+           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="

+         }

+       }

+     },

      "babel-eslint": {

        "version": "9.0.0",

        "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-9.0.0.tgz",
@@ -1943,6 +2202,126 @@ 

          "eslint-visitor-keys": "^1.0.0"

        }

      },

+     "babel-generator": {

+       "version": "6.26.1",

+       "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz",

+       "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==",

+       "requires": {

+         "babel-messages": "^6.23.0",

+         "babel-runtime": "^6.26.0",

+         "babel-types": "^6.26.0",

+         "detect-indent": "^4.0.0",

+         "jsesc": "^1.3.0",

+         "lodash": "^4.17.4",

+         "source-map": "^0.5.7",

+         "trim-right": "^1.0.1"

+       },

+       "dependencies": {

+         "jsesc": {

+           "version": "1.3.0",

+           "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",

+           "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="

+         },

+         "source-map": {

+           "version": "0.5.7",

+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",

+           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="

+         }

+       }

+     },

+     "babel-helper-builder-react-jsx": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz",

+       "integrity": "sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA=",

+       "requires": {

+         "babel-runtime": "^6.26.0",

+         "babel-types": "^6.26.0",

+         "esutils": "^2.0.2"

+       }

+     },

+     "babel-helper-call-delegate": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz",

+       "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=",

+       "requires": {

+         "babel-helper-hoist-variables": "^6.24.1",

+         "babel-runtime": "^6.22.0",

+         "babel-traverse": "^6.24.1",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-helper-define-map": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz",

+       "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=",

+       "requires": {

+         "babel-helper-function-name": "^6.24.1",

+         "babel-runtime": "^6.26.0",

+         "babel-types": "^6.26.0",

+         "lodash": "^4.17.4"

+       }

+     },

+     "babel-helper-function-name": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz",

+       "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=",

+       "requires": {

+         "babel-helper-get-function-arity": "^6.24.1",

+         "babel-runtime": "^6.22.0",

+         "babel-template": "^6.24.1",

+         "babel-traverse": "^6.24.1",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-helper-get-function-arity": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz",

+       "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=",

+       "requires": {

+         "babel-runtime": "^6.22.0",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-helper-hoist-variables": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz",

+       "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=",

+       "requires": {

+         "babel-runtime": "^6.22.0",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-helper-optimise-call-expression": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz",

+       "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=",

+       "requires": {

+         "babel-runtime": "^6.22.0",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-helper-replace-supers": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz",

+       "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=",

+       "requires": {

+         "babel-helper-optimise-call-expression": "^6.24.1",

+         "babel-messages": "^6.23.0",

+         "babel-runtime": "^6.22.0",

+         "babel-template": "^6.24.1",

+         "babel-traverse": "^6.24.1",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-helpers": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz",

+       "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=",

+       "requires": {

+         "babel-runtime": "^6.22.0",

+         "babel-template": "^6.24.1"

+       }

+     },

      "babel-loader": {

        "version": "8.0.4",

        "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.4.tgz",
@@ -1955,6 +2334,372 @@ 

          "util.promisify": "^1.0.0"

        }

      },

+     "babel-messages": {

+       "version": "6.23.0",

+       "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz",

+       "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-check-es2015-constants": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz",

+       "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-emotion": {

+       "version": "9.2.11",

+       "resolved": "https://registry.npmjs.org/babel-plugin-emotion/-/babel-plugin-emotion-9.2.11.tgz",

+       "integrity": "sha512-dgCImifnOPPSeXod2znAmgc64NhaaOjGEHROR/M+lmStb3841yK1sgaDYAYMnlvWNz8GnpwIPN0VmNpbWYZ+VQ==",

+       "requires": {

+         "@babel/helper-module-imports": "^7.0.0",

+         "@emotion/babel-utils": "^0.6.4",

+         "@emotion/hash": "^0.6.2",

+         "@emotion/memoize": "^0.6.1",

+         "@emotion/stylis": "^0.7.0",

+         "babel-plugin-macros": "^2.0.0",

+         "babel-plugin-syntax-jsx": "^6.18.0",

+         "convert-source-map": "^1.5.0",

+         "find-root": "^1.1.0",

+         "mkdirp": "^0.5.1",

+         "source-map": "^0.5.7",

+         "touch": "^2.0.1"

+       },

+       "dependencies": {

+         "source-map": {

+           "version": "0.5.7",

+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",

+           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="

+         }

+       }

+     },

+     "babel-plugin-macros": {

+       "version": "2.6.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-2.6.1.tgz",

+       "integrity": "sha512-6W2nwiXme6j1n2erPOnmRiWfObUhWH7Qw1LMi9XZy8cj+KtESu3T6asZvtk5bMQQjX8te35o7CFueiSdL/2NmQ==",

+       "requires": {

+         "@babel/runtime": "^7.4.2",

+         "cosmiconfig": "^5.2.0",

+         "resolve": "^1.10.0"

+       },

+       "dependencies": {

+         "@babel/runtime": {

+           "version": "7.5.5",

+           "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.5.5.tgz",

+           "integrity": "sha512-28QvEGyQyNkB0/m2B4FU7IEZGK2NUrcMtT6BZEFALTguLk+AUT6ofsHtPk5QyjAdUkpMJ+/Em+quwz4HOt30AQ==",

+           "requires": {

+             "regenerator-runtime": "^0.13.2"

+           }

+         },

+         "regenerator-runtime": {

+           "version": "0.13.3",

+           "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz",

+           "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw=="

+         },

+         "resolve": {

+           "version": "1.11.1",

+           "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",

+           "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",

+           "requires": {

+             "path-parse": "^1.0.6"

+           }

+         }

+       }

+     },

+     "babel-plugin-syntax-class-properties": {

+       "version": "6.13.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz",

+       "integrity": "sha1-1+sjt5oxf4VDlixQW4J8fWysJ94="

+     },

+     "babel-plugin-syntax-flow": {

+       "version": "6.18.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz",

+       "integrity": "sha1-TDqyCiryaqIM0lmVw5jE63AxDI0="

+     },

+     "babel-plugin-syntax-jsx": {

+       "version": "6.18.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz",

+       "integrity": "sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY="

+     },

+     "babel-plugin-syntax-object-rest-spread": {

+       "version": "6.13.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz",

+       "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U="

+     },

+     "babel-plugin-syntax-trailing-function-commas": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz",

+       "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM="

+     },

+     "babel-plugin-transform-class-properties": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz",

+       "integrity": "sha1-anl2PqYdM9NvN7YRqp3vgagbRqw=",

+       "requires": {

+         "babel-helper-function-name": "^6.24.1",

+         "babel-plugin-syntax-class-properties": "^6.8.0",

+         "babel-runtime": "^6.22.0",

+         "babel-template": "^6.24.1"

+       }

+     },

+     "babel-plugin-transform-es2015-arrow-functions": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz",

+       "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es2015-block-scoped-functions": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz",

+       "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es2015-block-scoping": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz",

+       "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=",

+       "requires": {

+         "babel-runtime": "^6.26.0",

+         "babel-template": "^6.26.0",

+         "babel-traverse": "^6.26.0",

+         "babel-types": "^6.26.0",

+         "lodash": "^4.17.4"

+       }

+     },

+     "babel-plugin-transform-es2015-classes": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz",

+       "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=",

+       "requires": {

+         "babel-helper-define-map": "^6.24.1",

+         "babel-helper-function-name": "^6.24.1",

+         "babel-helper-optimise-call-expression": "^6.24.1",

+         "babel-helper-replace-supers": "^6.24.1",

+         "babel-messages": "^6.23.0",

+         "babel-runtime": "^6.22.0",

+         "babel-template": "^6.24.1",

+         "babel-traverse": "^6.24.1",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-plugin-transform-es2015-computed-properties": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz",

+       "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=",

+       "requires": {

+         "babel-runtime": "^6.22.0",

+         "babel-template": "^6.24.1"

+       }

+     },

+     "babel-plugin-transform-es2015-destructuring": {

+       "version": "6.23.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz",

+       "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es2015-for-of": {

+       "version": "6.23.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz",

+       "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es2015-function-name": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz",

+       "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=",

+       "requires": {

+         "babel-helper-function-name": "^6.24.1",

+         "babel-runtime": "^6.22.0",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-plugin-transform-es2015-literals": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz",

+       "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es2015-modules-commonjs": {

+       "version": "6.26.2",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz",

+       "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==",

+       "requires": {

+         "babel-plugin-transform-strict-mode": "^6.24.1",

+         "babel-runtime": "^6.26.0",

+         "babel-template": "^6.26.0",

+         "babel-types": "^6.26.0"

+       }

+     },

+     "babel-plugin-transform-es2015-object-super": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz",

+       "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=",

+       "requires": {

+         "babel-helper-replace-supers": "^6.24.1",

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es2015-parameters": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz",

+       "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=",

+       "requires": {

+         "babel-helper-call-delegate": "^6.24.1",

+         "babel-helper-get-function-arity": "^6.24.1",

+         "babel-runtime": "^6.22.0",

+         "babel-template": "^6.24.1",

+         "babel-traverse": "^6.24.1",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-plugin-transform-es2015-shorthand-properties": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz",

+       "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=",

+       "requires": {

+         "babel-runtime": "^6.22.0",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-plugin-transform-es2015-spread": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz",

+       "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es2015-template-literals": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz",

+       "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es3-member-expression-literals": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz",

+       "integrity": "sha1-cz00RPPsxBvvjtGmpOCWV7iWnrs=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-es3-property-literals": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz",

+       "integrity": "sha1-sgeNWELiKr9A9z6M3pzTcRq9V1g=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-flow-strip-types": {

+       "version": "6.22.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz",

+       "integrity": "sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988=",

+       "requires": {

+         "babel-plugin-syntax-flow": "^6.18.0",

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-object-rest-spread": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz",

+       "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=",

+       "requires": {

+         "babel-plugin-syntax-object-rest-spread": "^6.8.0",

+         "babel-runtime": "^6.26.0"

+       }

+     },

+     "babel-plugin-transform-react-display-name": {

+       "version": "6.25.0",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz",

+       "integrity": "sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE=",

+       "requires": {

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-react-jsx": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz",

+       "integrity": "sha1-hAoCjn30YN/DotKfDA2R9jduZqM=",

+       "requires": {

+         "babel-helper-builder-react-jsx": "^6.24.1",

+         "babel-plugin-syntax-jsx": "^6.8.0",

+         "babel-runtime": "^6.22.0"

+       }

+     },

+     "babel-plugin-transform-strict-mode": {

+       "version": "6.24.1",

+       "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz",

+       "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=",

+       "requires": {

+         "babel-runtime": "^6.22.0",

+         "babel-types": "^6.24.1"

+       }

+     },

+     "babel-preset-fbjs": {

+       "version": "2.3.0",

+       "resolved": "https://registry.npmjs.org/babel-preset-fbjs/-/babel-preset-fbjs-2.3.0.tgz",

+       "integrity": "sha512-ZOpAI1/bN0Y3J1ZAK9gRsFkHy9gGgJoDRUjtUCla/129LC7uViq9nIK22YdHfey8szohYoZY3f9L2lGOv0Edqw==",

+       "requires": {

+         "babel-plugin-check-es2015-constants": "^6.8.0",

+         "babel-plugin-syntax-class-properties": "^6.8.0",

+         "babel-plugin-syntax-flow": "^6.8.0",

+         "babel-plugin-syntax-jsx": "^6.8.0",

+         "babel-plugin-syntax-object-rest-spread": "^6.8.0",

+         "babel-plugin-syntax-trailing-function-commas": "^6.8.0",

+         "babel-plugin-transform-class-properties": "^6.8.0",

+         "babel-plugin-transform-es2015-arrow-functions": "^6.8.0",

+         "babel-plugin-transform-es2015-block-scoped-functions": "^6.8.0",

+         "babel-plugin-transform-es2015-block-scoping": "^6.8.0",

+         "babel-plugin-transform-es2015-classes": "^6.8.0",

+         "babel-plugin-transform-es2015-computed-properties": "^6.8.0",

+         "babel-plugin-transform-es2015-destructuring": "^6.8.0",

+         "babel-plugin-transform-es2015-for-of": "^6.8.0",

+         "babel-plugin-transform-es2015-function-name": "^6.8.0",

+         "babel-plugin-transform-es2015-literals": "^6.8.0",

+         "babel-plugin-transform-es2015-modules-commonjs": "^6.8.0",

+         "babel-plugin-transform-es2015-object-super": "^6.8.0",

+         "babel-plugin-transform-es2015-parameters": "^6.8.0",

+         "babel-plugin-transform-es2015-shorthand-properties": "^6.8.0",

+         "babel-plugin-transform-es2015-spread": "^6.8.0",

+         "babel-plugin-transform-es2015-template-literals": "^6.8.0",

+         "babel-plugin-transform-es3-member-expression-literals": "^6.8.0",

+         "babel-plugin-transform-es3-property-literals": "^6.8.0",

+         "babel-plugin-transform-flow-strip-types": "^6.8.0",

+         "babel-plugin-transform-object-rest-spread": "^6.8.0",

+         "babel-plugin-transform-react-display-name": "^6.8.0",

+         "babel-plugin-transform-react-jsx": "^6.8.0"

+       }

+     },

+     "babel-register": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz",

+       "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=",

+       "requires": {

+         "babel-core": "^6.26.0",

+         "babel-runtime": "^6.26.0",

+         "core-js": "^2.5.0",

+         "home-or-tmp": "^2.0.0",

+         "lodash": "^4.17.4",

+         "mkdirp": "^0.5.1",

+         "source-map-support": "^0.4.15"

+       }

+     },

      "babel-runtime": {

        "version": "6.26.0",

        "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
@@ -1971,6 +2716,77 @@ 

          }

        }

      },

+     "babel-template": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz",

+       "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=",

+       "requires": {

+         "babel-runtime": "^6.26.0",

+         "babel-traverse": "^6.26.0",

+         "babel-types": "^6.26.0",

+         "babylon": "^6.18.0",

+         "lodash": "^4.17.4"

+       }

+     },

+     "babel-traverse": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz",

+       "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=",

+       "requires": {

+         "babel-code-frame": "^6.26.0",

+         "babel-messages": "^6.23.0",

+         "babel-runtime": "^6.26.0",

+         "babel-types": "^6.26.0",

+         "babylon": "^6.18.0",

+         "debug": "^2.6.8",

+         "globals": "^9.18.0",

+         "invariant": "^2.2.2",

+         "lodash": "^4.17.4"

+       },

+       "dependencies": {

+         "debug": {

+           "version": "2.6.9",

+           "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",

+           "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",

+           "requires": {

+             "ms": "2.0.0"

+           }

+         },

+         "globals": {

+           "version": "9.18.0",

+           "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",

+           "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ=="

+         },

+         "ms": {

+           "version": "2.0.0",

+           "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",

+           "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="

+         }

+       }

+     },

+     "babel-types": {

+       "version": "6.26.0",

+       "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",

+       "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",

+       "requires": {

+         "babel-runtime": "^6.26.0",

+         "esutils": "^2.0.2",

+         "lodash": "^4.17.4",

+         "to-fast-properties": "^1.0.3"

+       },

+       "dependencies": {

+         "to-fast-properties": {

+           "version": "1.0.3",

+           "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",

+           "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="

+         }

+       }

+     },

+     "babylon": {

+       "version": "6.18.0",

+       "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",

+       "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="

+     },

      "balanced-match": {

        "version": "1.0.0",

        "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
@@ -2178,6 +2994,11 @@ 

        "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=",

        "dev": true

      },

+     "browser-process-hrtime": {

+       "version": "0.1.3",

+       "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz",

+       "integrity": "sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw=="

+     },

      "browserify-aes": {

        "version": "1.2.0",

        "resolved": "http://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz",
@@ -2354,6 +3175,21 @@ 

          "unset-value": "^1.0.0"

        }

      },

+     "caller-callsite": {

+       "version": "2.0.0",

+       "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",

+       "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",

+       "requires": {

+         "callsites": "^2.0.0"

+       },

+       "dependencies": {

+         "callsites": {

+           "version": "2.0.0",

+           "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",

+           "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA="

+         }

+       }

+     },

      "caller-path": {

        "version": "0.1.0",

        "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
@@ -2369,6 +3205,15 @@ 

        "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",

        "dev": true

      },

+     "camel-case": {

+       "version": "3.0.0",

+       "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz",

+       "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=",

+       "requires": {

+         "no-case": "^2.2.0",

+         "upper-case": "^1.1.1"

+       }

+     },

      "camelcase": {

        "version": "2.1.1",

        "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
@@ -2574,6 +3419,11 @@ 

        "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",

        "dev": true

      },

+     "color-support": {

+       "version": "1.1.3",

+       "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",

+       "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg=="

+     },

      "combined-stream": {

        "version": "1.0.7",

        "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
@@ -2660,7 +3510,6 @@ 

        "version": "1.6.0",

        "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",

        "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",

-       "dev": true,

        "requires": {

          "safe-buffer": "~5.1.1"

        }
@@ -2711,6 +3560,28 @@ 

        "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",

        "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="

      },

+     "cosmiconfig": {

+       "version": "5.2.1",

+       "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz",

+       "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==",

+       "requires": {

+         "import-fresh": "^2.0.0",

+         "is-directory": "^0.3.1",

+         "js-yaml": "^3.13.1",

+         "parse-json": "^4.0.0"

+       },

+       "dependencies": {

+         "parse-json": {

+           "version": "4.0.0",

+           "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",

+           "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",

+           "requires": {

+             "error-ex": "^1.3.1",

+             "json-parse-better-errors": "^1.0.1"

+           }

+         }

+       }

+     },

      "create-ecdh": {

        "version": "4.0.3",

        "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
@@ -2721,6 +3592,30 @@ 

          "elliptic": "^6.0.0"

        }

      },

+     "create-emotion": {

+       "version": "9.2.12",

+       "resolved": "https://registry.npmjs.org/create-emotion/-/create-emotion-9.2.12.tgz",

+       "integrity": "sha512-P57uOF9NL2y98Xrbl2OuiDQUZ30GVmASsv5fbsjF4Hlraip2kyAvMm+2PoYUvFFw03Fhgtxk3RqZSm2/qHL9hA==",

+       "requires": {

+         "@emotion/hash": "^0.6.2",

+         "@emotion/memoize": "^0.6.1",

+         "@emotion/stylis": "^0.7.0",

+         "@emotion/unitless": "^0.6.2",

+         "csstype": "^2.5.2",

+         "stylis": "^3.5.0",

+         "stylis-rule-sheet": "^0.0.10"

+       }

+     },

+     "create-emotion-server": {

+       "version": "9.2.12",

+       "resolved": "https://registry.npmjs.org/create-emotion-server/-/create-emotion-server-9.2.12.tgz",

+       "integrity": "sha512-ET+E6A5MkQTEBNDYAnjh6+0cB33qStFXhtflkZNPEaOmvzYlB/xcPnpUk4J7ul3MVa8PCQx2Ei5g2MGY/y1n+g==",

+       "requires": {

+         "html-tokenize": "^2.0.0",

+         "multipipe": "^1.0.2",

+         "through": "^2.3.8"

+       }

+     },

      "create-hash": {

        "version": "1.2.0",

        "resolved": "http://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz",
@@ -2785,6 +3680,24 @@ 

          "randomfill": "^1.0.3"

        }

      },

+     "css": {

+       "version": "2.2.4",

+       "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz",

+       "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==",

+       "requires": {

+         "inherits": "^2.0.3",

+         "source-map": "^0.6.1",

+         "source-map-resolve": "^0.5.2",

+         "urix": "^0.1.0"

+       },

+       "dependencies": {

+         "source-map": {

+           "version": "0.6.1",

+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",

+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="

+         }

+       }

+     },

      "css-element-queries": {

        "version": "1.2.0",

        "resolved": "https://registry.npmjs.org/css-element-queries/-/css-element-queries-1.2.0.tgz",
@@ -2866,6 +3779,19 @@ 

        "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",

        "dev": true

      },

+     "cssom": {

+       "version": "0.3.8",

+       "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz",

+       "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg=="

+     },

+     "cssstyle": {

+       "version": "0.3.1",

+       "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-0.3.1.tgz",

+       "integrity": "sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA==",

+       "requires": {

+         "cssom": "0.3.x"

+       }

+     },

      "csstype": {

        "version": "2.5.8",

        "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.5.8.tgz",
@@ -2898,6 +3824,16 @@ 

          "assert-plus": "^1.0.0"

        }

      },

+     "data-urls": {

+       "version": "1.1.0",

+       "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz",

+       "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==",

+       "requires": {

+         "abab": "^2.0.0",

+         "whatwg-mimetype": "^2.2.0",

+         "whatwg-url": "^7.0.0"

+       }

+     },

      "datatables.net": {

        "version": "1.10.19",

        "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.10.19.tgz",
@@ -2971,14 +3907,12 @@ 

      "decode-uri-component": {

        "version": "0.2.0",

        "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",

-       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",

-       "dev": true

+       "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="

      },

      "deep-is": {

        "version": "0.1.3",

        "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",

-       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",

-       "dev": true

+       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ="

      },

      "define-properties": {

        "version": "1.1.3",
@@ -3081,6 +4015,14 @@ 

          "minimalistic-assert": "^1.0.0"

        }

      },

+     "detect-indent": {

+       "version": "4.0.0",

+       "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz",

+       "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=",

+       "requires": {

+         "repeating": "^2.0.0"

+       }

+     },

      "diffie-hellman": {

        "version": "5.0.3",

        "resolved": "http://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
@@ -3142,6 +4084,14 @@ 

        "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==",

        "dev": true

      },

+     "domexception": {

+       "version": "1.0.1",

+       "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz",

+       "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==",

+       "requires": {

+         "webidl-conversions": "^4.0.2"

+       }

+     },

      "drmonty-datatables-colvis": {

        "version": "1.1.2",

        "resolved": "https://registry.npmjs.org/drmonty-datatables-colvis/-/drmonty-datatables-colvis-1.1.2.tgz",
@@ -3151,6 +4101,14 @@ 

          "jquery": ">=1.7.0"

        }

      },

+     "duplexer2": {

+       "version": "0.1.4",

+       "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz",

+       "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=",

+       "requires": {

+         "readable-stream": "^2.0.2"

+       }

+     },

      "duplexify": {

        "version": "3.6.1",

        "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz",
@@ -3196,8 +4154,24 @@ 

      "emojis-list": {

        "version": "2.1.0",

        "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz",

-       "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=",

-       "dev": true

+       "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k="

+     },

+     "emotion": {

+       "version": "9.2.12",

+       "resolved": "https://registry.npmjs.org/emotion/-/emotion-9.2.12.tgz",

+       "integrity": "sha512-hcx7jppaI8VoXxIWEhxpDW7I+B4kq9RNzQLmsrF6LY8BGKqe2N+gFAQr0EfuFucFlPs2A9HM4+xNj4NeqEWIOQ==",

+       "requires": {

+         "babel-plugin-emotion": "^9.2.11",

+         "create-emotion": "^9.2.12"

+       }

+     },

+     "emotion-server": {

+       "version": "9.2.12",

+       "resolved": "https://registry.npmjs.org/emotion-server/-/emotion-server-9.2.12.tgz",

+       "integrity": "sha512-Bhjdl7eNoIeiAVa2QPP5d+1nP/31SiO/K1P/qI9cdXCydg91NwGYmteqhhge8u7PF8fLGTEVQfcPwj21815eBw==",

+       "requires": {

+         "create-emotion-server": "^9.2.12"

+       }

      },

      "encoding": {

        "version": "0.1.12",
@@ -3293,6 +4267,31 @@ 

        "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",

        "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="

      },

+     "escodegen": {

+       "version": "1.11.1",

+       "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.11.1.tgz",

+       "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==",

+       "requires": {

+         "esprima": "^3.1.3",

+         "estraverse": "^4.2.0",

+         "esutils": "^2.0.2",

+         "optionator": "^0.8.1",

+         "source-map": "~0.6.1"

+       },

+       "dependencies": {

+         "esprima": {

+           "version": "3.1.3",

+           "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",

+           "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM="

+         },

+         "source-map": {

+           "version": "0.6.1",

+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",

+           "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",

+           "optional": true

+         }

+       }

+     },

      "eslint": {

        "version": "5.7.0",

        "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.7.0.tgz",
@@ -3760,6 +4759,11 @@ 

          "acorn-jsx": "^4.1.1"

        }

      },

+     "esprima": {

+       "version": "4.0.1",

+       "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",

+       "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="

+     },

      "esquery": {

        "version": "1.0.1",

        "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
@@ -3781,14 +4785,12 @@ 

      "estraverse": {

        "version": "4.2.0",

        "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",

-       "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",

-       "dev": true

+       "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="

      },

      "esutils": {

        "version": "2.0.2",

        "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",

-       "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",

-       "dev": true

+       "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs="

      },

      "events": {

        "version": "1.1.1",
@@ -3836,6 +4838,11 @@ 

          }

        }

      },

+     "exenv": {

+       "version": "1.2.2",

+       "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz",

+       "integrity": "sha1-KueOhdmJQVhnCwPUe+wfA72Ru50="

+     },

      "expand-brackets": {

        "version": "2.1.4",

        "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
@@ -4005,6 +5012,17 @@ 

        "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",

        "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="

      },

+     "fancy-log": {

+       "version": "1.3.3",

+       "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",

+       "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",

+       "requires": {

+         "ansi-gray": "^0.1.1",

+         "color-support": "^1.1.3",

+         "parse-node-version": "^1.0.0",

+         "time-stamp": "^1.0.0"

+       }

+     },

      "fast-deep-equal": {

        "version": "2.0.1",

        "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
@@ -4018,8 +5036,7 @@ 

      "fast-levenshtein": {

        "version": "2.0.6",

        "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",

-       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",

-       "dev": true

+       "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc="

      },

      "fbjs": {

        "version": "0.8.17",
@@ -4042,6 +5059,35 @@ 

          }

        }

      },

+     "fbjs-scripts": {

+       "version": "0.8.3",

+       "resolved": "https://registry.npmjs.org/fbjs-scripts/-/fbjs-scripts-0.8.3.tgz",

+       "integrity": "sha512-aUJ/uEzMIiBYuj/blLp4sVNkQQ7ZEB/lyplG1IzzOmZ83meiWecrGg5jBo4wWrxXmO4RExdtsSV1QkTjPt2Gag==",

+       "requires": {

+         "ansi-colors": "^1.0.1",

+         "babel-core": "^6.7.2",

+         "babel-preset-fbjs": "^2.1.2",

+         "core-js": "^2.4.1",

+         "cross-spawn": "^5.1.0",

+         "fancy-log": "^1.3.2",

+         "object-assign": "^4.0.1",

+         "plugin-error": "^0.1.2",

+         "semver": "^5.1.0",

+         "through2": "^2.0.0"

+       },

+       "dependencies": {

+         "cross-spawn": {

+           "version": "5.1.0",

+           "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",

+           "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",

+           "requires": {

+             "lru-cache": "^4.0.1",

+             "shebang-command": "^1.2.0",

+             "which": "^1.2.9"

+           }

+         }

+       }

+     },

      "figures": {

        "version": "2.0.0",

        "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
@@ -4061,6 +5107,49 @@ 

          "object-assign": "^4.0.1"

        }

      },

+     "file-loader": {

+       "version": "4.1.0",

+       "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-4.1.0.tgz",

+       "integrity": "sha512-ajDk1nlByoalZAGR4b0H6oD+EGlWnyW1qbSxzaUc7RFiqmn+RbXQQRbTc72jsiUIlVusJ4Et58ltds8ZwTfnAw==",

+       "requires": {

+         "loader-utils": "^1.2.3",

+         "schema-utils": "^2.0.0"

+       },

+       "dependencies": {

+         "big.js": {

+           "version": "5.2.2",

+           "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",

+           "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="

+         },

+         "json5": {

+           "version": "1.0.1",

+           "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",

+           "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",

+           "requires": {

+             "minimist": "^1.2.0"

+           }

+         },

+         "loader-utils": {

+           "version": "1.2.3",

+           "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",

+           "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",

+           "requires": {

+             "big.js": "^5.2.2",

+             "emojis-list": "^2.0.0",

+             "json5": "^1.0.1"

+           }

+         },

+         "schema-utils": {

+           "version": "2.0.1",

+           "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.0.1.tgz",

+           "integrity": "sha512-HJFKJ4JixDpRur06QHwi8uu2kZbng318ahWEKgBjc0ZklcE4FDvmm2wghb448q0IRaABxIESt8vqPFvwgMB80A==",

+           "requires": {

+             "ajv": "^6.1.0",

+             "ajv-keywords": "^3.1.0"

+           }

+         }

+       }

+     },

      "fill-range": {

        "version": "4.0.0",

        "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
@@ -4095,6 +5184,11 @@ 

          "pkg-dir": "^2.0.0"

        }

      },

+     "find-root": {

+       "version": "1.1.0",

+       "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",

+       "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng=="

+     },

      "find-up": {

        "version": "1.1.2",

        "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
@@ -4126,6 +5220,23 @@ 

          "readable-stream": "^2.0.4"

        }

      },

+     "focus-trap": {

+       "version": "3.0.0",

+       "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-3.0.0.tgz",

+       "integrity": "sha512-jTFblf0tLWbleGjj2JZsAKbgtZTdL1uC48L8FcmSDl4c2vDoU4NycN1kgV5vJhuq1mxNFkw7uWZ1JAGlINWvyw==",

+       "requires": {

+         "tabbable": "^3.1.0",

+         "xtend": "^4.0.1"

+       }

+     },

+     "focus-trap-react": {

+       "version": "4.0.1",

+       "resolved": "https://registry.npmjs.org/focus-trap-react/-/focus-trap-react-4.0.1.tgz",

+       "integrity": "sha512-UUZKVEn5cFbF6yUnW7lbXNW0iqN617ShSqYKgxctUvWw1wuylLtyVmC0RmPQNnJ/U+zoKc/djb0tZMs0uN/0QQ==",

+       "requires": {

+         "focus-trap": "^3.0.0"

+       }

+     },

      "font-awesome": {

        "version": "4.7.0",

        "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
@@ -4186,6 +5297,16 @@ 

          "readable-stream": "^2.0.0"

        }

      },

+     "fs-extra": {

+       "version": "6.0.1",

+       "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",

+       "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",

+       "requires": {

+         "graceful-fs": "^4.1.2",

+         "jsonfile": "^4.0.0",

+         "universalify": "^0.1.0"

+       }

+     },

      "fs-write-stream-atomic": {

        "version": "1.0.10",

        "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
@@ -5052,16 +6173,100 @@ 

          "minimalistic-crypto-utils": "^1.0.1"

        }

      },

-     "hoist-non-react-statics": {

-       "version": "2.5.5",

-       "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",

-       "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="

-     },

-     "hosted-git-info": {

-       "version": "2.7.1",

-       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",

-       "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="

-     },

+     "hoist-non-react-statics": {

+       "version": "2.5.5",

+       "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz",

+       "integrity": "sha512-rqcy4pJo55FTTLWt+bU8ukscqHeE/e9KWvsOW2b/a3afxQZhwkQdT1rPPCJ0rYXdj4vNcasY8zHTH+jF/qStxw=="

+     },

+     "home-or-tmp": {

+       "version": "2.0.0",

+       "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",

+       "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",

+       "requires": {

+         "os-homedir": "^1.0.0",

+         "os-tmpdir": "^1.0.1"

+       }

+     },

+     "hosted-git-info": {

+       "version": "2.7.1",

+       "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",

+       "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="

+     },

+     "html-encoding-sniffer": {

+       "version": "1.0.2",

+       "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz",

+       "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==",

+       "requires": {

+         "whatwg-encoding": "^1.0.1"

+       }

+     },

+     "html-tokenize": {

+       "version": "2.0.0",

+       "resolved": "https://registry.npmjs.org/html-tokenize/-/html-tokenize-2.0.0.tgz",

+       "integrity": "sha1-izqaXetHXK5qb5ZxYA0sIKspglE=",

+       "requires": {

+         "buffer-from": "~0.1.1",

+         "inherits": "~2.0.1",

+         "minimist": "~0.0.8",

+         "readable-stream": "~1.0.27-1",

+         "through2": "~0.4.1"

+       },

+       "dependencies": {

+         "buffer-from": {

+           "version": "0.1.2",

+           "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-0.1.2.tgz",

+           "integrity": "sha512-RiWIenusJsmI2KcvqQABB83tLxCByE3upSP8QU3rJDMVFGPWLvPQJt/O1Su9moRWeH7d+Q2HYb68f6+v+tw2vg=="

+         },

+         "isarray": {

+           "version": "0.0.1",

+           "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",

+           "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="

+         },

+         "minimist": {

+           "version": "0.0.10",

+           "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz",

+           "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8="

+         },

+         "object-keys": {

+           "version": "0.4.0",

+           "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",

+           "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY="

+         },

+         "readable-stream": {

+           "version": "1.0.34",

+           "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",

+           "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=",

+           "requires": {

+             "core-util-is": "~1.0.0",

+             "inherits": "~2.0.1",

+             "isarray": "0.0.1",

+             "string_decoder": "~0.10.x"

+           }

+         },

+         "string_decoder": {

+           "version": "0.10.31",

+           "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",

+           "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="

+         },

+         "through2": {

+           "version": "0.4.2",

+           "resolved": "https://registry.npmjs.org/through2/-/through2-0.4.2.tgz",

+           "integrity": "sha1-2/WGYDEVHsg1K7bE22SiKSqEC5s=",

+           "requires": {

+             "readable-stream": "~1.0.17",

+             "xtend": "~2.1.1"

+           }

+         },

+         "xtend": {

+           "version": "2.1.2",

+           "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",

+           "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",

+           "requires": {

+             "object-keys": "~0.4.0"

+           }

+         }

+       }

+     },

      "htmlparser": {

        "version": "1.7.7",

        "resolved": "https://registry.npmjs.org/htmlparser/-/htmlparser-1.7.7.tgz",
@@ -5125,6 +6330,30 @@ 

        "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",

        "dev": true

      },

+     "import-fresh": {

+       "version": "2.0.0",

+       "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",

+       "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",

+       "requires": {

+         "caller-path": "^2.0.0",

+         "resolve-from": "^3.0.0"

+       },

+       "dependencies": {

+         "caller-path": {

+           "version": "2.0.0",

+           "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",

+           "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",

+           "requires": {

+             "caller-callsite": "^2.0.0"

+           }

+         },

+         "resolve-from": {

+           "version": "3.0.0",

+           "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",

+           "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g="

+         }

+       }

+     },

      "import-local": {

        "version": "2.0.0",

        "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz",
@@ -5342,6 +6571,11 @@ 

        "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",

        "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="

      },

+     "ip-regex": {

+       "version": "2.1.0",

+       "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz",

+       "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk="

+     },

      "is-accessor-descriptor": {

        "version": "0.1.6",

        "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
@@ -5441,6 +6675,11 @@ 

          }

        }

      },

+     "is-directory": {

+       "version": "0.3.1",

+       "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",

+       "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE="

+     },

      "is-extendable": {

        "version": "0.1.1",

        "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
@@ -5645,11 +6884,91 @@ 

        "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",

        "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="

      },

+     "js-yaml": {

+       "version": "3.13.1",

+       "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",

+       "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",

+       "requires": {

+         "argparse": "^1.0.7",

+         "esprima": "^4.0.0"

+       }

+     },

      "jsbn": {

        "version": "0.1.1",

        "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",

        "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="

      },

+     "jsdom": {

+       "version": "15.1.1",

+       "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-15.1.1.tgz",

+       "integrity": "sha512-cQZRBB33arrDAeCrAEWn1U3SvrvC8XysBua9Oqg1yWrsY/gYcusloJC3RZJXuY5eehSCmws8f2YeliCqGSkrtQ==",

+       "requires": {

+         "abab": "^2.0.0",

+         "acorn": "^6.1.1",

+         "acorn-globals": "^4.3.2",

+         "array-equal": "^1.0.0",

+         "cssom": "^0.3.6",

+         "cssstyle": "^1.2.2",

+         "data-urls": "^1.1.0",

+         "domexception": "^1.0.1",

+         "escodegen": "^1.11.1",

+         "html-encoding-sniffer": "^1.0.2",

+         "nwsapi": "^2.1.4",

+         "parse5": "5.1.0",

+         "pn": "^1.1.0",

+         "request": "^2.88.0",

+         "request-promise-native": "^1.0.7",

+         "saxes": "^3.1.9",

+         "symbol-tree": "^3.2.2",

+         "tough-cookie": "^3.0.1",

+         "w3c-hr-time": "^1.0.1",

+         "w3c-xmlserializer": "^1.1.2",

+         "webidl-conversions": "^4.0.2",

+         "whatwg-encoding": "^1.0.5",

+         "whatwg-mimetype": "^2.3.0",

+         "whatwg-url": "^7.0.0",

+         "ws": "^7.0.0",

+         "xml-name-validator": "^3.0.0"

+       },

+       "dependencies": {

+         "acorn": {

+           "version": "6.2.1",

+           "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.2.1.tgz",

+           "integrity": "sha512-JD0xT5FCRDNyjDda3Lrg/IxFscp9q4tiYtxE1/nOzlKCk7hIRuYjhq1kCNkbPjMRMZuFq20HNQn1I9k8Oj0E+Q=="

+         },

+         "cssstyle": {

+           "version": "1.4.0",

+           "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz",

+           "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==",

+           "requires": {

+             "cssom": "0.3.x"

+           }

+         },

+         "punycode": {

+           "version": "2.1.1",

+           "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",

+           "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="

+         },

+         "tough-cookie": {

+           "version": "3.0.1",

+           "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-3.0.1.tgz",

+           "integrity": "sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg==",

+           "requires": {

+             "ip-regex": "^2.1.0",

+             "psl": "^1.1.28",

+             "punycode": "^2.1.1"

+           }

+         },

+         "ws": {

+           "version": "7.1.1",

+           "resolved": "https://registry.npmjs.org/ws/-/ws-7.1.1.tgz",

+           "integrity": "sha512-o41D/WmDeca0BqYhsr3nJzQyg9NF5X8l/UdnFNux9cS3lwB+swm8qGWX5rn+aD6xfBU3rGmtHij7g7x6LxFU3A==",

+           "requires": {

+             "async-limiter": "^1.0.0"

+           }

+         }

+       }

+     },

      "jsesc": {

        "version": "2.5.1",

        "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz",
@@ -5659,8 +6978,7 @@ 

      "json-parse-better-errors": {

        "version": "1.0.2",

        "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",

-       "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",

-       "dev": true

+       "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw=="

      },

      "json-schema": {

        "version": "0.2.3",
@@ -5686,8 +7004,15 @@ 

      "json5": {

        "version": "0.5.1",

        "resolved": "http://registry.npmjs.org/json5/-/json5-0.5.1.tgz",

-       "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=",

-       "dev": true

+       "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE="

+     },

+     "jsonfile": {

+       "version": "4.0.0",

+       "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",

+       "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",

+       "requires": {

+         "graceful-fs": "^4.1.6"

+       }

      },

      "jsprim": {

        "version": "1.4.1",
@@ -5732,7 +7057,6 @@ 

        "version": "0.3.0",

        "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",

        "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",

-       "dev": true,

        "requires": {

          "prelude-ls": "~1.1.2",

          "type-check": "~0.3.2"
@@ -5842,6 +7166,11 @@ 

        "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",

        "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="

      },

+     "lodash.sortby": {

+       "version": "4.7.0",

+       "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",

+       "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg="

+     },

      "lodash.tail": {

        "version": "4.1.1",

        "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz",
@@ -5865,6 +7194,11 @@ 

          "signal-exit": "^3.0.0"

        }

      },

+     "lower-case": {

+       "version": "1.1.4",

+       "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz",

+       "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw="

+     },

      "lru-cache": {

        "version": "4.1.3",

        "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
@@ -6000,6 +7334,11 @@ 

          "brorand": "^1.0.1"

        }

      },

+     "mime": {

+       "version": "2.4.4",

+       "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",

+       "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA=="

+     },

      "mime-db": {

        "version": "1.37.0",

        "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
@@ -6151,6 +7490,15 @@ 

        "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",

        "dev": true

      },

+     "multipipe": {

+       "version": "1.0.2",

+       "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-1.0.2.tgz",

+       "integrity": "sha1-zBPv2DPJzamfIk+GhGG44aP9k50=",

+       "requires": {

+         "duplexer2": "^0.1.2",

+         "object-assign": "^4.1.0"

+       }

+     },

      "mute-stream": {

        "version": "0.0.7",

        "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
@@ -6199,6 +7547,14 @@ 

        "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",

        "dev": true

      },

+     "no-case": {

+       "version": "2.3.2",

+       "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz",

+       "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==",

+       "requires": {

+         "lower-case": "^1.1.1"

+       }

+     },

      "node-fetch": {

        "version": "1.7.3",

        "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz",
@@ -6353,6 +7709,11 @@ 

        "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",

        "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="

      },

+     "nwsapi": {

+       "version": "2.1.4",

+       "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.1.4.tgz",

+       "integrity": "sha512-iGfd9Y6SFdTNldEy2L0GUhcarIutFmk+MPWIn9dmj8NMIup03G08uUF2KGbbmv/Ux4RT0VZJoP/sVbWA6d/VIw=="

+     },

      "oauth-sign": {

        "version": "0.9.0",

        "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
@@ -6455,7 +7816,6 @@ 

        "version": "0.8.2",

        "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",

        "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",

-       "dev": true,

        "requires": {

          "deep-is": "~0.1.3",

          "fast-levenshtein": "~2.0.4",
@@ -6578,6 +7938,16 @@ 

          "error-ex": "^1.2.0"

        }

      },

+     "parse-node-version": {

+       "version": "1.0.1",

+       "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",

+       "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA=="

+     },

+     "parse5": {

+       "version": "5.1.0",

+       "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz",

+       "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ=="

+     },

      "pascalcase": {

        "version": "0.1.1",

        "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
@@ -6624,8 +7994,7 @@ 

      "path-parse": {

        "version": "1.0.6",

        "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",

-       "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",

-       "dev": true

+       "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="

      },

      "path-type": {

        "version": "1.1.0",
@@ -6828,12 +8197,58 @@ 

          }

        }

      },

+     "plugin-error": {

+       "version": "0.1.2",

+       "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz",

+       "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=",

+       "requires": {

+         "ansi-cyan": "^0.1.1",

+         "ansi-red": "^0.1.1",

+         "arr-diff": "^1.0.1",

+         "arr-union": "^2.0.1",

+         "extend-shallow": "^1.1.2"

+       },

+       "dependencies": {

+         "arr-diff": {

+           "version": "1.1.0",

+           "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz",

+           "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=",

+           "requires": {

+             "arr-flatten": "^1.0.1",

+             "array-slice": "^0.2.3"

+           }

+         },

+         "arr-union": {

+           "version": "2.1.0",

+           "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz",

+           "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0="

+         },

+         "extend-shallow": {

+           "version": "1.1.4",

+           "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz",

+           "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=",

+           "requires": {

+             "kind-of": "^1.1.0"

+           }

+         },

+         "kind-of": {

+           "version": "1.1.0",

+           "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz",

+           "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ="

+         }

+       }

+     },

      "pluralize": {

        "version": "7.0.0",

        "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",

        "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",

        "dev": true

      },

+     "pn": {

+       "version": "1.1.0",

+       "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz",

+       "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA=="

+     },

      "popper.js": {

        "version": "1.15.0",

        "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz",
@@ -6964,14 +8379,12 @@ 

      "prelude-ls": {

        "version": "1.1.2",

        "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",

-       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",

-       "dev": true

+       "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="

      },

      "private": {

        "version": "0.1.8",

        "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",

-       "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",

-       "dev": true

+       "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg=="

      },

      "process": {

        "version": "0.11.10",
@@ -7486,6 +8899,24 @@ 

          }

        }

      },

+     "relative": {

+       "version": "3.0.2",

+       "resolved": "https://registry.npmjs.org/relative/-/relative-3.0.2.tgz",

+       "integrity": "sha1-Dc2OxUpdNaPBXhBFA9ZTdbWlNn8=",

+       "requires": {

+         "isobject": "^2.0.0"

+       },

+       "dependencies": {

+         "isobject": {

+           "version": "2.1.0",

+           "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",

+           "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",

+           "requires": {

+             "isarray": "1.0.0"

+           }

+         }

+       }

+     },

      "remove-trailing-separator": {

        "version": "1.1.0",

        "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
@@ -7546,6 +8977,24 @@ 

          }

        }

      },

+     "request-promise-core": {

+       "version": "1.1.2",

+       "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz",

+       "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==",

+       "requires": {

+         "lodash": "^4.17.11"

+       }

+     },

+     "request-promise-native": {

+       "version": "1.0.7",

+       "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz",

+       "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==",

+       "requires": {

+         "request-promise-core": "1.1.2",

+         "stealthy-require": "^1.1.1",

+         "tough-cookie": "^2.3.3"

+       }

+     },

      "require-directory": {

        "version": "2.1.1",

        "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -7601,8 +9050,7 @@ 

      "resolve-url": {

        "version": "0.2.1",

        "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",

-       "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",

-       "dev": true

+       "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="

      },

      "restore-cursor": {

        "version": "2.0.0",
@@ -7717,6 +9165,14 @@ 

          }

        }

      },

+     "saxes": {

+       "version": "3.1.11",

+       "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz",

+       "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==",

+       "requires": {

+         "xmlchars": "^2.1.1"

+       }

+     },

      "scheduler": {

        "version": "0.11.3",

        "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.11.3.tgz",
@@ -7848,7 +9304,6 @@ 

        "version": "1.2.0",

        "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",

        "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",

-       "dev": true,

        "requires": {

          "shebang-regex": "^1.0.0"

        }
@@ -7856,8 +9311,7 @@ 

      "shebang-regex": {

        "version": "1.0.0",

        "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",

-       "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",

-       "dev": true

+       "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM="

      },

      "signal-exit": {

        "version": "3.0.2",
@@ -7873,8 +9327,7 @@ 

      "slash": {

        "version": "1.0.0",

        "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz",

-       "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=",

-       "dev": true

+       "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="

      },

      "slice-ansi": {

        "version": "1.0.0",
@@ -8045,7 +9498,6 @@ 

        "version": "0.5.2",

        "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",

        "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",

-       "dev": true,

        "requires": {

          "atob": "^2.1.1",

          "decode-uri-component": "^0.2.0",
@@ -8054,11 +9506,25 @@ 

          "urix": "^0.1.0"

        }

      },

+     "source-map-support": {

+       "version": "0.4.18",

+       "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz",

+       "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==",

+       "requires": {

+         "source-map": "^0.5.6"

+       },

+       "dependencies": {

+         "source-map": {

+           "version": "0.5.7",

+           "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",

+           "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="

+         }

+       }

+     },

      "source-map-url": {

        "version": "0.4.0",

        "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",

-       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",

-       "dev": true

+       "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM="

      },

      "spdx-correct": {

        "version": "3.0.2",
@@ -8100,8 +9566,7 @@ 

      "sprintf-js": {

        "version": "1.0.3",

        "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",

-       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",

-       "dev": true

+       "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="

      },

      "sshpk": {

        "version": "1.16.0",
@@ -8163,6 +9628,11 @@ 

          "readable-stream": "^2.0.1"

        }

      },

+     "stealthy-require": {

+       "version": "1.1.1",

+       "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz",

+       "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks="

+     },

      "stream-browserify": {

        "version": "2.0.1",

        "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz",
@@ -8279,6 +9749,16 @@ 

          }

        }

      },

+     "stylis": {

+       "version": "3.5.4",

+       "resolved": "https://registry.npmjs.org/stylis/-/stylis-3.5.4.tgz",

+       "integrity": "sha512-8/3pSmthWM7lsPBKv7NXkzn2Uc9W7NotcwGNpJaa3k7WMM1XDCA4MgT5k/8BIexd5ydZdboXtU90XH9Ec4Bv/Q=="

+     },

+     "stylis-rule-sheet": {

+       "version": "0.0.10",

+       "resolved": "https://registry.npmjs.org/stylis-rule-sheet/-/stylis-rule-sheet-0.0.10.tgz",

+       "integrity": "sha512-nTbZoaqoBnmK+ptANthb10ZRZOGC+EmTLLUxeYIuHNkEKcmKgXX1XWKkUBT2Ac4es3NybooPe0SmvKdhKJZAuw=="

+     },

      "supports-color": {

        "version": "2.0.0",

        "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
@@ -8289,6 +9769,16 @@ 

        "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",

        "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ=="

      },

+     "symbol-tree": {

+       "version": "3.2.4",

+       "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz",

+       "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="

+     },

+     "tabbable": {

+       "version": "3.1.2",

+       "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-3.1.2.tgz",

+       "integrity": "sha512-wjB6puVXTYO0BSFtCmWQubA/KIn7Xvajw0x0l6eJUudMG/EAiJvIUnyNX6xO4NpGrJ16lbD0eUseB9WxW0vlpQ=="

+     },

      "table": {

        "version": "5.1.0",

        "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz",
@@ -8391,19 +9881,22 @@ 

      "through": {

        "version": "2.3.8",

        "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz",

-       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",

-       "dev": true

+       "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="

      },

      "through2": {

        "version": "2.0.3",

        "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz",

        "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=",

-       "dev": true,

        "requires": {

          "readable-stream": "^2.1.5",

          "xtend": "~4.0.1"

        }

      },

+     "time-stamp": {

+       "version": "1.1.0",

+       "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",

+       "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM="

+     },

      "timers-browserify": {

        "version": "2.0.10",

        "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz",
@@ -8413,6 +9906,14 @@ 

          "setimmediate": "^1.0.4"

        }

      },

+     "tippy.js": {

+       "version": "3.4.1",

+       "resolved": "https://registry.npmjs.org/tippy.js/-/tippy.js-3.4.1.tgz",

+       "integrity": "sha512-ZiyGP9WZyCCcjxKM4G88cm4U1r1ytjeMDGa5FSKPaPzwc/3yZJVZsb1ffcmqUMCpryRp5LNxRNGKLzbs11sb/Q==",

+       "requires": {

+         "popper.js": "^1.14.6"

+       }

+     },

      "tmp": {

        "version": "0.0.33",

        "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
@@ -8431,8 +9932,7 @@ 

      "to-fast-properties": {

        "version": "2.0.0",

        "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",

-       "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",

-       "dev": true

+       "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="

      },

      "to-object-path": {

        "version": "0.3.0",
@@ -8476,6 +9976,24 @@ 

          "repeat-string": "^1.6.1"

        }

      },

+     "touch": {

+       "version": "2.0.2",

+       "resolved": "https://registry.npmjs.org/touch/-/touch-2.0.2.tgz",

+       "integrity": "sha512-qjNtvsFXTRq7IuMLweVgFxmEuQ6gLbRs2jQxL80TtZ31dEKWYIxRXquij6w6VimyDek5hD3PytljHmEtAs2u0A==",

+       "requires": {

+         "nopt": "~1.0.10"

+       },

+       "dependencies": {

+         "nopt": {

+           "version": "1.0.10",

+           "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",

+           "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",

+           "requires": {

+             "abbrev": "1"

+           }

+         }

+       }

+     },

      "tough-cookie": {

        "version": "2.4.3",

        "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz",
@@ -8485,6 +10003,21 @@ 

          "punycode": "^1.4.1"

        }

      },

+     "tr46": {

+       "version": "1.0.1",

+       "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",

+       "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=",

+       "requires": {

+         "punycode": "^2.1.0"

+       },

+       "dependencies": {

+         "punycode": {

+           "version": "2.1.1",

+           "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",

+           "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A=="

+         }

+       }

+     },

      "trim-newlines": {

        "version": "1.0.0",

        "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
@@ -8493,8 +10026,7 @@ 

      "trim-right": {

        "version": "1.0.1",

        "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",

-       "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",

-       "dev": true

+       "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM="

      },

      "true-case-path": {

        "version": "1.0.3",
@@ -8533,7 +10065,6 @@ 

        "version": "0.3.2",

        "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",

        "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",

-       "dev": true,

        "requires": {

          "prelude-ls": "~1.1.2"

        }
@@ -8549,6 +10080,11 @@ 

        "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",

        "dev": true

      },

+     "typescript": {

+       "version": "3.4.5",

+       "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.4.5.tgz",

+       "integrity": "sha512-YycBxUb49UUhdNMU5aJ7z5Ej2XGmaIBL0x34vZ82fn3hGvD+bgrMrVDpatgz2f7YxUMJxMkbWxJZeAvDxVe7Vw=="

+     },

      "ua-parser-js": {

        "version": "0.7.19",

        "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.19.tgz",
@@ -8680,6 +10216,11 @@ 

          "imurmurhash": "^0.1.4"

        }

      },

+     "universalify": {

+       "version": "0.1.2",

+       "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",

+       "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="

+     },

      "unset-value": {

        "version": "1.0.0",

        "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
@@ -8726,6 +10267,11 @@ 

        "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==",

        "dev": true

      },

+     "upper-case": {

+       "version": "1.1.3",

+       "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz",

+       "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg="

+     },

      "uri-js": {

        "version": "4.2.2",

        "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
@@ -8744,8 +10290,7 @@ 

      "urix": {

        "version": "0.1.0",

        "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",

-       "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",

-       "dev": true

+       "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI="

      },

      "url": {

        "version": "0.11.0",
@@ -8765,6 +10310,50 @@ 

          }

        }

      },

+     "url-loader": {

+       "version": "2.1.0",

+       "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-2.1.0.tgz",

+       "integrity": "sha512-kVrp/8VfEm5fUt+fl2E0FQyrpmOYgMEkBsv8+UDP1wFhszECq5JyGF33I7cajlVY90zRZ6MyfgKXngLvHYZX8A==",

+       "requires": {

+         "loader-utils": "^1.2.3",

+         "mime": "^2.4.4",

+         "schema-utils": "^2.0.0"

+       },

+       "dependencies": {

+         "big.js": {

+           "version": "5.2.2",

+           "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",

+           "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="

+         },

+         "json5": {

+           "version": "1.0.1",

+           "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",

+           "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",

+           "requires": {

+             "minimist": "^1.2.0"

+           }

+         },

+         "loader-utils": {

+           "version": "1.2.3",

+           "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz",

+           "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==",

+           "requires": {

+             "big.js": "^5.2.2",

+             "emojis-list": "^2.0.0",

+             "json5": "^1.0.1"

+           }

+         },

+         "schema-utils": {

+           "version": "2.0.1",

+           "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.0.1.tgz",

+           "integrity": "sha512-HJFKJ4JixDpRur06QHwi8uu2kZbng318ahWEKgBjc0ZklcE4FDvmm2wghb448q0IRaABxIESt8vqPFvwgMB80A==",

+           "requires": {

+             "ajv": "^6.1.0",

+             "ajv-keywords": "^3.1.0"

+           }

+         }

+       }

+     },

      "use": {

        "version": "3.1.1",

        "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
@@ -8834,6 +10423,24 @@ 

          "indexof": "0.0.1"

        }

      },

+     "w3c-hr-time": {

+       "version": "1.0.1",

+       "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz",

+       "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=",

+       "requires": {

+         "browser-process-hrtime": "^0.1.2"

+       }

+     },

+     "w3c-xmlserializer": {

+       "version": "1.1.2",

+       "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz",

+       "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==",

+       "requires": {

+         "domexception": "^1.0.1",

+         "webidl-conversions": "^4.0.2",

+         "xml-name-validator": "^3.0.0"

+       }

+     },

      "warning": {

        "version": "3.0.0",

        "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz",
@@ -8853,6 +10460,11 @@ 

          "neo-async": "^2.5.0"

        }

      },

+     "webidl-conversions": {

+       "version": "4.0.2",

+       "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",

+       "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="

+     },

      "webpack": {

        "version": "4.22.0",

        "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.22.0.tgz",
@@ -9168,11 +10780,34 @@ 

          }

        }

      },

+     "whatwg-encoding": {

+       "version": "1.0.5",

+       "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz",

+       "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==",

+       "requires": {

+         "iconv-lite": "0.4.24"

+       }

+     },

      "whatwg-fetch": {

        "version": "3.0.0",

        "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",

        "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="

      },

+     "whatwg-mimetype": {

+       "version": "2.3.0",

+       "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz",

+       "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g=="

+     },

+     "whatwg-url": {

+       "version": "7.0.0",

+       "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.0.0.tgz",

+       "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==",

+       "requires": {

+         "lodash.sortby": "^4.7.0",

+         "tr46": "^1.0.1",

+         "webidl-conversions": "^4.0.2"

+       }

+     },

      "which": {

        "version": "1.3.1",

        "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
@@ -9197,8 +10832,7 @@ 

      "wordwrap": {

        "version": "1.0.0",

        "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",

-       "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",

-       "dev": true

+       "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus="

      },

      "worker-farm": {

        "version": "1.6.0",
@@ -9243,6 +10877,16 @@ 

          "ultron": "~1.1.0"

        }

      },

+     "xml-name-validator": {

+       "version": "3.0.0",

+       "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz",

+       "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw=="

+     },

+     "xmlchars": {

+       "version": "2.1.1",

+       "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.1.1.tgz",

+       "integrity": "sha512-7hew1RPJ1iIuje/Y01bGD/mXokXxegAgVS+e+E0wSi2ILHQkYAH1+JXARwTjZSM4Z4Z+c73aKspEcqj+zPPL/w=="

+     },

      "xregexp": {

        "version": "4.0.0",

        "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz",
@@ -9252,8 +10896,7 @@ 

      "xtend": {

        "version": "4.0.1",

        "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",

-       "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",

-       "dev": true

+       "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="

      },

      "y18n": {

        "version": "3.2.1",

@@ -49,7 +49,9 @@ 

      "webpack-cli": "^3.1.0"

    },

    "dependencies": {

+     "@patternfly/react-core": "^3.58.1",

      "bootstrap": "^4.3.1",

+     "file-loader": "^4.1.0",

      "node-sass": "4.11.0",

      "patternfly": "^3.59.3",

      "patternfly-react": "^2.34.3",
@@ -60,6 +62,7 @@ 

      "react-dom": "16.6.1",

      "react-switch": "^5.0.0",

      "recompose": "0.30.0",

-     "table-resolver": "4.1.1"

+     "table-resolver": "4.1.1",

+     "url-loader": "^2.1.0"

    }

  }

@@ -1,6 +1,6 @@ 

- 389 Directory Server Management <div class="dropdown ds-server-action"> <select class="btn btn-default dropdown ds-dropdown-server"

+ 389 Directory Server Management <div class="dropdown ds-server-action"> <select class="btn btn-default dropdown"

        title="Directory Server Instance List" id="select-server">

-       </select></div><div class="dropdown ds-float-right"><button class="btn btn-primary dropdown-toggle ds-action-btn"

+       </select></div><div class="dropdown ds-float-right"><button class="btn btn-primary ds-action-btn"

         type="button" id="server-list-menu" data-toggle="dropdown">Actions<span class="caret"></span>

        </button><ul class="dropdown-menu pull-right" role="menu">

          <li role=""><a role="menuitem" id="start-server-btn" href="#">Start Instance</a></li>

@@ -8,19 +8,6 @@ 

      margin-bottom: 20px;

  }

  

- .ds-logo-hr {

-     padding: 0 !important;

-     margin-top: -20px !important;

-     line-height: 0;

- }

- 

- .ds-title-hr {

-     margin: 0 !important;

-     padding: 0 !important;

-     margin-right: 10px !important;

-     margin-bottom: 10px !important;

- }

- 

  .ds-container {

      margin: 0;

      padding: 0 !important;
@@ -32,116 +19,20 @@ 

      vertical-align: top !important;

  }

  

- .ds-fixed {

-     padding: 0 !important;

-     padding-bottom: 10px;

-     width: 175px !important;

-     min-width: 175px !important;

-     margin: 2px 2px 2px 0px !important;

-     line-height: 0;

- }

- 

  /* Main nav page index.html */

  .ds-content {

      padding: 0;

      padding-top: 115px;  /* this pushes the content below fixed nav bar */

      padding-bottom: 50px;

      margin-top: 0;

-     margin-left: 25px;

-     margin-right: 10px;

-     margin-bottom: 10px;

- }

- 

- .ds-flex {

-     /* background-color: #f7f7f7; */

-     background-color: white !important;

-     flex-grow: 1;

-     border: 1px groove black;

-     border-style: groove;

-     margin: 6px 2px 2px 10px;

-     margin-left: 0px !important;

      margin-right: 10px;

      margin-bottom: 10px;

-     padding-left: 15px;

-     padding-right: 15px;

-     padding-top: 0px;

-     padding-bottom: 0px;

-     min-height: 500px;

-     line-height: 0;

-     border-radius: 5px;

- }

- 

- .ds-repl-state-good {

-     margin: auto;

-     width: 30px;

-     height: 30px;

-     border-radius: 50%;

-     font-size: 12px;

-     font-weight: bold;

-     color: white;

-     line-height: 1;

-     text-align: center;

-     background-color: #4dac26;

-     border-color: black;

-     padding-top: 8px;

-     align-content: center !important;

-     vertical-align: middle !important;

- }

- 

- .ds-repl-state-bad {

-     margin: auto;

-     width: 30px;

-     height: 30px;

-     border-radius: 50%;

-     font-size: 12px;

-     font-weight: bold;

-     color: white;

-     line-height: 1;

-     text-align: center;

-     background-color: #d01c8b;

-     border-color: black;

-     padding-top: 8px;

-     align-content: center !important;

-     vertical-align: middle !important;

  }

  

  .ds-chart-right {

      margin-left: 65px;

  }

  

- .ds-chart-left {

-     margin-left: 25px;

-     margin-bottom: 9px;

- }

- 

- .ds-chart-center {

-     margin-left: 100px;

-     margin-bottom: 15px;

- }

- 

- .ds-repl-lag-bad {

-     font-weight: bold;

-     color: #7b3294;

- }

- 

- .ds-button-border {

-     line-height: 0;

-     margin: 0px;

-     padding-top: 0px;

-     padding-bottom: 10px;

- }

- 

- .ds-button {

-     height: 30px;

-     width: 160px !important;

-     margin-top: 5px;

-     float: none;

-     left: auto;

-     line-height: normal;

-     overflow: visible;

-     position: static;

- }

- 

  .ds-oc-add-del-btn {

      padding: 0 !important;

      margin: 10px !important;
@@ -159,6 +50,11 @@ 

      margin-right: 9px;

  }

  

+ /* This can probably be removed once we switch to PF React 4 - suffix action button */

+ .ds-action-button {

+     color: white;

+ }

+ 

  .ds-oc-may-buttons {

      padding0: !important;

      padding-left: 3px;
@@ -167,72 +63,6 @@ 

      margin-right: 9px;

  }

  

- .ds-panel {

-     margin: 0px 0px 0px 0px;

-     padding-top: 10px;

-     padding-left: 10px;

-     line-height: 0;

- }

- 

- .ds-dropdown {

-     padding: 0px;

-     padding-left: 5px;

-     height: 35px;

-     width: 300px !important;

-     margin-top: 10px;

-     text-align: left;

-     outline: 0 !important;

- }

- 

- .ds-dropdown-server {

-     margin-top: 0px !important;

-     margin-left: 6px;

-     padding: 0px !important;

-     padding-left: 10px !important;

-     padding-right: 10px !important;

-     height: 30px;

-     text-align: left;

- }

- 

- .ds-passwd-dropdown {

-     height: 35px !important;

-     padding: 0px !important;

-     outline: 0 !important;

-     width: 150px !important;

- }

- 

- .ds-log-dropdown {

-     margin-left: 10px;

-     padding: 0px !important;

-     outline: 0 !important;

-     width: 65px !important;

- }

- 

- .ds-rootdn-passwd-dropdown {

-     margin-left: 30px;

-     margin-top: 5px;

-     padding: 10px;

-     outline: 0 !important;

-     width: 175px;

-     border-radius: 5px;

- }

- 

- .ds-table {

-     padding: 0px;

-     border: 1px solid #909090;

-     line-height: 1;

-     margin-top: 10px !important;

-     margin-bottom: 10px !important;

- }

- 

- .ds-referral-table {

-     padding: 0px !important;

-     margin-top: 10px !important;

-     margin-bottom: 10px !important;

-     border: 1px solid #909090;

-     line-height: 1;

- }

- 

  .ds-refresh {

      background-color: #0088ce;

      background-image: linear-gradient(to bottom,#39a5dc 0,#0088ce 100%);
@@ -282,17 +112,6 @@ 

      width: 525px;

  }

  

- .ds-hr-pwp {

-     display: block;

-     margin-top: 0.5em;

-     margin-bottom: 0.5em;

-     margin-left: 0 !important;

-     border-style: inset;

-     border-width: 1px;

-     padding: 0px !important;

-     width: 835px;

- }

- 

  .ds-tree {

      font-size: 0.5;

      background-color: #f8f8f8;
@@ -303,45 +122,15 @@ 

      min-width: 300px;

      min-height: 400px;

      max-height: 400px;

-     margin: 25px 10px 2px 0px;

+     margin-bottom: 5px;

      overflow: auto;

      padding-top: 5px;

  }

  

- .ds-monitor-tree {

-     font-size: 0.5;

-     background-color: #f8f8f8;

-     border: 1px solid #909090;

-     color: black;

-     line-height: 2;

-     width: 275px;

-     min-width: 275px;

-     min-height: 400px;

-     max-height: 400px;

-     margin: 10px;

-     overflow: auto;

- }

- 

- .ds-treenode {

-     border: 0 !important;

- }

- 

- .ds-treenode ul {

-     border: 0 !important;

- }

- 

- .ds-treenode li {

-     border: 0 !important;

- }

- 

  .ds-split {

      width: 400px;

  }

  

- .ds-modal-header {

-     font-size: 16px;

- }

- 

  .ds-input {

      margin-top: 5px !important;

      padding-right: 5px !important;
@@ -376,40 +165,6 @@ 

      max-width: 65px !important;

  }

  

- .ds-pw-list-input {

-     margin-top: 5px;

-     padding-right: 5px;

-     padding-left: 5px !important;

-     min-width: 150px !important;

-     max-width: 150px !important;

- }

- 

- .ds-ro-input {

-     margin-top: 5px;

-     padding-left: 5px;

-     margin-right: 5px;

-     background-color: #f8f8f8 !important;

- }

- 

- .ds-input-lrg {

-     width: 315px !important;

-     height: 37px !important;

-     margin-top: 5px;

-     padding-right: 10px;

-     height: 37px !important;

- }

- 

- .ds-input-long {

-     width: 500px !important;

- }

- 

- .ds-input-max {

-     margin-left: 10px;

-     margin-bottom: 20px;

-     width: 500px;

-     max-width: 600px;

- }

- 

  .ds-lag-report {

      min-width: 800px !important;

  }
@@ -418,25 +173,12 @@ 

      max-width: 600px !important;

  }

  

- .ds-role-input {

-     height: 30px !important;

-     min-height: 30px;

-     margin-top: 5px;

-     margin-left: 7px;

-     border-radius: 3px;

-     padding-left: 5px !important;

- }

- 

  .ds-history-input {

      margin-top: !important;

      margin-right: 5px;

      margin-left: 40px;

  }

  

- .ds-form-input {

-     margin-left: 10px;

- }

- 

  .ds-divider {

      width: 35px;

  }
@@ -449,49 +191,6 @@ 

      width: 15px;

  }

  

- .ds-div-right {

-     width: 50% !important;

-     margin: 2px 2px 2px 2px;

- }

- 

- .ds-div {

-     width: 50% !important;

-     margin: 2px 2px 2px 2px;

- }

- 

- .ds-button-save {

-     width: 100px;

-     margin: 2px 2px 2px 215px;

- }

- 

- .ds-changelog-button {

-     width: 150px;

-     height: 32px;

-     margin-top: 0px !important;

-     margin-left: 5px;

-     margin-bottom: 4px;

- }

- 

- .ds-ref-button {

-     margin-right: 20px;

-     min-width: 110px !important;

-     max-width: 110px !important;

- }

- 

- .ds-repl-manager {

-     margin-top: 5px;

-     padding: 5px;

-     resize: none;

-     width: 305px;

-     height: 100px;

-     white-space: pre !important;

- }

- 

- .ds-roles {

-     padding: 5px !important;

-     margin-bottom: 5px;

- }

- 

  .ds-repl-managers-list {

      width: 420px;

      height: 200px;
@@ -569,20 +268,6 @@ 

      height: 37px !important;

  }

  

- .ds-agmt-dropdown-button {

-     width: 120px;

- }

- 

- .ds-agmt-button {

-     height: 40px;

-     width: 210px;

- }

- 

- .ds-sasl-button {

-     height: 35px;

-     width: 175px;

- }

- 

  .ds-repl-table {

      background-color: white !important;

      padding: 0px !important;
@@ -623,119 +308,17 @@ 

      line-height: 1;

  }

  

- .ds-table-header th {

-     text-align: center !important;

- }

- 

- .ds-plugin-table {

-     padding: 0px;

-     border: 1px solid #909090;

-     line-height: 1;

-     table-layout: fixed;

-     clear: both;

-     word-wrap: break-word;

-     text-align: center;

- }

- 

- .ds-plugin-header th {

-     width: 100%;

-     text-align: center !important;

- }

- 

- .ds-plugin-panel {

-     background-color: #f7f7f7;

-     flex-grow: 1;

-     border: 1px groove black;

-     border-style: groove;

-     margin: 6px 2px 2px 10px;

-     margin-left: 10px;

-     margin-right: 10px;

-     margin-bottom: 10px;

-     padding-left: 15px;

-     padding-right: 15px;

-     padding-top: 0px;

-     padding-bottom: 0px;

- }

- 

- .ds-monitor-panel {

-     background-color: #f7f7f7;

-     flex-grow: 1;

-     border: 1px groove black;

-     border-style: groove;

-     margin: 6px 2px 2px 10px;

-     margin-left: 10px;

-     margin-right: 10px;

-     margin-bottom: 10px;

-     padding-left: 15px;

-     padding-right: 15px;

-     padding-top: 0px;

-     padding-bottom: 10px;

- }

- 

  .ds-cipher-width {

      max-width: 350px !important;

      min-width: 350px !important;

  }

  

- /*

-  * Popup modal stuff

- */

- 

- /* Extra styles for the cancel button */

- .cancelbtn {

-     padding: 14px 20px;

-     background-color: #f44336;

- }

- 

- /* Float cancel and signup buttons and add an equal width */

- .cancelbtn,

- .savebtn {

-     float: left;

-     width: 50%;

- }

- 

- /* Add padding to container elements */

- .container {

-     width: 650px;

-     padding-left: 10px;

-     padding-right: 10px;

-     padding-bottom: 10px;

- }

- 

- .ds-modal {

-     width: 450px;

- }

- 

  .ds-modal-wide {

      width: 875px !important;

      min-width: 875px !important;

      vertical-align: middle;

  }

  

- .ds-log-panel {

-     padding: 0 18px;

-     max-height: 0 !important;

-     overflow: hidden !important;

-     transition: max-height 0.2s ease-out !important;

-     margin: 2px;

-     display: none;

- }

- 

- .ds-suffix-panel {

-     padding: 0 18px;

-     max-height: 0 !important;

-     overflow: hidden !important;

-     transition: max-height 0.2s ease-out !important;

-     margin: 2px;

-     display: none !important;

- }

- 

- .ds-agmt-wiz-button {

-     height: 40px;

-     width: 630px;

-     font-weight: bold;

- }

- 

  .ds-button-right {

      width: 120px !important;

      margin-top: 5px;
@@ -743,14 +326,6 @@ 

      display: inline-block !important;

  }

  

- .ds-close-button-right {

-     height: 40px;

-     width: 150px !important;

-     margin-top: 5px;

-     margin-bottom: 5px;

-     float: right !important;

- }

- 

  .ds-button-left {

      width: 120px;

      max-width: 150px;
@@ -791,12 +366,6 @@ 

      margin: 5px 5px 5px 10px;

  }

  

- .ds-agmt-schedule-time {

-     width: 75px;

-     padding: 10px;

-     margin: 5px;

- }

- 

  .ds-agmt-schedule-checkbox {

      margin: 8px !important;

      padding: 5px;
@@ -808,13 +377,6 @@ 

      margin-right: 5px !important;

  }

  

- .ds-mgr-checkbox {

-     margin-left: 10px !important;

-     margin-top: 10px !important;

-     margin-bottom: 10px !important;

-     margin-right: 5px !important;

- }

- 

  .ds-server-checkbox {

      margin-top: 15px !important;

      margin-right: 12px !important;
@@ -826,19 +388,10 @@ 

      margin-right: 12px !important;

      padding: 5px;

  }

- .ds-nowrap-td {

-     overflow: hidden !important;

-     white-space: nowrap !important;

- }

- 

- .ds-repl-bind-group-label {

-     width: 85px;

-     margin-bottom: 25px !important;

- }

  

  .ds-config-label {

      margin-top: 10px;

-     width: 200px !important;

+     width: 225px !important;

      margin-bottom: 10px !important;

  }

  
@@ -856,139 +409,51 @@ 

  

  .ds-config-label-med {

      margin-top: 10px;

-     width: 100px !important;

-     margin-bottom: 10px !important;

- }

- 

- .ds-config-label-sm {

-     margin-top: 10px;

-     margin-right: 10px;

+     width: 125px !important;

      margin-bottom: 10px !important;

  }

  

  .ds-config-sub-label {

      margin-top: 10px;

-     width: 200px !important;

+     width: 225px !important;

      margin-bottom: 10px !important;

      padding-left: 20px;

  }

  

- .ds-label-lrg {

-     width: 200px;

-     margin-bottom: 10px !important;

- }

- 

- .ds-label-med {

-     width: 180px;

-     margin-bottom: 10px !important;

- }

- 

- .ds-monitor-label {

-     width: 155px;

-     margin-top: 10px;

-     margin-bottom: 10px !important;

- }

- 

- .ds-monitor-label-med {

-     width: 175px;

-     margin-top: 10px;

-     margin-bottom: 10px !important;

- }

- 

  .ds-label-sm {

-     width: 130px !important;

-     margin-bottom: 10px !important;

- }

- 

- .ds-label-xsm {

-     width: 100px !important;

+     width: 175px !important;

      margin-bottom: 10px !important;

  }

  

  .ds-cleanallruv-label {

-     width: 110px !important;

+     width: 150px !important;

      margin-bottom: 10px !important;

  }

  

- .ds-cache-label {

-     width: 210px !important;

-     margin-left: 20px !important;

- }

- 

- .ds-repl-config-label {

-     width: 210px !important;

-     margin-top: 20px;

-     margin-bottom: 20px;

- }

- 

  .ds-expire-label {

      margin-top: 7px;

      margin-bottom: 7px;

      width: 285px !important;

  }

  

- .ds-pw-list-label {

-     margin-top: 7px !important;

-     margin-bottom: 7px !important;

-     width: 200px !important;

- }

- 

- .ds-passwd-label {

-     width: 300px !important;

- }

- 

  .ds-minage-label {

      padding: 10px;

  }

  

- .ds-history-label {

-     padding: 10px;

-     margin-left: 50px;

- }

- 

- .ds-lockout-label {

-     padding: 10px;

-     margin-left: 20px;

- }

- 

- .ds-server-label {

-     padding-top: 20px;

-     padding-bottom: 10px;

-     padding-right: 60px !important;

- }

- 

  .ds-config-diskmon-label {

      width: 210px !important;

      padding-left: 30px;

      margin-top: 10px;

  }

  

- .ds-config-ndn-label {

-     padding-left: 40px;

-     padding-right: 10px;

- }

- 

  .ds-config-indent-sm-label {

      margin-top: 10px;

      margin-bottom: 10px;

-     width: 175px;

+     width: 195px;

      margin-left: 40px !important;

      padding-right: 10px !important;

  }

  

- .ds-config-indent-med-label {

-     margin-left: 80px !important;

-     padding-right: 10px !important;

- }

- 

- .ds-config-indent-large-label {

-     margin-top: 7px;

-     margin-bottom: 7px;

-     margin-left: 120px !important;

-     padding-right: 10px !important;

-     width: 175px;

- }

- 

  .ds-expired-div {

      padding-left: 30px !important;

  }
@@ -999,38 +464,6 @@ 

      margin-left: 30px !important;

  }

  

- .ds-loglevel-list {

-     width: 400px;

-     margin-top: 10px;

-     margin-left: 20px;

-     min-height: 400px !important;

- }

- 

- .ds-accordion-spacing {

-     margin-bottom: 10px !important;

-     padding-bottom: 10px !important;

- }

- .ds-button-wide {

-     margin: 10px;

-     height: 40px;

-     width: 210px;

- }

- 

- .ds-adj-btn {

-     padding: 0 !important;

-     margin-left: 10px !important;

-     width: 100px !important;

- }

- 

- .ds-task-panel {

-     background-color: white;

-     border: 1px groove black;

-     border-style: groove;

-     margin: 10px;

-     width: 235px;

-     line-height: 0;

- }

- 

  .ds-modal-row {

      margin-left: 20px;

      margin-right: 0px !important;
@@ -1049,18 +482,6 @@ 

      width: 85px;

  }

  

- .ds-chaining-form-list {

-     width: 100%;

- }

- 

- .ds-vlv-sort-list {

-     width: 100%;

- }

- 

- .ds-index-form-list {

-     width: 100%;

- }

- 

  .ds-oc-form-list {

      width: 232px !important;

      max-height: 350px !important;
@@ -1110,6 +531,7 @@ 

      line-height: 1;

      font-family: monospace !important;

      overflow-y: scroll;

+     font-size: 12px;

  }

  

  .ds-conflict {
@@ -1134,18 +556,6 @@ 

      color: #181818;

  }

  

- .jstree-wholerow-hovered {

-     background: linear-gradient(to right, #0a676f 0%, #e5e5e5 100%) !important;

-     opacity: 0.05;

- }

- 

- .jstree-wholerow-clicked {

-     background-color: #0a676f !important;

-     background: linear-gradient(to right, #0a676f 0%, #e5e5e5 100%) !important;

-     opacity: 0.15 !important;

-     transition: opacity 0.25s ease-in-out !important;

- }

- 

  .ds-server-action {

      padding: 0 !important;

      margin-left: 10px;
@@ -1163,6 +573,7 @@ 

  

  .ds-nav {

      padding: 0 !important;

+     background-color: #f3f3f3;

  }

  

  .ds-nav-tab a {
@@ -1178,7 +589,7 @@ 

      float: left;

  }

  

- .ds-footer{

+ .ds-footer {

      background-color: #f5f5f5 !important;

      margin-left: -25px;

      padding: 10px;
@@ -1189,19 +600,6 @@ 

      border-top: 1px solid #e2e2e2 !important;

  }

  

- .modal-footer {

-     background-color: #f5f5f5 !important;

-     padding: 10px;

-     bottom: 0;

-     width: 100%;

-     height: 50px;

-     border-top: .5px solid #e2e2e2 !important;

- }

- 

- .modal-header {

-     border-bottom: .5px solid #e2e2e2 !important;

- }

- 

  .ds-nav-bar {

      position: fixed;

      top: 0;
@@ -1271,9 +669,6 @@ 

      margin-top: 10px;

  }

  

- .ds-margin-top-sm {

-     margin-top: 9px;

- }

  .ds-margin-top-med {

      margin-top: 15px !important;

  }
@@ -1291,11 +686,6 @@ 

      text-align: center;

  }

  

- .ds-accordion-header {

-     margin-bottom: 15px;

-     margin-top: 0px;

- }

- 

  /* wizard accordions are narrower */

  .ds-wiz-accordion {

      margin-top: 20px;
@@ -1341,29 +731,11 @@ 

      margin-right: 15px !important;

  }

  

- .ds-gap {

-     margin-bottom: 40px !important;

- }

- 

  .ds-tree-content {

      margin-left: 25px;

-     margin-top: 25px;

      width: 100%;

  }

  

- .ds-select {

-     height: 30px;

-     outline: 0 !important;

-     padding: 0px !important;

-     padding-left: 5px;

-     padding-right: 10px;

-     text-align: left;

- }

- 

- .ds-center {

-     text-align: center;

- }

- 

  .ds-left-margin {

      margin-left: 10px !important;

  }
@@ -1372,10 +744,6 @@ 

      margin-left: 5px !important;

  }

  

- .ds-table-btn {

-     height: 30px;

- }

- 

  .ds-td {

      padding-left: 10px !important;

      padding-top: 8px !important;
@@ -1401,59 +769,26 @@ 

      text-align: center;

  }

  

- .ds-table-btn {

-     width: 110px;

-     text-align: center;

- }

- 

  .ds-page-content {

      margin-top: 30px !important;

  }

  

- .ds-checkbox-group {

-     margin-top: 10px !important;

- }

- 

- .ds-alert-header {

-     background-color: #f2dede;

- }

- 

- .ds-sec-dropdown {

-     width: 80px;

- }

- 

- .ds-agmt-dropdown {

-     width: 120px;

- }

- 

- .ds-first {

-     margin-top: 10px;

- }

- 

- .ds-save-btn {

-     margin-top: 20px !important;

- }

- 

  .ds-spacing-sm {

      margin-right: 10px;

  }

  

- .ds-spacing-med {

-     margin-right: 20px;

- }

- 

  .navbar-default {

      margin-bottom: 0px;

  }

  

- .ds-center {

-     text-align: center;

- }

- 

  .ds-modal-error {

      color: red;

  }

  

+ .ds-margin-left-sm {

+     margin-left: 30px !important;

+ }

+ 

  .ds-margin-left {

      margin-left: 40px !important;

  }
@@ -1484,10 +819,6 @@ 

      margin-top: -2px;

  }

  

- .ds-suffix-cfg-div {

-     min-width: 500px;

- }

- 

  .ds-loading-spinner {

      position: fixed;

      top: 25%;
@@ -1495,23 +826,10 @@ 

      transform: translate(-25%, -50%);

  }

  

- .ds-loader {

-     font-size: 15px;

- }

- 

  .ds-popup {

      min-width: 350px !important;

  }

  

- .ds-disable-repl-btn {

-     margin-left: 15px !important;

-     max-height: 25px !important;

- }

- 

- .ds-repl-form {

-     max-width: 350px !important;

- }

- 

  .ds-input-auto {

      width: 100%;

      margin-right: 10px;
@@ -1526,15 +844,6 @@ 

      bottom: 10px;

  }

  

- .ds-plugin-button {

-     margin-right: 5px;

-     margin-left: 5px;

- }

- 

- .ds-raise-button {

-     margin-top: -5px !important;

- }

- 

  .ds-plugin-spinner {

      margin-top: 20px;

      margin-bottom: 10px;
@@ -1560,6 +869,10 @@ 

      border-radius: 3px;

  }

  

+ .nav-pills > li.active > a {

+     color: #fff !important;

+ }

+ 

  .ds-plugin-tab-header {

      position: relative;

      top: -16px;
@@ -1601,24 +914,20 @@ 

      border: 1px solid #d1d1d1;

  }

  

- .ds-vlv-label {

-     width: 50px;

- }

- 

  .list-view-pf-view {

      margin-top: 10px;

  }

  

  .ds-fadein {

-   visibility: visible;

-   opacity: 1;

-   transition: opacity 0.5s linear;

+     visibility: visible;

+     opacity: 1;

+     transition: opacity 0.5s linear;

  }

  

  .ds-fadeout {

-   visibility: hidden;

-   opacity: 0;

-   transition: visibility 0s 0s, opacity 1s linear;

+     visibility: hidden;

+     opacity: 0;

+     transition: visibility 0s 0s, opacity 1s linear;

  }

  

  .ds-col-append {
@@ -1690,173 +999,6 @@ 

      width: 100%;

  }

  

- /* Dual List CSS */

- .dual-list-pf-arrows {

-     display: inline-block;

-     margin: auto;

-     position: relative;

-     bottom: 170px;

-     font-size: 23px;

-     color: #bbb;

- }

- @media only screen and (max-width: 600px) {

-     .dual-list-pf-arrows {

-         display: block;

-         position: inherit;

-         margin: 5px 0;

-         padding-left: 79px;

-     }

- }

- 

- .dual-list-pf-arrows span {

-     display: block;

-     margin: 25px;

-     cursor: pointer;

-     transition: color 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);

-     transform: rotate(-90deg);

- }

- @media only screen and (max-width: 600px) {

-     .dual-list-pf-arrows span {

-         display: inline;

-         margin: 0 20px 0 0;

-     }

- }

- 

- .dual-list-pf-arrows span:hover {

-       color: #8b8d8f;

- }

- 

- .dual-list-pf-body {

-     height: 375px;

-     width: 320px;

-     overflow-y: scroll;

-     overflow-x: auto;

-     display: inline-grid;

-     align-content: flex-start;

- }

- 

- .dual-list-pf-body::-webkit-scrollbar {

-     width: 12px;

-     height: 12px;

-     background: #fafafa;

- }

- 

- .dual-list-pf-body::-webkit-scrollbar-thumb {

-     background: #d1d1d1;

-     border-radius: 6px;

-     border: 3px solid transparent;

-     background-clip: content-box;

- }

- 

- .dual-list-pf-body::-webkit-scrollbar-thumb:hover {

-       background: #bbb;

-       border-radius: 6px;

-       border: 3px solid transparent;

-       background-clip: content-box;

- }

- 

- .dual-list-pf-filter {

-     margin-left: 20px;

- }

- 

- .dual-list-pf-filter input {

-     background-color: #f5f5f5;

-     border: 1px solid #ededed;

-     width: 145px;

-     padding: 0 22px 0 5px;

-     margin-top: 3px;

-     margin-bottom: 3px;

- }

- 

- .dual-list-pf-filter .search-icon {

-     position: relative;

-     right: 20px;

-     bottom: 1px;

-     color: #bbb;

- }

- 

- .dual-list-pf-filter ::-webkit-input-placeholder {

-     font-style: italic;

- }

- 

- .dual-list-pf-footer {

-     padding: 10px;

-     border-top: 1px solid #d1d1d1;

- }

- 

- .dual-list-pf-heading {

-     border-bottom: 1px solid #d1d1d1;

- }

- 

- .dual-list-pf-item {

-     padding: 5px 0;

-     margin-bottom: 0;

-     font-weight: 400;

-     transition: background 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94), color 0.3s ease-out;

-     cursor: pointer;

-     white-space: nowrap;

- }

- 

- .dual-list-pf-item input[type='checkbox'] {

-     position: relative;

-     left: 10px;

-     vertical-align: top;

-     cursor: pointer;

- }

- 

- .dual-list-pf-item.selected {

-     background-color: #0088ce;

-     color: white;

- }

- 

- .dual-list-pf-item.disabled {

-     cursor: not-allowed;

-     background: #f5f5f5;

-     color: #8b8d8f;

- }

- 

- .dual-list-pf-item.disabled input[type='checkbox'] {

-     cursor: not-allowed;

- }

- 

- .dual-list-pf-item.child {

-     padding-left: 22px;

- }

- 

- .dual-list-pf-item:hover:not(.selected):not(.disabled) {

-     background-color: #bee1f4;

-     color: inherit;

- }

- 

- .dual-list-pf-item-label {

-     margin-left: 20px;

- }

- 

- .dual-list-pf-main-checkbox {

-     position: relative;

-     left: 10px;

-     vertical-align: text-top;

-     cursor: pointer;

- }

- 

- .dual-list-pf-no-items {

-     margin-top: 30px;

+ th {

      text-align: center;

  }

- 

- .dual-list-pf-selector {

-     display: inline-block;

-     border: 1px solid #d1d1d1;

-     user-select: none;

- }

- 

- .dual-list-pf-sort-icon {

-   cursor: pointer;

- }

- 

- .dropdown-kebab-pf.btn-group {

-     margin-left: 10px;

-     float: right;

-     margin-right: 10px;

- }

- /* End of dual list */

@@ -249,7 +249,7 @@ 

      }

  

      if (server_id != "None") {

-       $("#ds-banner").html("Managing Instance <select class=\"btn btn-default dropdown ds-dropdown-server\" id=\"select-server\"></select>");

+       $("#ds-banner").html("Managing Instance <select class=\"btn btn-default dropdown\" id=\"select-server\"></select>");

      }

  

      // Populate the server instance drop down
@@ -425,11 +425,6 @@ 

      get_and_set_repl_winsync_agmts();

      get_and_set_cleanallruv();

  

-     // Security page

-     // Database page

-     // Plugin page

-     // Monitoring page

- 

      // Initialize the tabs

      $(".ds-tab-list").css( 'color', '#777');

      $("#server-tab").css( 'color', '#228bc0');

@@ -12,7 +12,6 @@ 

    <script src="static/moment.min.js"></script>

    <script src="static/dataTables.datetime-moment.js"></script>

    <script src="static/jquery.timepicker.min.js"></script>

-   <script src="static/jstree.min.js"></script>

    <script src="static/bootstrap.min.js"></script>

    <script src="static/bootpopup.min.js"></script>

    <script src="static/patternfly.min.js"></script>
@@ -35,7 +34,7 @@ 

  <body>

    <div id="reload-page" hidden></div>

    <div id="loading-page" class="ds-center ds-loading-spinner" hidden>

-     <h3 id="loading-msg">Loading Directory Server Configuration...</h3>

+     <h4 id="loading-msg">Loading Directory Server Configuration...</h4>

      <p><span class="spinner spinner-lg spinner-inline"></span></p>

    </div>

    <div id="everything" hidden>
@@ -50,7 +49,7 @@ 

  

              <!-- Server Config navtab -->

              <li class="dropdown ds-nav-tab">

-               <a href="#0" class="dropdown-toggle ds-tab-list" data-toggle="dropdown" id="server-tab">

+               <a href="#0" class="ds-tab-list" data-toggle="dropdown" id="server-tab">

                  Server Settings

                  <b class="caret"></b>

                </a>
@@ -94,7 +93,7 @@ 

  

              <!-- Replication navtab -->

              <li class="dropdown ds-nav-tab">

-               <a href="#0" class="dropdown-toggle ds-tab-list" data-toggle="dropdown" id="replication-tab">

+               <a href="#0" class="ds-tab-list" data-toggle="dropdown" id="replication-tab">

                  Replication

                  <b class="caret"></b>

                </a>
@@ -108,7 +107,7 @@ 

  

              <!-- Schema navtab -->

              <li class="dropdown ds-nav-tab">

-               <a href="#0" class="dropdown-toggle ds-tab-list" data-toggle="dropdown" id="schema-tab">

+               <a href="#0" class="ds-tab-list" data-toggle="dropdown" id="schema-tab">

                  Schema

                  <b class="caret"></b>

                </a>
@@ -242,8 +241,8 @@ 

            </div>

            <div class="modal-body">

              <form class="form-horizontal">

-               <label for="reload-dir" class="ds-config-label" title="The name of the database link.">Schema File Directory</label><input

-                 class="ds-input" type="text" placeholder="Leave empty to use default schema location" id="reload-dir">

+               <label for="reload-dir" class="ds-config-label" title="The name of the database link.">Schema File Directory:</label><input

+                 class="ds-input-auto" size="40" type="text" placeholder="Leave empty to use default schema location" id="reload-dir">

              </form>

              <div id="reload-spinner" class="ds-center" hidden>

                <p></p>
@@ -369,7 +368,7 @@ 

              <button type="button" class="close" data-dismiss="modal" aria-hidden="true" aria-label="Close">

                <span class="pficon pficon-close"></span>

              </button>

-             <h4 class="modal-title" id="create-inst-header">Create New Server Instance</h4>

+             <h4 class="modal-title ds-center" id="create-inst-header">Create New Server Instance</h4>

            </div>

            <div class="modal-body">

              <form class="form-horizontal">
@@ -377,36 +376,36 @@ 

                <div class="ds-inline">

                  <div>

                    <label for="create-inst-serverid" class="ds-config-label" title="The instance name, this is what gets appended to \"slapi-\"">

-                     Instance Name</label><input class="ds-input ds-inst-input" type="text" id="create-inst-serverid" placeholder="Your_Instance_Name" required />

+                     Instance Name</label><input class="ds-input ds-inst-input" size="40" type="text" id="create-inst-serverid" placeholder="Your_Instance_Name" required />

                  </div>

                  <div>

                    <label for="create-inst-port" class="ds-config-label" title="The server port number">

-                     Port</label><input class="ds-input ds-inst-input" type="text" value="389" id="create-inst-port" required />

+                     Port</label><input class="ds-input ds-inst-input" size="40" type="text" value="389" id="create-inst-port" required />

                  </div>

                  <div>

                    <label for="create-inst-secureport" class="ds-config-label" title="The secure port number for TLS connections">

-                     Secure Port</label><input class="ds-input ds-inst-input" type="text" value="636" id="create-inst-secureport" required />

+                     Secure Port</label><input class="ds-input ds-inst-input" size="40" type="text" value="636" id="create-inst-secureport" required />

                  </div>

                  <div>

                    <label for="create-inst-rootdn" class="ds-config-label" title="The DN for the unrestricted  user">

-                     Directory Manager DN</label><input class="ds-input ds-inst-input" autocomplete="username" value="cn=Directory Manager" type="text" id="create-inst-rootdn" required />

+                     Directory Manager DN</label><input class="ds-input ds-inst-input" size="40" autocomplete="username" value="cn=Directory Manager" type="text" id="create-inst-rootdn" required />

                  </div>

                  <div>

                    <label for="rootdn-pw" class="ds-config-label" title="Directory Manager password.">Directory Manager Password</label><input

-                     class="ds-input ds-inst-input" type="password" autocomplete="new-password" placeholder="Enter password" id="rootdn-pw" name="name" required>

+                     class="ds-input ds-inst-input" size="40" type="password" autocomplete="new-password" placeholder="Enter password" id="rootdn-pw" name="name" required>

                  </div>

                  <div>

                    <label for="rootdn-pw-confirm" class="ds-config-label" title="Confirm password">Confirm Password</label><input

-                     class="ds-input ds-inst-input" type="password" autocomplete="new-password" placeholder="Confirm password" id="rootdn-pw-confirm" name="name" required>

+                     class="ds-input ds-inst-input" size="40" type="password" autocomplete="new-password" placeholder="Confirm password" id="rootdn-pw-confirm" name="name" required>

                  </div>

                  <hr>

                  <div>

                    <label for="backend-name" class="ds-config-label" title="The backend name, like 'userroot'">Backend Name (optional)</label><input

-                     class="ds-input ds-inst-input" type="text" id="backend-name">

+                     class="ds-input ds-inst-input" size="40" type="text" id="backend-name">

                  </div>

                  <div>

                    <label for="backend-suffix" class="ds-config-label" title="Database suffix, like 'dc=example,dc=com'">Backend Suffix (optional)</label><input

-                     class="ds-input ds-inst-input" type="text" id="backend-suffix">

+                     class="ds-input ds-inst-input" size="40" type="text" id="backend-suffix">

                  </div>

                  <div>

                    <label for="create-sample-entries" class="ds-config-label" title="Create sample entries in the suffix">Create Sample Entries </label><input
@@ -446,10 +445,8 @@ 

            </div>

            <div class="modal-body">

              <form class="form-horizontal">

-               <div class="ds-inline">

                  <label for="backup-name" title="Enter a directory name for the backup">

-                   Backup Name</label><input class="ds-input ds-left-margin" type="text" id="backup-name"/>

-               </div>

+                   Backup Name:</label><input class="ds-input-auto" type="text" id="backup-name"/>

              </form>

              <div id="backup-spinner" class="ds-center" hidden>

                <p></p>

@@ -30,7 +30,7 @@ 

                      />{" "}

                      {open ? textOpened : textClosed}

                  </Button>

-                 <div className="ds-accordion-panel">{open && children}</div>

+                 <div className="ds-margin-top">{open && children}</div>

              </div>

          );

      }

@@ -592,7 +592,7 @@ 

              spinner =

                  <Row>

                      <div className="ds-modal-spinner">

-                         <Spinner loading inline size="lg" />Exporting database... <font size="1">(You can safely close this window)</font>

+                         <Spinner loading inline size="md" />Exporting database... <font size="2">(You can safely close this window)</font>

                      </div>

                  </Row>;

          }
@@ -681,7 +681,7 @@ 

              spinner =

                  <Row>

                      <div className="ds-modal-spinner">

-                         <Spinner loading inline size="lg" />Backing up databases... <font size="1">(You can safely close this window)</font>

+                         <Spinner loading inline size="md" />Backing up databases... <font size="2">(You can safely close this window)</font>

                      </div>

                  </Row>;

          }
@@ -733,7 +733,7 @@ 

                              bsStyle="primary"

                              onClick={saveHandler}

                          >

-                             Do Backup

+                             Create Backup

                          </Button>

                      </Modal.Footer>

                  </div>
@@ -769,9 +769,9 @@ 

                      <Modal.Body>

                          <Form horizontal autoComplete="off">

                              <div className="ds-modal-spinner">

-                                 <Spinner loading inline size="lg" /> Restoring backup <b>{msg}</b> ...

+                                 <Spinner loading inline size="md" /> Restoring backup <b>{msg}</b> ...

                                  <p />

-                                 <p><font size="1"> (You can safely close this window)</font></p>

+                                 <p><font size="2"> (You can safely close this window)</font></p>

                              </div>

                          </Form>

                      </Modal.Body>
@@ -817,9 +817,9 @@ 

                      <Modal.Body>

                          <Form horizontal autoComplete="off">

                              <div className="ds-modal-spinner">

-                                 <Spinner loading inline size="lg" /> Deleting backup <b>{msg}</b> ...

+                                 <Spinner loading inline size="md" /> Deleting backup <b>{msg}</b> ...

                                  <p />

-                                 <p><font size="1"> (You can safely close this window)</font></p>

+                                 <p><font size="2"> (You can safely close this window)</font></p>

                              </div>

                          </Form>

                      </Modal.Body>
@@ -865,9 +865,9 @@ 

                      <Modal.Body>

                          <Form horizontal autoComplete="off">

                              <div className="ds-modal-spinner">

-                                 <Spinner loading inline size="lg" /> Importing LDIF <b>{msg}</b> ...

+                                 <Spinner loading inline size="md" /> Importing LDIF <b>{msg}</b> ...

                                  <p />

-                                 <p><font size="1"> (You can safely close this window)</font></p>

+                                 <p><font size="2"> (You can safely close this window)</font></p>

                              </div>

                          </Form>

                      </Modal.Body>
@@ -913,9 +913,9 @@ 

                      <Modal.Body>

                          <Form horizontal autoComplete="off">

                              <div className="ds-modal-spinner">

-                                 <Spinner loading inline size="lg" /> Deleting LDIF file <b>{msg}</b> ...

+                                 <Spinner loading inline size="md" /> Deleting LDIF file <b>{msg}</b> ...

                                  <p />

-                                 <p><font size="1"> (You can safely close this window)</font></p>

+                                 <p><font size="2"> (You can safely close this window)</font></p>

                              </div>

                          </Form>

                      </Modal.Body>

@@ -454,7 +454,7 @@ 

          );

  

          return (

-             <div className="container-fluid" id="db-global-page">

+             <div id="db-global-page">

                  <h3 className="ds-config-header">Database Chaining Settings</h3>

                  <hr />

                  <div className="ds-container">
@@ -549,7 +549,7 @@ 

                          </div>

                      </div>

                  </div>

-                 <div className="ds-save-btn">

+                 <div className="ds-margin-top-lg">

                      <button className="btn btn-primary save-button" onClick={this.save_chaining_config}>Save Default Settings</button>

                  </div>

  
@@ -940,7 +940,7 @@ 

              <div className="container-fluid">

                  <Row>

                      <Col sm={8} className="ds-word-wrap">

-                         <ControlLabel className="ds-suffix-header"><Icon type="fa" name="link" /> {this.props.suffix} (<i>{this.props.bename}</i>)</ControlLabel>

+                         <ControlLabel className="ds-suffix-header"><Icon type="fa" name="link" /> <b>{this.props.suffix}</b> (<i>{this.props.bename}</i>)</ControlLabel>

                      </Col>

                      <Col sm={2}>

                          <Button
@@ -955,10 +955,10 @@ 

                  <hr />

                  <Form horizontal autoComplete="off">

                      <Row title="The LDAP URL for the remote server.  Add additional failure server URLs by separating them with a space. (nsfarmserverurl)">

-                         <Col sm={3}>

-                             <ControlLabel>Remote Server LDAP URL(s)</ControlLabel>

+                         <Col sm={4}>

+                             <ControlLabel>Remote Server LDAP URL</ControlLabel>

                          </Col>

-                         <Col sm={7}>

+                         <Col sm={8}>

                              <FormControl

                                  type="text"

                                  id="nsfarmserverurl"
@@ -970,10 +970,10 @@ 

                      </Row>

                      <p />

                      <Row title="The distinguished name (DN) of the entry to authenticate to the remote server. (nsmultiplexorbinddn)">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Remote Server Bind DN</ControlLabel>

                          </Col>

-                         <Col sm={7}>

+                         <Col sm={8}>

                              <FormControl

                                  type="text"

                                  id="nsmultiplexorbinddn"
@@ -985,10 +985,10 @@ 

                      </Row>

                      <p />

                      <Row title="The password for the authenticating entry. (nsmultiplexorcredentials)">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Bind DN Password</ControlLabel>

                          </Col>

-                         <Col sm={7}>

+                         <Col sm={8}>

                              <FormControl

                                  type="password"

                                  id="nsmultiplexorcredentials"
@@ -1000,10 +1000,10 @@ 

                      </Row>

                      <p />

                      <Row title="Confirm the password for the authenticating entry. (nsmultiplexorcredentials)">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Confirm Password</ControlLabel>

                          </Col>

-                         <Col sm={7}>

+                         <Col sm={8}>

                              <FormControl

                                  type="password"

                                  id="nsmultiplexorcredentials_confirm"
@@ -1014,11 +1014,11 @@ 

                          </Col>

                      </Row>

                      <p />

-                     <Row title="THe authentication mechanism.  Simple (user name and password), SASL/DIGEST-MD5, or SASL>GSSAPI. (nsbindmechanism)">

-                         <Col sm={3}>

+                     <Row title="The authentication mechanism.  Simple (user name and password), SASL/DIGEST-MD5, or SASL>GSSAPI. (nsbindmechanism)">

+                         <Col sm={4}>

                              <ControlLabel>Bind Mechanism</ControlLabel>

                          </Col>

-                         <Col sm={7}>

+                         <Col sm={8}>

                              <select value={this.state.nsbindmechanism}

                                  className="btn btn-default dropdown ds-dblink-dropdown"

                                  onChange={this.handleChange}
@@ -1040,58 +1040,52 @@ 

                  <p />

  

                  <CustomCollapse>

-                     <div className="ds-accordion-panel">

+                     <div className="ds-margin-top">

                          <div className="ds-margin-left">

-                             <div className="ds-container">

-                                 <div className="ds-inline">

-                                     <div>

-                                         <label htmlFor="sizelimit" className="ds-config-label" title="The size limit of entries returned over a database link (nsslapd-sizelimit).">

-                                             Size Limit</label><input onChange={this.handleChange} defaultValue={this.state.sizelimit} className="ds-input" type="text" id="sizelimit" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="timelimit" className="ds-config-label" title="The time limit of an operation over a database link (nsslapd-timelimit).">

-                                             Time Limit</label><input onChange={this.handleChange} defaultValue={this.state.timelimit} className="ds-input" type="text" id="timelimit" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="bindconnlimit" className="ds-config-label" title="The maximum number of TCP connections the database link establishes with the remote server.  (nsbindconnectionslimit).">

-                                             Max TCP Connections</label><input onChange={this.handleChange} defaultValue={this.state.bindconnlimit} className="ds-input" type="text" id="bindconnlimit" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="opconnlimit" className="ds-config-label" title="The maximum number of connections allowed over the database link.  (nsoperationconnectionslimit).">

-                                             Max LDAP Connections</label><input onChange={this.handleChange} defaultValue={this.state.opconnlimit} className="ds-input" type="text" id="opconnlimit" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="concurrbindlimit" className="ds-config-label" title="The maximum number of concurrent bind operations per TCP connection. (nsconcurrentbindlimit).">

-                                             Max Binds Per Connection</label><input onChange={this.handleChange} defaultValue={this.state.concurrbindlimit} className="ds-input" type="text" id="concurrbindlimit" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="bindtimeout" className="ds-config-label" title="The amount of time before the bind attempt times out. (nsbindtimeout).">

-                                             Bind Timeout</label><input onChange={this.handleChange} defaultValue={this.state.bindtimeout} className="ds-input" type="text" id="bindtimeout" size="15" />

-                                     </div>

-                                 </div>

-                                 <div className="ds-divider" />

-                                 <div className="ds-inline">

-                                     <div>

-                                         <label htmlFor="bindretrylimit" className="ds-config-label" title="The number of times the database link tries to bind with the remote server after a connection failure. (nsbindretrylimit).">

-                                             Bind Retry Limit</label><input onChange={this.handleChange} defaultValue={this.state.bindretrylimit} className="ds-input" type="text" id="bindretrylimit" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="concurroplimit" className="ds-config-label" title="The maximum number of operations per connections. (nsconcurrentoperationslimit).">

-                                             Max Operations Per Connection</label><input onChange={this.handleChange} defaultValue={this.state.concurroplimit} className="ds-input" type="text" id="concurroplimit" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="connlifetime" className="ds-config-label" title="The life of a database link connection to the remote server.  0 is unlimited  (nsconnectionlife).">

-                                             Connection Lifetime (in seconds)</label><input onChange={this.handleChange} defaultValue={this.state.connlifetime} className="ds-input" type="text" id="connlifetime" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="searchcheckinterval" className="ds-config-label" title="The number of seconds that pass before the server checks for abandoned operations.  (nsabandonedsearchcheckinterval).">

-                                             Abandoned Op Check Interval</label><input onChange={this.handleChange} defaultValue={this.state.searchcheckinterval} className="ds-input" type="text" id="searchcheckinterval" size="15" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="hoplimit" className="ds-config-label" title="The maximum number of times a request can be forwarded from one database link to another.  (nshoplimit).">

-                                             Database Link Hop Limit</label><input onChange={this.handleChange} defaultValue={this.state.hoplimit} className="ds-input" type="text" id="hoplimit" size="15" />

-                                     </div>

-                                 </div>

+                             <div>

+                                 <label htmlFor="sizelimit" className="ds-config-label" title="The size limit of entries returned over a database link (nsslapd-sizelimit).">

+                                     Size Limit</label><input onChange={this.handleChange} defaultValue={this.state.sizelimit} className="ds-input" type="text" id="sizelimit" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="timelimit" className="ds-config-label" title="The time limit of an operation over a database link (nsslapd-timelimit).">

+                                     Time Limit</label><input onChange={this.handleChange} defaultValue={this.state.timelimit} className="ds-input" type="text" id="timelimit" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="bindconnlimit" className="ds-config-label" title="The maximum number of TCP connections the database link establishes with the remote server.  (nsbindconnectionslimit).">

+                                     Max TCP Connections</label><input onChange={this.handleChange} defaultValue={this.state.bindconnlimit} className="ds-input" type="text" id="bindconnlimit" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="opconnlimit" className="ds-config-label" title="The maximum number of connections allowed over the database link.  (nsoperationconnectionslimit).">

+                                     Max LDAP Connections</label><input onChange={this.handleChange} defaultValue={this.state.opconnlimit} className="ds-input" type="text" id="opconnlimit" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="concurrbindlimit" className="ds-config-label" title="The maximum number of concurrent bind operations per TCP connection. (nsconcurrentbindlimit).">

+                                     Max Binds Per Connection</label><input onChange={this.handleChange} defaultValue={this.state.concurrbindlimit} className="ds-input" type="text" id="concurrbindlimit" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="bindtimeout" className="ds-config-label" title="The amount of time before the bind attempt times out. (nsbindtimeout).">

+                                     Bind Timeout</label><input onChange={this.handleChange} defaultValue={this.state.bindtimeout} className="ds-input" type="text" id="bindtimeout" size="15" />

+                             </div>

+ 

+                             <div>

+                                 <label htmlFor="bindretrylimit" className="ds-config-label" title="The number of times the database link tries to bind with the remote server after a connection failure. (nsbindretrylimit).">

+                                     Bind Retry Limit</label><input onChange={this.handleChange} defaultValue={this.state.bindretrylimit} className="ds-input" type="text" id="bindretrylimit" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="concurroplimit" className="ds-config-label" title="The maximum number of operations per connections. (nsconcurrentoperationslimit).">

+                                     Max Operations Per Connection</label><input onChange={this.handleChange} defaultValue={this.state.concurroplimit} className="ds-input" type="text" id="concurroplimit" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="connlifetime" className="ds-config-label" title="The life of a database link connection to the remote server.  0 is unlimited  (nsconnectionlife).">

+                                     Connection Lifetime (in seconds)</label><input onChange={this.handleChange} defaultValue={this.state.connlifetime} className="ds-input" type="text" id="connlifetime" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="searchcheckinterval" className="ds-config-label" title="The number of seconds that pass before the server checks for abandoned operations.  (nsabandonedsearchcheckinterval).">

+                                     Abandoned Op Check Interval</label><input onChange={this.handleChange} defaultValue={this.state.searchcheckinterval} className="ds-input" type="text" id="searchcheckinterval" size="15" />

+                             </div>

+                             <div>

+                                 <label htmlFor="hoplimit" className="ds-config-label" title="The maximum number of times a request can be forwarded from one database link to another.  (nshoplimit).">

+                                     Database Link Hop Limit</label><input onChange={this.handleChange} defaultValue={this.state.hoplimit} className="ds-input" type="text" id="hoplimit" size="15" />

                              </div>

                              <p />

                              <div>
@@ -1107,7 +1101,7 @@ 

                      </div>

                      <hr />

                  </CustomCollapse>

-                 <div className="ds-save-btn">

+                 <div className="ds-margin-top-lg">

                      <button onClick={this.saveLink} className="btn btn-primary">Save Configuration</button>

                  </div>

                  <ConfirmPopup
@@ -1161,7 +1155,7 @@ 

                          <Form horizontal autoComplete="off">

                              <label className="ds-config-label" htmlFor="avail-chaining-oid-list" title="A list of LDAP control OIDs to be forwarded through chaining">Available LDAP Controls</label>

                              <div>

-                                 <select id="avail-chaining-oid-list" onChange={handleChange} className="ds-chaining-form-list" size="10" multiple>

+                                 <select id="avail-chaining-oid-list" onChange={handleChange} className="ds-width-auto" size="10" multiple>

                                      {oids}

                                  </select>

                              </div>
@@ -1222,7 +1216,7 @@ 

                          <Form horizontal autoComplete="off">

                              <label className="ds-config-label" htmlFor="avail-chaining-comp-list" title="A list of LDAP control OIDs to be forwarded through chaining">Available Components</label>

                              <div>

-                                 <select id="avail-chaining-comp-list" onChange={handleChange} className="ds-chaining-form-list" size="10" multiple>

+                                 <select id="avail-chaining-comp-list" onChange={handleChange} className="ds-width-auto" size="10" multiple>

                                      {comps}

                                  </select>

                              </div>

@@ -3,6 +3,9 @@ 

  import CustomCollapse from "../customCollapse.jsx";

  import { log_cmd } from "../tools.jsx";

  import {

+     Row,

+     Col,

+     ControlLabel,

      Spinner,

      noop

  } from "patternfly-react";
@@ -264,50 +267,89 @@ 

          }

  

          return (

-             <div className="container-fluid" id="db-global-page">

+             <div id="db-global-page">

                  {spinner}

                  <div className={this.state.loading ? 'ds-fadeout' : 'ds-fadein'}>

                      <h3 className="ds-config-header">Global Database Configuration</h3>

                      <hr />

-                     <div className="ds-container">

-                         <div className="ds-inline">

-                             <div>

-                                 <label htmlFor="nsslapd-lookthrough-limit" className="ds-config-label"

-                                     title="The maximum number of entries that the Directory Server will check when examining candidate entries in response to a search request (nsslapd-lookthrough-limit).">

-                                     Database Look Though Limit</label><input id="looklimit" value={this.state.looklimit}

-                                     onChange={this.handleChange} className="ds-input" type="text" size="15" />

-                             </div>

-                             <div>

-                                 <label htmlFor="nsslapd-idlistscanlimit" className="ds-config-label"

-                                     title="The number of entry IDs that are searched during a search operation (nsslapd-idlistscanlimit).">

-                                     ID List Scan Limit</label><input id="idscanlimit" value={this.state.idscanlimit}

-                                     onChange={this.handleChange} className="ds-input" type="text"size="15" />

-                             </div>

-                         </div>

-                         <div className="ds-divider" />

-                         <div className="ds-inline">

-                             <div>

-                                 <label htmlFor="nsslapd-pagedlookthroughlimit" className="ds-config-label"

-                                     title="The maximum number of entries that the Directory Server will check when examining candidate entries for a search which uses the simple paged results control (nsslapd-pagedlookthroughlimit).">

-                                     Paged Search Look Through Limit</label><input id="pagelooklimit" value={this.state.pagelooklimit}

-                                     onChange={this.handleChange} className="ds-input" type="text" size="15" />

-                             </div>

-                             <div>

-                                 <label htmlFor="nsslapd-pagedidlistscanlimit" className="ds-config-label"

-                                     title="The number of entry IDs that are searched, specifically, for a search operation using the simple paged results control (nsslapd-pagedidlistscanlimit).">

-                                     Paged Search ID List Scan Limit</label><input id="pagescanlimit"

-                                     value={this.state.pagescanlimit} onChange={this.handleChange}

-                                     className="ds-input" type="text" size="15" />

-                             </div>

-                             <div>

-                                 <label htmlFor="nsslapd-rangelookthroughlimit" className="ds-config-label"

-                                     title="The maximum number of entries that the Directory Server will check when examining candidate entries in response to a range search request (nsslapd-rangelookthroughlimit).">

-                                     Range Search Look Through Limit</label><input id="rangelooklimit"

-                                     value={this.state.rangelooklimit} onChange={this.handleChange}

-                                     className="ds-input" type="text" size="15" />

-                             </div>

-                         </div>

+                     <div>

+                         <Row

+                             title="The maximum number of entries that the Directory Server will check when examining candidate entries in response to a search request (nsslapd-lookthrough-limit)."

+                             className="ds-margin-top"

+                         >

+                             <Col componentClass={ControlLabel} sm={4}>

+                                 Database Look Though Limit

+                             </Col>

+                             <Col sm={8}>

+                                 <input

+                                     id="looklimit"

+                                     value={this.state.looklimit}

+                                     onChange={this.handleChange} className="ds-input-auto" type="text"

+                                 />

+                             </Col>

+                         </Row>

+                         <Row

+                             title="The number of entry IDs that are searched during a search operation (nsslapd-idlistscanlimit)."

+                             className="ds-margin-top"

+                         >

+                             <Col componentClass={ControlLabel} sm={4}>

+                                 ID List Scan Limit

+                             </Col>

+                             <Col sm={8}>

+                                 <input

+                                     id="idscanlimit"

+                                     value={this.state.idscanlimit}

+                                     onChange={this.handleChange} className="ds-input-auto" type="text"

+                                 />

+                             </Col>

+                         </Row>

+                         <Row

+                             title="The maximum number of entries that the Directory Server will check when examining candidate entries for a search which uses the simple paged results control (nsslapd-pagedlookthroughlimit)."

+                             className="ds-margin-top"

+                         >

+                             <Col componentClass={ControlLabel} sm={4}>

+                                 Paged Search Look Through Limit

+                             </Col>

+                             <Col sm={8}>

+                                 <input

+                                     id="pagelooklimit"

+                                     value={this.state.pagelooklimit}

+                                     onChange={this.handleChange} className="ds-input-auto" type="text"

+                                 />

+                             </Col>

+                         </Row>

+                         <Row

+                             title="The number of entry IDs that are searched, specifically, for a search operation using the simple paged results control (nsslapd-pagedidlistscanlimit)."

+                             className="ds-margin-top"

+                         >

+                             <Col componentClass={ControlLabel} sm={4}>

+                                 Paged Search ID List Scan Limit

+                             </Col>

+                             <Col sm={8}>

+                                 <input

+                                     id="pagescanlimit"

+                                     value={this.state.pagescanlimit}

+                                     onChange={this.handleChange} className="ds-input-auto" type="text"

+                                 />

+                             </Col>

+                         </Row>

+                         <Row

+                             title="The maximum number of entries that the Directory Server will check when examining candidate entries in response to a range search request (nsslapd-rangelookthroughlimit)."

+                             className="ds-margin-top"

+                         >

+                             <Col componentClass={ControlLabel} sm={4}>

+                                 Range Search Look Through Limit

+                             </Col>

+                             <Col sm={8}>

+                                 <input

+                                     id="rangelooklimit"

+                                     value={this.state.rangelooklimit}

+                                     onChange={this.handleChange} className="ds-input-auto" type="text"

+                                 />

+                             </Col>

+                         </Row>

                      </div>

+ 

                      <div className="ds-container">

                          <div>

                              <h4 className="ds-sub-header">Database Cache Settings</h4>
@@ -333,46 +375,56 @@ 

                          </div>

                      </div>

                      <CustomCollapse>

-                         <div className="ds-accordion-panel">

-                             <div className="ds-container">

-                                 <div className="ds-inline">

-                                     <div>

-                                         <label htmlFor="nsslapd-db-logdirectory" className="ds-config-label"

-                                             title="Database Transaction Log Location (nsslapd-db-logdirectory).">

-                                             Transaction Logs Directory</label><input id="txnlogdir" value={this.state.txnlogdir}

-                                             onChange={this.handleChange} className="ds-input" type="text" size="25" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="nsslapd-db-home-directory" className="ds-config-label"

-                                         title="Location for database memory mapped files.  You must specify a subdirectory of a tempfs type filesystem (nsslapd-db-home-directory).">

-                                             Database Home Directory</label><input id="dbhomedir" value={this.state.dbhomedir}

-                                             onChange={this.handleChange} className="ds-input" type="text" size="25" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="nsslapd-db-locks" className="ds-config-label"

-                                             title="The number of database locks (nsslapd-db-locks).">

-                                             Database Locks</label><input id="dblocks" value={this.state.dblocks}

-                                             onChange={this.handleChange} className="ds-input" type="text" size="25" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="nsslapd-db-checkpoint-interval" className="ds-config-label"

-                                             title="Amount of time in seconds after which the Directory Server sends a checkpoint entry to the database transaction log (nsslapd-db-checkpoint-interval).">

-                                             Database Checkpoint Interval</label><input id="chxpoint" value={this.state.chxpoint}

-                                             onChange={this.handleChange} className="ds-input" type="text" size="25" />

-                                     </div>

-                                     <div>

-                                         <label htmlFor="nsslapd-db-compactdb-interval" className="ds-config-label"

-                                             title="The interval in seconds when the database is compacted (nsslapd-db-compactdb-interval).">

-                                             Database Compact Interval</label><input id="compactinterval" value={this.state.compactinterval}

-                                             onChange={this.handleChange}className="ds-input" type="text" size="25" />

-                                     </div>

+                         <div className="ds-margin-top">

+                             <div className="ds-margin-left">

+                                 <div>

+                                     <Row className="ds-margin-top" title="Database Transaction Log Location (nsslapd-db-logdirectory).">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Transaction Logs Directory

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input id="txnlogdir" value={this.state.txnlogdir} onChange={this.handleChange} className="ds-input-auto" type="text" />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top" title="Location for database memory mapped files.  You must specify a subdirectory of a tempfs type filesystem (nsslapd-db-home-directory).">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Database Home Directory

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input id="dbhomedir" value={this.state.dbhomedir} onChange={this.handleChange} className="ds-input-auto" type="text" />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top" title="The number of database locks (nsslapd-db-locks).">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Database Locks

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input id="dblocks" value={this.state.dblocks} onChange={this.handleChange} className="ds-input-auto" type="text" />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top" title="Amount of time in seconds after which the Directory Server sends a checkpoint entry to the database transaction log (nsslapd-db-checkpoint-interval).">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Database Checkpoint Interval

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input id="chxpoint" value={this.state.chxpoint} onChange={this.handleChange} className="ds-input-auto" type="text" />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top" title="The interval in seconds when the database is compacted (nsslapd-db-compactdb-interval).">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Database Compact Interval

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input id="compactinterval" value={this.state.compactinterval} onChange={this.handleChange} className="ds-input-auto" type="text" />

+                                         </Col>

+                                     </Row>

                                  </div>

                              </div>

                              <p />

                          </div>

                      </CustomCollapse>

                      <p />

-                     <div className="ds-save-btn">

+                     <div className="ds-margin-top-lg">

                          <button className="btn btn-primary save-button"

                              onClick={this.save_db_config}>Save Configuration</button>

                      </div>

@@ -60,6 +60,7 @@ 

                                  return [

                                      <td key={rowData.name[0]}>

                                          <Button

+                                             bsStyle="primary"

                                              onClick={() => {

                                                  this.props.loadModalHandler(rowData);

                                              }}
@@ -228,7 +229,8 @@ 

                                  return [

                                      <td key={rowData.name[0]}>

                                          <DropdownButton id={rowData.name[0]}

-                                             bsStyle="default" title="Actions">

+                                             className="ds-action-button"

+                                             bsStyle="primary" title="Actions">

                                              <MenuItem eventKey="1" onClick={() => {

                                                  this.props.editIndex(rowData);

                                              }}
@@ -331,6 +333,7 @@ 

                                  return [

                                      <td key={rowData.name[0]}>

                                          <Button

+                                             bsStyle="primary"

                                              onClick={() => {

                                                  this.props.loadModalHandler(rowData);

                                              }}
@@ -680,6 +683,7 @@ 

                                  return [

                                      <td key={rowData.name[0]}>

                                          <DropdownButton id={rowData.name[0]}

+                                             className="ds-action-button"

                                              bsStyle="primary" title="Actions">

                                              <MenuItem eventKey="1" onClick={() => {

                                                  this.props.confirmImport(rowData);
@@ -855,6 +859,7 @@ 

                                  return [

                                      <td key={rowData.name[0]}>

                                          <DropdownButton id={rowData.name[0]}

+                                             className="ds-action-button"

                                              bsStyle="primary" title="Actions">

                                              <MenuItem eventKey="1" onClick={() => {

                                                  this.props.confirmRestore(rowData);

@@ -631,7 +631,7 @@ 

                      </Modal.Header>

                      <Modal.Body>

                          <Form horizontal autoComplete="off">

-                             <label className="ds-config-label" htmlFor="ds-index-form-list" title="Select an attribute to index">Select An Attribute</label>

+                             <label className="ds-config-label" htmlFor="indexAttributeName" title="Select an attribute to index">Select An Attribute</label>

                              <Typeahead

                                  id="indexAttributeName"

                                  onChange={values => {

@@ -28,6 +28,15 @@ 

      TabContainer,

      noop

  } from "patternfly-react";

+ 

+ // PR React 4 example

+ // import {

+ //    Dropdown,

+ //    DropdownToggle,

+ //    DropdownItem,

+ //    DropdownSeparator,

+ // } from "@patternfly/react-core";

+ 

  import PropTypes from "prop-types";

  import "../../css/ds.css";

  
@@ -686,14 +695,14 @@ 

              </span>;

  

          return (

-             <div className="container-fluid" id="suffix-page">

+             <div id="suffix-page">

                  <Row>

                      <Col sm={10} className="ds-word-wrap">

-                         <ControlLabel className="ds-suffix-header"><Icon type="fa" name={suffixIcon} /> {this.props.suffix} (<i>{this.props.bename}</i>)</ControlLabel>

+                         <ControlLabel className="ds-suffix-header"><Icon type="fa" name={suffixIcon} /> <b>{this.props.suffix}</b> (<i>{this.props.bename}</i>)</ControlLabel>

                      </Col>

                      <Col sm={2}>

                          <div>

-                             <DropdownButton bsStyle="primary" title="Suffix Tasks" id="mydropdown">

+                             <DropdownButton className="ds-action-button" bsStyle="primary" title="Suffix Tasks" id="mydropdown">

                                  <MenuItem eventKey="1" onClick={this.showImportModal} title="Import an LDIF file to initialize the database">

                                      Initialize Suffix

                                  </MenuItem>

@@ -1,7 +1,12 @@ 

  import React from "react";

  import "../../css/ds.css";

  import PropTypes from "prop-types";

- import { noop } from "patternfly-react";

+ import {

+     noop,

+     Row,

+     Col,

+     ControlLabel,

+ } from "patternfly-react";

  

  export class SuffixConfig extends React.Component {

      render() {
@@ -11,34 +16,58 @@ 

              const cachememValue = this.props.cachememsize + "  (auto-sized)";

              cacheInputs =

                  <div>

-                     <div title="The entry cache size setting is being auto-sized and is read-only - see Global Database Configuration">

-                         <label htmlFor="cachememsize" className="ds-config-label-lrg">

-                             Entry Cache Size (bytes)</label><input disabled value={cachememValue} className="ds-input" type="text" id="cachememsize" size="45" />

-                     </div>

-                     <div title="The entry cache max entries setting is being auto-sized and is read-only - see Global Database Configuration">

-                         <label htmlFor="cachesize" className="ds-config-label-lrg">

-                             Entry Cache Max Entries</label><input disabled value={cacheValue} className="ds-input" id="cachesize" type="text" size="45" />

-                     </div>

-                     <div>

-                         <label htmlFor="dncachememsize" className="ds-config-label-lrg" title="the available memory space for the DN cache. The DN cache is similar to the entry cache for a database, only its table stores only the entry ID and the entry DN (nsslapd-dncachememsize).">

-                             DN Cache Size (bytes)</label><input onChange={this.props.handleChange} value={this.props.dncachememsize} className="ds-input" type="text" id="dncachememsize" size="45" />

-                     </div>

+                     <Row className="ds-margin-top" title="The entry cache size setting is being auto-sized and is read-only - see Global Database Configuration">

+                         <Col componentClass={ControlLabel} sm={3}>

+                             Entry Cache Size (bytes)

+                         </Col>

+                         <Col sm={7}>

+                             <input disabled value={cachememValue} className="ds-input-auto" type="text" id="cachememsize" />

+                         </Col>

+                     </Row>

+                     <Row className="ds-margin-top" title="The entry cache max entries setting is being auto-sized and is read-only - see Global Database Configuration">

+                         <Col componentClass={ControlLabel} sm={3}>

+                             Entry Cache Max Entries

+                         </Col>

+                         <Col sm={7}>

+                             <input disabled value={cacheValue} className="ds-input-auto" type="text" id="cachesize" />

+                         </Col>

+                     </Row>

+                     <Row className="ds-margin-top" title="The available memory space for the DN cache. The DN cache is similar to the entry cache for a database, only its table stores only the entry ID and the entry DN (nsslapd-dncachememsize).">

+                         <Col componentClass={ControlLabel} sm={3}>

+                             DN Cache Size (bytes)

+                         </Col>

+                         <Col sm={7}>

+                             <input onChange={this.props.handleChange} value={this.props.dncachememsize} className="ds-input-auto" type="text" id="dncachememsize" />

+                         </Col>

+                     </Row>

                  </div>;

          } else {

              cacheInputs =

                  <div>

-                     <div>

-                         <label htmlFor="cachememsize" className="ds-config-label-lrg" title="The size for the available memory space for the entry cache (nsslapd-cachememsize).">

-                             Entry Cache Size (bytes)</label><input onChange={this.props.handleChange} value={this.props.cachememsize} className="ds-input" type="text" id="cachememsize" size="30" />

-                     </div>

-                     <div>

-                         <label htmlFor="cachesize" className="ds-config-label-lrg" title="The number of entries to keep in the entry cache, use'-1' for unlimited (nsslapd-cachesize).">

-                             Entry Cache Max Entries</label><input onChange={this.props.handleChange} value={this.props.cachesize} className="ds-input" type="text" id="cachesize" size="30" />

-                     </div>

-                     <div>

-                         <label htmlFor="dncachememsize" className="ds-config-label-lrg" title="the available memory space for the DN cache. The DN cache is similar to the entry cache for a database, only its table stores only the entry ID and the entry DN (nsslapd-dncachememsize).">

-                             DN Cache Size (bytes)</label><input onChange={this.props.handleChange} value={this.props.dncachememsize} className="ds-input" type="text" id="dncachememsize" size="30" />

-                     </div>

+                     <Row className="ds-margin-top" title="The size for the available memory space for the entry cache (nsslapd-cachememsize).">

+                         <Col componentClass={ControlLabel} sm={3}>

+                             Entry Cache Size (bytes)

+                         </Col>

+                         <Col sm={7}>

+                             <input onChange={this.props.handleChange} value={this.props.cachememsize} className="ds-input-auto" type="text" id="cachememsize" />

+                         </Col>

+                     </Row>

+                     <Row className="ds-margin-top" title="The number of entries to keep in the entry cache, use'-1' for unlimited (nsslapd-cachesize).">

+                         <Col componentClass={ControlLabel} sm={3}>

+                             Entry Cache Max Entries

+                         </Col>

+                         <Col sm={7}>

+                             <input onChange={this.props.handleChange} value={this.props.cachesize} className="ds-input-auto" type="text" id="cachesize" />

+                         </Col>

+                     </Row>

+                     <Row className="ds-margin-top" title="the available memory space for the DN cache. The DN cache is similar to the entry cache for a database, only its table stores only the entry ID and the entry DN (nsslapd-dncachememsize).">

+                         <Col componentClass={ControlLabel} sm={3}>

+                             DN Cache Size (bytes)

+                         </Col>

+                         <Col sm={7}>

+                             <input onChange={this.props.handleChange} value={this.props.dncachememsize} className="ds-input-auto" type="text" id="dncachememsize" />

+                         </Col>

+                     </Row>

                  </div>;

          }

          return (
@@ -56,7 +85,7 @@ 

                              htmlFor="requireIndex" className="ds-label" title="Block unindexed searches on this suffix (nsslapd-require-index)."> Block Unindexed Searches</label>

                      </div>

                  </div>

-                 <div className="ds-save-btn">

+                 <div className="ds-margin-top-lg">

                      <button className="btn btn-primary save-button" onClick={this.props.saveHandler}>Save Configuration</button>

                  </div>

              </div>

@@ -517,9 +517,9 @@ 

              >

                  <Row>

                      <Col sm={11} key={vlvItem.dn}>

-                         <p key={vlvItem.dn + "-p"}><label className="ds-vlv-label">Base</label>{vlvItem.attrs.vlvbase[0]}</p>

-                         <p><label className="ds-vlv-label">Filter</label>{vlvItem.attrs.vlvfilter[0]}</p>

-                         <p><label className="ds-vlv-label">Scope</label>{this.getScopeKey(vlvItem.attrs.vlvscope[0])}</p>

+                         <p key={vlvItem.dn + "-p"}><label className="ds-divider-lrg">Base</label>{vlvItem.attrs.vlvbase[0]}</p>

+                         <p><label className="ds-divider-lrg">Filter</label>{vlvItem.attrs.vlvfilter[0]}</p>

+                         <p><label className="ds-divider-lrg">Scope</label>{this.getScopeKey(vlvItem.attrs.vlvscope[0])}</p>

                          <hr />

                          {

                              vlvItem.sorts.map(sort => {
@@ -529,7 +529,7 @@ 

                                  } else {

                                      indexState = <font size="1" color="#4dac26"><b>Uses: </b>{sort.attrs.vlvuses[0]}</font>;

                                  }

-                                 return (<p key={sort.dn + sort.attrs.vlvsort[0]}><label className="ds-vlv-label">Sort</label>{sort.attrs.vlvsort[0]} ({indexState})</p>);

+                                 return (<p key={sort.dn + sort.attrs.vlvsort[0]}><label className="ds-divider-lrg">Sort</label>{sort.attrs.vlvsort[0]} ({indexState})</p>);

                              })

                          }

                      </Col>

@@ -58,7 +58,7 @@ 

              </div>;

  

          return (

-             <div id="monitor-log-access-page" className="container-fluid">

+             <div id="monitor-log-access-page">

                  <Row>

                      <Col sm={3}>

                          <ControlLabel className="ds-suffix-header">

@@ -58,7 +58,7 @@ 

              </div>;

  

          return (

-             <div id="monitor-log-auditfail-page" className="container-fluid">

+             <div id="monitor-log-auditfail-page">

                  <Row>

                      <Col sm={3}>

                          <ControlLabel className="ds-suffix-header">

@@ -58,7 +58,7 @@ 

              </div>;

  

          return (

-             <div id="monitor-log-audit-page" className="container-fluid">

+             <div id="monitor-log-audit-page">

                  <Row>

                      <Col sm={3}>

                          <ControlLabel className="ds-suffix-header">

@@ -127,7 +127,7 @@ 

                                  <hr />

                                  <div>

                                      <Row className="ds-margin-top">

-                                         <Col sm={3}>

+                                         <Col sm={4}>

                                              <ControlLabel>

                                                  Database Cache Hit Ratio

                                              </ControlLabel>
@@ -137,7 +137,7 @@ 

                                          </Col>

                                      </Row>

                                      <Row className="ds-margin-top">

-                                         <Col sm={3}>

+                                         <Col sm={4}>

                                              <ControlLabel>

                                                  Database Cache Tries

                                              </ControlLabel>
@@ -147,7 +147,7 @@ 

                                          </Col>

                                      </Row>

                                      <Row className="ds-margin-top">

-                                         <Col sm={3}>

+                                         <Col sm={4}>

                                              <ControlLabel>

                                                  Database Cache Hits

                                              </ControlLabel>
@@ -157,7 +157,7 @@ 

                                          </Col>

                                      </Row>

                                      <Row className="ds-margin-top">

-                                         <Col sm={3}>

+                                         <Col sm={4}>

                                              <ControlLabel>

                                                  Cache Pages Read

                                              </ControlLabel>
@@ -167,7 +167,7 @@ 

                                          </Col>

                                      </Row>

                                      <Row className="ds-margin-top">

-                                         <Col sm={3}>

+                                         <Col sm={4}>

                                              <ControlLabel>

                                                  Cache Pages Written

                                              </ControlLabel>
@@ -177,7 +177,7 @@ 

                                          </Col>

                                      </Row>

                                      <Row className="ds-margin-top">

-                                         <Col sm={3}>

+                                         <Col sm={4}>

                                              <ControlLabel>

                                                  Read-Only Page Evictions

                                              </ControlLabel>
@@ -187,7 +187,7 @@ 

                                          </Col>

                                      </Row>

                                      <Row className="ds-margin-top">

-                                         <Col sm={3}>

+                                         <Col sm={4}>

                                              <ControlLabel>

                                                  Read-Write Page Evictions

                                              </ControlLabel>
@@ -253,7 +253,7 @@ 

                                      <hr />

                                      <div>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Cache Hit Ratio

                                                  </ControlLabel>
@@ -263,7 +263,7 @@ 

                                              </Col>

                                          </Row>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Cache Tries

                                                  </ControlLabel>
@@ -273,7 +273,7 @@ 

                                              </Col>

                                          </Row>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Cache Hits

                                                  </ControlLabel>
@@ -283,7 +283,7 @@ 

                                              </Col>

                                          </Row>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Cache Evictions

                                                  </ControlLabel>
@@ -293,7 +293,7 @@ 

                                              </Col>

                                          </Row>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Cache Max Size

                                                  </ControlLabel>
@@ -303,7 +303,7 @@ 

                                              </Col>

                                          </Row>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Current Cache Size

                                                  </ControlLabel>
@@ -313,7 +313,7 @@ 

                                              </Col>

                                          </Row>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Cache DN Count

                                                  </ControlLabel>
@@ -323,7 +323,7 @@ 

                                              </Col>

                                          </Row>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Cache Thread Size

                                                  </ControlLabel>
@@ -333,7 +333,7 @@ 

                                              </Col>

                                          </Row>

                                          <Row className="ds-margin-top">

-                                             <Col sm={3}>

+                                             <Col sm={4}>

                                                  <ControlLabel>

                                                      NDN Cache Thread Slots

                                                  </ControlLabel>

@@ -58,7 +58,7 @@ 

              </div>;

  

          return (

-             <div id="monitor-log-errors-page" className="container-fluid">

+             <div id="monitor-log-errors-page">

                  <Row>

                      <Col sm={3}>

                          <ControlLabel className="ds-suffix-header">

@@ -752,7 +752,7 @@ 

          let conflictsNavTitle = 'Conflicts <font size="1">(' + (conflictEntries.length + glueEntries.length) + ')</font>';

  

          return (

-             <div id="monitor-suffix-page" className="container-fluid ds-tab-table">

+             <div id="monitor-suffix-page" className="ds-tab-table">

                  <TabContainer id="basic-tabs-pf" onSelect={this.handleNavSelect} activeKey={this.state.activeKey}>

                      <div>

                          <Nav bsClass="nav nav-tabs nav-tabs-pf">

@@ -39,7 +39,7 @@ 

          let uptime = get_date_diff(startTime, currTime);

  

          return (

-             <div id="monitor-server-page" className="container-fluid">

+             <div id="monitor-server-page">

                  <Row>

                      <Col sm={12} className="ds-word-wrap">

                          <ControlLabel className="ds-suffix-header">
@@ -65,74 +65,122 @@ 

                          <TabContent>

  

                              <TabPane eventKey={1}>

-                                 <div className="ds-container ds-margin-top-lg">

-                                     <div className="ds-inline">

-                                         <div>

-                                             <label htmlFor="monitor-serverid" className="ds-label-xsm">Server Instance</label><input type="text"

-                                                 className="ds-input" id="monitor-serverid" value={"slapd-" + this.props.serverId} size="50" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-version" className="ds-label-xsm">Version</label><input type="text"

-                                                 className="ds-input" id="monitor-version" value={this.props.data.version} size="50" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-starttime" className="ds-label-xsm">Server Started</label><input type="text"

-                                                 className="ds-input" id="monitor-server-starttime" value={startDate} size="50" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-uptime" className="ds-label-xsm">Server Uptime</label><input type="text"

-                                                 className="ds-input" id="monitor-server-uptime" value={uptime} size="50" readOnly />

-                                         </div>

-                                     </div>

+                                 <div className="ds-margin-top-lg">

+                                     <Row>

+                                         <Col componentClass={ControlLabel} sm={3}>

+                                             Server Instance

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input type="text" className="ds-input-auto" id="monitor-serverid" value={"slapd-" + this.props.serverId} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={3}>

+                                             Version

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input type="text" className="ds-input-auto" id="monitor-version" value={this.props.data.version} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={3}>

+                                             Server Started

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-starttime" value={startDate} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={3}>

+                                             Server Uptime

+                                         </Col>

+                                         <Col sm={8}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-uptime" value={uptime} readOnly />

+                                         </Col>

+                                     </Row>

                                  </div>

                                  <hr />

-                                 <div className="ds-container">

-                                     <div className="ds-inline">

-                                         <div>

-                                             <label htmlFor="monitor-server-threads" className="ds-monitor-label">Threads</label><input type="text"

-                                                 className="ds-input" id="monitor-server-threads" value={this.props.data.threads} size="12" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-totalconnections" className="ds-monitor-label">Total Connections</label><input type="text"

-                                                 className="ds-input" id="monitor-server-totalconnections" value={this.props.data.totalconnections} size="12" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-currentconnections" className="ds-monitor-label">Current Conections</label><input type="text"

-                                                 className="ds-input" id="monitor-server-currentconnections" value={this.props.data.currentconnections} size="12" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-currentconnectionsatmaxthreads" className="ds-monitor-label">Conns At Max Threads</label><input type="text"

-                                                 className="ds-input" id="monitor-server-currentconnectionsatmaxthreads" value={this.props.data.currentconnectionsatmaxthreads} size="12" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-maxthreadsperconnhits" className="ds-monitor-label">Conns Hit Max Threads</label><input type="text"

-                                                 className="ds-input" id="monitor-server-maxthreadsperconnhits" value={this.props.data.maxthreadsperconnhits} size="12" readOnly />

-                                         </div>

-                                     </div>

-                                     <div className="ds-divider" />

-                                     <div className="ds-inline">

-                                         <div>

-                                             <label htmlFor="monitor-server-readwaiters" className="ds-monitor-label-med">Threads Waiting To Read</label><input type="text"

-                                                 className="ds-input" id="monitor-server-readwaiters" value={this.props.data.readwaiters} size="12" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-opsinitiated" className="ds-monitor-label-med">Operations Started</label><input type="text"

-                                                 className="ds-input" id="monitor-server-opsinitiated" value={this.props.data.opsinitiated} size="12" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-opscompleted" className="ds-monitor-label-med">Operations Completed</label><input type="text"

-                                             className="ds-input" id="monitor-server-opscompleted" value={this.props.data.opscompleted} size="12" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-entriessent" className="ds-monitor-label-med">Entries Returned To Clients</label><input type="text"

-                                             className="ds-input" id="monitor-server-entriessent" value={this.props.data.entriessent} size="12" readOnly />

-                                         </div>

-                                         <div>

-                                             <label htmlFor="monitor-server-bytessent" className="ds-monitor-label-med">Bytes Sent to Clients</label><input type="text"

-                                                 className="ds-input" id="monitor-server-bytessent" value={this.props.data.bytessent} size="12" readOnly />

-                                         </div>

- 

-                                     </div>

+                                 <div>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Worker Threads

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-threads" value={this.props.data.threads} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Threads Waiting To Read

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-readwaiters" value={this.props.data.readwaiters} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Conns At Max Threads

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-currentconnectionsatmaxthreads" value={this.props.data.currentconnectionsatmaxthreads} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Conns Exceeded Max Threads

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-maxthreadsperconnhits" value={this.props.data.maxthreadsperconnhits} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Total Connections

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-totalconnections" value={this.props.data.totalconnections} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Current Conections

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-currentconnections" value={this.props.data.currentconnections} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Operations Started

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-opsinitiated" value={this.props.data.opsinitiated} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Operations Completed

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-opscompleted" value={this.props.data.opscompleted} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Entries Returned To Clients

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-entriessent" value={this.props.data.entriessent} readOnly />

+                                         </Col>

+                                     </Row>

+                                     <Row className="ds-margin-top">

+                                         <Col componentClass={ControlLabel} sm={4}>

+                                             Bytes Sent to Clients

+                                         </Col>

+                                         <Col sm={7}>

+                                             <input type="text" className="ds-input-auto" id="monitor-server-bytessent" value={this.props.data.bytessent} readOnly />

+                                         </Col>

+                                     </Row>

                                  </div>

                              </TabPane>

                              <TabPane eventKey={2}>

@@ -12,7 +12,7 @@ 

  export class SNMPMonitor extends React.Component {

      render() {

          return (

-             <div className="container-fluid" id="db-global-page">

+             <div id="db-global-page">

                  <Row>

                      <Col sm={12} className="ds-word-wrap">

                          <ControlLabel className="ds-suffix-header">
@@ -26,13 +26,13 @@ 

                  </Row>

                  <div className="ds-margin-top-med">

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Anonymous Binds</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.anonymousbinds} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Referrals</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -40,13 +40,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Unauthenticated Binds</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.anonymousbinds} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Returned Referrals</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -54,13 +54,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Simple Auth Binds</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.simpleauthbinds} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Bind Security Errors</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -68,13 +68,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Strong Auth Binds</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.strongauthbinds} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Security Errors</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -82,13 +82,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Initiated Operations</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.inops} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Errors</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -96,13 +96,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Compare Operations</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.compareops} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Current Connections</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -110,13 +110,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Add Operations</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.addentryops} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Total Connections</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -124,13 +124,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Delete Operations</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.removeentryops} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Conns in Max Threads</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -138,27 +138,27 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Modify Operation</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.modifyentryops} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

-                             <ControlLabel>Conns Hit Max Threads</ControlLabel>

+                         <Col sm={4}>

+                             <ControlLabel>Conns Exceeded Max Threads</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.connectionsmaxthreadscount} size="10" readOnly />

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>ModRDN Operations</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.modifyrdnops} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Bytes Received</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -166,13 +166,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Search Operations</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.searchops} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Bytes Sent</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -180,13 +180,13 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>One Level Searches</ControlLabel>

                          </Col>

                          <Col sm={2}>

                              <input type="text" value={this.props.data.onelevelsearchops} size="10" readOnly />

                          </Col>

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Entries Sent</ControlLabel>

                          </Col>

                          <Col sm={2}>
@@ -194,7 +194,7 @@ 

                          </Col>

                      </Row>

                      <Row className="ds-margin-top">

-                         <Col sm={3}>

+                         <Col sm={4}>

                              <ControlLabel>Whole Tree Searches</ControlLabel>

                          </Col>

                          <Col sm={2}>

@@ -112,7 +112,7 @@ 

          }

  

          return (

-             <div id="monitor-suffix-page" className="container-fluid">

+             <div id="monitor-suffix-page">

                  <Row>

                      <Col sm={12} className="ds-word-wrap">

                          <ControlLabel className="ds-suffix-header">

@@ -639,7 +639,7 @@ 

                      toggleLoadingHandler={this.props.toggleLoadingHandler}

                  >

                      <Row>

-                         <Col sm={6}>

+                         <Col sm={10}>

                              <Form horizontal>

                                  <FormGroup key="configArea" controlId="configArea">

                                      <Col
@@ -649,16 +649,15 @@ 

                                      >

                                          Shared Config Entry

                                      </Col>

-                                     <Col sm={6}>

+                                     <Col sm={7}>

                                          <FormControl

                                              type="text"

                                              value={configArea}

                                              onChange={this.handleFieldChange}

                                          />

                                      </Col>

-                                     <Col sm={3}>

+                                     <Col sm={2}>

                                          <Button

-                                             bsSize="large"

                                              bsStyle="primary"

                                              onClick={this.openModal}

                                          >

@@ -680,7 +680,7 @@ 

                      toggleLoadingHandler={this.props.toggleLoadingHandler}

                  >

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <AttrUniqConfigTable

                                  rows={this.state.configRows}

                                  editConfig={this.showEditConfigModal}

@@ -1012,7 +1012,7 @@ 

                      toggleLoadingHandler={this.props.toggleLoadingHandler}

                  >

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <AutoMembershipDefinitionTable

                                  rows={this.state.definitionRows}

                                  editConfig={this.showEditDefinitionModal}

@@ -908,7 +908,6 @@ 

                                              </Col>

                                              <Col sm={3}>

                                                  <Button

-                                                     bsSize="large"

                                                      bsStyle="primary"

                                                      onClick={this.showConfirmSharedSave}

                                                  >
@@ -1120,7 +1119,7 @@ 

                      toggleLoadingHandler={this.props.toggleLoadingHandler}

                  >

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <DNATable

                                  rows={this.state.configRows}

                                  editConfig={this.showEditConfigModal}

@@ -461,7 +461,7 @@ 

                      toggleLoadingHandler={this.props.toggleLoadingHandler}

                  >

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <LinkedAttributesTable

                                  rows={this.state.configRows}

                                  editConfig={this.showEditConfigModal}

@@ -672,7 +672,6 @@ 

                                              </Col>

                                              <Col sm={3}>

                                                  <Button

-                                                     bsSize="large"

                                                      bsStyle="primary"

                                                      onClick={this.openTemplateModal}

                                                  >
@@ -881,7 +880,7 @@ 

                              />

                          </Col>

                      </FormGroup>

-                     <Col sm={9}>

+                     <Col sm={12}>

                          <ManagedEntriesTable

                              rows={configRows}

                              editConfig={this.showEditConfigModal}

@@ -22,6 +22,7 @@ 

  class MemberOf extends React.Component {

      componentWillMount(prevProps) {

          this.getObjectClasses();

+         this.getAttributes();

          this.updateFields();

      }

  
@@ -35,6 +36,7 @@ 

          super(props);

  

          this.getObjectClasses = this.getObjectClasses.bind(this);

+         this.getAttributes = this.getAttributes.bind(this);

          this.updateFields = this.updateFields.bind(this);

          this.handleFieldChange = this.handleFieldChange.bind(this);

          this.handleCheckboxChange = this.handleCheckboxChange.bind(this);
@@ -49,6 +51,7 @@ 

  

          this.state = {

              objectClasses: [],

+             attributeTypes: [],

  

              memberOfAttr: [],

              memberOfGroupAttr: [],
@@ -135,6 +138,7 @@ 

  

      openModal() {

          this.getObjectClasses();

+         this.getAttributes();

          if (!this.state.memberOfConfigEntry) {

              this.setState({

                  configEntryModalShow: true,
@@ -502,9 +506,41 @@ 

                  });

      }

  

+     getAttributes() {

+         const oc_cmd = [

+             "dsconf",

+             "-j",

+             "ldapi://%2fvar%2frun%2fslapd-" + this.props.serverId + ".socket",

+             "schema",

+             "attributetypes",

+             "list"

+         ];

+         log_cmd("getAttributes", "Get getAttributes", oc_cmd);

+         cockpit

+                 .spawn(oc_cmd, { superuser: true, err: "message" })

+                 .done(content => {

+                     const atContent = JSON.parse(content);

+                     let attrs = [];

+                     for (let content of atContent["items"]) {

+                         attrs.push({

+                             id: content.name,

+                             label: content.name

+                         });

+                     }

+                     this.setState({

+                         attributeTypes: attrs

+                     });

+                 })

+                 .fail(err => {

+                     let errMsg = JSON.parse(err);

+                     this.props.addNotification("error", `Failed to get attributes - ${errMsg.desc}`);

+                 });

+     }

+ 

      render() {

          const {

              objectClasses,

+             attributeTypes,

              memberOfAttr,

              memberOfGroupAttr,

              memberOfEntryScope,
@@ -725,13 +761,8 @@ 

                                                          });

                                                      }}

                                                      selected={configGroupAttr}

-                                                     newSelectionPrefix="Add a group member: "

-                                                     options={[

-                                                         {

-                                                             id: "member",

-                                                             label: "member"

-                                                         }

-                                                     ]}

+                                                     newSelectionPrefix="Add a group member attribute: "

+                                                     options={attributeTypes}

                                                      placeholder="Type a member group attribute..."

                                                  />

                                              </Col>
@@ -870,7 +901,7 @@ 

                      toggleLoadingHandler={this.props.toggleLoadingHandler}

                  >

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <Form horizontal>

                                  <FormGroup

                                      key="memberOfAttr"
@@ -884,7 +915,7 @@ 

                                      >

                                          Attribute

                                      </Col>

-                                     <Col sm={9}>

+                                     <Col sm={8}>

                                          <Typeahead

                                              allowNew

                                              multiple
@@ -894,7 +925,7 @@ 

                                                  });

                                              }}

                                              selected={memberOfAttr}

-                                             newSelectionPrefix="Add a member: "

+                                             newSelectionPrefix="Add a member attrbiute: "

                                              options={[

                                                  {

                                                      id: "member",
@@ -925,7 +956,7 @@ 

                                      >

                                          Group Attribute

                                      </Col>

-                                     <Col sm={9}>

+                                     <Col sm={8}>

                                          <Typeahead

                                              allowNew

                                              multiple
@@ -935,25 +966,8 @@ 

                                                  });

                                              }}

                                              selected={memberOfGroupAttr}

-                                             newSelectionPrefix="Add a group member: "

-                                             options={[

-                                                 {

-                                                     id: "groupOfNames",

-                                                     label: "groupOfNames"

-                                                 },

-                                                 {

-                                                     id: "groupOfURLs",

-                                                     label: "groupOfURLs"

-                                                 },

-                                                 {

-                                                     id: "groupOfUniqueNames",

-                                                     label: "groupOfUniqueNames"

-                                                 },

-                                                 {

-                                                     id: "groupOfCertificates",

-                                                     label: "groupOfCertificates"

-                                                 }

-                                             ]}

+                                             newSelectionPrefix="Add a group member attribute: "

+                                             options={attributeTypes}

                                              placeholder="Type a member group attribute..."

                                          />

                                      </Col>
@@ -962,7 +976,7 @@ 

                          </Col>

                      </Row>

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <Form horizontal>

                                  <FormGroup

                                      key="memberOfEntryScope"
@@ -1028,7 +1042,7 @@ 

                          </Col>

                      </Row>

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <Form horizontal>

                                  <FormGroup

                                      key="memberOfConfigEntry"
@@ -1050,7 +1064,6 @@ 

                                      </Col>

                                      <Col sm={3}>

                                          <Button

-                                             bsSize="large"

                                              bsStyle="primary"

                                              onClick={this.openModal}

                                          >
@@ -1062,7 +1075,7 @@ 

                          </Col>

                      </Row>

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <Form horizontal>

                                  <FormGroup controlId="memberOfAutoAddOC" disabled={false}>

                                      <Col
@@ -1071,7 +1084,7 @@ 

                                      >

                                          <ControlLabel>Auto Add OC</ControlLabel>

                                      </Col>

-                                     <Col sm={9}>

+                                     <Col sm={8}>

                                          <Typeahead

                                              allowNew

                                              onChange={value => {
@@ -1090,9 +1103,8 @@ 

                          </Col>

                      </Row>

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <Button

-                                 bsSize="large"

                                  bsStyle="primary"

                                  onClick={this.toggleFixupModal}

                              >

@@ -1135,7 +1135,7 @@ 

                      toggleLoadingHandler={this.props.toggleLoadingHandler}

                  >

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <PassthroughAuthURLsTable

                                  rows={urlRows}

                                  editConfig={this.showEditURLModal}
@@ -1151,7 +1151,7 @@ 

                          </Col>

                      </Row>

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <PassthroughAuthConfigsTable

                                  rows={pamConfigRows}

                                  editConfig={this.showEditPAMConfigModal}

@@ -195,7 +195,7 @@ 

                          </Col>

  

                          {this.props.removeSwitch || (

-                             <Col smOffset={1} sm={3}>

+                             <Col smOffset={1} sm={4} className="ds-margin-top">

                                  <FormGroup key="switchPluginStatus" controlId="switchPluginStatus">

                                      <ControlLabel className="toolbar-pf-find ds-float-left ds-right-indent">

                                          Status
@@ -219,11 +219,11 @@ 

                  {this.props.children}

                  <CustomCollapse>

                      <Row>

-                         <Col sm={4}>

+                         <Col sm={12}>

                              <Form horizontal>

                                  {Object.entries(modalFieldsCol1).map(([id, value]) => (

                                      <FormGroup key={id} controlId={id} disabled={false}>

-                                         <Col componentClass={ControlLabel} sm={6}>

+                                         <Col componentClass={ControlLabel} sm={3}>

                                              {this.props.memberOfAttr} Plugin{" "}

                                              {id.replace("currentPlugin", "")}

                                          </Col>
@@ -241,7 +241,7 @@ 

                                      controlId="currentPluginDependsOnType"

                                      disabled={false}

                                  >

-                                     <Col componentClass={ControlLabel} sm={6}>

+                                     <Col componentClass={ControlLabel} sm={3}>

                                          Plugin Depends On Type

                                      </Col>

                                      <Col sm={6}>
@@ -257,7 +257,7 @@ 

                                      controlId="currentPluginDependsOnNamed"

                                      disabled={false}

                                  >

-                                     <Col componentClass={ControlLabel} sm={6}>

+                                     <Col componentClass={ControlLabel} sm={3}>

                                          Plugin Depends On Named

                                      </Col>

                                      <Col sm={6}>
@@ -268,16 +268,12 @@ 

                                          />

                                      </Col>

                                  </FormGroup>

-                             </Form>

-                         </Col>

-                         <Col sm={4}>

-                             <Form horizontal>

                                  {Object.entries(modalFieldsCol2).map(([id, value]) => (

                                      <FormGroup key={id} controlId={id} disabled={false}>

-                                         <Col componentClass={ControlLabel} sm={5}>

+                                         <Col componentClass={ControlLabel} sm={3}>

                                              Plugin {id.replace("currentPlugin", "")}

                                          </Col>

-                                         <Col sm={7}>

+                                         <Col sm={6}>

                                              <FormControl

                                                  type="text"

                                                  value={value}
@@ -290,10 +286,9 @@ 

                          </Col>

                      </Row>

                  </CustomCollapse>

-                 <Row>

-                     <Col smOffset={7} sm={1}>

+                 <Row className="ds-margin-top-lg">

+                     <Col sm={1}>

                          <Button

-                             bsSize="large"

                              bsStyle="primary"

                              onClick={() =>

                                  this.props.savePluginHandler({

@@ -627,7 +627,7 @@ 

                                  <FormGroup key="updateDelay" controlId="updateDelay">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Sets the update interval. Special values: 0 - The check is performed immediately, -1 - No check is performed (referint-update-delay)"

                                      >

                                          Update Delay
@@ -643,7 +643,7 @@ 

                                  <FormGroup key="membershipAttr" controlId="membershipAttr">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Specifies attributes to check for and update (referint-membership-attr)"

                                      >

                                          Membership Attribute
@@ -667,7 +667,7 @@ 

                                  <FormGroup key="entryScope" controlId="entryScope">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Defines the subtree in which the plug-in looks for the delete or rename operations of a user entry (nsslapd-pluginEntryScope)"

                                      >

                                          Entry Scope
@@ -683,7 +683,7 @@ 

                                  <FormGroup key="excludeEntryScope" controlId="excludeEntryScope">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Defines the subtree in which the plug-in ignores any operations for deleting or renaming a user (nsslapd-pluginExcludeEntryScope)"

                                      >

                                          Exclude Entry Scope
@@ -699,7 +699,7 @@ 

                                  <FormGroup key="containerScope" controlId="containerScope">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Specifies which branch the plug-in searches for the groups to which the user belongs. It only updates groups that are under the specified container branch, and leaves all other groups not updated (nsslapd-pluginContainerScope)"

                                      >

                                          Container Scope
@@ -715,7 +715,7 @@ 

                                  <FormGroup key="logFile" controlId="logFile">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title={`Specifies a path to the Referential integrity logfile. For example: /var/log/dirsrv/slapd-${

                                              this.props.serverId

                                          }/referint`}
@@ -736,7 +736,7 @@ 

                                  >

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="The value to set as nsslapd-pluginConfigArea"

                                      >

                                          Shared Config Entry
@@ -748,9 +748,8 @@ 

                                              onChange={this.handleFieldChange}

                                          />

                                      </Col>

-                                     <Col sm={3}>

+                                     <Col sm={2}>

                                          <Button

-                                             bsSize="large"

                                              bsStyle="primary"

                                              onClick={this.openModal}

                                          >

@@ -171,7 +171,7 @@ 

                                  <FormGroup key="attribute" controlId="attribute">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Specifies another Directory Server attribute which must be included in the retro changelog entries (nsslapd-attribute)"

                                      >

                                          Attribute
@@ -194,7 +194,7 @@ 

                                  <FormGroup key="directory" controlId="directory">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Specifies the name of the directory in which the changelog database is created the first time the plug-in is run"

                                      >

                                          Directory
@@ -210,7 +210,7 @@ 

                                  <FormGroup key="maxAge" controlId="maxAge">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="This attribute specifies the maximum age of any entry in the changelog (nsslapd-changelogmaxage)"

                                      >

                                          Max Age
@@ -226,7 +226,7 @@ 

                                  <FormGroup key="excludeSuffix" controlId="excludeSuffix">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="This attribute specifies the suffix which will be excluded from the scope of the plugin (nsslapd-exclude-suffix)"

                                      >

                                          Exclude Suffix

@@ -177,7 +177,7 @@ 

                                  <FormGroup key="allowHost" controlId="allowHost">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Sets what hosts, by fully-qualified domain name, the root user is allowed to use to access the Directory Server. Any hosts not listed are implicitly denied (rootdn-allow-host)"

                                      >

                                          Allow Host
@@ -201,7 +201,7 @@ 

                                  <FormGroup key="denyHost" controlId="denyHost">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Sets what hosts, by fully-qualified domain name, the root user is not allowed to use to access the Directory Server Any hosts not listed are implicitly allowed (rootdn-deny-host). If an host address is listed in both the rootdn-allow-host and rootdn-deny-host attributes, it is denied access."

                                      >

                                          Deny Host
@@ -225,7 +225,7 @@ 

                                  <FormGroup key="allowIP" controlId="allowIP">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Sets what IP addresses, either IPv4 or IPv6, for machines the root user is allowed to use to access the Directory Server Any IP addresses not listed are implicitly denied (rootdn-allow-ip)"

                                      >

                                          Allow IP address
@@ -249,7 +249,7 @@ 

                                  <FormGroup key="denyIP" controlId="denyIP">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Sets what IP addresses, either IPv4 or IPv6, for machines the root user is not allowed to use to access the Directory Server. Any IP addresses not listed are implicitly allowed (rootdn-deny-ip) If an IP address is listed in both the rootdn-allow-ip and rootdn-deny-ip attributes, it is denied access."

                                      >

                                          Deny IP address
@@ -273,7 +273,7 @@ 

                                  <FormGroup key="openTime" controlId="openTime">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Sets part of a time period or range when the root user is allowed to access the Directory Server. This sets when the time-based access begins (rootdn-open-time)"

                                      >

                                          Open Time
@@ -289,7 +289,7 @@ 

                                  <FormGroup key="closeTime" controlId="closeTime">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Sets part of a time period or range when the root user is allowed to access the Directory Server. This sets when the time-based access ends (rootdn-close-time)"

                                      >

                                          Close Time
@@ -305,7 +305,7 @@ 

                                  <FormGroup key="daysAllowed" controlId="daysAllowed">

                                      <Col

                                          componentClass={ControlLabel}

-                                         sm={2}

+                                         sm={3}

                                          title="Gives a comma-separated list of what days the root user is allowed to use to access the Directory Server. Any days listed are implicitly denied (rootdn-days-allowed)"

                                      >

                                          Days Allowed

@@ -318,7 +318,6 @@ 

                          <Col sm={9}>

                              <Button

                                  className="ds-margin-top"

-                                 bsSize="large"

                                  bsStyle="primary"

                                  onClick={this.toggleCleanupModal}

                              >

@@ -107,7 +107,7 @@ 

                      toggleLoadingHandler={this.props.toggleLoadingHandler}

                  >

                      <Row>

-                         <Col sm={9}>

+                         <Col sm={12}>

                              <Form horizontal>

                                  <FormGroup

                                      key="posixWinsyncCreateMemberOfTask"

@@ -144,7 +144,8 @@ 

                                  return [

                                      <td key={rowData.nickname[0]}>

                                          <DropdownButton id={rowData.nickname[0]}

-                                             bsStyle="default" title="Actions">

+                                             className="ds-action-button"

+                                             bsStyle="primary" title="Actions">

                                              <MenuItem eventKey="1" onClick={() => {

                                                  this.props.editCert(rowData);

                                              }}
@@ -353,7 +354,8 @@ 

                                  return [

                                      <td key={rowData.name[0]}>

                                          <DropdownButton id={rowData.name[0]}

-                                             bsStyle="default" title="Actions">

+                                             className="ds-action-button"

+                                             bsStyle="primary" title="Actions">

                                              <MenuItem eventKey="1" onClick={() => {

                                                  this.props.editIndex(rowData);

                                              }}

@@ -493,10 +493,7 @@ 

                      removeNotificationAction={this.removeNotification}

                  />

                  <Row className="clearfix">

-                     <Col sm={1}>

-                         <h2>Plugins</h2>

-                     </Col>

-                     <Col sm={10}>

+                     <Col sm={12}>

                          <Spinner

                              className="ds-float-left ds-plugin-spinner"

                              loading={this.state.loading}
@@ -504,13 +501,12 @@ 

                          />

                      </Col>

                  </Row>

-                 <hr />

                  <Tab.Container

                      id="left-tabs-example"

                      defaultActiveKey={Object.keys(selectPlugins)[0]}

                  >

                      <Row className="clearfix">

-                         <Col sm={2}>

+                         <Col sm={3}>

                              <Nav bsStyle="pills" stacked>

                                  {Object.entries(selectPlugins).map(([id, item]) => (

                                      <NavItem key={id} eventKey={id}>
@@ -519,7 +515,7 @@ 

                                  ))}

                              </Nav>

                          </Col>

-                         <Col sm={10}>

+                         <Col sm={9}>

                              <Tab.Content animation={false}>

                                  {Object.entries(selectPlugins).map(([id, item]) => (

                                      <Tab.Pane key={id} eventKey={id}>

@@ -1,38 +1,37 @@ 

  

  <!-- Replication Configuration Panel -->

- <div id="repl-config" class="all-pages" hidden>

+ <div id="repl-config" class="all-pages ds-margin-left" hidden>

    <h3 class="ds-config-header">Replication Configuration Settings</h3>

  

    <label class="ds-config-label-med" for="select-repl-role">Database Suffix</Label><select

      class="btn btn-default dropdown" id="select-repl-cfg-suffix">

    </select>

  

-   <div id="ds-repl-enabled" hidden>

-     <p></p>

+   <div id="ds-repl-enabled" class="ds-margin-top-lg" hidden>

      <button class="btn btn-primary" data-toggle="modal" data-target="#enable-repl-form" id="enable-repl-btn">Enable Replication</button>

    </div>

  

    <div id="repl-config-content">

      <div>

-       <label class="ds-config-label-med" for="select-repl-role">Replication Role</Label><select class="btn btn-default dropdown" id="select-repl-role">

-           <option>Master</option>

-           <option>Hub</option>

-           <option>Consumer</option>

-         </select>

-       <button class="btn btn-danger ds-disable-repl-btn" id="disable-repl-btn">Disable Replication</button>

+         <label class="ds-config-label-med" for="select-repl-role">Replication Role</Label><select class="btn btn-default dropdown" id="select-repl-role">

+             <option>Master</option>

+             <option>Hub</option>

+             <option>Consumer</option>

+           </select>

      </div>

      <div>

        <label id="replicaid-label" for="nsds5replicaid" class="ds-config-label-med" title=

          "The replica identifier for Master/Supplier (nsds5ReplicaId).">

          Replica ID</label><input class="ds-input" type="text" id="nsds5replicaid" size="5"/>

        <p></p>

+       <button class="btn btn-danger" id="disable-repl-btn">Disable Replication</button>

      </div>

      <hr>

      <div class="ds-repl-mgr">

        <div class="ds-inline ds-repl-mgr">

          <label for="nsds5replicabinddngroup" title=

            "The DN of a group that contains entries that are allowed to make replication updates (nsDS5ReplicaBindDnGroup).">Bind DN Group</label><input

-           class="ds-input-max" type="text" id="nsds5replicabinddngroup"/>

+           type="text" id="nsds5replicabinddngroup" size="50" />

        </div>

        <table class="table table-bordered ds-mgr-table" id="repl-mgr-table"

          title="Specifies entries that can perform replication updates on this server.  Also known as supplier DN, update DN, or Replication Manager">
@@ -94,7 +93,7 @@ 

        <hr>

        <div>

          <label for="nsslapd-changelogdir" class="ds-config-label" title="The location on the filesystem for the replication changelog database (nsslapd-changelogdir).">Changelog Location</label><input

-           class="ds-input-long ds-cl" type="text" id="nsslapd-changelogdir"/>

+           class="ds-cl" type="text" id="nsslapd-changelogdir" size="60" />

        </div>

        <div class="ds-container">

          <div name="changelog" class="ds-line">
@@ -108,10 +107,6 @@ 

                "Changelog trimming parameter.  This set the maximum age of a changelog entry.  It is recommended to use the same value as the ReplicationPurgeDelay.  (nsslapd-changelogmaxage).">

                Changelog Maximum Age</label><input class="ds-input ds-cl" type="text" id="nsslapd-changelogmaxage" size="15"/>

            </div>

-           <p></p>

-         </div>

-         <div class="ds-divider"></div>

-         <div class="ds-inline">

            <div>

              <label for="nsslapd-changelogcompactdb-interval" class="ds-config-label" title=

                "The changelog compaction internal.  Set how often the changelog will compact itself, meaning remove empty/trimmed database slots (nsslapd-changelogcompactdb-interval).">
@@ -126,10 +121,10 @@ 

        </div>

  

        <!-- Buttons to create and delete changelog -->

-       <div id="cl-create-div">

+       <div id="cl-create-div" class="ds-margin-top">

          <button class="btn btn-default" id="create-cl-btn">Create Changelog</button>

        </div>

-       <div id ="cl-del-div" hidden>

+       <div id="cl-del-div" class="ds-margin-top" hidden>

          <button class="btn btn-danger" id="delete-cl-btn">Delete Changelog</button>

        </div>

        <hr>
@@ -146,7 +141,7 @@ 

  Replication Agreements

  

  -------------------------------- -->

- <div id="repl-agmts" class="all-pages" hidden>

+ <div id="repl-agmts" class="all-pages ds-margin-left" hidden>

    <h3 class="ds-config-header">Replication Agreements for <select

      class="btn btn-default dropdown" id="select-repl-agmt-suffix">

    </select></h3>
@@ -178,7 +173,7 @@ 

  Winsync Agreements

  

  -------------------------------- -->

- <div id="repl-winsync" class="all-pages" hidden>

+ <div id="repl-winsync" class="all-pages ds-margin-left" hidden>

    <h3 class="ds-config-header">Windows Synchronization Agreements for <select

      class="btn btn-default dropdown" id="select-repl-winsync-suffix">

    </select></h3>
@@ -209,19 +204,18 @@ 

  CleanAllRUV Tasks

  

  -------------------------------- -->

- <div id="repl-cleanallruv" class="all-pages" hidden>

+ <div id="repl-cleanallruv" class="all-pages ds-margin-left" hidden>

    <h3 class="ds-config-header">CleanAllRUV Tasks</h3>

    <div class="ds-page-content">

  

      <div>

-       <button class="btn btn-primary" type="button" data-toggle="modal" data-target="#cleanallruv-form" id="create-cleanallruv-btn">Create CleanAllRUV Task</button><div

-         class="ds-float-right"><button class="btn btn-default ds-float-right" type="button" id="refresh-cleanlist-btn">Refresh Task List</button></div>

+       <button class="btn btn-primary" type="button" data-toggle="modal" data-target="#cleanallruv-form" id="create-cleanallruv-btn">Create CleanAllRUV Task</button>

      </div>

      <p></p>

-     <div>

+     <div class="ds-margin-top-lg">

        <p></p>

        <table id="repl-clean-table" class="display ds-repl-table" cellspacing="0" width="100%">

-         <caption class="ds-center"><b>Running CleanAllRUV Tasks</caption>

+         <caption class="ds-center"><h4>Running CleanAllRUV Tasks</h4></caption>

          <thead>

            <tr class="ds-table-header">

              <th>Task Name</th>
@@ -235,6 +229,7 @@ 

          <tbody>

          </tbody>

        </table>

+       <button class="btn btn-default" type="button" id="refresh-cleanlist-btn">Refresh Task List</button>

      </div>

    </div>

  </div>
@@ -545,7 +540,7 @@ 

            <button type="button" class="close" data-dismiss="modal" aria-hidden="true" aria-label="Close">

              <span class="pficon pficon-close"></span>

            </button>

-           <h4 class="modal-title" id="cleanall-label">Create CleanAllRUV Task</h4>

+           <h4 class="modal-title ds-center" id="cleanall-label">Create CleanAllRUV Task</h4>

          </div>

          <div class="modal-body">

            <form class="form-horizontal">
@@ -659,7 +654,7 @@ 

            <button type="button" class="close" data-dismiss="modal" aria-hidden="true" aria-label="Close">

              <span class="pficon pficon-close"></span>

            </button>

-           <h4 class="modal-title" id="enable-repl-header">Enable Replication</h4>

+           <h4 class="modal-title ds-center" id="enable-repl-header">Enable Replication</h4>

          </div>

          <div class="modal-body">

            <form class="form-horizontal">
@@ -672,15 +667,15 @@ 

              </div>

              <div id="repl-rid-form">

                <label for="nsds5replicaid-form" class="ds-config-label-med" title=

-                 "The replica identifier for Master/Supplier (nsds5ReplicaId).">

+                 "The unique replica identifier for Master/Supplier.  Please choose a number between 1 and 65534 (nsds5ReplicaId).">

                  Replica ID</label><input class="ds-input" type="text" id="nsds5replicaid-form" size="4"/>

              </div>

              <hr>

              <div class="ds-inline">

                <div>

-               <label id="enable-repl-mgr-title"><b>Replication Authentication</b></label>

+                 <label id="enable-repl-mgr-title"><b>Replication Authentication</b></label>

                </div>

-               <div class="ds-left-indent ds-repl-form">

+               <div class="ds-left-indent">

                  <div>

                    <input id="auth-mgr" type="radio" name="auth-option" value="manager" checked><label class="ds-sm-left-margin" for="auth-mgr"> Replication Manager</label>

                  </div>
@@ -691,31 +686,27 @@ 

                  <div class="ds-left-indent">

                    <div id="auth-manager-div">

                      <div>

-                       <label for="enable-repl-mgr-dn" title=

-                       "The DN of the replication manager.  This is required for Hubs and Consumers.  (nsds5replicabinddn)">Replication Manager DN</label>

-                     </div>

-                     <div>

-                       <input type="text" class="ds-input-auto" title="The DN of the replication manager entry.  It must use the RDN attribute 'cn', and it must be located under 'cn=config'.  For example: cn=replication manager,cn=config"

-                         id="enable-repl-mgr-dn"/>

+                       <label for="enable-repl-mgr-dn" class="ds-label-sm" title=

+                         "The DN of the replication manager.  The DN should use 'cn' for the RDN, 'cn=replication manager,cn=config' (nsds5replicabinddn)">Replication Manager DN</label><input

+                         type="text" title="The DN of the replication manager entry.  It must use the RDN attribute 'cn', and it must be located under 'cn=config'.  For example: cn=replication manager,cn=config"

+                         id="enable-repl-mgr-dn" size="40" class="ds-left-margin" />

                        <p></p>

                      </div>

                      <div>

                        <label for="enable-repl-pw" class="ds-label-sm" title="Replication manager password (userpassword).">Manager Password</label><input

-                         class="ds-form-input" type="password" autocomplete="new-password" placeholder="Enter credentials" id="enable-repl-pw" name="name" required>

+                         class="ds-left-margin" size="40" type="password" autocomplete="new-password" placeholder="Enter credentials" id="enable-repl-pw" name="name" required>

                      </div>

                      <div>

                        <label for="enable-repl-pw-confirm" class="ds-label-sm" title="Confirm password">Confirm Password</label><input

-                         class="ds-form-input" type="password" autocomplete="new-password" placeholder="Confirm credentials" id="enable-repl-pw-confirm" name="name" required>

+                         class="ds-left-margin" size="40" type="password" autocomplete="new-password" placeholder="Confirm credentials" id="enable-repl-pw-confirm" name="name" required>

                      </div>

                    </div>

  

                    <div id="auth-group-div" hidden>

                      <div>

-                       <label for="enable-bindgroupdn" title=

-                         "The DN of a group that contains members that are allowed to make replication updates (nsDS5ReplicaBindDnGroup).">Bind Group DN</label>

-                     </div>

-                     <div>

-                       <input type="text" id="enable-bindgroupdn" size="35"/>

+                       <label for="enable-bindgroupdn" class="ds-label-sm" title=

+                         "The DN of a group that contains members that are allowed to make replication updates (nsDS5ReplicaBindDnGroup).">Bind Group DN</label><input

+                         type="text" id="enable-bindgroupdn" size="40"/>

                      </div>

                    </div>

  

@@ -21,7 +21,7 @@ 

  

  var agmt_action_html =

    '<div class="dropdown">' +

-      '<button class="btn btn-default dropdown-toggle ds-agmt-dropdown-button" type="button" data-toggle="dropdown">' +

+      '<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">' +

        ' Choose Action...' +

        '<span class="caret"></span>' +

      '</button>' +
@@ -36,7 +36,7 @@ 

  

  var winsync_agmt_action_html =

    '<div class="dropdown">' +

-      '<button class="btn btn-default dropdown-toggle ds-agmt-dropdown-button" type="button" data-toggle="dropdown">' +

+      '<button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown">' +

        ' Choose Action...' +

        '<span class="caret"></span>' +

      '</button>' +
@@ -50,7 +50,7 @@ 

    '</div>';

  

  var cleanallruv_action_html =

-   '<button class="btn btn-default ds-agmt-dropdown-button abort_cleanallruv_btn" type="button" class="abort-cleanallruv">Abort Task</button>';

+   '<button class="btn btn-default abort_cleanallruv_btn" type="button" class="abort-cleanallruv">Abort Task</button>';

  

  // Attribute to CLI argument mappings

  var repl_attr_map = {

@@ -1,6 +1,6 @@ 

  

  <div id="schema-content">

-   <div id="objectclass-page" class="all-pages" hidden>

+   <div id="objectclass-page" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">Objectclasses</h3>

      <div>

        <input type="checkbox" class="ds-config-checkbox" id="oc-user-defined"><label
@@ -9,12 +9,11 @@ 

      <table id="oc-table" class="display ds-repl-table" cellspacing="0" width="100%">

        <thead>

          <tr class="ds-table-header">

-           <th>Objectclass Name</th>

-           <th>OID</th>

-           <th>Parent</th>

-           <th>Required Attributes</th>

-           <th>Allowed Attributes</th>

-           <th>Action</th>

+           <th class="ds-center">Objectclass Name</th>

+           <th class="ds-center">OID</th>

+           <th class="ds-center">Required Attributes</th>

+           <th class="ds-center">Allowed Attributes</th>

+           <th class="ds-center">Action</th>

          </tr>

        </thead>

        <tbody>
@@ -22,7 +21,8 @@ 

      </table>

      <button id="add-oc-button" name="create-oc" data-toggle="modal" data-target="#add-edit-oc-form" class="btn btn-primary ds-button">Create Objectclass</button>

    </div>

-   <div id="attribute-page" class="all-pages" hidden>

+ 

+   <div id="attribute-page" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">Attributes</h3>

      <div>

        <input type="checkbox" class="ds-config-checkbox" id="attr-user-defined"><label
@@ -31,14 +31,11 @@ 

      <table id="attr-table" class="display ds-repl-table" cellspacing="0" width="100%">

        <thead>

          <tr class="ds-table-header">

-           <th>Attribute Name</th>

-           <th>OID</th>

-           <th>Syntax</th>

-           <th>Multivalued</th>

-           <th title="Equality matching rules">Equality Rules</th>

-           <th title="Ordering matching rules">Ordering Rules</th>

-           <th title="Substring matching rules">Substring Rules</th>

-           <th>Action</th>

+           <th class="ds-center">Attribute Name</th>

+           <th class="ds-center">OID</th>

+           <th class="ds-center">Syntax</th>

+           <th class="ds-center">Multivalued</th>

+           <th class="ds-center">Action</th>

          </tr>

        </thead>

        <tbody>
@@ -46,7 +43,8 @@ 

      </table>

      <button id="create-attr-button" data-toggle="modal" data-target="#add-edit-attr-form" class="btn btn-primary ds-button">Create Attribute</button>

    </div>

-   <div id="schema-mr" class="all-pages" hidden>

+ 

+   <div id="schema-mr" class="all-pages ds-margin-left" hidden>

      <div class="">

        <h3 class="ds-config-header">Matching Rules</h3>

        <table id="schema-mr-table" class="display ds-table" cellspacing="0" width="100%">
@@ -122,32 +120,27 @@ 

                  >Attribute Aliases</b></label><input class="ds-input" type="text" id="attr-alias" size="40"/>

              </div>

              <div class="panel panel-default">

-             <div class="panel-heading"><strong>Matching rules</strong></div>

-             <div class="panel-body">

-               <div>

-                 <label for="attr-eq-mr-select" class="ds-config-label-lrg"><b>Equality</b></label><select

-                       class="btn btn-default dropdown ds-oc-dropdown" id="attr-eq-mr-select">

-                 <option></option>

-               </select>

-               </div>

-               <div>

-                 <label for="attr-order-mr-select" class="ds-config-label-lrg"><b>Ordering</b></label><select

-                       class="btn btn-default dropdown ds-oc-dropdown" id="attr-order-mr-select">

-                 <option></option>

-               </select>

-               </div>

-               <div>

-                 <label for="attr-sub-mr-select" class="ds-config-label-lrg"><b>Substring</b></label><select

-                       class="btn btn-default dropdown ds-oc-dropdown" id="attr-sub-mr-select">

-                 <option></option>

-               </select>

-               </div>

-             </div>

-             </div>

-             <div>

-               <label for="attr-x-origin" class="ds-config-label-lrg"

-               title="The attribute X-ORIGIN (keep 'user defined' if it's a non-standard attribute)"><b

-               >Attribute X-ORIGIN</b></label><input class="ds-input" type="text" id="attr-x-origin" size="40"/>

+                 <div class="panel-heading"><strong>Matching rules</strong></div>

+                 <div class="panel-body">

+                   <div>

+                     <label for="attr-eq-mr-select" class="ds-config-label-lrg"><b>Equality</b></label><select

+                           class="btn btn-default dropdown ds-oc-dropdown" id="attr-eq-mr-select">

+                     <option></option>

+                   </select>

+                   </div>

+                   <div>

+                     <label for="attr-order-mr-select" class="ds-config-label-lrg"><b>Ordering</b></label><select

+                           class="btn btn-default dropdown ds-oc-dropdown" id="attr-order-mr-select">

+                     <option></option>

+                   </select>

+                   </div>

+                   <div>

+                     <label for="attr-sub-mr-select" class="ds-config-label-lrg"><b>Substring</b></label><select

+                           class="btn btn-default dropdown ds-oc-dropdown" id="attr-sub-mr-select">

+                     <option></option>

+                   </select>

+                   </div>

+                 </div>

              </div>

            </div>

            <div id="save-attr-spinner" class="ds-center" hidden>
@@ -179,24 +172,24 @@ 

              <div class="ds-inline">

                <p class="ds-modal-error"></p>

                <div>

-                 <label for="oc-parent" class="ds-label-sm" title="The parent objectclass"><b>Parent Objectclass</b></label><select

+                 <label for="oc-parent" class="ds-config-label-lrg" title="The parent objectclass"><b>Parent Objectclass</b></label><select

                        class="btn btn-default dropdown ds-oc-dropdown" id="oc-parent">

                </select>

                </div>

                <div>

-                 <label for="oc-name" class="ds-label-sm" title="The objectclass name"><b

+                 <label for="oc-name" class="ds-config-label-lrg" title="The objectclass name"><b

                    >Objectclass Name</b></label><input class="ds-input" type="text" id="oc-name" size="40" required />

                </div>

                <div>

-                 <label for="oc-desc" class="ds-label-sm" title="The objectClass description"><b

+                 <label for="oc-desc" class="ds-config-label-lrg" title="The objectClass description"><b

                  >ObjectClass Description</b></label><input class="ds-input" type="text" id="oc-desc" size="40"/>

                </div>

                <div>

-                 <label for="oc-oid" class="ds-label-sm" title="Objectclass OID (optional)"><b

+                 <label for="oc-oid" class="ds-config-label-lrg" title="Objectclass OID (optional)"><b

                    >OID (optional)</b></label><input class="ds-input" value="" type="text" id="oc-oid" size="40"/>

                </div>

                <div>

-                 <label for="oc-kind" class="ds-label-sm" title="The parent objectclass"><b>Objectclass Kind</b></label><select

+                 <label for="oc-kind" class="ds-config-label-lrg" title="The parent objectclass"><b>Objectclass Kind</b></label><select

                        class="btn btn-default dropdown ds-oc-dropdown" id="oc-kind">

                  <option value=""></option>

                </select>

@@ -51,17 +51,20 @@ 

  $.fn.dataTable.ext.search.push(

    function(settings, searchData, index, rowData, counter) {

      var x_origin;

-     if ( $("#attr-user-defined").is(":checked") ) {

-       x_origin = rowData[10];

-       if (!is_x_origin_user_defined(x_origin)) {

-         return false;

-       }

-     }

-     if ( $("#oc-user-defined").is(":checked") ) {

-       x_origin = rowData[6];

-       if (!is_x_origin_user_defined(x_origin)) {

-         return false;

-       }

+     if ( settings.sTableId == "attr-table" ) {

+         if ( $("#attr-user-defined").is(":checked") ) {

+           x_origin = rowData[7];

+           if (!is_x_origin_user_defined(x_origin)) {

+             return false;

+           }

+         }

+     } else {

+         if ( $("#oc-user-defined").is(":checked") ) {

+           x_origin = rowData[5];

+           if (!is_x_origin_user_defined(x_origin)) {

+             return false;

+           }

+         }

      }

      return true;

    }
@@ -162,9 +165,6 @@ 

        if (item.oid === undefined) {

           item.oid = "";

        }

-       if (item.sup === undefined) {

-          item.sup = "";

-       }

        if (item.must === undefined) {

           item.must = [];

        }
@@ -180,17 +180,20 @@ 

        if (item.desc === undefined) {

           item.desc = "";

        }

+       if (item.sup === undefined) {

+           item.sup = "";

+       }

  

        data.push.apply(data, [[

          item.name,

          item.oid,

-         item.sup,

          item.must.join(" "),

          item.may.join(" "),

          oc_btn,

          item.x_origin,

          oc_kind_opts[item.kind],

-         item.desc

+         item.desc,

+         item.sup

        ]]);

      }

      // Update html table
@@ -205,10 +208,10 @@ 

          "search": "Search Objectclasses"

        },

        "columnDefs": [ {

-         "targets": 5,

+         "targets": 4,

          "orderable": false

        }, {

-         "targets": 6,

+         "targets": 5,

          "visible": false

        }]

      });
@@ -264,18 +267,9 @@ 

          if (item.sup === undefined) {

             item.sup = "";

          }

-         if (item.equality === undefined) {

-            item.equality = "";

-         }

-         if (item.ordering === undefined) {

-            item.ordering = "";

-         }

          if (item.x_origin === undefined) {

             item.x_origin = "";

          }

-         if (item.substr === undefined) {

-            item.substr = "";

-         }

          if (item.no_user_mod === undefined) {

             item.no_user_mod = "";

          }
@@ -288,22 +282,31 @@ 

          if (item.aliases === undefined) {

             item.aliases = "";

          }

+         if (item.equality === undefined) {

+            item.equality = "";

+         }

+         if (item.ordering === undefined) {

+            item.ordering = "";

+         }

+         if (item.substr === undefined) {

+            item.substr = "";

+         }

  

          data.push.apply(data, [[

            item.name,

            item.oid,

            syntax_name,

            multivalued,

-           item.equality,

-           item.ordering,

-           item.substr,

            attr_btn,

            item.desc,

            item.aliases,

            item.x_origin,

            attr_usage_opts[item.usage],

            item.no_user_mod,

-           item.sup

+           item.sup,

+           item.equality,

+           item.ordering,

+           item.substr,

          ]]);

        }

        // Update html table
@@ -318,10 +321,10 @@ 

            "search": "Search Attributes"

          },

          "columnDefs": [ {

-           "targets": 7,

+           "targets": 4,

            "orderable": false

          }, {

-           "targets": 8,

+           "targets": 5,

            "visible": false

          }]

        });
@@ -423,22 +426,28 @@ 

        }

        var cmd = [DSCONF, server_inst, 'schema', 'objectclasses', action, oc_name];

        // Process and validate parameters

-       cmd.push.apply(cmd, ["--oid", oc_oid]);

-       cmd.push.apply(cmd, ["--sup", oc_parent]);

-       cmd.push.apply(cmd, ["--kind", oc_kind]);

-       cmd.push.apply(cmd, ["--desc", oc_desc]);

-       cmd.push.apply(cmd, ["--x-origin", oc_x_origin]);

-       cmd.push.apply(cmd, ["--must"]);

+       if (oc_oid != "") {

+           cmd.push.apply(cmd, ["--oid", oc_oid]);

+       }

+       if (oc_parent != "") {

+           cmd.push.apply(cmd, ["--sup", oc_parent]);

+       }

+       if (oc_kind != "") {

+           cmd.push.apply(cmd, ["--kind", oc_kind]);

+       }

+       if (oc_desc != "") {

+           cmd.push.apply(cmd, ["--desc", oc_desc]);

+       }

+       if (oc_x_origin != "") {

+           cmd.push.apply(cmd, ["--x-origin=\"" + oc_x_origin + "\""]);

+       }

        if (oc_required_list.length !== 0) {

+         cmd.push.apply(cmd, ["--must"]);

          cmd.push.apply(cmd, oc_required_list);

-       } else {

-         cmd.push.apply(cmd, [""]);

        }

-       cmd.push.apply(cmd, ["--may"]);

        if (oc_allowed_list.length !== 0) {

+         cmd.push.apply(cmd, ["--may"]);

          cmd.push.apply(cmd, oc_allowed_list);

-       } else {

-         cmd.push.apply(cmd, [""]);

        }

  

        $("#save-oc-spinner").show();
@@ -461,13 +470,13 @@ 

            schema_oc_table.row.add( [

              item.name,

              item.oid,

-             item.sup,

              item.must.join(" "),

              item.may.join(" "),

              oc_btn_html,

              item.x_origin,

              oc_kind_opts[item.kind],

-             item.desc

+             item.desc,

+             item.sup

            ] ).draw( false );

          }).

          fail(function(oc_data) {
@@ -557,7 +566,7 @@ 

        var attr_syntax_text = $("#attr-syntax :selected").text();

        var attr_usage = $('#attr-usage').val();

        var attr_desc = $('#attr-desc').val();

-       var attr_x_origin= $('#attr-x-origin').val();

+       var attr_x_origin = "user defined";

        var attr_parent = $('#attr-parent').val();

        var attr_aliases = $('#attr-alias').val().split(" ");

        var eq_mr= $('#attr-eq-mr-select').val();
@@ -652,16 +661,17 @@ 

              item.oid,

              attr_syntax_name,

              multiple,

-             item.equality,

-             item.ordering,

-             item.substr,

              attr_btn_html,

              item.desc,

              item.aliases,

              item.x_origin,

              attr_usage_opts[item.usage],

              item.no_user_mod,

-             item.sup

+             item.sup,

+             item.equality,

+             item.ordering,

+             item.substr,

+ 

            ] ).draw( false );

            $("#attr-name").attr('disabled', false);

          }).
@@ -680,7 +690,7 @@ 

        }).

        fail(function(data) {

          $("#save-attr-spinner").hide();

-         popup_err("Error", "Failed to save the attribute\n" + data.message);

+         popup_err("Error", "Failed to save the attribute: " + data.message);

          $("#add-edit-attr-form").modal('toggle');

       });

      });
@@ -692,24 +702,15 @@ 

        var edit_attr_oid = data[1];

        var edit_attr_syntax = $.parseHTML(data[2])[0].title;

        var edit_attr_multivalued = data[3];

-       var edit_attr_eq_mr = data[4];

-       var edit_attr_order_mr = data[5];

-       var edit_attr_sub_mr = data[6];

-       var edit_attr_desc = data[8];

-       var edit_attr_aliases = data[9];

-       var edit_attr_x_origin = data[10];

-       var edit_attr_usage = data[11];

-       var edit_attr_no_user_mod = data[12];

-       var edit_attr_parent = data[13];

-       if (edit_attr_eq_mr) {

-         edit_attr_eq_mr = data[4];

-       }

-       if (edit_attr_order_mr) {

-         edit_attr_order_mr = data[5];

-       }

-       if (edit_attr_sub_mr) {

-         edit_attr_sub_mr = data[6];

-       }

+       var edit_attr_desc = data[5];

+       var edit_attr_aliases = data[6];

+       var edit_attr_x_origin = data[7];

+       var edit_attr_usage = data[8];

+       var edit_attr_no_user_mod = data[9];

+       var edit_attr_parent = data[10];

+       var edit_attr_eq_mr = data[11];

+       var edit_attr_order_mr = data[12];

+       var edit_attr_sub_mr = data[13];

  

        $("#add-edit-attr-header").html('Edit Attribute: ' + edit_attr_name);

        $("#attr-name").val(edit_attr_name);
@@ -718,7 +719,6 @@ 

        $("#attr-usage")[0].value = edit_attr_usage;

        $("#attr-parent")[0].value = edit_attr_parent;

        $("#attr-desc").val(edit_attr_desc);

-       $("#attr-x-origin").val(edit_attr_x_origin);

        if (edit_attr_aliases) {

          $("#attr-alias").val(edit_attr_aliases.join(" "));

        }
@@ -779,15 +779,12 @@ 

        var data = schema_oc_table.row(element.parents('tr') ).data();

        var edit_oc_name = data[0];

        var edit_oc_oid = data[1];

-       var edit_oc_parent = data[2];

-       var edit_oc_required = data[3].split(" ");

-       var edit_oc_allowed = data[4].split(" ");

-       var edit_oc_x_origin = data[6];

-       var edit_oc_kind = data[7];

-       var edit_oc_desc = data[8];

-         if (edit_oc_parent) {

-           edit_oc_parent = data[2];

-         }

+       var edit_oc_required = data[2].split(" ");

+       var edit_oc_allowed = data[3].split(" ");

+       var edit_oc_x_origin = data[5];

+       var edit_oc_kind = data[6];

+       var edit_oc_desc = data[7];

+       var edit_oc_parent = data[8];

  

        $("#save-oc-spinner").show();

        $("#add-edit-oc-header").html('Edit Objectclass: ' + edit_oc_name);

@@ -4,7 +4,7 @@ 

    <!--

          General Config Settings

    -->

-   <div id="server-config" class="all-pages">

+   <div id="server-config" class="all-pages ds-margin-left">

      <h3 class="ds-config-header">Server Configuration Settings</h3>

      <div class="ds-container">

        <div class="ds-inline">
@@ -177,7 +177,7 @@ 

    <!--

          SASL Settings

    -->

-   <div id="server-sasl" class="all-pages" hidden>

+   <div id="server-sasl" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">SASL Settings</h3>

      <div class="ds-inline">

        <div>
@@ -218,9 +218,9 @@ 

  

  

    <!--

-         Password Policy Settings

+         Password Policy Settings -> for REACT JS this should be tabbed navigation

    -->

-   <div id="global-password-policy" class="all-pages" hidden>

+   <div id="global-password-policy" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">Global Password Policy Settings</h3>

        <div class="ds-container">

          <div class="ds-split">
@@ -228,8 +228,8 @@ 

              <h4>General Settings</h4>

              <hr class="ds-hr">

              <div>

-               <label for="passwordstoragescheme" class="ds-server-label" title="Set the password storage scheme (passwordstoragescheme).">Password Storage Scheme</label><select

-                 class="btn btn-default dropdown ds-passwd-dropdownZ" id="passwordstoragescheme">

+               <label for="passwordstoragescheme" class="ds-spacing-sm" title="Set the password storage scheme (passwordstoragescheme).">Password Storage Scheme</label><select

+                 class="btn btn-default dropdown" id="passwordstoragescheme">

                    <option>PBKDF2_SHA256</option>

                    <option>SSHA512</option>

                    <option>SSHA384</option>
@@ -269,7 +269,7 @@ 

              </div>

              <div>

                <p></p>

-               <label for="passwordAdminDN" class="ds-server-labelZ" title="The DN for a password administrator or administrator group (passwordAdminDN)">Password Administrator</label><input

+               <label for="passwordAdminDN" title="The DN for a password administrator or administrator group (passwordAdminDN)">Password Administrator</label><input

                  class="ds-input" type="text" id="passwordAdminDN" size="40"/>

              </div>

            </div>
@@ -310,15 +310,15 @@ 

              <div class="ds-expired-div" id="expiration-attrs">

                <div>

                  <label for="passwordmaxage" class="ds-expire-label" title="The server's local hostname (passwordMaxAge).">Password Expiration Time (in seconds)</label><input

-                   class="ds-input" type="text" id="passwordmaxage" size="5"/>

+                   class="ds-input" type="text" id="passwordmaxage" size="6"/>

                </div>

                <div>

                  <label for="passwordgracelimit" class="ds-expire-label" title="The server's local hostname (passwordGraceLimit).">Allowed Logins After Password Expires</label><input

-                   class="ds-input" type="text" id="passwordgracelimit" size="5"/>

+                   class="ds-input" type="text" id="passwordgracelimit" size="6"/>

                </div>

                <div>

                  <label for="passwordwarning" class="ds-expire-label" title="Set the time (in seconds), before a password is about to expire, to send a warning. (passwordWarning).">Send Password Expiring Warning (in seconds)</label><input

-                   class="ds-input" type="text" id="passwordwarning" size="5"/>

+                   class="ds-input" type="text" id="passwordwarning" size="6"/>

                </div>

                <div>

                  <input type="checkbox" class="ds-send-expiring-checkbox" id="passwordsendexpiringtime"><label
@@ -410,16 +410,6 @@ 

            <div class="ds-divider"></div>

            <div class="ds-inline">

              <div>

-               <label for="passwordbadwords" class="ds-expire-label" title=

-                 "A space-separated list of words that are not allowed to be contained in the new password (passwordBadWords).">Reject Passwords That Contain These Words </label><input

-                 class="ds-input" type="text" id="passwordbadwords" size="20"/>

-             </div>

-             <div>

-               <label for="passworduserattributes" class="ds-expire-label" title=

-                 "A space-separated list of entry attributes to compare to the new password (passwordUserAttributes).">Entry Attributes To Compare </label><input

-                 class="ds-input" type="text" id="passworduserattributes" size="20"/>

-             </div>

-             <div>

                <label for="passwordmaxrepeats" class="ds-expire-label" title=

                  "The maximum number of times the same character can sequentially appear in a password (passwordMaxRepeats).">Maximum Number Of Repeated Characters </label><input

                  class="ds-input" type="text" id="passwordmaxrepeats" size="5"/>
@@ -442,15 +432,27 @@ 

              <div>

                <label for="passwordpalindrome" class="ds-expire-label" title=

                  "Reject a password if it is a palindrome (passwordPalindrome).">Reject Passwords that Are Palindromes </label><input

-                 class="ds-checkbox-group" type="checkbox" id="passwordpalindrome"/>

+                 class="ds-margin-top" type="checkbox" id="passwordpalindrome"/>

              </div>

              <div>

                <label for="passworddictcheck" class="ds-expire-label" title=

                  "Check the password against the system's CrackLib dictionary (passwordDictCheck).">Check Password Contains Dictionary Word </label><input

-                 class="ds-checkbox-group" type="checkbox" id="passworddictcheck"/>

+                 class="ds-margin-top" type="checkbox" id="passworddictcheck"/>

              </div>

            </div>

          </div>

+         <div class="ds-margin-left-sm ds-margin-top">

+             <div>

+               <label for="passwordbadwords" title=

+                 "A space-separated list of words that are not allowed to be contained in the new password (passwordBadWords).">Reject Passwords That Contain These Words </label><input

+                 class="ds-input-auto" type="text" id="passwordbadwords"/>

+             </div>

+             <div class="ds-margin-top">

+               <label for="passworduserattributes" title=

+                 "A space-separated list of entry attributes to compare to the new password (passwordUserAttributes).">Entry Attributes To Compare </label><input

+                 class="ds-input-auto" type="text" id="passworduserattributes"/>

+             </div>

+         </div>

          <div class="ds-footer">

            <button class="btn btn-primary save-button">Save</button>

          </div>
@@ -460,9 +462,9 @@ 

      <!-- -------------------------------------

      Local Password Policies

      ---------------------------------------- -->

-     <div id="local-password-policy" class="all-pages" hidden>

+     <div id="local-password-policy" class="all-pages ds-margin-left" hidden>

        <h3 class="ds-config-header">Local Password Policies  </h3>

-       <label class="ds-config-label-med" for="local-pwp-suffix">Database Suffix</Label> <select

+       <label for="local-pwp-suffix">Database Suffix</Label> <select

          class="btn btn-default dropdown" id="local-pwp-suffix">

        </select>

        <div class="ds-page-content">
@@ -488,7 +490,7 @@ 

    -->

  

    <!-- Access logging -->

-   <div id="server-access-log" class="all-pages" hidden>

+   <div id="server-access-log" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">Access Log Settings</h3>

        <input type="checkbox" class="ds-config-checkbox" id="nsslapd-accesslog-logging-enabled"><label

          for="nsslapd-accesslog-logging-enabled" class="ds-label" title="Enable access logging (nsslapd-accesslog-logging-enabled)."> Enable Access Logging</label>
@@ -581,7 +583,7 @@ 

      </div>

    </div>

  

-   <div id="server-audit-log" class="all-pages" hidden>

+   <div id="server-audit-log" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">Audit Log Settings</h3>

      <input type="checkbox" class="ds-config-checkbox" id="nsslapd-auditlog-logging-enabled"><label

        for="nsslapd-auditlog-logging-enabled" class="ds-label" title="Enable audit logging (nsslapd-auditlog-logging-enabled)."> Enable Audit Logging</label>
@@ -644,7 +646,7 @@ 

    </div>

  

      <!-- Auditfail logging -->

-   <div id="server-auditfail-log" class="all-pages" hidden>

+   <div id="server-auditfail-log" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">Audit Failure Log Settings</h3>

      <input type="checkbox" class="ds-config-checkbox" id="nsslapd-auditfaillog-logging-enabled"><label

        for="nsslapd-auditfaillog-logging-enabled" class="ds-label" title="Enable audit failure logging (nsslapd-auditfaillog-logging-enabled)."> Enable Audit Failure Logging</label>
@@ -702,7 +704,7 @@ 

    </div>

  

    <!-- Error logging -->

-   <div id="server-errors-log" class="all-pages" hidden>

+   <div id="server-errors-log" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">Error Log Settings</h3>

      <input type="checkbox" class="ds-config-checkbox" id="nsslapd-errorlog-logging-enabled" checked><label

        for="nsslapd-errorlog-logging-enabled" class="ds-label" title="Enable error logging (nsslapd-errorlog-logging-enabled)."> Enable Error Logging</label>
@@ -835,7 +837,7 @@ 

    <!--

          Tuning

    -->

-   <div id="server-tuning" class="all-pages" hidden>

+   <div id="server-tuning" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">Server Tuning & Limits</h3>

      <div class="ds-container">

        <!-- Attribute list -->
@@ -916,7 +918,7 @@ 

            </div>

          </div>

          <div class="ds-divider"></div>

-         <div class="ds-inline ds-checkbox-group">

+         <div class="ds-inline ds-margin-top">

            <div>

              <input type="checkbox" class="ds-config-checkbox" id="nsslapd-ignore-virtual-attrs" checked><label

                for="nsslapd-ignore-virtual-attrs" class="ds-label" title=
@@ -944,11 +946,11 @@ 

    <!--

          LDAPI & Autobind Settings

    -->

-   <div id="server-ldapi" class="all-pages" hidden>

+   <div id="server-ldapi" class="all-pages ds-margin-left" hidden>

      <h3 class="ds-config-header">LDAPI & Autobind Settings</h3>

      <div>

-     <input type="checkbox" class="ds-config-checkbox" id="nsslapd-ldapilisten" checked><label

-       for="nsslapd-ldapilisten" class="ds-label" title="Enable LDAPI (nsslapd-ldapilisten)."> Enable LDAPI</label>

+       <input type="checkbox" class="ds-config-checkbox" id="nsslapd-ldapilisten" checked><label

+         for="nsslapd-ldapilisten" class="ds-label" title="Enable LDAPI (nsslapd-ldapilisten)."> Enable LDAPI</label>

      </div>

      <div class="ldapi-attrs ds-inline" hidden>

        <div>
@@ -1023,7 +1025,7 @@ 

                  <label for="sasl-map-regex" class="ds-config-label" title="SASL mapping regular expression">

                    SASL Mapping Regex</label><input class="ds-input sasl-input" type="text" id="sasl-map-regex"/><label

                    for="test-sasl-regex" class="ds-left-margin">Test Regex</label><input type="checkbox"

-                   class="ds-left-margin ds-checkbox-group" id="test-sasl-regex">

+                   class="ds-left-margin ds-margin-top" id="test-sasl-regex">

                </div>

                <div id="sasl-test-div" hidden>

                  <div class="ds-inline">
@@ -1064,7 +1066,7 @@ 

    <!-- Create Local Password Policy -->

    <div class="modal fade" id="local-pwp-form" data-backdrop="static" tabindex="-1" role="dialog" aria-labelledby="local-pwp-header" aria-hidden="true">

      <div class="modal-dialog">

-       <div class="modal-content ds-modal-wide">

+       <div class="ds-modal-wide modal-content">

          <div class="modal-header">

            <button type="button" class="close" data-dismiss="modal" aria-hidden="true" aria-label="Close">

              <span class="pficon pficon-close"></span>
@@ -1201,7 +1203,7 @@ 

              <input type="checkbox" class="ds-config-checkbox ds-pwp-checkbox" id="local-passwordchecksyntax"><label

                for="local-passwordchecksyntax" class="ds-label" title="Enable account lockout (passwordCheckSyntax).">Check Password Syntax</label>

              <div class="ds-container ds-expired-div" id="local-syntax-attrs">

-               <div>

+               <div class="ds-split">

                  <label for="local-passwordminlength" class="ds-expire-label" title=

                    "The minimum number of characters in the password (passwordMinLength).">Password Minimum Length </label><input

                    class="ds-pw-input ds-pwp-input" type="text" id="local-passwordminlength" size="5"/>
@@ -1230,15 +1232,7 @@ 

                    "The smallest attribute value used when checking if the password contains any of the user's account information (passwordMinTokenLength).">Minimum Token Length </label><input

                    class="ds-pw-input ds-pwp-input" type="text" id="local-passwordmintokenlength" size="5"/>

                </div>

-               <div class="ds-divider"></div>

-               <div class="ds-divider"></div>

-               <div>

-                 <label for="local-passwordbadwords" class="ds-pw-list-label" title=

-                   "A space-separated list of words that are not allowed to be contained in the new password (passwordBadWords).">Reject Passwords That Contain These Words </label><input

-                   class="ds-pw-list-input ds-pwp-input" type="text" id="local-passwordbadwords"/>

-                 <label for="local-passworduserattributes" class="ds-pw-list-label" title=

-                   "A space-separated list of entry attributes to compare to the new password (passwordUserAttributes).">Entry Attributes To Compare </label><input

-                   class="ds-pw-list-input ds-pwp-input" type="text" id="local-passworduserattributes"/>

+               <div class="ds-split">

                  <label for="local-passwordmaxrepeats" class="ds-expire-label" title=

                    "The maximum number of times the same character can sequentially appear in a password (passwordMaxRepeats).">Maximum Number Of Repeated Characters </label><input

                    class="ds-pw-input ds-pwp-input" type="text" id="local-passwordmaxrepeats"/>
@@ -1253,12 +1247,24 @@ 

                    class="ds-pw-input ds-pwp-input" type="text" id="local-passwordmaxclasschars"/>

                  <label for="local-passwordpalindrome" class="ds-expire-label" title=

                    "Reject a password if it is a palindrome (passwordPalindrome).">Reject Passwords that Are Palindromes </label><input

-                   class="ds-checkbox-group ds-pwp-checkbox" type="checkbox" id="local-passwordpalindrome"/>

+                   class="ds-margin-top ds-pwp-checkbox" type="checkbox" id="local-passwordpalindrome"/>

                  <label for="local-passworddictcheck" class="ds-expire-label" title=

                    "Check the password against the system's CrackLib dictionary (passwordDictCheck).">Check Password Contains Dictionary Word </label><input

-                   class="ds-checkbox-group ds-pwp-checkbox" type="checkbox" id="local-passworddictcheck"/>

+                   class="ds-margin-top ds-pwp-checkbox" type="checkbox" id="local-passworddictcheck"/>

                </div>

              </div>

+             <div class="ds-margin-left-sm ds-margin-top">

+                 <div>

+                   <label for="passwordbadwords" title=

+                     "A space-separated list of words that are not allowed to be contained in the new password (passwordBadWords).">Reject Passwords That Contain These Words </label><input

+                     class="ds-input-auto" type="text" id="local-passwordbadwords"/>

+                 </div>

+                 <div class="ds-margin-top">

+                   <label for="passworduserattributes" title=

+                     "A space-separated list of entry attributes to compare to the new password (passwordUserAttributes).">Entry Attributes To Compare </label><input

+                     class="ds-input-auto" type="text" id="local-passworduserattributes"/>

+                 </div>

+             </div>

            </form>

          </div>

        </div>

@@ -1,7 +1,7 @@ 

  

  var sasl_action_html =

    '<div class="dropdown">' +

-     '<button class="btn btn-default dropdown-toggle ds-agmt-dropdown-button" type="button" id="dropdownMenu1" data-toggle="dropdown">' +

+     '<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown">' +

        'Choose Action...' +

        '<span class="caret"></span>' +

      '</button>' +
@@ -13,7 +13,7 @@ 

  

  var local_pwp_html =

    '<div class="dropdown" >' +

-      '<button class="btn btn-default dropdown-toggle ds-agmt-dropdown-button" type="button" id="menu1" data-toggle="dropdown">Choose Action...' +

+      '<button class="btn btn-default dropdown-toggle" type="button" id="menu1" data-toggle="dropdown">Choose Action...' +

         '<span class="caret"></span></button>' +

       '<ul id="test-drop" class="dropdown-menu ds-agmt-dropdown" role="menu" aria-labelledby="menu1">' +

         '<li role="policy-role"><a role="pwpolicy" tabindex="0" class="edit-local-pwp" href="#">View/Edit Policy</a></li>' +

@@ -157,6 +157,17 @@ 

                  test: /\.css$/,

                  include: /node_modules/,

                  use: ['style-loader', 'css-loader'],

+             },

+             {

+                 test: /\.(png|jpg|gif)$/i,

+                 use: [

+                     {

+                         loader: 'url-loader',

+                         options: {

+                             limit: 8192

+                         }

+                     }

+                 ]

              }

          ]

      },

file modified
+15 -3
@@ -90,9 +90,9 @@ 

  

      @staticmethod

      def _validate_ldap_schema_value(value):

-         """Validate the values that we suppl to ldap.schema.models

+         """Validate the values that we supply to ldap.schema.models

          because it expects some exact values.

-         It should tuple, not list.

+         It should be tuple, not list.

          It should be None or () if we don't want """

  

          if type(value) == list:
@@ -227,7 +227,19 @@ 

                  raise ValueError('Wrong parameter name was specified: %s' % oc_param)

              if value is not None:

                  value = self._validate_ldap_schema_value(value)

-                 setattr(schema_object, oc_param.lower(), value)

+                 setattr(schema_object, oc_param, value)

+             else:

+                 if getattr(schema_object, oc_param, False):

+                     # Need to set the correct "type" for the empty value

+                     if oc_param in ['may', 'must',  'x-origin', 'sup']:

+                         # Expects tuple

+                         setattr(schema_object, oc_param, ())

+                     elif oc_param in ['desc', 'oid']:

+                         # Expects None

+                         setattr(schema_object, oc_param, None)

+                     elif oc_param in ['obsolete', 'kind']:

+                         # Expects numberic

+                         setattr(schema_object, oc_param, 0)

  

          schema_object_str = str(schema_object)

          if schema_object_str == schema_object_str_old:

Description:

Fix the UI stylings to be aligned with Patternfly 4.

Also cleaned up ds.css to remove unused and duplicate classes.

Added framework for PF React 4 so we start porting PF React to version 4 as well.

relates: https://pagure.io/389-ds-base/issue/50507

rebased onto ee2e8066d340a6cc3251ae925fa5e45367b85262

4 years ago

rebased onto 6ae540f35bed681ad427422e35ec91fc72f164bb

4 years ago

rebased onto e8345c9d76e92a5e35f0bffcb71905952d44d260

4 years ago

rebased onto 668601cbbec28438719e6ec635703dbbcb6d4fd3

4 years ago

rebased onto 212133d118532ca182d6ddf192b73d788f15cd10

4 years ago

While creating a new instance,Creating instance... should be centered in the modal window, I think.

Server Settings -> LDAPI & Autobind - The title LDAPI Socket File Path occupies 2 lines. I think, it will looks better if it will be on one line.

Database -> Backups & LDIFs - Create Backup - while the creation is happenning, the loading line's font sizes are broken. The spinner is very bid, the next word is normal and the '()` phrase is unreadably small.

Replication -> Enable Replication - The title Manager Password takes 2 lines. Probably, better if it'll be one line.

rebased onto 7046178

4 years ago

Pull-Request has been merged by mreynolds

4 years ago

389-ds-base is moving from Pagure to Github. This means that new issues and pull requests
will be accepted only in 389-ds-base's github repository.

This pull request has been cloned to Github as issue and is available here:
- https://github.com/389ds/389-ds-base/issues/3570

If you want to continue to work on the PR, please navigate to the github issue,
download the patch from the attachments and file a new pull request.

Thank you for understanding. We apologize for all inconvenience.

Pull-Request has been closed by spichugi

3 years ago
Metadata
Changes Summary 49
+1 -1
file changed
rpm/389-ds-base.spec.in
+1718 -75
file changed
src/cockpit/389-console/package-lock.json
+4 -1
file changed
src/cockpit/389-console/package.json
+2 -2
file changed
src/cockpit/389-console/src/banner.html
+30 -888
file changed
src/cockpit/389-console/src/css/ds.css
+1 -6
file changed
src/cockpit/389-console/src/ds.js
+16 -19
file changed
src/cockpit/389-console/src/index.html
+1 -1
file changed
src/cockpit/389-console/src/lib/customCollapse.jsx
+11 -11
file changed
src/cockpit/389-console/src/lib/database/backups.jsx
+63 -69
file changed
src/cockpit/389-console/src/lib/database/chaining.jsx
+125 -73
file changed
src/cockpit/389-console/src/lib/database/databaseConfig.jsx
+6 -1
file changed
src/cockpit/389-console/src/lib/database/databaseTables.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/database/indexes.jsx
+12 -3
file changed
src/cockpit/389-console/src/lib/database/suffix.jsx
+55 -26
file changed
src/cockpit/389-console/src/lib/database/suffixConfig.jsx
+4 -4
file changed
src/cockpit/389-console/src/lib/database/vlvIndexes.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/monitor/accesslog.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/monitor/auditfaillog.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/monitor/auditlog.jsx
+16 -16
file changed
src/cockpit/389-console/src/lib/monitor/dbMonitor.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/monitor/errorlog.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/monitor/replMonitor.jsx
+115 -67
file changed
src/cockpit/389-console/src/lib/monitor/serverMonitor.jsx
+27 -27
file changed
src/cockpit/389-console/src/lib/monitor/snmpMonitor.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/monitor/suffixMonitor.jsx
+3 -4
file changed
src/cockpit/389-console/src/lib/plugins/accountPolicy.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/plugins/attributeUniqueness.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/plugins/autoMembership.jsx
+1 -2
file changed
src/cockpit/389-console/src/lib/plugins/dna.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/plugins/linkedAttributes.jsx
+1 -2
file changed
src/cockpit/389-console/src/lib/plugins/managedEntries.jsx
+49 -37
file changed
src/cockpit/389-console/src/lib/plugins/memberOf.jsx
+2 -2
file changed
src/cockpit/389-console/src/lib/plugins/passthroughAuthentication.jsx
+9 -14
file changed
src/cockpit/389-console/src/lib/plugins/pluginBasicConfig.jsx
+8 -9
file changed
src/cockpit/389-console/src/lib/plugins/referentialIntegrity.jsx
+4 -4
file changed
src/cockpit/389-console/src/lib/plugins/retroChangelog.jsx
+7 -7
file changed
src/cockpit/389-console/src/lib/plugins/rootDNAccessControl.jsx
+0 -1
file changed
src/cockpit/389-console/src/lib/plugins/usn.jsx
+1 -1
file changed
src/cockpit/389-console/src/lib/plugins/winsync.jsx
+4 -2
file changed
src/cockpit/389-console/src/lib/security/securityTables.jsx
+3 -7
file changed
src/cockpit/389-console/src/plugins.jsx
+33 -42
file changed
src/cockpit/389-console/src/replication.html
+3 -3
file changed
src/cockpit/389-console/src/replication.js
+41 -48
file changed
src/cockpit/389-console/src/schema.html
+77 -80
file changed
src/cockpit/389-console/src/schema.js
+53 -47
file changed
src/cockpit/389-console/src/servers.html
+2 -2
file changed
src/cockpit/389-console/src/servers.js
+11 -0
file changed
src/cockpit/389-console/webpack.config.js
+15 -3
file changed
src/lib389/lib389/schema.py