OWL ITS + 탐지시스템(인터넷 진흥원)
jhjang
2021-10-14 84eb87b232706a8599184b1e9166ad798b1a3f1a
owl-local
260개 파일 추가됨
103799 ■■■■■ 파일 변경됨
src/main/webapp/bower_components/angular-animate/.bower.json 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/LICENSE.md 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/README.md 68 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/angular-animate.js 4152 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/angular-animate.min.js 57 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/angular-animate.min.js.map 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/bower.json 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/index.js 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/package.json 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-bindonce/.bower.json 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-bindonce/CHANGELOG.md 43 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-bindonce/README.md 154 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-bindonce/bindonce.js 325 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-bindonce/bindonce.min.js 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-bindonce/bower.json 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-bindonce/package.json 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/.bower.json 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/LICENSE.md 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/README.md 68 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/angular-cookies.js 330 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/angular-cookies.min.js 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/angular-cookies.min.js.map 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/bower.json 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/index.js 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-cookies/package.json 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/.bower.json 51 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/Gruntfile.js 60 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/LICENSE 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/README.md 217 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/bower.json 42 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/dist/angular-nvd3.js 653 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/dist/angular-nvd3.min.js 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/index.js 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-nvd3/package.json 51 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/.bower.json 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/LICENSE.md 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/README.md 68 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/angular-resource.js 866 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/angular-resource.min.js 15 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/angular-resource.min.js.map 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/bower.json 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/index.js 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-resource/package.json 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/.bower.json 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/LICENSE.md 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/README.md 68 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/angular-sanitize.js 739 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/angular-sanitize.min.js 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/angular-sanitize.min.js.map 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/bower.json 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/index.js 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-sanitize/package.json 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-loader-partial/.bower.json 22 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-loader-partial/README.md 29 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-loader-partial/angular-translate-loader-partial.js 558 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-loader-partial/angular-translate-loader-partial.min.js 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-loader-partial/bower.json 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-loader-partial/package.json 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-storage-cookie/.bower.json 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-storage-cookie/README.md 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js 121 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-storage-cookie/bower.json 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate-storage-cookie/package.json 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate/.bower.json 22 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate/README.md 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate/angular-translate.js 3758 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate/angular-translate.min.js 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-translate/bower.json 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/.bower.json 34 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/CHANGELOG.md 430 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/CONTRIBUTING.md 65 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/LICENSE 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/README.md 252 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/bower.json 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.js 4684 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.min.js 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/common.js 298 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/resolve.js 254 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/state.js 1516 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/stateDirectives.js 412 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/stateFilters.js 39 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/templateFactory.js 166 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/urlMatcherFactory.js 1081 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/urlRouter.js 431 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/view.js 45 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/viewDirective.js 366 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-router/src/viewScroll.js 52 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-sortable/.bower.json 23 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-sortable/.travis.yml 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-sortable/bower.json 10 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-sortable/sortable.js 600 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-ui-sortable/sortable.min.js 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/.bower.json 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/LICENSE.md 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/README.md 64 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/angular-csp.css 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/angular.js 32621 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/angular.min.js 324 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/angular.min.js.gzip 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/angular.min.js.map 8 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/bower.json 9 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/index.js 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular/package.json 25 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/.bower.json 32 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/README.md 44 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/bower.json 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.css 269 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js 1653 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.scss 611 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/demo.html 369 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/drp.png 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/example/amd/index.html 210 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/example/amd/main.js 141 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/example/amd/require.js 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/example/browserify/README.md 11 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/example/browserify/bundle.js 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/example/browserify/index.html 209 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/example/browserify/main.js 135 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/package.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/package.json 32 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/website/index.html 836 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/website/website.css 127 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/bootstrap-daterangepicker/website/website.js 146 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/.bower.json 45 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/CONTRIBUTING.md 28 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/LICENSE 24 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/README.md 198 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/aes.js 232 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/bower.json 35 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/cipher-core.js 880 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/core.js 760 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/crypto-js.js 5988 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/docs/QuickStartGuide.wiki 470 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/enc-base64.js 135 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/enc-hex.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/enc-latin1.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/enc-utf16.js 149 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/enc-utf8.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/evpkdf.js 132 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/format-hex.js 66 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/format-openssl.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac-md5.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac-ripemd160.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac-sha1.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac-sha224.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac-sha256.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac-sha3.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac-sha384.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac-sha512.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/hmac.js 143 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/index.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/lib-typedarrays.js 76 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/md5.js 268 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/mode-cfb.js 78 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/mode-ctr-gladman.js 116 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/mode-ctr.js 58 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/mode-ecb.js 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/mode-ofb.js 54 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/package.json 38 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/pad-ansix923.js 49 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/pad-iso10126.js 44 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/pad-iso97971.js 40 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/pad-nopadding.js 30 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/pad-pkcs7.js 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/pad-zeropadding.js 45 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/pbkdf2.js 145 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/rabbit-legacy.js 190 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/rabbit.js 192 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/rc4.js 139 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/ripemd160.js 267 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/sha1.js 150 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/sha224.js 80 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/sha256.js 199 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/sha3.js 323 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/sha384.js 83 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/sha512.js 323 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/tripledes.js 770 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/crypto-js/x64-core.js 304 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3-context-menu/.bower.json 27 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3-context-menu/.gitignore 2 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3-context-menu/.npmignore 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3-context-menu/bower.json 17 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3-context-menu/css/d3-context-menu.css 107 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3-context-menu/js/d3-context-menu.js 179 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3-context-menu/package.json 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3/.bower.json 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3/LICENSE 26 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3/README.md 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3/bower.json 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3/d3.js 9554 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/d3/d3.min.js 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/.bower.json 66 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/bower.json 56 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/build/jquery.datetimepicker.full.js 2696 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/build/jquery.datetimepicker.full.min.js 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/build/jquery.datetimepicker.min.css 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/jquery.datetimepicker.css 568 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/jquery.datetimepicker.js 2464 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/package.json 45 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/datetimepicker/yarn.lock 175 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/domReady/.bower.json 15 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/domReady/LICENSE 58 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/domReady/README.md 32 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/domReady/bower.json 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/domReady/domReady.js 129 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/domReady/package.json 32 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/.bower.json 36 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/.gitignore 33 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/.npmignore 42 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/HELP-US-OUT.txt 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/bower.json 22 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/css/font-awesome.css 2337 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/css/font-awesome.css.map 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/css/font-awesome.min.css 4 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/fonts/FontAwesome.otf 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.eot 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.svg 2671 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.ttf 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.woff 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.woff2 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/animated.less 34 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/bordered-pulled.less 25 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/core.less 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/fixed-width.less 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/font-awesome.less 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/icons.less 789 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/larger.less 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/list.less 19 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/mixins.less 60 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/path.less 15 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/rotated-flipped.less 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/screen-reader.less 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/stacked.less 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/less/variables.less 800 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_animated.scss 34 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_bordered-pulled.scss 25 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_core.scss 12 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_fixed-width.scss 6 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_icons.scss 789 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_larger.scss 13 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_list.scss 19 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_mixins.scss 60 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_path.scss 15 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_rotated-flipped.scss 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_screen-reader.scss 5 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_stacked.scss 20 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/_variables.scss 800 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/font-awesome/scss/font-awesome.scss 18 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/.bower.json 27 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/CHANGELOG.md 54 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/CONTRIBUTING.md 41 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/LICENSE.md 21 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/README.md 51 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/bower.json 16 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/changelog.js 71 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/hammer.js 2643 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/hammer.min.js 7 ●●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/hammer.min.js.map 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/hammerjs/hammer.min.map 1 ●●●● 패치 | 보기 | raw | blame | 히스토리
src/main/webapp/bower_components/angular-animate/.bower.json
New file
@@ -0,0 +1,20 @@
{
  "name": "angular-animate",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular-animate.js",
  "ignore": [],
  "dependencies": {
    "angular": "1.5.11"
  },
  "homepage": "https://github.com/angular/bower-angular-animate",
  "_release": "1.5.11",
  "_resolution": {
    "type": "version",
    "tag": "v1.5.11",
    "commit": "ac17971fdc62d7ea816a079401084e6da2af3e3e"
  },
  "_source": "https://github.com/angular/bower-angular-animate.git",
  "_target": "1.5.11",
  "_originalSource": "angular-animate"
}
src/main/webapp/bower_components/angular-animate/LICENSE.md
New file
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Angular
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
src/main/webapp/bower_components/angular-animate/README.md
New file
@@ -0,0 +1,68 @@
# packaged angular-animate
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngAnimate).
Please file issues and pull requests against that repo.
## Install
You can install this package either with `npm` or with `bower`.
### npm
```shell
npm install angular-animate
```
Then add `ngAnimate` as a dependency for your app:
```javascript
angular.module('myApp', [require('angular-animate')]);
```
### bower
```shell
bower install angular-animate
```
Then add a `<script>` to your `index.html`:
```html
<script src="/bower_components/angular-animate/angular-animate.js"></script>
```
Then add `ngAnimate` as a dependency for your app:
```javascript
angular.module('myApp', ['ngAnimate']);
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/api/ngAnimate).
## License
The MIT License
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
src/main/webapp/bower_components/angular-animate/angular-animate.js
New file
Diff too large
src/main/webapp/bower_components/angular-animate/angular-animate.min.js
New file
@@ -0,0 +1,57 @@
/*
 AngularJS v1.5.11
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(R,B){'use strict';function Da(a,b,c){if(!a)throw Ma("areq",b||"?",c||"required");return a}function Ea(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;X(a)&&(a=a.join(" "));X(b)&&(b=b.join(" "));return a+" "+b}function Na(a){var b={};a&&(a.to||a.from)&&(b.to=a.to,b.from=a.from);return b}function Y(a,b,c){var d="";a=X(a)?a:a&&G(a)&&a.length?a.split(/\s+/):[];s(a,function(a,l){a&&0<a.length&&(d+=0<l?" ":"",d+=c?b+a:a+b)});return d}function Oa(a){if(a instanceof F)switch(a.length){case 0:return a;
case 1:if(1===a[0].nodeType)return a;break;default:return F(ta(a))}if(1===a.nodeType)return F(a)}function ta(a){if(!a[0])return a;for(var b=0;b<a.length;b++){var c=a[b];if(1===c.nodeType)return c}}function Pa(a,b,c){s(b,function(b){a.addClass(b,c)})}function Qa(a,b,c){s(b,function(b){a.removeClass(b,c)})}function Z(a){return function(b,c){c.addClass&&(Pa(a,b,c.addClass),c.addClass=null);c.removeClass&&(Qa(a,b,c.removeClass),c.removeClass=null)}}function oa(a){a=a||{};if(!a.$$prepared){var b=a.domOperation||
P;a.domOperation=function(){a.$$domOperationFired=!0;b();b=P};a.$$prepared=!0}return a}function ha(a,b){Fa(a,b);Ga(a,b)}function Fa(a,b){b.from&&(a.css(b.from),b.from=null)}function Ga(a,b){b.to&&(a.css(b.to),b.to=null)}function V(a,b,c){var d=b.options||{};c=c.options||{};var e=(d.addClass||"")+" "+(c.addClass||""),l=(d.removeClass||"")+" "+(c.removeClass||"");a=Ra(a.attr("class"),e,l);c.preparationClasses&&(d.preparationClasses=$(c.preparationClasses,d.preparationClasses),delete c.preparationClasses);
e=d.domOperation!==P?d.domOperation:null;ua(d,c);e&&(d.domOperation=e);d.addClass=a.addClass?a.addClass:null;d.removeClass=a.removeClass?a.removeClass:null;b.addClass=d.addClass;b.removeClass=d.removeClass;return d}function Ra(a,b,c){function d(a){G(a)&&(a=a.split(" "));var b={};s(a,function(a){a.length&&(b[a]=!0)});return b}var e={};a=d(a);b=d(b);s(b,function(a,b){e[b]=1});c=d(c);s(c,function(a,b){e[b]=1===e[b]?null:-1});var l={addClass:"",removeClass:""};s(e,function(b,c){var d,e;1===b?(d="addClass",
e=!a[c]||a[c+"-remove"]):-1===b&&(d="removeClass",e=a[c]||a[c+"-add"]);e&&(l[d].length&&(l[d]+=" "),l[d]+=c)});return l}function y(a){return a instanceof F?a[0]:a}function Sa(a,b,c){var d="";b&&(d=Y(b,"ng-",!0));c.addClass&&(d=$(d,Y(c.addClass,"-add")));c.removeClass&&(d=$(d,Y(c.removeClass,"-remove")));d.length&&(c.preparationClasses=d,a.addClass(d))}function pa(a,b){var c=b?"-"+b+"s":"";la(a,[ma,c]);return[ma,c]}function va(a,b){var c=b?"paused":"",d=aa+"PlayState";la(a,[d,c]);return[d,c]}function la(a,
b){a.style[b[0]]=b[1]}function $(a,b){return a?b?a+" "+b:a:b}function Ha(a,b,c){var d=Object.create(null),e=a.getComputedStyle(b)||{};s(c,function(a,b){var c=e[a];if(c){var g=c.charAt(0);if("-"===g||"+"===g||0<=g)c=Ta(c);0===c&&(c=null);d[b]=c}});return d}function Ta(a){var b=0;a=a.split(/\s*,\s*/);s(a,function(a){"s"===a.charAt(a.length-1)&&(a=a.substring(0,a.length-1));a=parseFloat(a)||0;b=b?Math.max(a,b):a});return b}function wa(a){return 0===a||null!=a}function Ia(a,b){var c=S,d=a+"s";b?c+="Duration":
d+=" linear all";return[c,d]}function Ja(){var a=Object.create(null);return{flush:function(){a=Object.create(null)},count:function(b){return(b=a[b])?b.total:0},get:function(b){return(b=a[b])&&b.value},put:function(b,c){a[b]?a[b].total++:a[b]={total:1,value:c}}}}function Ka(a,b,c){s(c,function(c){a[c]=xa(a[c])?a[c]:b.style.getPropertyValue(c)})}var S,ya,aa,za;void 0===R.ontransitionend&&void 0!==R.onwebkittransitionend?(S="WebkitTransition",ya="webkitTransitionEnd transitionend"):(S="transition",ya=
"transitionend");void 0===R.onanimationend&&void 0!==R.onwebkitanimationend?(aa="WebkitAnimation",za="webkitAnimationEnd animationend"):(aa="animation",za="animationend");var qa=aa+"Delay",Aa=aa+"Duration",ma=S+"Delay",La=S+"Duration",Ma=B.$$minErr("ng"),Ua={transitionDuration:La,transitionDelay:ma,transitionProperty:S+"Property",animationDuration:Aa,animationDelay:qa,animationIterationCount:aa+"IterationCount"},Va={transitionDuration:La,transitionDelay:ma,animationDuration:Aa,animationDelay:qa},
Ba,ua,s,X,xa,ea,Ca,ba,G,J,F,P;B.module("ngAnimate",[],function(){P=B.noop;Ba=B.copy;ua=B.extend;F=B.element;s=B.forEach;X=B.isArray;G=B.isString;ba=B.isObject;J=B.isUndefined;xa=B.isDefined;Ca=B.isFunction;ea=B.isElement}).directive("ngAnimateSwap",["$animate","$rootScope",function(a,b){return{restrict:"A",transclude:"element",terminal:!0,priority:600,link:function(b,d,e,l,n){var I,g;b.$watchCollection(e.ngAnimateSwap||e["for"],function(e){I&&a.leave(I);g&&(g.$destroy(),g=null);if(e||0===e)g=b.$new(),
n(g,function(b){I=b;a.enter(b,null,d)})})}}}]).directive("ngAnimateChildren",["$interpolate",function(a){return{link:function(b,c,d){function e(a){c.data("$$ngAnimateChildren","on"===a||"true"===a)}var l=d.ngAnimateChildren;G(l)&&0===l.length?c.data("$$ngAnimateChildren",!0):(e(a(l)(b)),d.$observe("ngAnimateChildren",e))}}}]).factory("$$rAFScheduler",["$$rAF",function(a){function b(a){d=d.concat(a);c()}function c(){if(d.length){for(var b=d.shift(),n=0;n<b.length;n++)b[n]();e||a(function(){e||c()})}}
var d,e;d=b.queue=[];b.waitUntilQuiet=function(b){e&&e();e=a(function(){e=null;b();c()})};return b}]).provider("$$animateQueue",["$animateProvider",function(a){function b(a){if(!a)return null;a=a.split(" ");var b=Object.create(null);s(a,function(a){b[a]=!0});return b}function c(a,c){if(a&&c){var d=b(c);return a.split(" ").some(function(a){return d[a]})}}function d(a,b,c,d){return l[a].some(function(a){return a(b,c,d)})}function e(a,b){var c=0<(a.addClass||"").length,d=0<(a.removeClass||"").length;
return b?c&&d:c||d}var l=this.rules={skip:[],cancel:[],join:[]};l.join.push(function(a,b,c){return!b.structural&&e(b)});l.skip.push(function(a,b,c){return!b.structural&&!e(b)});l.skip.push(function(a,b,c){return"leave"===c.event&&b.structural});l.skip.push(function(a,b,c){return c.structural&&2===c.state&&!b.structural});l.cancel.push(function(a,b,c){return c.structural&&b.structural});l.cancel.push(function(a,b,c){return 2===c.state&&b.structural});l.cancel.push(function(a,b,d){if(d.structural)return!1;
a=b.addClass;b=b.removeClass;var e=d.addClass;d=d.removeClass;return J(a)&&J(b)||J(e)&&J(d)?!1:c(a,d)||c(b,e)});this.$get=["$$rAF","$rootScope","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$jqLite","$$forceReflow",function(b,c,g,l,C,Wa,Q,t,H,T){function O(){var a=!1;return function(b){a?b():c.$$postDigest(function(){a=!0;b()})}}function x(a,b,c){var f=y(b),d=y(a),N=[];(a=h[c])&&s(a,function(a){w.call(a.node,f)?N.push(a.callback):"leave"===c&&w.call(a.node,
d)&&N.push(a.callback)});return N}function r(a,b,c){var f=ta(b);return a.filter(function(a){return!(a.node===f&&(!c||a.callback===c))})}function p(a,h,v){function r(c,f,d,h){sa(function(){var c=x(T,a,f);c.length?b(function(){s(c,function(b){b(a,d,h)});"close"!==d||a[0].parentNode||ra.off(a)}):"close"!==d||a[0].parentNode||ra.off(a)});c.progress(f,d,h)}function k(b){var c=a,f=m;f.preparationClasses&&(c.removeClass(f.preparationClasses),f.preparationClasses=null);f.activeClasses&&(c.removeClass(f.activeClasses),
f.activeClasses=null);E(a,m);ha(a,m);m.domOperation();A.complete(!b)}var m=Ba(v),p,T;if(a=Oa(a))p=y(a),T=a.parent();var m=oa(m),A=new Q,sa=O();X(m.addClass)&&(m.addClass=m.addClass.join(" "));m.addClass&&!G(m.addClass)&&(m.addClass=null);X(m.removeClass)&&(m.removeClass=m.removeClass.join(" "));m.removeClass&&!G(m.removeClass)&&(m.removeClass=null);m.from&&!ba(m.from)&&(m.from=null);m.to&&!ba(m.to)&&(m.to=null);if(!p)return k(),A;v=[p.className,m.addClass,m.removeClass].join(" ");if(!Xa(v))return k(),
A;var g=0<=["enter","move","leave"].indexOf(h),w=l[0].hidden,t=!f||w||N.get(p);v=!t&&z.get(p)||{};var H=!!v.state;t||H&&1===v.state||(t=!M(a,T,h));if(t)return w&&r(A,h,"start"),k(),w&&r(A,h,"close"),A;g&&K(a);w={structural:g,element:a,event:h,addClass:m.addClass,removeClass:m.removeClass,close:k,options:m,runner:A};if(H){if(d("skip",a,w,v)){if(2===v.state)return k(),A;V(a,v,w);return v.runner}if(d("cancel",a,w,v))if(2===v.state)v.runner.end();else if(v.structural)v.close();else return V(a,v,w),v.runner;
else if(d("join",a,w,v))if(2===v.state)V(a,w,{});else return Sa(a,g?h:null,m),h=w.event=v.event,m=V(a,v,w),v.runner}else V(a,w,{});(H=w.structural)||(H="animate"===w.event&&0<Object.keys(w.options.to||{}).length||e(w));if(!H)return k(),ka(a),A;var C=(v.counter||0)+1;w.counter=C;L(a,1,w);c.$$postDigest(function(){var b=z.get(p),c=!b,b=b||{},f=0<(a.parent()||[]).length&&("animate"===b.event||b.structural||e(b));if(c||b.counter!==C||!f){c&&(E(a,m),ha(a,m));if(c||g&&b.event!==h)m.domOperation(),A.end();
f||ka(a)}else h=!b.structural&&e(b,!0)?"setClass":b.event,L(a,2),b=Wa(a,h,b.options),A.setHost(b),r(A,h,"start",{}),b.done(function(b){k(!b);(b=z.get(p))&&b.counter===C&&ka(y(a));r(A,h,"close",{})})});return A}function K(a){a=y(a).querySelectorAll("[data-ng-animate]");s(a,function(a){var b=parseInt(a.getAttribute("data-ng-animate"),10),c=z.get(a);if(c)switch(b){case 2:c.runner.end();case 1:z.remove(a)}})}function ka(a){a=y(a);a.removeAttribute("data-ng-animate");z.remove(a)}function k(a,b){return y(a)===
y(b)}function M(a,b,c){c=F(l[0].body);var f=k(a,c)||"HTML"===a[0].nodeName,d=k(a,g),h=!1,r,e=N.get(y(a));(a=F.data(a[0],"$ngAnimatePin"))&&(b=a);for(b=y(b);b;){d||(d=k(b,g));if(1!==b.nodeType)break;a=z.get(b)||{};if(!h){var p=N.get(b);if(!0===p&&!1!==e){e=!0;break}else!1===p&&(e=!1);h=a.structural}if(J(r)||!0===r)a=F.data(b,"$$ngAnimateChildren"),xa(a)&&(r=a);if(h&&!1===r)break;f||(f=k(b,c));if(f&&d)break;if(!d&&(a=F.data(b,"$ngAnimatePin"))){b=y(a);continue}b=b.parentNode}return(!h||r)&&!0!==e&&
d&&f}function L(a,b,c){c=c||{};c.state=b;a=y(a);a.setAttribute("data-ng-animate",b);c=(b=z.get(a))?ua(b,c):c;z.put(a,c)}var z=new C,N=new C,f=null,A=c.$watch(function(){return 0===t.totalPendingRequests},function(a){a&&(A(),c.$$postDigest(function(){c.$$postDigest(function(){null===f&&(f=!0)})}))}),h=Object.create(null),sa=a.classNameFilter(),Xa=sa?function(a){return sa.test(a)}:function(){return!0},E=Z(H),w=R.Node.prototype.contains||function(a){return this===a||!!(this.compareDocumentPosition(a)&
16)},ra={on:function(a,b,c){var f=ta(b);h[a]=h[a]||[];h[a].push({node:f,callback:c});F(b).on("$destroy",function(){z.get(f)||ra.off(a,b,c)})},off:function(a,b,c){if(1!==arguments.length||G(arguments[0])){var f=h[a];f&&(h[a]=1===arguments.length?null:r(f,b,c))}else for(f in b=arguments[0],h)h[f]=r(h[f],b)},pin:function(a,b){Da(ea(a),"element","not an element");Da(ea(b),"parentElement","not an element");a.data("$ngAnimatePin",b)},push:function(a,b,c,f){c=c||{};c.domOperation=f;return p(a,b,c)},enabled:function(a,
b){var c=arguments.length;if(0===c)b=!!f;else if(ea(a)){var d=y(a);1===c?b=!N.get(d):N.put(d,!b)}else b=f=!!a;return b}};return ra}]}]).provider("$$animation",["$animateProvider",function(a){var b=this.drivers=[];this.$get=["$$jqLite","$rootScope","$injector","$$AnimateRunner","$$HashMap","$$rAFScheduler",function(a,d,e,l,n,I){function g(a){function b(a){if(a.processed)return a;a.processed=!0;var d=a.domNode,p=d.parentNode;e.put(d,a);for(var K;p;){if(K=e.get(p)){K.processed||(K=b(K));break}p=p.parentNode}(K||
c).children.push(a);return a}var c={children:[]},d,e=new n;for(d=0;d<a.length;d++){var g=a[d];e.put(g.domNode,a[d]={domNode:g.domNode,fn:g.fn,children:[]})}for(d=0;d<a.length;d++)b(a[d]);return function(a){var b=[],c=[],d;for(d=0;d<a.children.length;d++)c.push(a.children[d]);a=c.length;var e=0,k=[];for(d=0;d<c.length;d++){var g=c[d];0>=a&&(a=e,e=0,b.push(k),k=[]);k.push(g.fn);g.children.forEach(function(a){e++;c.push(a)});a--}k.length&&b.push(k);return b}(c)}var u=[],C=Z(a);return function(n,Q,t){function H(a){a=
a.hasAttribute("ng-animate-ref")?[a]:a.querySelectorAll("[ng-animate-ref]");var b=[];s(a,function(a){var c=a.getAttribute("ng-animate-ref");c&&c.length&&b.push(a)});return b}function T(a){var b=[],c={};s(a,function(a,d){var h=y(a.element),e=0<=["enter","move"].indexOf(a.event),h=a.structural?H(h):[];if(h.length){var k=e?"to":"from";s(h,function(a){var b=a.getAttribute("ng-animate-ref");c[b]=c[b]||{};c[b][k]={animationID:d,element:F(a)}})}else b.push(a)});var d={},e={};s(c,function(c,k){var r=c.from,
p=c.to;if(r&&p){var z=a[r.animationID],g=a[p.animationID],A=r.animationID.toString();if(!e[A]){var n=e[A]={structural:!0,beforeStart:function(){z.beforeStart();g.beforeStart()},close:function(){z.close();g.close()},classes:O(z.classes,g.classes),from:z,to:g,anchors:[]};n.classes.length?b.push(n):(b.push(z),b.push(g))}e[A].anchors.push({out:r.element,"in":p.element})}else r=r?r.animationID:p.animationID,p=r.toString(),d[p]||(d[p]=!0,b.push(a[r]))});return b}function O(a,b){a=a.split(" ");b=b.split(" ");
for(var c=[],d=0;d<a.length;d++){var e=a[d];if("ng-"!==e.substring(0,3))for(var r=0;r<b.length;r++)if(e===b[r]){c.push(e);break}}return c.join(" ")}function x(a){for(var c=b.length-1;0<=c;c--){var d=e.get(b[c])(a);if(d)return d}}function r(a,b){function c(a){(a=a.data("$$animationRunner"))&&a.setHost(b)}a.from&&a.to?(c(a.from.element),c(a.to.element)):c(a.element)}function p(){var a=n.data("$$animationRunner");!a||"leave"===Q&&t.$$domOperationFired||a.end()}function K(b){n.off("$destroy",p);n.removeData("$$animationRunner");
C(n,t);ha(n,t);t.domOperation();L&&a.removeClass(n,L);n.removeClass("ng-animate");k.complete(!b)}t=oa(t);var ka=0<=["enter","move","leave"].indexOf(Q),k=new l({end:function(){K()},cancel:function(){K(!0)}});if(!b.length)return K(),k;n.data("$$animationRunner",k);var M=Ea(n.attr("class"),Ea(t.addClass,t.removeClass)),L=t.tempClasses;L&&(M+=" "+L,t.tempClasses=null);var z;ka&&(z="ng-"+Q+"-prepare",a.addClass(n,z));u.push({element:n,classes:M,event:Q,structural:ka,options:t,beforeStart:function(){n.addClass("ng-animate");
L&&a.addClass(n,L);z&&(a.removeClass(n,z),z=null)},close:K});n.on("$destroy",p);if(1<u.length)return k;d.$$postDigest(function(){var a=[];s(u,function(b){b.element.data("$$animationRunner")?a.push(b):b.close()});u.length=0;var b=T(a),c=[];s(b,function(a){c.push({domNode:y(a.from?a.from.element:a.element),fn:function(){a.beforeStart();var b,c=a.close;if((a.anchors?a.from.element||a.to.element:a.element).data("$$animationRunner")){var d=x(a);d&&(b=d.start)}b?(b=b(),b.done(function(a){c(!a)}),r(a,b)):
c()}})});I(g(c))});return k}}]}]).provider("$animateCss",["$animateProvider",function(a){var b=Ja(),c=Ja();this.$get=["$window","$$jqLite","$$AnimateRunner","$timeout","$$forceReflow","$sniffer","$$rAFScheduler","$$animateQueue",function(a,e,l,n,I,g,u,C){function B(a,b){var c=a.parentNode;return(c.$$ngAnimateParentKey||(c.$$ngAnimateParentKey=++O))+"-"+a.getAttribute("class")+"-"+b}function Q(r,p,g,n){var k;0<b.count(g)&&(k=c.get(g),k||(p=Y(p,"-stagger"),e.addClass(r,p),k=Ha(a,r,n),k.animationDuration=
Math.max(k.animationDuration,0),k.transitionDuration=Math.max(k.transitionDuration,0),e.removeClass(r,p),c.put(g,k)));return k||{}}function t(a){x.push(a);u.waitUntilQuiet(function(){b.flush();c.flush();for(var a=I(),d=0;d<x.length;d++)x[d](a);x.length=0})}function H(c,e,g){e=b.get(g);e||(e=Ha(a,c,Ua),"infinite"===e.animationIterationCount&&(e.animationIterationCount=1));b.put(g,e);c=e;g=c.animationDelay;e=c.transitionDelay;c.maxDelay=g&&e?Math.max(g,e):g||e;c.maxDuration=Math.max(c.animationDuration*
c.animationIterationCount,c.transitionDuration);return c}var T=Z(e),O=0,x=[];return function(a,c){function d(){k()}function u(){k(!0)}function k(b){if(!(w||F&&O)){w=!0;O=!1;f.$$skipPreparationClasses||e.removeClass(a,ga);e.removeClass(a,ea);va(h,!1);pa(h,!1);s(x,function(a){h.style[a[0]]=""});T(a,f);ha(a,f);Object.keys(A).length&&s(A,function(a,b){a?h.style.setProperty(b,a):h.style.removeProperty(b)});if(f.onDone)f.onDone();fa&&fa.length&&a.off(fa.join(" "),z);var c=a.data("$$animateCss");c&&(n.cancel(c[0].timer),
a.removeData("$$animateCss"));G&&G.complete(!b)}}function M(a){q.blockTransition&&pa(h,a);q.blockKeyframeAnimation&&va(h,!!a)}function L(){G=new l({end:d,cancel:u});t(P);k();return{$$willAnimate:!1,start:function(){return G},end:d}}function z(a){a.stopPropagation();var b=a.originalEvent||a;a=b.$manualTimeStamp||Date.now();b=parseFloat(b.elapsedTime.toFixed(3));Math.max(a-Z,0)>=R&&b>=m&&(F=!0,k())}function N(){function b(){if(!w){M(!1);s(x,function(a){h.style[a[0]]=a[1]});T(a,f);e.addClass(a,ea);if(q.recalculateTimingStyles){na=
h.className+" "+ga;ia=B(h,na);D=H(h,na,ia);ca=D.maxDelay;J=Math.max(ca,0);m=D.maxDuration;if(0===m){k();return}q.hasTransitions=0<D.transitionDuration;q.hasAnimations=0<D.animationDuration}q.applyAnimationDelay&&(ca="boolean"!==typeof f.delay&&wa(f.delay)?parseFloat(f.delay):ca,J=Math.max(ca,0),D.animationDelay=ca,da=[qa,ca+"s"],x.push(da),h.style[da[0]]=da[1]);R=1E3*J;V=1E3*m;if(f.easing){var d,g=f.easing;q.hasTransitions&&(d=S+"TimingFunction",x.push([d,g]),h.style[d]=g);q.hasAnimations&&(d=aa+
"TimingFunction",x.push([d,g]),h.style[d]=g)}D.transitionDuration&&fa.push(ya);D.animationDuration&&fa.push(za);Z=Date.now();var p=R+1.5*V;d=Z+p;var g=a.data("$$animateCss")||[],N=!0;if(g.length){var l=g[0];(N=d>l.expectedEndTime)?n.cancel(l.timer):g.push(k)}N&&(p=n(c,p,!1),g[0]={timer:p,expectedEndTime:d},g.push(k),a.data("$$animateCss",g));if(fa.length)a.on(fa.join(" "),z);f.to&&(f.cleanupStyles&&Ka(A,h,Object.keys(f.to)),Ga(a,f))}}function c(){var b=a.data("$$animateCss");if(b){for(var d=1;d<b.length;d++)b[d]();
a.removeData("$$animateCss")}}if(!w)if(h.parentNode){var d=function(a){if(F)O&&a&&(O=!1,k());else if(O=!a,D.animationDuration)if(a=va(h,O),O)x.push(a);else{var b=x,c=b.indexOf(a);0<=a&&b.splice(c,1)}},g=0<ba&&(D.transitionDuration&&0===W.transitionDuration||D.animationDuration&&0===W.animationDuration)&&Math.max(W.animationDelay,W.transitionDelay);g?n(b,Math.floor(g*ba*1E3),!1):b();v.resume=function(){d(!0)};v.pause=function(){d(!1)}}else k()}var f=c||{};f.$$prepared||(f=oa(Ba(f)));var A={},h=y(a);
if(!h||!h.parentNode||!C.enabled())return L();var x=[],I=a.attr("class"),E=Na(f),w,O,F,G,v,J,R,m,V,Z,fa=[];if(0===f.duration||!g.animations&&!g.transitions)return L();var ja=f.event&&X(f.event)?f.event.join(" "):f.event,$="",U="";ja&&f.structural?$=Y(ja,"ng-",!0):ja&&($=ja);f.addClass&&(U+=Y(f.addClass,"-add"));f.removeClass&&(U.length&&(U+=" "),U+=Y(f.removeClass,"-remove"));f.applyClassesEarly&&U.length&&T(a,f);var ga=[$,U].join(" ").trim(),na=I+" "+ga,ea=Y(ga,"-active"),I=E.to&&0<Object.keys(E.to).length;
if(!(0<(f.keyframeStyle||"").length||I||ga))return L();var ia,W;0<f.stagger?(E=parseFloat(f.stagger),W={transitionDelay:E,animationDelay:E,transitionDuration:0,animationDuration:0}):(ia=B(h,na),W=Q(h,ga,ia,Va));f.$$skipPreparationClasses||e.addClass(a,ga);f.transitionStyle&&(E=[S,f.transitionStyle],la(h,E),x.push(E));0<=f.duration&&(E=0<h.style[S].length,E=Ia(f.duration,E),la(h,E),x.push(E));f.keyframeStyle&&(E=[aa,f.keyframeStyle],la(h,E),x.push(E));var ba=W?0<=f.staggerIndex?f.staggerIndex:b.count(ia):
0;(ja=0===ba)&&!f.skipBlocking&&pa(h,9999);var D=H(h,na,ia),ca=D.maxDelay;J=Math.max(ca,0);m=D.maxDuration;var q={};q.hasTransitions=0<D.transitionDuration;q.hasAnimations=0<D.animationDuration;q.hasTransitionAll=q.hasTransitions&&"all"===D.transitionProperty;q.applyTransitionDuration=I&&(q.hasTransitions&&!q.hasTransitionAll||q.hasAnimations&&!q.hasTransitions);q.applyAnimationDuration=f.duration&&q.hasAnimations;q.applyTransitionDelay=wa(f.delay)&&(q.applyTransitionDuration||q.hasTransitions);q.applyAnimationDelay=
wa(f.delay)&&q.hasAnimations;q.recalculateTimingStyles=0<U.length;if(q.applyTransitionDuration||q.applyAnimationDuration)m=f.duration?parseFloat(f.duration):m,q.applyTransitionDuration&&(q.hasTransitions=!0,D.transitionDuration=m,E=0<h.style[S+"Property"].length,x.push(Ia(m,E))),q.applyAnimationDuration&&(q.hasAnimations=!0,D.animationDuration=m,x.push([Aa,m+"s"]));if(0===m&&!q.recalculateTimingStyles)return L();if(null!=f.delay){var da;"boolean"!==typeof f.delay&&(da=parseFloat(f.delay),J=Math.max(da,
0));q.applyTransitionDelay&&x.push([ma,da+"s"]);q.applyAnimationDelay&&x.push([qa,da+"s"])}null==f.duration&&0<D.transitionDuration&&(q.recalculateTimingStyles=q.recalculateTimingStyles||ja);R=1E3*J;V=1E3*m;f.skipBlocking||(q.blockTransition=0<D.transitionDuration,q.blockKeyframeAnimation=0<D.animationDuration&&0<W.animationDelay&&0===W.animationDuration);f.from&&(f.cleanupStyles&&Ka(A,h,Object.keys(f.from)),Fa(a,f));q.blockTransition||q.blockKeyframeAnimation?M(m):f.skipBlocking||pa(h,!1);return{$$willAnimate:!0,
end:d,start:function(){if(!w)return v={end:d,cancel:u,resume:null,pause:null},G=new l(v),t(N),G}}}}]}]).provider("$$animateCssDriver",["$$animationProvider",function(a){a.drivers.push("$$animateCssDriver");this.$get=["$animateCss","$rootScope","$$AnimateRunner","$rootElement","$sniffer","$$jqLite","$document",function(a,c,d,e,l,n,I){function g(a){return a.replace(/\bng-\S+\b/g,"")}function u(a,b){G(a)&&(a=a.split(" "));G(b)&&(b=b.split(" "));return a.filter(function(a){return-1===b.indexOf(a)}).join(" ")}
function C(c,e,n){function l(a){var b={},c=y(a).getBoundingClientRect();s(["width","height","top","left"],function(a){var d=c[a];switch(a){case "top":d+=t.scrollTop;break;case "left":d+=t.scrollLeft}b[a]=Math.floor(d)+"px"});return b}function p(){var c=g(n.attr("class")||""),d=u(c,k),c=u(k,c),d=a(C,{to:l(n),addClass:"ng-anchor-in "+d,removeClass:"ng-anchor-out "+c,delay:!0});return d.$$willAnimate?d:null}function I(){C.remove();e.removeClass("ng-animate-shim");n.removeClass("ng-animate-shim")}var C=
F(y(e).cloneNode(!0)),k=g(C.attr("class")||"");e.addClass("ng-animate-shim");n.addClass("ng-animate-shim");C.addClass("ng-anchor");H.append(C);var M;c=function(){var c=a(C,{addClass:"ng-anchor-out",delay:!0,from:l(e)});return c.$$willAnimate?c:null}();if(!c&&(M=p(),!M))return I();var L=c||M;return{start:function(){function a(){c&&c.end()}var b,c=L.start();c.done(function(){c=null;if(!M&&(M=p()))return c=M.start(),c.done(function(){c=null;I();b.complete()}),c;I();b.complete()});return b=new d({end:a,
cancel:a})}}}function B(a,b,c,e){var g=Q(a,P),n=Q(b,P),l=[];s(e,function(a){(a=C(c,a.out,a["in"]))&&l.push(a)});if(g||n||0!==l.length)return{start:function(){function a(){s(b,function(a){a.end()})}var b=[];g&&b.push(g.start());n&&b.push(n.start());s(l,function(a){b.push(a.start())});var c=new d({end:a,cancel:a});d.all(b,function(a){c.complete(a)});return c}}}function Q(c){var d=c.element,e=c.options||{};c.structural&&(e.event=c.event,e.structural=!0,e.applyClassesEarly=!0,"leave"===c.event&&(e.onDone=
e.domOperation));e.preparationClasses&&(e.event=$(e.event,e.preparationClasses));c=a(d,e);return c.$$willAnimate?c:null}if(!l.animations&&!l.transitions)return P;var t=I[0].body;c=y(e);var H=F(c.parentNode&&11===c.parentNode.nodeType||t.contains(c)?c:t);return function(a){return a.from&&a.to?B(a.from,a.to,a.classes,a.anchors):Q(a)}}]}]).provider("$$animateJs",["$animateProvider",function(a){this.$get=["$injector","$$AnimateRunner","$$jqLite",function(b,c,d){function e(c){c=X(c)?c:c.split(" ");for(var d=
[],e={},l=0;l<c.length;l++){var s=c[l],B=a.$$registeredAnimations[s];B&&!e[s]&&(d.push(b.get(B)),e[s]=!0)}return d}var l=Z(d);return function(a,b,d,u){function C(){u.domOperation();l(a,u)}function B(a,b,d,e,f){switch(d){case "animate":b=[b,e.from,e.to,f];break;case "setClass":b=[b,F,G,f];break;case "addClass":b=[b,F,f];break;case "removeClass":b=[b,G,f];break;default:b=[b,f]}b.push(e);if(a=a.apply(a,b))if(Ca(a.start)&&(a=a.start()),a instanceof c)a.done(f);else if(Ca(a))return a;return P}function y(a,
b,d,e,f){var g=[];s(e,function(e){var k=e[f];k&&g.push(function(){var e,f,g=!1,h=function(a){g||(g=!0,(f||P)(a),e.complete(!a))};e=new c({end:function(){h()},cancel:function(){h(!0)}});f=B(k,a,b,d,function(a){h(!1===a)});return e})});return g}function t(a,b,d,e,f){var g=y(a,b,d,e,f);if(0===g.length){var h,k;"beforeSetClass"===f?(h=y(a,"removeClass",d,e,"beforeRemoveClass"),k=y(a,"addClass",d,e,"beforeAddClass")):"setClass"===f&&(h=y(a,"removeClass",d,e,"removeClass"),k=y(a,"addClass",d,e,"addClass"));
h&&(g=g.concat(h));k&&(g=g.concat(k))}if(0!==g.length)return function(a){var b=[];g.length&&s(g,function(a){b.push(a())});b.length?c.all(b,a):a();return function(a){s(b,function(b){a?b.cancel():b.end()})}}}var H=!1;3===arguments.length&&ba(d)&&(u=d,d=null);u=oa(u);d||(d=a.attr("class")||"",u.addClass&&(d+=" "+u.addClass),u.removeClass&&(d+=" "+u.removeClass));var F=u.addClass,G=u.removeClass,x=e(d),r,p;if(x.length){var K,J;"leave"===b?(J="leave",K="afterLeave"):(J="before"+b.charAt(0).toUpperCase()+
b.substr(1),K=b);"enter"!==b&&"move"!==b&&(r=t(a,b,u,x,J));p=t(a,b,u,x,K)}if(r||p){var k;return{$$willAnimate:!0,end:function(){k?k.end():(H=!0,C(),ha(a,u),k=new c,k.complete(!0));return k},start:function(){function b(c){H=!0;C();ha(a,u);k.complete(c)}if(k)return k;k=new c;var d,e=[];r&&e.push(function(a){d=r(a)});e.length?e.push(function(a){C();a(!0)}):C();p&&e.push(function(a){d=p(a)});k.setHost({end:function(){H||((d||P)(void 0),b(void 0))},cancel:function(){H||((d||P)(!0),b(!0))}});c.chain(e,
b);return k}}}}}]}]).provider("$$animateJsDriver",["$$animationProvider",function(a){a.drivers.push("$$animateJsDriver");this.$get=["$$animateJs","$$AnimateRunner",function(a,c){function d(c){return a(c.element,c.event,c.classes,c.options)}return function(a){if(a.from&&a.to){var b=d(a.from),n=d(a.to);if(b||n)return{start:function(){function a(){return function(){s(d,function(a){a.end()})}}var d=[];b&&d.push(b.start());n&&d.push(n.start());c.all(d,function(a){e.complete(a)});var e=new c({end:a(),cancel:a()});
return e}}}else return d(a)}}]}])})(window,window.angular);
//# sourceMappingURL=angular-animate.min.js.map
src/main/webapp/bower_components/angular-animate/angular-animate.min.js.map
New file
@@ -0,0 +1,8 @@
{
"version":3,
"file":"angular-animate.min.js",
"lineCount":56,
"mappings":"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",
"sources":["angular-animate.js"],
"names":["window","angular","assertArg","arg","name","reason","ngMinErr","mergeClasses","a","b","isArray","join","packageStyles","options","styles","to","from","pendClasses","classes","fix","isPrefix","className","isString","length","split","forEach","klass","i","stripCommentsFromElement","element","jqLite","ELEMENT_NODE","nodeType","extractElementNode","elm","$$addClass","$$jqLite","addClass","$$removeClass","removeClass","applyAnimationClassesFactory","prepareAnimationOptions","$$prepared","domOperation","noop","options.domOperation","$$domOperationFired","applyAnimationStyles","applyAnimationFromStyles","applyAnimationToStyles","css","mergeAnimationDetails","oldAnimation","newAnimation","target","newOptions","toAdd","toRemove","resolveElementClasses","attr","preparationClasses","concatWithSpace","realDomOperation","extend","existing","splitClassesToLookup","obj","flags","value","key","ADD_CLASS","REMOVE_CLASS","val","prop","allow","REMOVE_CLASS_SUFFIX","ADD_CLASS_SUFFIX","getDomNode","applyGeneratedPreparationClasses","event","EVENT_CLASS_PREFIX","blockTransitions","node","duration","applyInlineStyle","TRANSITION_DELAY_PROP","blockKeyframeAnimations","applyBlock","ANIMATION_PROP","ANIMATION_PLAYSTATE_KEY","styleTuple","style","computeCssStyles","$window","properties","Object","create","detectedStyles","getComputedStyle","formalStyleName","actualStyleName","c","charAt","parseMaxTime","str","maxValue","values","substring","parseFloat","Math","max","truthyTimingValue","getCssTransitionDurationStyle","applyOnlyDuration","TRANSITION_PROP","DURATION_KEY","createLocalCacheLookup","cache","flush","count","entry","total","get","put","registerRestorableStyles","backup","isDefined","getPropertyValue","TRANSITIONEND_EVENT","ANIMATIONEND_EVENT","undefined","ontransitionend","onwebkittransitionend","onanimationend","onwebkitanimationend","ANIMATION_DELAY_PROP","DELAY_KEY","ANIMATION_DURATION_PROP","TRANSITION_DURATION_PROP","$$minErr","DETECT_CSS_PROPERTIES","transitionDuration","transitionDelay","transitionProperty","PROPERTY_KEY","animationDuration","animationDelay","animationIterationCount","ANIMATION_ITERATION_COUNT_KEY","DETECT_STAGGER_CSS_PROPERTIES","copy","isElement","isFunction","isObject","isUndefined","module","initAngularHelpers","directive","ngAnimateSwapDirective","$animate","$rootScope","restrict","transclude","terminal","priority","link","scope","$element","attrs","ctrl","$transclude","previousElement","previousScope","$watchCollection","ngAnimateSwap","leave","$destroy","$new","enter","$$AnimateChildrenDirective","$interpolate","setData","data","NG_ANIMATE_CHILDREN_DATA","ngAnimateChildren","$observe","factory","$$rAFSchedulerFactory","$$rAF","scheduler","tasks","queue","concat","nextTick","items","shift","cancelFn","waitUntilQuiet","scheduler.waitUntilQuiet","fn","provider","$$AnimateQueueProvider","$animateProvider","makeTruthyCssClassMap","classString","keys","ONE_SPACE","map","hasMatchingClasses","newClassString","currentClassString","currentClassMap","some","isAllowed","ruleType","currentAnimation","previousAnimation","rules","hasAnimationClasses","animation","and","skip","cancel","push","structural","RUNNING_STATE","state","nA","nR","cA","cR","$get","$rootElement","$document","$$HashMap","$$animation","$$AnimateRunner","$templateRequest","$$forceReflow","postDigestTaskFactory","postDigestCalled","$$postDigest","findCallbacks","parent","targetNode","targetParentNode","matches","entries","callbackRegistry","contains","call","callback","filterFromRegistry","list","matchContainer","matchCallback","containerNode","filter","queueAnimation","initialOptions","notifyProgress","runner","phase","runInNextPostDigestOrNow","callbacks","parentNode","off","progress","close","reject","activeClasses","applyAnimationClasses","complete","isAnimatableClassName","isStructural","indexOf","documentHidden","hidden","skipAnimations","animationsEnabled","disabledElementsLookup","existingAnimation","activeAnimationsLookup","hasExistingAnimation","PRE_DIGEST_STATE","areAnimationsAllowed","closeChildAnimations","skipAnimationFlag","cancelAnimationFlag","end","joinAnimationFlag","isValidAnimation","clearElementAnimationState","counter","markElementAnimationState","animationDetails","animationCancelled","realRunner","setHost","done","status","children","querySelectorAll","child","parseInt","getAttribute","NG_ANIMATE_ATTR_NAME","remove","removeAttribute","isMatchingElement","nodeOrElmA","nodeOrElmB","parentElement","bodyElement","body","bodyElementDetected","nodeName","rootElementDetected","parentAnimationDetected","animateChildren","elementDisabled","parentHost","NG_ANIMATE_PIN_DATA","details","parentElementDisabled","setAttribute","newValue","oldValue","deregisterWatch","$watch","totalPendingRequests","isEmpty","classNameFilter","test","Node","prototype","compareDocumentPosition","on","container","arguments","eventType","pin","enabled","bool","argCount","hasElement","$$AnimationProvider","drivers","$injector","$$rAFScheduler","sortAnimations","animations","processNode","processed","elementNode","domNode","lookup","parentEntry","tree","flatten","result","remainingLevelEntries","nextLevelEntries","row","childEntry","animationQueue","getAnchorNodes","hasAttribute","NG_ANIMATE_REF_ATTR","SELECTOR","anchors","groupAnimations","preparedAnimations","refLookup","index","enterOrMove","anchorNodes","direction","anchor","animationID","usedIndicesLookup","anchorGroups","operations","fromAnimation","toAnimation","lookupKey","toString","group","beforeStart","cssClassesIntersection","indexKey","aa","j","invokeFirstDriver","driver","driverName","updateAnimationRunners","newRunner","update","RUNNER_STORAGE_KEY","handleDestroyedElement","rejected","removeData","tempClasses","NG_ANIMATE_CLASSNAME","prepareClassName","PREPARE_CLASS_SUFFIX","groupedAnimations","toBeSortedAnimations","animationEntry","triggerAnimationStart","startAnimationFn","closeFn","targetElement","operation","start","animationRunner","$AnimateCssProvider","gcsLookup","gcsStaggerLookup","$timeout","$sniffer","$$animateQueue","gcsHashFn","extraClasses","parentCounter","computeCachedCssStaggerStyles","cacheKey","stagger","staggerClassName","rafWaitQueue","pageWidth","computeTimings","timings","aD","tD","maxDelay","maxDuration","init","endFn","animationClosed","animationCompleted","animationPaused","$$skipPreparationClasses","temporaryStyles","restoreStyles","setProperty","removeProperty","onDone","events","onAnimationProgress","animationTimerData","ANIMATE_TIMER_KEY","timer","applyBlocking","blockTransition","blockKeyframeAnimation","closeAndReturnNoopAnimator","$$willAnimate","stopPropagation","ev","originalEvent","timeStamp","$manualTimeStamp","Date","now","elapsedTime","toFixed","ELAPSED_TIME_MAX_DECIMAL_PLACES","startTime","maxDelayTime","recalculateTimingStyles","fullClassName","relativeDelay","hasTransitions","hasAnimations","applyAnimationDelay","delay","delayStyle","ONE_SECOND","maxDurationTime","easing","easeProp","easeVal","TIMING_KEY","timerTime","CLOSING_TIME_BUFFER","endTime","animationsData","setupFallbackTimer","currentTimerData","expectedEndTime","onAnimationExpired","cleanupStyles","playPause","playAnimation","arr","splice","maxStagger","itemIndex","floor","runnerHost","resume","runnerHost.resume","pause","runnerHost.pause","transitions","method","structuralClassName","addRemoveClassName","applyClassesEarly","trim","ACTIVE_CLASS_SUFFIX","hasToStyles","keyframeStyle","staggerVal","transitionStyle","durationStyle","staggerIndex","isFirst","skipBlocking","SAFE_FAST_FORWARD_DURATION_VALUE","hasTransitionAll","applyTransitionDuration","applyAnimationDuration","applyTransitionDelay","$$AnimateCssDriverProvider","$$animationProvider","$animateCss","filterCssClasses","replace","getUniqueValues","prepareAnchoredAnimation","outAnchor","inAnchor","calculateAnchorStyles","coords","getBoundingClientRect","bodyNode","scrollTop","scrollLeft","prepareInAnimation","endingClasses","startingClasses","animator","clone","NG_ANIMATE_SHIM_CLASS_NAME","cloneNode","NG_ANIMATE_ANCHOR_CLASS_NAME","rootBodyElement","append","animatorIn","animatorOut","prepareOutAnimation","NG_OUT_ANCHOR_CLASS_NAME","startingAnimator","prepareFromToAnchorAnimation","prepareRegularAnimation","anchorAnimations","outElement","inElement","animationRunners","all","rootNode","initDriverFn","$$AnimateJsProvider","lookupAnimations","flagMap","animationFactory","$$registeredAnimations","applyOptions","executeAnimationFn","args","classesToAdd","classesToRemove","apply","groupEventedAnimations","fnName","ani","endProgressCb","resolved","onAnimationComplete","packageAnimations","startAnimation","runners","animateFn","before","after","afterFn","beforeFn","toUpperCase","substr","onComplete","success","closeActiveAnimations","chain","cancelled","$$AnimateJsDriverProvider","$$animateJs","prepareAnimation","endFnFactory"]
}
src/main/webapp/bower_components/angular-animate/bower.json
New file
@@ -0,0 +1,10 @@
{
  "name": "angular-animate",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular-animate.js",
  "ignore": [],
  "dependencies": {
    "angular": "1.5.11"
  }
}
src/main/webapp/bower_components/angular-animate/index.js
New file
@@ -0,0 +1,2 @@
require('./angular-animate');
module.exports = 'ngAnimate';
src/main/webapp/bower_components/angular-animate/package.json
New file
@@ -0,0 +1,33 @@
{
  "name": "angular-animate",
  "version": "1.5.11",
  "description": "AngularJS module for animations",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/angular/angular.js.git"
  },
  "keywords": [
    "angular",
    "framework",
    "browser",
    "animation",
    "client-side"
  ],
  "author": "Angular Core Team <angular-core+npm@google.com>",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/angular/angular.js/issues"
  },
  "homepage": "http://angularjs.org",
  "jspm": {
    "shim": {
      "angular-animate": {
        "deps": ["angular"]
      }
    }
  }
}
src/main/webapp/bower_components/angular-bindonce/.bower.json
New file
@@ -0,0 +1,36 @@
{
  "name": "angular-bindonce",
  "version": "0.3.3",
  "main": "bindonce.js",
  "description": "Zero watchers binding directives for AngularJS",
  "homepage": "https://github.com/Pasvaz/bindonce",
  "author": "Pasquale Vazzana <pasqualevazzana@gmail.com>",
  "repository": {
    "type": "git",
    "url": "https://github.com/Pasvaz/bindonce.git"
  },
  "license": "MIT",
  "ignore": [
    "**/.*",
    "node_modules",
    "components"
  ],
  "dependencies": {},
  "keywords": [
    "angularjs",
    "angular",
    "directive",
    "binding",
    "watcher",
    "bindonce"
  ],
  "_release": "0.3.3",
  "_resolution": {
    "type": "version",
    "tag": "0.3.3",
    "commit": "0fcf71e6effc88179893c9c06baf6c6bf9037632"
  },
  "_source": "https://github.com/Pasvaz/bindonce.git",
  "_target": "0.3.3",
  "_originalSource": "angular-bindonce"
}
src/main/webapp/bower_components/angular-bindonce/CHANGELOG.md
New file
@@ -0,0 +1,43 @@
# 0.3.3 (2014-02-12)
### Features
- **bo-disabled:**
  - Add support for ng-disabled/bo-disabled #110
<hr />
# 0.3.2 (2014-11-23)
### Bug Fixes
- **Angular 1.3 compatibility**
<hr />
# 0.3.1 (2014-02-12)
### Features
- **bo-bind:**
  - alias for bo-text
### Bug Fixes
- **Angular Promises**
    - Ensures that promises are resolved before to run binders ([b3ef1b4](https://github.com/Pasvaz/bindonce/commit/b3ef1b46edfe83f10ed455d5520027f731563f32))
### Minor improvements
- Updated Readme
<hr />
# 0.3.0 (2014-01-21)
### Features
- **bo-switch:**
  - Create new directive: bo-switch ([652d0db](https://github.com/Pasvaz/bindonce/commit/652d0db04325166a180377c738a376543b5f2357))
<hr />
# 0.2.3 (2014-01-20)
### Bug Fixes
- **bo-if:**
    - Ensures that we both process newly added binders from bo-if, and that
we only process each binder once ([d11f863](https://github.com/Pasvaz/bindonce/commit/e091c273bbd17603d410fecc363874f0d1e6f38e))
### Features
- **Minification:**
  - add min file ([47277ee](https://github.com/Pasvaz/bindonce/commit/47277eedd092b3210de362c725a7dadcddac8e87))
- **Changelog:**
  - Created a changelog file
src/main/webapp/bower_components/angular-bindonce/README.md
New file
@@ -0,0 +1,154 @@
Bindonce
========
High performance binding for AngularJs
## Usage
* download, clone or fork it or install it using [bower](http://twitter.github.com/bower/) `bower install angular-bindonce`
* Include the `bindonce.js` script provided by this component into your app.
* Add `'pasvaz.bindonce'` as a module dependency to your app: `angular.module('app', ['pasvaz.bindonce'])`
## Demo
Here is an example of how AngularJs can [freeze your UI](http://plnkr.co/edit/jwrHVb?p=preview), try to press and hold a key inside the input field, when the table is filled with only 1 person everything is ok, you can see how the DOM is updated by the input in real time, however if you try to load 1000 person *(or even 500 if the testing device is not powerfull)* and repeat the experiment you can see how the UI is frozen. In [this other demo](http://plnkr.co/edit/0DGOrk?p=preview) BindOnce will take care of your watchers and the UI will be reactive as it should be. The code is the same for both demos, the only difference is that I replaced any `ng-*` tag inside the table with the equivalent `bo-*` tag.
* [AngularJs regular Demo](http://plnkr.co/edit/jwrHVb?p=preview)
* [Demo with Bindonce](http://plnkr.co/edit/0DGOrk?p=preview)
## Overview
AngularJs provides a great data binding system but if you abuse of it the page can run into some performance issues, it's known that more of 2000 watchers can lag the UI and that amount can be reached easily if you don't pay attention to the data-binding. Sometime you really need to bind your data using watchers, especially for SPA because the data are updated in real time, but often you can avoid it with some efforts, most of the data presented in your page, once rendered, are immutable so you shouldn't keep watching them for changes.
For instance, take a look to this snippet:
```html
<ul>
    <li ng-repeat="person in Persons">
        <a ng-href="#/people/{{person.id}}"><img ng-src="{{person.imageUrl}}"></a>
        <a ng-href="#/people/{{person.id}}"><span ng-bind="person.name"></span></a>
        <p ng-class="{'cycled':person.generated}" ng-bind-html-unsafe="person.description"></p>
    </li>
</ul>
```
Angular internally creates a `$watch` for each `ng-*` directive in order to keep the data up to date, so in this example just for displaying few info it creates 6 + 1 *(ngRepeatWatch)* watchers per `person`, even if the `person` is supposed to remain the same once shown. Iterate this amount for each person and you can have an idea about how easy is to reach 2000 watchers. Now if you need it because those data could change while you show the page or are bound to some models, it's ok. But most of the time they are static data that don't change once rendered. This is where **bindonce** can really help you.
The above example done with **bindonce**:
```html
<ul>
    <li bindonce ng-repeat="person in Persons">
        <a bo-href="'#/people/' + person.id"><img bo-src="person.imageUrl"></a>
        <a bo-href="'#/people/' + person.id" bo-text="person.name"></a>
        <p bo-class="{'cycled':person.generated}" bo-html="person.description"></p>
    </li>
</ul>
```
Now this example uses **0 watches** per `person` and renders exactly the same result as the above that uses ng-*. *(Angular still uses 1 watcher for ngRepeatWatch)*
### The smart approach
OK until here nothing completely new, with a bit of efforts you could create your own directive and render the `person` inside the `link` function, or you could use [watch fighters](https://github.com/abourget/abourget-angular) that has a similar approach, but there is still one problem that you have to face and **bindonce** already handles it: *the existence of the data when the directive renders the content*. Usually the directives, unless you use watchers or bind their attributes to the scope (still a watcher), render the content when they are loaded into the markup, but if at that given time your data is not available, the directive can't render it. Bindonce can wait until the data is ready before to rendering the content.
Let's take a look at the follow snippet to better understand the concept:
```html
<span my-custom-set-text="Person.firstname"></span>
<span my-custom-set-text="Person.lastname"></span>
...
<script>
angular.module('testApp', [])
.directive('myCustomSetText', function () {
    return {
        link:function (scope, elem, attr, ctrl) {
            elem.text(scope.$eval(attr.myCustomSetText));
        }
    }
});
</script>
```
This basic directive works as expected, it renders the `Person` data without using any watchers. However, if `Person` is not yet available inside the $scope when the page is loaded (say we get `Person` via $http or via $resource), the directive is useless, `scope.$eval(attr.myCustomSetText)` simply renders nothing and exits.
Here is how we can solve this issue with **bindonce**:
```html
<div bindonce="Person" bo-title="Person.title">
    <span bo-text="Person.firstname"></span>
    <span bo-text="Person.lastname"></span>
    <img bo-src="Person.picture" bo-alt="Person.title">
    <p bo-class="{'fancy':Person.isNice}" bo-html="Person.story"></p>
</div>
```
`bindonce="Person"` does the trick, any `bo-*` attribute belonging to `bindonce` waits until the parent `bindonce="{somedata}"` is validated and then renders its content. Once the scope contains the value `Person` then each bo-* child gets filled with the proper values. In order to accomplish this issue, **bindonce** uses just **one** temporary watcher, no matters how many children need to be rendered. As soon as it gets `Person` the watcher is promptly removed. If the $scope already contains the data `bindonce` is looking for, then it doesn't create the temporary watcher and simply starts rendering its children.
You may have noticed that the first example didn't assign any value to the `bindonce` attribute:
```html
<ul>
    <li bindonce ng-repeat="person in Persons">
    ...
```
when used with `ng-repeat` `bindonce` doesn't need to check if `person` is defined because `ng-repeat` creates the directives only when `person` exists. You could be more explicit: `<li bindonce="person" ng-repeat="person in Persons">`, however assigning a value to `bindonce` in an `ng-repeat` won't make any difference.
### Interpolation
Some directives (ng-href, ng-src) use interpolation, ie: `ng-href="/profile/{{User.profileId}}"`.
Both `ng-href` and `ng-src` have the bo-* equivalent directives: `bo-href-i` and `bo-src-i` (pay attention to the **-i**, it stands for **interpolate**). As expected they don't use watchers however Angular creates one watcher per  interpolation, for instance `bo-href-i="/profile/{{User.profileId}}"` sets the element's href **once**, as expected, but Angular keeps a watcher active on `{{User.profileId}}` even if `bo-href-i` doesn't use it.
That's why by default the `bo-href` doesn't use interpolation or watchers. The above equivalent with 0 watchers would be `bo-href="'/profile/' + User.profileId"`. Nevertheless, `bo-href-i` and `bo-src-i` are still maintained for compatibility reasons.
### Filters
Almost every `bo-*` directive replace the equivalent `ng-*` and works in the same ways, except it is evaluated once.
Consequentially you can use any valid angular expression, including filters. This is an example how to use a filter:
```html
<div bindonce="Person">
    <span bo-bind="Person.bill | currency:'USD$'"></span>
</div>
```
## Attribute Usage
| Directive  |     Description |     Example  |
|------------|----------------|-----|
| `bindonce="{somedata}"`| **bindonce** is the main directive. `{somedata}` is optional, and if present, forces bindonce to wait until `somedata` is defined before rendering its children  | `<div bindonce="Person">...<div>` |
| `bo-if = "condition"`     | equivalent to `ng-if` but doesn't use watchers |`<ANY bo-if="Person.isPublic"></ANY>`|
| `bo-switch = "expression"`     | equivalent to `ng-switch` but doesn't use watchers |`<div bo-switch="Person.isPublic">` `<span bo-switch-when="'yes">public</span>` `<span bo-switch-default>private</span>` `</div>`|
| `bo-show = "condition"`     | equivalent to `ng-show` but doesn't use watchers |`<ANY bo-show="Person.isPublic"></ANY>`|
| `bo-hide = "condition"`     | equivalent to `ng-hide` but doesn't use watchers |`<ANY bo-hide="Person.isPrivate"></ANY>`|
| `bo-disabled = "condition"`     | equivalent to `ng-disabled` but doesn't use watchers |`<ANY bo-disabled="Person.isUnavailable"></ANY>`|
| `bo-text = "text"`      | evaluates "text" and print it as text inside the element | `<span bo-text="Person.name"></span>` |
| `bo-bind = "text"`      | alias for `bo-text`, equivalent to `ng-bind` but doesn't use watchers | `<span bo-bind="Person.name"></span>` |
| `bo-html = "markup"`      | evaluates "markup" and render it as html inside the element |`bo-html="Person.description"`|
| `bo-href-i = "url"`<br>*use `bo-href` instead* | **equivalent** to `ng-href`.<br>**Heads up!** Using interpolation `{{}}` it creates one watcher: <br>`bo-href-i="/p/{{Person.id}}"`. <br>Use `bo-href` to avoid the watcher:<br> `bo-href="'/p/' + Person.id"` |`<a bo-href-i="/profile{{Person.id}}"></a>`|
| `bo-href = "url"`      | **similar** to `ng-href` but doesn't allow interpolation using `{{}}` like `ng-href`. <br>**Heads up!** You can't use interpolation `{{}}` inside the url, use bo-href-i for that purpose |`<a bo-href="'/profile' + Person.id"></a>` <br />or<br /> `<a bo-href="link" bo-text="Link"></a>`|
| `bo-src-i = "url"`<br>*use `bo-src` instead* | **equivalent** to `ng-src`. <br>**Heads up!** It creates one watcher |`<img bo-src-i="{{picture}}" bo-alt="title">`|
| `bo-src = "url"`      | **similar** to `ng-src` but doesn't allow interpolation using `{{}}` like `ng-src`. <br>**Heads up!** You can't use interpolation `{{}}`, use bo-src-i for that purpose |`<img bo-src="picture" bo-alt="title">`|
| `bo-class = "object/string"`      | equivalent to `ng-class` but doesn't use watchers |`<span bo-class="{'fancy':Person.condition}">`|
| `bo-alt = "text"`      | evaluates "text" and render it as `alt` for the element |`<ANY bo-alt="title">`|
| `bo-title = "text"`      | evaluates "text" and render it as `title` for the element |`<ANY bo-title="title">`|
| `bo-id = "#id"`      | evaluates "#id" and render it as `id` for the element |`<ANY bo-id="id">`|
| `bo-style = "object"`      | equivalent to `ng-style` but doesn't use watchers |`<ANY bo-style="{'color':Person.color}">`|
| `bo-value = "expression"`      | evaluates "expression" and render it as `value` for the element |`<input type="radio" bo-value="value">`|
| `bo-attr bo-attr-foo = "text"`      | evaluates "text" and render it as a custom attribute for the element |`<div bo-attr bo-attr-foo="bar"></div>`|
## Build
```
$ npm install uglify-js -g
$ uglifyjs bindonce.js -c -m -o bindonce.min.js
```
## Todo
Tests
## Copyright
BindOnce was written by **Pasquale Vazzana**, you can follow him on [google+](https://plus.google.com/101872882413388363602) or on [@twitter](https://twitter.com/PasqualeVazzana)
Thanks to all the [contributors](https://github.com/Pasvaz/bindonce/graphs/contributors)
## LICENSE - "MIT License"
Copyright (c) 2013-2014 Pasquale Vazzana
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
src/main/webapp/bower_components/angular-bindonce/bindonce.js
New file
@@ -0,0 +1,325 @@
(function () {
    "use strict";
    /**
     * Bindonce - Zero watches binding for AngularJs
     * @version v0.3.3
     * @link https://github.com/Pasvaz/bindonce
     * @author Pasquale Vazzana <pasqualevazzana@gmail.com>
     * @license MIT License, http://www.opensource.org/licenses/MIT
     */
    var bindonceModule = angular.module('pasvaz.bindonce', []);
    bindonceModule.directive('bindonce', function ()
    {
        var toBoolean = function (value)
        {
            if (value && value.length !== 0)
            {
                var v = angular.lowercase("" + value);
                value = !(v === 'f' || v === '0' || v === 'false' || v === 'no' || v === 'n' || v === '[]');
            }
            else
            {
                value = false;
            }
            return value;
        };
        var msie = parseInt((/msie (\d+)/.exec(angular.lowercase(navigator.userAgent)) || [])[1], 10);
        if (isNaN(msie))
        {
            msie = parseInt((/trident\/.*; rv:(\d+)/.exec(angular.lowercase(navigator.userAgent)) || [])[1], 10);
        }
        var bindonceDirective =
        {
            restrict: "AM",
            controller: ['$scope', '$element', '$attrs', '$interpolate', function ($scope, $element, $attrs, $interpolate)
            {
                var showHideBinder = function (elm, attr, value)
                {
                    var show = (attr === 'show') ? '' : 'none';
                    var hide = (attr === 'hide') ? '' : 'none';
                    elm.css('display', toBoolean(value) ? show : hide);
                };
                var classBinder = function (elm, value)
                {
                    if (angular.isObject(value) && !angular.isArray(value))
                    {
                        var results = [];
                        angular.forEach(value, function (value, index)
                        {
                            if (value) results.push(index);
                        });
                        value = results;
                    }
                    if (value)
                    {
                        elm.addClass(angular.isArray(value) ? value.join(' ') : value);
                    }
                };
                var transclude = function (transcluder, scope)
                {
                    transcluder.transclude(scope, function (clone)
                    {
                        var parent = transcluder.element.parent();
                        var afterNode = transcluder.element && transcluder.element[transcluder.element.length - 1];
                        var parentNode = parent && parent[0] || afterNode && afterNode.parentNode;
                        var afterNextSibling = (afterNode && afterNode.nextSibling) || null;
                        angular.forEach(clone, function (node)
                        {
                            parentNode.insertBefore(node, afterNextSibling);
                        });
                    });
                };
                var ctrl =
                {
                    watcherRemover: undefined,
                    binders: [],
                    group: $attrs.boName,
                    element: $element,
                    ran: false,
                    addBinder: function (binder)
                    {
                        this.binders.push(binder);
                        // In case of late binding (when using the directive bo-name/bo-parent)
                        // it happens only when you use nested bindonce, if the bo-children
                        // are not dom children the linking can follow another order
                        if (this.ran)
                        {
                            this.runBinders();
                        }
                    },
                    setupWatcher: function (bindonceValue)
                    {
                        var that = this;
                        this.watcherRemover = $scope.$watch(bindonceValue, function (newValue)
                        {
                            if (newValue === undefined) return;
                            that.removeWatcher();
                            that.checkBindonce(newValue);
                        }, true);
                    },
                    checkBindonce: function (value)
                    {
                        var that = this, promise = (value.$promise) ? value.$promise.then : value.then;
                        // since Angular 1.2 promises are no longer
                        // undefined until they don't get resolved
                        if (typeof promise === 'function')
                        {
                            promise(function ()
                            {
                                that.runBinders();
                            });
                        }
                        else
                        {
                            that.runBinders();
                        }
                    },
                    removeWatcher: function ()
                    {
                        if (this.watcherRemover !== undefined)
                        {
                            this.watcherRemover();
                            this.watcherRemover = undefined;
                        }
                    },
                    runBinders: function ()
                    {
                        while (this.binders.length > 0)
                        {
                            var binder = this.binders.shift();
                            if (this.group && this.group != binder.group) continue;
                            var value = binder.scope.$eval((binder.interpolate) ? $interpolate(binder.value) : binder.value);
                            switch (binder.attr)
                            {
                                case 'boIf':
                                    if (toBoolean(value))
                                    {
                                        transclude(binder, binder.scope.$new());
                                    }
                                    break;
                                case 'boSwitch':
                                    var selectedTranscludes, switchCtrl = binder.controller[0];
                                    if ((selectedTranscludes = switchCtrl.cases['!' + value] || switchCtrl.cases['?']))
                                    {
                                        binder.scope.$eval(binder.attrs.change);
                                        angular.forEach(selectedTranscludes, function (selectedTransclude)
                                        {
                                            transclude(selectedTransclude, binder.scope.$new());
                                        });
                                    }
                                    break;
                                case 'boSwitchWhen':
                                    var ctrl = binder.controller[0];
                                    ctrl.cases['!' + binder.attrs.boSwitchWhen] = (ctrl.cases['!' + binder.attrs.boSwitchWhen] || []);
                                    ctrl.cases['!' + binder.attrs.boSwitchWhen].push({ transclude: binder.transclude, element: binder.element });
                                    break;
                                case 'boSwitchDefault':
                                    var ctrl = binder.controller[0];
                                    ctrl.cases['?'] = (ctrl.cases['?'] || []);
                                    ctrl.cases['?'].push({ transclude: binder.transclude, element: binder.element });
                                    break;
                                case 'hide':
                                case 'show':
                                    showHideBinder(binder.element, binder.attr, value);
                                    break;
                                case 'class':
                                    classBinder(binder.element, value);
                                    break;
                                case 'text':
                                    binder.element.text(value);
                                    break;
                                case 'html':
                                    binder.element.html(value);
                                    break;
                                case 'style':
                                    binder.element.css(value);
                                    break;
                                case 'disabled':
                                    binder.element.prop('disabled', value);
                                    break;
                                case 'src':
                                    binder.element.attr(binder.attr, value);
                                    if (msie) binder.element.prop('src', value);
                                    break;
                                case 'attr':
                                    angular.forEach(binder.attrs, function (attrValue, attrKey)
                                    {
                                        var newAttr, newValue;
                                        if (attrKey.match(/^boAttr./) && binder.attrs[attrKey])
                                        {
                                            newAttr = attrKey.replace(/^boAttr/, '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
                                            newValue = binder.scope.$eval(binder.attrs[attrKey]);
                                            binder.element.attr(newAttr, newValue);
                                        }
                                    });
                                    break;
                                case 'href':
                                case 'alt':
                                case 'title':
                                case 'id':
                                case 'value':
                                    binder.element.attr(binder.attr, value);
                                    break;
                            }
                        }
                        this.ran = true;
                    }
                };
                angular.extend(this, ctrl);
            }],
            link: function (scope, elm, attrs, bindonceController)
            {
                var value = attrs.bindonce && scope.$eval(attrs.bindonce);
                if (value !== undefined)
                {
                    bindonceController.checkBindonce(value);
                }
                else
                {
                    bindonceController.setupWatcher(attrs.bindonce);
                    elm.bind("$destroy", bindonceController.removeWatcher);
                }
            }
        };
        return bindonceDirective;
    });
    angular.forEach(
    [
        { directiveName: 'boShow', attribute: 'show' },
        { directiveName: 'boHide', attribute: 'hide' },
        { directiveName: 'boClass', attribute: 'class' },
        { directiveName: 'boText', attribute: 'text' },
        { directiveName: 'boBind', attribute: 'text' },
        { directiveName: 'boHtml', attribute: 'html' },
        { directiveName: 'boSrcI', attribute: 'src', interpolate: true },
        { directiveName: 'boSrc', attribute: 'src' },
        { directiveName: 'boHrefI', attribute: 'href', interpolate: true },
        { directiveName: 'boHref', attribute: 'href' },
        { directiveName: 'boAlt', attribute: 'alt' },
        { directiveName: 'boTitle', attribute: 'title' },
        { directiveName: 'boId', attribute: 'id' },
        { directiveName: 'boStyle', attribute: 'style' },
        { directiveName: 'boDisabled', attribute: 'disabled' },
        { directiveName: 'boValue', attribute: 'value' },
        { directiveName: 'boAttr', attribute: 'attr' },
        { directiveName: 'boIf', transclude: 'element', terminal: true, priority: 1000 },
        { directiveName: 'boSwitch', require: 'boSwitch', controller: function () { this.cases = {}; } },
        { directiveName: 'boSwitchWhen', transclude: 'element', priority: 800, require: '^boSwitch' },
        { directiveName: 'boSwitchDefault', transclude: 'element', priority: 800, require: '^boSwitch' }
    ],
    function (boDirective)
    {
        var childPriority = 200;
        return bindonceModule.directive(boDirective.directiveName, function ()
        {
            var bindonceDirective =
            {
                priority: boDirective.priority || childPriority,
                transclude: boDirective.transclude || false,
                terminal: boDirective.terminal || false,
                require: ['^bindonce'].concat(boDirective.require || []),
                controller: boDirective.controller,
                compile: function (tElement, tAttrs, transclude)
                {
                    return function (scope, elm, attrs, controllers)
                    {
                        var bindonceController = controllers[0];
                        var name = attrs.boParent;
                        if (name && bindonceController.group !== name)
                        {
                            var element = bindonceController.element.parent();
                            bindonceController = undefined;
                            var parentValue;
                            while (element[0].nodeType !== 9 && element.length)
                            {
                                if ((parentValue = element.data('$bindonceController'))
                                    && parentValue.group === name)
                                {
                                    bindonceController = parentValue;
                                    break;
                                }
                                element = element.parent();
                            }
                            if (!bindonceController)
                            {
                                throw new Error("No bindonce controller: " + name);
                            }
                        }
                        bindonceController.addBinder(
                        {
                            element: elm,
                            attr: boDirective.attribute || boDirective.directiveName,
                            attrs: attrs,
                            value: attrs[boDirective.directiveName],
                            interpolate: boDirective.interpolate,
                            group: name,
                            transclude: transclude,
                            controller: controllers.slice(1),
                            scope: scope
                        });
                    };
                }
            };
            return bindonceDirective;
        });
    })
})();
src/main/webapp/bower_components/angular-bindonce/bindonce.min.js
New file
@@ -0,0 +1 @@
!function(){"use strict";var e=angular.module("pasvaz.bindonce",[]);e.directive("bindonce",function(){var e=function(e){if(e&&0!==e.length){var t=angular.lowercase(""+e);e=!("f"===t||"0"===t||"false"===t||"no"===t||"n"===t||"[]"===t)}else e=!1;return e},t=parseInt((/msie (\d+)/.exec(angular.lowercase(navigator.userAgent))||[])[1],10);isNaN(t)&&(t=parseInt((/trident\/.*; rv:(\d+)/.exec(angular.lowercase(navigator.userAgent))||[])[1],10));var r={restrict:"AM",controller:["$scope","$element","$attrs","$interpolate",function(r,a,i,n){var c=function(t,r,a){var i="show"===r?"":"none",n="hide"===r?"":"none";t.css("display",e(a)?i:n)},o=function(e,t){if(angular.isObject(t)&&!angular.isArray(t)){var r=[];angular.forEach(t,function(e,t){e&&r.push(t)}),t=r}t&&e.addClass(angular.isArray(t)?t.join(" "):t)},s=function(e,t){e.transclude(t,function(t){var r=e.element.parent(),a=e.element&&e.element[e.element.length-1],i=r&&r[0]||a&&a.parentNode,n=a&&a.nextSibling||null;angular.forEach(t,function(e){i.insertBefore(e,n)})})},l={watcherRemover:void 0,binders:[],group:i.boName,element:a,ran:!1,addBinder:function(e){this.binders.push(e),this.ran&&this.runBinders()},setupWatcher:function(e){var t=this;this.watcherRemover=r.$watch(e,function(e){void 0!==e&&(t.removeWatcher(),t.checkBindonce(e))},!0)},checkBindonce:function(e){var t=this,r=e.$promise?e.$promise.then:e.then;"function"==typeof r?r(function(){t.runBinders()}):t.runBinders()},removeWatcher:function(){void 0!==this.watcherRemover&&(this.watcherRemover(),this.watcherRemover=void 0)},runBinders:function(){for(;this.binders.length>0;){var r=this.binders.shift();if(!this.group||this.group==r.group){var a=r.scope.$eval(r.interpolate?n(r.value):r.value);switch(r.attr){case"boIf":e(a)&&s(r,r.scope.$new());break;case"boSwitch":var i,l=r.controller[0];(i=l.cases["!"+a]||l.cases["?"])&&(r.scope.$eval(r.attrs.change),angular.forEach(i,function(e){s(e,r.scope.$new())}));break;case"boSwitchWhen":var u=r.controller[0];u.cases["!"+r.attrs.boSwitchWhen]=u.cases["!"+r.attrs.boSwitchWhen]||[],u.cases["!"+r.attrs.boSwitchWhen].push({transclude:r.transclude,element:r.element});break;case"boSwitchDefault":var u=r.controller[0];u.cases["?"]=u.cases["?"]||[],u.cases["?"].push({transclude:r.transclude,element:r.element});break;case"hide":case"show":c(r.element,r.attr,a);break;case"class":o(r.element,a);break;case"text":r.element.text(a);break;case"html":r.element.html(a);break;case"style":r.element.css(a);break;case"disabled":r.element.prop("disabled",a);break;case"src":r.element.attr(r.attr,a),t&&r.element.prop("src",a);break;case"attr":angular.forEach(r.attrs,function(e,t){var a,i;t.match(/^boAttr./)&&r.attrs[t]&&(a=t.replace(/^boAttr/,"").replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),i=r.scope.$eval(r.attrs[t]),r.element.attr(a,i))});break;case"href":case"alt":case"title":case"id":case"value":r.element.attr(r.attr,a)}}}this.ran=!0}};angular.extend(this,l)}],link:function(e,t,r,a){var i=r.bindonce&&e.$eval(r.bindonce);void 0!==i?a.checkBindonce(i):(a.setupWatcher(r.bindonce),t.bind("$destroy",a.removeWatcher))}};return r}),angular.forEach([{directiveName:"boShow",attribute:"show"},{directiveName:"boHide",attribute:"hide"},{directiveName:"boClass",attribute:"class"},{directiveName:"boText",attribute:"text"},{directiveName:"boBind",attribute:"text"},{directiveName:"boHtml",attribute:"html"},{directiveName:"boSrcI",attribute:"src",interpolate:!0},{directiveName:"boSrc",attribute:"src"},{directiveName:"boHrefI",attribute:"href",interpolate:!0},{directiveName:"boHref",attribute:"href"},{directiveName:"boAlt",attribute:"alt"},{directiveName:"boTitle",attribute:"title"},{directiveName:"boId",attribute:"id"},{directiveName:"boStyle",attribute:"style"},{directiveName:"boDisabled",attribute:"disabled"},{directiveName:"boValue",attribute:"value"},{directiveName:"boAttr",attribute:"attr"},{directiveName:"boIf",transclude:"element",terminal:!0,priority:1e3},{directiveName:"boSwitch",require:"boSwitch",controller:function(){this.cases={}}},{directiveName:"boSwitchWhen",transclude:"element",priority:800,require:"^boSwitch"},{directiveName:"boSwitchDefault",transclude:"element",priority:800,require:"^boSwitch"}],function(t){var r=200;return e.directive(t.directiveName,function(){var e={priority:t.priority||r,transclude:t.transclude||!1,terminal:t.terminal||!1,require:["^bindonce"].concat(t.require||[]),controller:t.controller,compile:function(e,r,a){return function(e,r,i,n){var c=n[0],o=i.boParent;if(o&&c.group!==o){var s=c.element.parent();c=void 0;for(var l;9!==s[0].nodeType&&s.length;){if((l=s.data("$bindonceController"))&&l.group===o){c=l;break}s=s.parent()}if(!c)throw new Error("No bindonce controller: "+o)}c.addBinder({element:r,attr:t.attribute||t.directiveName,attrs:i,value:i[t.directiveName],interpolate:t.interpolate,group:o,transclude:a,controller:n.slice(1),scope:e})}}};return e})})}();
src/main/webapp/bower_components/angular-bindonce/bower.json
New file
@@ -0,0 +1,28 @@
{
  "name": "angular-bindonce",
  "version": "0.3.3",
  "main": "bindonce.js",
  "description": "Zero watchers binding directives for AngularJS",
  "homepage": "https://github.com/Pasvaz/bindonce",
  "author": "Pasquale Vazzana <pasqualevazzana@gmail.com>",
  "repository": {
    "type": "git",
    "url": "https://github.com/Pasvaz/bindonce.git"
  },
  "license": "MIT",
  "ignore": [
    "**/.*",
    "node_modules",
    "components"
  ],
  "dependencies": {
  },
  "keywords": [
    "angularjs",
    "angular",
    "directive",
    "binding",
    "watcher",
    "bindonce"
  ]
}
src/main/webapp/bower_components/angular-bindonce/package.json
New file
@@ -0,0 +1,28 @@
{
  "name": "angular-bindonce",
  "version": "0.3.3",
  "main": "bindonce.js",
  "description": "Zero watchers binding directives for AngularJS",
  "homepage": "https://github.com/Pasvaz/bindonce",
  "author": "Pasquale Vazzana <pasqualevazzana@gmail.com>",
  "repository": {
    "type": "git",
    "url": "https://github.com/Pasvaz/bindonce.git"
  },
  "license": "MIT",
  "ignore": [
    "**/.*",
    "node_modules",
    "components"
  ],
  "dependencies": {
  },
  "keywords": [
    "angularjs",
    "angular",
    "directive",
    "binding",
    "watcher",
    "bindonce"
  ]
}
src/main/webapp/bower_components/angular-cookies/.bower.json
New file
@@ -0,0 +1,20 @@
{
  "name": "angular-cookies",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular-cookies.js",
  "ignore": [],
  "dependencies": {
    "angular": "1.5.11"
  },
  "homepage": "https://github.com/angular/bower-angular-cookies",
  "_release": "1.5.11",
  "_resolution": {
    "type": "version",
    "tag": "v1.5.11",
    "commit": "a443bb1d7edc1688acf8d820932f27b4b19b89bc"
  },
  "_source": "https://github.com/angular/bower-angular-cookies.git",
  "_target": "1.5.11",
  "_originalSource": "angular-cookies"
}
src/main/webapp/bower_components/angular-cookies/LICENSE.md
New file
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Angular
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
src/main/webapp/bower_components/angular-cookies/README.md
New file
@@ -0,0 +1,68 @@
# packaged angular-cookies
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngCookies).
Please file issues and pull requests against that repo.
## Install
You can install this package either with `npm` or with `bower`.
### npm
```shell
npm install angular-cookies
```
Then add `ngCookies` as a dependency for your app:
```javascript
angular.module('myApp', [require('angular-cookies')]);
```
### bower
```shell
bower install angular-cookies
```
Add a `<script>` to your `index.html`:
```html
<script src="/bower_components/angular-cookies/angular-cookies.js"></script>
```
Then add `ngCookies` as a dependency for your app:
```javascript
angular.module('myApp', ['ngCookies']);
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/api/ngCookies).
## License
The MIT License
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
src/main/webapp/bower_components/angular-cookies/angular-cookies.js
New file
@@ -0,0 +1,330 @@
/**
 * @license AngularJS v1.5.11
 * (c) 2010-2017 Google, Inc. http://angularjs.org
 * License: MIT
 */
(function(window, angular) {'use strict';
/**
 * @ngdoc module
 * @name ngCookies
 * @description
 *
 * # ngCookies
 *
 * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies.
 *
 *
 * <div doc-module-components="ngCookies"></div>
 *
 * See {@link ngCookies.$cookies `$cookies`} for usage.
 */
angular.module('ngCookies', ['ng']).
  /**
   * @ngdoc provider
   * @name $cookiesProvider
   * @description
   * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service.
   * */
   provider('$cookies', [/** @this */function $CookiesProvider() {
    /**
     * @ngdoc property
     * @name $cookiesProvider#defaults
     * @description
     *
     * Object containing default options to pass when setting cookies.
     *
     * The object may have following properties:
     *
     * - **path** - `{string}` - The cookie will be available only for this path and its
     *   sub-paths. By default, this is the URL that appears in your `<base>` tag.
     * - **domain** - `{string}` - The cookie will be available only for this domain and
     *   its sub-domains. For security reasons the user agent will not accept the cookie
     *   if the current domain is not a sub-domain of this domain or equal to it.
     * - **expires** - `{string|Date}` - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT"
     *   or a Date object indicating the exact date/time this cookie will expire.
     * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a
     *   secured connection.
     *
     * Note: By default, the address that appears in your `<base>` tag will be used as the path.
     * This is important so that cookies will be visible for all routes when html5mode is enabled.
     *
     * @example
     *
     * ```js
     * angular.module('cookiesProviderExample', ['ngCookies'])
     *   .config(['$cookiesProvider', function($cookiesProvider) {
     *     // Setting default options
     *     $cookiesProvider.defaults.domain = 'foo.com';
     *     $cookiesProvider.defaults.secure = true;
     *   }]);
     * ```
     **/
    var defaults = this.defaults = {};
    function calcOptions(options) {
      return options ? angular.extend({}, defaults, options) : defaults;
    }
    /**
     * @ngdoc service
     * @name $cookies
     *
     * @description
     * Provides read/write access to browser's cookies.
     *
     * <div class="alert alert-info">
     * Up until Angular 1.3, `$cookies` exposed properties that represented the
     * current browser cookie values. In version 1.4, this behavior has changed, and
     * `$cookies` now provides a standard api of getters, setters etc.
     * </div>
     *
     * Requires the {@link ngCookies `ngCookies`} module to be installed.
     *
     * @example
     *
     * ```js
     * angular.module('cookiesExample', ['ngCookies'])
     *   .controller('ExampleController', ['$cookies', function($cookies) {
     *     // Retrieving a cookie
     *     var favoriteCookie = $cookies.get('myFavorite');
     *     // Setting a cookie
     *     $cookies.put('myFavorite', 'oatmeal');
     *   }]);
     * ```
     */
    this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) {
      return {
        /**
         * @ngdoc method
         * @name $cookies#get
         *
         * @description
         * Returns the value of given cookie key
         *
         * @param {string} key Id to use for lookup.
         * @returns {string} Raw cookie value.
         */
        get: function(key) {
          return $$cookieReader()[key];
        },
        /**
         * @ngdoc method
         * @name $cookies#getObject
         *
         * @description
         * Returns the deserialized value of given cookie key
         *
         * @param {string} key Id to use for lookup.
         * @returns {Object} Deserialized cookie value.
         */
        getObject: function(key) {
          var value = this.get(key);
          return value ? angular.fromJson(value) : value;
        },
        /**
         * @ngdoc method
         * @name $cookies#getAll
         *
         * @description
         * Returns a key value object with all the cookies
         *
         * @returns {Object} All cookies
         */
        getAll: function() {
          return $$cookieReader();
        },
        /**
         * @ngdoc method
         * @name $cookies#put
         *
         * @description
         * Sets a value for given cookie key
         *
         * @param {string} key Id for the `value`.
         * @param {string} value Raw value to be stored.
         * @param {Object=} options Options object.
         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
         */
        put: function(key, value, options) {
          $$cookieWriter(key, value, calcOptions(options));
        },
        /**
         * @ngdoc method
         * @name $cookies#putObject
         *
         * @description
         * Serializes and sets a value for given cookie key
         *
         * @param {string} key Id for the `value`.
         * @param {Object} value Value to be stored.
         * @param {Object=} options Options object.
         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
         */
        putObject: function(key, value, options) {
          this.put(key, angular.toJson(value), options);
        },
        /**
         * @ngdoc method
         * @name $cookies#remove
         *
         * @description
         * Remove given cookie
         *
         * @param {string} key Id of the key-value pair to delete.
         * @param {Object=} options Options object.
         *    See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults}
         */
        remove: function(key, options) {
          $$cookieWriter(key, undefined, calcOptions(options));
        }
      };
    }];
  }]);
angular.module('ngCookies').
/**
 * @ngdoc service
 * @name $cookieStore
 * @deprecated
 * sinceVersion="v1.4.0"
 * Please use the {@link ngCookies.$cookies `$cookies`} service instead.
 *
 * @requires $cookies
 *
 * @description
 * Provides a key-value (string-object) storage, that is backed by session cookies.
 * Objects put or retrieved from this storage are automatically serialized or
 * deserialized by angular's toJson/fromJson.
 *
 * Requires the {@link ngCookies `ngCookies`} module to be installed.
 *
 * @example
 *
 * ```js
 * angular.module('cookieStoreExample', ['ngCookies'])
 *   .controller('ExampleController', ['$cookieStore', function($cookieStore) {
 *     // Put cookie
 *     $cookieStore.put('myFavorite','oatmeal');
 *     // Get cookie
 *     var favoriteCookie = $cookieStore.get('myFavorite');
 *     // Removing a cookie
 *     $cookieStore.remove('myFavorite');
 *   }]);
 * ```
 */
 factory('$cookieStore', ['$cookies', function($cookies) {
    return {
      /**
       * @ngdoc method
       * @name $cookieStore#get
       *
       * @description
       * Returns the value of given cookie key
       *
       * @param {string} key Id to use for lookup.
       * @returns {Object} Deserialized cookie value, undefined if the cookie does not exist.
       */
      get: function(key) {
        return $cookies.getObject(key);
      },
      /**
       * @ngdoc method
       * @name $cookieStore#put
       *
       * @description
       * Sets a value for given cookie key
       *
       * @param {string} key Id for the `value`.
       * @param {Object} value Value to be stored.
       */
      put: function(key, value) {
        $cookies.putObject(key, value);
      },
      /**
       * @ngdoc method
       * @name $cookieStore#remove
       *
       * @description
       * Remove given cookie
       *
       * @param {string} key Id of the key-value pair to delete.
       */
      remove: function(key) {
        $cookies.remove(key);
      }
    };
  }]);
/**
 * @name $$cookieWriter
 * @requires $document
 *
 * @description
 * This is a private service for writing cookies
 *
 * @param {string} name Cookie name
 * @param {string=} value Cookie value (if undefined, cookie will be deleted)
 * @param {Object=} options Object with options that need to be stored for the cookie.
 */
function $$CookieWriter($document, $log, $browser) {
  var cookiePath = $browser.baseHref();
  var rawDocument = $document[0];
  function buildCookieString(name, value, options) {
    var path, expires;
    options = options || {};
    expires = options.expires;
    path = angular.isDefined(options.path) ? options.path : cookiePath;
    if (angular.isUndefined(value)) {
      expires = 'Thu, 01 Jan 1970 00:00:00 GMT';
      value = '';
    }
    if (angular.isString(expires)) {
      expires = new Date(expires);
    }
    var str = encodeURIComponent(name) + '=' + encodeURIComponent(value);
    str += path ? ';path=' + path : '';
    str += options.domain ? ';domain=' + options.domain : '';
    str += expires ? ';expires=' + expires.toUTCString() : '';
    str += options.secure ? ';secure' : '';
    // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum:
    // - 300 cookies
    // - 20 cookies per unique domain
    // - 4096 bytes per cookie
    var cookieLength = str.length + 1;
    if (cookieLength > 4096) {
      $log.warn('Cookie \'' + name +
        '\' possibly not set or overflowed because it was too large (' +
        cookieLength + ' > 4096 bytes)!');
    }
    return str;
  }
  return function(name, value, options) {
    rawDocument.cookie = buildCookieString(name, value, options);
  };
}
$$CookieWriter.$inject = ['$document', '$log', '$browser'];
angular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() {
  this.$get = $$CookieWriter;
});
})(window, window.angular);
src/main/webapp/bower_components/angular-cookies/angular-cookies.min.js
New file
@@ -0,0 +1,9 @@
/*
 AngularJS v1.5.11
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(n,c){'use strict';function l(b,a,g){var d=g.baseHref(),k=b[0];return function(b,e,f){var g,h;f=f||{};h=f.expires;g=c.isDefined(f.path)?f.path:d;c.isUndefined(e)&&(h="Thu, 01 Jan 1970 00:00:00 GMT",e="");c.isString(h)&&(h=new Date(h));e=encodeURIComponent(b)+"="+encodeURIComponent(e);e=e+(g?";path="+g:"")+(f.domain?";domain="+f.domain:"");e+=h?";expires="+h.toUTCString():"";e+=f.secure?";secure":"";f=e.length+1;4096<f&&a.warn("Cookie '"+b+"' possibly not set or overflowed because it was too large ("+
f+" > 4096 bytes)!");k.cookie=e}}c.module("ngCookies",["ng"]).provider("$cookies",[function(){var b=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(a,g){return{get:function(d){return a()[d]},getObject:function(d){return(d=this.get(d))?c.fromJson(d):d},getAll:function(){return a()},put:function(d,a,m){g(d,a,m?c.extend({},b,m):b)},putObject:function(d,b,a){this.put(d,c.toJson(b),a)},remove:function(a,k){g(a,void 0,k?c.extend({},b,k):b)}}}]}]);c.module("ngCookies").factory("$cookieStore",
["$cookies",function(b){return{get:function(a){return b.getObject(a)},put:function(a,c){b.putObject(a,c)},remove:function(a){b.remove(a)}}}]);l.$inject=["$document","$log","$browser"];c.module("ngCookies").provider("$$cookieWriter",function(){this.$get=l})})(window,window.angular);
//# sourceMappingURL=angular-cookies.min.js.map
src/main/webapp/bower_components/angular-cookies/angular-cookies.min.js.map
New file
@@ -0,0 +1,8 @@
{
"version":3,
"file":"angular-cookies.min.js",
"lineCount":8,
"mappings":"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",
"sources":["angular-cookies.js"],
"names":["window","angular","$$CookieWriter","$document","$log","$browser","cookiePath","baseHref","rawDocument","name","value","options","path","expires","isDefined","isUndefined","isString","Date","str","encodeURIComponent","domain","toUTCString","secure","cookieLength","length","warn","cookie","module","provider","$CookiesProvider","defaults","$get","$$cookieReader","$$cookieWriter","get","key","getObject","fromJson","getAll","put","extend","putObject","toJson","remove","undefined","factory","$cookies","$inject","$$CookieWriterProvider"]
}
src/main/webapp/bower_components/angular-cookies/bower.json
New file
@@ -0,0 +1,10 @@
{
  "name": "angular-cookies",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular-cookies.js",
  "ignore": [],
  "dependencies": {
    "angular": "1.5.11"
  }
}
src/main/webapp/bower_components/angular-cookies/index.js
New file
@@ -0,0 +1,2 @@
require('./angular-cookies');
module.exports = 'ngCookies';
src/main/webapp/bower_components/angular-cookies/package.json
New file
@@ -0,0 +1,33 @@
{
  "name": "angular-cookies",
  "version": "1.5.11",
  "description": "AngularJS module for cookies",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/angular/angular.js.git"
  },
  "keywords": [
    "angular",
    "framework",
    "browser",
    "cookies",
    "client-side"
  ],
  "author": "Angular Core Team <angular-core+npm@google.com>",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/angular/angular.js/issues"
  },
  "homepage": "http://angularjs.org",
  "jspm": {
    "shim": {
      "angular-cookies": {
        "deps": ["angular"]
      }
    }
  }
}
src/main/webapp/bower_components/angular-nvd3/.bower.json
New file
@@ -0,0 +1,51 @@
{
  "name": "angular-nvd3",
  "version": "1.0.9",
  "description": "An AngularJS directive for NVD3.js reusable charting library (based on D3.js)",
  "main": [
    "dist/angular-nvd3.js"
  ],
  "license": "MIT",
  "keywords": [
    "d3",
    "nvd3",
    "angular",
    "angular-nvd3",
    "directives",
    "visualization",
    "charts",
    "svg"
  ],
  "authors": [
    "Konstantin Skipor"
  ],
  "homepage": "http://krispo.github.io/angular-nvd3",
  "repository": {
    "type": "git",
    "url": "https://github.com/krispo/angular-nvd3.git"
  },
  "dependencies": {
    "angular": "^1.x",
    "d3": "^3.3.13",
    "nvd3": "^1.7.1"
  },
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "src",
    "test",
    "tests",
    "lib",
    "examples"
  ],
  "_release": "1.0.9",
  "_resolution": {
    "type": "version",
    "tag": "v1.0.9",
    "commit": "6081783eb86d43015602ca91b13f249eb34d5402"
  },
  "_source": "https://github.com/krispo/angular-nvd3.git",
  "_target": "1.0.9",
  "_originalSource": "angular-nvd3"
}
src/main/webapp/bower_components/angular-nvd3/Gruntfile.js
New file
@@ -0,0 +1,60 @@
/* global module */
module.exports = function(grunt){
    'use strict';
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        concat: {
            options: {
                banner:
                        '/**************************************************************************\n' +
                        '* <%= pkg.title || pkg.name %>, ' +
                        'v<%= pkg.version %>; ' +
                        '<%= pkg.license %>\n' +
                        '<%= pkg.homepage ? "* " + pkg.homepage + "\\n" : "" %>' +
                        '**************************************************************************/\n',
                stripBanners: true
            },
            dist: {
                src: ['src/*.js'],
                dest: 'dist/<%= pkg.name %>.js'
            }
        },
        uglify: {
            options: {
                mangle: false
            },
            min: {
                files: {
                    'dist/<%= pkg.name %>.min.js': ['dist/<%= pkg.name %>.js']
                }
            }
        },
        jshint: {
            options: {
                jshintrc: true
            },
            afterconcat: ['dist/<%= pkg.name %>.js'],
            files: ['Gruntfile.js', 'src/**/*.js', 'test/**/*.js']
        },
        watch: {
            files: ['<%= jshint.files %>'],
            tasks: ['jshint']
        }
    });
    grunt.loadNpmTasks('grunt-contrib-concat');
    grunt.loadNpmTasks('grunt-contrib-uglify');
    grunt.loadNpmTasks('grunt-contrib-jshint');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.registerTask('default', ['concat', 'jshint', 'uglify']);
};
src/main/webapp/bower_components/angular-nvd3/LICENSE
New file
@@ -0,0 +1,16 @@
The MIT License (MIT)
Copyright (c) 2014 Konstantin Skipor
Permission is hereby granted, free of charge, to any person obtaining a copy of this software
and associated documentation files (the "Software"), to deal in the Software without restriction,
including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
src/main/webapp/bower_components/angular-nvd3/README.md
New file
@@ -0,0 +1,217 @@
# Angular-nvD3
[![Build Status](https://travis-ci.org/krispo/angular-nvd3.svg?branch=master)](https://travis-ci.org/krispo/angular-nvd3)
[![NPM Version](http://img.shields.io/npm/v/angular-nvd3.svg?style=flat)](https://www.npmjs.org/package/angular-nvd3)
This thing is designed to make it easier to work with [nvd3.js](https://github.com/novus/nvd3) re-usable charting library. This directive allows you to easily customize your charts via JSON API.
The key feature is that the original hierarchical structure of nvd3 models is completely preserved in directive JSON structure. This means that while you creating a complex chart that containing multiple elementary chart models (such as `line`, `bar`, `axis`, ...), you can in turn customize the properties of each internal elementary models as well as the global charting properties the way you want. This can be done as usual, but it becomes quite easily to customize while applying JSON approach to.
Try it [online](http://krispo.github.io/angular-nvd3/).
## How to use
### Install
##### cdnjs
    https://cdnjs.cloudflare.com/ajax/libs/angular-nvd3/1.0.9/angular-nvd3.min.js
##### bower
    $ bower install angular-nvd3
An [angular.js](https://angularjs.org/), [D3.js](http://d3js.org/) and [nvd3.js](http://nvd3.org/) would be installed as a dependency automatically. If it won't for some reason, install it manually:
    $ bower install angular
    $ bower install d3
    $ bower install nvd3
Add dependencies to the `<head>` section of your main html:
```html
<meta charset="utf-8">  <!-- it's important for d3.js -->
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/d3/d3.js"></script>
<script src="bower_components/nvd3/build/nv.d3.js"></script> <!-- or use another assembly -->
<script src="bower_components/angular-nvd3/dist/angular-nvd3.js"></script>
<link rel="stylesheet" href="bower_components/nvd3/build/nv.d3.css">
```
##### npm
    $ npm install angular-nvd3
##### download
If you don't use bower or npm, you can manually download and unpack directive with the latest version ([zip](https://github.com/krispo/angular-nvd3/archive/v1.0.8.zip), [tar.gz](https://github.com/krispo/angular-nvd3/archive/v1.0.8.tar.gz)).
### Basic usage
Inject `nvd3` directive into angular module, set up some chart options and push some data to the controller:
```javascript
angular.module('myApp', ['nvd3'])
       .controller('myCtrl', function('$scope'){
           $scope.options = { /* JSON data */ };
           $scope.data = { /* JSON data */ }
        })
```
and in html again you can use it like:
```html
<div ng-app='myApp'>
    <div ng-controller='myCtrl'>
        <nvd3 options='options' data='data'></nvd3>
    </div>
</div>
```
The chart would be displayed on the page.
### Example
Let's create a simple **Discrete Bar Chart**.
Configure options:
```javascript
$scope.options = {
    chart: {
        type: 'discreteBarChart',
        height: 450,
        margin : {
            top: 20,
            right: 20,
            bottom: 60,
            left: 55
        },
        x: function(d){ return d.label; },
        y: function(d){ return d.value; },
        showValues: true,
        valueFormat: function(d){
            return d3.format(',.4f')(d);
        },
        transitionDuration: 500,
        xAxis: {
            axisLabel: 'X Axis'
        },
        yAxis: {
            axisLabel: 'Y Axis',
            axisLabelDistance: 30
        }
    }
};
```
Push some data:
```javascript
$scope.data = [{
    key: "Cumulative Return",
    values: [
        { "label" : "A" , "value" : -29.765957771107 },
        { "label" : "B" , "value" : 0 },
        { "label" : "C" , "value" : 32.807804682612 },
        { "label" : "D" , "value" : 196.45946739256 },
        { "label" : "E" , "value" : 0.19434030906893 },
        { "label" : "F" , "value" : -98.079782601442 },
        { "label" : "G" , "value" : -13.925743130903 },
        { "label" : "H" , "value" : -5.1387322875705 }
    ]
}];
```
See the [result](http://krispo.github.io/angular-nvd3/#/discreteBarChart).
Read more [docs](http://krispo.github.io/angular-nvd3/#/quickstart).
### Contribute
Test it using command:
    $npm test
Then build using [grunt](http://gruntjs.com/) (*node.js must be installed*):
    $grunt
## Release Notes
### [1.0.9](https://github.com/krispo/angular-nvd3/releases/tag/v1.0.9)
* add `focus` options
* fix data update for sunburst chart
* Node.js/CommonJS support
### 1.0.8
* fixed zoom feature for delayed data loading
* fixed caption positioning
* fixed `updateWithOptions` and `updateWithData` api functions
### 1.0.7
* added `debounceImmediate` flag
* added compatibility with nvd3 1.8.3
### 1.0.6
* merged with nvd3 1.8.2
* fixed travis
* fixed npm package dependencies
* fixed tests
* added `zoomend` event
### 1.0.5 (nvd3 v1.8.1)
* fixed `index.js`
* fixed `onReady` attribute
* added `getElement` api method
### 1.0.4
* `deepWatchData = true` by default
* deleted `autorefresh`, `deepWatchConfig` configs
* added `deepWatchDataDepth = 2` config to specify watch depth level for data: 0 - by reference (cheap), 1 - by collection item (the middle), 2 - by value (expensive)
* added `onReady` attribute
* added `updateWithTimeout`, `refreshWithTimeout` methods to `api`
* fixed bugs
### 1.0.3
* Fixed width and height issues for IE: [#16](https://github.com/krispo/angular-nvd3/issues/16), [#158](https://github.com/krispo/angular-nvd3/issues/158), [#200](https://github.com/krispo/angular-nvd3/issues/200), [#226](https://github.com/krispo/angular-nvd3/issues/226).
* Fixed tooltip issue [#172](https://github.com/krispo/angular-nvd3/issues/172)
* Set `refreshDataOnly = true` by default
* Added `zoom & pan` functionality
* Fixed tooltip content, subtitle and many other issues...
### 1.0.2
* Fixed `tooltip` [#222](https://github.com/krispo/angular-nvd3/pull/222) for interactive guideline.
* Set `deepWatchData` to `false` by default
* Added `deepWatchOptions` and `deepWatchConfig` properties
### 1.0.1
* Add support for `Candlestick Chart`, `OHLC Chart`, `Sunburst Chart`, `Pox Plot Chart`
### 1.0.0-rc.2
* Add support of nvd3 1.8.1
* Fix [issue](https://github.com/krispo/angular-nvd3/issues/100) with `stacked` parameter
### 1.0.0-rc
* Rename `utils` module to avoid conflicts
* Fix nvd3 version reference in bower.json
* Remove usage of reserved word `class`
* Fix multiple resize event listeners which were causing null pointer exceptions
* Change bower.json's main property to use regular instead of minified file
### 1.0.0-beta (nvd3 v1.7.1)
Under developing in **master** (1.x) branch
--
> If you use the old nvd3 version (v1.1.15-beta), I recommend you to use an updated assembly (`nv.d3.js` and `nv.d3.css`, you can find it in the `lib` directory of this project) with some fixes rather than the last one installed via bower.
### [0.1.1 (stable for nvd3 v1.1.15-beta)](https://github.com/krispo/angular-nvd3/releases/tag/v0.1.1)
Under developing in **0.x** branch
### 0.1.0
* added update method to global api, [pull request](https://github.com/krispo/angular-nvd3/pull/27)
* fixed bug for `multiChart`
* added getScope method to global api. (give an access to internal directive scope, for example, we can get chart object like: `$scope.api.getScope().chart`)
* fixed multiple chart rendering under initializing (fixed multiple callback calls)
### 0.0.9
...
## License
Licensed under the terms of the [MIT License](https://github.com/krispo/angular-nvd3/blob/master/LICENSE)
src/main/webapp/bower_components/angular-nvd3/bower.json
New file
@@ -0,0 +1,42 @@
{
    "name": "angular-nvd3",
    "version": "1.0.9",
    "description": "An AngularJS directive for NVD3.js reusable charting library (based on D3.js)",
    "main": [
      "dist/angular-nvd3.js"
    ],
    "license": "MIT",
    "keywords": [
        "d3",
        "nvd3",
        "angular",
        "angular-nvd3",
        "directives",
        "visualization",
        "charts",
        "svg"
    ],
    "authors": [
        "Konstantin Skipor"
    ],
    "homepage": "http://krispo.github.io/angular-nvd3",
    "repository": {
        "type": "git",
        "url": "https://github.com/krispo/angular-nvd3.git"
    },
    "dependencies": {
        "angular": "^1.x",
        "d3": "^3.3.13",
        "nvd3": "^1.7.1"
    },
    "ignore": [
        "**/.*",
        "node_modules",
        "bower_components",
        "src",
        "test",
        "tests",
        "lib",
        "examples"
    ]
}
src/main/webapp/bower_components/angular-nvd3/dist/angular-nvd3.js
New file
@@ -0,0 +1,653 @@
/**************************************************************************
* AngularJS-nvD3, v1.0.9; MIT
* http://krispo.github.io/angular-nvd3
**************************************************************************/
(function(window){
    'use strict';
    var nv = window.nv;
    // Node.js or CommonJS
    if (typeof(exports) !== 'undefined') {
        /* jshint -W020 */
        nv = require('nvd3');
        /* jshint +W020 */
    }
    angular.module('nvd3', [])
        .directive('nvd3', ['nvd3Utils', function(nvd3Utils){
            return {
                restrict: 'AE',
                scope: {
                    data: '=',      //chart data, [required]
                    options: '=',   //chart options, according to nvd3 core api, [required]
                    api: '=?',      //directive global api, [optional]
                    events: '=?',   //global events that directive would subscribe to, [optional]
                    config: '=?',    //global directive configuration, [optional]
                    onReady: '&?' //callback function that is called with internal scope when directive is created [optional]
                },
                link: function(scope, element, attrs){
                    var defaultConfig = {
                        extended: false,
                        visible: true,
                        disabled: false,
                        refreshDataOnly: true,
                        deepWatchOptions: true,
                        deepWatchData: true,
                        deepWatchDataDepth: 2, // 0 - by reference (cheap), 1 - by collection item (the middle), 2 - by value (expensive)
                        debounce: 10, // default 10ms, time silence to prevent refresh while multiple options changes at a time
                        debounceImmediate: true // immediate flag for debounce function
                    };
                    //flag indicates if directive and chart is ready
                    scope.isReady = false;
                    //basic directive configuration
                    scope._config = angular.extend(defaultConfig, scope.config);
                    //directive global api
                    scope.api = {
                        // Fully refresh directive
                        refresh: function(){
                            scope.api.updateWithOptions();
                            scope.isReady = true;
                        },
                        // Fully refresh directive with specified timeout
                        refreshWithTimeout: function(t){
                            setTimeout(function(){
                                scope.api.refresh();
                            }, t);
                        },
                        // Update chart layout (for example if container is resized)
                        update: function() {
                            if (scope.chart && scope.svg) {
                                if (scope.options.chart.type === 'sunburstChart') {
                                    scope.svg.datum(angular.copy(scope.data)).call(scope.chart);
                                } else {
                                    scope.svg.datum(scope.data).call(scope.chart);
                                }
                            } else {
                                scope.api.refresh();
                            }
                        },
                        // Update chart layout with specified timeout
                        updateWithTimeout: function(t){
                            setTimeout(function(){
                                scope.api.update();
                            }, t);
                        },
                        // Update chart with new options
                        updateWithOptions: function(options){
                            // set options
                            if (!arguments.length) {
                                options = scope.options;
                            } else {
                                scope.options = options;
                                // return if options $watch is enabled
                                if (scope._config.deepWatchOptions && !scope._config.disabled) return;
                            }
                            // Clearing
                            scope.api.clearElement();
                            // Exit if options are not yet bound
                            if (angular.isDefined(options) === false) return;
                            // Exit if chart is hidden
                            if (!scope._config.visible) return;
                            // Initialize chart with specific type
                            scope.chart = nv.models[options.chart.type]();
                            // Generate random chart ID
                            scope.chart.id = Math.random().toString(36).substr(2, 15);
                            angular.forEach(scope.chart, function(value, key){
                                if (key[0] === '_');
                                else if ([
                                        'clearHighlights',
                                        'highlightPoint',
                                        'id',
                                        'options',
                                        'resizeHandler',
                                        'state',
                                        'open',
                                        'close',
                                        'tooltipContent'
                                    ].indexOf(key) >= 0);
                                else if (key === 'dispatch') {
                                    if (options.chart[key] === undefined || options.chart[key] === null) {
                                        if (scope._config.extended) options.chart[key] = {};
                                    }
                                    configureEvents(scope.chart[key], options.chart[key]);
                                }
                                else if ([
                                        'bars',
                                        'bars1',
                                        'bars2',
                                        'boxplot',
                                        'bullet',
                                        'controls',
                                        'discretebar',
                                        'distX',
                                        'distY',
                                        'focus',
                                        'interactiveLayer',
                                        'legend',
                                        'lines',
                                        'lines1',
                                        'lines2',
                                        'multibar',
                                        'pie',
                                        'scatter',
                                        'scatters1',
                                        'scatters2',
                                        'sparkline',
                                        'stack1',
                                        'stack2',
                                        'sunburst',
                                        'tooltip',
                                        'x2Axis',
                                        'xAxis',
                                        'y1Axis',
                                        'y2Axis',
                                        'y3Axis',
                                        'y4Axis',
                                        'yAxis',
                                        'yAxis1',
                                        'yAxis2'
                                    ].indexOf(key) >= 0 ||
                                        // stacked is a component for stackedAreaChart, but a boolean for multiBarChart and multiBarHorizontalChart
                                    (key === 'stacked' && options.chart.type === 'stackedAreaChart')) {
                                    if (options.chart[key] === undefined || options.chart[key] === null) {
                                        if (scope._config.extended) options.chart[key] = {};
                                    }
                                    configure(scope.chart[key], options.chart[key], options.chart.type);
                                }
                                //TODO: need to fix bug in nvd3
                                else if ((key === 'focusHeight') && options.chart.type === 'lineChart');
                                else if ((key === 'focusHeight') && options.chart.type === 'lineWithFocusChart');
                                else if ((key === 'xTickFormat' || key === 'yTickFormat') && options.chart.type === 'lineWithFocusChart');
                                else if ((key === 'tooltips') && options.chart.type === 'boxPlotChart');
                                else if ((key === 'tooltipXContent' || key === 'tooltipYContent') && options.chart.type === 'scatterChart');
                                else if ((key === 'x' || key === 'y') && options.chart.type === 'forceDirectedGraph');
                                else if (options.chart[key] === undefined || options.chart[key] === null){
                                    if (scope._config.extended) {
                                        if (key==='barColor')
                                            options.chart[key] = value()();
                                        else
                                            options.chart[key] = value();
                                    }
                                }
                                else scope.chart[key](options.chart[key]);
                            });
                            // Update with data
                            scope.api.updateWithData();
                            // Configure wrappers
                            if (options['title'] || scope._config.extended) configureWrapper('title');
                            if (options['subtitle'] || scope._config.extended) configureWrapper('subtitle');
                            if (options['caption'] || scope._config.extended) configureWrapper('caption');
                            // Configure styles
                            if (options['styles'] || scope._config.extended) configureStyles();
                            nv.addGraph(function() {
                                if (!scope.chart) return;
                                // Remove resize handler. Due to async execution should be placed here, not in the clearElement
                                if (scope.chart.resizeHandler) scope.chart.resizeHandler.clear();
                                // Update the chart when window resizes
                                scope.chart.resizeHandler = nv.utils.windowResize(function() {
                                    scope.chart && scope.chart.update && scope.chart.update();
                                });
                                /// Zoom feature
                                if (options.chart.zoom !== undefined && [
                                        'scatterChart',
                                        'lineChart',
                                        'candlestickBarChart',
                                        'cumulativeLineChart',
                                        'historicalBarChart',
                                        'ohlcBarChart',
                                        'stackedAreaChart'
                                    ].indexOf(options.chart.type) > -1) {
                                    nvd3Utils.zoom(scope, options);
                                }
                                return scope.chart;
                            }, options.chart['callback']);
                        },
                        // Update chart with new data
                        updateWithData: function (data){
                            // set data
                            if (!arguments.length) {
                                if (scope.options.chart.type === 'sunburstChart') {
                                    data = angular.copy(scope.data);
                                } else {
                                    data = scope.data;
                                }
                            } else {
                                scope.data = data;
                                // return if data $watch is enabled
                                if (scope._config.deepWatchData && !scope._config.disabled) return;
                            }
                            if (data) {
                                // remove whole svg element with old data
                                d3.select(element[0]).select('svg').remove();
                                var h, w;
                                // Select the current element to add <svg> element and to render the chart in
                                scope.svg = d3.select(element[0]).insert('svg', '.caption');
                                if (h = scope.options.chart.height) {
                                    if (!isNaN(+h)) h += 'px'; //check if height is number
                                    scope.svg.attr('height', h).style({height: h});
                                }
                                if (w = scope.options.chart.width) {
                                    if (!isNaN(+w)) w += 'px'; //check if width is number
                                    scope.svg.attr('width', w).style({width: w});
                                } else {
                                    scope.svg.attr('width', '100%').style({width: '100%'});
                                }
                                scope.svg.datum(data).call(scope.chart);
                                // update zooming if exists
                                if (scope.chart && scope.chart.zoomRender) scope.chart.zoomRender();
                            }
                        },
                        // Fully clear directive element
                        clearElement: function (){
                            element.find('.title').remove();
                            element.find('.subtitle').remove();
                            element.find('.caption').remove();
                            element.empty();
                            // remove tooltip if exists
                            if (scope.chart && scope.chart.tooltip && scope.chart.tooltip.id) {
                                d3.select('#' + scope.chart.tooltip.id()).remove();
                            }
                            // To be compatible with old nvd3 (v1.7.1)
                            if (nv.graphs && scope.chart) {
                                for (var i = nv.graphs.length - 1; i >= 0; i--) {
                                    if (nv.graphs[i] && (nv.graphs[i].id === scope.chart.id)) {
                                        nv.graphs.splice(i, 1);
                                    }
                                }
                            }
                            if (nv.tooltip && nv.tooltip.cleanup) {
                                nv.tooltip.cleanup();
                            }
                            if (scope.chart && scope.chart.resizeHandler) scope.chart.resizeHandler.clear();
                            scope.chart = null;
                        },
                        // Get full directive scope
                        getScope: function(){ return scope; },
                        // Get directive element
                        getElement: function(){ return element; }
                    };
                    // Configure the chart model with the passed options
                    function configure(chart, options, chartType){
                        if (chart && options){
                            angular.forEach(chart, function(value, key){
                                if (key[0] === '_');
                                else if (key === 'dispatch') {
                                    if (options[key] === undefined || options[key] === null) {
                                        if (scope._config.extended) options[key] = {};
                                    }
                                    configureEvents(value, options[key]);
                                }
                                else if (key === 'tooltip') {
                                    if (options[key] === undefined || options[key] === null) {
                                        if (scope._config.extended) options[key] = {};
                                    }
                                    configure(chart[key], options[key], chartType);
                                }
                                else if (key === 'contentGenerator') {
                                    if (options[key]) chart[key](options[key]);
                                }
                                else if ([
                                        'axis',
                                        'clearHighlights',
                                        'defined',
                                        'highlightPoint',
                                        'nvPointerEventsClass',
                                        'options',
                                        'rangeBand',
                                        'rangeBands',
                                        'scatter',
                                        'open',
                                        'close',
                                        'node'
                                    ].indexOf(key) === -1) {
                                    if (options[key] === undefined || options[key] === null){
                                        if (scope._config.extended) options[key] = value();
                                    }
                                    else chart[key](options[key]);
                                }
                            });
                        }
                    }
                    // Subscribe to the chart events (contained in 'dispatch')
                    // and pass eventHandler functions in the 'options' parameter
                    function configureEvents(dispatch, options){
                        if (dispatch && options){
                            angular.forEach(dispatch, function(value, key){
                                if (options[key] === undefined || options[key] === null){
                                    if (scope._config.extended) options[key] = value.on;
                                }
                                else dispatch.on(key + '._', options[key]);
                            });
                        }
                    }
                    // Configure 'title', 'subtitle', 'caption'.
                    // nvd3 has no sufficient models for it yet.
                    function configureWrapper(name){
                        var _ = nvd3Utils.deepExtend(defaultWrapper(name), scope.options[name] || {});
                        if (scope._config.extended) scope.options[name] = _;
                        var wrapElement = angular.element('<div></div>').html(_['html'] || '')
                            .addClass(name).addClass(_.className)
                            .removeAttr('style')
                            .css(_.css);
                        if (!_['html']) wrapElement.text(_.text);
                        if (_.enable) {
                            if (name === 'title') element.prepend(wrapElement);
                            else if (name === 'subtitle') angular.element(element[0].querySelector('.title')).after(wrapElement);
                            else if (name === 'caption') element.append(wrapElement);
                        }
                    }
                    // Add some styles to the whole directive element
                    function configureStyles(){
                        var _ = nvd3Utils.deepExtend(defaultStyles(), scope.options['styles'] || {});
                        if (scope._config.extended) scope.options['styles'] = _;
                        angular.forEach(_.classes, function(value, key){
                            value ? element.addClass(key) : element.removeClass(key);
                        });
                        element.removeAttr('style').css(_.css);
                    }
                    // Default values for 'title', 'subtitle', 'caption'
                    function defaultWrapper(_){
                        switch (_){
                            case 'title': return {
                                enable: false,
                                text: 'Write Your Title',
                                className: 'h4',
                                css: {
                                    width: scope.options.chart.width + 'px',
                                    textAlign: 'center'
                                }
                            };
                            case 'subtitle': return {
                                enable: false,
                                text: 'Write Your Subtitle',
                                css: {
                                    width: scope.options.chart.width + 'px',
                                    textAlign: 'center'
                                }
                            };
                            case 'caption': return {
                                enable: false,
                                text: 'Figure 1. Write Your Caption text.',
                                css: {
                                    width: scope.options.chart.width + 'px',
                                    textAlign: 'center'
                                }
                            };
                        }
                    }
                    // Default values for styles
                    function defaultStyles(){
                        return {
                            classes: {
                                'with-3d-shadow': true,
                                'with-transitions': true,
                                'gallery': false
                            },
                            css: {}
                        };
                    }
                    /* Event Handling */
                    // Watching on options changing
                    if (scope._config.deepWatchOptions) {
                        scope.$watch('options', nvd3Utils.debounce(function(newOptions){
                            if (!scope._config.disabled) scope.api.refresh();
                        }, scope._config.debounce, scope._config.debounceImmediate), true);
                    }
                    // Watching on data changing
                    function dataWatchFn(newData, oldData) {
                        if (newData !== oldData){
                            if (!scope._config.disabled) {
                                scope._config.refreshDataOnly ? scope.api.update() : scope.api.refresh(); // if wanted to refresh data only, use update method, otherwise use full refresh.
                            }
                        }
                    }
                    if (scope._config.deepWatchData) {
                        if (scope._config.deepWatchDataDepth === 1) {
                            scope.$watchCollection('data', dataWatchFn);
                        } else {
                            scope.$watch('data', dataWatchFn, scope._config.deepWatchDataDepth === 2);
                        }
                    }
                    // Watching on config changing
                    scope.$watch('config', function(newConfig, oldConfig){
                        if (newConfig !== oldConfig){
                            scope._config = angular.extend(defaultConfig, newConfig);
                            scope.api.refresh();
                        }
                    }, true);
                    // Refresh chart first time if deepWatchOptions and deepWatchData are false
                    if (!scope._config.deepWatchOptions && !scope._config.deepWatchData) {
                        scope.api.refresh();
                    }
                    //subscribe on global events
                    angular.forEach(scope.events, function(eventHandler, event){
                        scope.$on(event, function(e, args){
                            return eventHandler(e, scope, args);
                        });
                    });
                    // remove completely when directive is destroyed
                    element.on('$destroy', function () {
                        scope.api.clearElement();
                    });
                    // trigger onReady callback if directive is ready
                    scope.$watch('isReady', function(isReady){
                        if (isReady) {
                            if (scope.onReady && typeof scope.onReady() === 'function') scope.onReady()(scope, element);
                        }
                    });
                }
            };
        }])
        .factory('nvd3Utils', function(){
            return {
                debounce: function(func, wait, immediate) {
                    var timeout;
                    return function() {
                        var context = this, args = arguments;
                        var later = function() {
                            timeout = null;
                            if (!immediate) func.apply(context, args);
                        };
                        var callNow = immediate && !timeout;
                        clearTimeout(timeout);
                        timeout = setTimeout(later, wait);
                        if (callNow) func.apply(context, args);
                    };
                },
                deepExtend: function(dst){
                    var me = this;
                    angular.forEach(arguments, function(obj) {
                        if (obj !== dst) {
                            angular.forEach(obj, function(value, key) {
                                if (dst[key] && dst[key].constructor && dst[key].constructor === Object) {
                                    me.deepExtend(dst[key], value);
                                } else {
                                    dst[key] = value;
                                }
                            });
                        }
                    });
                    return dst;
                },
                zoom: function(scope, options) {
                    var zoom = options.chart.zoom;
                    // check if zoom enabled
                    var enabled = (typeof zoom.enabled === 'undefined' || zoom.enabled === null) ? true : zoom.enabled;
                    if (!enabled) return;
                    var xScale = scope.chart.xAxis.scale()
                        , yScale = scope.chart.yAxis.scale()
                        , xDomain = scope.chart.xDomain || xScale.domain
                        , yDomain = scope.chart.yDomain || yScale.domain
                        , x_boundary = xScale.domain().slice()
                        , y_boundary = yScale.domain().slice()
                    // initialize zoom options
                        , scale = zoom.scale || 1
                        , translate = zoom.translate || [0, 0]
                        , scaleExtent = zoom.scaleExtent || [1, 10]
                        , useFixedDomain = zoom.useFixedDomain || false
                        , useNiceScale = zoom.useNiceScale || false
                        , horizontalOff = zoom.horizontalOff || false
                        , verticalOff = zoom.verticalOff || false
                        , unzoomEventType = zoom.unzoomEventType || 'dblclick.zoom'
                    // auxiliary functions
                        , fixDomain
                        , d3zoom
                        , zoomed
                        , unzoomed
                        , zoomend
                        ;
                    // ensure nice axis
                    if (useNiceScale) {
                        xScale.nice();
                        yScale.nice();
                    }
                    // fix domain
                    fixDomain = function (domain, boundary) {
                        domain[0] = Math.min(Math.max(domain[0], boundary[0]), boundary[1] - boundary[1] / scaleExtent[1]);
                        domain[1] = Math.max(boundary[0] + boundary[1] / scaleExtent[1], Math.min(domain[1], boundary[1]));
                        return domain;
                    };
                    // zoom event handler
                    zoomed = function () {
                        if (zoom.zoomed !== undefined) {
                            var domains = zoom.zoomed(xScale.domain(), yScale.domain());
                            if (!horizontalOff) xDomain([domains.x1, domains.x2]);
                            if (!verticalOff) yDomain([domains.y1, domains.y2]);
                        } else {
                            if (!horizontalOff) xDomain(useFixedDomain ? fixDomain(xScale.domain(), x_boundary) : xScale.domain());
                            if (!verticalOff) yDomain(useFixedDomain ? fixDomain(yScale.domain(), y_boundary) : yScale.domain());
                        }
                        if (scope.chart) scope.chart.update();
                    };
                    // unzoomed event handler
                    unzoomed = function () {
                        if (zoom.unzoomed !== undefined) {
                            var domains = zoom.unzoomed(xScale.domain(), yScale.domain());
                            if (!horizontalOff) xDomain([domains.x1, domains.x2]);
                            if (!verticalOff) yDomain([domains.y1, domains.y2]);
                        } else {
                            if (!horizontalOff) xDomain(x_boundary);
                            if (!verticalOff) yDomain(y_boundary);
                        }
                        d3zoom.scale(scale).translate(translate);
                        if (scope.chart) scope.chart.update();
                    };
                    // zoomend event handler
                    zoomend = function () {
                        if (zoom.zoomend !== undefined) {
                            zoom.zoomend();
                        }
                    };
                    // create d3 zoom handler
                    d3zoom = d3.behavior.zoom()
                        .x(xScale)
                        .y(yScale)
                        .scaleExtent(scaleExtent)
                        .on('zoom', zoomed)
                        .on('zoomend', zoomend);
                    if (scope.svg) {
                        scope.svg.call(d3zoom);
                        d3zoom.scale(scale).translate(translate).event(scope.svg);
                        if (unzoomEventType !== 'none') scope.svg.on(unzoomEventType, unzoomed);
                    }
                    if (scope.chart)
                        scope.chart.zoomRender = function(){
                            // reset zoom scale and translate
                            d3zoom.scale(scale).translate(translate);
                            // update scale
                            xScale = scope.chart.xAxis.scale();
                            yScale = scope.chart.yAxis.scale();
                            xDomain = scope.chart.xDomain || xScale.domain;
                            yDomain = scope.chart.yDomain || yScale.domain;
                            x_boundary = xScale.domain().slice();
                            y_boundary = yScale.domain().slice();
                            // update zoom scale
                            d3zoom.x(xScale).y(yScale);
                            scope.svg.call(d3zoom);
                            if (unzoomEventType !== 'none') scope.svg.on(unzoomEventType, unzoomed);
                        };
                }
            };
        });
})(window);
src/main/webapp/bower_components/angular-nvd3/dist/angular-nvd3.min.js
New file
@@ -0,0 +1 @@
!function(window){"use strict";var nv=window.nv;"undefined"!=typeof exports&&(nv=require("nvd3")),angular.module("nvd3",[]).directive("nvd3",["nvd3Utils",function(nvd3Utils){return{restrict:"AE",scope:{data:"=",options:"=",api:"=?",events:"=?",config:"=?",onReady:"&?"},link:function(scope,element,attrs){function configure(chart,options,chartType){chart&&options&&angular.forEach(chart,function(value,key){"_"===key[0]||("dispatch"===key?(void 0!==options[key]&&null!==options[key]||scope._config.extended&&(options[key]={}),configureEvents(value,options[key])):"tooltip"===key?(void 0!==options[key]&&null!==options[key]||scope._config.extended&&(options[key]={}),configure(chart[key],options[key],chartType)):"contentGenerator"===key?options[key]&&chart[key](options[key]):-1===["axis","clearHighlights","defined","highlightPoint","nvPointerEventsClass","options","rangeBand","rangeBands","scatter","open","close","node"].indexOf(key)&&(void 0===options[key]||null===options[key]?scope._config.extended&&(options[key]=value()):chart[key](options[key])))})}function configureEvents(dispatch,options){dispatch&&options&&angular.forEach(dispatch,function(value,key){void 0===options[key]||null===options[key]?scope._config.extended&&(options[key]=value.on):dispatch.on(key+"._",options[key])})}function configureWrapper(name){var _=nvd3Utils.deepExtend(defaultWrapper(name),scope.options[name]||{});scope._config.extended&&(scope.options[name]=_);var wrapElement=angular.element("<div></div>").html(_.html||"").addClass(name).addClass(_.className).removeAttr("style").css(_.css);_.html||wrapElement.text(_.text),_.enable&&("title"===name?element.prepend(wrapElement):"subtitle"===name?angular.element(element[0].querySelector(".title")).after(wrapElement):"caption"===name&&element.append(wrapElement))}function configureStyles(){var _=nvd3Utils.deepExtend(defaultStyles(),scope.options.styles||{});scope._config.extended&&(scope.options.styles=_),angular.forEach(_.classes,function(value,key){value?element.addClass(key):element.removeClass(key)}),element.removeAttr("style").css(_.css)}function defaultWrapper(_){switch(_){case"title":return{enable:!1,text:"Write Your Title",className:"h4",css:{width:scope.options.chart.width+"px",textAlign:"center"}};case"subtitle":return{enable:!1,text:"Write Your Subtitle",css:{width:scope.options.chart.width+"px",textAlign:"center"}};case"caption":return{enable:!1,text:"Figure 1. Write Your Caption text.",css:{width:scope.options.chart.width+"px",textAlign:"center"}}}}function defaultStyles(){return{classes:{"with-3d-shadow":!0,"with-transitions":!0,gallery:!1},css:{}}}function dataWatchFn(newData,oldData){newData!==oldData&&(scope._config.disabled||(scope._config.refreshDataOnly?scope.api.update():scope.api.refresh()))}var defaultConfig={extended:!1,visible:!0,disabled:!1,refreshDataOnly:!0,deepWatchOptions:!0,deepWatchData:!0,deepWatchDataDepth:2,debounce:10,debounceImmediate:!0};scope.isReady=!1,scope._config=angular.extend(defaultConfig,scope.config),scope.api={refresh:function(){scope.api.updateWithOptions(),scope.isReady=!0},refreshWithTimeout:function(t){setTimeout(function(){scope.api.refresh()},t)},update:function(){scope.chart&&scope.svg?"sunburstChart"===scope.options.chart.type?scope.svg.datum(angular.copy(scope.data)).call(scope.chart):scope.svg.datum(scope.data).call(scope.chart):scope.api.refresh()},updateWithTimeout:function(t){setTimeout(function(){scope.api.update()},t)},updateWithOptions:function(options){if(arguments.length){if(scope.options=options,scope._config.deepWatchOptions&&!scope._config.disabled)return}else options=scope.options;scope.api.clearElement(),angular.isDefined(options)!==!1&&scope._config.visible&&(scope.chart=nv.models[options.chart.type](),scope.chart.id=Math.random().toString(36).substr(2,15),angular.forEach(scope.chart,function(value,key){"_"===key[0]||["clearHighlights","highlightPoint","id","options","resizeHandler","state","open","close","tooltipContent"].indexOf(key)>=0||("dispatch"===key?(void 0!==options.chart[key]&&null!==options.chart[key]||scope._config.extended&&(options.chart[key]={}),configureEvents(scope.chart[key],options.chart[key])):["bars","bars1","bars2","boxplot","bullet","controls","discretebar","distX","distY","focus","interactiveLayer","legend","lines","lines1","lines2","multibar","pie","scatter","scatters1","scatters2","sparkline","stack1","stack2","sunburst","tooltip","x2Axis","xAxis","y1Axis","y2Axis","y3Axis","y4Axis","yAxis","yAxis1","yAxis2"].indexOf(key)>=0||"stacked"===key&&"stackedAreaChart"===options.chart.type?(void 0!==options.chart[key]&&null!==options.chart[key]||scope._config.extended&&(options.chart[key]={}),configure(scope.chart[key],options.chart[key],options.chart.type)):"focusHeight"===key&&"lineChart"===options.chart.type||"focusHeight"===key&&"lineWithFocusChart"===options.chart.type||("xTickFormat"!==key&&"yTickFormat"!==key||"lineWithFocusChart"!==options.chart.type)&&("tooltips"===key&&"boxPlotChart"===options.chart.type||("tooltipXContent"!==key&&"tooltipYContent"!==key||"scatterChart"!==options.chart.type)&&("x"!==key&&"y"!==key||"forceDirectedGraph"!==options.chart.type)&&(void 0===options.chart[key]||null===options.chart[key]?scope._config.extended&&("barColor"===key?options.chart[key]=value()():options.chart[key]=value()):scope.chart[key](options.chart[key]))))}),scope.api.updateWithData(),(options.title||scope._config.extended)&&configureWrapper("title"),(options.subtitle||scope._config.extended)&&configureWrapper("subtitle"),(options.caption||scope._config.extended)&&configureWrapper("caption"),(options.styles||scope._config.extended)&&configureStyles(),nv.addGraph(function(){return scope.chart?(scope.chart.resizeHandler&&scope.chart.resizeHandler.clear(),scope.chart.resizeHandler=nv.utils.windowResize(function(){scope.chart&&scope.chart.update&&scope.chart.update()}),void 0!==options.chart.zoom&&["scatterChart","lineChart","candlestickBarChart","cumulativeLineChart","historicalBarChart","ohlcBarChart","stackedAreaChart"].indexOf(options.chart.type)>-1&&nvd3Utils.zoom(scope,options),scope.chart):void 0},options.chart.callback))},updateWithData:function(data){if(arguments.length){if(scope.data=data,scope._config.deepWatchData&&!scope._config.disabled)return}else data="sunburstChart"===scope.options.chart.type?angular.copy(scope.data):scope.data;if(data){d3.select(element[0]).select("svg").remove();var h,w;scope.svg=d3.select(element[0]).insert("svg",".caption"),(h=scope.options.chart.height)&&(isNaN(+h)||(h+="px"),scope.svg.attr("height",h).style({height:h})),(w=scope.options.chart.width)?(isNaN(+w)||(w+="px"),scope.svg.attr("width",w).style({width:w})):scope.svg.attr("width","100%").style({width:"100%"}),scope.svg.datum(data).call(scope.chart),scope.chart&&scope.chart.zoomRender&&scope.chart.zoomRender()}},clearElement:function(){if(element.find(".title").remove(),element.find(".subtitle").remove(),element.find(".caption").remove(),element.empty(),scope.chart&&scope.chart.tooltip&&scope.chart.tooltip.id&&d3.select("#"+scope.chart.tooltip.id()).remove(),nv.graphs&&scope.chart)for(var i=nv.graphs.length-1;i>=0;i--)nv.graphs[i]&&nv.graphs[i].id===scope.chart.id&&nv.graphs.splice(i,1);nv.tooltip&&nv.tooltip.cleanup&&nv.tooltip.cleanup(),scope.chart&&scope.chart.resizeHandler&&scope.chart.resizeHandler.clear(),scope.chart=null},getScope:function(){return scope},getElement:function(){return element}},scope._config.deepWatchOptions&&scope.$watch("options",nvd3Utils.debounce(function(newOptions){scope._config.disabled||scope.api.refresh()},scope._config.debounce,scope._config.debounceImmediate),!0),scope._config.deepWatchData&&(1===scope._config.deepWatchDataDepth?scope.$watchCollection("data",dataWatchFn):scope.$watch("data",dataWatchFn,2===scope._config.deepWatchDataDepth)),scope.$watch("config",function(newConfig,oldConfig){newConfig!==oldConfig&&(scope._config=angular.extend(defaultConfig,newConfig),scope.api.refresh())},!0),scope._config.deepWatchOptions||scope._config.deepWatchData||scope.api.refresh(),angular.forEach(scope.events,function(eventHandler,event){scope.$on(event,function(e,args){return eventHandler(e,scope,args)})}),element.on("$destroy",function(){scope.api.clearElement()}),scope.$watch("isReady",function(isReady){isReady&&scope.onReady&&"function"==typeof scope.onReady()&&scope.onReady()(scope,element)})}}}]).factory("nvd3Utils",function(){return{debounce:function(func,wait,immediate){var timeout;return function(){var context=this,args=arguments,later=function(){timeout=null,immediate||func.apply(context,args)},callNow=immediate&&!timeout;clearTimeout(timeout),timeout=setTimeout(later,wait),callNow&&func.apply(context,args)}},deepExtend:function(dst){var me=this;return angular.forEach(arguments,function(obj){obj!==dst&&angular.forEach(obj,function(value,key){dst[key]&&dst[key].constructor&&dst[key].constructor===Object?me.deepExtend(dst[key],value):dst[key]=value})}),dst},zoom:function(scope,options){var zoom=options.chart.zoom,enabled="undefined"==typeof zoom.enabled||null===zoom.enabled?!0:zoom.enabled;if(enabled){var fixDomain,d3zoom,zoomed,unzoomed,zoomend,xScale=scope.chart.xAxis.scale(),yScale=scope.chart.yAxis.scale(),xDomain=scope.chart.xDomain||xScale.domain,yDomain=scope.chart.yDomain||yScale.domain,x_boundary=xScale.domain().slice(),y_boundary=yScale.domain().slice(),scale=zoom.scale||1,translate=zoom.translate||[0,0],scaleExtent=zoom.scaleExtent||[1,10],useFixedDomain=zoom.useFixedDomain||!1,useNiceScale=zoom.useNiceScale||!1,horizontalOff=zoom.horizontalOff||!1,verticalOff=zoom.verticalOff||!1,unzoomEventType=zoom.unzoomEventType||"dblclick.zoom";useNiceScale&&(xScale.nice(),yScale.nice()),fixDomain=function(domain,boundary){return domain[0]=Math.min(Math.max(domain[0],boundary[0]),boundary[1]-boundary[1]/scaleExtent[1]),domain[1]=Math.max(boundary[0]+boundary[1]/scaleExtent[1],Math.min(domain[1],boundary[1])),domain},zoomed=function(){if(void 0!==zoom.zoomed){var domains=zoom.zoomed(xScale.domain(),yScale.domain());horizontalOff||xDomain([domains.x1,domains.x2]),verticalOff||yDomain([domains.y1,domains.y2])}else horizontalOff||xDomain(useFixedDomain?fixDomain(xScale.domain(),x_boundary):xScale.domain()),verticalOff||yDomain(useFixedDomain?fixDomain(yScale.domain(),y_boundary):yScale.domain());scope.chart&&scope.chart.update()},unzoomed=function(){if(void 0!==zoom.unzoomed){var domains=zoom.unzoomed(xScale.domain(),yScale.domain());horizontalOff||xDomain([domains.x1,domains.x2]),verticalOff||yDomain([domains.y1,domains.y2])}else horizontalOff||xDomain(x_boundary),verticalOff||yDomain(y_boundary);d3zoom.scale(scale).translate(translate),scope.chart&&scope.chart.update()},zoomend=function(){void 0!==zoom.zoomend&&zoom.zoomend()},d3zoom=d3.behavior.zoom().x(xScale).y(yScale).scaleExtent(scaleExtent).on("zoom",zoomed).on("zoomend",zoomend),scope.svg&&(scope.svg.call(d3zoom),d3zoom.scale(scale).translate(translate).event(scope.svg),"none"!==unzoomEventType&&scope.svg.on(unzoomEventType,unzoomed)),scope.chart&&(scope.chart.zoomRender=function(){d3zoom.scale(scale).translate(translate),xScale=scope.chart.xAxis.scale(),yScale=scope.chart.yAxis.scale(),xDomain=scope.chart.xDomain||xScale.domain,yDomain=scope.chart.yDomain||yScale.domain,x_boundary=xScale.domain().slice(),y_boundary=yScale.domain().slice(),d3zoom.x(xScale).y(yScale),scope.svg.call(d3zoom),"none"!==unzoomEventType&&scope.svg.on(unzoomEventType,unzoomed)})}}}})}(window);
src/main/webapp/bower_components/angular-nvd3/index.js
New file
@@ -0,0 +1,2 @@
require('./dist/angular-nvd3');
module.exports = 'nvd3';
src/main/webapp/bower_components/angular-nvd3/package.json
New file
@@ -0,0 +1,51 @@
{
  "title": "AngularJS-nvD3",
  "name": "angular-nvd3",
  "version": "1.0.9",
  "description": "An AngularJS directive for NVD3.js reusable charting library",
  "homepage": "http://krispo.github.io/angular-nvd3",
  "repository": {
    "type": "git",
    "url": "https://github.com/krispo/angular-nvd3.git"
  },
  "main": "index.js",
  "keywords": [
    "angular",
    "nvd3",
    "d3",
    "directive",
    "visualization",
    "charts",
    "svg"
  ],
  "bugs": {
    "url": "https://github.com/krispo/angular-nvd3/issues"
  },
  "license": "MIT",
  "author": {
    "name": "Konstantin Skipor"
  },
  "dependencies": {
    "angular": "^1.x",
    "d3": "^3.3",
    "nvd3": "^1.7.1"
  },
  "devDependencies": {
    "angular-mocks": "^1.x",
    "grunt": "^0.4.4",
    "grunt-cli": "^0.1.13",
    "grunt-contrib-concat": "^0.4.0",
    "grunt-contrib-jshint": "^0.10.0",
    "grunt-contrib-uglify": "^0.4.0",
    "grunt-contrib-watch": "^0.6.1",
    "jasmine-core": "^2.4.1",
    "karma": "~0.12",
    "karma-chrome-launcher": "^0.2.2",
    "karma-coverage": "^0.5.5",
    "karma-jasmine": "^0.3.8"
  },
  "scripts": {
    "test": "karma start test/karma.conf.js",
    "test-single-run": "karma start test/karma.conf.js --single-run"
  }
}
src/main/webapp/bower_components/angular-resource/.bower.json
New file
@@ -0,0 +1,20 @@
{
  "name": "angular-resource",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular-resource.js",
  "ignore": [],
  "dependencies": {
    "angular": "1.5.11"
  },
  "homepage": "https://github.com/angular/bower-angular-resource",
  "_release": "1.5.11",
  "_resolution": {
    "type": "version",
    "tag": "v1.5.11",
    "commit": "9c261ab3b6afb7d6ac5b09d0d2191ed7d6c77f80"
  },
  "_source": "https://github.com/angular/bower-angular-resource.git",
  "_target": "1.5.11",
  "_originalSource": "angular-resource"
}
src/main/webapp/bower_components/angular-resource/LICENSE.md
New file
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Angular
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
src/main/webapp/bower_components/angular-resource/README.md
New file
@@ -0,0 +1,68 @@
# packaged angular-resource
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngResource).
Please file issues and pull requests against that repo.
## Install
You can install this package either with `npm` or with `bower`.
### npm
```shell
npm install angular-resource
```
Then add `ngResource` as a dependency for your app:
```javascript
angular.module('myApp', [require('angular-resource')]);
```
### bower
```shell
bower install angular-resource
```
Add a `<script>` to your `index.html`:
```html
<script src="/bower_components/angular-resource/angular-resource.js"></script>
```
Then add `ngResource` as a dependency for your app:
```javascript
angular.module('myApp', ['ngResource']);
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/api/ngResource).
## License
The MIT License
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
src/main/webapp/bower_components/angular-resource/angular-resource.js
New file
@@ -0,0 +1,866 @@
/**
 * @license AngularJS v1.5.11
 * (c) 2010-2017 Google, Inc. http://angularjs.org
 * License: MIT
 */
(function(window, angular) {'use strict';
var $resourceMinErr = angular.$$minErr('$resource');
// Helper functions and regex to lookup a dotted path on an object
// stopping at undefined/null.  The path must be composed of ASCII
// identifiers (just like $parse)
var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;
function isValidDottedPath(path) {
  return (path != null && path !== '' && path !== 'hasOwnProperty' &&
      MEMBER_NAME_REGEX.test('.' + path));
}
function lookupDottedPath(obj, path) {
  if (!isValidDottedPath(path)) {
    throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path);
  }
  var keys = path.split('.');
  for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) {
    var key = keys[i];
    obj = (obj !== null) ? obj[key] : undefined;
  }
  return obj;
}
/**
 * Create a shallow copy of an object and clear other fields from the destination
 */
function shallowClearAndCopy(src, dst) {
  dst = dst || {};
  angular.forEach(dst, function(value, key) {
    delete dst[key];
  });
  for (var key in src) {
    if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) {
      dst[key] = src[key];
    }
  }
  return dst;
}
/**
 * @ngdoc module
 * @name ngResource
 * @description
 *
 * # ngResource
 *
 * The `ngResource` module provides interaction support with RESTful services
 * via the $resource service.
 *
 *
 * <div doc-module-components="ngResource"></div>
 *
 * See {@link ngResource.$resourceProvider} and {@link ngResource.$resource} for usage.
 */
/**
 * @ngdoc provider
 * @name $resourceProvider
 *
 * @description
 *
 * Use `$resourceProvider` to change the default behavior of the {@link ngResource.$resource}
 * service.
 *
 * ## Dependencies
 * Requires the {@link ngResource } module to be installed.
 *
 */
/**
 * @ngdoc service
 * @name $resource
 * @requires $http
 * @requires ng.$log
 * @requires $q
 * @requires ng.$timeout
 *
 * @description
 * A factory which creates a resource object that lets you interact with
 * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources.
 *
 * The returned resource object has action methods which provide high-level behaviors without
 * the need to interact with the low level {@link ng.$http $http} service.
 *
 * Requires the {@link ngResource `ngResource`} module to be installed.
 *
 * By default, trailing slashes will be stripped from the calculated URLs,
 * which can pose problems with server backends that do not expect that
 * behavior.  This can be disabled by configuring the `$resourceProvider` like
 * this:
 *
 * ```js
     app.config(['$resourceProvider', function($resourceProvider) {
       // Don't strip trailing slashes from calculated URLs
       $resourceProvider.defaults.stripTrailingSlashes = false;
     }]);
 * ```
 *
 * @param {string} url A parameterized URL template with parameters prefixed by `:` as in
 *   `/user/:username`. If you are using a URL with a port number (e.g.
 *   `http://example.com:8080/api`), it will be respected.
 *
 *   If you are using a url with a suffix, just add the suffix, like this:
 *   `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')`
 *   or even `$resource('http://example.com/resource/:resource_id.:format')`
 *   If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be
 *   collapsed down to a single `.`.  If you need this sequence to appear and not collapse then you
 *   can escape it with `/\.`.
 *
 * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in
 *   `actions` methods. If a parameter value is a function, it will be called every time
 *   a param value needs to be obtained for a request (unless the param was overridden). The function
 *   will be passed the current data value as an argument.
 *
 *   Each key value in the parameter object is first bound to url template if present and then any
 *   excess keys are appended to the url search query after the `?`.
 *
 *   Given a template `/path/:verb` and parameter `{verb:'greet', salutation:'Hello'}` results in
 *   URL `/path/greet?salutation=Hello`.
 *
 *   If the parameter value is prefixed with `@`, then the value for that parameter will be
 *   extracted from the corresponding property on the `data` object (provided when calling a
 *   "non-GET" action method).
 *   For example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of
 *   `someParam` will be `data.someProp`.
 *   Note that the parameter will be ignored, when calling a "GET" action method (i.e. an action
 *   method that does not accept a request body)
 *
 * @param {Object.<Object>=} actions Hash with declaration of custom actions that should extend
 *   the default set of resource actions. The declaration should be created in the format of {@link
 *   ng.$http#usage $http.config}:
 *
 *       {action1: {method:?, params:?, isArray:?, headers:?, ...},
 *        action2: {method:?, params:?, isArray:?, headers:?, ...},
 *        ...}
 *
 *   Where:
 *
 *   - **`action`** – {string} – The name of action. This name becomes the name of the method on
 *     your resource object.
 *   - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`,
 *     `DELETE`, `JSONP`, etc).
 *   - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of
 *     the parameter value is a function, it will be called every time when a param value needs to
 *     be obtained for a request (unless the param was overridden). The function will be passed the
 *     current data value as an argument.
 *   - **`url`** – {string} – action specific `url` override. The url templating is supported just
 *     like for the resource-level urls.
 *   - **`isArray`** – {boolean=} – If true then the returned object for this action is an array,
 *     see `returns` section.
 *   - **`transformRequest`** –
 *     `{function(data, headersGetter)|Array.<function(data, headersGetter)>}` –
 *     transform function or an array of such functions. The transform function takes the http
 *     request body and headers and returns its transformed (typically serialized) version.
 *     By default, transformRequest will contain one function that checks if the request data is
 *     an object and serializes it using `angular.toJson`. To prevent this behavior, set
 *     `transformRequest` to an empty array: `transformRequest: []`
 *   - **`transformResponse`** –
 *     `{function(data, headersGetter, status)|Array.<function(data, headersGetter, status)>}` –
 *     transform function or an array of such functions. The transform function takes the http
 *     response body, headers and status and returns its transformed (typically deserialized)
 *     version.
 *     By default, transformResponse will contain one function that checks if the response looks
 *     like a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior,
 *     set `transformResponse` to an empty array: `transformResponse: []`
 *   - **`cache`** – `{boolean|Cache}` – If true, a default $http cache will be used to cache the
 *     GET request, otherwise if a cache instance built with
 *     {@link ng.$cacheFactory $cacheFactory}, this cache will be used for
 *     caching.
 *   - **`timeout`** – `{number}` – timeout in milliseconds.<br />
 *     **Note:** In contrast to {@link ng.$http#usage $http.config}, {@link ng.$q promises} are
 *     **not** supported in $resource, because the same value would be used for multiple requests.
 *     If you are looking for a way to cancel requests, you should use the `cancellable` option.
 *   - **`cancellable`** – `{boolean}` – if set to true, the request made by a "non-instance" call
 *     will be cancelled (if not already completed) by calling `$cancelRequest()` on the call's
 *     return value. Calling `$cancelRequest()` for a non-cancellable or an already
 *     completed/cancelled request will have no effect.<br />
 *   - **`withCredentials`** - `{boolean}` - whether to set the `withCredentials` flag on the
 *     XHR object. See
 *     [requests with credentials](https://developer.mozilla.org/en/http_access_control#section_5)
 *     for more information.
 *   - **`responseType`** - `{string}` - see
 *     [requestType](https://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest#responseType).
 *   - **`interceptor`** - `{Object=}` - The interceptor object has two optional methods -
 *     `response` and `responseError`. Both `response` and `responseError` interceptors get called
 *     with `http response` object. See {@link ng.$http $http interceptors}.
 *
 * @param {Object} options Hash with custom settings that should extend the
 *   default `$resourceProvider` behavior.  The supported options are:
 *
 *   - **`stripTrailingSlashes`** – {boolean} – If true then the trailing
 *   slashes from any calculated URL will be stripped. (Defaults to true.)
 *   - **`cancellable`** – {boolean} – If true, the request made by a "non-instance" call will be
 *   cancelled (if not already completed) by calling `$cancelRequest()` on the call's return value.
 *   This can be overwritten per action. (Defaults to false.)
 *
 * @returns {Object} A resource "class" object with methods for the default set of resource actions
 *   optionally extended with custom `actions`. The default set contains these actions:
 *   ```js
 *   { 'get':    {method:'GET'},
 *     'save':   {method:'POST'},
 *     'query':  {method:'GET', isArray:true},
 *     'remove': {method:'DELETE'},
 *     'delete': {method:'DELETE'} };
 *   ```
 *
 *   Calling these methods invoke an {@link ng.$http} with the specified http method,
 *   destination and parameters. When the data is returned from the server then the object is an
 *   instance of the resource class. The actions `save`, `remove` and `delete` are available on it
 *   as  methods with the `$` prefix. This allows you to easily perform CRUD operations (create,
 *   read, update, delete) on server-side data like this:
 *   ```js
 *   var User = $resource('/user/:userId', {userId:'@id'});
 *   var user = User.get({userId:123}, function() {
 *     user.abc = true;
 *     user.$save();
 *   });
 *   ```
 *
 *   It is important to realize that invoking a $resource object method immediately returns an
 *   empty reference (object or array depending on `isArray`). Once the data is returned from the
 *   server the existing reference is populated with the actual data. This is a useful trick since
 *   usually the resource is assigned to a model which is then rendered by the view. Having an empty
 *   object results in no rendering, once the data arrives from the server then the object is
 *   populated with the data and the view automatically re-renders itself showing the new data. This
 *   means that in most cases one never has to write a callback function for the action methods.
 *
 *   The action methods on the class object or instance object can be invoked with the following
 *   parameters:
 *
 *   - HTTP GET "class" actions: `Resource.action([parameters], [success], [error])`
 *   - non-GET "class" actions: `Resource.action([parameters], postData, [success], [error])`
 *   - non-GET instance actions:  `instance.$action([parameters], [success], [error])`
 *
 *
 *   Success callback is called with (value (Object|Array), responseHeaders (Function),
 *   status (number), statusText (string)) arguments, where the value is the populated resource
 *   instance or collection object. The error callback is called with (httpResponse) argument.
 *
 *   Class actions return empty instance (with additional properties below).
 *   Instance actions return promise of the action.
 *
 *   The Resource instances and collections have these additional properties:
 *
 *   - `$promise`: the {@link ng.$q promise} of the original server interaction that created this
 *     instance or collection.
 *
 *     On success, the promise is resolved with the same resource instance or collection object,
 *     updated with data from server. This makes it easy to use in
 *     {@link ngRoute.$routeProvider resolve section of $routeProvider.when()} to defer view
 *     rendering until the resource(s) are loaded.
 *
 *     On failure, the promise is rejected with the {@link ng.$http http response} object, without
 *     the `resource` property.
 *
 *     If an interceptor object was provided, the promise will instead be resolved with the value
 *     returned by the interceptor.
 *
 *   - `$resolved`: `true` after first server interaction is completed (either with success or
 *      rejection), `false` before that. Knowing if the Resource has been resolved is useful in
 *      data-binding.
 *
 *   The Resource instances and collections have these additional methods:
 *
 *   - `$cancelRequest`: If there is a cancellable, pending request related to the instance or
 *      collection, calling this method will abort the request.
 *
 *   The Resource instances have these additional methods:
 *
 *   - `toJSON`: It returns a simple object without any of the extra properties added as part of
 *     the Resource API. This object can be serialized through {@link angular.toJson} safely
 *     without attaching Angular-specific fields. Notice that `JSON.stringify` (and
 *     `angular.toJson`) automatically use this method when serializing a Resource instance
 *     (see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON()_behavior)).
 *
 * @example
 *
 * # Credit card resource
 *
 * ```js
     // Define CreditCard class
     var CreditCard = $resource('/user/:userId/card/:cardId',
      {userId:123, cardId:'@id'}, {
       charge: {method:'POST', params:{charge:true}}
      });
     // We can retrieve a collection from the server
     var cards = CreditCard.query(function() {
       // GET: /user/123/card
       // server returns: [ {id:456, number:'1234', name:'Smith'} ];
       var card = cards[0];
       // each item is an instance of CreditCard
       expect(card instanceof CreditCard).toEqual(true);
       card.name = "J. Smith";
       // non GET methods are mapped onto the instances
       card.$save();
       // POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
       // server returns: {id:456, number:'1234', name: 'J. Smith'};
       // our custom method is mapped as well.
       card.$charge({amount:9.99});
       // POST: /user/123/card/456?amount=9.99&charge=true {id:456, number:'1234', name:'J. Smith'}
     });
     // we can create an instance as well
     var newCard = new CreditCard({number:'0123'});
     newCard.name = "Mike Smith";
     newCard.$save();
     // POST: /user/123/card {number:'0123', name:'Mike Smith'}
     // server returns: {id:789, number:'0123', name: 'Mike Smith'};
     expect(newCard.id).toEqual(789);
 * ```
 *
 * The object returned from this function execution is a resource "class" which has "static" method
 * for each action in the definition.
 *
 * Calling these methods invoke `$http` on the `url` template with the given `method`, `params` and
 * `headers`.
 *
 * @example
 *
 * # User resource
 *
 * When the data is returned from the server then the object is an instance of the resource type and
 * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD
 * operations (create, read, update, delete) on server-side data.
   ```js
     var User = $resource('/user/:userId', {userId:'@id'});
     User.get({userId:123}, function(user) {
       user.abc = true;
       user.$save();
     });
   ```
 *
 * It's worth noting that the success callback for `get`, `query` and other methods gets passed
 * in the response that came from the server as well as $http header getter function, so one
 * could rewrite the above example and get access to http headers as:
 *
   ```js
     var User = $resource('/user/:userId', {userId:'@id'});
     User.get({userId:123}, function(user, getResponseHeaders){
       user.abc = true;
       user.$save(function(user, putResponseHeaders) {
         //user => saved user object
         //putResponseHeaders => $http header getter
       });
     });
   ```
 *
 * You can also access the raw `$http` promise via the `$promise` property on the object returned
 *
   ```
     var User = $resource('/user/:userId', {userId:'@id'});
     User.get({userId:123})
         .$promise.then(function(user) {
           $scope.user = user;
         });
   ```
 *
 * @example
 *
 * # Creating a custom 'PUT' request
 *
 * In this example we create a custom method on our resource to make a PUT request
 * ```js
 *    var app = angular.module('app', ['ngResource', 'ngRoute']);
 *
 *    // Some APIs expect a PUT request in the format URL/object/ID
 *    // Here we are creating an 'update' method
 *    app.factory('Notes', ['$resource', function($resource) {
 *    return $resource('/notes/:id', null,
 *        {
 *            'update': { method:'PUT' }
 *        });
 *    }]);
 *
 *    // In our controller we get the ID from the URL using ngRoute and $routeParams
 *    // We pass in $routeParams and our Notes factory along with $scope
 *    app.controller('NotesCtrl', ['$scope', '$routeParams', 'Notes',
                                      function($scope, $routeParams, Notes) {
 *    // First get a note object from the factory
 *    var note = Notes.get({ id:$routeParams.id });
 *    $id = note.id;
 *
 *    // Now call update passing in the ID first then the object you are updating
 *    Notes.update({ id:$id }, note);
 *
 *    // This will PUT /notes/ID with the note object in the request payload
 *    }]);
 * ```
 *
 * @example
 *
 * # Cancelling requests
 *
 * If an action's configuration specifies that it is cancellable, you can cancel the request related
 * to an instance or collection (as long as it is a result of a "non-instance" call):
 *
   ```js
     // ...defining the `Hotel` resource...
     var Hotel = $resource('/api/hotel/:id', {id: '@id'}, {
       // Let's make the `query()` method cancellable
       query: {method: 'get', isArray: true, cancellable: true}
     });
     // ...somewhere in the PlanVacationController...
     ...
     this.onDestinationChanged = function onDestinationChanged(destination) {
       // We don't care about any pending request for hotels
       // in a different destination any more
       this.availableHotels.$cancelRequest();
       // Let's query for hotels in '<destination>'
       // (calls: /api/hotel?location=<destination>)
       this.availableHotels = Hotel.query({location: destination});
     };
   ```
 *
 */
angular.module('ngResource', ['ng']).
  provider('$resource', function ResourceProvider() {
    var PROTOCOL_AND_DOMAIN_REGEX = /^https?:\/\/[^/]*/;
    var provider = this;
    /**
     * @ngdoc property
     * @name $resourceProvider#defaults
     * @description
     * Object containing default options used when creating `$resource` instances.
     *
     * The default values satisfy a wide range of usecases, but you may choose to overwrite any of
     * them to further customize your instances. The available properties are:
     *
     * - **stripTrailingSlashes** – `{boolean}` – If true, then the trailing slashes from any
     *   calculated URL will be stripped.<br />
     *   (Defaults to true.)
     * - **cancellable** – `{boolean}` – If true, the request made by a "non-instance" call will be
     *   cancelled (if not already completed) by calling `$cancelRequest()` on the call's return
     *   value. For more details, see {@link ngResource.$resource}. This can be overwritten per
     *   resource class or action.<br />
     *   (Defaults to false.)
     * - **actions** - `{Object.<Object>}` - A hash with default actions declarations. Actions are
     *   high-level methods corresponding to RESTful actions/methods on resources. An action may
     *   specify what HTTP method to use, what URL to hit, if the return value will be a single
     *   object or a collection (array) of objects etc. For more details, see
     *   {@link ngResource.$resource}. The actions can also be enhanced or overwritten per resource
     *   class.<br />
     *   The default actions are:
     *   ```js
     *   {
     *     get: {method: 'GET'},
     *     save: {method: 'POST'},
     *     query: {method: 'GET', isArray: true},
     *     remove: {method: 'DELETE'},
     *     delete: {method: 'DELETE'}
     *   }
     *   ```
     *
     * #### Example
     *
     * For example, you can specify a new `update` action that uses the `PUT` HTTP verb:
     *
     * ```js
     *   angular.
     *     module('myApp').
     *     config(['$resourceProvider', function ($resourceProvider) {
     *       $resourceProvider.defaults.actions.update = {
     *         method: 'PUT'
     *       };
     *     });
     * ```
     *
     * Or you can even overwrite the whole `actions` list and specify your own:
     *
     * ```js
     *   angular.
     *     module('myApp').
     *     config(['$resourceProvider', function ($resourceProvider) {
     *       $resourceProvider.defaults.actions = {
     *         create: {method: 'POST'},
     *         get:    {method: 'GET'},
     *         getAll: {method: 'GET', isArray:true},
     *         update: {method: 'PUT'},
     *         delete: {method: 'DELETE'}
     *       };
     *     });
     * ```
     *
     */
    this.defaults = {
      // Strip slashes by default
      stripTrailingSlashes: true,
      // Make non-instance requests cancellable (via `$cancelRequest()`)
      cancellable: false,
      // Default actions configuration
      actions: {
        'get': {method: 'GET'},
        'save': {method: 'POST'},
        'query': {method: 'GET', isArray: true},
        'remove': {method: 'DELETE'},
        'delete': {method: 'DELETE'}
      }
    };
    this.$get = ['$http', '$log', '$q', '$timeout', function($http, $log, $q, $timeout) {
      var noop = angular.noop,
        forEach = angular.forEach,
        extend = angular.extend,
        copy = angular.copy,
        isArray = angular.isArray,
        isDefined = angular.isDefined,
        isFunction = angular.isFunction,
        isNumber = angular.isNumber;
      /**
       * We need our custom method because encodeURIComponent is too aggressive and doesn't follow
       * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set
       * (pchar) allowed in path segments:
       *    segment       = *pchar
       *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
       *    pct-encoded   = "%" HEXDIG HEXDIG
       *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
       *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
       *                     / "*" / "+" / "," / ";" / "="
       */
      function encodeUriSegment(val) {
        return encodeUriQuery(val, true).
          replace(/%26/gi, '&').
          replace(/%3D/gi, '=').
          replace(/%2B/gi, '+');
      }
      /**
       * This method is intended for encoding *key* or *value* parts of query component. We need a
       * custom method because encodeURIComponent is too aggressive and encodes stuff that doesn't
       * have to be encoded per http://tools.ietf.org/html/rfc3986:
       *    query       = *( pchar / "/" / "?" )
       *    pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
       *    unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
       *    pct-encoded   = "%" HEXDIG HEXDIG
       *    sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
       *                     / "*" / "+" / "," / ";" / "="
       */
      function encodeUriQuery(val, pctEncodeSpaces) {
        return encodeURIComponent(val).
          replace(/%40/gi, '@').
          replace(/%3A/gi, ':').
          replace(/%24/g, '$').
          replace(/%2C/gi, ',').
          replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
      }
      function Route(template, defaults) {
        this.template = template;
        this.defaults = extend({}, provider.defaults, defaults);
        this.urlParams = {};
      }
      Route.prototype = {
        setUrlParams: function(config, params, actionUrl) {
          var self = this,
            url = actionUrl || self.template,
            val,
            encodedVal,
            protocolAndDomain = '';
          var urlParams = self.urlParams = {};
          forEach(url.split(/\W/), function(param) {
            if (param === 'hasOwnProperty') {
              throw $resourceMinErr('badname', 'hasOwnProperty is not a valid parameter name.');
            }
            if (!(new RegExp('^\\d+$').test(param)) && param &&
              (new RegExp('(^|[^\\\\]):' + param + '(\\W|$)').test(url))) {
              urlParams[param] = {
                isQueryParamValue: (new RegExp('\\?.*=:' + param + '(?:\\W|$)')).test(url)
              };
            }
          });
          url = url.replace(/\\:/g, ':');
          url = url.replace(PROTOCOL_AND_DOMAIN_REGEX, function(match) {
            protocolAndDomain = match;
            return '';
          });
          params = params || {};
          forEach(self.urlParams, function(paramInfo, urlParam) {
            val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam];
            if (isDefined(val) && val !== null) {
              if (paramInfo.isQueryParamValue) {
                encodedVal = encodeUriQuery(val, true);
              } else {
                encodedVal = encodeUriSegment(val);
              }
              url = url.replace(new RegExp(':' + urlParam + '(\\W|$)', 'g'), function(match, p1) {
                return encodedVal + p1;
              });
            } else {
              url = url.replace(new RegExp('(/?):' + urlParam + '(\\W|$)', 'g'), function(match,
                  leadingSlashes, tail) {
                if (tail.charAt(0) === '/') {
                  return tail;
                } else {
                  return leadingSlashes + tail;
                }
              });
            }
          });
          // strip trailing slashes and set the url (unless this behavior is specifically disabled)
          if (self.defaults.stripTrailingSlashes) {
            url = url.replace(/\/+$/, '') || '/';
          }
          // then replace collapse `/.` if found in the last URL path segment before the query
          // E.g. `http://url.com/id./format?q=x` becomes `http://url.com/id.format?q=x`
          url = url.replace(/\/\.(?=\w+($|\?))/, '.');
          // replace escaped `/\.` with `/.`
          config.url = protocolAndDomain + url.replace(/\/\\\./, '/.');
          // set params - delegate param encoding to $http
          forEach(params, function(value, key) {
            if (!self.urlParams[key]) {
              config.params = config.params || {};
              config.params[key] = value;
            }
          });
        }
      };
      function resourceFactory(url, paramDefaults, actions, options) {
        var route = new Route(url, options);
        actions = extend({}, provider.defaults.actions, actions);
        function extractParams(data, actionParams) {
          var ids = {};
          actionParams = extend({}, paramDefaults, actionParams);
          forEach(actionParams, function(value, key) {
            if (isFunction(value)) { value = value(data); }
            ids[key] = value && value.charAt && value.charAt(0) === '@' ?
              lookupDottedPath(data, value.substr(1)) : value;
          });
          return ids;
        }
        function defaultResponseInterceptor(response) {
          return response.resource;
        }
        function Resource(value) {
          shallowClearAndCopy(value || {}, this);
        }
        Resource.prototype.toJSON = function() {
          var data = extend({}, this);
          delete data.$promise;
          delete data.$resolved;
          delete data.$cancelRequest;
          return data;
        };
        forEach(actions, function(action, name) {
          var hasBody = /^(POST|PUT|PATCH)$/i.test(action.method);
          var numericTimeout = action.timeout;
          var cancellable = isDefined(action.cancellable) ?
              action.cancellable : route.defaults.cancellable;
          if (numericTimeout && !isNumber(numericTimeout)) {
            $log.debug('ngResource:\n' +
                       '  Only numeric values are allowed as `timeout`.\n' +
                       '  Promises are not supported in $resource, because the same value would ' +
                       'be used for multiple requests. If you are looking for a way to cancel ' +
                       'requests, you should use the `cancellable` option.');
            delete action.timeout;
            numericTimeout = null;
          }
          Resource[name] = function(a1, a2, a3, a4) {
            var params = {}, data, success, error;
            switch (arguments.length) {
              case 4:
                error = a4;
                success = a3;
                // falls through
              case 3:
              case 2:
                if (isFunction(a2)) {
                  if (isFunction(a1)) {
                    success = a1;
                    error = a2;
                    break;
                  }
                  success = a2;
                  error = a3;
                  // falls through
                } else {
                  params = a1;
                  data = a2;
                  success = a3;
                  break;
                }
                // falls through
              case 1:
                if (isFunction(a1)) success = a1;
                else if (hasBody) data = a1;
                else params = a1;
                break;
              case 0: break;
              default:
                throw $resourceMinErr('badargs',
                  'Expected up to 4 arguments [params, data, success, error], got {0} arguments',
                  arguments.length);
            }
            var isInstanceCall = this instanceof Resource;
            var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data));
            var httpConfig = {};
            var responseInterceptor = action.interceptor && action.interceptor.response ||
              defaultResponseInterceptor;
            var responseErrorInterceptor = action.interceptor && action.interceptor.responseError ||
              undefined;
            var timeoutDeferred;
            var numericTimeoutPromise;
            forEach(action, function(value, key) {
              switch (key) {
                default:
                  httpConfig[key] = copy(value);
                  break;
                case 'params':
                case 'isArray':
                case 'interceptor':
                case 'cancellable':
                  break;
              }
            });
            if (!isInstanceCall && cancellable) {
              timeoutDeferred = $q.defer();
              httpConfig.timeout = timeoutDeferred.promise;
              if (numericTimeout) {
                numericTimeoutPromise = $timeout(timeoutDeferred.resolve, numericTimeout);
              }
            }
            if (hasBody) httpConfig.data = data;
            route.setUrlParams(httpConfig,
              extend({}, extractParams(data, action.params || {}), params),
              action.url);
            var promise = $http(httpConfig).then(function(response) {
              var data = response.data;
              if (data) {
                // Need to convert action.isArray to boolean in case it is undefined
                if (isArray(data) !== (!!action.isArray)) {
                  throw $resourceMinErr('badcfg',
                      'Error in resource configuration for action `{0}`. Expected response to ' +
                      'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object',
                    isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url);
                }
                if (action.isArray) {
                  value.length = 0;
                  forEach(data, function(item) {
                    if (typeof item === 'object') {
                      value.push(new Resource(item));
                    } else {
                      // Valid JSON values may be string literals, and these should not be converted
                      // into objects. These items will not have access to the Resource prototype
                      // methods, but unfortunately there
                      value.push(item);
                    }
                  });
                } else {
                  var promise = value.$promise;     // Save the promise
                  shallowClearAndCopy(data, value);
                  value.$promise = promise;         // Restore the promise
                }
              }
              response.resource = value;
              return response;
            }, function(response) {
              (error || noop)(response);
              return $q.reject(response);
            });
            promise['finally'](function() {
              value.$resolved = true;
              if (!isInstanceCall && cancellable) {
                value.$cancelRequest = noop;
                $timeout.cancel(numericTimeoutPromise);
                timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null;
              }
            });
            promise = promise.then(
              function(response) {
                var value = responseInterceptor(response);
                (success || noop)(value, response.headers, response.status, response.statusText);
                return value;
              },
              responseErrorInterceptor);
            if (!isInstanceCall) {
              // we are creating instance / collection
              // - set the initial promise
              // - return the instance / collection
              value.$promise = promise;
              value.$resolved = false;
              if (cancellable) value.$cancelRequest = timeoutDeferred.resolve;
              return value;
            }
            // instance call
            return promise;
          };
          Resource.prototype['$' + name] = function(params, success, error) {
            if (isFunction(params)) {
              error = success; success = params; params = {};
            }
            var result = Resource[name].call(this, params, this, success, error);
            return result.$promise || result;
          };
        });
        Resource.bind = function(additionalParamDefaults) {
          var extendedParamDefaults = extend({}, paramDefaults, additionalParamDefaults);
          return resourceFactory(url, extendedParamDefaults, actions, options);
        };
        return Resource;
      }
      return resourceFactory;
    }];
  });
})(window, window.angular);
src/main/webapp/bower_components/angular-resource/angular-resource.min.js
New file
@@ -0,0 +1,15 @@
/*
 AngularJS v1.5.11
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(R,b){'use strict';function G(s,g){g=g||{};b.forEach(g,function(b,k){delete g[k]});for(var k in s)!s.hasOwnProperty(k)||"$"===k.charAt(0)&&"$"===k.charAt(1)||(g[k]=s[k]);return g}var y=b.$$minErr("$resource"),N=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;b.module("ngResource",["ng"]).provider("$resource",function(){var s=/^https?:\/\/[^/]*/,g=this;this.defaults={stripTrailingSlashes:!0,cancellable:!1,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET",isArray:!0},remove:{method:"DELETE"},
"delete":{method:"DELETE"}}};this.$get=["$http","$log","$q","$timeout",function(k,M,H,I){function z(b,e){return encodeURIComponent(b).replace(/%40/gi,"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,e?"%20":"+")}function B(b,e){this.template=b;this.defaults=r({},g.defaults,e);this.urlParams={}}function J(A,e,p,m){function c(a,d){var c={};d=r({},e,d);u(d,function(d,e){w(d)&&(d=d(a));var f;if(d&&d.charAt&&"@"===d.charAt(0)){f=a;var l=d.substr(1);if(null==l||""===l||
"hasOwnProperty"===l||!N.test("."+l))throw y("badmember",l);for(var l=l.split("."),h=0,g=l.length;h<g&&b.isDefined(f);h++){var q=l[h];f=null!==f?f[q]:void 0}}else f=d;c[e]=f});return c}function O(a){return a.resource}function h(a){G(a||{},this)}var s=new B(A,m);p=r({},g.defaults.actions,p);h.prototype.toJSON=function(){var a=r({},this);delete a.$promise;delete a.$resolved;delete a.$cancelRequest;return a};u(p,function(a,d){var b=/^(POST|PUT|PATCH)$/i.test(a.method),e=a.timeout,g=K(a.cancellable)?
a.cancellable:s.defaults.cancellable;e&&!P(e)&&(M.debug("ngResource:\n  Only numeric values are allowed as `timeout`.\n  Promises are not supported in $resource, because the same value would be used for multiple requests. If you are looking for a way to cancel requests, you should use the `cancellable` option."),delete a.timeout,e=null);h[d]=function(f,l,m,A){var q={},p,v,C;switch(arguments.length){case 4:C=A,v=m;case 3:case 2:if(w(l)){if(w(f)){v=f;C=l;break}v=l;C=m}else{q=f;p=l;v=m;break}case 1:w(f)?
v=f:b?p=f:q=f;break;case 0:break;default:throw y("badargs",arguments.length);}var D=this instanceof h,n=D?p:a.isArray?[]:new h(p),t={},z=a.interceptor&&a.interceptor.response||O,B=a.interceptor&&a.interceptor.responseError||void 0,x,E;u(a,function(a,d){switch(d){default:t[d]=Q(a);case "params":case "isArray":case "interceptor":case "cancellable":}});!D&&g&&(x=H.defer(),t.timeout=x.promise,e&&(E=I(x.resolve,e)));b&&(t.data=p);s.setUrlParams(t,r({},c(p,a.params||{}),q),a.url);q=k(t).then(function(f){var c=
f.data;if(c){if(L(c)!==!!a.isArray)throw y("badcfg",d,a.isArray?"array":"object",L(c)?"array":"object",t.method,t.url);if(a.isArray)n.length=0,u(c,function(a){"object"===typeof a?n.push(new h(a)):n.push(a)});else{var b=n.$promise;G(c,n);n.$promise=b}}f.resource=n;return f},function(a){(C||F)(a);return H.reject(a)});q["finally"](function(){n.$resolved=!0;!D&&g&&(n.$cancelRequest=F,I.cancel(E),x=E=t.timeout=null)});q=q.then(function(a){var d=z(a);(v||F)(d,a.headers,a.status,a.statusText);return d},
B);return D?q:(n.$promise=q,n.$resolved=!1,g&&(n.$cancelRequest=x.resolve),n)};h.prototype["$"+d]=function(a,c,b){w(a)&&(b=c,c=a,a={});a=h[d].call(this,a,this,c,b);return a.$promise||a}});h.bind=function(a){a=r({},e,a);return J(A,a,p,m)};return h}var F=b.noop,u=b.forEach,r=b.extend,Q=b.copy,L=b.isArray,K=b.isDefined,w=b.isFunction,P=b.isNumber;B.prototype={setUrlParams:function(b,e,g){var m=this,c=g||m.template,k,h,r="",a=m.urlParams={};u(c.split(/\W/),function(d){if("hasOwnProperty"===d)throw y("badname");
!/^\d+$/.test(d)&&d&&(new RegExp("(^|[^\\\\]):"+d+"(\\W|$)")).test(c)&&(a[d]={isQueryParamValue:(new RegExp("\\?.*=:"+d+"(?:\\W|$)")).test(c)})});c=c.replace(/\\:/g,":");c=c.replace(s,function(a){r=a;return""});e=e||{};u(m.urlParams,function(a,b){k=e.hasOwnProperty(b)?e[b]:m.defaults[b];K(k)&&null!==k?(h=a.isQueryParamValue?z(k,!0):z(k,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+"),c=c.replace(new RegExp(":"+b+"(\\W|$)","g"),function(a,b){return h+b})):c=c.replace(new RegExp("(/?):"+
b+"(\\W|$)","g"),function(a,b,d){return"/"===d.charAt(0)?d:b+d})});m.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");b.url=r+c.replace(/\/\\\./,"/.");u(e,function(a,c){m.urlParams[c]||(b.params=b.params||{},b.params[c]=a)})}};return J}]})})(window,window.angular);
//# sourceMappingURL=angular-resource.min.js.map
src/main/webapp/bower_components/angular-resource/angular-resource.min.js.map
New file
@@ -0,0 +1,8 @@
{
"version":3,
"file":"angular-resource.min.js",
"lineCount":14,
"mappings":"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",
"sources":["angular-resource.js"],
"names":["window","angular","shallowClearAndCopy","src","dst","forEach","value","key","hasOwnProperty","charAt","$resourceMinErr","$$minErr","MEMBER_NAME_REGEX","module","provider","ResourceProvider","PROTOCOL_AND_DOMAIN_REGEX","defaults","stripTrailingSlashes","cancellable","actions","method","isArray","$get","$http","$log","$q","$timeout","encodeUriQuery","val","pctEncodeSpaces","encodeURIComponent","replace","Route","template","extend","urlParams","resourceFactory","url","paramDefaults","options","extractParams","data","actionParams","ids","isFunction","path","test","keys","split","i","ii","length","isDefined","obj","undefined","defaultResponseInterceptor","response","resource","Resource","route","prototype","toJSON","Resource.prototype.toJSON","$promise","$resolved","$cancelRequest","action","name","hasBody","numericTimeout","timeout","isNumber","debug","a1","a2","a3","a4","params","success","error","arguments","isInstanceCall","httpConfig","responseInterceptor","interceptor","responseErrorInterceptor","responseError","timeoutDeferred","numericTimeoutPromise","copy","defer","promise","resolve","setUrlParams","then","item","push","noop","reject","cancel","headers","status","statusText","result","call","bind","Resource.bind","additionalParamDefaults","extendedParamDefaults","config","actionUrl","self","encodedVal","protocolAndDomain","param","RegExp","isQueryParamValue","match","paramInfo","urlParam","p1","leadingSlashes","tail"]
}
src/main/webapp/bower_components/angular-resource/bower.json
New file
@@ -0,0 +1,10 @@
{
  "name": "angular-resource",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular-resource.js",
  "ignore": [],
  "dependencies": {
    "angular": "1.5.11"
  }
}
src/main/webapp/bower_components/angular-resource/index.js
New file
@@ -0,0 +1,2 @@
require('./angular-resource');
module.exports = 'ngResource';
src/main/webapp/bower_components/angular-resource/package.json
New file
@@ -0,0 +1,33 @@
{
  "name": "angular-resource",
  "version": "1.5.11",
  "description": "AngularJS module for interacting with RESTful server-side data sources",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/angular/angular.js.git"
  },
  "keywords": [
    "angular",
    "framework",
    "browser",
    "rest",
    "client-side"
  ],
  "author": "Angular Core Team <angular-core+npm@google.com>",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/angular/angular.js/issues"
  },
  "homepage": "http://angularjs.org",
  "jspm": {
    "shim": {
      "angular-resource": {
        "deps": ["angular"]
      }
    }
  }
}
src/main/webapp/bower_components/angular-sanitize/.bower.json
New file
@@ -0,0 +1,20 @@
{
  "name": "angular-sanitize",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular-sanitize.js",
  "ignore": [],
  "dependencies": {
    "angular": "1.5.11"
  },
  "homepage": "https://github.com/angular/bower-angular-sanitize",
  "_release": "1.5.11",
  "_resolution": {
    "type": "version",
    "tag": "v1.5.11",
    "commit": "84df06c4ec4f1eef7f9d0b849b9fdf5433c2669c"
  },
  "_source": "https://github.com/angular/bower-angular-sanitize.git",
  "_target": "1.5.11",
  "_originalSource": "angular-sanitize"
}
src/main/webapp/bower_components/angular-sanitize/LICENSE.md
New file
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Angular
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
src/main/webapp/bower_components/angular-sanitize/README.md
New file
@@ -0,0 +1,68 @@
# packaged angular-sanitize
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngSanitize).
Please file issues and pull requests against that repo.
## Install
You can install this package either with `npm` or with `bower`.
### npm
```shell
npm install angular-sanitize
```
Then add `ngSanitize` as a dependency for your app:
```javascript
angular.module('myApp', [require('angular-sanitize')]);
```
### bower
```shell
bower install angular-sanitize
```
Add a `<script>` to your `index.html`:
```html
<script src="/bower_components/angular-sanitize/angular-sanitize.js"></script>
```
Then add `ngSanitize` as a dependency for your app:
```javascript
angular.module('myApp', ['ngSanitize']);
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/api/ngSanitize).
## License
The MIT License
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
src/main/webapp/bower_components/angular-sanitize/angular-sanitize.js
New file
@@ -0,0 +1,739 @@
/**
 * @license AngularJS v1.5.11
 * (c) 2010-2017 Google, Inc. http://angularjs.org
 * License: MIT
 */
(function(window, angular) {'use strict';
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 *     Any commits to this file should be reviewed with security in mind.  *
 *   Changes to this file can potentially create security vulnerabilities. *
 *          An approval from 2 Core members with history of modifying      *
 *                         this file is required.                          *
 *                                                                         *
 *  Does the change somehow allow for arbitrary javascript to be executed? *
 *    Or allows for someone to change the prototype of built-in objects?   *
 *     Or gives undesired access to variables likes document or window?    *
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
var $sanitizeMinErr = angular.$$minErr('$sanitize');
var bind;
var extend;
var forEach;
var isDefined;
var lowercase;
var noop;
var htmlParser;
var htmlSanitizeWriter;
/**
 * @ngdoc module
 * @name ngSanitize
 * @description
 *
 * # ngSanitize
 *
 * The `ngSanitize` module provides functionality to sanitize HTML.
 *
 *
 * <div doc-module-components="ngSanitize"></div>
 *
 * See {@link ngSanitize.$sanitize `$sanitize`} for usage.
 */
/**
 * @ngdoc service
 * @name $sanitize
 * @kind function
 *
 * @description
 *   Sanitizes an html string by stripping all potentially dangerous tokens.
 *
 *   The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are
 *   then serialized back to properly escaped html string. This means that no unsafe input can make
 *   it into the returned string.
 *
 *   The whitelist for URL sanitization of attribute values is configured using the functions
 *   `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link ng.$compileProvider
 *   `$compileProvider`}.
 *
 *   The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.
 *
 * @param {string} html HTML input.
 * @returns {string} Sanitized HTML.
 *
 * @example
   <example module="sanitizeExample" deps="angular-sanitize.js" name="sanitize-service">
   <file name="index.html">
     <script>
         angular.module('sanitizeExample', ['ngSanitize'])
           .controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {
             $scope.snippet =
               '<p style="color:blue">an html\n' +
               '<em onmouseover="this.textContent=\'PWN3D!\'">click here</em>\n' +
               'snippet</p>';
             $scope.deliberatelyTrustDangerousSnippet = function() {
               return $sce.trustAsHtml($scope.snippet);
             };
           }]);
     </script>
     <div ng-controller="ExampleController">
        Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
       <table>
         <tr>
           <td>Directive</td>
           <td>How</td>
           <td>Source</td>
           <td>Rendered</td>
         </tr>
         <tr id="bind-html-with-sanitize">
           <td>ng-bind-html</td>
           <td>Automatically uses $sanitize</td>
           <td><pre>&lt;div ng-bind-html="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
           <td><div ng-bind-html="snippet"></div></td>
         </tr>
         <tr id="bind-html-with-trust">
           <td>ng-bind-html</td>
           <td>Bypass $sanitize by explicitly trusting the dangerous value</td>
           <td>
           <pre>&lt;div ng-bind-html="deliberatelyTrustDangerousSnippet()"&gt;
&lt;/div&gt;</pre>
           </td>
           <td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td>
         </tr>
         <tr id="bind-default">
           <td>ng-bind</td>
           <td>Automatically escapes</td>
           <td><pre>&lt;div ng-bind="snippet"&gt;<br/>&lt;/div&gt;</pre></td>
           <td><div ng-bind="snippet"></div></td>
         </tr>
       </table>
       </div>
   </file>
   <file name="protractor.js" type="protractor">
     it('should sanitize the html snippet by default', function() {
       expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).
         toBe('<p>an html\n<em>click here</em>\nsnippet</p>');
     });
     it('should inline raw snippet if bound to a trusted value', function() {
       expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).
         toBe("<p style=\"color:blue\">an html\n" +
              "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" +
              "snippet</p>");
     });
     it('should escape snippet without any filter', function() {
       expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).
         toBe("&lt;p style=\"color:blue\"&gt;an html\n" +
              "&lt;em onmouseover=\"this.textContent='PWN3D!'\"&gt;click here&lt;/em&gt;\n" +
              "snippet&lt;/p&gt;");
     });
     it('should update', function() {
       element(by.model('snippet')).clear();
       element(by.model('snippet')).sendKeys('new <b onclick="alert(1)">text</b>');
       expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).
         toBe('new <b>text</b>');
       expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(
         'new <b onclick="alert(1)">text</b>');
       expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(
         "new &lt;b onclick=\"alert(1)\"&gt;text&lt;/b&gt;");
     });
   </file>
   </example>
 */
/**
 * @ngdoc provider
 * @name $sanitizeProvider
 * @this
 *
 * @description
 * Creates and configures {@link $sanitize} instance.
 */
function $SanitizeProvider() {
  var svgEnabled = false;
  this.$get = ['$$sanitizeUri', function($$sanitizeUri) {
    if (svgEnabled) {
      extend(validElements, svgElements);
    }
    return function(html) {
      var buf = [];
      htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {
        return !/^unsafe:/.test($$sanitizeUri(uri, isImage));
      }));
      return buf.join('');
    };
  }];
  /**
   * @ngdoc method
   * @name $sanitizeProvider#enableSvg
   * @kind function
   *
   * @description
   * Enables a subset of svg to be supported by the sanitizer.
   *
   * <div class="alert alert-warning">
   *   <p>By enabling this setting without taking other precautions, you might expose your
   *   application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned
   *   outside of the containing element and be rendered over other elements on the page (e.g. a login
   *   link). Such behavior can then result in phishing incidents.</p>
   *
   *   <p>To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg
   *   tags within the sanitized content:</p>
   *
   *   <br>
   *
   *   <pre><code>
   *   .rootOfTheIncludedContent svg {
   *     overflow: hidden !important;
   *   }
   *   </code></pre>
   * </div>
   *
   * @param {boolean=} flag Enable or disable SVG support in the sanitizer.
   * @returns {boolean|ng.$sanitizeProvider} Returns the currently configured value if called
   *    without an argument or self for chaining otherwise.
   */
  this.enableSvg = function(enableSvg) {
    if (isDefined(enableSvg)) {
      svgEnabled = enableSvg;
      return this;
    } else {
      return svgEnabled;
    }
  };
  //////////////////////////////////////////////////////////////////////////////////////////////////
  // Private stuff
  //////////////////////////////////////////////////////////////////////////////////////////////////
  bind = angular.bind;
  extend = angular.extend;
  forEach = angular.forEach;
  isDefined = angular.isDefined;
  lowercase = angular.lowercase;
  noop = angular.noop;
  htmlParser = htmlParserImpl;
  htmlSanitizeWriter = htmlSanitizeWriterImpl;
  // Regular Expressions for parsing tags and attributes
  var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g,
    // Match everything outside of normal chars and " (quote character)
    NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;
  // Good source of info about elements and attributes
  // http://dev.w3.org/html5/spec/Overview.html#semantics
  // http://simon.html5.org/html-elements
  // Safe Void Elements - HTML5
  // http://dev.w3.org/html5/spec/Overview.html#void-elements
  var voidElements = toMap('area,br,col,hr,img,wbr');
  // Elements that you can, intentionally, leave open (and which close themselves)
  // http://dev.w3.org/html5/spec/Overview.html#optional-tags
  var optionalEndTagBlockElements = toMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),
      optionalEndTagInlineElements = toMap('rp,rt'),
      optionalEndTagElements = extend({},
                                              optionalEndTagInlineElements,
                                              optionalEndTagBlockElements);
  // Safe Block Elements - HTML5
  var blockElements = extend({}, optionalEndTagBlockElements, toMap('address,article,' +
          'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +
          'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));
  // Inline Elements - HTML5
  var inlineElements = extend({}, optionalEndTagInlineElements, toMap('a,abbr,acronym,b,' +
          'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +
          'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));
  // SVG Elements
  // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements
  // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.
  // They can potentially allow for arbitrary javascript to be executed. See #11290
  var svgElements = toMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +
          'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +
          'radialGradient,rect,stop,svg,switch,text,title,tspan');
  // Blocked Elements (will be stripped)
  var blockedElements = toMap('script,style');
  var validElements = extend({},
                                     voidElements,
                                     blockElements,
                                     inlineElements,
                                     optionalEndTagElements);
  //Attributes that have href and hence need to be sanitized
  var uriAttrs = toMap('background,cite,href,longdesc,src,xlink:href');
  var htmlAttrs = toMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +
      'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +
      'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +
      'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +
      'valign,value,vspace,width');
  // SVG attributes (without "id" and "name" attributes)
  // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes
  var svgAttrs = toMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +
      'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +
      'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +
      'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +
      'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +
      'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +
      'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +
      'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +
      'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +
      'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +
      'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +
      'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +
      'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +
      'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +
      'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);
  var validAttrs = extend({},
                                  uriAttrs,
                                  svgAttrs,
                                  htmlAttrs);
  function toMap(str, lowercaseKeys) {
    var obj = {}, items = str.split(','), i;
    for (i = 0; i < items.length; i++) {
      obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;
    }
    return obj;
  }
  var inertBodyElement;
  (function(window) {
    var doc;
    if (window.document && window.document.implementation) {
      doc = window.document.implementation.createHTMLDocument('inert');
    } else {
      throw $sanitizeMinErr('noinert', 'Can\'t create an inert html document');
    }
    var docElement = doc.documentElement || doc.getDocumentElement();
    var bodyElements = docElement.getElementsByTagName('body');
    // usually there should be only one body element in the document, but IE doesn't have any, so we need to create one
    if (bodyElements.length === 1) {
      inertBodyElement = bodyElements[0];
    } else {
      var html = doc.createElement('html');
      inertBodyElement = doc.createElement('body');
      html.appendChild(inertBodyElement);
      doc.appendChild(html);
    }
  })(window);
  /**
   * @example
   * htmlParser(htmlString, {
   *     start: function(tag, attrs) {},
   *     end: function(tag) {},
   *     chars: function(text) {},
   *     comment: function(text) {}
   * });
   *
   * @param {string} html string
   * @param {object} handler
   */
  function htmlParserImpl(html, handler) {
    if (html === null || html === undefined) {
      html = '';
    } else if (typeof html !== 'string') {
      html = '' + html;
    }
    inertBodyElement.innerHTML = html;
    //mXSS protection
    var mXSSAttempts = 5;
    do {
      if (mXSSAttempts === 0) {
        throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');
      }
      mXSSAttempts--;
      // strip custom-namespaced attributes on IE<=11
      if (window.document.documentMode) {
        stripCustomNsAttrs(inertBodyElement);
      }
      html = inertBodyElement.innerHTML; //trigger mXSS
      inertBodyElement.innerHTML = html;
    } while (html !== inertBodyElement.innerHTML);
    var node = inertBodyElement.firstChild;
    while (node) {
      switch (node.nodeType) {
        case 1: // ELEMENT_NODE
          handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));
          break;
        case 3: // TEXT NODE
          handler.chars(node.textContent);
          break;
      }
      var nextNode;
      if (!(nextNode = node.firstChild)) {
      if (node.nodeType === 1) {
          handler.end(node.nodeName.toLowerCase());
        }
        nextNode = node.nextSibling;
        if (!nextNode) {
          while (nextNode == null) {
            node = node.parentNode;
            if (node === inertBodyElement) break;
            nextNode = node.nextSibling;
          if (node.nodeType === 1) {
              handler.end(node.nodeName.toLowerCase());
            }
          }
        }
      }
      node = nextNode;
    }
    while ((node = inertBodyElement.firstChild)) {
      inertBodyElement.removeChild(node);
    }
  }
  function attrToMap(attrs) {
    var map = {};
    for (var i = 0, ii = attrs.length; i < ii; i++) {
      var attr = attrs[i];
      map[attr.name] = attr.value;
    }
    return map;
  }
  /**
   * Escapes all potentially dangerous characters, so that the
   * resulting string can be safely inserted into attribute or
   * element text.
   * @param value
   * @returns {string} escaped text
   */
  function encodeEntities(value) {
    return value.
      replace(/&/g, '&amp;').
      replace(SURROGATE_PAIR_REGEXP, function(value) {
        var hi = value.charCodeAt(0);
        var low = value.charCodeAt(1);
        return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';
      }).
      replace(NON_ALPHANUMERIC_REGEXP, function(value) {
        return '&#' + value.charCodeAt(0) + ';';
      }).
      replace(/</g, '&lt;').
      replace(/>/g, '&gt;');
  }
  /**
   * create an HTML/XML writer which writes to buffer
   * @param {Array} buf use buf.join('') to get out sanitized html string
   * @returns {object} in the form of {
   *     start: function(tag, attrs) {},
   *     end: function(tag) {},
   *     chars: function(text) {},
   *     comment: function(text) {}
   * }
   */
  function htmlSanitizeWriterImpl(buf, uriValidator) {
    var ignoreCurrentElement = false;
    var out = bind(buf, buf.push);
    return {
      start: function(tag, attrs) {
        tag = lowercase(tag);
        if (!ignoreCurrentElement && blockedElements[tag]) {
          ignoreCurrentElement = tag;
        }
        if (!ignoreCurrentElement && validElements[tag] === true) {
          out('<');
          out(tag);
          forEach(attrs, function(value, key) {
            var lkey = lowercase(key);
            var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');
            if (validAttrs[lkey] === true &&
              (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {
              out(' ');
              out(key);
              out('="');
              out(encodeEntities(value));
              out('"');
            }
          });
          out('>');
        }
      },
      end: function(tag) {
        tag = lowercase(tag);
        if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {
          out('</');
          out(tag);
          out('>');
        }
        // eslint-disable-next-line eqeqeq
        if (tag == ignoreCurrentElement) {
          ignoreCurrentElement = false;
        }
      },
      chars: function(chars) {
        if (!ignoreCurrentElement) {
          out(encodeEntities(chars));
        }
      }
    };
  }
  /**
   * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare
   * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want
   * to allow any of these custom attributes. This method strips them all.
   *
   * @param node Root element to process
   */
  function stripCustomNsAttrs(node) {
    while (node) {
      if (node.nodeType === window.Node.ELEMENT_NODE) {
        var attrs = node.attributes;
        for (var i = 0, l = attrs.length; i < l; i++) {
          var attrNode = attrs[i];
          var attrName = attrNode.name.toLowerCase();
          if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {
            node.removeAttributeNode(attrNode);
            i--;
            l--;
          }
        }
      }
      var nextNode = node.firstChild;
      if (nextNode) {
        stripCustomNsAttrs(nextNode);
      }
      node = node.nextSibling;
    }
  }
}
function sanitizeText(chars) {
  var buf = [];
  var writer = htmlSanitizeWriter(buf, noop);
  writer.chars(chars);
  return buf.join('');
}
// define ngSanitize module and register $sanitize service
angular.module('ngSanitize', []).provider('$sanitize', $SanitizeProvider);
/**
 * @ngdoc filter
 * @name linky
 * @kind function
 *
 * @description
 * Finds links in text input and turns them into html links. Supports `http/https/ftp/mailto` and
 * plain email address links.
 *
 * Requires the {@link ngSanitize `ngSanitize`} module to be installed.
 *
 * @param {string} text Input text.
 * @param {string} target Window (`_blank|_self|_parent|_top`) or named frame to open links in.
 * @param {object|function(url)} [attributes] Add custom attributes to the link element.
 *
 *    Can be one of:
 *
 *    - `object`: A map of attributes
 *    - `function`: Takes the url as a parameter and returns a map of attributes
 *
 *    If the map of attributes contains a value for `target`, it overrides the value of
 *    the target parameter.
 *
 *
 * @returns {string} Html-linkified and {@link $sanitize sanitized} text.
 *
 * @usage
   <span ng-bind-html="linky_expression | linky"></span>
 *
 * @example
   <example module="linkyExample" deps="angular-sanitize.js" name="linky-filter">
     <file name="index.html">
       <div ng-controller="ExampleController">
       Snippet: <textarea ng-model="snippet" cols="60" rows="3"></textarea>
       <table>
         <tr>
           <th>Filter</th>
           <th>Source</th>
           <th>Rendered</th>
         </tr>
         <tr id="linky-filter">
           <td>linky filter</td>
           <td>
             <pre>&lt;div ng-bind-html="snippet | linky"&gt;<br>&lt;/div&gt;</pre>
           </td>
           <td>
             <div ng-bind-html="snippet | linky"></div>
           </td>
         </tr>
         <tr id="linky-target">
          <td>linky target</td>
          <td>
            <pre>&lt;div ng-bind-html="snippetWithSingleURL | linky:'_blank'"&gt;<br>&lt;/div&gt;</pre>
          </td>
          <td>
            <div ng-bind-html="snippetWithSingleURL | linky:'_blank'"></div>
          </td>
         </tr>
         <tr id="linky-custom-attributes">
          <td>linky custom attributes</td>
          <td>
            <pre>&lt;div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}"&gt;<br>&lt;/div&gt;</pre>
          </td>
          <td>
            <div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}"></div>
          </td>
         </tr>
         <tr id="escaped-html">
           <td>no filter</td>
           <td><pre>&lt;div ng-bind="snippet"&gt;<br>&lt;/div&gt;</pre></td>
           <td><div ng-bind="snippet"></div></td>
         </tr>
       </table>
     </file>
     <file name="script.js">
       angular.module('linkyExample', ['ngSanitize'])
         .controller('ExampleController', ['$scope', function($scope) {
           $scope.snippet =
             'Pretty text with some links:\n' +
             'http://angularjs.org/,\n' +
             'mailto:us@somewhere.org,\n' +
             'another@somewhere.org,\n' +
             'and one more: ftp://127.0.0.1/.';
           $scope.snippetWithSingleURL = 'http://angularjs.org/';
         }]);
     </file>
     <file name="protractor.js" type="protractor">
       it('should linkify the snippet with urls', function() {
         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
             toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +
                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');
         expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);
       });
       it('should not linkify snippet without the linky filter', function() {
         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).
             toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +
                  'another@somewhere.org, and one more: ftp://127.0.0.1/.');
         expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);
       });
       it('should update', function() {
         element(by.model('snippet')).clear();
         element(by.model('snippet')).sendKeys('new http://link.');
         expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).
             toBe('new http://link.');
         expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);
         expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())
             .toBe('new http://link.');
       });
       it('should work with the target property', function() {
        expect(element(by.id('linky-target')).
            element(by.binding("snippetWithSingleURL | linky:'_blank'")).getText()).
            toBe('http://angularjs.org/');
        expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');
       });
       it('should optionally add custom attributes', function() {
        expect(element(by.id('linky-custom-attributes')).
            element(by.binding("snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}")).getText()).
            toBe('http://angularjs.org/');
        expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');
       });
     </file>
   </example>
 */
angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {
  var LINKY_URL_REGEXP =
        /((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
      MAILTO_REGEXP = /^mailto:/i;
  var linkyMinErr = angular.$$minErr('linky');
  var isDefined = angular.isDefined;
  var isFunction = angular.isFunction;
  var isObject = angular.isObject;
  var isString = angular.isString;
  return function(text, target, attributes) {
    if (text == null || text === '') return text;
    if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);
    var attributesFn =
      isFunction(attributes) ? attributes :
      isObject(attributes) ? function getAttributesObject() {return attributes;} :
      function getEmptyAttributesObject() {return {};};
    var match;
    var raw = text;
    var html = [];
    var url;
    var i;
    while ((match = raw.match(LINKY_URL_REGEXP))) {
      // We can not end in these as they are sometimes found at the end of the sentence
      url = match[0];
      // if we did not match ftp/http/www/mailto then assume mailto
      if (!match[2] && !match[4]) {
        url = (match[3] ? 'http://' : 'mailto:') + url;
      }
      i = match.index;
      addText(raw.substr(0, i));
      addLink(url, match[0].replace(MAILTO_REGEXP, ''));
      raw = raw.substring(i + match[0].length);
    }
    addText(raw);
    return $sanitize(html.join(''));
    function addText(text) {
      if (!text) {
        return;
      }
      html.push(sanitizeText(text));
    }
    function addLink(url, text) {
      var key, linkAttributes = attributesFn(url);
      html.push('<a ');
      for (key in linkAttributes) {
        html.push(key + '="' + linkAttributes[key] + '" ');
      }
      if (isDefined(target) && !('target' in linkAttributes)) {
        html.push('target="',
                  target,
                  '" ');
      }
      html.push('href="',
                url.replace(/"/g, '&quot;'),
                '">');
      addText(text);
      html.push('</a>');
    }
  };
}]);
})(window, window.angular);
src/main/webapp/bower_components/angular-sanitize/angular-sanitize.min.js
New file
@@ -0,0 +1,16 @@
/*
 AngularJS v1.5.11
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(s,g){'use strict';function H(g){var l=[];t(l,A).chars(g);return l.join("")}var B=g.$$minErr("$sanitize"),C,l,D,E,q,A,F,t;g.module("ngSanitize",[]).provider("$sanitize",function(){function k(a,e){var b={},c=a.split(","),h;for(h=0;h<c.length;h++)b[e?q(c[h]):c[h]]=!0;return b}function I(a){for(var e={},b=0,c=a.length;b<c;b++){var h=a[b];e[h.name]=h.value}return e}function G(a){return a.replace(/&/g,"&amp;").replace(J,function(a){var b=a.charCodeAt(0);a=a.charCodeAt(1);return"&#"+(1024*(b-55296)+
(a-56320)+65536)+";"}).replace(K,function(a){return"&#"+a.charCodeAt(0)+";"}).replace(/</g,"&lt;").replace(/>/g,"&gt;")}function x(a){for(;a;){if(a.nodeType===s.Node.ELEMENT_NODE)for(var e=a.attributes,b=0,c=e.length;b<c;b++){var h=e[b],d=h.name.toLowerCase();if("xmlns:ns1"===d||0===d.lastIndexOf("ns1:",0))a.removeAttributeNode(h),b--,c--}(e=a.firstChild)&&x(e);a=a.nextSibling}}var u=!1;this.$get=["$$sanitizeUri",function(a){u&&l(v,w);return function(e){var b=[];F(e,t(b,function(b,h){return!/^unsafe:/.test(a(b,
h))}));return b.join("")}}];this.enableSvg=function(a){return E(a)?(u=a,this):u};C=g.bind;l=g.extend;D=g.forEach;E=g.isDefined;q=g.lowercase;A=g.noop;F=function(a,e){null===a||void 0===a?a="":"string"!==typeof a&&(a=""+a);f.innerHTML=a;var b=5;do{if(0===b)throw B("uinput");b--;s.document.documentMode&&x(f);a=f.innerHTML;f.innerHTML=a}while(a!==f.innerHTML);for(b=f.firstChild;b;){switch(b.nodeType){case 1:e.start(b.nodeName.toLowerCase(),I(b.attributes));break;case 3:e.chars(b.textContent)}var c;if(!(c=
b.firstChild)&&(1===b.nodeType&&e.end(b.nodeName.toLowerCase()),c=b.nextSibling,!c))for(;null==c;){b=b.parentNode;if(b===f)break;c=b.nextSibling;1===b.nodeType&&e.end(b.nodeName.toLowerCase())}b=c}for(;b=f.firstChild;)f.removeChild(b)};t=function(a,e){var b=!1,c=C(a,a.push);return{start:function(a,d){a=q(a);!b&&z[a]&&(b=a);b||!0!==v[a]||(c("<"),c(a),D(d,function(b,d){var f=q(d),g="img"===a&&"src"===f||"background"===f;!0!==m[f]||!0===n[f]&&!e(b,g)||(c(" "),c(d),c('="'),c(G(b)),c('"'))}),c(">"))},
end:function(a){a=q(a);b||!0!==v[a]||!0===y[a]||(c("</"),c(a),c(">"));a==b&&(b=!1)},chars:function(a){b||c(G(a))}}};var J=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,K=/([^#-~ |!])/g,y=k("area,br,col,hr,img,wbr"),d=k("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),r=k("rp,rt"),p=l({},r,d),d=l({},d,k("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul")),r=l({},r,k("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")),
w=k("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan"),z=k("script,style"),v=l({},y,d,r,p),n=k("background,cite,href,longdesc,src,xlink:href"),p=k("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"),
r=k("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan",
!0),m=l({},n,r,p),f;(function(a){if(a.document&&a.document.implementation)a=a.document.implementation.createHTMLDocument("inert");else throw B("noinert");var e=(a.documentElement||a.getDocumentElement()).getElementsByTagName("body");1===e.length?f=e[0]:(e=a.createElement("html"),f=a.createElement("body"),e.appendChild(f),a.appendChild(e))})(s)});g.module("ngSanitize").filter("linky",["$sanitize",function(k){var l=/((ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i,
q=/^mailto:/i,x=g.$$minErr("linky"),u=g.isDefined,s=g.isFunction,t=g.isObject,y=g.isString;return function(d,g,p){function w(a){a&&m.push(H(a))}function z(a,b){var c,d=v(a);m.push("<a ");for(c in d)m.push(c+'="'+d[c]+'" ');!u(g)||"target"in d||m.push('target="',g,'" ');m.push('href="',a.replace(/"/g,"&quot;"),'">');w(b);m.push("</a>")}if(null==d||""===d)return d;if(!y(d))throw x("notstring",d);for(var v=s(p)?p:t(p)?function(){return p}:function(){return{}},n=d,m=[],f,a;d=n.match(l);)f=d[0],d[2]||
d[4]||(f=(d[3]?"http://":"mailto:")+f),a=d.index,w(n.substr(0,a)),z(f,d[0].replace(q,"")),n=n.substring(a+d[0].length);w(n);return k(m.join(""))}}])})(window,window.angular);
//# sourceMappingURL=angular-sanitize.min.js.map
src/main/webapp/bower_components/angular-sanitize/angular-sanitize.min.js.map
New file
@@ -0,0 +1,8 @@
{
"version":3,
"file":"angular-sanitize.min.js",
"lineCount":15,
"mappings":"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",
"sources":["angular-sanitize.js"],
"names":["window","angular","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","$sanitizeMinErr","$$minErr","bind","extend","forEach","isDefined","lowercase","htmlParser","module","provider","$SanitizeProvider","toMap","str","lowercaseKeys","obj","items","split","i","length","attrToMap","attrs","map","ii","attr","name","value","encodeEntities","replace","SURROGATE_PAIR_REGEXP","hi","charCodeAt","low","NON_ALPHANUMERIC_REGEXP","stripCustomNsAttrs","node","nodeType","Node","ELEMENT_NODE","attributes","l","attrNode","attrName","toLowerCase","lastIndexOf","removeAttributeNode","nextNode","firstChild","nextSibling","svgEnabled","$get","$$sanitizeUri","validElements","svgElements","html","uri","isImage","test","enableSvg","this.enableSvg","htmlParserImpl","handler","undefined","inertBodyElement","innerHTML","mXSSAttempts","document","documentMode","start","nodeName","textContent","end","parentNode","removeChild","htmlSanitizeWriterImpl","uriValidator","ignoreCurrentElement","out","push","tag","blockedElements","key","lkey","validAttrs","uriAttrs","voidElements","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","implementation","doc","createHTMLDocument","bodyElements","getElementsByTagName","documentElement","getDocumentElement","createElement","appendChild","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","isFunction","isObject","isString","text","target","addText","addLink","url","linkAttributes","attributesFn","getAttributesObject","getEmptyAttributesObject","raw","match","index","substr","substring"]
}
src/main/webapp/bower_components/angular-sanitize/bower.json
New file
@@ -0,0 +1,10 @@
{
  "name": "angular-sanitize",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular-sanitize.js",
  "ignore": [],
  "dependencies": {
    "angular": "1.5.11"
  }
}
src/main/webapp/bower_components/angular-sanitize/index.js
New file
@@ -0,0 +1,2 @@
require('./angular-sanitize');
module.exports = 'ngSanitize';
src/main/webapp/bower_components/angular-sanitize/package.json
New file
@@ -0,0 +1,33 @@
{
  "name": "angular-sanitize",
  "version": "1.5.11",
  "description": "AngularJS module for sanitizing HTML",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/angular/angular.js.git"
  },
  "keywords": [
    "angular",
    "framework",
    "browser",
    "html",
    "client-side"
  ],
  "author": "Angular Core Team <angular-core+npm@google.com>",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/angular/angular.js/issues"
  },
  "homepage": "http://angularjs.org",
  "jspm": {
    "shim": {
      "angular-sanitize": {
        "deps": ["angular"]
      }
    }
  }
}
src/main/webapp/bower_components/angular-translate-loader-partial/.bower.json
New file
@@ -0,0 +1,22 @@
{
  "name": "angular-translate-loader-partial",
  "description": "A plugin for Angular Translate",
  "version": "2.16.0",
  "main": "./angular-translate-loader-partial.js",
  "ignore": [],
  "author": "Pascal Precht",
  "license": "MIT",
  "dependencies": {
    "angular-translate": "~2.16.0"
  },
  "homepage": "https://github.com/PascalPrecht/bower-angular-translate-loader-partial",
  "_release": "2.16.0",
  "_resolution": {
    "type": "version",
    "tag": "2.16.0",
    "commit": "f5b90b99239b8757aa83cdd7f16de378cfa629bb"
  },
  "_source": "https://github.com/PascalPrecht/bower-angular-translate-loader-partial.git",
  "_target": "2.16.0",
  "_originalSource": "angular-translate-loader-partial"
}
src/main/webapp/bower_components/angular-translate-loader-partial/README.md
New file
@@ -0,0 +1,29 @@
# angular-translate-loader-partial (bower shadow repository)
This is the _Bower shadow_ repository for *angular-translate-loader-partial*.
## Bugs and issues
Please file any issues and bugs in our main repository at [angular-translate/angular-translate](https://github.com/angular-translate/angular-translate/issues).
## Usage
### via Bower
```bash
$ bower install angular-translate-loader-partial
```
### via NPM
```bash
$ npm install angular-translate-loader-partial
```
### via cdnjs
Please have a look at https://cdnjs.com/libraries/angular-translate-loader-partial for specific versions.
## License
Licensed under MIT. See more details at [angular-translate/angular-translate](https://github.com/angular-translate/angular-translate).
src/main/webapp/bower_components/angular-translate-loader-partial/angular-translate-loader-partial.js
New file
@@ -0,0 +1,558 @@
/*!
 * angular-translate - v2.16.0 - 2017-11-01
 *
 * Copyright (c) 2017 The angular-translate team, Pascal Precht; Licensed MIT
 */
(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module unless amdModuleId is set
    define([], function () {
      return (factory());
    });
  } else if (typeof module === 'object' && module.exports) {
    // Node. Does not work with strict CommonJS, but
    // only CommonJS-like environments that support module.exports,
    // like Node.
    module.exports = factory();
  } else {
    factory();
  }
}(this, function () {
angular.module('pascalprecht.translate')
/**
 * @ngdoc object
 * @name pascalprecht.translate.$translatePartialLoaderProvider
 *
 * @description
 * By using a $translatePartialLoaderProvider you can configure a list of a needed
 * translation parts directly during the configuration phase of your application's
 * lifetime. All parts you add by using this provider would be loaded by
 * angular-translate at the startup as soon as possible.
 */
  .provider('$translatePartialLoader', $translatePartialLoader);
function $translatePartialLoader() {
  'use strict';
  /**
   * @constructor
   * @name Part
   *
   * @description
   * Represents Part object to add and set parts at runtime.
   */
  function Part(name, priority, urlTemplate) {
    this.name = name;
    this.isActive = true;
    this.tables = {};
    this.priority = priority || 0;
    this.langPromises = {};
    this.urlTemplate = urlTemplate;
  }
  /**
   * @name parseUrl
   * @method
   *
   * @description
   * Returns a parsed url template string and replaces given target lang
   * and part name it.
   *
   * @param {string|function} urlTemplate - Either a string containing an url pattern (with
   *                                        '{part}' and '{lang}') or a function(part, lang)
   *                                        returning a string.
   * @param {string} targetLang - Language key for language to be used.
   * @return {string} Parsed url template string
   */
  Part.prototype.parseUrl = function (urlTemplate, targetLang) {
    if (angular.isFunction(urlTemplate)) {
      return urlTemplate(this.name, targetLang);
    }
    return urlTemplate.replace(/\{part\}/g, this.name).replace(/\{lang\}/g, targetLang);
  };
  Part.prototype.getTable = function (lang, $q, $http, $httpOptions, urlTemplate, errorHandler) {
    //locals
    var self = this;
    var lastLangPromise = this.langPromises[lang];
    var deferred = $q.defer();
    //private helper helpers
    var fetchData = function () {
      return $http(
        angular.extend({
            method : 'GET',
            url : self.parseUrl(self.urlTemplate || urlTemplate, lang)
          },
          $httpOptions)
      );
    };
    //private helper
    var handleNewData = function (data) {
      self.tables[lang] = data;
      deferred.resolve(data);
    };
    //private helper
    var rejectDeferredWithPartName = function () {
      deferred.reject(self.name);
    };
    //private helper
    var tryGettingThisTable = function () {
      //data fetching logic
      fetchData().then(
        function (result) {
          handleNewData(result.data);
        },
        function (errorResponse) {
          if (errorHandler) {
            errorHandler(self.name, lang, errorResponse).then(handleNewData, rejectDeferredWithPartName);
          } else {
            rejectDeferredWithPartName();
          }
        });
    };
    //loading logic
    if (!this.tables[lang]) {
      //let's try loading the data
      if (!lastLangPromise) {
        //this is the first request - just go ahead and hit the server
        tryGettingThisTable();
      } else {
        //this is an additional request after one or more unfinished or failed requests
        //chain the deferred off the previous request's promise so that this request conditionally executes
        //if the previous request succeeds then the result will be passed through, but if it fails then this request will try again and hit the server
        lastLangPromise.then(deferred.resolve, tryGettingThisTable);
      }
      //retain a reference to the last promise so we can continue the chain if another request is made before any succeed
      //you can picture the promise chain as a singly-linked list (formed by the .then handler queues) that's traversed by the execution context
      this.langPromises[lang] = deferred.promise;
    }
    else {
      //the part has already been loaded - if lastLangPromise is also undefined then the table has been populated using setPart
      //this breaks the promise chain because we're not tying langDeferred's outcome to a previous call's promise handler queues, but we don't care because there's no asynchronous execution context to keep track of anymore
      deferred.resolve(this.tables[lang]);
    }
    return deferred.promise;
  };
  var parts = {};
  function hasPart(name) {
    return Object.prototype.hasOwnProperty.call(parts, name);
  }
  function isStringValid(str) {
    return angular.isString(str) && str !== '';
  }
  function isPartAvailable(name) {
    if (!isStringValid(name)) {
      throw new TypeError('Invalid type of a first argument, a non-empty string expected.');
    }
    return (hasPart(name) && parts[name].isActive);
  }
  function deepExtend(dst, src) {
    for (var property in src) {
      if (src[property] && src[property].constructor &&
        src[property].constructor === Object) {
        dst[property] = dst[property] || {};
        deepExtend(dst[property], src[property]);
      } else {
        dst[property] = src[property];
      }
    }
    return dst;
  }
  function getPrioritizedParts() {
    var prioritizedParts = [];
    for (var part in parts) {
      if (parts[part].isActive) {
        prioritizedParts.push(parts[part]);
      }
    }
    prioritizedParts.sort(function (a, b) {
      return a.priority - b.priority;
    });
    return prioritizedParts;
  }
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translatePartialLoaderProvider#addPart
   * @methodOf pascalprecht.translate.$translatePartialLoaderProvider
   *
   * @description
   * Registers a new part of the translation table to be loaded once the
   * `angular-translate` gets into runtime phase. It does not actually load any
   * translation data, but only registers a part to be loaded in the future.
   *
   * @param {string} name A name of the part to add
   * @param {int} [priority=0] Sets the load priority of this part.
   *
   * @returns {object} $translatePartialLoaderProvider, so this method is chainable
   * @throws {TypeError} The method could throw a **TypeError** if you pass the param
   * of the wrong type. Please, note that the `name` param has to be a
   * non-empty **string**.
   */
  this.addPart = function (name, priority, urlTemplate) {
    if (!isStringValid(name)) {
      throw new TypeError('Couldn\'t add part, part name has to be a string!');
    }
    if (!hasPart(name)) {
      parts[name] = new Part(name, priority, urlTemplate);
    }
    parts[name].isActive = true;
    return this;
  };
  /**
   * @ngdocs function
   * @name pascalprecht.translate.$translatePartialLoaderProvider#setPart
   * @methodOf pascalprecht.translate.$translatePartialLoaderProvider
   *
   * @description
   * Sets a translation table to the specified part. This method does not make the
   * specified part available, but only avoids loading this part from the server.
   *
   * @param {string} lang A language of the given translation table
   * @param {string} part A name of the target part
   * @param {object} table A translation table to set to the specified part
   *
   * @return {object} $translatePartialLoaderProvider, so this method is chainable
   * @throws {TypeError} The method could throw a **TypeError** if you pass params
   * of the wrong type. Please, note that the `lang` and `part` params have to be a
   * non-empty **string**s and the `table` param has to be an object.
   */
  this.setPart = function (lang, part, table) {
    if (!isStringValid(lang)) {
      throw new TypeError('Couldn\'t set part.`lang` parameter has to be a string!');
    }
    if (!isStringValid(part)) {
      throw new TypeError('Couldn\'t set part.`part` parameter has to be a string!');
    }
    if (typeof table !== 'object' || table === null) {
      throw new TypeError('Couldn\'t set part. `table` parameter has to be an object!');
    }
    if (!hasPart(part)) {
      parts[part] = new Part(part);
      parts[part].isActive = false;
    }
    parts[part].tables[lang] = table;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translatePartialLoaderProvider#deletePart
   * @methodOf pascalprecht.translate.$translatePartialLoaderProvider
   *
   * @description
   * Removes the previously added part of the translation data. So, `angular-translate` will not
   * load it at the startup.
   *
   * @param {string} name A name of the part to delete
   *
   * @returns {object} $translatePartialLoaderProvider, so this method is chainable
   *
   * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong
   * type. Please, note that the `name` param has to be a non-empty **string**.
   */
  this.deletePart = function (name) {
    if (!isStringValid(name)) {
      throw new TypeError('Couldn\'t delete part, first arg has to be string.');
    }
    if (hasPart(name)) {
      parts[name].isActive = false;
    }
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translatePartialLoaderProvider#isPartAvailable
   * @methodOf pascalprecht.translate.$translatePartialLoaderProvider
   *
   * @description
   * Checks if the specific part is available. A part becomes available after it was added by the
   * `addPart` method. Available parts would be loaded from the server once the `angular-translate`
   * asks the loader to that.
   *
   * @param {string} name A name of the part to check
   *
   * @returns {boolean} Returns **true** if the part is available now and **false** if not.
   *
   * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong
   * type. Please, note that the `name` param has to be a non-empty **string**.
   */
  this.isPartAvailable = isPartAvailable;
  /**
   * @ngdoc object
   * @name pascalprecht.translate.$translatePartialLoader
   *
   * @requires $q
   * @requires $http
   * @requires $injector
   * @requires $rootScope
   * @requires $translate
   *
   * @description
   *
   * @param {object} options Options object
   *
   * @throws {TypeError}
   */
  this.$get = ['$rootScope', '$injector', '$q', '$http',
    function ($rootScope, $injector, $q, $http) {
      /**
       * @ngdoc event
       * @name pascalprecht.translate.$translatePartialLoader#$translatePartialLoaderStructureChanged
       * @eventOf pascalprecht.translate.$translatePartialLoader
       * @eventType broadcast on root scope
       *
       * @description
       * A $translatePartialLoaderStructureChanged event is called when a state of the loader was
       * changed somehow. It could mean either some part is added or some part is deleted. Anyway when
       * you get this event the translation table is not longer current and has to be updated.
       *
       * @param {string} name A name of the part which is a reason why the event was fired
       */
      var service = function (options) {
        if (!isStringValid(options.key)) {
          throw new TypeError('Unable to load data, a key is not a non-empty string.');
        }
        if (!isStringValid(options.urlTemplate) && !angular.isFunction(options.urlTemplate)) {
          throw new TypeError('Unable to load data, a urlTemplate is not a non-empty string or not a function.');
        }
        var errorHandler = options.loadFailureHandler;
        if (errorHandler !== undefined) {
          if (!angular.isString(errorHandler)) {
            throw new Error('Unable to load data, a loadFailureHandler is not a string.');
          } else {
            errorHandler = $injector.get(errorHandler);
          }
        }
        var loaders = [],
          prioritizedParts = getPrioritizedParts();
        angular.forEach(prioritizedParts, function (part) {
          loaders.push(
            part.getTable(options.key, $q, $http, options.$http, options.urlTemplate, errorHandler)
          );
          part.urlTemplate = part.urlTemplate || options.urlTemplate;
        });
        return $q.all(loaders)
          .then(function () {
            var table = {};
            prioritizedParts = getPrioritizedParts();
            angular.forEach(prioritizedParts, function (part) {
              deepExtend(table, part.tables[options.key]);
            });
            return table;
          }, function () {
            return $q.reject(options.key);
          });
      };
      /**
       * @ngdoc function
       * @name pascalprecht.translate.$translatePartialLoader#addPart
       * @methodOf pascalprecht.translate.$translatePartialLoader
       *
       * @description
       * Registers a new part of the translation table. This method does not actually perform any xhr
       * requests to get translation data. The new parts will be loaded in order of priority from the server next time
       * `angular-translate` asks the loader to load translations.
       *
       * @param {string} name A name of the part to add
       * @param {int} [priority=0] Sets the load priority of this part.
       *
       * @returns {object} $translatePartialLoader, so this method is chainable
       *
       * @fires {$translatePartialLoaderStructureChanged} The $translatePartialLoaderStructureChanged
       * event would be fired by this method in case the new part affected somehow on the loaders
       * state. This way it means that there are a new translation data available to be loaded from
       * the server.
       *
       * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong
       * type. Please, note that the `name` param has to be a non-empty **string**.
       */
      service.addPart = function (name, priority, urlTemplate) {
        if (!isStringValid(name)) {
          throw new TypeError('Couldn\'t add part, first arg has to be a string');
        }
        if (!hasPart(name)) {
          parts[name] = new Part(name, priority, urlTemplate);
          $rootScope.$emit('$translatePartialLoaderStructureChanged', name);
        } else if (!parts[name].isActive) {
          parts[name].isActive = true;
          $rootScope.$emit('$translatePartialLoaderStructureChanged', name);
        }
        return service;
      };
      /**
       * @ngdoc function
       * @name pascalprecht.translate.$translatePartialLoader#deletePart
       * @methodOf pascalprecht.translate.$translatePartialLoader
       *
       * @description
       * Deletes the previously added part of the translation data. The target part could be deleted
       * either logically or physically. When the data is deleted logically it is not actually deleted
       * from the browser, but the loader marks it as not active and prevents it from affecting on the
       * translations. If the deleted in such way part is added again, the loader will use the
       * previously loaded data rather than loading it from the server once more time. But if the data
       * is deleted physically, the loader will completely remove all information about it. So in case
       * of recycling this part will be loaded from the server again.
       *
       * @param {string} name A name of the part to delete
       * @param {boolean=} [removeData=false] An indicator if the loader has to remove a loaded
       * translation data physically. If the `removeData` if set to **false** the loaded data will not be
       * deleted physically and might be reused in the future to prevent an additional xhr requests.
       *
       * @returns {object} $translatePartialLoader, so this method is chainable
       *
       * @fires {$translatePartialLoaderStructureChanged} The $translatePartialLoaderStructureChanged
       * event would be fired by this method in case a part deletion process affects somehow on the
       * loaders state. This way it means that some part of the translation data is now deprecated and
       * the translation table has to be recompiled with the remaining translation parts.
       *
       * @throws {TypeError} The method could throw a **TypeError** if you pass some param of the
       * wrong type. Please, note that the `name` param has to be a non-empty **string** and
       * the `removeData` param has to be either **undefined** or **boolean**.
       */
      service.deletePart = function (name, removeData) {
        if (!isStringValid(name)) {
          throw new TypeError('Couldn\'t delete part, first arg has to be string');
        }
        if (removeData === undefined) {
          removeData = false;
        } else if (typeof removeData !== 'boolean') {
          throw new TypeError('Invalid type of a second argument, a boolean expected.');
        }
        if (hasPart(name)) {
          var wasActive = parts[name].isActive;
          if (removeData) {
            var $translate = $injector.get('$translate');
            var cache = $translate.loaderCache();
            if (typeof(cache) === 'string') {
              // getting on-demand instance of loader
              cache = $injector.get(cache);
            }
            // Purging items from cache...
            if (typeof(cache) === 'object') {
              angular.forEach(parts[name].tables, function (value, key) {
                cache.remove(parts[name].parseUrl(parts[name].urlTemplate, key));
              });
            }
            delete parts[name];
          } else {
            parts[name].isActive = false;
          }
          if (wasActive) {
            $rootScope.$emit('$translatePartialLoaderStructureChanged', name);
          }
        }
        return service;
      };
      /**
       * @ngdoc function
       * @name pascalprecht.translate.$translatePartialLoader#isPartLoaded
       * @methodOf pascalprecht.translate.$translatePartialLoader
       *
       * @description
       * Checks if the registered translation part is loaded into the translation table.
       *
       * @param {string} name A name of the part
       * @param {string} lang A key of the language
       *
       * @returns {boolean} Returns **true** if the translation of the part is loaded to the translation table and **false** if not.
       *
       * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong
       * type. Please, note that the `name` and `lang` params have to be non-empty **string**.
       */
      service.isPartLoaded = function (name, lang) {
        return angular.isDefined(parts[name]) && angular.isDefined(parts[name].tables[lang]);
      };
      /**
       * @ngdoc function
       * @name pascalprecht.translate.$translatePartialLoader#getRegisteredParts
       * @methodOf pascalprecht.translate.$translatePartialLoader
       *
       * @description
       * Gets names of the parts that were added with the `addPart`.
       *
       * @returns {array} Returns array of registered parts, if none were registered then an empty array is returned.
       */
      service.getRegisteredParts = function () {
        var registeredParts = [];
        angular.forEach(parts, function (p) {
          if (p.isActive) {
            registeredParts.push(p.name);
          }
        });
        return registeredParts;
      };
      /**
       * @ngdoc function
       * @name pascalprecht.translate.$translatePartialLoader#isPartAvailable
       * @methodOf pascalprecht.translate.$translatePartialLoader
       *
       * @description
       * Checks if a target translation part is available. The part becomes available just after it was
       * added by the `addPart` method. Part's availability does not mean that it was loaded from the
       * server, but only that it was added to the loader. The available part might be loaded next
       * time the loader is called.
       *
       * @param {string} name A name of the part to delete
       *
       * @returns {boolean} Returns **true** if the part is available now and **false** if not.
       *
       * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong
       * type. Please, note that the `name` param has to be a non-empty **string**.
       */
      service.isPartAvailable = isPartAvailable;
      return service;
    }];
}
$translatePartialLoader.displayName = '$translatePartialLoader';
return 'pascalprecht.translate';
}));
src/main/webapp/bower_components/angular-translate-loader-partial/angular-translate-loader-partial.min.js
New file
@@ -0,0 +1,6 @@
/*!
 * angular-translate - v2.16.0 - 2017-11-01
 *
 * Copyright (c) 2017 The angular-translate team, Pascal Precht; Licensed MIT
 */
!function(t,e){"function"==typeof define&&define.amd?define([],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():e()}(0,function(){function t(){"use strict";function t(t,e,r){this.name=t,this.isActive=!0,this.tables={},this.priority=e||0,this.langPromises={},this.urlTemplate=r}function e(t){return Object.prototype.hasOwnProperty.call(o,t)}function r(t){return angular.isString(t)&&""!==t}function a(t){if(!r(t))throw new TypeError("Invalid type of a first argument, a non-empty string expected.");return e(t)&&o[t].isActive}function n(t,e){for(var r in e)e[r]&&e[r].constructor&&e[r].constructor===Object?(t[r]=t[r]||{},n(t[r],e[r])):t[r]=e[r];return t}function i(){var t=[];for(var e in o)o[e].isActive&&t.push(o[e]);return t.sort(function(t,e){return t.priority-e.priority}),t}t.prototype.parseUrl=function(t,e){return angular.isFunction(t)?t(this.name,e):t.replace(/\{part\}/g,this.name).replace(/\{lang\}/g,e)},t.prototype.getTable=function(t,e,r,a,n,i){var o=this,s=this.langPromises[t],l=e.defer(),u=function(){return r(angular.extend({method:"GET",url:o.parseUrl(o.urlTemplate||n,t)},a))},c=function(e){o.tables[t]=e,l.resolve(e)},p=function(){l.reject(o.name)},f=function(){u().then(function(t){c(t.data)},function(e){i?i(o.name,t,e).then(c,p):p()})};return this.tables[t]?l.resolve(this.tables[t]):(s?s.then(l.resolve,f):f(),this.langPromises[t]=l.promise),l.promise};var o={};this.addPart=function(a,n,i){if(!r(a))throw new TypeError("Couldn't add part, part name has to be a string!");return e(a)||(o[a]=new t(a,n,i)),o[a].isActive=!0,this},this.setPart=function(a,n,i){if(!r(a))throw new TypeError("Couldn't set part.`lang` parameter has to be a string!");if(!r(n))throw new TypeError("Couldn't set part.`part` parameter has to be a string!");if("object"!=typeof i||null===i)throw new TypeError("Couldn't set part. `table` parameter has to be an object!");return e(n)||(o[n]=new t(n),o[n].isActive=!1),o[n].tables[a]=i,this},this.deletePart=function(t){if(!r(t))throw new TypeError("Couldn't delete part, first arg has to be string.");return e(t)&&(o[t].isActive=!1),this},this.isPartAvailable=a,this.$get=["$rootScope","$injector","$q","$http",function(s,l,u,c){var p=function(t){if(!r(t.key))throw new TypeError("Unable to load data, a key is not a non-empty string.");if(!r(t.urlTemplate)&&!angular.isFunction(t.urlTemplate))throw new TypeError("Unable to load data, a urlTemplate is not a non-empty string or not a function.");var e=t.loadFailureHandler;if(void 0!==e){if(!angular.isString(e))throw new Error("Unable to load data, a loadFailureHandler is not a string.");e=l.get(e)}var a=[],o=i();return angular.forEach(o,function(r){a.push(r.getTable(t.key,u,c,t.$http,t.urlTemplate,e)),r.urlTemplate=r.urlTemplate||t.urlTemplate}),u.all(a).then(function(){var e={};return o=i(),angular.forEach(o,function(r){n(e,r.tables[t.key])}),e},function(){return u.reject(t.key)})};return p.addPart=function(a,n,i){if(!r(a))throw new TypeError("Couldn't add part, first arg has to be a string");return e(a)?o[a].isActive||(o[a].isActive=!0,s.$emit("$translatePartialLoaderStructureChanged",a)):(o[a]=new t(a,n,i),s.$emit("$translatePartialLoaderStructureChanged",a)),p},p.deletePart=function(t,a){if(!r(t))throw new TypeError("Couldn't delete part, first arg has to be string");if(void 0===a)a=!1;else if("boolean"!=typeof a)throw new TypeError("Invalid type of a second argument, a boolean expected.");if(e(t)){var n=o[t].isActive;if(a){var i=l.get("$translate").loaderCache();"string"==typeof i&&(i=l.get(i)),"object"==typeof i&&angular.forEach(o[t].tables,function(e,r){i.remove(o[t].parseUrl(o[t].urlTemplate,r))}),delete o[t]}else o[t].isActive=!1;n&&s.$emit("$translatePartialLoaderStructureChanged",t)}return p},p.isPartLoaded=function(t,e){return angular.isDefined(o[t])&&angular.isDefined(o[t].tables[e])},p.getRegisteredParts=function(){var t=[];return angular.forEach(o,function(e){e.isActive&&t.push(e.name)}),t},p.isPartAvailable=a,p}]}return angular.module("pascalprecht.translate").provider("$translatePartialLoader",t),t.displayName="$translatePartialLoader","pascalprecht.translate"});
src/main/webapp/bower_components/angular-translate-loader-partial/bower.json
New file
@@ -0,0 +1,12 @@
{
  "name": "angular-translate-loader-partial",
  "description": "A plugin for Angular Translate",
  "version": "2.16.0",
  "main": "./angular-translate-loader-partial.js",
  "ignore": [],
  "author": "Pascal Precht",
  "license": "MIT",
  "dependencies": {
    "angular-translate": "~2.16.0"
  }
}
src/main/webapp/bower_components/angular-translate-loader-partial/package.json
New file
@@ -0,0 +1,24 @@
{
  "name": "angular-translate-loader-partial",
  "version": "2.16.0",
  "description": "angular-translate-loader-partial",
  "main": "angular-translate-loader-partial.js",
  "repository": {
    "type": "git",
    "url": "https://github.com/angular-translate/bower-angular-translate-loader-partial.git"
  },
  "keywords": [
    "angular",
    "translate",
    "loader"
  ],
  "author": "Pascal Precht",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/angular-translate/angular-translate/issues"
  },
  "homepage": "https://angular-translate.github.io",
  "dependencies": {
    "angular-translate": "~2.16.0"
  }
}
src/main/webapp/bower_components/angular-translate-storage-cookie/.bower.json
New file
@@ -0,0 +1,23 @@
{
  "name": "angular-translate-storage-cookie",
  "description": "A plugin for Angular Translate",
  "version": "2.16.0",
  "main": "./angular-translate-storage-cookie.js",
  "ignore": [],
  "author": "Pascal Precht",
  "license": "MIT",
  "dependencies": {
    "angular-translate": "~2.16.0",
    "angular-cookies": ">=1.2.26 <1.7"
  },
  "homepage": "https://github.com/PascalPrecht/bower-angular-translate-storage-cookie",
  "_release": "2.16.0",
  "_resolution": {
    "type": "version",
    "tag": "2.16.0",
    "commit": "344561c216aa7073ac309e7a81fc7531c8a17a46"
  },
  "_source": "https://github.com/PascalPrecht/bower-angular-translate-storage-cookie.git",
  "_target": "2.16.0",
  "_originalSource": "angular-translate-storage-cookie"
}
src/main/webapp/bower_components/angular-translate-storage-cookie/README.md
New file
@@ -0,0 +1,28 @@
# angular-translate-storage-cookie (bower shadow repository)
This is the _Bower shadow_ repository for *angular-translate-storage-cookie*.
## Bugs and issues
Please file any issues and bugs in our main repository at [angular-translate/angular-translate](https://github.com/angular-translate/angular-translate/issues).
## Usage
### via Bower
```bash
$ bower install angular-translate-storage-cookie
```
### via NPM
```bash
$ npm install angular-translate-storage-cookie
```
### via cdnjs
Please have a look at https://cdnjs.com/libraries/angular-translate-stroage-cookie for specific versions.
## License
Licensed under MIT. See more details at [angular-translate/angular-translate](https://github.com/angular-translate/angular-translate).
src/main/webapp/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.js
New file
@@ -0,0 +1,121 @@
/*!
 * angular-translate - v2.16.0 - 2017-11-01
 *
 * Copyright (c) 2017 The angular-translate team, Pascal Precht; Licensed MIT
 */
(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module unless amdModuleId is set
    define([], function () {
      return (factory());
    });
  } else if (typeof module === 'object' && module.exports) {
    // Node. Does not work with strict CommonJS, but
    // only CommonJS-like environments that support module.exports,
    // like Node.
    module.exports = factory();
  } else {
    factory();
  }
}(this, function () {
$translateCookieStorageFactory.$inject = ['$injector'];
angular.module('pascalprecht.translate')
/**
 * @ngdoc object
 * @name pascalprecht.translate.$translateCookieStorage
 * @requires $cookieStore
 *
 * @description
 * Abstraction layer for cookieStore. This service is used when telling angular-translate
 * to use cookieStore as storage.
 *
 */
  .factory('$translateCookieStorage', $translateCookieStorageFactory);
function $translateCookieStorageFactory($injector) {
  'use strict';
  // Since AngularJS 1.4, $cookieStore is deprecated
  var delegate;
  if (angular.version.major === 1 && angular.version.minor >= 4) {
    var $cookies = $injector.get('$cookies');
    delegate = {
      get : function (key) {
        return $cookies.get(key);
      },
      put : function (key, value) {
        $cookies.put(key, value);
      }
    };
  } else {
    var $cookieStore = $injector.get('$cookieStore');
    delegate = {
      get : function (key) {
        return $cookieStore.get(key);
      },
      put : function (key, value) {
        $cookieStore.put(key, value);
      }
    };
  }
  var $translateCookieStorage = {
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translateCookieStorage#get
     * @methodOf pascalprecht.translate.$translateCookieStorage
     *
     * @description
     * Returns an item from cookieStorage by given name.
     *
     * @param {string} name Item name
     * @return {string} Value of item name
     */
    get : function (name) {
      return delegate.get(name);
    },
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translateCookieStorage#set
     * @methodOf pascalprecht.translate.$translateCookieStorage
     *
     * @description
     * Sets an item in cookieStorage by given name.
     *
     * @deprecated use #put
     *
     * @param {string} name Item name
     * @param {string} value Item value
     */
    set : function (name, value) {
      delegate.put(name, value);
    },
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translateCookieStorage#put
     * @methodOf pascalprecht.translate.$translateCookieStorage
     *
     * @description
     * Sets an item in cookieStorage by given name.
     *
     * @param {string} name Item name
     * @param {string} value Item value
     */
    put : function (name, value) {
      delegate.put(name, value);
    }
  };
  return $translateCookieStorage;
}
$translateCookieStorageFactory.displayName = '$translateCookieStorage';
return 'pascalprecht.translate';
}));
src/main/webapp/bower_components/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js
New file
@@ -0,0 +1,6 @@
/*!
 * angular-translate - v2.16.0 - 2017-11-01
 *
 * Copyright (c) 2017 The angular-translate team, Pascal Precht; Licensed MIT
 */
!function(t,e){"function"==typeof define&&define.amd?define([],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():e()}(0,function(){function t(t){"use strict";var e;if(1===angular.version.major&&angular.version.minor>=4){var n=t.get("$cookies");e={get:function(t){return n.get(t)},put:function(t,e){n.put(t,e)}}}else{var o=t.get("$cookieStore");e={get:function(t){return o.get(t)},put:function(t,e){o.put(t,e)}}}return{get:function(t){return e.get(t)},set:function(t,n){e.put(t,n)},put:function(t,n){e.put(t,n)}}}return t.$inject=["$injector"],angular.module("pascalprecht.translate").factory("$translateCookieStorage",t),t.displayName="$translateCookieStorage","pascalprecht.translate"});
src/main/webapp/bower_components/angular-translate-storage-cookie/bower.json
New file
@@ -0,0 +1,13 @@
{
  "name": "angular-translate-storage-cookie",
  "description": "A plugin for Angular Translate",
  "version": "2.16.0",
  "main": "./angular-translate-storage-cookie.js",
  "ignore": [],
  "author": "Pascal Precht",
  "license": "MIT",
  "dependencies": {
    "angular-translate": "~2.16.0",
    "angular-cookies": ">=1.2.26 <1.7"
  }
}
src/main/webapp/bower_components/angular-translate-storage-cookie/package.json
New file
@@ -0,0 +1,26 @@
{
  "name": "angular-translate-storage-cookie",
  "version": "2.16.0",
  "description": "Abstraction layer for cookieStore. This service is used when telling angular-translate to use cookieStore as storage.",
  "main": "angular-translate-storage-cookie.js",
  "repository": {
    "type": "git",
    "url": "https://github.com/angular-translate/bower-angular-translate-storage-cookie.git"
  },
  "keywords": [
    "angular",
    "translate",
    "storage",
    "cookies"
  ],
  "author": "Pascal Precht",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/angular-translate/angular-translate/issues"
  },
  "homepage": "https://angular-translate.github.io",
  "dependencies": {
    "angular-translate": "~2.16.0",
    "angular-cookies": ">=1.2.26 <1.7"
  }
}
src/main/webapp/bower_components/angular-translate/.bower.json
New file
@@ -0,0 +1,22 @@
{
  "name": "angular-translate",
  "description": "A translation module for AngularJS",
  "version": "2.16.0",
  "main": "./angular-translate.js",
  "ignore": [],
  "author": "Pascal Precht",
  "license": "MIT",
  "dependencies": {
    "angular": ">=1.2.26 <1.7"
  },
  "homepage": "https://github.com/PascalPrecht/bower-angular-translate",
  "_release": "2.16.0",
  "_resolution": {
    "type": "version",
    "tag": "2.16.0",
    "commit": "4e6c7fdcef6362e95a9faa615e72822a4290a03e"
  },
  "_source": "https://github.com/PascalPrecht/bower-angular-translate.git",
  "_target": "~2.16.0",
  "_originalSource": "angular-translate"
}
src/main/webapp/bower_components/angular-translate/README.md
New file
@@ -0,0 +1,23 @@
# angular-translate (bower shadow repository)
This is the _Bower shadow_ repository for *angular-translate*.
## Bugs and issues
Please file any issues and bugs in our main repository at [angular-translate/angular-translate](https://github.com/angular-translate/angular-translate/issues).
## Usage
### via Bower
```bash
$ bower install angular-translate
```
### via cdnjs
Please have a look at https://cdnjs.com/libraries/angular-translate for specific versions.
## License
Licensed under MIT. See more details at [angular-translate/angular-translate](https://github.com/angular-translate/angular-translate).
src/main/webapp/bower_components/angular-translate/angular-translate.js
New file
@@ -0,0 +1,3758 @@
/*!
 * angular-translate - v2.16.0 - 2017-11-01
 *
 * Copyright (c) 2017 The angular-translate team, Pascal Precht; Licensed MIT
 */
(function (root, factory) {
  if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module unless amdModuleId is set
    define([], function () {
      return (factory());
    });
  } else if (typeof module === 'object' && module.exports) {
    // Node. Does not work with strict CommonJS, but
    // only CommonJS-like environments that support module.exports,
    // like Node.
    module.exports = factory();
  } else {
    factory();
  }
}(this, function () {
/**
 * @ngdoc overview
 * @name pascalprecht.translate
 *
 * @description
 * The main module which holds everything together.
 */
runTranslate.$inject = ['$translate'];
$translate.$inject = ['$STORAGE_KEY', '$windowProvider', '$translateSanitizationProvider', 'pascalprechtTranslateOverrider'];
$translateDefaultInterpolation.$inject = ['$interpolate', '$translateSanitization'];
translateDirective.$inject = ['$translate', '$interpolate', '$compile', '$parse', '$rootScope'];
translateAttrDirective.$inject = ['$translate', '$rootScope'];
translateCloakDirective.$inject = ['$translate', '$rootScope'];
translateFilterFactory.$inject = ['$parse', '$translate'];
$translationCache.$inject = ['$cacheFactory'];
angular.module('pascalprecht.translate', ['ng'])
  .run(runTranslate);
function runTranslate($translate) {
  'use strict';
  var key = $translate.storageKey(),
    storage = $translate.storage();
  var fallbackFromIncorrectStorageValue = function () {
    var preferred = $translate.preferredLanguage();
    if (angular.isString(preferred)) {
      $translate.use(preferred);
      // $translate.use() will also remember the language.
      // So, we don't need to call storage.put() here.
    } else {
      storage.put(key, $translate.use());
    }
  };
  fallbackFromIncorrectStorageValue.displayName = 'fallbackFromIncorrectStorageValue';
  if (storage) {
    if (!storage.get(key)) {
      fallbackFromIncorrectStorageValue();
    } else {
      $translate.use(storage.get(key))['catch'](fallbackFromIncorrectStorageValue);
    }
  } else if (angular.isString($translate.preferredLanguage())) {
    $translate.use($translate.preferredLanguage());
  }
}
runTranslate.displayName = 'runTranslate';
/**
 * @ngdoc object
 * @name pascalprecht.translate.$translateSanitizationProvider
 *
 * @description
 *
 * Configurations for $translateSanitization
 */
angular.module('pascalprecht.translate').provider('$translateSanitization', $translateSanitizationProvider);
function $translateSanitizationProvider () {
  'use strict';
  var $sanitize,
      $sce,
      currentStrategy = null, // TODO change to either 'sanitize', 'escape' or ['sanitize', 'escapeParameters'] in 3.0.
      hasConfiguredStrategy = false,
      hasShownNoStrategyConfiguredWarning = false,
      strategies;
  /**
   * Definition of a sanitization strategy function
   * @callback StrategyFunction
   * @param {string|object} value - value to be sanitized (either a string or an interpolated value map)
   * @param {string} mode - either 'text' for a string (translation) or 'params' for the interpolated params
   * @return {string|object}
   */
  /**
   * @ngdoc property
   * @name strategies
   * @propertyOf pascalprecht.translate.$translateSanitizationProvider
   *
   * @description
   * Following strategies are built-in:
   * <dl>
   *   <dt>sanitize</dt>
   *   <dd>Sanitizes HTML in the translation text using $sanitize</dd>
   *   <dt>escape</dt>
   *   <dd>Escapes HTML in the translation</dd>
   *   <dt>sanitizeParameters</dt>
   *   <dd>Sanitizes HTML in the values of the interpolation parameters using $sanitize</dd>
   *   <dt>escapeParameters</dt>
   *   <dd>Escapes HTML in the values of the interpolation parameters</dd>
   *   <dt>escaped</dt>
   *   <dd>Support legacy strategy name 'escaped' for backwards compatibility (will be removed in 3.0)</dd>
   * </dl>
   *
   */
  strategies = {
    sanitize: function (value, mode/*, context*/) {
      if (mode === 'text') {
        value = htmlSanitizeValue(value);
      }
      return value;
    },
    escape: function (value, mode/*, context*/) {
      if (mode === 'text') {
        value = htmlEscapeValue(value);
      }
      return value;
    },
    sanitizeParameters: function (value, mode/*, context*/) {
      if (mode === 'params') {
        value = mapInterpolationParameters(value, htmlSanitizeValue);
      }
      return value;
    },
    escapeParameters: function (value, mode/*, context*/) {
      if (mode === 'params') {
        value = mapInterpolationParameters(value, htmlEscapeValue);
      }
      return value;
    },
    sce: function (value, mode, context) {
      if (mode === 'text') {
        value = htmlTrustValue(value);
      } else if (mode === 'params') {
        if (context !== 'filter') {
          // do html escape in filter context #1101
          value = mapInterpolationParameters(value, htmlEscapeValue);
        }
      }
      return value;
    },
    sceParameters: function (value, mode/*, context*/) {
      if (mode === 'params') {
        value = mapInterpolationParameters(value, htmlTrustValue);
      }
      return value;
    }
  };
  // Support legacy strategy name 'escaped' for backwards compatibility.
  // TODO should be removed in 3.0
  strategies.escaped = strategies.escapeParameters;
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateSanitizationProvider#addStrategy
   * @methodOf pascalprecht.translate.$translateSanitizationProvider
   *
   * @description
   * Adds a sanitization strategy to the list of known strategies.
   *
   * @param {string} strategyName - unique key for a strategy
   * @param {StrategyFunction} strategyFunction - strategy function
   * @returns {object} this
   */
  this.addStrategy = function (strategyName, strategyFunction) {
    strategies[strategyName] = strategyFunction;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateSanitizationProvider#removeStrategy
   * @methodOf pascalprecht.translate.$translateSanitizationProvider
   *
   * @description
   * Removes a sanitization strategy from the list of known strategies.
   *
   * @param {string} strategyName - unique key for a strategy
   * @returns {object} this
   */
  this.removeStrategy = function (strategyName) {
    delete strategies[strategyName];
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateSanitizationProvider#useStrategy
   * @methodOf pascalprecht.translate.$translateSanitizationProvider
   *
   * @description
   * Selects a sanitization strategy. When an array is provided the strategies will be executed in order.
   *
   * @param {string|StrategyFunction|array} strategy The sanitization strategy / strategies which should be used. Either a name of an existing strategy, a custom strategy function, or an array consisting of multiple names and / or custom functions.
   * @returns {object} this
   */
  this.useStrategy = function (strategy) {
    hasConfiguredStrategy = true;
    currentStrategy = strategy;
    return this;
  };
  /**
   * @ngdoc object
   * @name pascalprecht.translate.$translateSanitization
   * @requires $injector
   * @requires $log
   *
   * @description
   * Sanitizes interpolation parameters and translated texts.
   *
   */
  this.$get = ['$injector', '$log', function ($injector, $log) {
    var cachedStrategyMap = {};
    var applyStrategies = function (value, mode, context, selectedStrategies) {
      angular.forEach(selectedStrategies, function (selectedStrategy) {
        if (angular.isFunction(selectedStrategy)) {
          value = selectedStrategy(value, mode, context);
        } else if (angular.isFunction(strategies[selectedStrategy])) {
          value = strategies[selectedStrategy](value, mode, context);
        } else if (angular.isString(strategies[selectedStrategy])) {
          if (!cachedStrategyMap[strategies[selectedStrategy]]) {
            try {
              cachedStrategyMap[strategies[selectedStrategy]] = $injector.get(strategies[selectedStrategy]);
            } catch (e) {
              cachedStrategyMap[strategies[selectedStrategy]] = function() {};
              throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \'' + selectedStrategy + '\'');
            }
          }
          value = cachedStrategyMap[strategies[selectedStrategy]](value, mode, context);
        } else {
          throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \'' + selectedStrategy + '\'');
        }
      });
      return value;
    };
    // TODO: should be removed in 3.0
    var showNoStrategyConfiguredWarning = function () {
      if (!hasConfiguredStrategy && !hasShownNoStrategyConfiguredWarning) {
        $log.warn('pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details.');
        hasShownNoStrategyConfiguredWarning = true;
      }
    };
    if ($injector.has('$sanitize')) {
      $sanitize = $injector.get('$sanitize');
    }
    if ($injector.has('$sce')) {
      $sce = $injector.get('$sce');
    }
    return {
      /**
       * @ngdoc function
       * @name pascalprecht.translate.$translateSanitization#useStrategy
       * @methodOf pascalprecht.translate.$translateSanitization
       *
       * @description
       * Selects a sanitization strategy. When an array is provided the strategies will be executed in order.
       *
       * @param {string|StrategyFunction|array} strategy The sanitization strategy / strategies which should be used. Either a name of an existing strategy, a custom strategy function, or an array consisting of multiple names and / or custom functions.
       */
      useStrategy: (function (self) {
        return function (strategy) {
          self.useStrategy(strategy);
        };
      })(this),
      /**
       * @ngdoc function
       * @name pascalprecht.translate.$translateSanitization#sanitize
       * @methodOf pascalprecht.translate.$translateSanitization
       *
       * @description
       * Sanitizes a value.
       *
       * @param {string|object} value The value which should be sanitized.
       * @param {string} mode The current sanitization mode, either 'params' or 'text'.
       * @param {string|StrategyFunction|array} [strategy] Optional custom strategy which should be used instead of the currently selected strategy.
       * @param {string} [context] The context of this call: filter, service. Default is service
       * @returns {string|object} sanitized value
       */
      sanitize: function (value, mode, strategy, context) {
        if (!currentStrategy) {
          showNoStrategyConfiguredWarning();
        }
        if (!strategy && strategy !== null) {
          strategy = currentStrategy;
        }
        if (!strategy) {
          return value;
        }
        if (!context) {
          context = 'service';
        }
        var selectedStrategies = angular.isArray(strategy) ? strategy : [strategy];
        return applyStrategies(value, mode, context, selectedStrategies);
      }
    };
  }];
  var htmlEscapeValue = function (value) {
    var element = angular.element('<div></div>');
    element.text(value); // not chainable, see #1044
    return element.html();
  };
  var htmlSanitizeValue = function (value) {
    if (!$sanitize) {
      throw new Error('pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as \'escape\'.');
    }
    return $sanitize(value);
  };
  var htmlTrustValue = function (value) {
    if (!$sce) {
      throw new Error('pascalprecht.translate.$translateSanitization: Error cannot find $sce service.');
    }
    return $sce.trustAsHtml(value);
  };
  var mapInterpolationParameters = function (value, iteratee, stack) {
    if (angular.isDate(value)) {
      return value;
    } else if (angular.isObject(value)) {
      var result = angular.isArray(value) ? [] : {};
      if (!stack) {
        stack = [];
      } else {
        if (stack.indexOf(value) > -1) {
          throw new Error('pascalprecht.translate.$translateSanitization: Error cannot interpolate parameter due recursive object');
        }
      }
      stack.push(value);
      angular.forEach(value, function (propertyValue, propertyKey) {
        /* Skipping function properties. */
        if (angular.isFunction(propertyValue)) {
          return;
        }
        result[propertyKey] = mapInterpolationParameters(propertyValue, iteratee, stack);
      });
      stack.splice(-1, 1); // remove last
      return result;
    } else if (angular.isNumber(value)) {
      return value;
    } else if (value === true || value === false) {
      return value;
    } else if (!angular.isUndefined(value) && value !== null) {
      return iteratee(value);
    } else {
      return value;
    }
  };
}
/**
 * @ngdoc object
 * @name pascalprecht.translate.$translateProvider
 * @description
 *
 * $translateProvider allows developers to register translation-tables, asynchronous loaders
 * and similar to configure translation behavior directly inside of a module.
 *
 */
angular.module('pascalprecht.translate')
  .constant('pascalprechtTranslateOverrider', {})
  .provider('$translate', $translate);
function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvider, pascalprechtTranslateOverrider) {
  'use strict';
  var $translationTable = {},
    $preferredLanguage,
    $availableLanguageKeys = [],
    $languageKeyAliases,
    $fallbackLanguage,
    $fallbackWasString,
    $uses,
    $nextLang,
    $storageFactory,
    $storageKey = $STORAGE_KEY,
    $storagePrefix,
    $missingTranslationHandlerFactory,
    $interpolationFactory,
    $interpolatorFactories = [],
    $loaderFactory,
    $cloakClassName = 'translate-cloak',
    $loaderOptions,
    $notFoundIndicatorLeft,
    $notFoundIndicatorRight,
    $postCompilingEnabled = false,
    $forceAsyncReloadEnabled = false,
    $nestedObjectDelimeter = '.',
    $isReady = false,
    $keepContent = false,
    loaderCache,
    directivePriority = 0,
    statefulFilter = true,
    postProcessFn,
    uniformLanguageTagResolver = 'default',
    languageTagResolver = {
      'default' : function (tag) {
        return (tag || '').split('-').join('_');
      },
      java : function (tag) {
        var temp = (tag || '').split('-').join('_');
        var parts = temp.split('_');
        return parts.length > 1 ? (parts[0].toLowerCase() + '_' + parts[1].toUpperCase()) : temp;
      },
      bcp47 : function (tag) {
        var temp = (tag || '').split('_').join('-');
        var parts = temp.split('-');
        return parts.length > 1 ? (parts[0].toLowerCase() + '-' + parts[1].toUpperCase()) : temp;
      },
      'iso639-1' : function (tag) {
        var temp = (tag || '').split('_').join('-');
        var parts = temp.split('-');
        return parts[0].toLowerCase();
      }
    };
  var version = '2.16.0';
  // tries to determine the browsers language
  var getFirstBrowserLanguage = function () {
    // internal purpose only
    if (angular.isFunction(pascalprechtTranslateOverrider.getLocale)) {
      return pascalprechtTranslateOverrider.getLocale();
    }
    var nav = $windowProvider.$get().navigator,
      browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'],
      i,
      language;
    // support for HTML 5.1 "navigator.languages"
    if (angular.isArray(nav.languages)) {
      for (i = 0; i < nav.languages.length; i++) {
        language = nav.languages[i];
        if (language && language.length) {
          return language;
        }
      }
    }
    // support for other well known properties in browsers
    for (i = 0; i < browserLanguagePropertyKeys.length; i++) {
      language = nav[browserLanguagePropertyKeys[i]];
      if (language && language.length) {
        return language;
      }
    }
    return null;
  };
  getFirstBrowserLanguage.displayName = 'angular-translate/service: getFirstBrowserLanguage';
  // tries to determine the browsers locale
  var getLocale = function () {
    var locale = getFirstBrowserLanguage() || '';
    if (languageTagResolver[uniformLanguageTagResolver]) {
      locale = languageTagResolver[uniformLanguageTagResolver](locale);
    }
    return locale;
  };
  getLocale.displayName = 'angular-translate/service: getLocale';
  /**
   * @name indexOf
   * @private
   *
   * @description
   * indexOf polyfill. Kinda sorta.
   *
   * @param {array} array Array to search in.
   * @param {string} searchElement Element to search for.
   *
   * @returns {int} Index of search element.
   */
  var indexOf = function (array, searchElement) {
    for (var i = 0, len = array.length; i < len; i++) {
      if (array[i] === searchElement) {
        return i;
      }
    }
    return -1;
  };
  /**
   * @name trim
   * @private
   *
   * @description
   * trim polyfill
   *
   * @returns {string} The string stripped of whitespace from both ends
   */
  var trim = function () {
    return this.toString().replace(/^\s+|\s+$/g, '');
  };
  /**
   * @name lowercase
   * @private
   *
   * @description
   * Return the lowercase string only if the type is string
   *
   * @returns {string} The string all in lowercase
   */
  var lowercase = function (string) {
    return angular.isString(string) ? string.toLowerCase() : string;
  };
  var negotiateLocale = function (preferred) {
    if (!preferred) {
      return;
    }
    var avail = [],
      locale = lowercase(preferred),
      i = 0,
      n = $availableLanguageKeys.length;
    for (; i < n; i++) {
      avail.push(lowercase($availableLanguageKeys[i]));
    }
    // Check for an exact match in our list of available keys
    i = indexOf(avail, locale);
    if (i > -1) {
      return $availableLanguageKeys[i];
    }
    if ($languageKeyAliases) {
      var alias;
      for (var langKeyAlias in $languageKeyAliases) {
        if ($languageKeyAliases.hasOwnProperty(langKeyAlias)) {
          var hasWildcardKey = false;
          var hasExactKey = Object.prototype.hasOwnProperty.call($languageKeyAliases, langKeyAlias) &&
            lowercase(langKeyAlias) === lowercase(preferred);
          if (langKeyAlias.slice(-1) === '*') {
            hasWildcardKey = lowercase(langKeyAlias.slice(0, -1)) === lowercase(preferred.slice(0, langKeyAlias.length - 1));
          }
          if (hasExactKey || hasWildcardKey) {
            alias = $languageKeyAliases[langKeyAlias];
            if (indexOf(avail, lowercase(alias)) > -1) {
              return alias;
            }
          }
        }
      }
    }
    // Check for a language code without region
    var parts = preferred.split('_');
    if (parts.length > 1 && indexOf(avail, lowercase(parts[0])) > -1) {
      return parts[0];
    }
    // If everything fails, return undefined.
    return;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#translations
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Registers a new translation table for specific language key.
   *
   * To register a translation table for specific language, pass a defined language
   * key as first parameter.
   *
   * <pre>
   *  // register translation table for language: 'de_DE'
   *  $translateProvider.translations('de_DE', {
   *    'GREETING': 'Hallo Welt!'
   *  });
   *
   *  // register another one
   *  $translateProvider.translations('en_US', {
   *    'GREETING': 'Hello world!'
   *  });
   * </pre>
   *
   * When registering multiple translation tables for for the same language key,
   * the actual translation table gets extended. This allows you to define module
   * specific translation which only get added, once a specific module is loaded in
   * your app.
   *
   * Invoking this method with no arguments returns the translation table which was
   * registered with no language key. Invoking it with a language key returns the
   * related translation table.
   *
   * @param {string} langKey A language key.
   * @param {object} translationTable A plain old JavaScript object that represents a translation table.
   *
   */
  var translations = function (langKey, translationTable) {
    if (!langKey && !translationTable) {
      return $translationTable;
    }
    if (langKey && !translationTable) {
      if (angular.isString(langKey)) {
        return $translationTable[langKey];
      }
    } else {
      if (!angular.isObject($translationTable[langKey])) {
        $translationTable[langKey] = {};
      }
      angular.extend($translationTable[langKey], flatObject(translationTable));
    }
    return this;
  };
  this.translations = translations;
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#cloakClassName
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   *
   * Let's you change the class name for `translate-cloak` directive.
   * Default class name is `translate-cloak`.
   *
   * @param {string} name translate-cloak class name
   */
  this.cloakClassName = function (name) {
    if (!name) {
      return $cloakClassName;
    }
    $cloakClassName = name;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#nestedObjectDelimeter
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   *
   * Let's you change the delimiter for namespaced translations.
   * Default delimiter is `.`.
   *
   * @param {string} delimiter namespace separator
   */
  this.nestedObjectDelimeter = function (delimiter) {
    if (!delimiter) {
      return $nestedObjectDelimeter;
    }
    $nestedObjectDelimeter = delimiter;
    return this;
  };
  /**
   * @name flatObject
   * @private
   *
   * @description
   * Flats an object. This function is used to flatten given translation data with
   * namespaces, so they are later accessible via dot notation.
   */
  var flatObject = function (data, path, result, prevKey) {
    var key, keyWithPath, keyWithShortPath, val;
    if (!path) {
      path = [];
    }
    if (!result) {
      result = {};
    }
    for (key in data) {
      if (!Object.prototype.hasOwnProperty.call(data, key)) {
        continue;
      }
      val = data[key];
      if (angular.isObject(val)) {
        flatObject(val, path.concat(key), result, key);
      } else {
        keyWithPath = path.length ? ('' + path.join($nestedObjectDelimeter) + $nestedObjectDelimeter + key) : key;
        if (path.length && key === prevKey) {
          // Create shortcut path (foo.bar == foo.bar.bar)
          keyWithShortPath = '' + path.join($nestedObjectDelimeter);
          // Link it to original path
          result[keyWithShortPath] = '@:' + keyWithPath;
        }
        result[keyWithPath] = val;
      }
    }
    return result;
  };
  flatObject.displayName = 'flatObject';
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#addInterpolation
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Adds interpolation services to angular-translate, so it can manage them.
   *
   * @param {object} factory Interpolation service factory
   */
  this.addInterpolation = function (factory) {
    $interpolatorFactories.push(factory);
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useMessageFormatInterpolation
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to use interpolation functionality of messageformat.js.
   * This is useful when having high level pluralization and gender selection.
   */
  this.useMessageFormatInterpolation = function () {
    return this.useInterpolation('$translateMessageFormatInterpolation');
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useInterpolation
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate which interpolation style to use as default, application-wide.
   * Simply pass a factory/service name. The interpolation service has to implement
   * the correct interface.
   *
   * @param {string} factory Interpolation service name.
   */
  this.useInterpolation = function (factory) {
    $interpolationFactory = factory;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useSanitizeStrategy
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Simply sets a sanitation strategy type.
   *
   * @param {string} value Strategy type.
   */
  this.useSanitizeValueStrategy = function (value) {
    $translateSanitizationProvider.useStrategy(value);
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#preferredLanguage
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells the module which of the registered translation tables to use for translation
   * at initial startup by passing a language key. Similar to `$translateProvider#use`
   * only that it says which language to **prefer**.
   * It is recommended to call this after {@link pascalprecht.translate.$translate#fallbackLanguage fallbackLanguage()}.
   *
   * @param {string} langKey A language key.
   */
  this.preferredLanguage = function (langKey) {
    if (langKey) {
      setupPreferredLanguage(langKey);
      return this;
    }
    return $preferredLanguage;
  };
  var setupPreferredLanguage = function (langKey) {
    if (langKey) {
      $preferredLanguage = langKey;
    }
    return $preferredLanguage;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicator
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Sets an indicator which is used when a translation isn't found. E.g. when
   * setting the indicator as 'X' and one tries to translate a translation id
   * called `NOT_FOUND`, this will result in `X NOT_FOUND X`.
   *
   * Internally this methods sets a left indicator and a right indicator using
   * `$translateProvider.translationNotFoundIndicatorLeft()` and
   * `$translateProvider.translationNotFoundIndicatorRight()`.
   *
   * **Note**: These methods automatically add a whitespace between the indicators
   * and the translation id.
   *
   * @param {string} indicator An indicator, could be any string.
   */
  this.translationNotFoundIndicator = function (indicator) {
    this.translationNotFoundIndicatorLeft(indicator);
    this.translationNotFoundIndicatorRight(indicator);
    return this;
  };
  /**
   * ngdoc function
   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Sets an indicator which is used when a translation isn't found left to the
   * translation id.
   *
   * @param {string} indicator An indicator.
   */
  this.translationNotFoundIndicatorLeft = function (indicator) {
    if (!indicator) {
      return $notFoundIndicatorLeft;
    }
    $notFoundIndicatorLeft = indicator;
    return this;
  };
  /**
   * ngdoc function
   * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Sets an indicator which is used when a translation isn't found right to the
   * translation id.
   *
   * @param {string} indicator An indicator.
   */
  this.translationNotFoundIndicatorRight = function (indicator) {
    if (!indicator) {
      return $notFoundIndicatorRight;
    }
    $notFoundIndicatorRight = indicator;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#fallbackLanguage
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells the module which of the registered translation tables to use when missing translations
   * at initial startup by passing a language key. Similar to `$translateProvider#use`
   * only that it says which language to **fallback**.
   *
   * @param {string||array} langKey A language key.
   *
   */
  this.fallbackLanguage = function (langKey) {
    fallbackStack(langKey);
    return this;
  };
  var fallbackStack = function (langKey) {
    if (langKey) {
      if (angular.isString(langKey)) {
        $fallbackWasString = true;
        $fallbackLanguage = [langKey];
      } else if (angular.isArray(langKey)) {
        $fallbackWasString = false;
        $fallbackLanguage = langKey;
      }
      if (angular.isString($preferredLanguage) && indexOf($fallbackLanguage, $preferredLanguage) < 0) {
        $fallbackLanguage.push($preferredLanguage);
      }
      return this;
    } else {
      if ($fallbackWasString) {
        return $fallbackLanguage[0];
      } else {
        return $fallbackLanguage;
      }
    }
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#use
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Set which translation table to use for translation by given language key. When
   * trying to 'use' a language which isn't provided, it'll throw an error.
   *
   * You actually don't have to use this method since `$translateProvider#preferredLanguage`
   * does the job too.
   *
   * @param {string} langKey A language key.
   */
  this.use = function (langKey) {
    if (langKey) {
      if (!$translationTable[langKey] && (!$loaderFactory)) {
        // only throw an error, when not loading translation data asynchronously
        throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\'');
      }
      $uses = langKey;
      return this;
    }
    return $uses;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#resolveClientLocale
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * This returns the current browser/client's language key. The result is processed with the configured uniform tag resolver.
   *
   * @returns {string} the current client/browser language key
   */
  this.resolveClientLocale = function () {
    return getLocale();
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#storageKey
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells the module which key must represent the choosed language by a user in the storage.
   *
   * @param {string} key A key for the storage.
   */
  var storageKey = function (key) {
    if (!key) {
      if ($storagePrefix) {
        return $storagePrefix + $storageKey;
      }
      return $storageKey;
    }
    $storageKey = key;
    return this;
  };
  this.storageKey = storageKey;
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useUrlLoader
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to use `$translateUrlLoader` extension service as loader.
   *
   * @param {string} url Url
   * @param {Object=} options Optional configuration object
   */
  this.useUrlLoader = function (url, options) {
    return this.useLoader('$translateUrlLoader', angular.extend({url : url}, options));
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useStaticFilesLoader
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to use `$translateStaticFilesLoader` extension service as loader.
   *
   * @param {Object=} options Optional configuration object
   */
  this.useStaticFilesLoader = function (options) {
    return this.useLoader('$translateStaticFilesLoader', options);
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useLoader
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to use any other service as loader.
   *
   * @param {string} loaderFactory Factory name to use
   * @param {Object=} options Optional configuration object
   */
  this.useLoader = function (loaderFactory, options) {
    $loaderFactory = loaderFactory;
    $loaderOptions = options || {};
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useLocalStorage
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to use `$translateLocalStorage` service as storage layer.
   *
   */
  this.useLocalStorage = function () {
    return this.useStorage('$translateLocalStorage');
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useCookieStorage
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to use `$translateCookieStorage` service as storage layer.
   */
  this.useCookieStorage = function () {
    return this.useStorage('$translateCookieStorage');
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useStorage
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to use custom service as storage layer.
   */
  this.useStorage = function (storageFactory) {
    $storageFactory = storageFactory;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#storagePrefix
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Sets prefix for storage key.
   *
   * @param {string} prefix Storage key prefix
   */
  this.storagePrefix = function (prefix) {
    if (!prefix) {
      return prefix;
    }
    $storagePrefix = prefix;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandlerLog
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to use built-in log handler when trying to translate
   * a translation Id which doesn't exist.
   *
   * This is actually a shortcut method for `useMissingTranslationHandler()`.
   *
   */
  this.useMissingTranslationHandlerLog = function () {
    return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog');
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandler
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Expects a factory name which later gets instantiated with `$injector`.
   * This method can be used to tell angular-translate to use a custom
   * missingTranslationHandler. Just build a factory which returns a function
   * and expects a translation id as argument.
   *
   * Example:
   * <pre>
   *  app.config(function ($translateProvider) {
   *    $translateProvider.useMissingTranslationHandler('customHandler');
   *  });
   *
   *  app.factory('customHandler', function (dep1, dep2) {
   *    return function (translationId) {
   *      // something with translationId and dep1 and dep2
   *    };
   *  });
   * </pre>
   *
   * @param {string} factory Factory name
   */
  this.useMissingTranslationHandler = function (factory) {
    $missingTranslationHandlerFactory = factory;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#usePostCompiling
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * If post compiling is enabled, all translated values will be processed
   * again with AngularJS' $compile.
   *
   * Example:
   * <pre>
   *  app.config(function ($translateProvider) {
   *    $translateProvider.usePostCompiling(true);
   *  });
   * </pre>
   *
   * @param {string} factory Factory name
   */
  this.usePostCompiling = function (value) {
    $postCompilingEnabled = !(!value);
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#forceAsyncReload
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * If force async reload is enabled, async loader will always be called
   * even if $translationTable already contains the language key, adding
   * possible new entries to the $translationTable.
   *
   * Example:
   * <pre>
   *  app.config(function ($translateProvider) {
   *    $translateProvider.forceAsyncReload(true);
   *  });
   * </pre>
   *
   * @param {boolean} value - valid values are true or false
   */
  this.forceAsyncReload = function (value) {
    $forceAsyncReloadEnabled = !(!value);
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#uniformLanguageTag
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate which language tag should be used as a result when determining
   * the current browser language.
   *
   * This setting must be set before invoking {@link pascalprecht.translate.$translateProvider#methods_determinePreferredLanguage determinePreferredLanguage()}.
   *
   * <pre>
   * $translateProvider
   *   .uniformLanguageTag('bcp47')
   *   .determinePreferredLanguage()
   * </pre>
   *
   * The resolver currently supports:
   * * default
   *     (traditionally: hyphens will be converted into underscores, i.e. en-US => en_US)
   *     en-US => en_US
   *     en_US => en_US
   *     en-us => en_us
   * * java
   *     like default, but the second part will be always in uppercase
   *     en-US => en_US
   *     en_US => en_US
   *     en-us => en_US
   * * BCP 47 (RFC 4646 & 4647)
   *     en-US => en-US
   *     en_US => en-US
   *     en-us => en-US
   *
   * See also:
   * * http://en.wikipedia.org/wiki/IETF_language_tag
   * * http://www.w3.org/International/core/langtags/
   * * http://tools.ietf.org/html/bcp47
   *
   * @param {string|object} options - options (or standard)
   * @param {string} options.standard - valid values are 'default', 'bcp47', 'java'
   */
  this.uniformLanguageTag = function (options) {
    if (!options) {
      options = {};
    } else if (angular.isString(options)) {
      options = {
        standard : options
      };
    }
    uniformLanguageTagResolver = options.standard;
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#determinePreferredLanguage
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Tells angular-translate to try to determine on its own which language key
   * to set as preferred language. When `fn` is given, angular-translate uses it
   * to determine a language key, otherwise it uses the built-in `getLocale()`
   * method.
   *
   * The `getLocale()` returns a language key in the format `[lang]_[country]` or
   * `[lang]` depending on what the browser provides.
   *
   * Use this method at your own risk, since not all browsers return a valid
   * locale (see {@link pascalprecht.translate.$translateProvider#methods_uniformLanguageTag uniformLanguageTag()}).
   *
   * @param {Function=} fn Function to determine a browser's locale
   */
  this.determinePreferredLanguage = function (fn) {
    var locale = (fn && angular.isFunction(fn)) ? fn() : getLocale();
    if (!$availableLanguageKeys.length) {
      $preferredLanguage = locale;
    } else {
      $preferredLanguage = negotiateLocale(locale) || locale;
    }
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#registerAvailableLanguageKeys
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Registers a set of language keys the app will work with. Use this method in
   * combination with
   * {@link pascalprecht.translate.$translateProvider#determinePreferredLanguage determinePreferredLanguage}.
   * When available languages keys are registered, angular-translate
   * tries to find the best fitting language key depending on the browsers locale,
   * considering your language key convention.
   *
   * @param {object} languageKeys Array of language keys the your app will use
   * @param {object=} aliases Alias map.
   */
  this.registerAvailableLanguageKeys = function (languageKeys, aliases) {
    if (languageKeys) {
      $availableLanguageKeys = languageKeys;
      if (aliases) {
        $languageKeyAliases = aliases;
      }
      return this;
    }
    return $availableLanguageKeys;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#useLoaderCache
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Registers a cache for internal $http based loaders.
   * {@link pascalprecht.translate.$translationCache $translationCache}.
   * When false the cache will be disabled (default). When true or undefined
   * the cache will be a default (see $cacheFactory). When an object it will
   * be treat as a cache object itself: the usage is $http({cache: cache})
   *
   * @param {object} cache boolean, string or cache-object
   */
  this.useLoaderCache = function (cache) {
    if (cache === false) {
      // disable cache
      loaderCache = undefined;
    } else if (cache === true) {
      // enable cache using AJS defaults
      loaderCache = true;
    } else if (typeof(cache) === 'undefined') {
      // enable cache using default
      loaderCache = '$translationCache';
    } else if (cache) {
      // enable cache using given one (see $cacheFactory)
      loaderCache = cache;
    }
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#directivePriority
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Sets the default priority of the translate directive. The standard value is `0`.
   * Calling this function without an argument will return the current value.
   *
   * @param {number} priority for the translate-directive
   */
  this.directivePriority = function (priority) {
    if (priority === undefined) {
      // getter
      return directivePriority;
    } else {
      // setter with chaining
      directivePriority = priority;
      return this;
    }
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#statefulFilter
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * Since AngularJS 1.3, filters which are not stateless (depending at the scope)
   * have to explicit define this behavior.
   * Sets whether the translate filter should be stateful or stateless. The standard value is `true`
   * meaning being stateful.
   * Calling this function without an argument will return the current value.
   *
   * @param {boolean} state - defines the state of the filter
   */
  this.statefulFilter = function (state) {
    if (state === undefined) {
      // getter
      return statefulFilter;
    } else {
      // setter with chaining
      statefulFilter = state;
      return this;
    }
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#postProcess
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * The post processor will be intercept right after the translation result. It can modify the result.
   *
   * @param {object} fn Function or service name (string) to be called after the translation value has been set / resolved. The function itself will enrich every value being processed and then continue the normal resolver process
   */
  this.postProcess = function (fn) {
    if (fn) {
      postProcessFn = fn;
    } else {
      postProcessFn = undefined;
    }
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateProvider#keepContent
   * @methodOf pascalprecht.translate.$translateProvider
   *
   * @description
   * If keepContent is set to true than translate directive will always use innerHTML
   * as a default translation
   *
   * Example:
   * <pre>
   *  app.config(function ($translateProvider) {
   *    $translateProvider.keepContent(true);
   *  });
   * </pre>
   *
   * @param {boolean} value - valid values are true or false
   */
  this.keepContent = function (value) {
    $keepContent = !(!value);
    return this;
  };
  /**
   * @ngdoc object
   * @name pascalprecht.translate.$translate
   * @requires $interpolate
   * @requires $log
   * @requires $rootScope
   * @requires $q
   *
   * @description
   * The `$translate` service is the actual core of angular-translate. It expects a translation id
   * and optional interpolate parameters to translate contents.
   *
   * <pre>
   *  $translate('HEADLINE_TEXT').then(function (translation) {
   *    $scope.translatedText = translation;
   *  });
   * </pre>
   *
   * @param {string|array} translationId A token which represents a translation id
   *                                     This can be optionally an array of translation ids which
   *                                     results that the function returns an object where each key
   *                                     is the translation id and the value the translation.
   * @param {object=} [interpolateParams={}] An object hash for dynamic values
   * @param {string=} [interpolationId=undefined] The id of the interpolation to use (use default unless set via useInterpolation())
   * @param {string=} [defaultTranslationText=undefined] the optional default translation text that is written as
   *                                        as default text in case it is not found in any configured language
   * @param {string=} [forceLanguage=false] A language to be used instead of the current language
   * @param {string=} [sanitizeStrategy=undefined] force sanitize strategy for this call instead of using the configured one (use default unless set)
   * @returns {object} promise
   */
  this.$get = ['$log', '$injector', '$rootScope', '$q', function ($log, $injector, $rootScope, $q) {
    var Storage,
      defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'),
      pendingLoader = false,
      interpolatorHashMap = {},
      langPromises = {},
      fallbackIndex,
      startFallbackIteration;
    var $translate = function (translationId, interpolateParams, interpolationId, defaultTranslationText, forceLanguage, sanitizeStrategy) {
      if (!$uses && $preferredLanguage) {
        $uses = $preferredLanguage;
      }
      var uses = (forceLanguage && forceLanguage !== $uses) ? // we don't want to re-negotiate $uses
        (negotiateLocale(forceLanguage) || forceLanguage) : $uses;
      // Check forceLanguage is present
      if (forceLanguage) {
        loadTranslationsIfMissing(forceLanguage);
      }
      // Duck detection: If the first argument is an array, a bunch of translations was requested.
      // The result is an object.
      if (angular.isArray(translationId)) {
        // Inspired by Q.allSettled by Kris Kowal
        // https://github.com/kriskowal/q/blob/b0fa72980717dc202ffc3cbf03b936e10ebbb9d7/q.js#L1553-1563
        // This transforms all promises regardless resolved or rejected
        var translateAll = function (translationIds) {
          var results = {}; // storing the actual results
          var promises = []; // promises to wait for
          // Wraps the promise a) being always resolved and b) storing the link id->value
          var translate = function (translationId) {
            var deferred = $q.defer();
            var regardless = function (value) {
              results[translationId] = value;
              deferred.resolve([translationId, value]);
            };
            // we don't care whether the promise was resolved or rejected; just store the values
            $translate(translationId, interpolateParams, interpolationId, defaultTranslationText, forceLanguage, sanitizeStrategy).then(regardless, regardless);
            return deferred.promise;
          };
          for (var i = 0, c = translationIds.length; i < c; i++) {
            promises.push(translate(translationIds[i]));
          }
          // wait for all (including storing to results)
          return $q.all(promises).then(function () {
            // return the results
            return results;
          });
        };
        return translateAll(translationId);
      }
      var deferred = $q.defer();
      // trim off any whitespace
      if (translationId) {
        translationId = trim.apply(translationId);
      }
      var promiseToWaitFor = (function () {
        var promise = langPromises[uses] || langPromises[$preferredLanguage];
        fallbackIndex = 0;
        if ($storageFactory && !promise) {
          // looks like there's no pending promise for $preferredLanguage or
          // $uses. Maybe there's one pending for a language that comes from
          // storage.
          var langKey = Storage.get($storageKey);
          promise = langPromises[langKey];
          if ($fallbackLanguage && $fallbackLanguage.length) {
            var index = indexOf($fallbackLanguage, langKey);
            // maybe the language from storage is also defined as fallback language
            // we increase the fallback language index to not search in that language
            // as fallback, since it's probably the first used language
            // in that case the index starts after the first element
            fallbackIndex = (index === 0) ? 1 : 0;
            // but we can make sure to ALWAYS fallback to preferred language at least
            if (indexOf($fallbackLanguage, $preferredLanguage) < 0) {
              $fallbackLanguage.push($preferredLanguage);
            }
          }
        }
        return promise;
      }());
      if (!promiseToWaitFor) {
        // no promise to wait for? okay. Then there's no loader registered
        // nor is a one pending for language that comes from storage.
        // We can just translate.
        determineTranslation(translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy).then(deferred.resolve, deferred.reject);
      } else {
        var promiseResolved = function () {
          // $uses may have changed while waiting
          if (!forceLanguage) {
            uses = $uses;
          }
          determineTranslation(translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy).then(deferred.resolve, deferred.reject);
        };
        promiseResolved.displayName = 'promiseResolved';
        promiseToWaitFor['finally'](promiseResolved)['catch'](angular.noop); // we don't care about errors here, already handled
      }
      return deferred.promise;
    };
    /**
     * @name applyNotFoundIndicators
     * @private
     *
     * @description
     * Applies not fount indicators to given translation id, if needed.
     * This function gets only executed, if a translation id doesn't exist,
     * which is why a translation id is expected as argument.
     *
     * @param {string} translationId Translation id.
     * @returns {string} Same as given translation id but applied with not found
     * indicators.
     */
    var applyNotFoundIndicators = function (translationId) {
      // applying notFoundIndicators
      if ($notFoundIndicatorLeft) {
        translationId = [$notFoundIndicatorLeft, translationId].join(' ');
      }
      if ($notFoundIndicatorRight) {
        translationId = [translationId, $notFoundIndicatorRight].join(' ');
      }
      return translationId;
    };
    /**
     * @name useLanguage
     * @private
     *
     * @description
     * Makes actual use of a language by setting a given language key as used
     * language and informs registered interpolators to also use the given
     * key as locale.
     *
     * @param {string} key Locale key.
     */
    var useLanguage = function (key) {
      $uses = key;
      // make sure to store new language key before triggering success event
      if ($storageFactory) {
        Storage.put($translate.storageKey(), $uses);
      }
      $rootScope.$emit('$translateChangeSuccess', {language : key});
      // inform default interpolator
      defaultInterpolator.setLocale($uses);
      var eachInterpolator = function (interpolator, id) {
        interpolatorHashMap[id].setLocale($uses);
      };
      eachInterpolator.displayName = 'eachInterpolatorLocaleSetter';
      // inform all others too!
      angular.forEach(interpolatorHashMap, eachInterpolator);
      $rootScope.$emit('$translateChangeEnd', {language : key});
    };
    /**
     * @name loadAsync
     * @private
     *
     * @description
     * Kicks off registered async loader using `$injector` and applies existing
     * loader options. When resolved, it updates translation tables accordingly
     * or rejects with given language key.
     *
     * @param {string} key Language key.
     * @return {Promise} A promise.
     */
    var loadAsync = function (key) {
      if (!key) {
        throw 'No language key specified for loading.';
      }
      var deferred = $q.defer();
      $rootScope.$emit('$translateLoadingStart', {language : key});
      pendingLoader = true;
      var cache = loaderCache;
      if (typeof(cache) === 'string') {
        // getting on-demand instance of loader
        cache = $injector.get(cache);
      }
      var loaderOptions = angular.extend({}, $loaderOptions, {
        key : key,
        $http : angular.extend({}, {
          cache : cache
        }, $loaderOptions.$http)
      });
      var onLoaderSuccess = function (data) {
        var translationTable = {};
        $rootScope.$emit('$translateLoadingSuccess', {language : key});
        if (angular.isArray(data)) {
          angular.forEach(data, function (table) {
            angular.extend(translationTable, flatObject(table));
          });
        } else {
          angular.extend(translationTable, flatObject(data));
        }
        pendingLoader = false;
        deferred.resolve({
          key : key,
          table : translationTable
        });
        $rootScope.$emit('$translateLoadingEnd', {language : key});
      };
      onLoaderSuccess.displayName = 'onLoaderSuccess';
      var onLoaderError = function (key) {
        $rootScope.$emit('$translateLoadingError', {language : key});
        deferred.reject(key);
        $rootScope.$emit('$translateLoadingEnd', {language : key});
      };
      onLoaderError.displayName = 'onLoaderError';
      $injector.get($loaderFactory)(loaderOptions)
        .then(onLoaderSuccess, onLoaderError);
      return deferred.promise;
    };
    if ($storageFactory) {
      Storage = $injector.get($storageFactory);
      if (!Storage.get || !Storage.put) {
        throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or put() method!');
      }
    }
    // if we have additional interpolations that were added via
    // $translateProvider.addInterpolation(), we have to map'em
    if ($interpolatorFactories.length) {
      var eachInterpolationFactory = function (interpolatorFactory) {
        var interpolator = $injector.get(interpolatorFactory);
        // setting initial locale for each interpolation service
        interpolator.setLocale($preferredLanguage || $uses);
        // make'em recognizable through id
        interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator;
      };
      eachInterpolationFactory.displayName = 'interpolationFactoryAdder';
      angular.forEach($interpolatorFactories, eachInterpolationFactory);
    }
    /**
     * @name getTranslationTable
     * @private
     *
     * @description
     * Returns a promise that resolves to the translation table
     * or is rejected if an error occurred.
     *
     * @param langKey
     * @returns {Q.promise}
     */
    var getTranslationTable = function (langKey) {
      var deferred = $q.defer();
      if (Object.prototype.hasOwnProperty.call($translationTable, langKey)) {
        deferred.resolve($translationTable[langKey]);
      } else if (langPromises[langKey]) {
        var onResolve = function (data) {
          translations(data.key, data.table);
          deferred.resolve(data.table);
        };
        onResolve.displayName = 'translationTableResolver';
        langPromises[langKey].then(onResolve, deferred.reject);
      } else {
        deferred.reject();
      }
      return deferred.promise;
    };
    /**
     * @name getFallbackTranslation
     * @private
     *
     * @description
     * Returns a promise that will resolve to the translation
     * or be rejected if no translation was found for the language.
     * This function is currently only used for fallback language translation.
     *
     * @param langKey The language to translate to.
     * @param translationId
     * @param interpolateParams
     * @param Interpolator
     * @param sanitizeStrategy
     * @returns {Q.promise}
     */
    var getFallbackTranslation = function (langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy) {
      var deferred = $q.defer();
      var onResolve = function (translationTable) {
        if (Object.prototype.hasOwnProperty.call(translationTable, translationId) && translationTable[translationId] !== null) {
          Interpolator.setLocale(langKey);
          var translation = translationTable[translationId];
          if (translation.substr(0, 2) === '@:') {
            getFallbackTranslation(langKey, translation.substr(2), interpolateParams, Interpolator, sanitizeStrategy)
              .then(deferred.resolve, deferred.reject);
          } else {
            var interpolatedValue = Interpolator.interpolate(translationTable[translationId], interpolateParams, 'service', sanitizeStrategy, translationId);
            interpolatedValue = applyPostProcessing(translationId, translationTable[translationId], interpolatedValue, interpolateParams, langKey);
            deferred.resolve(interpolatedValue);
          }
          Interpolator.setLocale($uses);
        } else {
          deferred.reject();
        }
      };
      onResolve.displayName = 'fallbackTranslationResolver';
      getTranslationTable(langKey).then(onResolve, deferred.reject);
      return deferred.promise;
    };
    /**
     * @name getFallbackTranslationInstant
     * @private
     *
     * @description
     * Returns a translation
     * This function is currently only used for fallback language translation.
     *
     * @param langKey The language to translate to.
     * @param translationId
     * @param interpolateParams
     * @param Interpolator
     * @param sanitizeStrategy sanitize strategy override
     *
     * @returns {string} translation
     */
    var getFallbackTranslationInstant = function (langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy) {
      var result, translationTable = $translationTable[langKey];
      if (translationTable && Object.prototype.hasOwnProperty.call(translationTable, translationId) && translationTable[translationId] !== null) {
        Interpolator.setLocale(langKey);
        result = Interpolator.interpolate(translationTable[translationId], interpolateParams, 'filter', sanitizeStrategy, translationId);
        result = applyPostProcessing(translationId, translationTable[translationId], result, interpolateParams, langKey, sanitizeStrategy);
        // workaround for TrustedValueHolderType
        if (!angular.isString(result) && angular.isFunction(result.$$unwrapTrustedValue)) {
          var result2 = result.$$unwrapTrustedValue();
          if (result2.substr(0, 2) === '@:') {
            return getFallbackTranslationInstant(langKey, result2.substr(2), interpolateParams, Interpolator, sanitizeStrategy);
          }
        } else if (result.substr(0, 2) === '@:') {
          return getFallbackTranslationInstant(langKey, result.substr(2), interpolateParams, Interpolator, sanitizeStrategy);
        }
        Interpolator.setLocale($uses);
      }
      return result;
    };
    /**
     * @name translateByHandler
     * @private
     *
     * Translate by missing translation handler.
     *
     * @param translationId
     * @param interpolateParams
     * @param defaultTranslationText
     * @param sanitizeStrategy sanitize strategy override
     *
     * @returns translation created by $missingTranslationHandler or translationId is $missingTranslationHandler is
     * absent
     */
    var translateByHandler = function (translationId, interpolateParams, defaultTranslationText, sanitizeStrategy) {
      // If we have a handler factory - we might also call it here to determine if it provides
      // a default text for a translationid that can't be found anywhere in our tables
      if ($missingTranslationHandlerFactory) {
        return $injector.get($missingTranslationHandlerFactory)(translationId, $uses, interpolateParams, defaultTranslationText, sanitizeStrategy);
      } else {
        return translationId;
      }
    };
    /**
     * @name resolveForFallbackLanguage
     * @private
     *
     * Recursive helper function for fallbackTranslation that will sequentially look
     * for a translation in the fallbackLanguages starting with fallbackLanguageIndex.
     *
     * @param fallbackLanguageIndex
     * @param translationId
     * @param interpolateParams
     * @param Interpolator
     * @param defaultTranslationText
     * @param sanitizeStrategy
     * @returns {Q.promise} Promise that will resolve to the translation.
     */
    var resolveForFallbackLanguage = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy) {
      var deferred = $q.defer();
      if (fallbackLanguageIndex < $fallbackLanguage.length) {
        var langKey = $fallbackLanguage[fallbackLanguageIndex];
        getFallbackTranslation(langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy).then(
          function (data) {
            deferred.resolve(data);
          },
          function () {
            // Look in the next fallback language for a translation.
            // It delays the resolving by passing another promise to resolve.
            return resolveForFallbackLanguage(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy).then(deferred.resolve, deferred.reject);
          }
        );
      } else {
        // No translation found in any fallback language
        // if a default translation text is set in the directive, then return this as a result
        if (defaultTranslationText) {
          deferred.resolve(defaultTranslationText);
        } else {
          var missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, defaultTranslationText);
          // if no default translation is set and an error handler is defined, send it to the handler
          // and then return the result if it isn't undefined
          if ($missingTranslationHandlerFactory && missingTranslationHandlerTranslation) {
            deferred.resolve(missingTranslationHandlerTranslation);
          } else {
            deferred.reject(applyNotFoundIndicators(translationId));
          }
        }
      }
      return deferred.promise;
    };
    /**
     * @name resolveForFallbackLanguageInstant
     * @private
     *
     * Recursive helper function for fallbackTranslation that will sequentially look
     * for a translation in the fallbackLanguages starting with fallbackLanguageIndex.
     *
     * @param fallbackLanguageIndex
     * @param translationId
     * @param interpolateParams
     * @param Interpolator
     * @param sanitizeStrategy
     * @returns {string} translation
     */
    var resolveForFallbackLanguageInstant = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator, sanitizeStrategy) {
      var result;
      if (fallbackLanguageIndex < $fallbackLanguage.length) {
        var langKey = $fallbackLanguage[fallbackLanguageIndex];
        result = getFallbackTranslationInstant(langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy);
        if (!result && result !== '') {
          result = resolveForFallbackLanguageInstant(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator);
        }
      }
      return result;
    };
    /**
     * Translates with the usage of the fallback languages.
     *
     * @param translationId
     * @param interpolateParams
     * @param Interpolator
     * @param defaultTranslationText
     * @param sanitizeStrategy
     * @returns {Q.promise} Promise, that resolves to the translation.
     */
    var fallbackTranslation = function (translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy) {
      // Start with the fallbackLanguage with index 0
      return resolveForFallbackLanguage((startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex), translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy);
    };
    /**
     * Translates with the usage of the fallback languages.
     *
     * @param translationId
     * @param interpolateParams
     * @param Interpolator
     * @param sanitizeStrategy
     * @returns {String} translation
     */
    var fallbackTranslationInstant = function (translationId, interpolateParams, Interpolator, sanitizeStrategy) {
      // Start with the fallbackLanguage with index 0
      return resolveForFallbackLanguageInstant((startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex), translationId, interpolateParams, Interpolator, sanitizeStrategy);
    };
    var determineTranslation = function (translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy) {
      var deferred = $q.defer();
      var table = uses ? $translationTable[uses] : $translationTable,
        Interpolator = (interpolationId) ? interpolatorHashMap[interpolationId] : defaultInterpolator;
      // if the translation id exists, we can just interpolate it
      if (table && Object.prototype.hasOwnProperty.call(table, translationId) && table[translationId] !== null) {
        var translation = table[translationId];
        // If using link, rerun $translate with linked translationId and return it
        if (translation.substr(0, 2) === '@:') {
          $translate(translation.substr(2), interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy)
            .then(deferred.resolve, deferred.reject);
        } else {
          //
          var resolvedTranslation = Interpolator.interpolate(translation, interpolateParams, 'service', sanitizeStrategy, translationId);
          resolvedTranslation = applyPostProcessing(translationId, translation, resolvedTranslation, interpolateParams, uses);
          deferred.resolve(resolvedTranslation);
        }
      } else {
        var missingTranslationHandlerTranslation;
        // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise
        if ($missingTranslationHandlerFactory && !pendingLoader) {
          missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, defaultTranslationText);
        }
        // since we couldn't translate the inital requested translation id,
        // we try it now with one or more fallback languages, if fallback language(s) is
        // configured.
        if (uses && $fallbackLanguage && $fallbackLanguage.length) {
          fallbackTranslation(translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy)
            .then(function (translation) {
              deferred.resolve(translation);
            }, function (_translationId) {
              deferred.reject(applyNotFoundIndicators(_translationId));
            });
        } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) {
          // looks like the requested translation id doesn't exists.
          // Now, if there is a registered handler for missing translations and no
          // asyncLoader is pending, we execute the handler
          if (defaultTranslationText) {
            deferred.resolve(defaultTranslationText);
          } else {
            deferred.resolve(missingTranslationHandlerTranslation);
          }
        } else {
          if (defaultTranslationText) {
            deferred.resolve(defaultTranslationText);
          } else {
            deferred.reject(applyNotFoundIndicators(translationId));
          }
        }
      }
      return deferred.promise;
    };
    var determineTranslationInstant = function (translationId, interpolateParams, interpolationId, uses, sanitizeStrategy) {
      var result, table = uses ? $translationTable[uses] : $translationTable,
        Interpolator = defaultInterpolator;
      // if the interpolation id exists use custom interpolator
      if (interpolatorHashMap && Object.prototype.hasOwnProperty.call(interpolatorHashMap, interpolationId)) {
        Interpolator = interpolatorHashMap[interpolationId];
      }
      // if the translation id exists, we can just interpolate it
      if (table && Object.prototype.hasOwnProperty.call(table, translationId) && table[translationId] !== null) {
        var translation = table[translationId];
        // If using link, rerun $translate with linked translationId and return it
        if (translation.substr(0, 2) === '@:') {
          result = determineTranslationInstant(translation.substr(2), interpolateParams, interpolationId, uses, sanitizeStrategy);
        } else {
          result = Interpolator.interpolate(translation, interpolateParams, 'filter', sanitizeStrategy, translationId);
          result = applyPostProcessing(translationId, translation, result, interpolateParams, uses, sanitizeStrategy);
        }
      } else {
        var missingTranslationHandlerTranslation;
        // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise
        if ($missingTranslationHandlerFactory && !pendingLoader) {
          missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, sanitizeStrategy);
        }
        // since we couldn't translate the inital requested translation id,
        // we try it now with one or more fallback languages, if fallback language(s) is
        // configured.
        if (uses && $fallbackLanguage && $fallbackLanguage.length) {
          fallbackIndex = 0;
          result = fallbackTranslationInstant(translationId, interpolateParams, Interpolator, sanitizeStrategy);
        } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) {
          // looks like the requested translation id doesn't exists.
          // Now, if there is a registered handler for missing translations and no
          // asyncLoader is pending, we execute the handler
          result = missingTranslationHandlerTranslation;
        } else {
          result = applyNotFoundIndicators(translationId);
        }
      }
      return result;
    };
    var clearNextLangAndPromise = function (key) {
      if ($nextLang === key) {
        $nextLang = undefined;
      }
      langPromises[key] = undefined;
    };
    var applyPostProcessing = function (translationId, translation, resolvedTranslation, interpolateParams, uses, sanitizeStrategy) {
      var fn = postProcessFn;
      if (fn) {
        if (typeof(fn) === 'string') {
          // getting on-demand instance
          fn = $injector.get(fn);
        }
        if (fn) {
          return fn(translationId, translation, resolvedTranslation, interpolateParams, uses, sanitizeStrategy);
        }
      }
      return resolvedTranslation;
    };
    var loadTranslationsIfMissing = function (key) {
      if (!$translationTable[key] && $loaderFactory && !langPromises[key]) {
        langPromises[key] = loadAsync(key).then(function (translation) {
          translations(translation.key, translation.table);
          return translation;
        });
      }
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#preferredLanguage
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns the language key for the preferred language.
     *
     * @param {string} langKey language String or Array to be used as preferredLanguage (changing at runtime)
     *
     * @return {string} preferred language key
     */
    $translate.preferredLanguage = function (langKey) {
      if (langKey) {
        setupPreferredLanguage(langKey);
      }
      return $preferredLanguage;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#cloakClassName
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns the configured class name for `translate-cloak` directive.
     *
     * @return {string} cloakClassName
     */
    $translate.cloakClassName = function () {
      return $cloakClassName;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#nestedObjectDelimeter
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns the configured delimiter for nested namespaces.
     *
     * @return {string} nestedObjectDelimeter
     */
    $translate.nestedObjectDelimeter = function () {
      return $nestedObjectDelimeter;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#fallbackLanguage
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns the language key for the fallback languages or sets a new fallback stack.
     * It is recommended to call this before {@link pascalprecht.translate.$translateProvider#preferredLanguage preferredLanguage()}.
     *
     * @param {string=} langKey language String or Array of fallback languages to be used (to change stack at runtime)
     *
     * @return {string||array} fallback language key
     */
    $translate.fallbackLanguage = function (langKey) {
      if (langKey !== undefined && langKey !== null) {
        fallbackStack(langKey);
        // as we might have an async loader initiated and a new translation language might have been defined
        // we need to add the promise to the stack also. So - iterate.
        if ($loaderFactory) {
          if ($fallbackLanguage && $fallbackLanguage.length) {
            for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
              if (!langPromises[$fallbackLanguage[i]]) {
                langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]);
              }
            }
          }
        }
        $translate.use($translate.use());
      }
      if ($fallbackWasString) {
        return $fallbackLanguage[0];
      } else {
        return $fallbackLanguage;
      }
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#useFallbackLanguage
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Sets the first key of the fallback language stack to be used for translation.
     * Therefore all languages in the fallback array BEFORE this key will be skipped!
     *
     * @param {string=} langKey Contains the langKey the iteration shall start with. Set to false if you want to
     * get back to the whole stack
     */
    $translate.useFallbackLanguage = function (langKey) {
      if (langKey !== undefined && langKey !== null) {
        if (!langKey) {
          startFallbackIteration = 0;
        } else {
          var langKeyPosition = indexOf($fallbackLanguage, langKey);
          if (langKeyPosition > -1) {
            startFallbackIteration = langKeyPosition;
          }
        }
      }
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#proposedLanguage
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns the language key of language that is currently loaded asynchronously.
     *
     * @return {string} language key
     */
    $translate.proposedLanguage = function () {
      return $nextLang;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#storage
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns registered storage.
     *
     * @return {object} Storage
     */
    $translate.storage = function () {
      return Storage;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#negotiateLocale
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns a language key based on available languages and language aliases. If a
     * language key cannot be resolved, returns undefined.
     *
     * If no or a falsy key is given, returns undefined.
     *
     * @param {string} [key] Language key
     * @return {string|undefined} Language key or undefined if no language key is found.
     */
    $translate.negotiateLocale = negotiateLocale;
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#use
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Tells angular-translate which language to use by given language key. This method is
     * used to change language at runtime. It also takes care of storing the language
     * key in a configured store to let your app remember the choosed language.
     *
     * When trying to 'use' a language which isn't available it tries to load it
     * asynchronously with registered loaders.
     *
     * Returns promise object with loaded language file data or string of the currently used language.
     *
     * If no or a falsy key is given it returns the currently used language key.
     * The returned string will be ```undefined``` if setting up $translate hasn't finished.
     * @example
     * $translate.use("en_US").then(function(data){
       *   $scope.text = $translate("HELLO");
       * });
     *
     * @param {string=} key Language key
     * @return {object|string} Promise with loaded language data or the language key if a falsy param was given.
     */
    $translate.use = function (key) {
      if (!key) {
        return $uses;
      }
      var deferred = $q.defer();
      deferred.promise.then(null, angular.noop); // AJS "Possibly unhandled rejection"
      $rootScope.$emit('$translateChangeStart', {language : key});
      // Try to get the aliased language key
      var aliasedKey = negotiateLocale(key);
      // Ensure only registered language keys will be loaded
      if ($availableLanguageKeys.length > 0 && !aliasedKey) {
        return $q.reject(key);
      }
      if (aliasedKey) {
        key = aliasedKey;
      }
      // if there isn't a translation table for the language we've requested,
      // we load it asynchronously
      $nextLang = key;
      if (($forceAsyncReloadEnabled || !$translationTable[key]) && $loaderFactory && !langPromises[key]) {
        langPromises[key] = loadAsync(key).then(function (translation) {
          translations(translation.key, translation.table);
          deferred.resolve(translation.key);
          if ($nextLang === key) {
            useLanguage(translation.key);
          }
          return translation;
        }, function (key) {
          $rootScope.$emit('$translateChangeError', {language : key});
          deferred.reject(key);
          $rootScope.$emit('$translateChangeEnd', {language : key});
          return $q.reject(key);
        });
        langPromises[key]['finally'](function () {
          clearNextLangAndPromise(key);
        })['catch'](angular.noop); // we don't care about errors (clearing)
      } else if (langPromises[key]) {
        // we are already loading this asynchronously
        // resolve our new deferred when the old langPromise is resolved
        langPromises[key].then(function (translation) {
          if ($nextLang === translation.key) {
            useLanguage(translation.key);
          }
          deferred.resolve(translation.key);
          return translation;
        }, function (key) {
          // find first available fallback language if that request has failed
          if (!$uses && $fallbackLanguage && $fallbackLanguage.length > 0 && $fallbackLanguage[0] !== key) {
            return $translate.use($fallbackLanguage[0]).then(deferred.resolve, deferred.reject);
          } else {
            return deferred.reject(key);
          }
        });
      } else {
        deferred.resolve(key);
        useLanguage(key);
      }
      return deferred.promise;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#resolveClientLocale
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * This returns the current browser/client's language key. The result is processed with the configured uniform tag resolver.
     *
     * @returns {string} the current client/browser language key
     */
    $translate.resolveClientLocale = function () {
      return getLocale();
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#storageKey
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns the key for the storage.
     *
     * @return {string} storage key
     */
    $translate.storageKey = function () {
      return storageKey();
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#isPostCompilingEnabled
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns whether post compiling is enabled or not
     *
     * @return {bool} storage key
     */
    $translate.isPostCompilingEnabled = function () {
      return $postCompilingEnabled;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#isForceAsyncReloadEnabled
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns whether force async reload is enabled or not
     *
     * @return {boolean} forceAsyncReload value
     */
    $translate.isForceAsyncReloadEnabled = function () {
      return $forceAsyncReloadEnabled;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#isKeepContent
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns whether keepContent or not
     *
     * @return {boolean} keepContent value
     */
    $translate.isKeepContent = function () {
      return $keepContent;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#refresh
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Refreshes a translation table pointed by the given langKey. If langKey is not specified,
     * the module will drop all existent translation tables and load new version of those which
     * are currently in use.
     *
     * Refresh means that the module will drop target translation table and try to load it again.
     *
     * In case there are no loaders registered the refresh() method will throw an Error.
     *
     * If the module is able to refresh translation tables refresh() method will broadcast
     * $translateRefreshStart and $translateRefreshEnd events.
     *
     * @example
     * // this will drop all currently existent translation tables and reload those which are
     * // currently in use
     * $translate.refresh();
     * // this will refresh a translation table for the en_US language
     * $translate.refresh('en_US');
     *
     * @param {string} langKey A language key of the table, which has to be refreshed
     *
     * @return {promise} Promise, which will be resolved in case a translation tables refreshing
     * process is finished successfully, and reject if not.
     */
    $translate.refresh = function (langKey) {
      if (!$loaderFactory) {
        throw new Error('Couldn\'t refresh translation table, no loader registered!');
      }
      $rootScope.$emit('$translateRefreshStart', {language : langKey});
      var deferred = $q.defer(), updatedLanguages = {};
      //private helper
      function loadNewData(languageKey) {
        var promise = loadAsync(languageKey);
        //update the load promise cache for this language
        langPromises[languageKey] = promise;
        //register a data handler for the promise
        promise.then(function (data) {
            //clear the cache for this language
            $translationTable[languageKey] = {};
            //add the new data for this language
            translations(languageKey, data.table);
            //track that we updated this language
            updatedLanguages[languageKey] = true;
          },
          //handle rejection to appease the $q validation
          angular.noop);
        return promise;
      }
      //set up post-processing
      deferred.promise.then(
        function () {
          for (var key in $translationTable) {
            if ($translationTable.hasOwnProperty(key)) {
              //delete cache entries that were not updated
              if (!(key in updatedLanguages)) {
                delete $translationTable[key];
              }
            }
          }
          if ($uses) {
            useLanguage($uses);
          }
        },
        //handle rejection to appease the $q validation
        angular.noop
      )['finally'](
        function () {
          $rootScope.$emit('$translateRefreshEnd', {language : langKey});
        }
      );
      if (!langKey) {
        // if there's no language key specified we refresh ALL THE THINGS!
        var languagesToReload = $fallbackLanguage && $fallbackLanguage.slice() || [];
        if ($uses && languagesToReload.indexOf($uses) === -1) {
          languagesToReload.push($uses);
        }
        $q.all(languagesToReload.map(loadNewData)).then(deferred.resolve, deferred.reject);
      } else if ($translationTable[langKey]) {
        //just refresh the specified language cache
        loadNewData(langKey).then(deferred.resolve, deferred.reject);
      } else {
        deferred.reject();
      }
      return deferred.promise;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#instant
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns a translation instantly from the internal state of loaded translation. All rules
     * regarding the current language, the preferred language of even fallback languages will be
     * used except any promise handling. If a language was not found, an asynchronous loading
     * will be invoked in the background.
     *
     * @param {string|array} translationId A token which represents a translation id
     *                                     This can be optionally an array of translation ids which
     *                                     results that the function's promise returns an object where
     *                                     each key is the translation id and the value the translation.
     * @param {object=} [interpolateParams={}] Params
     * @param {string=} [interpolationId=undefined] The id of the interpolation to use (use default unless set via useInterpolation())
     * @param {string=} [forceLanguage=false] A language to be used instead of the current language
     * @param {string=} [sanitizeStrategy=undefined] force sanitize strategy for this call instead of using the configured one (use default unless set)
     *
     * @return {string|object} translation
     */
    $translate.instant = function (translationId, interpolateParams, interpolationId, forceLanguage, sanitizeStrategy) {
      // we don't want to re-negotiate $uses
      var uses = (forceLanguage && forceLanguage !== $uses) ? // we don't want to re-negotiate $uses
        (negotiateLocale(forceLanguage) || forceLanguage) : $uses;
      // Detect undefined and null values to shorten the execution and prevent exceptions
      if (translationId === null || angular.isUndefined(translationId)) {
        return translationId;
      }
      // Check forceLanguage is present
      if (forceLanguage) {
        loadTranslationsIfMissing(forceLanguage);
      }
      // Duck detection: If the first argument is an array, a bunch of translations was requested.
      // The result is an object.
      if (angular.isArray(translationId)) {
        var results = {};
        for (var i = 0, c = translationId.length; i < c; i++) {
          results[translationId[i]] = $translate.instant(translationId[i], interpolateParams, interpolationId, forceLanguage, sanitizeStrategy);
        }
        return results;
      }
      // We discarded unacceptable values. So we just need to verify if translationId is empty String
      if (angular.isString(translationId) && translationId.length < 1) {
        return translationId;
      }
      // trim off any whitespace
      if (translationId) {
        translationId = trim.apply(translationId);
      }
      var result, possibleLangKeys = [];
      if ($preferredLanguage) {
        possibleLangKeys.push($preferredLanguage);
      }
      if (uses) {
        possibleLangKeys.push(uses);
      }
      if ($fallbackLanguage && $fallbackLanguage.length) {
        possibleLangKeys = possibleLangKeys.concat($fallbackLanguage);
      }
      for (var j = 0, d = possibleLangKeys.length; j < d; j++) {
        var possibleLangKey = possibleLangKeys[j];
        if ($translationTable[possibleLangKey]) {
          if (typeof $translationTable[possibleLangKey][translationId] !== 'undefined') {
            result = determineTranslationInstant(translationId, interpolateParams, interpolationId, uses, sanitizeStrategy);
          }
        }
        if (typeof result !== 'undefined') {
          break;
        }
      }
      if (!result && result !== '') {
        if ($notFoundIndicatorLeft || $notFoundIndicatorRight) {
          result = applyNotFoundIndicators(translationId);
        } else {
          // Return translation of default interpolator if not found anything.
          result = defaultInterpolator.interpolate(translationId, interpolateParams, 'filter', sanitizeStrategy);
          // looks like the requested translation id doesn't exists.
          // Now, if there is a registered handler for missing translations and no
          // asyncLoader is pending, we execute the handler
          var missingTranslationHandlerTranslation;
          if ($missingTranslationHandlerFactory && !pendingLoader) {
            missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, sanitizeStrategy);
          }
          if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) {
            result = missingTranslationHandlerTranslation;
          }
        }
      }
      return result;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#versionInfo
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns the current version information for the angular-translate library
     *
     * @return {string} angular-translate version
     */
    $translate.versionInfo = function () {
      return version;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#loaderCache
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns the defined loaderCache.
     *
     * @return {boolean|string|object} current value of loaderCache
     */
    $translate.loaderCache = function () {
      return loaderCache;
    };
    // internal purpose only
    $translate.directivePriority = function () {
      return directivePriority;
    };
    // internal purpose only
    $translate.statefulFilter = function () {
      return statefulFilter;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#isReady
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns whether the service is "ready" to translate (i.e. loading 1st language).
     *
     * See also {@link pascalprecht.translate.$translate#methods_onReady onReady()}.
     *
     * @return {boolean} current value of ready
     */
    $translate.isReady = function () {
      return $isReady;
    };
    var $onReadyDeferred = $q.defer();
    $onReadyDeferred.promise.then(function () {
      $isReady = true;
    });
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#onReady
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Calls the function provided or resolved the returned promise after the service is "ready" to translate (i.e. loading 1st language).
     *
     * See also {@link pascalprecht.translate.$translate#methods_isReady isReady()}.
     *
     * @param {Function=} fn Function to invoke when service is ready
     * @return {object} Promise resolved when service is ready
     */
    $translate.onReady = function (fn) {
      var deferred = $q.defer();
      if (angular.isFunction(fn)) {
        deferred.promise.then(fn);
      }
      if ($isReady) {
        deferred.resolve();
      } else {
        $onReadyDeferred.promise.then(deferred.resolve);
      }
      return deferred.promise;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#getAvailableLanguageKeys
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * This function simply returns the registered language keys being defined before in the config phase
     * With this, an application can use the array to provide a language selection dropdown or similar
     * without any additional effort
     *
     * @returns {object} returns the list of possibly registered language keys and mapping or null if not defined
     */
    $translate.getAvailableLanguageKeys = function () {
      if ($availableLanguageKeys.length > 0) {
        return $availableLanguageKeys;
      }
      return null;
    };
    /**
     * @ngdoc function
     * @name pascalprecht.translate.$translate#getTranslationTable
     * @methodOf pascalprecht.translate.$translate
     *
     * @description
     * Returns translation table by the given language key.
     *
     * Unless a language is provided it returns a translation table of the current one.
     * Note: If translation dictionary is currently downloading or in progress
     * it will return null.
     *
     * @param {string} langKey A token which represents a translation id
     *
     * @return {object} a copy of angular-translate $translationTable
     */
    $translate.getTranslationTable = function (langKey) {
      langKey = langKey || $translate.use();
      if (langKey && $translationTable[langKey]) {
        return angular.copy($translationTable[langKey]);
      }
      return null;
    };
    // Whenever $translateReady is being fired, this will ensure the state of $isReady
    var globalOnReadyListener = $rootScope.$on('$translateReady', function () {
      $onReadyDeferred.resolve();
      globalOnReadyListener(); // one time only
      globalOnReadyListener = null;
    });
    var globalOnChangeListener = $rootScope.$on('$translateChangeEnd', function () {
      $onReadyDeferred.resolve();
      globalOnChangeListener(); // one time only
      globalOnChangeListener = null;
    });
    if ($loaderFactory) {
      // If at least one async loader is defined and there are no
      // (default) translations available we should try to load them.
      if (angular.equals($translationTable, {})) {
        if ($translate.use()) {
          $translate.use($translate.use());
        }
      }
      // Also, if there are any fallback language registered, we start
      // loading them asynchronously as soon as we can.
      if ($fallbackLanguage && $fallbackLanguage.length) {
        var processAsyncResult = function (translation) {
          translations(translation.key, translation.table);
          $rootScope.$emit('$translateChangeEnd', {language : translation.key});
          return translation;
        };
        for (var i = 0, len = $fallbackLanguage.length; i < len; i++) {
          var fallbackLanguageId = $fallbackLanguage[i];
          if ($forceAsyncReloadEnabled || !$translationTable[fallbackLanguageId]) {
            langPromises[fallbackLanguageId] = loadAsync(fallbackLanguageId).then(processAsyncResult);
          }
        }
      }
    } else {
      $rootScope.$emit('$translateReady', {language : $translate.use()});
    }
    return $translate;
  }];
}
$translate.displayName = 'displayName';
/**
 * @ngdoc object
 * @name pascalprecht.translate.$translateDefaultInterpolation
 * @requires $interpolate
 *
 * @description
 * Uses angular's `$interpolate` services to interpolate strings against some values.
 *
 * Be aware to configure a proper sanitization strategy.
 *
 * See also:
 * * {@link pascalprecht.translate.$translateSanitization}
 *
 * @return {object} $translateDefaultInterpolation Interpolator service
 */
angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', $translateDefaultInterpolation);
function $translateDefaultInterpolation ($interpolate, $translateSanitization) {
  'use strict';
  var $translateInterpolator = {},
      $locale,
      $identifier = 'default';
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateDefaultInterpolation#setLocale
   * @methodOf pascalprecht.translate.$translateDefaultInterpolation
   *
   * @description
   * Sets current locale (this is currently not use in this interpolation).
   *
   * @param {string} locale Language key or locale.
   */
  $translateInterpolator.setLocale = function (locale) {
    $locale = locale;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateDefaultInterpolation#getInterpolationIdentifier
   * @methodOf pascalprecht.translate.$translateDefaultInterpolation
   *
   * @description
   * Returns an identifier for this interpolation service.
   *
   * @returns {string} $identifier
   */
  $translateInterpolator.getInterpolationIdentifier = function () {
    return $identifier;
  };
  /**
   * @deprecated will be removed in 3.0
   * @see {@link pascalprecht.translate.$translateSanitization}
   */
  $translateInterpolator.useSanitizeValueStrategy = function (value) {
    $translateSanitization.useStrategy(value);
    return this;
  };
  /**
   * @ngdoc function
   * @name pascalprecht.translate.$translateDefaultInterpolation#interpolate
   * @methodOf pascalprecht.translate.$translateDefaultInterpolation
   *
   * @description
   * Interpolates given value agains given interpolate params using angulars
   * `$interpolate` service.
   *
   * Since AngularJS 1.5, `value` must not be a string but can be anything input.
   *
   * @param {string} value translation
   * @param {object} [interpolationParams={}] interpolation params
   * @param {string} [context=undefined] current context (filter, directive, service)
   * @param {string} [sanitizeStrategy=undefined] sanitize strategy (use default unless set)
   * @param {string} translationId current translationId
   *
   * @returns {string} interpolated string
   */
  $translateInterpolator.interpolate = function (value, interpolationParams, context, sanitizeStrategy, translationId) { // jshint ignore:line
    interpolationParams = interpolationParams || {};
    interpolationParams = $translateSanitization.sanitize(interpolationParams, 'params', sanitizeStrategy, context);
    var interpolatedText;
    if (angular.isNumber(value)) {
      // numbers are safe
      interpolatedText = '' + value;
    } else if (angular.isString(value)) {
      // strings must be interpolated (that's the job here)
      interpolatedText = $interpolate(value)(interpolationParams);
      interpolatedText = $translateSanitization.sanitize(interpolatedText, 'text', sanitizeStrategy, context);
    } else {
      // neither a number or a string, cant interpolate => empty string
      interpolatedText = '';
    }
    return interpolatedText;
  };
  return $translateInterpolator;
}
$translateDefaultInterpolation.displayName = '$translateDefaultInterpolation';
angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY');
angular.module('pascalprecht.translate')
/**
 * @ngdoc directive
 * @name pascalprecht.translate.directive:translate
 * @requires $interpolate,
 * @requires $compile,
 * @requires $parse,
 * @requires $rootScope
 * @restrict AE
 *
 * @description
 * Translates given translation id either through attribute or DOM content.
 * Internally it uses $translate service to translate the translation id. It possible to
 * pass an optional `translate-values` object literal as string into translation id.
 *
 * @param {string=} translate Translation id which could be either string or interpolated string.
 * @param {string=} translate-values Values to pass into translation id. Can be passed as object literal string or interpolated object.
 * @param {string=} translate-attr-ATTR translate Translation id and put it into ATTR attribute.
 * @param {string=} translate-default will be used unless translation was successful
 * @param {string=} translate-sanitize-strategy defines locally sanitize strategy
 * @param {boolean=} translate-compile (default true if present) defines locally activation of {@link pascalprecht.translate.$translateProvider#methods_usePostCompiling}
 * @param {boolean=} translate-keep-content (default true if present) defines that in case a KEY could not be translated, that the existing content is left in the innerHTML}
 *
 * @example
   <example module="ngView">
    <file name="index.html">
      <div ng-controller="TranslateCtrl">
        <pre translate="TRANSLATION_ID"></pre>
        <pre translate>TRANSLATION_ID</pre>
        <pre translate translate-attr-title="TRANSLATION_ID"></pre>
        <pre translate="{{translationId}}"></pre>
        <pre translate>{{translationId}}</pre>
        <pre translate="WITH_VALUES" translate-values="{value: 5}"></pre>
        <pre translate translate-values="{value: 5}">WITH_VALUES</pre>
        <pre translate="WITH_VALUES" translate-values="{{values}}"></pre>
        <pre translate translate-values="{{values}}">WITH_VALUES</pre>
        <pre translate translate-attr-title="WITH_VALUES" translate-values="{{values}}"></pre>
        <pre translate="WITH_CAMEL_CASE_KEY" translate-value-camel-case-key="Hi"></pre>
      </div>
    </file>
    <file name="script.js">
      angular.module('ngView', ['pascalprecht.translate'])
      .config(function ($translateProvider) {
        $translateProvider.translations('en',{
          'TRANSLATION_ID': 'Hello there!',
          'WITH_VALUES': 'The following value is dynamic: {{value}}',
          'WITH_CAMEL_CASE_KEY': 'The interpolation key is camel cased: {{camelCaseKey}}'
        }).preferredLanguage('en');
      });
      angular.module('ngView').controller('TranslateCtrl', function ($scope) {
        $scope.translationId = 'TRANSLATION_ID';
        $scope.values = {
          value: 78
        };
      });
    </file>
    <file name="scenario.js">
      it('should translate', function () {
        inject(function ($rootScope, $compile) {
          $rootScope.translationId = 'TRANSLATION_ID';
          element = $compile('<p translate="TRANSLATION_ID"></p>')($rootScope);
          $rootScope.$digest();
          expect(element.text()).toBe('Hello there!');
          element = $compile('<p translate="{{translationId}}"></p>')($rootScope);
          $rootScope.$digest();
          expect(element.text()).toBe('Hello there!');
          element = $compile('<p translate>TRANSLATION_ID</p>')($rootScope);
          $rootScope.$digest();
          expect(element.text()).toBe('Hello there!');
          element = $compile('<p translate>{{translationId}}</p>')($rootScope);
          $rootScope.$digest();
          expect(element.text()).toBe('Hello there!');
          element = $compile('<p translate translate-attr-title="TRANSLATION_ID"></p>')($rootScope);
          $rootScope.$digest();
          expect(element.attr('title')).toBe('Hello there!');
          element = $compile('<p translate="WITH_CAMEL_CASE_KEY" translate-value-camel-case-key="Hello"></p>')($rootScope);
          $rootScope.$digest();
          expect(element.text()).toBe('The interpolation key is camel cased: Hello');
        });
      });
    </file>
   </example>
 */
.directive('translate', translateDirective);
function translateDirective($translate, $interpolate, $compile, $parse, $rootScope) {
  'use strict';
  /**
   * @name trim
   * @private
   *
   * @description
   * trim polyfill
   *
   * @returns {string} The string stripped of whitespace from both ends
   */
  var trim = function() {
    return this.toString().replace(/^\s+|\s+$/g, '');
  };
  /**
   * @name lowercase
   * @private
   *
   * @description
   * Return the lowercase string only if the type is string
   *
   * @returns {string} The string all in lowercase
   */
  var lowercase = function (string) {
    return angular.isString(string) ? string.toLowerCase() : string;
  };
  return {
    restrict: 'AE',
    scope: true,
    priority: $translate.directivePriority(),
    compile: function (tElement, tAttr) {
      var translateValuesExist = (tAttr.translateValues) ?
        tAttr.translateValues : undefined;
      var translateInterpolation = (tAttr.translateInterpolation) ?
        tAttr.translateInterpolation : undefined;
      var translateSanitizeStrategyExist = (tAttr.translateSanitizeStrategy) ?
        tAttr.translateSanitizeStrategy : undefined;
      var translateValueExist = tElement[0].outerHTML.match(/translate-value-+/i);
      var interpolateRegExp = '^(.*)(' + $interpolate.startSymbol() + '.*' + $interpolate.endSymbol() + ')(.*)',
          watcherRegExp = '^(.*)' + $interpolate.startSymbol() + '(.*)' + $interpolate.endSymbol() + '(.*)';
      return function linkFn(scope, iElement, iAttr) {
        scope.interpolateParams = {};
        scope.preText = '';
        scope.postText = '';
        scope.translateNamespace = getTranslateNamespace(scope);
        var translationIds = {};
        var initInterpolationParams = function (interpolateParams, iAttr, tAttr) {
          // initial setup
          if (iAttr.translateValues) {
            angular.extend(interpolateParams, $parse(iAttr.translateValues)(scope.$parent));
          }
          // initially fetch all attributes if existing and fill the params
          if (translateValueExist) {
            for (var attr in tAttr) {
              if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') {
                var attributeName = lowercase(attr.substr(14, 1)) + attr.substr(15);
                interpolateParams[attributeName] = tAttr[attr];
              }
            }
          }
        };
        // Ensures any change of the attribute "translate" containing the id will
        // be re-stored to the scope's "translationId".
        // If the attribute has no content, the element's text value (white spaces trimmed off) will be used.
        var observeElementTranslation = function (translationId) {
          // Remove any old watcher
          if (angular.isFunction(observeElementTranslation._unwatchOld)) {
            observeElementTranslation._unwatchOld();
            observeElementTranslation._unwatchOld = undefined;
          }
          if (angular.equals(translationId , '') || !angular.isDefined(translationId)) {
            var iElementText = trim.apply(iElement.text());
            // Resolve translation id by inner html if required
            var interpolateMatches = iElementText.match(interpolateRegExp);
            // Interpolate translation id if required
            if (angular.isArray(interpolateMatches)) {
              scope.preText = interpolateMatches[1];
              scope.postText = interpolateMatches[3];
              translationIds.translate = $interpolate(interpolateMatches[2])(scope.$parent);
              var watcherMatches = iElementText.match(watcherRegExp);
              if (angular.isArray(watcherMatches) && watcherMatches[2] && watcherMatches[2].length) {
                observeElementTranslation._unwatchOld = scope.$watch(watcherMatches[2], function (newValue) {
                  translationIds.translate = newValue;
                  updateTranslations();
                });
              }
            } else {
              // do not assigne the translation id if it is empty.
              translationIds.translate = !iElementText ? undefined : iElementText;
            }
          } else {
            translationIds.translate = translationId;
          }
          updateTranslations();
        };
        var observeAttributeTranslation = function (translateAttr) {
          iAttr.$observe(translateAttr, function (translationId) {
            translationIds[translateAttr] = translationId;
            updateTranslations();
          });
        };
        // initial setup with values
        initInterpolationParams(scope.interpolateParams, iAttr, tAttr);
        var firstAttributeChangedEvent = true;
        iAttr.$observe('translate', function (translationId) {
          if (typeof translationId === 'undefined') {
            // case of element "<translate>xyz</translate>"
            observeElementTranslation('');
          } else {
            // case of regular attribute
            if (translationId !== '' || !firstAttributeChangedEvent) {
              translationIds.translate = translationId;
              updateTranslations();
            }
          }
          firstAttributeChangedEvent = false;
        });
        for (var translateAttr in iAttr) {
          if (iAttr.hasOwnProperty(translateAttr) && translateAttr.substr(0, 13) === 'translateAttr' && translateAttr.length > 13) {
            observeAttributeTranslation(translateAttr);
          }
        }
        iAttr.$observe('translateDefault', function (value) {
          scope.defaultText = value;
          updateTranslations();
        });
        if (translateSanitizeStrategyExist) {
          iAttr.$observe('translateSanitizeStrategy', function (value) {
            scope.sanitizeStrategy = $parse(value)(scope.$parent);
            updateTranslations();
          });
        }
        if (translateValuesExist) {
          iAttr.$observe('translateValues', function (interpolateParams) {
            if (interpolateParams) {
              scope.$parent.$watch(function () {
                angular.extend(scope.interpolateParams, $parse(interpolateParams)(scope.$parent));
              });
            }
          });
        }
        if (translateValueExist) {
          var observeValueAttribute = function (attrName) {
            iAttr.$observe(attrName, function (value) {
              var attributeName = lowercase(attrName.substr(14, 1)) + attrName.substr(15);
              scope.interpolateParams[attributeName] = value;
            });
          };
          for (var attr in iAttr) {
            if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') {
              observeValueAttribute(attr);
            }
          }
        }
        // Master update function
        var updateTranslations = function () {
          for (var key in translationIds) {
            if (translationIds.hasOwnProperty(key) && translationIds[key] !== undefined) {
              updateTranslation(key, translationIds[key], scope, scope.interpolateParams, scope.defaultText, scope.translateNamespace);
            }
          }
        };
        // Put translation processing function outside loop
        var updateTranslation = function(translateAttr, translationId, scope, interpolateParams, defaultTranslationText, translateNamespace) {
          if (translationId) {
            // if translation id starts with '.' and translateNamespace given, prepend namespace
            if (translateNamespace && translationId.charAt(0) === '.') {
              translationId = translateNamespace + translationId;
            }
            $translate(translationId, interpolateParams, translateInterpolation, defaultTranslationText, scope.translateLanguage, scope.sanitizeStrategy)
              .then(function (translation) {
                applyTranslation(translation, scope, true, translateAttr);
              }, function (translationId) {
                applyTranslation(translationId, scope, false, translateAttr);
              });
          } else {
            // as an empty string cannot be translated, we can solve this using successful=false
            applyTranslation(translationId, scope, false, translateAttr);
          }
        };
        var applyTranslation = function (value, scope, successful, translateAttr) {
          if (!successful) {
            if (typeof scope.defaultText !== 'undefined') {
              value = scope.defaultText;
            }
          }
          if (translateAttr === 'translate') {
            // default translate into innerHTML
            if (successful || (!successful && !$translate.isKeepContent() && typeof iAttr.translateKeepContent === 'undefined')) {
              iElement.empty().append(scope.preText + value + scope.postText);
            }
            var globallyEnabled = $translate.isPostCompilingEnabled();
            var locallyDefined = typeof tAttr.translateCompile !== 'undefined';
            var locallyEnabled = locallyDefined && tAttr.translateCompile !== 'false';
            if ((globallyEnabled && !locallyDefined) || locallyEnabled) {
              $compile(iElement.contents())(scope);
            }
          } else {
            // translate attribute
            var attributeName = iAttr.$attr[translateAttr];
            if (attributeName.substr(0, 5) === 'data-') {
              // ensure html5 data prefix is stripped
              attributeName = attributeName.substr(5);
            }
            attributeName = attributeName.substr(15);
            iElement.attr(attributeName, value);
          }
        };
        if (translateValuesExist || translateValueExist || iAttr.translateDefault) {
          scope.$watch('interpolateParams', updateTranslations, true);
        }
        // Replaced watcher on translateLanguage with event listener
        scope.$on('translateLanguageChanged', updateTranslations);
        // Ensures the text will be refreshed after the current language was changed
        // w/ $translate.use(...)
        var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslations);
        // ensure translation will be looked up at least one
        if (iElement.text().length) {
          if (iAttr.translate) {
            observeElementTranslation(iAttr.translate);
          } else {
            observeElementTranslation('');
          }
        } else if (iAttr.translate) {
          // ensure attribute will be not skipped
          observeElementTranslation(iAttr.translate);
        }
        updateTranslations();
        scope.$on('$destroy', unbind);
      };
    }
  };
}
/**
 * Returns the scope's namespace.
 * @private
 * @param scope
 * @returns {string}
 */
function getTranslateNamespace(scope) {
  'use strict';
  if (scope.translateNamespace) {
    return scope.translateNamespace;
  }
  if (scope.$parent) {
    return getTranslateNamespace(scope.$parent);
  }
}
translateDirective.displayName = 'translateDirective';
angular.module('pascalprecht.translate')
/**
 * @ngdoc directive
 * @name pascalprecht.translate.directive:translate-attr
 * @restrict A
 *
 * @description
 * Translates attributes like translate-attr-ATTR, but with an object like ng-class.
 * Internally it uses `translate` service to translate translation id. It possible to
 * pass an optional `translate-values` object literal as string into translation id.
 *
 * @param {string=} translate-attr Object literal mapping attributes to translation ids.
 * @param {string=} translate-values Values to pass into the translation ids. Can be passed as object literal string.
 * @param {string=} translate-sanitize-strategy defines locally sanitize strategy
 *
 * @example
   <example module="ngView">
    <file name="index.html">
      <div ng-controller="TranslateCtrl">
        <input translate-attr="{ placeholder: translationId, title: 'WITH_VALUES' }" translate-values="{value: 5}" />
      </div>
    </file>
    <file name="script.js">
      angular.module('ngView', ['pascalprecht.translate'])
      .config(function ($translateProvider) {
        $translateProvider.translations('en',{
          'TRANSLATION_ID': 'Hello there!',
          'WITH_VALUES': 'The following value is dynamic: {{value}}',
        }).preferredLanguage('en');
      });
      angular.module('ngView').controller('TranslateCtrl', function ($scope) {
        $scope.translationId = 'TRANSLATION_ID';
        $scope.values = {
          value: 78
        };
      });
    </file>
    <file name="scenario.js">
      it('should translate', function () {
        inject(function ($rootScope, $compile) {
          $rootScope.translationId = 'TRANSLATION_ID';
          element = $compile('<input translate-attr="{ placeholder: translationId, title: 'WITH_VALUES' }" translate-values="{ value: 5 }" />')($rootScope);
          $rootScope.$digest();
          expect(element.attr('placeholder)).toBe('Hello there!');
          expect(element.attr('title)).toBe('The following value is dynamic: 5');
        });
      });
    </file>
   </example>
 */
.directive('translateAttr', translateAttrDirective);
function translateAttrDirective($translate, $rootScope) {
  'use strict';
  return {
    restrict: 'A',
    priority: $translate.directivePriority(),
    link: function linkFn(scope, element, attr) {
      var translateAttr,
          translateValues,
          translateSanitizeStrategy,
          previousAttributes = {};
      // Main update translations function
      var updateTranslations = function () {
        angular.forEach(translateAttr, function (translationId, attributeName) {
          if (!translationId) {
            return;
          }
          previousAttributes[attributeName] = true;
          // if translation id starts with '.' and translateNamespace given, prepend namespace
          if (scope.translateNamespace && translationId.charAt(0) === '.') {
            translationId = scope.translateNamespace + translationId;
          }
          $translate(translationId, translateValues, attr.translateInterpolation, undefined, scope.translateLanguage, translateSanitizeStrategy)
            .then(function (translation) {
              element.attr(attributeName, translation);
            }, function (translationId) {
              element.attr(attributeName, translationId);
            });
        });
        // Removing unused attributes that were previously used
        angular.forEach(previousAttributes, function (flag, attributeName) {
          if (!translateAttr[attributeName]) {
            element.removeAttr(attributeName);
            delete previousAttributes[attributeName];
          }
        });
      };
      // Watch for attribute changes
      watchAttribute(
        scope,
        attr.translateAttr,
        function (newValue) { translateAttr = newValue; },
        updateTranslations
      );
      // Watch for value changes
      watchAttribute(
        scope,
        attr.translateValues,
        function (newValue) { translateValues = newValue; },
        updateTranslations
      );
      // Watch for sanitize strategy changes
      watchAttribute(
        scope,
        attr.translateSanitizeStrategy,
        function (newValue) { translateSanitizeStrategy = newValue; },
        updateTranslations
      );
      if (attr.translateValues) {
        scope.$watch(attr.translateValues, updateTranslations, true);
      }
      // Replaced watcher on translateLanguage with event listener
      scope.$on('translateLanguageChanged', updateTranslations);
      // Ensures the text will be refreshed after the current language was changed
      // w/ $translate.use(...)
      var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslations);
      updateTranslations();
      scope.$on('$destroy', unbind);
    }
  };
}
function watchAttribute(scope, attribute, valueCallback, changeCallback) {
  'use strict';
  if (!attribute) {
    return;
  }
  if (attribute.substr(0, 2) === '::') {
    attribute = attribute.substr(2);
  } else {
    scope.$watch(attribute, function(newValue) {
      valueCallback(newValue);
      changeCallback();
    }, true);
  }
  valueCallback(scope.$eval(attribute));
}
translateAttrDirective.displayName = 'translateAttrDirective';
angular.module('pascalprecht.translate')
/**
 * @ngdoc directive
 * @name pascalprecht.translate.directive:translateCloak
 * @requires $translate
 * @restrict A
 *
 * $description
 * Adds a `translate-cloak` class name to the given element where this directive
 * is applied initially and removes it, once a loader has finished loading.
 *
 * This directive can be used to prevent initial flickering when loading translation
 * data asynchronously.
 *
 * The class name is defined in
 * {@link pascalprecht.translate.$translateProvider#cloakClassName $translate.cloakClassName()}.
 *
 * @param {string=} translate-cloak If a translationId is provided, it will be used for showing
 *                                  or hiding the cloak. Basically it relies on the translation
 *                                  resolve.
 */
.directive('translateCloak', translateCloakDirective);
function translateCloakDirective($translate, $rootScope) {
  'use strict';
  return {
    compile : function (tElement) {
      var applyCloak = function (element) {
          element.addClass($translate.cloakClassName());
        },
        removeCloak = function (element) {
          element.removeClass($translate.cloakClassName());
        };
      applyCloak(tElement);
      return function linkFn(scope, iElement, iAttr) {
        //Create bound functions that incorporate the active DOM element.
        var iRemoveCloak = removeCloak.bind(this, iElement), iApplyCloak = applyCloak.bind(this, iElement);
        if (iAttr.translateCloak && iAttr.translateCloak.length) {
          // Register a watcher for the defined translation allowing a fine tuned cloak
          iAttr.$observe('translateCloak', function (translationId) {
            $translate(translationId).then(iRemoveCloak, iApplyCloak);
          });
          $rootScope.$on('$translateChangeSuccess', function () {
            $translate(iAttr.translateCloak).then(iRemoveCloak, iApplyCloak);
          });
        } else {
          $translate.onReady(iRemoveCloak);
        }
      };
    }
  };
}
translateCloakDirective.displayName = 'translateCloakDirective';
angular.module('pascalprecht.translate')
/**
 * @ngdoc directive
 * @name pascalprecht.translate.directive:translateNamespace
 * @restrict A
 *
 * @description
 * Translates given translation id either through attribute or DOM content.
 * Internally it uses `translate` filter to translate translation id. It possible to
 * pass an optional `translate-values` object literal as string into translation id.
 *
 * @param {string=} translate namespace name which could be either string or interpolated string.
 *
 * @example
   <example module="ngView">
    <file name="index.html">
      <div translate-namespace="CONTENT">
        <div>
            <h1 translate>.HEADERS.TITLE</h1>
            <h1 translate>.HEADERS.WELCOME</h1>
        </div>
        <div translate-namespace=".HEADERS">
            <h1 translate>.TITLE</h1>
            <h1 translate>.WELCOME</h1>
        </div>
      </div>
    </file>
    <file name="script.js">
      angular.module('ngView', ['pascalprecht.translate'])
      .config(function ($translateProvider) {
        $translateProvider.translations('en',{
          'TRANSLATION_ID': 'Hello there!',
          'CONTENT': {
            'HEADERS': {
                TITLE: 'Title'
            }
          },
          'CONTENT.HEADERS.WELCOME': 'Welcome'
        }).preferredLanguage('en');
      });
    </file>
   </example>
 */
.directive('translateNamespace', translateNamespaceDirective);
function translateNamespaceDirective() {
  'use strict';
  return {
    restrict: 'A',
    scope: true,
    compile: function () {
      return {
        pre: function (scope, iElement, iAttrs) {
          scope.translateNamespace = getTranslateNamespace(scope);
          if (scope.translateNamespace && iAttrs.translateNamespace.charAt(0) === '.') {
            scope.translateNamespace += iAttrs.translateNamespace;
          } else {
            scope.translateNamespace = iAttrs.translateNamespace;
          }
        }
      };
    }
  };
}
/**
 * Returns the scope's namespace.
 * @private
 * @param scope
 * @returns {string}
 */
function getTranslateNamespace(scope) {
  'use strict';
  if (scope.translateNamespace) {
    return scope.translateNamespace;
  }
  if (scope.$parent) {
    return getTranslateNamespace(scope.$parent);
  }
}
translateNamespaceDirective.displayName = 'translateNamespaceDirective';
angular.module('pascalprecht.translate')
/**
 * @ngdoc directive
 * @name pascalprecht.translate.directive:translateLanguage
 * @restrict A
 *
 * @description
 * Forces the language to the directives in the underlying scope.
 *
 * @param {string=} translate language that will be negotiated.
 *
 * @example
   <example module="ngView">
    <file name="index.html">
      <div>
        <div>
            <h1 translate>HELLO</h1>
        </div>
        <div translate-language="de">
            <h1 translate>HELLO</h1>
        </div>
      </div>
    </file>
    <file name="script.js">
      angular.module('ngView', ['pascalprecht.translate'])
      .config(function ($translateProvider) {
        $translateProvider
          .translations('en',{
            'HELLO': 'Hello world!'
          })
          .translations('de',{
            'HELLO': 'Hallo Welt!'
          })
          .preferredLanguage('en');
      });
    </file>
   </example>
 */
.directive('translateLanguage', translateLanguageDirective);
function translateLanguageDirective() {
  'use strict';
  return {
    restrict: 'A',
    scope: true,
    compile: function () {
      return function linkFn(scope, iElement, iAttrs) {
        iAttrs.$observe('translateLanguage', function (newTranslateLanguage) {
          scope.translateLanguage = newTranslateLanguage;
        });
        scope.$watch('translateLanguage', function(){
          scope.$broadcast('translateLanguageChanged');
        });
      };
    }
  };
}
translateLanguageDirective.displayName = 'translateLanguageDirective';
angular.module('pascalprecht.translate')
/**
 * @ngdoc filter
 * @name pascalprecht.translate.filter:translate
 * @requires $parse
 * @requires pascalprecht.translate.$translate
 * @function
 *
 * @description
 * Uses `$translate` service to translate contents. Accepts interpolate parameters
 * to pass dynamized values though translation.
 *
 * @param {string} translationId A translation id to be translated.
 * @param {*=} interpolateParams Optional object literal (as hash or string) to pass values into translation.
 *
 * @returns {string} Translated text.
 *
 * @example
   <example module="ngView">
    <file name="index.html">
      <div ng-controller="TranslateCtrl">
        <pre>{{ 'TRANSLATION_ID' | translate }}</pre>
        <pre>{{ translationId | translate }}</pre>
        <pre>{{ 'WITH_VALUES' | translate:'{value: 5}' }}</pre>
        <pre>{{ 'WITH_VALUES' | translate:values }}</pre>
      </div>
    </file>
    <file name="script.js">
      angular.module('ngView', ['pascalprecht.translate'])
      .config(function ($translateProvider) {
        $translateProvider.translations('en', {
          'TRANSLATION_ID': 'Hello there!',
          'WITH_VALUES': 'The following value is dynamic: {{value}}'
        });
        $translateProvider.preferredLanguage('en');
      });
      angular.module('ngView').controller('TranslateCtrl', function ($scope) {
        $scope.translationId = 'TRANSLATION_ID';
        $scope.values = {
          value: 78
        };
      });
    </file>
   </example>
 */
.filter('translate', translateFilterFactory);
function translateFilterFactory($parse, $translate) {
  'use strict';
  var translateFilter = function (translationId, interpolateParams, interpolation, forceLanguage) {
    if (!angular.isObject(interpolateParams)) {
      var ctx = this || {
        '__SCOPE_IS_NOT_AVAILABLE': 'More info at https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f'
        };
      interpolateParams = $parse(interpolateParams)(ctx);
    }
    return $translate.instant(translationId, interpolateParams, interpolation, forceLanguage);
  };
  if ($translate.statefulFilter()) {
    translateFilter.$stateful = true;
  }
  return translateFilter;
}
translateFilterFactory.displayName = 'translateFilterFactory';
angular.module('pascalprecht.translate')
/**
 * @ngdoc object
 * @name pascalprecht.translate.$translationCache
 * @requires $cacheFactory
 *
 * @description
 * The first time a translation table is used, it is loaded in the translation cache for quick retrieval. You
 * can load translation tables directly into the cache by consuming the
 * `$translationCache` service directly.
 *
 * @return {object} $cacheFactory object.
 */
  .factory('$translationCache', $translationCache);
function $translationCache($cacheFactory) {
  'use strict';
  return $cacheFactory('translations');
}
$translationCache.displayName = '$translationCache';
return 'pascalprecht.translate';
}));
src/main/webapp/bower_components/angular-translate/angular-translate.min.js
New file
@@ -0,0 +1,6 @@
/*!
 * angular-translate - v2.16.0 - 2017-11-01
 *
 * Copyright (c) 2017 The angular-translate team, Pascal Precht; Licensed MIT
 */
!function(t,e){"function"==typeof define&&define.amd?define([],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():e()}(0,function(){function t(t){"use strict";var e=t.storageKey(),n=t.storage(),a=function(){var a=t.preferredLanguage();angular.isString(a)?t.use(a):n.put(e,t.use())};a.displayName="fallbackFromIncorrectStorageValue",n?n.get(e)?t.use(n.get(e)).catch(a):a():angular.isString(t.preferredLanguage())&&t.use(t.preferredLanguage())}function e(t,e,n,a){"use strict";var r,i,s,o,u,l,c,f,g,p,h,d,v,m,$,y,b={},S=[],L=t,j=[],w="translate-cloak",N=!1,C=!1,O=".",E=!1,P=!1,k=0,A=!0,z="default",T={default:function(t){return(t||"").split("-").join("_")},java:function(t){var e=(t||"").split("-").join("_"),n=e.split("_");return n.length>1?n[0].toLowerCase()+"_"+n[1].toUpperCase():e},bcp47:function(t){var e=(t||"").split("_").join("-"),n=e.split("-");return n.length>1?n[0].toLowerCase()+"-"+n[1].toUpperCase():e},"iso639-1":function(t){return(t||"").split("_").join("-").split("-")[0].toLowerCase()}},x=function(){if(angular.isFunction(a.getLocale))return a.getLocale();var t,n,r=e.$get().navigator,i=["language","browserLanguage","systemLanguage","userLanguage"];if(angular.isArray(r.languages))for(t=0;t<r.languages.length;t++)if((n=r.languages[t])&&n.length)return n;for(t=0;t<i.length;t++)if((n=r[i[t]])&&n.length)return n;return null};x.displayName="angular-translate/service: getFirstBrowserLanguage";var F=function(){var t=x()||"";return T[z]&&(t=T[z](t)),t};F.displayName="angular-translate/service: getLocale";var I=function(t,e){for(var n=0,a=t.length;n<a;n++)if(t[n]===e)return n;return-1},_=function(){return this.toString().replace(/^\s+|\s+$/g,"")},V=function(t){return angular.isString(t)?t.toLowerCase():t},R=function(t){if(t){for(var e=[],n=V(t),a=0,r=S.length;a<r;a++)e.push(V(S[a]));if((a=I(e,n))>-1)return S[a];if(i){var s;for(var o in i)if(i.hasOwnProperty(o)){var u=!1,l=Object.prototype.hasOwnProperty.call(i,o)&&V(o)===V(t);if("*"===o.slice(-1)&&(u=V(o.slice(0,-1))===V(t.slice(0,o.length-1))),(l||u)&&(s=i[o],I(e,V(s))>-1))return s}}var c=t.split("_");return c.length>1&&I(e,V(c[0]))>-1?c[0]:void 0}},D=function(t,e){if(!t&&!e)return b;if(t&&!e){if(angular.isString(t))return b[t]}else angular.isObject(b[t])||(b[t]={}),angular.extend(b[t],K(e));return this};this.translations=D,this.cloakClassName=function(t){return t?(w=t,this):w},this.nestedObjectDelimeter=function(t){return t?(O=t,this):O};var K=function(t,e,n,a){var r,i,s;e||(e=[]),n||(n={});for(r in t)Object.prototype.hasOwnProperty.call(t,r)&&(s=t[r],angular.isObject(s)?K(s,e.concat(r),n,r):(i=e.length?""+e.join(O)+O+r:r,e.length&&r===a&&(n[""+e.join(O)]="@:"+i),n[i]=s));return n};K.displayName="flatObject",this.addInterpolation=function(t){return j.push(t),this},this.useMessageFormatInterpolation=function(){return this.useInterpolation("$translateMessageFormatInterpolation")},this.useInterpolation=function(t){return p=t,this},this.useSanitizeValueStrategy=function(t){return n.useStrategy(t),this},this.preferredLanguage=function(t){return t?(M(t),this):r};var M=function(t){return t&&(r=t),r};this.translationNotFoundIndicator=function(t){return this.translationNotFoundIndicatorLeft(t),this.translationNotFoundIndicatorRight(t),this},this.translationNotFoundIndicatorLeft=function(t){return t?(v=t,this):v},this.translationNotFoundIndicatorRight=function(t){return t?(m=t,this):m},this.fallbackLanguage=function(t){return U(t),this};var U=function(t){return t?(angular.isString(t)?(o=!0,s=[t]):angular.isArray(t)&&(o=!1,s=t),angular.isString(r)&&I(s,r)<0&&s.push(r),this):o?s[0]:s};this.use=function(t){if(t){if(!b[t]&&!h)throw new Error("$translateProvider couldn't find translationTable for langKey: '"+t+"'");return u=t,this}return u},this.resolveClientLocale=function(){return F()};var H=function(t){return t?(L=t,this):f?f+L:L};this.storageKey=H,this.useUrlLoader=function(t,e){return this.useLoader("$translateUrlLoader",angular.extend({url:t},e))},this.useStaticFilesLoader=function(t){return this.useLoader("$translateStaticFilesLoader",t)},this.useLoader=function(t,e){return h=t,d=e||{},this},this.useLocalStorage=function(){return this.useStorage("$translateLocalStorage")},this.useCookieStorage=function(){return this.useStorage("$translateCookieStorage")},this.useStorage=function(t){return c=t,this},this.storagePrefix=function(t){return t?(f=t,this):t},this.useMissingTranslationHandlerLog=function(){return this.useMissingTranslationHandler("$translateMissingTranslationHandlerLog")},this.useMissingTranslationHandler=function(t){return g=t,this},this.usePostCompiling=function(t){return N=!!t,this},this.forceAsyncReload=function(t){return C=!!t,this},this.uniformLanguageTag=function(t){return t?angular.isString(t)&&(t={standard:t}):t={},z=t.standard,this},this.determinePreferredLanguage=function(t){var e=t&&angular.isFunction(t)?t():F();return r=S.length?R(e)||e:e,this},this.registerAvailableLanguageKeys=function(t,e){return t?(S=t,e&&(i=e),this):S},this.useLoaderCache=function(t){return!1===t?$=void 0:!0===t?$=!0:void 0===t?$="$translationCache":t&&($=t),this},this.directivePriority=function(t){return void 0===t?k:(k=t,this)},this.statefulFilter=function(t){return void 0===t?A:(A=t,this)},this.postProcess=function(t){return y=t||void 0,this},this.keepContent=function(t){return P=!!t,this},this.$get=["$log","$injector","$rootScope","$q",function(t,e,n,a){var i,f,z,T=e.get(p||"$translateDefaultInterpolation"),x=!1,V={},G={},q=function(t,e,n,o,l,g){!u&&r&&(u=r);var p=l&&l!==u?R(l)||l:u;if(l&&lt(l),angular.isArray(t)){return function(t){for(var r={},i=[],s=0,u=t.length;s<u;s++)i.push(function(t){var i=a.defer(),s=function(e){r[t]=e,i.resolve([t,e])};return q(t,e,n,o,l,g).then(s,s),i.promise}(t[s]));return a.all(i).then(function(){return r})}(t)}var h=a.defer();t&&(t=_.apply(t));var d=function(){var t=G[p]||G[r];if(f=0,c&&!t){var e=i.get(L);if(t=G[e],s&&s.length){var n=I(s,e);f=0===n?1:0,I(s,r)<0&&s.push(r)}}return t}();if(d){var v=function(){l||(p=u),it(t,e,n,o,p,g).then(h.resolve,h.reject)};v.displayName="promiseResolved",d.finally(v).catch(angular.noop)}else it(t,e,n,o,p,g).then(h.resolve,h.reject);return h.promise},Y=function(t){return v&&(t=[v,t].join(" ")),m&&(t=[t,m].join(" ")),t},B=function(t){u=t,c&&i.put(q.storageKey(),u),n.$emit("$translateChangeSuccess",{language:t}),T.setLocale(u);var e=function(t,e){V[e].setLocale(u)};e.displayName="eachInterpolatorLocaleSetter",angular.forEach(V,e),n.$emit("$translateChangeEnd",{language:t})},J=function(t){if(!t)throw"No language key specified for loading.";var r=a.defer();n.$emit("$translateLoadingStart",{language:t}),x=!0;var i=$;"string"==typeof i&&(i=e.get(i));var s=angular.extend({},d,{key:t,$http:angular.extend({},{cache:i},d.$http)}),o=function(e){var a={};n.$emit("$translateLoadingSuccess",{language:t}),angular.isArray(e)?angular.forEach(e,function(t){angular.extend(a,K(t))}):angular.extend(a,K(e)),x=!1,r.resolve({key:t,table:a}),n.$emit("$translateLoadingEnd",{language:t})};o.displayName="onLoaderSuccess";var u=function(t){n.$emit("$translateLoadingError",{language:t}),r.reject(t),n.$emit("$translateLoadingEnd",{language:t})};return u.displayName="onLoaderError",e.get(h)(s).then(o,u),r.promise};if(c&&(!(i=e.get(c)).get||!i.put))throw new Error("Couldn't use storage '"+c+"', missing get() or put() method!");if(j.length){var Q=function(t){var n=e.get(t);n.setLocale(r||u),V[n.getInterpolationIdentifier()]=n};Q.displayName="interpolationFactoryAdder",angular.forEach(j,Q)}var W=function(t){var e=a.defer();if(Object.prototype.hasOwnProperty.call(b,t))e.resolve(b[t]);else if(G[t]){var n=function(t){D(t.key,t.table),e.resolve(t.table)};n.displayName="translationTableResolver",G[t].then(n,e.reject)}else e.reject();return e.promise},X=function(t,e,n,r,i){var s=a.defer(),o=function(a){if(Object.prototype.hasOwnProperty.call(a,e)&&null!==a[e]){r.setLocale(t);var o=a[e];if("@:"===o.substr(0,2))X(t,o.substr(2),n,r,i).then(s.resolve,s.reject);else{var l=r.interpolate(a[e],n,"service",i,e);l=ut(e,a[e],l,n,t),s.resolve(l)}r.setLocale(u)}else s.reject()};return o.displayName="fallbackTranslationResolver",W(t).then(o,s.reject),s.promise},Z=function(t,e,n,a,r){var i,s=b[t];if(s&&Object.prototype.hasOwnProperty.call(s,e)&&null!==s[e]){if(a.setLocale(t),i=a.interpolate(s[e],n,"filter",r,e),i=ut(e,s[e],i,n,t,r),!angular.isString(i)&&angular.isFunction(i.$$unwrapTrustedValue)){var o=i.$$unwrapTrustedValue();if("@:"===o.substr(0,2))return Z(t,o.substr(2),n,a,r)}else if("@:"===i.substr(0,2))return Z(t,i.substr(2),n,a,r);a.setLocale(u)}return i},tt=function(t,n,a,r){return g?e.get(g)(t,u,n,a,r):t},et=function(t,e,n,r,i,o){var u=a.defer();if(t<s.length){var l=s[t];X(l,e,n,r,o).then(function(t){u.resolve(t)},function(){return et(t+1,e,n,r,i,o).then(u.resolve,u.reject)})}else if(i)u.resolve(i);else{var c=tt(e,n,i);g&&c?u.resolve(c):u.reject(Y(e))}return u.promise},nt=function(t,e,n,a,r){var i;if(t<s.length){var o=s[t];(i=Z(o,e,n,a,r))||""===i||(i=nt(t+1,e,n,a))}return i},at=function(t,e,n,a,r){return et(z>0?z:f,t,e,n,a,r)},rt=function(t,e,n,a){return nt(z>0?z:f,t,e,n,a)},it=function(t,e,n,r,i,o){var u=a.defer(),l=i?b[i]:b,c=n?V[n]:T;if(l&&Object.prototype.hasOwnProperty.call(l,t)&&null!==l[t]){var f=l[t];if("@:"===f.substr(0,2))q(f.substr(2),e,n,r,i,o).then(u.resolve,u.reject);else{var p=c.interpolate(f,e,"service",o,t);p=ut(t,f,p,e,i),u.resolve(p)}}else{var h;g&&!x&&(h=tt(t,e,r)),i&&s&&s.length?at(t,e,c,r,o).then(function(t){u.resolve(t)},function(t){u.reject(Y(t))}):g&&!x&&h?r?u.resolve(r):u.resolve(h):r?u.resolve(r):u.reject(Y(t))}return u.promise},st=function(t,e,n,a,r){var i,o=a?b[a]:b,u=T;if(V&&Object.prototype.hasOwnProperty.call(V,n)&&(u=V[n]),o&&Object.prototype.hasOwnProperty.call(o,t)&&null!==o[t]){var l=o[t];"@:"===l.substr(0,2)?i=st(l.substr(2),e,n,a,r):(i=u.interpolate(l,e,"filter",r,t),i=ut(t,l,i,e,a,r))}else{var c;g&&!x&&(c=tt(t,e,r)),a&&s&&s.length?(f=0,i=rt(t,e,u,r)):i=g&&!x&&c?c:Y(t)}return i},ot=function(t){l===t&&(l=void 0),G[t]=void 0},ut=function(t,n,a,r,i,s){var o=y;return o&&("string"==typeof o&&(o=e.get(o)),o)?o(t,n,a,r,i,s):a},lt=function(t){b[t]||!h||G[t]||(G[t]=J(t).then(function(t){return D(t.key,t.table),t}))};q.preferredLanguage=function(t){return t&&M(t),r},q.cloakClassName=function(){return w},q.nestedObjectDelimeter=function(){return O},q.fallbackLanguage=function(t){if(void 0!==t&&null!==t){if(U(t),h&&s&&s.length)for(var e=0,n=s.length;e<n;e++)G[s[e]]||(G[s[e]]=J(s[e]));q.use(q.use())}return o?s[0]:s},q.useFallbackLanguage=function(t){if(void 0!==t&&null!==t)if(t){var e=I(s,t);e>-1&&(z=e)}else z=0},q.proposedLanguage=function(){return l},q.storage=function(){return i},q.negotiateLocale=R,q.use=function(t){if(!t)return u;var e=a.defer();e.promise.then(null,angular.noop),n.$emit("$translateChangeStart",{language:t});var r=R(t);return S.length>0&&!r?a.reject(t):(r&&(t=r),l=t,!C&&b[t]||!h||G[t]?G[t]?G[t].then(function(t){return l===t.key&&B(t.key),e.resolve(t.key),t},function(t){return!u&&s&&s.length>0&&s[0]!==t?q.use(s[0]).then(e.resolve,e.reject):e.reject(t)}):(e.resolve(t),B(t)):(G[t]=J(t).then(function(n){return D(n.key,n.table),e.resolve(n.key),l===t&&B(n.key),n},function(t){return n.$emit("$translateChangeError",{language:t}),e.reject(t),n.$emit("$translateChangeEnd",{language:t}),a.reject(t)}),G[t].finally(function(){ot(t)}).catch(angular.noop)),e.promise)},q.resolveClientLocale=function(){return F()},q.storageKey=function(){return H()},q.isPostCompilingEnabled=function(){return N},q.isForceAsyncReloadEnabled=function(){return C},q.isKeepContent=function(){return P},q.refresh=function(t){function e(t){var e=J(t);return G[t]=e,e.then(function(e){b[t]={},D(t,e.table),i[t]=!0},angular.noop),e}if(!h)throw new Error("Couldn't refresh translation table, no loader registered!");n.$emit("$translateRefreshStart",{language:t});var r=a.defer(),i={};if(r.promise.then(function(){for(var t in b)b.hasOwnProperty(t)&&(t in i||delete b[t]);u&&B(u)},angular.noop).finally(function(){n.$emit("$translateRefreshEnd",{language:t})}),t)b[t]?e(t).then(r.resolve,r.reject):r.reject();else{var o=s&&s.slice()||[];u&&-1===o.indexOf(u)&&o.push(u),a.all(o.map(e)).then(r.resolve,r.reject)}return r.promise},q.instant=function(t,e,n,a,i){var o=a&&a!==u?R(a)||a:u;if(null===t||angular.isUndefined(t))return t;if(a&&lt(a),angular.isArray(t)){for(var l={},c=0,f=t.length;c<f;c++)l[t[c]]=q.instant(t[c],e,n,a,i);return l}if(angular.isString(t)&&t.length<1)return t;t&&(t=_.apply(t));var p,h=[];r&&h.push(r),o&&h.push(o),s&&s.length&&(h=h.concat(s));for(var d=0,$=h.length;d<$;d++){var y=h[d];if(b[y]&&void 0!==b[y][t]&&(p=st(t,e,n,o,i)),void 0!==p)break}if(!p&&""!==p)if(v||m)p=Y(t);else{p=T.interpolate(t,e,"filter",i);var S;g&&!x&&(S=tt(t,e,i)),g&&!x&&S&&(p=S)}return p},q.versionInfo=function(){return"2.16.0"},q.loaderCache=function(){return $},q.directivePriority=function(){return k},q.statefulFilter=function(){return A},q.isReady=function(){return E};var ct=a.defer();ct.promise.then(function(){E=!0}),q.onReady=function(t){var e=a.defer();return angular.isFunction(t)&&e.promise.then(t),E?e.resolve():ct.promise.then(e.resolve),e.promise},q.getAvailableLanguageKeys=function(){return S.length>0?S:null},q.getTranslationTable=function(t){return(t=t||q.use())&&b[t]?angular.copy(b[t]):null};var ft=n.$on("$translateReady",function(){ct.resolve(),ft(),ft=null}),gt=n.$on("$translateChangeEnd",function(){ct.resolve(),gt(),gt=null});if(h){if(angular.equals(b,{})&&q.use()&&q.use(q.use()),s&&s.length)for(var pt=0,ht=s.length;pt<ht;pt++){var dt=s[pt];!C&&b[dt]||(G[dt]=J(dt).then(function(t){return D(t.key,t.table),n.$emit("$translateChangeEnd",{language:t.key}),t}))}}else n.$emit("$translateReady",{language:q.use()});return q}]}function n(t,e){"use strict";var n,a={};return a.setLocale=function(t){n=t},a.getInterpolationIdentifier=function(){return"default"},a.useSanitizeValueStrategy=function(t){return e.useStrategy(t),this},a.interpolate=function(n,a,r,i,s){a=a||{},a=e.sanitize(a,"params",i,r);var o;return angular.isNumber(n)?o=""+n:angular.isString(n)?(o=t(n)(a),o=e.sanitize(o,"text",i,r)):o="",o},a}function a(t,e,n,a,i){"use strict";var s=function(){return this.toString().replace(/^\s+|\s+$/g,"")},o=function(t){return angular.isString(t)?t.toLowerCase():t};return{restrict:"AE",scope:!0,priority:t.directivePriority(),compile:function(u,l){var c=l.translateValues?l.translateValues:void 0,f=l.translateInterpolation?l.translateInterpolation:void 0,g=l.translateSanitizeStrategy?l.translateSanitizeStrategy:void 0,p=u[0].outerHTML.match(/translate-value-+/i),h="^(.*)("+e.startSymbol()+".*"+e.endSymbol()+")(.*)",d="^(.*)"+e.startSymbol()+"(.*)"+e.endSymbol()+"(.*)";return function(u,v,m){u.interpolateParams={},u.preText="",u.postText="",u.translateNamespace=r(u);var $={},y=function(t){if(angular.isFunction(y._unwatchOld)&&(y._unwatchOld(),y._unwatchOld=void 0),angular.equals(t,"")||!angular.isDefined(t)){var n=s.apply(v.text()),a=n.match(h);if(angular.isArray(a)){u.preText=a[1],u.postText=a[3],$.translate=e(a[2])(u.$parent);var r=n.match(d);angular.isArray(r)&&r[2]&&r[2].length&&(y._unwatchOld=u.$watch(r[2],function(t){$.translate=t,j()}))}else $.translate=n||void 0}else $.translate=t;j()};!function(t,e,n){if(e.translateValues&&angular.extend(t,a(e.translateValues)(u.$parent)),p)for(var r in n)Object.prototype.hasOwnProperty.call(e,r)&&"translateValue"===r.substr(0,14)&&"translateValues"!==r&&(t[o(r.substr(14,1))+r.substr(15)]=n[r])}(u.interpolateParams,m,l);var b=!0;m.$observe("translate",function(t){void 0===t?y(""):""===t&&b||($.translate=t,j()),b=!1});for(var S in m)m.hasOwnProperty(S)&&"translateAttr"===S.substr(0,13)&&S.length>13&&function(t){m.$observe(t,function(e){$[t]=e,j()})}(S);if(m.$observe("translateDefault",function(t){u.defaultText=t,j()}),g&&m.$observe("translateSanitizeStrategy",function(t){u.sanitizeStrategy=a(t)(u.$parent),j()}),c&&m.$observe("translateValues",function(t){t&&u.$parent.$watch(function(){angular.extend(u.interpolateParams,a(t)(u.$parent))})}),p){for(var L in m)Object.prototype.hasOwnProperty.call(m,L)&&"translateValue"===L.substr(0,14)&&"translateValues"!==L&&function(t){m.$observe(t,function(e){var n=o(t.substr(14,1))+t.substr(15);u.interpolateParams[n]=e})}(L)}var j=function(){for(var t in $)$.hasOwnProperty(t)&&void 0!==$[t]&&w(t,$[t],u,u.interpolateParams,u.defaultText,u.translateNamespace)},w=function(e,n,a,r,i,s){n?(s&&"."===n.charAt(0)&&(n=s+n),t(n,r,f,i,a.translateLanguage,a.sanitizeStrategy).then(function(t){N(t,a,!0,e)},function(t){N(t,a,!1,e)})):N(n,a,!1,e)},N=function(e,a,r,i){if(r||void 0!==a.defaultText&&(e=a.defaultText),"translate"===i){(r||!r&&!t.isKeepContent()&&void 0===m.translateKeepContent)&&v.empty().append(a.preText+e+a.postText);var s=t.isPostCompilingEnabled(),o=void 0!==l.translateCompile,u=o&&"false"!==l.translateCompile;(s&&!o||u)&&n(v.contents())(a)}else{var c=m.$attr[i];"data-"===c.substr(0,5)&&(c=c.substr(5)),c=c.substr(15),v.attr(c,e)}};(c||p||m.translateDefault)&&u.$watch("interpolateParams",j,!0),u.$on("translateLanguageChanged",j);var C=i.$on("$translateChangeSuccess",j);v.text().length?y(m.translate?m.translate:""):m.translate&&y(m.translate),j(),u.$on("$destroy",C)}}}}function r(t){"use strict";return t.translateNamespace?t.translateNamespace:t.$parent?r(t.$parent):void 0}function i(t,e){"use strict";return{restrict:"A",priority:t.directivePriority(),link:function(n,a,r){var i,o,u,l={},c=function(){angular.forEach(i,function(e,i){e&&(l[i]=!0,n.translateNamespace&&"."===e.charAt(0)&&(e=n.translateNamespace+e),t(e,o,r.translateInterpolation,void 0,n.translateLanguage,u).then(function(t){a.attr(i,t)},function(t){a.attr(i,t)}))}),angular.forEach(l,function(t,e){i[e]||(a.removeAttr(e),delete l[e])})};s(n,r.translateAttr,function(t){i=t},c),s(n,r.translateValues,function(t){o=t},c),s(n,r.translateSanitizeStrategy,function(t){u=t},c),r.translateValues&&n.$watch(r.translateValues,c,!0),n.$on("translateLanguageChanged",c);var f=e.$on("$translateChangeSuccess",c);c(),n.$on("$destroy",f)}}}function s(t,e,n,a){"use strict";e&&("::"===e.substr(0,2)?e=e.substr(2):t.$watch(e,function(t){n(t),a()},!0),n(t.$eval(e)))}function o(t,e){"use strict";return{compile:function(n){var a=function(e){e.addClass(t.cloakClassName())},r=function(e){e.removeClass(t.cloakClassName())};return a(n),function(n,i,s){var o=r.bind(this,i),u=a.bind(this,i);s.translateCloak&&s.translateCloak.length?(s.$observe("translateCloak",function(e){t(e).then(o,u)}),e.$on("$translateChangeSuccess",function(){t(s.translateCloak).then(o,u)})):t.onReady(o)}}}}function u(){"use strict";return{restrict:"A",scope:!0,compile:function(){return{pre:function(t,e,n){t.translateNamespace=r(t),t.translateNamespace&&"."===n.translateNamespace.charAt(0)?t.translateNamespace+=n.translateNamespace:t.translateNamespace=n.translateNamespace}}}}}function r(t){"use strict";return t.translateNamespace?t.translateNamespace:t.$parent?r(t.$parent):void 0}function l(){"use strict";return{restrict:"A",scope:!0,compile:function(){return function(t,e,n){n.$observe("translateLanguage",function(e){t.translateLanguage=e}),t.$watch("translateLanguage",function(){t.$broadcast("translateLanguageChanged")})}}}}function c(t,e){"use strict";var n=function(n,a,r,i){if(!angular.isObject(a)){var s=this||{__SCOPE_IS_NOT_AVAILABLE:"More info at https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f"};a=t(a)(s)}return e.instant(n,a,r,i)};return e.statefulFilter()&&(n.$stateful=!0),n}function f(t){"use strict";return t("translations")}return t.$inject=["$translate"],e.$inject=["$STORAGE_KEY","$windowProvider","$translateSanitizationProvider","pascalprechtTranslateOverrider"],n.$inject=["$interpolate","$translateSanitization"],a.$inject=["$translate","$interpolate","$compile","$parse","$rootScope"],i.$inject=["$translate","$rootScope"],o.$inject=["$translate","$rootScope"],c.$inject=["$parse","$translate"],f.$inject=["$cacheFactory"],angular.module("pascalprecht.translate",["ng"]).run(t),t.displayName="runTranslate",angular.module("pascalprecht.translate").provider("$translateSanitization",function(){"use strict";var t,e,n,a=null,r=!1,i=!1;(n={sanitize:function(t,e){return"text"===e&&(t=o(t)),t},escape:function(t,e){return"text"===e&&(t=s(t)),t},sanitizeParameters:function(t,e){return"params"===e&&(t=l(t,o)),t},escapeParameters:function(t,e){return"params"===e&&(t=l(t,s)),t},sce:function(t,e,n){return"text"===e?t=u(t):"params"===e&&"filter"!==n&&(t=l(t,s)),t},sceParameters:function(t,e){return"params"===e&&(t=l(t,u)),t}}).escaped=n.escapeParameters,this.addStrategy=function(t,e){return n[t]=e,this},this.removeStrategy=function(t){return delete n[t],this},this.useStrategy=function(t){return r=!0,a=t,this},this.$get=["$injector","$log",function(s,o){var u={},l=function(t,e,a,r){return angular.forEach(r,function(r){if(angular.isFunction(r))t=r(t,e,a);else if(angular.isFunction(n[r]))t=n[r](t,e,a);else{if(!angular.isString(n[r]))throw new Error("pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: '"+r+"'");if(!u[n[r]])try{u[n[r]]=s.get(n[r])}catch(t){throw u[n[r]]=function(){},new Error("pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: '"+r+"'")}t=u[n[r]](t,e,a)}}),t},c=function(){r||i||(o.warn("pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details."),i=!0)};return s.has("$sanitize")&&(t=s.get("$sanitize")),s.has("$sce")&&(e=s.get("$sce")),{useStrategy:function(t){return function(e){t.useStrategy(e)}}(this),sanitize:function(t,e,n,r){if(a||c(),n||null===n||(n=a),!n)return t;r||(r="service");var i=angular.isArray(n)?n:[n];return l(t,e,r,i)}}}];var s=function(t){var e=angular.element("<div></div>");return e.text(t),e.html()},o=function(e){if(!t)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as 'escape'.");return t(e)},u=function(t){if(!e)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot find $sce service.");return e.trustAsHtml(t)},l=function(t,e,n){if(angular.isDate(t))return t;if(angular.isObject(t)){var a=angular.isArray(t)?[]:{};if(n){if(n.indexOf(t)>-1)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot interpolate parameter due recursive object")}else n=[];return n.push(t),angular.forEach(t,function(t,r){angular.isFunction(t)||(a[r]=l(t,e,n))}),n.splice(-1,1),a}return angular.isNumber(t)?t:!0===t||!1===t?t:angular.isUndefined(t)||null===t?t:e(t)}}),angular.module("pascalprecht.translate").constant("pascalprechtTranslateOverrider",{}).provider("$translate",e),e.displayName="displayName",angular.module("pascalprecht.translate").factory("$translateDefaultInterpolation",n),n.displayName="$translateDefaultInterpolation",angular.module("pascalprecht.translate").constant("$STORAGE_KEY","NG_TRANSLATE_LANG_KEY"),angular.module("pascalprecht.translate").directive("translate",a),a.displayName="translateDirective",angular.module("pascalprecht.translate").directive("translateAttr",i),i.displayName="translateAttrDirective",angular.module("pascalprecht.translate").directive("translateCloak",o),o.displayName="translateCloakDirective",angular.module("pascalprecht.translate").directive("translateNamespace",u),u.displayName="translateNamespaceDirective",angular.module("pascalprecht.translate").directive("translateLanguage",l),l.displayName="translateLanguageDirective",angular.module("pascalprecht.translate").filter("translate",c),c.displayName="translateFilterFactory",angular.module("pascalprecht.translate").factory("$translationCache",f),f.displayName="$translationCache","pascalprecht.translate"});
src/main/webapp/bower_components/angular-translate/bower.json
New file
@@ -0,0 +1,12 @@
{
  "name": "angular-translate",
  "description": "A translation module for AngularJS",
  "version": "2.16.0",
  "main": "./angular-translate.js",
  "ignore": [],
  "author": "Pascal Precht",
  "license": "MIT",
  "dependencies": {
    "angular": ">=1.2.26 <1.7"
  }
}
src/main/webapp/bower_components/angular-ui-router/.bower.json
New file
@@ -0,0 +1,34 @@
{
  "name": "angular-ui-router",
  "version": "0.4.2",
  "license": "MIT",
  "main": "./release/angular-ui-router.js",
  "dependencies": {
    "angular": "^1.0.8"
  },
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "component.json",
    "package.json",
    "lib",
    "config",
    "sample",
    "test",
    "tests",
    "ngdoc_assets",
    "Gruntfile.js",
    "files.js"
  ],
  "homepage": "https://github.com/angular-ui/angular-ui-router-bower",
  "_release": "0.4.2",
  "_resolution": {
    "type": "version",
    "tag": "0.4.2",
    "commit": "ef5ce80fa6ec8a2c6a87cf1cf1c5809e1950af11"
  },
  "_source": "https://github.com/angular-ui/angular-ui-router-bower.git",
  "_target": "0.4.2",
  "_originalSource": "angular-ui-router"
}
src/main/webapp/bower_components/angular-ui-router/CHANGELOG.md
New file
@@ -0,0 +1,430 @@
<a name="0.4.2"></a>
### 0.4.2 (2017-01-20)
#### Bug Fixes
* **state:** avoid promise.catch() in favor of silenceUncaughtInPromise() ([86df71e7](https://github.com/angular-ui/ui-router/commit/86df71e74bcf166847053a3c590991fc774f2100))
<a name="0.4.1"></a>
### 0.4.1 (2017-01-19)
## [0.4.1](https://github.com/angular-ui/ui-router/compare/0.4.0...0.4.1) (2016-11-03)
#### Bug Fixes
* **resolve:** Fix 'possibly unhandled rejection' in rejected resolves ([f73e5516](https://github.com/angular-ui/ui-router/commit/f73e5516d8232d8307690c70f53d4a20eb486479), closes [#2889](https://github.com/angular-ui/ui-router/issues/2889))
<a name="0.4.0"></a>
## 0.4.0 (2017-01-17)
## [0.4.0](https://github.com/angular-ui/ui-router/compare/0.3.2...0.4.0) (2016-11-03)
#### Bug Fixes
* **$state:** Fix "Possibly unhandled rejection" by catch()ing the transition promise ([f2910e9b](https://github.com/angular-ui/ui-router/commit/f2910e9b00ebcf652abab2af8a405b5b5fbca054), closes [#3246](https://github.com/angular-ui/ui-router/issues/3246), [#2889](https://github.com/angular-ui/ui-router/issues/2889))
* **ui-sref-active-eq:** Compare parameter values using typed parameters ([67e4997e](https://github.com/angular-ui/ui-router/commit/67e4997eadfc1f7f5af8efd7cb676218cc69129e))
* **uiView:** do not leave initial view scope undestroyed (fix unhandled rejection) ([5be98e04](https://github.com/angular-ui/ui-router/commit/5be98e047a096012762096922a2756a0a0a0ea60), closes [#3164](https://github.com/angular-ui/ui-router/issues/3164))
* **urlMatcherFactory:** Check for null in int.is() Fixes message: Cannot read property 'toString' of nul ([61728d71](https://github.com/angular-ui/ui-router/commit/61728d717ab4f7b03a017c4666ab1a5a1ffe4620), closes [#3197](https://github.com/angular-ui/ui-router/issues/3197))
#### Features
* **$templateFactory:** use $templateRequest from AngularJS ([9a1af98](https://github.com/angular-ui/ui-router/commit/9a1af98)), closes [#]
* **$templateFactory:** refactor to a Provider to have a $http/$templateRequest switch ([7f1dec00](https://github.com/angular-ui/ui-router/commit/7f1dec008e98ae206c53d67268c330846c4d227d))
# BREAKING CHANGE: Use angular 1.3+ `$templateRequest` service to fetch templates
We now fetch templates using `$templateRequest` when it is available (angular 1.3+).
You can revert to previous template fetching behavior using `$http` by configuring the ui-router `$templateFactoryProvider`.
```js
.config(function($templateFactoryProvider) {
  $templateFactoryProvider.shouldUnsafelyUseHttp(true);
});
```
There are security ramifications to using `$http` to fetch templates.
Read
[Impact on loading templates](https://docs.angularjs.org/api/ng/service/$sce#impact-on-loading-templates)
for more details.
<a name="0.3.2"></a>
## [0.3.2](https://github.com/angular-ui/ui-router/compare/0.3.1...0.3.2) (2016-11-03)
### Bug Fixes
* **$state.transitionTo:** trigger $stateChangeCancel appropriately ([#3039](https://github.com/angular-ui/ui-router/issues/3039)) ([ca7c366](https://github.com/angular-ui/ui-router/commit/ca7c366)), closes [#3027](https://github.com/angular-ui/ui-router/issues/3027)
* **promise:** avoid uncaught in promise errors due to transition rejections ([66ab048](https://github.com/angular-ui/ui-router/commit/66ab048)), closes [#2889](https://github.com/angular-ui/ui-router/issues/2889)
* **state.includes:** compare param vals using typed parameter (not using `==`) ([6958c24](https://github.com/angular-ui/ui-router/commit/6958c24)), closes [#2696](https://github.com/angular-ui/ui-router/issues/2696)
* **stateDirective:** using on to attach an event handler instead of bind ([#3036](https://github.com/angular-ui/ui-router/issues/3036)) ([a8aa40a](https://github.com/angular-ui/ui-router/commit/a8aa40a))
* **urlMatcherFactory:** fix tilde edge case with "string" encoding ([#3021](https://github.com/angular-ui/ui-router/issues/3021)) ([953235a](https://github.com/angular-ui/ui-router/commit/953235a))
<a name="0.3.1"></a>
### 0.3.1 (2016-06-03)
# obscure BC-BREAK
If you're using `element.data('$uiView').$animEnter`, switch to `element.data('$uiViewAnim').$animEnter`
This was necessary in order to fix #2763
#### Bug Fixes
* **state:**
  * fire $stateChangeError if onEnter/onExit throws. closes #2772 ([a5756c38](https://github.com/angular-ui/ui-router/commit/a5756c38a282bd2556ed5faaf870d6e493722d1b))
  * fail transition on exceptions in transition handler ([8222fb0e](https://github.com/angular-ui/ui-router/commit/8222fb0e7fd5eaaf6382f36db9ee9077a7bdbc6d))
* **uiView:** separate $uiView and $uiViewAnim element.data() ([d3502f3c](https://github.com/angular-ui/ui-router/commit/d3502f3c0cb6a63f4b80aac91428f748b6460396), closes [#2763](https://github.com/angular-ui/ui-router/issues/2763))
  * Fixes this error: `Cannot read property 'name' of undefined at getUiViewName`
<a name="0.3.0"></a>
## 0.3.0 (2016-05-14)
This is a release of the `legacy` branch, primarily to fix the $scope destroy ordering issues introduced in 0.2.16.
We recommend all users to try the 1.0.0 alpha and report any issues it causes with your application. Read the [known breaking changes](https://github.com/angular-ui/ui-router/issues/2219) between the legacy and 1.0 branches.
# BC-BREAK
In 0.2.16 we delayed the ui-view $scope destroy() until after all animations were completed.  This was a mistake, and we're reverting it in 0.3.0.
The original issue that we tried to address: https://github.com/angular-ui/ui-router/issues/1643
We are switching back to 0.2.15 behavior. The scope is now destroyed as soon as the view is swapped out. This allows cleanup to happen in response
to the $destroy event. If you need to do things after the animation, we've put the promise on the `element.data('$uiView')` in #2562
#### Bug Fixes
* **state:** Inject $state at runtime to force initialization ([de3a04a7](https://github.com/angular-ui/ui-router/commit/de3a04a7c676e05b5b868de4f65d03d9c588773c), closes [#2574](https://github.com/angular-ui/ui-router/issues/2574))
* **ui-sref:** update ui-sref-active/eq info when params change When ui-state dynamicly changes ([9698ec4d](https://github.com/angular-ui/ui-router/commit/9698ec4d2fbceb463cf11e43b7e74e385eda4beb), closes [#2554](https://github.com/angular-ui/ui-router/issues/2554))
* **ui-state:** update ui-sref-active/eq info when ui-state dynamicly changes watchers, make sur ([abb3deba](https://github.com/angular-ui/ui-router/commit/abb3debacb87e1a6c398a13f2d64c53e8b08a233), closes [#2488](https://github.com/angular-ui/ui-router/issues/2488))
#### Features
* **uiView:**
  * Fire the $onInit hook ([b090ca03](https://github.com/angular-ui/ui-router/commit/b090ca0352eabc13662a8702a2b227b7db606362), closes [#2559](https://github.com/angular-ui/ui-router/issues/2559))
  * Put $animate promises on element.data('$uiView') closes #2562 closes #2579 ([fde64e18](https://github.com/angular-ui/ui-router/commit/fde64e1897041e59cbc9f8d07b269dcd487abb9c))
<a name="0.2.18"></a>
### 0.2.18 (2016-02-07)
This is a maintenance release which fixes a few known bugs introduced in 0.2.16.
#### Bug Fixes
* **$urlRouter:** revert BC: resolve clashing of routes This reverts commit b5c57c8ec2e14e17e75104 ([2f1ebefc](https://github.com/angular-ui/ui-router/commit/2f1ebefc242ff48960e0bf63da359296a38f6852), closes [#2501](https://github.com/angular-ui/ui-router/issues/2501))
* **uiState:** Corrected typo for 'ref' variable (#2488, #2508) ([b8f3c144](https://github.com/angular-ui/ui-router/commit/b8f3c144b913e620f177b78f3b4f52afa61d41a6))
* **$urlMatcherFactory:** Fix to make the YUI Javascript compressor work ([ad9c41d2](https://github.com/angular-ui/ui-router/commit/ad9c41d2e723d50e30dd3452fbd274b7057dc3d9))
* **stateBuilder:** fix non-url params on a state without a url. The parameters are now applied when ([d6d8c332](https://github.com/angular-ui/ui-router/commit/d6d8c3322c4dde8bb5b8dde25f9fcda49e9c4c81), closes [#2025](https://github.com/angular-ui/ui-router/issues/2025))
* **ui-view:** (ui-view) use static renderer when no animation is present for a ui-view ([2523bbdb](https://github.com/angular-ui/ui-router/commit/2523bbdb5542483a489c22804f1751b8b9f71703), closes [#2485](https://github.com/angular-ui/ui-router/issues/2485)). This allows a ui-view scope to be destroyed when switching states, before the next view is initialized.
#### Features
* **ui-view:** Add noanimation attribute to specify static renderer. ([2523bbdb](https://github.com/angular-ui/ui-router/commit/2523bbdb5542483a489c22804f1751b8b9f71703), closes [#2485](https://github.com/angular-ui/ui-router/issues/2485)). This allows a ui-view scope to be destroyed before the next ui-view is initialized, when ui-view animation is not present.
<a name="0.2.17"></a>
### 0.2.17 (2016-01-25)
#### Bug Fixes
* **uiSrefActive:** allow multiple classes ([a89114a0](https://github.com/angular-ui/ui-router/commit/a89114a083813c1a7280c48fc18e626caa5a31f4), closes [#2481](https://github.com/angular-ui/ui-router/issues/2481), [#2482](https://github.com/angular-ui/ui-router/issues/2482))
<a name="0.2.16"></a>
### 0.2.16 (2016-01-24)
#### Bug Fixes
* **$state:**
  * statechangeCancel: Avoid infinite digest in .otherwise/redirect case. Don't clobber url if a new transition has started.  Closes #222 ([e00aa695](https://github.com/angular-ui/ui-router/commit/e00aa695e41ddc5ebd5d2b226aa0917a751b11aa), closes [#2238](https://github.com/angular-ui/ui-router/issues/2238))
  * transitionTo: Allow hash (#) value to be read as toParams['#'] in events.  Re-add the saved hash before broadcasting $stateChangeStart event.  ([8c1bf30d](https://github.com/angular-ui/ui-router/commit/8c1bf30d2a3b78ba40b330f12d854c885d6cc117))
* **$stateParams:** Fix for testing: reset service instance between tests ([2aeb0c4b](https://github.com/angular-ui/ui-router/commit/2aeb0c4b205baf6cfa2ef25bb986bb160dc13bf9))
* **$urlRouter:**
  * Sort URL rules by specificity. Potential minor BC if apps were relying on rule registration order.  ([b5c57c8e](https://github.com/angular-ui/ui-router/commit/b5c57c8ec2e14e17e75104c1424654f126ea4011))
  * Use $sniffer for pushstate compat check ([c219e801](https://github.com/angular-ui/ui-router/commit/c219e801797f340ef9c5c919ab890ef003a7a042))
* **UrlMatcher:**
  * Properly encode/decode slashes in parameters Closes #2172 Closes #2250 Closes #1 ([02e98660](https://github.com/angular-ui/ui-router/commit/02e98660a80dfd1ca4b113dd24ee304af91e9f8c), closes [#2339](https://github.com/angular-ui/ui-router/issues/2339))
  * Array types:  Fix default value for array query parameters.  Pass empty arrays through in handler. ([20d6e243](https://github.com/angular-ui/ui-router/commit/20d6e243f1745ddbf257217245a1dc22eabe13da), closes [#2222](https://github.com/angular-ui/ui-router/issues/2222))
  * Remove trailing slash, if parameter is optional and was squashed from URL ([77fa11bf](https://github.com/angular-ui/ui-router/commit/77fa11bf0787d0f6da97ab0003ab29afb7411391), closes [#1902](https://github.com/angular-ui/ui-router/issues/1902))
  * Allow a parameter declaration to configure the parameter type by name. closes #2294 ([e4010249](https://github.com/angular-ui/ui-router/commit/e40102492d40fe1cf6ba14d955fcc9f345c16458))
  * include the slash when recognizing squashed params in url ([b5130bb1](https://github.com/angular-ui/ui-router/commit/b5130bb1215e15f832ea6daa670410b9a950c0d4), closes [#2064](https://github.com/angular-ui/ui-router/issues/2064))
  * Allow url query param names to contain periods ([d31b3337](https://github.com/angular-ui/ui-router/commit/d31b3337cc2ce71d87c92fdded629e46558d0b49))
* **reloadOnSearch:** Update `locals.globals.$stateParams` when reloadOnSearch=false ([350d3e87](https://github.com/angular-ui/ui-router/commit/350d3e87783a2263fd7d23913da34f1268c3300b), closes [#2356](https://github.com/angular-ui/ui-router/issues/2356))
* **ui-view:**
  * fix $animate usage for ng 1.4+ ([9b6d9a2d](https://github.com/angular-ui/ui-router/commit/9b6d9a2d0ce4ae08384165cb517bddea59b67892))
  * change $viewContentLoading to pair with $viewContentLoaded ([f9b43d66](https://github.com/angular-ui/ui-router/commit/f9b43d66833f0e17de41fd8d1cc3b491e3ba4a0e), closes [#685](https://github.com/angular-ui/ui-router/issues/685))
  * $destroy event is triggered before animation ends ([1be13795](https://github.com/angular-ui/ui-router/commit/1be13795686ab78abb2d5094bc8addcacb928975))
* **uiSref:**
  * Ensure URL once param checks pass ([9dc31c54](https://github.com/angular-ui/ui-router/commit/9dc31c5465328e5666468b0c2319ce205f4b72f8), closes [#2091](https://github.com/angular-ui/ui-router/issues/2091))
  * uiSrefActive: update the active classes after linking directive ([7c914030](https://github.com/angular-ui/ui-router/commit/7c914030f13e05e45a941c1b723cb785db729890))
#### Features
* **$IncludedByStateFilter:** add parameters to $IncludedByStateFilter ([963f6e71](https://github.com/angular-ui/ui-router/commit/963f6e71633b9c3a266f3991d79089b7d14786b4), closes [#1735](https://github.com/angular-ui/ui-router/issues/1735))
* **isStateFilter:** Include optional state params. ([71d74699](https://github.com/angular-ui/ui-router/commit/71d7469987ee9ca86a41c8c6393ccd5d8913c3d6))
* **$state:** make state data inheritance prototypical ([c4fec8c7](https://github.com/angular-ui/ui-router/commit/c4fec8c7998113902af4152d716c42dada6eb465))
* **$stateChangeStart:** Add options to event ([a1f07559](https://github.com/angular-ui/ui-router/commit/a1f07559ec74e10ff80bc4be81f287e3772b8fcb))
* **UrlMatcher:** Add param only type names ([6a371f9b](https://github.com/angular-ui/ui-router/commit/6a371f9b70e37a82eb324122879e4473c3f6d526))
* **uiSrefActive:**
  * provide a ng-{class,style} like interface ([a9ff6feb](https://github.com/angular-ui/ui-router/commit/a9ff6febb469e0d5cd49054216c4472df7a6259d))
  * allow active & active-eq on same element ([d9a676ba](https://github.com/angular-ui/ui-router/commit/d9a676ba2c4d9e954be224c60496bcb38f6074e3))
* **uiState:** add ui-state directive ([3831af1d](https://github.com/angular-ui/ui-router/commit/3831af1dc71b601351e6694af0665a77297f8f7f), closes [#395](https://github.com/angular-ui/ui-router/issues/395), [#900](https://github.com/angular-ui/ui-router/issues/900), [#1932](https://github.com/angular-ui/ui-router/issues/1932))
* **urlMatcher:** add support for optional spaces in params ([4b7f3046](https://github.com/angular-ui/ui-router/commit/4b7f304617f0b3590b532103b5c2fb526c98a9e4))
<a name="0.2.15"></a>
### 0.2.15 (2015-05-19)
#### Bug Fixes
* **$state:** reloadOnSearch should not affect non-search param changes. ([6ca0d770](https://github.com/angular-ui/ui-router/commit/6ca0d7704cf7de9c6e6b7bb64df2f9c68fe081cc), closes [#1079](https://github.com/angular-ui/ui-router/issues/1079))
* **urlMatcherFactory:** Revert to 0.2.13 behavior where all string parameters are considered optional fi ([495a02c3](https://github.com/angular-ui/ui-router/commit/495a02c3cbde501c1c149bce137806669209bc29), closes [#1963](https://github.com/angular-ui/ui-router/issues/1963))
* **urlRouter:** allow .when() to redirect, even after a successful $state.go() - This partially  ([48aeaff6](https://github.com/angular-ui/ui-router/commit/48aeaff645baf3f42f5a8940ebd97563791ad9f8), closes [#1584](https://github.com/angular-ui/ui-router/issues/1584))
#### Features
* **$state:** Inject templateProvider with resolved values ([afa20f22](https://github.com/angular-ui/ui-router/commit/afa20f22373b7176b26daa7e1099750c4254a354))
<a name="0.2.14"></a>
### 0.2.14 (2015-04-23)
#### Bug Fixes
* **$StateRefDirective:** resolve missing support for svg anchor elements #1667 ([0149a7bb](https://github.com/angular-ui/ui-router/commit/0149a7bb38b7af99388a1ad7cc9909a7b7c4439d))
* **$urlMatcherFactory:**
  * regex params should respect case-sensitivity ([1e10519f](https://github.com/angular-ui/ui-router/commit/1e10519f3be6bbf0cefdcce623cd2ade06e649e5), closes [#1671](https://github.com/angular-ui/ui-router/issues/1671))
  * unquote all dashes from array params ([06664d33](https://github.com/angular-ui/ui-router/commit/06664d330f882390655dcfa83e10276110d0d0fa))
  * add Type.$normalize function ([b0c6aa23](https://github.com/angular-ui/ui-router/commit/b0c6aa2350fdd3ce8483144774adc12f5a72b7e9))
  * make optional params regex grouping optional ([06f73794](https://github.com/angular-ui/ui-router/commit/06f737945e83e668d09cfc3bcffd04a500ff1963), closes [#1576](https://github.com/angular-ui/ui-router/issues/1576))
* **$state:** allow about.*.** glob patterns ([e39b27a2](https://github.com/angular-ui/ui-router/commit/e39b27a2cb7d88525c446a041f9fbf1553202010))
* **uiSref:**
  * use Object's toString instead of Window's toString ([2aa7f4d1](https://github.com/angular-ui/ui-router/commit/2aa7f4d139dbd5b9fcc4afdcf2ab6642c87f5671))
  * add absolute to allowed transition options ([ae1b3c4e](https://github.com/angular-ui/ui-router/commit/ae1b3c4eedc37983400d830895afb50457c63af4))
* **uiSrefActive:** Apply active classes on lazy loaded states ([f0ddbe7b](https://github.com/angular-ui/ui-router/commit/f0ddbe7b4a91daf279c3b7d0cee732bb1f3be5b4))
* **uiView:** add `$element` to locals for view controller ([db68914c](https://github.com/angular-ui/ui-router/commit/db68914cd6c821e7dec8155bd33142a3a97f5453))
#### Features
* **$state:**
  * support URLs with #fragments ([3da0a170](https://github.com/angular-ui/ui-router/commit/3da0a17069e27598c0f9d9164e104dd5ce05cdc6))
  * inject resolve params into controllerProvider ([b380c223](https://github.com/angular-ui/ui-router/commit/b380c223fe12e2fde7582c0d6b1ed7b15a23579b), closes [#1131](https://github.com/angular-ui/ui-router/issues/1131))
  * added 'state' to state reload method (feat no.1612)  - modiefied options.reload  ([b8f04575](https://github.com/angular-ui/ui-router/commit/b8f04575a8557035c1858c4d5c8dbde3e1855aaa))
  * broadcast $stateChangeCancel event when event.preventDefault() is called in $sta ([ecefb758](https://github.com/angular-ui/ui-router/commit/ecefb758cb445e41620b62a272aafa3638613d7a))
* **$uiViewScroll:** change function to return promise ([c2a9a311](https://github.com/angular-ui/ui-router/commit/c2a9a311388bb212e5a2e820536d1d739f829ccd), closes [#1702](https://github.com/angular-ui/ui-router/issues/1702))
* **uiSrefActive:** Added support for multiple nested uiSref directives ([b1844948](https://github.com/angular-ui/ui-router/commit/b18449481d152b50705abfce2493a444eb059fa5))
<a name="0.2.13"></a>
### 0.2.13 (2014-11-20)
This release primarily fixes issues reported against 0.2.12
#### Bug Fixes
* **$state:** fix $state.includes/.is to apply param types before comparisions fix(uiSref): ma ([19715d15](https://github.com/angular-ui/ui-router/commit/19715d15e3cbfff724519e9febedd05b49c75baa), closes [#1513](https://github.com/angular-ui/ui-router/issues/1513))
  * Avoid re-synchronizing from url after .transitionTo ([b267ecd3](https://github.com/angular-ui/ui-router/commit/b267ecd348e5c415233573ef95ebdbd051875f52), closes [#1573](https://github.com/angular-ui/ui-router/issues/1573))
* **$urlMatcherFactory:**
  * Built-in date type uses local time zone ([d726bedc](https://github.com/angular-ui/ui-router/commit/d726bedcbb5f70a5660addf43fd52ec730790293))
  * make date type fn check .is before running ([aa94ce3b](https://github.com/angular-ui/ui-router/commit/aa94ce3b86632ad05301530a2213099da73a3dc0), closes [#1564](https://github.com/angular-ui/ui-router/issues/1564))
  * early binding of array handler bypasses type resolution ([ada4bc27](https://github.com/angular-ui/ui-router/commit/ada4bc27df5eff3ba3ab0de94a09bd91b0f7a28c))
  * add 'any' Type for non-encoding non-url params ([3bfd75ab](https://github.com/angular-ui/ui-router/commit/3bfd75ab445ee2f1dd55275465059ed116b10b27), closes [#1562](https://github.com/angular-ui/ui-router/issues/1562))
  * fix encoding slashes in params ([0c983a08](https://github.com/angular-ui/ui-router/commit/0c983a08e2947f999683571477debd73038e95cf), closes [#1119](https://github.com/angular-ui/ui-router/issues/1119))
  * fix mixed path/query params ordering problem ([a479fbd0](https://github.com/angular-ui/ui-router/commit/a479fbd0b8eb393a94320973e5b9a62d83912ee2), closes [#1543](https://github.com/angular-ui/ui-router/issues/1543))
* **ArrayType:**
  * specify empty array mapping corner case ([74aa6091](https://github.com/angular-ui/ui-router/commit/74aa60917e996b0b4e27bbb4eb88c3c03832021d), closes [#1511](https://github.com/angular-ui/ui-router/issues/1511))
  * fix .equals for array types ([5e6783b7](https://github.com/angular-ui/ui-router/commit/5e6783b77af9a90ddff154f990b43dbb17eeda6e), closes [#1538](https://github.com/angular-ui/ui-router/issues/1538))
* **Param:** fix default value shorthand declaration ([831d812a](https://github.com/angular-ui/ui-router/commit/831d812a524524c71f0ee1c9afaf0487a5a66230), closes [#1554](https://github.com/angular-ui/ui-router/issues/1554))
* **common:** fixed the _.filter clone to not create sparse arrays ([750f5cf5](https://github.com/angular-ui/ui-router/commit/750f5cf5fd91f9ada96f39e50d39aceb2caf22b6), closes [#1563](https://github.com/angular-ui/ui-router/issues/1563))
* **ie8:** fix calls to indexOf and filter ([dcb31b84](https://github.com/angular-ui/ui-router/commit/dcb31b843391b3e61dee4de13f368c109541813e), closes [#1556](https://github.com/angular-ui/ui-router/issues/1556))
#### Features
* add json parameter Type ([027f1fcf](https://github.com/angular-ui/ui-router/commit/027f1fcf9c0916cea651e88981345da6f9ff214a))
<a name="0.2.12"></a>
### 0.2.12 (2014-11-13)
#### Bug Fixes
* **$resolve:** use resolve fn result, not parent resolved value of same name ([67f5e00c](https://github.com/angular-ui/ui-router/commit/67f5e00cc9aa006ce3fe6cde9dff261c28eab70a), closes [#1317], [#1353])
* **$state:**
  * populate default params in .transitionTo. ([3f60fbe6](https://github.com/angular-ui/ui-router/commit/3f60fbe6d65ebeca8d97952c05aa1d269f1b7ba1), closes [#1396])
  * reload() now reinvokes controllers ([73443420](https://github.com/angular-ui/ui-router/commit/7344342018847902594dc1fc62d30a5c30f01763), closes [#582])
  * do not emit $viewContentLoading if notify: false ([74255feb](https://github.com/angular-ui/ui-router/commit/74255febdf48ae082a02ca1e735165f2c369a463), closes [#1387](https://github.com/angular-ui/ui-router/issues/1387))
  * register states at config-time ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a))
  * handle parent.name when parent is obj ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a))
* **$urlMatcherFactory:**
  * register types at config ([4533fe36](https://github.com/angular-ui/ui-router/commit/4533fe36e0ab2f0143edd854a4145deaa013915a), closes [#1476])
  * made path params default value "" for backwards compat ([8f998e71](https://github.com/angular-ui/ui-router/commit/8f998e71e43a0b31293331c981f5db0f0097b8ba))
  * Pre-replace certain param values for better mapping ([6374a3e2](https://github.com/angular-ui/ui-router/commit/6374a3e29ab932014a7c77d2e1ab884cc841a2e3))
  * fixed ParamSet.$$keys() ordering ([9136fecb](https://github.com/angular-ui/ui-router/commit/9136fecbc2bfd4fda748a9914f0225a46c933860))
  * empty string policy now respected in Param.value() ([db12c85c](https://github.com/angular-ui/ui-router/commit/db12c85c16f2d105415f9bbbdeb11863f64728e0))
  * "string" type now encodes/decodes slashes ([3045e415](https://github.com/angular-ui/ui-router/commit/3045e41577a8b8b8afc6039f42adddf5f3c061ec), closes [#1119])
  * allow arrays in both path and query params ([fdd2f2c1](https://github.com/angular-ui/ui-router/commit/fdd2f2c191c4a67c874fdb9ec9a34f8dde9ad180), closes [#1073], [#1045], [#1486], [#1394])
  * typed params in search ([8d4cab69](https://github.com/angular-ui/ui-router/commit/8d4cab69dd67058e1a716892cc37b7d80a57037f), closes [#1488](https://github.com/angular-ui/ui-router/issues/1488))
  * no longer generate unroutable urls ([cb9fd9d8](https://github.com/angular-ui/ui-router/commit/cb9fd9d8943cb26c7223f6990db29c82ae8740f8), closes [#1487](https://github.com/angular-ui/ui-router/issues/1487))
  * handle optional parameter followed by required parameter in url format. ([efc72106](https://github.com/angular-ui/ui-router/commit/efc72106ddcc4774b48ea176a505ef9e95193b41))
  * default to parameter string coersion. ([13a468a7](https://github.com/angular-ui/ui-router/commit/13a468a7d54c2fb0751b94c0c1841d580b71e6dc), closes [#1414](https://github.com/angular-ui/ui-router/issues/1414))
  * concat respects strictMode/caseInsensitive ([dd72e103](https://github.com/angular-ui/ui-router/commit/dd72e103edb342d9cf802816fe127e1bbd68fd5f), closes [#1395])
* **ui-sref:**
  * Allow sref state options to take a scope object ([b5f7b596](https://github.com/angular-ui/ui-router/commit/b5f7b59692ce4933e2d63eb5df3f50a4ba68ccc0))
  * replace raw href modification with attrs. ([08c96782](https://github.com/angular-ui/ui-router/commit/08c96782faf881b0c7ab00afc233ee6729548fa0))
  * nagivate to state when url is "" fix($state.href): generate href for state with  ([656b5aab](https://github.com/angular-ui/ui-router/commit/656b5aab906e5749db9b5a080c6a83b95f50fd91), closes [#1363](https://github.com/angular-ui/ui-router/issues/1363))
  * Check that state is defined in isMatch() ([92aebc75](https://github.com/angular-ui/ui-router/commit/92aebc7520f88babdc6e266536086e07263514c3), closes [#1314](https://github.com/angular-ui/ui-router/issues/1314), [#1332](https://github.com/angular-ui/ui-router/issues/1332))
* **uiView:**
  * allow inteprolated ui-view names ([81f6a19a](https://github.com/angular-ui/ui-router/commit/81f6a19a432dac9198fd33243855bfd3b4fea8c0), closes [#1324](https://github.com/angular-ui/ui-router/issues/1324))
  * Made anim work with angular 1.3 ([c3bb7ad9](https://github.com/angular-ui/ui-router/commit/c3bb7ad903da1e1f3c91019cfd255be8489ff4ef), closes [#1367](https://github.com/angular-ui/ui-router/issues/1367), [#1345](https://github.com/angular-ui/ui-router/issues/1345))
* **urlRouter:** html5Mode accepts an object from angular v1.3.0-rc.3 ([7fea1e9d](https://github.com/angular-ui/ui-router/commit/7fea1e9d0d8c6e09cc6c895ecb93d4221e9adf48))
* **stateFilters:** mark state filters as stateful. ([a00b353e](https://github.com/angular-ui/ui-router/commit/a00b353e3036f64a81245c4e7898646ba218f833), closes [#1479])
* **ui-router:** re-add IE8 compatibility for map/filter/keys ([8ce69d9f](https://github.com/angular-ui/ui-router/commit/8ce69d9f7c886888ab53eca7e53536f36b428aae), closes [#1518], [#1383])
* **package:** point 'main' to a valid filename ([ac903350](https://github.com/angular-ui/ui-router/commit/ac9033501debb63364539d91fbf3a0cba4579f8e))
* **travis:** make CI build faster ([0531de05](https://github.com/angular-ui/ui-router/commit/0531de052e414a8d839fbb4e7635e923e94865b3))
#### Features
##### Default and Typed params
This release includes a lot of bug fixes around default/optional and typed parameters.  As such, 0.2.12 is the first release where we recommend those features be used.
* **$state:**
  * add state params validation ([b1379e6a](https://github.com/angular-ui/ui-router/commit/b1379e6a4d38f7ed7436e05873932d7c279af578), closes [#1433](https://github.com/angular-ui/ui-router/issues/1433))
  * is/includes/get work on relative stateOrName ([232e94b3](https://github.com/angular-ui/ui-router/commit/232e94b3c2ca2c764bb9510046e4b61690c87852))
  * .reload() returns state transition promise ([639e0565](https://github.com/angular-ui/ui-router/commit/639e0565dece9d5544cc93b3eee6e11c99bd7373))
* **$templateFactory:** request templateURL as text/html ([ccd60769](https://github.com/angular-ui/ui-router/commit/ccd6076904a4b801d77b47f6e2de4c06ce9962f8), closes [#1287])
* **$urlMatcherFactory:** Made a Params and ParamSet class ([0cc1e6cc](https://github.com/angular-ui/ui-router/commit/0cc1e6cc461a4640618e2bb594566551c54834e2))
<a name="0.2.11"></a>
### 0.2.11 (2014-08-26)
#### Bug Fixes
* **$resolve:** Resolves only inherit from immediate parent fixes #702 ([df34e20c](https://github.com/angular-ui/ui-router/commit/df34e20c576299e7a3c8bd4ebc68d42341c0ace9))
* **$state:**
  * change $state.href default options.inherit to true ([deea695f](https://github.com/angular-ui/ui-router/commit/deea695f5cacc55de351ab985144fd233c02a769))
  * sanity-check state lookups ([456fd5ae](https://github.com/angular-ui/ui-router/commit/456fd5aec9ea507518927bfabd62b4afad4cf714), closes [#980](https://github.com/angular-ui/ui-router/issues/980))
  * didn't comply to inherit parameter ([09836781](https://github.com/angular-ui/ui-router/commit/09836781f126c1c485b06551eb9cfd4fa0f45c35))
  * allow view content loading broadcast ([7b78edee](https://github.com/angular-ui/ui-router/commit/7b78edeeb52a74abf4d3f00f79534033d5a08d1a))
* **$urlMatcherFactory:**
  * detect injected functions ([91f75ae6](https://github.com/angular-ui/ui-router/commit/91f75ae66c4d129f6f69e53bd547594e9661f5d5))
  * syntax ([1ebed370](https://github.com/angular-ui/ui-router/commit/1ebed37069bae8614d41541d56521f5c45f703f3))
* **UrlMatcher:**
  * query param function defaults ([f9c20530](https://github.com/angular-ui/ui-router/commit/f9c205304f10d8a4ebe7efe9025e642016479a51))
  * don't decode default values ([63607bdb](https://github.com/angular-ui/ui-router/commit/63607bdbbcb432d3fb37856a1cb3da0cd496804e))
* **travis:** update Node version to fix build ([d6b95ef2](https://github.com/angular-ui/ui-router/commit/d6b95ef23d9dacb4eba08897f5190a0bcddb3a48))
* **uiSref:**
  * Generate an href for states with a blank url. closes #1293 ([691745b1](https://github.com/angular-ui/ui-router/commit/691745b12fa05d3700dd28f0c8d25f8a105074ad))
  * should inherit params by default ([b973dad1](https://github.com/angular-ui/ui-router/commit/b973dad155ad09a7975e1476bd096f7b2c758eeb))
  * cancel transition if preventDefault() has been called ([2e6d9167](https://github.com/angular-ui/ui-router/commit/2e6d9167d3afbfbca6427e53e012f94fb5fb8022))
* **uiView:** Fixed infinite loop when is called .go() from a controller. ([e13988b8](https://github.com/angular-ui/ui-router/commit/e13988b8cd6231d75c78876ee9d012cc87f4a8d9), closes [#1194](https://github.com/angular-ui/ui-router/issues/1194))
* **docs:**
  * Fixed link to milestones ([6c0ae500](https://github.com/angular-ui/ui-router/commit/6c0ae500cc238ea9fc95adcc15415c55fc9e1f33))
  * fix bug in decorator example ([4bd00af5](https://github.com/angular-ui/ui-router/commit/4bd00af50b8b88a49d1545a76290731cb8e0feb1))
  * Removed an incorrect semi-colon ([af97cef8](https://github.com/angular-ui/ui-router/commit/af97cef8b967f2e32177e539ef41450dca131a7d))
  * Explain return value of rule as function ([5e887890](https://github.com/angular-ui/ui-router/commit/5e8878900a6ffe59a81aed531a3925e34a297377))
#### Features
* **$state:**
  * allow parameters to pass unharmed ([8939d057](https://github.com/angular-ui/ui-router/commit/8939d0572ab1316e458ef016317ecff53131a822))
    * **BREAKING CHANGE**: state parameters are no longer automatically coerced to strings, and unspecified parameter values are now set to undefined rather than null.
  * allow prevent syncUrl on failure ([753060b9](https://github.com/angular-ui/ui-router/commit/753060b910d5d2da600a6fa0757976e401c33172))
* **typescript:** Add typescript definitions for component builds ([521ceb3f](https://github.com/angular-ui/ui-router/commit/521ceb3fd7850646422f411921e21ce5e7d82e0f))
* **uiSref:** extend syntax for ui-sref ([71cad3d6](https://github.com/angular-ui/ui-router/commit/71cad3d636508b5a9fe004775ad1f1adc0c80c3e))
* **uiSrefActive:**
  * Also activate for child states. ([bf163ad6](https://github.com/angular-ui/ui-router/commit/bf163ad6ce176ce28792696c8302d7cdf5c05a01), closes [#818](https://github.com/angular-ui/ui-router/issues/818))
    * **BREAKING CHANGE** Since ui-sref-active now activates even when child states are active you may need to swap out your ui-sref-active with ui-sref-active-eq, thought typically we think devs want the auto inheritance.
  * uiSrefActiveEq: new directive with old ui-sref-active behavior
* **$urlRouter:**
  * defer URL change interception ([c72d8ce1](https://github.com/angular-ui/ui-router/commit/c72d8ce11916d0ac22c81b409c9e61d7048554d7))
  * force URLs to have valid params ([d48505cd](https://github.com/angular-ui/ui-router/commit/d48505cd328d83e39d5706e085ba319715f999a6))
  * abstract $location handling ([08b4636b](https://github.com/angular-ui/ui-router/commit/08b4636b294611f08db35f00641eb5211686fb50))
* **$urlMatcherFactory:**
  * fail on bad parameters ([d8f124c1](https://github.com/angular-ui/ui-router/commit/d8f124c10d00c7e5dde88c602d966db261aea221))
  * date type support ([b7f074ff](https://github.com/angular-ui/ui-router/commit/b7f074ff65ca150a3cdbda4d5ad6cb17107300eb))
  * implement type support ([450b1f0e](https://github.com/angular-ui/ui-router/commit/450b1f0e8e03c738174ff967f688b9a6373290f4))
* **UrlMatcher:**
  * handle query string arrays ([9cf764ef](https://github.com/angular-ui/ui-router/commit/9cf764efab45fa9309368688d535ddf6e96d6449), closes [#373](https://github.com/angular-ui/ui-router/issues/373))
  * injectable functions as defaults ([00966ecd](https://github.com/angular-ui/ui-router/commit/00966ecd91fb745846039160cab707bfca8b3bec))
  * default values & type decoding for query params ([a472b301](https://github.com/angular-ui/ui-router/commit/a472b301389fbe84d1c1fa9f24852b492a569d11))
  * allow shorthand definitions ([5b724304](https://github.com/angular-ui/ui-router/commit/5b7243049793505e44b6608ea09878c37c95b1f5))
  * validates whole interface ([32b27db1](https://github.com/angular-ui/ui-router/commit/32b27db173722e9194ef1d5c0ea7d93f25a98d11))
  * implement non-strict matching ([a3e21366](https://github.com/angular-ui/ui-router/commit/a3e21366bee0475c9795a1ec76f70eec41c5b4e3))
  * add per-param config support ([07b3029f](https://github.com/angular-ui/ui-router/commit/07b3029f4d409cf955780113df92e36401b47580))
    * **BREAKING CHANGE**: the `params` option in state configurations must now be an object keyed by parameter name.
### 0.2.10 (2014-03-12)
#### Bug Fixes
* **$state:** use $browser.baseHref() when generating urls with .href() ([cbcc8488](https://github.com/angular-ui/ui-router/commit/cbcc84887d6b6d35258adabb97c714cd9c1e272d))
* **bower.json:** JS files should not be ignored ([ccdab193](https://github.com/angular-ui/ui-router/commit/ccdab193315f304eb3be5f5b97c47a926c79263e))
* **dev:** karma:background issue is missing, can't run grunt:dev. ([d9f7b898](https://github.com/angular-ui/ui-router/commit/d9f7b898e8e3abb8c846b0faa16a382913d7b22b))
* **sample:** Contacts menu button not staying active when navigating to detail states. Need t ([2fcb8443](https://github.com/angular-ui/ui-router/commit/2fcb84437cb43ade12682a92b764f13cac77dfe7))
* **uiSref:** support mock-clicks/events with no data ([717d3ff7](https://github.com/angular-ui/ui-router/commit/717d3ff7d0ba72d239892dee562b401cdf90e418))
* **uiView:**
  * Do NOT autoscroll when autoscroll attr is missing ([affe5bd7](https://github.com/angular-ui/ui-router/commit/affe5bd785cdc3f02b7a9f64a52e3900386ec3a0), closes [#807](https://github.com/angular-ui/ui-router/issues/807))
  * Refactoring uiView directive to copy ngView logic ([548fab6a](https://github.com/angular-ui/ui-router/commit/548fab6ab9debc9904c5865c8bc68b4fc3271dd0), closes [#857](https://github.com/angular-ui/ui-router/issues/857), [#552](https://github.com/angular-ui/ui-router/issues/552))
#### Features
* **$state:** includes() allows glob patterns for state matching. ([2d5f6b37](https://github.com/angular-ui/ui-router/commit/2d5f6b37191a3135f4a6d9e8f344c54edcdc065b))
* **UrlMatcher:** Add support for case insensitive url matching ([642d5247](https://github.com/angular-ui/ui-router/commit/642d524799f604811e680331002feec7199a1fb5))
* **uiSref:** add support for transition options ([2ed7a728](https://github.com/angular-ui/ui-router/commit/2ed7a728cee6854b38501fbc1df6139d3de5b28a))
* **uiView:** add controllerAs config with function ([1ee7334a](https://github.com/angular-ui/ui-router/commit/1ee7334a73efeccc9b95340e315cdfd59944762d))
### 0.2.9 (2014-01-17)
This release is identical to 0.2.8. 0.2.8 was re-tagged in git to fix a problem with bower.
### 0.2.8 (2014-01-16)
#### Bug Fixes
* **$state:** allow null to be passed as 'params' param ([094dc30e](https://github.com/angular-ui/ui-router/commit/094dc30e883e1bd14e50a475553bafeaade3b178))
* **$state.go:** param inheritance shouldn't inherit from siblings ([aea872e0](https://github.com/angular-ui/ui-router/commit/aea872e0b983cb433436ce5875df10c838fccedb))
* **bower.json:** fixes bower.json ([eed3cc4d](https://github.com/angular-ui/ui-router/commit/eed3cc4d4dfef1d3ef84b9fd063127538ebf59d3))
* **uiSrefActive:** annotate controller injection ([85921422](https://github.com/angular-ui/ui-router/commit/85921422ff7fb0effed358136426d616cce3d583), closes [#671](https://github.com/angular-ui/ui-router/issues/671))
* **uiView:**
  * autoscroll tests pass on 1.2.4 & 1.1.5 ([86eacac0](https://github.com/angular-ui/ui-router/commit/86eacac09ca5e9000bd3b9c7ba6e2cc95d883a3a))
  * don't animate initial load ([83b6634d](https://github.com/angular-ui/ui-router/commit/83b6634d27942ca74766b2b1244a7fc52c5643d9))
  * test pass against 1.0.8 and 1.2.4 ([a402415a](https://github.com/angular-ui/ui-router/commit/a402415a2a28b360c43b9fe8f4f54c540f6c33de))
  * it should autoscroll when expr is missing. ([8bb9e27a](https://github.com/angular-ui/ui-router/commit/8bb9e27a2986725f45daf44c4c9f846385095aff))
#### Features
* **uiSref:** add target attribute behaviour ([c12bf9a5](https://github.com/angular-ui/ui-router/commit/c12bf9a520d30d70294e3d82de7661900f8e394e))
* **uiView:**
  * merge autoscroll expression test. ([b89e0f87](https://github.com/angular-ui/ui-router/commit/b89e0f871d5cc35c10925ede986c10684d5c9252))
  * cache and test autoscroll expression ([ee262282](https://github.com/angular-ui/ui-router/commit/ee2622828c2ce83807f006a459ac4e11406d9258))
src/main/webapp/bower_components/angular-ui-router/CONTRIBUTING.md
New file
@@ -0,0 +1,65 @@
# Report an Issue
Help us make UI-Router better! If you think you might have found a bug, or some other weirdness, start by making sure
it hasn't already been reported. You can [search through existing issues](https://github.com/angular-ui/ui-router/search?q=wat%3F&type=Issues)
to see if someone's reported one similar to yours.
If not, then [create a plunkr](http://bit.ly/UIR-Plunk) that demonstrates the problem (try to use as little code
as possible: the more minimalist, the faster we can debug it).
Next, [create a new issue](https://github.com/angular-ui/ui-router/issues/new) that briefly explains the problem,
and provides a bit of background as to the circumstances that triggered it. Don't forget to include the link to
that plunkr you created!
**Note**: If you're unsure how a feature is used, or are encountering some unexpected behavior that you aren't sure
is a bug, it's best to talk it out on
[StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) before reporting it. This
keeps development streamlined, and helps us focus on building great software.
Issues only! |
-------------|
Please keep in mind that the issue tracker is for *issues*. Please do *not* post an issue if you need help or support. Instead, see one of the above-mentioned forums or [IRC](irc://irc.freenode.net/#angularjs). |
####Purple Labels
A purple label means that **you** need to take some further action.
 - ![Not Actionable - Need Info](ngdoc_assets/incomplete.png): Your issue is not specific enough, or there is no clear action that we can take. Please clarify and refine your issue.
 - ![Plunkr Please](ngdoc_assets/example.png): Please [create a plunkr](http://bit.ly/UIR-Plunk)
 - ![StackOverflow](ngdoc_assets/so.png): We suspect your issue is really a help request, or could be answered by the community.  Please ask your question on [StackOverflow](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router).  If you determine that is an actual issue, please explain why.
If your issue gets labeled with purple label, no further action will be taken until you respond to the label appropriately.
# Contribute
**(1)** See the **[Developing](#developing)** section below, to get the development version of UI-Router up and running on your local machine.
**(2)** Check out the [roadmap](https://github.com/angular-ui/ui-router/milestones) to see where the project is headed, and if your feature idea fits with where we're headed.
**(3)** If you're not sure, [open an RFC](https://github.com/angular-ui/ui-router/issues/new?title=RFC:%20My%20idea) to get some feedback on your idea.
**(4)** Finally, commit some code and open a pull request. Code & commits should abide by the following rules:
- *Always* have test coverage for new features (or regression tests for bug fixes), and *never* break existing tests
- Commits should represent one logical change each; if a feature goes through multiple iterations, squash your commits down to one
- Make sure to follow the [Angular commit message format](https://github.com/angular/angular.js/blob/master/CONTRIBUTING.md#commit-message-format) so your change will appear in the changelog of the next release.
- Changes should always respect the coding style of the project
# Developing
UI-Router uses <code>grunt >= 0.4.x</code>. Make sure to upgrade your environment and read the
[Migration Guide](http://gruntjs.com/upgrading-from-0.3-to-0.4).
Dependencies for building from source and running tests:
* [grunt-cli](https://github.com/gruntjs/grunt-cli) - run: `$ npm install -g grunt-cli`
* Then, install the development dependencies by running `$ npm install` from the project directory
There are a number of targets in the gruntfile that are used to generating different builds:
* `grunt`: Perform a normal build, runs jshint and karma tests
* `grunt build`: Perform a normal build
* `grunt dist`: Perform a clean build and generate documentation
* `grunt dev`: Run dev server (sample app) and watch for changes, builds and runs karma tests on changes.
src/main/webapp/bower_components/angular-ui-router/LICENSE
New file
@@ -0,0 +1,21 @@
The MIT License
Copyright (c) 2013-2015 The AngularUI Team, Karsten Sperling
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
src/main/webapp/bower_components/angular-ui-router/README.md
New file
@@ -0,0 +1,252 @@
# AngularUI Router &nbsp;[![Build Status](https://travis-ci.org/angular-ui/ui-router.svg?branch=master)](https://travis-ci.org/angular-ui/ui-router)
#### The de-facto solution to flexible routing with nested views
---
**[Download 0.2.18](https://cdn.rawgit.com/angular-ui/ui-router/0.2.18/release/angular-ui-router.js)** (or **[Minified](https://cdn.rawgit.com/angular-ui/ui-router/0.2.18/release/angular-ui-router.min.js)**) **|**
**[Guide](https://github.com/angular-ui/ui-router/wiki) |**
**[API](http://angular-ui.github.io/ui-router/site) |**
**[Sample](http://angular-ui.github.com/ui-router/sample/) ([Src](https://github.com/angular-ui/ui-router/tree/gh-pages/sample)) |**
**[FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions) |**
**[Resources](#resources) |**
**[Report an Issue](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#report-an-issue) |**
**[Contribute](https://github.com/angular-ui/ui-router/blob/master/CONTRIBUTING.md#contribute) |**
**[Help!](http://stackoverflow.com/questions/ask?tags=angularjs,angular-ui-router) |**
**[Discuss](https://groups.google.com/forum/#!categories/angular-ui/router)**
---
*_Please help us out by testing the 1.0 alpha release!_*
[1.0.0alpha0 Announcement](https://github.com/angular-ui/ui-router/releases/tag/1.0.0alpha0) ([Source  Code](https://github.com/angular-ui/ui-router/tree/master)) | [Sample App](http://ui-router.github.io/sample-app/) ([Source Code](https://github.com/ui-router/sample-app)) | [Known Issues](https://github.com/angular-ui/ui-router/issues?q=is%3Aissue+is%3Aopen+label%3A1.0)
---
AngularUI Router is a routing framework for [AngularJS](http://angularjs.org), which allows you to organize the
parts of your interface into a [*state machine*](https://en.wikipedia.org/wiki/Finite-state_machine). Unlike the
[`$route` service](http://docs.angularjs.org/api/ngRoute.$route) in the Angular ngRoute module, which is organized around URL
routes, UI-Router is organized around [*states*](https://github.com/angular-ui/ui-router/wiki),
which may optionally have routes, as well as other behavior, attached.
States are bound to *named*, *nested* and *parallel views*, allowing you to powerfully manage your application's interface.
Check out the sample app: http://angular-ui.github.io/ui-router/sample/
-
**Note:** *UI-Router is under active development. As such, while this library is well-tested, the API may change. Consider using it in production applications only if you're comfortable following a changelog and updating your usage accordingly.*
## Get Started
**(1)** Get UI-Router in one of the following ways:
 - clone & [build](CONTRIBUTING.md#developing) this repository
 - [download the release](http://angular-ui.github.io/ui-router/release/angular-ui-router.js) (or [minified](http://angular-ui.github.io/ui-router/release/angular-ui-router.min.js))
 - [link to cdn](http://cdnjs.com/libraries/angular-ui-router)
 - via **[jspm](http://jspm.io/)**: by running `$ jspm install angular-ui-router` from your console
 - or via **[npm](https://www.npmjs.org/)**: by running `$ npm install angular-ui-router` from your console
 - or via **[Bower](http://bower.io/)**: by running `$ bower install angular-ui-router` from your console
 - or via **[Component](https://github.com/component/component)**: by running `$ component install angular-ui/ui-router` from your console
**(2)** Include `angular-ui-router.js` (or `angular-ui-router.min.js`) in your `index.html`, after including Angular itself (For Component users: ignore this step)
**(3)** Add `'ui.router'` to your main module's list of dependencies (For Component users: replace `'ui.router'` with `require('angular-ui-router')`)
When you're done, your setup should look similar to the following:
>
```html
<!doctype html>
<html ng-app="myApp">
<head>
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.1.5/angular.min.js"></script>
    <script src="js/angular-ui-router.min.js"></script>
    <script>
        var myApp = angular.module('myApp', ['ui.router']);
        // For Component users, it should look like this:
        // var myApp = angular.module('myApp', [require('angular-ui-router')]);
    </script>
    ...
</head>
<body>
    ...
</body>
</html>
```
### [Nested States & Views](http://plnkr.co/edit/u18KQc?p=preview)
The majority of UI-Router's power is in its ability to nest states & views.
**(1)** First, follow the [setup](#get-started) instructions detailed above.
**(2)** Then, add a [`ui-view` directive](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-view) to the `<body />` of your app.
>
```html
<!-- index.html -->
<body>
    <div ui-view></div>
    <!-- We'll also add some navigation: -->
    <a ui-sref="state1">State 1</a>
    <a ui-sref="state2">State 2</a>
</body>
```
**(3)** You'll notice we also added some links with [`ui-sref` directives](https://github.com/angular-ui/ui-router/wiki/Quick-Reference#ui-sref). In addition to managing state transitions, this directive auto-generates the `href` attribute of the `<a />` element it's attached to, if the corresponding state has a URL. Next we'll add some templates. These will plug into the `ui-view` within `index.html`. Notice that they have their own `ui-view` as well! That is the key to nesting states and views.
>
```html
<!-- partials/state1.html -->
<h1>State 1</h1>
<hr/>
<a ui-sref="state1.list">Show List</a>
<div ui-view></div>
```
```html
<!-- partials/state2.html -->
<h1>State 2</h1>
<hr/>
<a ui-sref="state2.list">Show List</a>
<div ui-view></div>
```
**(4)** Next, we'll add some child templates. *These* will get plugged into the `ui-view` of their parent state templates.
>
```html
<!-- partials/state1.list.html -->
<h3>List of State 1 Items</h3>
<ul>
  <li ng-repeat="item in items">{{ item }}</li>
</ul>
```
>
```html
<!-- partials/state2.list.html -->
<h3>List of State 2 Things</h3>
<ul>
  <li ng-repeat="thing in things">{{ thing }}</li>
</ul>
```
**(5)** Finally, we'll wire it all up with `$stateProvider`. Set up your states in the module config, as in the following:
>
```javascript
myApp.config(function($stateProvider, $urlRouterProvider) {
  //
  // For any unmatched url, redirect to /state1
  $urlRouterProvider.otherwise("/state1");
  //
  // Now set up the states
  $stateProvider
    .state('state1', {
      url: "/state1",
      templateUrl: "partials/state1.html"
    })
    .state('state1.list', {
      url: "/list",
      templateUrl: "partials/state1.list.html",
      controller: function($scope) {
        $scope.items = ["A", "List", "Of", "Items"];
      }
    })
    .state('state2', {
      url: "/state2",
      templateUrl: "partials/state2.html"
    })
    .state('state2.list', {
      url: "/list",
      templateUrl: "partials/state2.list.html",
      controller: function($scope) {
        $scope.things = ["A", "Set", "Of", "Things"];
      }
    });
});
```
**(6)** See this quick start example in action.
>**[Go to Quick Start Plunker for Nested States & Views](http://plnkr.co/edit/u18KQc?p=preview)**
**(7)** This only scratches the surface
>**[Dive Deeper!](https://github.com/angular-ui/ui-router/wiki)**
### [Multiple & Named Views](http://plnkr.co/edit/SDOcGS?p=preview)
Another great feature is the ability to have multiple `ui-view`s view per template.
**Pro Tip:** *While multiple parallel views are a powerful feature, you'll often be able to manage your
interfaces more effectively by nesting your views, and pairing those views with nested states.*
**(1)** Follow the [setup](#get-started) instructions detailed above.
**(2)** Add one or more `ui-view` to your app, give them names.
>
```html
<!-- index.html -->
<body>
    <div ui-view="viewA"></div>
    <div ui-view="viewB"></div>
    <!-- Also a way to navigate -->
    <a ui-sref="route1">Route 1</a>
    <a ui-sref="route2">Route 2</a>
</body>
```
**(3)** Set up your states in the module config:
>
```javascript
myApp.config(function($stateProvider) {
  $stateProvider
    .state('index', {
      url: "",
      views: {
        "viewA": { template: "index.viewA" },
        "viewB": { template: "index.viewB" }
      }
    })
    .state('route1', {
      url: "/route1",
      views: {
        "viewA": { template: "route1.viewA" },
        "viewB": { template: "route1.viewB" }
      }
    })
    .state('route2', {
      url: "/route2",
      views: {
        "viewA": { template: "route2.viewA" },
        "viewB": { template: "route2.viewB" }
      }
    })
});
```
**(4)** See this quick start example in action.
>**[Go to Quick Start Plunker for Multiple & Named Views](http://plnkr.co/edit/SDOcGS?p=preview)**
## Resources
* [In-Depth Guide](https://github.com/angular-ui/ui-router/wiki)
* [API Reference](http://angular-ui.github.io/ui-router/site)
* [Sample App](http://angular-ui.github.com/ui-router/sample/) ([Source](https://github.com/angular-ui/ui-router/tree/gh-pages/sample))
* [FAQ](https://github.com/angular-ui/ui-router/wiki/Frequently-Asked-Questions)
* [Slides comparing ngRoute to ui-router](http://slid.es/timkindberg/ui-router#/)
* [UI-Router Extras / Addons](http://christopherthielen.github.io/ui-router-extras/#/home) (@christopherthielen)
### Videos
* [Introduction Video](https://egghead.io/lessons/angularjs-introduction-ui-router) (egghead.io)
* [Tim Kindberg on Angular UI-Router](https://www.youtube.com/watch?v=lBqiZSemrqg)
* [Activating States](https://egghead.io/lessons/angularjs-ui-router-activating-states) (egghead.io)
* [Learn Angular.js using UI-Router](http://youtu.be/QETUuZ27N0w) (LearnCode.academy)
## Reporting issues and Contributing
Please read our [Contributor guidelines](CONTRIBUTING.md) before reporting an issue or creating a pull request.
src/main/webapp/bower_components/angular-ui-router/bower.json
New file
@@ -0,0 +1,24 @@
{
  "name": "angular-ui-router",
  "version": "0.4.2",
  "license" : "MIT",
  "main": "./release/angular-ui-router.js",
  "dependencies": {
    "angular": "^1.0.8"
  },
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "component.json",
    "package.json",
    "lib",
    "config",
    "sample",
    "test",
    "tests",
    "ngdoc_assets",
    "Gruntfile.js",
    "files.js"
  ]
}
src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.js
New file
Diff too large
src/main/webapp/bower_components/angular-ui-router/release/angular-ui-router.min.js
New file
@@ -0,0 +1,8 @@
/**
 * State-based routing for AngularJS
 * @version v0.4.2
 * @link http://angular-ui.github.com/
 * @license MIT License, http://www.opensource.org/licenses/MIT
 */
"undefined"!=typeof module&&"undefined"!=typeof exports&&module.exports===exports&&(module.exports="ui.router"),function(a,b,c){"use strict";function d(a,b){return T(new(T(function(){},{prototype:a})),b)}function e(a){return S(arguments,function(b){b!==a&&S(b,function(b,c){a.hasOwnProperty(c)||(a[c]=b)})}),a}function f(a,b){var c=[];for(var d in a.path){if(a.path[d]!==b.path[d])break;c.push(a.path[d])}return c}function g(a){if(Object.keys)return Object.keys(a);var b=[];return S(a,function(a,c){b.push(c)}),b}function h(a,b){if(Array.prototype.indexOf)return a.indexOf(b,Number(arguments[2])||0);var c=a.length>>>0,d=Number(arguments[2])||0;for(d=d<0?Math.ceil(d):Math.floor(d),d<0&&(d+=c);d<c;d++)if(d in a&&a[d]===b)return d;return-1}function i(a,b,c,d){var e,i=f(c,d),j={},k=[];for(var l in i)if(i[l]&&i[l].params&&(e=g(i[l].params),e.length))for(var m in e)h(k,e[m])>=0||(k.push(e[m]),j[e[m]]=a[e[m]]);return T({},j,b)}function j(a,b,c){if(!c){c=[];for(var d in a)c.push(d)}for(var e=0;e<c.length;e++){var f=c[e];if(a[f]!=b[f])return!1}return!0}function k(a,b){var c={};return S(a,function(a){c[a]=b[a]}),c}function l(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));return S(c,function(c){c in a&&(b[c]=a[c])}),b}function m(a){var b={},c=Array.prototype.concat.apply(Array.prototype,Array.prototype.slice.call(arguments,1));for(var d in a)h(c,d)==-1&&(b[d]=a[d]);return b}function n(a,b){var c=R(a),d=c?[]:{};return S(a,function(a,e){b(a,e)&&(d[c?d.length:e]=a)}),d}function o(a,b){var c=R(a)?[]:{};return S(a,function(a,d){c[d]=b(a,d)}),c}function p(a){return a.then(c,function(){})&&a}function q(a,b){var d=1,f=2,i={},j=[],k=i,l=T(a.when(i),{$$promises:i,$$values:i});this.study=function(i){function n(a,c){if(t[c]!==f){if(s.push(c),t[c]===d)throw s.splice(0,h(s,c)),new Error("Cyclic dependency: "+s.join(" -> "));if(t[c]=d,P(a))r.push(c,[function(){return b.get(a)}],j);else{var e=b.annotate(a);S(e,function(a){a!==c&&i.hasOwnProperty(a)&&n(i[a],a)}),r.push(c,a,e)}s.pop(),t[c]=f}}function o(a){return Q(a)&&a.then&&a.$$promises}if(!Q(i))throw new Error("'invocables' must be an object");var q=g(i||{}),r=[],s=[],t={};return S(i,n),i=s=t=null,function(d,f,g){function h(){--v||(w||e(u,f.$$values),s.$$values=u,s.$$promises=s.$$promises||!0,delete s.$$inheritedValues,n.resolve(u))}function i(a){s.$$failure=a,n.reject(a)}function j(c,e,f){function j(a){l.reject(a),i(a)}function k(){if(!N(s.$$failure))try{l.resolve(b.invoke(e,g,u)),l.promise.then(function(a){u[c]=a,h()},j)}catch(a){j(a)}}var l=a.defer(),m=0;S(f,function(a){t.hasOwnProperty(a)&&!d.hasOwnProperty(a)&&(m++,t[a].then(function(b){u[a]=b,--m||k()},j))}),m||k(),t[c]=p(l.promise)}if(o(d)&&g===c&&(g=f,f=d,d=null),d){if(!Q(d))throw new Error("'locals' must be an object")}else d=k;if(f){if(!o(f))throw new Error("'parent' must be a promise returned by $resolve.resolve()")}else f=l;var n=a.defer(),s=p(n.promise),t=s.$$promises={},u=T({},d),v=1+r.length/3,w=!1;if(p(s),N(f.$$failure))return i(f.$$failure),s;f.$$inheritedValues&&e(u,m(f.$$inheritedValues,q)),T(t,f.$$promises),f.$$values?(w=e(u,m(f.$$values,q)),s.$$inheritedValues=m(f.$$values,q),h()):(f.$$inheritedValues&&(s.$$inheritedValues=m(f.$$inheritedValues,q)),f.then(h,i));for(var x=0,y=r.length;x<y;x+=3)d.hasOwnProperty(r[x])?h():j(r[x],r[x+1],r[x+2]);return s}},this.resolve=function(a,b,c,d){return this.study(a)(b,c,d)}}function r(){var a=b.version.minor<3;this.shouldUnsafelyUseHttp=function(b){a=!!b},this.$get=["$http","$templateCache","$injector",function(b,c,d){return new s(b,c,d,a)}]}function s(a,b,c,d){this.fromConfig=function(a,b,c){return N(a.template)?this.fromString(a.template,b):N(a.templateUrl)?this.fromUrl(a.templateUrl,b):N(a.templateProvider)?this.fromProvider(a.templateProvider,b,c):null},this.fromString=function(a,b){return O(a)?a(b):a},this.fromUrl=function(e,f){return O(e)&&(e=e(f)),null==e?null:d?a.get(e,{cache:b,headers:{Accept:"text/html"}}).then(function(a){return a.data}):c.get("$templateRequest")(e)},this.fromProvider=function(a,b,d){return c.invoke(a,null,d||{params:b})}}function t(a,b,e){function f(b,c,d,e){if(q.push(b),o[b])return o[b];if(!/^\w+([-.]+\w+)*(?:\[\])?$/.test(b))throw new Error("Invalid parameter name '"+b+"' in pattern '"+a+"'");if(p[b])throw new Error("Duplicate parameter name '"+b+"' in pattern '"+a+"'");return p[b]=new W.Param(b,c,d,e),p[b]}function g(a,b,c,d){var e=["",""],f=a.replace(/[\\\[\]\^$*+?.()|{}]/g,"\\$&");if(!b)return f;switch(c){case!1:e=["(",")"+(d?"?":"")];break;case!0:f=f.replace(/\/$/,""),e=["(?:/(",")|/)?"];break;default:e=["("+c+"|",")?"]}return f+e[0]+b+e[1]}function h(e,f){var g,h,i,j,k;return g=e[2]||e[3],k=b.params[g],i=a.substring(m,e.index),h=f?e[4]:e[4]||("*"==e[1]?".*":null),h&&(j=W.type(h)||d(W.type("string"),{pattern:new RegExp(h,b.caseInsensitive?"i":c)})),{id:g,regexp:h,segment:i,type:j,cfg:k}}b=T({params:{}},Q(b)?b:{});var i,j=/([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,k=/([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,l="^",m=0,n=this.segments=[],o=e?e.params:{},p=this.params=e?e.params.$$new():new W.ParamSet,q=[];this.source=a;for(var r,s,t;(i=j.exec(a))&&(r=h(i,!1),!(r.segment.indexOf("?")>=0));)s=f(r.id,r.type,r.cfg,"path"),l+=g(r.segment,s.type.pattern.source,s.squash,s.isOptional),n.push(r.segment),m=j.lastIndex;t=a.substring(m);var u=t.indexOf("?");if(u>=0){var v=this.sourceSearch=t.substring(u);if(t=t.substring(0,u),this.sourcePath=a.substring(0,m+u),v.length>0)for(m=0;i=k.exec(v);)r=h(i,!0),s=f(r.id,r.type,r.cfg,"search"),m=j.lastIndex}else this.sourcePath=a,this.sourceSearch="";l+=g(t)+(b.strict===!1?"/?":"")+"$",n.push(t),this.regexp=new RegExp(l,b.caseInsensitive?"i":c),this.prefix=n[0],this.$$paramNames=q}function u(a){T(this,a)}function v(){function a(a){return null!=a?a.toString().replace(/(~|\/)/g,function(a){return{"~":"~~","/":"~2F"}[a]}):a}function e(a){return null!=a?a.toString().replace(/(~~|~2F)/g,function(a){return{"~~":"~","~2F":"/"}[a]}):a}function f(){return{strict:p,caseInsensitive:m}}function i(a){return O(a)||R(a)&&O(a[a.length-1])}function j(){for(;w.length;){var a=w.shift();if(a.pattern)throw new Error("You cannot override a type's .pattern at runtime.");b.extend(r[a.name],l.invoke(a.def))}}function k(a){T(this,a||{})}W=this;var l,m=!1,p=!0,q=!1,r={},s=!0,w=[],x={string:{encode:a,decode:e,is:function(a){return null==a||!N(a)||"string"==typeof a},pattern:/[^\/]*/},int:{encode:a,decode:function(a){return parseInt(a,10)},is:function(a){return a!==c&&null!==a&&this.decode(a.toString())===a},pattern:/\d+/},bool:{encode:function(a){return a?1:0},decode:function(a){return 0!==parseInt(a,10)},is:function(a){return a===!0||a===!1},pattern:/0|1/},date:{encode:function(a){return this.is(a)?[a.getFullYear(),("0"+(a.getMonth()+1)).slice(-2),("0"+a.getDate()).slice(-2)].join("-"):c},decode:function(a){if(this.is(a))return a;var b=this.capture.exec(a);return b?new Date(b[1],b[2]-1,b[3]):c},is:function(a){return a instanceof Date&&!isNaN(a.valueOf())},equals:function(a,b){return this.is(a)&&this.is(b)&&a.toISOString()===b.toISOString()},pattern:/[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,capture:/([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/},json:{encode:b.toJson,decode:b.fromJson,is:b.isObject,equals:b.equals,pattern:/[^\/]*/},any:{encode:b.identity,decode:b.identity,equals:b.equals,pattern:/.*/}};v.$$getDefaultValue=function(a){if(!i(a.value))return a.value;if(!l)throw new Error("Injectable functions cannot be called at configuration time");return l.invoke(a.value)},this.caseInsensitive=function(a){return N(a)&&(m=a),m},this.strictMode=function(a){return N(a)&&(p=a),p},this.defaultSquashPolicy=function(a){if(!N(a))return q;if(a!==!0&&a!==!1&&!P(a))throw new Error("Invalid squash policy: "+a+". Valid policies: false, true, arbitrary-string");return q=a,a},this.compile=function(a,b){return new t(a,T(f(),b))},this.isMatcher=function(a){if(!Q(a))return!1;var b=!0;return S(t.prototype,function(c,d){O(c)&&(b=b&&N(a[d])&&O(a[d]))}),b},this.type=function(a,b,c){if(!N(b))return r[a];if(r.hasOwnProperty(a))throw new Error("A type named '"+a+"' has already been defined.");return r[a]=new u(T({name:a},b)),c&&(w.push({name:a,def:c}),s||j()),this},S(x,function(a,b){r[b]=new u(T({name:b},a))}),r=d(r,{}),this.$get=["$injector",function(a){return l=a,s=!1,j(),S(x,function(a,b){r[b]||(r[b]=new u(a))}),this}],this.Param=function(a,d,e,f){function j(a){var b=Q(a)?g(a):[],c=h(b,"value")===-1&&h(b,"type")===-1&&h(b,"squash")===-1&&h(b,"array")===-1;return c&&(a={value:a}),a.$$fn=i(a.value)?a.value:function(){return a.value},a}function k(c,d,e){if(c.type&&d)throw new Error("Param '"+a+"' has two type configurations.");return d?d:c.type?b.isString(c.type)?r[c.type]:c.type instanceof u?c.type:new u(c.type):"config"===e?r.any:r.string}function m(){var b={array:"search"===f&&"auto"},c=a.match(/\[\]$/)?{array:!0}:{};return T(b,c,e).array}function p(a,b){var c=a.squash;if(!b||c===!1)return!1;if(!N(c)||null==c)return q;if(c===!0||P(c))return c;throw new Error("Invalid squash policy: '"+c+"'. Valid policies: false, true, or arbitrary string")}function s(a,b,d,e){var f,g,i=[{from:"",to:d||b?c:""},{from:null,to:d||b?c:""}];return f=R(a.replace)?a.replace:[],P(e)&&f.push({from:e,to:c}),g=o(f,function(a){return a.from}),n(i,function(a){return h(g,a.from)===-1}).concat(f)}function t(){if(!l)throw new Error("Injectable functions cannot be called at configuration time");var a=l.invoke(e.$$fn);if(null!==a&&a!==c&&!x.type.is(a))throw new Error("Default value ("+a+") for parameter '"+x.id+"' is not an instance of Type ("+x.type.name+")");return a}function v(a){function b(a){return function(b){return b.from===a}}function c(a){var c=o(n(x.replace,b(a)),function(a){return a.to});return c.length?c[0]:a}return a=c(a),N(a)?x.type.$normalize(a):t()}function w(){return"{Param:"+a+" "+d+" squash: '"+A+"' optional: "+z+"}"}var x=this;e=j(e),d=k(e,d,f);var y=m();d=y?d.$asArray(y,"search"===f):d,"string"!==d.name||y||"path"!==f||e.value!==c||(e.value="");var z=e.value!==c,A=p(e,z),B=s(e,y,z,A);T(this,{id:a,type:d,location:f,array:y,squash:A,replace:B,isOptional:z,value:v,dynamic:c,config:e,toString:w})},k.prototype={$$new:function(){return d(this,T(new k,{$$parent:this}))},$$keys:function(){for(var a=[],b=[],c=this,d=g(k.prototype);c;)b.push(c),c=c.$$parent;return b.reverse(),S(b,function(b){S(g(b),function(b){h(a,b)===-1&&h(d,b)===-1&&a.push(b)})}),a},$$values:function(a){var b={},c=this;return S(c.$$keys(),function(d){b[d]=c[d].value(a&&a[d])}),b},$$equals:function(a,b){var c=!0,d=this;return S(d.$$keys(),function(e){var f=a&&a[e],g=b&&b[e];d[e].type.equals(f,g)||(c=!1)}),c},$$validates:function(a){var d,e,f,g,h,i=this.$$keys();for(d=0;d<i.length&&(e=this[i[d]],f=a[i[d]],f!==c&&null!==f||!e.isOptional);d++){if(g=e.type.$normalize(f),!e.type.is(g))return!1;if(h=e.type.encode(g),b.isString(h)&&!e.type.pattern.exec(h))return!1}return!0},$$parent:c},this.ParamSet=k}function w(a,d){function e(a){var b=/^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(a.source);return null!=b?b[1].replace(/\\(.)/g,"$1"):""}function f(a,b){return a.replace(/\$(\$|\d{1,2})/,function(a,c){return b["$"===c?0:Number(c)]})}function g(a,b,c){if(!c)return!1;var d=a.invoke(b,b,{$match:c});return!N(d)||d}function h(d,e,f,g,h){function m(a,b,c){return"/"===q?a:b?q.slice(0,-1)+a:c?q.slice(1)+a:a}function n(a){function b(a){var b=a(f,d);return!!b&&(P(b)&&d.replace().url(b),!0)}if(!a||!a.defaultPrevented){p&&d.url()===p;p=c;var e,g=j.length;for(e=0;e<g;e++)if(b(j[e]))return;k&&b(k)}}function o(){return i=i||e.$on("$locationChangeSuccess",n)}var p,q=g.baseHref(),r=d.url();return l||o(),{sync:function(){n()},listen:function(){return o()},update:function(a){return a?void(r=d.url()):void(d.url()!==r&&(d.url(r),d.replace()))},push:function(a,b,e){var f=a.format(b||{});null!==f&&b&&b["#"]&&(f+="#"+b["#"]),d.url(f),p=e&&e.$$avoidResync?d.url():c,e&&e.replace&&d.replace()},href:function(c,e,f){if(!c.validates(e))return null;var g=a.html5Mode();b.isObject(g)&&(g=g.enabled),g=g&&h.history;var i=c.format(e);if(f=f||{},g||null===i||(i="#"+a.hashPrefix()+i),null!==i&&e&&e["#"]&&(i+="#"+e["#"]),i=m(i,g,f.absolute),!f.absolute||!i)return i;var j=!g&&i?"/":"",k=d.port();return k=80===k||443===k?"":":"+k,[d.protocol(),"://",d.host(),k,j,i].join("")}}}var i,j=[],k=null,l=!1;this.rule=function(a){if(!O(a))throw new Error("'rule' must be a function");return j.push(a),this},this.otherwise=function(a){if(P(a)){var b=a;a=function(){return b}}else if(!O(a))throw new Error("'rule' must be a function");return k=a,this},this.when=function(a,b){var c,h=P(b);if(P(a)&&(a=d.compile(a)),!h&&!O(b)&&!R(b))throw new Error("invalid 'handler' in when()");var i={matcher:function(a,b){return h&&(c=d.compile(b),b=["$match",function(a){return c.format(a)}]),T(function(c,d){return g(c,b,a.exec(d.path(),d.search()))},{prefix:P(a.prefix)?a.prefix:""})},regex:function(a,b){if(a.global||a.sticky)throw new Error("when() RegExp must not be global or sticky");return h&&(c=b,b=["$match",function(a){return f(c,a)}]),T(function(c,d){return g(c,b,a.exec(d.path()))},{prefix:e(a)})}},j={matcher:d.isMatcher(a),regex:a instanceof RegExp};for(var k in j)if(j[k])return this.rule(i[k](a,b));throw new Error("invalid 'what' in when()")},this.deferIntercept=function(a){a===c&&(a=!0),l=a},this.$get=h,h.$inject=["$location","$rootScope","$injector","$browser","$sniffer"]}function x(a,e){function f(a){return 0===a.indexOf(".")||0===a.indexOf("^")}function m(a,b){if(!a)return c;var d=P(a),e=d?a:a.name,g=f(e);if(g){if(!b)throw new Error("No reference point given for path '"+e+"'");b=m(b);for(var h=e.split("."),i=0,j=h.length,k=b;i<j;i++)if(""!==h[i]||0!==i){if("^"!==h[i])break;if(!k.parent)throw new Error("Path '"+e+"' not valid for state '"+b.name+"'");k=k.parent}else k=b;h=h.slice(i).join("."),e=k.name+(k.name&&h?".":"")+h}var l=A[e];return!l||!d&&(d||l!==a&&l.self!==a)?c:l}function n(a,b){B[a]||(B[a]=[]),B[a].push(b)}function q(a){for(var b=B[a]||[];b.length;)r(b.shift())}function r(b){b=d(b,{self:b,resolve:b.resolve||{},toString:function(){return this.name}});var c=b.name;if(!P(c)||c.indexOf("@")>=0)throw new Error("State must have a valid name");if(A.hasOwnProperty(c))throw new Error("State '"+c+"' is already defined");var e=c.indexOf(".")!==-1?c.substring(0,c.lastIndexOf(".")):P(b.parent)?b.parent:Q(b.parent)&&P(b.parent.name)?b.parent.name:"";if(e&&!A[e])return n(e,b.self);for(var f in D)O(D[f])&&(b[f]=D[f](b,D.$delegates[f]));return A[c]=b,!b[C]&&b.url&&a.when(b.url,["$match","$stateParams",function(a,c){z.$current.navigable==b&&j(a,c)||z.transitionTo(b,a,{inherit:!0,location:!1})}]),q(c),b}function s(a){return a.indexOf("*")>-1}function t(a){for(var b=a.split("."),c=z.$current.name.split("."),d=0,e=b.length;d<e;d++)"*"===b[d]&&(c[d]="*");return"**"===b[0]&&(c=c.slice(h(c,b[1])),c.unshift("**")),"**"===b[b.length-1]&&(c.splice(h(c,b[b.length-2])+1,Number.MAX_VALUE),c.push("**")),b.length==c.length&&c.join("")===b.join("")}function u(a,b){return P(a)&&!N(b)?D[a]:O(b)&&P(a)?(D[a]&&!D.$delegates[a]&&(D.$delegates[a]=D[a]),D[a]=b,this):this}function v(a,b){return Q(a)?b=a:b.name=a,r(b),this}function w(a,e,f,h,j,l,n,q,r){function u(b,c,d,f){var g=a.$broadcast("$stateNotFound",b,c,d);if(g.defaultPrevented)return n.update(),E;if(!g.retry)return null;if(f.$retry)return n.update(),F;var h=z.transition=e.when(g.retry);return h.then(function(){return h!==z.transition?(a.$broadcast("$stateChangeCancel",b.to,b.toParams,c,d),B):(b.options.$retry=!0,z.transitionTo(b.to,b.toParams,b.options))},function(){return E}),n.update(),h}function v(a,c,d,g,i,l){function m(){var c=[];return S(a.views,function(d,e){var g=d.resolve&&d.resolve!==a.resolve?d.resolve:{};g.$template=[function(){return f.load(e,{view:d,locals:i.globals,params:n,notify:l.notify})||""}],c.push(j.resolve(g,i.globals,i.resolve,a).then(function(c){if(O(d.controllerProvider)||R(d.controllerProvider)){var f=b.extend({},g,i.globals);c.$$controller=h.invoke(d.controllerProvider,null,f)}else c.$$controller=d.controller;c.$$state=a,c.$$controllerAs=d.controllerAs,c.$$resolveAs=d.resolveAs,i[e]=c}))}),e.all(c).then(function(){return i.globals})}var n=d?c:k(a.params.$$keys(),c),o={$stateParams:n};i.resolve=j.resolve(a.resolve,o,i.resolve,a);var p=[i.resolve.then(function(a){i.globals=a})];return g&&p.push(g),e.all(p).then(m).then(function(a){return i})}var w=new Error("transition superseded"),B=p(e.reject(w)),D=p(e.reject(new Error("transition prevented"))),E=p(e.reject(new Error("transition aborted"))),F=p(e.reject(new Error("transition failed")));return y.locals={resolve:null,globals:{$stateParams:{}}},z={params:{},current:y.self,$current:y,transition:null},z.reload=function(a){return z.transitionTo(z.current,l,{reload:a||!0,inherit:!1,notify:!0})},z.go=function(a,b,c){return z.transitionTo(a,b,T({inherit:!0,relative:z.$current},c))},z.transitionTo=function(b,c,f){c=c||{},f=T({location:!0,inherit:!1,relative:null,notify:!0,reload:!1,$retry:!1},f||{});var g,j=z.$current,o=z.params,q=j.path,r=m(b,f.relative),s=c["#"];if(!N(r)){var t={to:b,toParams:c,options:f},A=u(t,j.self,o,f);if(A)return A;if(b=t.to,c=t.toParams,f=t.options,r=m(b,f.relative),!N(r)){if(!f.relative)throw new Error("No such state '"+b+"'");throw new Error("Could not resolve '"+b+"' from state '"+f.relative+"'")}}if(r[C])throw new Error("Cannot transition to abstract state '"+b+"'");if(f.inherit&&(c=i(l,c||{},z.$current,r)),!r.params.$$validates(c))return F;c=r.params.$$values(c),b=r;var E=b.path,G=0,H=E[G],I=y.locals,J=[];if(f.reload){if(P(f.reload)||Q(f.reload)){if(Q(f.reload)&&!f.reload.name)throw new Error("Invalid reload state object");var K=f.reload===!0?q[0]:m(f.reload);if(f.reload&&!K)throw new Error("No such reload state '"+(P(f.reload)?f.reload:f.reload.name)+"'");for(;H&&H===q[G]&&H!==K;)I=J[G]=H.locals,G++,H=E[G]}}else for(;H&&H===q[G]&&H.ownParams.$$equals(c,o);)I=J[G]=H.locals,G++,H=E[G];if(x(b,c,j,o,I,f))return s&&(c["#"]=s),z.params=c,U(z.params,l),U(k(b.params.$$keys(),l),b.locals.globals.$stateParams),f.location&&b.navigable&&b.navigable.url&&(n.push(b.navigable.url,c,{$$avoidResync:!0,replace:"replace"===f.location}),n.update(!0)),z.transition=null,e.when(z.current);if(c=k(b.params.$$keys(),c||{}),s&&(c["#"]=s),f.notify&&a.$broadcast("$stateChangeStart",b.self,c,j.self,o,f).defaultPrevented)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,o),null==z.transition&&n.update(),D;for(var L=e.when(I),M=G;M<E.length;M++,H=E[M])I=J[M]=d(I),L=v(H,c,H===b,L,I,f);var O=z.transition=L.then(function(){var d,e,g;if(z.transition!==O)return a.$broadcast("$stateChangeCancel",b.self,c,j.self,o),B;for(d=q.length-1;d>=G;d--)g=q[d],g.self.onExit&&h.invoke(g.self.onExit,g.self,g.locals.globals),g.locals=null;for(d=G;d<E.length;d++)e=E[d],e.locals=J[d],e.self.onEnter&&h.invoke(e.self.onEnter,e.self,e.locals.globals);return z.transition!==O?(a.$broadcast("$stateChangeCancel",b.self,c,j.self,o),B):(z.$current=b,z.current=b.self,z.params=c,U(z.params,l),z.transition=null,f.location&&b.navigable&&n.push(b.navigable.url,b.navigable.locals.globals.$stateParams,{$$avoidResync:!0,replace:"replace"===f.location}),f.notify&&a.$broadcast("$stateChangeSuccess",b.self,c,j.self,o),n.update(!0),z.current)}).then(null,function(d){return d===w?B:z.transition!==O?(a.$broadcast("$stateChangeCancel",b.self,c,j.self,o),B):(z.transition=null,g=a.$broadcast("$stateChangeError",b.self,c,j.self,o,d),g.defaultPrevented||n.update(),e.reject(d))});return p(O),O},z.is=function(a,b,d){d=T({relative:z.$current},d||{});var e=m(a,d.relative);return N(e)?z.$current===e&&(!b||g(b).reduce(function(a,c){var d=e.params[c];return a&&!d||d.type.equals(l[c],b[c])},!0)):c},z.includes=function(a,b,d){if(d=T({relative:z.$current},d||{}),P(a)&&s(a)){if(!t(a))return!1;a=z.$current.name}var e=m(a,d.relative);if(!N(e))return c;if(!N(z.$current.includes[e.name]))return!1;if(!b)return!0;for(var f=g(b),h=0;h<f.length;h++){var i=f[h],j=e.params[i];if(j&&!j.type.equals(l[i],b[i]))return!1}return g(b).reduce(function(a,c){var d=e.params[c];return a&&!d||d.type.equals(l[c],b[c])},!0)},z.href=function(a,b,d){d=T({lossy:!0,inherit:!0,absolute:!1,relative:z.$current},d||{});var e=m(a,d.relative);if(!N(e))return null;d.inherit&&(b=i(l,b||{},z.$current,e));var f=e&&d.lossy?e.navigable:e;return f&&f.url!==c&&null!==f.url?n.href(f.url,k(e.params.$$keys().concat("#"),b||{}),{absolute:d.absolute}):null},z.get=function(a,b){if(0===arguments.length)return o(g(A),function(a){return A[a].self});var c=m(a,b||z.$current);return c&&c.self?c.self:null},z}function x(a,b,c,d,e,f){function g(a,b,c){function d(b){return"search"!=a.params[b].location}var e=a.params.$$keys().filter(d),f=l.apply({},[a.params].concat(e)),g=new W.ParamSet(f);return g.$$equals(b,c)}if(!f.reload&&a===c&&(e===c.locals||a.self.reloadOnSearch===!1&&g(c,d,b)))return!0}var y,z,A={},B={},C="abstract",D={parent:function(a){if(N(a.parent)&&a.parent)return m(a.parent);var b=/^(.+)\.[^.]+$/.exec(a.name);return b?m(b[1]):y},data:function(a){return a.parent&&a.parent.data&&(a.data=a.self.data=d(a.parent.data,a.data)),a.data},url:function(a){var b=a.url,c={params:a.params||{}};if(P(b))return"^"==b.charAt(0)?e.compile(b.substring(1),c):(a.parent.navigable||y).url.concat(b,c);if(!b||e.isMatcher(b))return b;throw new Error("Invalid url '"+b+"' in state '"+a+"'")},navigable:function(a){return a.url?a:a.parent?a.parent.navigable:null},ownParams:function(a){var b=a.url&&a.url.params||new W.ParamSet;return S(a.params||{},function(a,c){b[c]||(b[c]=new W.Param(c,null,a,"config"))}),b},params:function(a){var b=l(a.ownParams,a.ownParams.$$keys());return a.parent&&a.parent.params?T(a.parent.params.$$new(),b):new W.ParamSet},views:function(a){var b={};return S(N(a.views)?a.views:{"":a},function(c,d){d.indexOf("@")<0&&(d+="@"+a.parent.name),c.resolveAs=c.resolveAs||a.resolveAs||"$resolve",b[d]=c}),b},path:function(a){return a.parent?a.parent.path.concat(a):[]},includes:function(a){var b=a.parent?T({},a.parent.includes):{};return b[a.name]=!0,b},$delegates:{}};y=r({name:"",url:"^",views:null,abstract:!0}),y.navigable=null,this.decorator=u,this.state=v,this.$get=w,w.$inject=["$rootScope","$q","$view","$injector","$resolve","$stateParams","$urlRouter","$location","$urlMatcherFactory"]}function y(){function a(a,b){return{load:function(a,c){var d,e={template:null,controller:null,view:null,locals:null,notify:!0,async:!0,params:{}};return c=T(e,c),c.view&&(d=b.fromConfig(c.view,c.params,c.locals)),d}}}this.$get=a,a.$inject=["$rootScope","$templateFactory"]}function z(){var a=!1;this.useAnchorScroll=function(){a=!0},this.$get=["$anchorScroll","$timeout",function(b,c){return a?b:function(a){return c(function(){a[0].scrollIntoView()},0,!1)}}]}function A(a,c,d,e,f){function g(){return c.has?function(a){return c.has(a)?c.get(a):null}:function(a){try{return c.get(a)}catch(a){return null}}}function h(a,c){var d=function(){return{enter:function(a,b,c){b.after(a),c()},leave:function(a,b){a.remove(),b()}}};if(k)return{enter:function(a,c,d){b.version.minor>2?k.enter(a,null,c).then(d):k.enter(a,null,c,d)},leave:function(a,c){b.version.minor>2?k.leave(a).then(c):k.leave(a,c)}};if(j){var e=j&&j(c,a);return{enter:function(a,b,c){e.enter(a,null,b),c()},leave:function(a,b){e.leave(a),b()}}}return d()}var i=g(),j=i("$animator"),k=i("$animate"),l={restrict:"ECA",terminal:!0,priority:400,transclude:"element",compile:function(c,g,i){return function(c,g,j){function k(){if(m&&(m.remove(),m=null),o&&(o.$destroy(),o=null),n){var a=n.data("$uiViewAnim");s.leave(n,function(){a.$$animLeave.resolve(),m=null}),m=n,n=null}}function l(h){var l,m=C(c,j,g,e),t=m&&a.$current&&a.$current.locals[m];if(h||t!==p){l=c.$new(),p=a.$current.locals[m],l.$emit("$viewContentLoading",m);var u=i(l,function(a){var e=f.defer(),h=f.defer(),i={$animEnter:e.promise,$animLeave:h.promise,$$animLeave:h};a.data("$uiViewAnim",i),s.enter(a,g,function(){e.resolve(),o&&o.$emit("$viewContentAnimationEnded"),(b.isDefined(r)&&!r||c.$eval(r))&&d(a)}),k()});n=u,o=l,o.$emit("$viewContentLoaded",m),o.$eval(q)}}var m,n,o,p,q=j.onload||"",r=j.autoscroll,s=h(j,c);g.inheritedData("$uiView");c.$on("$stateChangeSuccess",function(){l(!1)}),l(!0)}}};return l}function B(a,c,d,e){return{restrict:"ECA",priority:-400,compile:function(f){var g=f.html();return f.empty?f.empty():f[0].innerHTML=null,function(f,h,i){var j=d.$current,k=C(f,i,h,e),l=j&&j.locals[k];if(!l)return h.html(g),void a(h.contents())(f);h.data("$uiView",{name:k,state:l.$$state}),h.html(l.$template?l.$template:g);var m=b.extend({},l);f[l.$$resolveAs]=m;var n=a(h.contents());if(l.$$controller){l.$scope=f,l.$element=h;var o=c(l.$$controller,l);l.$$controllerAs&&(f[l.$$controllerAs]=o,f[l.$$controllerAs][l.$$resolveAs]=m),O(o.$onInit)&&o.$onInit(),h.data("$ngControllerController",o),h.children().data("$ngControllerController",o)}n(f)}}}}function C(a,b,c,d){var e=d(b.uiView||b.name||"")(a),f=c.inheritedData("$uiView");return e.indexOf("@")>=0?e:e+"@"+(f?f.state.name:"")}function D(a,b){var c,d=a.match(/^\s*({[^}]*})\s*$/);if(d&&(a=b+"("+d[1]+")"),c=a.replace(/\n/g," ").match(/^([^(]+?)\s*(\((.*)\))?$/),!c||4!==c.length)throw new Error("Invalid state ref '"+a+"'");return{state:c[1],paramExpr:c[3]||null}}function E(a){var b=a.parent().inheritedData("$uiView");if(b&&b.state&&b.state.name)return b.state}function F(a){var b="[object SVGAnimatedString]"===Object.prototype.toString.call(a.prop("href")),c="FORM"===a[0].nodeName;return{attr:c?"action":b?"xlink:href":"href",isAnchor:"A"===a.prop("tagName").toUpperCase(),clickable:!c}}function G(a,b,c,d,e){return function(f){var g=f.which||f.button,h=e();if(!(g>1||f.ctrlKey||f.metaKey||f.shiftKey||a.attr("target"))){var i=c(function(){b.go(h.state,h.params,h.options)});f.preventDefault();var j=d.isAnchor&&!h.href?1:0;f.preventDefault=function(){j--<=0&&c.cancel(i)}}}}function H(a,b){return{relative:E(a)||b.$current,inherit:!0}}function I(a,c){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(d,e,f,g){var h,i=D(f.uiSref,a.current.name),j={state:i.state,href:null,params:null},k=F(e),l=g[1]||g[0],m=null;j.options=T(H(e,a),f.uiSrefOpts?d.$eval(f.uiSrefOpts):{});var n=function(c){c&&(j.params=b.copy(c)),j.href=a.href(i.state,j.params,j.options),m&&m(),l&&(m=l.$$addStateInfo(i.state,j.params)),null!==j.href&&f.$set(k.attr,j.href)};i.paramExpr&&(d.$watch(i.paramExpr,function(a){a!==j.params&&n(a)},!0),j.params=b.copy(d.$eval(i.paramExpr))),n(),k.clickable&&(h=G(e,a,c,k,function(){return j}),e[e.on?"on":"bind"]("click",h),d.$on("$destroy",function(){e[e.off?"off":"unbind"]("click",h)}))}}}function J(a,b){return{restrict:"A",require:["?^uiSrefActive","?^uiSrefActiveEq"],link:function(c,d,e,f){function g(b){m.state=b[0],m.params=b[1],m.options=b[2],m.href=a.href(m.state,m.params,m.options),n&&n(),j&&(n=j.$$addStateInfo(m.state,m.params)),m.href&&e.$set(i.attr,m.href)}var h,i=F(d),j=f[1]||f[0],k=[e.uiState,e.uiStateParams||null,e.uiStateOpts||null],l="["+k.map(function(a){return a||"null"}).join(", ")+"]",m={state:null,params:null,options:null,href:null},n=null;c.$watch(l,g,!0),g(c.$eval(l)),i.clickable&&(h=G(d,a,b,i,function(){return m}),d[d.on?"on":"bind"]("click",h),c.$on("$destroy",function(){d[d.off?"off":"unbind"]("click",h)}))}}}function K(a,b,c){return{restrict:"A",controller:["$scope","$element","$attrs","$timeout",function(b,d,e,f){function g(b,c,e){var f=a.get(b,E(d)),g=h(b,c),i={state:f||{name:b},params:c,hash:g};return p.push(i),q[g]=e,function(){var a=p.indexOf(i);a!==-1&&p.splice(a,1)}}function h(a,c){if(!P(a))throw new Error("state should be a string");return Q(c)?a+V(c):(c=b.$eval(c),Q(c)?a+V(c):a)}function i(){for(var a=0;a<p.length;a++)l(p[a].state,p[a].params)?j(d,q[p[a].hash]):k(d,q[p[a].hash]),m(p[a].state,p[a].params)?j(d,n):k(d,n)}function j(a,b){f(function(){a.addClass(b)})}function k(a,b){a.removeClass(b)}function l(b,c){return a.includes(b.name,c)}function m(b,c){return a.is(b.name,c)}var n,o,p=[],q={};n=c(e.uiSrefActiveEq||"",!1)(b);try{o=b.$eval(e.uiSrefActive)}catch(a){}o=o||c(e.uiSrefActive||"",!1)(b),Q(o)&&S(o,function(c,d){if(P(c)){var e=D(c,a.current.name);g(e.state,b.$eval(e.paramExpr),d)}}),this.$$addStateInfo=function(a,b){if(!(Q(o)&&p.length>0)){var c=g(a,b,o);return i(),c}},b.$on("$stateChangeSuccess",i),i()}]}}function L(a){var b=function(b,c){return a.is(b,c)};return b.$stateful=!0,b}function M(a){var b=function(b,c,d){return a.includes(b,c,d)};return b.$stateful=!0,b}var N=b.isDefined,O=b.isFunction,P=b.isString,Q=b.isObject,R=b.isArray,S=b.forEach,T=b.extend,U=b.copy,V=b.toJson;b.module("ui.router.util",["ng"]),b.module("ui.router.router",["ui.router.util"]),b.module("ui.router.state",["ui.router.router","ui.router.util"]),b.module("ui.router",["ui.router.state"]),b.module("ui.router.compat",["ui.router"]),q.$inject=["$q","$injector"],b.module("ui.router.util").service("$resolve",q),b.module("ui.router.util").provider("$templateFactory",r);var W;t.prototype.concat=function(a,b){var c={caseInsensitive:W.caseInsensitive(),strict:W.strictMode(),squash:W.defaultSquashPolicy()};return new t(this.sourcePath+a+this.sourceSearch,T(c,b),this)},t.prototype.toString=function(){return this.source},t.prototype.exec=function(a,b){function c(a){function b(a){return a.split("").reverse().join("")}function c(a){return a.replace(/\\-/g,"-")}var d=b(a).split(/-(?!\\)/),e=o(d,b);return o(e,c).reverse()}var d=this.regexp.exec(a);if(!d)return null;b=b||{};var e,f,g,h=this.parameters(),i=h.length,j=this.segments.length-1,k={};if(j!==d.length-1)throw new Error("Unbalanced capture group in route '"+this.source+"'");var l,m;for(e=0;e<j;e++){for(g=h[e],l=this.params[g],m=d[e+1],f=0;f<l.replace.length;f++)l.replace[f].from===m&&(m=l.replace[f].to);m&&l.array===!0&&(m=c(m)),N(m)&&(m=l.type.decode(m)),k[g]=l.value(m)}for(;e<i;e++){for(g=h[e],k[g]=this.params[g].value(b[g]),l=this.params[g],m=b[g],f=0;f<l.replace.length;f++)l.replace[f].from===m&&(m=l.replace[f].to);N(m)&&(m=l.type.decode(m)),k[g]=l.value(m)}return k},t.prototype.parameters=function(a){return N(a)?this.params[a]||null:this.$$paramNames},t.prototype.validates=function(a){return this.params.$$validates(a)},t.prototype.format=function(a){function b(a){return encodeURIComponent(a).replace(/-/g,function(a){return"%5C%"+a.charCodeAt(0).toString(16).toUpperCase()})}a=a||{};var c=this.segments,d=this.parameters(),e=this.params;if(!this.validates(a))return null;var f,g=!1,h=c.length-1,i=d.length,j=c[0];for(f=0;f<i;f++){var k=f<h,l=d[f],m=e[l],n=m.value(a[l]),p=m.isOptional&&m.type.equals(m.value(),n),q=!!p&&m.squash,r=m.type.encode(n);if(k){var s=c[f+1],t=f+1===h;if(q===!1)null!=r&&(j+=R(r)?o(r,b).join("-"):encodeURIComponent(r)),j+=s;else if(q===!0){var u=j.match(/\/$/)?/\/?(.*)/:/(.*)/;j+=s.match(u)[1]}else P(q)&&(j+=q+s);t&&m.squash===!0&&"/"===j.slice(-1)&&(j=j.slice(0,-1))}else{if(null==r||p&&q!==!1)continue;if(R(r)||(r=[r]),0===r.length)continue;r=o(r,encodeURIComponent).join("&"+l+"="),j+=(g?"&":"?")+(l+"="+r),g=!0}}return j},u.prototype.is=function(a,b){return!0},u.prototype.encode=function(a,b){return a},u.prototype.decode=function(a,b){return a},u.prototype.equals=function(a,b){return a==b},u.prototype.$subPattern=function(){var a=this.pattern.toString();return a.substr(1,a.length-2)},u.prototype.pattern=/.*/,u.prototype.toString=function(){return"{Type:"+this.name+"}"},u.prototype.$normalize=function(a){return this.is(a)?a:this.decode(a)},u.prototype.$asArray=function(a,b){function d(a,b){function d(a,b){return function(){return a[b].apply(a,arguments)}}function e(a){return R(a)?a:N(a)?[a]:[]}function f(a){switch(a.length){case 0:return c;case 1:return"auto"===b?a[0]:a;default:return a}}function g(a){return!a}function h(a,b){return function(c){if(R(c)&&0===c.length)return c;c=e(c);var d=o(c,a);return b===!0?0===n(d,g).length:f(d)}}function i(a){return function(b,c){var d=e(b),f=e(c);if(d.length!==f.length)return!1;
for(var g=0;g<d.length;g++)if(!a(d[g],f[g]))return!1;return!0}}this.encode=h(d(a,"encode")),this.decode=h(d(a,"decode")),this.is=h(d(a,"is"),!0),this.equals=i(d(a,"equals")),this.pattern=a.pattern,this.$normalize=h(d(a,"$normalize")),this.name=a.name,this.$arrayMode=b}if(!a)return this;if("auto"===a&&!b)throw new Error("'auto' array mode is for query parameters only");return new d(this,a)},b.module("ui.router.util").provider("$urlMatcherFactory",v),b.module("ui.router.util").run(["$urlMatcherFactory",function(a){}]),w.$inject=["$locationProvider","$urlMatcherFactoryProvider"],b.module("ui.router.router").provider("$urlRouter",w),x.$inject=["$urlRouterProvider","$urlMatcherFactoryProvider"],b.module("ui.router.state").factory("$stateParams",function(){return{}}).constant("$state.runtime",{autoinject:!0}).provider("$state",x).run(["$injector",function(a){a.get("$state.runtime").autoinject&&a.get("$state")}]),y.$inject=[],b.module("ui.router.state").provider("$view",y),b.module("ui.router.state").provider("$uiViewScroll",z),A.$inject=["$state","$injector","$uiViewScroll","$interpolate","$q"],B.$inject=["$compile","$controller","$state","$interpolate"],b.module("ui.router.state").directive("uiView",A),b.module("ui.router.state").directive("uiView",B),I.$inject=["$state","$timeout"],J.$inject=["$state","$timeout"],K.$inject=["$state","$stateParams","$interpolate"],b.module("ui.router.state").directive("uiSref",I).directive("uiSrefActive",K).directive("uiSrefActiveEq",K).directive("uiState",J),L.$inject=["$state"],M.$inject=["$state"],b.module("ui.router.state").filter("isState",L).filter("includedByState",M)}(window,window.angular);
src/main/webapp/bower_components/angular-ui-router/src/common.js
New file
@@ -0,0 +1,298 @@
/*jshint globalstrict:true*/
/*global angular:false*/
'use strict';
var isDefined = angular.isDefined,
    isFunction = angular.isFunction,
    isString = angular.isString,
    isObject = angular.isObject,
    isArray = angular.isArray,
    forEach = angular.forEach,
    extend = angular.extend,
    copy = angular.copy,
    toJson = angular.toJson;
function inherit(parent, extra) {
  return extend(new (extend(function() {}, { prototype: parent }))(), extra);
}
function merge(dst) {
  forEach(arguments, function(obj) {
    if (obj !== dst) {
      forEach(obj, function(value, key) {
        if (!dst.hasOwnProperty(key)) dst[key] = value;
      });
    }
  });
  return dst;
}
/**
 * Finds the common ancestor path between two states.
 *
 * @param {Object} first The first state.
 * @param {Object} second The second state.
 * @return {Array} Returns an array of state names in descending order, not including the root.
 */
function ancestors(first, second) {
  var path = [];
  for (var n in first.path) {
    if (first.path[n] !== second.path[n]) break;
    path.push(first.path[n]);
  }
  return path;
}
/**
 * IE8-safe wrapper for `Object.keys()`.
 *
 * @param {Object} object A JavaScript object.
 * @return {Array} Returns the keys of the object as an array.
 */
function objectKeys(object) {
  if (Object.keys) {
    return Object.keys(object);
  }
  var result = [];
  forEach(object, function(val, key) {
    result.push(key);
  });
  return result;
}
/**
 * IE8-safe wrapper for `Array.prototype.indexOf()`.
 *
 * @param {Array} array A JavaScript array.
 * @param {*} value A value to search the array for.
 * @return {Number} Returns the array index value of `value`, or `-1` if not present.
 */
function indexOf(array, value) {
  if (Array.prototype.indexOf) {
    return array.indexOf(value, Number(arguments[2]) || 0);
  }
  var len = array.length >>> 0, from = Number(arguments[2]) || 0;
  from = (from < 0) ? Math.ceil(from) : Math.floor(from);
  if (from < 0) from += len;
  for (; from < len; from++) {
    if (from in array && array[from] === value) return from;
  }
  return -1;
}
/**
 * Merges a set of parameters with all parameters inherited between the common parents of the
 * current state and a given destination state.
 *
 * @param {Object} currentParams The value of the current state parameters ($stateParams).
 * @param {Object} newParams The set of parameters which will be composited with inherited params.
 * @param {Object} $current Internal definition of object representing the current state.
 * @param {Object} $to Internal definition of object representing state to transition to.
 */
function inheritParams(currentParams, newParams, $current, $to) {
  var parents = ancestors($current, $to), parentParams, inherited = {}, inheritList = [];
  for (var i in parents) {
    if (!parents[i] || !parents[i].params) continue;
    parentParams = objectKeys(parents[i].params);
    if (!parentParams.length) continue;
    for (var j in parentParams) {
      if (indexOf(inheritList, parentParams[j]) >= 0) continue;
      inheritList.push(parentParams[j]);
      inherited[parentParams[j]] = currentParams[parentParams[j]];
    }
  }
  return extend({}, inherited, newParams);
}
/**
 * Performs a non-strict comparison of the subset of two objects, defined by a list of keys.
 *
 * @param {Object} a The first object.
 * @param {Object} b The second object.
 * @param {Array} keys The list of keys within each object to compare. If the list is empty or not specified,
 *                     it defaults to the list of keys in `a`.
 * @return {Boolean} Returns `true` if the keys match, otherwise `false`.
 */
function equalForKeys(a, b, keys) {
  if (!keys) {
    keys = [];
    for (var n in a) keys.push(n); // Used instead of Object.keys() for IE8 compatibility
  }
  for (var i=0; i<keys.length; i++) {
    var k = keys[i];
    if (a[k] != b[k]) return false; // Not '===', values aren't necessarily normalized
  }
  return true;
}
/**
 * Returns the subset of an object, based on a list of keys.
 *
 * @param {Array} keys
 * @param {Object} values
 * @return {Boolean} Returns a subset of `values`.
 */
function filterByKeys(keys, values) {
  var filtered = {};
  forEach(keys, function (name) {
    filtered[name] = values[name];
  });
  return filtered;
}
// like _.indexBy
// when you know that your index values will be unique, or you want last-one-in to win
function indexBy(array, propName) {
  var result = {};
  forEach(array, function(item) {
    result[item[propName]] = item;
  });
  return result;
}
// extracted from underscore.js
// Return a copy of the object only containing the whitelisted properties.
function pick(obj) {
  var copy = {};
  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));
  forEach(keys, function(key) {
    if (key in obj) copy[key] = obj[key];
  });
  return copy;
}
// extracted from underscore.js
// Return a copy of the object omitting the blacklisted properties.
function omit(obj) {
  var copy = {};
  var keys = Array.prototype.concat.apply(Array.prototype, Array.prototype.slice.call(arguments, 1));
  for (var key in obj) {
    if (indexOf(keys, key) == -1) copy[key] = obj[key];
  }
  return copy;
}
function pluck(collection, key) {
  var result = isArray(collection) ? [] : {};
  forEach(collection, function(val, i) {
    result[i] = isFunction(key) ? key(val) : val[key];
  });
  return result;
}
function filter(collection, callback) {
  var array = isArray(collection);
  var result = array ? [] : {};
  forEach(collection, function(val, i) {
    if (callback(val, i)) {
      result[array ? result.length : i] = val;
    }
  });
  return result;
}
function map(collection, callback) {
  var result = isArray(collection) ? [] : {};
  forEach(collection, function(val, i) {
    result[i] = callback(val, i);
  });
  return result;
}
// issue #2676 #2889
function silenceUncaughtInPromise (promise) {
  return promise.then(undefined, function() {}) && promise;
}
/**
 * @ngdoc overview
 * @name ui.router.util
 *
 * @description
 * # ui.router.util sub-module
 *
 * This module is a dependency of other sub-modules. Do not include this module as a dependency
 * in your angular app (use {@link ui.router} module instead).
 *
 */
angular.module('ui.router.util', ['ng']);
/**
 * @ngdoc overview
 * @name ui.router.router
 *
 * @requires ui.router.util
 *
 * @description
 * # ui.router.router sub-module
 *
 * This module is a dependency of other sub-modules. Do not include this module as a dependency
 * in your angular app (use {@link ui.router} module instead).
 */
angular.module('ui.router.router', ['ui.router.util']);
/**
 * @ngdoc overview
 * @name ui.router.state
 *
 * @requires ui.router.router
 * @requires ui.router.util
 *
 * @description
 * # ui.router.state sub-module
 *
 * This module is a dependency of the main ui.router module. Do not include this module as a dependency
 * in your angular app (use {@link ui.router} module instead).
 *
 */
angular.module('ui.router.state', ['ui.router.router', 'ui.router.util']);
/**
 * @ngdoc overview
 * @name ui.router
 *
 * @requires ui.router.state
 *
 * @description
 * # ui.router
 *
 * ## The main module for ui.router
 * There are several sub-modules included with the ui.router module, however only this module is needed
 * as a dependency within your angular app. The other modules are for organization purposes.
 *
 * The modules are:
 * * ui.router - the main "umbrella" module
 * * ui.router.router -
 *
 * *You'll need to include **only** this module as the dependency within your angular app.*
 *
 * <pre>
 * <!doctype html>
 * <html ng-app="myApp">
 * <head>
 *   <script src="js/angular.js"></script>
 *   <!-- Include the ui-router script -->
 *   <script src="js/angular-ui-router.min.js"></script>
 *   <script>
 *     // ...and add 'ui.router' as a dependency
 *     var myApp = angular.module('myApp', ['ui.router']);
 *   </script>
 * </head>
 * <body>
 * </body>
 * </html>
 * </pre>
 */
angular.module('ui.router', ['ui.router.state']);
angular.module('ui.router.compat', ['ui.router']);
src/main/webapp/bower_components/angular-ui-router/src/resolve.js
New file
@@ -0,0 +1,254 @@
/**
 * @ngdoc object
 * @name ui.router.util.$resolve
 *
 * @requires $q
 * @requires $injector
 *
 * @description
 * Manages resolution of (acyclic) graphs of promises.
 */
$Resolve.$inject = ['$q', '$injector'];
function $Resolve(  $q,    $injector) {
  var VISIT_IN_PROGRESS = 1,
      VISIT_DONE = 2,
      NOTHING = {},
      NO_DEPENDENCIES = [],
      NO_LOCALS = NOTHING,
      NO_PARENT = extend($q.when(NOTHING), { $$promises: NOTHING, $$values: NOTHING });
  /**
   * @ngdoc function
   * @name ui.router.util.$resolve#study
   * @methodOf ui.router.util.$resolve
   *
   * @description
   * Studies a set of invocables that are likely to be used multiple times.
   * <pre>
   * $resolve.study(invocables)(locals, parent, self)
   * </pre>
   * is equivalent to
   * <pre>
   * $resolve.resolve(invocables, locals, parent, self)
   * </pre>
   * but the former is more efficient (in fact `resolve` just calls `study`
   * internally).
   *
   * @param {object} invocables Invocable objects
   * @return {function} a function to pass in locals, parent and self
   */
  this.study = function (invocables) {
    if (!isObject(invocables)) throw new Error("'invocables' must be an object");
    var invocableKeys = objectKeys(invocables || {});
    // Perform a topological sort of invocables to build an ordered plan
    var plan = [], cycle = [], visited = {};
    function visit(value, key) {
      if (visited[key] === VISIT_DONE) return;
      cycle.push(key);
      if (visited[key] === VISIT_IN_PROGRESS) {
        cycle.splice(0, indexOf(cycle, key));
        throw new Error("Cyclic dependency: " + cycle.join(" -> "));
      }
      visited[key] = VISIT_IN_PROGRESS;
      if (isString(value)) {
        plan.push(key, [ function() { return $injector.get(value); }], NO_DEPENDENCIES);
      } else {
        var params = $injector.annotate(value);
        forEach(params, function (param) {
          if (param !== key && invocables.hasOwnProperty(param)) visit(invocables[param], param);
        });
        plan.push(key, value, params);
      }
      cycle.pop();
      visited[key] = VISIT_DONE;
    }
    forEach(invocables, visit);
    invocables = cycle = visited = null; // plan is all that's required
    function isResolve(value) {
      return isObject(value) && value.then && value.$$promises;
    }
    return function (locals, parent, self) {
      if (isResolve(locals) && self === undefined) {
        self = parent; parent = locals; locals = null;
      }
      if (!locals) locals = NO_LOCALS;
      else if (!isObject(locals)) {
        throw new Error("'locals' must be an object");
      }
      if (!parent) parent = NO_PARENT;
      else if (!isResolve(parent)) {
        throw new Error("'parent' must be a promise returned by $resolve.resolve()");
      }
      // To complete the overall resolution, we have to wait for the parent
      // promise and for the promise for each invokable in our plan.
      var resolution = $q.defer(),
          result = silenceUncaughtInPromise(resolution.promise),
          promises = result.$$promises = {},
          values = extend({}, locals),
          wait = 1 + plan.length/3,
          merged = false;
      silenceUncaughtInPromise(result);
      function done() {
        // Merge parent values we haven't got yet and publish our own $$values
        if (!--wait) {
          if (!merged) merge(values, parent.$$values);
          result.$$values = values;
          result.$$promises = result.$$promises || true; // keep for isResolve()
          delete result.$$inheritedValues;
          resolution.resolve(values);
        }
      }
      function fail(reason) {
        result.$$failure = reason;
        resolution.reject(reason);
      }
      // Short-circuit if parent has already failed
      if (isDefined(parent.$$failure)) {
        fail(parent.$$failure);
        return result;
      }
      if (parent.$$inheritedValues) {
        merge(values, omit(parent.$$inheritedValues, invocableKeys));
      }
      // Merge parent values if the parent has already resolved, or merge
      // parent promises and wait if the parent resolve is still in progress.
      extend(promises, parent.$$promises);
      if (parent.$$values) {
        merged = merge(values, omit(parent.$$values, invocableKeys));
        result.$$inheritedValues = omit(parent.$$values, invocableKeys);
        done();
      } else {
        if (parent.$$inheritedValues) {
          result.$$inheritedValues = omit(parent.$$inheritedValues, invocableKeys);
        }
        parent.then(done, fail);
      }
      // Process each invocable in the plan, but ignore any where a local of the same name exists.
      for (var i=0, ii=plan.length; i<ii; i+=3) {
        if (locals.hasOwnProperty(plan[i])) done();
        else invoke(plan[i], plan[i+1], plan[i+2]);
      }
      function invoke(key, invocable, params) {
        // Create a deferred for this invocation. Failures will propagate to the resolution as well.
        var invocation = $q.defer(), waitParams = 0;
        function onfailure(reason) {
          invocation.reject(reason);
          fail(reason);
        }
        // Wait for any parameter that we have a promise for (either from parent or from this
        // resolve; in that case study() will have made sure it's ordered before us in the plan).
        forEach(params, function (dep) {
          if (promises.hasOwnProperty(dep) && !locals.hasOwnProperty(dep)) {
            waitParams++;
            promises[dep].then(function (result) {
              values[dep] = result;
              if (!(--waitParams)) proceed();
            }, onfailure);
          }
        });
        if (!waitParams) proceed();
        function proceed() {
          if (isDefined(result.$$failure)) return;
          try {
            invocation.resolve($injector.invoke(invocable, self, values));
            invocation.promise.then(function (result) {
              values[key] = result;
              done();
            }, onfailure);
          } catch (e) {
            onfailure(e);
          }
        }
        // Publish promise synchronously; invocations further down in the plan may depend on it.
        promises[key] = silenceUncaughtInPromise(invocation.promise);
      }
      return result;
    };
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$resolve#resolve
   * @methodOf ui.router.util.$resolve
   *
   * @description
   * Resolves a set of invocables. An invocable is a function to be invoked via
   * `$injector.invoke()`, and can have an arbitrary number of dependencies.
   * An invocable can either return a value directly,
   * or a `$q` promise. If a promise is returned it will be resolved and the
   * resulting value will be used instead. Dependencies of invocables are resolved
   * (in this order of precedence)
   *
   * - from the specified `locals`
   * - from another invocable that is part of this `$resolve` call
   * - from an invocable that is inherited from a `parent` call to `$resolve`
   *   (or recursively
   * - from any ancestor `$resolve` of that parent).
   *
   * The return value of `$resolve` is a promise for an object that contains
   * (in this order of precedence)
   *
   * - any `locals` (if specified)
   * - the resolved return values of all injectables
   * - any values inherited from a `parent` call to `$resolve` (if specified)
   *
   * The promise will resolve after the `parent` promise (if any) and all promises
   * returned by injectables have been resolved. If any invocable
   * (or `$injector.invoke`) throws an exception, or if a promise returned by an
   * invocable is rejected, the `$resolve` promise is immediately rejected with the
   * same error. A rejection of a `parent` promise (if specified) will likewise be
   * propagated immediately. Once the `$resolve` promise has been rejected, no
   * further invocables will be called.
   *
   * Cyclic dependencies between invocables are not permitted and will cause `$resolve`
   * to throw an error. As a special case, an injectable can depend on a parameter
   * with the same name as the injectable, which will be fulfilled from the `parent`
   * injectable of the same name. This allows inherited values to be decorated.
   * Note that in this case any other injectable in the same `$resolve` with the same
   * dependency would see the decorated value, not the inherited value.
   *
   * Note that missing dependencies -- unlike cyclic dependencies -- will cause an
   * (asynchronous) rejection of the `$resolve` promise rather than a (synchronous)
   * exception.
   *
   * Invocables are invoked eagerly as soon as all dependencies are available.
   * This is true even for dependencies inherited from a `parent` call to `$resolve`.
   *
   * As a special case, an invocable can be a string, in which case it is taken to
   * be a service name to be passed to `$injector.get()`. This is supported primarily
   * for backwards-compatibility with the `resolve` property of `$routeProvider`
   * routes.
   *
   * @param {object} invocables functions to invoke or
   * `$injector` services to fetch.
   * @param {object} locals  values to make available to the injectables
   * @param {object} parent  a promise returned by another call to `$resolve`.
   * @param {object} self  the `this` for the invoked methods
   * @return {object} Promise for an object that contains the resolved return value
   * of all invocables, as well as any inherited and local values.
   */
  this.resolve = function (invocables, locals, parent, self) {
    return this.study(invocables)(locals, parent, self);
  };
}
angular.module('ui.router.util').service('$resolve', $Resolve);
src/main/webapp/bower_components/angular-ui-router/src/state.js
New file
@@ -0,0 +1,1516 @@
/**
 * @ngdoc object
 * @name ui.router.state.$stateProvider
 *
 * @requires ui.router.router.$urlRouterProvider
 * @requires ui.router.util.$urlMatcherFactoryProvider
 *
 * @description
 * The new `$stateProvider` works similar to Angular's v1 router, but it focuses purely
 * on state.
 *
 * A state corresponds to a "place" in the application in terms of the overall UI and
 * navigation. A state describes (via the controller / template / view properties) what
 * the UI looks like and does at that place.
 *
 * States often have things in common, and the primary way of factoring out these
 * commonalities in this model is via the state hierarchy, i.e. parent/child states aka
 * nested states.
 *
 * The `$stateProvider` provides interfaces to declare these states for your app.
 */
$StateProvider.$inject = ['$urlRouterProvider', '$urlMatcherFactoryProvider'];
function $StateProvider(   $urlRouterProvider,   $urlMatcherFactory) {
  var root, states = {}, $state, queue = {}, abstractKey = 'abstract';
  // Builds state properties from definition passed to registerState()
  var stateBuilder = {
    // Derive parent state from a hierarchical name only if 'parent' is not explicitly defined.
    // state.children = [];
    // if (parent) parent.children.push(state);
    parent: function(state) {
      if (isDefined(state.parent) && state.parent) return findState(state.parent);
      // regex matches any valid composite state name
      // would match "contact.list" but not "contacts"
      var compositeName = /^(.+)\.[^.]+$/.exec(state.name);
      return compositeName ? findState(compositeName[1]) : root;
    },
    // inherit 'data' from parent and override by own values (if any)
    data: function(state) {
      if (state.parent && state.parent.data) {
        state.data = state.self.data = inherit(state.parent.data, state.data);
      }
      return state.data;
    },
    // Build a URLMatcher if necessary, either via a relative or absolute URL
    url: function(state) {
      var url = state.url, config = { params: state.params || {} };
      if (isString(url)) {
        if (url.charAt(0) == '^') return $urlMatcherFactory.compile(url.substring(1), config);
        return (state.parent.navigable || root).url.concat(url, config);
      }
      if (!url || $urlMatcherFactory.isMatcher(url)) return url;
      throw new Error("Invalid url '" + url + "' in state '" + state + "'");
    },
    // Keep track of the closest ancestor state that has a URL (i.e. is navigable)
    navigable: function(state) {
      return state.url ? state : (state.parent ? state.parent.navigable : null);
    },
    // Own parameters for this state. state.url.params is already built at this point. Create and add non-url params
    ownParams: function(state) {
      var params = state.url && state.url.params || new $$UMFP.ParamSet();
      forEach(state.params || {}, function(config, id) {
        if (!params[id]) params[id] = new $$UMFP.Param(id, null, config, "config");
      });
      return params;
    },
    // Derive parameters for this state and ensure they're a super-set of parent's parameters
    params: function(state) {
      var ownParams = pick(state.ownParams, state.ownParams.$$keys());
      return state.parent && state.parent.params ? extend(state.parent.params.$$new(), ownParams) : new $$UMFP.ParamSet();
    },
    // If there is no explicit multi-view configuration, make one up so we don't have
    // to handle both cases in the view directive later. Note that having an explicit
    // 'views' property will mean the default unnamed view properties are ignored. This
    // is also a good time to resolve view names to absolute names, so everything is a
    // straight lookup at link time.
    views: function(state) {
      var views = {};
      forEach(isDefined(state.views) ? state.views : { '': state }, function (view, name) {
        if (name.indexOf('@') < 0) name += '@' + state.parent.name;
        view.resolveAs = view.resolveAs || state.resolveAs || '$resolve';
        views[name] = view;
      });
      return views;
    },
    // Keep a full path from the root down to this state as this is needed for state activation.
    path: function(state) {
      return state.parent ? state.parent.path.concat(state) : []; // exclude root from path
    },
    // Speed up $state.contains() as it's used a lot
    includes: function(state) {
      var includes = state.parent ? extend({}, state.parent.includes) : {};
      includes[state.name] = true;
      return includes;
    },
    $delegates: {}
  };
  function isRelative(stateName) {
    return stateName.indexOf(".") === 0 || stateName.indexOf("^") === 0;
  }
  function findState(stateOrName, base) {
    if (!stateOrName) return undefined;
    var isStr = isString(stateOrName),
        name  = isStr ? stateOrName : stateOrName.name,
        path  = isRelative(name);
    if (path) {
      if (!base) throw new Error("No reference point given for path '"  + name + "'");
      base = findState(base);
      var rel = name.split("."), i = 0, pathLength = rel.length, current = base;
      for (; i < pathLength; i++) {
        if (rel[i] === "" && i === 0) {
          current = base;
          continue;
        }
        if (rel[i] === "^") {
          if (!current.parent) throw new Error("Path '" + name + "' not valid for state '" + base.name + "'");
          current = current.parent;
          continue;
        }
        break;
      }
      rel = rel.slice(i).join(".");
      name = current.name + (current.name && rel ? "." : "") + rel;
    }
    var state = states[name];
    if (state && (isStr || (!isStr && (state === stateOrName || state.self === stateOrName)))) {
      return state;
    }
    return undefined;
  }
  function queueState(parentName, state) {
    if (!queue[parentName]) {
      queue[parentName] = [];
    }
    queue[parentName].push(state);
  }
  function flushQueuedChildren(parentName) {
    var queued = queue[parentName] || [];
    while(queued.length) {
      registerState(queued.shift());
    }
  }
  function registerState(state) {
    // Wrap a new object around the state so we can store our private details easily.
    state = inherit(state, {
      self: state,
      resolve: state.resolve || {},
      toString: function() { return this.name; }
    });
    var name = state.name;
    if (!isString(name) || name.indexOf('@') >= 0) throw new Error("State must have a valid name");
    if (states.hasOwnProperty(name)) throw new Error("State '" + name + "' is already defined");
    // Get parent name
    var parentName = (name.indexOf('.') !== -1) ? name.substring(0, name.lastIndexOf('.'))
        : (isString(state.parent)) ? state.parent
        : (isObject(state.parent) && isString(state.parent.name)) ? state.parent.name
        : '';
    // If parent is not registered yet, add state to queue and register later
    if (parentName && !states[parentName]) {
      return queueState(parentName, state.self);
    }
    for (var key in stateBuilder) {
      if (isFunction(stateBuilder[key])) state[key] = stateBuilder[key](state, stateBuilder.$delegates[key]);
    }
    states[name] = state;
    // Register the state in the global state list and with $urlRouter if necessary.
    if (!state[abstractKey] && state.url) {
      $urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {
        if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {
          $state.transitionTo(state, $match, { inherit: true, location: false });
        }
      }]);
    }
    // Register any queued children
    flushQueuedChildren(name);
    return state;
  }
  // Checks text to see if it looks like a glob.
  function isGlob (text) {
    return text.indexOf('*') > -1;
  }
  // Returns true if glob matches current $state name.
  function doesStateMatchGlob (glob) {
    var globSegments = glob.split('.'),
        segments = $state.$current.name.split('.');
    //match single stars
    for (var i = 0, l = globSegments.length; i < l; i++) {
      if (globSegments[i] === '*') {
        segments[i] = '*';
      }
    }
    //match greedy starts
    if (globSegments[0] === '**') {
       segments = segments.slice(indexOf(segments, globSegments[1]));
       segments.unshift('**');
    }
    //match greedy ends
    if (globSegments[globSegments.length - 1] === '**') {
       segments.splice(indexOf(segments, globSegments[globSegments.length - 2]) + 1, Number.MAX_VALUE);
       segments.push('**');
    }
    if (globSegments.length != segments.length) {
      return false;
    }
    return segments.join('') === globSegments.join('');
  }
  // Implicit root state that is always active
  root = registerState({
    name: '',
    url: '^',
    views: null,
    'abstract': true
  });
  root.navigable = null;
  /**
   * @ngdoc function
   * @name ui.router.state.$stateProvider#decorator
   * @methodOf ui.router.state.$stateProvider
   *
   * @description
   * Allows you to extend (carefully) or override (at your own peril) the
   * `stateBuilder` object used internally by `$stateProvider`. This can be used
   * to add custom functionality to ui-router, for example inferring templateUrl
   * based on the state name.
   *
   * When passing only a name, it returns the current (original or decorated) builder
   * function that matches `name`.
   *
   * The builder functions that can be decorated are listed below. Though not all
   * necessarily have a good use case for decoration, that is up to you to decide.
   *
   * In addition, users can attach custom decorators, which will generate new
   * properties within the state's internal definition. There is currently no clear
   * use-case for this beyond accessing internal states (i.e. $state.$current),
   * however, expect this to become increasingly relevant as we introduce additional
   * meta-programming features.
   *
   * **Warning**: Decorators should not be interdependent because the order of
   * execution of the builder functions in non-deterministic. Builder functions
   * should only be dependent on the state definition object and super function.
   *
   *
   * Existing builder functions and current return values:
   *
   * - **parent** `{object}` - returns the parent state object.
   * - **data** `{object}` - returns state data, including any inherited data that is not
   *   overridden by own values (if any).
   * - **url** `{object}` - returns a {@link ui.router.util.type:UrlMatcher UrlMatcher}
   *   or `null`.
   * - **navigable** `{object}` - returns closest ancestor state that has a URL (aka is
   *   navigable).
   * - **params** `{object}` - returns an array of state params that are ensured to
   *   be a super-set of parent's params.
   * - **views** `{object}` - returns a views object where each key is an absolute view
   *   name (i.e. "viewName@stateName") and each value is the config object
   *   (template, controller) for the view. Even when you don't use the views object
   *   explicitly on a state config, one is still created for you internally.
   *   So by decorating this builder function you have access to decorating template
   *   and controller properties.
   * - **ownParams** `{object}` - returns an array of params that belong to the state,
   *   not including any params defined by ancestor states.
   * - **path** `{string}` - returns the full path from the root down to this state.
   *   Needed for state activation.
   * - **includes** `{object}` - returns an object that includes every state that
   *   would pass a `$state.includes()` test.
   *
   * @example
   * <pre>
   * // Override the internal 'views' builder with a function that takes the state
   * // definition, and a reference to the internal function being overridden:
   * $stateProvider.decorator('views', function (state, parent) {
   *   var result = {},
   *       views = parent(state);
   *
   *   angular.forEach(views, function (config, name) {
   *     var autoName = (state.name + '.' + name).replace('.', '/');
   *     config.templateUrl = config.templateUrl || '/partials/' + autoName + '.html';
   *     result[name] = config;
   *   });
   *   return result;
   * });
   *
   * $stateProvider.state('home', {
   *   views: {
   *     'contact.list': { controller: 'ListController' },
   *     'contact.item': { controller: 'ItemController' }
   *   }
   * });
   *
   * // ...
   *
   * $state.go('home');
   * // Auto-populates list and item views with /partials/home/contact/list.html,
   * // and /partials/home/contact/item.html, respectively.
   * </pre>
   *
   * @param {string} name The name of the builder function to decorate.
   * @param {object} func A function that is responsible for decorating the original
   * builder function. The function receives two parameters:
   *
   *   - `{object}` - state - The state config object.
   *   - `{object}` - super - The original builder function.
   *
   * @return {object} $stateProvider - $stateProvider instance
   */
  this.decorator = decorator;
  function decorator(name, func) {
    /*jshint validthis: true */
    if (isString(name) && !isDefined(func)) {
      return stateBuilder[name];
    }
    if (!isFunction(func) || !isString(name)) {
      return this;
    }
    if (stateBuilder[name] && !stateBuilder.$delegates[name]) {
      stateBuilder.$delegates[name] = stateBuilder[name];
    }
    stateBuilder[name] = func;
    return this;
  }
  /**
   * @ngdoc function
   * @name ui.router.state.$stateProvider#state
   * @methodOf ui.router.state.$stateProvider
   *
   * @description
   * Registers a state configuration under a given state name. The stateConfig object
   * has the following acceptable properties.
   *
   * @param {string} name A unique state name, e.g. "home", "about", "contacts".
   * To create a parent/child state use a dot, e.g. "about.sales", "home.newest".
   * @param {object} stateConfig State configuration object.
   * @param {string|function=} stateConfig.template
   * <a id='template'></a>
   *   html template as a string or a function that returns
   *   an html template as a string which should be used by the uiView directives. This property
   *   takes precedence over templateUrl.
   *
   *   If `template` is a function, it will be called with the following parameters:
   *
   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by
   *     applying the current state
   *
   * <pre>template:
   *   "<h1>inline template definition</h1>" +
   *   "<div ui-view></div>"</pre>
   * <pre>template: function(params) {
   *       return "<h1>generated template</h1>"; }</pre>
   * </div>
   *
   * @param {string|function=} stateConfig.templateUrl
   * <a id='templateUrl'></a>
   *
   *   path or function that returns a path to an html
   *   template that should be used by uiView.
   *
   *   If `templateUrl` is a function, it will be called with the following parameters:
   *
   *   - {array.&lt;object&gt;} - state parameters extracted from the current $location.path() by
   *     applying the current state
   *
   * <pre>templateUrl: "home.html"</pre>
   * <pre>templateUrl: function(params) {
   *     return myTemplates[params.pageId]; }</pre>
   *
   * @param {function=} stateConfig.templateProvider
   * <a id='templateProvider'></a>
   *    Provider function that returns HTML content string.
   * <pre> templateProvider:
   *       function(MyTemplateService, params) {
   *         return MyTemplateService.getTemplate(params.pageId);
   *       }</pre>
   *
   * @param {string|function=} stateConfig.controller
   * <a id='controller'></a>
   *
   *  Controller fn that should be associated with newly
   *   related scope or the name of a registered controller if passed as a string.
   *   Optionally, the ControllerAs may be declared here.
   * <pre>controller: "MyRegisteredController"</pre>
   * <pre>controller:
   *     "MyRegisteredController as fooCtrl"}</pre>
   * <pre>controller: function($scope, MyService) {
   *     $scope.data = MyService.getData(); }</pre>
   *
   * @param {function=} stateConfig.controllerProvider
   * <a id='controllerProvider'></a>
   *
   * Injectable provider function that returns the actual controller or string.
   * <pre>controllerProvider:
   *   function(MyResolveData) {
   *     if (MyResolveData.foo)
   *       return "FooCtrl"
   *     else if (MyResolveData.bar)
   *       return "BarCtrl";
   *     else return function($scope) {
   *       $scope.baz = "Qux";
   *     }
   *   }</pre>
   *
   * @param {string=} stateConfig.controllerAs
   * <a id='controllerAs'></a>
   *
   * A controller alias name. If present the controller will be
   *   published to scope under the controllerAs name.
   * <pre>controllerAs: "myCtrl"</pre>
   *
   * @param {string|object=} stateConfig.parent
   * <a id='parent'></a>
   * Optionally specifies the parent state of this state.
   *
   * <pre>parent: 'parentState'</pre>
   * <pre>parent: parentState // JS variable</pre>
   *
   * @param {object=} stateConfig.resolve
   * <a id='resolve'></a>
   *
   * An optional map&lt;string, function&gt; of dependencies which
   *   should be injected into the controller. If any of these dependencies are promises,
   *   the router will wait for them all to be resolved before the controller is instantiated.
   *   If all the promises are resolved successfully, the $stateChangeSuccess event is fired
   *   and the values of the resolved promises are injected into any controllers that reference them.
   *   If any  of the promises are rejected the $stateChangeError event is fired.
   *
   *   The map object is:
   *
   *   - key - {string}: name of dependency to be injected into controller
   *   - factory - {string|function}: If string then it is alias for service. Otherwise if function,
   *     it is injected and return value it treated as dependency. If result is a promise, it is
   *     resolved before its value is injected into controller.
   *
   * <pre>resolve: {
   *     myResolve1:
   *       function($http, $stateParams) {
   *         return $http.get("/api/foos/"+stateParams.fooID);
   *       }
   *     }</pre>
   *
   * @param {string=} stateConfig.url
   * <a id='url'></a>
   *
   *   A url fragment with optional parameters. When a state is navigated or
   *   transitioned to, the `$stateParams` service will be populated with any
   *   parameters that were passed.
   *
   *   (See {@link ui.router.util.type:UrlMatcher UrlMatcher} `UrlMatcher`} for
   *   more details on acceptable patterns )
   *
   * examples:
   * <pre>url: "/home"
   * url: "/users/:userid"
   * url: "/books/{bookid:[a-zA-Z_-]}"
   * url: "/books/{categoryid:int}"
   * url: "/books/{publishername:string}/{categoryid:int}"
   * url: "/messages?before&after"
   * url: "/messages?{before:date}&{after:date}"
   * url: "/messages/:mailboxid?{before:date}&{after:date}"
   * </pre>
   *
   * @param {object=} stateConfig.views
   * <a id='views'></a>
   * an optional map&lt;string, object&gt; which defined multiple views, or targets views
   * manually/explicitly.
   *
   * Examples:
   *
   * Targets three named `ui-view`s in the parent state's template
   * <pre>views: {
   *     header: {
   *       controller: "headerCtrl",
   *       templateUrl: "header.html"
   *     }, body: {
   *       controller: "bodyCtrl",
   *       templateUrl: "body.html"
   *     }, footer: {
   *       controller: "footCtrl",
   *       templateUrl: "footer.html"
   *     }
   *   }</pre>
   *
   * Targets named `ui-view="header"` from grandparent state 'top''s template, and named `ui-view="body" from parent state's template.
   * <pre>views: {
   *     'header@top': {
   *       controller: "msgHeaderCtrl",
   *       templateUrl: "msgHeader.html"
   *     }, 'body': {
   *       controller: "messagesCtrl",
   *       templateUrl: "messages.html"
   *     }
   *   }</pre>
   *
   * @param {boolean=} [stateConfig.abstract=false]
   * <a id='abstract'></a>
   * An abstract state will never be directly activated,
   *   but can provide inherited properties to its common children states.
   * <pre>abstract: true</pre>
   *
   * @param {function=} stateConfig.onEnter
   * <a id='onEnter'></a>
   *
   * Callback function for when a state is entered. Good way
   *   to trigger an action or dispatch an event, such as opening a dialog.
   * If minifying your scripts, make sure to explicitly annotate this function,
   * because it won't be automatically annotated by your build tools.
   *
   * <pre>onEnter: function(MyService, $stateParams) {
   *     MyService.foo($stateParams.myParam);
   * }</pre>
   *
   * @param {function=} stateConfig.onExit
   * <a id='onExit'></a>
   *
   * Callback function for when a state is exited. Good way to
   *   trigger an action or dispatch an event, such as opening a dialog.
   * If minifying your scripts, make sure to explicitly annotate this function,
   * because it won't be automatically annotated by your build tools.
   *
   * <pre>onExit: function(MyService, $stateParams) {
   *     MyService.cleanup($stateParams.myParam);
   * }</pre>
   *
   * @param {boolean=} [stateConfig.reloadOnSearch=true]
   * <a id='reloadOnSearch'></a>
   *
   * If `false`, will not retrigger the same state
   *   just because a search/query parameter has changed (via $location.search() or $location.hash()).
   *   Useful for when you'd like to modify $location.search() without triggering a reload.
   * <pre>reloadOnSearch: false</pre>
   *
   * @param {object=} stateConfig.data
   * <a id='data'></a>
   *
   * Arbitrary data object, useful for custom configuration.  The parent state's `data` is
   *   prototypally inherited.  In other words, adding a data property to a state adds it to
   *   the entire subtree via prototypal inheritance.
   *
   * <pre>data: {
   *     requiredRole: 'foo'
   * } </pre>
   *
   * @param {object=} stateConfig.params
   * <a id='params'></a>
   *
   * A map which optionally configures parameters declared in the `url`, or
   *   defines additional non-url parameters.  For each parameter being
   *   configured, add a configuration object keyed to the name of the parameter.
   *
   *   Each parameter configuration object may contain the following properties:
   *
   *   - ** value ** - {object|function=}: specifies the default value for this
   *     parameter.  This implicitly sets this parameter as optional.
   *
   *     When UI-Router routes to a state and no value is
   *     specified for this parameter in the URL or transition, the
   *     default value will be used instead.  If `value` is a function,
   *     it will be injected and invoked, and the return value used.
   *
   *     *Note*: `undefined` is treated as "no default value" while `null`
   *     is treated as "the default value is `null`".
   *
   *     *Shorthand*: If you only need to configure the default value of the
   *     parameter, you may use a shorthand syntax.   In the **`params`**
   *     map, instead mapping the param name to a full parameter configuration
   *     object, simply set map it to the default parameter value, e.g.:
   *
   * <pre>// define a parameter's default value
   * params: {
   *     param1: { value: "defaultValue" }
   * }
   * // shorthand default values
   * params: {
   *     param1: "defaultValue",
   *     param2: "param2Default"
   * }</pre>
   *
   *   - ** array ** - {boolean=}: *(default: false)* If true, the param value will be
   *     treated as an array of values.  If you specified a Type, the value will be
   *     treated as an array of the specified Type.  Note: query parameter values
   *     default to a special `"auto"` mode.
   *
   *     For query parameters in `"auto"` mode, if multiple  values for a single parameter
   *     are present in the URL (e.g.: `/foo?bar=1&bar=2&bar=3`) then the values
   *     are mapped to an array (e.g.: `{ foo: [ '1', '2', '3' ] }`).  However, if
   *     only one value is present (e.g.: `/foo?bar=1`) then the value is treated as single
   *     value (e.g.: `{ foo: '1' }`).
   *
   * <pre>params: {
   *     param1: { array: true }
   * }</pre>
   *
   *   - ** squash ** - {bool|string=}: `squash` configures how a default parameter value is represented in the URL when
   *     the current parameter value is the same as the default value. If `squash` is not set, it uses the
   *     configured default squash policy.
   *     (See {@link ui.router.util.$urlMatcherFactory#methods_defaultSquashPolicy `defaultSquashPolicy()`})
   *
   *   There are three squash settings:
   *
   *     - false: The parameter's default value is not squashed.  It is encoded and included in the URL
   *     - true: The parameter's default value is omitted from the URL.  If the parameter is preceeded and followed
   *       by slashes in the state's `url` declaration, then one of those slashes are omitted.
   *       This can allow for cleaner looking URLs.
   *     - `"<arbitrary string>"`: The parameter's default value is replaced with an arbitrary placeholder of  your choice.
   *
   * <pre>params: {
   *     param1: {
   *       value: "defaultId",
   *       squash: true
   * } }
   * // squash "defaultValue" to "~"
   * params: {
   *     param1: {
   *       value: "defaultValue",
   *       squash: "~"
   * } }
   * </pre>
   *
   *
   * @example
   * <pre>
   * // Some state name examples
   *
   * // stateName can be a single top-level name (must be unique).
   * $stateProvider.state("home", {});
   *
   * // Or it can be a nested state name. This state is a child of the
   * // above "home" state.
   * $stateProvider.state("home.newest", {});
   *
   * // Nest states as deeply as needed.
   * $stateProvider.state("home.newest.abc.xyz.inception", {});
   *
   * // state() returns $stateProvider, so you can chain state declarations.
   * $stateProvider
   *   .state("home", {})
   *   .state("about", {})
   *   .state("contacts", {});
   * </pre>
   *
   */
  this.state = state;
  function state(name, definition) {
    /*jshint validthis: true */
    if (isObject(name)) definition = name;
    else definition.name = name;
    registerState(definition);
    return this;
  }
  /**
   * @ngdoc object
   * @name ui.router.state.$state
   *
   * @requires $rootScope
   * @requires $q
   * @requires ui.router.state.$view
   * @requires $injector
   * @requires ui.router.util.$resolve
   * @requires ui.router.state.$stateParams
   * @requires ui.router.router.$urlRouter
   *
   * @property {object} params A param object, e.g. {sectionId: section.id)}, that
   * you'd like to test against the current active state.
   * @property {object} current A reference to the state's config object. However
   * you passed it in. Useful for accessing custom data.
   * @property {object} transition Currently pending transition. A promise that'll
   * resolve or reject.
   *
   * @description
   * `$state` service is responsible for representing states as well as transitioning
   * between them. It also provides interfaces to ask for current state or even states
   * you're coming from.
   */
  this.$get = $get;
  $get.$inject = ['$rootScope', '$q', '$view', '$injector', '$resolve', '$stateParams', '$urlRouter', '$location', '$urlMatcherFactory'];
  function $get(   $rootScope,   $q,   $view,   $injector,   $resolve,   $stateParams,   $urlRouter,   $location,   $urlMatcherFactory) {
    var TransitionSupersededError = new Error('transition superseded');
    var TransitionSuperseded = silenceUncaughtInPromise($q.reject(TransitionSupersededError));
    var TransitionPrevented = silenceUncaughtInPromise($q.reject(new Error('transition prevented')));
    var TransitionAborted = silenceUncaughtInPromise($q.reject(new Error('transition aborted')));
    var TransitionFailed = silenceUncaughtInPromise($q.reject(new Error('transition failed')));
    // Handles the case where a state which is the target of a transition is not found, and the user
    // can optionally retry or defer the transition
    function handleRedirect(redirect, state, params, options) {
      /**
       * @ngdoc event
       * @name ui.router.state.$state#$stateNotFound
       * @eventOf ui.router.state.$state
       * @eventType broadcast on root scope
       * @description
       * Fired when a requested state **cannot be found** using the provided state name during transition.
       * The event is broadcast allowing any handlers a single chance to deal with the error (usually by
       * lazy-loading the unfound state). A special `unfoundState` object is passed to the listener handler,
       * you can see its three properties in the example. You can use `event.preventDefault()` to abort the
       * transition and the promise returned from `go` will be rejected with a `'transition aborted'` value.
       *
       * @param {Object} event Event object.
       * @param {Object} unfoundState Unfound State information. Contains: `to, toParams, options` properties.
       * @param {State} fromState Current state object.
       * @param {Object} fromParams Current state params.
       *
       * @example
       *
       * <pre>
       * // somewhere, assume lazy.state has not been defined
       * $state.go("lazy.state", {a:1, b:2}, {inherit:false});
       *
       * // somewhere else
       * $scope.$on('$stateNotFound',
       * function(event, unfoundState, fromState, fromParams){
       *     console.log(unfoundState.to); // "lazy.state"
       *     console.log(unfoundState.toParams); // {a:1, b:2}
       *     console.log(unfoundState.options); // {inherit:false} + default options
       * })
       * </pre>
       */
      var evt = $rootScope.$broadcast('$stateNotFound', redirect, state, params);
      if (evt.defaultPrevented) {
        $urlRouter.update();
        return TransitionAborted;
      }
      if (!evt.retry) {
        return null;
      }
      // Allow the handler to return a promise to defer state lookup retry
      if (options.$retry) {
        $urlRouter.update();
        return TransitionFailed;
      }
      var retryTransition = $state.transition = $q.when(evt.retry);
      retryTransition.then(function() {
        if (retryTransition !== $state.transition) {
          $rootScope.$broadcast('$stateChangeCancel', redirect.to, redirect.toParams, state, params);
          return TransitionSuperseded;
        }
        redirect.options.$retry = true;
        return $state.transitionTo(redirect.to, redirect.toParams, redirect.options);
      }, function() {
        return TransitionAborted;
      });
      $urlRouter.update();
      return retryTransition;
    }
    root.locals = { resolve: null, globals: { $stateParams: {} } };
    $state = {
      params: {},
      current: root.self,
      $current: root,
      transition: null
    };
    /**
     * @ngdoc function
     * @name ui.router.state.$state#reload
     * @methodOf ui.router.state.$state
     *
     * @description
     * A method that force reloads the current state. All resolves are re-resolved,
     * controllers reinstantiated, and events re-fired.
     *
     * @example
     * <pre>
     * var app angular.module('app', ['ui.router']);
     *
     * app.controller('ctrl', function ($scope, $state) {
     *   $scope.reload = function(){
     *     $state.reload();
     *   }
     * });
     * </pre>
     *
     * `reload()` is just an alias for:
     * <pre>
     * $state.transitionTo($state.current, $stateParams, {
     *   reload: true, inherit: false, notify: true
     * });
     * </pre>
     *
     * @param {string=|object=} state - A state name or a state object, which is the root of the resolves to be re-resolved.
     * @example
     * <pre>
     * //assuming app application consists of 3 states: 'contacts', 'contacts.detail', 'contacts.detail.item'
     * //and current state is 'contacts.detail.item'
     * var app angular.module('app', ['ui.router']);
     *
     * app.controller('ctrl', function ($scope, $state) {
     *   $scope.reload = function(){
     *     //will reload 'contact.detail' and 'contact.detail.item' states
     *     $state.reload('contact.detail');
     *   }
     * });
     * </pre>
     *
     * `reload()` is just an alias for:
     * <pre>
     * $state.transitionTo($state.current, $stateParams, {
     *   reload: true, inherit: false, notify: true
     * });
     * </pre>
     * @returns {promise} A promise representing the state of the new transition. See
     * {@link ui.router.state.$state#methods_go $state.go}.
     */
    $state.reload = function reload(state) {
      return $state.transitionTo($state.current, $stateParams, { reload: state || true, inherit: false, notify: true});
    };
    /**
     * @ngdoc function
     * @name ui.router.state.$state#go
     * @methodOf ui.router.state.$state
     *
     * @description
     * Convenience method for transitioning to a new state. `$state.go` calls
     * `$state.transitionTo` internally but automatically sets options to
     * `{ location: true, inherit: true, relative: $state.$current, notify: true }`.
     * This allows you to easily use an absolute or relative to path and specify
     * only the parameters you'd like to update (while letting unspecified parameters
     * inherit from the currently active ancestor states).
     *
     * @example
     * <pre>
     * var app = angular.module('app', ['ui.router']);
     *
     * app.controller('ctrl', function ($scope, $state) {
     *   $scope.changeState = function () {
     *     $state.go('contact.detail');
     *   };
     * });
     * </pre>
     * <img src='../ngdoc_assets/StateGoExamples.png'/>
     *
     * @param {string} to Absolute state name or relative state path. Some examples:
     *
     * - `$state.go('contact.detail')` - will go to the `contact.detail` state
     * - `$state.go('^')` - will go to a parent state
     * - `$state.go('^.sibling')` - will go to a sibling state
     * - `$state.go('.child.grandchild')` - will go to grandchild state
     *
     * @param {object=} params A map of the parameters that will be sent to the state,
     * will populate $stateParams. Any parameters that are not specified will be inherited from currently
     * defined parameters. Only parameters specified in the state definition can be overridden, new
     * parameters will be ignored. This allows, for example, going to a sibling state that shares parameters
     * specified in a parent state. Parameter inheritance only works between common ancestor states, I.e.
     * transitioning to a sibling will get you the parameters for all parents, transitioning to a child
     * will get you all current parameters, etc.
     * @param {object=} options Options object. The options are:
     *
     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`
     *    will not. If string, must be `"replace"`, which will update url and also replace last history record.
     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.
     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'),
     *    defines which state to be relative from.
     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.
     * - **`reload`** (v0.2.5) - {boolean=false|string|object}, If `true` will force transition even if no state or params
     *    have changed.  It will reload the resolves and views of the current state and parent states.
     *    If `reload` is a string (or state object), the state object is fetched (by name, or object reference); and \
     *    the transition reloads the resolves and views for that matched state, and all its children states.
     *
     * @returns {promise} A promise representing the state of the new transition.
     *
     * Possible success values:
     *
     * - $state.current
     *
     * <br/>Possible rejection values:
     *
     * - 'transition superseded' - when a newer transition has been started after this one
     * - 'transition prevented' - when `event.preventDefault()` has been called in a `$stateChangeStart` listener
     * - 'transition aborted' - when `event.preventDefault()` has been called in a `$stateNotFound` listener or
     *   when a `$stateNotFound` `event.retry` promise errors.
     * - 'transition failed' - when a state has been unsuccessfully found after 2 tries.
     * - *resolve error* - when an error has occurred with a `resolve`
     *
     */
    $state.go = function go(to, params, options) {
      return $state.transitionTo(to, params, extend({ inherit: true, relative: $state.$current }, options));
    };
    /**
     * @ngdoc function
     * @name ui.router.state.$state#transitionTo
     * @methodOf ui.router.state.$state
     *
     * @description
     * Low-level method for transitioning to a new state. {@link ui.router.state.$state#methods_go $state.go}
     * uses `transitionTo` internally. `$state.go` is recommended in most situations.
     *
     * @example
     * <pre>
     * var app = angular.module('app', ['ui.router']);
     *
     * app.controller('ctrl', function ($scope, $state) {
     *   $scope.changeState = function () {
     *     $state.transitionTo('contact.detail');
     *   };
     * });
     * </pre>
     *
     * @param {string} to State name.
     * @param {object=} toParams A map of the parameters that will be sent to the state,
     * will populate $stateParams.
     * @param {object=} options Options object. The options are:
     *
     * - **`location`** - {boolean=true|string=} - If `true` will update the url in the location bar, if `false`
     *    will not. If string, must be `"replace"`, which will update url and also replace last history record.
     * - **`inherit`** - {boolean=false}, If `true` will inherit url parameters from current url.
     * - **`relative`** - {object=}, When transitioning with relative path (e.g '^'),
     *    defines which state to be relative from.
     * - **`notify`** - {boolean=true}, If `true` will broadcast $stateChangeStart and $stateChangeSuccess events.
     * - **`reload`** (v0.2.5) - {boolean=false|string=|object=}, If `true` will force transition even if the state or params
     *    have not changed, aka a reload of the same state. It differs from reloadOnSearch because you'd
     *    use this when you want to force a reload when *everything* is the same, including search params.
     *    if String, then will reload the state with the name given in reload, and any children.
     *    if Object, then a stateObj is expected, will reload the state found in stateObj, and any children.
     *
     * @returns {promise} A promise representing the state of the new transition. See
     * {@link ui.router.state.$state#methods_go $state.go}.
     */
    $state.transitionTo = function transitionTo(to, toParams, options) {
      toParams = toParams || {};
      options = extend({
        location: true, inherit: false, relative: null, notify: true, reload: false, $retry: false
      }, options || {});
      var from = $state.$current, fromParams = $state.params, fromPath = from.path;
      var evt, toState = findState(to, options.relative);
      // Store the hash param for later (since it will be stripped out by various methods)
      var hash = toParams['#'];
      if (!isDefined(toState)) {
        var redirect = { to: to, toParams: toParams, options: options };
        var redirectResult = handleRedirect(redirect, from.self, fromParams, options);
        if (redirectResult) {
          return redirectResult;
        }
        // Always retry once if the $stateNotFound was not prevented
        // (handles either redirect changed or state lazy-definition)
        to = redirect.to;
        toParams = redirect.toParams;
        options = redirect.options;
        toState = findState(to, options.relative);
        if (!isDefined(toState)) {
          if (!options.relative) throw new Error("No such state '" + to + "'");
          throw new Error("Could not resolve '" + to + "' from state '" + options.relative + "'");
        }
      }
      if (toState[abstractKey]) throw new Error("Cannot transition to abstract state '" + to + "'");
      if (options.inherit) toParams = inheritParams($stateParams, toParams || {}, $state.$current, toState);
      if (!toState.params.$$validates(toParams)) return TransitionFailed;
      toParams = toState.params.$$values(toParams);
      to = toState;
      var toPath = to.path;
      // Starting from the root of the path, keep all levels that haven't changed
      var keep = 0, state = toPath[keep], locals = root.locals, toLocals = [];
      if (!options.reload) {
        while (state && state === fromPath[keep] && state.ownParams.$$equals(toParams, fromParams)) {
          locals = toLocals[keep] = state.locals;
          keep++;
          state = toPath[keep];
        }
      } else if (isString(options.reload) || isObject(options.reload)) {
        if (isObject(options.reload) && !options.reload.name) {
          throw new Error('Invalid reload state object');
        }
        var reloadState = options.reload === true ? fromPath[0] : findState(options.reload);
        if (options.reload && !reloadState) {
          throw new Error("No such reload state '" + (isString(options.reload) ? options.reload : options.reload.name) + "'");
        }
        while (state && state === fromPath[keep] && state !== reloadState) {
          locals = toLocals[keep] = state.locals;
          keep++;
          state = toPath[keep];
        }
      }
      // If we're going to the same state and all locals are kept, we've got nothing to do.
      // But clear 'transition', as we still want to cancel any other pending transitions.
      // TODO: We may not want to bump 'transition' if we're called from a location change
      // that we've initiated ourselves, because we might accidentally abort a legitimate
      // transition initiated from code?
      if (shouldSkipReload(to, toParams, from, fromParams, locals, options)) {
        if (hash) toParams['#'] = hash;
        $state.params = toParams;
        copy($state.params, $stateParams);
        copy(filterByKeys(to.params.$$keys(), $stateParams), to.locals.globals.$stateParams);
        if (options.location && to.navigable && to.navigable.url) {
          $urlRouter.push(to.navigable.url, toParams, {
            $$avoidResync: true, replace: options.location === 'replace'
          });
          $urlRouter.update(true);
        }
        $state.transition = null;
        return $q.when($state.current);
      }
      // Filter parameters before we pass them to event handlers etc.
      toParams = filterByKeys(to.params.$$keys(), toParams || {});
      // Re-add the saved hash before we start returning things or broadcasting $stateChangeStart
      if (hash) toParams['#'] = hash;
      // Broadcast start event and cancel the transition if requested
      if (options.notify) {
        /**
         * @ngdoc event
         * @name ui.router.state.$state#$stateChangeStart
         * @eventOf ui.router.state.$state
         * @eventType broadcast on root scope
         * @description
         * Fired when the state transition **begins**. You can use `event.preventDefault()`
         * to prevent the transition from happening and then the transition promise will be
         * rejected with a `'transition prevented'` value.
         *
         * @param {Object} event Event object.
         * @param {State} toState The state being transitioned to.
         * @param {Object} toParams The params supplied to the `toState`.
         * @param {State} fromState The current state, pre-transition.
         * @param {Object} fromParams The params supplied to the `fromState`.
         *
         * @example
         *
         * <pre>
         * $rootScope.$on('$stateChangeStart',
         * function(event, toState, toParams, fromState, fromParams){
         *     event.preventDefault();
         *     // transitionTo() promise will be rejected with
         *     // a 'transition prevented' error
         * })
         * </pre>
         */
        if ($rootScope.$broadcast('$stateChangeStart', to.self, toParams, from.self, fromParams, options).defaultPrevented) {
          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
          //Don't update and resync url if there's been a new transition started. see issue #2238, #600
          if ($state.transition == null) $urlRouter.update();
          return TransitionPrevented;
        }
      }
      // Resolve locals for the remaining states, but don't update any global state just
      // yet -- if anything fails to resolve the current state needs to remain untouched.
      // We also set up an inheritance chain for the locals here. This allows the view directive
      // to quickly look up the correct definition for each view in the current state. Even
      // though we create the locals object itself outside resolveState(), it is initially
      // empty and gets filled asynchronously. We need to keep track of the promise for the
      // (fully resolved) current locals, and pass this down the chain.
      var resolved = $q.when(locals);
      for (var l = keep; l < toPath.length; l++, state = toPath[l]) {
        locals = toLocals[l] = inherit(locals);
        resolved = resolveState(state, toParams, state === to, resolved, locals, options);
      }
      // Once everything is resolved, we are ready to perform the actual transition
      // and return a promise for the new state. We also keep track of what the
      // current promise is, so that we can detect overlapping transitions and
      // keep only the outcome of the last transition.
      var transition = $state.transition = resolved.then(function () {
        var l, entering, exiting;
        if ($state.transition !== transition) {
          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
          return TransitionSuperseded;
        }
        // Exit 'from' states not kept
        for (l = fromPath.length - 1; l >= keep; l--) {
          exiting = fromPath[l];
          if (exiting.self.onExit) {
            $injector.invoke(exiting.self.onExit, exiting.self, exiting.locals.globals);
          }
          exiting.locals = null;
        }
        // Enter 'to' states not kept
        for (l = keep; l < toPath.length; l++) {
          entering = toPath[l];
          entering.locals = toLocals[l];
          if (entering.self.onEnter) {
            $injector.invoke(entering.self.onEnter, entering.self, entering.locals.globals);
          }
        }
        // Run it again, to catch any transitions in callbacks
        if ($state.transition !== transition) {
          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
          return TransitionSuperseded;
        }
        // Update globals in $state
        $state.$current = to;
        $state.current = to.self;
        $state.params = toParams;
        copy($state.params, $stateParams);
        $state.transition = null;
        if (options.location && to.navigable) {
          $urlRouter.push(to.navigable.url, to.navigable.locals.globals.$stateParams, {
            $$avoidResync: true, replace: options.location === 'replace'
          });
        }
        if (options.notify) {
        /**
         * @ngdoc event
         * @name ui.router.state.$state#$stateChangeSuccess
         * @eventOf ui.router.state.$state
         * @eventType broadcast on root scope
         * @description
         * Fired once the state transition is **complete**.
         *
         * @param {Object} event Event object.
         * @param {State} toState The state being transitioned to.
         * @param {Object} toParams The params supplied to the `toState`.
         * @param {State} fromState The current state, pre-transition.
         * @param {Object} fromParams The params supplied to the `fromState`.
         */
          $rootScope.$broadcast('$stateChangeSuccess', to.self, toParams, from.self, fromParams);
        }
        $urlRouter.update(true);
        return $state.current;
      }).then(null, function (error) {
        // propagate TransitionSuperseded error without emitting $stateChangeCancel
        // as it was already emitted in the success handler above
        if (error === TransitionSupersededError) return TransitionSuperseded;
        if ($state.transition !== transition) {
          $rootScope.$broadcast('$stateChangeCancel', to.self, toParams, from.self, fromParams);
          return TransitionSuperseded;
        }
        $state.transition = null;
        /**
         * @ngdoc event
         * @name ui.router.state.$state#$stateChangeError
         * @eventOf ui.router.state.$state
         * @eventType broadcast on root scope
         * @description
         * Fired when an **error occurs** during transition. It's important to note that if you
         * have any errors in your resolve functions (javascript errors, non-existent services, etc)
         * they will not throw traditionally. You must listen for this $stateChangeError event to
         * catch **ALL** errors.
         *
         * @param {Object} event Event object.
         * @param {State} toState The state being transitioned to.
         * @param {Object} toParams The params supplied to the `toState`.
         * @param {State} fromState The current state, pre-transition.
         * @param {Object} fromParams The params supplied to the `fromState`.
         * @param {Error} error The resolve error object.
         */
        evt = $rootScope.$broadcast('$stateChangeError', to.self, toParams, from.self, fromParams, error);
        if (!evt.defaultPrevented) {
          $urlRouter.update();
        }
        return $q.reject(error);
      });
      silenceUncaughtInPromise(transition);
      return transition;
    };
    /**
     * @ngdoc function
     * @name ui.router.state.$state#is
     * @methodOf ui.router.state.$state
     *
     * @description
     * Similar to {@link ui.router.state.$state#methods_includes $state.includes},
     * but only checks for the full state name. If params is supplied then it will be
     * tested for strict equality against the current active params object, so all params
     * must match with none missing and no extras.
     *
     * @example
     * <pre>
     * $state.$current.name = 'contacts.details.item';
     *
     * // absolute name
     * $state.is('contact.details.item'); // returns true
     * $state.is(contactDetailItemStateObject); // returns true
     *
     * // relative name (. and ^), typically from a template
     * // E.g. from the 'contacts.details' template
     * <div ng-class="{highlighted: $state.is('.item')}">Item</div>
     * </pre>
     *
     * @param {string|object} stateOrName The state name (absolute or relative) or state object you'd like to check.
     * @param {object=} params A param object, e.g. `{sectionId: section.id}`, that you'd like
     * to test against the current active state.
     * @param {object=} options An options object.  The options are:
     *
     * - **`relative`** - {string|object} -  If `stateOrName` is a relative state name and `options.relative` is set, .is will
     * test relative to `options.relative` state (or name).
     *
     * @returns {boolean} Returns true if it is the state.
     */
    $state.is = function is(stateOrName, params, options) {
      options = extend({ relative: $state.$current }, options || {});
      var state = findState(stateOrName, options.relative);
      if (!isDefined(state)) { return undefined; }
      if ($state.$current !== state) { return false; }
      return !params || objectKeys(params).reduce(function(acc, key) {
        var paramDef = state.params[key];
        return acc && !paramDef || paramDef.type.equals($stateParams[key], params[key]);
      }, true);
    };
    /**
     * @ngdoc function
     * @name ui.router.state.$state#includes
     * @methodOf ui.router.state.$state
     *
     * @description
     * A method to determine if the current active state is equal to or is the child of the
     * state stateName. If any params are passed then they will be tested for a match as well.
     * Not all the parameters need to be passed, just the ones you'd like to test for equality.
     *
     * @example
     * Partial and relative names
     * <pre>
     * $state.$current.name = 'contacts.details.item';
     *
     * // Using partial names
     * $state.includes("contacts"); // returns true
     * $state.includes("contacts.details"); // returns true
     * $state.includes("contacts.details.item"); // returns true
     * $state.includes("contacts.list"); // returns false
     * $state.includes("about"); // returns false
     *
     * // Using relative names (. and ^), typically from a template
     * // E.g. from the 'contacts.details' template
     * <div ng-class="{highlighted: $state.includes('.item')}">Item</div>
     * </pre>
     *
     * Basic globbing patterns
     * <pre>
     * $state.$current.name = 'contacts.details.item.url';
     *
     * $state.includes("*.details.*.*"); // returns true
     * $state.includes("*.details.**"); // returns true
     * $state.includes("**.item.**"); // returns true
     * $state.includes("*.details.item.url"); // returns true
     * $state.includes("*.details.*.url"); // returns true
     * $state.includes("*.details.*"); // returns false
     * $state.includes("item.**"); // returns false
     * </pre>
     *
     * @param {string} stateOrName A partial name, relative name, or glob pattern
     * to be searched for within the current state name.
     * @param {object=} params A param object, e.g. `{sectionId: section.id}`,
     * that you'd like to test against the current active state.
     * @param {object=} options An options object.  The options are:
     *
     * - **`relative`** - {string|object=} -  If `stateOrName` is a relative state reference and `options.relative` is set,
     * .includes will test relative to `options.relative` state (or name).
     *
     * @returns {boolean} Returns true if it does include the state
     */
    $state.includes = function includes(stateOrName, params, options) {
      options = extend({ relative: $state.$current }, options || {});
      if (isString(stateOrName) && isGlob(stateOrName)) {
        if (!doesStateMatchGlob(stateOrName)) {
          return false;
        }
        stateOrName = $state.$current.name;
      }
      var state = findState(stateOrName, options.relative);
      if (!isDefined(state)) { return undefined; }
      if (!isDefined($state.$current.includes[state.name])) { return false; }
      if (!params) { return true; }
      var keys = objectKeys(params);
      for (var i = 0; i < keys.length; i++) {
        var key = keys[i], paramDef = state.params[key];
        if (paramDef && !paramDef.type.equals($stateParams[key], params[key])) {
          return false;
        }
      }
      return objectKeys(params).reduce(function(acc, key) {
        var paramDef = state.params[key];
        return acc && !paramDef || paramDef.type.equals($stateParams[key], params[key]);
      }, true);
    };
    /**
     * @ngdoc function
     * @name ui.router.state.$state#href
     * @methodOf ui.router.state.$state
     *
     * @description
     * A url generation method that returns the compiled url for the given state populated with the given params.
     *
     * @example
     * <pre>
     * expect($state.href("about.person", { person: "bob" })).toEqual("/about/bob");
     * </pre>
     *
     * @param {string|object} stateOrName The state name or state object you'd like to generate a url from.
     * @param {object=} params An object of parameter values to fill the state's required parameters.
     * @param {object=} options Options object. The options are:
     *
     * - **`lossy`** - {boolean=true} -  If true, and if there is no url associated with the state provided in the
     *    first parameter, then the constructed href url will be built from the first navigable ancestor (aka
     *    ancestor with a valid url).
     * - **`inherit`** - {boolean=true}, If `true` will inherit url parameters from current url.
     * - **`relative`** - {object=$state.$current}, When transitioning with relative path (e.g '^'),
     *    defines which state to be relative from.
     * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. "http://www.example.com/fullurl".
     *
     * @returns {string} compiled state url
     */
    $state.href = function href(stateOrName, params, options) {
      options = extend({
        lossy:    true,
        inherit:  true,
        absolute: false,
        relative: $state.$current
      }, options || {});
      var state = findState(stateOrName, options.relative);
      if (!isDefined(state)) return null;
      if (options.inherit) params = inheritParams($stateParams, params || {}, $state.$current, state);
      var nav = (state && options.lossy) ? state.navigable : state;
      if (!nav || nav.url === undefined || nav.url === null) {
        return null;
      }
      return $urlRouter.href(nav.url, filterByKeys(state.params.$$keys().concat('#'), params || {}), {
        absolute: options.absolute
      });
    };
    /**
     * @ngdoc function
     * @name ui.router.state.$state#get
     * @methodOf ui.router.state.$state
     *
     * @description
     * Returns the state configuration object for any specific state or all states.
     *
     * @param {string|object=} stateOrName (absolute or relative) If provided, will only get the config for
     * the requested state. If not provided, returns an array of ALL state configs.
     * @param {string|object=} context When stateOrName is a relative state reference, the state will be retrieved relative to context.
     * @returns {Object|Array} State configuration object or array of all objects.
     */
    $state.get = function (stateOrName, context) {
      if (arguments.length === 0) return map(objectKeys(states), function(name) { return states[name].self; });
      var state = findState(stateOrName, context || $state.$current);
      return (state && state.self) ? state.self : null;
    };
    function resolveState(state, params, paramsAreFiltered, inherited, dst, options) {
      // Make a restricted $stateParams with only the parameters that apply to this state if
      // necessary. In addition to being available to the controller and onEnter/onExit callbacks,
      // we also need $stateParams to be available for any $injector calls we make during the
      // dependency resolution process.
      var $stateParams = (paramsAreFiltered) ? params : filterByKeys(state.params.$$keys(), params);
      var locals = { $stateParams: $stateParams };
      // Resolve 'global' dependencies for the state, i.e. those not specific to a view.
      // We're also including $stateParams in this; that way the parameters are restricted
      // to the set that should be visible to the state, and are independent of when we update
      // the global $state and $stateParams values.
      dst.resolve = $resolve.resolve(state.resolve, locals, dst.resolve, state);
      var promises = [dst.resolve.then(function (globals) {
        dst.globals = globals;
      })];
      if (inherited) promises.push(inherited);
      function resolveViews() {
        var viewsPromises = [];
        // Resolve template and dependencies for all views.
        forEach(state.views, function (view, name) {
          var injectables = (view.resolve && view.resolve !== state.resolve ? view.resolve : {});
          injectables.$template = [ function () {
            return $view.load(name, { view: view, locals: dst.globals, params: $stateParams, notify: options.notify }) || '';
          }];
          viewsPromises.push($resolve.resolve(injectables, dst.globals, dst.resolve, state).then(function (result) {
            // References to the controller (only instantiated at link time)
            if (isFunction(view.controllerProvider) || isArray(view.controllerProvider)) {
              var injectLocals = angular.extend({}, injectables, dst.globals);
              result.$$controller = $injector.invoke(view.controllerProvider, null, injectLocals);
            } else {
              result.$$controller = view.controller;
            }
            // Provide access to the state itself for internal use
            result.$$state = state;
            result.$$controllerAs = view.controllerAs;
            result.$$resolveAs = view.resolveAs;
            dst[name] = result;
          }));
        });
        return $q.all(viewsPromises).then(function(){
          return dst.globals;
        });
      }
      // Wait for all the promises and then return the activation object
      return $q.all(promises).then(resolveViews).then(function (values) {
        return dst;
      });
    }
    return $state;
  }
  function shouldSkipReload(to, toParams, from, fromParams, locals, options) {
    // Return true if there are no differences in non-search (path/object) params, false if there are differences
    function nonSearchParamsEqual(fromAndToState, fromParams, toParams) {
      // Identify whether all the parameters that differ between `fromParams` and `toParams` were search params.
      function notSearchParam(key) {
        return fromAndToState.params[key].location != "search";
      }
      var nonQueryParamKeys = fromAndToState.params.$$keys().filter(notSearchParam);
      var nonQueryParams = pick.apply({}, [fromAndToState.params].concat(nonQueryParamKeys));
      var nonQueryParamSet = new $$UMFP.ParamSet(nonQueryParams);
      return nonQueryParamSet.$$equals(fromParams, toParams);
    }
    // If reload was not explicitly requested
    // and we're transitioning to the same state we're already in
    // and    the locals didn't change
    //     or they changed in a way that doesn't merit reloading
    //        (reloadOnParams:false, or reloadOnSearch.false and only search params changed)
    // Then return true.
    if (!options.reload && to === from &&
      (locals === from.locals || (to.self.reloadOnSearch === false && nonSearchParamsEqual(from, fromParams, toParams)))) {
      return true;
    }
  }
}
angular.module('ui.router.state')
  .factory('$stateParams', function () { return {}; })
  .constant("$state.runtime", { autoinject: true })
  .provider('$state', $StateProvider)
  // Inject $state to initialize when entering runtime. #2574
  .run(['$injector', function ($injector) {
    // Allow tests (stateSpec.js) to turn this off by defining this constant
    if ($injector.get("$state.runtime").autoinject) {
      $injector.get('$state');
    }
  }]);
src/main/webapp/bower_components/angular-ui-router/src/stateDirectives.js
New file
@@ -0,0 +1,412 @@
function parseStateRef(ref, current) {
  var preparsed = ref.match(/^\s*({[^}]*})\s*$/), parsed;
  if (preparsed) ref = current + '(' + preparsed[1] + ')';
  parsed = ref.replace(/\n/g, " ").match(/^([^(]+?)\s*(\((.*)\))?$/);
  if (!parsed || parsed.length !== 4) throw new Error("Invalid state ref '" + ref + "'");
  return { state: parsed[1], paramExpr: parsed[3] || null };
}
function stateContext(el) {
  var stateData = el.parent().inheritedData('$uiView');
  if (stateData && stateData.state && stateData.state.name) {
    return stateData.state;
  }
}
function getTypeInfo(el) {
  // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute.
  var isSvg = Object.prototype.toString.call(el.prop('href')) === '[object SVGAnimatedString]';
  var isForm = el[0].nodeName === "FORM";
  return {
    attr: isForm ? "action" : (isSvg ? 'xlink:href' : 'href'),
    isAnchor: el.prop("tagName").toUpperCase() === "A",
    clickable: !isForm
  };
}
function clickHook(el, $state, $timeout, type, current) {
  return function(e) {
    var button = e.which || e.button, target = current();
    if (!(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || el.attr('target'))) {
      // HACK: This is to allow ng-clicks to be processed before the transition is initiated:
      var transition = $timeout(function() {
        $state.go(target.state, target.params, target.options);
      });
      e.preventDefault();
      // if the state has no URL, ignore one preventDefault from the <a> directive.
      var ignorePreventDefaultCount = type.isAnchor && !target.href ? 1: 0;
      e.preventDefault = function() {
        if (ignorePreventDefaultCount-- <= 0) $timeout.cancel(transition);
      };
    }
  };
}
function defaultOpts(el, $state) {
  return { relative: stateContext(el) || $state.$current, inherit: true };
}
/**
 * @ngdoc directive
 * @name ui.router.state.directive:ui-sref
 *
 * @requires ui.router.state.$state
 * @requires $timeout
 *
 * @restrict A
 *
 * @description
 * A directive that binds a link (`<a>` tag) to a state. If the state has an associated
 * URL, the directive will automatically generate & update the `href` attribute via
 * the {@link ui.router.state.$state#methods_href $state.href()} method. Clicking
 * the link will trigger a state transition with optional parameters.
 *
 * Also middle-clicking, right-clicking, and ctrl-clicking on the link will be
 * handled natively by the browser.
 *
 * You can also use relative state paths within ui-sref, just like the relative
 * paths passed to `$state.go()`. You just need to be aware that the path is relative
 * to the state that the link lives in, in other words the state that loaded the
 * template containing the link.
 *
 * You can specify options to pass to {@link ui.router.state.$state#methods_go $state.go()}
 * using the `ui-sref-opts` attribute. Options are restricted to `location`, `inherit`,
 * and `reload`.
 *
 * @example
 * Here's an example of how you'd use ui-sref and how it would compile. If you have the
 * following template:
 * <pre>
 * <a ui-sref="home">Home</a> | <a ui-sref="about">About</a> | <a ui-sref="{page: 2}">Next page</a>
 *
 * <ul>
 *     <li ng-repeat="contact in contacts">
 *         <a ui-sref="contacts.detail({ id: contact.id })">{{ contact.name }}</a>
 *     </li>
 * </ul>
 * </pre>
 *
 * Then the compiled html would be (assuming Html5Mode is off and current state is contacts):
 * <pre>
 * <a href="#/home" ui-sref="home">Home</a> | <a href="#/about" ui-sref="about">About</a> | <a href="#/contacts?page=2" ui-sref="{page: 2}">Next page</a>
 *
 * <ul>
 *     <li ng-repeat="contact in contacts">
 *         <a href="#/contacts/1" ui-sref="contacts.detail({ id: contact.id })">Joe</a>
 *     </li>
 *     <li ng-repeat="contact in contacts">
 *         <a href="#/contacts/2" ui-sref="contacts.detail({ id: contact.id })">Alice</a>
 *     </li>
 *     <li ng-repeat="contact in contacts">
 *         <a href="#/contacts/3" ui-sref="contacts.detail({ id: contact.id })">Bob</a>
 *     </li>
 * </ul>
 *
 * <a ui-sref="home" ui-sref-opts="{reload: true}">Home</a>
 * </pre>
 *
 * @param {string} ui-sref 'stateName' can be any valid absolute or relative state
 * @param {Object} ui-sref-opts options to pass to {@link ui.router.state.$state#methods_go $state.go()}
 */
$StateRefDirective.$inject = ['$state', '$timeout'];
function $StateRefDirective($state, $timeout) {
  return {
    restrict: 'A',
    require: ['?^uiSrefActive', '?^uiSrefActiveEq'],
    link: function(scope, element, attrs, uiSrefActive) {
      var ref    = parseStateRef(attrs.uiSref, $state.current.name);
      var def    = { state: ref.state, href: null, params: null };
      var type   = getTypeInfo(element);
      var active = uiSrefActive[1] || uiSrefActive[0];
      var unlinkInfoFn = null;
      var hookFn;
      def.options = extend(defaultOpts(element, $state), attrs.uiSrefOpts ? scope.$eval(attrs.uiSrefOpts) : {});
      var update = function(val) {
        if (val) def.params = angular.copy(val);
        def.href = $state.href(ref.state, def.params, def.options);
        if (unlinkInfoFn) unlinkInfoFn();
        if (active) unlinkInfoFn = active.$$addStateInfo(ref.state, def.params);
        if (def.href !== null) attrs.$set(type.attr, def.href);
      };
      if (ref.paramExpr) {
        scope.$watch(ref.paramExpr, function(val) { if (val !== def.params) update(val); }, true);
        def.params = angular.copy(scope.$eval(ref.paramExpr));
      }
      update();
      if (!type.clickable) return;
      hookFn = clickHook(element, $state, $timeout, type, function() { return def; });
      element[element.on ? 'on' : 'bind']("click", hookFn);
      scope.$on('$destroy', function() {
        element[element.off ? 'off' : 'unbind']("click", hookFn);
      });
    }
  };
}
/**
 * @ngdoc directive
 * @name ui.router.state.directive:ui-state
 *
 * @requires ui.router.state.uiSref
 *
 * @restrict A
 *
 * @description
 * Much like ui-sref, but will accept named $scope properties to evaluate for a state definition,
 * params and override options.
 *
 * @param {string} ui-state 'stateName' can be any valid absolute or relative state
 * @param {Object} ui-state-params params to pass to {@link ui.router.state.$state#methods_href $state.href()}
 * @param {Object} ui-state-opts options to pass to {@link ui.router.state.$state#methods_go $state.go()}
 */
$StateRefDynamicDirective.$inject = ['$state', '$timeout'];
function $StateRefDynamicDirective($state, $timeout) {
  return {
    restrict: 'A',
    require: ['?^uiSrefActive', '?^uiSrefActiveEq'],
    link: function(scope, element, attrs, uiSrefActive) {
      var type   = getTypeInfo(element);
      var active = uiSrefActive[1] || uiSrefActive[0];
      var group  = [attrs.uiState, attrs.uiStateParams || null, attrs.uiStateOpts || null];
      var watch  = '[' + group.map(function(val) { return val || 'null'; }).join(', ') + ']';
      var def    = { state: null, params: null, options: null, href: null };
      var unlinkInfoFn = null;
      var hookFn;
      function runStateRefLink (group) {
        def.state = group[0]; def.params = group[1]; def.options = group[2];
        def.href = $state.href(def.state, def.params, def.options);
        if (unlinkInfoFn) unlinkInfoFn();
        if (active) unlinkInfoFn = active.$$addStateInfo(def.state, def.params);
        if (def.href) attrs.$set(type.attr, def.href);
      }
      scope.$watch(watch, runStateRefLink, true);
      runStateRefLink(scope.$eval(watch));
      if (!type.clickable) return;
      hookFn = clickHook(element, $state, $timeout, type, function() { return def; });
      element[element.on ? 'on' : 'bind']("click", hookFn);
      scope.$on('$destroy', function() {
        element[element.off ? 'off' : 'unbind']("click", hookFn);
      });
    }
  };
}
/**
 * @ngdoc directive
 * @name ui.router.state.directive:ui-sref-active
 *
 * @requires ui.router.state.$state
 * @requires ui.router.state.$stateParams
 * @requires $interpolate
 *
 * @restrict A
 *
 * @description
 * A directive working alongside ui-sref to add classes to an element when the
 * related ui-sref directive's state is active, and removing them when it is inactive.
 * The primary use-case is to simplify the special appearance of navigation menus
 * relying on `ui-sref`, by having the "active" state's menu button appear different,
 * distinguishing it from the inactive menu items.
 *
 * ui-sref-active can live on the same element as ui-sref or on a parent element. The first
 * ui-sref-active found at the same level or above the ui-sref will be used.
 *
 * Will activate when the ui-sref's target state or any child state is active. If you
 * need to activate only when the ui-sref target state is active and *not* any of
 * it's children, then you will use
 * {@link ui.router.state.directive:ui-sref-active-eq ui-sref-active-eq}
 *
 * @example
 * Given the following template:
 * <pre>
 * <ul>
 *   <li ui-sref-active="active" class="item">
 *     <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
 *   </li>
 * </ul>
 * </pre>
 *
 *
 * When the app state is "app.user" (or any children states), and contains the state parameter "user" with value "bilbobaggins",
 * the resulting HTML will appear as (note the 'active' class):
 * <pre>
 * <ul>
 *   <li ui-sref-active="active" class="item active">
 *     <a ui-sref="app.user({user: 'bilbobaggins'})" href="/users/bilbobaggins">@bilbobaggins</a>
 *   </li>
 * </ul>
 * </pre>
 *
 * The class name is interpolated **once** during the directives link time (any further changes to the
 * interpolated value are ignored).
 *
 * Multiple classes may be specified in a space-separated format:
 * <pre>
 * <ul>
 *   <li ui-sref-active='class1 class2 class3'>
 *     <a ui-sref="app.user">link</a>
 *   </li>
 * </ul>
 * </pre>
 *
 * It is also possible to pass ui-sref-active an expression that evaluates
 * to an object hash, whose keys represent active class names and whose
 * values represent the respective state names/globs.
 * ui-sref-active will match if the current active state **includes** any of
 * the specified state names/globs, even the abstract ones.
 *
 * @Example
 * Given the following template, with "admin" being an abstract state:
 * <pre>
 * <div ui-sref-active="{'active': 'admin.*'}">
 *   <a ui-sref-active="active" ui-sref="admin.roles">Roles</a>
 * </div>
 * </pre>
 *
 * When the current state is "admin.roles" the "active" class will be applied
 * to both the <div> and <a> elements. It is important to note that the state
 * names/globs passed to ui-sref-active shadow the state provided by ui-sref.
 */
/**
 * @ngdoc directive
 * @name ui.router.state.directive:ui-sref-active-eq
 *
 * @requires ui.router.state.$state
 * @requires ui.router.state.$stateParams
 * @requires $interpolate
 *
 * @restrict A
 *
 * @description
 * The same as {@link ui.router.state.directive:ui-sref-active ui-sref-active} but will only activate
 * when the exact target state used in the `ui-sref` is active; no child states.
 *
 */
$StateRefActiveDirective.$inject = ['$state', '$stateParams', '$interpolate'];
function $StateRefActiveDirective($state, $stateParams, $interpolate) {
  return  {
    restrict: "A",
    controller: ['$scope', '$element', '$attrs', '$timeout', function ($scope, $element, $attrs, $timeout) {
      var states = [], activeClasses = {}, activeEqClass, uiSrefActive;
      // There probably isn't much point in $observing this
      // uiSrefActive and uiSrefActiveEq share the same directive object with some
      // slight difference in logic routing
      activeEqClass = $interpolate($attrs.uiSrefActiveEq || '', false)($scope);
      try {
        uiSrefActive = $scope.$eval($attrs.uiSrefActive);
      } catch (e) {
        // Do nothing. uiSrefActive is not a valid expression.
        // Fall back to using $interpolate below
      }
      uiSrefActive = uiSrefActive || $interpolate($attrs.uiSrefActive || '', false)($scope);
      if (isObject(uiSrefActive)) {
        forEach(uiSrefActive, function(stateOrName, activeClass) {
          if (isString(stateOrName)) {
            var ref = parseStateRef(stateOrName, $state.current.name);
            addState(ref.state, $scope.$eval(ref.paramExpr), activeClass);
          }
        });
      }
      // Allow uiSref to communicate with uiSrefActive[Equals]
      this.$$addStateInfo = function (newState, newParams) {
        // we already got an explicit state provided by ui-sref-active, so we
        // shadow the one that comes from ui-sref
        if (isObject(uiSrefActive) && states.length > 0) {
          return;
        }
        var deregister = addState(newState, newParams, uiSrefActive);
        update();
        return deregister;
      };
      $scope.$on('$stateChangeSuccess', update);
      function addState(stateName, stateParams, activeClass) {
        var state = $state.get(stateName, stateContext($element));
        var stateHash = createStateHash(stateName, stateParams);
        var stateInfo = {
          state: state || { name: stateName },
          params: stateParams,
          hash: stateHash
        };
        states.push(stateInfo);
        activeClasses[stateHash] = activeClass;
        return function removeState() {
          var idx = states.indexOf(stateInfo);
          if (idx !== -1) states.splice(idx, 1);
        };
      }
      /**
       * @param {string} state
       * @param {Object|string} [params]
       * @return {string}
       */
      function createStateHash(state, params) {
        if (!isString(state)) {
          throw new Error('state should be a string');
        }
        if (isObject(params)) {
          return state + toJson(params);
        }
        params = $scope.$eval(params);
        if (isObject(params)) {
          return state + toJson(params);
        }
        return state;
      }
      // Update route state
      function update() {
        for (var i = 0; i < states.length; i++) {
          if (anyMatch(states[i].state, states[i].params)) {
            addClass($element, activeClasses[states[i].hash]);
          } else {
            removeClass($element, activeClasses[states[i].hash]);
          }
          if (exactMatch(states[i].state, states[i].params)) {
            addClass($element, activeEqClass);
          } else {
            removeClass($element, activeEqClass);
          }
        }
      }
      function addClass(el, className) { $timeout(function () { el.addClass(className); }); }
      function removeClass(el, className) { el.removeClass(className); }
      function anyMatch(state, params) { return $state.includes(state.name, params); }
      function exactMatch(state, params) { return $state.is(state.name, params); }
      update();
    }]
  };
}
angular.module('ui.router.state')
  .directive('uiSref', $StateRefDirective)
  .directive('uiSrefActive', $StateRefActiveDirective)
  .directive('uiSrefActiveEq', $StateRefActiveDirective)
  .directive('uiState', $StateRefDynamicDirective);
src/main/webapp/bower_components/angular-ui-router/src/stateFilters.js
New file
@@ -0,0 +1,39 @@
/**
 * @ngdoc filter
 * @name ui.router.state.filter:isState
 *
 * @requires ui.router.state.$state
 *
 * @description
 * Translates to {@link ui.router.state.$state#methods_is $state.is("stateName")}.
 */
$IsStateFilter.$inject = ['$state'];
function $IsStateFilter($state) {
  var isFilter = function (state, params) {
    return $state.is(state, params);
  };
  isFilter.$stateful = true;
  return isFilter;
}
/**
 * @ngdoc filter
 * @name ui.router.state.filter:includedByState
 *
 * @requires ui.router.state.$state
 *
 * @description
 * Translates to {@link ui.router.state.$state#methods_includes $state.includes('fullOrPartialStateName')}.
 */
$IncludedByStateFilter.$inject = ['$state'];
function $IncludedByStateFilter($state) {
  var includesFilter = function (state, params, options) {
    return $state.includes(state, params, options);
  };
  includesFilter.$stateful = true;
  return  includesFilter;
}
angular.module('ui.router.state')
  .filter('isState', $IsStateFilter)
  .filter('includedByState', $IncludedByStateFilter);
src/main/webapp/bower_components/angular-ui-router/src/templateFactory.js
New file
@@ -0,0 +1,166 @@
/**
 * @ngdoc object
 * @name ui.router.util.$templateFactoryProvider
 *
 * @description
 * Provider for $templateFactory. Manages which template-loading mechanism to
 * use, and will default to the most recent one ($templateRequest on Angular
 * versions starting from 1.3, $http otherwise).
 */
function TemplateFactoryProvider() {
  var shouldUnsafelyUseHttp = angular.version.minor < 3;
  /**
   * @ngdoc function
   * @name ui.router.util.$templateFactoryProvider#shouldUnsafelyUseHttp
   * @methodOf ui.router.util.$templateFactoryProvider
   *
   * @description
   * Forces $templateFactory to use $http instead of $templateRequest. This
   * might cause XSS, as $http doesn't enforce the regular security checks for
   * templates that have been introduced in Angular 1.3. Note that setting this
   * to false on Angular older than 1.3.x will crash, as the $templateRequest
   * service (and the security checks) are not implemented on these versions.
   *
   * See the $sce documentation, section
   * <a href="https://docs.angularjs.org/api/ng/service/$sce#impact-on-loading-templates">
   * Impact on loading templates</a> for more details about this mechanism.
   *
   * @param {boolean} value
   */
  this.shouldUnsafelyUseHttp = function(value) {
    shouldUnsafelyUseHttp = !!value;
  };
  /**
   * @ngdoc object
   * @name ui.router.util.$templateFactory
   *
   * @requires $http
   * @requires $templateCache
   * @requires $injector
   *
   * @description
   * Service. Manages loading of templates.
   */
  this.$get = ['$http', '$templateCache', '$injector', function($http, $templateCache, $injector){
    return new TemplateFactory($http, $templateCache, $injector, shouldUnsafelyUseHttp);}];
}
/**
 * @ngdoc object
 * @name ui.router.util.$templateFactory
 *
 * @requires $http
 * @requires $templateCache
 * @requires $injector
 *
 * @description
 * Service. Manages loading of templates.
 */
function TemplateFactory($http, $templateCache, $injector, shouldUnsafelyUseHttp) {
  /**
   * @ngdoc function
   * @name ui.router.util.$templateFactory#fromConfig
   * @methodOf ui.router.util.$templateFactory
   *
   * @description
   * Creates a template from a configuration object.
   *
   * @param {object} config Configuration object for which to load a template.
   * The following properties are search in the specified order, and the first one
   * that is defined is used to create the template:
   *
   * @param {string|object} config.template html string template or function to
   * load via {@link ui.router.util.$templateFactory#fromString fromString}.
   * @param {string|object} config.templateUrl url to load or a function returning
   * the url to load via {@link ui.router.util.$templateFactory#fromUrl fromUrl}.
   * @param {Function} config.templateProvider function to invoke via
   * {@link ui.router.util.$templateFactory#fromProvider fromProvider}.
   * @param {object} params  Parameters to pass to the template function.
   * @param {object} locals Locals to pass to `invoke` if the template is loaded
   * via a `templateProvider`. Defaults to `{ params: params }`.
   *
   * @return {string|object}  The template html as a string, or a promise for
   * that string,or `null` if no template is configured.
   */
  this.fromConfig = function (config, params, locals) {
    return (
      isDefined(config.template) ? this.fromString(config.template, params) :
      isDefined(config.templateUrl) ? this.fromUrl(config.templateUrl, params) :
      isDefined(config.templateProvider) ? this.fromProvider(config.templateProvider, params, locals) :
      null
    );
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$templateFactory#fromString
   * @methodOf ui.router.util.$templateFactory
   *
   * @description
   * Creates a template from a string or a function returning a string.
   *
   * @param {string|object} template html template as a string or function that
   * returns an html template as a string.
   * @param {object} params Parameters to pass to the template function.
   *
   * @return {string|object} The template html as a string, or a promise for that
   * string.
   */
  this.fromString = function (template, params) {
    return isFunction(template) ? template(params) : template;
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$templateFactory#fromUrl
   * @methodOf ui.router.util.$templateFactory
   *
   * @description
   * Loads a template from the a URL via `$http` and `$templateCache`.
   *
   * @param {string|Function} url url of the template to load, or a function
   * that returns a url.
   * @param {Object} params Parameters to pass to the url function.
   * @return {string|Promise.<string>} The template html as a string, or a promise
   * for that string.
   */
  this.fromUrl = function (url, params) {
    if (isFunction(url)) url = url(params);
    if (url == null) return null;
    else {
      if(!shouldUnsafelyUseHttp) {
        return $injector.get('$templateRequest')(url);
      } else {
        return $http
          .get(url, { cache: $templateCache, headers: { Accept: 'text/html' }})
          .then(function(response) { return response.data; });
      }
    }
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$templateFactory#fromProvider
   * @methodOf ui.router.util.$templateFactory
   *
   * @description
   * Creates a template by invoking an injectable provider function.
   *
   * @param {Function} provider Function to invoke via `$injector.invoke`
   * @param {Object} params Parameters for the template.
   * @param {Object} locals Locals to pass to `invoke`. Defaults to
   * `{ params: params }`.
   * @return {string|Promise.<string>} The template html as a string, or a promise
   * for that string.
   */
  this.fromProvider = function (provider, params, locals) {
    return $injector.invoke(provider, null, locals || { params: params });
  };
}
angular.module('ui.router.util').provider('$templateFactory', TemplateFactoryProvider);
src/main/webapp/bower_components/angular-ui-router/src/urlMatcherFactory.js
New file
@@ -0,0 +1,1081 @@
var $$UMFP; // reference to $UrlMatcherFactoryProvider
/**
 * @ngdoc object
 * @name ui.router.util.type:UrlMatcher
 *
 * @description
 * Matches URLs against patterns and extracts named parameters from the path or the search
 * part of the URL. A URL pattern consists of a path pattern, optionally followed by '?' and a list
 * of search parameters. Multiple search parameter names are separated by '&'. Search parameters
 * do not influence whether or not a URL is matched, but their values are passed through into
 * the matched parameters returned by {@link ui.router.util.type:UrlMatcher#methods_exec exec}.
 *
 * Path parameter placeholders can be specified using simple colon/catch-all syntax or curly brace
 * syntax, which optionally allows a regular expression for the parameter to be specified:
 *
 * * `':'` name - colon placeholder
 * * `'*'` name - catch-all placeholder
 * * `'{' name '}'` - curly placeholder
 * * `'{' name ':' regexp|type '}'` - curly placeholder with regexp or type name. Should the
 *   regexp itself contain curly braces, they must be in matched pairs or escaped with a backslash.
 *
 * Parameter names may contain only word characters (latin letters, digits, and underscore) and
 * must be unique within the pattern (across both path and search parameters). For colon
 * placeholders or curly placeholders without an explicit regexp, a path parameter matches any
 * number of characters other than '/'. For catch-all placeholders the path parameter matches
 * any number of characters.
 *
 * Examples:
 *
 * * `'/hello/'` - Matches only if the path is exactly '/hello/'. There is no special treatment for
 *   trailing slashes, and patterns have to match the entire path, not just a prefix.
 * * `'/user/:id'` - Matches '/user/bob' or '/user/1234!!!' or even '/user/' but not '/user' or
 *   '/user/bob/details'. The second path segment will be captured as the parameter 'id'.
 * * `'/user/{id}'` - Same as the previous example, but using curly brace syntax.
 * * `'/user/{id:[^/]*}'` - Same as the previous example.
 * * `'/user/{id:[0-9a-fA-F]{1,8}}'` - Similar to the previous example, but only matches if the id
 *   parameter consists of 1 to 8 hex digits.
 * * `'/files/{path:.*}'` - Matches any URL starting with '/files/' and captures the rest of the
 *   path into the parameter 'path'.
 * * `'/files/*path'` - ditto.
 * * `'/calendar/{start:date}'` - Matches "/calendar/2014-11-12" (because the pattern defined
 *   in the built-in  `date` Type matches `2014-11-12`) and provides a Date object in $stateParams.start
 *
 * @param {string} pattern  The pattern to compile into a matcher.
 * @param {Object} config  A configuration object hash:
 * @param {Object=} parentMatcher Used to concatenate the pattern/config onto
 *   an existing UrlMatcher
 *
 * * `caseInsensitive` - `true` if URL matching should be case insensitive, otherwise `false`, the default value (for backward compatibility) is `false`.
 * * `strict` - `false` if matching against a URL with a trailing slash should be treated as equivalent to a URL without a trailing slash, the default value is `true`.
 *
 * @property {string} prefix  A static prefix of this pattern. The matcher guarantees that any
 *   URL matching this matcher (i.e. any string for which {@link ui.router.util.type:UrlMatcher#methods_exec exec()} returns
 *   non-null) will start with this prefix.
 *
 * @property {string} source  The pattern that was passed into the constructor
 *
 * @property {string} sourcePath  The path portion of the source property
 *
 * @property {string} sourceSearch  The search portion of the source property
 *
 * @property {string} regex  The constructed regex that will be used to match against the url when
 *   it is time to determine which url will match.
 *
 * @returns {Object}  New `UrlMatcher` object
 */
function UrlMatcher(pattern, config, parentMatcher) {
  config = extend({ params: {} }, isObject(config) ? config : {});
  // Find all placeholders and create a compiled pattern, using either classic or curly syntax:
  //   '*' name
  //   ':' name
  //   '{' name '}'
  //   '{' name ':' regexp '}'
  // The regular expression is somewhat complicated due to the need to allow curly braces
  // inside the regular expression. The placeholder regexp breaks down as follows:
  //    ([:*])([\w\[\]]+)              - classic placeholder ($1 / $2) (search version has - for snake-case)
  //    \{([\w\[\]]+)(?:\:\s*( ... ))?\}  - curly brace placeholder ($3) with optional regexp/type ... ($4) (search version has - for snake-case
  //    (?: ... | ... | ... )+         - the regexp consists of any number of atoms, an atom being either
  //    [^{}\\]+                       - anything other than curly braces or backslash
  //    \\.                            - a backslash escape
  //    \{(?:[^{}\\]+|\\.)*\}          - a matched set of curly braces containing other atoms
  var placeholder       = /([:*])([\w\[\]]+)|\{([\w\[\]]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
      searchPlaceholder = /([:]?)([\w\[\].-]+)|\{([\w\[\].-]+)(?:\:\s*((?:[^{}\\]+|\\.|\{(?:[^{}\\]+|\\.)*\})+))?\}/g,
      compiled = '^', last = 0, m,
      segments = this.segments = [],
      parentParams = parentMatcher ? parentMatcher.params : {},
      params = this.params = parentMatcher ? parentMatcher.params.$$new() : new $$UMFP.ParamSet(),
      paramNames = [];
  function addParameter(id, type, config, location) {
    paramNames.push(id);
    if (parentParams[id]) return parentParams[id];
    if (!/^\w+([-.]+\w+)*(?:\[\])?$/.test(id)) throw new Error("Invalid parameter name '" + id + "' in pattern '" + pattern + "'");
    if (params[id]) throw new Error("Duplicate parameter name '" + id + "' in pattern '" + pattern + "'");
    params[id] = new $$UMFP.Param(id, type, config, location);
    return params[id];
  }
  function quoteRegExp(string, pattern, squash, optional) {
    var surroundPattern = ['',''], result = string.replace(/[\\\[\]\^$*+?.()|{}]/g, "\\$&");
    if (!pattern) return result;
    switch(squash) {
      case false: surroundPattern = ['(', ')' + (optional ? "?" : "")]; break;
      case true:
        result = result.replace(/\/$/, '');
        surroundPattern = ['(?:\/(', ')|\/)?'];
      break;
      default:    surroundPattern = ['(' + squash + "|", ')?']; break;
    }
    return result + surroundPattern[0] + pattern + surroundPattern[1];
  }
  this.source = pattern;
  // Split into static segments separated by path parameter placeholders.
  // The number of segments is always 1 more than the number of parameters.
  function matchDetails(m, isSearch) {
    var id, regexp, segment, type, cfg, arrayMode;
    id          = m[2] || m[3]; // IE[78] returns '' for unmatched groups instead of null
    cfg         = config.params[id];
    segment     = pattern.substring(last, m.index);
    regexp      = isSearch ? m[4] : m[4] || (m[1] == '*' ? '.*' : null);
    if (regexp) {
      type      = $$UMFP.type(regexp) || inherit($$UMFP.type("string"), { pattern: new RegExp(regexp, config.caseInsensitive ? 'i' : undefined) });
    }
    return {
      id: id, regexp: regexp, segment: segment, type: type, cfg: cfg
    };
  }
  var p, param, segment;
  while ((m = placeholder.exec(pattern))) {
    p = matchDetails(m, false);
    if (p.segment.indexOf('?') >= 0) break; // we're into the search part
    param = addParameter(p.id, p.type, p.cfg, "path");
    compiled += quoteRegExp(p.segment, param.type.pattern.source, param.squash, param.isOptional);
    segments.push(p.segment);
    last = placeholder.lastIndex;
  }
  segment = pattern.substring(last);
  // Find any search parameter names and remove them from the last segment
  var i = segment.indexOf('?');
  if (i >= 0) {
    var search = this.sourceSearch = segment.substring(i);
    segment = segment.substring(0, i);
    this.sourcePath = pattern.substring(0, last + i);
    if (search.length > 0) {
      last = 0;
      while ((m = searchPlaceholder.exec(search))) {
        p = matchDetails(m, true);
        param = addParameter(p.id, p.type, p.cfg, "search");
        last = placeholder.lastIndex;
        // check if ?&
      }
    }
  } else {
    this.sourcePath = pattern;
    this.sourceSearch = '';
  }
  compiled += quoteRegExp(segment) + (config.strict === false ? '\/?' : '') + '$';
  segments.push(segment);
  this.regexp = new RegExp(compiled, config.caseInsensitive ? 'i' : undefined);
  this.prefix = segments[0];
  this.$$paramNames = paramNames;
}
/**
 * @ngdoc function
 * @name ui.router.util.type:UrlMatcher#concat
 * @methodOf ui.router.util.type:UrlMatcher
 *
 * @description
 * Returns a new matcher for a pattern constructed by appending the path part and adding the
 * search parameters of the specified pattern to this pattern. The current pattern is not
 * modified. This can be understood as creating a pattern for URLs that are relative to (or
 * suffixes of) the current pattern.
 *
 * @example
 * The following two matchers are equivalent:
 * <pre>
 * new UrlMatcher('/user/{id}?q').concat('/details?date');
 * new UrlMatcher('/user/{id}/details?q&date');
 * </pre>
 *
 * @param {string} pattern  The pattern to append.
 * @param {Object} config  An object hash of the configuration for the matcher.
 * @returns {UrlMatcher}  A matcher for the concatenated pattern.
 */
UrlMatcher.prototype.concat = function (pattern, config) {
  // Because order of search parameters is irrelevant, we can add our own search
  // parameters to the end of the new pattern. Parse the new pattern by itself
  // and then join the bits together, but it's much easier to do this on a string level.
  var defaultConfig = {
    caseInsensitive: $$UMFP.caseInsensitive(),
    strict: $$UMFP.strictMode(),
    squash: $$UMFP.defaultSquashPolicy()
  };
  return new UrlMatcher(this.sourcePath + pattern + this.sourceSearch, extend(defaultConfig, config), this);
};
UrlMatcher.prototype.toString = function () {
  return this.source;
};
/**
 * @ngdoc function
 * @name ui.router.util.type:UrlMatcher#exec
 * @methodOf ui.router.util.type:UrlMatcher
 *
 * @description
 * Tests the specified path against this matcher, and returns an object containing the captured
 * parameter values, or null if the path does not match. The returned object contains the values
 * of any search parameters that are mentioned in the pattern, but their value may be null if
 * they are not present in `searchParams`. This means that search parameters are always treated
 * as optional.
 *
 * @example
 * <pre>
 * new UrlMatcher('/user/{id}?q&r').exec('/user/bob', {
 *   x: '1', q: 'hello'
 * });
 * // returns { id: 'bob', q: 'hello', r: null }
 * </pre>
 *
 * @param {string} path  The URL path to match, e.g. `$location.path()`.
 * @param {Object} searchParams  URL search parameters, e.g. `$location.search()`.
 * @returns {Object}  The captured parameter values.
 */
UrlMatcher.prototype.exec = function (path, searchParams) {
  var m = this.regexp.exec(path);
  if (!m) return null;
  searchParams = searchParams || {};
  var paramNames = this.parameters(), nTotal = paramNames.length,
    nPath = this.segments.length - 1,
    values = {}, i, j, cfg, paramName;
  if (nPath !== m.length - 1) throw new Error("Unbalanced capture group in route '" + this.source + "'");
  function decodePathArray(string) {
    function reverseString(str) { return str.split("").reverse().join(""); }
    function unquoteDashes(str) { return str.replace(/\\-/g, "-"); }
    var split = reverseString(string).split(/-(?!\\)/);
    var allReversed = map(split, reverseString);
    return map(allReversed, unquoteDashes).reverse();
  }
  var param, paramVal;
  for (i = 0; i < nPath; i++) {
    paramName = paramNames[i];
    param = this.params[paramName];
    paramVal = m[i+1];
    // if the param value matches a pre-replace pair, replace the value before decoding.
    for (j = 0; j < param.replace.length; j++) {
      if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;
    }
    if (paramVal && param.array === true) paramVal = decodePathArray(paramVal);
    if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);
    values[paramName] = param.value(paramVal);
  }
  for (/**/; i < nTotal; i++) {
    paramName = paramNames[i];
    values[paramName] = this.params[paramName].value(searchParams[paramName]);
    param = this.params[paramName];
    paramVal = searchParams[paramName];
    for (j = 0; j < param.replace.length; j++) {
      if (param.replace[j].from === paramVal) paramVal = param.replace[j].to;
    }
    if (isDefined(paramVal)) paramVal = param.type.decode(paramVal);
    values[paramName] = param.value(paramVal);
  }
  return values;
};
/**
 * @ngdoc function
 * @name ui.router.util.type:UrlMatcher#parameters
 * @methodOf ui.router.util.type:UrlMatcher
 *
 * @description
 * Returns the names of all path and search parameters of this pattern in an unspecified order.
 *
 * @returns {Array.<string>}  An array of parameter names. Must be treated as read-only. If the
 *    pattern has no parameters, an empty array is returned.
 */
UrlMatcher.prototype.parameters = function (param) {
  if (!isDefined(param)) return this.$$paramNames;
  return this.params[param] || null;
};
/**
 * @ngdoc function
 * @name ui.router.util.type:UrlMatcher#validates
 * @methodOf ui.router.util.type:UrlMatcher
 *
 * @description
 * Checks an object hash of parameters to validate their correctness according to the parameter
 * types of this `UrlMatcher`.
 *
 * @param {Object} params The object hash of parameters to validate.
 * @returns {boolean} Returns `true` if `params` validates, otherwise `false`.
 */
UrlMatcher.prototype.validates = function (params) {
  return this.params.$$validates(params);
};
/**
 * @ngdoc function
 * @name ui.router.util.type:UrlMatcher#format
 * @methodOf ui.router.util.type:UrlMatcher
 *
 * @description
 * Creates a URL that matches this pattern by substituting the specified values
 * for the path and search parameters. Null values for path parameters are
 * treated as empty strings.
 *
 * @example
 * <pre>
 * new UrlMatcher('/user/{id}?q').format({ id:'bob', q:'yes' });
 * // returns '/user/bob?q=yes'
 * </pre>
 *
 * @param {Object} values  the values to substitute for the parameters in this pattern.
 * @returns {string}  the formatted URL (path and optionally search part).
 */
UrlMatcher.prototype.format = function (values) {
  values = values || {};
  var segments = this.segments, params = this.parameters(), paramset = this.params;
  if (!this.validates(values)) return null;
  var i, search = false, nPath = segments.length - 1, nTotal = params.length, result = segments[0];
  function encodeDashes(str) { // Replace dashes with encoded "\-"
    return encodeURIComponent(str).replace(/-/g, function(c) { return '%5C%' + c.charCodeAt(0).toString(16).toUpperCase(); });
  }
  for (i = 0; i < nTotal; i++) {
    var isPathParam = i < nPath;
    var name = params[i], param = paramset[name], value = param.value(values[name]);
    var isDefaultValue = param.isOptional && param.type.equals(param.value(), value);
    var squash = isDefaultValue ? param.squash : false;
    var encoded = param.type.encode(value);
    if (isPathParam) {
      var nextSegment = segments[i + 1];
      var isFinalPathParam = i + 1 === nPath;
      if (squash === false) {
        if (encoded != null) {
          if (isArray(encoded)) {
            result += map(encoded, encodeDashes).join("-");
          } else {
            result += encodeURIComponent(encoded);
          }
        }
        result += nextSegment;
      } else if (squash === true) {
        var capture = result.match(/\/$/) ? /\/?(.*)/ : /(.*)/;
        result += nextSegment.match(capture)[1];
      } else if (isString(squash)) {
        result += squash + nextSegment;
      }
      if (isFinalPathParam && param.squash === true && result.slice(-1) === '/') result = result.slice(0, -1);
    } else {
      if (encoded == null || (isDefaultValue && squash !== false)) continue;
      if (!isArray(encoded)) encoded = [ encoded ];
      if (encoded.length === 0) continue;
      encoded = map(encoded, encodeURIComponent).join('&' + name + '=');
      result += (search ? '&' : '?') + (name + '=' + encoded);
      search = true;
    }
  }
  return result;
};
/**
 * @ngdoc object
 * @name ui.router.util.type:Type
 *
 * @description
 * Implements an interface to define custom parameter types that can be decoded from and encoded to
 * string parameters matched in a URL. Used by {@link ui.router.util.type:UrlMatcher `UrlMatcher`}
 * objects when matching or formatting URLs, or comparing or validating parameter values.
 *
 * See {@link ui.router.util.$urlMatcherFactory#methods_type `$urlMatcherFactory#type()`} for more
 * information on registering custom types.
 *
 * @param {Object} config  A configuration object which contains the custom type definition.  The object's
 *        properties will override the default methods and/or pattern in `Type`'s public interface.
 * @example
 * <pre>
 * {
 *   decode: function(val) { return parseInt(val, 10); },
 *   encode: function(val) { return val && val.toString(); },
 *   equals: function(a, b) { return this.is(a) && a === b; },
 *   is: function(val) { return angular.isNumber(val) isFinite(val) && val % 1 === 0; },
 *   pattern: /\d+/
 * }
 * </pre>
 *
 * @property {RegExp} pattern The regular expression pattern used to match values of this type when
 *           coming from a substring of a URL.
 *
 * @returns {Object}  Returns a new `Type` object.
 */
function Type(config) {
  extend(this, config);
}
/**
 * @ngdoc function
 * @name ui.router.util.type:Type#is
 * @methodOf ui.router.util.type:Type
 *
 * @description
 * Detects whether a value is of a particular type. Accepts a native (decoded) value
 * and determines whether it matches the current `Type` object.
 *
 * @param {*} val  The value to check.
 * @param {string} key  Optional. If the type check is happening in the context of a specific
 *        {@link ui.router.util.type:UrlMatcher `UrlMatcher`} object, this is the name of the
 *        parameter in which `val` is stored. Can be used for meta-programming of `Type` objects.
 * @returns {Boolean}  Returns `true` if the value matches the type, otherwise `false`.
 */
Type.prototype.is = function(val, key) {
  return true;
};
/**
 * @ngdoc function
 * @name ui.router.util.type:Type#encode
 * @methodOf ui.router.util.type:Type
 *
 * @description
 * Encodes a custom/native type value to a string that can be embedded in a URL. Note that the
 * return value does *not* need to be URL-safe (i.e. passed through `encodeURIComponent()`), it
 * only needs to be a representation of `val` that has been coerced to a string.
 *
 * @param {*} val  The value to encode.
 * @param {string} key  The name of the parameter in which `val` is stored. Can be used for
 *        meta-programming of `Type` objects.
 * @returns {string}  Returns a string representation of `val` that can be encoded in a URL.
 */
Type.prototype.encode = function(val, key) {
  return val;
};
/**
 * @ngdoc function
 * @name ui.router.util.type:Type#decode
 * @methodOf ui.router.util.type:Type
 *
 * @description
 * Converts a parameter value (from URL string or transition param) to a custom/native value.
 *
 * @param {string} val  The URL parameter value to decode.
 * @param {string} key  The name of the parameter in which `val` is stored. Can be used for
 *        meta-programming of `Type` objects.
 * @returns {*}  Returns a custom representation of the URL parameter value.
 */
Type.prototype.decode = function(val, key) {
  return val;
};
/**
 * @ngdoc function
 * @name ui.router.util.type:Type#equals
 * @methodOf ui.router.util.type:Type
 *
 * @description
 * Determines whether two decoded values are equivalent.
 *
 * @param {*} a  A value to compare against.
 * @param {*} b  A value to compare against.
 * @returns {Boolean}  Returns `true` if the values are equivalent/equal, otherwise `false`.
 */
Type.prototype.equals = function(a, b) {
  return a == b;
};
Type.prototype.$subPattern = function() {
  var sub = this.pattern.toString();
  return sub.substr(1, sub.length - 2);
};
Type.prototype.pattern = /.*/;
Type.prototype.toString = function() { return "{Type:" + this.name + "}"; };
/** Given an encoded string, or a decoded object, returns a decoded object */
Type.prototype.$normalize = function(val) {
  return this.is(val) ? val : this.decode(val);
};
/*
 * Wraps an existing custom Type as an array of Type, depending on 'mode'.
 * e.g.:
 * - urlmatcher pattern "/path?{queryParam[]:int}"
 * - url: "/path?queryParam=1&queryParam=2
 * - $stateParams.queryParam will be [1, 2]
 * if `mode` is "auto", then
 * - url: "/path?queryParam=1 will create $stateParams.queryParam: 1
 * - url: "/path?queryParam=1&queryParam=2 will create $stateParams.queryParam: [1, 2]
 */
Type.prototype.$asArray = function(mode, isSearch) {
  if (!mode) return this;
  if (mode === "auto" && !isSearch) throw new Error("'auto' array mode is for query parameters only");
  function ArrayType(type, mode) {
    function bindTo(type, callbackName) {
      return function() {
        return type[callbackName].apply(type, arguments);
      };
    }
    // Wrap non-array value as array
    function arrayWrap(val) { return isArray(val) ? val : (isDefined(val) ? [ val ] : []); }
    // Unwrap array value for "auto" mode. Return undefined for empty array.
    function arrayUnwrap(val) {
      switch(val.length) {
        case 0: return undefined;
        case 1: return mode === "auto" ? val[0] : val;
        default: return val;
      }
    }
    function falsey(val) { return !val; }
    // Wraps type (.is/.encode/.decode) functions to operate on each value of an array
    function arrayHandler(callback, allTruthyMode) {
      return function handleArray(val) {
        if (isArray(val) && val.length === 0) return val;
        val = arrayWrap(val);
        var result = map(val, callback);
        if (allTruthyMode === true)
          return filter(result, falsey).length === 0;
        return arrayUnwrap(result);
      };
    }
    // Wraps type (.equals) functions to operate on each value of an array
    function arrayEqualsHandler(callback) {
      return function handleArray(val1, val2) {
        var left = arrayWrap(val1), right = arrayWrap(val2);
        if (left.length !== right.length) return false;
        for (var i = 0; i < left.length; i++) {
          if (!callback(left[i], right[i])) return false;
        }
        return true;
      };
    }
    this.encode = arrayHandler(bindTo(type, 'encode'));
    this.decode = arrayHandler(bindTo(type, 'decode'));
    this.is     = arrayHandler(bindTo(type, 'is'), true);
    this.equals = arrayEqualsHandler(bindTo(type, 'equals'));
    this.pattern = type.pattern;
    this.$normalize = arrayHandler(bindTo(type, '$normalize'));
    this.name = type.name;
    this.$arrayMode = mode;
  }
  return new ArrayType(this, mode);
};
/**
 * @ngdoc object
 * @name ui.router.util.$urlMatcherFactory
 *
 * @description
 * Factory for {@link ui.router.util.type:UrlMatcher `UrlMatcher`} instances. The factory
 * is also available to providers under the name `$urlMatcherFactoryProvider`.
 */
function $UrlMatcherFactory() {
  $$UMFP = this;
  var isCaseInsensitive = false, isStrictMode = true, defaultSquashPolicy = false;
  // Use tildes to pre-encode slashes.
  // If the slashes are simply URLEncoded, the browser can choose to pre-decode them,
  // and bidirectional encoding/decoding fails.
  // Tilde was chosen because it's not a RFC 3986 section 2.2 Reserved Character
  function valToString(val) { return val != null ? val.toString().replace(/(~|\/)/g, function (m) { return {'~':'~~', '/':'~2F'}[m]; }) : val; }
  function valFromString(val) { return val != null ? val.toString().replace(/(~~|~2F)/g, function (m) { return {'~~':'~', '~2F':'/'}[m]; }) : val; }
  var $types = {}, enqueue = true, typeQueue = [], injector, defaultTypes = {
    "string": {
      encode: valToString,
      decode: valFromString,
      // TODO: in 1.0, make string .is() return false if value is undefined/null by default.
      // In 0.2.x, string params are optional by default for backwards compat
      is: function(val) { return val == null || !isDefined(val) || typeof val === "string"; },
      pattern: /[^/]*/
    },
    "int": {
      encode: valToString,
      decode: function(val) { return parseInt(val, 10); },
      is: function(val) { return val !== undefined && val !== null && this.decode(val.toString()) === val; },
      pattern: /\d+/
    },
    "bool": {
      encode: function(val) { return val ? 1 : 0; },
      decode: function(val) { return parseInt(val, 10) !== 0; },
      is: function(val) { return val === true || val === false; },
      pattern: /0|1/
    },
    "date": {
      encode: function (val) {
        if (!this.is(val))
          return undefined;
        return [ val.getFullYear(),
          ('0' + (val.getMonth() + 1)).slice(-2),
          ('0' + val.getDate()).slice(-2)
        ].join("-");
      },
      decode: function (val) {
        if (this.is(val)) return val;
        var match = this.capture.exec(val);
        return match ? new Date(match[1], match[2] - 1, match[3]) : undefined;
      },
      is: function(val) { return val instanceof Date && !isNaN(val.valueOf()); },
      equals: function (a, b) { return this.is(a) && this.is(b) && a.toISOString() === b.toISOString(); },
      pattern: /[0-9]{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[1-2][0-9]|3[0-1])/,
      capture: /([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])/
    },
    "json": {
      encode: angular.toJson,
      decode: angular.fromJson,
      is: angular.isObject,
      equals: angular.equals,
      pattern: /[^/]*/
    },
    "any": { // does not encode/decode
      encode: angular.identity,
      decode: angular.identity,
      equals: angular.equals,
      pattern: /.*/
    }
  };
  function getDefaultConfig() {
    return {
      strict: isStrictMode,
      caseInsensitive: isCaseInsensitive
    };
  }
  function isInjectable(value) {
    return (isFunction(value) || (isArray(value) && isFunction(value[value.length - 1])));
  }
  /**
   * [Internal] Get the default value of a parameter, which may be an injectable function.
   */
  $UrlMatcherFactory.$$getDefaultValue = function(config) {
    if (!isInjectable(config.value)) return config.value;
    if (!injector) throw new Error("Injectable functions cannot be called at configuration time");
    return injector.invoke(config.value);
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$urlMatcherFactory#caseInsensitive
   * @methodOf ui.router.util.$urlMatcherFactory
   *
   * @description
   * Defines whether URL matching should be case sensitive (the default behavior), or not.
   *
   * @param {boolean} value `false` to match URL in a case sensitive manner; otherwise `true`;
   * @returns {boolean} the current value of caseInsensitive
   */
  this.caseInsensitive = function(value) {
    if (isDefined(value))
      isCaseInsensitive = value;
    return isCaseInsensitive;
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$urlMatcherFactory#strictMode
   * @methodOf ui.router.util.$urlMatcherFactory
   *
   * @description
   * Defines whether URLs should match trailing slashes, or not (the default behavior).
   *
   * @param {boolean=} value `false` to match trailing slashes in URLs, otherwise `true`.
   * @returns {boolean} the current value of strictMode
   */
  this.strictMode = function(value) {
    if (isDefined(value))
      isStrictMode = value;
    return isStrictMode;
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$urlMatcherFactory#defaultSquashPolicy
   * @methodOf ui.router.util.$urlMatcherFactory
   *
   * @description
   * Sets the default behavior when generating or matching URLs with default parameter values.
   *
   * @param {string} value A string that defines the default parameter URL squashing behavior.
   *    `nosquash`: When generating an href with a default parameter value, do not squash the parameter value from the URL
   *    `slash`: When generating an href with a default parameter value, squash (remove) the parameter value, and, if the
   *             parameter is surrounded by slashes, squash (remove) one slash from the URL
   *    any other string, e.g. "~": When generating an href with a default parameter value, squash (remove)
   *             the parameter value from the URL and replace it with this string.
   */
  this.defaultSquashPolicy = function(value) {
    if (!isDefined(value)) return defaultSquashPolicy;
    if (value !== true && value !== false && !isString(value))
      throw new Error("Invalid squash policy: " + value + ". Valid policies: false, true, arbitrary-string");
    defaultSquashPolicy = value;
    return value;
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$urlMatcherFactory#compile
   * @methodOf ui.router.util.$urlMatcherFactory
   *
   * @description
   * Creates a {@link ui.router.util.type:UrlMatcher `UrlMatcher`} for the specified pattern.
   *
   * @param {string} pattern  The URL pattern.
   * @param {Object} config  The config object hash.
   * @returns {UrlMatcher}  The UrlMatcher.
   */
  this.compile = function (pattern, config) {
    return new UrlMatcher(pattern, extend(getDefaultConfig(), config));
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$urlMatcherFactory#isMatcher
   * @methodOf ui.router.util.$urlMatcherFactory
   *
   * @description
   * Returns true if the specified object is a `UrlMatcher`, or false otherwise.
   *
   * @param {Object} object  The object to perform the type check against.
   * @returns {Boolean}  Returns `true` if the object matches the `UrlMatcher` interface, by
   *          implementing all the same methods.
   */
  this.isMatcher = function (o) {
    if (!isObject(o)) return false;
    var result = true;
    forEach(UrlMatcher.prototype, function(val, name) {
      if (isFunction(val)) {
        result = result && (isDefined(o[name]) && isFunction(o[name]));
      }
    });
    return result;
  };
  /**
   * @ngdoc function
   * @name ui.router.util.$urlMatcherFactory#type
   * @methodOf ui.router.util.$urlMatcherFactory
   *
   * @description
   * Registers a custom {@link ui.router.util.type:Type `Type`} object that can be used to
   * generate URLs with typed parameters.
   *
   * @param {string} name  The type name.
   * @param {Object|Function} definition   The type definition. See
   *        {@link ui.router.util.type:Type `Type`} for information on the values accepted.
   * @param {Object|Function} definitionFn (optional) A function that is injected before the app
   *        runtime starts.  The result of this function is merged into the existing `definition`.
   *        See {@link ui.router.util.type:Type `Type`} for information on the values accepted.
   *
   * @returns {Object}  Returns `$urlMatcherFactoryProvider`.
   *
   * @example
   * This is a simple example of a custom type that encodes and decodes items from an
   * array, using the array index as the URL-encoded value:
   *
   * <pre>
   * var list = ['John', 'Paul', 'George', 'Ringo'];
   *
   * $urlMatcherFactoryProvider.type('listItem', {
   *   encode: function(item) {
   *     // Represent the list item in the URL using its corresponding index
   *     return list.indexOf(item);
   *   },
   *   decode: function(item) {
   *     // Look up the list item by index
   *     return list[parseInt(item, 10)];
   *   },
   *   is: function(item) {
   *     // Ensure the item is valid by checking to see that it appears
   *     // in the list
   *     return list.indexOf(item) > -1;
   *   }
   * });
   *
   * $stateProvider.state('list', {
   *   url: "/list/{item:listItem}",
   *   controller: function($scope, $stateParams) {
   *     console.log($stateParams.item);
   *   }
   * });
   *
   * // ...
   *
   * // Changes URL to '/list/3', logs "Ringo" to the console
   * $state.go('list', { item: "Ringo" });
   * </pre>
   *
   * This is a more complex example of a type that relies on dependency injection to
   * interact with services, and uses the parameter name from the URL to infer how to
   * handle encoding and decoding parameter values:
   *
   * <pre>
   * // Defines a custom type that gets a value from a service,
   * // where each service gets different types of values from
   * // a backend API:
   * $urlMatcherFactoryProvider.type('dbObject', {}, function(Users, Posts) {
   *
   *   // Matches up services to URL parameter names
   *   var services = {
   *     user: Users,
   *     post: Posts
   *   };
   *
   *   return {
   *     encode: function(object) {
   *       // Represent the object in the URL using its unique ID
   *       return object.id;
   *     },
   *     decode: function(value, key) {
   *       // Look up the object by ID, using the parameter
   *       // name (key) to call the correct service
   *       return services[key].findById(value);
   *     },
   *     is: function(object, key) {
   *       // Check that object is a valid dbObject
   *       return angular.isObject(object) && object.id && services[key];
   *     }
   *     equals: function(a, b) {
   *       // Check the equality of decoded objects by comparing
   *       // their unique IDs
   *       return a.id === b.id;
   *     }
   *   };
   * });
   *
   * // In a config() block, you can then attach URLs with
   * // type-annotated parameters:
   * $stateProvider.state('users', {
   *   url: "/users",
   *   // ...
   * }).state('users.item', {
   *   url: "/{user:dbObject}",
   *   controller: function($scope, $stateParams) {
   *     // $stateParams.user will now be an object returned from
   *     // the Users service
   *   },
   *   // ...
   * });
   * </pre>
   */
  this.type = function (name, definition, definitionFn) {
    if (!isDefined(definition)) return $types[name];
    if ($types.hasOwnProperty(name)) throw new Error("A type named '" + name + "' has already been defined.");
    $types[name] = new Type(extend({ name: name }, definition));
    if (definitionFn) {
      typeQueue.push({ name: name, def: definitionFn });
      if (!enqueue) flushTypeQueue();
    }
    return this;
  };
  // `flushTypeQueue()` waits until `$urlMatcherFactory` is injected before invoking the queued `definitionFn`s
  function flushTypeQueue() {
    while(typeQueue.length) {
      var type = typeQueue.shift();
      if (type.pattern) throw new Error("You cannot override a type's .pattern at runtime.");
      angular.extend($types[type.name], injector.invoke(type.def));
    }
  }
  // Register default types. Store them in the prototype of $types.
  forEach(defaultTypes, function(type, name) { $types[name] = new Type(extend({name: name}, type)); });
  $types = inherit($types, {});
  /* No need to document $get, since it returns this */
  this.$get = ['$injector', function ($injector) {
    injector = $injector;
    enqueue = false;
    flushTypeQueue();
    forEach(defaultTypes, function(type, name) {
      if (!$types[name]) $types[name] = new Type(type);
    });
    return this;
  }];
  this.Param = function Param(id, type, config, location) {
    var self = this;
    config = unwrapShorthand(config);
    type = getType(config, type, location);
    var arrayMode = getArrayMode();
    type = arrayMode ? type.$asArray(arrayMode, location === "search") : type;
    if (type.name === "string" && !arrayMode && location === "path" && config.value === undefined)
      config.value = ""; // for 0.2.x; in 0.3.0+ do not automatically default to ""
    var isOptional = config.value !== undefined;
    var squash = getSquashPolicy(config, isOptional);
    var replace = getReplace(config, arrayMode, isOptional, squash);
    function unwrapShorthand(config) {
      var keys = isObject(config) ? objectKeys(config) : [];
      var isShorthand = indexOf(keys, "value") === -1 && indexOf(keys, "type") === -1 &&
                        indexOf(keys, "squash") === -1 && indexOf(keys, "array") === -1;
      if (isShorthand) config = { value: config };
      config.$$fn = isInjectable(config.value) ? config.value : function () { return config.value; };
      return config;
    }
    function getType(config, urlType, location) {
      if (config.type && urlType) throw new Error("Param '"+id+"' has two type configurations.");
      if (urlType) return urlType;
      if (!config.type) return (location === "config" ? $types.any : $types.string);
      if (angular.isString(config.type))
        return $types[config.type];
      if (config.type instanceof Type)
        return config.type;
      return new Type(config.type);
    }
    // array config: param name (param[]) overrides default settings.  explicit config overrides param name.
    function getArrayMode() {
      var arrayDefaults = { array: (location === "search" ? "auto" : false) };
      var arrayParamNomenclature = id.match(/\[\]$/) ? { array: true } : {};
      return extend(arrayDefaults, arrayParamNomenclature, config).array;
    }
    /**
     * returns false, true, or the squash value to indicate the "default parameter url squash policy".
     */
    function getSquashPolicy(config, isOptional) {
      var squash = config.squash;
      if (!isOptional || squash === false) return false;
      if (!isDefined(squash) || squash == null) return defaultSquashPolicy;
      if (squash === true || isString(squash)) return squash;
      throw new Error("Invalid squash policy: '" + squash + "'. Valid policies: false, true, or arbitrary string");
    }
    function getReplace(config, arrayMode, isOptional, squash) {
      var replace, configuredKeys, defaultPolicy = [
        { from: "",   to: (isOptional || arrayMode ? undefined : "") },
        { from: null, to: (isOptional || arrayMode ? undefined : "") }
      ];
      replace = isArray(config.replace) ? config.replace : [];
      if (isString(squash))
        replace.push({ from: squash, to: undefined });
      configuredKeys = map(replace, function(item) { return item.from; } );
      return filter(defaultPolicy, function(item) { return indexOf(configuredKeys, item.from) === -1; }).concat(replace);
    }
    /**
     * [Internal] Get the default value of a parameter, which may be an injectable function.
     */
    function $$getDefaultValue() {
      if (!injector) throw new Error("Injectable functions cannot be called at configuration time");
      var defaultValue = injector.invoke(config.$$fn);
      if (defaultValue !== null && defaultValue !== undefined && !self.type.is(defaultValue))
        throw new Error("Default value (" + defaultValue + ") for parameter '" + self.id + "' is not an instance of Type (" + self.type.name + ")");
      return defaultValue;
    }
    /**
     * [Internal] Gets the decoded representation of a value if the value is defined, otherwise, returns the
     * default value, which may be the result of an injectable function.
     */
    function $value(value) {
      function hasReplaceVal(val) { return function(obj) { return obj.from === val; }; }
      function $replace(value) {
        var replacement = map(filter(self.replace, hasReplaceVal(value)), function(obj) { return obj.to; });
        return replacement.length ? replacement[0] : value;
      }
      value = $replace(value);
      return !isDefined(value) ? $$getDefaultValue() : self.type.$normalize(value);
    }
    function toString() { return "{Param:" + id + " " + type + " squash: '" + squash + "' optional: " + isOptional + "}"; }
    extend(this, {
      id: id,
      type: type,
      location: location,
      array: arrayMode,
      squash: squash,
      replace: replace,
      isOptional: isOptional,
      value: $value,
      dynamic: undefined,
      config: config,
      toString: toString
    });
  };
  function ParamSet(params) {
    extend(this, params || {});
  }
  ParamSet.prototype = {
    $$new: function() {
      return inherit(this, extend(new ParamSet(), { $$parent: this}));
    },
    $$keys: function () {
      var keys = [], chain = [], parent = this,
        ignore = objectKeys(ParamSet.prototype);
      while (parent) { chain.push(parent); parent = parent.$$parent; }
      chain.reverse();
      forEach(chain, function(paramset) {
        forEach(objectKeys(paramset), function(key) {
            if (indexOf(keys, key) === -1 && indexOf(ignore, key) === -1) keys.push(key);
        });
      });
      return keys;
    },
    $$values: function(paramValues) {
      var values = {}, self = this;
      forEach(self.$$keys(), function(key) {
        values[key] = self[key].value(paramValues && paramValues[key]);
      });
      return values;
    },
    $$equals: function(paramValues1, paramValues2) {
      var equal = true, self = this;
      forEach(self.$$keys(), function(key) {
        var left = paramValues1 && paramValues1[key], right = paramValues2 && paramValues2[key];
        if (!self[key].type.equals(left, right)) equal = false;
      });
      return equal;
    },
    $$validates: function $$validate(paramValues) {
      var keys = this.$$keys(), i, param, rawVal, normalized, encoded;
      for (i = 0; i < keys.length; i++) {
        param = this[keys[i]];
        rawVal = paramValues[keys[i]];
        if ((rawVal === undefined || rawVal === null) && param.isOptional)
          break; // There was no parameter value, but the param is optional
        normalized = param.type.$normalize(rawVal);
        if (!param.type.is(normalized))
          return false; // The value was not of the correct Type, and could not be decoded to the correct Type
        encoded = param.type.encode(normalized);
        if (angular.isString(encoded) && !param.type.pattern.exec(encoded))
          return false; // The value was of the correct type, but when encoded, did not match the Type's regexp
      }
      return true;
    },
    $$parent: undefined
  };
  this.ParamSet = ParamSet;
}
// Register as a provider so it's available to other providers
angular.module('ui.router.util').provider('$urlMatcherFactory', $UrlMatcherFactory);
angular.module('ui.router.util').run(['$urlMatcherFactory', function($urlMatcherFactory) { }]);
src/main/webapp/bower_components/angular-ui-router/src/urlRouter.js
New file
@@ -0,0 +1,431 @@
/**
 * @ngdoc object
 * @name ui.router.router.$urlRouterProvider
 *
 * @requires ui.router.util.$urlMatcherFactoryProvider
 * @requires $locationProvider
 *
 * @description
 * `$urlRouterProvider` has the responsibility of watching `$location`.
 * When `$location` changes it runs through a list of rules one by one until a
 * match is found. `$urlRouterProvider` is used behind the scenes anytime you specify
 * a url in a state configuration. All urls are compiled into a UrlMatcher object.
 *
 * There are several methods on `$urlRouterProvider` that make it useful to use directly
 * in your module config.
 */
$UrlRouterProvider.$inject = ['$locationProvider', '$urlMatcherFactoryProvider'];
function $UrlRouterProvider(   $locationProvider,   $urlMatcherFactory) {
  var rules = [], otherwise = null, interceptDeferred = false, listener;
  // Returns a string that is a prefix of all strings matching the RegExp
  function regExpPrefix(re) {
    var prefix = /^\^((?:\\[^a-zA-Z0-9]|[^\\\[\]\^$*+?.()|{}]+)*)/.exec(re.source);
    return (prefix != null) ? prefix[1].replace(/\\(.)/g, "$1") : '';
  }
  // Interpolates matched values into a String.replace()-style pattern
  function interpolate(pattern, match) {
    return pattern.replace(/\$(\$|\d{1,2})/, function (m, what) {
      return match[what === '$' ? 0 : Number(what)];
    });
  }
  /**
   * @ngdoc function
   * @name ui.router.router.$urlRouterProvider#rule
   * @methodOf ui.router.router.$urlRouterProvider
   *
   * @description
   * Defines rules that are used by `$urlRouterProvider` to find matches for
   * specific URLs.
   *
   * @example
   * <pre>
   * var app = angular.module('app', ['ui.router.router']);
   *
   * app.config(function ($urlRouterProvider) {
   *   // Here's an example of how you might allow case insensitive urls
   *   $urlRouterProvider.rule(function ($injector, $location) {
   *     var path = $location.path(),
   *         normalized = path.toLowerCase();
   *
   *     if (path !== normalized) {
   *       return normalized;
   *     }
   *   });
   * });
   * </pre>
   *
   * @param {function} rule Handler function that takes `$injector` and `$location`
   * services as arguments. You can use them to return a valid path as a string.
   *
   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance
   */
  this.rule = function (rule) {
    if (!isFunction(rule)) throw new Error("'rule' must be a function");
    rules.push(rule);
    return this;
  };
  /**
   * @ngdoc object
   * @name ui.router.router.$urlRouterProvider#otherwise
   * @methodOf ui.router.router.$urlRouterProvider
   *
   * @description
   * Defines a path that is used when an invalid route is requested.
   *
   * @example
   * <pre>
   * var app = angular.module('app', ['ui.router.router']);
   *
   * app.config(function ($urlRouterProvider) {
   *   // if the path doesn't match any of the urls you configured
   *   // otherwise will take care of routing the user to the
   *   // specified url
   *   $urlRouterProvider.otherwise('/index');
   *
   *   // Example of using function rule as param
   *   $urlRouterProvider.otherwise(function ($injector, $location) {
   *     return '/a/valid/url';
   *   });
   * });
   * </pre>
   *
   * @param {string|function} rule The url path you want to redirect to or a function
   * rule that returns the url path. The function version is passed two params:
   * `$injector` and `$location` services, and must return a url string.
   *
   * @return {object} `$urlRouterProvider` - `$urlRouterProvider` instance
   */
  this.otherwise = function (rule) {
    if (isString(rule)) {
      var redirect = rule;
      rule = function () { return redirect; };
    }
    else if (!isFunction(rule)) throw new Error("'rule' must be a function");
    otherwise = rule;
    return this;
  };
  function handleIfMatch($injector, handler, match) {
    if (!match) return false;
    var result = $injector.invoke(handler, handler, { $match: match });
    return isDefined(result) ? result : true;
  }
  /**
   * @ngdoc function
   * @name ui.router.router.$urlRouterProvider#when
   * @methodOf ui.router.router.$urlRouterProvider
   *
   * @description
   * Registers a handler for a given url matching.
   *
   * If the handler is a string, it is
   * treated as a redirect, and is interpolated according to the syntax of match
   * (i.e. like `String.replace()` for `RegExp`, or like a `UrlMatcher` pattern otherwise).
   *
   * If the handler is a function, it is injectable. It gets invoked if `$location`
   * matches. You have the option of inject the match object as `$match`.
   *
   * The handler can return
   *
   * - **falsy** to indicate that the rule didn't match after all, then `$urlRouter`
   *   will continue trying to find another one that matches.
   * - **string** which is treated as a redirect and passed to `$location.url()`
   * - **void** or any **truthy** value tells `$urlRouter` that the url was handled.
   *
   * @example
   * <pre>
   * var app = angular.module('app', ['ui.router.router']);
   *
   * app.config(function ($urlRouterProvider) {
   *   $urlRouterProvider.when($state.url, function ($match, $stateParams) {
   *     if ($state.$current.navigable !== state ||
   *         !equalForKeys($match, $stateParams) {
   *      $state.transitionTo(state, $match, false);
   *     }
   *   });
   * });
   * </pre>
   *
   * @param {string|object} what The incoming path that you want to redirect.
   * @param {string|function} handler The path you want to redirect your user to.
   */
  this.when = function (what, handler) {
    var redirect, handlerIsString = isString(handler);
    if (isString(what)) what = $urlMatcherFactory.compile(what);
    if (!handlerIsString && !isFunction(handler) && !isArray(handler))
      throw new Error("invalid 'handler' in when()");
    var strategies = {
      matcher: function (what, handler) {
        if (handlerIsString) {
          redirect = $urlMatcherFactory.compile(handler);
          handler = ['$match', function ($match) { return redirect.format($match); }];
        }
        return extend(function ($injector, $location) {
          return handleIfMatch($injector, handler, what.exec($location.path(), $location.search()));
        }, {
          prefix: isString(what.prefix) ? what.prefix : ''
        });
      },
      regex: function (what, handler) {
        if (what.global || what.sticky) throw new Error("when() RegExp must not be global or sticky");
        if (handlerIsString) {
          redirect = handler;
          handler = ['$match', function ($match) { return interpolate(redirect, $match); }];
        }
        return extend(function ($injector, $location) {
          return handleIfMatch($injector, handler, what.exec($location.path()));
        }, {
          prefix: regExpPrefix(what)
        });
      }
    };
    var check = { matcher: $urlMatcherFactory.isMatcher(what), regex: what instanceof RegExp };
    for (var n in check) {
      if (check[n]) return this.rule(strategies[n](what, handler));
    }
    throw new Error("invalid 'what' in when()");
  };
  /**
   * @ngdoc function
   * @name ui.router.router.$urlRouterProvider#deferIntercept
   * @methodOf ui.router.router.$urlRouterProvider
   *
   * @description
   * Disables (or enables) deferring location change interception.
   *
   * If you wish to customize the behavior of syncing the URL (for example, if you wish to
   * defer a transition but maintain the current URL), call this method at configuration time.
   * Then, at run time, call `$urlRouter.listen()` after you have configured your own
   * `$locationChangeSuccess` event handler.
   *
   * @example
   * <pre>
   * var app = angular.module('app', ['ui.router.router']);
   *
   * app.config(function ($urlRouterProvider) {
   *
   *   // Prevent $urlRouter from automatically intercepting URL changes;
   *   // this allows you to configure custom behavior in between
   *   // location changes and route synchronization:
   *   $urlRouterProvider.deferIntercept();
   *
   * }).run(function ($rootScope, $urlRouter, UserService) {
   *
   *   $rootScope.$on('$locationChangeSuccess', function(e) {
   *     // UserService is an example service for managing user state
   *     if (UserService.isLoggedIn()) return;
   *
   *     // Prevent $urlRouter's default handler from firing
   *     e.preventDefault();
   *
   *     UserService.handleLogin().then(function() {
   *       // Once the user has logged in, sync the current URL
   *       // to the router:
   *       $urlRouter.sync();
   *     });
   *   });
   *
   *   // Configures $urlRouter's listener *after* your custom listener
   *   $urlRouter.listen();
   * });
   * </pre>
   *
   * @param {boolean} defer Indicates whether to defer location change interception. Passing
            no parameter is equivalent to `true`.
   */
  this.deferIntercept = function (defer) {
    if (defer === undefined) defer = true;
    interceptDeferred = defer;
  };
  /**
   * @ngdoc object
   * @name ui.router.router.$urlRouter
   *
   * @requires $location
   * @requires $rootScope
   * @requires $injector
   * @requires $browser
   *
   * @description
   *
   */
  this.$get = $get;
  $get.$inject = ['$location', '$rootScope', '$injector', '$browser', '$sniffer'];
  function $get(   $location,   $rootScope,   $injector,   $browser,   $sniffer) {
    var baseHref = $browser.baseHref(), location = $location.url(), lastPushedUrl;
    function appendBasePath(url, isHtml5, absolute) {
      if (baseHref === '/') return url;
      if (isHtml5) return baseHref.slice(0, -1) + url;
      if (absolute) return baseHref.slice(1) + url;
      return url;
    }
    // TODO: Optimize groups of rules with non-empty prefix into some sort of decision tree
    function update(evt) {
      if (evt && evt.defaultPrevented) return;
      var ignoreUpdate = lastPushedUrl && $location.url() === lastPushedUrl;
      lastPushedUrl = undefined;
      // TODO: Re-implement this in 1.0 for https://github.com/angular-ui/ui-router/issues/1573
      //if (ignoreUpdate) return true;
      function check(rule) {
        var handled = rule($injector, $location);
        if (!handled) return false;
        if (isString(handled)) $location.replace().url(handled);
        return true;
      }
      var n = rules.length, i;
      for (i = 0; i < n; i++) {
        if (check(rules[i])) return;
      }
      // always check otherwise last to allow dynamic updates to the set of rules
      if (otherwise) check(otherwise);
    }
    function listen() {
      listener = listener || $rootScope.$on('$locationChangeSuccess', update);
      return listener;
    }
    if (!interceptDeferred) listen();
    return {
      /**
       * @ngdoc function
       * @name ui.router.router.$urlRouter#sync
       * @methodOf ui.router.router.$urlRouter
       *
       * @description
       * Triggers an update; the same update that happens when the address bar url changes, aka `$locationChangeSuccess`.
       * This method is useful when you need to use `preventDefault()` on the `$locationChangeSuccess` event,
       * perform some custom logic (route protection, auth, config, redirection, etc) and then finally proceed
       * with the transition by calling `$urlRouter.sync()`.
       *
       * @example
       * <pre>
       * angular.module('app', ['ui.router'])
       *   .run(function($rootScope, $urlRouter) {
       *     $rootScope.$on('$locationChangeSuccess', function(evt) {
       *       // Halt state change from even starting
       *       evt.preventDefault();
       *       // Perform custom logic
       *       var meetsRequirement = ...
       *       // Continue with the update and state transition if logic allows
       *       if (meetsRequirement) $urlRouter.sync();
       *     });
       * });
       * </pre>
       */
      sync: function() {
        update();
      },
      listen: function() {
        return listen();
      },
      update: function(read) {
        if (read) {
          location = $location.url();
          return;
        }
        if ($location.url() === location) return;
        $location.url(location);
        $location.replace();
      },
      push: function(urlMatcher, params, options) {
         var url = urlMatcher.format(params || {});
        // Handle the special hash param, if needed
        if (url !== null && params && params['#']) {
            url += '#' + params['#'];
        }
        $location.url(url);
        lastPushedUrl = options && options.$$avoidResync ? $location.url() : undefined;
        if (options && options.replace) $location.replace();
      },
      /**
       * @ngdoc function
       * @name ui.router.router.$urlRouter#href
       * @methodOf ui.router.router.$urlRouter
       *
       * @description
       * A URL generation method that returns the compiled URL for a given
       * {@link ui.router.util.type:UrlMatcher `UrlMatcher`}, populated with the provided parameters.
       *
       * @example
       * <pre>
       * $bob = $urlRouter.href(new UrlMatcher("/about/:person"), {
       *   person: "bob"
       * });
       * // $bob == "/about/bob";
       * </pre>
       *
       * @param {UrlMatcher} urlMatcher The `UrlMatcher` object which is used as the template of the URL to generate.
       * @param {object=} params An object of parameter values to fill the matcher's required parameters.
       * @param {object=} options Options object. The options are:
       *
       * - **`absolute`** - {boolean=false},  If true will generate an absolute url, e.g. "http://www.example.com/fullurl".
       *
       * @returns {string} Returns the fully compiled URL, or `null` if `params` fail validation against `urlMatcher`
       */
      href: function(urlMatcher, params, options) {
        if (!urlMatcher.validates(params)) return null;
        var isHtml5 = $locationProvider.html5Mode();
        if (angular.isObject(isHtml5)) {
          isHtml5 = isHtml5.enabled;
        }
        isHtml5 = isHtml5 && $sniffer.history;
        var url = urlMatcher.format(params);
        options = options || {};
        if (!isHtml5 && url !== null) {
          url = "#" + $locationProvider.hashPrefix() + url;
        }
        // Handle special hash param, if needed
        if (url !== null && params && params['#']) {
          url += '#' + params['#'];
        }
        url = appendBasePath(url, isHtml5, options.absolute);
        if (!options.absolute || !url) {
          return url;
        }
        var slash = (!isHtml5 && url ? '/' : ''), port = $location.port();
        port = (port === 80 || port === 443 ? '' : ':' + port);
        return [$location.protocol(), '://', $location.host(), port, slash, url].join('');
      }
    };
  }
}
angular.module('ui.router.router').provider('$urlRouter', $UrlRouterProvider);
src/main/webapp/bower_components/angular-ui-router/src/view.js
New file
@@ -0,0 +1,45 @@
$ViewProvider.$inject = [];
function $ViewProvider() {
  this.$get = $get;
  /**
   * @ngdoc object
   * @name ui.router.state.$view
   *
   * @requires ui.router.util.$templateFactory
   * @requires $rootScope
   *
   * @description
   *
   */
  $get.$inject = ['$rootScope', '$templateFactory'];
  function $get(   $rootScope,   $templateFactory) {
    return {
      // $view.load('full.viewName', { template: ..., controller: ..., resolve: ..., async: false, params: ... })
      /**
       * @ngdoc function
       * @name ui.router.state.$view#load
       * @methodOf ui.router.state.$view
       *
       * @description
       *
       * @param {string} name name
       * @param {object} options option object.
       */
      load: function load(name, options) {
        var result, defaults = {
          template: null, controller: null, view: null, locals: null, notify: true, async: true, params: {}
        };
        options = extend(defaults, options);
        if (options.view) {
          result = $templateFactory.fromConfig(options.view, options.params, options.locals);
        }
        return result;
      }
    };
  }
}
angular.module('ui.router.state').provider('$view', $ViewProvider);
src/main/webapp/bower_components/angular-ui-router/src/viewDirective.js
New file
@@ -0,0 +1,366 @@
/**
 * @ngdoc directive
 * @name ui.router.state.directive:ui-view
 *
 * @requires ui.router.state.$state
 * @requires $compile
 * @requires $controller
 * @requires $injector
 * @requires ui.router.state.$uiViewScroll
 * @requires $document
 *
 * @restrict ECA
 *
 * @description
 * The ui-view directive tells $state where to place your templates.
 *
 * @param {string=} name A view name. The name should be unique amongst the other views in the
 * same state. You can have views of the same name that live in different states.
 *
 * @param {string=} autoscroll It allows you to set the scroll behavior of the browser window
 * when a view is populated. By default, $anchorScroll is overridden by ui-router's custom scroll
 * service, {@link ui.router.state.$uiViewScroll}. This custom service let's you
 * scroll ui-view elements into view when they are populated during a state activation.
 *
 * *Note: To revert back to old [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll)
 * functionality, call `$uiViewScrollProvider.useAnchorScroll()`.*
 *
 * @param {string=} onload Expression to evaluate whenever the view updates.
 *
 * @example
 * A view can be unnamed or named.
 * <pre>
 * <!-- Unnamed -->
 * <div ui-view></div>
 *
 * <!-- Named -->
 * <div ui-view="viewName"></div>
 * </pre>
 *
 * You can only have one unnamed view within any template (or root html). If you are only using a
 * single view and it is unnamed then you can populate it like so:
 * <pre>
 * <div ui-view></div>
 * $stateProvider.state("home", {
 *   template: "<h1>HELLO!</h1>"
 * })
 * </pre>
 *
 * The above is a convenient shortcut equivalent to specifying your view explicitly with the {@link ui.router.state.$stateProvider#methods_state `views`}
 * config property, by name, in this case an empty name:
 * <pre>
 * $stateProvider.state("home", {
 *   views: {
 *     "": {
 *       template: "<h1>HELLO!</h1>"
 *     }
 *   }
 * })
 * </pre>
 *
 * But typically you'll only use the views property if you name your view or have more than one view
 * in the same template. There's not really a compelling reason to name a view if its the only one,
 * but you could if you wanted, like so:
 * <pre>
 * <div ui-view="main"></div>
 * </pre>
 * <pre>
 * $stateProvider.state("home", {
 *   views: {
 *     "main": {
 *       template: "<h1>HELLO!</h1>"
 *     }
 *   }
 * })
 * </pre>
 *
 * Really though, you'll use views to set up multiple views:
 * <pre>
 * <div ui-view></div>
 * <div ui-view="chart"></div>
 * <div ui-view="data"></div>
 * </pre>
 *
 * <pre>
 * $stateProvider.state("home", {
 *   views: {
 *     "": {
 *       template: "<h1>HELLO!</h1>"
 *     },
 *     "chart": {
 *       template: "<chart_thing/>"
 *     },
 *     "data": {
 *       template: "<data_thing/>"
 *     }
 *   }
 * })
 * </pre>
 *
 * Examples for `autoscroll`:
 *
 * <pre>
 * <!-- If autoscroll present with no expression,
 *      then scroll ui-view into view -->
 * <ui-view autoscroll/>
 *
 * <!-- If autoscroll present with valid expression,
 *      then scroll ui-view into view if expression evaluates to true -->
 * <ui-view autoscroll='true'/>
 * <ui-view autoscroll='false'/>
 * <ui-view autoscroll='scopeVariable'/>
 * </pre>
 *
 * Resolve data:
 *
 * The resolved data from the state's `resolve` block is placed on the scope as `$resolve` (this
 * can be customized using [[ViewDeclaration.resolveAs]]).  This can be then accessed from the template.
 *
 * Note that when `controllerAs` is being used, `$resolve` is set on the controller instance *after* the
 * controller is instantiated.  The `$onInit()` hook can be used to perform initialization code which
 * depends on `$resolve` data.
 *
 * Example usage of $resolve in a view template
 * <pre>
 * $stateProvider.state('home', {
 *   template: '<my-component user="$resolve.user"></my-component>',
 *   resolve: {
 *     user: function(UserService) { return UserService.fetchUser(); }
 *   }
 * });
 * </pre>
 */
$ViewDirective.$inject = ['$state', '$injector', '$uiViewScroll', '$interpolate', '$q'];
function $ViewDirective(   $state,   $injector,   $uiViewScroll,   $interpolate,   $q) {
  function getService() {
    return ($injector.has) ? function(service) {
      return $injector.has(service) ? $injector.get(service) : null;
    } : function(service) {
      try {
        return $injector.get(service);
      } catch (e) {
        return null;
      }
    };
  }
  var service = getService(),
      $animator = service('$animator'),
      $animate = service('$animate');
  // Returns a set of DOM manipulation functions based on which Angular version
  // it should use
  function getRenderer(attrs, scope) {
    var statics = function() {
      return {
        enter: function (element, target, cb) { target.after(element); cb(); },
        leave: function (element, cb) { element.remove(); cb(); }
      };
    };
    if ($animate) {
      return {
        enter: function(element, target, cb) {
          if (angular.version.minor > 2) {
            $animate.enter(element, null, target).then(cb);
          } else {
            $animate.enter(element, null, target, cb);
          }
        },
        leave: function(element, cb) {
          if (angular.version.minor > 2) {
            $animate.leave(element).then(cb);
          } else {
            $animate.leave(element, cb);
          }
        }
      };
    }
    if ($animator) {
      var animate = $animator && $animator(scope, attrs);
      return {
        enter: function(element, target, cb) {animate.enter(element, null, target); cb(); },
        leave: function(element, cb) { animate.leave(element); cb(); }
      };
    }
    return statics();
  }
  var directive = {
    restrict: 'ECA',
    terminal: true,
    priority: 400,
    transclude: 'element',
    compile: function (tElement, tAttrs, $transclude) {
      return function (scope, $element, attrs) {
        var previousEl, currentEl, currentScope, latestLocals,
            onloadExp     = attrs.onload || '',
            autoScrollExp = attrs.autoscroll,
            renderer      = getRenderer(attrs, scope),
            inherited     = $element.inheritedData('$uiView');
        scope.$on('$stateChangeSuccess', function() {
          updateView(false);
        });
        updateView(true);
        function cleanupLastView() {
          if (previousEl) {
            previousEl.remove();
            previousEl = null;
          }
          if (currentScope) {
            currentScope.$destroy();
            currentScope = null;
          }
          if (currentEl) {
            var $uiViewData = currentEl.data('$uiViewAnim');
            renderer.leave(currentEl, function() {
              $uiViewData.$$animLeave.resolve();
              previousEl = null;
            });
            previousEl = currentEl;
            currentEl = null;
          }
        }
        function updateView(firstTime) {
          var newScope,
              name            = getUiViewName(scope, attrs, $element, $interpolate),
              previousLocals  = name && $state.$current && $state.$current.locals[name];
          if (!firstTime && previousLocals === latestLocals) return; // nothing to do
          newScope = scope.$new();
          latestLocals = $state.$current.locals[name];
          /**
           * @ngdoc event
           * @name ui.router.state.directive:ui-view#$viewContentLoading
           * @eventOf ui.router.state.directive:ui-view
           * @eventType emits on ui-view directive scope
           * @description
           *
           * Fired once the view **begins loading**, *before* the DOM is rendered.
           *
           * @param {Object} event Event object.
           * @param {string} viewName Name of the view.
           */
          newScope.$emit('$viewContentLoading', name);
          var clone = $transclude(newScope, function(clone) {
            var animEnter = $q.defer(), animLeave = $q.defer();
            var viewAnimData = {
              $animEnter: animEnter.promise,
              $animLeave: animLeave.promise,
              $$animLeave: animLeave
            };
            clone.data('$uiViewAnim', viewAnimData);
            renderer.enter(clone, $element, function onUiViewEnter() {
              animEnter.resolve();
              if(currentScope) {
                currentScope.$emit('$viewContentAnimationEnded');
              }
              if (angular.isDefined(autoScrollExp) && !autoScrollExp || scope.$eval(autoScrollExp)) {
                $uiViewScroll(clone);
              }
            });
            cleanupLastView();
          });
          currentEl = clone;
          currentScope = newScope;
          /**
           * @ngdoc event
           * @name ui.router.state.directive:ui-view#$viewContentLoaded
           * @eventOf ui.router.state.directive:ui-view
           * @eventType emits on ui-view directive scope
           * @description
           * Fired once the view is **loaded**, *after* the DOM is rendered.
           *
           * @param {Object} event Event object.
           * @param {string} viewName Name of the view.
           */
          currentScope.$emit('$viewContentLoaded', name);
          currentScope.$eval(onloadExp);
        }
      };
    }
  };
  return directive;
}
$ViewDirectiveFill.$inject = ['$compile', '$controller', '$state', '$interpolate'];
function $ViewDirectiveFill (  $compile,   $controller,   $state,   $interpolate) {
  return {
    restrict: 'ECA',
    priority: -400,
    compile: function (tElement) {
      var initial = tElement.html();
      if (tElement.empty) {
        tElement.empty();
      } else {
        // ng 1.0.0 doesn't have empty(), which cleans up data and handlers
        tElement[0].innerHTML = null;
      }
      return function (scope, $element, attrs) {
        var current = $state.$current,
            name = getUiViewName(scope, attrs, $element, $interpolate),
            locals  = current && current.locals[name];
        if (! locals) {
          $element.html(initial);
          $compile($element.contents())(scope);
          return;
        }
        $element.data('$uiView', { name: name, state: locals.$$state });
        $element.html(locals.$template ? locals.$template : initial);
        var resolveData = angular.extend({}, locals);
        scope[locals.$$resolveAs] = resolveData;
        var link = $compile($element.contents());
        if (locals.$$controller) {
          locals.$scope = scope;
          locals.$element = $element;
          var controller = $controller(locals.$$controller, locals);
          if (locals.$$controllerAs) {
            scope[locals.$$controllerAs] = controller;
            scope[locals.$$controllerAs][locals.$$resolveAs] = resolveData;
          }
          if (isFunction(controller.$onInit)) controller.$onInit();
          $element.data('$ngControllerController', controller);
          $element.children().data('$ngControllerController', controller);
        }
        link(scope);
      };
    }
  };
}
/**
 * Shared ui-view code for both directives:
 * Given scope, element, and its attributes, return the view's name
 */
function getUiViewName(scope, attrs, element, $interpolate) {
  var name = $interpolate(attrs.uiView || attrs.name || '')(scope);
  var uiViewCreatedBy = element.inheritedData('$uiView');
  return name.indexOf('@') >= 0 ?  name :  (name + '@' + (uiViewCreatedBy ? uiViewCreatedBy.state.name : ''));
}
angular.module('ui.router.state').directive('uiView', $ViewDirective);
angular.module('ui.router.state').directive('uiView', $ViewDirectiveFill);
src/main/webapp/bower_components/angular-ui-router/src/viewScroll.js
New file
@@ -0,0 +1,52 @@
/**
 * @ngdoc object
 * @name ui.router.state.$uiViewScrollProvider
 *
 * @description
 * Provider that returns the {@link ui.router.state.$uiViewScroll} service function.
 */
function $ViewScrollProvider() {
  var useAnchorScroll = false;
  /**
   * @ngdoc function
   * @name ui.router.state.$uiViewScrollProvider#useAnchorScroll
   * @methodOf ui.router.state.$uiViewScrollProvider
   *
   * @description
   * Reverts back to using the core [`$anchorScroll`](http://docs.angularjs.org/api/ng.$anchorScroll) service for
   * scrolling based on the url anchor.
   */
  this.useAnchorScroll = function () {
    useAnchorScroll = true;
  };
  /**
   * @ngdoc object
   * @name ui.router.state.$uiViewScroll
   *
   * @requires $anchorScroll
   * @requires $timeout
   *
   * @description
   * When called with a jqLite element, it scrolls the element into view (after a
   * `$timeout` so the DOM has time to refresh).
   *
   * If you prefer to rely on `$anchorScroll` to scroll the view to the anchor,
   * this can be enabled by calling {@link ui.router.state.$uiViewScrollProvider#methods_useAnchorScroll `$uiViewScrollProvider.useAnchorScroll()`}.
   */
  this.$get = ['$anchorScroll', '$timeout', function ($anchorScroll, $timeout) {
    if (useAnchorScroll) {
      return $anchorScroll;
    }
    return function ($element) {
      return $timeout(function () {
        $element[0].scrollIntoView();
      }, 0, false);
    };
  }];
}
angular.module('ui.router.state').provider('$uiViewScroll', $ViewScrollProvider);
src/main/webapp/bower_components/angular-ui-sortable/.bower.json
New file
@@ -0,0 +1,23 @@
{
  "name": "angular-ui-sortable",
  "version": "0.18.0",
  "main": [
    "./sortable.js"
  ],
  "dependencies": {
    "angular": ">=1.2.x",
    "jquery": ">=3.1.x",
    "jquery-ui": ">=1.12.x"
  },
  "homepage": "https://github.com/angular-ui/ui-sortable",
  "_release": "0.18.0",
  "_resolution": {
    "type": "version",
    "tag": "v0.18.0",
    "commit": "dff4e20cd60c8c16e5428dc7d8fd597fd07047f3"
  },
  "_source": "https://github.com/angular-ui/ui-sortable.git",
  "_target": "0.18.0",
  "_originalSource": "angular-ui-sortable",
  "_direct": true
}
src/main/webapp/bower_components/angular-ui-sortable/.travis.yml
New file
@@ -0,0 +1,5 @@
---
# blacklist the bower branch
branches:
  only:
    - master
src/main/webapp/bower_components/angular-ui-sortable/bower.json
New file
@@ -0,0 +1,10 @@
{
  "name": "angular-ui-sortable",
  "version": "",
  "main": ["./sortable.js"],
  "dependencies": {
    "angular": ">=1.2.x",
    "jquery": ">=3.1.x",
    "jquery-ui": ">=1.12.x"
  }
}
src/main/webapp/bower_components/angular-ui-sortable/sortable.js
New file
@@ -0,0 +1,600 @@
/**
 * angular-ui-sortable - This directive allows you to jQueryUI Sortable.
 * @version v0.18.0 - 2017-11-26
 * @link http://angular-ui.github.com
 * @license MIT
 */
(function(window, angular, undefined) {
'use strict';
/*
 jQuery UI Sortable plugin wrapper
 @param [ui-sortable] {object} Options to pass to $.fn.sortable() merged onto ui.config
 */
angular.module('ui.sortable', [])
  .value('uiSortableConfig',{
    // the default for jquery-ui sortable is "> *", we need to restrict this to
    // ng-repeat items
    // if the user uses
    items: '> [ng-repeat],> [data-ng-repeat],> [x-ng-repeat]'
  })
  .directive('uiSortable', [
    'uiSortableConfig', '$timeout', '$log',
    function(uiSortableConfig, $timeout, $log) {
      return {
        require:'?ngModel',
        scope: {
          ngModel:'=',
          uiSortable:'=',
          ////Expression bindings from html.
          create:'&uiSortableCreate',
          // helper:'&uiSortableHelper',
          start:'&uiSortableStart',
          activate:'&uiSortableActivate',
          // sort:'&uiSortableSort',
          // change:'&uiSortableChange',
          // over:'&uiSortableOver',
          // out:'&uiSortableOut',
          beforeStop:'&uiSortableBeforeStop',
          update:'&uiSortableUpdate',
          remove:'&uiSortableRemove',
          receive:'&uiSortableReceive',
          deactivate:'&uiSortableDeactivate',
          stop:'&uiSortableStop'
        },
        link: function(scope, element, attrs, ngModel) {
          var savedNodes;
          var helper;
          function combineCallbacks(first, second){
            var firstIsFunc = typeof first === 'function';
            var secondIsFunc = typeof second === 'function';
            if(firstIsFunc && secondIsFunc) {
              return function() {
                first.apply(this, arguments);
                second.apply(this, arguments);
              };
            } else if (secondIsFunc) {
              return second;
            }
            return first;
          }
          function getSortableWidgetInstance(element) {
            // this is a fix to support jquery-ui prior to v1.11.x
            // otherwise we should be using `element.sortable('instance')`
            var data = element.data('ui-sortable');
            if (data && typeof data === 'object' && data.widgetFullName === 'ui-sortable') {
              return data;
            }
            return null;
          }
          function setItemChildrenWidth(item) {
            item.children().each(function() {
              var $el = angular.element(this);
              // Preserve the with of the element
              $el.width($el.width());
            });
          }
          function dummyHelper(e, item) {
            return item;
          }
          function patchSortableOption(key, value) {
            if (callbacks[key]) {
              if( key === 'stop' ){
                // call apply after stop
                value = combineCallbacks(
                  value, function() { scope.$apply(); });
                value = combineCallbacks(value, afterStop);
              }
              // wrap the callback
              value = combineCallbacks(callbacks[key], value);
            } else if (wrappers[key]) {
              value = wrappers[key](value);
            }
            // patch the options that need to have values set
            if (!value && (key === 'items' || key === 'ui-model-items')) {
              value = uiSortableConfig.items;
            }
            return value;
          }
          function patchUISortableOptions(newOpts, oldOpts, sortableWidgetInstance) {
            function addDummyOptionKey(value, key) {
              if (!(key in opts)) {
                // add the key in the opts object so that
                // the patch function detects and handles it
                opts[key] = null;
              }
            }
            // for this directive to work we have to attach some callbacks
            angular.forEach(callbacks, addDummyOptionKey);
            // only initialize it in case we have to
            // update some options of the sortable
            var optsDiff = null;
            if (oldOpts) {
              // reset deleted options to default
              var defaultOptions;
              angular.forEach(oldOpts, function(oldValue, key) {
                if (!newOpts || !(key in newOpts)) {
                  if (key in directiveOpts) {
                    if (key === 'ui-floating') {
                      opts[key] = 'auto';
                    } else {
                      opts[key] = patchSortableOption(key, undefined);
                    }
                    return;
                  }
                  if (!defaultOptions) {
                    defaultOptions = angular.element.ui.sortable().options;
                  }
                  var defaultValue = defaultOptions[key];
                  defaultValue = patchSortableOption(key, defaultValue);
                  if (!optsDiff) {
                    optsDiff = {};
                  }
                  optsDiff[key] = defaultValue;
                  opts[key] = defaultValue;
                }
              });
            }
            newOpts = angular.extend({}, newOpts);
            // update changed options
            // handle the custom option of the directive first
            angular.forEach(newOpts, function(value, key) {
              if (key in directiveOpts) {
                if (key === 'ui-floating' && (value === false || value === true) && sortableWidgetInstance) {
                  sortableWidgetInstance.floating = value;
                }
                if (key === 'ui-preserve-size' && (value === false || value === true)) {
                  var userProvidedHelper = opts.helper;
                  newOpts.helper = function(e, item) {
                    if (opts['ui-preserve-size'] === true) {
                      setItemChildrenWidth(item);
                    }
                    return (userProvidedHelper || dummyHelper).apply(this, arguments);
                  };
                }
                opts[key] = patchSortableOption(key, value);
              }
            });
            // handle the normal option of the directive
            angular.forEach(newOpts, function(value, key) {
              if (key in directiveOpts) {
                // the custom option of the directive are already handled
                return;
              }
              value = patchSortableOption(key, value);
              if (!optsDiff) {
                optsDiff = {};
              }
              optsDiff[key] = value;
              opts[key] = value;
            });
            return optsDiff;
          }
          function getPlaceholderElement (element) {
            var placeholder = element.sortable('option','placeholder');
            // placeholder.element will be a function if the placeholder, has
            // been created (placeholder will be an object).  If it hasn't
            // been created, either placeholder will be false if no
            // placeholder class was given or placeholder.element will be
            // undefined if a class was given (placeholder will be a string)
            if (placeholder && placeholder.element && typeof placeholder.element === 'function') {
              var result = placeholder.element();
              // workaround for jquery ui 1.9.x,
              // not returning jquery collection
              result = angular.element(result);
              return result;
            }
            return null;
          }
          function getPlaceholderExcludesludes (element, placeholder) {
            // exact match with the placeholder's class attribute to handle
            // the case that multiple connected sortables exist and
            // the placeholder option equals the class of sortable items
            var notCssSelector = opts['ui-model-items'].replace(/[^,]*>/g, '');
            var excludes = element.find('[class="' + placeholder.attr('class') + '"]:not(' + notCssSelector + ')');
            return excludes;
          }
          function hasSortingHelper (element, ui) {
            var helperOption = element.sortable('option','helper');
            return helperOption === 'clone' || (typeof helperOption === 'function' && ui.item.sortable.isCustomHelperUsed());
          }
          function getSortingHelper (element, ui/*, savedNodes*/) {
            var result = null;
            if (hasSortingHelper(element, ui) &&
                element.sortable( 'option', 'appendTo' ) === 'parent') {
              // The .ui-sortable-helper element (that's the default class name)
              result = helper;
            }
            return result;
          }
          // thanks jquery-ui
          function isFloating(item) {
            return (/left|right/).test(item.css('float')) || (/inline|table-cell/).test(item.css('display'));
          }
          function getElementContext(elementScopes, element) {
            for (var i = 0; i < elementScopes.length; i++) {
              var c = elementScopes[i];
              if (c.element[0] === element[0]) {
                return c;
              }
            }
          }
          function afterStop(e, ui) {
            ui.item.sortable._destroy();
          }
          // return the index of ui.item among the items
          // we can't just do ui.item.index() because there it might have siblings
          // which are not items
          function getItemIndex(item) {
            return item.parent()
              .find(opts['ui-model-items'])
              .index(item);
          }
          var opts = {};
          // directive specific options
          var directiveOpts = {
            'ui-floating': undefined,
            'ui-model-items': uiSortableConfig.items,
            'ui-preserve-size': undefined
          };
          var callbacks = {
            create: null,
            start: null,
            activate: null,
            // sort: null,
            // change: null,
            // over: null,
            // out: null,
            beforeStop: null,
            update: null,
            remove: null,
            receive: null,
            deactivate: null,
            stop: null
          };
          var wrappers = {
            helper: null
          };
          angular.extend(opts, directiveOpts, uiSortableConfig, scope.uiSortable);
          if (!angular.element.fn || !angular.element.fn.jquery) {
            $log.error('ui.sortable: jQuery should be included before AngularJS!');
            return;
          }
          function wireUp () {
            // When we add or remove elements, we need the sortable to 'refresh'
            // so it can find the new/removed elements.
            scope.$watchCollection('ngModel', function() {
              // Timeout to let ng-repeat modify the DOM
              $timeout(function() {
                // ensure that the jquery-ui-sortable widget instance
                // is still bound to the directive's element
                if (!!getSortableWidgetInstance(element)) {
                  element.sortable('refresh');
                }
              }, 0, false);
            });
            callbacks.start = function(e, ui) {
              if (opts['ui-floating'] === 'auto') {
                // since the drag has started, the element will be
                // absolutely positioned, so we check its siblings
                var siblings = ui.item.siblings();
                var sortableWidgetInstance = getSortableWidgetInstance(angular.element(e.target));
                sortableWidgetInstance.floating = isFloating(siblings);
              }
              // Save the starting position of dragged item
              var index = getItemIndex(ui.item);
              ui.item.sortable = {
                model: ngModel.$modelValue[index],
                index: index,
                source: element,
                sourceList: ui.item.parent(),
                sourceModel: ngModel.$modelValue,
                cancel: function () {
                  ui.item.sortable._isCanceled = true;
                },
                isCanceled: function () {
                  return ui.item.sortable._isCanceled;
                },
                isCustomHelperUsed: function () {
                  return !!ui.item.sortable._isCustomHelperUsed;
                },
                _isCanceled: false,
                _isCustomHelperUsed: ui.item.sortable._isCustomHelperUsed,
                _destroy: function () {
                  angular.forEach(ui.item.sortable, function(value, key) {
                    ui.item.sortable[key] = undefined;
                  });
                },
                _connectedSortables: [],
                _getElementContext: function (element) {
                  return getElementContext(this._connectedSortables, element);
                }
              };
            };
            callbacks.activate = function(e, ui) {
              var isSourceContext = ui.item.sortable.source === element;
              var savedNodesOrigin = isSourceContext ?
                                     ui.item.sortable.sourceList :
                                     element;
              var elementContext = {
                element: element,
                scope: scope,
                isSourceContext: isSourceContext,
                savedNodesOrigin: savedNodesOrigin
              };
              // save the directive's scope so that it is accessible from ui.item.sortable
              ui.item.sortable._connectedSortables.push(elementContext);
              // We need to make a copy of the current element's contents so
              // we can restore it after sortable has messed it up.
              // This is inside activate (instead of start) in order to save
              // both lists when dragging between connected lists.
              savedNodes = savedNodesOrigin.contents();
              helper = ui.helper;
              // If this list has a placeholder (the connected lists won't),
              // don't inlcude it in saved nodes.
              var placeholder = getPlaceholderElement(element);
              if (placeholder && placeholder.length) {
                var excludes = getPlaceholderExcludesludes(element, placeholder);
                savedNodes = savedNodes.not(excludes);
              }
            };
            callbacks.update = function(e, ui) {
              // Save current drop position but only if this is not a second
              // update that happens when moving between lists because then
              // the value will be overwritten with the old value
              if (!ui.item.sortable.received) {
                ui.item.sortable.dropindex = getItemIndex(ui.item);
                var droptarget = ui.item.parent().closest('[ui-sortable], [data-ui-sortable], [x-ui-sortable]');
                ui.item.sortable.droptarget = droptarget;
                ui.item.sortable.droptargetList = ui.item.parent();
                var droptargetContext = ui.item.sortable._getElementContext(droptarget);
                ui.item.sortable.droptargetModel = droptargetContext.scope.ngModel;
                // Cancel the sort (let ng-repeat do the sort for us)
                // Don't cancel if this is the received list because it has
                // already been canceled in the other list, and trying to cancel
                // here will mess up the DOM.
                element.sortable('cancel');
              }
              // Put the nodes back exactly the way they started (this is very
              // important because ng-repeat uses comment elements to delineate
              // the start and stop of repeat sections and sortable doesn't
              // respect their order (even if we cancel, the order of the
              // comments are still messed up).
              var sortingHelper = !ui.item.sortable.received && getSortingHelper(element, ui, savedNodes);
              if (sortingHelper && sortingHelper.length) {
                // Restore all the savedNodes except from the sorting helper element.
                // That way it will be garbage collected.
                savedNodes = savedNodes.not(sortingHelper);
              }
              var elementContext = ui.item.sortable._getElementContext(element);
              savedNodes.appendTo(elementContext.savedNodesOrigin);
              // If this is the target connected list then
              // it's safe to clear the restored nodes since:
              // update is currently running and
              // stop is not called for the target list.
              if (ui.item.sortable.received) {
                savedNodes = null;
              }
              // If received is true (an item was dropped in from another list)
              // then we add the new item to this list otherwise wait until the
              // stop event where we will know if it was a sort or item was
              // moved here from another list
              if (ui.item.sortable.received && !ui.item.sortable.isCanceled()) {
                scope.$apply(function () {
                  ngModel.$modelValue.splice(ui.item.sortable.dropindex, 0,
                                             ui.item.sortable.moved);
                });
                scope.$emit('ui-sortable:moved', ui);
              }
            };
            callbacks.stop = function(e, ui) {
              // If the received flag hasn't be set on the item, this is a
              // normal sort, if dropindex is set, the item was moved, so move
              // the items in the list.
              var wasMoved = ('dropindex' in ui.item.sortable) &&
                              !ui.item.sortable.isCanceled();
              if (wasMoved && !ui.item.sortable.received) {
                scope.$apply(function () {
                  ngModel.$modelValue.splice(
                    ui.item.sortable.dropindex, 0,
                    ngModel.$modelValue.splice(ui.item.sortable.index, 1)[0]);
                });
                scope.$emit('ui-sortable:moved', ui);
              } else if (!wasMoved &&
                         !angular.equals(element.contents().toArray(), savedNodes.toArray())) {
                // if the item was not moved
                // and the DOM element order has changed,
                // then restore the elements
                // so that the ngRepeat's comment are correct.
                var sortingHelper = getSortingHelper(element, ui, savedNodes);
                if (sortingHelper && sortingHelper.length) {
                  // Restore all the savedNodes except from the sorting helper element.
                  // That way it will be garbage collected.
                  savedNodes = savedNodes.not(sortingHelper);
                }
                var elementContext = ui.item.sortable._getElementContext(element);
                savedNodes.appendTo(elementContext.savedNodesOrigin);
              }
              // It's now safe to clear the savedNodes and helper
              // since stop is the last callback.
              savedNodes = null;
              helper = null;
            };
            callbacks.receive = function(e, ui) {
              // An item was dropped here from another list, set a flag on the
              // item.
              ui.item.sortable.received = true;
            };
            callbacks.remove = function(e, ui) {
              // Workaround for a problem observed in nested connected lists.
              // There should be an 'update' event before 'remove' when moving
              // elements. If the event did not fire, cancel sorting.
              if (!('dropindex' in ui.item.sortable)) {
                element.sortable('cancel');
                ui.item.sortable.cancel();
              }
              // Remove the item from this list's model and copy data into item,
              // so the next list can retrive it
              if (!ui.item.sortable.isCanceled()) {
                scope.$apply(function () {
                  ui.item.sortable.moved = ngModel.$modelValue.splice(
                    ui.item.sortable.index, 1)[0];
                });
              }
            };
            // setup attribute handlers
            angular.forEach(callbacks, function(value, key) {
              callbacks[key] = combineCallbacks(callbacks[key],
                function () {
                  var attrHandler = scope[key];
                  var attrHandlerFn;
                  if (typeof attrHandler === 'function' &&
                      ('uiSortable' + key.substring(0,1).toUpperCase() + key.substring(1)).length &&
                      typeof (attrHandlerFn = attrHandler()) === 'function') {
                    attrHandlerFn.apply(this, arguments);
                  }
                });
            });
            wrappers.helper = function (inner) {
              if (inner && typeof inner === 'function') {
                return function (e, item) {
                  var oldItemSortable = item.sortable;
                  var index = getItemIndex(item);
                  item.sortable = {
                    model: ngModel.$modelValue[index],
                    index: index,
                    source: element,
                    sourceList: item.parent(),
                    sourceModel: ngModel.$modelValue,
                    _restore: function () {
                      angular.forEach(item.sortable, function(value, key) {
                        item.sortable[key] = undefined;
                      });
                      item.sortable = oldItemSortable;
                    }
                  };
                  var innerResult = inner.apply(this, arguments);
                  item.sortable._restore();
                  item.sortable._isCustomHelperUsed = item !== innerResult;
                  return innerResult;
                };
              }
              return inner;
            };
            scope.$watchCollection('uiSortable', function(newOpts, oldOpts) {
              // ensure that the jquery-ui-sortable widget instance
              // is still bound to the directive's element
              var sortableWidgetInstance = getSortableWidgetInstance(element);
              if (!!sortableWidgetInstance) {
                var optsDiff = patchUISortableOptions(newOpts, oldOpts, sortableWidgetInstance);
                if (optsDiff) {
                  element.sortable('option', optsDiff);
                }
              }
            }, true);
            patchUISortableOptions(opts);
          }
          function init () {
            if (ngModel) {
              wireUp();
            } else {
              $log.info('ui.sortable: ngModel not provided!', element);
            }
            // Create sortable
            element.sortable(opts);
          }
          function initIfEnabled () {
            if (scope.uiSortable && scope.uiSortable.disabled) {
              return false;
            }
            init();
            // Stop Watcher
            initIfEnabled.cancelWatcher();
            initIfEnabled.cancelWatcher = angular.noop;
            return true;
          }
          initIfEnabled.cancelWatcher = angular.noop;
          if (!initIfEnabled()) {
            initIfEnabled.cancelWatcher = scope.$watch('uiSortable.disabled', initIfEnabled);
          }
        }
      };
    }
  ]);
})(window, window.angular);
src/main/webapp/bower_components/angular-ui-sortable/sortable.min.js
New file
@@ -0,0 +1,8 @@
/**
 * angular-ui-sortable - This directive allows you to jQueryUI Sortable.
 * @version v0.18.0 - 2017-11-26
 * @link http://angular-ui.github.com
 * @license MIT
 */
!function(a,b,c){"use strict";b.module("ui.sortable",[]).value("uiSortableConfig",{items:"> [ng-repeat],> [data-ng-repeat],> [x-ng-repeat]"}).directive("uiSortable",["uiSortableConfig","$timeout","$log",function(a,d,e){return{require:"?ngModel",scope:{ngModel:"=",uiSortable:"=",create:"&uiSortableCreate",start:"&uiSortableStart",activate:"&uiSortableActivate",beforeStop:"&uiSortableBeforeStop",update:"&uiSortableUpdate",remove:"&uiSortableRemove",receive:"&uiSortableReceive",deactivate:"&uiSortableDeactivate",stop:"&uiSortableStop"},link:function(f,g,h,i){function j(a,b){var c="function"==typeof a,d="function"==typeof b;return c&&d?function(){a.apply(this,arguments),b.apply(this,arguments)}:d?b:a}function k(a){var b=a.data("ui-sortable");return b&&"object"==typeof b&&"ui-sortable"===b.widgetFullName?b:null}function l(a){a.children().each(function(){var a=b.element(this);a.width(a.width())})}function m(a,b){return b}function n(b,c){return E[b]?("stop"===b&&(c=j(c,function(){f.$apply()}),c=j(c,v)),c=j(E[b],c)):F[b]&&(c=F[b](c)),c||"items"!==b&&"ui-model-items"!==b||(c=a.items),c}function o(a,d,e){function f(a,b){b in C||(C[b]=null)}b.forEach(E,f);var g=null;if(d){var h;b.forEach(d,function(d,e){if(!(a&&e in a)){if(e in D)return void("ui-floating"===e?C[e]="auto":C[e]=n(e,c));h||(h=b.element.ui.sortable().options);var f=h[e];f=n(e,f),g||(g={}),g[e]=f,C[e]=f}})}return a=b.extend({},a),b.forEach(a,function(b,c){if(c in D){if("ui-floating"!==c||b!==!1&&b!==!0||!e||(e.floating=b),"ui-preserve-size"===c&&(b===!1||b===!0)){var d=C.helper;a.helper=function(a,b){return C["ui-preserve-size"]===!0&&l(b),(d||m).apply(this,arguments)}}C[c]=n(c,b)}}),b.forEach(a,function(a,b){b in D||(a=n(b,a),g||(g={}),g[b]=a,C[b]=a)}),g}function p(a){var c=a.sortable("option","placeholder");if(c&&c.element&&"function"==typeof c.element){var d=c.element();return d=b.element(d)}return null}function q(a,b){var c=C["ui-model-items"].replace(/[^,]*>/g,""),d=a.find('[class="'+b.attr("class")+'"]:not('+c+")");return d}function r(a,b){var c=a.sortable("option","helper");return"clone"===c||"function"==typeof c&&b.item.sortable.isCustomHelperUsed()}function s(a,b){var c=null;return r(a,b)&&"parent"===a.sortable("option","appendTo")&&(c=B),c}function t(a){return/left|right/.test(a.css("float"))||/inline|table-cell/.test(a.css("display"))}function u(a,b){for(var c=0;c<a.length;c++){var d=a[c];if(d.element[0]===b[0])return d}}function v(a,b){b.item.sortable._destroy()}function w(a){return a.parent().find(C["ui-model-items"]).index(a)}function x(){f.$watchCollection("ngModel",function(){d(function(){k(g)&&g.sortable("refresh")},0,!1)}),E.start=function(a,d){if("auto"===C["ui-floating"]){var e=d.item.siblings(),f=k(b.element(a.target));f.floating=t(e)}var h=w(d.item);d.item.sortable={model:i.$modelValue[h],index:h,source:g,sourceList:d.item.parent(),sourceModel:i.$modelValue,cancel:function(){d.item.sortable._isCanceled=!0},isCanceled:function(){return d.item.sortable._isCanceled},isCustomHelperUsed:function(){return!!d.item.sortable._isCustomHelperUsed},_isCanceled:!1,_isCustomHelperUsed:d.item.sortable._isCustomHelperUsed,_destroy:function(){b.forEach(d.item.sortable,function(a,b){d.item.sortable[b]=c})},_connectedSortables:[],_getElementContext:function(a){return u(this._connectedSortables,a)}}},E.activate=function(a,b){var c=b.item.sortable.source===g,d=c?b.item.sortable.sourceList:g,e={element:g,scope:f,isSourceContext:c,savedNodesOrigin:d};b.item.sortable._connectedSortables.push(e),A=d.contents(),B=b.helper;var h=p(g);if(h&&h.length){var i=q(g,h);A=A.not(i)}},E.update=function(a,b){if(!b.item.sortable.received){b.item.sortable.dropindex=w(b.item);var c=b.item.parent().closest("[ui-sortable], [data-ui-sortable], [x-ui-sortable]");b.item.sortable.droptarget=c,b.item.sortable.droptargetList=b.item.parent();var d=b.item.sortable._getElementContext(c);b.item.sortable.droptargetModel=d.scope.ngModel,g.sortable("cancel")}var e=!b.item.sortable.received&&s(g,b,A);e&&e.length&&(A=A.not(e));var h=b.item.sortable._getElementContext(g);A.appendTo(h.savedNodesOrigin),b.item.sortable.received&&(A=null),b.item.sortable.received&&!b.item.sortable.isCanceled()&&(f.$apply(function(){i.$modelValue.splice(b.item.sortable.dropindex,0,b.item.sortable.moved)}),f.$emit("ui-sortable:moved",b))},E.stop=function(a,c){var d="dropindex"in c.item.sortable&&!c.item.sortable.isCanceled();if(d&&!c.item.sortable.received)f.$apply(function(){i.$modelValue.splice(c.item.sortable.dropindex,0,i.$modelValue.splice(c.item.sortable.index,1)[0])}),f.$emit("ui-sortable:moved",c);else if(!d&&!b.equals(g.contents().toArray(),A.toArray())){var e=s(g,c,A);e&&e.length&&(A=A.not(e));var h=c.item.sortable._getElementContext(g);A.appendTo(h.savedNodesOrigin)}A=null,B=null},E.receive=function(a,b){b.item.sortable.received=!0},E.remove=function(a,b){"dropindex"in b.item.sortable||(g.sortable("cancel"),b.item.sortable.cancel()),b.item.sortable.isCanceled()||f.$apply(function(){b.item.sortable.moved=i.$modelValue.splice(b.item.sortable.index,1)[0]})},b.forEach(E,function(a,b){E[b]=j(E[b],function(){var a,c=f[b];"function"==typeof c&&("uiSortable"+b.substring(0,1).toUpperCase()+b.substring(1)).length&&"function"==typeof(a=c())&&a.apply(this,arguments)})}),F.helper=function(a){return a&&"function"==typeof a?function(d,e){var f=e.sortable,h=w(e);e.sortable={model:i.$modelValue[h],index:h,source:g,sourceList:e.parent(),sourceModel:i.$modelValue,_restore:function(){b.forEach(e.sortable,function(a,b){e.sortable[b]=c}),e.sortable=f}};var j=a.apply(this,arguments);return e.sortable._restore(),e.sortable._isCustomHelperUsed=e!==j,j}:a},f.$watchCollection("uiSortable",function(a,b){var c=k(g);if(c){var d=o(a,b,c);d&&g.sortable("option",d)}},!0),o(C)}function y(){i?x():e.info("ui.sortable: ngModel not provided!",g),g.sortable(C)}function z(){return f.uiSortable&&f.uiSortable.disabled?!1:(y(),z.cancelWatcher(),z.cancelWatcher=b.noop,!0)}var A,B,C={},D={"ui-floating":c,"ui-model-items":a.items,"ui-preserve-size":c},E={create:null,start:null,activate:null,beforeStop:null,update:null,remove:null,receive:null,deactivate:null,stop:null},F={helper:null};return b.extend(C,D,a,f.uiSortable),b.element.fn&&b.element.fn.jquery?(z.cancelWatcher=b.noop,void(z()||(z.cancelWatcher=f.$watch("uiSortable.disabled",z)))):void e.error("ui.sortable: jQuery should be included before AngularJS!")}}}])}(window,window.angular);
src/main/webapp/bower_components/angular/.bower.json
New file
@@ -0,0 +1,18 @@
{
  "name": "angular",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular.js",
  "ignore": [],
  "dependencies": {},
  "homepage": "https://github.com/angular/bower-angular",
  "_release": "1.5.11",
  "_resolution": {
    "type": "version",
    "tag": "v1.5.11",
    "commit": "0f57428c3ffe2f486264ab7fbee3968dccc7b720"
  },
  "_source": "https://github.com/angular/bower-angular.git",
  "_target": "1.5.11",
  "_originalSource": "angular"
}
src/main/webapp/bower_components/angular/LICENSE.md
New file
@@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Angular
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
src/main/webapp/bower_components/angular/README.md
New file
@@ -0,0 +1,64 @@
# packaged angular
This repo is for distribution on `npm` and `bower`. The source for this module is in the
[main AngularJS repo](https://github.com/angular/angular.js).
Please file issues and pull requests against that repo.
## Install
You can install this package either with `npm` or with `bower`.
### npm
```shell
npm install angular
```
Then add a `<script>` to your `index.html`:
```html
<script src="/node_modules/angular/angular.js"></script>
```
Or `require('angular')` from your code.
### bower
```shell
bower install angular
```
Then add a `<script>` to your `index.html`:
```html
<script src="/bower_components/angular/angular.js"></script>
```
## Documentation
Documentation is available on the
[AngularJS docs site](http://docs.angularjs.org/).
## License
The MIT License
Copyright (c) 2010-2015 Google, Inc. http://angularjs.org
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
src/main/webapp/bower_components/angular/angular-csp.css
New file
@@ -0,0 +1,21 @@
/* Include this file in your html if you are using the CSP mode. */
@charset "UTF-8";
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak],
.ng-cloak, .x-ng-cloak,
.ng-hide:not(.ng-hide-animate) {
  display: none !important;
}
ng\:form {
  display: block;
}
.ng-animate-shim {
  visibility:hidden;
}
.ng-anchor {
  position:absolute;
}
src/main/webapp/bower_components/angular/angular.js
New file
Diff too large
src/main/webapp/bower_components/angular/angular.min.js
New file
@@ -0,0 +1,324 @@
/*
 AngularJS v1.5.11
 (c) 2010-2017 Google, Inc. http://angularjs.org
 License: MIT
*/
(function(y){'use strict';function G(a,b){b=b||Error;return function(){var d=arguments[0],c;c="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.5.11/"+(a?a+"/":"")+d;for(d=1;d<arguments.length;d++){c=c+(1==d?"?":"&")+"p"+(d-1)+"=";var f=encodeURIComponent,e;e=arguments[d];e="function"==typeof e?e.toString().replace(/ \{[\s\S]*$/,""):"undefined"==typeof e?"undefined":"string"!=typeof e?JSON.stringify(e):e;c+=f(e)}return new b(c)}}function la(a){if(null==a||Ya(a))return!1;if(I(a)||D(a)||F&&a instanceof
F)return!0;var b="length"in Object(a)&&a.length;return ba(b)&&(0<=b&&(b-1 in a||a instanceof Array)||"function"===typeof a.item)}function q(a,b,d){var c,f;if(a)if(C(a))for(c in a)"prototype"===c||"length"===c||"name"===c||a.hasOwnProperty&&!a.hasOwnProperty(c)||b.call(d,a[c],c,a);else if(I(a)||la(a)){var e="object"!==typeof a;c=0;for(f=a.length;c<f;c++)(e||c in a)&&b.call(d,a[c],c,a)}else if(a.forEach&&a.forEach!==q)a.forEach(b,d,a);else if(xc(a))for(c in a)b.call(d,a[c],c,a);else if("function"===
typeof a.hasOwnProperty)for(c in a)a.hasOwnProperty(c)&&b.call(d,a[c],c,a);else for(c in a)ua.call(a,c)&&b.call(d,a[c],c,a);return a}function yc(a,b,d){for(var c=Object.keys(a).sort(),f=0;f<c.length;f++)b.call(d,a[c[f]],c[f]);return c}function zc(a){return function(b,d){a(d,b)}}function ke(){return++sb}function Rb(a,b,d){for(var c=a.$$hashKey,f=0,e=b.length;f<e;++f){var g=b[f];if(E(g)||C(g))for(var h=Object.keys(g),k=0,l=h.length;k<l;k++){var m=h[k],n=g[m];d&&E(n)?ja(n)?a[m]=new Date(n.valueOf()):
Za(n)?a[m]=new RegExp(n):n.nodeName?a[m]=n.cloneNode(!0):Sb(n)?a[m]=n.clone():(E(a[m])||(a[m]=I(n)?[]:{}),Rb(a[m],[n],!0)):a[m]=n}}c?a.$$hashKey=c:delete a.$$hashKey;return a}function R(a){return Rb(a,va.call(arguments,1),!1)}function le(a){return Rb(a,va.call(arguments,1),!0)}function Z(a){return parseInt(a,10)}function Tb(a,b){return R(Object.create(a),b)}function w(){}function $a(a){return a}function ha(a){return function(){return a}}function Ac(a){return C(a.toString)&&a.toString!==ma}function z(a){return"undefined"===
typeof a}function x(a){return"undefined"!==typeof a}function E(a){return null!==a&&"object"===typeof a}function xc(a){return null!==a&&"object"===typeof a&&!Bc(a)}function D(a){return"string"===typeof a}function ba(a){return"number"===typeof a}function ja(a){return"[object Date]"===ma.call(a)}function C(a){return"function"===typeof a}function Za(a){return"[object RegExp]"===ma.call(a)}function Ya(a){return a&&a.window===a}function ab(a){return a&&a.$evalAsync&&a.$watch}function Ka(a){return"boolean"===
typeof a}function me(a){return a&&ba(a.length)&&ne.test(ma.call(a))}function Sb(a){return!(!a||!(a.nodeName||a.prop&&a.attr&&a.find))}function oe(a){var b={};a=a.split(",");var d;for(d=0;d<a.length;d++)b[a[d]]=!0;return b}function wa(a){return Q(a.nodeName||a[0]&&a[0].nodeName)}function bb(a,b){var d=a.indexOf(b);0<=d&&a.splice(d,1);return d}function sa(a,b){function d(a,b){var d=b.$$hashKey,e;if(I(a)){e=0;for(var f=a.length;e<f;e++)b.push(c(a[e]))}else if(xc(a))for(e in a)b[e]=c(a[e]);else if(a&&
"function"===typeof a.hasOwnProperty)for(e in a)a.hasOwnProperty(e)&&(b[e]=c(a[e]));else for(e in a)ua.call(a,e)&&(b[e]=c(a[e]));d?b.$$hashKey=d:delete b.$$hashKey;return b}function c(a){if(!E(a))return a;var b=e.indexOf(a);if(-1!==b)return g[b];if(Ya(a)||ab(a))throw xa("cpws");var b=!1,c=f(a);void 0===c&&(c=I(a)?[]:Object.create(Bc(a)),b=!0);e.push(a);g.push(c);return b?d(a,c):c}function f(a){switch(ma.call(a)){case "[object Int8Array]":case "[object Int16Array]":case "[object Int32Array]":case "[object Float32Array]":case "[object Float64Array]":case "[object Uint8Array]":case "[object Uint8ClampedArray]":case "[object Uint16Array]":case "[object Uint32Array]":return new a.constructor(c(a.buffer),
a.byteOffset,a.length);case "[object ArrayBuffer]":if(!a.slice){var b=new ArrayBuffer(a.byteLength);(new Uint8Array(b)).set(new Uint8Array(a));return b}return a.slice(0);case "[object Boolean]":case "[object Number]":case "[object String]":case "[object Date]":return new a.constructor(a.valueOf());case "[object RegExp]":return b=new RegExp(a.source,a.toString().match(/[^/]*$/)[0]),b.lastIndex=a.lastIndex,b;case "[object Blob]":return new a.constructor([a],{type:a.type})}if(C(a.cloneNode))return a.cloneNode(!0)}
var e=[],g=[];if(b){if(me(b)||"[object ArrayBuffer]"===ma.call(b))throw xa("cpta");if(a===b)throw xa("cpi");I(b)?b.length=0:q(b,function(a,d){"$$hashKey"!==d&&delete b[d]});e.push(a);g.push(b);return d(a,b)}return c(a)}function na(a,b){if(a===b)return!0;if(null===a||null===b)return!1;if(a!==a&&b!==b)return!0;var d=typeof a,c;if(d===typeof b&&"object"===d)if(I(a)){if(!I(b))return!1;if((d=a.length)===b.length){for(c=0;c<d;c++)if(!na(a[c],b[c]))return!1;return!0}}else{if(ja(a))return ja(b)?na(a.getTime(),
b.getTime()):!1;if(Za(a))return Za(b)?a.toString()===b.toString():!1;if(ab(a)||ab(b)||Ya(a)||Ya(b)||I(b)||ja(b)||Za(b))return!1;d=V();for(c in a)if("$"!==c.charAt(0)&&!C(a[c])){if(!na(a[c],b[c]))return!1;d[c]=!0}for(c in b)if(!(c in d)&&"$"!==c.charAt(0)&&x(b[c])&&!C(b[c]))return!1;return!0}return!1}function cb(a,b,d){return a.concat(va.call(b,d))}function db(a,b){var d=2<arguments.length?va.call(arguments,2):[];return!C(b)||b instanceof RegExp?b:d.length?function(){return arguments.length?b.apply(a,
cb(d,arguments,0)):b.apply(a,d)}:function(){return arguments.length?b.apply(a,arguments):b.call(a)}}function pe(a,b){var d=b;"string"===typeof a&&"$"===a.charAt(0)&&"$"===a.charAt(1)?d=void 0:Ya(b)?d="$WINDOW":b&&y.document===b?d="$DOCUMENT":ab(b)&&(d="$SCOPE");return d}function eb(a,b){if(!z(a))return ba(b)||(b=b?2:null),JSON.stringify(a,pe,b)}function Cc(a){return D(a)?JSON.parse(a):a}function Dc(a,b){a=a.replace(qe,"");var d=Date.parse("Jan 01, 1970 00:00:00 "+a)/6E4;return ia(d)?b:d}function Ub(a,
b,d){d=d?-1:1;var c=a.getTimezoneOffset();b=Dc(b,c);d*=b-c;a=new Date(a.getTime());a.setMinutes(a.getMinutes()+d);return a}function ya(a){a=F(a).clone();try{a.empty()}catch(b){}var d=F("<div>").append(a).html();try{return a[0].nodeType===La?Q(d):d.match(/^(<[^>]+>)/)[1].replace(/^<([\w-]+)/,function(a,b){return"<"+Q(b)})}catch(c){return Q(d)}}function Ec(a){try{return decodeURIComponent(a)}catch(b){}}function Fc(a){var b={};q((a||"").split("&"),function(a){var c,f,e;a&&(f=a=a.replace(/\+/g,"%20"),
c=a.indexOf("="),-1!==c&&(f=a.substring(0,c),e=a.substring(c+1)),f=Ec(f),x(f)&&(e=x(e)?Ec(e):!0,ua.call(b,f)?I(b[f])?b[f].push(e):b[f]=[b[f],e]:b[f]=e))});return b}function Vb(a){var b=[];q(a,function(a,c){I(a)?q(a,function(a){b.push(oa(c,!0)+(!0===a?"":"="+oa(a,!0)))}):b.push(oa(c,!0)+(!0===a?"":"="+oa(a,!0)))});return b.length?b.join("&"):""}function tb(a){return oa(a,!0).replace(/%26/gi,"&").replace(/%3D/gi,"=").replace(/%2B/gi,"+")}function oa(a,b){return encodeURIComponent(a).replace(/%40/gi,
"@").replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%3B/gi,";").replace(/%20/g,b?"%20":"+")}function re(a,b){var d,c,f=Oa.length;for(c=0;c<f;++c)if(d=Oa[c]+b,D(d=a.getAttribute(d)))return d;return null}function se(a,b){var d,c,f={};q(Oa,function(b){b+="app";!d&&a.hasAttribute&&a.hasAttribute(b)&&(d=a,c=a.getAttribute(b))});q(Oa,function(b){b+="app";var f;!d&&(f=a.querySelector("["+b.replace(":","\\:")+"]"))&&(d=f,c=f.getAttribute(b))});d&&(te?(f.strictDi=null!==re(d,"strict-di"),
b(d,c?[c]:[],f)):y.console.error("Angular: disabling automatic bootstrap. <script> protocol indicates an extension, document.location.href does not match."))}function Gc(a,b,d){E(d)||(d={});d=R({strictDi:!1},d);var c=function(){a=F(a);if(a.injector()){var c=a[0]===y.document?"document":ya(a);throw xa("btstrpd",c.replace(/</,"&lt;").replace(/>/,"&gt;"));}b=b||[];b.unshift(["$provide",function(b){b.value("$rootElement",a)}]);d.debugInfoEnabled&&b.push(["$compileProvider",function(a){a.debugInfoEnabled(!0)}]);
b.unshift("ng");c=fb(b,d.strictDi);c.invoke(["$rootScope","$rootElement","$compile","$injector",function(a,b,c,d){a.$apply(function(){b.data("$injector",d);c(b)(a)})}]);return c},f=/^NG_ENABLE_DEBUG_INFO!/,e=/^NG_DEFER_BOOTSTRAP!/;y&&f.test(y.name)&&(d.debugInfoEnabled=!0,y.name=y.name.replace(f,""));if(y&&!e.test(y.name))return c();y.name=y.name.replace(e,"");$.resumeBootstrap=function(a){q(a,function(a){b.push(a)});return c()};C($.resumeDeferredBootstrap)&&$.resumeDeferredBootstrap()}function ue(){y.name=
"NG_ENABLE_DEBUG_INFO!"+y.name;y.location.reload()}function ve(a){a=$.element(a).injector();if(!a)throw xa("test");return a.get("$$testability")}function Hc(a,b){b=b||"_";return a.replace(we,function(a,c){return(c?b:"")+a.toLowerCase()})}function xe(){var a;if(!Ic){var b=ub();(za=z(b)?y.jQuery:b?y[b]:void 0)&&za.fn.on?(F=za,R(za.fn,{scope:Pa.scope,isolateScope:Pa.isolateScope,controller:Pa.controller,injector:Pa.injector,inheritedData:Pa.inheritedData}),a=za.cleanData,za.cleanData=function(b){for(var c,
f=0,e;null!=(e=b[f]);f++)(c=za._data(e,"events"))&&c.$destroy&&za(e).triggerHandler("$destroy");a(b)}):F=W;$.element=F;Ic=!0}}function gb(a,b,d){if(!a)throw xa("areq",b||"?",d||"required");return a}function Qa(a,b,d){d&&I(a)&&(a=a[a.length-1]);gb(C(a),b,"not a function, got "+(a&&"object"===typeof a?a.constructor.name||"Object":typeof a));return a}function Ra(a,b){if("hasOwnProperty"===a)throw xa("badname",b);}function Jc(a,b,d){if(!b)return a;b=b.split(".");for(var c,f=a,e=b.length,g=0;g<e;g++)c=
b[g],a&&(a=(f=a)[c]);return!d&&C(a)?db(f,a):a}function vb(a){for(var b=a[0],d=a[a.length-1],c,f=1;b!==d&&(b=b.nextSibling);f++)if(c||a[f]!==b)c||(c=F(va.call(a,0,f))),c.push(b);return c||a}function V(){return Object.create(null)}function ye(a){function b(a,b,c){return a[b]||(a[b]=c())}var d=G("$injector"),c=G("ng");a=b(a,"angular",Object);a.$$minErr=a.$$minErr||G;return b(a,"module",function(){var a={};return function(e,g,h){if("hasOwnProperty"===e)throw c("badname","module");g&&a.hasOwnProperty(e)&&
(a[e]=null);return b(a,e,function(){function a(b,d,e,f){f||(f=c);return function(){f[e||"push"]([b,d,arguments]);return H}}function b(a,d){return function(b,f){f&&C(f)&&(f.$$moduleName=e);c.push([a,d,arguments]);return H}}if(!g)throw d("nomod",e);var c=[],f=[],r=[],s=a("$injector","invoke","push",f),H={_invokeQueue:c,_configBlocks:f,_runBlocks:r,requires:g,name:e,provider:b("$provide","provider"),factory:b("$provide","factory"),service:b("$provide","service"),value:a("$provide","value"),constant:a("$provide",
"constant","unshift"),decorator:b("$provide","decorator"),animation:b("$animateProvider","register"),filter:b("$filterProvider","register"),controller:b("$controllerProvider","register"),directive:b("$compileProvider","directive"),component:b("$compileProvider","component"),config:s,run:function(a){r.push(a);return this}};h&&s(h);return H})}})}function ka(a,b){if(I(a)){b=b||[];for(var d=0,c=a.length;d<c;d++)b[d]=a[d]}else if(E(a))for(d in b=b||{},a)if("$"!==d.charAt(0)||"$"!==d.charAt(1))b[d]=a[d];
return b||a}function ze(a){R(a,{bootstrap:Gc,copy:sa,extend:R,merge:le,equals:na,element:F,forEach:q,injector:fb,noop:w,bind:db,toJson:eb,fromJson:Cc,identity:$a,isUndefined:z,isDefined:x,isString:D,isFunction:C,isObject:E,isNumber:ba,isElement:Sb,isArray:I,version:Ae,isDate:ja,lowercase:Q,uppercase:wb,callbacks:{$$counter:0},getTestability:ve,$$minErr:G,$$csp:da,reloadWithDebugInfo:ue});Wb=ye(y);Wb("ng",["ngLocale"],["$provide",function(a){a.provider({$$sanitizeUri:Be});a.provider("$compile",Kc).directive({a:Ce,
input:Lc,textarea:Lc,form:De,script:Ee,select:Fe,option:Ge,ngBind:He,ngBindHtml:Ie,ngBindTemplate:Je,ngClass:Ke,ngClassEven:Le,ngClassOdd:Me,ngCloak:Ne,ngController:Oe,ngForm:Pe,ngHide:Qe,ngIf:Re,ngInclude:Se,ngInit:Te,ngNonBindable:Ue,ngPluralize:Ve,ngRepeat:We,ngShow:Xe,ngStyle:Ye,ngSwitch:Ze,ngSwitchWhen:$e,ngSwitchDefault:af,ngOptions:bf,ngTransclude:cf,ngModel:df,ngList:ef,ngChange:ff,pattern:Mc,ngPattern:Mc,required:Nc,ngRequired:Nc,minlength:Oc,ngMinlength:Oc,maxlength:Pc,ngMaxlength:Pc,ngValue:gf,
ngModelOptions:hf}).directive({ngInclude:jf}).directive(xb).directive(Qc);a.provider({$anchorScroll:kf,$animate:lf,$animateCss:mf,$$animateJs:nf,$$animateQueue:of,$$AnimateRunner:pf,$$animateAsyncRun:qf,$browser:rf,$cacheFactory:sf,$controller:tf,$document:uf,$exceptionHandler:vf,$filter:Rc,$$forceReflow:wf,$interpolate:xf,$interval:yf,$http:zf,$httpParamSerializer:Af,$httpParamSerializerJQLike:Bf,$httpBackend:Cf,$xhrFactory:Df,$jsonpCallbacks:Ef,$location:Ff,$log:Gf,$parse:Hf,$rootScope:If,$q:Jf,
$$q:Kf,$sce:Lf,$sceDelegate:Mf,$sniffer:Nf,$templateCache:Of,$templateRequest:Pf,$$testability:Qf,$timeout:Rf,$window:Sf,$$rAF:Tf,$$jqLite:Uf,$$HashMap:Vf,$$cookieReader:Wf})}])}function hb(a){return a.replace(Xf,function(a,d,c,f){return f?c.toUpperCase():c}).replace(Yf,"Moz$1")}function Sc(a){a=a.nodeType;return 1===a||!a||9===a}function Tc(a,b){var d,c,f=b.createDocumentFragment(),e=[];if(Xb.test(a)){d=f.appendChild(b.createElement("div"));c=(Zf.exec(a)||["",""])[1].toLowerCase();c=pa[c]||pa._default;
d.innerHTML=c[1]+a.replace($f,"<$1></$2>")+c[2];for(c=c[0];c--;)d=d.lastChild;e=cb(e,d.childNodes);d=f.firstChild;d.textContent=""}else e.push(b.createTextNode(a));f.textContent="";f.innerHTML="";q(e,function(a){f.appendChild(a)});return f}function Uc(a,b){var d=a.parentNode;d&&d.replaceChild(b,a);b.appendChild(a)}function W(a){if(a instanceof W)return a;var b;D(a)&&(a=Y(a),b=!0);if(!(this instanceof W)){if(b&&"<"!==a.charAt(0))throw Yb("nosel");return new W(a)}if(b){b=y.document;var d;a=(d=ag.exec(a))?
[b.createElement(d[1])]:(d=Tc(a,b))?d.childNodes:[]}Vc(this,a)}function Zb(a){return a.cloneNode(!0)}function yb(a,b){b||ib(a);if(a.querySelectorAll)for(var d=a.querySelectorAll("*"),c=0,f=d.length;c<f;c++)ib(d[c])}function Wc(a,b,d,c){if(x(c))throw Yb("offargs");var f=(c=zb(a))&&c.events,e=c&&c.handle;if(e)if(b){var g=function(b){var c=f[b];x(d)&&bb(c||[],d);x(d)&&c&&0<c.length||(a.removeEventListener(b,e,!1),delete f[b])};q(b.split(" "),function(a){g(a);Ab[a]&&g(Ab[a])})}else for(b in f)"$destroy"!==
b&&a.removeEventListener(b,e,!1),delete f[b]}function ib(a,b){var d=a.ng339,c=d&&jb[d];c&&(b?delete c.data[b]:(c.handle&&(c.events.$destroy&&c.handle({},"$destroy"),Wc(a)),delete jb[d],a.ng339=void 0))}function zb(a,b){var d=a.ng339,d=d&&jb[d];b&&!d&&(a.ng339=d=++bg,d=jb[d]={events:{},data:{},handle:void 0});return d}function $b(a,b,d){if(Sc(a)){var c=x(d),f=!c&&b&&!E(b),e=!b;a=(a=zb(a,!f))&&a.data;if(c)a[b]=d;else{if(e)return a;if(f)return a&&a[b];R(a,b)}}}function Bb(a,b){return a.getAttribute?
-1<(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").indexOf(" "+b+" "):!1}function Cb(a,b){b&&a.setAttribute&&q(b.split(" "),function(b){a.setAttribute("class",Y((" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ").replace(" "+Y(b)+" "," ")))})}function Db(a,b){if(b&&a.setAttribute){var d=(" "+(a.getAttribute("class")||"")+" ").replace(/[\n\t]/g," ");q(b.split(" "),function(a){a=Y(a);-1===d.indexOf(" "+a+" ")&&(d+=a+" ")});a.setAttribute("class",Y(d))}}function Vc(a,b){if(b)if(b.nodeType)a[a.length++]=
b;else{var d=b.length;if("number"===typeof d&&b.window!==b){if(d)for(var c=0;c<d;c++)a[a.length++]=b[c]}else a[a.length++]=b}}function Xc(a,b){return Eb(a,"$"+(b||"ngController")+"Controller")}function Eb(a,b,d){9===a.nodeType&&(a=a.documentElement);for(b=I(b)?b:[b];a;){for(var c=0,f=b.length;c<f;c++)if(x(d=F.data(a,b[c])))return d;a=a.parentNode||11===a.nodeType&&a.host}}function Yc(a){for(yb(a,!0);a.firstChild;)a.removeChild(a.firstChild)}function Fb(a,b){b||yb(a);var d=a.parentNode;d&&d.removeChild(a)}
function cg(a,b){b=b||y;if("complete"===b.document.readyState)b.setTimeout(a);else F(b).on("load",a)}function Zc(a,b){var d=Gb[b.toLowerCase()];return d&&$c[wa(a)]&&d}function dg(a,b){var d=function(c,d){c.isDefaultPrevented=function(){return c.defaultPrevented};var e=b[d||c.type],g=e?e.length:0;if(g){if(z(c.immediatePropagationStopped)){var h=c.stopImmediatePropagation;c.stopImmediatePropagation=function(){c.immediatePropagationStopped=!0;c.stopPropagation&&c.stopPropagation();h&&h.call(c)}}c.isImmediatePropagationStopped=
function(){return!0===c.immediatePropagationStopped};var k=e.specialHandlerWrapper||eg;1<g&&(e=ka(e));for(var l=0;l<g;l++)c.isImmediatePropagationStopped()||k(a,c,e[l])}};d.elem=a;return d}function eg(a,b,d){d.call(a,b)}function fg(a,b,d){var c=b.relatedTarget;c&&(c===a||gg.call(a,c))||d.call(a,b)}function Uf(){this.$get=function(){return R(W,{hasClass:function(a,b){a.attr&&(a=a[0]);return Bb(a,b)},addClass:function(a,b){a.attr&&(a=a[0]);return Db(a,b)},removeClass:function(a,b){a.attr&&(a=a[0]);
return Cb(a,b)}})}}function Aa(a,b){var d=a&&a.$$hashKey;if(d)return"function"===typeof d&&(d=a.$$hashKey()),d;d=typeof a;return d="function"===d||"object"===d&&null!==a?a.$$hashKey=d+":"+(b||ke)():d+":"+a}function Sa(a,b){if(b){var d=0;this.nextUid=function(){return++d}}q(a,this.put,this)}function ad(a){a=(Function.prototype.toString.call(a)+" ").replace(hg,"");return a.match(ig)||a.match(jg)}function kg(a){return(a=ad(a))?"function("+(a[1]||"").replace(/[\s\r\n]+/," ")+")":"fn"}function fb(a,b){function d(a){return function(b,
c){if(E(b))q(b,zc(a));else return a(b,c)}}function c(a,b){Ra(a,"service");if(C(b)||I(b))b=r.instantiate(b);if(!b.$get)throw Ba("pget",a);return n[a+"Provider"]=b}function f(a,b){return function(){var c=u.invoke(b,this);if(z(c))throw Ba("undef",a);return c}}function e(a,b,d){return c(a,{$get:!1!==d?f(a,b):b})}function g(a){gb(z(a)||I(a),"modulesToLoad","not an array");var b=[],c;q(a,function(a){function d(a){var b,c;b=0;for(c=a.length;b<c;b++){var e=a[b],f=r.get(e[0]);f[e[1]].apply(f,e[2])}}if(!m.get(a)){m.put(a,
!0);try{D(a)?(c=Wb(a),b=b.concat(g(c.requires)).concat(c._runBlocks),d(c._invokeQueue),d(c._configBlocks)):C(a)?b.push(r.invoke(a)):I(a)?b.push(r.invoke(a)):Qa(a,"module")}catch(e){throw I(a)&&(a=a[a.length-1]),e.message&&e.stack&&-1===e.stack.indexOf(e.message)&&(e=e.message+"\n"+e.stack),Ba("modulerr",a,e.stack||e.message||e);}}});return b}function h(a,c){function d(b,e){if(a.hasOwnProperty(b)){if(a[b]===k)throw Ba("cdep",b+" <- "+l.join(" <- "));return a[b]}try{return l.unshift(b),a[b]=k,a[b]=
c(b,e),a[b]}catch(f){throw a[b]===k&&delete a[b],f;}finally{l.shift()}}function e(a,c,f){var g=[];a=fb.$$annotate(a,b,f);for(var h=0,k=a.length;h<k;h++){var l=a[h];if("string"!==typeof l)throw Ba("itkn",l);g.push(c&&c.hasOwnProperty(l)?c[l]:d(l,f))}return g}return{invoke:function(a,b,c,d){"string"===typeof c&&(d=c,c=null);c=e(a,c,d);I(a)&&(a=a[a.length-1]);d=11>=Ia?!1:"function"===typeof a&&/^(?:class\b|constructor\()/.test(Function.prototype.toString.call(a)+" ");return d?(c.unshift(null),new (Function.prototype.bind.apply(a,
c))):a.apply(b,c)},instantiate:function(a,b,c){var d=I(a)?a[a.length-1]:a;a=e(a,b,c);a.unshift(null);return new (Function.prototype.bind.apply(d,a))},get:d,annotate:fb.$$annotate,has:function(b){return n.hasOwnProperty(b+"Provider")||a.hasOwnProperty(b)}}}b=!0===b;var k={},l=[],m=new Sa([],!0),n={$provide:{provider:d(c),factory:d(e),service:d(function(a,b){return e(a,["$injector",function(a){return a.instantiate(b)}])}),value:d(function(a,b){return e(a,ha(b),!1)}),constant:d(function(a,b){Ra(a,"constant");
n[a]=b;s[a]=b}),decorator:function(a,b){var c=r.get(a+"Provider"),d=c.$get;c.$get=function(){var a=u.invoke(d,c);return u.invoke(b,null,{$delegate:a})}}}},r=n.$injector=h(n,function(a,b){$.isString(b)&&l.push(b);throw Ba("unpr",l.join(" <- "));}),s={},H=h(s,function(a,b){var c=r.get(a+"Provider",b);return u.invoke(c.$get,c,void 0,a)}),u=H;n.$injectorProvider={$get:ha(H)};var p=g(a),u=H.get("$injector");u.strictDi=b;q(p,function(a){a&&u.invoke(a)});return u}function kf(){var a=!0;this.disableAutoScrolling=
function(){a=!1};this.$get=["$window","$location","$rootScope",function(b,d,c){function f(a){var b=null;Array.prototype.some.call(a,function(a){if("a"===wa(a))return b=a,!0});return b}function e(a){if(a){a.scrollIntoView();var c;c=g.yOffset;C(c)?c=c():Sb(c)?(c=c[0],c="fixed"!==b.getComputedStyle(c).position?0:c.getBoundingClientRect().bottom):ba(c)||(c=0);c&&(a=a.getBoundingClientRect().top,b.scrollBy(0,a-c))}else b.scrollTo(0,0)}function g(a){a=D(a)?a:ba(a)?a.toString():d.hash();var b;a?(b=h.getElementById(a))?
e(b):(b=f(h.getElementsByName(a)))?e(b):"top"===a&&e(null):e(null)}var h=b.document;a&&c.$watch(function(){return d.hash()},function(a,b){a===b&&""===a||cg(function(){c.$evalAsync(g)})});return g}]}function kb(a,b){if(!a&&!b)return"";if(!a)return b;if(!b)return a;I(a)&&(a=a.join(" "));I(b)&&(b=b.join(" "));return a+" "+b}function lg(a){D(a)&&(a=a.split(" "));var b=V();q(a,function(a){a.length&&(b[a]=!0)});return b}function Ca(a){return E(a)?a:{}}function mg(a,b,d,c){function f(a){try{a.apply(null,
va.call(arguments,1))}finally{if(H--,0===H)for(;u.length;)try{u.pop()()}catch(b){d.error(b)}}}function e(){N=null;g();h()}function g(){p=L();p=z(p)?null:p;na(p,J)&&(p=J);J=p}function h(){if(A!==k.url()||K!==p)A=k.url(),K=p,q(O,function(a){a(k.url(),p)})}var k=this,l=a.location,m=a.history,n=a.setTimeout,r=a.clearTimeout,s={};k.isMock=!1;var H=0,u=[];k.$$completeOutstandingRequest=f;k.$$incOutstandingRequestCount=function(){H++};k.notifyWhenNoOutstandingRequests=function(a){0===H?a():u.push(a)};var p,
K,A=l.href,v=b.find("base"),N=null,L=c.history?function(){try{return m.state}catch(a){}}:w;g();K=p;k.url=function(b,d,e){z(e)&&(e=null);l!==a.location&&(l=a.location);m!==a.history&&(m=a.history);if(b){var f=K===e;if(A===b&&(!c.history||f))return k;var h=A&&Ga(A)===Ga(b);A=b;K=e;!c.history||h&&f?(h||(N=b),d?l.replace(b):h?(d=l,e=b.indexOf("#"),e=-1===e?"":b.substr(e),d.hash=e):l.href=b,l.href!==b&&(N=b)):(m[d?"replaceState":"pushState"](e,"",b),g(),K=p);N&&(N=b);return k}return N||l.href.replace(/%27/g,
"'")};k.state=function(){return p};var O=[],M=!1,J=null;k.onUrlChange=function(b){if(!M){if(c.history)F(a).on("popstate",e);F(a).on("hashchange",e);M=!0}O.push(b);return b};k.$$applicationDestroyed=function(){F(a).off("hashchange popstate",e)};k.$$checkUrlChange=h;k.baseHref=function(){var a=v.attr("href");return a?a.replace(/^(https?:)?\/\/[^/]*/,""):""};k.defer=function(a,b){var c;H++;c=n(function(){delete s[c];f(a)},b||0);s[c]=!0;return c};k.defer.cancel=function(a){return s[a]?(delete s[a],r(a),
f(w),!0):!1}}function rf(){this.$get=["$window","$log","$sniffer","$document",function(a,b,d,c){return new mg(a,c,b,d)}]}function sf(){this.$get=function(){function a(a,c){function f(a){a!==n&&(r?r===a&&(r=a.n):r=a,e(a.n,a.p),e(a,n),n=a,n.n=null)}function e(a,b){a!==b&&(a&&(a.p=b),b&&(b.n=a))}if(a in b)throw G("$cacheFactory")("iid",a);var g=0,h=R({},c,{id:a}),k=V(),l=c&&c.capacity||Number.MAX_VALUE,m=V(),n=null,r=null;return b[a]={put:function(a,b){if(!z(b)){if(l<Number.MAX_VALUE){var c=m[a]||(m[a]=
{key:a});f(c)}a in k||g++;k[a]=b;g>l&&this.remove(r.key);return b}},get:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;f(b)}return k[a]},remove:function(a){if(l<Number.MAX_VALUE){var b=m[a];if(!b)return;b===n&&(n=b.p);b===r&&(r=b.n);e(b.n,b.p);delete m[a]}a in k&&(delete k[a],g--)},removeAll:function(){k=V();g=0;m=V();n=r=null},destroy:function(){m=h=k=null;delete b[a]},info:function(){return R({},h,{size:g})}}}var b={};a.info=function(){var a={};q(b,function(b,f){a[f]=b.info()});return a};
a.get=function(a){return b[a]};return a}}function Of(){this.$get=["$cacheFactory",function(a){return a("templates")}]}function Kc(a,b){function d(a,b,c){var d=/^\s*([@&<]|=(\*?))(\??)\s*([\w$]*)\s*$/,e=V();q(a,function(a,f){if(a in n)e[f]=n[a];else{var g=a.match(d);if(!g)throw fa("iscp",b,f,a,c?"controller bindings definition":"isolate scope definition");e[f]={mode:g[1][0],collection:"*"===g[2],optional:"?"===g[3],attrName:g[4]||f};g[4]&&(n[a]=e[f])}});return e}function c(a){var b=a.charAt(0);if(!b||
b!==Q(b))throw fa("baddir",a);if(a!==a.trim())throw fa("baddir",a);}function f(a){var b=a.require||a.controller&&a.name;!I(b)&&E(b)&&q(b,function(a,c){var d=a.match(l);a.substring(d[0].length)||(b[c]=d[0]+c)});return b}var e={},g=/^\s*directive:\s*([\w-]+)\s+(.*)$/,h=/(([\w-]+)(?::([^;]+))?;?)/,k=oe("ngSrc,ngSrcset,src,srcset"),l=/^(?:(\^\^?)?(\?)?(\^\^?)?)?/,m=/^(on[a-z]+|formaction)$/,n=V();this.directive=function A(b,d){gb(b,"name");Ra(b,"directive");D(b)?(c(b),gb(d,"directiveFactory"),e.hasOwnProperty(b)||
(e[b]=[],a.factory(b+"Directive",["$injector","$exceptionHandler",function(a,c){var d=[];q(e[b],function(e,g){try{var h=a.invoke(e);C(h)?h={compile:ha(h)}:!h.compile&&h.link&&(h.compile=ha(h.link));h.priority=h.priority||0;h.index=g;h.name=h.name||b;h.require=f(h);var k=h,l=h.restrict;if(l&&(!D(l)||!/[EACM]/.test(l)))throw fa("badrestrict",l,b);k.restrict=l||"EA";h.$$moduleName=e.$$moduleName;d.push(h)}catch(m){c(m)}});return d}])),e[b].push(d)):q(b,zc(A));return this};this.component=function(a,b){function c(a){function e(b){return C(b)||
I(b)?function(c,d){return a.invoke(b,this,{$element:c,$attrs:d})}:b}var f=b.template||b.templateUrl?b.template:"",g={controller:d,controllerAs:ng(b.controller)||b.controllerAs||"$ctrl",template:e(f),templateUrl:e(b.templateUrl),transclude:b.transclude,scope:{},bindToController:b.bindings||{},restrict:"E",require:b.require};q(b,function(a,b){"$"===b.charAt(0)&&(g[b]=a)});return g}var d=b.controller||function(){};q(b,function(a,b){"$"===b.charAt(0)&&(c[b]=a,C(d)&&(d[b]=a))});c.$inject=["$injector"];
return this.directive(a,c)};this.aHrefSanitizationWhitelist=function(a){return x(a)?(b.aHrefSanitizationWhitelist(a),this):b.aHrefSanitizationWhitelist()};this.imgSrcSanitizationWhitelist=function(a){return x(a)?(b.imgSrcSanitizationWhitelist(a),this):b.imgSrcSanitizationWhitelist()};var r=!0;this.debugInfoEnabled=function(a){return x(a)?(r=a,this):r};var s=!0;this.preAssignBindingsEnabled=function(a){return x(a)?(s=a,this):s};var H=10;this.onChangesTtl=function(a){return arguments.length?(H=a,this):
H};var u=!0;this.commentDirectivesEnabled=function(a){return arguments.length?(u=a,this):u};var p=!0;this.cssClassDirectivesEnabled=function(a){return arguments.length?(p=a,this):p};this.$get=["$injector","$interpolate","$exceptionHandler","$templateRequest","$parse","$controller","$rootScope","$sce","$animate","$$sanitizeUri",function(a,b,c,f,n,M,J,B,T,S){function P(){try{if(!--xa)throw da=void 0,fa("infchng",H);J.$apply(function(){for(var a=[],b=0,c=da.length;b<c;++b)try{da[b]()}catch(d){a.push(d)}da=
void 0;if(a.length)throw a;})}finally{xa++}}function t(a,b){if(b){var c=Object.keys(b),d,e,f;d=0;for(e=c.length;d<e;d++)f=c[d],this[f]=b[f]}else this.$attr={};this.$$element=a}function qa(a,b,c){ta.innerHTML="<span "+b+">";b=ta.firstChild.attributes;var d=b[0];b.removeNamedItem(d.name);d.value=c;a.attributes.setNamedItem(d)}function Ja(a,b){try{a.addClass(b)}catch(c){}}function ca(a,b,c,d,e){a instanceof F||(a=F(a));for(var f=/\S+/,g=0,h=a.length;g<h;g++){var k=a[g];k.nodeType===La&&k.nodeValue.match(f)&&
Uc(k,a[g]=y.document.createElement("span"))}var l=Ma(a,b,a,c,d,e);ca.$$addScopeClass(a);var m=null;return function(b,c,d){gb(b,"scope");e&&e.needsNewScope&&(b=b.$parent.$new());d=d||{};var f=d.parentBoundTranscludeFn,g=d.transcludeControllers;d=d.futureParentElement;f&&f.$$boundTransclude&&(f=f.$$boundTransclude);m||(m=(d=d&&d[0])?"foreignobject"!==wa(d)&&ma.call(d).match(/SVG/)?"svg":"html":"html");d="html"!==m?F(ha(m,F("<div>").append(a).html())):c?Pa.clone.call(a):a;if(g)for(var h in g)d.data("$"+
h+"Controller",g[h].instance);ca.$$addScopeInfo(d,b);c&&c(d,b);l&&l(b,d,d,f);return d}}function Ma(a,b,c,d,e,f){function g(a,c,d,e){var f,k,l,m,n,s,A;if(p)for(A=Array(c.length),m=0;m<h.length;m+=3)f=h[m],A[f]=c[f];else A=c;m=0;for(n=h.length;m<n;)k=A[h[m++]],c=h[m++],f=h[m++],c?(c.scope?(l=a.$new(),ca.$$addScopeInfo(F(k),l)):l=a,s=c.transcludeOnThisElement?G(a,c.transclude,e):!c.templateOnThisElement&&e?e:!e&&b?G(a,b):null,c(f,l,k,d,s)):f&&f(a,k.childNodes,void 0,e)}for(var h=[],k,l,m,n,p,s=0;s<a.length;s++){k=
new t;l=cc(a[s],[],k,0===s?d:void 0,e);(f=l.length?W(l,a[s],k,b,c,null,[],[],f):null)&&f.scope&&ca.$$addScopeClass(k.$$element);k=f&&f.terminal||!(m=a[s].childNodes)||!m.length?null:Ma(m,f?(f.transcludeOnThisElement||!f.templateOnThisElement)&&f.transclude:b);if(f||k)h.push(s,f,k),n=!0,p=p||f;f=null}return n?g:null}function G(a,b,c){function d(e,f,g,h,k){e||(e=a.$new(!1,k),e.$$transcluded=!0);return b(e,f,{parentBoundTranscludeFn:c,transcludeControllers:g,futureParentElement:h})}var e=d.$$slots=V(),
f;for(f in b.$$slots)e[f]=b.$$slots[f]?G(a,b.$$slots[f],c):null;return d}function cc(a,b,c,d,e){var f=c.$attr,g;switch(a.nodeType){case 1:g=wa(a);U(b,Da(g),"E",d,e);for(var k,l,m,n,p=a.attributes,s=0,A=p&&p.length;s<A;s++){var r=!1,u=!1;k=p[s];l=k.name;m=Y(k.value);k=Da(l);(n=Ga.test(k))&&(l=l.replace(bd,"").substr(8).replace(/_(.)/g,function(a,b){return b.toUpperCase()}));(k=k.match(Ha))&&Z(k[1])&&(r=l,u=l.substr(0,l.length-5)+"end",l=l.substr(0,l.length-6));k=Da(l.toLowerCase());f[k]=l;if(n||!c.hasOwnProperty(k))c[k]=
m,Zc(a,k)&&(c[k]=!0);pa(a,b,m,k,n);U(b,k,"A",d,e,r,u)}"input"===g&&"hidden"===a.getAttribute("type")&&a.setAttribute("autocomplete","off");if(!Fa)break;f=a.className;E(f)&&(f=f.animVal);if(D(f)&&""!==f)for(;a=h.exec(f);)k=Da(a[2]),U(b,k,"C",d,e)&&(c[k]=Y(a[3])),f=f.substr(a.index+a[0].length);break;case La:if(11===Ia)for(;a.parentNode&&a.nextSibling&&a.nextSibling.nodeType===La;)a.nodeValue+=a.nextSibling.nodeValue,a.parentNode.removeChild(a.nextSibling);ka(b,a.nodeValue);break;case 8:if(!Ea)break;
Ta(a,b,c,d,e)}b.sort(ja);return b}function Ta(a,b,c,d,e){try{var f=g.exec(a.nodeValue);if(f){var h=Da(f[1]);U(b,h,"M",d,e)&&(c[h]=Y(f[2]))}}catch(k){}}function cd(a,b,c){var d=[],e=0;if(b&&a.hasAttribute&&a.hasAttribute(b)){do{if(!a)throw fa("uterdir",b,c);1===a.nodeType&&(a.hasAttribute(b)&&e++,a.hasAttribute(c)&&e--);d.push(a);a=a.nextSibling}while(0<e)}else d.push(a);return F(d)}function dd(a,b,c){return function(d,e,f,g,h){e=cd(e[0],b,c);return a(d,e,f,g,h)}}function dc(a,b,c,d,e,f){var g;return a?
ca(b,c,d,e,f):function(){g||(g=ca(b,c,d,e,f),b=c=f=null);return g.apply(this,arguments)}}function W(a,b,d,e,f,g,h,k,l){function m(a,b,c,d){if(a){c&&(a=dd(a,c,d));a.require=v.require;a.directiveName=S;if(u===v||v.$$isolateScope)a=ra(a,{isolateScope:!0});h.push(a)}if(b){c&&(b=dd(b,c,d));b.require=v.require;b.directiveName=S;if(u===v||v.$$isolateScope)b=ra(b,{isolateScope:!0});k.push(b)}}function n(a,e,f,g,l){function m(a,b,c,d){var e;ab(a)||(d=c,c=b,b=a,a=void 0);H&&(e=J);c||(c=H?P.parent():P);if(d){var f=
l.$$slots[d];if(f)return f(a,b,e,c,qa);if(z(f))throw fa("noslot",d,ya(P));}else return l(a,b,e,c,qa)}var p,v,B,M,T,J,S,P;b===f?(g=d,P=d.$$element):(P=F(f),g=new t(P,d));T=e;u?M=e.$new(!0):A&&(T=e.$parent);l&&(S=m,S.$$boundTransclude=l,S.isSlotFilled=function(a){return!!l.$$slots[a]});r&&(J=ba(P,g,S,r,M,e,u));u&&(ca.$$addScopeInfo(P,M,!0,!(O&&(O===u||O===u.$$originalDirective))),ca.$$addScopeClass(P,!0),M.$$isolateBindings=u.$$isolateBindings,v=la(e,g,M,M.$$isolateBindings,u),v.removeWatches&&M.$on("$destroy",
v.removeWatches));for(p in J){v=r[p];B=J[p];var L=v.$$bindings.bindToController;if(s){B.bindingInfo=L?la(T,g,B.instance,L,v):{};var ac=B();ac!==B.instance&&(B.instance=ac,P.data("$"+v.name+"Controller",ac),B.bindingInfo.removeWatches&&B.bindingInfo.removeWatches(),B.bindingInfo=la(T,g,B.instance,L,v))}else B.instance=B(),P.data("$"+v.name+"Controller",B.instance),B.bindingInfo=la(T,g,B.instance,L,v)}q(r,function(a,b){var c=a.require;a.bindToController&&!I(c)&&E(c)&&R(J[b].instance,X(b,c,P,J))});q(J,
function(a){var b=a.instance;if(C(b.$onChanges))try{b.$onChanges(a.bindingInfo.initialChanges)}catch(d){c(d)}if(C(b.$onInit))try{b.$onInit()}catch(e){c(e)}C(b.$doCheck)&&(T.$watch(function(){b.$doCheck()}),b.$doCheck());C(b.$onDestroy)&&T.$on("$destroy",function(){b.$onDestroy()})});p=0;for(v=h.length;p<v;p++)B=h[p],sa(B,B.isolateScope?M:e,P,g,B.require&&X(B.directiveName,B.require,P,J),S);var qa=e;u&&(u.template||null===u.templateUrl)&&(qa=M);a&&a(qa,f.childNodes,void 0,l);for(p=k.length-1;0<=p;p--)B=
k[p],sa(B,B.isolateScope?M:e,P,g,B.require&&X(B.directiveName,B.require,P,J),S);q(J,function(a){a=a.instance;C(a.$postLink)&&a.$postLink()})}l=l||{};for(var p=-Number.MAX_VALUE,A=l.newScopeDirective,r=l.controllerDirectives,u=l.newIsolateScopeDirective,O=l.templateDirective,M=l.nonTlbTranscludeDirective,T=!1,J=!1,H=l.hasElementTranscludeDirective,B=d.$$element=F(b),v,S,P,L=e,qa,x=!1,Ja=!1,w,y=0,D=a.length;y<D;y++){v=a[y];var Ta=v.$$start,Ma=v.$$end;Ta&&(B=cd(b,Ta,Ma));P=void 0;if(p>v.priority)break;
if(w=v.scope)v.templateUrl||(E(w)?($("new/isolated scope",u||A,v,B),u=v):$("new/isolated scope",u,v,B)),A=A||v;S=v.name;if(!x&&(v.replace&&(v.templateUrl||v.template)||v.transclude&&!v.$$tlb)){for(w=y+1;x=a[w++];)if(x.transclude&&!x.$$tlb||x.replace&&(x.templateUrl||x.template)){Ja=!0;break}x=!0}!v.templateUrl&&v.controller&&(r=r||V(),$("'"+S+"' controller",r[S],v,B),r[S]=v);if(w=v.transclude)if(T=!0,v.$$tlb||($("transclusion",M,v,B),M=v),"element"===w)H=!0,p=v.priority,P=B,B=d.$$element=F(ca.$$createComment(S,
d[S])),b=B[0],ga(f,va.call(P,0),b),P[0].$$parentNode=P[0].parentNode,L=dc(Ja,P,e,p,g&&g.name,{nonTlbTranscludeDirective:M});else{var G=V();P=F(Zb(b)).contents();if(E(w)){P=[];var Q=V(),bc=V();q(w,function(a,b){var c="?"===a.charAt(0);a=c?a.substring(1):a;Q[a]=b;G[b]=null;bc[b]=c});q(B.contents(),function(a){var b=Q[Da(wa(a))];b?(bc[b]=!0,G[b]=G[b]||[],G[b].push(a)):P.push(a)});q(bc,function(a,b){if(!a)throw fa("reqslot",b);});for(var U in G)G[U]&&(G[U]=dc(Ja,G[U],e))}B.empty();L=dc(Ja,P,e,void 0,
void 0,{needsNewScope:v.$$isolateScope||v.$$newScope});L.$$slots=G}if(v.template)if(J=!0,$("template",O,v,B),O=v,w=C(v.template)?v.template(B,d):v.template,w=Ca(w),v.replace){g=v;P=Xb.test(w)?ed(ha(v.templateNamespace,Y(w))):[];b=P[0];if(1!==P.length||1!==b.nodeType)throw fa("tplrt",S,"");ga(f,B,b);D={$attr:{}};w=cc(b,[],D);var og=a.splice(y+1,a.length-(y+1));(u||A)&&aa(w,u,A);a=a.concat(w).concat(og);ea(d,D);D=a.length}else B.html(w);if(v.templateUrl)J=!0,$("template",O,v,B),O=v,v.replace&&(g=v),
n=ia(a.splice(y,a.length-y),B,d,f,T&&L,h,k,{controllerDirectives:r,newScopeDirective:A!==v&&A,newIsolateScopeDirective:u,templateDirective:O,nonTlbTranscludeDirective:M}),D=a.length;else if(v.compile)try{qa=v.compile(B,d,L);var Z=v.$$originalDirective||v;C(qa)?m(null,db(Z,qa),Ta,Ma):qa&&m(db(Z,qa.pre),db(Z,qa.post),Ta,Ma)}catch(da){c(da,ya(B))}v.terminal&&(n.terminal=!0,p=Math.max(p,v.priority))}n.scope=A&&!0===A.scope;n.transcludeOnThisElement=T;n.templateOnThisElement=J;n.transclude=L;l.hasElementTranscludeDirective=
H;return n}function X(a,b,c,d){var e;if(D(b)){var f=b.match(l);b=b.substring(f[0].length);var g=f[1]||f[3],f="?"===f[2];"^^"===g?c=c.parent():e=(e=d&&d[b])&&e.instance;if(!e){var h="$"+b+"Controller";e=g?c.inheritedData(h):c.data(h)}if(!e&&!f)throw fa("ctreq",b,a);}else if(I(b))for(e=[],g=0,f=b.length;g<f;g++)e[g]=X(a,b[g],c,d);else E(b)&&(e={},q(b,function(b,f){e[f]=X(a,b,c,d)}));return e||null}function ba(a,b,c,d,e,f,g){var h=V(),k;for(k in d){var l=d[k],m={$scope:l===g||l.$$isolateScope?e:f,$element:a,
$attrs:b,$transclude:c},n=l.controller;"@"===n&&(n=b[l.name]);m=M(n,m,!0,l.controllerAs);h[l.name]=m;a.data("$"+l.name+"Controller",m.instance)}return h}function aa(a,b,c){for(var d=0,e=a.length;d<e;d++)a[d]=Tb(a[d],{$$isolateScope:b,$$newScope:c})}function U(b,c,f,g,h,k,l){if(c===h)return null;var m=null;if(e.hasOwnProperty(c)){h=a.get(c+"Directive");for(var n=0,p=h.length;n<p;n++)if(c=h[n],(z(g)||g>c.priority)&&-1!==c.restrict.indexOf(f)){k&&(c=Tb(c,{$$start:k,$$end:l}));if(!c.$$bindings){var s=
m=c,r=c.name,v={isolateScope:null,bindToController:null};E(s.scope)&&(!0===s.bindToController?(v.bindToController=d(s.scope,r,!0),v.isolateScope={}):v.isolateScope=d(s.scope,r,!1));E(s.bindToController)&&(v.bindToController=d(s.bindToController,r,!0));if(v.bindToController&&!s.controller)throw fa("noctrl",r);m=m.$$bindings=v;E(m.isolateScope)&&(c.$$isolateBindings=m.isolateScope)}b.push(c);m=c}}return m}function Z(b){if(e.hasOwnProperty(b))for(var c=a.get(b+"Directive"),d=0,f=c.length;d<f;d++)if(b=
c[d],b.multiElement)return!0;return!1}function ea(a,b){var c=b.$attr,d=a.$attr;q(a,function(d,e){"$"!==e.charAt(0)&&(b[e]&&b[e]!==d&&(d+=("style"===e?";":" ")+b[e]),a.$set(e,d,!0,c[e]))});q(b,function(b,e){a.hasOwnProperty(e)||"$"===e.charAt(0)||(a[e]=b,"class"!==e&&"style"!==e&&(d[e]=c[e]))})}function ia(a,b,c,d,e,g,h,k){var l=[],m,n,p=b[0],s=a.shift(),A=Tb(s,{templateUrl:null,transclude:null,replace:null,$$originalDirective:s}),r=C(s.templateUrl)?s.templateUrl(b,c):s.templateUrl,v=s.templateNamespace;
b.empty();f(r).then(function(f){var u,B;f=Ca(f);if(s.replace){f=Xb.test(f)?ed(ha(v,Y(f))):[];u=f[0];if(1!==f.length||1!==u.nodeType)throw fa("tplrt",s.name,r);f={$attr:{}};ga(d,b,u);var O=cc(u,[],f);E(s.scope)&&aa(O,!0);a=O.concat(a);ea(c,f)}else u=p,b.html(f);a.unshift(A);m=W(a,u,c,e,b,s,g,h,k);q(d,function(a,c){a===u&&(d[c]=b[0])});for(n=Ma(b[0].childNodes,e);l.length;){f=l.shift();B=l.shift();var M=l.shift(),T=l.shift(),O=b[0];if(!f.$$destroyed){if(B!==p){var J=B.className;k.hasElementTranscludeDirective&&
s.replace||(O=Zb(u));ga(M,F(B),O);Ja(F(O),J)}B=m.transcludeOnThisElement?G(f,m.transclude,T):T;m(n,f,O,d,B)}}l=null});return function(a,b,c,d,e){a=e;b.$$destroyed||(l?l.push(b,c,d,a):(m.transcludeOnThisElement&&(a=G(b,m.transclude,e)),m(n,b,c,d,a)))}}function ja(a,b){var c=b.priority-a.priority;return 0!==c?c:a.name!==b.name?a.name<b.name?-1:1:a.index-b.index}function $(a,b,c,d){function e(a){return a?" (module: "+a+")":""}if(b)throw fa("multidir",b.name,e(b.$$moduleName),c.name,e(c.$$moduleName),
a,ya(d));}function ka(a,c){var d=b(c,!0);d&&a.push({priority:0,compile:function(a){a=a.parent();var b=!!a.length;b&&ca.$$addBindingClass(a);return function(a,c){var e=c.parent();b||ca.$$addBindingClass(e);ca.$$addBindingInfo(e,d.expressions);a.$watch(d,function(a){c[0].nodeValue=a})}}})}function ha(a,b){a=Q(a||"html");switch(a){case "svg":case "math":var c=y.document.createElement("div");c.innerHTML="<"+a+">"+b+"</"+a+">";return c.childNodes[0].childNodes;default:return b}}function oa(a,b){if("srcdoc"===
b)return B.HTML;var c=wa(a);if("src"===b||"ngSrc"===b){if(-1===["img","video","audio","source","track"].indexOf(c))return B.RESOURCE_URL}else if("xlinkHref"===b||"form"===c&&"action"===b)return B.RESOURCE_URL}function pa(a,c,d,e,f){var g=oa(a,e),h=k[e]||f,l=b(d,!f,g,h);if(l){if("multiple"===e&&"select"===wa(a))throw fa("selmulti",ya(a));c.push({priority:100,compile:function(){return{pre:function(a,c,f){c=f.$$observers||(f.$$observers=V());if(m.test(e))throw fa("nodomevents");var k=f[e];k!==d&&(l=
k&&b(k,!0,g,h),d=k);l&&(f[e]=l(a),(c[e]||(c[e]=[])).$$inter=!0,(f.$$observers&&f.$$observers[e].$$scope||a).$watch(l,function(a,b){"class"===e&&a!==b?f.$updateClass(a,b):f.$set(e,a)}))}}}})}}function ga(a,b,c){var d=b[0],e=b.length,f=d.parentNode,g,h;if(a)for(g=0,h=a.length;g<h;g++)if(a[g]===d){a[g++]=c;h=g+e-1;for(var k=a.length;g<k;g++,h++)h<k?a[g]=a[h]:delete a[g];a.length-=e-1;a.context===d&&(a.context=c);break}f&&f.replaceChild(c,d);a=y.document.createDocumentFragment();for(g=0;g<e;g++)a.appendChild(b[g]);
F.hasData(d)&&(F.data(c,F.data(d)),F(d).off("$destroy"));F.cleanData(a.querySelectorAll("*"));for(g=1;g<e;g++)delete b[g];b[0]=c;b.length=1}function ra(a,b){return R(function(){return a.apply(null,arguments)},a,b)}function sa(a,b,d,e,f,g){try{a(b,d,e,f,g)}catch(h){c(h,ya(d))}}function la(a,c,d,e,f){function g(b,c,e){!C(d.$onChanges)||c===e||c!==c&&e!==e||(da||(a.$$postDigest(P),da=[]),m||(m={},da.push(h)),m[b]&&(e=m[b].previousValue),m[b]=new Hb(e,c))}function h(){d.$onChanges(m);m=void 0}var k=[],
l={},m;q(e,function(e,h){var m=e.attrName,p=e.optional,s,A,r,u;switch(e.mode){case "@":p||ua.call(c,m)||(d[h]=c[m]=void 0);p=c.$observe(m,function(a){if(D(a)||Ka(a))g(h,a,d[h]),d[h]=a});c.$$observers[m].$$scope=a;s=c[m];D(s)?d[h]=b(s)(a):Ka(s)&&(d[h]=s);l[h]=new Hb(ec,d[h]);k.push(p);break;case "=":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;A=n(c[m]);u=A.literal?na:function(a,b){return a===b||a!==a&&b!==b};r=A.assign||function(){s=d[h]=A(a);throw fa("nonassign",c[m],m,f.name);};s=
d[h]=A(a);p=function(b){u(b,d[h])||(u(b,s)?r(a,b=d[h]):d[h]=b);return s=b};p.$stateful=!0;p=e.collection?a.$watchCollection(c[m],p):a.$watch(n(c[m],p),null,A.literal);k.push(p);break;case "<":if(!ua.call(c,m)){if(p)break;c[m]=void 0}if(p&&!c[m])break;A=n(c[m]);var B=A.literal,M=d[h]=A(a);l[h]=new Hb(ec,d[h]);p=a.$watch(A,function(a,b){if(b===a){if(b===M||B&&na(b,M))return;b=M}g(h,a,b);d[h]=a},B);k.push(p);break;case "&":A=c.hasOwnProperty(m)?n(c[m]):w;if(A===w&&p)break;d[h]=function(b){return A(a,
b)}}});return{initialChanges:l,removeWatches:k.length&&function(){for(var a=0,b=k.length;a<b;++a)k[a]()}}}var za=/^\w/,ta=y.document.createElement("div"),Ea=u,Fa=p,xa=H,da;t.prototype={$normalize:Da,$addClass:function(a){a&&0<a.length&&T.addClass(this.$$element,a)},$removeClass:function(a){a&&0<a.length&&T.removeClass(this.$$element,a)},$updateClass:function(a,b){var c=fd(a,b);c&&c.length&&T.addClass(this.$$element,c);(c=fd(b,a))&&c.length&&T.removeClass(this.$$element,c)},$set:function(a,b,d,e){var f=
Zc(this.$$element[0],a),g=gd[a],h=a;f?(this.$$element.prop(a,b),e=f):g&&(this[g]=b,h=g);this[a]=b;e?this.$attr[a]=e:(e=this.$attr[a])||(this.$attr[a]=e=Hc(a,"-"));f=wa(this.$$element);if("a"===f&&("href"===a||"xlinkHref"===a)||"img"===f&&"src"===a)this[a]=b=S(b,"src"===a);else if("img"===f&&"srcset"===a&&x(b)){for(var f="",g=Y(b),k=/(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/,k=/\s/.test(g)?k:/(,)/,g=g.split(k),k=Math.floor(g.length/2),l=0;l<k;l++)var m=2*l,f=f+S(Y(g[m]),!0),f=f+(" "+Y(g[m+1]));g=Y(g[2*
l]).split(/\s/);f+=S(Y(g[0]),!0);2===g.length&&(f+=" "+Y(g[1]));this[a]=b=f}!1!==d&&(null===b||z(b)?this.$$element.removeAttr(e):za.test(e)?this.$$element.attr(e,b):qa(this.$$element[0],e,b));(a=this.$$observers)&&q(a[h],function(a){try{a(b)}catch(d){c(d)}})},$observe:function(a,b){var c=this,d=c.$$observers||(c.$$observers=V()),e=d[a]||(d[a]=[]);e.push(b);J.$evalAsync(function(){e.$$inter||!c.hasOwnProperty(a)||z(c[a])||b(c[a])});return function(){bb(e,b)}}};var Aa=b.startSymbol(),Ba=b.endSymbol(),
Ca="{{"===Aa&&"}}"===Ba?$a:function(a){return a.replace(/\{\{/g,Aa).replace(/}}/g,Ba)},Ga=/^ngAttr[A-Z]/,Ha=/^(.+)Start$/;ca.$$addBindingInfo=r?function(a,b){var c=a.data("$binding")||[];I(b)?c=c.concat(b):c.push(b);a.data("$binding",c)}:w;ca.$$addBindingClass=r?function(a){Ja(a,"ng-binding")}:w;ca.$$addScopeInfo=r?function(a,b,c,d){a.data(c?d?"$isolateScopeNoTemplate":"$isolateScope":"$scope",b)}:w;ca.$$addScopeClass=r?function(a,b){Ja(a,b?"ng-isolate-scope":"ng-scope")}:w;ca.$$createComment=function(a,
b){var c="";r&&(c=" "+(a||"")+": ",b&&(c+=b+" "));return y.document.createComment(c)};return ca}]}function Hb(a,b){this.previousValue=a;this.currentValue=b}function Da(a){return hb(a.replace(bd,""))}function fd(a,b){var d="",c=a.split(/\s+/),f=b.split(/\s+/),e=0;a:for(;e<c.length;e++){for(var g=c[e],h=0;h<f.length;h++)if(g===f[h])continue a;d+=(0<d.length?" ":"")+g}return d}function ed(a){a=F(a);var b=a.length;if(1>=b)return a;for(;b--;){var d=a[b];(8===d.nodeType||d.nodeType===La&&""===d.nodeValue.trim())&&
pg.call(a,b,1)}return a}function ng(a,b){if(b&&D(b))return b;if(D(a)){var d=hd.exec(a);if(d)return d[3]}}function tf(){var a={},b=!1;this.has=function(b){return a.hasOwnProperty(b)};this.register=function(b,c){Ra(b,"controller");E(b)?R(a,b):a[b]=c};this.allowGlobals=function(){b=!0};this.$get=["$injector","$window",function(d,c){function f(a,b,c,d){if(!a||!E(a.$scope))throw G("$controller")("noscp",d,b);a.$scope[b]=c}return function(e,g,h,k){var l,m,n;h=!0===h;k&&D(k)&&(n=k);if(D(e)){k=e.match(hd);
if(!k)throw id("ctrlfmt",e);m=k[1];n=n||k[3];e=a.hasOwnProperty(m)?a[m]:Jc(g.$scope,m,!0)||(b?Jc(c,m,!0):void 0);if(!e)throw id("ctrlreg",m);Qa(e,m,!0)}if(h)return h=(I(e)?e[e.length-1]:e).prototype,l=Object.create(h||null),n&&f(g,n,l,m||e.name),R(function(){var a=d.invoke(e,l,g,m);a!==l&&(E(a)||C(a))&&(l=a,n&&f(g,n,l,m||e.name));return l},{instance:l,identifier:n});l=d.instantiate(e,g,m);n&&f(g,n,l,m||e.name);return l}}]}function uf(){this.$get=["$window",function(a){return F(a.document)}]}function vf(){this.$get=
["$log",function(a){return function(b,d){a.error.apply(a,arguments)}}]}function fc(a){return E(a)?ja(a)?a.toISOString():eb(a):a}function Af(){this.$get=function(){return function(a){if(!a)return"";var b=[];yc(a,function(a,c){null===a||z(a)||(I(a)?q(a,function(a){b.push(oa(c)+"="+oa(fc(a)))}):b.push(oa(c)+"="+oa(fc(a))))});return b.join("&")}}}function Bf(){this.$get=function(){return function(a){function b(a,f,e){null===a||z(a)||(I(a)?q(a,function(a,c){b(a,f+"["+(E(a)?c:"")+"]")}):E(a)&&!ja(a)?yc(a,
function(a,c){b(a,f+(e?"":"[")+c+(e?"":"]"))}):d.push(oa(f)+"="+oa(fc(a))))}if(!a)return"";var d=[];b(a,"",!0);return d.join("&")}}}function gc(a,b){if(D(a)){var d=a.replace(qg,"").trim();if(d){var c=b("Content-Type");(c=c&&0===c.indexOf(jd))||(c=(c=d.match(rg))&&sg[c[0]].test(d));c&&(a=Cc(d))}}return a}function kd(a){var b=V(),d;D(a)?q(a.split("\n"),function(a){d=a.indexOf(":");var f=Q(Y(a.substr(0,d)));a=Y(a.substr(d+1));f&&(b[f]=b[f]?b[f]+", "+a:a)}):E(a)&&q(a,function(a,d){var e=Q(d),g=Y(a);e&&
(b[e]=b[e]?b[e]+", "+g:g)});return b}function ld(a){var b;return function(d){b||(b=kd(a));return d?(d=b[Q(d)],void 0===d&&(d=null),d):b}}function md(a,b,d,c){if(C(c))return c(a,b,d);q(c,function(c){a=c(a,b,d)});return a}function zf(){var a=this.defaults={transformResponse:[gc],transformRequest:[function(a){return E(a)&&"[object File]"!==ma.call(a)&&"[object Blob]"!==ma.call(a)&&"[object FormData]"!==ma.call(a)?eb(a):a}],headers:{common:{Accept:"application/json, text/plain, */*"},post:ka(hc),put:ka(hc),
patch:ka(hc)},xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",paramSerializer:"$httpParamSerializer"},b=!1;this.useApplyAsync=function(a){return x(a)?(b=!!a,this):b};var d=!0;this.useLegacyPromiseExtensions=function(a){return x(a)?(d=!!a,this):d};var c=this.interceptors=[];this.$get=["$httpBackend","$$cookieReader","$cacheFactory","$rootScope","$q","$injector",function(f,e,g,h,k,l){function m(b){function c(a,b){for(var d=0,e=b.length;d<e;){var f=b[d++],g=b[d++];a=a.then(f,g)}b.length=0;
return a}function e(a,b){var c,d={};q(a,function(a,e){C(a)?(c=a(b),null!=c&&(d[e]=c)):d[e]=a});return d}function f(a){var b=R({},a);b.data=md(a.data,a.headers,a.status,g.transformResponse);a=a.status;return 200<=a&&300>a?b:k.reject(b)}if(!E(b))throw G("$http")("badreq",b);if(!D(b.url))throw G("$http")("badreq",b.url);var g=R({method:"get",transformRequest:a.transformRequest,transformResponse:a.transformResponse,paramSerializer:a.paramSerializer},b);g.headers=function(b){var c=a.headers,d=R({},b.headers),
f,g,h,c=R({},c.common,c[Q(b.method)]);a:for(f in c){g=Q(f);for(h in d)if(Q(h)===g)continue a;d[f]=c[f]}return e(d,ka(b))}(b);g.method=wb(g.method);g.paramSerializer=D(g.paramSerializer)?l.get(g.paramSerializer):g.paramSerializer;var h=[],m=[],s=k.when(g);q(H,function(a){(a.request||a.requestError)&&h.unshift(a.request,a.requestError);(a.response||a.responseError)&&m.push(a.response,a.responseError)});s=c(s,h);s=s.then(function(b){var c=b.headers,d=md(b.data,ld(c),void 0,b.transformRequest);z(d)&&
q(c,function(a,b){"content-type"===Q(b)&&delete c[b]});z(b.withCredentials)&&!z(a.withCredentials)&&(b.withCredentials=a.withCredentials);return n(b,d).then(f,f)});s=c(s,m);d?(s.success=function(a){Qa(a,"fn");s.then(function(b){a(b.data,b.status,b.headers,g)});return s},s.error=function(a){Qa(a,"fn");s.then(null,function(b){a(b.data,b.status,b.headers,g)});return s}):(s.success=nd("success"),s.error=nd("error"));return s}function n(c,d){function g(a){if(a){var c={};q(a,function(a,d){c[d]=function(c){function d(){a(c)}
b?h.$applyAsync(d):h.$$phase?d():h.$apply(d)}});return c}}function l(a,c,d,e){function f(){n(c,a,d,e)}J&&(200<=a&&300>a?J.put(S,[a,c,kd(d),e]):J.remove(S));b?h.$applyAsync(f):(f(),h.$$phase||h.$apply())}function n(a,b,d,e){b=-1<=b?b:0;(200<=b&&300>b?O.resolve:O.reject)({data:a,status:b,headers:ld(d),config:c,statusText:e})}function H(a){n(a.data,a.status,ka(a.headers()),a.statusText)}function L(){var a=m.pendingRequests.indexOf(c);-1!==a&&m.pendingRequests.splice(a,1)}var O=k.defer(),M=O.promise,
J,B,T=c.headers,S=r(c.url,c.paramSerializer(c.params));m.pendingRequests.push(c);M.then(L,L);!c.cache&&!a.cache||!1===c.cache||"GET"!==c.method&&"JSONP"!==c.method||(J=E(c.cache)?c.cache:E(a.cache)?a.cache:s);J&&(B=J.get(S),x(B)?B&&C(B.then)?B.then(H,H):I(B)?n(B[1],B[0],ka(B[2]),B[3]):n(B,200,{},"OK"):J.put(S,M));z(B)&&((B=od(c.url)?e()[c.xsrfCookieName||a.xsrfCookieName]:void 0)&&(T[c.xsrfHeaderName||a.xsrfHeaderName]=B),f(c.method,S,d,l,T,c.timeout,c.withCredentials,c.responseType,g(c.eventHandlers),
g(c.uploadEventHandlers)));return M}function r(a,b){0<b.length&&(a+=(-1===a.indexOf("?")?"?":"&")+b);return a}var s=g("$http");a.paramSerializer=D(a.paramSerializer)?l.get(a.paramSerializer):a.paramSerializer;var H=[];q(c,function(a){H.unshift(D(a)?l.get(a):l.invoke(a))});m.pendingRequests=[];(function(a){q(arguments,function(a){m[a]=function(b,c){return m(R({},c||{},{method:a,url:b}))}})})("get","delete","head","jsonp");(function(a){q(arguments,function(a){m[a]=function(b,c,d){return m(R({},d||{},
{method:a,url:b,data:c}))}})})("post","put","patch");m.defaults=a;return m}]}function Df(){this.$get=function(){return function(){return new y.XMLHttpRequest}}}function Cf(){this.$get=["$browser","$jsonpCallbacks","$document","$xhrFactory",function(a,b,d,c){return tg(a,c,a.defer,b,d[0])}]}function tg(a,b,d,c,f){function e(a,b,d){a=a.replace("JSON_CALLBACK",b);var e=f.createElement("script"),m=null;e.type="text/javascript";e.src=a;e.async=!0;m=function(a){e.removeEventListener("load",m,!1);e.removeEventListener("error",
m,!1);f.body.removeChild(e);e=null;var g=-1,s="unknown";a&&("load"!==a.type||c.wasCalled(b)||(a={type:"error"}),s=a.type,g="error"===a.type?404:200);d&&d(g,s)};e.addEventListener("load",m,!1);e.addEventListener("error",m,!1);f.body.appendChild(e);return m}return function(f,h,k,l,m,n,r,s,H,u){function p(){v&&v();N&&N.abort()}function K(b,c,e,f,g){x(O)&&d.cancel(O);v=N=null;b(c,e,f,g);a.$$completeOutstandingRequest(w)}a.$$incOutstandingRequestCount();h=h||a.url();if("jsonp"===Q(f))var A=c.createCallback(h),
v=e(h,A,function(a,b){var d=200===a&&c.getResponse(A);K(l,a,d,"",b);c.removeCallback(A)});else{var N=b(f,h);N.open(f,h,!0);q(m,function(a,b){x(a)&&N.setRequestHeader(b,a)});N.onload=function(){var a=N.statusText||"",b="response"in N?N.response:N.responseText,c=1223===N.status?204:N.status;0===c&&(c=b?200:"file"===ta(h).protocol?404:0);K(l,c,b,N.getAllResponseHeaders(),a)};f=function(){K(l,-1,null,null,"")};N.onerror=f;N.onabort=f;N.ontimeout=f;q(H,function(a,b){N.addEventListener(b,a)});q(u,function(a,
b){N.upload.addEventListener(b,a)});r&&(N.withCredentials=!0);if(s)try{N.responseType=s}catch(L){if("json"!==s)throw L;}N.send(z(k)?null:k)}if(0<n)var O=d(p,n);else n&&C(n.then)&&n.then(p)}}function xf(){var a="{{",b="}}";this.startSymbol=function(b){return b?(a=b,this):a};this.endSymbol=function(a){return a?(b=a,this):b};this.$get=["$parse","$exceptionHandler","$sce",function(d,c,f){function e(a){return"\\\\\\"+a}function g(c){return c.replace(n,a).replace(r,b)}function h(a,b,c,d){var e=a.$watch(function(a){e();
return d(a)},b,c);return e}function k(e,k,n,p){function r(a){try{var b=a;a=n?f.getTrusted(n,b):f.valueOf(b);var d;if(p&&!x(a))d=a;else if(null==a)d="";else{switch(typeof a){case "string":break;case "number":a=""+a;break;default:a=eb(a)}d=a}return d}catch(g){c(Ha.interr(e,g))}}if(!e.length||-1===e.indexOf(a)){var A;k||(k=g(e),A=ha(k),A.exp=e,A.expressions=[],A.$$watchDelegate=h);return A}p=!!p;var v,q,L=0,O=[],M=[];A=e.length;for(var J=[],B=[];L<A;)if(-1!==(v=e.indexOf(a,L))&&-1!==(q=e.indexOf(b,v+
l)))L!==v&&J.push(g(e.substring(L,v))),L=e.substring(v+l,q),O.push(L),M.push(d(L,r)),L=q+m,B.push(J.length),J.push("");else{L!==A&&J.push(g(e.substring(L)));break}n&&1<J.length&&Ha.throwNoconcat(e);if(!k||O.length){var T=function(a){for(var b=0,c=O.length;b<c;b++){if(p&&z(a[b]))return;J[B[b]]=a[b]}return J.join("")};return R(function(a){var b=0,d=O.length,f=Array(d);try{for(;b<d;b++)f[b]=M[b](a);return T(f)}catch(g){c(Ha.interr(e,g))}},{exp:e,expressions:O,$$watchDelegate:function(a,b){var c;return a.$watchGroup(M,
function(d,e){var f=T(d);C(b)&&b.call(this,f,d!==e?c:f,a);c=f})}})}}var l=a.length,m=b.length,n=new RegExp(a.replace(/./g,e),"g"),r=new RegExp(b.replace(/./g,e),"g");k.startSymbol=function(){return a};k.endSymbol=function(){return b};return k}]}function yf(){this.$get=["$rootScope","$window","$q","$$q","$browser",function(a,b,d,c,f){function e(e,k,l,m){function n(){r?e.apply(null,s):e(p)}var r=4<arguments.length,s=r?va.call(arguments,4):[],H=b.setInterval,u=b.clearInterval,p=0,K=x(m)&&!m,A=(K?c:d).defer(),
v=A.promise;l=x(l)?l:0;v.$$intervalId=H(function(){K?f.defer(n):a.$evalAsync(n);A.notify(p++);0<l&&p>=l&&(A.resolve(p),u(v.$$intervalId),delete g[v.$$intervalId]);K||a.$apply()},k);g[v.$$intervalId]=A;return v}var g={};e.cancel=function(a){return a&&a.$$intervalId in g?(g[a.$$intervalId].reject("canceled"),b.clearInterval(a.$$intervalId),delete g[a.$$intervalId],!0):!1};return e}]}function ic(a){a=a.split("/");for(var b=a.length;b--;)a[b]=tb(a[b]);return a.join("/")}function pd(a,b){var d=ta(a);b.$$protocol=
d.protocol;b.$$host=d.hostname;b.$$port=Z(d.port)||ug[d.protocol]||null}function qd(a,b){if(vg.test(a))throw lb("badpath",a);var d="/"!==a.charAt(0);d&&(a="/"+a);var c=ta(a);b.$$path=decodeURIComponent(d&&"/"===c.pathname.charAt(0)?c.pathname.substring(1):c.pathname);b.$$search=Fc(c.search);b.$$hash=decodeURIComponent(c.hash);b.$$path&&"/"!==b.$$path.charAt(0)&&(b.$$path="/"+b.$$path)}function ra(a,b){if(b.slice(0,a.length)===a)return b.substr(a.length)}function Ga(a){var b=a.indexOf("#");return-1===
b?a:a.substr(0,b)}function mb(a){return a.replace(/(#.+)|#$/,"$1")}function jc(a,b,d){this.$$html5=!0;d=d||"";pd(a,this);this.$$parse=function(a){var d=ra(b,a);if(!D(d))throw lb("ipthprfx",a,b);qd(d,this);this.$$path||(this.$$path="/");this.$$compose()};this.$$compose=function(){var a=Vb(this.$$search),d=this.$$hash?"#"+tb(this.$$hash):"";this.$$url=ic(this.$$path)+(a?"?"+a:"")+d;this.$$absUrl=b+this.$$url.substr(1)};this.$$parseLinkUrl=function(c,f){if(f&&"#"===f[0])return this.hash(f.slice(1)),
!0;var e,g;x(e=ra(a,c))?(g=e,g=d&&x(e=ra(d,e))?b+(ra("/",e)||e):a+g):x(e=ra(b,c))?g=b+e:b===c+"/"&&(g=b);g&&this.$$parse(g);return!!g}}function kc(a,b,d){pd(a,this);this.$$parse=function(c){var f=ra(a,c)||ra(b,c),e;z(f)||"#"!==f.charAt(0)?this.$$html5?e=f:(e="",z(f)&&(a=c,this.replace())):(e=ra(d,f),z(e)&&(e=f));qd(e,this);c=this.$$path;var f=a,g=/^\/[A-Z]:(\/.*)/;e.slice(0,f.length)===f&&(e=e.replace(f,""));g.exec(e)||(c=(e=g.exec(c))?e[1]:c);this.$$path=c;this.$$compose()};this.$$compose=function(){var b=
Vb(this.$$search),f=this.$$hash?"#"+tb(this.$$hash):"";this.$$url=ic(this.$$path)+(b?"?"+b:"")+f;this.$$absUrl=a+(this.$$url?d+this.$$url:"")};this.$$parseLinkUrl=function(b,d){return Ga(a)===Ga(b)?(this.$$parse(b),!0):!1}}function rd(a,b,d){this.$$html5=!0;kc.apply(this,arguments);this.$$parseLinkUrl=function(c,f){if(f&&"#"===f[0])return this.hash(f.slice(1)),!0;var e,g;a===Ga(c)?e=c:(g=ra(b,c))?e=a+d+g:b===c+"/"&&(e=b);e&&this.$$parse(e);return!!e};this.$$compose=function(){var b=Vb(this.$$search),
f=this.$$hash?"#"+tb(this.$$hash):"";this.$$url=ic(this.$$path)+(b?"?"+b:"")+f;this.$$absUrl=a+d+this.$$url}}function Ib(a){return function(){return this[a]}}function sd(a,b){return function(d){if(z(d))return this[a];this[a]=b(d);this.$$compose();return this}}function Ff(){var a="",b={enabled:!1,requireBase:!0,rewriteLinks:!0};this.hashPrefix=function(b){return x(b)?(a=b,this):a};this.html5Mode=function(a){if(Ka(a))return b.enabled=a,this;if(E(a)){Ka(a.enabled)&&(b.enabled=a.enabled);Ka(a.requireBase)&&
(b.requireBase=a.requireBase);if(Ka(a.rewriteLinks)||D(a.rewriteLinks))b.rewriteLinks=a.rewriteLinks;return this}return b};this.$get=["$rootScope","$browser","$sniffer","$rootElement","$window",function(d,c,f,e,g){function h(a,b,d){var e=l.url(),f=l.$$state;try{c.url(a,b,d),l.$$state=c.state()}catch(g){throw l.url(e),l.$$state=f,g;}}function k(a,b){d.$broadcast("$locationChangeSuccess",l.absUrl(),a,l.$$state,b)}var l,m;m=c.baseHref();var n=c.url(),r;if(b.enabled){if(!m&&b.requireBase)throw lb("nobase");
r=n.substring(0,n.indexOf("/",n.indexOf("//")+2))+(m||"/");m=f.history?jc:rd}else r=Ga(n),m=kc;var s=r.substr(0,Ga(r).lastIndexOf("/")+1);l=new m(r,s,"#"+a);l.$$parseLinkUrl(n,n);l.$$state=c.state();var H=/^\s*(javascript|mailto):/i;e.on("click",function(a){var f=b.rewriteLinks;if(f&&!a.ctrlKey&&!a.metaKey&&!a.shiftKey&&2!==a.which&&2!==a.button){for(var h=F(a.target);"a"!==wa(h[0]);)if(h[0]===e[0]||!(h=h.parent())[0])return;if(!D(f)||!z(h.attr(f))){var f=h.prop("href"),k=h.attr("href")||h.attr("xlink:href");
E(f)&&"[object SVGAnimatedString]"===f.toString()&&(f=ta(f.animVal).href);H.test(f)||!f||h.attr("target")||a.isDefaultPrevented()||!l.$$parseLinkUrl(f,k)||(a.preventDefault(),l.absUrl()!==c.url()&&(d.$apply(),g.angular["ff-684208-preventDefault"]=!0))}}});mb(l.absUrl())!==mb(n)&&c.url(l.absUrl(),!0);var u=!0;c.onUrlChange(function(a,b){z(ra(s,a))?g.location.href=a:(d.$evalAsync(function(){var c=l.absUrl(),e=l.$$state,f;a=mb(a);l.$$parse(a);l.$$state=b;f=d.$broadcast("$locationChangeStart",a,c,b,e).defaultPrevented;
l.absUrl()===a&&(f?(l.$$parse(c),l.$$state=e,h(c,!1,e)):(u=!1,k(c,e)))}),d.$$phase||d.$digest())});d.$watch(function(){var a=mb(c.url()),b=mb(l.absUrl()),e=c.state(),g=l.$$replace,m=a!==b||l.$$html5&&f.history&&e!==l.$$state;if(u||m)u=!1,d.$evalAsync(function(){var b=l.absUrl(),c=d.$broadcast("$locationChangeStart",b,a,l.$$state,e).defaultPrevented;l.absUrl()===b&&(c?(l.$$parse(a),l.$$state=e):(m&&h(b,g,e===l.$$state?null:l.$$state),k(a,e)))});l.$$replace=!1});return l}]}function Gf(){var a=!0,b=
this;this.debugEnabled=function(b){return x(b)?(a=b,this):a};this.$get=["$window",function(d){function c(a){a instanceof Error&&(a.stack?a=a.message&&-1===a.stack.indexOf(a.message)?"Error: "+a.message+"\n"+a.stack:a.stack:a.sourceURL&&(a=a.message+"\n"+a.sourceURL+":"+a.line));return a}function f(a){var b=d.console||{},f=b[a]||b.log||w;a=!1;try{a=!!f.apply}catch(k){}return a?function(){var a=[];q(arguments,function(b){a.push(c(b))});return f.apply(b,a)}:function(a,b){f(a,null==b?"":b)}}return{log:f("log"),
info:f("info"),warn:f("warn"),error:f("error"),debug:function(){var c=f("debug");return function(){a&&c.apply(b,arguments)}}()}}]}function Ua(a,b){if("__defineGetter__"===a||"__defineSetter__"===a||"__lookupGetter__"===a||"__lookupSetter__"===a||"__proto__"===a)throw ea("isecfld",b);return a}function wg(a){return a+""}function Ea(a,b){if(a){if(a.constructor===a)throw ea("isecfn",b);if(a.window===a)throw ea("isecwindow",b);if(a.children&&(a.nodeName||a.prop&&a.attr&&a.find))throw ea("isecdom",b);if(a===
Object)throw ea("isecobj",b);}return a}function td(a,b){if(a){if(a.constructor===a)throw ea("isecfn",b);if(a===xg||a===yg||a===zg)throw ea("isecff",b);}}function Jb(a,b){if(a&&(a===ud||a===vd||a===wd||a===xd||a===yd||a===zd||a===Ag||a===Bg||a===Kb||a===Cg||a===Ad||a===Dg))throw ea("isecaf",b);}function Eg(a,b){return"undefined"!==typeof a?a:b}function Bd(a,b){return"undefined"===typeof a?b:"undefined"===typeof b?a:a+b}function X(a,b){var d,c,f;switch(a.type){case t.Program:d=!0;q(a.body,function(a){X(a.expression,
b);d=d&&a.expression.constant});a.constant=d;break;case t.Literal:a.constant=!0;a.toWatch=[];break;case t.UnaryExpression:X(a.argument,b);a.constant=a.argument.constant;a.toWatch=a.argument.toWatch;break;case t.BinaryExpression:X(a.left,b);X(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.left.toWatch.concat(a.right.toWatch);break;case t.LogicalExpression:X(a.left,b);X(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=a.constant?[]:[a];break;case t.ConditionalExpression:X(a.test,
b);X(a.alternate,b);X(a.consequent,b);a.constant=a.test.constant&&a.alternate.constant&&a.consequent.constant;a.toWatch=a.constant?[]:[a];break;case t.Identifier:a.constant=!1;a.toWatch=[a];break;case t.MemberExpression:X(a.object,b);a.computed&&X(a.property,b);a.constant=a.object.constant&&(!a.computed||a.property.constant);a.toWatch=[a];break;case t.CallExpression:d=f=a.filter?!b(a.callee.name).$stateful:!1;c=[];q(a.arguments,function(a){X(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});
a.constant=d;a.toWatch=f?c:[a];break;case t.AssignmentExpression:X(a.left,b);X(a.right,b);a.constant=a.left.constant&&a.right.constant;a.toWatch=[a];break;case t.ArrayExpression:d=!0;c=[];q(a.elements,function(a){X(a,b);d=d&&a.constant;a.constant||c.push.apply(c,a.toWatch)});a.constant=d;a.toWatch=c;break;case t.ObjectExpression:d=!0;c=[];q(a.properties,function(a){X(a.value,b);d=d&&a.value.constant&&!a.computed;a.value.constant||c.push.apply(c,a.value.toWatch)});a.constant=d;a.toWatch=c;break;case t.ThisExpression:a.constant=
!1;a.toWatch=[];break;case t.LocalsExpression:a.constant=!1,a.toWatch=[]}}function Cd(a){if(1===a.length){a=a[0].expression;var b=a.toWatch;return 1!==b.length?b:b[0]!==a?b:void 0}}function Dd(a){return a.type===t.Identifier||a.type===t.MemberExpression}function Ed(a){if(1===a.body.length&&Dd(a.body[0].expression))return{type:t.AssignmentExpression,left:a.body[0].expression,right:{type:t.NGValueParameter},operator:"="}}function Fd(a){return 0===a.body.length||1===a.body.length&&(a.body[0].expression.type===
t.Literal||a.body[0].expression.type===t.ArrayExpression||a.body[0].expression.type===t.ObjectExpression)}function Gd(a,b){this.astBuilder=a;this.$filter=b}function Hd(a,b){this.astBuilder=a;this.$filter=b}function Lb(a){return"constructor"===a}function lc(a){return C(a.valueOf)?a.valueOf():Fg.call(a)}function Hf(){var a=V(),b=V(),d={"true":!0,"false":!1,"null":null,undefined:void 0},c,f;this.addLiteral=function(a,b){d[a]=b};this.setIdentifierFns=function(a,b){c=a;f=b;return this};this.$get=["$filter",
function(e){function g(c,d,f){var g,k,H;f=f||K;switch(typeof c){case "string":H=c=c.trim();var q=f?b:a;g=q[H];if(!g){":"===c.charAt(0)&&":"===c.charAt(1)&&(k=!0,c=c.substring(2));g=f?p:u;var B=new mc(g);g=(new nc(B,e,g)).parse(c);g.constant?g.$$watchDelegate=r:k?g.$$watchDelegate=g.literal?n:m:g.inputs&&(g.$$watchDelegate=l);f&&(g=h(g));q[H]=g}return s(g,d);case "function":return s(c,d);default:return s(w,d)}}function h(a){function b(c,d,e,f){var g=K;K=!0;try{return a(c,d,e,f)}finally{K=g}}if(!a)return a;
b.$$watchDelegate=a.$$watchDelegate;b.assign=h(a.assign);b.constant=a.constant;b.literal=a.literal;for(var c=0;a.inputs&&c<a.inputs.length;++c)a.inputs[c]=h(a.inputs[c]);b.inputs=a.inputs;return b}function k(a,b){return null==a||null==b?a===b:"object"===typeof a&&(a=lc(a),"object"===typeof a)?!1:a===b||a!==a&&b!==b}function l(a,b,c,d,e){var f=d.inputs,g;if(1===f.length){var h=k,f=f[0];return a.$watch(function(a){var b=f(a);k(b,h)||(g=d(a,void 0,void 0,[b]),h=b&&lc(b));return g},b,c,e)}for(var l=[],
m=[],n=0,s=f.length;n<s;n++)l[n]=k,m[n]=null;return a.$watch(function(a){for(var b=!1,c=0,e=f.length;c<e;c++){var h=f[c](a);if(b||(b=!k(h,l[c])))m[c]=h,l[c]=h&&lc(h)}b&&(g=d(a,void 0,void 0,m));return g},b,c,e)}function m(a,b,c,d){var e,f;return e=a.$watch(function(a){return d(a)},function(a,c,d){f=a;C(b)&&b.apply(this,arguments);x(a)&&d.$$postDigest(function(){x(f)&&e()})},c)}function n(a,b,c,d){function e(a){var b=!0;q(a,function(a){x(a)||(b=!1)});return b}var f,g;return f=a.$watch(function(a){return d(a)},
function(a,c,d){g=a;C(b)&&b.call(this,a,c,d);e(a)&&d.$$postDigest(function(){e(g)&&f()})},c)}function r(a,b,c,d){var e=a.$watch(function(a){e();return d(a)},b,c);return e}function s(a,b){if(!b)return a;var c=a.$$watchDelegate,d=!1,c=c!==n&&c!==m?function(c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);return b(f,c,e)}:function(c,d,e,f){e=a(c,d,e,f);c=b(e,c,d);return x(e)?c:e};a.$$watchDelegate&&a.$$watchDelegate!==l?c.$$watchDelegate=a.$$watchDelegate:b.$stateful||(c.$$watchDelegate=l,d=!a.inputs,c.inputs=a.inputs?
a.inputs:[a]);return c}var H=da().noUnsafeEval,u={csp:H,expensiveChecks:!1,literals:sa(d),isIdentifierStart:C(c)&&c,isIdentifierContinue:C(f)&&f},p={csp:H,expensiveChecks:!0,literals:sa(d),isIdentifierStart:C(c)&&c,isIdentifierContinue:C(f)&&f},K=!1;g.$$runningExpensiveChecks=function(){return K};return g}]}function Jf(){this.$get=["$rootScope","$exceptionHandler",function(a,b){return Id(function(b){a.$evalAsync(b)},b)}]}function Kf(){this.$get=["$browser","$exceptionHandler",function(a,b){return Id(function(b){a.defer(b)},
b)}]}function Id(a,b){function d(){var a=new g;a.resolve=f(a,a.resolve);a.reject=f(a,a.reject);a.notify=f(a,a.notify);return a}function c(){this.$$state={status:0}}function f(a,b){return function(c){b.call(a,c)}}function e(c){!c.processScheduled&&c.pending&&(c.processScheduled=!0,a(function(){var a,d,e;e=c.pending;c.processScheduled=!1;c.pending=void 0;for(var f=0,g=e.length;f<g;++f){d=e[f][0];a=e[f][c.status];try{C(a)?d.resolve(a(c.value)):1===c.status?d.resolve(c.value):d.reject(c.value)}catch(h){d.reject(h),
b(h)}}}))}function g(){this.promise=new c}function h(a){var b=new g;b.reject(a);return b.promise}function k(a,b,c){var d=null;try{C(c)&&(d=c())}catch(e){return h(e)}return d&&C(d.then)?d.then(function(){return b(a)},h):b(a)}function l(a,b,c,d){var e=new g;e.resolve(a);return e.promise.then(b,c,d)}function m(a){if(!C(a))throw n("norslvr",a);var b=new g;a(function(a){b.resolve(a)},function(a){b.reject(a)});return b.promise}var n=G("$q",TypeError);R(c.prototype,{then:function(a,b,c){if(z(a)&&z(b)&&z(c))return this;
var d=new g;this.$$state.pending=this.$$state.pending||[];this.$$state.pending.push([d,a,b,c]);0<this.$$state.status&&e(this.$$state);return d.promise},"catch":function(a){return this.then(null,a)},"finally":function(a,b){return this.then(function(b){return k(b,r,a)},function(b){return k(b,h,a)},b)}});R(g.prototype,{resolve:function(a){this.promise.$$state.status||(a===this.promise?this.$$reject(n("qcycle",a)):this.$$resolve(a))},$$resolve:function(a){function c(a){k||(k=!0,h.$$resolve(a))}function d(a){k||
(k=!0,h.$$reject(a))}var g,h=this,k=!1;try{if(E(a)||C(a))g=a&&a.then;C(g)?(this.promise.$$state.status=-1,g.call(a,c,d,f(this,this.notify))):(this.promise.$$state.value=a,this.promise.$$state.status=1,e(this.promise.$$state))}catch(l){d(l),b(l)}},reject:function(a){this.promise.$$state.status||this.$$reject(a)},$$reject:function(a){this.promise.$$state.value=a;this.promise.$$state.status=2;e(this.promise.$$state)},notify:function(c){var d=this.promise.$$state.pending;0>=this.promise.$$state.status&&
d&&d.length&&a(function(){for(var a,e,f=0,g=d.length;f<g;f++){e=d[f][0];a=d[f][3];try{e.notify(C(a)?a(c):c)}catch(h){b(h)}}})}});var r=l;m.prototype=c.prototype;m.defer=d;m.reject=h;m.when=l;m.resolve=r;m.all=function(a){var b=new g,c=0,d=I(a)?[]:{};q(a,function(a,e){c++;l(a).then(function(a){d[e]=a;--c||b.resolve(d)},function(a){b.reject(a)})});0===c&&b.resolve(d);return b.promise};m.race=function(a){var b=d();q(a,function(a){l(a).then(b.resolve,b.reject)});return b.promise};return m}function Tf(){this.$get=
["$window","$timeout",function(a,b){var d=a.requestAnimationFrame||a.webkitRequestAnimationFrame,c=a.cancelAnimationFrame||a.webkitCancelAnimationFrame||a.webkitCancelRequestAnimationFrame,f=!!d,e=f?function(a){var b=d(a);return function(){c(b)}}:function(a){var c=b(a,16.66,!1);return function(){b.cancel(c)}};e.supported=f;return e}]}function If(){function a(a){function b(){this.$$watchers=this.$$nextSibling=this.$$childHead=this.$$childTail=null;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=
0;this.$id=++sb;this.$$ChildScope=null}b.prototype=a;return b}var b=10,d=G("$rootScope"),c=null,f=null;this.digestTtl=function(a){arguments.length&&(b=a);return b};this.$get=["$exceptionHandler","$parse","$browser",function(e,g,h){function k(a){a.currentScope.$$destroyed=!0}function l(a){9===Ia&&(a.$$childHead&&l(a.$$childHead),a.$$nextSibling&&l(a.$$nextSibling));a.$parent=a.$$nextSibling=a.$$prevSibling=a.$$childHead=a.$$childTail=a.$root=a.$$watchers=null}function m(){this.$id=++sb;this.$$phase=
this.$parent=this.$$watchers=this.$$nextSibling=this.$$prevSibling=this.$$childHead=this.$$childTail=null;this.$root=this;this.$$destroyed=!1;this.$$listeners={};this.$$listenerCount={};this.$$watchersCount=0;this.$$isolateBindings=null}function n(a){if(K.$$phase)throw d("inprog",K.$$phase);K.$$phase=a}function r(a,b){do a.$$watchersCount+=b;while(a=a.$parent)}function s(a,b,c){do a.$$listenerCount[c]-=b,0===a.$$listenerCount[c]&&delete a.$$listenerCount[c];while(a=a.$parent)}function H(){}function u(){for(;t.length;)try{t.shift()()}catch(a){e(a)}f=
null}function p(){null===f&&(f=h.defer(function(){K.$apply(u)}))}m.prototype={constructor:m,$new:function(b,c){var d;c=c||this;b?(d=new m,d.$root=this.$root):(this.$$ChildScope||(this.$$ChildScope=a(this)),d=new this.$$ChildScope);d.$parent=c;d.$$prevSibling=c.$$childTail;c.$$childHead?(c.$$childTail.$$nextSibling=d,c.$$childTail=d):c.$$childHead=c.$$childTail=d;(b||c!==this)&&d.$on("$destroy",k);return d},$watch:function(a,b,d,e){var f=g(a);if(f.$$watchDelegate)return f.$$watchDelegate(this,b,d,
f,a);var h=this,k=h.$$watchers,l={fn:b,last:H,get:f,exp:e||a,eq:!!d};c=null;C(b)||(l.fn=w);k||(k=h.$$watchers=[],k.$$digestWatchIndex=-1);k.unshift(l);k.$$digestWatchIndex++;r(this,1);return function(){var a=bb(k,l);0<=a&&(r(h,-1),a<k.$$digestWatchIndex&&k.$$digestWatchIndex--);c=null}},$watchGroup:function(a,b){function c(){h=!1;k?(k=!1,b(e,e,g)):b(e,d,g)}var d=Array(a.length),e=Array(a.length),f=[],g=this,h=!1,k=!0;if(!a.length){var l=!0;g.$evalAsync(function(){l&&b(e,e,g)});return function(){l=
!1}}if(1===a.length)return this.$watch(a[0],function(a,c,f){e[0]=a;d[0]=c;b(e,a===c?e:d,f)});q(a,function(a,b){var k=g.$watch(a,function(a,f){e[b]=a;d[b]=f;h||(h=!0,g.$evalAsync(c))});f.push(k)});return function(){for(;f.length;)f.shift()()}},$watchCollection:function(a,b){function c(a){e=a;var b,d,g,h;if(!z(e)){if(E(e))if(la(e))for(f!==n&&(f=n,s=f.length=0,l++),a=e.length,s!==a&&(l++,f.length=s=a),b=0;b<a;b++)h=f[b],g=e[b],d=h!==h&&g!==g,d||h===g||(l++,f[b]=g);else{f!==r&&(f=r={},s=0,l++);a=0;for(b in e)ua.call(e,
b)&&(a++,g=e[b],h=f[b],b in f?(d=h!==h&&g!==g,d||h===g||(l++,f[b]=g)):(s++,f[b]=g,l++));if(s>a)for(b in l++,f)ua.call(e,b)||(s--,delete f[b])}else f!==e&&(f=e,l++);return l}}c.$stateful=!0;var d=this,e,f,h,k=1<b.length,l=0,m=g(a,c),n=[],r={},p=!0,s=0;return this.$watch(m,function(){p?(p=!1,b(e,e,d)):b(e,h,d);if(k)if(E(e))if(la(e)){h=Array(e.length);for(var a=0;a<e.length;a++)h[a]=e[a]}else for(a in h={},e)ua.call(e,a)&&(h[a]=e[a]);else h=e})},$digest:function(){var a,g,k,l,m,r,p,s=b,q,t=[],N,x;n("$digest");
h.$$checkUrlChange();this===K&&null!==f&&(h.defer.cancel(f),u());c=null;do{p=!1;q=this;for(r=0;r<A.length;r++){try{x=A[r],x.scope.$eval(x.expression,x.locals)}catch(z){e(z)}c=null}A.length=0;a:do{if(r=q.$$watchers)for(r.$$digestWatchIndex=r.length;r.$$digestWatchIndex--;)try{if(a=r[r.$$digestWatchIndex])if(m=a.get,(g=m(q))!==(k=a.last)&&!(a.eq?na(g,k):ia(g)&&ia(k)))p=!0,c=a,a.last=a.eq?sa(g,null):g,l=a.fn,l(g,k===H?g:k,q),5>s&&(N=4-s,t[N]||(t[N]=[]),t[N].push({msg:C(a.exp)?"fn: "+(a.exp.name||a.exp.toString()):
a.exp,newVal:g,oldVal:k}));else if(a===c){p=!1;break a}}catch(w){e(w)}if(!(r=q.$$watchersCount&&q.$$childHead||q!==this&&q.$$nextSibling))for(;q!==this&&!(r=q.$$nextSibling);)q=q.$parent}while(q=r);if((p||A.length)&&!s--)throw K.$$phase=null,d("infdig",b,t);}while(p||A.length);for(K.$$phase=null;L<v.length;)try{v[L++]()}catch(y){e(y)}v.length=L=0},$destroy:function(){if(!this.$$destroyed){var a=this.$parent;this.$broadcast("$destroy");this.$$destroyed=!0;this===K&&h.$$applicationDestroyed();r(this,
-this.$$watchersCount);for(var b in this.$$listenerCount)s(this,this.$$listenerCount[b],b);a&&a.$$childHead===this&&(a.$$childHead=this.$$nextSibling);a&&a.$$childTail===this&&(a.$$childTail=this.$$prevSibling);this.$$prevSibling&&(this.$$prevSibling.$$nextSibling=this.$$nextSibling);this.$$nextSibling&&(this.$$nextSibling.$$prevSibling=this.$$prevSibling);this.$destroy=this.$digest=this.$apply=this.$evalAsync=this.$applyAsync=w;this.$on=this.$watch=this.$watchGroup=function(){return w};this.$$listeners=
{};this.$$nextSibling=null;l(this)}},$eval:function(a,b){return g(a)(this,b)},$evalAsync:function(a,b){K.$$phase||A.length||h.defer(function(){A.length&&K.$digest()});A.push({scope:this,expression:g(a),locals:b})},$$postDigest:function(a){v.push(a)},$apply:function(a){try{n("$apply");try{return this.$eval(a)}finally{K.$$phase=null}}catch(b){e(b)}finally{try{K.$digest()}catch(c){throw e(c),c;}}},$applyAsync:function(a){function b(){c.$eval(a)}var c=this;a&&t.push(b);a=g(a);p()},$on:function(a,b){var c=
this.$$listeners[a];c||(this.$$listeners[a]=c=[]);c.push(b);var d=this;do d.$$listenerCount[a]||(d.$$listenerCount[a]=0),d.$$listenerCount[a]++;while(d=d.$parent);var e=this;return function(){var d=c.indexOf(b);-1!==d&&(c[d]=null,s(e,1,a))}},$emit:function(a,b){var c=[],d,f=this,g=!1,h={name:a,targetScope:f,stopPropagation:function(){g=!0},preventDefault:function(){h.defaultPrevented=!0},defaultPrevented:!1},k=cb([h],arguments,1),l,m;do{d=f.$$listeners[a]||c;h.currentScope=f;l=0;for(m=d.length;l<
m;l++)if(d[l])try{d[l].apply(null,k)}catch(n){e(n)}else d.splice(l,1),l--,m--;if(g)return h.currentScope=null,h;f=f.$parent}while(f);h.currentScope=null;return h},$broadcast:function(a,b){var c=this,d=this,f={name:a,targetScope:this,preventDefault:function(){f.defaultPrevented=!0},defaultPrevented:!1};if(!this.$$listenerCount[a])return f;for(var g=cb([f],arguments,1),h,k;c=d;){f.currentScope=c;d=c.$$listeners[a]||[];h=0;for(k=d.length;h<k;h++)if(d[h])try{d[h].apply(null,g)}catch(l){e(l)}else d.splice(h,
1),h--,k--;if(!(d=c.$$listenerCount[a]&&c.$$childHead||c!==this&&c.$$nextSibling))for(;c!==this&&!(d=c.$$nextSibling);)c=c.$parent}f.currentScope=null;return f}};var K=new m,A=K.$$asyncQueue=[],v=K.$$postDigestQueue=[],t=K.$$applyAsyncQueue=[],L=0;return K}]}function Be(){var a=/^\s*(https?|ftp|mailto|tel|file):/,b=/^\s*((https?|ftp|file|blob):|data:image\/)/;this.aHrefSanitizationWhitelist=function(b){return x(b)?(a=b,this):a};this.imgSrcSanitizationWhitelist=function(a){return x(a)?(b=a,this):b};
this.$get=function(){return function(d,c){var f=c?b:a,e;e=ta(d).href;return""===e||e.match(f)?d:"unsafe:"+e}}}function Gg(a){if("self"===a)return a;if(D(a)){if(-1<a.indexOf("***"))throw Fa("iwcard",a);a=Jd(a).replace(/\\\*\\\*/g,".*").replace(/\\\*/g,"[^:/.?&;]*");return new RegExp("^"+a+"$")}if(Za(a))return new RegExp("^"+a.source+"$");throw Fa("imatcher");}function Kd(a){var b=[];x(a)&&q(a,function(a){b.push(Gg(a))});return b}function Mf(){this.SCE_CONTEXTS=ga;var a=["self"],b=[];this.resourceUrlWhitelist=
function(b){arguments.length&&(a=Kd(b));return a};this.resourceUrlBlacklist=function(a){arguments.length&&(b=Kd(a));return b};this.$get=["$injector",function(d){function c(a,b){return"self"===a?od(b):!!a.exec(b.href)}function f(a){var b=function(a){this.$$unwrapTrustedValue=function(){return a}};a&&(b.prototype=new a);b.prototype.valueOf=function(){return this.$$unwrapTrustedValue()};b.prototype.toString=function(){return this.$$unwrapTrustedValue().toString()};return b}var e=function(a){throw Fa("unsafe");
};d.has("$sanitize")&&(e=d.get("$sanitize"));var g=f(),h={};h[ga.HTML]=f(g);h[ga.CSS]=f(g);h[ga.URL]=f(g);h[ga.JS]=f(g);h[ga.RESOURCE_URL]=f(h[ga.URL]);return{trustAs:function(a,b){var c=h.hasOwnProperty(a)?h[a]:null;if(!c)throw Fa("icontext",a,b);if(null===b||z(b)||""===b)return b;if("string"!==typeof b)throw Fa("itype",a);return new c(b)},getTrusted:function(d,f){if(null===f||z(f)||""===f)return f;var g=h.hasOwnProperty(d)?h[d]:null;if(g&&f instanceof g)return f.$$unwrapTrustedValue();if(d===ga.RESOURCE_URL){var g=
ta(f.toString()),n,r,s=!1;n=0;for(r=a.length;n<r;n++)if(c(a[n],g)){s=!0;break}if(s)for(n=0,r=b.length;n<r;n++)if(c(b[n],g)){s=!1;break}if(s)return f;throw Fa("insecurl",f.toString());}if(d===ga.HTML)return e(f);throw Fa("unsafe");},valueOf:function(a){return a instanceof g?a.$$unwrapTrustedValue():a}}}]}function Lf(){var a=!0;this.enabled=function(b){arguments.length&&(a=!!b);return a};this.$get=["$parse","$sceDelegate",function(b,d){if(a&&8>Ia)throw Fa("iequirks");var c=ka(ga);c.isEnabled=function(){return a};
c.trustAs=d.trustAs;c.getTrusted=d.getTrusted;c.valueOf=d.valueOf;a||(c.trustAs=c.getTrusted=function(a,b){return b},c.valueOf=$a);c.parseAs=function(a,d){var e=b(d);return e.literal&&e.constant?e:b(d,function(b){return c.getTrusted(a,b)})};var f=c.parseAs,e=c.getTrusted,g=c.trustAs;q(ga,function(a,b){var d=Q(b);c[hb("parse_as_"+d)]=function(b){return f(a,b)};c[hb("get_trusted_"+d)]=function(b){return e(a,b)};c[hb("trust_as_"+d)]=function(b){return g(a,b)}});return c}]}function Nf(){this.$get=["$window",
"$document",function(a,b){var d={},c=!(a.chrome&&(a.chrome.app&&a.chrome.app.runtime||!a.chrome.app&&a.chrome.runtime&&a.chrome.runtime.id))&&a.history&&a.history.pushState,f=Z((/android (\d+)/.exec(Q((a.navigator||{}).userAgent))||[])[1]),e=/Boxee/i.test((a.navigator||{}).userAgent),g=b[0]||{},h,k=/^(Moz|webkit|ms)(?=[A-Z])/,l=g.body&&g.body.style,m=!1,n=!1;if(l){for(var r in l)if(m=k.exec(r)){h=m[0];h=h[0].toUpperCase()+h.substr(1);break}h||(h="WebkitOpacity"in l&&"webkit");m=!!("transition"in l||
h+"Transition"in l);n=!!("animation"in l||h+"Animation"in l);!f||m&&n||(m=D(l.webkitTransition),n=D(l.webkitAnimation))}return{history:!(!c||4>f||e),hasEvent:function(a){if("input"===a&&11>=Ia)return!1;if(z(d[a])){var b=g.createElement("div");d[a]="on"+a in b}return d[a]},csp:da(),vendorPrefix:h,transitions:m,animations:n,android:f}}]}function Pf(){var a;this.httpOptions=function(b){return b?(a=b,this):a};this.$get=["$templateCache","$http","$q","$sce",function(b,d,c,f){function e(g,h){e.totalPendingRequests++;
if(!D(g)||z(b.get(g)))g=f.getTrustedResourceUrl(g);var k=d.defaults&&d.defaults.transformResponse;I(k)?k=k.filter(function(a){return a!==gc}):k===gc&&(k=null);return d.get(g,R({cache:b,transformResponse:k},a))["finally"](function(){e.totalPendingRequests--}).then(function(a){b.put(g,a.data);return a.data},function(a){if(!h)throw Hg("tpload",g,a.status,a.statusText);return c.reject(a)})}e.totalPendingRequests=0;return e}]}function Qf(){this.$get=["$rootScope","$browser","$location",function(a,b,d){return{findBindings:function(a,
b,d){a=a.getElementsByClassName("ng-binding");var g=[];q(a,function(a){var c=$.element(a).data("$binding");c&&q(c,function(c){d?(new RegExp("(^|\\s)"+Jd(b)+"(\\s|\\||$)")).test(c)&&g.push(a):-1!==c.indexOf(b)&&g.push(a)})});return g},findModels:function(a,b,d){for(var g=["ng-","data-ng-","ng\\:"],h=0;h<g.length;++h){var k=a.querySelectorAll("["+g[h]+"model"+(d?"=":"*=")+'"'+b+'"]');if(k.length)return k}},getLocation:function(){return d.url()},setLocation:function(b){b!==d.url()&&(d.url(b),a.$digest())},
whenStable:function(a){b.notifyWhenNoOutstandingRequests(a)}}}]}function Rf(){this.$get=["$rootScope","$browser","$q","$$q","$exceptionHandler",function(a,b,d,c,f){function e(e,k,l){C(e)||(l=k,k=e,e=w);var m=va.call(arguments,3),n=x(l)&&!l,r=(n?c:d).defer(),s=r.promise,q;q=b.defer(function(){try{r.resolve(e.apply(null,m))}catch(b){r.reject(b),f(b)}finally{delete g[s.$$timeoutId]}n||a.$apply()},k);s.$$timeoutId=q;g[q]=r;return s}var g={};e.cancel=function(a){return a&&a.$$timeoutId in g?(g[a.$$timeoutId].reject("canceled"),
delete g[a.$$timeoutId],b.defer.cancel(a.$$timeoutId)):!1};return e}]}function ta(a){Ia&&(aa.setAttribute("href",a),a=aa.href);aa.setAttribute("href",a);return{href:aa.href,protocol:aa.protocol?aa.protocol.replace(/:$/,""):"",host:aa.host,search:aa.search?aa.search.replace(/^\?/,""):"",hash:aa.hash?aa.hash.replace(/^#/,""):"",hostname:aa.hostname,port:aa.port,pathname:"/"===aa.pathname.charAt(0)?aa.pathname:"/"+aa.pathname}}function od(a){a=D(a)?ta(a):a;return a.protocol===Ld.protocol&&a.host===Ld.host}
function Sf(){this.$get=ha(y)}function Md(a){function b(a){try{return decodeURIComponent(a)}catch(b){return a}}var d=a[0]||{},c={},f="";return function(){var a,g,h,k,l;try{a=d.cookie||""}catch(m){a=""}if(a!==f)for(f=a,a=f.split("; "),c={},h=0;h<a.length;h++)g=a[h],k=g.indexOf("="),0<k&&(l=b(g.substring(0,k)),z(c[l])&&(c[l]=b(g.substring(k+1))));return c}}function Wf(){this.$get=Md}function Rc(a){function b(d,c){if(E(d)){var f={};q(d,function(a,c){f[c]=b(c,a)});return f}return a.factory(d+"Filter",
c)}this.register=b;this.$get=["$injector",function(a){return function(b){return a.get(b+"Filter")}}];b("currency",Nd);b("date",Od);b("filter",Ig);b("json",Jg);b("limitTo",Kg);b("lowercase",Lg);b("number",Pd);b("orderBy",Qd);b("uppercase",Mg)}function Ig(){return function(a,b,d,c){if(!la(a)){if(null==a)return a;throw G("filter")("notarray",a);}c=c||"$";var f;switch(oc(b)){case "function":break;case "boolean":case "null":case "number":case "string":f=!0;case "object":b=Ng(b,d,c,f);break;default:return a}return Array.prototype.filter.call(a,
b)}}function Ng(a,b,d,c){var f=E(a)&&d in a;!0===b?b=na:C(b)||(b=function(a,b){if(z(a))return!1;if(null===a||null===b)return a===b;if(E(b)||E(a)&&!Ac(a))return!1;a=Q(""+a);b=Q(""+b);return-1!==a.indexOf(b)});return function(e){return f&&!E(e)?Na(e,a[d],b,d,!1):Na(e,a,b,d,c)}}function Na(a,b,d,c,f,e){var g=oc(a),h=oc(b);if("string"===h&&"!"===b.charAt(0))return!Na(a,b.substring(1),d,c,f);if(I(a))return a.some(function(a){return Na(a,b,d,c,f)});switch(g){case "object":var k;if(f){for(k in a)if("$"!==
k.charAt(0)&&Na(a[k],b,d,c,!0))return!0;return e?!1:Na(a,b,d,c,!1)}if("object"===h){for(k in b)if(e=b[k],!C(e)&&!z(e)&&(g=k===c,!Na(g?a:a[k],e,d,c,g,g)))return!1;return!0}return d(a,b);case "function":return!1;default:return d(a,b)}}function oc(a){return null===a?"null":typeof a}function Nd(a){var b=a.NUMBER_FORMATS;return function(a,c,f){z(c)&&(c=b.CURRENCY_SYM);z(f)&&(f=b.PATTERNS[1].maxFrac);return null==a?a:Rd(a,b.PATTERNS[1],b.GROUP_SEP,b.DECIMAL_SEP,f).replace(/\u00A4/g,c)}}function Pd(a){var b=
a.NUMBER_FORMATS;return function(a,c){return null==a?a:Rd(a,b.PATTERNS[0],b.GROUP_SEP,b.DECIMAL_SEP,c)}}function Og(a){var b=0,d,c,f,e,g;-1<(c=a.indexOf(Sd))&&(a=a.replace(Sd,""));0<(f=a.search(/e/i))?(0>c&&(c=f),c+=+a.slice(f+1),a=a.substring(0,f)):0>c&&(c=a.length);for(f=0;a.charAt(f)===pc;f++);if(f===(g=a.length))d=[0],c=1;else{for(g--;a.charAt(g)===pc;)g--;c-=f;d=[];for(e=0;f<=g;f++,e++)d[e]=+a.charAt(f)}c>Td&&(d=d.splice(0,Td-1),b=c-1,c=1);return{d:d,e:b,i:c}}function Pg(a,b,d,c){var f=a.d,e=
f.length-a.i;b=z(b)?Math.min(Math.max(d,e),c):+b;d=b+a.i;c=f[d];if(0<d){f.splice(Math.max(a.i,d));for(var g=d;g<f.length;g++)f[g]=0}else for(e=Math.max(0,e),a.i=1,f.length=Math.max(1,d=b+1),f[0]=0,g=1;g<d;g++)f[g]=0;if(5<=c)if(0>d-1){for(c=0;c>d;c--)f.unshift(0),a.i++;f.unshift(1);a.i++}else f[d-1]++;for(;e<Math.max(0,b);e++)f.push(0);if(b=f.reduceRight(function(a,b,c,d){b+=a;d[c]=b%10;return Math.floor(b/10)},0))f.unshift(b),a.i++}function Rd(a,b,d,c,f){if(!D(a)&&!ba(a)||isNaN(a))return"";var e=
!isFinite(a),g=!1,h=Math.abs(a)+"",k="";if(e)k="\u221e";else{g=Og(h);Pg(g,f,b.minFrac,b.maxFrac);k=g.d;h=g.i;f=g.e;e=[];for(g=k.reduce(function(a,b){return a&&!b},!0);0>h;)k.unshift(0),h++;0<h?e=k.splice(h,k.length):(e=k,k=[0]);h=[];for(k.length>=b.lgSize&&h.unshift(k.splice(-b.lgSize,k.length).join(""));k.length>b.gSize;)h.unshift(k.splice(-b.gSize,k.length).join(""));k.length&&h.unshift(k.join(""));k=h.join(d);e.length&&(k+=c+e.join(""));f&&(k+="e+"+f)}return 0>a&&!g?b.negPre+k+b.negSuf:b.posPre+
k+b.posSuf}function Mb(a,b,d,c){var f="";if(0>a||c&&0>=a)c?a=-a+1:(a=-a,f="-");for(a=""+a;a.length<b;)a=pc+a;d&&(a=a.substr(a.length-b));return f+a}function U(a,b,d,c,f){d=d||0;return function(e){e=e["get"+a]();if(0<d||e>-d)e+=d;0===e&&-12===d&&(e=12);return Mb(e,b,c,f)}}function nb(a,b,d){return function(c,f){var e=c["get"+a](),g=wb((d?"STANDALONE":"")+(b?"SHORT":"")+a);return f[g][e]}}function Ud(a){var b=(new Date(a,0,1)).getDay();return new Date(a,0,(4>=b?5:12)-b)}function Vd(a){return function(b){var d=
Ud(b.getFullYear());b=+new Date(b.getFullYear(),b.getMonth(),b.getDate()+(4-b.getDay()))-+d;b=1+Math.round(b/6048E5);return Mb(b,a)}}function qc(a,b){return 0>=a.getFullYear()?b.ERAS[0]:b.ERAS[1]}function Od(a){function b(a){var b;if(b=a.match(d)){a=new Date(0);var e=0,g=0,h=b[8]?a.setUTCFullYear:a.setFullYear,k=b[8]?a.setUTCHours:a.setHours;b[9]&&(e=Z(b[9]+b[10]),g=Z(b[9]+b[11]));h.call(a,Z(b[1]),Z(b[2])-1,Z(b[3]));e=Z(b[4]||0)-e;g=Z(b[5]||0)-g;h=Z(b[6]||0);b=Math.round(1E3*parseFloat("0."+(b[7]||
0)));k.call(a,e,g,h,b)}return a}var d=/^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/;return function(c,d,e){var g="",h=[],k,l;d=d||"mediumDate";d=a.DATETIME_FORMATS[d]||d;D(c)&&(c=Qg.test(c)?Z(c):b(c));ba(c)&&(c=new Date(c));if(!ja(c)||!isFinite(c.getTime()))return c;for(;d;)(l=Rg.exec(d))?(h=cb(h,l,1),d=h.pop()):(h.push(d),d=null);var m=c.getTimezoneOffset();e&&(m=Dc(e,m),c=Ub(c,e,!0));q(h,function(b){k=Sg[b];g+=k?k(c,a.DATETIME_FORMATS,m):
"''"===b?"'":b.replace(/(^'|'$)/g,"").replace(/''/g,"'")});return g}}function Jg(){return function(a,b){z(b)&&(b=2);return eb(a,b)}}function Kg(){return function(a,b,d){b=Infinity===Math.abs(Number(b))?Number(b):Z(b);if(ia(b))return a;ba(a)&&(a=a.toString());if(!la(a))return a;d=!d||isNaN(d)?0:Z(d);d=0>d?Math.max(0,a.length+d):d;return 0<=b?rc(a,d,d+b):0===d?rc(a,b,a.length):rc(a,Math.max(0,d+b),d)}}function rc(a,b,d){return D(a)?a.slice(b,d):va.call(a,b,d)}function Qd(a){function b(b){return b.map(function(b){var c=
1,d=$a;if(C(b))d=b;else if(D(b)){if("+"===b.charAt(0)||"-"===b.charAt(0))c="-"===b.charAt(0)?-1:1,b=b.substring(1);if(""!==b&&(d=a(b),d.constant))var f=d(),d=function(a){return a[f]}}return{get:d,descending:c}})}function d(a){switch(typeof a){case "number":case "boolean":case "string":return!0;default:return!1}}function c(a,b){var c=0,d=a.type,k=b.type;if(d===k){var k=a.value,l=b.value;"string"===d?(k=k.toLowerCase(),l=l.toLowerCase()):"object"===d&&(E(k)&&(k=a.index),E(l)&&(l=b.index));k!==l&&(c=
k<l?-1:1)}else c=d<k?-1:1;return c}return function(a,e,g,h){if(null==a)return a;if(!la(a))throw G("orderBy")("notarray",a);I(e)||(e=[e]);0===e.length&&(e=["+"]);var k=b(e),l=g?-1:1,m=C(h)?h:c;a=Array.prototype.map.call(a,function(a,b){return{value:a,tieBreaker:{value:b,type:"number",index:b},predicateValues:k.map(function(c){var e=c.get(a);c=typeof e;if(null===e)c="string",e="null";else if("object"===c)a:{if(C(e.valueOf)&&(e=e.valueOf(),d(e)))break a;Ac(e)&&(e=e.toString(),d(e))}return{value:e,type:c,
index:b}})}});a.sort(function(a,b){for(var c=0,d=k.length;c<d;c++){var e=m(a.predicateValues[c],b.predicateValues[c]);if(e)return e*k[c].descending*l}return m(a.tieBreaker,b.tieBreaker)*l});return a=a.map(function(a){return a.value})}}function Va(a){C(a)&&(a={link:a});a.restrict=a.restrict||"AC";return ha(a)}function Wd(a,b,d,c,f){var e=this,g=[];e.$error={};e.$$success={};e.$pending=void 0;e.$name=f(b.name||b.ngForm||"")(d);e.$dirty=!1;e.$pristine=!0;e.$valid=!0;e.$invalid=!1;e.$submitted=!1;e.$$parentForm=
Nb;e.$rollbackViewValue=function(){q(g,function(a){a.$rollbackViewValue()})};e.$commitViewValue=function(){q(g,function(a){a.$commitViewValue()})};e.$addControl=function(a){Ra(a.$name,"input");g.push(a);a.$name&&(e[a.$name]=a);a.$$parentForm=e};e.$$renameControl=function(a,b){var c=a.$name;e[c]===a&&delete e[c];e[b]=a;a.$name=b};e.$removeControl=function(a){a.$name&&e[a.$name]===a&&delete e[a.$name];q(e.$pending,function(b,c){e.$setValidity(c,null,a)});q(e.$error,function(b,c){e.$setValidity(c,null,
a)});q(e.$$success,function(b,c){e.$setValidity(c,null,a)});bb(g,a);a.$$parentForm=Nb};Xd({ctrl:this,$element:a,set:function(a,b,c){var d=a[b];d?-1===d.indexOf(c)&&d.push(c):a[b]=[c]},unset:function(a,b,c){var d=a[b];d&&(bb(d,c),0===d.length&&delete a[b])},$animate:c});e.$setDirty=function(){c.removeClass(a,Wa);c.addClass(a,Ob);e.$dirty=!0;e.$pristine=!1;e.$$parentForm.$setDirty()};e.$setPristine=function(){c.setClass(a,Wa,Ob+" ng-submitted");e.$dirty=!1;e.$pristine=!0;e.$submitted=!1;q(g,function(a){a.$setPristine()})};
e.$setUntouched=function(){q(g,function(a){a.$setUntouched()})};e.$setSubmitted=function(){c.addClass(a,"ng-submitted");e.$submitted=!0;e.$$parentForm.$setSubmitted()}}function sc(a){a.$formatters.push(function(b){return a.$isEmpty(b)?b:b.toString()})}function Xa(a,b,d,c,f,e){var g=Q(b[0].type);if(!f.android){var h=!1;b.on("compositionstart",function(){h=!0});b.on("compositionend",function(){h=!1;l()})}var k,l=function(a){k&&(e.defer.cancel(k),k=null);if(!h){var f=b.val();a=a&&a.type;"password"===
g||d.ngTrim&&"false"===d.ngTrim||(f=Y(f));(c.$viewValue!==f||""===f&&c.$$hasNativeValidators)&&c.$setViewValue(f,a)}};if(f.hasEvent("input"))b.on("input",l);else{var m=function(a,b,c){k||(k=e.defer(function(){k=null;b&&b.value===c||l(a)}))};b.on("keydown",function(a){var b=a.keyCode;91===b||15<b&&19>b||37<=b&&40>=b||m(a,this,this.value)});if(f.hasEvent("paste"))b.on("paste cut",m)}b.on("change",l);if(Yd[g]&&c.$$hasNativeValidators&&g===d.type)b.on("keydown wheel mousedown",function(a){if(!k){var b=
this.validity,c=b.badInput,d=b.typeMismatch;k=e.defer(function(){k=null;b.badInput===c&&b.typeMismatch===d||l(a)})}});c.$render=function(){var a=c.$isEmpty(c.$viewValue)?"":c.$viewValue;b.val()!==a&&b.val(a)}}function Pb(a,b){return function(d,c){var f,e;if(ja(d))return d;if(D(d)){'"'===d.charAt(0)&&'"'===d.charAt(d.length-1)&&(d=d.substring(1,d.length-1));if(Tg.test(d))return new Date(d);a.lastIndex=0;if(f=a.exec(d))return f.shift(),e=c?{yyyy:c.getFullYear(),MM:c.getMonth()+1,dd:c.getDate(),HH:c.getHours(),
mm:c.getMinutes(),ss:c.getSeconds(),sss:c.getMilliseconds()/1E3}:{yyyy:1970,MM:1,dd:1,HH:0,mm:0,ss:0,sss:0},q(f,function(a,c){c<b.length&&(e[b[c]]=+a)}),new Date(e.yyyy,e.MM-1,e.dd,e.HH,e.mm,e.ss||0,1E3*e.sss||0)}return NaN}}function ob(a,b,d,c){return function(f,e,g,h,k,l,m){function n(a){return a&&!(a.getTime&&a.getTime()!==a.getTime())}function r(a){return x(a)&&!ja(a)?d(a)||void 0:a}tc(f,e,g,h);Xa(f,e,g,h,k,l);var s=h&&h.$options&&h.$options.timezone,q;h.$$parserName=a;h.$parsers.push(function(a){if(h.$isEmpty(a))return null;
if(b.test(a))return a=d(a,q),s&&(a=Ub(a,s)),a});h.$formatters.push(function(a){if(a&&!ja(a))throw pb("datefmt",a);if(n(a))return(q=a)&&s&&(q=Ub(q,s,!0)),m("date")(a,c,s);q=null;return""});if(x(g.min)||g.ngMin){var u;h.$validators.min=function(a){return!n(a)||z(u)||d(a)>=u};g.$observe("min",function(a){u=r(a);h.$validate()})}if(x(g.max)||g.ngMax){var p;h.$validators.max=function(a){return!n(a)||z(p)||d(a)<=p};g.$observe("max",function(a){p=r(a);h.$validate()})}}}function tc(a,b,d,c){(c.$$hasNativeValidators=
E(b[0].validity))&&c.$parsers.push(function(a){var c=b.prop("validity")||{};return c.badInput||c.typeMismatch?void 0:a})}function Zd(a){a.$$parserName="number";a.$parsers.push(function(b){if(a.$isEmpty(b))return null;if(Ug.test(b))return parseFloat(b)});a.$formatters.push(function(b){if(!a.$isEmpty(b)){if(!ba(b))throw pb("numfmt",b);b=b.toString()}return b})}function qb(a){x(a)&&!ba(a)&&(a=parseFloat(a));return ia(a)?void 0:a}function uc(a){var b=a.toString(),d=b.indexOf(".");return-1===d?-1<a&&1>
a&&(a=/e-(\d+)$/.exec(b))?Number(a[1]):0:b.length-d-1}function $d(a,b,d,c,f){if(x(c)){a=a(c);if(!a.constant)throw pb("constexpr",d,c);return a(b)}return f}function vc(a,b){a="ngClass"+a;return["$animate",function(d){function c(a,b){var c=[],d=0;a:for(;d<a.length;d++){for(var f=a[d],m=0;m<b.length;m++)if(f===b[m])continue a;c.push(f)}return c}function f(a){var b=[];return I(a)?(q(a,function(a){b=b.concat(f(a))}),b):D(a)?a.split(" "):E(a)?(q(a,function(a,c){a&&(b=b.concat(c.split(" ")))}),b):a}return{restrict:"AC",
link:function(e,g,h){function k(a){a=l(a,1);h.$addClass(a)}function l(a,b){var c=g.data("$classCounts")||V(),d=[];q(a,function(a){if(0<b||c[a])c[a]=(c[a]||0)+b,c[a]===+(0<b)&&d.push(a)});g.data("$classCounts",c);return d.join(" ")}function m(a,b){var e=c(b,a),f=c(a,b),e=l(e,1),f=l(f,-1);e&&e.length&&d.addClass(g,e);f&&f.length&&d.removeClass(g,f)}function n(a){if(!0===b||(e.$index&1)===b){var c=f(a||[]);if(!r)k(c);else if(!na(a,r)){var d=f(r);m(d,c)}}r=I(a)?a.map(function(a){return ka(a)}):ka(a)}
var r;h.$observe("class",function(b){n(e.$eval(h[a]))});"ngClass"!==a&&e.$watch("$index",function(a,c){var d=a&1;if(d!==(c&1)){var e=f(r);d===b?k(e):(d=l(e,-1),h.$removeClass(d))}});e.$watch(h[a],n,!0)}}}]}function Xd(a){function b(a,b){b&&!e[a]?(k.addClass(f,a),e[a]=!0):!b&&e[a]&&(k.removeClass(f,a),e[a]=!1)}function d(a,c){a=a?"-"+Hc(a,"-"):"";b(rb+a,!0===c);b(ae+a,!1===c)}var c=a.ctrl,f=a.$element,e={},g=a.set,h=a.unset,k=a.$animate;e[ae]=!(e[rb]=f.hasClass(rb));c.$setValidity=function(a,e,f){z(e)?
(c.$pending||(c.$pending={}),g(c.$pending,a,f)):(c.$pending&&h(c.$pending,a,f),be(c.$pending)&&(c.$pending=void 0));Ka(e)?e?(h(c.$error,a,f),g(c.$$success,a,f)):(g(c.$error,a,f),h(c.$$success,a,f)):(h(c.$error,a,f),h(c.$$success,a,f));c.$pending?(b(ce,!0),c.$valid=c.$invalid=void 0,d("",null)):(b(ce,!1),c.$valid=be(c.$error),c.$invalid=!c.$valid,d("",c.$valid));e=c.$pending&&c.$pending[a]?void 0:c.$error[a]?!1:c.$$success[a]?!0:null;d(a,e);c.$$parentForm.$setValidity(a,e,c)}}function be(a){if(a)for(var b in a)if(a.hasOwnProperty(b))return!1;
return!0}var Vg=/^\/(.+)\/([a-z]*)$/,ua=Object.prototype.hasOwnProperty,Q=function(a){return D(a)?a.toLowerCase():a},wb=function(a){return D(a)?a.toUpperCase():a},Ia,F,za,va=[].slice,pg=[].splice,Wg=[].push,ma=Object.prototype.toString,Bc=Object.getPrototypeOf,xa=G("ng"),$=y.angular||(y.angular={}),Wb,sb=0;Ia=y.document.documentMode;var ia=Number.isNaN||function(a){return a!==a};w.$inject=[];$a.$inject=[];var I=Array.isArray,ne=/^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/,
Y=function(a){return D(a)?a.trim():a},Jd=function(a){return a.replace(/([-()[\]{}+?*.$^|,:#<!\\])/g,"\\$1").replace(/\x08/g,"\\x08")},da=function(){if(!x(da.rules)){var a=y.document.querySelector("[ng-csp]")||y.document.querySelector("[data-ng-csp]");if(a){var b=a.getAttribute("ng-csp")||a.getAttribute("data-ng-csp");da.rules={noUnsafeEval:!b||-1!==b.indexOf("no-unsafe-eval"),noInlineStyle:!b||-1!==b.indexOf("no-inline-style")}}else{a=da;try{new Function(""),b=!1}catch(d){b=!0}a.rules={noUnsafeEval:b,
noInlineStyle:!1}}}return da.rules},ub=function(){if(x(ub.name_))return ub.name_;var a,b,d=Oa.length,c,f;for(b=0;b<d;++b)if(c=Oa[b],a=y.document.querySelector("["+c.replace(":","\\:")+"jq]")){f=a.getAttribute(c+"jq");break}return ub.name_=f},qe=/:/g,Oa=["ng-","data-ng-","ng:","x-ng-"],te=function(a){var b=a.currentScript,b=b&&b.getAttribute("src");if(!b)return!0;var d=a.createElement("a");d.href=b;if(a.location.origin===d.origin)return!0;switch(d.protocol){case "http:":case "https:":case "ftp:":case "blob:":case "file:":case "data:":return!0;
default:return!1}}(y.document),we=/[A-Z]/g,Ic=!1,La=3,Ae={full:"1.5.11",major:1,minor:5,dot:11,codeName:"princely-quest"};W.expando="ng339";var jb=W.cache={},bg=1;W._data=function(a){return this.cache[a[this.expando]]||{}};var Xf=/([:\-_]+(.))/g,Yf=/^moz([A-Z])/,Ab={mouseleave:"mouseout",mouseenter:"mouseover"},Yb=G("jqLite"),ag=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,Xb=/<|&#?\w+;/,Zf=/<([\w:-]+)/,$f=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,pa={option:[1,'<select multiple="multiple">',
"</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};pa.optgroup=pa.option;pa.tbody=pa.tfoot=pa.colgroup=pa.caption=pa.thead;pa.th=pa.td;var gg=y.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)},Pa=W.prototype={ready:function(a){function b(){d||(d=!0,a())}var d=!1;"complete"===y.document.readyState?y.setTimeout(b):
(this.on("DOMContentLoaded",b),W(y).on("load",b))},toString:function(){var a=[];q(this,function(b){a.push(""+b)});return"["+a.join(", ")+"]"},eq:function(a){return 0<=a?F(this[a]):F(this[this.length+a])},length:0,push:Wg,sort:[].sort,splice:[].splice},Gb={};q("multiple selected checked disabled readOnly required open".split(" "),function(a){Gb[Q(a)]=a});var $c={};q("input select option textarea button form details".split(" "),function(a){$c[a]=!0});var gd={ngMinlength:"minlength",ngMaxlength:"maxlength",
ngMin:"min",ngMax:"max",ngPattern:"pattern"};q({data:$b,removeData:ib,hasData:function(a){for(var b in jb[a.ng339])return!0;return!1},cleanData:function(a){for(var b=0,d=a.length;b<d;b++)ib(a[b])}},function(a,b){W[b]=a});q({data:$b,inheritedData:Eb,scope:function(a){return F.data(a,"$scope")||Eb(a.parentNode||a,["$isolateScope","$scope"])},isolateScope:function(a){return F.data(a,"$isolateScope")||F.data(a,"$isolateScopeNoTemplate")},controller:Xc,injector:function(a){return Eb(a,"$injector")},removeAttr:function(a,
b){a.removeAttribute(b)},hasClass:Bb,css:function(a,b,d){b=hb(b);if(x(d))a.style[b]=d;else return a.style[b]},attr:function(a,b,d){var c=a.nodeType;if(c!==La&&2!==c&&8!==c)if(c=Q(b),Gb[c])if(x(d))d?(a[b]=!0,a.setAttribute(b,c)):(a[b]=!1,a.removeAttribute(c));else return a[b]||(a.attributes.getNamedItem(b)||w).specified?c:void 0;else if(x(d))a.setAttribute(b,d);else if(a.getAttribute)return a=a.getAttribute(b,2),null===a?void 0:a},prop:function(a,b,d){if(x(d))a[b]=d;else return a[b]},text:function(){function a(a,
d){if(z(d)){var c=a.nodeType;return 1===c||c===La?a.textContent:""}a.textContent=d}a.$dv="";return a}(),val:function(a,b){if(z(b)){if(a.multiple&&"select"===wa(a)){var d=[];q(a.options,function(a){a.selected&&d.push(a.value||a.text)});return 0===d.length?null:d}return a.value}a.value=b},html:function(a,b){if(z(b))return a.innerHTML;yb(a,!0);a.innerHTML=b},empty:Yc},function(a,b){W.prototype[b]=function(b,c){var f,e,g=this.length;if(a!==Yc&&z(2===a.length&&a!==Bb&&a!==Xc?b:c)){if(E(b)){for(f=0;f<g;f++)if(a===
$b)a(this[f],b);else for(e in b)a(this[f],e,b[e]);return this}f=a.$dv;g=z(f)?Math.min(g,1):g;for(e=0;e<g;e++){var h=a(this[e],b,c);f=f?f+h:h}return f}for(f=0;f<g;f++)a(this[f],b,c);return this}});q({removeData:ib,on:function(a,b,d,c){if(x(c))throw Yb("onargs");if(Sc(a)){c=zb(a,!0);var f=c.events,e=c.handle;e||(e=c.handle=dg(a,f));c=0<=b.indexOf(" ")?b.split(" "):[b];for(var g=c.length,h=function(b,c,g){var h=f[b];h||(h=f[b]=[],h.specialHandlerWrapper=c,"$destroy"===b||g||a.addEventListener(b,e,!1));
h.push(d)};g--;)b=c[g],Ab[b]?(h(Ab[b],fg),h(b,void 0,!0)):h(b)}},off:Wc,one:function(a,b,d){a=F(a);a.on(b,function f(){a.off(b,d);a.off(b,f)});a.on(b,d)},replaceWith:function(a,b){var d,c=a.parentNode;yb(a);q(new W(b),function(b){d?c.insertBefore(b,d.nextSibling):c.replaceChild(b,a);d=b})},children:function(a){var b=[];q(a.childNodes,function(a){1===a.nodeType&&b.push(a)});return b},contents:function(a){return a.contentDocument||a.childNodes||[]},append:function(a,b){var d=a.nodeType;if(1===d||11===
d){b=new W(b);for(var d=0,c=b.length;d<c;d++)a.appendChild(b[d])}},prepend:function(a,b){if(1===a.nodeType){var d=a.firstChild;q(new W(b),function(b){a.insertBefore(b,d)})}},wrap:function(a,b){Uc(a,F(b).eq(0).clone()[0])},remove:Fb,detach:function(a){Fb(a,!0)},after:function(a,b){var d=a,c=a.parentNode;if(c){b=new W(b);for(var f=0,e=b.length;f<e;f++){var g=b[f];c.insertBefore(g,d.nextSibling);d=g}}},addClass:Db,removeClass:Cb,toggleClass:function(a,b,d){b&&q(b.split(" "),function(b){var f=d;z(f)&&
(f=!Bb(a,b));(f?Db:Cb)(a,b)})},parent:function(a){return(a=a.parentNode)&&11!==a.nodeType?a:null},next:function(a){return a.nextElementSibling},find:function(a,b){return a.getElementsByTagName?a.getElementsByTagName(b):[]},clone:Zb,triggerHandler:function(a,b,d){var c,f,e=b.type||b,g=zb(a);if(g=(g=g&&g.events)&&g[e])c={preventDefault:function(){this.defaultPrevented=!0},isDefaultPrevented:function(){return!0===this.defaultPrevented},stopImmediatePropagation:function(){this.immediatePropagationStopped=
!0},isImmediatePropagationStopped:function(){return!0===this.immediatePropagationStopped},stopPropagation:w,type:e,target:a},b.type&&(c=R(c,b)),b=ka(g),f=d?[c].concat(d):[c],q(b,function(b){c.isImmediatePropagationStopped()||b.apply(a,f)})}},function(a,b){W.prototype[b]=function(b,c,f){for(var e,g=0,h=this.length;g<h;g++)z(e)?(e=a(this[g],b,c,f),x(e)&&(e=F(e))):Vc(e,a(this[g],b,c,f));return x(e)?e:this}});W.prototype.bind=W.prototype.on;W.prototype.unbind=W.prototype.off;Sa.prototype={put:function(a,
b){this[Aa(a,this.nextUid)]=b},get:function(a){return this[Aa(a,this.nextUid)]},remove:function(a){var b=this[a=Aa(a,this.nextUid)];delete this[a];return b}};var Vf=[function(){this.$get=[function(){return Sa}]}],ig=/^([^(]+?)=>/,jg=/^[^(]*\(\s*([^)]*)\)/m,Xg=/,/,Yg=/^\s*(_?)(\S+?)\1\s*$/,hg=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg,Ba=G("$injector");fb.$$annotate=function(a,b,d){var c;if("function"===typeof a){if(!(c=a.$inject)){c=[];if(a.length){if(b)throw D(d)&&d||(d=a.name||kg(a)),Ba("strictdi",d);b=
ad(a);q(b[1].split(Xg),function(a){a.replace(Yg,function(a,b,d){c.push(d)})})}a.$inject=c}}else I(a)?(b=a.length-1,Qa(a[b],"fn"),c=a.slice(0,b)):Qa(a,"fn",!0);return c};var de=G("$animate"),nf=function(){this.$get=w},of=function(){var a=new Sa,b=[];this.$get=["$$AnimateRunner","$rootScope",function(d,c){function f(a,b,c){var d=!1;b&&(b=D(b)?b.split(" "):I(b)?b:[],q(b,function(b){b&&(d=!0,a[b]=c)}));return d}function e(){q(b,function(b){var c=a.get(b);if(c){var d=lg(b.attr("class")),e="",f="";q(c,
function(a,b){a!==!!d[b]&&(a?e+=(e.length?" ":"")+b:f+=(f.length?" ":"")+b)});q(b,function(a){e&&Db(a,e);f&&Cb(a,f)});a.remove(b)}});b.length=0}return{enabled:w,on:w,off:w,pin:w,push:function(g,h,k,l){l&&l();k=k||{};k.from&&g.css(k.from);k.to&&g.css(k.to);if(k.addClass||k.removeClass)if(h=k.addClass,l=k.removeClass,k=a.get(g)||{},h=f(k,h,!0),l=f(k,l,!1),h||l)a.put(g,k),b.push(g),1===b.length&&c.$$postDigest(e);g=new d;g.complete();return g}}}]},lf=["$provide",function(a){var b=this;this.$$registeredAnimations=
Object.create(null);this.register=function(d,c){if(d&&"."!==d.charAt(0))throw de("notcsel",d);var f=d+"-animation";b.$$registeredAnimations[d.substr(1)]=f;a.factory(f,c)};this.classNameFilter=function(a){if(1===arguments.length&&(this.$$classNameFilter=a instanceof RegExp?a:null)&&/(\s+|\/)ng-animate(\s+|\/)/.test(this.$$classNameFilter.toString()))throw de("nongcls","ng-animate");return this.$$classNameFilter};this.$get=["$$animateQueue",function(a){function b(a,c,d){if(d){var h;a:{for(h=0;h<d.length;h++){var k=
d[h];if(1===k.nodeType){h=k;break a}}h=void 0}!h||h.parentNode||h.previousElementSibling||(d=null)}d?d.after(a):c.prepend(a)}return{on:a.on,off:a.off,pin:a.pin,enabled:a.enabled,cancel:function(a){a.end&&a.end()},enter:function(f,e,g,h){e=e&&F(e);g=g&&F(g);e=e||g.parent();b(f,e,g);return a.push(f,"enter",Ca(h))},move:function(f,e,g,h){e=e&&F(e);g=g&&F(g);e=e||g.parent();b(f,e,g);return a.push(f,"move",Ca(h))},leave:function(b,c){return a.push(b,"leave",Ca(c),function(){b.remove()})},addClass:function(b,
c,g){g=Ca(g);g.addClass=kb(g.addclass,c);return a.push(b,"addClass",g)},removeClass:function(b,c,g){g=Ca(g);g.removeClass=kb(g.removeClass,c);return a.push(b,"removeClass",g)},setClass:function(b,c,g,h){h=Ca(h);h.addClass=kb(h.addClass,c);h.removeClass=kb(h.removeClass,g);return a.push(b,"setClass",h)},animate:function(b,c,g,h,k){k=Ca(k);k.from=k.from?R(k.from,c):c;k.to=k.to?R(k.to,g):g;k.tempClasses=kb(k.tempClasses,h||"ng-inline-animate");return a.push(b,"animate",k)}}}]}],qf=function(){this.$get=
["$$rAF",function(a){function b(b){d.push(b);1<d.length||a(function(){for(var a=0;a<d.length;a++)d[a]();d=[]})}var d=[];return function(){var a=!1;b(function(){a=!0});return function(d){a?d():b(d)}}}]},pf=function(){this.$get=["$q","$sniffer","$$animateAsyncRun","$document","$timeout",function(a,b,d,c,f){function e(a){this.setHost(a);var b=d();this._doneCallbacks=[];this._tick=function(a){var d=c[0];d&&d.hidden?f(a,0,!1):b(a)};this._state=0}e.chain=function(a,b){function c(){if(d===a.length)b(!0);
else a[d](function(a){!1===a?b(!1):(d++,c())})}var d=0;c()};e.all=function(a,b){function c(f){e=e&&f;++d===a.length&&b(e)}var d=0,e=!0;q(a,function(a){a.done(c)})};e.prototype={setHost:function(a){this.host=a||{}},done:function(a){2===this._state?a():this._doneCallbacks.push(a)},progress:w,getPromise:function(){if(!this.promise){var b=this;this.promise=a(function(a,c){b.done(function(b){!1===b?c():a()})})}return this.promise},then:function(a,b){return this.getPromise().then(a,b)},"catch":function(a){return this.getPromise()["catch"](a)},
"finally":function(a){return this.getPromise()["finally"](a)},pause:function(){this.host.pause&&this.host.pause()},resume:function(){this.host.resume&&this.host.resume()},end:function(){this.host.end&&this.host.end();this._resolve(!0)},cancel:function(){this.host.cancel&&this.host.cancel();this._resolve(!1)},complete:function(a){var b=this;0===b._state&&(b._state=1,b._tick(function(){b._resolve(a)}))},_resolve:function(a){2!==this._state&&(q(this._doneCallbacks,function(b){b(a)}),this._doneCallbacks.length=
0,this._state=2)}};return e}]},mf=function(){this.$get=["$$rAF","$q","$$AnimateRunner",function(a,b,d){return function(b,f){function e(){a(function(){g.addClass&&(b.addClass(g.addClass),g.addClass=null);g.removeClass&&(b.removeClass(g.removeClass),g.removeClass=null);g.to&&(b.css(g.to),g.to=null);h||k.complete();h=!0});return k}var g=f||{};g.$$prepared||(g=sa(g));g.cleanupStyles&&(g.from=g.to=null);g.from&&(b.css(g.from),g.from=null);var h,k=new d;return{start:e,end:e}}}]},fa=G("$compile"),ec=new function(){};
Kc.$inject=["$provide","$$sanitizeUriProvider"];Hb.prototype.isFirstChange=function(){return this.previousValue===ec};var bd=/^((?:x|data)[:\-_])/i,id=G("$controller"),hd=/^(\S+)(\s+as\s+([\w$]+))?$/,wf=function(){this.$get=["$document",function(a){return function(b){b?!b.nodeType&&b instanceof F&&(b=b[0]):b=a[0].body;return b.offsetWidth+1}}]},jd="application/json",hc={"Content-Type":jd+";charset=utf-8"},rg=/^\[|^\{(?!\{)/,sg={"[":/]$/,"{":/}$/},qg=/^\)]\}',?\n/,Zg=G("$http"),nd=function(a){return function(){throw Zg("legacy",
a);}},Ha=$.$interpolateMinErr=G("$interpolate");Ha.throwNoconcat=function(a){throw Ha("noconcat",a);};Ha.interr=function(a,b){return Ha("interr",a,b.toString())};var Ef=function(){this.$get=["$window",function(a){function b(a){var b=function(a){b.data=a;b.called=!0};b.id=a;return b}var d=a.angular.callbacks,c={};return{createCallback:function(a){a="_"+(d.$$counter++).toString(36);var e="angular.callbacks."+a,g=b(a);c[e]=d[a]=g;return e},wasCalled:function(a){return c[a].called},getResponse:function(a){return c[a].data},
removeCallback:function(a){delete d[c[a].id];delete c[a]}}}]},$g=/^([^?#]*)(\?([^#]*))?(#(.*))?$/,ug={http:80,https:443,ftp:21},lb=G("$location"),vg=/^\s*[\\/]{2,}/,ah={$$absUrl:"",$$html5:!1,$$replace:!1,absUrl:Ib("$$absUrl"),url:function(a){if(z(a))return this.$$url;var b=$g.exec(a);(b[1]||""===a)&&this.path(decodeURIComponent(b[1]));(b[2]||b[1]||""===a)&&this.search(b[3]||"");this.hash(b[5]||"");return this},protocol:Ib("$$protocol"),host:Ib("$$host"),port:Ib("$$port"),path:sd("$$path",function(a){a=
null!==a?a.toString():"";return"/"===a.charAt(0)?a:"/"+a}),search:function(a,b){switch(arguments.length){case 0:return this.$$search;case 1:if(D(a)||ba(a))a=a.toString(),this.$$search=Fc(a);else if(E(a))a=sa(a,{}),q(a,function(b,c){null==b&&delete a[c]}),this.$$search=a;else throw lb("isrcharg");break;default:z(b)||null===b?delete this.$$search[a]:this.$$search[a]=b}this.$$compose();return this},hash:sd("$$hash",function(a){return null!==a?a.toString():""}),replace:function(){this.$$replace=!0;return this}};
q([rd,kc,jc],function(a){a.prototype=Object.create(ah);a.prototype.state=function(b){if(!arguments.length)return this.$$state;if(a!==jc||!this.$$html5)throw lb("nostate");this.$$state=z(b)?null:b;return this}});var ea=G("$parse"),ud=[].constructor,vd=(!1).constructor,wd=Function.constructor,xd=(0).constructor,yd={}.constructor,zd="".constructor,Ag=ud.prototype,Bg=vd.prototype,Kb=wd.prototype,Cg=xd.prototype,Ad=yd.prototype,Dg=zd.prototype,xg=Kb.call,yg=Kb.apply,zg=Kb.bind,Fg=Ad.valueOf,Qb=V();q("+ - * / % === !== == != < > <= >= && || ! = |".split(" "),
function(a){Qb[a]=!0});var bh={n:"\n",f:"\f",r:"\r",t:"\t",v:"\v","'":"'",'"':'"'},mc=function(a){this.options=a};mc.prototype={constructor:mc,lex:function(a){this.text=a;this.index=0;for(this.tokens=[];this.index<this.text.length;)if(a=this.text.charAt(this.index),'"'===a||"'"===a)this.readString(a);else if(this.isNumber(a)||"."===a&&this.isNumber(this.peek()))this.readNumber();else if(this.isIdentifierStart(this.peekMultichar()))this.readIdent();else if(this.is(a,"(){}[].,;:?"))this.tokens.push({index:this.index,
text:a}),this.index++;else if(this.isWhitespace(a))this.index++;else{var b=a+this.peek(),d=b+this.peek(2),c=Qb[b],f=Qb[d];Qb[a]||c||f?(a=f?d:c?b:a,this.tokens.push({index:this.index,text:a,operator:!0}),this.index+=a.length):this.throwError("Unexpected next character ",this.index,this.index+1)}return this.tokens},is:function(a,b){return-1!==b.indexOf(a)},peek:function(a){a=a||1;return this.index+a<this.text.length?this.text.charAt(this.index+a):!1},isNumber:function(a){return"0"<=a&&"9">=a&&"string"===
typeof a},isWhitespace:function(a){return" "===a||"\r"===a||"\t"===a||"\n"===a||"\v"===a||"\u00a0"===a},isIdentifierStart:function(a){return this.options.isIdentifierStart?this.options.isIdentifierStart(a,this.codePointAt(a)):this.isValidIdentifierStart(a)},isValidIdentifierStart:function(a){return"a"<=a&&"z">=a||"A"<=a&&"Z">=a||"_"===a||"$"===a},isIdentifierContinue:function(a){return this.options.isIdentifierContinue?this.options.isIdentifierContinue(a,this.codePointAt(a)):this.isValidIdentifierContinue(a)},
isValidIdentifierContinue:function(a,b){return this.isValidIdentifierStart(a,b)||this.isNumber(a)},codePointAt:function(a){return 1===a.length?a.charCodeAt(0):(a.charCodeAt(0)<<10)+a.charCodeAt(1)-56613888},peekMultichar:function(){var a=this.text.charAt(this.index),b=this.peek();if(!b)return a;var d=a.charCodeAt(0),c=b.charCodeAt(0);return 55296<=d&&56319>=d&&56320<=c&&57343>=c?a+b:a},isExpOperator:function(a){return"-"===a||"+"===a||this.isNumber(a)},throwError:function(a,b,d){d=d||this.index;b=
x(b)?"s "+b+"-"+this.index+" ["+this.text.substring(b,d)+"]":" "+d;throw ea("lexerr",a,b,this.text);},readNumber:function(){for(var a="",b=this.index;this.index<this.text.length;){var d=Q(this.text.charAt(this.index));if("."===d||this.isNumber(d))a+=d;else{var c=this.peek();if("e"===d&&this.isExpOperator(c))a+=d;else if(this.isExpOperator(d)&&c&&this.isNumber(c)&&"e"===a.charAt(a.length-1))a+=d;else if(!this.isExpOperator(d)||c&&this.isNumber(c)||"e"!==a.charAt(a.length-1))break;else this.throwError("Invalid exponent")}this.index++}this.tokens.push({index:b,
text:a,constant:!0,value:Number(a)})},readIdent:function(){var a=this.index;for(this.index+=this.peekMultichar().length;this.index<this.text.length;){var b=this.peekMultichar();if(!this.isIdentifierContinue(b))break;this.index+=b.length}this.tokens.push({index:a,text:this.text.slice(a,this.index),identifier:!0})},readString:function(a){var b=this.index;this.index++;for(var d="",c=a,f=!1;this.index<this.text.length;){var e=this.text.charAt(this.index),c=c+e;if(f)"u"===e?(f=this.text.substring(this.index+
1,this.index+5),f.match(/[\da-f]{4}/i)||this.throwError("Invalid unicode escape [\\u"+f+"]"),this.index+=4,d+=String.fromCharCode(parseInt(f,16))):d+=bh[e]||e,f=!1;else if("\\"===e)f=!0;else{if(e===a){this.index++;this.tokens.push({index:b,text:c,constant:!0,value:d});return}d+=e}this.index++}this.throwError("Unterminated quote",b)}};var t=function(a,b){this.lexer=a;this.options=b};t.Program="Program";t.ExpressionStatement="ExpressionStatement";t.AssignmentExpression="AssignmentExpression";t.ConditionalExpression=
"ConditionalExpression";t.LogicalExpression="LogicalExpression";t.BinaryExpression="BinaryExpression";t.UnaryExpression="UnaryExpression";t.CallExpression="CallExpression";t.MemberExpression="MemberExpression";t.Identifier="Identifier";t.Literal="Literal";t.ArrayExpression="ArrayExpression";t.Property="Property";t.ObjectExpression="ObjectExpression";t.ThisExpression="ThisExpression";t.LocalsExpression="LocalsExpression";t.NGValueParameter="NGValueParameter";t.prototype={ast:function(a){this.text=
a;this.tokens=this.lexer.lex(a);a=this.program();0!==this.tokens.length&&this.throwError("is an unexpected token",this.tokens[0]);return a},program:function(){for(var a=[];;)if(0<this.tokens.length&&!this.peek("}",")",";","]")&&a.push(this.expressionStatement()),!this.expect(";"))return{type:t.Program,body:a}},expressionStatement:function(){return{type:t.ExpressionStatement,expression:this.filterChain()}},filterChain:function(){for(var a=this.expression();this.expect("|");)a=this.filter(a);return a},
expression:function(){return this.assignment()},assignment:function(){var a=this.ternary();if(this.expect("=")){if(!Dd(a))throw ea("lval");a={type:t.AssignmentExpression,left:a,right:this.assignment(),operator:"="}}return a},ternary:function(){var a=this.logicalOR(),b,d;return this.expect("?")&&(b=this.expression(),this.consume(":"))?(d=this.expression(),{type:t.ConditionalExpression,test:a,alternate:b,consequent:d}):a},logicalOR:function(){for(var a=this.logicalAND();this.expect("||");)a={type:t.LogicalExpression,
operator:"||",left:a,right:this.logicalAND()};return a},logicalAND:function(){for(var a=this.equality();this.expect("&&");)a={type:t.LogicalExpression,operator:"&&",left:a,right:this.equality()};return a},equality:function(){for(var a=this.relational(),b;b=this.expect("==","!=","===","!==");)a={type:t.BinaryExpression,operator:b.text,left:a,right:this.relational()};return a},relational:function(){for(var a=this.additive(),b;b=this.expect("<",">","<=",">=");)a={type:t.BinaryExpression,operator:b.text,
left:a,right:this.additive()};return a},additive:function(){for(var a=this.multiplicative(),b;b=this.expect("+","-");)a={type:t.BinaryExpression,operator:b.text,left:a,right:this.multiplicative()};return a},multiplicative:function(){for(var a=this.unary(),b;b=this.expect("*","/","%");)a={type:t.BinaryExpression,operator:b.text,left:a,right:this.unary()};return a},unary:function(){var a;return(a=this.expect("+","-","!"))?{type:t.UnaryExpression,operator:a.text,prefix:!0,argument:this.unary()}:this.primary()},
primary:function(){var a;this.expect("(")?(a=this.filterChain(),this.consume(")")):this.expect("[")?a=this.arrayDeclaration():this.expect("{")?a=this.object():this.selfReferential.hasOwnProperty(this.peek().text)?a=sa(this.selfReferential[this.consume().text]):this.options.literals.hasOwnProperty(this.peek().text)?a={type:t.Literal,value:this.options.literals[this.consume().text]}:this.peek().identifier?a=this.identifier():this.peek().constant?a=this.constant():this.throwError("not a primary expression",
this.peek());for(var b;b=this.expect("(","[",".");)"("===b.text?(a={type:t.CallExpression,callee:a,arguments:this.parseArguments()},this.consume(")")):"["===b.text?(a={type:t.MemberExpression,object:a,property:this.expression(),computed:!0},this.consume("]")):"."===b.text?a={type:t.MemberExpression,object:a,property:this.identifier(),computed:!1}:this.throwError("IMPOSSIBLE");return a},filter:function(a){a=[a];for(var b={type:t.CallExpression,callee:this.identifier(),arguments:a,filter:!0};this.expect(":");)a.push(this.expression());
return b},parseArguments:function(){var a=[];if(")"!==this.peekToken().text){do a.push(this.filterChain());while(this.expect(","))}return a},identifier:function(){var a=this.consume();a.identifier||this.throwError("is not a valid identifier",a);return{type:t.Identifier,name:a.text}},constant:function(){return{type:t.Literal,value:this.consume().value}},arrayDeclaration:function(){var a=[];if("]"!==this.peekToken().text){do{if(this.peek("]"))break;a.push(this.expression())}while(this.expect(","))}this.consume("]");
return{type:t.ArrayExpression,elements:a}},object:function(){var a=[],b;if("}"!==this.peekToken().text){do{if(this.peek("}"))break;b={type:t.Property,kind:"init"};this.peek().constant?(b.key=this.constant(),b.computed=!1,this.consume(":"),b.value=this.expression()):this.peek().identifier?(b.key=this.identifier(),b.computed=!1,this.peek(":")?(this.consume(":"),b.value=this.expression()):b.value=b.key):this.peek("[")?(this.consume("["),b.key=this.expression(),this.consume("]"),b.computed=!0,this.consume(":"),
b.value=this.expression()):this.throwError("invalid key",this.peek());a.push(b)}while(this.expect(","))}this.consume("}");return{type:t.ObjectExpression,properties:a}},throwError:function(a,b){throw ea("syntax",b.text,a,b.index+1,this.text,this.text.substring(b.index));},consume:function(a){if(0===this.tokens.length)throw ea("ueoe",this.text);var b=this.expect(a);b||this.throwError("is unexpected, expecting ["+a+"]",this.peek());return b},peekToken:function(){if(0===this.tokens.length)throw ea("ueoe",
this.text);return this.tokens[0]},peek:function(a,b,d,c){return this.peekAhead(0,a,b,d,c)},peekAhead:function(a,b,d,c,f){if(this.tokens.length>a){a=this.tokens[a];var e=a.text;if(e===b||e===d||e===c||e===f||!(b||d||c||f))return a}return!1},expect:function(a,b,d,c){return(a=this.peek(a,b,d,c))?(this.tokens.shift(),a):!1},selfReferential:{"this":{type:t.ThisExpression},$locals:{type:t.LocalsExpression}}};Gd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.state={nextId:0,filters:{},
expensiveChecks:b,fn:{vars:[],body:[],own:{}},assign:{vars:[],body:[],own:{}},inputs:[]};X(c,d.$filter);var f="",e;this.stage="assign";if(e=Ed(c))this.state.computing="assign",f=this.nextId(),this.recurse(e,f),this.return_(f),f="fn.assign="+this.generateFunction("assign","s,v,l");e=Cd(c.body);d.stage="inputs";q(e,function(a,b){var c="fn"+b;d.state[c]={vars:[],body:[],own:{}};d.state.computing=c;var e=d.nextId();d.recurse(a,e);d.return_(e);d.state.inputs.push(c);a.watchId=b});this.state.computing=
"fn";this.stage="main";this.recurse(c);f='"'+this.USE+" "+this.STRICT+'";\n'+this.filterPrefix()+"var fn="+this.generateFunction("fn","s,l,a,i")+f+this.watchFns()+"return fn;";f=(new Function("$filter","ensureSafeMemberName","ensureSafeObject","ensureSafeFunction","getStringValue","ensureSafeAssignContext","ifDefined","plus","text",f))(this.$filter,Ua,Ea,td,wg,Jb,Eg,Bd,a);this.state=this.stage=void 0;f.literal=Fd(c);f.constant=c.constant;return f},USE:"use",STRICT:"strict",watchFns:function(){var a=
[],b=this.state.inputs,d=this;q(b,function(b){a.push("var "+b+"="+d.generateFunction(b,"s"))});b.length&&a.push("fn.inputs=["+b.join(",")+"];");return a.join("")},generateFunction:function(a,b){return"function("+b+"){"+this.varsPrefix(a)+this.body(a)+"};"},filterPrefix:function(){var a=[],b=this;q(this.state.filters,function(d,c){a.push(d+"=$filter("+b.escape(c)+")")});return a.length?"var "+a.join(",")+";":""},varsPrefix:function(a){return this.state[a].vars.length?"var "+this.state[a].vars.join(",")+
";":""},body:function(a){return this.state[a].body.join("")},recurse:function(a,b,d,c,f,e){var g,h,k=this,l,m,n;c=c||w;if(!e&&x(a.watchId))b=b||this.nextId(),this.if_("i",this.lazyAssign(b,this.computedMember("i",a.watchId)),this.lazyRecurse(a,b,d,c,f,!0));else switch(a.type){case t.Program:q(a.body,function(b,c){k.recurse(b.expression,void 0,void 0,function(a){h=a});c!==a.body.length-1?k.current().body.push(h,";"):k.return_(h)});break;case t.Literal:m=this.escape(a.value);this.assign(b,m);c(m);break;
case t.UnaryExpression:this.recurse(a.argument,void 0,void 0,function(a){h=a});m=a.operator+"("+this.ifDefined(h,0)+")";this.assign(b,m);c(m);break;case t.BinaryExpression:this.recurse(a.left,void 0,void 0,function(a){g=a});this.recurse(a.right,void 0,void 0,function(a){h=a});m="+"===a.operator?this.plus(g,h):"-"===a.operator?this.ifDefined(g,0)+a.operator+this.ifDefined(h,0):"("+g+")"+a.operator+"("+h+")";this.assign(b,m);c(m);break;case t.LogicalExpression:b=b||this.nextId();k.recurse(a.left,b);
k.if_("&&"===a.operator?b:k.not(b),k.lazyRecurse(a.right,b));c(b);break;case t.ConditionalExpression:b=b||this.nextId();k.recurse(a.test,b);k.if_(b,k.lazyRecurse(a.alternate,b),k.lazyRecurse(a.consequent,b));c(b);break;case t.Identifier:b=b||this.nextId();d&&(d.context="inputs"===k.stage?"s":this.assign(this.nextId(),this.getHasOwnProperty("l",a.name)+"?l:s"),d.computed=!1,d.name=a.name);Ua(a.name);k.if_("inputs"===k.stage||k.not(k.getHasOwnProperty("l",a.name)),function(){k.if_("inputs"===k.stage||
"s",function(){f&&1!==f&&k.if_(k.not(k.nonComputedMember("s",a.name)),k.lazyAssign(k.nonComputedMember("s",a.name),"{}"));k.assign(b,k.nonComputedMember("s",a.name))})},b&&k.lazyAssign(b,k.nonComputedMember("l",a.name)));(k.state.expensiveChecks||Lb(a.name))&&k.addEnsureSafeObject(b);c(b);break;case t.MemberExpression:g=d&&(d.context=this.nextId())||this.nextId();b=b||this.nextId();k.recurse(a.object,g,void 0,function(){k.if_(k.notNull(g),function(){f&&1!==f&&k.addEnsureSafeAssignContext(g);if(a.computed)h=
k.nextId(),k.recurse(a.property,h),k.getStringValue(h),k.addEnsureSafeMemberName(h),f&&1!==f&&k.if_(k.not(k.computedMember(g,h)),k.lazyAssign(k.computedMember(g,h),"{}")),m=k.ensureSafeObject(k.computedMember(g,h)),k.assign(b,m),d&&(d.computed=!0,d.name=h);else{Ua(a.property.name);f&&1!==f&&k.if_(k.not(k.nonComputedMember(g,a.property.name)),k.lazyAssign(k.nonComputedMember(g,a.property.name),"{}"));m=k.nonComputedMember(g,a.property.name);if(k.state.expensiveChecks||Lb(a.property.name))m=k.ensureSafeObject(m);
k.assign(b,m);d&&(d.computed=!1,d.name=a.property.name)}},function(){k.assign(b,"undefined")});c(b)},!!f);break;case t.CallExpression:b=b||this.nextId();a.filter?(h=k.filter(a.callee.name),l=[],q(a.arguments,function(a){var b=k.nextId();k.recurse(a,b);l.push(b)}),m=h+"("+l.join(",")+")",k.assign(b,m),c(b)):(h=k.nextId(),g={},l=[],k.recurse(a.callee,h,g,function(){k.if_(k.notNull(h),function(){k.addEnsureSafeFunction(h);q(a.arguments,function(a){k.recurse(a,k.nextId(),void 0,function(a){l.push(k.ensureSafeObject(a))})});
g.name?(k.state.expensiveChecks||k.addEnsureSafeObject(g.context),m=k.member(g.context,g.name,g.computed)+"("+l.join(",")+")"):m=h+"("+l.join(",")+")";m=k.ensureSafeObject(m);k.assign(b,m)},function(){k.assign(b,"undefined")});c(b)}));break;case t.AssignmentExpression:h=this.nextId();g={};this.recurse(a.left,void 0,g,function(){k.if_(k.notNull(g.context),function(){k.recurse(a.right,h);k.addEnsureSafeObject(k.member(g.context,g.name,g.computed));k.addEnsureSafeAssignContext(g.context);m=k.member(g.context,
g.name,g.computed)+a.operator+h;k.assign(b,m);c(b||m)})},1);break;case t.ArrayExpression:l=[];q(a.elements,function(a){k.recurse(a,k.nextId(),void 0,function(a){l.push(a)})});m="["+l.join(",")+"]";this.assign(b,m);c(m);break;case t.ObjectExpression:l=[];n=!1;q(a.properties,function(a){a.computed&&(n=!0)});n?(b=b||this.nextId(),this.assign(b,"{}"),q(a.properties,function(a){a.computed?(g=k.nextId(),k.recurse(a.key,g)):g=a.key.type===t.Identifier?a.key.name:""+a.key.value;h=k.nextId();k.recurse(a.value,
h);k.assign(k.member(b,g,a.computed),h)})):(q(a.properties,function(b){k.recurse(b.value,a.constant?void 0:k.nextId(),void 0,function(a){l.push(k.escape(b.key.type===t.Identifier?b.key.name:""+b.key.value)+":"+a)})}),m="{"+l.join(",")+"}",this.assign(b,m));c(b||m);break;case t.ThisExpression:this.assign(b,"s");c("s");break;case t.LocalsExpression:this.assign(b,"l");c("l");break;case t.NGValueParameter:this.assign(b,"v"),c("v")}},getHasOwnProperty:function(a,b){var d=a+"."+b,c=this.current().own;c.hasOwnProperty(d)||
(c[d]=this.nextId(!1,a+"&&("+this.escape(b)+" in "+a+")"));return c[d]},assign:function(a,b){if(a)return this.current().body.push(a,"=",b,";"),a},filter:function(a){this.state.filters.hasOwnProperty(a)||(this.state.filters[a]=this.nextId(!0));return this.state.filters[a]},ifDefined:function(a,b){return"ifDefined("+a+","+this.escape(b)+")"},plus:function(a,b){return"plus("+a+","+b+")"},return_:function(a){this.current().body.push("return ",a,";")},if_:function(a,b,d){if(!0===a)b();else{var c=this.current().body;
c.push("if(",a,"){");b();c.push("}");d&&(c.push("else{"),d(),c.push("}"))}},not:function(a){return"!("+a+")"},notNull:function(a){return a+"!=null"},nonComputedMember:function(a,b){var d=/[^$_a-zA-Z0-9]/g;return/^[$_a-zA-Z][$_a-zA-Z0-9]*$/.test(b)?a+"."+b:a+'["'+b.replace(d,this.stringEscapeFn)+'"]'},computedMember:function(a,b){return a+"["+b+"]"},member:function(a,b,d){return d?this.computedMember(a,b):this.nonComputedMember(a,b)},addEnsureSafeObject:function(a){this.current().body.push(this.ensureSafeObject(a),
";")},addEnsureSafeMemberName:function(a){this.current().body.push(this.ensureSafeMemberName(a),";")},addEnsureSafeFunction:function(a){this.current().body.push(this.ensureSafeFunction(a),";")},addEnsureSafeAssignContext:function(a){this.current().body.push(this.ensureSafeAssignContext(a),";")},ensureSafeObject:function(a){return"ensureSafeObject("+a+",text)"},ensureSafeMemberName:function(a){return"ensureSafeMemberName("+a+",text)"},ensureSafeFunction:function(a){return"ensureSafeFunction("+a+",text)"},
getStringValue:function(a){this.assign(a,"getStringValue("+a+")")},ensureSafeAssignContext:function(a){return"ensureSafeAssignContext("+a+",text)"},lazyRecurse:function(a,b,d,c,f,e){var g=this;return function(){g.recurse(a,b,d,c,f,e)}},lazyAssign:function(a,b){var d=this;return function(){d.assign(a,b)}},stringEscapeRegex:/[^ a-zA-Z0-9]/g,stringEscapeFn:function(a){return"\\u"+("0000"+a.charCodeAt(0).toString(16)).slice(-4)},escape:function(a){if(D(a))return"'"+a.replace(this.stringEscapeRegex,this.stringEscapeFn)+
"'";if(ba(a))return a.toString();if(!0===a)return"true";if(!1===a)return"false";if(null===a)return"null";if("undefined"===typeof a)return"undefined";throw ea("esc");},nextId:function(a,b){var d="v"+this.state.nextId++;a||this.current().vars.push(d+(b?"="+b:""));return d},current:function(){return this.state[this.state.computing]}};Hd.prototype={compile:function(a,b){var d=this,c=this.astBuilder.ast(a);this.expression=a;this.expensiveChecks=b;X(c,d.$filter);var f,e;if(f=Ed(c))e=this.recurse(f);f=Cd(c.body);
var g;f&&(g=[],q(f,function(a,b){var c=d.recurse(a);a.input=c;g.push(c);a.watchId=b}));var h=[];q(c.body,function(a){h.push(d.recurse(a.expression))});f=0===c.body.length?w:1===c.body.length?h[0]:function(a,b){var c;q(h,function(d){c=d(a,b)});return c};e&&(f.assign=function(a,b,c){return e(a,c,b)});g&&(f.inputs=g);f.literal=Fd(c);f.constant=c.constant;return f},recurse:function(a,b,d){var c,f,e=this,g;if(a.input)return this.inputs(a.input,a.watchId);switch(a.type){case t.Literal:return this.value(a.value,
b);case t.UnaryExpression:return f=this.recurse(a.argument),this["unary"+a.operator](f,b);case t.BinaryExpression:return c=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](c,f,b);case t.LogicalExpression:return c=this.recurse(a.left),f=this.recurse(a.right),this["binary"+a.operator](c,f,b);case t.ConditionalExpression:return this["ternary?:"](this.recurse(a.test),this.recurse(a.alternate),this.recurse(a.consequent),b);case t.Identifier:return Ua(a.name,e.expression),e.identifier(a.name,
e.expensiveChecks||Lb(a.name),b,d,e.expression);case t.MemberExpression:return c=this.recurse(a.object,!1,!!d),a.computed||(Ua(a.property.name,e.expression),f=a.property.name),a.computed&&(f=this.recurse(a.property)),a.computed?this.computedMember(c,f,b,d,e.expression):this.nonComputedMember(c,f,e.expensiveChecks,b,d,e.expression);case t.CallExpression:return g=[],q(a.arguments,function(a){g.push(e.recurse(a))}),a.filter&&(f=this.$filter(a.callee.name)),a.filter||(f=this.recurse(a.callee,!0)),a.filter?
function(a,c,d,e){for(var n=[],r=0;r<g.length;++r)n.push(g[r](a,c,d,e));a=f.apply(void 0,n,e);return b?{context:void 0,name:void 0,value:a}:a}:function(a,c,d,m){var n=f(a,c,d,m),r;if(null!=n.value){Ea(n.context,e.expression);td(n.value,e.expression);r=[];for(var s=0;s<g.length;++s)r.push(Ea(g[s](a,c,d,m),e.expression));r=Ea(n.value.apply(n.context,r),e.expression)}return b?{value:r}:r};case t.AssignmentExpression:return c=this.recurse(a.left,!0,1),f=this.recurse(a.right),function(a,d,g,m){var n=c(a,
d,g,m);a=f(a,d,g,m);Ea(n.value,e.expression);Jb(n.context);n.context[n.name]=a;return b?{value:a}:a};case t.ArrayExpression:return g=[],q(a.elements,function(a){g.push(e.recurse(a))}),function(a,c,d,e){for(var f=[],r=0;r<g.length;++r)f.push(g[r](a,c,d,e));return b?{value:f}:f};case t.ObjectExpression:return g=[],q(a.properties,function(a){a.computed?g.push({key:e.recurse(a.key),computed:!0,value:e.recurse(a.value)}):g.push({key:a.key.type===t.Identifier?a.key.name:""+a.key.value,computed:!1,value:e.recurse(a.value)})}),
function(a,c,d,e){for(var f={},r=0;r<g.length;++r)g[r].computed?f[g[r].key(a,c,d,e)]=g[r].value(a,c,d,e):f[g[r].key]=g[r].value(a,c,d,e);return b?{value:f}:f};case t.ThisExpression:return function(a){return b?{value:a}:a};case t.LocalsExpression:return function(a,c){return b?{value:c}:c};case t.NGValueParameter:return function(a,c,d){return b?{value:d}:d}}},"unary+":function(a,b){return function(d,c,f,e){d=a(d,c,f,e);d=x(d)?+d:0;return b?{value:d}:d}},"unary-":function(a,b){return function(d,c,f,
e){d=a(d,c,f,e);d=x(d)?-d:0;return b?{value:d}:d}},"unary!":function(a,b){return function(d,c,f,e){d=!a(d,c,f,e);return b?{value:d}:d}},"binary+":function(a,b,d){return function(c,f,e,g){var h=a(c,f,e,g);c=b(c,f,e,g);h=Bd(h,c);return d?{value:h}:h}},"binary-":function(a,b,d){return function(c,f,e,g){var h=a(c,f,e,g);c=b(c,f,e,g);h=(x(h)?h:0)-(x(c)?c:0);return d?{value:h}:h}},"binary*":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)*b(c,f,e,g);return d?{value:c}:c}},"binary/":function(a,b,d){return function(c,
f,e,g){c=a(c,f,e,g)/b(c,f,e,g);return d?{value:c}:c}},"binary%":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)%b(c,f,e,g);return d?{value:c}:c}},"binary===":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)===b(c,f,e,g);return d?{value:c}:c}},"binary!==":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)!==b(c,f,e,g);return d?{value:c}:c}},"binary==":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)==b(c,f,e,g);return d?{value:c}:c}},"binary!=":function(a,b,d){return function(c,
f,e,g){c=a(c,f,e,g)!=b(c,f,e,g);return d?{value:c}:c}},"binary<":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)<b(c,f,e,g);return d?{value:c}:c}},"binary>":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)>b(c,f,e,g);return d?{value:c}:c}},"binary<=":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)<=b(c,f,e,g);return d?{value:c}:c}},"binary>=":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)>=b(c,f,e,g);return d?{value:c}:c}},"binary&&":function(a,b,d){return function(c,f,e,g){c=
a(c,f,e,g)&&b(c,f,e,g);return d?{value:c}:c}},"binary||":function(a,b,d){return function(c,f,e,g){c=a(c,f,e,g)||b(c,f,e,g);return d?{value:c}:c}},"ternary?:":function(a,b,d,c){return function(f,e,g,h){f=a(f,e,g,h)?b(f,e,g,h):d(f,e,g,h);return c?{value:f}:f}},value:function(a,b){return function(){return b?{context:void 0,name:void 0,value:a}:a}},identifier:function(a,b,d,c,f){return function(e,g,h,k){e=g&&a in g?g:e;c&&1!==c&&e&&!e[a]&&(e[a]={});g=e?e[a]:void 0;b&&Ea(g,f);return d?{context:e,name:a,
value:g}:g}},computedMember:function(a,b,d,c,f){return function(e,g,h,k){var l=a(e,g,h,k),m,n;null!=l&&(m=b(e,g,h,k),m+="",Ua(m,f),c&&1!==c&&(Jb(l),l&&!l[m]&&(l[m]={})),n=l[m],Ea(n,f));return d?{context:l,name:m,value:n}:n}},nonComputedMember:function(a,b,d,c,f,e){return function(g,h,k,l){g=a(g,h,k,l);f&&1!==f&&(Jb(g),g&&!g[b]&&(g[b]={}));h=null!=g?g[b]:void 0;(d||Lb(b))&&Ea(h,e);return c?{context:g,name:b,value:h}:h}},inputs:function(a,b){return function(d,c,f,e){return e?e[b]:a(d,c,f)}}};var nc=
function(a,b,d){this.lexer=a;this.$filter=b;this.options=d;this.ast=new t(a,d);this.astCompiler=d.csp?new Hd(this.ast,b):new Gd(this.ast,b)};nc.prototype={constructor:nc,parse:function(a){return this.astCompiler.compile(a,this.options.expensiveChecks)}};var Fa=G("$sce"),ga={HTML:"html",CSS:"css",URL:"url",RESOURCE_URL:"resourceUrl",JS:"js"},Hg=G("$compile"),aa=y.document.createElement("a"),Ld=ta(y.location.href);Md.$inject=["$document"];Rc.$inject=["$provide"];var Td=22,Sd=".",pc="0";Nd.$inject=["$locale"];
Pd.$inject=["$locale"];var Sg={yyyy:U("FullYear",4,0,!1,!0),yy:U("FullYear",2,0,!0,!0),y:U("FullYear",1,0,!1,!0),MMMM:nb("Month"),MMM:nb("Month",!0),MM:U("Month",2,1),M:U("Month",1,1),LLLL:nb("Month",!1,!0),dd:U("Date",2),d:U("Date",1),HH:U("Hours",2),H:U("Hours",1),hh:U("Hours",2,-12),h:U("Hours",1,-12),mm:U("Minutes",2),m:U("Minutes",1),ss:U("Seconds",2),s:U("Seconds",1),sss:U("Milliseconds",3),EEEE:nb("Day"),EEE:nb("Day",!0),a:function(a,b){return 12>a.getHours()?b.AMPMS[0]:b.AMPMS[1]},Z:function(a,
b,d){a=-1*d;return a=(0<=a?"+":"")+(Mb(Math[0<a?"floor":"ceil"](a/60),2)+Mb(Math.abs(a%60),2))},ww:Vd(2),w:Vd(1),G:qc,GG:qc,GGG:qc,GGGG:function(a,b){return 0>=a.getFullYear()?b.ERANAMES[0]:b.ERANAMES[1]}},Rg=/((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))(.*)/,Qg=/^-?\d+$/;Od.$inject=["$locale"];var Lg=ha(Q),Mg=ha(wb);Qd.$inject=["$parse"];var Ce=ha({restrict:"E",compile:function(a,b){if(!b.href&&!b.xlinkHref)return function(a,b){if("a"===b[0].nodeName.toLowerCase()){var f=
"[object SVGAnimatedString]"===ma.call(b.prop("href"))?"xlink:href":"href";b.on("click",function(a){b.attr(f)||a.preventDefault()})}}}}),xb={};q(Gb,function(a,b){function d(a,d,f){a.$watch(f[c],function(a){f.$set(b,!!a)})}if("multiple"!==a){var c=Da("ng-"+b),f=d;"checked"===a&&(f=function(a,b,f){f.ngModel!==f[c]&&d(a,b,f)});xb[c]=function(){return{restrict:"A",priority:100,link:f}}}});q(gd,function(a,b){xb[b]=function(){return{priority:100,link:function(a,c,f){if("ngPattern"===b&&"/"===f.ngPattern.charAt(0)&&
(c=f.ngPattern.match(Vg))){f.$set("ngPattern",new RegExp(c[1],c[2]));return}a.$watch(f[b],function(a){f.$set(b,a)})}}}});q(["src","srcset","href"],function(a){var b=Da("ng-"+a);xb[b]=function(){return{priority:99,link:function(d,c,f){var e=a,g=a;"href"===a&&"[object SVGAnimatedString]"===ma.call(c.prop("href"))&&(g="xlinkHref",f.$attr[g]="xlink:href",e=null);f.$observe(b,function(b){b?(f.$set(g,b),Ia&&e&&c.prop(e,f[g])):"href"===a&&f.$set(g,null)})}}}});var Nb={$addControl:w,$$renameControl:function(a,
b){a.$name=b},$removeControl:w,$setValidity:w,$setDirty:w,$setPristine:w,$setSubmitted:w};Wd.$inject=["$element","$attrs","$scope","$animate","$interpolate"];var ee=function(a){return["$timeout","$parse",function(b,d){function c(a){return""===a?d('this[""]').assign:d(a).assign||w}return{name:"form",restrict:a?"EAC":"E",require:["form","^^?form"],controller:Wd,compile:function(d,e){d.addClass(Wa).addClass(rb);var g=e.name?"name":a&&e.ngForm?"ngForm":!1;return{pre:function(a,d,e,f){var n=f[0];if(!("action"in
e)){var r=function(b){a.$apply(function(){n.$commitViewValue();n.$setSubmitted()});b.preventDefault()};d[0].addEventListener("submit",r,!1);d.on("$destroy",function(){b(function(){d[0].removeEventListener("submit",r,!1)},0,!1)})}(f[1]||n.$$parentForm).$addControl(n);var s=g?c(n.$name):w;g&&(s(a,n),e.$observe(g,function(b){n.$name!==b&&(s(a,void 0),n.$$parentForm.$$renameControl(n,b),s=c(n.$name),s(a,n))}));d.on("$destroy",function(){n.$$parentForm.$removeControl(n);s(a,void 0);R(n,Nb)})}}}}}]},De=
ee(),Pe=ee(!0),Tg=/^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/,ch=/^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i,dh=/^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/,Ug=/^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/,fe=/^(\d{4,})-(\d{2})-(\d{2})$/,ge=/^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,
wc=/^(\d{4,})-W(\d\d)$/,he=/^(\d{4,})-(\d\d)$/,ie=/^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/,Yd=V();q(["date","datetime-local","month","time","week"],function(a){Yd[a]=!0});var je={text:function(a,b,d,c,f,e){Xa(a,b,d,c,f,e);sc(c)},date:ob("date",fe,Pb(fe,["yyyy","MM","dd"]),"yyyy-MM-dd"),"datetime-local":ob("datetimelocal",ge,Pb(ge,"yyyy MM dd HH mm ss sss".split(" ")),"yyyy-MM-ddTHH:mm:ss.sss"),time:ob("time",ie,Pb(ie,["HH","mm","ss","sss"]),"HH:mm:ss.sss"),week:ob("week",wc,function(a,b){if(ja(a))return a;
if(D(a)){wc.lastIndex=0;var d=wc.exec(a);if(d){var c=+d[1],f=+d[2],e=d=0,g=0,h=0,k=Ud(c),f=7*(f-1);b&&(d=b.getHours(),e=b.getMinutes(),g=b.getSeconds(),h=b.getMilliseconds());return new Date(c,0,k.getDate()+f,d,e,g,h)}}return NaN},"yyyy-Www"),month:ob("month",he,Pb(he,["yyyy","MM"]),"yyyy-MM"),number:function(a,b,d,c,f,e){tc(a,b,d,c);Xa(a,b,d,c,f,e);Zd(c);var g,h;if(x(d.min)||d.ngMin)c.$validators.min=function(a){return c.$isEmpty(a)||z(g)||a>=g},d.$observe("min",function(a){g=qb(a);c.$validate()});
if(x(d.max)||d.ngMax)c.$validators.max=function(a){return c.$isEmpty(a)||z(h)||a<=h},d.$observe("max",function(a){h=qb(a);c.$validate()})},url:function(a,b,d,c,f,e){Xa(a,b,d,c,f,e);sc(c);c.$$parserName="url";c.$validators.url=function(a,b){var d=a||b;return c.$isEmpty(d)||ch.test(d)}},email:function(a,b,d,c,f,e){Xa(a,b,d,c,f,e);sc(c);c.$$parserName="email";c.$validators.email=function(a,b){var d=a||b;return c.$isEmpty(d)||dh.test(d)}},radio:function(a,b,d,c){z(d.name)&&b.attr("name",++sb);b.on("click",
function(a){b[0].checked&&c.$setViewValue(d.value,a&&a.type)});c.$render=function(){b[0].checked=d.value==c.$viewValue};d.$observe("value",c.$render)},range:function(a,b,d,c,f,e){function g(a,c){b.attr(a,d[a]);d.$observe(a,c)}function h(a){n=qb(a);ia(c.$modelValue)||(m?(a=b.val(),n>a&&(a=n,b.val(a)),c.$setViewValue(a)):c.$validate())}function k(a){r=qb(a);ia(c.$modelValue)||(m?(a=b.val(),r<a&&(b.val(r),a=r<n?n:r),c.$setViewValue(a)):c.$validate())}function l(a){s=qb(a);ia(c.$modelValue)||(m&&c.$viewValue!==
b.val()?c.$setViewValue(b.val()):c.$validate())}tc(a,b,d,c);Zd(c);Xa(a,b,d,c,f,e);var m=c.$$hasNativeValidators&&"range"===b[0].type,n=m?0:void 0,r=m?100:void 0,s=m?1:void 0,q=b[0].validity;a=x(d.min);f=x(d.max);e=x(d.step);var u=c.$render;c.$render=m&&x(q.rangeUnderflow)&&x(q.rangeOverflow)?function(){u();c.$setViewValue(b.val())}:u;a&&(c.$validators.min=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||z(n)||b>=n},g("min",h));f&&(c.$validators.max=m?function(){return!0}:function(a,b){return c.$isEmpty(b)||
z(r)||b<=r},g("max",k));e&&(c.$validators.step=m?function(){return!q.stepMismatch}:function(a,b){var d;if(!(d=c.$isEmpty(b)||z(s))){d=n||0;var e=s,f=Number(b);if((f|0)!==f||(d|0)!==d||(e|0)!==e){var g=Math.max(uc(f),uc(d),uc(e)),g=Math.pow(10,g),f=f*g;d*=g;e*=g}d=0===(f-d)%e}return d},g("step",l))},checkbox:function(a,b,d,c,f,e,g,h){var k=$d(h,a,"ngTrueValue",d.ngTrueValue,!0),l=$d(h,a,"ngFalseValue",d.ngFalseValue,!1);b.on("click",function(a){c.$setViewValue(b[0].checked,a&&a.type)});c.$render=function(){b[0].checked=
c.$viewValue};c.$isEmpty=function(a){return!1===a};c.$formatters.push(function(a){return na(a,k)});c.$parsers.push(function(a){return a?k:l})},hidden:w,button:w,submit:w,reset:w,file:w},Lc=["$browser","$sniffer","$filter","$parse",function(a,b,d,c){return{restrict:"E",require:["?ngModel"],link:{pre:function(f,e,g,h){if(h[0]){var k=Q(g.type);"range"!==k||g.hasOwnProperty("ngInputRange")||(k="text");(je[k]||je.text)(f,e,g,h[0],b,a,d,c)}}}}}],eh=/^(true|false|\d+)$/,gf=function(){return{restrict:"A",
priority:100,compile:function(a,b){return eh.test(b.ngValue)?function(a,b,f){f.$set("value",a.$eval(f.ngValue))}:function(a,b,f){a.$watch(f.ngValue,function(a){f.$set("value",a)})}}}},He=["$compile",function(a){return{restrict:"AC",compile:function(b){a.$$addBindingClass(b);return function(b,c,f){a.$$addBindingInfo(c,f.ngBind);c=c[0];b.$watch(f.ngBind,function(a){c.textContent=z(a)?"":a})}}}}],Je=["$interpolate","$compile",function(a,b){return{compile:function(d){b.$$addBindingClass(d);return function(c,
d,e){c=a(d.attr(e.$attr.ngBindTemplate));b.$$addBindingInfo(d,c.expressions);d=d[0];e.$observe("ngBindTemplate",function(a){d.textContent=z(a)?"":a})}}}}],Ie=["$sce","$parse","$compile",function(a,b,d){return{restrict:"A",compile:function(c,f){var e=b(f.ngBindHtml),g=b(f.ngBindHtml,function(b){return a.valueOf(b)});d.$$addBindingClass(c);return function(b,c,f){d.$$addBindingInfo(c,f.ngBindHtml);b.$watch(g,function(){var d=e(b);c.html(a.getTrustedHtml(d)||"")})}}}}],ff=ha({restrict:"A",require:"ngModel",
link:function(a,b,d,c){c.$viewChangeListeners.push(function(){a.$eval(d.ngChange)})}}),Ke=vc("",!0),Me=vc("Odd",0),Le=vc("Even",1),Ne=Va({compile:function(a,b){b.$set("ngCloak",void 0);a.removeClass("ng-cloak")}}),Oe=[function(){return{restrict:"A",scope:!0,controller:"@",priority:500}}],Qc={},fh={blur:!0,focus:!0};q("click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split(" "),function(a){var b=Da("ng-"+a);
Qc[b]=["$parse","$rootScope",function(d,c){return{restrict:"A",compile:function(f,e){var g=d(e[b],null,!0);return function(b,d){d.on(a,function(d){var e=function(){g(b,{$event:d})};fh[a]&&c.$$phase?b.$evalAsync(e):b.$apply(e)})}}}}]});var Re=["$animate","$compile",function(a,b){return{multiElement:!0,transclude:"element",priority:600,terminal:!0,restrict:"A",$$tlb:!0,link:function(d,c,f,e,g){var h,k,l;d.$watch(f.ngIf,function(d){d?k||g(function(d,e){k=e;d[d.length++]=b.$$createComment("end ngIf",
f.ngIf);h={clone:d};a.enter(d,c.parent(),c)}):(l&&(l.remove(),l=null),k&&(k.$destroy(),k=null),h&&(l=vb(h.clone),a.leave(l).done(function(a){!1!==a&&(l=null)}),h=null))})}}}],Se=["$templateRequest","$anchorScroll","$animate",function(a,b,d){return{restrict:"ECA",priority:400,terminal:!0,transclude:"element",controller:$.noop,compile:function(c,f){var e=f.ngInclude||f.src,g=f.onload||"",h=f.autoscroll;return function(c,f,m,n,r){var q=0,t,u,p,z=function(){u&&(u.remove(),u=null);t&&(t.$destroy(),t=null);
p&&(d.leave(p).done(function(a){!1!==a&&(u=null)}),u=p,p=null)};c.$watch(e,function(e){var m=function(a){!1===a||!x(h)||h&&!c.$eval(h)||b()},u=++q;e?(a(e,!0).then(function(a){if(!c.$$destroyed&&u===q){var b=c.$new();n.template=a;a=r(b,function(a){z();d.enter(a,null,f).done(m)});t=b;p=a;t.$emit("$includeContentLoaded",e);c.$eval(g)}},function(){c.$$destroyed||u!==q||(z(),c.$emit("$includeContentError",e))}),c.$emit("$includeContentRequested",e)):(z(),n.template=null)})}}}}],jf=["$compile",function(a){return{restrict:"ECA",
priority:-400,require:"ngInclude",link:function(b,d,c,f){ma.call(d[0]).match(/SVG/)?(d.empty(),a(Tc(f.template,y.document).childNodes)(b,function(a){d.append(a)},{futureParentElement:d})):(d.html(f.template),a(d.contents())(b))}}}],Te=Va({priority:450,compile:function(){return{pre:function(a,b,d){a.$eval(d.ngInit)}}}}),ef=function(){return{restrict:"A",priority:100,require:"ngModel",link:function(a,b,d,c){var f=b.attr(d.$attr.ngList)||", ",e="false"!==d.ngTrim,g=e?Y(f):f;c.$parsers.push(function(a){if(!z(a)){var b=
[];a&&q(a.split(g),function(a){a&&b.push(e?Y(a):a)});return b}});c.$formatters.push(function(a){if(I(a))return a.join(f)});c.$isEmpty=function(a){return!a||!a.length}}}},rb="ng-valid",ae="ng-invalid",Wa="ng-pristine",Ob="ng-dirty",ce="ng-pending",pb=G("ngModel"),gh=["$scope","$exceptionHandler","$attrs","$element","$parse","$animate","$timeout","$rootScope","$q","$interpolate",function(a,b,d,c,f,e,g,h,k,l){this.$modelValue=this.$viewValue=Number.NaN;this.$$rawModelValue=void 0;this.$validators={};
this.$asyncValidators={};this.$parsers=[];this.$formatters=[];this.$viewChangeListeners=[];this.$untouched=!0;this.$touched=!1;this.$pristine=!0;this.$dirty=!1;this.$valid=!0;this.$invalid=!1;this.$error={};this.$$success={};this.$pending=void 0;this.$name=l(d.name||"",!1)(a);this.$$parentForm=Nb;var m=f(d.ngModel),n=m.assign,r=m,s=n,t=null,u,p=this;this.$$setOptions=function(a){if((p.$options=a)&&a.getterSetter){var b=f(d.ngModel+"()"),e=f(d.ngModel+"($$$p)");r=function(a){var c=m(a);C(c)&&(c=b(a));
return c};s=function(a,b){C(m(a))?e(a,{$$$p:b}):n(a,b)}}else if(!m.assign)throw pb("nonassign",d.ngModel,ya(c));};this.$render=w;this.$isEmpty=function(a){return z(a)||""===a||null===a||a!==a};this.$$updateEmptyClasses=function(a){p.$isEmpty(a)?(e.removeClass(c,"ng-not-empty"),e.addClass(c,"ng-empty")):(e.removeClass(c,"ng-empty"),e.addClass(c,"ng-not-empty"))};var y=0;Xd({ctrl:this,$element:c,set:function(a,b){a[b]=!0},unset:function(a,b){delete a[b]},$animate:e});this.$setPristine=function(){p.$dirty=
!1;p.$pristine=!0;e.removeClass(c,Ob);e.addClass(c,Wa)};this.$setDirty=function(){p.$dirty=!0;p.$pristine=!1;e.removeClass(c,Wa);e.addClass(c,Ob);p.$$parentForm.$setDirty()};this.$setUntouched=function(){p.$touched=!1;p.$untouched=!0;e.setClass(c,"ng-untouched","ng-touched")};this.$setTouched=function(){p.$touched=!0;p.$untouched=!1;e.setClass(c,"ng-touched","ng-untouched")};this.$rollbackViewValue=function(){g.cancel(t);p.$viewValue=p.$$lastCommittedViewValue;p.$render()};this.$validate=function(){if(!ia(p.$modelValue)){var a=
p.$$rawModelValue,b=p.$valid,c=p.$modelValue,d=p.$options&&p.$options.allowInvalid;p.$$runValidators(a,p.$$lastCommittedViewValue,function(e){d||b===e||(p.$modelValue=e?a:void 0,p.$modelValue!==c&&p.$$writeModelToScope())})}};this.$$runValidators=function(a,b,c){function d(){var c=!0;q(p.$validators,function(d,e){var g=d(a,b);c=c&&g;f(e,g)});return c?!0:(q(p.$asyncValidators,function(a,b){f(b,null)}),!1)}function e(){var c=[],d=!0;q(p.$asyncValidators,function(e,g){var h=e(a,b);if(!h||!C(h.then))throw pb("nopromise",
h);f(g,void 0);c.push(h.then(function(){f(g,!0)},function(){d=!1;f(g,!1)}))});c.length?k.all(c).then(function(){g(d)},w):g(!0)}function f(a,b){h===y&&p.$setValidity(a,b)}function g(a){h===y&&c(a)}y++;var h=y;(function(){var a=p.$$parserName||"parse";if(z(u))f(a,null);else return u||(q(p.$validators,function(a,b){f(b,null)}),q(p.$asyncValidators,function(a,b){f(b,null)})),f(a,u),u;return!0})()?d()?e():g(!1):g(!1)};this.$commitViewValue=function(){var a=p.$viewValue;g.cancel(t);if(p.$$lastCommittedViewValue!==
a||""===a&&p.$$hasNativeValidators)p.$$updateEmptyClasses(a),p.$$lastCommittedViewValue=a,p.$pristine&&this.$setDirty(),this.$$parseAndValidate()};this.$$parseAndValidate=function(){var b=p.$$lastCommittedViewValue;if(u=z(b)?void 0:!0)for(var c=0;c<p.$parsers.length;c++)if(b=p.$parsers[c](b),z(b)){u=!1;break}ia(p.$modelValue)&&(p.$modelValue=r(a));var d=p.$modelValue,e=p.$options&&p.$options.allowInvalid;p.$$rawModelValue=b;e&&(p.$modelValue=b,p.$modelValue!==d&&p.$$writeModelToScope());p.$$runValidators(b,
p.$$lastCommittedViewValue,function(a){e||(p.$modelValue=a?b:void 0,p.$modelValue!==d&&p.$$writeModelToScope())})};this.$$writeModelToScope=function(){s(a,p.$modelValue);q(p.$viewChangeListeners,function(a){try{a()}catch(c){b(c)}})};this.$setViewValue=function(a,b){p.$viewValue=a;p.$options&&!p.$options.updateOnDefault||p.$$debounceViewValueCommit(b)};this.$$debounceViewValueCommit=function(b){var c=0,d=p.$options;d&&x(d.debounce)&&(d=d.debounce,ba(d)?c=d:ba(d[b])?c=d[b]:ba(d["default"])&&(c=d["default"]));
g.cancel(t);c?t=g(function(){p.$commitViewValue()},c):h.$$phase?p.$commitViewValue():a.$apply(function(){p.$commitViewValue()})};a.$watch(function(){var b=r(a);if(b!==p.$modelValue&&(p.$modelValue===p.$modelValue||b===b)){p.$modelValue=p.$$rawModelValue=b;u=void 0;for(var c=p.$formatters,d=c.length,e=b;d--;)e=c[d](e);p.$viewValue!==e&&(p.$$updateEmptyClasses(e),p.$viewValue=p.$$lastCommittedViewValue=e,p.$render(),p.$$runValidators(p.$modelValue,p.$viewValue,w))}return b})}],df=["$rootScope",function(a){return{restrict:"A",
require:["ngModel","^?form","^?ngModelOptions"],controller:gh,priority:1,compile:function(b){b.addClass(Wa).addClass("ng-untouched").addClass(rb);return{pre:function(a,b,f,e){var g=e[0];b=e[1]||g.$$parentForm;g.$$setOptions(e[2]&&e[2].$options);b.$addControl(g);f.$observe("name",function(a){g.$name!==a&&g.$$parentForm.$$renameControl(g,a)});a.$on("$destroy",function(){g.$$parentForm.$removeControl(g)})},post:function(b,c,f,e){var g=e[0];if(g.$options&&g.$options.updateOn)c.on(g.$options.updateOn,
function(a){g.$$debounceViewValueCommit(a&&a.type)});c.on("blur",function(){g.$touched||(a.$$phase?b.$evalAsync(g.$setTouched):b.$apply(g.$setTouched))})}}}}}],hh=/(\s+|^)default(\s+|$)/,hf=function(){return{restrict:"A",controller:["$scope","$attrs",function(a,b){var d=this;this.$options=sa(a.$eval(b.ngModelOptions));x(this.$options.updateOn)?(this.$options.updateOnDefault=!1,this.$options.updateOn=Y(this.$options.updateOn.replace(hh,function(){d.$options.updateOnDefault=!0;return" "}))):this.$options.updateOnDefault=
!0}]}},Ue=Va({terminal:!0,priority:1E3}),ih=G("ngOptions"),jh=/^\s*([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+group\s+by\s+([\s\S]+?))?(?:\s+disable\s+when\s+([\s\S]+?))?\s+for\s+(?:([$\w][$\w]*)|(?:\(\s*([$\w][$\w]*)\s*,\s*([$\w][$\w]*)\s*\)))\s+in\s+([\s\S]+?)(?:\s+track\s+by\s+([\s\S]+?))?$/,bf=["$compile","$document","$parse",function(a,b,d){function c(a,b,c){function e(a,b,c,d,f){this.selectValue=a;this.viewValue=b;this.label=c;this.group=d;this.disabled=f}function f(a){var b;if(!q&&la(a))b=a;else{b=
[];for(var c in a)a.hasOwnProperty(c)&&"$"!==c.charAt(0)&&b.push(c)}return b}var n=a.match(jh);if(!n)throw ih("iexp",a,ya(b));var r=n[5]||n[7],q=n[6];a=/ as /.test(n[0])&&n[1];var t=n[9];b=d(n[2]?n[1]:r);var u=a&&d(a)||b,p=t&&d(t),x=t?function(a,b){return p(c,b)}:function(a){return Aa(a)},A=function(a,b){return x(a,C(a,b))},v=d(n[2]||n[1]),z=d(n[3]||""),L=d(n[4]||""),w=d(n[8]),y={},C=q?function(a,b){y[q]=b;y[r]=a;return y}:function(a){y[r]=a;return y};return{trackBy:t,getTrackByValue:A,getWatchables:d(w,
function(a){var b=[];a=a||[];for(var d=f(a),e=d.length,g=0;g<e;g++){var h=a===d?g:d[g],l=a[h],h=C(l,h),l=x(l,h);b.push(l);if(n[2]||n[1])l=v(c,h),b.push(l);n[4]&&(h=L(c,h),b.push(h))}return b}),getOptions:function(){for(var a=[],b={},d=w(c)||[],g=f(d),h=g.length,n=0;n<h;n++){var p=d===g?n:g[n],r=C(d[p],p),q=u(c,r),p=x(q,r),s=v(c,r),y=z(c,r),r=L(c,r),q=new e(p,q,s,y,r);a.push(q);b[p]=q}return{items:a,selectValueMap:b,getOptionFromViewValue:function(a){return b[A(a)]},getViewValueFromOption:function(a){return t?
sa(a.viewValue):a.viewValue}}}}}var f=y.document.createElement("option"),e=y.document.createElement("optgroup");return{restrict:"A",terminal:!0,require:["select","ngModel"],link:{pre:function(a,b,c,d){d[0].registerOption=w},post:function(d,h,k,l){function m(a,b){a.element=b;b.disabled=a.disabled;a.label!==b.label&&(b.label=a.label,b.textContent=a.label);b.value=a.selectValue}function n(){var a=w&&r.readValue();if(w)for(var b=w.items.length-1;0<=b;b--){var c=w.items[b];x(c.group)?Fb(c.element.parentNode):
Fb(c.element)}w=C.getOptions();var d={};A&&h.prepend(u);w.items.forEach(function(a){var b;if(x(a.group)){b=d[a.group];b||(b=e.cloneNode(!1),D.appendChild(b),b.label=null===a.group?"null":a.group,d[a.group]=b);var c=f.cloneNode(!1)}else b=D,c=f.cloneNode(!1);b.appendChild(c);m(a,c)});h[0].appendChild(D);s.$render();s.$isEmpty(a)||(b=r.readValue(),(C.trackBy||t?na(a,b):a===b)||(s.$setViewValue(b),s.$render()))}var r=l[0],s=l[1],t=k.multiple,u;l=0;for(var p=h.children(),z=p.length;l<z;l++)if(""===p[l].value){u=
p.eq(l);break}var A=!!u,v=!1,y=F(f.cloneNode(!1));y.val("?");var w,C=c(k.ngOptions,h,d),D=b[0].createDocumentFragment(),E=function(){A?v&&u.removeAttr("selected"):u.remove()};t?(s.$isEmpty=function(a){return!a||0===a.length},r.writeValue=function(a){w.items.forEach(function(a){a.element.selected=!1});a&&a.forEach(function(a){if(a=w.getOptionFromViewValue(a))a.element.selected=!0})},r.readValue=function(){var a=h.val()||[],b=[];q(a,function(a){(a=w.selectValueMap[a])&&!a.disabled&&b.push(w.getViewValueFromOption(a))});
return b},C.trackBy&&d.$watchCollection(function(){if(I(s.$viewValue))return s.$viewValue.map(function(a){return C.getTrackByValue(a)})},function(){s.$render()})):(r.writeValue=function(a){var b=w.selectValueMap[h.val()],c=w.getOptionFromViewValue(a);b&&b.element.removeAttribute("selected");c?(h[0].value!==c.selectValue&&(y.remove(),E(),h[0].value=c.selectValue,c.element.selected=!0),c.element.setAttribute("selected","selected")):null===a||A?(y.remove(),A||h.prepend(u),h.val(""),v&&(u.prop("selected",
!0),u.attr("selected",!0))):(E(),h.prepend(y),h.val("?"),y.prop("selected",!0),y.attr("selected",!0))},r.readValue=function(){var a=w.selectValueMap[h.val()];return a&&!a.disabled?(E(),y.remove(),w.getViewValueFromOption(a)):null},C.trackBy&&d.$watch(function(){return C.getTrackByValue(s.$viewValue)},function(){s.$render()}));A?(u.remove(),a(u)(d),8===u[0].nodeType?(v=!1,r.registerOption=function(a,b){""===b.val()&&(v=!0,u=b,u.removeClass("ng-scope"),s.$render(),b.on("$destroy",function(){u=void 0;
v=!1}))}):(u.removeClass("ng-scope"),v=!0)):u=F(f.cloneNode(!1));h.empty();n();d.$watchCollection(C.getWatchables,n)}}}}],Ve=["$locale","$interpolate","$log",function(a,b,d){var c=/{}/g,f=/^when(Minus)?(.+)$/;return{link:function(e,g,h){function k(a){g.text(a||"")}var l=h.count,m=h.$attr.when&&g.attr(h.$attr.when),n=h.offset||0,r=e.$eval(m)||{},s={},t=b.startSymbol(),u=b.endSymbol(),p=t+l+"-"+n+u,x=$.noop,A;q(h,function(a,b){var c=f.exec(b);c&&(c=(c[1]?"-":"")+Q(c[2]),r[c]=g.attr(h.$attr[b]))});q(r,
function(a,d){s[d]=b(a.replace(c,p))});e.$watch(l,function(b){var c=parseFloat(b),f=ia(c);f||c in r||(c=a.pluralCat(c-n));c===A||f&&ia(A)||(x(),f=s[c],z(f)?(null!=b&&d.debug("ngPluralize: no rule defined for '"+c+"' in "+m),x=w,k()):x=e.$watch(f,k),A=c)})}}}],We=["$parse","$animate","$compile",function(a,b,d){var c=G("ngRepeat"),f=function(a,b,c,d,f,m,n){a[c]=d;f&&(a[f]=m);a.$index=b;a.$first=0===b;a.$last=b===n-1;a.$middle=!(a.$first||a.$last);a.$odd=!(a.$even=0===(b&1))};return{restrict:"A",multiElement:!0,
transclude:"element",priority:1E3,terminal:!0,$$tlb:!0,compile:function(e,g){var h=g.ngRepeat,k=d.$$createComment("end ngRepeat",h),l=h.match(/^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/);if(!l)throw c("iexp",h);var m=l[1],n=l[2],r=l[3],s=l[4],l=m.match(/^(?:(\s*[$\w]+)|\(\s*([$\w]+)\s*,\s*([$\w]+)\s*\))$/);if(!l)throw c("iidexp",m);var t=l[3]||l[1],u=l[2];if(r&&(!/^[$a-zA-Z_][$a-zA-Z0-9_]*$/.test(r)||/^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/.test(r)))throw c("badident",
r);var p,x,A,v,w={$id:Aa};s?p=a(s):(A=function(a,b){return Aa(b)},v=function(a){return a});return function(a,d,e,g,l){p&&(x=function(b,c,d){u&&(w[u]=b);w[t]=c;w.$index=d;return p(a,w)});var m=V();a.$watchCollection(n,function(e){var g,n,p=d[0],s,w=V(),z,y,C,D,F,E,G;r&&(a[r]=e);if(la(e))F=e,n=x||A;else for(G in n=x||v,F=[],e)ua.call(e,G)&&"$"!==G.charAt(0)&&F.push(G);z=F.length;G=Array(z);for(g=0;g<z;g++)if(y=e===F?g:F[g],C=e[y],D=n(y,C,g),m[D])E=m[D],delete m[D],w[D]=E,G[g]=E;else{if(w[D])throw q(G,
function(a){a&&a.scope&&(m[a.id]=a)}),c("dupes",h,D,C);G[g]={id:D,scope:void 0,clone:void 0};w[D]=!0}for(s in m){E=m[s];D=vb(E.clone);b.leave(D);if(D[0].parentNode)for(g=0,n=D.length;g<n;g++)D[g].$$NG_REMOVED=!0;E.scope.$destroy()}for(g=0;g<z;g++)if(y=e===F?g:F[g],C=e[y],E=G[g],E.scope){s=p;do s=s.nextSibling;while(s&&s.$$NG_REMOVED);E.clone[0]!==s&&b.move(vb(E.clone),null,p);p=E.clone[E.clone.length-1];f(E.scope,g,t,C,u,y,z)}else l(function(a,c){E.scope=c;var d=k.cloneNode(!1);a[a.length++]=d;b.enter(a,
null,p);p=d;E.clone=a;w[E.id]=E;f(E.scope,g,t,C,u,y,z)});m=w})}}}}],Xe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngShow,function(b){a[b?"removeClass":"addClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Qe=["$animate",function(a){return{restrict:"A",multiElement:!0,link:function(b,d,c){b.$watch(c.ngHide,function(b){a[b?"addClass":"removeClass"](d,"ng-hide",{tempClasses:"ng-hide-animate"})})}}}],Ye=Va(function(a,b,d){a.$watch(d.ngStyle,function(a,
d){d&&a!==d&&q(d,function(a,c){b.css(c,"")});a&&b.css(a)},!0)}),Ze=["$animate","$compile",function(a,b){return{require:"ngSwitch",controller:["$scope",function(){this.cases={}}],link:function(d,c,f,e){var g=[],h=[],k=[],l=[],m=function(a,b){return function(c){!1!==c&&a.splice(b,1)}};d.$watch(f.ngSwitch||f.on,function(c){for(var d,f;k.length;)a.cancel(k.pop());d=0;for(f=l.length;d<f;++d){var t=vb(h[d].clone);l[d].$destroy();(k[d]=a.leave(t)).done(m(k,d))}h.length=0;l.length=0;(g=e.cases["!"+c]||e.cases["?"])&&
q(g,function(c){c.transclude(function(d,e){l.push(e);var f=c.element;d[d.length++]=b.$$createComment("end ngSwitchWhen");h.push({clone:d});a.enter(d,f.parent(),f)})})})}}}],$e=Va({transclude:"element",priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,f){a=d.ngSwitchWhen.split(d.ngSwitchWhenSeparator).sort().filter(function(a,b,c){return c[b-1]!==a});q(a,function(a){c.cases["!"+a]=c.cases["!"+a]||[];c.cases["!"+a].push({transclude:f,element:b})})}}),af=Va({transclude:"element",
priority:1200,require:"^ngSwitch",multiElement:!0,link:function(a,b,d,c,f){c.cases["?"]=c.cases["?"]||[];c.cases["?"].push({transclude:f,element:b})}}),kh=G("ngTransclude"),cf=["$compile",function(a){return{restrict:"EAC",terminal:!0,compile:function(b){var d=a(b.contents());b.empty();return function(a,b,e,g,h){function k(){d(a,function(a){b.append(a)})}if(!h)throw kh("orphan",ya(b));e.ngTransclude===e.$attr.ngTransclude&&(e.ngTransclude="");e=e.ngTransclude||e.ngTranscludeSlot;h(function(a,c){a.length?
b.append(a):(k(),c.$destroy())},null,e);e&&!h.isSlotFilled(e)&&k()}}}}],Ee=["$templateCache",function(a){return{restrict:"E",terminal:!0,compile:function(b,d){"text/ng-template"===d.type&&a.put(d.id,b[0].text)}}}],lh={$setViewValue:w,$render:w},mh=["$element","$scope",function(a,b){var d=this,c=new Sa;d.ngModelCtrl=lh;d.unknownOption=F(y.document.createElement("option"));d.renderUnknownOption=function(b){b="? "+Aa(b)+" ?";d.unknownOption.val(b);a.prepend(d.unknownOption);a.val(b)};b.$on("$destroy",
function(){d.renderUnknownOption=w});d.removeUnknownOption=function(){d.unknownOption.parent()&&d.unknownOption.remove()};d.readValue=function(){d.removeUnknownOption();return a.val()};d.writeValue=function(b){d.hasOption(b)?(d.removeUnknownOption(),a.val(b),""===b&&d.emptyOption.prop("selected",!0)):null==b&&d.emptyOption?(d.removeUnknownOption(),a.val("")):d.renderUnknownOption(b)};d.addOption=function(a,b){if(8!==b[0].nodeType){Ra(a,'"option value"');""===a&&(d.emptyOption=b);var g=c.get(a)||0;
c.put(a,g+1);d.ngModelCtrl.$render();b[0].hasAttribute("selected")&&(b[0].selected=!0)}};d.removeOption=function(a){var b=c.get(a);b&&(1===b?(c.remove(a),""===a&&(d.emptyOption=void 0)):c.put(a,b-1))};d.hasOption=function(a){return!!c.get(a)};d.registerOption=function(a,b,c,h,k){if(h){var l;c.$observe("value",function(a){x(l)&&d.removeOption(l);l=a;d.addOption(a,b)})}else k?a.$watch(k,function(a,f){c.$set("value",a);f!==a&&d.removeOption(f);d.addOption(a,b)}):d.addOption(c.value,b);b.on("$destroy",
function(){d.removeOption(c.value);d.ngModelCtrl.$render()})}}],Fe=function(){return{restrict:"E",require:["select","?ngModel"],controller:mh,priority:1,link:{pre:function(a,b,d,c){var f=c[1];if(f){var e=c[0];e.ngModelCtrl=f;b.on("change",function(){a.$apply(function(){f.$setViewValue(e.readValue())})});if(d.multiple){e.readValue=function(){var a=[];q(b.find("option"),function(b){b.selected&&a.push(b.value)});return a};e.writeValue=function(a){var c=new Sa(a);q(b.find("option"),function(a){a.selected=
x(c.get(a.value))})};var g,h=NaN;a.$watch(function(){h!==f.$viewValue||na(g,f.$viewValue)||(g=ka(f.$viewValue),f.$render());h=f.$viewValue});f.$isEmpty=function(a){return!a||0===a.length}}}},post:function(a,b,d,c){var f=c[1];if(f){var e=c[0];f.$render=function(){e.writeValue(f.$viewValue)}}}}}},Ge=["$interpolate",function(a){return{restrict:"E",priority:100,compile:function(b,d){var c,f;x(d.ngValue)?c=!0:x(d.value)?c=a(d.value,!0):(f=a(b.text(),!0))||d.$set("value",b.text());return function(a,b,d){var k=
b.parent();(k=k.data("$selectController")||k.parent().data("$selectController"))&&k.registerOption(a,b,d,c,f)}}}}],Nc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){c&&(d.required=!0,c.$validators.required=function(a,b){return!d.required||!c.$isEmpty(b)},d.$observe("required",function(){c.$validate()}))}}},Mc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var f,e=d.ngPattern||d.pattern;d.$observe("pattern",function(a){D(a)&&0<a.length&&(a=
new RegExp("^"+a+"$"));if(a&&!a.test)throw G("ngPattern")("noregexp",e,a,ya(b));f=a||void 0;c.$validate()});c.$validators.pattern=function(a,b){return c.$isEmpty(b)||z(f)||f.test(b)}}}}},Pc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,d,c){if(c){var f=-1;d.$observe("maxlength",function(a){a=Z(a);f=ia(a)?-1:a;c.$validate()});c.$validators.maxlength=function(a,b){return 0>f||c.$isEmpty(b)||b.length<=f}}}}},Oc=function(){return{restrict:"A",require:"?ngModel",link:function(a,b,
d,c){if(c){var f=0;d.$observe("minlength",function(a){f=Z(a)||0;c.$validate()});c.$validators.minlength=function(a,b){return c.$isEmpty(b)||b.length>=f}}}}};y.angular.bootstrap?y.console&&console.log("WARNING: Tried to load angular more than once."):(xe(),ze($),$.module("ngLocale",[],["$provide",function(a){function b(a){a+="";var b=a.indexOf(".");return-1==b?0:a.length-b-1}a.value("$locale",{DATETIME_FORMATS:{AMPMS:["AM","PM"],DAY:"Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" "),
ERANAMES:["Before Christ","Anno Domini"],ERAS:["BC","AD"],FIRSTDAYOFWEEK:6,MONTH:"January February March April May June July August September October November December".split(" "),SHORTDAY:"Sun Mon Tue Wed Thu Fri Sat".split(" "),SHORTMONTH:"Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),STANDALONEMONTH:"January February March April May June July August September October November December".split(" "),WEEKENDRANGE:[5,6],fullDate:"EEEE, MMMM d, y",longDate:"MMMM d, y",medium:"MMM d, y h:mm:ss a",
mediumDate:"MMM d, y",mediumTime:"h:mm:ss a","short":"M/d/yy h:mm a",shortDate:"M/d/yy",shortTime:"h:mm a"},NUMBER_FORMATS:{CURRENCY_SYM:"$",DECIMAL_SEP:".",GROUP_SEP:",",PATTERNS:[{gSize:3,lgSize:3,maxFrac:3,minFrac:0,minInt:1,negPre:"-",negSuf:"",posPre:"",posSuf:""},{gSize:3,lgSize:3,maxFrac:2,minFrac:2,minInt:1,negPre:"-\u00a4",negSuf:"",posPre:"\u00a4",posSuf:""}]},id:"en-us",localeID:"en_US",pluralCat:function(a,c){var f=a|0,e=c;void 0===e&&(e=Math.min(b(a),3));Math.pow(10,e);return 1==f&&0==
e?"one":"other"}})}]),F(y.document).ready(function(){se(y.document,Gc)}))})(window);!window.angular.$$csp().noInlineStyle&&window.angular.element(document.head).prepend('<style type="text/css">@charset "UTF-8";[ng\\:cloak],[ng-cloak],[data-ng-cloak],[x-ng-cloak],.ng-cloak,.x-ng-cloak,.ng-hide:not(.ng-hide-animate){display:none !important;}ng\\:form{display:block;}.ng-animate-shim{visibility:hidden;}.ng-anchor{position:absolute;}</style>');
//# sourceMappingURL=angular.min.js.map
src/main/webapp/bower_components/angular/angular.min.js.gzip
Binary files differ
src/main/webapp/bower_components/angular/angular.min.js.map
New file
@@ -0,0 +1,8 @@
{
"version":3,
"file":"angular.min.js",
"lineCount":323,
"mappings":"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",
"sources":["angular.js"],
"names":["window","minErr","isArrayLike","obj","isWindow","isArray","isString","jqLite","length","Object","isNumber","Array","item","forEach","iterator","context","key","isFunction","hasOwnProperty","call","isPrimitive","isBlankObject","forEachSorted","keys","sort","i","reverseParams","iteratorFn","value","nextUid","uid","baseExtend","dst","objs","deep","h","$$hashKey","ii","isObject","j","jj","src","isDate","Date","valueOf","isRegExp","RegExp","nodeName","cloneNode","isElement","clone","extend","slice","arguments","merge","toInt","str","parseInt","inherit","parent","extra","create","noop","identity","$","valueFn","valueRef","hasCustomToString","toString","isUndefined","isDefined","getPrototypeOf","isScope","$evalAsync","$watch","isBoolean","isTypedArray","TYPED_ARRAY_REGEXP","test","node","prop","attr","find","makeMap","items","split","nodeName_","element","lowercase","arrayRemove","array","index","indexOf","splice","copy","source","destination","copyRecurse","push","copyElement","stackSource","stackDest","ngMinErr","needsRecurse","copyType","undefined","constructor","buffer","byteOffset","copied","ArrayBuffer","byteLength","set","Uint8Array","re","match","lastIndex","type","equals","o1","o2","t1","t2","getTime","keySet","createMap","charAt","concat","array1","array2","bind","self","fn","curryArgs","startIndex","apply","toJsonReplacer","val","document","toJson","pretty","JSON","stringify","fromJson","json","parse","timezoneToOffset","timezone","fallback","replace","ALL_COLONS","requestedTimezoneOffset","isNumberNaN","convertTimezoneToLocal","date","reverse","dateTimezoneOffset","getTimezoneOffset","timezoneOffset","setMinutes","getMinutes","minutes","startingTag","empty","e","elemHtml","append","html","nodeType","NODE_TYPE_TEXT","tryDecodeURIComponent","decodeURIComponent","parseKeyValue","keyValue","splitPoint","substring","toKeyValue","parts","arrayValue","encodeUriQuery","join","encodeUriSegment","pctEncodeSpaces","encodeURIComponent","getNgAttribute","ngAttr","ngAttrPrefixes","getAttribute","angularInit","bootstrap","appElement","module","config","prefix","name","hasAttribute","candidate","querySelector","isAutoBootstrapAllowed","strictDi","console","error","modules","defaultConfig","doBootstrap","injector","tag","unshift","$provide","debugInfoEnabled","$compileProvider","createInjector","invoke","bootstrapApply","scope","compile","$apply","data","NG_ENABLE_DEBUG_INFO","NG_DEFER_BOOTSTRAP","angular","resumeBootstrap","angular.resumeBootstrap","extraModules","resumeDeferredBootstrap","reloadWithDebugInfo","location","reload","getTestability","rootElement","get","snake_case","separator","SNAKE_CASE_REGEXP","letter","pos","toLowerCase","bindJQuery","originalCleanData","bindJQueryFired","jqName","jq","jQuery","on","JQLitePrototype","isolateScope","controller","inheritedData","cleanData","jQuery.cleanData","elems","events","elem","_data","$destroy","triggerHandler","JQLite","assertArg","arg","reason","assertArgFn","acceptArrayAnnotation","assertNotHasOwnProperty","getter","path","bindFnToScope","lastInstance","len","getBlockNodes","nodes","endNode","blockNodes","nextSibling","setupModuleLoader","ensure","factory","$injectorMinErr","$$minErr","requires","configFn","invokeLater","provider","method","insertMethod","queue","invokeQueue","moduleInstance","invokeLaterAndSetModuleName","recipeName","factoryFunction","$$moduleName","configBlocks","runBlocks","_invokeQueue","_configBlocks","_runBlocks","service","constant","decorator","animation","filter","directive","component","run","block","shallowCopy","publishExternalAPI","version","uppercase","$$counter","csp","angularModule","ngModule","$$sanitizeUri","$$SanitizeUriProvider","$CompileProvider","a","htmlAnchorDirective","input","inputDirective","textarea","form","formDirective","script","scriptDirective","select","selectDirective","option","optionDirective","ngBind","ngBindDirective","ngBindHtml","ngBindHtmlDirective","ngBindTemplate","ngBindTemplateDirective","ngClass","ngClassDirective","ngClassEven","ngClassEvenDirective","ngClassOdd","ngClassOddDirective","ngCloak","ngCloakDirective","ngController","ngControllerDirective","ngForm","ngFormDirective","ngHide","ngHideDirective","ngIf","ngIfDirective","ngInclude","ngIncludeDirective","ngInit","ngInitDirective","ngNonBindable","ngNonBindableDirective","ngPluralize","ngPluralizeDirective","ngRepeat","ngRepeatDirective","ngShow","ngShowDirective","ngStyle","ngStyleDirective","ngSwitch","ngSwitchDirective","ngSwitchWhen","ngSwitchWhenDirective","ngSwitchDefault","ngSwitchDefaultDirective","ngOptions","ngOptionsDirective","ngTransclude","ngTranscludeDirective","ngModel","ngModelDirective","ngList","ngListDirective","ngChange","ngChangeDirective","pattern","patternDirective","ngPattern","required","requiredDirective","ngRequired","minlength","minlengthDirective","ngMinlength","maxlength","maxlengthDirective","ngMaxlength","ngValue","ngValueDirective","ngModelOptions","ngModelOptionsDirective","ngIncludeFillContentDirective","ngAttributeAliasDirectives","ngEventDirectives","$anchorScroll","$AnchorScrollProvider","$animate","$AnimateProvider","$animateCss","$CoreAnimateCssProvider","$$animateJs","$$CoreAnimateJsProvider","$$animateQueue","$$CoreAnimateQueueProvider","$$AnimateRunner","$$AnimateRunnerFactoryProvider","$$animateAsyncRun","$$AnimateAsyncRunFactoryProvider","$browser","$BrowserProvider","$cacheFactory","$CacheFactoryProvider","$controller","$ControllerProvider","$document","$DocumentProvider","$exceptionHandler","$ExceptionHandlerProvider","$filter","$FilterProvider","$$forceReflow","$$ForceReflowProvider","$interpolate","$InterpolateProvider","$interval","$IntervalProvider","$http","$HttpProvider","$httpParamSerializer","$HttpParamSerializerProvider","$httpParamSerializerJQLike","$HttpParamSerializerJQLikeProvider","$httpBackend","$HttpBackendProvider","$xhrFactory","$xhrFactoryProvider","$jsonpCallbacks","$jsonpCallbacksProvider","$location","$LocationProvider","$log","$LogProvider","$parse","$ParseProvider","$rootScope","$RootScopeProvider","$q","$QProvider","$$q","$$QProvider","$sce","$SceProvider","$sceDelegate","$SceDelegateProvider","$sniffer","$SnifferProvider","$templateCache","$TemplateCacheProvider","$templateRequest","$TemplateRequestProvider","$$testability","$$TestabilityProvider","$timeout","$TimeoutProvider","$window","$WindowProvider","$$rAF","$$RAFProvider","$$jqLite","$$jqLiteProvider","$$HashMap","$$HashMapProvider","$$cookieReader","$$CookieReaderProvider","camelCase","SPECIAL_CHARS_REGEXP","_","offset","toUpperCase","MOZ_HACK_REGEXP","jqLiteAcceptsData","NODE_TYPE_ELEMENT","NODE_TYPE_DOCUMENT","jqLiteBuildFragment","tmp","fragment","createDocumentFragment","HTML_REGEXP","appendChild","createElement","TAG_NAME_REGEXP","exec","wrap","wrapMap","_default","innerHTML","XHTML_TAG_REGEXP","lastChild","childNodes","firstChild","textContent","createTextNode","jqLiteWrapNode","wrapper","parentNode","replaceChild","argIsString","trim","jqLiteMinErr","parsed","SINGLE_TAG_REGEXP","jqLiteAddNodes","jqLiteClone","jqLiteDealoc","onlyDescendants","jqLiteRemoveData","querySelectorAll","descendants","l","jqLiteOff","unsupported","expandoStore","jqLiteExpandoStore","handle","removeHandler","listenerFns","removeEventListener","MOUSE_EVENT_MAP","expandoId","ng339","jqCache","createIfNecessary","jqId","jqLiteData","isSimpleSetter","isSimpleGetter","massGetter","jqLiteHasClass","selector","jqLiteRemoveClass","cssClasses","setAttribute","cssClass","jqLiteAddClass","existingClasses","root","elements","jqLiteController","jqLiteInheritedData","documentElement","names","NODE_TYPE_DOCUMENT_FRAGMENT","host","jqLiteEmpty","removeChild","jqLiteRemove","keepData","jqLiteDocumentLoaded","action","win","readyState","setTimeout","getBooleanAttrName","booleanAttr","BOOLEAN_ATTR","BOOLEAN_ELEMENTS","createEventHandler","eventHandler","event","isDefaultPrevented","event.isDefaultPrevented","defaultPrevented","eventFns","eventFnsLength","immediatePropagationStopped","originalStopImmediatePropagation","stopImmediatePropagation","event.stopImmediatePropagation","stopPropagation","isImmediatePropagationStopped","event.isImmediatePropagationStopped","handlerWrapper","specialHandlerWrapper","defaultHandlerWrapper","handler","specialMouseHandlerWrapper","target","related","relatedTarget","jqLiteContains","$get","this.$get","hasClass","classes","addClass","removeClass","hashKey","nextUidFn","objType","HashMap","isolatedUid","this.nextUid","put","extractArgs","fnText","Function","prototype","STRIP_COMMENTS","ARROW_ARG","FN_ARGS","anonFn","args","modulesToLoad","supportObject","delegate","provider_","providerInjector","instantiate","providerCache","providerSuffix","enforceReturnValue","enforcedReturnValue","result","instanceInjector","factoryFn","enforce","loadModules","moduleFn","runInvokeQueue","invokeArgs","loadedModules","message","stack","createInternalInjector","cache","getService","serviceName","caller","INSTANTIATING","err","shift","injectionArgs","locals","$inject","$$annotate","msie","Type","ctor","annotate","has","$injector","instanceCache","decorFn","origProvider","orig$get","origProvider.$get","origInstance","$delegate","protoInstanceInjector","autoScrollingEnabled","disableAutoScrolling","this.disableAutoScrolling","getFirstAnchor","list","some","scrollTo","scrollIntoView","scroll","yOffset","getComputedStyle","style","position","getBoundingClientRect","bottom","elemTop","top","scrollBy","hash","elm","getElementById","getElementsByName","autoScrollWatch","autoScrollWatchAction","newVal","oldVal","mergeClasses","b","splitClasses","klass","prepareAnimateOptions","options","Browser","completeOutstandingRequest","outstandingRequestCount","outstandingRequestCallbacks","pop","cacheStateAndFireUrlChange","pendingLocation","cacheState","fireUrlChange","cachedState","getCurrentState","lastCachedState","lastBrowserUrl","url","lastHistoryState","urlChangeListeners","listener","history","clearTimeout","pendingDeferIds","isMock","$$completeOutstandingRequest","$$incOutstandingRequestCount","self.$$incOutstandingRequestCount","notifyWhenNoOutstandingRequests","self.notifyWhenNoOutstandingRequests","callback","href","baseElement","state","self.url","sameState","sameBase","stripHash","substr","self.state","urlChangeInit","onUrlChange","self.onUrlChange","$$applicationDestroyed","self.$$applicationDestroyed","off","$$checkUrlChange","baseHref","self.baseHref","defer","self.defer","delay","timeoutId","cancel","self.defer.cancel","deferId","cacheFactory","cacheId","refresh","entry","freshEnd","staleEnd","n","link","p","nextEntry","prevEntry","caches","size","stats","id","capacity","Number","MAX_VALUE","lruHash","lruEntry","remove","removeAll","destroy","info","cacheFactory.info","cacheFactory.get","$$sanitizeUriProvider","parseIsolateBindings","directiveName","isController","LOCAL_REGEXP","bindings","definition","scopeName","bindingCache","$compileMinErr","mode","collection","optional","attrName","assertValidDirectiveName","getDirectiveRequire","require","REQUIRE_PREFIX_REGEXP","hasDirectives","COMMENT_DIRECTIVE_REGEXP","CLASS_DIRECTIVE_REGEXP","ALL_OR_NOTHING_ATTRS","EVENT_HANDLER_ATTR_REGEXP","this.directive","registerDirective","directiveFactory","Suffix","directives","priority","restrict","this.component","makeInjectable","tElement","tAttrs","$element","$attrs","template","templateUrl","ddo","controllerAs","identifierForController","transclude","bindToController","aHrefSanitizationWhitelist","this.aHrefSanitizationWhitelist","regexp","imgSrcSanitizationWhitelist","this.imgSrcSanitizationWhitelist","this.debugInfoEnabled","enabled","preAssignBindingsEnabled","this.preAssignBindingsEnabled","TTL","onChangesTtl","this.onChangesTtl","commentDirectivesEnabledConfig","commentDirectivesEnabled","this.commentDirectivesEnabled","cssClassDirectivesEnabledConfig","cssClassDirectivesEnabled","this.cssClassDirectivesEnabled","flushOnChangesQueue","onChangesQueue","errors","Attributes","attributesToCopy","$attr","$$element","setSpecialAttr","specialAttrHolder","attributes","attribute","removeNamedItem","setNamedItem","safeAddClass","className","$compileNodes","transcludeFn","maxPriority","ignoreDirective","previousCompileContext","NOT_EMPTY","domNode","nodeValue","compositeLinkFn","compileNodes","$$addScopeClass","namespace","publicLinkFn","cloneConnectFn","needsNewScope","$parent","$new","parentBoundTranscludeFn","transcludeControllers","futureParentElement","$$boundTransclude","$linkNode","wrapTemplate","controllerName","instance","$$addScopeInfo","nodeList","$rootElement","childLinkFn","childScope","childBoundTranscludeFn","stableNodeList","nodeLinkFnFound","linkFns","idx","nodeLinkFn","transcludeOnThisElement","createBoundTranscludeFn","templateOnThisElement","attrs","linkFnFound","collectDirectives","applyDirectivesToNode","terminal","previousBoundTranscludeFn","boundTranscludeFn","transcludedScope","cloneFn","controllers","containingScope","$$transcluded","boundSlots","$$slots","slotName","attrsMap","addDirective","directiveNormalize","isNgAttr","nAttrs","attrStartName","attrEndName","ngAttrName","NG_ATTR_BINDING","PREFIX_REGEXP","multiElementMatch","MULTI_ELEMENT_DIR_RE","directiveIsMultiElement","nName","addAttrInterpolateDirective","animVal","addTextInterpolateDirective","NODE_TYPE_COMMENT","collectCommentDirectives","byPriority","groupScan","attrStart","attrEnd","depth","groupElementsLinkFnWrapper","linkFn","groupedElementsLink","compilationGenerator","eager","compiled","lazyCompilation","compileNode","templateAttrs","jqCollection","originalReplaceDirective","preLinkFns","postLinkFns","addLinkFns","pre","post","newIsolateScopeDirective","$$isolateScope","cloneAndAnnotateFn","linkNode","controllersBoundTransclude","cloneAttachFn","hasElementTranscludeDirective","elementControllers","slotTranscludeFn","scopeToChild","controllerScope","newScopeDirective","isSlotFilled","transcludeFn.isSlotFilled","controllerDirectives","setupControllers","templateDirective","$$originalDirective","$$isolateBindings","scopeBindingInfo","initializeDirectiveBindings","removeWatches","$on","controllerDirective","$$bindings","bindingInfo","controllerResult","getControllers","controllerInstance","$onChanges","initialChanges","$onInit","$doCheck","$onDestroy","callOnDestroyHook","invokeLinkFn","$postLink","terminalPriority","nonTlbTranscludeDirective","hasTranscludeDirective","hasTemplate","$compileNode","$template","childTranscludeFn","didScanForMultipleTransclusion","mightHaveMultipleTransclusionError","directiveValue","$$start","$$end","assertNoDuplicate","$$tlb","scanningIndex","candidateDirective","$$createComment","replaceWith","$$parentNode","replaceDirective","slots","contents","slotMap","filledSlots","elementSelector","filled","$$newScope","denormalizeTemplate","removeComments","templateNamespace","newTemplateAttrs","templateDirectives","unprocessedDirectives","markDirectiveScope","mergeTemplateAttributes","compileTemplateUrl","Math","max","inheritType","dataName","property","controllerKey","$scope","$transclude","newScope","tDirectives","startAttrName","endAttrName","multiElement","srcAttr","dstAttr","$set","linkQueue","afterTemplateNodeLinkFn","afterTemplateChildLinkFn","beforeTemplateCompileNode","origAsyncDirective","derivedSyncDirective","then","content","tempTemplateAttrs","beforeTemplateLinkNode","linkRootElement","$$destroyed","oldClasses","delayedNodeLinkFn","ignoreChildLinkFn","diff","what","previousDirective","wrapModuleNameIfDefined","moduleName","text","interpolateFn","textInterpolateCompileFn","templateNode","templateNodeParent","hasCompileParent","$$addBindingClass","textInterpolateLinkFn","$$addBindingInfo","expressions","interpolateFnWatchAction","getTrustedContext","attrNormalizedName","HTML","RESOURCE_URL","trustedContext","allOrNothing","mustHaveExpression","attrInterpolatePreLinkFn","$$observers","newValue","$$inter","$$scope","oldValue","$updateClass","elementsToRemove","newNode","firstElementToRemove","removeCount","j2","hasData","annotation","recordChanges","currentValue","previousValue","$$postDigest","changes","triggerOnChangesHook","SimpleChange","removeWatchCollection","initializeBinding","lastValue","parentGet","parentSet","compare","removeWatch","$observe","_UNINITIALIZED_VALUE","literal","assign","parentValueWatch","parentValue","$stateful","$watchCollection","deepWatch","initialValue","parentValueWatchAction","SIMPLE_ATTR_NAME","$normalize","$addClass","classVal","$removeClass","newClasses","toAdd","tokenDifference","toRemove","writeAttr","booleanKey","aliasedKey","ALIASED_ATTR","observer","trimmedSrcset","srcPattern","rawUris","nbrUrisWith2parts","floor","innerIdx","lastTuple","removeAttr","listeners","startSymbol","endSymbol","binding","isolated","noTemplate","compile.$$createComment","comment","createComment","previous","current","str1","str2","values","tokens1","tokens2","token","jqNodes","ident","CNTRL_REG","globals","this.has","register","this.register","allowGlobals","this.allowGlobals","addIdentifier","identifier","expression","later","$controllerMinErr","controllerPrototype","$controllerInit","exception","cause","serializeValue","v","toISOString","ngParamSerializer","params","jQueryLikeParamSerializer","serialize","toSerialize","topLevel","defaultHttpResponseTransform","headers","tempData","JSON_PROTECTION_PREFIX","contentType","jsonStart","JSON_START","JSON_ENDS","parseHeaders","line","headerVal","headerKey","headersGetter","headersObj","transformData","status","fns","defaults","transformResponse","transformRequest","d","common","CONTENT_TYPE_APPLICATION_JSON","patch","xsrfCookieName","xsrfHeaderName","paramSerializer","useApplyAsync","this.useApplyAsync","useLegacyPromise","useLegacyPromiseExtensions","this.useLegacyPromiseExtensions","interceptorFactories","interceptors","requestConfig","chainInterceptors","promise","thenFn","rejectFn","executeHeaderFns","headerContent","processedHeaders","headerFn","header","response","resp","reject","mergeHeaders","defHeaders","reqHeaders","defHeaderName","lowercaseDefHeaderName","reqHeaderName","requestInterceptors","responseInterceptors","when","reversedInterceptors","interceptor","request","requestError","responseError","serverRequest","reqData","withCredentials","sendReq","success","promise.success","promise.error","$httpMinErrLegacyFn","createApplyHandlers","eventHandlers","applyHandlers","callEventHandler","$applyAsync","$$phase","done","headersString","statusText","resolveHttpPromise","resolvePromise","deferred","resolve","resolvePromiseWithResult","removePendingReq","pendingRequests","cachedResp","buildUrl","defaultCache","xsrfValue","urlIsSameOrigin","timeout","responseType","uploadEventHandlers","serializedParams","interceptorFactory","createShortMethods","createShortMethodsWithData","createXhr","XMLHttpRequest","createHttpBackend","$browserDefer","callbacks","rawDocument","jsonpReq","callbackPath","async","body","wasCalled","addEventListener","timeoutRequest","jsonpDone","xhr","abort","completeRequest","createCallback","getResponse","removeCallback","open","setRequestHeader","onload","xhr.onload","responseText","urlResolve","protocol","getAllResponseHeaders","onerror","onabort","ontimeout","upload","send","this.startSymbol","this.endSymbol","escape","ch","unescapeText","escapedStartRegexp","escapedEndRegexp","constantWatchDelegate","objectEquality","constantInterp","unwatch","constantInterpolateWatch","parseStringifyInterceptor","getTrusted","$interpolateMinErr","interr","unescapedText","exp","$$watchDelegate","endIndex","parseFns","textLength","expressionPositions","startSymbolLength","endSymbolLength","throwNoconcat","compute","interpolationFn","$watchGroup","interpolateFnWatcher","oldValues","currValue","$interpolate.startSymbol","$interpolate.endSymbol","interval","count","invokeApply","hasParams","iteration","setInterval","clearInterval","skipApply","$$intervalId","tick","notify","intervals","interval.cancel","encodePath","segments","parseAbsoluteUrl","absoluteUrl","locationObj","parsedUrl","$$protocol","$$host","hostname","$$port","port","DEFAULT_PORTS","parseAppUrl","DOUBLE_SLASH_REGEX","$locationMinErr","prefixed","$$path","pathname","$$search","search","$$hash","stripBaseUrl","base","trimEmptyHash","LocationHtml5Url","appBase","appBaseNoFile","basePrefix","$$html5","$$parse","this.$$parse","pathUrl","$$compose","this.$$compose","$$url","$$absUrl","$$parseLinkUrl","this.$$parseLinkUrl","relHref","appUrl","prevAppUrl","rewrittenUrl","LocationHashbangUrl","hashPrefix","withoutBaseUrl","withoutHashUrl","windowsFilePathExp","firstPathSegmentMatch","LocationHashbangInHtml5Url","locationGetter","locationGetterSetter","preprocess","html5Mode","requireBase","rewriteLinks","this.hashPrefix","this.html5Mode","setBrowserUrlWithFallback","oldUrl","oldState","$$state","afterLocationChange","$broadcast","absUrl","LocationMode","initialUrl","lastIndexOf","IGNORE_URI_REGEXP","ctrlKey","metaKey","shiftKey","which","button","absHref","preventDefault","initializing","newUrl","newState","$digest","$locationWatch","currentReplace","$$replace","urlOrStateChanged","debug","debugEnabled","this.debugEnabled","flag","formatError","Error","sourceURL","consoleLog","logFn","log","hasApply","arg1","arg2","warn","ensureSafeMemberName","fullExpression","$parseMinErr","getStringValue","ensureSafeObject","children","ensureSafeFunction","CALL","APPLY","BIND","ensureSafeAssignContext","ARRAY_CTOR","BOOLEAN_CTOR","FUNCTION_CTOR","NUMBER_CTOR","OBJECT_CTOR","STRING_CTOR","ARRAY_CTOR_PROTO","BOOLEAN_CTOR_PROTO","FUNCTION_CTOR_PROTO","NUMBER_CTOR_PROTO","OBJECT_CTOR_PROTO","STRING_CTOR_PROTO","ifDefined","plusFn","r","findConstantAndWatchExpressions","ast","allConstants","argsToWatch","isStatelessFilter","AST","Program","expr","Literal","toWatch","UnaryExpression","argument","BinaryExpression","left","right","LogicalExpression","ConditionalExpression","alternate","consequent","Identifier","MemberExpression","object","computed","CallExpression","callee","AssignmentExpression","ArrayExpression","ObjectExpression","properties","ThisExpression","LocalsExpression","getInputs","lastExpression","isAssignable","assignableAST","NGValueParameter","operator","isLiteral","ASTCompiler","astBuilder","ASTInterpreter","isPossiblyDangerousMemberName","getValueOf","objectValueOf","cacheDefault","cacheExpensive","literals","identStart","identContinue","addLiteral","this.addLiteral","literalName","literalValue","setIdentifierFns","this.setIdentifierFns","identifierStart","identifierContinue","interceptorFn","expensiveChecks","parsedExpression","oneTime","cacheKey","runningChecksEnabled","parseOptions","$parseOptionsExpensive","$parseOptions","lexer","Lexer","parser","Parser","oneTimeLiteralWatchDelegate","oneTimeWatchDelegate","inputs","inputsWatchDelegate","expensiveChecksInterceptor","addInterceptor","expensiveCheckFn","expensiveCheckOldValue","expressionInputDirtyCheck","oldValueOfValue","prettyPrintExpression","inputExpressions","lastResult","oldInputValueOf","expressionInputWatch","newInputValue","oldInputValueOfValues","oldInputValues","expressionInputsWatch","changed","oneTimeWatch","oneTimeListener","old","isAllDefined","allDefined","constantWatch","watchDelegate","useInputs","regularInterceptedExpression","oneTimeInterceptedExpression","noUnsafeEval","isIdentifierStart","isIdentifierContinue","$$runningExpensiveChecks","$parse.$$runningExpensiveChecks","qFactory","nextTick","exceptionHandler","Deferred","simpleBind","Promise","scheduleProcessQueue","processScheduled","pending","handleCallback","resolver","callbackOutput","errback","progressBack","$Q","$qMinErr","resolveFn","TypeError","onFulfilled","onRejected","catch","finally","$$reject","$$resolve","that","rejectPromise","progress","all","promises","counter","results","race","requestAnimationFrame","webkitRequestAnimationFrame","cancelAnimationFrame","webkitCancelAnimationFrame","webkitCancelRequestAnimationFrame","rafSupported","raf","timer","supported","createChildScopeClass","ChildScope","$$watchers","$$nextSibling","$$childHead","$$childTail","$$listeners","$$listenerCount","$$watchersCount","$id","$$ChildScope","$rootScopeMinErr","lastDirtyWatch","applyAsyncId","digestTtl","this.digestTtl","destroyChildScope","$event","currentScope","cleanUpScope","$$prevSibling","$root","Scope","beginPhase","phase","incrementWatchersCount","decrementListenerCount","initWatchVal","flushApplyAsync","applyAsyncQueue","scheduleApplyAsync","isolate","child","watchExp","watcher","last","eq","$$digestWatchIndex","deregisterWatch","watchExpressions","watchGroupAction","changeReactionScheduled","firstRun","newValues","deregisterFns","shouldCall","deregisterWatchGroup","unwatchFn","watchGroupSubAction","$watchCollectionInterceptor","_value","bothNaN","newItem","oldItem","internalArray","oldLength","changeDetected","newLength","internalObject","veryOldValue","trackVeryOldValue","changeDetector","initRun","$watchCollectionAction","watch","watchers","dirty","ttl","watchLog","logIdx","asyncTask","asyncQueuePosition","asyncQueue","$eval","msg","next","postDigestQueuePosition","postDigestQueue","eventName","this.$watchGroup","$applyAsyncExpression","namedListeners","indexOfListener","$emit","targetScope","listenerArgs","$$asyncQueue","$$postDigestQueue","$$applyAsyncQueue","sanitizeUri","uri","isImage","regex","normalizedVal","adjustMatcher","matcher","$sceMinErr","escapeForRegexp","adjustMatchers","matchers","adjustedMatchers","SCE_CONTEXTS","resourceUrlWhitelist","resourceUrlBlacklist","this.resourceUrlWhitelist","this.resourceUrlBlacklist","matchUrl","generateHolderType","Base","holderType","trustedValue","$$unwrapTrustedValue","this.$$unwrapTrustedValue","holderType.prototype.valueOf","holderType.prototype.toString","htmlSanitizer","trustedValueHolderBase","byType","CSS","URL","JS","trustAs","Constructor","maybeTrusted","allowed","this.enabled","sce","isEnabled","sce.isEnabled","sce.getTrusted","parseAs","sce.parseAs","enumValue","lName","eventSupport","hasHistoryPushState","chrome","app","runtime","pushState","android","userAgent","navigator","boxee","vendorPrefix","vendorRegex","bodyStyle","transitions","animations","webkitTransition","webkitAnimation","hasEvent","divElm","httpOptions","this.httpOptions","handleRequestFn","tpl","ignoreRequestError","totalPendingRequests","getTrustedResourceUrl","transformer","handleError","$templateRequestMinErr","testability","testability.findBindings","opt_exactMatch","getElementsByClassName","matches","dataBinding","bindingName","testability.findModels","prefixes","attributeEquals","testability.getLocation","testability.setLocation","testability.whenStable","deferreds","$$timeoutId","timeout.cancel","urlParsingNode","requestUrl","originUrl","$$CookieReader","safeDecodeURIComponent","lastCookies","lastCookieString","cookieArray","cookie","currentCookieString","filters","suffix","currencyFilter","dateFilter","filterFilter","jsonFilter","limitToFilter","lowercaseFilter","numberFilter","orderByFilter","uppercaseFilter","comparator","anyPropertyKey","matchAgainstAnyProp","getTypeForFilter","expressionType","predicateFn","createPredicateFn","shouldMatchPrimitives","actual","expected","deepCompare","dontMatchWholeObject","actualType","expectedType","expectedVal","matchAnyProperty","actualVal","$locale","formats","NUMBER_FORMATS","amount","currencySymbol","fractionSize","CURRENCY_SYM","PATTERNS","maxFrac","formatNumber","GROUP_SEP","DECIMAL_SEP","number","numStr","exponent","digits","numberOfIntegerDigits","zeros","ZERO_CHAR","MAX_DIGITS","roundNumber","parsedNumber","minFrac","fractionLen","min","roundAt","digit","k","carry","reduceRight","groupSep","decimalSep","isNaN","isInfinity","isFinite","isZero","abs","formattedText","integerLen","decimals","reduce","groups","lgSize","gSize","negPre","negSuf","posPre","posSuf","padNumber","num","negWrap","neg","dateGetter","dateStrGetter","shortForm","standAlone","getFirstThursdayOfYear","year","dayOfWeekOnFirst","getDay","weekGetter","firstThurs","getFullYear","thisThurs","getMonth","getDate","round","eraGetter","ERAS","jsonStringToDate","string","R_ISO8601_STR","tzHour","tzMin","dateSetter","setUTCFullYear","setFullYear","timeSetter","setUTCHours","setHours","m","s","ms","parseFloat","format","DATETIME_FORMATS","NUMBER_STRING","DATE_FORMATS_SPLIT","DATE_FORMATS","spacing","limit","begin","Infinity","sliceFn","end","processPredicates","sortPredicates","map","predicate","descending","defaultCompare","v1","v2","type1","type2","value1","value2","sortPredicate","reverseOrder","compareFn","predicates","compareValues","getComparisonObject","tieBreaker","predicateValues","doComparison","ngDirective","FormController","controls","$error","$$success","$pending","$name","$dirty","$pristine","$valid","$invalid","$submitted","$$parentForm","nullFormCtrl","$rollbackViewValue","form.$rollbackViewValue","control","$commitViewValue","form.$commitViewValue","$addControl","form.$addControl","$$renameControl","form.$$renameControl","newName","oldName","$removeControl","form.$removeControl","$setValidity","addSetValidityMethod","ctrl","unset","$setDirty","form.$setDirty","PRISTINE_CLASS","DIRTY_CLASS","$setPristine","form.$setPristine","setClass","SUBMITTED_CLASS","$setUntouched","form.$setUntouched","$setSubmitted","form.$setSubmitted","stringBasedInputType","$formatters","$isEmpty","baseInputType","composing","ev","ngTrim","$viewValue","$$hasNativeValidators","$setViewValue","deferListener","origValue","keyCode","PARTIAL_VALIDATION_TYPES","PARTIAL_VALIDATION_EVENTS","validity","origBadInput","badInput","origTypeMismatch","typeMismatch","$render","ctrl.$render","createDateParser","mapping","iso","ISO_DATE_REGEXP","yyyy","MM","dd","HH","getHours","mm","ss","getSeconds","sss","getMilliseconds","part","NaN","createDateInputType","parseDate","dynamicDateInputType","isValidDate","parseObservedDateValue","badInputChecker","$options","previousDate","$$parserName","$parsers","parsedDate","ngModelMinErr","ngMin","minVal","$validators","ctrl.$validators.min","$validate","ngMax","maxVal","ctrl.$validators.max","VALIDITY_STATE_PROPERTY","numberFormatterParser","NUMBER_REGEXP","parseNumberAttrVal","countDecimals","numString","decimalSymbolIndex","parseConstantExpr","parseFn","classDirective","arrayDifference","arrayClasses","addClasses","digestClassCounts","classCounts","classesToUpdate","updateClasses","ngClassWatchAction","$index","old$index","mod","cachedToggleClass","switchValue","classCache","toggleValidationCss","validationErrorKey","isValid","VALID_CLASS","INVALID_CLASS","setValidity","isObjectEmpty","PENDING_CLASS","combinedState","REGEX_STRING_REGEXP","documentMode","rules","ngCspElement","ngCspAttribute","noInlineStyle","name_","el","allowAutoBootstrap","currentScript","origin","full","major","minor","dot","codeName","expando","JQLite._data","mouseleave","mouseenter","optgroup","tbody","tfoot","colgroup","caption","thead","th","td","Node","contains","compareDocumentPosition","ready","trigger","fired","removeData","jqLiteHasData","jqLiteCleanData","removeAttribute","css","NODE_TYPE_ATTRIBUTE","lowercasedName","specified","getNamedItem","ret","getText","$dv","multiple","selected","nodeCount","jqLiteOn","types","addHandler","noEventListener","one","onFn","replaceNode","insertBefore","contentDocument","prepend","wrapNode","detach","after","newElement","toggleClass","condition","classCondition","nextElementSibling","getElementsByTagName","extraParameters","dummyEvent","handlerArgs","eventFnsCopy","arg3","unbind","FN_ARG_SPLIT","FN_ARG","argDecl","underscore","$animateMinErr","postDigestElements","updateData","handleCSSClassChanges","existing","pin","domOperation","from","to","classesAdded","add","classesRemoved","runner","complete","$$registeredAnimations","classNameFilter","this.classNameFilter","$$classNameFilter","reservedRegex","NG_ANIMATE_CLASSNAME","domInsert","parentElement","afterElement","afterNode","ELEMENT_NODE","previousElementSibling","enter","move","leave","addclass","animate","tempClasses","waitForTick","waitQueue","passed","AnimateRunner","setHost","rafTick","_doneCallbacks","_tick","this._tick","doc","hidden","_state","chain","AnimateRunner.chain","AnimateRunner.all","runners","onProgress","DONE_COMPLETE_STATE","getPromise","resolveHandler","rejectHandler","pause","resume","_resolve","INITIAL_STATE","DONE_PENDING_STATE","initialOptions","closed","$$prepared","cleanupStyles","start","UNINITIALIZED_VALUE","isFirstChange","SimpleChange.prototype.isFirstChange","offsetWidth","APPLICATION_JSON","$httpMinErr","$interpolateMinErr.throwNoconcat","$interpolateMinErr.interr","callbackId","called","callbackMap","PATH_MATCH","locationPrototype","paramValue","Location","Location.prototype.state","OPERATORS","ESCAPE","lex","tokens","readString","peek","readNumber","peekMultichar","readIdent","is","isWhitespace","ch2","ch3","op2","op3","op1","throwError","chars","codePointAt","isValidIdentifierStart","isValidIdentifierContinue","cp","charCodeAt","cp1","cp2","isExpOperator","colStr","peekCh","quote","rawString","hex","String","fromCharCode","rep","ExpressionStatement","Property","program","expressionStatement","expect","filterChain","assignment","ternary","logicalOR","consume","logicalAND","equality","relational","additive","multiplicative","unary","primary","arrayDeclaration","selfReferential","parseArguments","baseExpression","peekToken","kind","e1","e2","e3","e4","peekAhead","t","nextId","vars","own","assignable","stage","computing","recurse","return_","generateFunction","fnKey","intoId","watchId","fnString","USE","STRICT","filterPrefix","watchFns","varsPrefix","section","nameId","recursionFn","skipWatchIdCheck","if_","lazyAssign","computedMember","lazyRecurse","plus","not","getHasOwnProperty","nonComputedMember","addEnsureSafeObject","notNull","addEnsureSafeAssignContext","addEnsureSafeMemberName","addEnsureSafeFunction","member","filterName","defaultValue","UNSAFE_CHARACTERS","SAFE_IDENTIFIER","stringEscapeFn","stringEscapeRegex","c","skip","init","fn.assign","rhs","lhs","unary+","unary-","unary!","binary+","binary-","binary*","binary/","binary%","binary===","binary!==","binary==","binary!=","binary<","binary>","binary<=","binary>=","binary&&","binary||","ternary?:","astCompiler","yy","y","MMMM","MMM","M","LLLL","H","hh","EEEE","EEE","ampmGetter","AMPMS","Z","timeZoneGetter","zone","paddedZone","ww","w","G","GG","GGG","GGGG","longEraGetter","ERANAMES","xlinkHref","propName","defaultLinkFn","normalized","ngBooleanAttrWatchAction","htmlAttr","ngAttrAliasWatchAction","nullFormRenameControl","formDirectiveFactory","isNgForm","getSetter","ngFormCompile","formElement","nameAttr","ngFormPreLink","ctrls","handleFormSubmission","setter","URL_REGEXP","EMAIL_REGEXP","DATE_REGEXP","DATETIMELOCAL_REGEXP","WEEK_REGEXP","MONTH_REGEXP","TIME_REGEXP","inputType","textInputType","weekParser","isoWeek","existingDate","week","hours","seconds","milliseconds","addDays","numberInputType","urlInputType","ctrl.$validators.url","modelValue","viewValue","emailInputType","email","ctrl.$validators.email","radioInputType","checked","rangeInputType","setInitialValueAndObserver","htmlAttrName","changeFn","minChange","$modelValue","supportsRange","elVal","maxChange","stepChange","stepVal","hasMinAttr","hasMaxAttr","hasStepAttr","step","originalRender","rangeUnderflow","rangeOverflow","rangeRender","noopMinValidator","minValidator","noopMaxValidator","maxValidator","nativeStepValidator","stepMismatch","stepValidator","stepBase","decimalCount","multiplier","pow","checkboxInputType","trueValue","ngTrueValue","falseValue","ngFalseValue","ctrl.$isEmpty","CONSTANT_VALUE_REGEXP","tplAttr","ngValueConstantLink","ngValueLink","valueWatchAction","$compile","ngBindCompile","templateElement","ngBindLink","ngBindWatchAction","ngBindTemplateCompile","ngBindTemplateLink","ngBindHtmlCompile","ngBindHtmlGetter","ngBindHtmlWatch","sceValueOf","ngBindHtmlLink","ngBindHtmlWatchAction","getTrustedHtml","$viewChangeListeners","forceAsyncEvents","ngEventHandler","previousElements","ngIfWatchAction","srcExp","onloadExp","autoScrollExp","autoscroll","changeCounter","previousElement","currentElement","cleanupLastIncludeContent","ngIncludeWatchAction","afterAnimation","thisChangeId","namespaceAdaptedClone","trimValues","NgModelController","$$rawModelValue","$asyncValidators","$untouched","$touched","parsedNgModel","parsedNgModelAssign","ngModelGet","ngModelSet","pendingDebounce","parserValid","$$setOptions","this.$$setOptions","getterSetter","invokeModelGetter","invokeModelSetter","$$$p","this.$isEmpty","$$updateEmptyClasses","this.$$updateEmptyClasses","NOT_EMPTY_CLASS","EMPTY_CLASS","currentValidationRunId","this.$setPristine","this.$setDirty","this.$setUntouched","UNTOUCHED_CLASS","TOUCHED_CLASS","$setTouched","this.$setTouched","this.$rollbackViewValue","$$lastCommittedViewValue","this.$validate","prevValid","prevModelValue","allowInvalid","$$runValidators","allValid","$$writeModelToScope","this.$$runValidators","doneCallback","processSyncValidators","syncValidatorsValid","validator","processAsyncValidators","validatorPromises","validationDone","localValidationRunId","processParseErrors","errorKey","this.$commitViewValue","$$parseAndValidate","this.$$parseAndValidate","this.$$writeModelToScope","this.$setViewValue","updateOnDefault","$$debounceViewValueCommit","this.$$debounceViewValueCommit","debounceDelay","debounce","ngModelWatch","formatters","ngModelCompile","ngModelPreLink","modelCtrl","formCtrl","ngModelPostLink","updateOn","DEFAULT_REGEXP","NgModelOptionsController","ngOptionsMinErr","NG_OPTIONS_REGEXP","parseOptionsExpression","optionsExp","selectElement","Option","selectValue","label","group","disabled","getOptionValuesKeys","optionValues","optionValuesKeys","keyName","itemKey","valueName","selectAs","trackBy","viewValueFn","trackByFn","getTrackByValueFn","getHashOfValue","getTrackByValue","getLocals","displayFn","groupByFn","disableWhenFn","valuesFn","getWatchables","watchedArray","optionValuesLength","disableWhen","getOptions","optionItems","selectValueMap","optionItem","getOptionFromViewValue","getViewValueFromOption","optionTemplate","optGroupTemplate","ngOptionsPreLink","registerOption","ngOptionsPostLink","updateOptionElement","updateOptions","selectCtrl","readValue","groupElementMap","providedEmptyOption","emptyOption","addOption","groupElement","listFragment","optionElement","ngModelCtrl","nextValue","emptyOptionRendered","unknownOption","removeEmptyOption","ngModelCtrl.$isEmpty","writeValue","selectCtrl.writeValue","selectCtrl.readValue","selectedValues","selections","selectedOption","selectCtrl.registerOption","optionScope","optionEl","BRACE","IS_WHEN","updateElementText","newText","numberExp","whenExp","whens","whensExpFns","braceReplacement","watchRemover","lastCount","attributeName","tmpMatch","whenKey","ngPluralizeWatchAction","countIsNaN","pluralCat","whenExpFn","ngRepeatMinErr","updateScope","valueIdentifier","keyIdentifier","arrayLength","$first","$last","$middle","$odd","$even","ngRepeatCompile","ngRepeatEndComment","aliasAs","trackByExp","trackByExpGetter","trackByIdExpFn","trackByIdArrayFn","trackByIdObjFn","hashFnLocals","ngRepeatLink","lastBlockMap","ngRepeatAction","previousNode","nextNode","nextBlockMap","collectionLength","trackById","collectionKeys","nextBlockOrder","trackByIdFn","blockKey","ngRepeatTransclude","ngShowWatchAction","NG_HIDE_CLASS","NG_HIDE_IN_PROGRESS_CLASS","ngHideWatchAction","ngStyleWatchAction","newStyles","oldStyles","NgSwitchController","cases","ngSwitchController","selectedTranscludes","selectedElements","previousLeaveAnimations","selectedScopes","spliceFactory","ngSwitchWatchAction","selectedTransclude","caseElement","selectedScope","anchor","ngSwitchWhenSeparator","whenCase","ngTranscludeMinErr","ngTranscludeCompile","fallbackLinkFn","ngTranscludePostLink","useFallbackContent","ngTranscludeSlot","ngTranscludeCloneAttachFn","noopNgModelController","SelectController","optionsMap","renderUnknownOption","self.renderUnknownOption","unknownVal","removeUnknownOption","self.removeUnknownOption","self.readValue","self.writeValue","hasOption","self.addOption","removeOption","self.removeOption","self.hasOption","self.registerOption","optionAttrs","hasDynamicValueAttr","interpolateTextFn","valueAttributeObserveAction","interpolateWatchAction","selectPreLink","lastView","lastViewRef","selectMultipleWatch","selectPostLink","ngModelCtrl.$render","selectCtrlName","ctrl.$validators.required","patternExp","ctrl.$validators.pattern","intVal","ctrl.$validators.maxlength","ctrl.$validators.minlength","getDecimals","opt_precision","ONE","OTHER","$$csp","head"]
}
src/main/webapp/bower_components/angular/bower.json
New file
@@ -0,0 +1,9 @@
{
  "name": "angular",
  "version": "1.5.11",
  "license": "MIT",
  "main": "./angular.js",
  "ignore": [],
  "dependencies": {
  }
}
src/main/webapp/bower_components/angular/index.js
New file
@@ -0,0 +1,2 @@
require('./angular');
module.exports = angular;
src/main/webapp/bower_components/angular/package.json
New file
@@ -0,0 +1,25 @@
{
  "name": "angular",
  "version": "1.5.11",
  "description": "HTML enhanced for web apps",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/angular/angular.js.git"
  },
  "keywords": [
    "angular",
    "framework",
    "browser",
    "client-side"
  ],
  "author": "Angular Core Team <angular-core+npm@google.com>",
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/angular/angular.js/issues"
  },
  "homepage": "http://angularjs.org"
}
src/main/webapp/bower_components/bootstrap-daterangepicker/.bower.json
New file
@@ -0,0 +1,32 @@
{
  "name": "bootstrap-daterangepicker",
  "main": [
    "daterangepicker.js",
    "daterangepicker.css"
  ],
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "test",
    "tests",
    "moment.js",
    "moment.min.js"
  ],
  "dependencies": {
    "jquery": "1.9.1 - 3",
    "moment": ">=2.9.0"
  },
  "homepage": "https://github.com/dangrossman/bootstrap-daterangepicker",
  "version": "2.1.27",
  "_release": "2.1.27",
  "_resolution": {
    "type": "version",
    "tag": "v2.1.27",
    "commit": "d4aabfbceaf57117e1af33f3f82e92162719eee9"
  },
  "_source": "https://github.com/dangrossman/bootstrap-daterangepicker.git",
  "_target": "2.1.27",
  "_originalSource": "bootstrap-daterangepicker",
  "_direct": true
}
src/main/webapp/bower_components/bootstrap-daterangepicker/README.md
New file
@@ -0,0 +1,44 @@
# Date Range Picker for Bootstrap
![Improvely.com](http://i.imgur.com/LbAMf3D.png)
This date range picker component for Bootstrap creates a dropdown menu from which a user can
select a range of dates. I created it while building the UI for [Improvely](http://www.improvely.com),
which needed a way to select date ranges for reports.
Features include limiting the selectable date range, localizable strings and date formats,
a single date picker mode, optional time picker (for e.g. making appointments or reservations),
and styles that match the default Bootstrap 3 theme.
## [Documentation and Live Usage Examples](http://www.daterangepicker.com)
## [See It In a Live Application](https://awio.iljmp.com/5/drpdemogh)
## License
This code is made available under the same license as Bootstrap. Moment.js is included in this repository
for convenience. It is available under the [MIT license](http://www.opensource.org/licenses/mit-license.php).
--
The MIT License (MIT)
Copyright (c) 2012-2017 Dan Grossman
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
src/main/webapp/bower_components/bootstrap-daterangepicker/bower.json
New file
@@ -0,0 +1,20 @@
{
  "name": "bootstrap-daterangepicker",
  "main": [
    "daterangepicker.js",
    "daterangepicker.css"
  ],
  "ignore": [
    "**/.*",
    "node_modules",
    "bower_components",
    "test",
    "tests",
    "moment.js",
    "moment.min.js"
  ],
  "dependencies": {
    "jquery": "1.9.1 - 3",
    "moment": ">=2.9.0"
 }
}
src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.css
New file
@@ -0,0 +1,269 @@
.daterangepicker {
  position: absolute;
  color: inherit;
  background-color: #fff;
  border-radius: 4px;
  width: 278px;
  padding: 4px;
  margin-top: 1px;
  top: 100px;
  left: 20px;
  /* Calendars */ }
  .daterangepicker:before, .daterangepicker:after {
    position: absolute;
    display: inline-block;
    border-bottom-color: rgba(0, 0, 0, 0.2);
    content: ''; }
  .daterangepicker:before {
    top: -7px;
    border-right: 7px solid transparent;
    border-left: 7px solid transparent;
    border-bottom: 7px solid #ccc; }
  .daterangepicker:after {
    top: -6px;
    border-right: 6px solid transparent;
    border-bottom: 6px solid #fff;
    border-left: 6px solid transparent; }
  .daterangepicker.opensleft:before {
    right: 9px; }
  .daterangepicker.opensleft:after {
    right: 10px; }
  .daterangepicker.openscenter:before {
    left: 0;
    right: 0;
    width: 0;
    margin-left: auto;
    margin-right: auto; }
  .daterangepicker.openscenter:after {
    left: 0;
    right: 0;
    width: 0;
    margin-left: auto;
    margin-right: auto; }
  .daterangepicker.opensright:before {
    left: 9px; }
  .daterangepicker.opensright:after {
    left: 10px; }
  .daterangepicker.dropup {
    margin-top: -5px; }
    .daterangepicker.dropup:before {
      top: initial;
      bottom: -7px;
      border-bottom: initial;
      border-top: 7px solid #ccc; }
    .daterangepicker.dropup:after {
      top: initial;
      bottom: -6px;
      border-bottom: initial;
      border-top: 6px solid #fff; }
  .daterangepicker.dropdown-menu {
    max-width: none;
    z-index: 3001; }
  .daterangepicker.single .ranges, .daterangepicker.single .calendar {
    float: none; }
  .daterangepicker.show-calendar .calendar {
    display: block; }
  .daterangepicker .calendar {
    display: none;
    max-width: 270px;
    margin: 4px; }
    .daterangepicker .calendar.single .calendar-table {
      border: none; }
    .daterangepicker .calendar th, .daterangepicker .calendar td {
      white-space: nowrap;
      text-align: center;
      min-width: 32px; }
  .daterangepicker .calendar-table {
    border: 1px solid #fff;
    padding: 4px;
    border-radius: 4px;
    background-color: #fff; }
  .daterangepicker table {
    width: 100%;
    margin: 0; }
  .daterangepicker td, .daterangepicker th {
    text-align: center;
    width: 20px;
    height: 20px;
    border-radius: 4px;
    border: 1px solid transparent;
    white-space: nowrap;
    cursor: pointer; }
    .daterangepicker td.available:hover, .daterangepicker th.available:hover {
      background-color: #eee;
      border-color: transparent;
      color: inherit; }
    .daterangepicker td.week, .daterangepicker th.week {
      font-size: 80%;
      color: #ccc; }
  .daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date {
    background-color: #fff;
    border-color: transparent;
    color: #999; }
  .daterangepicker td.in-range {
    background-color: #ebf4f8;
    border-color: transparent;
    color: #000;
    border-radius: 0; }
  .daterangepicker td.start-date {
    border-radius: 4px 0 0 4px; }
  .daterangepicker td.end-date {
    border-radius: 0 4px 4px 0; }
  .daterangepicker td.start-date.end-date {
    border-radius: 4px; }
  .daterangepicker td.active, .daterangepicker td.active:hover {
    background-color: #357ebd;
    border-color: transparent;
    color: #fff; }
  .daterangepicker th.month {
    width: auto; }
  .daterangepicker td.disabled, .daterangepicker option.disabled {
    color: #999;
    cursor: not-allowed;
    text-decoration: line-through; }
  .daterangepicker select.monthselect, .daterangepicker select.yearselect {
    font-size: 12px;
    padding: 1px;
    height: auto;
    margin: 0;
    cursor: default; }
  .daterangepicker select.monthselect {
    margin-right: 2%;
    width: 56%; }
  .daterangepicker select.yearselect {
    width: 40%; }
  .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect {
    width: 50px;
    margin-bottom: 0; }
  .daterangepicker .input-mini {
    border: 1px solid #ccc;
    border-radius: 4px;
    color: #555;
    height: 30px;
    line-height: 30px;
    display: block;
    vertical-align: middle;
    margin: 0 0 5px 0;
    padding: 0 6px 0 28px;
    width: 100%; }
    .daterangepicker .input-mini.active {
      border: 1px solid #08c;
      border-radius: 4px; }
  .daterangepicker .daterangepicker_input {
    position: relative; }
    .daterangepicker .daterangepicker_input i {
      position: absolute;
      left: 8px;
      top: 8px; }
  .daterangepicker.rtl .input-mini {
    padding-right: 28px;
    padding-left: 6px; }
  .daterangepicker.rtl .daterangepicker_input i {
    left: auto;
    right: 8px; }
  .daterangepicker .calendar-time {
    text-align: center;
    margin: 5px auto;
    line-height: 30px;
    position: relative;
    padding-left: 28px; }
    .daterangepicker .calendar-time select.disabled {
      color: #ccc;
      cursor: not-allowed; }
.ranges {
  font-size: 11px;
  float: none;
  margin: 4px;
  text-align: left; }
  .ranges ul {
    list-style: none;
    margin: 0 auto;
    padding: 0;
    width: 100%; }
  .ranges li {
    font-size: 13px;
    background-color: #f5f5f5;
    border: 1px solid #f5f5f5;
    border-radius: 4px;
    color: #08c;
    padding: 3px 12px;
    margin-bottom: 8px;
    cursor: pointer; }
    .ranges li:hover {
      background-color: #08c;
      border: 1px solid #08c;
      color: #fff; }
    .ranges li.active {
      background-color: #08c;
      border: 1px solid #08c;
      color: #fff; }
/*  Larger Screen Styling */
@media (min-width: 564px) {
  .daterangepicker {
    width: auto; }
    .daterangepicker .ranges ul {
      width: 160px; }
    .daterangepicker.single .ranges ul {
      width: 100%; }
    .daterangepicker.single .calendar.left {
      clear: none; }
    .daterangepicker.single.ltr .ranges, .daterangepicker.single.ltr .calendar {
      float: left; }
    .daterangepicker.single.rtl .ranges, .daterangepicker.single.rtl .calendar {
      float: right; }
    .daterangepicker.ltr {
      direction: ltr;
      text-align: left; }
      .daterangepicker.ltr .calendar.left {
        clear: left;
        margin-right: 0; }
        .daterangepicker.ltr .calendar.left .calendar-table {
          border-right: none;
          border-top-right-radius: 0;
          border-bottom-right-radius: 0; }
      .daterangepicker.ltr .calendar.right {
        margin-left: 0; }
        .daterangepicker.ltr .calendar.right .calendar-table {
          border-left: none;
          border-top-left-radius: 0;
          border-bottom-left-radius: 0; }
      .daterangepicker.ltr .left .daterangepicker_input {
        padding-right: 12px; }
      .daterangepicker.ltr .calendar.left .calendar-table {
        padding-right: 12px; }
      .daterangepicker.ltr .ranges, .daterangepicker.ltr .calendar {
        float: left; }
    .daterangepicker.rtl {
      direction: rtl;
      text-align: right; }
      .daterangepicker.rtl .calendar.left {
        clear: right;
        margin-left: 0; }
        .daterangepicker.rtl .calendar.left .calendar-table {
          border-left: none;
          border-top-left-radius: 0;
          border-bottom-left-radius: 0; }
      .daterangepicker.rtl .calendar.right {
        margin-right: 0; }
        .daterangepicker.rtl .calendar.right .calendar-table {
          border-right: none;
          border-top-right-radius: 0;
          border-bottom-right-radius: 0; }
      .daterangepicker.rtl .left .daterangepicker_input {
        padding-left: 12px; }
      .daterangepicker.rtl .calendar.left .calendar-table {
        padding-left: 12px; }
      .daterangepicker.rtl .ranges, .daterangepicker.rtl .calendar {
        text-align: right;
        float: right; } }
@media (min-width: 730px) {
  .daterangepicker .ranges {
    width: auto; }
  .daterangepicker.ltr .ranges {
    float: left; }
  .daterangepicker.rtl .ranges {
    float: right; }
  .daterangepicker .calendar.left {
    clear: none !important; } }
src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.js
New file
@@ -0,0 +1,1653 @@
/**
* @version: 2.1.27
* @author: Dan Grossman http://www.dangrossman.info/
* @copyright: Copyright (c) 2012-2017 Dan Grossman. All rights reserved.
* @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
* @website: http://www.daterangepicker.com/
*/
// Follow the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js
(function (root, factory) {
    if (typeof define === 'function' && define.amd) {
        // AMD. Make globaly available as well
        define(['moment', 'jquery'], function (moment, jquery) {
            if (!jquery.fn) jquery.fn = {}; // webpack server rendering
            return factory(moment, jquery);
        });
    } else if (typeof module === 'object' && module.exports) {
        // Node / Browserify
        //isomorphic issue
        var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined;
        if (!jQuery) {
            jQuery = require('jquery');
            if (!jQuery.fn) jQuery.fn = {};
        }
        var moment = (typeof window != 'undefined' && typeof window.moment != 'undefined') ? window.moment : require('moment');
        module.exports = factory(moment, jQuery);
    } else {
        // Browser globals
        root.daterangepicker = factory(root.moment, root.jQuery);
    }
}(this, function(moment, $) {
    var DateRangePicker = function(element, options, cb) {
        //default settings for options
        this.parentEl = 'body';
        this.element = $(element);
        this.startDate = moment().startOf('day');
        this.endDate = moment().endOf('day');
        this.minDate = false;
        this.maxDate = false;
        this.dateLimit = false;
        this.autoApply = false;
        this.singleDatePicker = false;
        this.showDropdowns = false;
        this.showWeekNumbers = false;
        this.showISOWeekNumbers = false;
        this.showCustomRangeLabel = true;
        this.timePicker = false;
        this.timePicker24Hour = false;
        this.timePickerIncrement = 1;
        this.timePickerSeconds = false;
        this.linkedCalendars = true;
        this.autoUpdateInput = true;
        this.alwaysShowCalendars = false;
        this.ranges = {};
        this.opens = 'right';
        if (this.element.hasClass('pull-right'))
            this.opens = 'left';
        this.drops = 'down';
        if (this.element.hasClass('dropup'))
            this.drops = 'up';
        this.buttonClasses = 'btn btn-sm';
        this.applyClass = 'btn-success';
        this.cancelClass = 'btn-default';
        this.locale = {
            direction: 'ltr',
            format: moment.localeData().longDateFormat('L'),
            separator: ' - ',
            applyLabel: 'Apply',
            cancelLabel: 'Cancel',
            weekLabel: 'W',
            customRangeLabel: 'Custom Range',
            daysOfWeek: moment.weekdaysMin(),
            monthNames: moment.monthsShort(),
            firstDay: moment.localeData().firstDayOfWeek()
        };
        this.callback = function() { };
        //some state information
        this.isShowing = false;
        this.leftCalendar = {};
        this.rightCalendar = {};
        //custom options from user
        if (typeof options !== 'object' || options === null)
            options = {};
        //allow setting options with data attributes
        //data-api options will be overwritten with custom javascript options
        options = $.extend(this.element.data(), options);
        //html template for the picker UI
        if (typeof options.template !== 'string' && !(options.template instanceof $))
            options.template = '<div class="daterangepicker dropdown-menu">' +
                '<div class="calendar left">' +
                    '<div class="daterangepicker_input">' +
                      '<input class="input-mini form-control" type="text" name="daterangepicker_start" value="" />' +
                      '<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>' +
                      '<div class="calendar-time">' +
                        '<div></div>' +
                        '<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' +
                      '</div>' +
                    '</div>' +
                    '<div class="calendar-table"></div>' +
                '</div>' +
                '<div class="calendar right">' +
                    '<div class="daterangepicker_input">' +
                      '<input class="input-mini form-control" type="text" name="daterangepicker_end" value="" />' +
                      '<i class="fa fa-calendar glyphicon glyphicon-calendar"></i>' +
                      '<div class="calendar-time">' +
                        '<div></div>' +
                        '<i class="fa fa-clock-o glyphicon glyphicon-time"></i>' +
                      '</div>' +
                    '</div>' +
                    '<div class="calendar-table"></div>' +
                '</div>' +
                '<div class="ranges">' +
                    '<div class="range_inputs">' +
                        '<button class="applyBtn" disabled="disabled" type="button"></button> ' +
                        '<button class="cancelBtn" type="button"></button>' +
                    '</div>' +
                '</div>' +
            '</div>';
        this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl);
        this.container = $(options.template).appendTo(this.parentEl);
        //
        // handle all the possible options overriding defaults
        //
        if (typeof options.locale === 'object') {
            if (typeof options.locale.direction === 'string')
                this.locale.direction = options.locale.direction;
            if (typeof options.locale.format === 'string')
                this.locale.format = options.locale.format;
            if (typeof options.locale.separator === 'string')
                this.locale.separator = options.locale.separator;
            if (typeof options.locale.daysOfWeek === 'object')
                this.locale.daysOfWeek = options.locale.daysOfWeek.slice();
            if (typeof options.locale.monthNames === 'object')
              this.locale.monthNames = options.locale.monthNames.slice();
            if (typeof options.locale.firstDay === 'number')
              this.locale.firstDay = options.locale.firstDay;
            if (typeof options.locale.applyLabel === 'string')
              this.locale.applyLabel = options.locale.applyLabel;
            if (typeof options.locale.cancelLabel === 'string')
              this.locale.cancelLabel = options.locale.cancelLabel;
            if (typeof options.locale.weekLabel === 'string')
              this.locale.weekLabel = options.locale.weekLabel;
            if (typeof options.locale.customRangeLabel === 'string'){
                //Support unicode chars in the custom range name.
                var elem = document.createElement('textarea');
                elem.innerHTML = options.locale.customRangeLabel;
                var rangeHtml = elem.value;
                this.locale.customRangeLabel = rangeHtml;
            }
        }
        this.container.addClass(this.locale.direction);
        if (typeof options.startDate === 'string')
            this.startDate = moment(options.startDate, this.locale.format);
        if (typeof options.endDate === 'string')
            this.endDate = moment(options.endDate, this.locale.format);
        if (typeof options.minDate === 'string')
            this.minDate = moment(options.minDate, this.locale.format);
        if (typeof options.maxDate === 'string')
            this.maxDate = moment(options.maxDate, this.locale.format);
        if (typeof options.startDate === 'object')
            this.startDate = moment(options.startDate);
        if (typeof options.endDate === 'object')
            this.endDate = moment(options.endDate);
        if (typeof options.minDate === 'object')
            this.minDate = moment(options.minDate);
        if (typeof options.maxDate === 'object')
            this.maxDate = moment(options.maxDate);
        // sanity check for bad options
        if (this.minDate && this.startDate.isBefore(this.minDate))
            this.startDate = this.minDate.clone();
        // sanity check for bad options
        if (this.maxDate && this.endDate.isAfter(this.maxDate))
            this.endDate = this.maxDate.clone();
        if (typeof options.applyClass === 'string')
            this.applyClass = options.applyClass;
        if (typeof options.cancelClass === 'string')
            this.cancelClass = options.cancelClass;
        if (typeof options.dateLimit === 'object')
            this.dateLimit = options.dateLimit;
        if (typeof options.opens === 'string')
            this.opens = options.opens;
        if (typeof options.drops === 'string')
            this.drops = options.drops;
        if (typeof options.showWeekNumbers === 'boolean')
            this.showWeekNumbers = options.showWeekNumbers;
        if (typeof options.showISOWeekNumbers === 'boolean')
            this.showISOWeekNumbers = options.showISOWeekNumbers;
        if (typeof options.buttonClasses === 'string')
            this.buttonClasses = options.buttonClasses;
        if (typeof options.buttonClasses === 'object')
            this.buttonClasses = options.buttonClasses.join(' ');
        if (typeof options.showDropdowns === 'boolean')
            this.showDropdowns = options.showDropdowns;
        if (typeof options.showCustomRangeLabel === 'boolean')
            this.showCustomRangeLabel = options.showCustomRangeLabel;
        if (typeof options.singleDatePicker === 'boolean') {
            this.singleDatePicker = options.singleDatePicker;
            if (this.singleDatePicker)
                this.endDate = this.startDate.clone();
        }
        if (typeof options.timePicker === 'boolean')
            this.timePicker = options.timePicker;
        if (typeof options.timePickerSeconds === 'boolean')
            this.timePickerSeconds = options.timePickerSeconds;
        if (typeof options.timePickerIncrement === 'number')
            this.timePickerIncrement = options.timePickerIncrement;
        if (typeof options.timePicker24Hour === 'boolean')
            this.timePicker24Hour = options.timePicker24Hour;
        if (typeof options.autoApply === 'boolean')
            this.autoApply = options.autoApply;
        if (typeof options.autoUpdateInput === 'boolean')
            this.autoUpdateInput = options.autoUpdateInput;
        if (typeof options.linkedCalendars === 'boolean')
            this.linkedCalendars = options.linkedCalendars;
        if (typeof options.isInvalidDate === 'function')
            this.isInvalidDate = options.isInvalidDate;
        if (typeof options.isCustomDate === 'function')
            this.isCustomDate = options.isCustomDate;
        if (typeof options.alwaysShowCalendars === 'boolean')
            this.alwaysShowCalendars = options.alwaysShowCalendars;
        // update day names order to firstDay
        if (this.locale.firstDay != 0) {
            var iterator = this.locale.firstDay;
            while (iterator > 0) {
                this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());
                iterator--;
            }
        }
        var start, end, range;
        //if no start/end dates set, check if an input element contains initial values
        if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') {
            if ($(this.element).is('input[type=text]')) {
                var val = $(this.element).val(),
                    split = val.split(this.locale.separator);
                start = end = null;
                if (split.length == 2) {
                    start = moment(split[0], this.locale.format);
                    end = moment(split[1], this.locale.format);
                } else if (this.singleDatePicker && val !== "") {
                    start = moment(val, this.locale.format);
                    end = moment(val, this.locale.format);
                }
                if (start !== null && end !== null) {
                    this.setStartDate(start);
                    this.setEndDate(end);
                }
            }
        }
        if (typeof options.ranges === 'object') {
            for (range in options.ranges) {
                if (typeof options.ranges[range][0] === 'string')
                    start = moment(options.ranges[range][0], this.locale.format);
                else
                    start = moment(options.ranges[range][0]);
                if (typeof options.ranges[range][1] === 'string')
                    end = moment(options.ranges[range][1], this.locale.format);
                else
                    end = moment(options.ranges[range][1]);
                // If the start or end date exceed those allowed by the minDate or dateLimit
                // options, shorten the range to the allowable period.
                if (this.minDate && start.isBefore(this.minDate))
                    start = this.minDate.clone();
                var maxDate = this.maxDate;
                if (this.dateLimit && maxDate && start.clone().add(this.dateLimit).isAfter(maxDate))
                    maxDate = start.clone().add(this.dateLimit);
                if (maxDate && end.isAfter(maxDate))
                    end = maxDate.clone();
                // If the end of the range is before the minimum or the start of the range is
                // after the maximum, don't display this range option at all.
                if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day'))
                  || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day')))
                    continue;
                //Support unicode chars in the range names.
                var elem = document.createElement('textarea');
                elem.innerHTML = range;
                var rangeHtml = elem.value;
                this.ranges[rangeHtml] = [start, end];
            }
            var list = '<ul>';
            for (range in this.ranges) {
                list += '<li data-range-key="' + range + '">' + range + '</li>';
            }
            if (this.showCustomRangeLabel) {
                list += '<li data-range-key="' + this.locale.customRangeLabel + '">' + this.locale.customRangeLabel + '</li>';
            }
            list += '</ul>';
            this.container.find('.ranges').prepend(list);
        }
        if (typeof cb === 'function') {
            this.callback = cb;
        }
        if (!this.timePicker) {
            this.startDate = this.startDate.startOf('day');
            this.endDate = this.endDate.endOf('day');
            this.container.find('.calendar-time').hide();
        }
        //can't be used together for now
        if (this.timePicker && this.autoApply)
            this.autoApply = false;
        if (this.autoApply && typeof options.ranges !== 'object') {
            this.container.find('.ranges').hide();
        } else if (this.autoApply) {
            this.container.find('.applyBtn, .cancelBtn').addClass('hide');
        }
        if (this.singleDatePicker) {
            this.container.addClass('single');
            this.container.find('.calendar.left').addClass('single');
            this.container.find('.calendar.left').show();
            this.container.find('.calendar.right').hide();
            this.container.find('.daterangepicker_input input, .daterangepicker_input > i').hide();
            if (this.timePicker) {
                this.container.find('.ranges ul').hide();
            } else {
                this.container.find('.ranges').hide();
            }
        }
        if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) {
            this.container.addClass('show-calendar');
        }
        this.container.addClass('opens' + this.opens);
        //swap the position of the predefined ranges if opens right
        if (typeof options.ranges !== 'undefined' && this.opens == 'right') {
            this.container.find('.ranges').prependTo( this.container.find('.calendar.left').parent() );
        }
        //apply CSS classes and labels to buttons
        this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses);
        if (this.applyClass.length)
            this.container.find('.applyBtn').addClass(this.applyClass);
        if (this.cancelClass.length)
            this.container.find('.cancelBtn').addClass(this.cancelClass);
        this.container.find('.applyBtn').html(this.locale.applyLabel);
        this.container.find('.cancelBtn').html(this.locale.cancelLabel);
        //
        // event listeners
        //
        this.container.find('.calendar')
            .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this))
            .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this))
            .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this))
            .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this))
            .on('mouseleave.daterangepicker', 'td.available', $.proxy(this.updateFormInputs, this))
            .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this))
            .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this))
            .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this))
            .on('click.daterangepicker', '.daterangepicker_input input', $.proxy(this.showCalendars, this))
            .on('focus.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsFocused, this))
            .on('blur.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsBlurred, this))
            .on('change.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsChanged, this))
            .on('keydown.daterangepicker', '.daterangepicker_input input', $.proxy(this.formInputsKeydown, this));
        this.container.find('.ranges')
            .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this))
            .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this))
            .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this))
            .on('mouseenter.daterangepicker', 'li', $.proxy(this.hoverRange, this))
            .on('mouseleave.daterangepicker', 'li', $.proxy(this.updateFormInputs, this));
        if (this.element.is('input') || this.element.is('button')) {
            this.element.on({
                'click.daterangepicker': $.proxy(this.show, this),
                'focus.daterangepicker': $.proxy(this.show, this),
                'keyup.daterangepicker': $.proxy(this.elementChanged, this),
                'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility
            });
        } else {
            this.element.on('click.daterangepicker', $.proxy(this.toggle, this));
            this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this));
        }
        //
        // if attached to a text input, set the initial value
        //
        if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {
            this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
            this.element.trigger('change');
        } else if (this.element.is('input') && this.autoUpdateInput) {
            this.element.val(this.startDate.format(this.locale.format));
            this.element.trigger('change');
        }
    };
    DateRangePicker.prototype = {
        constructor: DateRangePicker,
        setStartDate: function(startDate) {
            if (typeof startDate === 'string')
                this.startDate = moment(startDate, this.locale.format);
            if (typeof startDate === 'object')
                this.startDate = moment(startDate);
            if (!this.timePicker)
                this.startDate = this.startDate.startOf('day');
            if (this.timePicker && this.timePickerIncrement)
                this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
            if (this.minDate && this.startDate.isBefore(this.minDate)) {
                this.startDate = this.minDate.clone();
                if (this.timePicker && this.timePickerIncrement)
                    this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
            }
            if (this.maxDate && this.startDate.isAfter(this.maxDate)) {
                this.startDate = this.maxDate.clone();
                if (this.timePicker && this.timePickerIncrement)
                    this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
            }
            if (!this.isShowing)
                this.updateElement();
            this.updateMonthsInView();
        },
        setEndDate: function(endDate) {
            if (typeof endDate === 'string')
                this.endDate = moment(endDate, this.locale.format);
            if (typeof endDate === 'object')
                this.endDate = moment(endDate);
            if (!this.timePicker)
                this.endDate = this.endDate.add(1,'d').startOf('day').subtract(1,'second');
            if (this.timePicker && this.timePickerIncrement)
                this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement);
            if (this.endDate.isBefore(this.startDate))
                this.endDate = this.startDate.clone();
            if (this.maxDate && this.endDate.isAfter(this.maxDate))
                this.endDate = this.maxDate.clone();
            if (this.dateLimit && this.startDate.clone().add(this.dateLimit).isBefore(this.endDate))
                this.endDate = this.startDate.clone().add(this.dateLimit);
            this.previousRightTime = this.endDate.clone();
            if (!this.isShowing)
                this.updateElement();
            this.updateMonthsInView();
        },
        isInvalidDate: function() {
            return false;
        },
        isCustomDate: function() {
            return false;
        },
        updateView: function() {
            if (this.timePicker) {
                this.renderTimePicker('left');
                this.renderTimePicker('right');
                if (!this.endDate) {
                    this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled');
                } else {
                    this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled');
                }
            }
            if (this.endDate) {
                this.container.find('input[name="daterangepicker_end"]').removeClass('active');
                this.container.find('input[name="daterangepicker_start"]').addClass('active');
            } else {
                this.container.find('input[name="daterangepicker_end"]').addClass('active');
                this.container.find('input[name="daterangepicker_start"]').removeClass('active');
            }
            this.updateMonthsInView();
            this.updateCalendars();
            this.updateFormInputs();
        },
        updateMonthsInView: function() {
            if (this.endDate) {
                //if both dates are visible already, do nothing
                if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month &&
                    (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))
                    &&
                    (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM'))
                    ) {
                    return;
                }
                this.leftCalendar.month = this.startDate.clone().date(2);
                if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) {
                    this.rightCalendar.month = this.endDate.clone().date(2);
                } else {
                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');
                }
            } else {
                if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) {
                    this.leftCalendar.month = this.startDate.clone().date(2);
                    this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month');
                }
            }
            if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) {
              this.rightCalendar.month = this.maxDate.clone().date(2);
              this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month');
            }
        },
        updateCalendars: function() {
            if (this.timePicker) {
                var hour, minute, second;
                if (this.endDate) {
                    hour = parseInt(this.container.find('.left .hourselect').val(), 10);
                    minute = parseInt(this.container.find('.left .minuteselect').val(), 10);
                    second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;
                    if (!this.timePicker24Hour) {
                        var ampm = this.container.find('.left .ampmselect').val();
                        if (ampm === 'PM' && hour < 12)
                            hour += 12;
                        if (ampm === 'AM' && hour === 12)
                            hour = 0;
                    }
                } else {
                    hour = parseInt(this.container.find('.right .hourselect').val(), 10);
                    minute = parseInt(this.container.find('.right .minuteselect').val(), 10);
                    second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;
                    if (!this.timePicker24Hour) {
                        var ampm = this.container.find('.right .ampmselect').val();
                        if (ampm === 'PM' && hour < 12)
                            hour += 12;
                        if (ampm === 'AM' && hour === 12)
                            hour = 0;
                    }
                }
                this.leftCalendar.month.hour(hour).minute(minute).second(second);
                this.rightCalendar.month.hour(hour).minute(minute).second(second);
            }
            this.renderCalendar('left');
            this.renderCalendar('right');
            //highlight any predefined range matching the current start and end dates
            this.container.find('.ranges li').removeClass('active');
            if (this.endDate == null) return;
            this.calculateChosenLabel();
        },
        renderCalendar: function(side) {
            //
            // Build the matrix of dates that will populate the calendar
            //
            var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar;
            var month = calendar.month.month();
            var year = calendar.month.year();
            var hour = calendar.month.hour();
            var minute = calendar.month.minute();
            var second = calendar.month.second();
            var daysInMonth = moment([year, month]).daysInMonth();
            var firstDay = moment([year, month, 1]);
            var lastDay = moment([year, month, daysInMonth]);
            var lastMonth = moment(firstDay).subtract(1, 'month').month();
            var lastYear = moment(firstDay).subtract(1, 'month').year();
            var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();
            var dayOfWeek = firstDay.day();
            //initialize a 6 rows x 7 columns array for the calendar
            var calendar = [];
            calendar.firstDay = firstDay;
            calendar.lastDay = lastDay;
            for (var i = 0; i < 6; i++) {
                calendar[i] = [];
            }
            //populate the calendar with date objects
            var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;
            if (startDay > daysInLastMonth)
                startDay -= 7;
            if (dayOfWeek == this.locale.firstDay)
                startDay = daysInLastMonth - 6;
            var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]);
            var col, row;
            for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) {
                if (i > 0 && col % 7 === 0) {
                    col = 0;
                    row++;
                }
                calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second);
                curDate.hour(12);
                if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') {
                    calendar[row][col] = this.minDate.clone();
                }
                if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') {
                    calendar[row][col] = this.maxDate.clone();
                }
            }
            //make the calendar object available to hoverDate/clickDate
            if (side == 'left') {
                this.leftCalendar.calendar = calendar;
            } else {
                this.rightCalendar.calendar = calendar;
            }
            //
            // Display the calendar
            //
            var minDate = side == 'left' ? this.minDate : this.startDate;
            var maxDate = this.maxDate;
            var selected = side == 'left' ? this.startDate : this.endDate;
            var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'};
            var html = '<table class="table-condensed">';
            html += '<thead>';
            html += '<tr>';
            // add empty cell for week number
            if (this.showWeekNumbers || this.showISOWeekNumbers)
                html += '<th></th>';
            if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) {
                html += '<th class="prev available"><i class="fa fa-' + arrow.left + ' glyphicon glyphicon-' + arrow.left + '"></i></th>';
            } else {
                html += '<th></th>';
            }
            var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY");
            if (this.showDropdowns) {
                var currentMonth = calendar[1][1].month();
                var currentYear = calendar[1][1].year();
                var maxYear = (maxDate && maxDate.year()) || (currentYear + 5);
                var minYear = (minDate && minDate.year()) || (currentYear - 50);
                var inMinYear = currentYear == minYear;
                var inMaxYear = currentYear == maxYear;
                var monthHtml = '<select class="monthselect">';
                for (var m = 0; m < 12; m++) {
                    if ((!inMinYear || m >= minDate.month()) && (!inMaxYear || m <= maxDate.month())) {
                        monthHtml += "<option value='" + m + "'" +
                            (m === currentMonth ? " selected='selected'" : "") +
                            ">" + this.locale.monthNames[m] + "</option>";
                    } else {
                        monthHtml += "<option value='" + m + "'" +
                            (m === currentMonth ? " selected='selected'" : "") +
                            " disabled='disabled'>" + this.locale.monthNames[m] + "</option>";
                    }
                }
                monthHtml += "</select>";
                var yearHtml = '<select class="yearselect">';
                for (var y = minYear; y <= maxYear; y++) {
                    yearHtml += '<option value="' + y + '"' +
                        (y === currentYear ? ' selected="selected"' : '') +
                        '>' + y + '</option>';
                }
                yearHtml += '</select>';
                dateHtml = monthHtml + yearHtml;
            }
            html += '<th colspan="5" class="month">' + dateHtml + '</th>';
            if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) {
                html += '<th class="next available"><i class="fa fa-' + arrow.right + ' glyphicon glyphicon-' + arrow.right + '"></i></th>';
            } else {
                html += '<th></th>';
            }
            html += '</tr>';
            html += '<tr>';
            // add week number label
            if (this.showWeekNumbers || this.showISOWeekNumbers)
                html += '<th class="week">' + this.locale.weekLabel + '</th>';
            $.each(this.locale.daysOfWeek, function(index, dayOfWeek) {
                html += '<th>' + dayOfWeek + '</th>';
            });
            html += '</tr>';
            html += '</thead>';
            html += '<tbody>';
            //adjust maxDate to reflect the dateLimit setting in order to
            //grey out end dates beyond the dateLimit
            if (this.endDate == null && this.dateLimit) {
                var maxLimit = this.startDate.clone().add(this.dateLimit).endOf('day');
                if (!maxDate || maxLimit.isBefore(maxDate)) {
                    maxDate = maxLimit;
                }
            }
            for (var row = 0; row < 6; row++) {
                html += '<tr>';
                // add week number
                if (this.showWeekNumbers)
                    html += '<td class="week">' + calendar[row][0].week() + '</td>';
                else if (this.showISOWeekNumbers)
                    html += '<td class="week">' + calendar[row][0].isoWeek() + '</td>';
                for (var col = 0; col < 7; col++) {
                    var classes = [];
                    //highlight today's date
                    if (calendar[row][col].isSame(new Date(), "day"))
                        classes.push('today');
                    //highlight weekends
                    if (calendar[row][col].isoWeekday() > 5)
                        classes.push('weekend');
                    //grey out the dates in other months displayed at beginning and end of this calendar
                    if (calendar[row][col].month() != calendar[1][1].month())
                        classes.push('off');
                    //don't allow selection of dates before the minimum date
                    if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day'))
                        classes.push('off', 'disabled');
                    //don't allow selection of dates after the maximum date
                    if (maxDate && calendar[row][col].isAfter(maxDate, 'day'))
                        classes.push('off', 'disabled');
                    //don't allow selection of date if a custom function decides it's invalid
                    if (this.isInvalidDate(calendar[row][col]))
                        classes.push('off', 'disabled');
                    //highlight the currently selected start date
                    if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD'))
                        classes.push('active', 'start-date');
                    //highlight the currently selected end date
                    if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD'))
                        classes.push('active', 'end-date');
                    //highlight dates in-between the selected dates
                    if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate)
                        classes.push('in-range');
                    //apply custom classes for this date
                    var isCustom = this.isCustomDate(calendar[row][col]);
                    if (isCustom !== false) {
                        if (typeof isCustom === 'string')
                            classes.push(isCustom);
                        else
                            Array.prototype.push.apply(classes, isCustom);
                    }
                    var cname = '', disabled = false;
                    for (var i = 0; i < classes.length; i++) {
                        cname += classes[i] + ' ';
                        if (classes[i] == 'disabled')
                            disabled = true;
                    }
                    if (!disabled)
                        cname += 'available';
                    html += '<td class="' + cname.replace(/^\s+|\s+$/g, '') + '" data-title="' + 'r' + row + 'c' + col + '">' + calendar[row][col].date() + '</td>';
                }
                html += '</tr>';
            }
            html += '</tbody>';
            html += '</table>';
            this.container.find('.calendar.' + side + ' .calendar-table').html(html);
        },
        renderTimePicker: function(side) {
            // Don't bother updating the time picker if it's currently disabled
            // because an end date hasn't been clicked yet
            if (side == 'right' && !this.endDate) return;
            var html, selected, minDate, maxDate = this.maxDate;
            if (this.dateLimit && (!this.maxDate || this.startDate.clone().add(this.dateLimit).isAfter(this.maxDate)))
                maxDate = this.startDate.clone().add(this.dateLimit);
            if (side == 'left') {
                selected = this.startDate.clone();
                minDate = this.minDate;
            } else if (side == 'right') {
                selected = this.endDate.clone();
                minDate = this.startDate;
                //Preserve the time already selected
                var timeSelector = this.container.find('.calendar.right .calendar-time div');
                if (timeSelector.html() != '') {
                    selected.hour(timeSelector.find('.hourselect option:selected').val() || selected.hour());
                    selected.minute(timeSelector.find('.minuteselect option:selected').val() || selected.minute());
                    selected.second(timeSelector.find('.secondselect option:selected').val() || selected.second());
                    if (!this.timePicker24Hour) {
                        var ampm = timeSelector.find('.ampmselect option:selected').val();
                        if (ampm === 'PM' && selected.hour() < 12)
                            selected.hour(selected.hour() + 12);
                        if (ampm === 'AM' && selected.hour() === 12)
                            selected.hour(0);
                    }
                }
                if (selected.isBefore(this.startDate))
                    selected = this.startDate.clone();
                if (maxDate && selected.isAfter(maxDate))
                    selected = maxDate.clone();
            }
            //
            // hours
            //
            html = '<select class="hourselect">';
            var start = this.timePicker24Hour ? 0 : 1;
            var end = this.timePicker24Hour ? 23 : 12;
            for (var i = start; i <= end; i++) {
                var i_in_24 = i;
                if (!this.timePicker24Hour)
                    i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i);
                var time = selected.clone().hour(i_in_24);
                var disabled = false;
                if (minDate && time.minute(59).isBefore(minDate))
                    disabled = true;
                if (maxDate && time.minute(0).isAfter(maxDate))
                    disabled = true;
                if (i_in_24 == selected.hour() && !disabled) {
                    html += '<option value="' + i + '" selected="selected">' + i + '</option>';
                } else if (disabled) {
                    html += '<option value="' + i + '" disabled="disabled" class="disabled">' + i + '</option>';
                } else {
                    html += '<option value="' + i + '">' + i + '</option>';
                }
            }
            html += '</select> ';
            //
            // minutes
            //
            html += ': <select class="minuteselect">';
            for (var i = 0; i < 60; i += this.timePickerIncrement) {
                var padded = i < 10 ? '0' + i : i;
                var time = selected.clone().minute(i);
                var disabled = false;
                if (minDate && time.second(59).isBefore(minDate))
                    disabled = true;
                if (maxDate && time.second(0).isAfter(maxDate))
                    disabled = true;
                if (selected.minute() == i && !disabled) {
                    html += '<option value="' + i + '" selected="selected">' + padded + '</option>';
                } else if (disabled) {
                    html += '<option value="' + i + '" disabled="disabled" class="disabled">' + padded + '</option>';
                } else {
                    html += '<option value="' + i + '">' + padded + '</option>';
                }
            }
            html += '</select> ';
            //
            // seconds
            //
            if (this.timePickerSeconds) {
                html += ': <select class="secondselect">';
                for (var i = 0; i < 60; i++) {
                    var padded = i < 10 ? '0' + i : i;
                    var time = selected.clone().second(i);
                    var disabled = false;
                    if (minDate && time.isBefore(minDate))
                        disabled = true;
                    if (maxDate && time.isAfter(maxDate))
                        disabled = true;
                    if (selected.second() == i && !disabled) {
                        html += '<option value="' + i + '" selected="selected">' + padded + '</option>';
                    } else if (disabled) {
                        html += '<option value="' + i + '" disabled="disabled" class="disabled">' + padded + '</option>';
                    } else {
                        html += '<option value="' + i + '">' + padded + '</option>';
                    }
                }
                html += '</select> ';
            }
            //
            // AM/PM
            //
            if (!this.timePicker24Hour) {
                html += '<select class="ampmselect">';
                var am_html = '';
                var pm_html = '';
                if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate))
                    am_html = ' disabled="disabled" class="disabled"';
                if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate))
                    pm_html = ' disabled="disabled" class="disabled"';
                if (selected.hour() >= 12) {
                    html += '<option value="AM"' + am_html + '>AM</option><option value="PM" selected="selected"' + pm_html + '>PM</option>';
                } else {
                    html += '<option value="AM" selected="selected"' + am_html + '>AM</option><option value="PM"' + pm_html + '>PM</option>';
                }
                html += '</select>';
            }
            this.container.find('.calendar.' + side + ' .calendar-time div').html(html);
        },
        updateFormInputs: function() {
            //ignore mouse movements while an above-calendar text input has focus
            if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
                return;
            this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.locale.format));
            if (this.endDate)
                this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.locale.format));
            if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) {
                this.container.find('button.applyBtn').removeAttr('disabled');
            } else {
                this.container.find('button.applyBtn').attr('disabled', 'disabled');
            }
        },
        move: function() {
            var parentOffset = { top: 0, left: 0 },
                containerTop;
            var parentRightEdge = $(window).width();
            if (!this.parentEl.is('body')) {
                parentOffset = {
                    top: this.parentEl.offset().top - this.parentEl.scrollTop(),
                    left: this.parentEl.offset().left - this.parentEl.scrollLeft()
                };
                parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left;
            }
            if (this.drops == 'up')
                containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top;
            else
                containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top;
            this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('dropup');
            if (this.opens == 'left') {
                this.container.css({
                    top: containerTop,
                    right: parentRightEdge - this.element.offset().left - this.element.outerWidth(),
                    left: 'auto'
                });
                if (this.container.offset().left < 0) {
                    this.container.css({
                        right: 'auto',
                        left: 9
                    });
                }
            } else if (this.opens == 'center') {
                this.container.css({
                    top: containerTop,
                    left: this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2
                            - this.container.outerWidth() / 2,
                    right: 'auto'
                });
                if (this.container.offset().left < 0) {
                    this.container.css({
                        right: 'auto',
                        left: 9
                    });
                }
            } else {
                this.container.css({
                    top: containerTop,
                    left: this.element.offset().left - parentOffset.left,
                    right: 'auto'
                });
                if (this.container.offset().left + this.container.outerWidth() > $(window).width()) {
                    this.container.css({
                        left: 'auto',
                        right: 0
                    });
                }
            }
        },
        show: function(e) {
            if (this.isShowing) return;
            // Create a click proxy that is private to this instance of datepicker, for unbinding
            this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this);
            // Bind global datepicker mousedown for hiding and
            $(document)
              .on('mousedown.daterangepicker', this._outsideClickProxy)
              // also support mobile devices
              .on('touchend.daterangepicker', this._outsideClickProxy)
              // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them
              .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy)
              // and also close when focus changes to outside the picker (eg. tabbing between controls)
              .on('focusin.daterangepicker', this._outsideClickProxy);
            // Reposition the picker if the window is resized while it's open
            $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this));
            this.oldStartDate = this.startDate.clone();
            this.oldEndDate = this.endDate.clone();
            this.previousRightTime = this.endDate.clone();
            this.updateView();
            this.container.show();
            this.move();
            this.element.trigger('show.daterangepicker', this);
            this.isShowing = true;
        },
        hide: function(e) {
            if (!this.isShowing) return;
            //incomplete date selection, revert to last values
            if (!this.endDate) {
                this.startDate = this.oldStartDate.clone();
                this.endDate = this.oldEndDate.clone();
            }
            //if a new date range was selected, invoke the user callback function
            if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))
                this.callback(this.startDate, this.endDate, this.chosenLabel);
            //if picker is attached to a text input, update it
            this.updateElement();
            $(document).off('.daterangepicker');
            $(window).off('.daterangepicker');
            this.container.hide();
            this.element.trigger('hide.daterangepicker', this);
            this.isShowing = false;
        },
        toggle: function(e) {
            if (this.isShowing) {
                this.hide();
            } else {
                this.show();
            }
        },
        outsideClick: function(e) {
            var target = $(e.target);
            // if the page is clicked anywhere except within the daterangerpicker/button
            // itself then call this.hide()
            if (
                // ie modal dialog fix
                e.type == "focusin" ||
                target.closest(this.element).length ||
                target.closest(this.container).length ||
                target.closest('.calendar-table').length
                ) return;
            this.hide();
            this.element.trigger('outsideClick.daterangepicker', this);
        },
        showCalendars: function() {
            this.container.addClass('show-calendar');
            this.move();
            this.element.trigger('showCalendar.daterangepicker', this);
        },
        hideCalendars: function() {
            this.container.removeClass('show-calendar');
            this.element.trigger('hideCalendar.daterangepicker', this);
        },
        hoverRange: function(e) {
            //ignore mouse movements while an above-calendar text input has focus
            if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
                return;
            var label = e.target.getAttribute('data-range-key');
            if (label == this.locale.customRangeLabel) {
                this.updateView();
            } else {
                var dates = this.ranges[label];
                this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.locale.format));
                this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.locale.format));
            }
        },
        clickRange: function(e) {
            var label = e.target.getAttribute('data-range-key');
            this.chosenLabel = label;
            if (label == this.locale.customRangeLabel) {
                this.showCalendars();
            } else {
                var dates = this.ranges[label];
                this.startDate = dates[0];
                this.endDate = dates[1];
                if (!this.timePicker) {
                    this.startDate.startOf('day');
                    this.endDate.endOf('day');
                }
                if (!this.alwaysShowCalendars)
                    this.hideCalendars();
                this.clickApply();
            }
        },
        clickPrev: function(e) {
            var cal = $(e.target).parents('.calendar');
            if (cal.hasClass('left')) {
                this.leftCalendar.month.subtract(1, 'month');
                if (this.linkedCalendars)
                    this.rightCalendar.month.subtract(1, 'month');
            } else {
                this.rightCalendar.month.subtract(1, 'month');
            }
            this.updateCalendars();
        },
        clickNext: function(e) {
            var cal = $(e.target).parents('.calendar');
            if (cal.hasClass('left')) {
                this.leftCalendar.month.add(1, 'month');
            } else {
                this.rightCalendar.month.add(1, 'month');
                if (this.linkedCalendars)
                    this.leftCalendar.month.add(1, 'month');
            }
            this.updateCalendars();
        },
        hoverDate: function(e) {
            //ignore mouse movements while an above-calendar text input has focus
            //if (this.container.find('input[name=daterangepicker_start]').is(":focus") || this.container.find('input[name=daterangepicker_end]').is(":focus"))
            //    return;
            //ignore dates that can't be selected
            if (!$(e.target).hasClass('available')) return;
            //have the text inputs above calendars reflect the date being hovered over
            var title = $(e.target).attr('data-title');
            var row = title.substr(1, 1);
            var col = title.substr(3, 1);
            var cal = $(e.target).parents('.calendar');
            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];
            if (this.endDate && !this.container.find('input[name=daterangepicker_start]').is(":focus")) {
                this.container.find('input[name=daterangepicker_start]').val(date.format(this.locale.format));
            } else if (!this.endDate && !this.container.find('input[name=daterangepicker_end]').is(":focus")) {
                this.container.find('input[name=daterangepicker_end]').val(date.format(this.locale.format));
            }
            //highlight the dates between the start date and the date being hovered as a potential end date
            var leftCalendar = this.leftCalendar;
            var rightCalendar = this.rightCalendar;
            var startDate = this.startDate;
            if (!this.endDate) {
                this.container.find('.calendar tbody td').each(function(index, el) {
                    //skip week numbers, only look at dates
                    if ($(el).hasClass('week')) return;
                    var title = $(el).attr('data-title');
                    var row = title.substr(1, 1);
                    var col = title.substr(3, 1);
                    var cal = $(el).parents('.calendar');
                    var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col];
                    if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) {
                        $(el).addClass('in-range');
                    } else {
                        $(el).removeClass('in-range');
                    }
                });
            }
        },
        clickDate: function(e) {
            if (!$(e.target).hasClass('available')) return;
            var title = $(e.target).attr('data-title');
            var row = title.substr(1, 1);
            var col = title.substr(3, 1);
            var cal = $(e.target).parents('.calendar');
            var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col];
            //
            // this function needs to do a few things:
            // * alternate between selecting a start and end date for the range,
            // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date
            // * if autoapply is enabled, and an end date was chosen, apply the selection
            // * if single date picker mode, and time picker isn't enabled, apply the selection immediately
            // * if one of the inputs above the calendars was focused, cancel that manual input
            //
            if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start
                if (this.timePicker) {
                    var hour = parseInt(this.container.find('.left .hourselect').val(), 10);
                    if (!this.timePicker24Hour) {
                        var ampm = this.container.find('.left .ampmselect').val();
                        if (ampm === 'PM' && hour < 12)
                            hour += 12;
                        if (ampm === 'AM' && hour === 12)
                            hour = 0;
                    }
                    var minute = parseInt(this.container.find('.left .minuteselect').val(), 10);
                    var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0;
                    date = date.clone().hour(hour).minute(minute).second(second);
                }
                this.endDate = null;
                this.setStartDate(date.clone());
            } else if (!this.endDate && date.isBefore(this.startDate)) {
                //special case: clicking the same date for start/end,
                //but the time of the end date is before the start date
                this.setEndDate(this.startDate.clone());
            } else { // picking end
                if (this.timePicker) {
                    var hour = parseInt(this.container.find('.right .hourselect').val(), 10);
                    if (!this.timePicker24Hour) {
                        var ampm = this.container.find('.right .ampmselect').val();
                        if (ampm === 'PM' && hour < 12)
                            hour += 12;
                        if (ampm === 'AM' && hour === 12)
                            hour = 0;
                    }
                    var minute = parseInt(this.container.find('.right .minuteselect').val(), 10);
                    var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0;
                    date = date.clone().hour(hour).minute(minute).second(second);
                }
                this.setEndDate(date.clone());
                if (this.autoApply) {
                  this.calculateChosenLabel();
                  this.clickApply();
                }
            }
            if (this.singleDatePicker) {
                this.setEndDate(this.startDate);
                if (!this.timePicker)
                    this.clickApply();
            }
            this.updateView();
            //This is to cancel the blur event handler if the mouse was in one of the inputs
            e.stopPropagation();
        },
        calculateChosenLabel: function () {
            var customRange = true;
            var i = 0;
            for (var range in this.ranges) {
              if (this.timePicker) {
                    var format = this.timePickerSeconds ? "YYYY-MM-DD hh:mm:ss" : "YYYY-MM-DD hh:mm";
                    //ignore times when comparing dates if time picker seconds is not enabled
                    if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) {
                        customRange = false;
                        this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();
                        break;
                    }
                } else {
                    //ignore times when comparing dates if time picker is not enabled
                    if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {
                        customRange = false;
                        this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').html();
                        break;
                    }
                }
                i++;
            }
            if (customRange) {
                if (this.showCustomRangeLabel) {
                    this.chosenLabel = this.container.find('.ranges li:last').addClass('active').html();
                } else {
                    this.chosenLabel = null;
                }
                this.showCalendars();
            }
        },
        clickApply: function(e) {
            this.hide();
            this.element.trigger('apply.daterangepicker', this);
        },
        clickCancel: function(e) {
            this.startDate = this.oldStartDate;
            this.endDate = this.oldEndDate;
            this.hide();
            this.element.trigger('cancel.daterangepicker', this);
        },
        monthOrYearChanged: function(e) {
            var isLeft = $(e.target).closest('.calendar').hasClass('left'),
                leftOrRight = isLeft ? 'left' : 'right',
                cal = this.container.find('.calendar.'+leftOrRight);
            // Month must be Number for new moment versions
            var month = parseInt(cal.find('.monthselect').val(), 10);
            var year = cal.find('.yearselect').val();
            if (!isLeft) {
                if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) {
                    month = this.startDate.month();
                    year = this.startDate.year();
                }
            }
            if (this.minDate) {
                if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) {
                    month = this.minDate.month();
                    year = this.minDate.year();
                }
            }
            if (this.maxDate) {
                if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) {
                    month = this.maxDate.month();
                    year = this.maxDate.year();
                }
            }
            if (isLeft) {
                this.leftCalendar.month.month(month).year(year);
                if (this.linkedCalendars)
                    this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month');
            } else {
                this.rightCalendar.month.month(month).year(year);
                if (this.linkedCalendars)
                    this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month');
            }
            this.updateCalendars();
        },
        timeChanged: function(e) {
            var cal = $(e.target).closest('.calendar'),
                isLeft = cal.hasClass('left');
            var hour = parseInt(cal.find('.hourselect').val(), 10);
            var minute = parseInt(cal.find('.minuteselect').val(), 10);
            var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0;
            if (!this.timePicker24Hour) {
                var ampm = cal.find('.ampmselect').val();
                if (ampm === 'PM' && hour < 12)
                    hour += 12;
                if (ampm === 'AM' && hour === 12)
                    hour = 0;
            }
            if (isLeft) {
                var start = this.startDate.clone();
                start.hour(hour);
                start.minute(minute);
                start.second(second);
                this.setStartDate(start);
                if (this.singleDatePicker) {
                    this.endDate = this.startDate.clone();
                } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) {
                    this.setEndDate(start.clone());
                }
            } else if (this.endDate) {
                var end = this.endDate.clone();
                end.hour(hour);
                end.minute(minute);
                end.second(second);
                this.setEndDate(end);
            }
            //update the calendars so all clickable dates reflect the new time component
            this.updateCalendars();
            //update the form inputs above the calendars with the new time
            this.updateFormInputs();
            //re-render the time pickers because changing one selection can affect what's enabled in another
            this.renderTimePicker('left');
            this.renderTimePicker('right');
        },
        formInputsChanged: function(e) {
            var isRight = $(e.target).closest('.calendar').hasClass('right');
            var start = moment(this.container.find('input[name="daterangepicker_start"]').val(), this.locale.format);
            var end = moment(this.container.find('input[name="daterangepicker_end"]').val(), this.locale.format);
            if (start.isValid() && end.isValid()) {
                if (isRight && end.isBefore(start))
                    start = end.clone();
                this.setStartDate(start);
                this.setEndDate(end);
                if (isRight) {
                    this.container.find('input[name="daterangepicker_start"]').val(this.startDate.format(this.locale.format));
                } else {
                    this.container.find('input[name="daterangepicker_end"]').val(this.endDate.format(this.locale.format));
                }
            }
            this.updateView();
        },
        formInputsFocused: function(e) {
            // Highlight the focused input
            this.container.find('input[name="daterangepicker_start"], input[name="daterangepicker_end"]').removeClass('active');
            $(e.target).addClass('active');
            // Set the state such that if the user goes back to using a mouse,
            // the calendars are aware we're selecting the end of the range, not
            // the start. This allows someone to edit the end of a date range without
            // re-selecting the beginning, by clicking on the end date input then
            // using the calendar.
            var isRight = $(e.target).closest('.calendar').hasClass('right');
            if (isRight) {
                this.endDate = null;
                this.setStartDate(this.startDate.clone());
                this.updateView();
            }
        },
        formInputsBlurred: function(e) {
            // this function has one purpose right now: if you tab from the first
            // text input to the second in the UI, the endDate is nulled so that
            // you can click another, but if you tab out without clicking anything
            // or changing the input value, the old endDate should be retained
            if (!this.endDate) {
                var val = this.container.find('input[name="daterangepicker_end"]').val();
                var end = moment(val, this.locale.format);
                if (end.isValid()) {
                    this.setEndDate(end);
                    this.updateView();
                }
            }
        },
        formInputsKeydown: function(e) {
            // This function ensures that if the 'enter' key was pressed in the input, then the calendars
            // are updated with the startDate and endDate.
            // This behaviour is automatic in Chrome/Firefox/Edge but not in IE 11 hence why this exists.
            // Other browsers and versions of IE are untested and the behaviour is unknown.
            if (e.keyCode === 13) {
                // Prevent the calendar from being updated twice on Chrome/Firefox/Edge
                e.preventDefault();
                this.formInputsChanged(e);
            }
        },
        elementChanged: function() {
            if (!this.element.is('input')) return;
            if (!this.element.val().length) return;
            var dateString = this.element.val().split(this.locale.separator),
                start = null,
                end = null;
            if (dateString.length === 2) {
                start = moment(dateString[0], this.locale.format);
                end = moment(dateString[1], this.locale.format);
            }
            if (this.singleDatePicker || start === null || end === null) {
                start = moment(this.element.val(), this.locale.format);
                end = start;
            }
            if (!start.isValid() || !end.isValid()) return;
            this.setStartDate(start);
            this.setEndDate(end);
            this.updateView();
        },
        keydown: function(e) {
            //hide on tab or enter
            if ((e.keyCode === 9) || (e.keyCode === 13)) {
                this.hide();
            }
            //hide on esc and prevent propagation
            if (e.keyCode === 27) {
                e.preventDefault();
                e.stopPropagation();
                this.hide();
            }
        },
        updateElement: function() {
            if (this.element.is('input') && !this.singleDatePicker && this.autoUpdateInput) {
                this.element.val(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format));
                this.element.trigger('change');
            } else if (this.element.is('input') && this.autoUpdateInput) {
                this.element.val(this.startDate.format(this.locale.format));
                this.element.trigger('change');
            }
        },
        remove: function() {
            this.container.remove();
            this.element.off('.daterangepicker');
            this.element.removeData();
        }
    };
    $.fn.daterangepicker = function(options, callback) {
        var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options);
        this.each(function() {
            var el = $(this);
            if (el.data('daterangepicker'))
                el.data('daterangepicker').remove();
            el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback));
        });
        return this;
    };
    return DateRangePicker;
}));
src/main/webapp/bower_components/bootstrap-daterangepicker/daterangepicker.scss
New file
@@ -0,0 +1,611 @@
//
// A stylesheet for use with Bootstrap 3.x
// @author: Dan Grossman http://www.dangrossman.info/
// @copyright: Copyright (c) 2012-2015 Dan Grossman. All rights reserved.
// @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php
// @website: https://www.improvely.com/
//
//
// VARIABLES
//
//
// Settings
// The class name to contain everything within.
$prefix-class: daterangepicker;
$arrow-size:     7px !default;
//
// Colors
$daterangepicker-color:                      inherit !default;
$daterangepicker-bg-color:                   #fff !default;
$daterangepicker-cell-color:                 $daterangepicker-color !default;
$daterangepicker-cell-border-color:          transparent !default;
$daterangepicker-cell-bg-color:              $daterangepicker-bg-color !default;
$daterangepicker-cell-hover-color:           $daterangepicker-color !default;
$daterangepicker-cell-hover-border-color:    $daterangepicker-cell-border-color !default;
$daterangepicker-cell-hover-bg-color:        #eee !default;
$daterangepicker-in-range-color:             #000 !default;
$daterangepicker-in-range-border-color:      transparent !default;
$daterangepicker-in-range-bg-color:          #ebf4f8 !default;
$daterangepicker-active-color:               #fff !default;
$daterangepicker-active-bg-color:            #357ebd !default;
$daterangepicker-active-border-color:        transparent !default;
$daterangepicker-unselected-color:           #999 !default;
$daterangepicker-unselected-border-color:    transparent !default;
$daterangepicker-unselected-bg-color:        #fff !default;
//
// daterangepicker
$daterangepicker-width:          278px !default;
$daterangepicker-padding:        4px !default;
$daterangepicker-z-index:        3000 !default;
$daterangepicker-border-size:    1px !default;
$daterangepicker-border-color:   #ccc !default;
$daterangepicker-border-radius:  4px !default;
//
// Calendar
$daterangepicker-calendar-margin:              $daterangepicker-padding !default;
$daterangepicker-calendar-bg-color:            $daterangepicker-bg-color !default;
$daterangepicker-calendar-border-size:         1px !default;
$daterangepicker-calendar-border-color:        $daterangepicker-bg-color !default;
$daterangepicker-calendar-border-radius:       $daterangepicker-border-radius !default;
//
// Calendar Cells
$daterangepicker-cell-size:           20px !default;
$daterangepicker-cell-width:          $daterangepicker-cell-size !default;
$daterangepicker-cell-height:         $daterangepicker-cell-size !default;
$daterangepicker-cell-border-radius:  $daterangepicker-calendar-border-radius !default;
$daterangepicker-cell-border-size:    1px !default;
//
// Dropdowns
$daterangepicker-dropdown-z-index: $daterangepicker-z-index + 1 !default;
//
// Controls
$daterangepicker-control-height:               30px !default;
$daterangepicker-control-line-height:          $daterangepicker-control-height !default;
$daterangepicker-control-color:                #555 !default;
$daterangepicker-control-border-size:          1px !default;
$daterangepicker-control-border-color:         #ccc !default;
$daterangepicker-control-border-radius:        4px !default;
$daterangepicker-control-active-border-size:   1px !default;
$daterangepicker-control-active-border-color:  #08c !default;
$daterangepicker-control-active-border-radius: $daterangepicker-control-border-radius !default;
$daterangepicker-control-disabled-color:       #ccc !default;
//
// Ranges
$daterangepicker-ranges-color:                #08c !default;
$daterangepicker-ranges-bg-color:             #f5f5f5 !default;
$daterangepicker-ranges-border-size:          1px !default;
$daterangepicker-ranges-border-color:         $daterangepicker-ranges-bg-color !default;
$daterangepicker-ranges-border-radius:        $daterangepicker-border-radius !default;
$daterangepicker-ranges-hover-color:          #fff !default;
$daterangepicker-ranges-hover-bg-color:       $daterangepicker-ranges-color !default;
$daterangepicker-ranges-hover-border-size:    $daterangepicker-ranges-border-size !default;
$daterangepicker-ranges-hover-border-color:   $daterangepicker-ranges-hover-bg-color !default;
$daterangepicker-ranges-hover-border-radius:  $daterangepicker-border-radius !default;
$daterangepicker-ranges-active-border-size:   $daterangepicker-ranges-border-size !default;
$daterangepicker-ranges-active-border-color:  $daterangepicker-ranges-bg-color !default;
$daterangepicker-ranges-active-border-radius: $daterangepicker-border-radius !default;
//
// STYLESHEETS
//
.#{$prefix-class} {
  position: absolute;
  color: $daterangepicker-color;
  background-color: $daterangepicker-bg-color;
  border-radius: $daterangepicker-border-radius;
  width: $daterangepicker-width;
  padding: $daterangepicker-padding;
  margin-top: $daterangepicker-border-size;
  // TODO: Should these be parameterized??
  top: 100px;
  left: 20px;
  $arrow-prefix-size: $arrow-size;
  $arrow-suffix-size: ($arrow-size - $daterangepicker-border-size);
  &:before, &:after {
    position: absolute;
    display: inline-block;
    border-bottom-color: rgba(0, 0, 0, 0.2);
    content: '';
  }
  &:before {
    top: -$arrow-prefix-size;
    border-right: $arrow-prefix-size solid transparent;
    border-left: $arrow-prefix-size solid transparent;
    border-bottom: $arrow-prefix-size solid $daterangepicker-border-color;
  }
  &:after {
    top: -$arrow-suffix-size;
    border-right: $arrow-suffix-size solid transparent;
    border-bottom: $arrow-suffix-size solid $daterangepicker-bg-color;
    border-left: $arrow-suffix-size solid transparent;
  }
  &.opensleft {
    &:before {
      // TODO: Make this relative to prefix size.
      right: $arrow-prefix-size + 2px;
    }
    &:after {
      // TODO: Make this relative to suffix size.
      right: $arrow-suffix-size + 4px;
    }
  }
  &.openscenter {
    &:before {
      left: 0;
      right: 0;
      width: 0;
      margin-left: auto;
      margin-right: auto;
    }
    &:after {
      left: 0;
      right: 0;
      width: 0;
      margin-left: auto;
      margin-right: auto;
    }
  }
  &.opensright {
    &:before {
      // TODO: Make this relative to prefix size.
      left: $arrow-prefix-size + 2px;
    }
    &:after {
      // TODO: Make this relative to suffix size.
      left: $arrow-suffix-size + 4px;
    }
  }
  &.dropup {
    margin-top: -5px;
    // NOTE: Note sure why these are special-cased.
    &:before {
      top: initial;
      bottom: -$arrow-prefix-size;
      border-bottom: initial;
      border-top: $arrow-prefix-size solid $daterangepicker-border-color;
    }
    &:after {
      top: initial;
      bottom:-$arrow-suffix-size;
      border-bottom: initial;
      border-top: $arrow-suffix-size solid $daterangepicker-bg-color;
    }
  }
  &.dropdown-menu {
    max-width: none;
    z-index: $daterangepicker-dropdown-z-index;
  }
  &.single {
    .ranges, .calendar {
      float: none;
    }
  }
  /* Calendars */
  &.show-calendar {
    .calendar {
      display: block;
    }
  }
  .calendar {
    display: none;
    max-width: $daterangepicker-width - ($daterangepicker-calendar-margin * 2);
    margin: $daterangepicker-calendar-margin;
    &.single {
      .calendar-table {
        border: none;
      }
    }
    th, td {
      white-space: nowrap;
      text-align: center;
      // TODO: Should this actually be hard-coded?
      min-width: 32px;
    }
  }
  .calendar-table {
    border: $daterangepicker-calendar-border-size solid $daterangepicker-calendar-border-color;
    padding: $daterangepicker-calendar-margin;
    border-radius: $daterangepicker-calendar-border-radius;
    background-color: $daterangepicker-calendar-bg-color;
  }
  table {
    width: 100%;
    margin: 0;
  }
  td, th {
    text-align: center;
    width: $daterangepicker-cell-width;
    height: $daterangepicker-cell-height;
    border-radius: $daterangepicker-cell-border-radius;
    border: $daterangepicker-cell-border-size solid $daterangepicker-cell-border-color;
    white-space: nowrap;
    cursor: pointer;
    &.available {
      &:hover {
        background-color: $daterangepicker-cell-hover-bg-color;
        border-color: $daterangepicker-cell-hover-border-color;
        color: $daterangepicker-cell-hover-color;
      }
    }
    &.week {
      font-size: 80%;
      color: #ccc;
    }
  }
  td {
    &.off {
      &, &.in-range, &.start-date, &.end-date {
        background-color: $daterangepicker-unselected-bg-color;
        border-color: $daterangepicker-unselected-border-color;
        color: $daterangepicker-unselected-color;
      }
    }
    //
    // Date Range
    &.in-range {
      background-color: $daterangepicker-in-range-bg-color;
      border-color: $daterangepicker-in-range-border-color;
      color: $daterangepicker-in-range-color;
      // TODO: Should this be static or should it be parameterized?
      border-radius: 0;
    }
    &.start-date {
      border-radius: $daterangepicker-cell-border-radius 0 0 $daterangepicker-cell-border-radius;
    }
    &.end-date {
      border-radius: 0 $daterangepicker-cell-border-radius $daterangepicker-cell-border-radius 0;
    }
    &.start-date.end-date {
      border-radius: $daterangepicker-cell-border-radius;
    }
    &.active {
      &, &:hover {
        background-color: $daterangepicker-active-bg-color;
        border-color: $daterangepicker-active-border-color;
        color: $daterangepicker-active-color;
      }
    }
  }
  th {
    &.month {
      width: auto;
    }
  }
  //
  // Disabled Controls
  //
  td, option {
    &.disabled {
      color: #999;
      cursor: not-allowed;
      text-decoration: line-through;
    }
  }
  select {
    &.monthselect, &.yearselect {
      font-size: 12px;
      padding: 1px;
      height: auto;
      margin: 0;
      cursor: default;
    }
    &.monthselect {
      margin-right: 2%;
      width: 56%;
    }
    &.yearselect {
      width: 40%;
    }
    &.hourselect, &.minuteselect, &.secondselect, &.ampmselect {
      width: 50px;
      margin-bottom: 0;
    }
  }
  //
  // Text Input Controls (above calendar)
  //
  .input-mini {
    border: $daterangepicker-control-border-size solid $daterangepicker-control-border-color;
    border-radius: $daterangepicker-control-border-radius;
    color: $daterangepicker-control-color;
    height: $daterangepicker-control-line-height;
    line-height: $daterangepicker-control-height;
    display: block;
    vertical-align: middle;
    // TODO: Should these all be static, too??
    margin: 0 0 5px 0;
    padding: 0 6px 0 28px;
    width: 100%;
    &.active {
      border: $daterangepicker-control-active-border-size solid $daterangepicker-control-active-border-color;
      border-radius: $daterangepicker-control-active-border-radius;
    }
  }
  .daterangepicker_input {
    position: relative;
    i {
      position: absolute;
      // NOTE: These appear to be eyeballed to me...
      left: 8px;
      top: 8px;
    }
  }
  &.rtl {
    .input-mini {
      padding-right: 28px;
      padding-left: 6px;
    }
    .daterangepicker_input i {
      left: auto;
      right: 8px;
    }
  }
  //
  // Time Picker
  //
  .calendar-time {
    text-align: center;
    margin: 5px auto;
    line-height: $daterangepicker-control-line-height;
    position: relative;
    padding-left: 28px;
    select {
      &.disabled {
        color: $daterangepicker-control-disabled-color;
        cursor: not-allowed;
      }
    }
  }
}
//
// Predefined Ranges
//
.ranges {
  font-size: 11px;
  float: none;
  margin: 4px;
  text-align: left;
  ul {
    list-style: none;
    margin: 0 auto;
    padding: 0;
    width: 100%;
  }
  li {
    font-size: 13px;
    background-color: $daterangepicker-ranges-bg-color;
    border: $daterangepicker-ranges-border-size solid $daterangepicker-ranges-border-color;
    border-radius: $daterangepicker-ranges-border-radius;
    color: $daterangepicker-ranges-color;
    padding: 3px 12px;
    margin-bottom: 8px;
    cursor: pointer;
    &:hover {
      background-color: $daterangepicker-ranges-hover-bg-color;
      border: $daterangepicker-ranges-hover-border-size solid $daterangepicker-ranges-hover-border-color;
      color: $daterangepicker-ranges-hover-color;
    }
    &.active {
      background-color: $daterangepicker-ranges-hover-bg-color;
      border: $daterangepicker-ranges-hover-border-size solid $daterangepicker-ranges-hover-border-color;
      color: $daterangepicker-ranges-hover-color;
    }
  }
}
/*  Larger Screen Styling */
@media (min-width: 564px) {
  .#{$prefix-class} {
    width: auto;
    .ranges {
      ul {
        width: 160px;
      }
    }
    &.single {
      .ranges {
        ul {
          width: 100%;
        }
      }
      .calendar.left {
        clear: none;
      }
      &.ltr {
        .ranges, .calendar {
          float:left;
        }
      }
      &.rtl {
        .ranges, .calendar {
          float:right;
        }
      }
    }
    &.ltr {
      direction: ltr;
      text-align: left;
      .calendar{
        &.left {
          clear: left;
          margin-right: 0;
          .calendar-table {
            border-right: none;
            border-top-right-radius: 0;
            border-bottom-right-radius: 0;
          }
        }
        &.right {
          margin-left: 0;
          .calendar-table {
            border-left: none;
            border-top-left-radius: 0;
            border-bottom-left-radius: 0;
          }
        }
      }
      .left .daterangepicker_input {
        padding-right: 12px;
      }
      .calendar.left .calendar-table {
        padding-right: 12px;
      }
      .ranges, .calendar {
        float: left;
      }
    }
    &.rtl {
      direction: rtl;
      text-align: right;
      .calendar{
        &.left {
          clear: right;
          margin-left: 0;
          .calendar-table {
            border-left: none;
            border-top-left-radius: 0;
            border-bottom-left-radius: 0;
          }
        }
        &.right {
          margin-right: 0;
          .calendar-table {
            border-right: none;
            border-top-right-radius: 0;
            border-bottom-right-radius: 0;
          }
        }
      }
      .left .daterangepicker_input {
        padding-left: 12px;
      }
      .calendar.left .calendar-table {
        padding-left: 12px;
      }
      .ranges, .calendar {
        text-align: right;
        float: right;
      }
    }
  }
}
@media (min-width: 730px) {
  .#{$prefix-class} {
    .ranges {
      width: auto;
    }
    &.ltr {
      .ranges {
        float: left;
      }
    }
    &.rtl {
      .ranges {
        float: right;
      }
    }
    .calendar.left {
      clear: none !important;
    }
  }
}
src/main/webapp/bower_components/bootstrap-daterangepicker/demo.html
New file
@@ -0,0 +1,369 @@
<!DOCTYPE html>
<html dir="ltr" lang="en-US">
   <head>
      <meta charset="UTF-8" />
      <title>A date range picker for Bootstrap</title>
      <link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
      <link rel="stylesheet" type="text/css" media="all" href="daterangepicker.css" />
      <script type="text/javascript" src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
      <script type="text/javascript" src="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
      <script type="text/javascript" src="moment.js"></script>
      <script type="text/javascript" src="daterangepicker.js"></script>
    <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
      <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->
   </head>
   <body style="margin: 60px 0">
      <div class="container">
        <h1 style="margin: 0 0 20px 0">Configuration Builder</h1>
        <div class="well configurator">
          <form>
          <div class="row">
            <div class="col-md-4">
              <div class="form-group">
                <label for="parentEl">parentEl</label>
                <input type="text" class="form-control" id="parentEl" value="" placeholder="body">
              </div>
              <div class="form-group">
                <label for="startDate">startDate</label>
                <input type="text" class="form-control" id="startDate" value="07/01/2015">
              </div>
              <div class="form-group">
                <label for="endDate">endDate</label>
                <input type="text" class="form-control" id="endDate" value="07/15/2015">
              </div>
              <div class="form-group">
                <label for="minDate">minDate</label>
                <input type="text" class="form-control" id="minDate" value="" placeholder="MM/DD/YYYY">
              </div>
              <div class="form-group">
                <label for="maxDate">maxDate</label>
                <input type="text" class="form-control" id="maxDate" value="" placeholder="MM/DD/YYYY">
              </div>
            </div>
            <div class="col-md-4">
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="autoApply"> autoApply
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="singleDatePicker"> singleDatePicker
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showDropdowns"> showDropdowns
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showWeekNumbers"> showWeekNumbers
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showISOWeekNumbers"> showISOWeekNumbers
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePicker"> timePicker
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePicker24Hour"> timePicker24Hour
                </label>
              </div>
              <div class="form-group">
                <label for="timePickerIncrement">timePickerIncrement (in minutes)</label>
                <input type="text" class="form-control" id="timePickerIncrement" value="1">
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePickerSeconds"> timePickerSeconds
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="dateLimit"> dateLimit (with example date range span)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="ranges"> ranges (with example predefined ranges)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="locale"> locale (with example settings)
                </label>
                <label id="rtl-wrap">
                  <input type="checkbox" id="rtl"> RTL (right-to-left)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="alwaysShowCalendars"> alwaysShowCalendars
                </label>
              </div>
            </div>
            <div class="col-md-4">
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="linkedCalendars" checked="checked"> linkedCalendars
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="autoUpdateInput" checked="checked"> autoUpdateInput
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showCustomRangeLabel" checked="checked"> showCustomRangeLabel
                </label>
              </div>
              <div class="form-group">
                <label for="opens">opens</label>
                <select id="opens" class="form-control">
                  <option value="right" selected>right</option>
                  <option value="left">left</option>
                  <option value="center">center</option>
                </select>
              </div>
              <div class="form-group">
                <label for="drops">drops</label>
                <select id="drops" class="form-control">
                  <option value="down" selected>down</option>
                  <option value="up">up</option>
                </select>
              </div>
              <div class="form-group">
                <label for="buttonClasses">buttonClasses</label>
                <input type="text" class="form-control" id="buttonClasses" value="btn btn-sm">
              </div>
              <div class="form-group">
                <label for="applyClass">applyClass</label>
                <input type="text" class="form-control" id="applyClass" value="btn-success">
              </div>
              <div class="form-group">
                <label for="cancelClass">cancelClass</label>
                <input type="text" class="form-control" id="cancelClass" value="btn-default">
              </div>
            </div>
          </div>
          </form>
        </div>
        <div class="row">
          <div class="col-md-4 col-md-offset-2 demo">
            <h4>Your Date Range Picker</h4>
            <input type="text" id="config-demo" class="form-control">
            <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
          </div>
          <div class="col-md-6">
            <h4>Configuration</h4>
            <div class="well">
              <textarea id="config-text" style="height: 300px; width: 100%; padding: 10px"></textarea>
            </div>
          </div>
        </div>
      </div>
      <style type="text/css">
      .demo { position: relative; }
      .demo i {
        position: absolute; bottom: 10px; right: 24px; top: auto; cursor: pointer;
      }
      </style>
      <script type="text/javascript">
      $(document).ready(function() {
        $('#config-text').keyup(function() {
          eval($(this).val());
        });
        $('.configurator input, .configurator select').change(function() {
          updateConfig();
        });
        $('.demo i').click(function() {
          $(this).parent().find('input').click();
        });
        $('#startDate').daterangepicker({
          singleDatePicker: true,
          startDate: moment().subtract(6, 'days')
        });
        $('#endDate').daterangepicker({
          singleDatePicker: true,
          startDate: moment()
        });
        updateConfig();
        function updateConfig() {
          var options = {};
          if ($('#singleDatePicker').is(':checked'))
            options.singleDatePicker = true;
          if ($('#showDropdowns').is(':checked'))
            options.showDropdowns = true;
          if ($('#showWeekNumbers').is(':checked'))
            options.showWeekNumbers = true;
          if ($('#showISOWeekNumbers').is(':checked'))
            options.showISOWeekNumbers = true;
          if ($('#timePicker').is(':checked'))
            options.timePicker = true;
          if ($('#timePicker24Hour').is(':checked'))
            options.timePicker24Hour = true;
          if ($('#timePickerIncrement').val().length && $('#timePickerIncrement').val() != 1)
            options.timePickerIncrement = parseInt($('#timePickerIncrement').val(), 10);
          if ($('#timePickerSeconds').is(':checked'))
            options.timePickerSeconds = true;
          if ($('#autoApply').is(':checked'))
            options.autoApply = true;
          if ($('#dateLimit').is(':checked'))
            options.dateLimit = { days: 7 };
          if ($('#ranges').is(':checked')) {
            options.ranges = {
              'Today': [moment(), moment()],
              'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
              'Last 7 Days': [moment().subtract(6, 'days'), moment()],
              'Last 30 Days': [moment().subtract(29, 'days'), moment()],
              'This Month': [moment().startOf('month'), moment().endOf('month')],
              'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
            };
          }
          if ($('#locale').is(':checked')) {
            $('#rtl-wrap').show();
            options.locale = {
              direction: $('#rtl').is(':checked') ? 'rtl' : 'ltr',
              format: 'MM/DD/YYYY HH:mm',
              separator: ' - ',
              applyLabel: 'Apply',
              cancelLabel: 'Cancel',
              fromLabel: 'From',
              toLabel: 'To',
              customRangeLabel: 'Custom',
              daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr','Sa'],
              monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
              firstDay: 1
            };
          } else {
            $('#rtl-wrap').hide();
          }
          if (!$('#linkedCalendars').is(':checked'))
            options.linkedCalendars = false;
          if (!$('#autoUpdateInput').is(':checked'))
            options.autoUpdateInput = false;
          if (!$('#showCustomRangeLabel').is(':checked'))
            options.showCustomRangeLabel = false;
          if ($('#alwaysShowCalendars').is(':checked'))
            options.alwaysShowCalendars = true;
          if ($('#parentEl').val().length)
            options.parentEl = $('#parentEl').val();
          if ($('#startDate').val().length)
            options.startDate = $('#startDate').val();
          if ($('#endDate').val().length)
            options.endDate = $('#endDate').val();
          if ($('#minDate').val().length)
            options.minDate = $('#minDate').val();
          if ($('#maxDate').val().length)
            options.maxDate = $('#maxDate').val();
          if ($('#opens').val().length && $('#opens').val() != 'right')
            options.opens = $('#opens').val();
          if ($('#drops').val().length && $('#drops').val() != 'down')
            options.drops = $('#drops').val();
          if ($('#buttonClasses').val().length && $('#buttonClasses').val() != 'btn btn-sm')
            options.buttonClasses = $('#buttonClasses').val();
          if ($('#applyClass').val().length && $('#applyClass').val() != 'btn-success')
            options.applyClass = $('#applyClass').val();
          if ($('#cancelClass').val().length && $('#cancelClass').val() != 'btn-default')
            options.cancelClass = $('#cancelClass').val();
          $('#config-text').val("$('#demo').daterangepicker(" + JSON.stringify(options, null, '    ') + ", function(start, end, label) {\n  console.log(\"New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')\");\n});");
          $('#config-demo').daterangepicker(options, function(start, end, label) { console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); });
        }
      });
      </script>
   </body>
</html>
src/main/webapp/bower_components/bootstrap-daterangepicker/drp.png
src/main/webapp/bower_components/bootstrap-daterangepicker/example/amd/index.html
New file
@@ -0,0 +1,210 @@
<!DOCTYPE html>
<html dir="ltr" lang="en-US">
   <head>
      <meta charset="UTF-8" />
      <title>A date range picker for Bootstrap</title>
      <link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
      <link rel="stylesheet" type="text/css" media="all" href="../../daterangepicker.css" />
      <style type="text/css">
      .demo { position: relative; }
      .demo i {
        position: absolute; bottom: 10px; right: 24px; top: auto; cursor: pointer;
      }
      </style>
   </head>
   <body style="margin: 60px 0">
      <div class="container">
        <h1 style="margin: 0 0 20px 0">Configuration Builder</h1>
        <div class="well configurator">
          <form>
          <div class="row">
            <div class="col-md-4">
              <div class="form-group">
                <label for="parentEl">parentEl</label>
                <input type="text" class="form-control" id="parentEl" value="" placeholder="body">
              </div>
              <div class="form-group">
                <label for="startDate">startDate</label>
                <input type="text" class="form-control" id="startDate" value="07/01/2015">
              </div>
              <div class="form-group">
                <label for="endDate">endDate</label>
                <input type="text" class="form-control" id="endDate" value="07/15/2015">
              </div>
              <div class="form-group">
                <label for="minDate">minDate</label>
                <input type="text" class="form-control" id="minDate" value="" placeholder="MM/DD/YYYY">
              </div>
              <div class="form-group">
                <label for="maxDate">maxDate</label>
                <input type="text" class="form-control" id="maxDate" value="" placeholder="MM/DD/YYYY">
              </div>
            </div>
            <div class="col-md-4">
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="autoApply"> autoApply
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="singleDatePicker"> singleDatePicker
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showDropdowns"> showDropdowns
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showWeekNumbers"> showWeekNumbers
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showISOWeekNumbers"> showISOWeekNumbers
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePicker"> timePicker
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePicker24Hour"> timePicker24Hour
                </label>
              </div>
              <div class="form-group">
                <label for="timePickerIncrement">timePickerIncrement (in minutes)</label>
                <input type="text" class="form-control" id="timePickerIncrement" value="1">
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePickerSeconds"> timePickerSeconds
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="dateLimit"> dateLimit (with example date range span)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="ranges"> ranges (with example predefined ranges)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="locale"> locale (with example settings)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="linkedCalendars" checked="checked"> linkedCalendars
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="autoUpdateInput" checked="checked"> autoUpdateInput
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="alwaysShowCalendars"> alwaysShowCalendars
                </label>
              </div>
            </div>
            <div class="col-md-4">
              <div class="form-group">
                <label for="opens">opens</label>
                <select id="opens" class="form-control">
                  <option value="right" selected>right</option>
                  <option value="left">left</option>
                  <option value="center">center</option>
                </select>
              </div>
              <div class="form-group">
                <label for="drops">drops</label>
                <select id="drops" class="form-control">
                  <option value="down" selected>down</option>
                  <option value="up">up</option>
                </select>
              </div>
              <div class="form-group">
                <label for="buttonClasses">buttonClasses</label>
                <input type="text" class="form-control" id="buttonClasses" value="btn btn-sm">
              </div>
              <div class="form-group">
                <label for="applyClass">applyClass</label>
                <input type="text" class="form-control" id="applyClass" value="btn-success">
              </div>
              <div class="form-group">
                <label for="cancelClass">cancelClass</label>
                <input type="text" class="form-control" id="cancelClass" value="btn-default">
              </div>
            </div>
          </div>
          </form>
        </div>
        <div class="row">
          <div class="col-md-4 col-md-offset-2 demo">
            <h4>Your Date Range Picker</h4>
            <input type="text" id="config-demo" class="form-control">
            <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
          </div>
          <div class="col-md-6">
            <h4>Configuration</h4>
            <div class="well">
              <textarea id="config-text" style="height: 300px; width: 100%; padding: 10px"></textarea>
            </div>
          </div>
        </div>
      </div>
      <script type="text/javascript" src="require.js" data-main="main.js"></script>
   </body>
</html>
src/main/webapp/bower_components/bootstrap-daterangepicker/example/amd/main.js
New file
@@ -0,0 +1,141 @@
requirejs.config({
    "paths": {
      "jquery": "https://code.jquery.com/jquery-1.11.3.min",
      "moment": "../../moment",
      "daterangepicker": "../../daterangepicker"
    }
});
requirejs(['jquery', 'moment', 'daterangepicker'] , function ($, moment) {
$(document).ready(function() {
  $('#config-text').keyup(function() {
    eval($(this).val());
  });
  $('.configurator input, .configurator select').change(function() {
    updateConfig();
  });
  $('.demo i').click(function() {
    $(this).parent().find('input').click();
  });
  $('#startDate').daterangepicker({
    singleDatePicker: true,
    startDate: moment().subtract(6, 'days')
  });
  $('#endDate').daterangepicker({
    singleDatePicker: true,
    startDate: moment()
  });
  updateConfig();
  function updateConfig() {
    var options = {};
    if ($('#singleDatePicker').is(':checked'))
      options.singleDatePicker = true;
    if ($('#showDropdowns').is(':checked'))
      options.showDropdowns = true;
    if ($('#showWeekNumbers').is(':checked'))
      options.showWeekNumbers = true;
    if ($('#showISOWeekNumbers').is(':checked'))
      options.showISOWeekNumbers = true;
    if ($('#timePicker').is(':checked'))
      options.timePicker = true;
    if ($('#timePicker24Hour').is(':checked'))
      options.timePicker24Hour = true;
    if ($('#timePickerIncrement').val().length && $('#timePickerIncrement').val() != 1)
      options.timePickerIncrement = parseInt($('#timePickerIncrement').val(), 10);
    if ($('#timePickerSeconds').is(':checked'))
      options.timePickerSeconds = true;
    if ($('#autoApply').is(':checked'))
      options.autoApply = true;
    if ($('#dateLimit').is(':checked'))
      options.dateLimit = { days: 7 };
    if ($('#ranges').is(':checked')) {
      options.ranges = {
        'Today': [moment(), moment()],
        'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
        'Last 7 Days': [moment().subtract(6, 'days'), moment()],
        'Last 30 Days': [moment().subtract(29, 'days'), moment()],
        'This Month': [moment().startOf('month'), moment().endOf('month')],
        'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
      };
    }
    if ($('#locale').is(':checked')) {
      options.locale = {
        format: 'MM/DD/YYYY HH:mm',
        separator: ' - ',
        applyLabel: 'Apply',
        cancelLabel: 'Cancel',
        fromLabel: 'From',
        toLabel: 'To',
        customRangeLabel: 'Custom',
        daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr','Sa'],
        monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        firstDay: 1
      };
    }
    if (!$('#linkedCalendars').is(':checked'))
      options.linkedCalendars = false;
    if (!$('#autoUpdateInput').is(':checked'))
      options.autoUpdateInput = false;
    if ($('#alwaysShowCalendars').is(':checked'))
      options.alwaysShowCalendars = true;
    if ($('#parentEl').val().length)
      options.parentEl = $('#parentEl').val();
    if ($('#startDate').val().length)
      options.startDate = $('#startDate').val();
    if ($('#endDate').val().length)
      options.endDate = $('#endDate').val();
    if ($('#minDate').val().length)
      options.minDate = $('#minDate').val();
    if ($('#maxDate').val().length)
      options.maxDate = $('#maxDate').val();
    if ($('#opens').val().length && $('#opens').val() != 'right')
      options.opens = $('#opens').val();
    if ($('#drops').val().length && $('#drops').val() != 'down')
      options.drops = $('#drops').val();
    if ($('#buttonClasses').val().length && $('#buttonClasses').val() != 'btn btn-sm')
      options.buttonClasses = $('#buttonClasses').val();
    if ($('#applyClass').val().length && $('#applyClass').val() != 'btn-success')
      options.applyClass = $('#applyClass').val();
    if ($('#cancelClass').val().length && $('#cancelClass').val() != 'btn-default')
      options.cancelClass = $('#cancelClass').val();
    $('#config-text').val("$('#demo').daterangepicker(" + JSON.stringify(options, null, '    ') + ", function(start, end, label) {\n  console.log(\"New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')\");\n});");
    $('#config-demo').daterangepicker(options, function(start, end, label) { console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); });
  }
});
});
src/main/webapp/bower_components/bootstrap-daterangepicker/example/amd/require.js
New file
@@ -0,0 +1,36 @@
/*
 RequireJS 2.2.0 Copyright jQuery Foundation and other contributors.
 Released under MIT license, http://github.com/requirejs/requirejs/LICENSE
*/
var requirejs,require,define;
(function(ga){function ka(b,c,d,g){return g||""}function K(b){return"[object Function]"===Q.call(b)}function L(b){return"[object Array]"===Q.call(b)}function y(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function X(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));--d);}}function x(b,c){return la.call(b,c)}function e(b,c){return x(b,c)&&b[c]}function D(b,c){for(var d in b)if(x(b,d)&&c(b[d],d))break}function Y(b,c,d,g){c&&D(c,function(c,e){if(d||!x(b,e))!g||"object"!==
typeof c||!c||L(c)||K(c)||c instanceof RegExp?b[e]=c:(b[e]||(b[e]={}),Y(b[e],c,d,g))});return b}function z(b,c){return function(){return c.apply(b,arguments)}}function ha(b){throw b;}function ia(b){if(!b)return b;var c=ga;y(b.split("."),function(b){c=c[b]});return c}function F(b,c,d,g){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=g;d&&(c.originalError=d);return c}function ma(b){function c(a,n,b){var h,k,f,c,d,l,g,r;n=n&&n.split("/");var q=p.map,m=q&&q["*"];
if(a){a=a.split("/");k=a.length-1;p.nodeIdCompat&&U.test(a[k])&&(a[k]=a[k].replace(U,""));"."===a[0].charAt(0)&&n&&(k=n.slice(0,n.length-1),a=k.concat(a));k=a;for(f=0;f<k.length;f++)c=k[f],"."===c?(k.splice(f,1),--f):".."===c&&0!==f&&(1!==f||".."!==k[2])&&".."!==k[f-1]&&0<f&&(k.splice(f-1,2),f-=2);a=a.join("/")}if(b&&q&&(n||m)){k=a.split("/");f=k.length;a:for(;0<f;--f){d=k.slice(0,f).join("/");if(n)for(c=n.length;0<c;--c)if(b=e(q,n.slice(0,c).join("/")))if(b=e(b,d)){h=b;l=f;break a}!g&&m&&e(m,d)&&
(g=e(m,d),r=f)}!h&&g&&(h=g,l=r);h&&(k.splice(0,l,h),a=k.join("/"))}return(h=e(p.pkgs,a))?h:a}function d(a){E&&y(document.getElementsByTagName("script"),function(n){if(n.getAttribute("data-requiremodule")===a&&n.getAttribute("data-requirecontext")===l.contextName)return n.parentNode.removeChild(n),!0})}function m(a){var n=e(p.paths,a);if(n&&L(n)&&1<n.length)return n.shift(),l.require.undef(a),l.makeRequire(null,{skipMap:!0})([a]),!0}function r(a){var n,b=a?a.indexOf("!"):-1;-1<b&&(n=a.substring(0,
b),a=a.substring(b+1,a.length));return[n,a]}function q(a,n,b,h){var k,f,d=null,g=n?n.name:null,p=a,q=!0,m="";a||(q=!1,a="_@r"+(Q+=1));a=r(a);d=a[0];a=a[1];d&&(d=c(d,g,h),f=e(v,d));a&&(d?m=f&&f.normalize?f.normalize(a,function(a){return c(a,g,h)}):-1===a.indexOf("!")?c(a,g,h):a:(m=c(a,g,h),a=r(m),d=a[0],m=a[1],b=!0,k=l.nameToUrl(m)));b=!d||f||b?"":"_unnormalized"+(T+=1);return{prefix:d,name:m,parentMap:n,unnormalized:!!b,url:k,originalName:p,isDefine:q,id:(d?d+"!"+m:m)+b}}function u(a){var b=a.id,
c=e(t,b);c||(c=t[b]=new l.Module(a));return c}function w(a,b,c){var h=a.id,k=e(t,h);if(!x(v,h)||k&&!k.defineEmitComplete)if(k=u(a),k.error&&"error"===b)c(k.error);else k.on(b,c);else"defined"===b&&c(v[h])}function A(a,b){var c=a.requireModules,h=!1;if(b)b(a);else if(y(c,function(b){if(b=e(t,b))b.error=a,b.events.error&&(h=!0,b.emit("error",a))}),!h)g.onError(a)}function B(){V.length&&(y(V,function(a){var b=a[0];"string"===typeof b&&(l.defQueueMap[b]=!0);G.push(a)}),V=[])}function C(a){delete t[a];
delete Z[a]}function J(a,b,c){var h=a.map.id;a.error?a.emit("error",a.error):(b[h]=!0,y(a.depMaps,function(h,f){var d=h.id,g=e(t,d);!g||a.depMatched[f]||c[d]||(e(b,d)?(a.defineDep(f,v[d]),a.check()):J(g,b,c))}),c[h]=!0)}function H(){var a,b,c=(a=1E3*p.waitSeconds)&&l.startTime+a<(new Date).getTime(),h=[],k=[],f=!1,g=!0;if(!aa){aa=!0;D(Z,function(a){var l=a.map,e=l.id;if(a.enabled&&(l.isDefine||k.push(a),!a.error))if(!a.inited&&c)m(e)?f=b=!0:(h.push(e),d(e));else if(!a.inited&&a.fetched&&l.isDefine&&
(f=!0,!l.prefix))return g=!1});if(c&&h.length)return a=F("timeout","Load timeout for modules: "+h,null,h),a.contextName=l.contextName,A(a);g&&y(k,function(a){J(a,{},{})});c&&!b||!f||!E&&!ja||ba||(ba=setTimeout(function(){ba=0;H()},50));aa=!1}}function I(a){x(v,a[0])||u(q(a[0],null,!0)).init(a[1],a[2])}function O(a){a=a.currentTarget||a.srcElement;var b=l.onScriptLoad;a.detachEvent&&!ca?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=l.onScriptError;a.detachEvent&&!ca||a.removeEventListener("error",
b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function P(){var a;for(B();G.length;){a=G.shift();if(null===a[0])return A(F("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));I(a)}l.defQueueMap={}}var aa,da,l,R,ba,p={waitSeconds:7,baseUrl:"./",paths:{},bundles:{},pkgs:{},shim:{},config:{}},t={},Z={},ea={},G=[],v={},W={},fa={},Q=1,T=1;R={require:function(a){return a.require?a.require:a.require=l.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?
v[a.map.id]=a.exports:a.exports=v[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){return e(p.config,a.map.id)||{}},exports:a.exports||(a.exports={})}}};da=function(a){this.events=e(ea,a.id)||{};this.map=a;this.shim=e(p.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};da.prototype={init:function(a,b,c,h){h=h||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&
(c=z(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;this.ignore=h.ignore;h.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,--this.depCount,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;l.startTime=(new Date).getTime();var a=this.map;if(this.shim)l.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],z(this,function(){return a.prefix?this.callPlugin():
this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=this.map.url;W[a]||(W[a]=!0,l.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var h=this.exports,k=this.factory;if(!this.inited)x(l.defQueueMap,c)||this.fetch();else if(this.error)this.emit("error",this.error);else if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(K(k)){if(this.events.error&&this.map.isDefine||g.onError!==
ha)try{h=l.execCb(c,k,b,h)}catch(d){a=d}else h=l.execCb(c,k,b,h);this.map.isDefine&&void 0===h&&((b=this.module)?h=b.exports:this.usingExports&&(h=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",A(this.error=a)}else h=k;this.exports=h;if(this.map.isDefine&&!this.ignore&&(v[c]=h,g.onResourceLoad)){var f=[];y(this.depMaps,function(a){f.push(a.normalizedMap||a)});g.onResourceLoad(l,this.map,f)}C(c);
this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=!0)}}},callPlugin:function(){var a=this.map,b=a.id,d=q(a.prefix);this.depMaps.push(d);w(d,"defined",z(this,function(h){var k,f,d=e(fa,this.map.id),M=this.map.name,r=this.map.parentMap?this.map.parentMap.name:null,m=l.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(h.normalize&&(M=h.normalize(M,function(a){return c(a,r,!0)})||
""),f=q(a.prefix+"!"+M,this.map.parentMap),w(f,"defined",z(this,function(a){this.map.normalizedMap=f;this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),h=e(t,f.id)){this.depMaps.push(f);if(this.events.error)h.on("error",z(this,function(a){this.emit("error",a)}));h.enable()}}else d?(this.map.url=l.nameToUrl(d),this.load()):(k=z(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),k.error=z(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];D(t,function(a){0===
a.map.id.indexOf(b+"_unnormalized")&&C(a.map.id)});A(a)}),k.fromText=z(this,function(h,c){var d=a.name,f=q(d),M=S;c&&(h=c);M&&(S=!1);u(f);x(p.config,b)&&(p.config[d]=p.config[b]);try{g.exec(h)}catch(e){return A(F("fromtexteval","fromText eval for "+b+" failed: "+e,e,[b]))}M&&(S=!0);this.depMaps.push(f);l.completeLoad(d);m([d],k)}),h.load(a.name,m,k,p))}));l.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){Z[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,z(this,function(a,
b){var c,h;if("string"===typeof a){a=q(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=e(R,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;w(a,"defined",z(this,function(a){this.undefed||(this.defineDep(b,a),this.check())}));this.errback?w(a,"error",z(this,this.errback)):this.events.error&&w(a,"error",z(this,function(a){this.emit("error",a)}))}c=a.id;h=t[c];x(R,c)||!h||h.enabled||l.enable(a,this)}));D(this.pluginMaps,z(this,function(a){var b=e(t,a.id);
b&&!b.enabled&&l.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};l={config:p,contextName:b,registry:t,defined:v,urlFetched:W,defQueue:G,defQueueMap:{},Module:da,makeModuleMap:q,nextTick:g.nextTick,onError:A,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");if("string"===typeof a.urlArgs){var b=
a.urlArgs;a.urlArgs=function(a,c){return(-1===c.indexOf("?")?"?":"&")+b}}var c=p.shim,h={paths:!0,bundles:!0,config:!0,map:!0};D(a,function(a,b){h[b]?(p[b]||(p[b]={}),Y(p[b],a,!0,!0)):p[b]=a});a.bundles&&D(a.bundles,function(a,b){y(a,function(a){a!==b&&(fa[a]=b)})});a.shim&&(D(a.shim,function(a,b){L(a)&&(a={deps:a});!a.exports&&!a.init||a.exportsFn||(a.exportsFn=l.makeShimExports(a));c[b]=a}),p.shim=c);a.packages&&y(a.packages,function(a){var b;a="string"===typeof a?{name:a}:a;b=a.name;a.location&&
(p.paths[b]=a.location);p.pkgs[b]=a.name+"/"+(a.main||"main").replace(na,"").replace(U,"")});D(t,function(a,b){a.inited||a.map.unnormalized||(a.map=q(b,null,!0))});(a.deps||a.callback)&&l.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(ga,arguments));return b||a.exports&&ia(a.exports)}},makeRequire:function(a,n){function m(c,d,f){var e,r;n.enableBuildCallback&&d&&K(d)&&(d.__requireJsBuild=!0);if("string"===typeof c){if(K(d))return A(F("requireargs",
"Invalid require call"),f);if(a&&x(R,c))return R[c](t[a.id]);if(g.get)return g.get(l,c,a,m);e=q(c,a,!1,!0);e=e.id;return x(v,e)?v[e]:A(F("notloaded",'Module name "'+e+'" has not been loaded yet for context: '+b+(a?"":". Use require([])")))}P();l.nextTick(function(){P();r=u(q(null,a));r.skipMap=n.skipMap;r.init(c,d,f,{enabled:!0});H()});return m}n=n||{};Y(m,{isBrowser:E,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];-1!==f&&("."!==g&&".."!==g||1<f)&&(d=b.substring(f,b.length),b=b.substring(0,
f));return l.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return x(v,q(b,a,!1,!0).id)},specified:function(b){b=q(b,a,!1,!0).id;return x(v,b)||x(t,b)}});a||(m.undef=function(b){B();var c=q(b,a,!0),f=e(t,b);f.undefed=!0;d(b);delete v[b];delete W[c.url];delete ea[b];X(G,function(a,c){a[0]===b&&G.splice(c,1)});delete l.defQueueMap[b];f&&(f.events.defined&&(ea[b]=f.events),C(b))});return m},enable:function(a){e(t,a.id)&&u(a).enable()},completeLoad:function(a){var b,c,d=e(p.shim,a)||{},g=d.exports;
for(B();G.length;){c=G.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===a&&(b=!0);I(c)}l.defQueueMap={};c=e(t,a);if(!b&&!x(v,a)&&c&&!c.inited)if(!p.enforceDefine||g&&ia(g))I([a,d.deps||[],d.exportsFn]);else return m(a)?void 0:A(F("nodefine","No define call for "+a,null,[a]));H()},nameToUrl:function(a,b,c){var d,k,f,m;(d=e(p.pkgs,a))&&(a=d);if(d=e(fa,a))return l.nameToUrl(d,b,c);if(g.jsExtRegExp.test(a))d=a+(b||"");else{d=p.paths;k=a.split("/");for(f=k.length;0<f;--f)if(m=k.slice(0,f).join("/"),
m=e(d,m)){L(m)&&(m=m[0]);k.splice(0,f,m);break}d=k.join("/");d+=b||(/^data\:|^blob\:|\?/.test(d)||c?"":".js");d=("/"===d.charAt(0)||d.match(/^[\w\+\.\-]+:/)?"":p.baseUrl)+d}return p.urlArgs&&!/^blob\:/.test(d)?d+p.urlArgs(a,d):d},load:function(a,b){g.load(l,a,b)},execCb:function(a,b,c,d){return b.apply(d,c)},onScriptLoad:function(a){if("load"===a.type||oa.test((a.currentTarget||a.srcElement).readyState))N=null,a=O(a),l.completeLoad(a.id)},onScriptError:function(a){var b=O(a);if(!m(b.id)){var c=[];
D(t,function(a,d){0!==d.indexOf("_@r")&&y(a.depMaps,function(a){if(a.id===b.id)return c.push(d),!0})});return A(F("scripterror",'Script error for "'+b.id+(c.length?'", needed by: '+c.join(", "):'"'),a,[b.id]))}}};l.require=l.makeRequire();return l}function pa(){if(N&&"interactive"===N.readyState)return N;X(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return N=b});return N}var g,B,C,H,O,I,N,P,u,T,qa=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ra=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
U=/\.js$/,na=/^\.\//;B=Object.prototype;var Q=B.toString,la=B.hasOwnProperty,E=!("undefined"===typeof window||"undefined"===typeof navigator||!window.document),ja=!E&&"undefined"!==typeof importScripts,oa=E&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,ca="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),J={},w={},V=[],S=!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(K(requirejs))return;w=requirejs;requirejs=void 0}"undefined"===typeof require||
K(require)||(w=require,require=void 0);g=requirejs=function(b,c,d,m){var r,q="_";L(b)||"string"===typeof b||(r=b,L(c)?(b=c,c=d,d=m):b=[]);r&&r.context&&(q=r.context);(m=e(J,q))||(m=J[q]=g.s.newContext(q));r&&m.configure(r);return m.require(b,c,d)};g.config=function(b){return g(b)};g.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,4)}:function(b){b()};require||(require=g);g.version="2.2.0";g.jsExtRegExp=/^\/|:|\?|\.js$/;g.isBrowser=E;B=g.s={contexts:J,newContext:ma};g({});y(["toUrl",
"undef","defined","specified"],function(b){g[b]=function(){var c=J._;return c.require[b].apply(c,arguments)}});E&&(C=B.head=document.getElementsByTagName("head")[0],H=document.getElementsByTagName("base")[0])&&(C=B.head=H.parentNode);g.onError=ha;g.createNode=function(b,c,d){c=b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};g.load=function(b,c,d){var m=b&&b.config||
{},e;if(E){e=g.createNode(m,c,d);e.setAttribute("data-requirecontext",b.contextName);e.setAttribute("data-requiremodule",c);!e.attachEvent||e.attachEvent.toString&&0>e.attachEvent.toString().indexOf("[native code")||ca?(e.addEventListener("load",b.onScriptLoad,!1),e.addEventListener("error",b.onScriptError,!1)):(S=!0,e.attachEvent("onreadystatechange",b.onScriptLoad));e.src=d;if(m.onNodeCreated)m.onNodeCreated(e,m,c,d);P=e;H?C.insertBefore(e,H):C.appendChild(e);P=null;return e}if(ja)try{setTimeout(function(){},
0),importScripts(d),b.completeLoad(c)}catch(q){b.onError(F("importscripts","importScripts failed for "+c+" at "+d,q,[c]))}};E&&!w.skipDataMain&&X(document.getElementsByTagName("script"),function(b){C||(C=b.parentNode);if(O=b.getAttribute("data-main"))return u=O,w.baseUrl||-1!==u.indexOf("!")||(I=u.split("/"),u=I.pop(),T=I.length?I.join("/")+"/":"./",w.baseUrl=T),u=u.replace(U,""),g.jsExtRegExp.test(u)&&(u=O),w.deps=w.deps?w.deps.concat(u):[u],!0});define=function(b,c,d){var e,g;"string"!==typeof b&&
(d=c,c=b,b=null);L(c)||(d=c,c=null);!c&&K(d)&&(c=[],d.length&&(d.toString().replace(qa,ka).replace(ra,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));S&&(e=P||pa())&&(b||(b=e.getAttribute("data-requiremodule")),g=J[e.getAttribute("data-requirecontext")]);g?(g.defQueue.push([b,c,d]),g.defQueueMap[b]=!0):V.push([b,c,d])};define.amd={jQuery:!0};g.exec=function(b){return eval(b)};g(w)}})(this);
src/main/webapp/bower_components/bootstrap-daterangepicker/example/browserify/README.md
New file
@@ -0,0 +1,11 @@
# Browserify example
Two steps need to be done for this to work
In the project root
    npm install
In this folder
    ../../node_modules/.bin/browserify main.js -o bundle.js
src/main/webapp/bower_components/bootstrap-daterangepicker/example/browserify/bundle.js
src/main/webapp/bower_components/bootstrap-daterangepicker/example/browserify/index.html
New file
@@ -0,0 +1,209 @@
<!DOCTYPE html>
<html dir="ltr" lang="en-US">
   <head>
      <meta charset="UTF-8" />
      <title>A date range picker for Bootstrap</title>
      <link href="http://netdna.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet">
      <link rel="stylesheet" type="text/css" media="all" href="../../daterangepicker.css" />
      <style type="text/css">
      .demo { position: relative; }
      .demo i {
        position: absolute; bottom: 10px; right: 24px; top: auto; cursor: pointer;
      }
      </style>
   </head>
   <body style="margin: 60px 0">
      <div class="container">
        <h1 style="margin: 0 0 20px 0">Configuration Builder</h1>
        <div class="well configurator">
          <form>
          <div class="row">
            <div class="col-md-4">
              <div class="form-group">
                <label for="parentEl">parentEl</label>
                <input type="text" class="form-control" id="parentEl" value="" placeholder="body">
              </div>
              <div class="form-group">
                <label for="startDate">startDate</label>
                <input type="text" class="form-control" id="startDate" value="07/01/2015">
              </div>
              <div class="form-group">
                <label for="endDate">endDate</label>
                <input type="text" class="form-control" id="endDate" value="07/15/2015">
              </div>
              <div class="form-group">
                <label for="minDate">minDate</label>
                <input type="text" class="form-control" id="minDate" value="" placeholder="MM/DD/YYYY">
              </div>
              <div class="form-group">
                <label for="maxDate">maxDate</label>
                <input type="text" class="form-control" id="maxDate" value="" placeholder="MM/DD/YYYY">
              </div>
            </div>
            <div class="col-md-4">
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="autoApply"> autoApply
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="singleDatePicker"> singleDatePicker
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showDropdowns"> showDropdowns
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showWeekNumbers"> showWeekNumbers
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="showISOWeekNumbers"> showISOWeekNumbers
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePicker"> timePicker
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePicker24Hour"> timePicker24Hour
                </label>
              </div>
              <div class="form-group">
                <label for="timePickerIncrement">timePickerIncrement (in minutes)</label>
                <input type="text" class="form-control" id="timePickerIncrement" value="1">
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="timePickerSeconds"> timePickerSeconds
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="dateLimit"> dateLimit (with example date range span)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="ranges"> ranges (with example predefined ranges)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="locale"> locale (with example settings)
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="linkedCalendars" checked="checked"> linkedCalendars
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="autoUpdateInput" checked="checked"> autoUpdateInput
                </label>
              </div>
              <div class="checkbox">
                <label>
                  <input type="checkbox" id="alwaysShowCalendars"> alwaysShowCalendars
                </label>
              </div>
            </div>
            <div class="col-md-4">
              <div class="form-group">
                <label for="opens">opens</label>
                <select id="opens" class="form-control">
                  <option value="right" selected>right</option>
                  <option value="left">left</option>
                  <option value="center">center</option>
                </select>
              </div>
              <div class="form-group">
                <label for="drops">drops</label>
                <select id="drops" class="form-control">
                  <option value="down" selected>down</option>
                  <option value="up">up</option>
                </select>
              </div>
              <div class="form-group">
                <label for="buttonClasses">buttonClasses</label>
                <input type="text" class="form-control" id="buttonClasses" value="btn btn-sm">
              </div>
              <div class="form-group">
                <label for="applyClass">applyClass</label>
                <input type="text" class="form-control" id="applyClass" value="btn-success">
              </div>
              <div class="form-group">
                <label for="cancelClass">cancelClass</label>
                <input type="text" class="form-control" id="cancelClass" value="btn-default">
              </div>
            </div>
          </div>
          </form>
        </div>
        <div class="row">
          <div class="col-md-4 col-md-offset-2 demo">
            <h4>Your Date Range Picker</h4>
            <input type="text" id="config-demo" class="form-control">
            <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
          </div>
          <div class="col-md-6">
            <h4>Configuration</h4>
            <div class="well">
              <textarea id="config-text" style="height: 300px; width: 100%; padding: 10px"></textarea>
            </div>
          </div>
        </div>
      </div>
      <script type="text/javascript" src="bundle.js"></script>
   </body>
</html>
src/main/webapp/bower_components/bootstrap-daterangepicker/example/browserify/main.js
New file
@@ -0,0 +1,135 @@
require('../../daterangepicker.js');
var $ = require('jquery'),
    moment = require('moment');
$(document).ready(function() {
  $('#config-text').keyup(function() {
    eval($(this).val());
  });
  $('.configurator input, .configurator select').change(function() {
    updateConfig();
  });
  $('.demo i').click(function() {
    $(this).parent().find('input').click();
  });
  $('#startDate').daterangepicker({
    singleDatePicker: true,
    startDate: moment().subtract(6, 'days')
  });
  $('#endDate').daterangepicker({
    singleDatePicker: true,
    startDate: moment()
  });
  updateConfig();
  function updateConfig() {
    var options = {};
    if ($('#singleDatePicker').is(':checked'))
      options.singleDatePicker = true;
    if ($('#showDropdowns').is(':checked'))
      options.showDropdowns = true;
    if ($('#showWeekNumbers').is(':checked'))
      options.showWeekNumbers = true;
    if ($('#showISOWeekNumbers').is(':checked'))
      options.showISOWeekNumbers = true;
    if ($('#timePicker').is(':checked'))
      options.timePicker = true;
    if ($('#timePicker24Hour').is(':checked'))
      options.timePicker24Hour = true;
    if ($('#timePickerIncrement').val().length && $('#timePickerIncrement').val() != 1)
      options.timePickerIncrement = parseInt($('#timePickerIncrement').val(), 10);
    if ($('#timePickerSeconds').is(':checked'))
      options.timePickerSeconds = true;
    if ($('#autoApply').is(':checked'))
      options.autoApply = true;
    if ($('#dateLimit').is(':checked'))
      options.dateLimit = { days: 7 };
    if ($('#ranges').is(':checked')) {
      options.ranges = {
        'Today': [moment(), moment()],
        'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
        'Last 7 Days': [moment().subtract(6, 'days'), moment()],
        'Last 30 Days': [moment().subtract(29, 'days'), moment()],
        'This Month': [moment().startOf('month'), moment().endOf('month')],
        'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
      };
    }
    if ($('#locale').is(':checked')) {
      options.locale = {
        format: 'MM/DD/YYYY HH:mm',
        separator: ' - ',
        applyLabel: 'Apply',
        cancelLabel: 'Cancel',
        fromLabel: 'From',
        toLabel: 'To',
        customRangeLabel: 'Custom',
        daysOfWeek: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr','Sa'],
        monthNames: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
        firstDay: 1
      };
    }
    if (!$('#linkedCalendars').is(':checked'))
      options.linkedCalendars = false;
    if (!$('#autoUpdateInput').is(':checked'))
      options.autoUpdateInput = false;
    if ($('#alwaysShowCalendars').is(':checked'))
      options.alwaysShowCalendars = true;
    if ($('#parentEl').val().length)
      options.parentEl = $('#parentEl').val();
    if ($('#startDate').val().length)
      options.startDate = $('#startDate').val();
    if ($('#endDate').val().length)
      options.endDate = $('#endDate').val();
    if ($('#minDate').val().length)
      options.minDate = $('#minDate').val();
    if ($('#maxDate').val().length)
      options.maxDate = $('#maxDate').val();
    if ($('#opens').val().length && $('#opens').val() != 'right')
      options.opens = $('#opens').val();
    if ($('#drops').val().length && $('#drops').val() != 'down')
      options.drops = $('#drops').val();
    if ($('#buttonClasses').val().length && $('#buttonClasses').val() != 'btn btn-sm')
      options.buttonClasses = $('#buttonClasses').val();
    if ($('#applyClass').val().length && $('#applyClass').val() != 'btn-success')
      options.applyClass = $('#applyClass').val();
    if ($('#cancelClass').val().length && $('#cancelClass').val() != 'btn-default')
      options.cancelClass = $('#cancelClass').val();
    $('#config-text').val("$('#demo').daterangepicker(" + JSON.stringify(options, null, '    ') + ", function(start, end, label) {\n  console.log(\"New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')\");\n});");
    $('#config-demo').daterangepicker(options, function(start, end, label) { console.log('New date range selected: ' + start.format('YYYY-MM-DD') + ' to ' + end.format('YYYY-MM-DD') + ' (predefined range: ' + label + ')'); });
  }
});
src/main/webapp/bower_components/bootstrap-daterangepicker/package.js
New file
@@ -0,0 +1,18 @@
Package.describe({
  name: 'dangrossman:bootstrap-daterangepicker',
  version: '2.1.27',
  summary: 'Date range picker component for Bootstrap',
  git: 'https://github.com/dangrossman/bootstrap-daterangepicker',
  documentation: 'README.md'
});
Package.onUse(function(api) {
  api.versionsFrom('METEOR@0.9.0.1');
  api.use('twbs:bootstrap@3.3.4', ["client"], {weak: true});
  api.use('momentjs:moment@2.10.3', ["client"]);
  api.use('jquery@1.11.3_2', ["client"]);
  api.addFiles('daterangepicker.js', ["client"]);
  api.addFiles('daterangepicker.css', ["client"]);
});
src/main/webapp/bower_components/bootstrap-daterangepicker/package.json
New file
@@ -0,0 +1,32 @@
{
  "name": "bootstrap-daterangepicker",
  "version": "2.1.27",
  "description": "Date range picker component for Bootstrap",
  "main": "daterangepicker.js",
  "style": "daterangepicker.css",
  "scripts": {
    "scss": "node-sass daterangepicker.scss > daterangepicker.css",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "https://github.com/dangrossman/bootstrap-daterangepicker.git"
  },
  "author": {
    "name": "Dan Grossman",
    "email": "dan@dangrossman.info",
    "url": "http://www.dangrossman.info"
  },
  "license": "MIT",
  "bugs": {
    "url": "https://github.com/dangrossman/bootstrap-daterangepicker/issues"
  },
  "homepage": "https://github.com/dangrossman/bootstrap-daterangepicker",
  "dependencies": {
    "jquery": ">=1.10",
    "moment": "^2.9.0"
  },
  "devDependencies": {
    "node-sass": "^3.4.2"
  }
}
src/main/webapp/bower_components/bootstrap-daterangepicker/website/index.html
New file
@@ -0,0 +1,836 @@
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Date Range Picker for Bootstrap</title>
        <link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" />
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css">
        <script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
        <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
        <script src="moment.min.js"></script>
        <script src="daterangepicker.js"></script>
        <link rel="stylesheet" type="text/css" href="daterangepicker.css" />
        <script src="website.js"></script>
        <link rel="stylesheet" type="text/css" href="website.css" />
        <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
        <!--[if lt IE 9]>
          <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
          <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
        <![endif]-->
        <meta name="google-site-verification" content="1fP-Eo9i1ozV4MUlqZv2vsLv1r7tvYutUb6i38v0_vg" />
    </head>
    <body>
        <nav class="navbar navbar-inverse navbar-static-top">
            <div class="container">
                <ul class="nav navbar-nav">
                    <li>
                        <a href="http://www.daterangepicker.com" rel="nofollow" style="background: #eee; color: #000">
                            <span class="fa-stack">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-calendar fa-stack-1x fa-inverse" style="color: #eee"></i>
                            </span>
                            Date Range Picker
                        </a>
                    </li>
                </ul>
                <ul class="nav navbar-nav navbar-right">
                    <li>
                        <a href="https://www.improvely.com" rel="nofollow" style="background: #00caff">
                            <span class="fa-stack">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-signal fa-stack-1x fa-inverse" style="color: #00caff"></i>
                            </span>
                            Improvely
                        </a>
                    </li>
                    <li>
                        <a href="https://www.w3counter.com" rel="nofollow" style="background: #009fe8">
                            <span class="fa-stack">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-pie-chart fa-stack-1x fa-inverse" style="color: #009fe8"></i>
                            </span>
                            W3Counter
                        </a>
                    </li>
                    <li>
                        <a href="http://www.websitegoodies.com" rel="nofollow" style="background: #06c">
                            <span class="fa-stack">
                                <i class="fa fa-circle fa-stack-2x"></i>
                                <i class="fa fa-wrench fa-stack-1x fa-inverse" style="color: #06c"></i>
                            </span>
                            Website Goodies
                        </a>
                    </li>
                </ul>
            </div>
        </nav>
        <div id="jumbo">
            <div class="container">
                <div class="row">
                    <div class="col-md-6">
                        <h1 style="margin: 0 0 20px 0">Date Range Picker</h1>
                        <p style="font-size: 18px; margin-bottom: 0">
                            A JavaScript component for choosing date ranges.
                            <br />
                            Designed to work with the Bootstrap CSS framework.
                        </p>
                    </div>
                    <div class="col-md-6" style="text-align: right; padding-right: 0">
                        <a href="https://github.com/dangrossman/bootstrap-daterangepicker" class="btn btn-lg btn-default">View on GitHub</a>
                        &nbsp;
                        <a href="https://github.com/dangrossman/bootstrap-daterangepicker/archive/master.zip" class="btn btn-lg btn-success">Download ZIP</a>
                        <br /><br />
                        <iframe src="https://ghbtns.com/github-btn.html?user=dangrossman&repo=bootstrap-daterangepicker&type=star&count=true&size=large" frameborder="0" scrolling="0" width="160px" height="30px"></iframe>
                        <iframe src="https://ghbtns.com/github-btn.html?user=dangrossman&repo=bootstrap-daterangepicker&type=watch&count=true&size=large&v=2" frameborder="0" scrolling="0" width="160px" height="30px"></iframe>
                        <iframe src="https://ghbtns.com/github-btn.html?user=dangrossman&repo=bootstrap-daterangepicker&type=fork&count=true&size=large" frameborder="0" scrolling="0" width="160px" height="30px"></iframe>
                    </div>
                </div>
            </div>
        </div>
        <div class="container main">
            <div class="row">
                <div id="nav-spy">
                    <div id="sidebar">
                        <ul class="nav nav-pills nav-stacked">
                            <li><a href="#usage">Usage</a></li>
                            <li>
                                <a href="#examples">Examples</a>
                                <ul class="nav nav-pills nav-stacked" style="margin: 0 0 0 15px; padding: 0; font-size: 13px">
                                    <li><a href="#ex1">Date Range Picker</a></li>
                                    <li><a href="#ex2">Date and Time</a></li>
                                    <li><a href="#ex3">Single Date Picker</a></li>
                                    <li><a href="#ex4">Predefined Ranges</a></li>
                                    <li><a href="#ex5">Input Initially Empty</a></li>
                                </ul>
                            </li>
                            <li><a href="#config">Configuration Generator</a></li>
                            <li><a href="#options">Options, Methods &amp; Events</a></li>
                            <li><a href="#license">License</a></li>
                        </ul>
                        <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
                        <!-- DRP Responsive -->
                        <ins class="adsbygoogle"
                             style="display:block"
                             data-ad-client="ca-pub-9095657276960731"
                             data-ad-slot="8963174596"
                             data-ad-format="auto"></ins>
                        <script>
                        (adsbygoogle = window.adsbygoogle || []).push({});
                        </script>
                    </div>
                </div>
                <div id="rightcol">
                    <div id="overview" name="overview">
                        <p>
                            Originally built for reporting at <a href="https://www.improvely.com">Improvely</a>,
                            the Date Range Picker can be attached to any webpage element to pop up two calendars
                            for selecting dates, times, or from predefined ranges like "Last 30 Days".
                        </p>
                        <a style="display: block; height: 300px; background: url('drp.png') top right no-repeat; background-size: cover; border: 1px solid #ccc; margin-bottom: 20px" href="https://awio.iljmp.com/5/drpdemo" title="Click for a Live Demo"></a>
                    </div>
                    <div id="usage" name="usage">
                        <h2>Usage</h2>
                        <p>
                            Date Range Picker relies on <a href="http://getbootstrap.com/">Bootstrap</a>, <a href="http://www.jquery.com/">jQuery</a> and <a href="http://momentjs.com/">Moment.js</a>.
                            Include the required scripts and stylesheet in your page:
                        </p>
                        <script src="https://gist.github.com/dangrossman/fc0ec04cf073f0834c97.js"></script>
                        <p>Then attach the picker to the element you want to trigger it:</p>
                        <script src="https://gist.github.com/dangrossman/c4cc05fff6fe86cdca05.js"></script>
                        <hr />
                        <p>
                            You can customize Date Range Picker with <a href="#options">options</a>, and
                            get notified when the user chooses new dates by providing a callback function.
                        </p>
                        <script src="https://gist.github.com/dangrossman/90b0b82275c81ac5904a.js"></script>
                    </div>
                    <div id="examples" name="examples">
                        <h2>Examples</h2>
                        <div id="ex1" name="ex1">
                            <h3>Date Range Picker</h3>
                            <p>
                                The Date Range Picker is attached to a text input. It will use the current
                                value of the input to initialize, and update the input if new dates are chosen.
                            </p>
                            <div class="row">
                                <div class="col-md-8 col-xs-12">
                                    <script src="https://gist.github.com/dangrossman/8e97e05e68cb683c4d71.js"></script>
                                </div>
                                <div class="col-md-4 col-xs-12">
                                    <h4>Demo:</h4>
                                    <input class="pull-right" type="text" name="daterange" value="01/15/2017 - 02/15/2017" />
                                </div>
                            </div>
                            <script type="text/javascript">
                            $(function() {
                                $('input[name="daterange"]').daterangepicker();
                            });
                            </script>
                        </div>
                        <div id="ex2" name="ex2">
                            <h3>Date and Time</h3>
                            <p>
                                The Date Range Picker can also be used to select times. Hour, minute and (optional)
                                second dropdowns are added below the calendars. An option exists to set the increment
                                count of the minutes dropdown to e.g. offer only 15-minute or 30-minute increments.
                            </p>
                            <div class="row">
                                <div class="col-md-7 col-xs-12">
                                    <script src="https://gist.github.com/dangrossman/89a40223f5a8a892fbf1.js"></script>
                                </div>
                                <div class="col-md-5 col-xs-12">
                                    <h4>Demo:</h4>
                                    <input class="pull-right" type="text" name="daterange2" value="01/01/2017 1:30 PM - 01/01/2017 2:00 PM" />
                                </div>
                            </div>
                            <script type="text/javascript">
                            $(function() {
                                $('input[name="daterange2"]').daterangepicker({
                                    timePicker: true,
                                    timePickerIncrement: 30,
                                    locale: {
                                        format: 'MM/DD/YYYY h:mm A'
                                    }
                                });
                            });
                            </script>
                        </div>
                        <div id="ex3" name="ex3">
                            <h3>Single Date Picker</h3>
                            <p>
                                The Date Range Picker can be turned into a single date picker widget with only
                                one calendar. In this example, dropdowns to select a month and year have also
                                been enabled at the top of the calendar to quickly jump to different months.
                            </p>
                            <div class="row">
                                <div class="col-md-9 col-xs-12">
                                    <script src="https://gist.github.com/dangrossman/df41977acae070b3feb2.js"></script>
                                </div>
                                <div class="col-md-3 col-xs-12">
                                    <h4>Demo:</h4>
                                    <input class="pull-right" type="text" name="birthdate" value="10/24/1984" />
                                </div>
                            </div>
                            <script type="text/javascript">
                            $(function() {
                                $('input[name="birthdate"]').daterangepicker({
                                    singleDatePicker: true,
                                    showDropdowns: true
                                },
                                function(start, end, label) {
                                    var years = moment().diff(start, 'years');
                                    alert("You are " + years + " years old.");
                                });
                            });
                            </script>
                        </div>
                        <div id="ex4" name="ex4">
                            <h3>Predefined Ranges</h3>
                            <p>
                                This example shows the option to predefine date ranges that
                                the user can choose from a list.
                            </p>
                            <div class="row">
                                <div class="col-md-8 col-xs-12">
                                    <script src="https://gist.github.com/dangrossman/bd8cf6efbba1c2123adc.js"></script>
                                </div>
                                <div class="col-md-4 col-xs-12">
                                    <h4>Demo:</h4>
                                    <div id="reportrange" class="pull-right" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; width: 100%">
                                        <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>&nbsp;
                                        <span></span> <b class="caret"></b>
                                    </div>
                                </div>
                            </div>
                            <script type="text/javascript">
                            $(function() {
                                var start = moment().subtract(29, 'days');
                                var end = moment();
                                function cb(start, end) {
                                    $('#reportrange span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'));
                                }
                                $('#reportrange').daterangepicker({
                                    startDate: start,
                                    endDate: end,
                                    ranges: {
                                       'Today': [moment(), moment()],
                                       'Yesterday': [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
                                       'Last 7 Days': [moment().subtract(6, 'days'), moment()],
                                       'Last 30 Days': [moment().subtract(29, 'days'), moment()],
                                       'This Month': [moment().startOf('month'), moment().endOf('month')],
                                       'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
                                    }
                                }, cb);
                                cb(start, end);
                            });
                            </script>
                        </div>
                        <div id="ex5" name="ex5">
                            <h3>Input Initially Empty</h3>
                            <p>
                                If you're using a date range as a filter, you may want to attach a picker to an
                                input but leave it empty by default. This example shows how to accomplish that
                                using the <code>autoUpdateInput</code> setting, and the <code>apply</code> and
                                <code>cancel</code> events.
                            </p>
                            <div class="row">
                                <div class="col-md-9 col-xs-12">
                                    <script src="https://gist.github.com/dangrossman/de22909c4d24f3f3508c.js"></script>
                                </div>
                                <div class="col-md-3 col-xs-12">
                                    <h4>Demo:</h4>
                                    <input class="pull-right" type="text" name="datefilter" value="" />
                                </div>
                            </div>
                        </div>
                        <script type="text/javascript">
                        $(function() {
                            $('input[name="datefilter"]').daterangepicker({
                                autoUpdateInput: false,
                                locale: {
                                    cancelLabel: 'Clear'
                                }
                            });
                            $('input[name="datefilter"]').on('apply.daterangepicker', function(ev, picker) {
                                $(this).val(picker.startDate.format('MM/DD/YYYY') + ' - ' + picker.endDate.format('MM/DD/YYYY'));
                            });
                            $('input[name="datefilter"]').on('cancel.daterangepicker', function(ev, picker) {
                                $(this).val('');
                            });
                        });
                        </script>
                    </div>
                    <div id="config" name="config">
                        <h2>Configuration Generator</h2>
                        <div class="well configurator">
                          <form>
                          <div class="row">
                            <div class="col-md-4">
                              <div class="form-group">
                                <label for="parentEl">parentEl</label>
                                <input type="text" class="form-control" id="parentEl" value="" placeholder="body">
                              </div>
                              <div class="form-group">
                                <label for="startDate">startDate</label>
                                <input type="text" class="form-control" id="startDate" value="07/01/2017">
                              </div>
                              <div class="form-group">
                                <label for="endDate">endDate</label>
                                <input type="text" class="form-control" id="endDate" value="07/15/2017">
                              </div>
                              <div class="form-group">
                                <label for="minDate">minDate</label>
                                <input type="text" class="form-control" id="minDate" value="" placeholder="MM/DD/YYYY">
                              </div>
                              <div class="form-group">
                                <label for="maxDate">maxDate</label>
                                <input type="text" class="form-control" id="maxDate" value="" placeholder="MM/DD/YYYY">
                              </div>
                              <div class="form-group">
                                <label for="opens">opens</label>
                                <select id="opens" class="form-control">
                                  <option value="right" selected>right</option>
                                  <option value="left">left</option>
                                  <option value="center">center</option>
                                </select>
                              </div>
                              <div class="form-group">
                                <label for="drops">drops</label>
                                <select id="drops" class="form-control">
                                  <option value="down" selected>down</option>
                                  <option value="up">up</option>
                                </select>
                              </div>
                            </div>
                            <div class="col-md-4">
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="showDropdowns"> showDropdowns
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="showWeekNumbers"> showWeekNumbers
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="showISOWeekNumbers"> showISOWeekNumbers
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="singleDatePicker"> singleDatePicker
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="timePicker"> timePicker
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="timePicker24Hour"> timePicker24Hour
                                </label>
                              </div>
                              <div class="form-group">
                                <label for="timePickerIncrement">timePickerIncrement (in minutes)</label>
                                <input type="text" class="form-control" id="timePickerIncrement" value="1">
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="timePickerSeconds"> timePickerSeconds
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="dateLimit"> dateLimit (with example date range span)
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="locale"> locale (with example settings)
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="autoApply"> autoApply
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="linkedCalendars" checked="checked"> linkedCalendars
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="autoUpdateInput" checked="checked"> autoUpdateInput
                                </label>
                              </div>
                            </div>
                            <div class="col-md-4">
                              <div class="form-group">
                                <label for="buttonClasses">buttonClasses</label>
                                <input type="text" class="form-control" id="buttonClasses" value="btn btn-sm">
                              </div>
                              <div class="form-group">
                                <label for="applyClass">applyClass</label>
                                <input type="text" class="form-control" id="applyClass" value="btn-success">
                              </div>
                              <div class="form-group">
                                <label for="cancelClass">cancelClass</label>
                                <input type="text" class="form-control" id="cancelClass" value="btn-default">
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="ranges"> ranges (with example predefined ranges)
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="alwaysShowCalendars"> alwaysShowCalendars
                                </label>
                              </div>
                              <div class="checkbox">
                                <label>
                                  <input type="checkbox" id="showCustomRangeLabel" checked="checked"> showCustomRangeLabel
                                </label>
                              </div>
                            </div>
                          </div>
                          </form>
                        </div>
                        <div class="row">
                          <div class="col-md-4 col-md-offset-2 demo">
                            <h4>Your Date Range Picker</h4>
                            <input type="text" id="config-demo" class="form-control">
                            <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
                          </div>
                          <div class="col-md-6">
                            <h4>Configuration</h4>
                            <div class="well">
                              <textarea id="config-text" style="height: 300px; width: 100%; padding: 10px"></textarea>
                            </div>
                          </div>
                        </div>
                    </div>
                    <div id="options" name="options">
                        <h2>Options</h2>
                        <ul class="nobullets">
                            <li>
                                <code>startDate</code> (Date object, moment object or string) The start of the initially selected date range
                            </li>
                            <li>
                                <code>endDate</code>: (Date object, moment object or string) The end of the initially selected date range
                            </li>
                            <li>
                                <code>minDate</code>: (Date object, moment object or string) The earliest date a user may select
                            </li>
                            <li>
                                <code>maxDate</code>: (Date object, moment object or string) The latest date a user may select
                            </li>
                            <li>
                                <code>dateLimit</code>: (object) The maximum span between the selected start and end dates. Can have any property you can add to a moment object (i.e. days, months)
                            </li>
                            <li>
                                <code>showDropdowns</code>: (boolean) Show year and month select boxes above calendars to jump to a specific month and year
                            </li>
                            <li>
                                <code>showWeekNumbers</code>: (boolean) Show localized week numbers at the start of each week on the calendars
                            </li>
                            <li>
                                <code>showISOWeekNumbers</code>: (boolean) Show ISO week numbers at the start of each week on the calendars
                            </li>
                            <li>
                                <code>timePicker</code>: (boolean) Allow selection of dates with times, not just dates
                            </li>
                            <li>
                                <code>timePickerIncrement</code>: (number) Increment of the minutes selection list for times (i.e. 30 to allow only selection of times ending in 0 or 30)
                            </li>
                            <li>
                                <code>timePicker24Hour</code>: (boolean) Use 24-hour instead of 12-hour times, removing the AM/PM selection
                            </li>
                            <li>
                                <code>timePickerSeconds</code>: (boolean) Show seconds in the timePicker
                            </li>
                            <li>
                                <code>ranges</code>: (object) Set predefined date ranges the user can select from. Each key is the label for the range, and its value an array with two dates representing the bounds of the range
                            </li>
                            <li>
                                <code>showCustomRangeLabel</code>: (boolean) Displays an item labeled "Custom Range" at
                                the end of the list of predefined ranges, when the <code>ranges</code> option is used.
                                This option will be highlighted whenever the current date range selection does not match
                                one of the predefined ranges. Clicking it will display the calendars to select a new range.
                            </li>
                            <li>
                                <code>alwaysShowCalendars</code>: (boolean) Normally, if you use the <code>ranges</code>
                                option to specify pre-defined date ranges, calendars for choosing a custom date range are not shown until the user clicks "Custom Range". When this option is set to true, the calendars for choosing a custom date range are always shown instead.
                            </li>
                            <li>
                                <code>opens</code>: (string</code>: 'left'/'right'/'center') Whether the picker appears aligned to the left, to the right, or centered under the HTML element it's attached to
                            </li>
                            <li>
                                <code>drops</code>: (string</code>: 'down' or 'up') Whether the picker appears below (default) or above the HTML element it's attached to
                            </li>
                            <li>
                                <code>buttonClasses</code>: (array) CSS class names that will be added to all buttons in the picker
                            </li>
                            <li>
                                <code>applyClass</code>: (string) CSS class string that will be added to the apply button
                            </li>
                            <li>
                                <code>cancelClass</code>: (string) CSS class string that will be added to the cancel button
                            </li>
                            <li>
                                <code>locale</code>: (object) Allows you to provide localized strings for buttons and labels, customize the date format, and change the first day of week for the calendars.
                                Check off "locale (with example settings)" in the configuration generator to see how
                                to customize these options.
                            </li>
                            <li>
                                <code>singleDatePicker</code>: (boolean) Show only a single calendar to choose one date, instead of a range picker with two calendars; the start and end dates provided to your callback will be the same single date chosen
                            </li>
                            <li>
                                <code>autoApply</code>: (boolean) Hide the apply and cancel buttons, and automatically apply a new date range as soon as two dates or a predefined range is selected
                            </li>
                            <li>
                                <code>linkedCalendars</code>: (boolean) When enabled, the two calendars displayed will always be for two sequential months (i.e. January and February), and both will be advanced when clicking the left or right arrows above the calendars. When disabled, the two calendars can be individually advanced and display any month/year.
                            </li>
                            <li>
                                <code>isInvalidDate</code>: (function) A function that is passed each date in the two
                                calendars before they are displayed, and may return true or false to indicate whether
                                that date should be available for selection or not.
                            </li>
                            <li>
                                <code>isCustomDate</code>: (function) A function that is passed each date in the two
                                calendars before they are displayed, and may return a string or array of CSS class names
                                to apply to that date's calendar cell.
                            </li>
                            <li>
                                <code>autoUpdateInput</code>: (boolean) Indicates whether the date range picker should
                                automatically update the value of an <code>&lt;input&gt;</code> element it's attached to
                                at initialization and when the selected dates change.
                            </li>
                            <li>
                                <code>parentEl</code>: (string) jQuery selector of the parent element that the date range picker will be added to, if not provided this will be 'body'
                            </li>
                        </ul>
                    </div>
                    <div id="methods" name="methods">
                        <h2>Methods</h2>
                        <p>
                            You can programmatically update the <code>startDate</code> and <code>endDate</code>
                            in the picker using the <code>setStartDate</code> and <code>setEndDate</code> methods.
                            You can access the Date Range Picker object and its functions and properties through
                            data properties of the element you attached it to.
                        </p>
                        <script src="https://gist.github.com/dangrossman/8ff9b1220c9b5682e8bd.js"></script>
                        <br />
                        <ul class="nobullets">
                            <li>
                                <code>setStartDate(Date/moment/string)</code>: Sets the date range picker's currently selected start date to the provided date
                            </li>
                            <li>
                                <code>setEndDate(Date/moment/string)</code>: Sets the date range picker's currently selected end date to the provided date
                            </li>
                        </ul>
                        <p style="margin: 0"><b>Example usage:</b></p>
                        <script src="https://gist.github.com/dangrossman/e1a8effbaeacb50a1e31.js"></script>
                    </div>
                    <div id="events" name="events">
                        <h2>Events</h2>
                        <p>
                            Several events are triggered on the element you attach the picker to, which you can listen for.
                        </p>
                        <ul class="nobullets">
                            <li>
                                <code>show.daterangepicker</code>: Triggered when the picker is shown
                            </li>
                            <li>
                                <code>hide.daterangepicker</code>: Triggered when the picker is hidden
                            </li>
                            <li>
                                <code>showCalendar.daterangepicker</code>: Triggered when the calendar(s) are shown
                            </li>
                            <li>
                                <code>hideCalendar.daterangepicker</code>: Triggered when the calendar(s) are hidden
                            </li>
                            <li>
                                <code>apply.daterangepicker</code>: Triggered when the apply button is clicked,
                                or when a predefined range is clicked
                            </li>
                            <li>
                                <code>cancel.daterangepicker</code>: Triggered when the cancel button is clicked
                            </li>
                        </ul>
                        <p>
                            Some applications need a "clear" instead of a "cancel" functionality, which can be achieved by changing the button label and watching for the cancel event:
                        </p>
                        <script src="https://gist.github.com/dangrossman/1bea78da703f2896564d.js"></script>
                        <br />
                        <p>
                            While passing in a callback to the constructor is the easiest way to listen for changes in the selected date range, you can also do something every time the apply button is clicked even if the selection hasn't changed:
                        </p>
                        <script src="https://gist.github.com/dangrossman/0c6c911fea1459b5fd13.js"></script>
                    </div>
                    <div id="license" name="license">
                        <h2>License</h2>
                        <p>The MIT License (MIT)</p>
                        <p>Copyright (c) 2012-2017 <a href="http://www.dangrossman.info">Dan Grossman</a></p>
                        <p>
                            Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
                        </p>
                        <p>
                            The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
                        </p>
                        <p>
                            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
                        </p>
                    </div>
                    <div id="comments">
                        <h2>Comments</h2>
                        <div id="disqus_thread"></div>
                        <script type="text/javascript">
                            /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */
                            var disqus_url = 'http://www.dangrossman.info/2012/08/20/a-date-range-picker-for-twitter-bootstrap/';
                            var disqus_identifier = '1045 http://www.dangrossman.info/?p=1045';
                            var disqus_container_id = 'disqus_thread';
                            var disqus_shortname = 'dangrossman';
                            var disqus_title = "A Date Range Picker for Bootstrap";
                            /* * * DON'T EDIT BELOW THIS LINE * * */
                            (function() {
                                var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
                                dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
                                (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
                            })();
                        </script>
                        <noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
                    </div>
                </div>
            </div>
        </div>
        <!-- Begin W3Counter Tracking Code -->
        <script type="text/javascript" src="https://www.w3counter.com/tracker.js?id=90840"></script>
        <!-- End W3Counter Tracking Code -->
        <script type="text/javascript">
        var im_domain = 'awio';
        var im_project_id = 48;
        (function(e,t){window._improvely=[];var n=e.getElementsByTagName("script")[0];var r=e.createElement("script");r.type="text/javascript";r.src="https://"+im_domain+".iljmp.com/improvely.js";r.async=true;n.parentNode.insertBefore(r,n);if(typeof t.init=="undefined"){t.init=function(e,t){window._improvely.push(["init",e,t])};t.goal=function(e){window._improvely.push(["goal",e])};t.conversion=function(e){window._improvely.push(["conversion",e])};t.label=function(e){window._improvely.push(["label",e])}}window.improvely=t;t.init(im_domain,im_project_id)})(document,window.improvely||[])
        </script>
    <script>
    !function(e){window._wsg=7;var t=e.getElementsByTagName("script")[0],s=e.createElement("script");s.type="text/javascript",s.src="https://www.websitegoodies.com/js/widgets.js",t.parentNode.insertBefore(s,t)}(document);
    </script>
        <div id="footer">
            Copyright &copy; 2012-2017 <a href="http://www.awio.com">Awio Web Services LLC</a>.
            &nbsp;
            Developed and maintained by <a href="http://www.dangrossman.info/">Dan Grossman</a>.
            &nbsp;
        </div>
    </body>
</html>
Diff truncated after the above file
src/main/webapp/bower_components/bootstrap-daterangepicker/website/website.css src/main/webapp/bower_components/bootstrap-daterangepicker/website/website.js src/main/webapp/bower_components/crypto-js/.bower.json src/main/webapp/bower_components/crypto-js/CONTRIBUTING.md src/main/webapp/bower_components/crypto-js/LICENSE src/main/webapp/bower_components/crypto-js/README.md src/main/webapp/bower_components/crypto-js/aes.js src/main/webapp/bower_components/crypto-js/bower.json src/main/webapp/bower_components/crypto-js/cipher-core.js src/main/webapp/bower_components/crypto-js/core.js src/main/webapp/bower_components/crypto-js/crypto-js.js src/main/webapp/bower_components/crypto-js/docs/QuickStartGuide.wiki src/main/webapp/bower_components/crypto-js/enc-base64.js src/main/webapp/bower_components/crypto-js/enc-hex.js src/main/webapp/bower_components/crypto-js/enc-latin1.js src/main/webapp/bower_components/crypto-js/enc-utf16.js src/main/webapp/bower_components/crypto-js/enc-utf8.js src/main/webapp/bower_components/crypto-js/evpkdf.js src/main/webapp/bower_components/crypto-js/format-hex.js src/main/webapp/bower_components/crypto-js/format-openssl.js src/main/webapp/bower_components/crypto-js/hmac-md5.js src/main/webapp/bower_components/crypto-js/hmac-ripemd160.js src/main/webapp/bower_components/crypto-js/hmac-sha1.js src/main/webapp/bower_components/crypto-js/hmac-sha224.js src/main/webapp/bower_components/crypto-js/hmac-sha256.js src/main/webapp/bower_components/crypto-js/hmac-sha3.js src/main/webapp/bower_components/crypto-js/hmac-sha384.js src/main/webapp/bower_components/crypto-js/hmac-sha512.js src/main/webapp/bower_components/crypto-js/hmac.js src/main/webapp/bower_components/crypto-js/index.js src/main/webapp/bower_components/crypto-js/lib-typedarrays.js src/main/webapp/bower_components/crypto-js/md5.js src/main/webapp/bower_components/crypto-js/mode-cfb.js src/main/webapp/bower_components/crypto-js/mode-ctr-gladman.js src/main/webapp/bower_components/crypto-js/mode-ctr.js src/main/webapp/bower_components/crypto-js/mode-ecb.js src/main/webapp/bower_components/crypto-js/mode-ofb.js src/main/webapp/bower_components/crypto-js/package.json src/main/webapp/bower_components/crypto-js/pad-ansix923.js src/main/webapp/bower_components/crypto-js/pad-iso10126.js src/main/webapp/bower_components/crypto-js/pad-iso97971.js src/main/webapp/bower_components/crypto-js/pad-nopadding.js src/main/webapp/bower_components/crypto-js/pad-pkcs7.js src/main/webapp/bower_components/crypto-js/pad-zeropadding.js src/main/webapp/bower_components/crypto-js/pbkdf2.js src/main/webapp/bower_components/crypto-js/rabbit-legacy.js src/main/webapp/bower_components/crypto-js/rabbit.js src/main/webapp/bower_components/crypto-js/rc4.js src/main/webapp/bower_components/crypto-js/ripemd160.js src/main/webapp/bower_components/crypto-js/sha1.js src/main/webapp/bower_components/crypto-js/sha224.js src/main/webapp/bower_components/crypto-js/sha256.js src/main/webapp/bower_components/crypto-js/sha3.js src/main/webapp/bower_components/crypto-js/sha384.js src/main/webapp/bower_components/crypto-js/sha512.js src/main/webapp/bower_components/crypto-js/tripledes.js src/main/webapp/bower_components/crypto-js/x64-core.js src/main/webapp/bower_components/d3-context-menu/.bower.json src/main/webapp/bower_components/d3-context-menu/.gitignore src/main/webapp/bower_components/d3-context-menu/.npmignore src/main/webapp/bower_components/d3-context-menu/bower.json src/main/webapp/bower_components/d3-context-menu/css/d3-context-menu.css src/main/webapp/bower_components/d3-context-menu/js/d3-context-menu.js src/main/webapp/bower_components/d3-context-menu/package.json src/main/webapp/bower_components/d3/.bower.json src/main/webapp/bower_components/d3/LICENSE src/main/webapp/bower_components/d3/README.md src/main/webapp/bower_components/d3/bower.json src/main/webapp/bower_components/d3/d3.js src/main/webapp/bower_components/d3/d3.min.js src/main/webapp/bower_components/datetimepicker/.bower.json src/main/webapp/bower_components/datetimepicker/bower.json src/main/webapp/bower_components/datetimepicker/build/jquery.datetimepicker.full.js src/main/webapp/bower_components/datetimepicker/build/jquery.datetimepicker.full.min.js src/main/webapp/bower_components/datetimepicker/build/jquery.datetimepicker.min.css src/main/webapp/bower_components/datetimepicker/jquery.datetimepicker.css src/main/webapp/bower_components/datetimepicker/jquery.datetimepicker.js src/main/webapp/bower_components/datetimepicker/package.json src/main/webapp/bower_components/datetimepicker/yarn.lock src/main/webapp/bower_components/domReady/.bower.json src/main/webapp/bower_components/domReady/LICENSE src/main/webapp/bower_components/domReady/README.md src/main/webapp/bower_components/domReady/bower.json src/main/webapp/bower_components/domReady/domReady.js src/main/webapp/bower_components/domReady/package.json src/main/webapp/bower_components/font-awesome/.bower.json src/main/webapp/bower_components/font-awesome/.gitignore src/main/webapp/bower_components/font-awesome/.npmignore src/main/webapp/bower_components/font-awesome/HELP-US-OUT.txt src/main/webapp/bower_components/font-awesome/bower.json src/main/webapp/bower_components/font-awesome/css/font-awesome.css src/main/webapp/bower_components/font-awesome/css/font-awesome.css.map src/main/webapp/bower_components/font-awesome/css/font-awesome.min.css src/main/webapp/bower_components/font-awesome/fonts/FontAwesome.otf src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.eot src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.svg src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.ttf src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.woff src/main/webapp/bower_components/font-awesome/fonts/fontawesome-webfont.woff2 src/main/webapp/bower_components/font-awesome/less/animated.less src/main/webapp/bower_components/font-awesome/less/bordered-pulled.less src/main/webapp/bower_components/font-awesome/less/core.less src/main/webapp/bower_components/font-awesome/less/fixed-width.less src/main/webapp/bower_components/font-awesome/less/font-awesome.less src/main/webapp/bower_components/font-awesome/less/icons.less src/main/webapp/bower_components/font-awesome/less/larger.less src/main/webapp/bower_components/font-awesome/less/list.less src/main/webapp/bower_components/font-awesome/less/mixins.less src/main/webapp/bower_components/font-awesome/less/path.less src/main/webapp/bower_components/font-awesome/less/rotated-flipped.less src/main/webapp/bower_components/font-awesome/less/screen-reader.less src/main/webapp/bower_components/font-awesome/less/stacked.less src/main/webapp/bower_components/font-awesome/less/variables.less src/main/webapp/bower_components/font-awesome/scss/_animated.scss src/main/webapp/bower_components/font-awesome/scss/_bordered-pulled.scss src/main/webapp/bower_components/font-awesome/scss/_core.scss src/main/webapp/bower_components/font-awesome/scss/_fixed-width.scss src/main/webapp/bower_components/font-awesome/scss/_icons.scss src/main/webapp/bower_components/font-awesome/scss/_larger.scss src/main/webapp/bower_components/font-awesome/scss/_list.scss src/main/webapp/bower_components/font-awesome/scss/_mixins.scss src/main/webapp/bower_components/font-awesome/scss/_path.scss src/main/webapp/bower_components/font-awesome/scss/_rotated-flipped.scss src/main/webapp/bower_components/font-awesome/scss/_screen-reader.scss src/main/webapp/bower_components/font-awesome/scss/_stacked.scss src/main/webapp/bower_components/font-awesome/scss/_variables.scss src/main/webapp/bower_components/font-awesome/scss/font-awesome.scss src/main/webapp/bower_components/hammerjs/.bower.json src/main/webapp/bower_components/hammerjs/CHANGELOG.md src/main/webapp/bower_components/hammerjs/CONTRIBUTING.md src/main/webapp/bower_components/hammerjs/LICENSE.md src/main/webapp/bower_components/hammerjs/README.md src/main/webapp/bower_components/hammerjs/bower.json src/main/webapp/bower_components/hammerjs/changelog.js src/main/webapp/bower_components/hammerjs/hammer.js src/main/webapp/bower_components/hammerjs/hammer.min.js src/main/webapp/bower_components/hammerjs/hammer.min.js.map src/main/webapp/bower_components/hammerjs/hammer.min.map