{ "log": { "version": "1.2", "creator": { "name": "WebInspector", "version": "537.36" }, "pages": [ { "startedDateTime": "2017-11-30T19:20:11.574Z", "id": "page_1", "title": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/", "pageTimings": { "onContentLoad": 1821.3929999619722, "onLoad": 2327.733000041917 } } ], "entries": [ { "startedDateTime": "2017-11-30T19:20:11.827Z", "time": 242.37799996323884, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/", "httpVersion": "HTTP/1.1", "headers": [ { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "Upgrade-Insecure-Requests", "value": "1" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8" }, { "name": "Cache-Control", "value": "max-age=0" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 897, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:11 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "X-Hudson", "value": "1.395" }, { "name": "X-Jenkins-CLI-Port", "value": "38845" }, { "name": "X-Jenkins", "value": "2.60.3.1" }, { "name": "X-Jenkins-CLI2-Port", "value": "38845" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "X-Jenkins-CLI-Host", "value": "buildmaster1002" }, { "name": "Content-Length", "value": "4824" }, { "name": "X-Hudson-CLI-Port", "value": "38845" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "X-Frame-Options", "value": "sameorigin" }, { "name": "Content-Type", "value": "text/html;charset=UTF-8" }, { "name": "Cache-Control", "value": "no-cache,no-store,must-revalidate" }, { "name": "X-Instance-Identity", "value": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArANgWVG/wWb5RRiBQRgvFxTHs9ZiNUJKSezXRAH7J4ervbvco97pjTqkvgkXL0oYqzkJ8XrnJK6T7mzCDqJAituWf7T3ppOrWThfDeid1+/gL3lejTjx8g4HiQf7B7C0rSnsupHKWIIw5NXA4r1VRgHOo5MqiiTyPntz2QL/YP7W9ldshqC8xGcd2zsChytiR1pgHLpVnLlKkbeAaPB3CYYlIJ7+eW1pDo6/HgczNqqPq6kHMSGiiNiFpZhE/ZmWOac94O05cIQFmR4YITvnpqEaPJxavzXIxctHpWoROcwW9s4VUgx4ONAD/o3iHbwZ/B0Feo7AA9+cZG0FGO9M0wIDAQAB" }, { "name": "Keep-Alive", "value": "timeout=5, max=98" }, { "name": "X-Jenkins-Session", "value": "de2efad2" }, { "name": "X-Hudson-Theme", "value": "default" }, { "name": "Expires", "value": "0" } ], "cookies": [], "content": { "size": 17079, "mimeType": "text/html", "compression": 0, "text": "\n\n\n\n\n \n \n \n\n slave-it0400 [Jenkins]Skip to content
 
1Idle
2Idle
3Idle

\n Agent slave-it0400\n (slave slave-it0400.int.devsnc.com added automatically by /opt/serviceNow/chefInstalled/bin/slave_master_connector.sh on 19/10/2017)

\n Created by \n system.swarm

Labels

Projects tied to slave-it0400

None

" }, "redirectURL": "", "headersSize": 976, "bodySize": 17079, "_transferSize": 18055 }, "cache": {}, "timings": { "blocked": 2.5119999665767, "dns": -1, "ssl": -1, "connect": -1, "send": 0.16500009223818024, "wait": 241.70099990442395, "receive": 0, "_blocked_queueing": -1 }, "serverIPAddress": "52.10.180.58", "connection": "1232145", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:10.917Z", "time": 55.792121999314986, "request": { "method": "POST", "url": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/ajaxExecutors", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Origin", "value": "https://buildmaster-alpha.devsnc.com" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "X-Prototype-Version", "value": "1.7" }, { "name": "X-Requested-With", "value": "XMLHttpRequest" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Content-Length", "value": "0" }, { "name": "Pragma", "value": "no-cache" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Content-type", "value": "application/x-www-form-urlencoded; charset=UTF-8" }, { "name": "Accept", "value": "text/javascript, text/html, application/xml, text/xml, */*" }, { "name": "Cache-Control", "value": "no-cache" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "DNT", "value": "1" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 1130, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:10 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "text/html;charset=UTF-8" }, { "name": "Cache-Control", "value": "no-cache,no-store,must-revalidate" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Keep-Alive", "value": "timeout=5, max=99" }, { "name": "Content-Length", "value": "379" } ], "cookies": [], "content": { "size": 1007, "mimeType": "text/html", "compression": 628 }, "redirectURL": "", "headersSize": 309, "bodySize": 379, "_transferSize": 688 }, "cache": {}, "timings": { "blocked": 2.879122028476563, "dns": -1, "ssl": -1, "connect": -1, "send": 0.18799991812556982, "wait": 52.25200008135288, "receive": 2.472999971359968, "_blocked_queueing": 1.1220000451430678 }, "serverIPAddress": "52.10.180.58", "connection": "1232145" }, { "startedDateTime": "2017-11-30T19:20:11.865Z", "time": 531.8463969690492, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/static/de2efad2/css/layout-common.css", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 902, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:11 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:03 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "text/css" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=97" }, { "name": "Content-Length", "value": "1266" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:11 GMT" } ], "cookies": [], "content": { "size": 2926, "mimeType": "text/css", "compression": 1660, "text": "/*\n * The MIT License\n *\n * Copyright (c) 2016, CloudBees, Inc.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\nhtml {\n position: relative;\n min-height: 100%;\n}\n\nbody {\n margin: 0;\n padding: 0 0 40px 0;\n}\n\n/* --------------- header --------------- */\n\n#header {\n background-color: #000000;\n height: 40px;\n}\n\n#header div {\n display: inline-block;\n height: inherit;\n}\n\n#header .logo {\n margin-left: 16px;\n}\n\n#jenkins-home-link {\n position: absolute;\n height: 40px;\n}\n\n#jenkins-head-icon {\n position: absolute;\n bottom: 0px;\n}\n\n#jenkins-name-icon {\n position: absolute;\n bottom: 3px;\n left: 32px;\n}\n\n#header .searchbox, #header .login {\n float: right;\n padding: 6px 11px;\n}\n\n#breadcrumbBar, #footer-container, .top-sticker-inner {\n background-color: #f6faf2;\n}\n\n/* -------------------------------------- */\n\n#page-body.clear:after {\n clear: both;\n content: \"\";\n display: table;\n}\n\n#side-panel {\n padding: 15px 15px 40px 15px;\n float: left;\n width: 320px;\n}\n\n#main-panel {\n padding: 15px 15px 40px 15px;\n}\n\nbody.two-column #main-panel {\n margin-left: 320px;\n}\n\nbody.full-screen {\n padding: 0;\n}\n\nbody.full-screen #main-panel {\n padding: 0;\n}\n\n@media (max-width: 970px) {\n body.two-column #side-panel {\n width: 100%;\n float: none;\n padding-bottom: 20px;\n }\n\n body.two-column #main-panel {\n margin-left: 0;\n }\n}\n\n@media (min-width: 1170px) {\n body.two-column #side-panel {\n width: 360px;\n }\n\n body.two-column #main-panel {\n margin-left: 360px;\n }\n}\n\n/* --------------- footer --------------- */\n\nfooter {\n padding: 11px 0;\n background-color: #f6faf2;\n border-top: 1px solid #d3d7cf;\n border-bottom: 1px solid #f6faf2;\n width: 100%;\n position: absolute;\n bottom: 0;\n left: 0;\n clear: both;\n font-size: 12px;\n text-align: right;\n}\n\nfooter span {\n margin-left: 15px;\n line-height: 14px;\n}\n\n/* -------------------------------------- */\n" }, "redirectURL": "", "headersSize": 353, "bodySize": 1266, "_transferSize": 1619 }, "cache": {}, "timings": { "blocked": 14.455396931036352, "dns": -1, "ssl": -1, "connect": -1, "send": 0.2430001040921006, "wait": 68.14599991776048, "receive": 451.0020000161603, "_blocked_queueing": 1.3970000436529517 }, "serverIPAddress": "52.10.180.58", "connection": "1232145", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:11.865Z", "time": 533.960143993143, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/static/de2efad2/css/style.css", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 894, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:11 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:02 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "text/css" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=100" }, { "name": "Content-Length", "value": "9086" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:11 GMT" } ], "cookies": [], "content": { "size": 37957, "mimeType": "text/css", "compression": 28871, "text": "/*\n * The MIT License\n * \n * Copyright (c) 2004-2010, Sun Microsystems, Inc., Kohsuke Kawaguchi, Daniel Dyer, Stephen Connolly\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n/* task */\n\n#tasks {\n margin-bottom: 20px;\n}\n\n#tasks .task {\n margin-bottom: 4px;\n font-size: 14px;\n white-space: nowrap;\n}\n\n/* buildQueue */\n\n#buildQueue {\n margin-bottom: 20px;\n}\n\n/* Fonts etc */\n\nbody, table, form, input, td, th, p, textarea, select\n{\n font-family: Helvetica, Arial, sans-serif;\n font-size: 13px;\n line-height:1.4em;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n@media (min-width:1600px){\n body#jenkins.j-hide-left #main-panel{max-width:75%}\n body, table, form, input, td, th, p, textarea, select, #tasks .task\n {font-size:14px;} \n}\n@media (min-width:2000px){\n body#jenkins.j-hide-left #main-panel{max-width:85%}\n body, table, form, input, td, th, p, textarea, select, #tasks .task\n {font-size:15px;} \n}\nbody, table, form, td, th, p\n{\n color: #333;\n}\n\nform {\n margin: 0;\n}\n\ntd {\n vertical-align: top;\n}\n\ndt {\n font-weight: bold;\n}\n\n.fixed-width {\n font-family: monospace;\n}\n\n.center {\n text-align: center;\n}\n\n.middle-align td, td.middle-align {\n vertical-align: middle;\n}\n\n.center-align td, td.center-align {\n text-align: center;\n}\n\n.no-wrap td, td.no-wrap {\n white-space: nowrap;\n}\n\n#main-table {\n padding: 0;\n border-collapse: collapse;\n}\n\n#top-panel {\n margin-bottom: 3pt;\n height: 34px;\n background: url(../images/topbar.png) repeat-x;\n}\n#top-panel a {\n text-decoration: none;\n}\n\n.skiplink {\n position: absolute;\n left: -20000px;\n}\n\n#shutdown-msg {\n font-weight: bold;\n color: white;\n background-color: #ef2929;\n text-align: center;\n margin-left: 2em;\n margin-right: 2em;\n margin-bottom: 0.5em;\n padding: 0.5em;\n -moz-border-radius: 0.5em;\n}\n\n#header .login {\n position: relative;\n top: 6px;\n color: white;\n margin-right: 10px;\n}\n\n#header .login a, #header .login a:visited {\n color: white;\n text-decoration: none;\n}\n\n#header .login a:hover {\n text-decoration: underline;\n color: #ccc;\n}\n\na:link {\n text-decoration: underline;\n color: #204A87;\n}\n\na:visited {\n text-decoration: underline;\n color: #5c3566;\n}\n\na.lowkey:link {\n text-decoration: none;\n color: inherit;\n}\n\na.lowkey:hover {\n text-decoration: underline;\n color: inherit;\n}\n\na.lowkey:visited {\n text-decoration: none;\n color: inherit;\n}\n\n/* tip - anchors of class info */\na.tip {\n position:relative;\n z-index:24;\n text-decoration: underline;\n}\n\na.tip:hover {\n z-index:25;\n}\n\na.tip span {\n display: none\n}\n\na.tip:hover span {\n display:block;\n position:absolute;\n top:2em;\n left:2em;\n width:400px;\n border:1px solid #bbbbbb;\n background-color:#fffff0;\n color:#000;\n text-align: left\n}\n\n.call-to-action {\n display: inline-block;\n padding: 10px;\n background-color: #cdf0f2;\n border-left: 4px solid #577baa;\n}\n\n.call-to-action a, .call-to-action a:visited {\n color: #000000;\n font-weight: bold;\n font-size: larger;\n}\n\nimg {\n vertical-align: middle;\n border: 0;\n}\n\ndiv.disabled {\n opacity : 0.4;\n filter: alpha(opacity=40); /* msie */\n background-color: #000;\n}\n\ntable.tab {\n border-collapse: collapse;\n}\n\ntd.selected_tab {\n vertical-align: middle;\n border: 1px #090 solid;\n background: #ffffff;\n}\n\ntd.tab_filler {\n background: #ffffff;\n border-bottom: 1px #090 solid;\n}\n\ntd.tab {\n vertical-align: middle;\n border: 1px #090 solid;\n background: #f0f0f0;\n}\n\n.dashboard td {\n padding: 4px 4px 4px 4px;\n}\n\npre {/* see http://users.tkk.fi/tkarvine/pre-wrap-css3-mozilla-opera-ie.html */\n white-space: pre-wrap; /* css-3 */\n white-space: -moz-pre-wrap; /* Mozilla, since 1999 */\n white-space: -pre-wrap; /* Opera 4-6 */\n white-space: -o-pre-wrap; /* Opera 7 */\n word-wrap: break-word; /* Internet Explorer 5.5+ */\n margin: 0;\n}\n\npre a {\n word-wrap: break-word; \n}\n\npre.console {\n overflow: auto;\n}\n\n.setting-leftspace {\n width: 2em;\n}\n\n.setting-name {\n white-space: nowrap;\n}\n\n.setting-main {\n width: 100%; /* try to make this column as big as possible. */\n}\n.setting-help {\n width: 16px;\n vertical-align: middle;\n}\n.setting-no-help {\n width: 16px;\n}\n\n.setting-input {\n width: 100%;\n border-radius: 3px;\n border: 1px solid #ccc;\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n padding: 6px;\n box-sizing: border-box;\n -webkit-box-sizing:border-box;\n -moz-box-sizing: border-box;\n}\n\n.setting-description {\n font-size: 0.8em;\n margin-top: 0;\n padding-top: 0;\n}\n\n/* tabBar */\n\n.tabBar {\n overflow: auto;\n position: relative;\n top: 1px;\n}\n.tabBar .tab {\n float: left;\n margin-left: 3px;\n}\n.tabBar .tab:first-child {\n margin-left: 15px;\n}\n.tabBar .tab a {\n position: relative;\n display: block;\n border: solid 1px #f0f0f0;\n border-bottom: none;\n text-decoration: none;\n color: #999;\n padding: 7px 10px;\n border-top-left-radius: 5px;\n border-top-right-radius: 5px;\n}\n.tabBar .tab a:hover {\n background: #eee;\n}\n.tabBar .tab a.addTab {\n font-weight: bold;\n color: #0460d1;\n border: 1px solid #d8efff;\n border-bottom: none;\n}\n.tabBar .tab a.addTab:hover {\n background: #d8efff;\n}\n.tabBar .tab [type=radio] {\n display: none;\n}\n.tabBar [type=radio]:checked ~ a {\n border: solid 1px #f0f0f0;\n border-bottom: none;\n background: #eee;\n color: #000;\n font-weight: bold;\n z-index: 2;\n}\n.tabBarBaseline {\n border-top: 1px solid #f0f0f0;\n z-index: 1;\n}\n\n.tabBarBaseline {\n display: none; /* Baseline is hidden by default. See next rule fo adding visibility. */\n}\n.tabBarFrame.showBaseline .tabBarBaseline {\n display: block;\n}\n\n/* div that looks like a hyperlink */\n.pseudoLink {\n cursor: pointer;\n}\n\n.advancedLink {\n text-align: right;\n}\n\n.advancedBody {\n display: none;\n}\n\n.scm_info {\n width: 480px;\n}\n\n.build-keep {\n font-weight: bold;\n}\n\n.task-header {\n display: block;\n border-bottom: 1px #090 solid;\n font-weight: bold;\n font-size: 12pt;\n}\n\n#jenkins .task-link {\n text-decoration: none;\n}\n\n#jenkins .task-link:hover {\n text-decoration: underline;\n}\n\n.task {\n white-space: nowrap;\n}\n\n.subtasks {\n padding-left: 1em;\n}\n\n.main-table {\n}\n\n/* pane */\n\n.pane-frame {\n border: solid 1px #f0f0f0;\n border-radius: 4px;\n}\n\n#side-panel .pane-frame:hover, #side-panel .pane-frame.mouseover {\n border: solid 1px #cecece;\n}\n\n.pane-header, .pane-footer {\n padding: 8px 0px;\n background-color: #eee;\n border: solid 1px #f3f3f3;\n border-left: none;\n border-right: none;\n color: #3b3b3b;\n}\n.pane-header {\n border-top: none;\n border-top-left-radius: 4px;\n border-top-right-radius: 4px;\n}\n.pane-footer {\n border-bottom: none;\n border-bottom-left-radius: 4px;\n border-bottom-right-radius: 4px;\n}\n\n.pane td {\n padding: 4px 4px 3px 4px;\n vertical-align: middle;\n}\n\ntable.pane {\n width: 100%;\n border-collapse: collapse;\n border: 1px #bbb solid;\n}\n\ntd.pane {\n padding: 3px 4px 3px 4px;\n vertical-align: middle;\n}\n\ntable.stripped tr:nth-child(even) {\n background: #fbfbfb;\n}\ntable.stripped-even tr:nth-child(even) {\n background: #fbfbfb;\n}\ntable.stripped-odd tr:nth-child(odd) {\n background: #fbfbfb;\n}\ntable.stripped tr:hover, table.stripped-even tr:hover, table.stripped-odd tr:hover {\n background: #e8e8e8 !important;\n}\n\ndiv.pane-header {\n font-weight: bold;\n padding-right: 24px;\n}\n\ndiv.pane-header .collapse {\n float: right;\n margin-left: 3px;\n}\n\nth.pane {\n font-weight: bold;\n}\n\n/* executors */\n\n#executors th.pane {\n text-align: left;\n padding: 12px 5px 5px 5px;\n}\n\n#executors th.pane a {\n text-decoration: none;\n}\n\n/* bigtable */\n\n.bigtable tr {\n border: 1px solid #bbb;\n padding: 3px 4px 3px 4px;\n}\ntable.bigtable.pane > tbody > tr > td:last-child {\n border-right: none;\n}\n\n.pane-frame table, .pane-frame .bigtable tr {\n border: none; /* Border will be provided by the pane-frame */\n}\n\n.bigtable th {\n font-weight: bold;\n border: none;\n background-color: #f0f0f0;\n padding: 6px 4px;\n white-space: nowrap;\n}\n\n.bigtable td {\n vertical-align: middle;\n padding: 3px 4px 3px 4px;\n}\n\n.smallfont {\n font-size: 9px;\n}\n\n#foldertab {\n padding: 4px 0;\n margin-left: 0;\n border-bottom: 1px solid #090;\n font: bold 12px Helvetica, Arial, sans-serif;\n}\n\n#foldertab li {\n list-style: none;\n margin: 0;\n display: inline;\n}\n\n#foldertab li a {\n padding: 4px 0.5em;\n margin-left: 3px;\n border: 1px solid #090;\n border-bottom: none;\n background: #090;\n text-decoration: none;\n}\n\n#foldertab li a:link { color: white; }\n#foldertab li a:visited { color: white; }\n\n#foldertab li a:hover {\n color: white;\n background: #6c0;\n border-color: #6c0;\n}\n\n#foldertab li a#current {\n background: white;\n border-bottom: 1px solid white;\n color: black;\n}\n\n.changeset-message {\n border: 1px solid #ccb;\n background: #eed;\n padding: 4px;\n white-space: normal;\n}\n\n.disabledJob {\n color: gray;\n}\n\n.spinner {\n padding-left: 32px;\n padding-top: 0.5em;\n padding-bottom: 0.5em;\n background-image: url(\"../images/spinner.gif\");\n background-repeat: no-repeat;\n background-position: left;\n}\n\n.spinner-right {\n padding-right: 32px;\n padding-top: 0.5em;\n padding-bottom: 0.5em;\n background-image: url(\"../images/spinner.gif\");\n background-repeat: no-repeat;\n background-position: right;\n}\n\n#login-field {\n vertical-align: middle;\n padding-right: 1em;\n width:1px;\n}\n\n#login-field SPAN {\n white-space:nowrap;\n color: white;\n}\n\n#login-field A {\n /*\n link inside login field should be always white.\n If I set this to inherit, it won't work in IE7\n */\n color: white;\n}\n\ndiv.behavior-loading {\n position: absolute;\n left:0; right:0;\n width:100%;\n height:100%;\n background-color: #e4e4e4; text-align: center; font-size: 300%;\n opacity: 0.5;\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)\";\n filter: alpha(opacity=50);\n}\n\n.config div.behavior-loading{\n background: rgba(255,255,255,.85);\n left: 0;\n width:100%;\n right: 0;\n top: 15px;\n bottom: 0px;\n height: 100%;\n width: auto;\n min-height: 100%;\n -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)\";\n filter: alpha(opacity=100);\n font-size: 1.5em;\n z-index: 99;\n opacity: 1;\n color: #999;\n text-shadow:#fff 0 0 5px,#fff 0 0 5px,#fff 0 0 5px,#fff 0 0 5px,#fff 0 0 5px\n}\n\n.behavior-loading:before {\n content:' ';\n display:block;\n width: 100px;\n height: 100px;\n margin: 200px auto 25px;\n background-color: rgba(0,0,0,.15);\n border:5px solid rgba(0,0,0,.33);\n position:relative;\n z-index:2;\n border-radius: 100%;\n -webkit-animation: sk-scaleout 1.0s infinite ease-in-out;\n animation: sk-scaleout 1.0s infinite ease-in-out;\n box-shadow:#fff 0 0 0 10px\n}\n\n@-webkit-keyframes sk-scaleout {\n 0% { -webkit-transform: scale(0) }\n 100% {\n -webkit-transform: scale(1.0);\n opacity: 0;\n }\n}\n\n@keyframes sk-scaleout {\n 0% {\n -webkit-transform: scale(0);\n transform: scale(0);\n } 100% {\n -webkit-transform: scale(1.0);\n transform: scale(1.0);\n opacity: 0;\n }\n}\n\nLABEL.attach-previous {\n margin-left: 0.5em;\n}\n\n.bottom-sticker, #bottom-sticker {\n width: 100%; /* it needs to occupy the entire width or else the underlying content will see through */\n}\n.bottom-sticker-inner {\n background: white;\n padding: 1em 0;\n}\n.bottom-sticker-edge {\n height:16px;\n background-image: url(\"../images/bottom-sticker-top-edge.png\");\n background-repeat: repeat-x;\n}\n\n.top-sticker, #top-sticker {\n width: 100%; /* it needs to occupy the entire width or else the underlying content will see through */\n z-index: 999;\n}\n.top-sticker-inner {\n padding:1em;\n}\n.top-sticker-edge {\n height:16px;\n background-image: url(\"../images/top-sticker-bottom-edge.png\");\n background-repeat: repeat-x;\n}\n.top-sticker.noedge > .top-sticker-edge {\n display: none;\n}\n\n.top-sticker.noedge > .top-sticker-inner {\n padding:0;\n}\n\n\n/* ======================== error/warning message (mainly in the form.) Use them on block elements ======================== */\n.error {\n color: #CC0000;\n font-weight: bold;\n padding-left: 20px;\n min-height: 16px;\n line-height: 16px;\n background-image: url(\"../images/16x16/error.png\");\n background-position: left center;\n background-repeat: no-repeat;\n}\n\n.error-inline {\n color: #CC0000;\n font-weight: bold;\n}\n\n.warning {\n color: #C4A000;\n font-weight: bold;\n padding-left: 20px;\n min-height: 16px;\n line-height: 16px;\n background-image: url( \"../images/16x16/warning.png\" );\n background-position: left center;\n background-repeat: no-repeat;\n}\n\n.warning-inline {\n color: #C4A000;\n font-weight: bold;\n}\n\n.info {\n color: black;\n font-weight: bold;\n padding-left: 20px;\n min-height: 16px;\n background-image: url( \"../images/16x16/go-next.png\" ); /* TODO: get a better icon */\n background-position: left center;\n background-repeat: no-repeat;\n}\n\n.icon16x16 {\n width: 16px;\n height: 16px;\n}\n\n.icon24x24 {\n width: 24px;\n height: 24px;\n}\n\n.icon32x32 {\n width: 32px;\n height: 32px;\n}\n\n/* ====================== help ===================================== */\n\n.help {\n display: none; /* hidden until loaded */\n border: solid #bbb 1px;\n background-color: #f0f0f0;\n padding: 1em;\n margin-bottom: 1em;\n}\n\n.help .from-plugin {\n text-align: right;\n color: #666;\n}\n\n.help-area {\n /* this marker class is used by JavaScript to locate the area to display help text. */\n}\n\n\n/* ====================== project view tab bar ===================================== */\n#viewList {\n border: none;\n margin-bottom: 0px;\n width: 100%;\n white-space: nowrap;\n}\n#viewList td {\n padding: 0px;\n}\n#viewList td.inactive {\n border: solid 1px #ccc;\n border-bottom-color: #bbb;\n}\n#viewList td.inactive:hover {\n background-color: #777;\n}\n#viewList td.inactive a {\n text-decoration: none;\n color: #444;\n}\n#viewList td.inactive a:hover {\n color: #f1f1f1;\n}\n#viewList td.noleft {\n border-left: none;\n}\n#viewList td.noright {\n border-right: none;\n}\n#viewList td.active {\n border: solid 1px #bbb;\n padding: 0.5em;\n border-bottom: none;\n vertical-align:middle;\n background-color: rgb(240,240,240);\n font-weight: bold;\n white-space: nowrap;\n}\n#viewList td.filler {\n border: none;\n border-bottom: solid 1px #bbb;\n width: 100%;\n text-align: right;\n}\n#viewList a {\n display: block;\n padding: 0.5em;\n white-space: nowrap;\n}\n\n#projectstatus .header {\n border-bottom: 1px solid #ddd;\n}\n#projectstatus th {\n text-align: left;\n padding: 7px 0px;\n}\n#projectstatus tbody tr:first-child th:first-child {\n border-top-left-radius: 4px;\n}\n#projectstatus tbody tr:first-child th:last-child {\n border-top-right-radius: 4px;\n}\n#projectstatus tbody tr:last-child td:first-child {\n border-bottom-left-radius: 4px;\n}\n#projectstatus tr:last-child td:last-child {\n border-bottom-right-radius: 4px;\n}\n\n/* ============================ list view entries ======================== */\ndiv.listview-jobs {\n max-height:300px;\n overflow:auto;\n}\n\n/* ============================ parameters form ========================== */\n\ntable.parameters {\n border-collapse: collapse;\n}\n\ntable.parameters > tbody > tr:first-child > td {\n padding-top: 4px;\n}\n\ntable.parameters .setting-description {\n padding-bottom: 4px;\n}\n\ntable.parameters > tbody:hover {\n background-color: #f0f0f0;\n}\n\n/* ============================ health report hover ========================== */\n\n.healthReport a {\n text-decoration: none;\n}\n\n.healthReport div.healthReportDetails {\n display: none;\n}\n\n.healthReport:hover, .healthReport.hover { /* fix IE6 bug with :hover */\n background: transparent;\n}\n\n.healthReport:hover div.healthReportDetails, .healthReport.hover div.healthReportDetails {\n display: block;\n position: absolute;\n background-color: #ffe;\n border: 1px solid #bbb;\n margin-left: 32px; /* move it across a bit */\n z-index: 26;\n}\n\n.healthReport div.healthReportDetails table {\n border-collapse: collapse;\n width: 450px; /* fix IE bug with width */\n}\n\n/* ========================= build history ========================= */\n#buildHistory .healthReport {\n display: inline;\n margin-right: 1em;\n}\n\n#buildHistory tr.no-wrap td.middle-align {\n padding: 0;\n}\n\n#buildHistory .desc {\n position: relative;\n padding: 0;\n margin-top: 5px;\n white-space: normal;\n opacity: 0.6;\n}\n\n#buildHistory .build-row-cell {\n position: relative;\n}\n\n#buildHistory .build-rss-links {\n float: right;\n}\n\n#buildHistoryPage {\n position: relative;\n}\n\n#buildHistoryPage .build-search-row td {\n position: relative;\n}\n#buildHistoryPage .build-search-row .clear {\n position: absolute;\n padding: 0px 4px;\n cursor: pointer;\n top: 7px;\n right: 6px;\n opacity: 0.5;\n}\n#buildHistoryPage .build-search-row .clear:hover {\n background-color: #d3d3d3;\n border: 1px solid #bbb;\n top: 6px;\n padding-right: 3px;\n border-top-right-radius: 2px;\n}\n#buildHistoryPage .build-search-row input {\n width: 100%;\n padding-left: 5px;\n padding-right: 20px;\n}\n#buildHistoryPage .build-search-row table {\n width: 100%;\n}\n#buildHistoryPage .build-search-row .build-search-help {\n width: 20px;\n}\n#buildHistoryPage .build-search-row .icon-help {\n position: absolute;\n cursor: pointer;\n top: 6px;\n}\n\n#buildHistoryPageNav {\n position: absolute;\n right: -21px;\n top: 41px;\n border: 1px solid;\n border-top-right-radius: 4px;\n border-bottom-right-radius: 4px;\n visibility: hidden;\n}\n\n#buildHistoryPageNav .nav {\n width: 16px;\n height: 16px;\n background: no-repeat;\n background-position: center;\n background-size: 16px 16px;\n margin: 4px 2px;\n cursor: pointer;\n}\n\n#buildHistoryPageNav.mouseOverSidePanel {\n visibility: visible;\n border-color: #f0f0f0 !important;\n}\n#buildHistoryPageNav.mouseOverSidePanelBuildHistory {\n border-color: #bbb !important;\n}\n#buildHistoryPageNav:hover {\n border-color: #bbb !important;\n}\n\n#buildHistoryPageNav .pageOne {\n background-image: url(../images/16x16/go_top.png);\n}\n#buildHistoryPageNav .pageUp {\n background-image: url(../images/16x16/go_up.png);\n}\n#buildHistoryPageNav .pageDown {\n background-image: url(../images/16x16/go_down.png);\n}\n#buildHistoryPageNav .find {\n background-image: url(../images/16x16/find.png);\n}\n\n.build-row {\n padding: 3px 4px 3px 4px;\n}\n\n.build-row.model-link-active {\n background: #e8e8e8 !important;\n}\n\n.build-row-cell {\n font-size: 12px;\n}\n\n.build-row-cell .pane.build-name {\n width: 25%;\n font-weight: bold;\n vertical-align: top;\n}\n.build-row-cell .pane.build-details {\n width: 50%;\n}\n.build-row-cell .pane.build-controls {\n width: 25%;\n text-align: right;\n}\n.build-row-cell .pane.build-details.block {\n width: 100%;\n}\n\n.pane.build-name a,\n.pane.build-name a:visited {\n color: black;\n text-decoration: underline;\n}\n\n.pane.build-details a,\n.pane.build-details a:visited {\n color: black;\n opacity: 0.6;\n text-decoration: none;\n}\n.pane.build-details a:hover {\n opacity: 1.0;\n text-decoration: underline;\n}\n\n.build-row.multi-line .build-row-cell .pane.build-name.block {\n width: 100%;\n}\n.build-row-cell .pane.build-controls.block {\n width: 100%;\n}\n\n.build-row-cell .pane.build-name .build-icon,\n.build-row-cell .pane.build-name .display-name {\n display: inline-block;\n}\n.build-row-cell .pane.build-name .build-icon {\n position: absolute;\n}\n\n.build-row-cell .build-stop {\n display: inline-block;\n width: 30%;\n}\n.build-row-cell .build-badge {\n display: inline-block;\n text-align: right;\n width: 70%;\n padding: 2px 0;\n}\n.build-row-cell .build-badge > span {\n display: inline-block;\n max-width: 256px;\n padding: 0 1px;\n overflow: hidden;\n}\n.build-row-cell .build-badge > span + span {\n margin: 0 0 0 2px !important;\n}\n@media (min-width: 1170px) {\n .build-row-cell .build-badge > span {\n max-width: 296px;\n }\n}\n\n.build-row .build-name-controls .pane.build-name,\n.build-row .build-details-controls .pane.build-details {\n width: 70%;\n}\n\n.build-row .build-row-cell .pane {\n padding: 0px 2px; /* Sync changes with func expandControlsTo50Percent in hudson-behavior.js */\n display: inline-block;\n overflow: hidden;\n}\n\n.build-row.multi-line .build-row-cell .block {\n display: block;\n overflow: auto;\n}\n\n.build-row.multi-line .build-row-cell .indent-multiline {\n margin-top: 5px;\n}\n\n.build-row.multi-line .build-row-cell .left-bar {\n position: absolute;\n top: 19px;\n bottom: 3px;\n left: 14px;\n border-left: 1px solid #cdcdcd;\n}\n\n.build-row-cell .pane.build-name .display-name {\n margin-left: 20px;\n}\n\n.build-row-cell .indent-multiline {\n padding-left: 20px !important; /* Sync changes with func expandControlsTo50Percent in hudson-behavior.js */\n}\n\n.build-row .build-row-cell {\n /*visibility: hidden;*/\n}\n.build-row.overflow-checked .build-row-cell {\n visibility: visible;\n}\n\n/* ================ Element overflow calculation helper styles ================ */\n\n.force-wrap, .force-wrap a {\n white-space: normal !important;\n overflow: visible !important;\n}\n.force-nowrap, .force-nowrap a {\n white-space: nowrap !important;\n overflow: hidden !important;\n}\n\n/* ========================= editable combobox style ========================= */\n.comboBoxList {\n border: 1px solid #000;\n overflow: visible;\n background-color: white;\n color: black;\n}\n.comboBoxSelectedItem {\n background-color: Highlight;\n color: HighlightText;\n}\n.combobox-values {\n display: none;\n}\n\n\n/* ========================= directory tree ========================= */\n.parentPath {\n font-size: 1.2em;\n font-weight: bold;\n}\n\n.dirTree li {\n list-style: none;\n}\n\n.dirTree .rootIcon {\n margin-right: 1em;\n}\n\nTABLE.fileList {\n margin-left: 2em;\n padding: 0;\n}\n\nTABLE.fileList TD {\n padding: 0;\n}\n\nTABLE.fileList TD.fileSize {\n padding-left: 2em;\n text-align: right;\n color: #888;\n}\n\n\n\n/* ========================= test result ========================= */\n.result-passed {\n color: #3465a4;\n}\n\n.result-skipped {\n color: #ddbb00;\n}\n\n.result-fixed {\n color: #3465a4;\n font-weight: bold;\n}\n\n.result-failed {\n color: #ef2929;\n}\n\n.result-regression {\n color: #ef2929;\n font-weight: bold;\n}\n.test-trend-caption {\n text-align: center;\n font-size: 1.2em;\n font-weight: bold;\n}\n\n\n\n/* ========================= sortable table ========================= */\ntable.sortable a.sortheader {\n text-decoration: none;\n color: black;\n display: block;\n}\ntable.sortable span.sortarrow {\n color: black;\n text-decoration: none;\n}\n\n\n\n\n/* ========================= fingerprint ========================= */\n.md5sum {\n text-align: right;\n}\n\n.fingerprint-summary-header {\n font-size: 1.2em;\n vertical-align: middle;\n}\n\nTABLE.fingerprint-in-build TD {\n padding-left: 1em;\n padding-right: 1em;\n}\n\n\n\n\n/* ========================= plugin manager ========================= */\n#plugins {\n margin-top: 0;\n border-top: none;\n}\n\n#pluginsAdv tr:hover {\n background-color: inherit;\n}\n\n#plugins tr.already-upgraded {\n background-color: #e8eeee;\n}\n\n#plugins input.uninstall {\n font-size: 11px;\n padding: 3px 5px;\n border-radius: 1px;\n font-family: Helvetica, Arial, sans-serif;\n font-weight: bold;\n background-color: #4b758b;\n color: #eee;\n border: 1px solid #5788a1;\n}\n\n#plugins tr.has-dependants input.uninstall {\n background-color: #e0e0e0;\n border: 1px solid #cccccc;\n color: #505050;\n background-color: white;\n}\n\n#plugins tr.all-dependants-disabled .enable input {\n pointer-events: auto;\n opacity: 1.0;\n visibility: visible;\n}\n\n#plugins tr.has-dependants input, #plugins tr.has-disabled-dependency .enable input {\n pointer-events: none;\n opacity: 0.2;\n}\n\n#plugins tr.has-dependants-but-disabled .enable input {\n pointer-events: auto;\n opacity: 1.0;\n visibility: visible;\n}\n\n#plugins tr.has-disabled-dependency .enable input {\n opacity: 0.4;\n}\n\n#plugins tr.deleted input {\n visibility: hidden !important;\n}\n\n#plugins .dependant-list, #plugins .dependency-list {\n display: none;\n}\n\n#plugins .enable-state-info, #plugins .uninstall-state-info {\n padding: 5px 20px;\n max-width: 70%;\n border: solid 1px #f0ad4e;\n border-radius: 3px;\n text-align: center;\n}\n\n#plugins .enable-state-info {\n float: left;\n}\n\n#plugins .uninstall-state-info {\n float: right;\n}\n\n#plugins .plugin-dependency-info .title, #plugins .plugin-dependency-info .subtitle {\n opacity: 0.7;\n}\n#plugins .plugin-dependency-info .title {\n margin-bottom: 5px;\n font-size: larger;\n font-weight: bolder;\n}\n\n#plugins .plugin-dependency-info span {\n margin: 5px 5px 0px 0px;\n background-color: #337ab7;\n display: inline-block;\n padding: .2em .6em .3em;\n font-size: 75%;\n font-weight: 700;\n line-height: 1;\n color: #fff;\n text-align: center;\n white-space: nowrap;\n vertical-align: baseline;\n border-radius: .25em;\n}\n\n/* ========================= repeatable elements ========================= */\n\n.repeated-chunk {\n border: 2px dashed transparent;\n}\n\n.repeated-chunk.hover {\n border-color: #CCC;\n}\n\n.repeated-chunk .show-if-last { visibility: hidden; }\n.repeated-chunk.last .show-if-last { visibility: visible; }\n\n.repeated-chunk .show-if-not-last { visibility: visible; }\n.repeated-chunk.last .show-if-not-last { visibility: hidden; }\n\n.repeated-chunk .show-if-not-only { visibility: visible; }\n.repeated-chunk.only .show-if-not-only { visibility: hidden; }\n\n/* == nested repeatable elements / 2 deep == */\n.repeated-chunk .repeated-chunk .show-if-last { visibility: hidden; }\n.repeated-chunk .repeated-chunk.last .show-if-last { visibility: visible; }\n\n.repeated-chunk .repeated-chunk .show-if-not-last { visibility: visible; }\n.repeated-chunk .repeated-chunk.last .show-if-not-last { visibility: hidden; }\n\n.repeated-chunk .repeated-chunk .show-if-not-only { visibility: visible; }\n.repeated-chunk .repeated-chunk.only .show-if-not-only { visibility: hidden; }\n\n/* == nested repeatable elements / 3 deep == */\n.repeated-chunk .repeated-chunk .repeated-chunk .show-if-last { visibility: hidden; }\n.repeated-chunk .repeated-chunk .repeated-chunk.last .show-if-last { visibility: visible; }\n\n.repeated-chunk .repeated-chunk .repeated-chunk .show-if-not-last { visibility: visible; }\n.repeated-chunk .repeated-chunk .repeated-chunk.last .show-if-not-last { visibility: hidden; }\n\n.repeated-chunk .repeated-chunk .repeated-chunk .show-if-not-only { visibility: visible; }\n.repeated-chunk .repeated-chunk .repeated-chunk.only .show-if-not-only { visibility: hidden; }\n\n/*\n
s marked with to-be-removed is used in conjunction with repeatable.jelly and hetero-list.jelly\n and represents a master copy that gets pulled out from HTML, then inserted later upon demand multiple times\n when the user does \"Add\".\n*/\nDIV.to-be-removed { display: none; }\n\n/* ========================= Other form related CSS ========================= */\n\n.row-set-end { display: none; }\n\n/* ========================= Yahoo UI style adjustments ========================= */\n.ygtvlabel, .ygtvlabel:link, .ygtvlabel:visited, .ygtvlabel:hover {\n color: inherit;\n}\n\nDIV.yahooTree td {\n vertical-align: middle;\n}\n\n.yui-tt {\n border: 1px solid black !important;\n background-color: #FFFFFF !important;\n padding: 2px !important;\n font-family: inherit !important;\n color: inherit !important;\n}\n\n.yui-skin-sam .yui-tt .bd {\n border: none !important;\n background-color: #FFF !important;\n}\n\n.yuimenu LI .yui-menu-tooltip {\n color: #A6A6A6;\n}\n\n.yuimenu LI.yui-menuitem-tooltip {\n border-bottom: 1px solid #808080;\n padding-bottom: 3px;\n margin-bottom: 1em;\n}\n\n#jenkins .yuimenuitem {\n font-size: 12px;\n padding: 3px;\n}\n\n#jenkins .yuimenuitem,\n#jenkins .yuimenuitemlabel {\n cursor: pointer;\n}\n\n#jenkins .yuimenu .bd {\n border: 1px solid #ccc;\n box-shadow: 0px 3px 10px #bbb;\n}\n\n#jenkins .yui-menu-shadow {\n display: none;\n}\n\n/* ========================= search box at the top-right of the page ========================= */\n#search-box {\n background: white url(../images/16x16/search.png) no-repeat 2px center;\n height: 24px;\n padding-left: 20px;\n width: 15em;\n position: static; \n border: 1px solid #DDD;\n border-radius: 4px;\n box-shadow: 0 0 5px #DDD inset;\n outline: none;\n}\n\n#search-box-completion {\n text-align: left;\n width:25em;\n position: absolute;\n z-index: 1000;\n}\n\n#search-box-completion .yui-ac-content {\n border: 1px solid black;\n width:25em;\n background-color: white;\n overflow: hidden;\n}\n\n#search-box-completion UL {\n padding: 0 0;\n width: 100%;\n margin: 0 0;\n list-style: none;\n}\n#search-box-completion LI {\n padding-left:20px;\n white-space:nowrap;\n}\n#search-box-completion LI.yui-ac-highlight {\n background: #729FCF;\n}\n#search-box-minWidth {\n position:absolute;\n visibility: hidden;\n width:15em;\n}\n\n#search-box-sizer {\n position:absolute;\n visibility: hidden;\n}\n\n\n/* ========================= resizable text area ========================= */\n\nTEXTAREA {\n margin-bottom: 0;\n}\nDIV.textarea-handle {\n height: 5px;\n font-size: 0;\n background: #EEE url(../images/textarea-handle.gif) no-repeat 50% 1px;\n border: 1px solid #BABDB6;\n border-top: none;\n cursor: s-resize;\n}\nTEXTAREA.rich-editor {\n visibility: hidden;\n}\n\n/* ========================= hover notification ========================= */\n\n#hoverNotification {\n visibility:hidden;\n background-color: white;\n border: 1px solid black;\n padding: 0.5em;\n}\n\n/* ========================= D&D support in heterogenous/repeatable lists = */\n\n.hetero-list-container .dd-handle, .repeated-container .dd-handle {\n cursor: move;\n background-image: url(../images/grip.png);\n background-repeat: repeat-y;\n padding-left: 20px;\n}\n\n.hetero-list-container.with-drag-drop .repeated-chunk {\n padding: 0.5em;\n margin-top: 0.5em;\n margin-bottom: 0.5em;\n}\n\n\n/* ========================= plugin update center ========================= */\n\n#plugins .excerpt {\n white-space: normal;\n margin-top: 0.5em;\n padding-left: 2em;\n color: #888a85;\n}\n\n#plugins .compatWarning {\n white-space: normal;\n margin-top: 0.5em;\n padding-left: 2em;\n color: #FF0000;\n}\n\n#plugins .securityWarning {\n white-space: normal;\n margin-top: 0.5em;\n padding-left: 2em;\n color: #FF0000;\n}\n\n/* ========================= progress bar ========================= */\n\ntable.progress-bar {\n border-collapse: collapse;\n border: 1px solid #3465a4;\n height: 6px;\n width: 100px;\n clear: none;\n}\n\ntable.progress-bar tr.unknown {\n background-image:url(../images/progress-unknown.gif);\n}\n\ntd.progress-bar-done {\n background-color: #3465a4;\n}\n\ntd.progress-bar-left {\n background-color: #ffffff;\n}\n\ntable.progress-bar.red {\n border: 1px solid #cc0000;\n}\n\ntable.progress-bar.red tr.unknown {\n background-image:url(../images/progress-unknown-red.gif);\n}\ntable.progress-bar.red td.progress-bar-done {\n background-color: #cc0000;\n}\n\n/* ========================= notification bar ========================= */\n#notification-bar {\n width:100%;\n position:fixed;\n text-align:center;\n left:0px;\n font-size: 2em;\n z-index:1000;\n border-bottom: 1px solid black;\n}\n\n/* ========================= YUI dialog ========================= */\n\n.dialog .hd {\n font-size: 12px !important;\n}\n/* discovered this margin fix by a trial and error. This can very well be a totally wrong fix, or perhaps updating\n to the latest YUI will fix this? */\n.dialog .hd {\n margin: 0 !important;\n}\n\n.dialog .bd {\n margin: 0 !important;\n}\n\n.dialog .ft {\n margin: 0 !important;\n}\n\n/* ========================= tags/labels ================== */\n/* tag0 is the least important tag in a tag cloud */\n.tag0 { font-size: 1.00em; }\n.tag1 { font-size: 1.10em; }\n.tag2 { font-size: 1.20em; }\n.tag3 { font-size: 1.30em; }\n.tag4 { font-size: 1.40em; }\n.tag5 { font-size: 1.50em; }\n.tag6 { font-size: 1.60em; }\n.tag7 { font-size: 1.70em; }\n.tag8 { font-size: 1.80em; }\n.tag9 { font-size: 1.90em; }\n\n/* ========================= textarea.jelly ================== */\n\n.textarea-preview-container {\n text-align:left;\n}\n.textarea-preview {\n background-color: #F0F0F0;\n padding: 0.5em;\n}\n\n/* ========================= logRecords.jelly ================== */\n\n.logrecord-metadata {\n font-size: 70%;\n}\n\n.logrecord-metadata-new {\n color: #8A8;\n}\n\n.logrecord-metadata-old {\n color: #AAA;\n}\n\n/* ========================= matrix configuration table ================== */\ntable#configuration-matrix {\n border: 1px #BBBBBB solid;\n border-collapse: collapse;\n}\ntr.matrix-row {\n background: #f0f0f0;\n font-weight: bold;\n}\ntd.matrix-header {\n border: 1px #BBBBBB solid;\n padding: 3px;\n}\ntd#matrix-title {\n padding: 3px;\n}\ntd.matrix-leftcolumn {\n border: 1px #BBBBBB solid;\n font-weight: bold;\n background: #f0f0f0;\n padding: 3px;\n}\ntd.matrix-cell {\n border: 1px #BBBBBB solid;\n text-align: center;\n}\n\n/* ========================= legend.jelly ================== */\ntable#legend-table td {\n vertical-align: middle;\n}\n\n/* ========================= select.jelly ================== */\nselect.select-ajax-pending {\n padding-left: 1.5em;\n padding-top: 0.5em;\n padding-bottom: 0.5em;\n color: transparent;\n background-image: url(../images/spinner.gif); /* this is why here and not in an adjunct */\n background-repeat: no-repeat;\n background-position: 2px;\n}\n\n/* ========================= Button styles ================= */\n.btn-box {\n display:block; \n margin-top:2em\n}\n#disable-project {\n margin-top: 6px;\n}\n\n#bottom-sticker .yui-button {\n margin-right: 20px;\n}\n\n/* This level of nesting is technically unnecessary, but to override the\n * default Yahoo styles. */\n#jenkins .yui-button {\n border-width: 0;\n border-style: none;\n border-color: transparent;\n background: none;\n text-decoration: none;\n}\n\n#jenkins .yui-button .first-child {\n border-width: 0;\n border-style: none;\n border-color: transparent;\n}\n#jenkins .yui-button .btn,\n#jenkins .yui-button button {\n font-size: 12px;\n padding: 3px 20px;\n *border: 0;\n border-radius: 1px;\n\n border: 1px solid #cccccc;\n background-color: #e0e0e0;\n font-family: Helvetica, Arial, sans-serif;\n\n color: #505050;\n font-weight: bold;\n}\n\n#jenkins .yui-button .hetero-list-add {\n padding-right: 35px;\n}\n\n#jenkins .yui-button .btn:hover,\n#jenkins .yui-button button:hover,\n#jenkins .yui-button .hover\n{\n background-color: #d0d0d0;\n border: 1px solid #c0c0c0;\n}\n\n#jenkins .yui-button .btn:active,\n#jenkins .yui-button button:active,\n#jenkins .yui-button .active {\n background-color: #bbb;\n box-shadow: inset 0px 1px 6px 2px #929292;\n border: 1px solid #bbb;\n}\n\n#jenkins .yui-button .btn.disabled,\n#jenkins .yui-button button[disabled],\n#jenkins .yui-button button[disabled]:hover,\n#jenkins .yui-button button[disabled]:active,\n#jenkins .yui-button .disabled {\n background-color: #e5e5e5;\n color: #999;\n border: 1px solid #d2d2d2;\n}\n\n/* Color overrides */\n#jenkins .yui-button.primary .btn,\n#jenkins .yui-button.primary button {\n background-color: #4b758b;\n color: #eee;\n border: 1px solid #5788a1;\n}\n#jenkins .yui-button.primary .btn:hover,\n#jenkins .yui-button.primary button:hover,\n#jenkins .yui-button.primary .hover\n{\n background-color: #3f6275;\n border: 1px solid #5788a1;\n}\n#jenkins .yui-button.primary .btn:active,\n#jenkins .yui-button.primary button:active,\n#jenkins .yui-button.primary .active\n{\n background-color: #33505f;\n border: 1px solid #3f6275;\n box-shadow: inset 0px 1px 6px 2px #1b2b33;\n}\n\n#jenkins .yui-button.primary button:disabled,\n#jenkins .yui-button.primary .disabled\n{\n background-color: #adc6d3;\n color: #fff;\n border: 1px solid #a2becd;\n}\n\n#jenkins .yui-button.danger button {\n background-color: #d24939;\n color: #eee;\n border: 1px solid #be3a2b;\n}\n\n#jenkins .yui-button.danger button:hover,\n#jenkins .yui-button.danger .hover\n{\n background-color: #a23225;\n border: 1px solid #942e22;\n}\n\n#jenkins .yui-button.danger button:active,\n#jenkins .yui-button.danger .active\n{\n background-color: #942e22;\n border: 1px solid #6b2118;\n box-shadow: inset 0px 1px 6px 2px #79251b;\n}\n\n#jenkins .yui-button.danger button:disabled,\n#jenkins .yui-button.danger .disabled\n{\n background-color: #e5958c;\n color: #f8f8f8;\n border: 1px solid #e39280;\n}\n\n.i18n {\n display: none;\n}\n\n.alert {\n padding: 15px;\n margin-bottom: 20px;\n border: 1px solid transparent;\n border-radius: 4px;\n}\n\n.alert-warning {\n color: #8a6d3b;\n background-color: #fcf8e3;\n border-color: #faebcc;\n}\n\nbody.no-decoration #main-panel {\n margin: 0 auto !important;\n}\nbody.no-decoration #page-head,\nbody.no-decoration #side-panel,\nbody.no-decoration footer {\n display: none;\n}\nbody.no-sticker #bottom-sticker {\n display: none;\n}\n\n/* see the Icon class for the definition of these CSS classes */\n.icon-sm {\n width: 16px;\n height: 16px;\n}\n\n.icon-md {\n width: 24px;\n height: 24px;\n}\n\n.icon-lg {\n width: 32px;\n height: 32px;\n}\n\n.icon-xlg {\n width: 48px;\n height: 48px;\n}\n" }, "redirectURL": "", "headersSize": 354, "bodySize": 9086, "_transferSize": 9440 }, "cache": {}, "timings": { "blocked": 44.91714397678153, "dns": -1, "ssl": -1, "connect": -1, "send": 0.22200006060299415, "wait": 52.07699991296978, "receive": 438.7440000427887, "_blocked_queueing": 2.1440000273287296 }, "serverIPAddress": "52.10.180.58", "connection": "1232218", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:11.866Z", "time": 534.836095027742, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/static/de2efad2/css/color.css", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 894, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:11 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:02 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "text/css" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=100" }, { "name": "Content-Length", "value": "763" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:11 GMT" } ], "cookies": [], "content": { "size": 1305, "mimeType": "text/css", "compression": 542, "text": "/*\n * The MIT License\n * \n * Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n.greyed {\n\tcolor: #999;\n}\n\n.redbold {\n\tcolor: darkred;\n\tfont-weight: bold;\n}\n\n.greenbold {\n\tcolor: #6c0;\n\tfont-weight: bold;\n}\n" }, "redirectURL": "", "headersSize": 353, "bodySize": 763, "_transferSize": 1116 }, "cache": {}, "timings": { "blocked": 49.17309502058196, "dns": -1, "ssl": -1, "connect": -1, "send": 0.21800003014510594, "wait": 60.578999924473415, "receive": 426.8660000525415, "_blocked_queueing": 2.09500000346452 }, "serverIPAddress": "52.10.180.58", "connection": "1232221", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:11.867Z", "time": 535.3332219703589, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/static/de2efad2/css/responsive-grid.css", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 904, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:11 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:02 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "text/css" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=100" }, { "name": "Content-Length", "value": "4051" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:11 GMT" } ], "cookies": [], "content": { "size": 29759, "mimeType": "text/css", "compression": 25708, "text": "/*!\n * Bootstrap v3.1.1 (http://getbootstrap.com)\n * Copyright 2011-2014 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n\n/*!\n * Only the grid and responsive rules from bootstrap.\n */\n\n* {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n*:before,\n*:after {\n -webkit-box-sizing: border-box;\n -moz-box-sizing: border-box;\n box-sizing: border-box;\n}\n\n.container {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n@media (min-width: 768px) {\n .container {\n width: 750px;\n }\n}\n@media (min-width: 992px) {\n .container {\n width: 970px;\n }\n}\n@media (min-width: 1200px) {\n .container {\n width: 1170px;\n }\n}\n.container-fluid {\n padding-right: 15px;\n padding-left: 15px;\n margin-right: auto;\n margin-left: auto;\n}\n.row {\n margin-right: -15px;\n margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12, .col-xs-13, .col-sm-13, .col-md-13, .col-lg-13, .col-xs-14, .col-sm-14, .col-md-14, .col-lg-14, .col-xs-15, .col-sm-15, .col-md-15, .col-lg-15, .col-xs-16, .col-sm-16, .col-md-16, .col-lg-16, .col-xs-17, .col-sm-17, .col-md-17, .col-lg-17, .col-xs-18, .col-sm-18, .col-md-18, .col-lg-18, .col-xs-19, .col-sm-19, .col-md-19, .col-lg-19, .col-xs-20, .col-sm-20, .col-md-20, .col-lg-20, .col-xs-21, .col-sm-21, .col-md-21, .col-lg-21, .col-xs-22, .col-sm-22, .col-md-22, .col-lg-22, .col-xs-23, .col-sm-23, .col-md-23, .col-lg-23, .col-xs-24, .col-sm-24, .col-md-24, .col-lg-24 {\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12, .col-xs-13, .col-xs-14, .col-xs-15, .col-xs-16, .col-xs-17, .col-xs-18, .col-xs-19, .col-xs-20, .col-xs-21, .col-xs-22, .col-xs-23, .col-xs-24 {\n float: left;\n}\n.col-xs-24 {\n width: 100%;\n}\n.col-xs-23 {\n width: 95.83333333%;\n}\n.col-xs-22 {\n width: 91.66666667%;\n}\n.col-xs-21 {\n width: 87.5%;\n}\n.col-xs-20 {\n width: 83.33333333%;\n}\n.col-xs-19 {\n width: 79.16666667%;\n}\n.col-xs-18 {\n width: 75%;\n}\n.col-xs-17 {\n width: 70.83333333%;\n}\n.col-xs-16 {\n width: 66.66666667%;\n}\n.col-xs-15 {\n width: 62.5%;\n}\n.col-xs-14 {\n width: 58.33333333%;\n}\n.col-xs-13 {\n width: 54.16666667%;\n}\n.col-xs-12 {\n width: 50%;\n}\n.col-xs-11 {\n width: 45.83333333%;\n}\n.col-xs-10 {\n width: 41.66666667%;\n}\n.col-xs-9 {\n width: 37.5%;\n}\n.col-xs-8 {\n width: 33.33333333%;\n}\n.col-xs-7 {\n width: 29.16666667%;\n}\n.col-xs-6 {\n width: 25%;\n}\n.col-xs-5 {\n width: 20.83333333%;\n}\n.col-xs-4 {\n width: 16.66666667%;\n}\n.col-xs-3 {\n width: 12.5%;\n}\n.col-xs-2 {\n width: 8.33333333%;\n}\n.col-xs-1 {\n width: 4.16666667%;\n}\n.col-xs-pull-24 {\n right: 100%;\n}\n.col-xs-pull-23 {\n right: 95.83333333%;\n}\n.col-xs-pull-22 {\n right: 91.66666667%;\n}\n.col-xs-pull-21 {\n right: 87.5%;\n}\n.col-xs-pull-20 {\n right: 83.33333333%;\n}\n.col-xs-pull-19 {\n right: 79.16666667%;\n}\n.col-xs-pull-18 {\n right: 75%;\n}\n.col-xs-pull-17 {\n right: 70.83333333%;\n}\n.col-xs-pull-16 {\n right: 66.66666667%;\n}\n.col-xs-pull-15 {\n right: 62.5%;\n}\n.col-xs-pull-14 {\n right: 58.33333333%;\n}\n.col-xs-pull-13 {\n right: 54.16666667%;\n}\n.col-xs-pull-12 {\n right: 50%;\n}\n.col-xs-pull-11 {\n right: 45.83333333%;\n}\n.col-xs-pull-10 {\n right: 41.66666667%;\n}\n.col-xs-pull-9 {\n right: 37.5%;\n}\n.col-xs-pull-8 {\n right: 33.33333333%;\n}\n.col-xs-pull-7 {\n right: 29.16666667%;\n}\n.col-xs-pull-6 {\n right: 25%;\n}\n.col-xs-pull-5 {\n right: 20.83333333%;\n}\n.col-xs-pull-4 {\n right: 16.66666667%;\n}\n.col-xs-pull-3 {\n right: 12.5%;\n}\n.col-xs-pull-2 {\n right: 8.33333333%;\n}\n.col-xs-pull-1 {\n right: 4.16666667%;\n}\n.col-xs-pull-0 {\n right: auto;\n}\n.col-xs-push-24 {\n left: 100%;\n}\n.col-xs-push-23 {\n left: 95.83333333%;\n}\n.col-xs-push-22 {\n left: 91.66666667%;\n}\n.col-xs-push-21 {\n left: 87.5%;\n}\n.col-xs-push-20 {\n left: 83.33333333%;\n}\n.col-xs-push-19 {\n left: 79.16666667%;\n}\n.col-xs-push-18 {\n left: 75%;\n}\n.col-xs-push-17 {\n left: 70.83333333%;\n}\n.col-xs-push-16 {\n left: 66.66666667%;\n}\n.col-xs-push-15 {\n left: 62.5%;\n}\n.col-xs-push-14 {\n left: 58.33333333%;\n}\n.col-xs-push-13 {\n left: 54.16666667%;\n}\n.col-xs-push-12 {\n left: 50%;\n}\n.col-xs-push-11 {\n left: 45.83333333%;\n}\n.col-xs-push-10 {\n left: 41.66666667%;\n}\n.col-xs-push-9 {\n left: 37.5%;\n}\n.col-xs-push-8 {\n left: 33.33333333%;\n}\n.col-xs-push-7 {\n left: 29.16666667%;\n}\n.col-xs-push-6 {\n left: 25%;\n}\n.col-xs-push-5 {\n left: 20.83333333%;\n}\n.col-xs-push-4 {\n left: 16.66666667%;\n}\n.col-xs-push-3 {\n left: 12.5%;\n}\n.col-xs-push-2 {\n left: 8.33333333%;\n}\n.col-xs-push-1 {\n left: 4.16666667%;\n}\n.col-xs-push-0 {\n left: auto;\n}\n.col-xs-offset-24 {\n margin-left: 100%;\n}\n.col-xs-offset-23 {\n margin-left: 95.83333333%;\n}\n.col-xs-offset-22 {\n margin-left: 91.66666667%;\n}\n.col-xs-offset-21 {\n margin-left: 87.5%;\n}\n.col-xs-offset-20 {\n margin-left: 83.33333333%;\n}\n.col-xs-offset-19 {\n margin-left: 79.16666667%;\n}\n.col-xs-offset-18 {\n margin-left: 75%;\n}\n.col-xs-offset-17 {\n margin-left: 70.83333333%;\n}\n.col-xs-offset-16 {\n margin-left: 66.66666667%;\n}\n.col-xs-offset-15 {\n margin-left: 62.5%;\n}\n.col-xs-offset-14 {\n margin-left: 58.33333333%;\n}\n.col-xs-offset-13 {\n margin-left: 54.16666667%;\n}\n.col-xs-offset-12 {\n margin-left: 50%;\n}\n.col-xs-offset-11 {\n margin-left: 45.83333333%;\n}\n.col-xs-offset-10 {\n margin-left: 41.66666667%;\n}\n.col-xs-offset-9 {\n margin-left: 37.5%;\n}\n.col-xs-offset-8 {\n margin-left: 33.33333333%;\n}\n.col-xs-offset-7 {\n margin-left: 29.16666667%;\n}\n.col-xs-offset-6 {\n margin-left: 25%;\n}\n.col-xs-offset-5 {\n margin-left: 20.83333333%;\n}\n.col-xs-offset-4 {\n margin-left: 16.66666667%;\n}\n.col-xs-offset-3 {\n margin-left: 12.5%;\n}\n.col-xs-offset-2 {\n margin-left: 8.33333333%;\n}\n.col-xs-offset-1 {\n margin-left: 4.16666667%;\n}\n.col-xs-offset-0 {\n margin-left: 0%;\n}\n@media (min-width: 768px) {\n .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm-13, .col-sm-14, .col-sm-15, .col-sm-16, .col-sm-17, .col-sm-18, .col-sm-19, .col-sm-20, .col-sm-21, .col-sm-22, .col-sm-23, .col-sm-24 {\n float: left;\n }\n .col-sm-24 {\n width: 100%;\n }\n .col-sm-23 {\n width: 95.83333333%;\n }\n .col-sm-22 {\n width: 91.66666667%;\n }\n .col-sm-21 {\n width: 87.5%;\n }\n .col-sm-20 {\n width: 83.33333333%;\n }\n .col-sm-19 {\n width: 79.16666667%;\n }\n .col-sm-18 {\n width: 75%;\n }\n .col-sm-17 {\n width: 70.83333333%;\n }\n .col-sm-16 {\n width: 66.66666667%;\n }\n .col-sm-15 {\n width: 62.5%;\n }\n .col-sm-14 {\n width: 58.33333333%;\n }\n .col-sm-13 {\n width: 54.16666667%;\n }\n .col-sm-12 {\n width: 50%;\n }\n .col-sm-11 {\n width: 45.83333333%;\n }\n .col-sm-10 {\n width: 41.66666667%;\n }\n .col-sm-9 {\n width: 37.5%;\n }\n .col-sm-8 {\n width: 33.33333333%;\n }\n .col-sm-7 {\n width: 29.16666667%;\n }\n .col-sm-6 {\n width: 25%;\n }\n .col-sm-5 {\n width: 20.83333333%;\n }\n .col-sm-4 {\n width: 16.66666667%;\n }\n .col-sm-3 {\n width: 12.5%;\n }\n .col-sm-2 {\n width: 8.33333333%;\n }\n .col-sm-1 {\n width: 4.16666667%;\n }\n .col-sm-pull-24 {\n right: 100%;\n }\n .col-sm-pull-23 {\n right: 95.83333333%;\n }\n .col-sm-pull-22 {\n right: 91.66666667%;\n }\n .col-sm-pull-21 {\n right: 87.5%;\n }\n .col-sm-pull-20 {\n right: 83.33333333%;\n }\n .col-sm-pull-19 {\n right: 79.16666667%;\n }\n .col-sm-pull-18 {\n right: 75%;\n }\n .col-sm-pull-17 {\n right: 70.83333333%;\n }\n .col-sm-pull-16 {\n right: 66.66666667%;\n }\n .col-sm-pull-15 {\n right: 62.5%;\n }\n .col-sm-pull-14 {\n right: 58.33333333%;\n }\n .col-sm-pull-13 {\n right: 54.16666667%;\n }\n .col-sm-pull-12 {\n right: 50%;\n }\n .col-sm-pull-11 {\n right: 45.83333333%;\n }\n .col-sm-pull-10 {\n right: 41.66666667%;\n }\n .col-sm-pull-9 {\n right: 37.5%;\n }\n .col-sm-pull-8 {\n right: 33.33333333%;\n }\n .col-sm-pull-7 {\n right: 29.16666667%;\n }\n .col-sm-pull-6 {\n right: 25%;\n }\n .col-sm-pull-5 {\n right: 20.83333333%;\n }\n .col-sm-pull-4 {\n right: 16.66666667%;\n }\n .col-sm-pull-3 {\n right: 12.5%;\n }\n .col-sm-pull-2 {\n right: 8.33333333%;\n }\n .col-sm-pull-1 {\n right: 4.16666667%;\n }\n .col-sm-pull-0 {\n right: auto;\n }\n .col-sm-push-24 {\n left: 100%;\n }\n .col-sm-push-23 {\n left: 95.83333333%;\n }\n .col-sm-push-22 {\n left: 91.66666667%;\n }\n .col-sm-push-21 {\n left: 87.5%;\n }\n .col-sm-push-20 {\n left: 83.33333333%;\n }\n .col-sm-push-19 {\n left: 79.16666667%;\n }\n .col-sm-push-18 {\n left: 75%;\n }\n .col-sm-push-17 {\n left: 70.83333333%;\n }\n .col-sm-push-16 {\n left: 66.66666667%;\n }\n .col-sm-push-15 {\n left: 62.5%;\n }\n .col-sm-push-14 {\n left: 58.33333333%;\n }\n .col-sm-push-13 {\n left: 54.16666667%;\n }\n .col-sm-push-12 {\n left: 50%;\n }\n .col-sm-push-11 {\n left: 45.83333333%;\n }\n .col-sm-push-10 {\n left: 41.66666667%;\n }\n .col-sm-push-9 {\n left: 37.5%;\n }\n .col-sm-push-8 {\n left: 33.33333333%;\n }\n .col-sm-push-7 {\n left: 29.16666667%;\n }\n .col-sm-push-6 {\n left: 25%;\n }\n .col-sm-push-5 {\n left: 20.83333333%;\n }\n .col-sm-push-4 {\n left: 16.66666667%;\n }\n .col-sm-push-3 {\n left: 12.5%;\n }\n .col-sm-push-2 {\n left: 8.33333333%;\n }\n .col-sm-push-1 {\n left: 4.16666667%;\n }\n .col-sm-push-0 {\n left: auto;\n }\n .col-sm-offset-24 {\n margin-left: 100%;\n }\n .col-sm-offset-23 {\n margin-left: 95.83333333%;\n }\n .col-sm-offset-22 {\n margin-left: 91.66666667%;\n }\n .col-sm-offset-21 {\n margin-left: 87.5%;\n }\n .col-sm-offset-20 {\n margin-left: 83.33333333%;\n }\n .col-sm-offset-19 {\n margin-left: 79.16666667%;\n }\n .col-sm-offset-18 {\n margin-left: 75%;\n }\n .col-sm-offset-17 {\n margin-left: 70.83333333%;\n }\n .col-sm-offset-16 {\n margin-left: 66.66666667%;\n }\n .col-sm-offset-15 {\n margin-left: 62.5%;\n }\n .col-sm-offset-14 {\n margin-left: 58.33333333%;\n }\n .col-sm-offset-13 {\n margin-left: 54.16666667%;\n }\n .col-sm-offset-12 {\n margin-left: 50%;\n }\n .col-sm-offset-11 {\n margin-left: 45.83333333%;\n }\n .col-sm-offset-10 {\n margin-left: 41.66666667%;\n }\n .col-sm-offset-9 {\n margin-left: 37.5%;\n }\n .col-sm-offset-8 {\n margin-left: 33.33333333%;\n }\n .col-sm-offset-7 {\n margin-left: 29.16666667%;\n }\n .col-sm-offset-6 {\n margin-left: 25%;\n }\n .col-sm-offset-5 {\n margin-left: 20.83333333%;\n }\n .col-sm-offset-4 {\n margin-left: 16.66666667%;\n }\n .col-sm-offset-3 {\n margin-left: 12.5%;\n }\n .col-sm-offset-2 {\n margin-left: 8.33333333%;\n }\n .col-sm-offset-1 {\n margin-left: 4.16666667%;\n }\n .col-sm-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 992px) {\n .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md-13, .col-md-14, .col-md-15, .col-md-16, .col-md-17, .col-md-18, .col-md-19, .col-md-20, .col-md-21, .col-md-22, .col-md-23, .col-md-24 {\n float: left;\n }\n .col-md-24 {\n width: 100%;\n }\n .col-md-23 {\n width: 95.83333333%;\n }\n .col-md-22 {\n width: 91.66666667%;\n }\n .col-md-21 {\n width: 87.5%;\n }\n .col-md-20 {\n width: 83.33333333%;\n }\n .col-md-19 {\n width: 79.16666667%;\n }\n .col-md-18 {\n width: 75%;\n }\n .col-md-17 {\n width: 70.83333333%;\n }\n .col-md-16 {\n width: 66.66666667%;\n }\n .col-md-15 {\n width: 62.5%;\n }\n .col-md-14 {\n width: 58.33333333%;\n }\n .col-md-13 {\n width: 54.16666667%;\n }\n .col-md-12 {\n width: 50%;\n }\n .col-md-11 {\n width: 45.83333333%;\n }\n .col-md-10 {\n width: 41.66666667%;\n }\n .col-md-9 {\n width: 37.5%;\n }\n .col-md-8 {\n width: 33.33333333%;\n }\n .col-md-7 {\n width: 29.16666667%;\n }\n .col-md-6 {\n width: 25%;\n }\n .col-md-5 {\n width: 20.83333333%;\n }\n .col-md-4 {\n width: 16.66666667%;\n }\n .col-md-3 {\n width: 12.5%;\n }\n .col-md-2 {\n width: 8.33333333%;\n }\n .col-md-1 {\n width: 4.16666667%;\n }\n .col-md-pull-24 {\n right: 100%;\n }\n .col-md-pull-23 {\n right: 95.83333333%;\n }\n .col-md-pull-22 {\n right: 91.66666667%;\n }\n .col-md-pull-21 {\n right: 87.5%;\n }\n .col-md-pull-20 {\n right: 83.33333333%;\n }\n .col-md-pull-19 {\n right: 79.16666667%;\n }\n .col-md-pull-18 {\n right: 75%;\n }\n .col-md-pull-17 {\n right: 70.83333333%;\n }\n .col-md-pull-16 {\n right: 66.66666667%;\n }\n .col-md-pull-15 {\n right: 62.5%;\n }\n .col-md-pull-14 {\n right: 58.33333333%;\n }\n .col-md-pull-13 {\n right: 54.16666667%;\n }\n .col-md-pull-12 {\n right: 50%;\n }\n .col-md-pull-11 {\n right: 45.83333333%;\n }\n .col-md-pull-10 {\n right: 41.66666667%;\n }\n .col-md-pull-9 {\n right: 37.5%;\n }\n .col-md-pull-8 {\n right: 33.33333333%;\n }\n .col-md-pull-7 {\n right: 29.16666667%;\n }\n .col-md-pull-6 {\n right: 25%;\n }\n .col-md-pull-5 {\n right: 20.83333333%;\n }\n .col-md-pull-4 {\n right: 16.66666667%;\n }\n .col-md-pull-3 {\n right: 12.5%;\n }\n .col-md-pull-2 {\n right: 8.33333333%;\n }\n .col-md-pull-1 {\n right: 4.16666667%;\n }\n .col-md-pull-0 {\n right: auto;\n }\n .col-md-push-24 {\n left: 100%;\n }\n .col-md-push-23 {\n left: 95.83333333%;\n }\n .col-md-push-22 {\n left: 91.66666667%;\n }\n .col-md-push-21 {\n left: 87.5%;\n }\n .col-md-push-20 {\n left: 83.33333333%;\n }\n .col-md-push-19 {\n left: 79.16666667%;\n }\n .col-md-push-18 {\n left: 75%;\n }\n .col-md-push-17 {\n left: 70.83333333%;\n }\n .col-md-push-16 {\n left: 66.66666667%;\n }\n .col-md-push-15 {\n left: 62.5%;\n }\n .col-md-push-14 {\n left: 58.33333333%;\n }\n .col-md-push-13 {\n left: 54.16666667%;\n }\n .col-md-push-12 {\n left: 50%;\n }\n .col-md-push-11 {\n left: 45.83333333%;\n }\n .col-md-push-10 {\n left: 41.66666667%;\n }\n .col-md-push-9 {\n left: 37.5%;\n }\n .col-md-push-8 {\n left: 33.33333333%;\n }\n .col-md-push-7 {\n left: 29.16666667%;\n }\n .col-md-push-6 {\n left: 25%;\n }\n .col-md-push-5 {\n left: 20.83333333%;\n }\n .col-md-push-4 {\n left: 16.66666667%;\n }\n .col-md-push-3 {\n left: 12.5%;\n }\n .col-md-push-2 {\n left: 8.33333333%;\n }\n .col-md-push-1 {\n left: 4.16666667%;\n }\n .col-md-push-0 {\n left: auto;\n }\n .col-md-offset-24 {\n margin-left: 100%;\n }\n .col-md-offset-23 {\n margin-left: 95.83333333%;\n }\n .col-md-offset-22 {\n margin-left: 91.66666667%;\n }\n .col-md-offset-21 {\n margin-left: 87.5%;\n }\n .col-md-offset-20 {\n margin-left: 83.33333333%;\n }\n .col-md-offset-19 {\n margin-left: 79.16666667%;\n }\n .col-md-offset-18 {\n margin-left: 75%;\n }\n .col-md-offset-17 {\n margin-left: 70.83333333%;\n }\n .col-md-offset-16 {\n margin-left: 66.66666667%;\n }\n .col-md-offset-15 {\n margin-left: 62.5%;\n }\n .col-md-offset-14 {\n margin-left: 58.33333333%;\n }\n .col-md-offset-13 {\n margin-left: 54.16666667%;\n }\n .col-md-offset-12 {\n margin-left: 50%;\n }\n .col-md-offset-11 {\n margin-left: 45.83333333%;\n }\n .col-md-offset-10 {\n margin-left: 41.66666667%;\n }\n .col-md-offset-9 {\n margin-left: 37.5%;\n }\n .col-md-offset-8 {\n margin-left: 33.33333333%;\n }\n .col-md-offset-7 {\n margin-left: 29.16666667%;\n }\n .col-md-offset-6 {\n margin-left: 25%;\n }\n .col-md-offset-5 {\n margin-left: 20.83333333%;\n }\n .col-md-offset-4 {\n margin-left: 16.66666667%;\n }\n .col-md-offset-3 {\n margin-left: 12.5%;\n }\n .col-md-offset-2 {\n margin-left: 8.33333333%;\n }\n .col-md-offset-1 {\n margin-left: 4.16666667%;\n }\n .col-md-offset-0 {\n margin-left: 0%;\n }\n}\n@media (min-width: 1200px) {\n .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg-13, .col-lg-14, .col-lg-15, .col-lg-16, .col-lg-17, .col-lg-18, .col-lg-19, .col-lg-20, .col-lg-21, .col-lg-22, .col-lg-23, .col-lg-24 {\n float: left;\n }\n .col-lg-24 {\n width: 100%;\n }\n .col-lg-23 {\n width: 95.83333333%;\n }\n .col-lg-22 {\n width: 91.66666667%;\n }\n .col-lg-21 {\n width: 87.5%;\n }\n .col-lg-20 {\n width: 83.33333333%;\n }\n .col-lg-19 {\n width: 79.16666667%;\n }\n .col-lg-18 {\n width: 75%;\n }\n .col-lg-17 {\n width: 70.83333333%;\n }\n .col-lg-16 {\n width: 66.66666667%;\n }\n .col-lg-15 {\n width: 62.5%;\n }\n .col-lg-14 {\n width: 58.33333333%;\n }\n .col-lg-13 {\n width: 54.16666667%;\n }\n .col-lg-12 {\n width: 50%;\n }\n .col-lg-11 {\n width: 45.83333333%;\n }\n .col-lg-10 {\n width: 41.66666667%;\n }\n .col-lg-9 {\n width: 37.5%;\n }\n .col-lg-8 {\n width: 33.33333333%;\n }\n .col-lg-7 {\n width: 29.16666667%;\n }\n .col-lg-6 {\n width: 25%;\n }\n .col-lg-5 {\n width: 20.83333333%;\n }\n .col-lg-4 {\n width: 16.66666667%;\n }\n .col-lg-3 {\n width: 12.5%;\n }\n .col-lg-2 {\n width: 8.33333333%;\n }\n .col-lg-1 {\n width: 4.16666667%;\n }\n .col-lg-pull-24 {\n right: 100%;\n }\n .col-lg-pull-23 {\n right: 95.83333333%;\n }\n .col-lg-pull-22 {\n right: 91.66666667%;\n }\n .col-lg-pull-21 {\n right: 87.5%;\n }\n .col-lg-pull-20 {\n right: 83.33333333%;\n }\n .col-lg-pull-19 {\n right: 79.16666667%;\n }\n .col-lg-pull-18 {\n right: 75%;\n }\n .col-lg-pull-17 {\n right: 70.83333333%;\n }\n .col-lg-pull-16 {\n right: 66.66666667%;\n }\n .col-lg-pull-15 {\n right: 62.5%;\n }\n .col-lg-pull-14 {\n right: 58.33333333%;\n }\n .col-lg-pull-13 {\n right: 54.16666667%;\n }\n .col-lg-pull-12 {\n right: 50%;\n }\n .col-lg-pull-11 {\n right: 45.83333333%;\n }\n .col-lg-pull-10 {\n right: 41.66666667%;\n }\n .col-lg-pull-9 {\n right: 37.5%;\n }\n .col-lg-pull-8 {\n right: 33.33333333%;\n }\n .col-lg-pull-7 {\n right: 29.16666667%;\n }\n .col-lg-pull-6 {\n right: 25%;\n }\n .col-lg-pull-5 {\n right: 20.83333333%;\n }\n .col-lg-pull-4 {\n right: 16.66666667%;\n }\n .col-lg-pull-3 {\n right: 12.5%;\n }\n .col-lg-pull-2 {\n right: 8.33333333%;\n }\n .col-lg-pull-1 {\n right: 4.16666667%;\n }\n .col-lg-pull-0 {\n right: auto;\n }\n .col-lg-push-24 {\n left: 100%;\n }\n .col-lg-push-23 {\n left: 95.83333333%;\n }\n .col-lg-push-22 {\n left: 91.66666667%;\n }\n .col-lg-push-21 {\n left: 87.5%;\n }\n .col-lg-push-20 {\n left: 83.33333333%;\n }\n .col-lg-push-19 {\n left: 79.16666667%;\n }\n .col-lg-push-18 {\n left: 75%;\n }\n .col-lg-push-17 {\n left: 70.83333333%;\n }\n .col-lg-push-16 {\n left: 66.66666667%;\n }\n .col-lg-push-15 {\n left: 62.5%;\n }\n .col-lg-push-14 {\n left: 58.33333333%;\n }\n .col-lg-push-13 {\n left: 54.16666667%;\n }\n .col-lg-push-12 {\n left: 50%;\n }\n .col-lg-push-11 {\n left: 45.83333333%;\n }\n .col-lg-push-10 {\n left: 41.66666667%;\n }\n .col-lg-push-9 {\n left: 37.5%;\n }\n .col-lg-push-8 {\n left: 33.33333333%;\n }\n .col-lg-push-7 {\n left: 29.16666667%;\n }\n .col-lg-push-6 {\n left: 25%;\n }\n .col-lg-push-5 {\n left: 20.83333333%;\n }\n .col-lg-push-4 {\n left: 16.66666667%;\n }\n .col-lg-push-3 {\n left: 12.5%;\n }\n .col-lg-push-2 {\n left: 8.33333333%;\n }\n .col-lg-push-1 {\n left: 4.16666667%;\n }\n .col-lg-push-0 {\n left: auto;\n }\n .col-lg-offset-24 {\n margin-left: 100%;\n }\n .col-lg-offset-23 {\n margin-left: 95.83333333%;\n }\n .col-lg-offset-22 {\n margin-left: 91.66666667%;\n }\n .col-lg-offset-21 {\n margin-left: 87.5%;\n }\n .col-lg-offset-20 {\n margin-left: 83.33333333%;\n }\n .col-lg-offset-19 {\n margin-left: 79.16666667%;\n }\n .col-lg-offset-18 {\n margin-left: 75%;\n }\n .col-lg-offset-17 {\n margin-left: 70.83333333%;\n }\n .col-lg-offset-16 {\n margin-left: 66.66666667%;\n }\n .col-lg-offset-15 {\n margin-left: 62.5%;\n }\n .col-lg-offset-14 {\n margin-left: 58.33333333%;\n }\n .col-lg-offset-13 {\n margin-left: 54.16666667%;\n }\n .col-lg-offset-12 {\n margin-left: 50%;\n }\n .col-lg-offset-11 {\n margin-left: 45.83333333%;\n }\n .col-lg-offset-10 {\n margin-left: 41.66666667%;\n }\n .col-lg-offset-9 {\n margin-left: 37.5%;\n }\n .col-lg-offset-8 {\n margin-left: 33.33333333%;\n }\n .col-lg-offset-7 {\n margin-left: 29.16666667%;\n }\n .col-lg-offset-6 {\n margin-left: 25%;\n }\n .col-lg-offset-5 {\n margin-left: 20.83333333%;\n }\n .col-lg-offset-4 {\n margin-left: 16.66666667%;\n }\n .col-lg-offset-3 {\n margin-left: 12.5%;\n }\n .col-lg-offset-2 {\n margin-left: 8.33333333%;\n }\n .col-lg-offset-1 {\n margin-left: 4.16666667%;\n }\n .col-lg-offset-0 {\n margin-left: 0%;\n }\n}\n\n/*\n X-Large display >= 1800px\n */\n@media (min-width: 1800px) {\n .container {\n width: 1760px;\n }\n}\n.col-xlg-1, .col-xlg-2, .col-xlg-3, .col-xlg-4, .col-xlg-5, .col-xlg-6, .col-xlg-7, .col-xlg-8, .col-xlg-9, .col-xlg-10, .col-xlg-11, .col-xlg-12, .col-xlg-13, .col-xlg-14, .col-xlg-15, .col-xlg-16, .col-xlg-17, .col-xlg-18, .col-xlg-19, .col-xlg-20, .col-xlg-21, .col-xlg-22, .col-xlg-23, .col-xlg-24 {\n position: relative;\n min-height: 1px;\n padding-right: 15px;\n padding-left: 15px;\n}\n@media (min-width: 1800px) {\n .col-xlg-1, .col-xlg-2, .col-xlg-3, .col-xlg-4, .col-xlg-5, .col-xlg-6, .col-xlg-7, .col-xlg-8, .col-xlg-9, .col-xlg-10, .col-xlg-11, .col-xlg-12, .col-xlg-13, .col-xlg-14, .col-xlg-15, .col-xlg-16, .col-xlg-17, .col-xlg-18, .col-xlg-19, .col-xlg-20, .col-xlg-21, .col-xlg-22, .col-xlg-23, .col-xlg-24 {\n float: left;\n }\n .col-xlg-24 {\n width: 100%;\n }\n .col-xlg-23 {\n width: 95.83333333%;\n }\n .col-xlg-22 {\n width: 91.66666667%;\n }\n .col-xlg-21 {\n width: 87.5%;\n }\n .col-xlg-20 {\n width: 83.33333333%;\n }\n .col-xlg-19 {\n width: 79.16666667%;\n }\n .col-xlg-18 {\n width: 75%;\n }\n .col-xlg-17 {\n width: 70.83333333%;\n }\n .col-xlg-16 {\n width: 66.66666667%;\n }\n .col-xlg-15 {\n width: 62.5%;\n }\n .col-xlg-14 {\n width: 58.33333333%;\n }\n .col-xlg-13 {\n width: 54.16666667%;\n }\n .col-xlg-12 {\n width: 50%;\n }\n .col-xlg-11 {\n width: 45.83333333%;\n }\n .col-xlg-10 {\n width: 41.66666667%;\n }\n .col-xlg-9 {\n width: 37.5%;\n }\n .col-xlg-8 {\n width: 33.33333333%;\n }\n .col-xlg-7 {\n width: 29.16666667%;\n }\n .col-xlg-6 {\n width: 25%;\n }\n .col-xlg-5 {\n width: 20.83333333%;\n }\n .col-xlg-4 {\n width: 16.66666667%;\n }\n .col-xlg-3 {\n width: 12.5%;\n }\n .col-xlg-2 {\n width: 8.33333333%;\n }\n .col-xlg-1 {\n width: 4.16666667%;\n }\n .col-xlg-pull-24 {\n right: 100%;\n }\n .col-xlg-pull-23 {\n right: 95.83333333%;\n }\n .col-xlg-pull-22 {\n right: 91.66666667%;\n }\n .col-xlg-pull-21 {\n right: 87.5%;\n }\n .col-xlg-pull-20 {\n right: 83.33333333%;\n }\n .col-xlg-pull-19 {\n right: 79.16666667%;\n }\n .col-xlg-pull-18 {\n right: 75%;\n }\n .col-xlg-pull-17 {\n right: 70.83333333%;\n }\n .col-xlg-pull-16 {\n right: 66.66666667%;\n }\n .col-xlg-pull-15 {\n right: 62.5%;\n }\n .col-xlg-pull-14 {\n right: 58.33333333%;\n }\n .col-xlg-pull-13 {\n right: 54.16666667%;\n }\n .col-xlg-pull-12 {\n right: 50%;\n }\n .col-xlg-pull-11 {\n right: 45.83333333%;\n }\n .col-xlg-pull-10 {\n right: 41.66666667%;\n }\n .col-xlg-pull-9 {\n right: 37.5%;\n }\n .col-xlg-pull-8 {\n right: 33.33333333%;\n }\n .col-xlg-pull-7 {\n right: 29.16666667%;\n }\n .col-xlg-pull-6 {\n right: 25%;\n }\n .col-xlg-pull-5 {\n right: 20.83333333%;\n }\n .col-xlg-pull-4 {\n right: 16.66666667%;\n }\n .col-xlg-pull-3 {\n right: 12.5%;\n }\n .col-xlg-pull-2 {\n right: 8.33333333%;\n }\n .col-xlg-pull-1 {\n right: 4.16666667%;\n }\n .col-xlg-pull-0 {\n right: auto;\n }\n .col-xlg-push-24 {\n left: 100%;\n }\n .col-xlg-push-23 {\n left: 95.83333333%;\n }\n .col-xlg-push-22 {\n left: 91.66666667%;\n }\n .col-xlg-push-21 {\n left: 87.5%;\n }\n .col-xlg-push-20 {\n left: 83.33333333%;\n }\n .col-xlg-push-19 {\n left: 79.16666667%;\n }\n .col-xlg-push-18 {\n left: 75%;\n }\n .col-xlg-push-17 {\n left: 70.83333333%;\n }\n .col-xlg-push-16 {\n left: 66.66666667%;\n }\n .col-xlg-push-15 {\n left: 62.5%;\n }\n .col-xlg-push-14 {\n left: 58.33333333%;\n }\n .col-xlg-push-13 {\n left: 54.16666667%;\n }\n .col-xlg-push-12 {\n left: 50%;\n }\n .col-xlg-push-11 {\n left: 45.83333333%;\n }\n .col-xlg-push-10 {\n left: 41.66666667%;\n }\n .col-xlg-push-9 {\n left: 37.5%;\n }\n .col-xlg-push-8 {\n left: 33.33333333%;\n }\n .col-xlg-push-7 {\n left: 29.16666667%;\n }\n .col-xlg-push-6 {\n left: 25%;\n }\n .col-xlg-push-5 {\n left: 20.83333333%;\n }\n .col-xlg-push-4 {\n left: 16.66666667%;\n }\n .col-xlg-push-3 {\n left: 12.5%;\n }\n .col-xlg-push-2 {\n left: 8.33333333%;\n }\n .col-xlg-push-1 {\n left: 4.16666667%;\n }\n .col-xlg-push-0 {\n left: auto;\n }\n .col-xlg-offset-24 {\n margin-left: 100%;\n }\n .col-xlg-offset-23 {\n margin-left: 95.83333333%;\n }\n .col-xlg-offset-22 {\n margin-left: 91.66666667%;\n }\n .col-xlg-offset-21 {\n margin-left: 87.5%;\n }\n .col-xlg-offset-20 {\n margin-left: 83.33333333%;\n }\n .col-xlg-offset-19 {\n margin-left: 79.16666667%;\n }\n .col-xlg-offset-18 {\n margin-left: 75%;\n }\n .col-xlg-offset-17 {\n margin-left: 70.83333333%;\n }\n .col-xlg-offset-16 {\n margin-left: 66.66666667%;\n }\n .col-xlg-offset-15 {\n margin-left: 62.5%;\n }\n .col-xlg-offset-14 {\n margin-left: 58.33333333%;\n }\n .col-xlg-offset-13 {\n margin-left: 54.16666667%;\n }\n .col-xlg-offset-12 {\n margin-left: 50%;\n }\n .col-xlg-offset-11 {\n margin-left: 45.83333333%;\n }\n .col-xlg-offset-10 {\n margin-left: 41.66666667%;\n }\n .col-xlg-offset-9 {\n margin-left: 37.5%;\n }\n .col-xlg-offset-8 {\n margin-left: 33.33333333%;\n }\n .col-xlg-offset-7 {\n margin-left: 29.16666667%;\n }\n .col-xlg-offset-6 {\n margin-left: 25%;\n }\n .col-xlg-offset-5 {\n margin-left: 20.83333333%;\n }\n .col-xlg-offset-4 {\n margin-left: 16.66666667%;\n }\n .col-xlg-offset-3 {\n margin-left: 12.5%;\n }\n .col-xlg-offset-2 {\n margin-left: 8.33333333%;\n }\n .col-xlg-offset-1 {\n margin-left: 4.16666667%;\n }\n .col-xlg-offset-0 {\n margin-left: 0%;\n }\n}\n\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after {\n display: table;\n content: \" \";\n}\n.container:after,\n.container-fluid:after {\n clear: both;\n}\n@-ms-viewport {\n width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n display: none !important;\n}\n@media (max-width: 767px) {\n .visible-xs {\n display: block !important;\n }\n table.visible-xs {\n display: table;\n }\n tr.visible-xs {\n display: table-row !important;\n }\n th.visible-xs,\n td.visible-xs {\n display: table-cell !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .visible-sm {\n display: block !important;\n }\n table.visible-sm {\n display: table;\n }\n tr.visible-sm {\n display: table-row !important;\n }\n th.visible-sm,\n td.visible-sm {\n display: table-cell !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .visible-md {\n display: block !important;\n }\n table.visible-md {\n display: table;\n }\n tr.visible-md {\n display: table-row !important;\n }\n th.visible-md,\n td.visible-md {\n display: table-cell !important;\n }\n}\n@media (min-width: 1200px) {\n .visible-lg {\n display: block !important;\n }\n table.visible-lg {\n display: table;\n }\n tr.visible-lg {\n display: table-row !important;\n }\n th.visible-lg,\n td.visible-lg {\n display: table-cell !important;\n }\n}\n@media (max-width: 767px) {\n .hidden-xs {\n display: none !important;\n }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n .hidden-sm {\n display: none !important;\n }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n .hidden-md {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .hidden-lg {\n display: none !important;\n }\n}\n.visible-print {\n display: none !important;\n}\n@media print {\n .visible-print {\n display: block !important;\n }\n table.visible-print {\n display: table;\n }\n tr.visible-print {\n display: table-row !important;\n }\n th.visible-print,\n td.visible-print {\n display: table-cell !important;\n }\n}\n@media print {\n .hidden-print {\n display: none !important;\n }\n}\n\n.clearfix:before,\n.clearfix:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-footer:before,\n.modal-footer:after {\n display: table;\n content: \" \";\n}\n.clearfix:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-footer:after {\n clear: both;\n}" }, "redirectURL": "", "headersSize": 354, "bodySize": 4051, "_transferSize": 4405 }, "cache": {}, "timings": { "blocked": 52.91122207813897, "dns": -1, "ssl": -1, "connect": -1, "send": 0.19299995619800114, "wait": 66.30199996288869, "receive": 417.9269999731332, "_blocked_queueing": 2.2219999227672815 }, "serverIPAddress": "52.10.180.58", "connection": "1232212", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:11.867Z", "time": 536.047195044579, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/static/de2efad2/css/customized.css", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "text/css,*/*;q=0.1" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 899, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:11 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:02 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "text/css" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=100" }, { "name": "Content-Length", "value": "843" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:11 GMT" } ], "cookies": [], "content": { "size": 2480, "mimeType": "text/css", "compression": 1637, "text": "/* ----- Overridden: layout-common.css ----- */\n\nbody {\n padding-bottom: 64px;\n}\n\n#header {\n background-color: #1997b5;\n}\n\n#header .logo {\n margin-left: 0;\n background: url('../images/cloudbees-logo_header.png') no-repeat 10px center;\n background-size: 70px;\n}\n\n#header .login {\n float: right;\n padding: 6px 11px;\n}\n\n#header .searchbox {\n float: right;\n margin: 0;\n}\n\n#jenkins-home-link {\n color: #fff;\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 18px;\n text-decoration: none;\n font-weight: bold;\n line-height: 40px;\n padding-left: 86px;\n padding-right: 10px;\n display: block;\n position: relative;\n height: 40px;\n}\n\nfooter {\n z-index: 1;\n}\n\nfooter .jenkins-info {\n text-overflow: ellipsis;\n overflow: hidden;\n white-space: nowrap;\n}\n\nfooter .platform {\n text-align: left;\n}\n\nfooter .jenkins-info span {\n margin-left: 15px;\n}\n\nfooter .jenkins-info span:first-child {\n margin-left: 0;\n}\n\nfooter #footer #l10n-footer {\n white-space: nowrap;\n}\n\n.footer-wrapper {\n clear: both;\n}\n\n@media (min-width: 992px) {\n .footer-wrapper:hover #cloudbees-footer-resource-toolbar {\n bottom: 40px;\n }\n}\n\n#cloudbees-footer-resource-toolbar {\n position: absolute;\n bottom: 0;\n width: 100%;\n z-index: 0;\n transition: bottom 0.2s ease-in-out 0.1s;\n padding: 0 15px;\n margin: 0;\n\n background-color: #1997b5;\n}\n\n#cloudbees-footer-resource-toolbar ul {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n#cloudbees-footer-resource-toolbar ul li {\n display: inline;\n float: left;\n}\n\n#cloudbees-footer-resource-toolbar ul li.pull-right {\n float: right;\n}\n\n#cloudbees-footer-resource-toolbar ul li a {\n display: block;\n color: #fff;\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 14px;\n text-decoration: none;\n font-weight: bold;\n\n padding: 10px 10px 14px 10px;\n line-height: 18px;\n}\n\n#cloudbees-footer-resource-toolbar ul li a:hover {\n color: #fff;\n}\n\n/* ----------------------------------------- */\n\n\n/* ----- Overridden: style.css ----- */\n\n#side-panel .container-fluid {\n margin-bottom: 20px;\n}\n\n#search-box {\n background: url('../images/24x24/cloudbees-search.png') 3px center no-repeat #fff;\n font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n font-size: 14px;\n height: 28px;\n padding-left: 27px;\n position: static;\n border: none;\n line-height: 28px;\n margin-right: 5px;\n outline: none;\n border-radius: 0;\n box-shadow: none;\n}\n\n/* --------------------------------- */\n" }, "redirectURL": "", "headersSize": 353, "bodySize": 843, "_transferSize": 1196 }, "cache": {}, "timings": { "blocked": 53.13419490610252, "dns": -1, "ssl": -1, "connect": -1, "send": 0.20500004757190027, "wait": 68.2500000111759, "receive": 416.45800007972866, "_blocked_queueing": 3.1950001139193773 }, "serverIPAddress": "52.10.180.58", "connection": "1232209", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:11.868Z", "time": 537.079533986398, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/static/de2efad2/scripts/prototype.js", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 886, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:11 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:05 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Transfer-Encoding", "value": "chunked" }, { "name": "Content-Type", "value": "application/javascript" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=100" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:11 GMT" } ], "cookies": [], "content": { "size": 165005, "mimeType": "application/javascript", "compression": 127112, "text": "/* Prototype JavaScript framework, version 1.7\n * (c) 2005-2010 Sam Stephenson\n *\n * Prototype is freely distributable under the terms of an MIT-style license.\n * For details, see the Prototype web site: http://www.prototypejs.org/\n *\n *--------------------------------------------------------------------------*/\n\nvar Prototype = {\n\n Version: '1.7',\n\n Browser: (function(){\n var ua = navigator.userAgent;\n var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';\n return {\n IE: !!window.attachEvent && !isOpera,\n Opera: isOpera,\n WebKit: ua.indexOf('AppleWebKit/') > -1,\n Gecko: ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,\n MobileSafari: /Apple.*Mobile/.test(ua)\n }\n })(),\n\n BrowserFeatures: {\n XPath: !!document.evaluate,\n\n SelectorsAPI: !!document.querySelector,\n\n ElementExtensions: (function() {\n var constructor = window.Element || window.HTMLElement;\n return !!(constructor && constructor.prototype);\n })(),\n SpecificElementExtensions: (function() {\n if (typeof window.HTMLDivElement !== 'undefined')\n return true;\n\n var div = document.createElement('div'),\n form = document.createElement('form'),\n isSupported = false;\n\n if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {\n isSupported = true;\n }\n\n div = form = null;\n\n return isSupported;\n })()\n },\n\n ScriptFragment: ']*>([\\\\S\\\\s]*?)<\\/script>',\n JSONFilter: /^\\/\\*-secure-([\\s\\S]*)\\*\\/\\s*$/,\n\n emptyFunction: function() { },\n\n K: function(x) { return x }\n};\n\nif (Prototype.Browser.MobileSafari)\n Prototype.BrowserFeatures.SpecificElementExtensions = false;\n\n\nvar Abstract = { };\n\n\nvar Try = {\n these: function() {\n var returnValue;\n\n for (var i = 0, length = arguments.length; i < length; i++) {\n var lambda = arguments[i];\n try {\n returnValue = lambda();\n break;\n } catch (e) { }\n }\n\n return returnValue;\n }\n};\n\n/* Based on Alex Arnell's inheritance implementation. */\n\nvar Class = (function() {\n\n var IS_DONTENUM_BUGGY = (function(){\n for (var p in { toString: 1 }) {\n if (p === 'toString') return false;\n }\n return true;\n })();\n\n function subclass() {};\n function create() {\n var parent = null, properties = $A(arguments);\n if (Object.isFunction(properties[0]))\n parent = properties.shift();\n\n function klass() {\n this.initialize.apply(this, arguments);\n }\n\n Object.extend(klass, Class.Methods);\n klass.superclass = parent;\n klass.subclasses = [];\n\n if (parent) {\n subclass.prototype = parent.prototype;\n klass.prototype = new subclass;\n parent.subclasses.push(klass);\n }\n\n for (var i = 0, length = properties.length; i < length; i++)\n klass.addMethods(properties[i]);\n\n if (!klass.prototype.initialize)\n klass.prototype.initialize = Prototype.emptyFunction;\n\n klass.prototype.constructor = klass;\n return klass;\n }\n\n function addMethods(source) {\n var ancestor = this.superclass && this.superclass.prototype,\n properties = Object.keys(source);\n\n if (IS_DONTENUM_BUGGY) {\n if (source.toString != Object.prototype.toString)\n properties.push(\"toString\");\n if (source.valueOf != Object.prototype.valueOf)\n properties.push(\"valueOf\");\n }\n\n for (var i = 0, length = properties.length; i < length; i++) {\n var property = properties[i], value = source[property];\n if (ancestor && Object.isFunction(value) &&\n value.argumentNames()[0] == \"$super\") {\n var method = value;\n value = (function(m) {\n return function() { return ancestor[m].apply(this, arguments); };\n })(property).wrap(method);\n\n value.valueOf = method.valueOf.bind(method);\n value.toString = method.toString.bind(method);\n }\n this.prototype[property] = value;\n }\n\n return this;\n }\n\n return {\n create: create,\n Methods: {\n addMethods: addMethods\n }\n };\n})();\n(function() {\n\n var _toString = Object.prototype.toString,\n NULL_TYPE = 'Null',\n UNDEFINED_TYPE = 'Undefined',\n BOOLEAN_TYPE = 'Boolean',\n NUMBER_TYPE = 'Number',\n STRING_TYPE = 'String',\n OBJECT_TYPE = 'Object',\n FUNCTION_CLASS = '[object Function]',\n BOOLEAN_CLASS = '[object Boolean]',\n NUMBER_CLASS = '[object Number]',\n STRING_CLASS = '[object String]',\n ARRAY_CLASS = '[object Array]',\n DATE_CLASS = '[object Date]',\n NATIVE_JSON_STRINGIFY_SUPPORT = window.JSON &&\n typeof JSON.stringify === 'function' &&\n JSON.stringify(0) === '0' &&\n typeof JSON.stringify(Prototype.K) === 'undefined';\n\n function Type(o) {\n switch(o) {\n case null: return NULL_TYPE;\n case (void 0): return UNDEFINED_TYPE;\n }\n var type = typeof o;\n switch(type) {\n case 'boolean': return BOOLEAN_TYPE;\n case 'number': return NUMBER_TYPE;\n case 'string': return STRING_TYPE;\n }\n return OBJECT_TYPE;\n }\n\n function extend(destination, source) {\n for (var property in source)\n destination[property] = source[property];\n return destination;\n }\n\n function inspect(object) {\n try {\n if (isUndefined(object)) return 'undefined';\n if (object === null) return 'null';\n return object.inspect ? object.inspect() : String(object);\n } catch (e) {\n if (e instanceof RangeError) return '...';\n throw e;\n }\n }\n\n function toJSON(value) {\n return Str('', { '': value }, []);\n }\n\n function Str(key, holder, stack) {\n var value = holder[key],\n type = typeof value;\n\n if (Type(value) === OBJECT_TYPE && typeof value.toJSON === 'function') {\n value = value.toJSON(key);\n }\n\n var _class = _toString.call(value);\n\n switch (_class) {\n case NUMBER_CLASS:\n case BOOLEAN_CLASS:\n case STRING_CLASS:\n value = value.valueOf();\n }\n\n switch (value) {\n case null: return 'null';\n case true: return 'true';\n case false: return 'false';\n }\n\n type = typeof value;\n switch (type) {\n case 'string':\n return value.inspect(true);\n case 'number':\n return isFinite(value) ? String(value) : 'null';\n case 'object':\n\n for (var i = 0, length = stack.length; i < length; i++) {\n if (stack[i] === value) { throw new TypeError(); }\n }\n stack.push(value);\n\n var partial = [];\n if (_class === ARRAY_CLASS) {\n for (var i = 0, length = value.length; i < length; i++) {\n var str = Str(i, value, stack);\n partial.push(typeof str === 'undefined' ? 'null' : str);\n }\n partial = '[' + partial.join(',') + ']';\n } else {\n var keys = Object.keys(value);\n for (var i = 0, length = keys.length; i < length; i++) {\n var key = keys[i], str = Str(key, value, stack);\n if (typeof str !== \"undefined\") {\n partial.push(key.inspect(true)+ ':' + str);\n }\n }\n partial = '{' + partial.join(',') + '}';\n }\n stack.pop();\n return partial;\n }\n }\n\n function stringify(object) {\n return JSON.stringify(object);\n }\n\n function toQueryString(object) {\n return $H(object).toQueryString();\n }\n\n function toHTML(object) {\n return object && object.toHTML ? object.toHTML() : String.interpret(object);\n }\n\n function keys(object) {\n if (Type(object) !== OBJECT_TYPE) { throw new TypeError(); }\n var results = [];\n for (var property in object) {\n if (object.hasOwnProperty(property)) {\n results.push(property);\n }\n }\n return results;\n }\n\n function values(object) {\n var results = [];\n for (var property in object)\n results.push(object[property]);\n return results;\n }\n\n function clone(object) {\n return extend({ }, object);\n }\n\n function isElement(object) {\n return !!(object && object.nodeType == 1);\n }\n\n function isArray(object) {\n return _toString.call(object) === ARRAY_CLASS;\n }\n\n var hasNativeIsArray = (typeof Array.isArray == 'function')\n && Array.isArray([]) && !Array.isArray({});\n\n if (hasNativeIsArray) {\n isArray = Array.isArray;\n }\n\n function isHash(object) {\n return object instanceof Hash;\n }\n\n function isFunction(object) {\n return _toString.call(object) === FUNCTION_CLASS;\n }\n\n function isString(object) {\n return _toString.call(object) === STRING_CLASS;\n }\n\n function isNumber(object) {\n return _toString.call(object) === NUMBER_CLASS;\n }\n\n function isDate(object) {\n return _toString.call(object) === DATE_CLASS;\n }\n\n function isUndefined(object) {\n return typeof object === \"undefined\";\n }\n\n extend(Object, {\n extend: extend,\n inspect: inspect,\n\n // JENKINS-11618\n //toJSON: NATIVE_JSON_STRINGIFY_SUPPORT ? stringify : toJSON,\n toJSON: function(object) {\n var type = typeof object;\n switch(type) {\n case 'undefined':\n case 'function':\n case 'unknown': return;\n case 'boolean': return object.toString();\n }\n if (object === null) return 'null';\n // \"|| object.toJSON\" below is workaround for Opera 10.52/53 bug, see HUDSON-6424\n if (object.toJSON || object.toJSON) return object.toJSON();\n if (object.ownerDocument === document) return;\n var results = [];\n for (var property in object) {\n var value = Object.toJSON(object[property]);\n if (value !== undefined)\n results.push(property.toJSON() + ': ' + value);\n }\n return '{' + results.join(', ') + '}';\n },\n\n toQueryString: toQueryString,\n toHTML: toHTML,\n keys: Object.keys || keys,\n values: values,\n clone: clone,\n isElement: isElement,\n isArray: isArray,\n isHash: isHash,\n isFunction: isFunction,\n isString: isString,\n isNumber: isNumber,\n isDate: isDate,\n isUndefined: isUndefined\n });\n})();\nObject.extend(Function.prototype, (function() {\n var slice = Array.prototype.slice;\n\n function update(array, args) {\n var arrayLength = array.length, length = args.length;\n while (length--) array[arrayLength + length] = args[length];\n return array;\n }\n\n function merge(array, args) {\n array = slice.call(array, 0);\n return update(array, args);\n }\n\n function argumentNames() {\n var names = this.toString().match(/^[\\s\\(]*function[^(]*\\(([^)]*)\\)/)[1]\n .replace(/\\/\\/.*?[\\r\\n]|\\/\\*(?:.|[\\r\\n])*?\\*\\//g, '')\n .replace(/\\s+/g, '').split(',');\n return names.length == 1 && !names[0] ? [] : names;\n }\n\n function bind(context) {\n if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;\n var __method = this, args = slice.call(arguments, 1);\n return function() {\n var a = merge(args, arguments);\n return __method.apply(context, a);\n }\n }\n\n function bindAsEventListener(context) {\n var __method = this, args = slice.call(arguments, 1);\n return function(event) {\n var a = update([event || window.event], args);\n return __method.apply(context, a);\n }\n }\n\n function curry() {\n if (!arguments.length) return this;\n var __method = this, args = slice.call(arguments, 0);\n return function() {\n var a = merge(args, arguments);\n return __method.apply(this, a);\n }\n }\n\n function delay(timeout) {\n var __method = this, args = slice.call(arguments, 1);\n timeout = timeout * 1000;\n return window.setTimeout(function() {\n return __method.apply(__method, args);\n }, timeout);\n }\n\n function defer() {\n var args = update([0.01], arguments);\n return this.delay.apply(this, args);\n }\n\n function wrap(wrapper) {\n var __method = this;\n return function() {\n var a = update([__method.bind(this)], arguments);\n return wrapper.apply(this, a);\n }\n }\n\n function methodize() {\n if (this._methodized) return this._methodized;\n var __method = this;\n return this._methodized = function() {\n var a = update([this], arguments);\n return __method.apply(null, a);\n };\n }\n\n return {\n argumentNames: argumentNames,\n bind: bind,\n bindAsEventListener: bindAsEventListener,\n curry: curry,\n delay: delay,\n defer: defer,\n wrap: wrap,\n methodize: methodize\n }\n})());\n\n\n\n(function(proto) {\n\n\n function toISOString() {\n return this.getUTCFullYear() + '-' +\n (this.getUTCMonth() + 1).toPaddedString(2) + '-' +\n this.getUTCDate().toPaddedString(2) + 'T' +\n this.getUTCHours().toPaddedString(2) + ':' +\n this.getUTCMinutes().toPaddedString(2) + ':' +\n this.getUTCSeconds().toPaddedString(2) + 'Z';\n }\n\n\n function toJSON() {\n return this.toISOString();\n }\n\n if (!proto.toISOString) proto.toISOString = toISOString;\n if (!proto.toJSON) proto.toJSON = toJSON;\n\n})(Date.prototype);\n\n\nRegExp.prototype.match = RegExp.prototype.test;\n\nRegExp.escape = function(str) {\n return String(str).replace(/([.*+?^=!:${}()|[\\]\\/\\\\])/g, '\\\\$1');\n};\nvar PeriodicalExecuter = Class.create({\n initialize: function(callback, frequency) {\n this.callback = callback;\n this.frequency = frequency;\n this.currentlyExecuting = false;\n\n this.registerCallback();\n },\n\n registerCallback: function() {\n this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);\n },\n\n execute: function() {\n this.callback(this);\n },\n\n stop: function() {\n if (!this.timer) return;\n clearInterval(this.timer);\n this.timer = null;\n },\n\n onTimerEvent: function() {\n if (!this.currentlyExecuting) {\n try {\n this.currentlyExecuting = true;\n this.execute();\n this.currentlyExecuting = false;\n } catch(e) {\n this.currentlyExecuting = false;\n throw e;\n }\n }\n }\n});\nObject.extend(String, {\n interpret: function(value) {\n return value == null ? '' : String(value);\n },\n specialChar: {\n '\\b': '\\\\b',\n '\\t': '\\\\t',\n '\\n': '\\\\n',\n '\\f': '\\\\f',\n '\\r': '\\\\r',\n '\\\\': '\\\\\\\\'\n }\n});\n\nObject.extend(String.prototype, (function() {\n var NATIVE_JSON_PARSE_SUPPORT = window.JSON &&\n typeof JSON.parse === 'function' &&\n JSON.parse('{\"test\": true}').test;\n\n function prepareReplacement(replacement) {\n if (Object.isFunction(replacement)) return replacement;\n var template = new Template(replacement);\n return function(match) { return template.evaluate(match) };\n }\n\n function gsub(pattern, replacement) {\n var result = '', source = this, match;\n replacement = prepareReplacement(replacement);\n\n if (Object.isString(pattern))\n pattern = RegExp.escape(pattern);\n\n if (!(pattern.length || pattern.source)) {\n replacement = replacement('');\n return replacement + source.split('').join(replacement) + replacement;\n }\n\n while (source.length > 0) {\n if (match = source.match(pattern)) {\n result += source.slice(0, match.index);\n result += String.interpret(replacement(match));\n source = source.slice(match.index + match[0].length);\n } else {\n result += source, source = '';\n }\n }\n return result;\n }\n\n function sub(pattern, replacement, count) {\n replacement = prepareReplacement(replacement);\n count = Object.isUndefined(count) ? 1 : count;\n\n return this.gsub(pattern, function(match) {\n if (--count < 0) return match[0];\n return replacement(match);\n });\n }\n\n function scan(pattern, iterator) {\n this.gsub(pattern, iterator);\n return String(this);\n }\n\n function truncate(length, truncation) {\n length = length || 30;\n truncation = Object.isUndefined(truncation) ? '...' : truncation;\n return this.length > length ?\n this.slice(0, length - truncation.length) + truncation : String(this);\n }\n\n function strip() {\n return this.replace(/^\\s+/, '').replace(/\\s+$/, '');\n }\n\n function stripTags() {\n return this.replace(/<\\w+(\\s+(\"[^\"]*\"|'[^']*'|[^>])+)?>|<\\/\\w+>/gi, '');\n }\n\n function stripScripts() {\n return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');\n }\n\n function extractScripts() {\n var matchAll = new RegExp(Prototype.ScriptFragment, 'img'),\n matchOne = new RegExp(Prototype.ScriptFragment, 'im');\n return (this.match(matchAll) || []).map(function(scriptTag) {\n return (scriptTag.match(matchOne) || ['', ''])[1];\n });\n }\n\n function evalScripts() {\n return this.extractScripts().map(function(script) { return eval(script) });\n }\n\n function escapeHTML() {\n return this.replace(/&/g,'&').replace(//g,'>');\n }\n\n function unescapeHTML() {\n return this.stripTags().replace(/</g,'<').replace(/>/g,'>').replace(/&/g,'&');\n }\n\n\n function toQueryParams(separator) {\n var match = this.strip().match(/([^?#]*)(#.*)?$/);\n if (!match) return { };\n\n return match[1].split(separator || '&').inject({ }, function(hash, pair) {\n if ((pair = pair.split('='))[0]) {\n var key = decodeURIComponent(pair.shift()),\n value = pair.length > 1 ? pair.join('=') : pair[0];\n\n if (value != undefined) value = decodeURIComponent(value);\n\n if (key in hash) {\n if (!Object.isArray(hash[key])) hash[key] = [hash[key]];\n hash[key].push(value);\n }\n else hash[key] = value;\n }\n return hash;\n });\n }\n\n function toArray() {\n return this.split('');\n }\n\n function succ() {\n return this.slice(0, this.length - 1) +\n String.fromCharCode(this.charCodeAt(this.length - 1) + 1);\n }\n\n function times(count) {\n return count < 1 ? '' : new Array(count + 1).join(this);\n }\n\n function camelize() {\n return this.replace(/-+(.)?/g, function(match, chr) {\n return chr ? chr.toUpperCase() : '';\n });\n }\n\n function capitalize() {\n return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();\n }\n\n function underscore() {\n return this.replace(/::/g, '/')\n .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n .replace(/-/g, '_')\n .toLowerCase();\n }\n\n function dasherize() {\n return this.replace(/_/g, '-');\n }\n\n function inspect(useDoubleQuotes) {\n var escapedString = this.replace(/[\\x00-\\x1f\\\\]/g, function(character) {\n if (character in String.specialChar) {\n return String.specialChar[character];\n }\n return '\\\\u00' + character.charCodeAt().toPaddedString(2, 16);\n });\n if (useDoubleQuotes) return '\"' + escapedString.replace(/\"/g, '\\\\\"') + '\"';\n return \"'\" + escapedString.replace(/'/g, '\\\\\\'') + \"'\";\n }\n\n function toJSON() {\n return this.inspect(true);\n }\n\n function unfilterJSON(filter) {\n return this.replace(filter || Prototype.JSONFilter, '$1');\n }\n\n function isJSON() {\n var str = this;\n if (str.blank()) return false;\n str = str.replace(/\\\\(?:[\"\\\\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@');\n str = str.replace(/\"[^\"\\\\\\n\\r]*\"|true|false|null|-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?/g, ']');\n str = str.replace(/(?:^|:|,)(?:\\s*\\[)+/g, '');\n return (/^[\\],:{}\\s]*$/).test(str);\n }\n\n function evalJSON(sanitize) {\n var json = this.unfilterJSON(),\n cx = /[\\u0000\\u00ad\\u0600-\\u0604\\u070f\\u17b4\\u17b5\\u200c-\\u200f\\u2028-\\u202f\\u2060-\\u206f\\ufeff\\ufff0-\\uffff]/g;\n if (cx.test(json)) {\n json = json.replace(cx, function (a) {\n return '\\\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);\n });\n }\n try {\n if (!sanitize || json.isJSON()) return eval('(' + json + ')');\n } catch (e) { }\n throw new SyntaxError('Badly formed JSON string: ' + this.inspect());\n }\n\n function parseJSON() {\n var json = this.unfilterJSON();\n return JSON.parse(json);\n }\n\n function include(pattern) {\n return this.indexOf(pattern) > -1;\n }\n\n function startsWith(pattern) {\n return this.lastIndexOf(pattern, 0) === 0;\n }\n\n function endsWith(pattern) {\n var d = this.length - pattern.length;\n return d >= 0 && this.indexOf(pattern, d) === d;\n }\n\n function empty() {\n return this == '';\n }\n\n function blank() {\n return /^\\s*$/.test(this);\n }\n\n function interpolate(object, pattern) {\n return new Template(this, pattern).evaluate(object);\n }\n\n return {\n gsub: gsub,\n sub: sub,\n scan: scan,\n truncate: truncate,\n strip: String.prototype.trim || strip,\n stripTags: stripTags,\n stripScripts: stripScripts,\n extractScripts: extractScripts,\n evalScripts: evalScripts,\n escapeHTML: escapeHTML,\n unescapeHTML: unescapeHTML,\n toQueryParams: toQueryParams,\n parseQuery: toQueryParams,\n toArray: toArray,\n succ: succ,\n times: times,\n camelize: camelize,\n capitalize: capitalize,\n underscore: underscore,\n dasherize: dasherize,\n inspect: inspect,\n unfilterJSON: unfilterJSON,\n toJSON: toJSON,\n isJSON: isJSON,\n evalJSON: NATIVE_JSON_PARSE_SUPPORT ? parseJSON : evalJSON,\n include: include,\n startsWith: startsWith,\n endsWith: endsWith,\n empty: empty,\n blank: blank,\n interpolate: interpolate\n };\n})());\n\nvar Template = Class.create({\n initialize: function(template, pattern) {\n this.template = template.toString();\n this.pattern = pattern || Template.Pattern;\n },\n\n evaluate: function(object) {\n if (object && Object.isFunction(object.toTemplateReplacements))\n object = object.toTemplateReplacements();\n\n return this.template.gsub(this.pattern, function(match) {\n if (object == null) return (match[1] + '');\n\n var before = match[1] || '';\n if (before == '\\\\') return match[2];\n\n var ctx = object, expr = match[3],\n pattern = /^([^.[]+|\\[((?:.*?[^\\\\])?)\\])(\\.|\\[|$)/;\n\n match = pattern.exec(expr);\n if (match == null) return before;\n\n while (match != null) {\n var comp = match[1].startsWith('[') ? match[2].replace(/\\\\\\\\]/g, ']') : match[1];\n ctx = ctx[comp];\n if (null == ctx || '' == match[3]) break;\n expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);\n match = pattern.exec(expr);\n }\n\n return before + String.interpret(ctx);\n });\n }\n});\nTemplate.Pattern = /(^|.|\\r|\\n)(#\\{(.*?)\\})/;\n\nvar $break = { };\n\nvar Enumerable = (function() {\n function each(iterator, context) {\n var index = 0;\n try {\n this._each(function(value) {\n iterator.call(context, value, index++);\n });\n } catch (e) {\n if (e != $break) throw e;\n }\n return this;\n }\n\n function eachSlice(number, iterator, context) {\n var index = -number, slices = [], array = this.toArray();\n if (number < 1) return array;\n while ((index += number) < array.length)\n slices.push(array.slice(index, index+number));\n return slices.collect(iterator, context);\n }\n\n function all(iterator, context) {\n iterator = iterator || Prototype.K;\n var result = true;\n this.each(function(value, index) {\n result = result && !!iterator.call(context, value, index);\n if (!result) throw $break;\n });\n return result;\n }\n\n function any(iterator, context) {\n iterator = iterator || Prototype.K;\n var result = false;\n this.each(function(value, index) {\n if (result = !!iterator.call(context, value, index))\n throw $break;\n });\n return result;\n }\n\n function collect(iterator, context) {\n iterator = iterator || Prototype.K;\n var results = [];\n this.each(function(value, index) {\n results.push(iterator.call(context, value, index));\n });\n return results;\n }\n\n function detect(iterator, context) {\n var result;\n this.each(function(value, index) {\n if (iterator.call(context, value, index)) {\n result = value;\n throw $break;\n }\n });\n return result;\n }\n\n function findAll(iterator, context) {\n var results = [];\n this.each(function(value, index) {\n if (iterator.call(context, value, index))\n results.push(value);\n });\n return results;\n }\n\n function grep(filter, iterator, context) {\n iterator = iterator || Prototype.K;\n var results = [];\n\n if (Object.isString(filter))\n filter = new RegExp(RegExp.escape(filter));\n\n this.each(function(value, index) {\n if (filter.match(value))\n results.push(iterator.call(context, value, index));\n });\n return results;\n }\n\n function include(object) {\n if (Object.isFunction(this.indexOf))\n if (this.indexOf(object) != -1) return true;\n\n var found = false;\n this.each(function(value) {\n if (value == object) {\n found = true;\n throw $break;\n }\n });\n return found;\n }\n\n function inGroupsOf(number, fillWith) {\n fillWith = Object.isUndefined(fillWith) ? null : fillWith;\n return this.eachSlice(number, function(slice) {\n while(slice.length < number) slice.push(fillWith);\n return slice;\n });\n }\n\n function inject(memo, iterator, context) {\n this.each(function(value, index) {\n memo = iterator.call(context, memo, value, index);\n });\n return memo;\n }\n\n function invoke(method) {\n var args = $A(arguments).slice(1);\n return this.map(function(value) {\n return value[method].apply(value, args);\n });\n }\n\n function max(iterator, context) {\n iterator = iterator || Prototype.K;\n var result;\n this.each(function(value, index) {\n value = iterator.call(context, value, index);\n if (result == null || value >= result)\n result = value;\n });\n return result;\n }\n\n function min(iterator, context) {\n iterator = iterator || Prototype.K;\n var result;\n this.each(function(value, index) {\n value = iterator.call(context, value, index);\n if (result == null || value < result)\n result = value;\n });\n return result;\n }\n\n function partition(iterator, context) {\n iterator = iterator || Prototype.K;\n var trues = [], falses = [];\n this.each(function(value, index) {\n (iterator.call(context, value, index) ?\n trues : falses).push(value);\n });\n return [trues, falses];\n }\n\n function pluck(property) {\n var results = [];\n this.each(function(value) {\n results.push(value[property]);\n });\n return results;\n }\n\n function reject(iterator, context) {\n var results = [];\n this.each(function(value, index) {\n if (!iterator.call(context, value, index))\n results.push(value);\n });\n return results;\n }\n\n function sortBy(iterator, context) {\n return this.map(function(value, index) {\n return {\n value: value,\n criteria: iterator.call(context, value, index)\n };\n }).sort(function(left, right) {\n var a = left.criteria, b = right.criteria;\n return a < b ? -1 : a > b ? 1 : 0;\n }).pluck('value');\n }\n\n function toArray() {\n return this.map();\n }\n\n function zip() {\n var iterator = Prototype.K, args = $A(arguments);\n if (Object.isFunction(args.last()))\n iterator = args.pop();\n\n var collections = [this].concat(args).map($A);\n return this.map(function(value, index) {\n return iterator(collections.pluck(index));\n });\n }\n\n function size() {\n return this.toArray().length;\n }\n\n function inspect() {\n return '#';\n }\n\n\n\n\n\n\n\n\n\n return {\n each: each,\n eachSlice: eachSlice,\n all: all,\n every: all,\n any: any,\n some: any,\n collect: collect,\n map: collect,\n detect: detect,\n findAll: findAll,\n select: findAll,\n filter: findAll,\n grep: grep,\n include: include,\n member: include,\n inGroupsOf: inGroupsOf,\n inject: inject,\n invoke: invoke,\n max: max,\n min: min,\n partition: partition,\n pluck: pluck,\n reject: reject,\n sortBy: sortBy,\n toArray: toArray,\n entries: toArray,\n zip: zip,\n size: size,\n inspect: inspect,\n find: detect\n };\n})();\n\nfunction $A(iterable) {\n if (!iterable) return [];\n if ('toArray' in Object(iterable)) return iterable.toArray();\n var length = iterable.length || 0, results = new Array(length);\n while (length--) results[length] = iterable[length];\n return results;\n}\n\n\nfunction $w(string) {\n if (!Object.isString(string)) return [];\n string = string.strip();\n return string ? string.split(/\\s+/) : [];\n}\n\nArray.from = $A;\n\n\n(function() {\n var arrayProto = Array.prototype,\n slice = arrayProto.slice,\n _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available\n\n function each(iterator, context) {\n for (var i = 0, length = this.length >>> 0; i < length; i++) {\n if (i in this) iterator.call(context, this[i], i, this);\n }\n }\n if (!_each) _each = each;\n\n function clear() {\n this.length = 0;\n return this;\n }\n\n function first() {\n return this[0];\n }\n\n function last() {\n return this[this.length - 1];\n }\n\n function compact() {\n return this.select(function(value) {\n return value != null;\n });\n }\n\n function flatten() {\n return this.inject([], function(array, value) {\n if (Object.isArray(value))\n return array.concat(value.flatten());\n array.push(value);\n return array;\n });\n }\n\n function without() {\n var values = slice.call(arguments, 0);\n return this.select(function(value) {\n return !values.include(value);\n });\n }\n\n function reverse(inline) {\n return (inline === false ? this.toArray() : this)._reverse();\n }\n\n function uniq(sorted) {\n return this.inject([], function(array, value, index) {\n if (0 == index || (sorted ? array.last() != value : !array.include(value)))\n array.push(value);\n return array;\n });\n }\n\n function intersect(array) {\n return this.uniq().findAll(function(item) {\n return array.detect(function(value) { return item === value });\n });\n }\n\n\n function clone() {\n return slice.call(this, 0);\n }\n\n function size() {\n return this.length;\n }\n\n function inspect() {\n return '[' + this.map(Object.inspect).join(', ') + ']';\n }\n\n function toJSON() {\n var results = [];\n this.each(function(object) {\n var value = Object.toJSON(object);\n if (value !== undefined) results.push(value);\n });\n return '[' + results.join(', ') + ']';\n }\n\n function indexOf(item, i) {\n i || (i = 0);\n var length = this.length;\n if (i < 0) i = length + i;\n for (; i < length; i++)\n if (this[i] === item) return i;\n return -1;\n }\n\n function lastIndexOf(item, i) {\n i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;\n var n = this.slice(0, i).reverse().indexOf(item);\n return (n < 0) ? n : i - n - 1;\n }\n\n function concat() {\n var array = slice.call(this, 0), item;\n for (var i = 0, length = arguments.length; i < length; i++) {\n item = arguments[i];\n if (Object.isArray(item) && !('callee' in item)) {\n for (var j = 0, arrayLength = item.length; j < arrayLength; j++)\n array.push(item[j]);\n } else {\n array.push(item);\n }\n }\n return array;\n }\n\n Object.extend(arrayProto, Enumerable);\n\n if (!arrayProto._reverse)\n arrayProto._reverse = arrayProto.reverse;\n\n Object.extend(arrayProto, {\n _each: _each,\n clear: clear,\n first: first,\n last: last,\n compact: compact,\n flatten: flatten,\n without: without,\n reverse: reverse,\n uniq: uniq,\n intersect: intersect,\n toJSON: toJSON,\n clone: clone,\n toArray: clone,\n size: size,\n inspect: inspect\n });\n\n var CONCAT_ARGUMENTS_BUGGY = (function() {\n return [].concat(arguments)[0][0] !== 1;\n })(1,2)\n\n if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;\n\n if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;\n if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;\n})();\nfunction $H(object) {\n return new Hash(object);\n};\n\nvar Hash = Class.create(Enumerable, (function() {\n function initialize(object) {\n this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);\n }\n\n\n function _each(iterator) {\n for (var key in this._object) {\n var value = this._object[key], pair = [key, value];\n pair.key = key;\n pair.value = value;\n iterator(pair);\n }\n }\n\n function set(key, value) {\n return this._object[key] = value;\n }\n\n function get(key) {\n if (this._object[key] !== Object.prototype[key])\n return this._object[key];\n }\n\n function unset(key) {\n var value = this._object[key];\n delete this._object[key];\n return value;\n }\n\n function toObject() {\n return Object.clone(this._object);\n }\n\n\n\n function keys() {\n return this.pluck('key');\n }\n\n function values() {\n return this.pluck('value');\n }\n\n function index(value) {\n var match = this.detect(function(pair) {\n return pair.value === value;\n });\n return match && match.key;\n }\n\n function merge(object) {\n return this.clone().update(object);\n }\n\n function update(object) {\n return new Hash(object).inject(this, function(result, pair) {\n result.set(pair.key, pair.value);\n return result;\n });\n }\n\n function toQueryPair(key, value) {\n if (Object.isUndefined(value)) return key;\n return key + '=' + encodeURIComponent(String.interpret(value));\n }\n\n function toQueryString() {\n return this.inject([], function(results, pair) {\n var key = encodeURIComponent(pair.key), values = pair.value;\n\n if (values && typeof values == 'object') {\n if (Object.isArray(values)) {\n var queryValues = [];\n for (var i = 0, len = values.length, value; i < len; i++) {\n value = values[i];\n queryValues.push(toQueryPair(key, value));\n }\n return results.concat(queryValues);\n }\n } else results.push(toQueryPair(key, values));\n return results;\n }).join('&');\n }\n\n function inspect() {\n return '#';\n }\n\n function toJSON() {\n return this.toObject().toJSON();\n }\n\n function clone() {\n return new Hash(this);\n }\n\n return {\n initialize: initialize,\n _each: _each,\n set: set,\n get: get,\n unset: unset,\n toObject: toObject,\n toTemplateReplacements: toObject,\n keys: keys,\n values: values,\n index: index,\n merge: merge,\n update: update,\n toQueryString: toQueryString,\n inspect: inspect,\n toJSON: toJSON,\n clone: clone\n };\n})());\n\nHash.from = $H;\nObject.extend(Number.prototype, (function() {\n function toColorPart() {\n return this.toPaddedString(2, 16);\n }\n\n function succ() {\n return this + 1;\n }\n\n function times(iterator, context) {\n $R(0, this, true).each(iterator, context);\n return this;\n }\n\n function toPaddedString(length, radix) {\n var string = this.toString(radix || 10);\n return '0'.times(length - string.length) + string;\n }\n\n function toJSON() {\n return isFinite(this) ? this.toString() : 'null';\n }\n\n function abs() {\n return Math.abs(this);\n }\n\n function round() {\n return Math.round(this);\n }\n\n function ceil() {\n return Math.ceil(this);\n }\n\n function floor() {\n return Math.floor(this);\n }\n\n return {\n toColorPart: toColorPart,\n succ: succ,\n times: times,\n toPaddedString: toPaddedString,\n toJSON: toJSON,\n abs: abs,\n round: round,\n ceil: ceil,\n floor: floor\n };\n})());\n\nfunction $R(start, end, exclusive) {\n return new ObjectRange(start, end, exclusive);\n}\n\nvar ObjectRange = Class.create(Enumerable, (function() {\n function initialize(start, end, exclusive) {\n this.start = start;\n this.end = end;\n this.exclusive = exclusive;\n }\n\n function _each(iterator) {\n var value = this.start;\n while (this.include(value)) {\n iterator(value);\n value = value.succ();\n }\n }\n\n function include(value) {\n if (value < this.start)\n return false;\n if (this.exclusive)\n return value < this.end;\n return value <= this.end;\n }\n\n return {\n initialize: initialize,\n _each: _each,\n include: include\n };\n})());\n\n\n\nvar Ajax = {\n getTransport: function() {\n return Try.these(\n function() {return new XMLHttpRequest()},\n function() {return new ActiveXObject('Msxml2.XMLHTTP')},\n function() {return new ActiveXObject('Microsoft.XMLHTTP')}\n ) || false;\n },\n\n activeRequestCount: 0\n};\n\nAjax.Responders = {\n responders: [],\n\n _each: function(iterator) {\n this.responders._each(iterator);\n },\n\n register: function(responder) {\n if (!this.include(responder))\n this.responders.push(responder);\n },\n\n unregister: function(responder) {\n this.responders = this.responders.without(responder);\n },\n\n dispatch: function(callback, request, transport, json) {\n this.each(function(responder) {\n if (Object.isFunction(responder[callback])) {\n try {\n responder[callback].apply(responder, [request, transport, json]);\n } catch (e) { }\n }\n });\n }\n};\n\nObject.extend(Ajax.Responders, Enumerable);\n\nAjax.Responders.register({\n onCreate: function() { Ajax.activeRequestCount++ },\n onComplete: function() { Ajax.activeRequestCount-- }\n});\nAjax.Base = Class.create({\n initialize: function(options) {\n this.options = {\n method: 'post',\n asynchronous: true,\n contentType: 'application/x-www-form-urlencoded',\n encoding: 'UTF-8',\n parameters: '',\n evalJSON: true,\n evalJS: false\n };\n Object.extend(this.options, options || { });\n\n this.options.method = this.options.method.toLowerCase();\n\n if (Object.isHash(this.options.parameters))\n this.options.parameters = this.options.parameters.toObject();\n\n // KK patch -- handle crumb for POST automatically by adding a header\n if(this.options.method==\"post\") {\n if(this.options.requestHeaders==undefined)\n this.options.requestHeaders = {};\n crumb.wrap(this.options.requestHeaders);\n }\n // KK patch until here\n }\n});\nAjax.Request = Class.create(Ajax.Base, {\n _complete: false,\n\n initialize: function($super, url, options) {\n $super(options);\n this.transport = Ajax.getTransport();\n this.request(url);\n },\n\n request: function(url) {\n this.url = url;\n this.method = this.options.method;\n var params = Object.isString(this.options.parameters) ?\n this.options.parameters :\n Object.toQueryString(this.options.parameters);\n\n if (!['get', 'post'].include(this.method)) {\n params += (params ? '&' : '') + \"_method=\" + this.method;\n this.method = 'post';\n }\n\n if (params && this.method === 'get') {\n this.url += (this.url.include('?') ? '&' : '?') + params;\n }\n\n this.parameters = params.toQueryParams();\n\n try {\n var response = new Ajax.Response(this);\n if (this.options.onCreate) this.options.onCreate(response);\n Ajax.Responders.dispatch('onCreate', this, response);\n\n this.transport.open(this.method.toUpperCase(), this.url,\n this.options.asynchronous);\n\n if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);\n\n this.transport.onreadystatechange = this.onStateChange.bind(this);\n this.setRequestHeaders();\n\n this.body = this.method == 'post' ? (this.options.postBody || params) : null;\n this.transport.send(this.body);\n\n /* Force Firefox to handle ready state 4 for synchronous requests */\n if (!this.options.asynchronous && this.transport.overrideMimeType)\n this.onStateChange();\n\n }\n catch (e) {\n this.dispatchException(e);\n }\n },\n\n onStateChange: function() {\n var readyState = this.transport.readyState;\n if (readyState > 1 && !((readyState == 4) && this._complete))\n this.respondToReadyState(this.transport.readyState);\n },\n\n setRequestHeaders: function() {\n var headers = {\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Prototype-Version': Prototype.Version,\n 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'\n };\n\n if (this.method == 'post') {\n headers['Content-type'] = this.options.contentType +\n (this.options.encoding ? '; charset=' + this.options.encoding : '');\n\n /* Force \"Connection: close\" for older Mozilla browsers to work\n * around a bug where XMLHttpRequest sends an incorrect\n * Content-length header. See Mozilla Bugzilla #246651.\n */\n if (this.transport.overrideMimeType &&\n (navigator.userAgent.match(/Gecko\\/(\\d{4})/) || [0,2005])[1] < 2005)\n headers['Connection'] = 'close';\n }\n\n if (typeof this.options.requestHeaders == 'object') {\n var extras = this.options.requestHeaders;\n\n if (Object.isFunction(extras.push))\n for (var i = 0, length = extras.length; i < length; i += 2)\n headers[extras[i]] = extras[i+1];\n else\n $H(extras).each(function(pair) { headers[pair.key] = pair.value });\n }\n\n for (var name in headers)\n this.transport.setRequestHeader(name, headers[name]);\n },\n\n success: function() {\n var status = this.getStatus();\n return !status || (status >= 200 && status < 300) || status == 304;\n },\n\n getStatus: function() {\n try {\n if (this.transport.status === 1223) return 204;\n return this.transport.status || 0;\n } catch (e) { return 0 }\n },\n\n respondToReadyState: function(readyState) {\n var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);\n\n if (state == 'Complete') {\n try {\n this._complete = true;\n (this.options['on' + response.status]\n || this.options['on' + (this.success() ? 'Success' : 'Failure')]\n || Prototype.emptyFunction)(response, response.headerJSON);\n } catch (e) {\n this.dispatchException(e);\n }\n\n var contentType = response.getHeader('Content-type');\n if (this.options.evalJS == 'force'\n || (this.options.evalJS && this.isSameOrigin() && contentType\n && contentType.match(/^\\s*(text|application)\\/(x-)?(java|ecma)script(;.*)?\\s*$/i)))\n this.evalResponse();\n }\n\n try {\n (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);\n Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);\n } catch (e) {\n this.dispatchException(e);\n }\n\n if (state == 'Complete') {\n this.transport.onreadystatechange = Prototype.emptyFunction;\n }\n },\n\n isSameOrigin: function() {\n var m = this.url.match(/^\\s*https?:\\/\\/[^\\/]*/);\n return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({\n protocol: location.protocol,\n domain: document.domain,\n port: location.port ? ':' + location.port : ''\n }));\n },\n\n getHeader: function(name) {\n try {\n return this.transport.getResponseHeader(name) || null;\n } catch (e) { return null; }\n },\n\n evalResponse: function() {\n try {\n return eval((this.transport.responseText || '').unfilterJSON());\n } catch (e) {\n this.dispatchException(e);\n }\n },\n\n dispatchException: function(exception) {\n (this.options.onException || Prototype.emptyFunction)(this, exception);\n Ajax.Responders.dispatch('onException', this, exception);\n }\n});\n\nAjax.Request.Events =\n ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];\n\n\n\n\n\n\n\n\nAjax.Response = Class.create({\n initialize: function(request){\n this.request = request;\n var transport = this.transport = request.transport,\n readyState = this.readyState = transport.readyState;\n\n if ((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {\n this.status = this.getStatus();\n this.statusText = this.getStatusText();\n this.responseText = String.interpret(transport.responseText);\n this.headerJSON = this._getHeaderJSON();\n }\n\n if (readyState == 4) {\n var xml = transport.responseXML;\n this.responseXML = Object.isUndefined(xml) ? null : xml;\n this.responseJSON = this._getResponseJSON();\n }\n },\n\n status: 0,\n\n statusText: '',\n\n getStatus: Ajax.Request.prototype.getStatus,\n\n getStatusText: function() {\n try {\n return this.transport.statusText || '';\n } catch (e) { return '' }\n },\n\n getHeader: Ajax.Request.prototype.getHeader,\n\n getAllHeaders: function() {\n try {\n return this.getAllResponseHeaders();\n } catch (e) { return null }\n },\n\n getResponseHeader: function(name) {\n return this.transport.getResponseHeader(name);\n },\n\n getAllResponseHeaders: function() {\n return this.transport.getAllResponseHeaders();\n },\n\n _getHeaderJSON: function() {\n var json = this.getHeader('X-JSON');\n if (!json) return null;\n json = decodeURIComponent(escape(json));\n try {\n return json.evalJSON(this.request.options.sanitizeJSON ||\n !this.request.isSameOrigin());\n } catch (e) {\n this.request.dispatchException(e);\n }\n },\n\n _getResponseJSON: function() {\n var options = this.request.options;\n if (!options.evalJSON || (options.evalJSON != 'force' &&\n !(this.getHeader('Content-type') || '').include('application/json')) ||\n this.responseText.blank())\n return null;\n try {\n return this.responseText.evalJSON(options.sanitizeJSON ||\n !this.request.isSameOrigin());\n } catch (e) {\n this.request.dispatchException(e);\n }\n }\n});\n\nAjax.Updater = Class.create(Ajax.Request, {\n initialize: function($super, container, url, options) {\n this.container = {\n success: (container.success || container),\n failure: (container.failure || (container.success ? null : container))\n };\n\n options = Object.clone(options);\n var onComplete = options.onComplete;\n options.onComplete = (function(response, json) {\n this.updateContent(response.responseText);\n if (Object.isFunction(onComplete)) onComplete(response, json);\n }).bind(this);\n\n $super(url, options);\n },\n\n updateContent: function(responseText) {\n var receiver = this.container[this.success() ? 'success' : 'failure'],\n options = this.options;\n\n if (!options.evalScripts) responseText = responseText.stripScripts();\n\n if (receiver = $(receiver)) {\n if (options.insertion) {\n if (Object.isString(options.insertion)) {\n var insertion = { }; insertion[options.insertion] = responseText;\n receiver.insert(insertion);\n }\n else options.insertion(receiver, responseText);\n }\n else receiver.update(responseText);\n }\n }\n});\n\nAjax.PeriodicalUpdater = Class.create(Ajax.Base, {\n initialize: function($super, container, url, options) {\n $super(options);\n this.onComplete = this.options.onComplete;\n\n this.frequency = (this.options.frequency || 2);\n this.decay = (this.options.decay || 1);\n\n this.updater = { };\n this.container = container;\n this.url = url;\n\n this.start();\n },\n\n start: function() {\n this.options.onComplete = this.updateComplete.bind(this);\n this.onTimerEvent();\n },\n\n stop: function() {\n this.updater.options.onComplete = undefined;\n clearTimeout(this.timer);\n (this.onComplete || Prototype.emptyFunction).apply(this, arguments);\n },\n\n updateComplete: function(response) {\n if (this.options.decay) {\n this.decay = (response.responseText == this.lastText ?\n this.decay * this.options.decay : 1);\n\n this.lastText = response.responseText;\n }\n this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);\n },\n\n onTimerEvent: function() {\n this.updater = new Ajax.Updater(this.container, this.url, this.options);\n }\n});\n\n\nfunction $(element) {\n if (arguments.length > 1) {\n for (var i = 0, elements = [], length = arguments.length; i < length; i++)\n elements.push($(arguments[i]));\n return elements;\n }\n if (Object.isString(element))\n element = document.getElementById(element);\n return Element.extend(element);\n}\n\nif (Prototype.BrowserFeatures.XPath) {\n document._getElementsByXPath = function(expression, parentElement) {\n var results = [];\n var query = document.evaluate(expression, $(parentElement) || document,\n null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);\n for (var i = 0, length = query.snapshotLength; i < length; i++)\n results.push(Element.extend(query.snapshotItem(i)));\n return results;\n };\n}\n\n/*--------------------------------------------------------------------------*/\n\nif (!Node) var Node = { };\n\nif (!Node.ELEMENT_NODE) {\n Object.extend(Node, {\n ELEMENT_NODE: 1,\n ATTRIBUTE_NODE: 2,\n TEXT_NODE: 3,\n CDATA_SECTION_NODE: 4,\n ENTITY_REFERENCE_NODE: 5,\n ENTITY_NODE: 6,\n PROCESSING_INSTRUCTION_NODE: 7,\n COMMENT_NODE: 8,\n DOCUMENT_NODE: 9,\n DOCUMENT_TYPE_NODE: 10,\n DOCUMENT_FRAGMENT_NODE: 11,\n NOTATION_NODE: 12\n });\n}\n\n\n\n(function(global) {\n function shouldUseCache(tagName, attributes) {\n if (tagName === 'select') return false;\n if ('type' in attributes) return false;\n return true;\n }\n\n var HAS_EXTENDED_CREATE_ELEMENT_SYNTAX = (function(){\n return false;\n })();\n\n var element = global.Element;\n\n global.Element = function(tagName, attributes) {\n attributes = attributes || { };\n tagName = tagName.toLowerCase();\n var cache = Element.cache;\n\n if (HAS_EXTENDED_CREATE_ELEMENT_SYNTAX && attributes.name) {\n tagName = '<' + tagName + ' name=\"' + attributes.name + '\">';\n delete attributes.name;\n return Element.writeAttribute(document.createElement(tagName), attributes);\n }\n\n if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));\n\n var node = shouldUseCache(tagName, attributes) ?\n cache[tagName].cloneNode(false) : document.createElement(tagName);\n\n return Element.writeAttribute(node, attributes);\n };\n\n Object.extend(global.Element, element || { });\n if (element) global.Element.prototype = element.prototype;\n\n})(this);\n\nElement.idCounter = 1;\nElement.cache = { };\n\nElement._purgeElement = function(element) {\n var uid = element._prototypeUID;\n if (uid) {\n Element.stopObserving(element);\n element._prototypeUID = void 0;\n delete Element.Storage[uid];\n }\n}\n\nElement.Methods = {\n visible: function(element) {\n return $(element).style.display != 'none';\n },\n\n toggle: function(element) {\n element = $(element);\n Element[Element.visible(element) ? 'hide' : 'show'](element);\n return element;\n },\n\n hide: function(element) {\n element = $(element);\n element.style.display = 'none';\n return element;\n },\n\n show: function(element) {\n element = $(element);\n element.style.display = '';\n return element;\n },\n\n remove: function(element) {\n element = $(element);\n element.parentNode.removeChild(element);\n return element;\n },\n\n update: (function(){\n\n var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){\n var el = document.createElement(\"select\"),\n isBuggy = true;\n el.innerHTML = \"\";\n if (el.options && el.options[0]) {\n isBuggy = el.options[0].nodeName.toUpperCase() !== \"OPTION\";\n }\n el = null;\n return isBuggy;\n })();\n\n var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){\n try {\n var el = document.createElement(\"table\");\n if (el && el.tBodies) {\n el.innerHTML = \"test\";\n var isBuggy = typeof el.tBodies[0] == \"undefined\";\n el = null;\n return isBuggy;\n }\n } catch (e) {\n return true;\n }\n })();\n\n var LINK_ELEMENT_INNERHTML_BUGGY = (function() {\n try {\n var el = document.createElement('div');\n el.innerHTML = \"\";\n var isBuggy = (el.childNodes.length === 0);\n el = null;\n return isBuggy;\n } catch(e) {\n return true;\n }\n })();\n\n var ANY_INNERHTML_BUGGY = SELECT_ELEMENT_INNERHTML_BUGGY ||\n TABLE_ELEMENT_INNERHTML_BUGGY || LINK_ELEMENT_INNERHTML_BUGGY;\n\n var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {\n var s = document.createElement(\"script\"),\n isBuggy = false;\n try {\n s.appendChild(document.createTextNode(\"\"));\n isBuggy = !s.firstChild ||\n s.firstChild && s.firstChild.nodeType !== 3;\n } catch (e) {\n isBuggy = true;\n }\n s = null;\n return isBuggy;\n })();\n\n\n function update(element, content) {\n element = $(element);\n var purgeElement = Element._purgeElement;\n\n var descendants = element.getElementsByTagName('*'),\n i = descendants.length;\n while (i--) purgeElement(descendants[i]);\n\n if (content && content.toElement)\n content = content.toElement();\n\n if (Object.isElement(content))\n return element.update().insert(content);\n\n content = Object.toHTML(content);\n\n var tagName = element.tagName.toUpperCase();\n\n if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {\n element.text = content;\n return element;\n }\n\n if (ANY_INNERHTML_BUGGY) {\n if (tagName in Element._insertionTranslations.tags) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n Element._getContentFromAnonymousElement(tagName, content.stripScripts())\n .each(function(node) {\n element.appendChild(node)\n });\n } else if (LINK_ELEMENT_INNERHTML_BUGGY && Object.isString(content) && content.indexOf(' -1) {\n while (element.firstChild) {\n element.removeChild(element.firstChild);\n }\n var nodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts(), true);\n nodes.each(function(node) { element.appendChild(node) });\n }\n else {\n element.innerHTML = content.stripScripts();\n }\n }\n else {\n element.innerHTML = content.stripScripts();\n }\n\n content.evalScripts.bind(content).defer();\n return element;\n }\n\n return update;\n })(),\n\n replace: function(element, content) {\n element = $(element);\n if (content && content.toElement) content = content.toElement();\n else if (!Object.isElement(content)) {\n content = Object.toHTML(content);\n var range = element.ownerDocument.createRange();\n range.selectNode(element);\n content.evalScripts.bind(content).defer();\n content = range.createContextualFragment(content.stripScripts());\n }\n element.parentNode.replaceChild(content, element);\n return element;\n },\n\n insert: function(element, insertions) {\n element = $(element);\n\n if (Object.isString(insertions) || Object.isNumber(insertions) ||\n Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))\n insertions = {bottom:insertions};\n\n var content, insert, tagName, childNodes;\n\n for (var position in insertions) {\n content = insertions[position];\n position = position.toLowerCase();\n insert = Element._insertionTranslations[position];\n\n if (content && content.toElement) content = content.toElement();\n if (Object.isElement(content)) {\n insert(element, content);\n continue;\n }\n\n content = Object.toHTML(content);\n\n tagName = ((position == 'before' || position == 'after')\n ? element.parentNode : element).tagName.toUpperCase();\n\n childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());\n\n if (position == 'top' || position == 'after') childNodes.reverse();\n childNodes.each(insert.curry(element));\n\n content.evalScripts.bind(content).defer();\n }\n\n return element;\n },\n\n wrap: function(element, wrapper, attributes) {\n element = $(element);\n if (Object.isElement(wrapper))\n $(wrapper).writeAttribute(attributes || { });\n else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);\n else wrapper = new Element('div', wrapper);\n if (element.parentNode)\n element.parentNode.replaceChild(wrapper, element);\n wrapper.appendChild(element);\n return wrapper;\n },\n\n inspect: function(element) {\n element = $(element);\n var result = '<' + element.tagName.toLowerCase();\n $H({'id': 'id', 'className': 'class'}).each(function(pair) {\n var property = pair.first(),\n attribute = pair.last(),\n value = (element[property] || '').toString();\n if (value) result += ' ' + attribute + '=' + value.inspect(true);\n });\n return result + '>';\n },\n\n recursivelyCollect: function(element, property, maximumLength) {\n element = $(element);\n maximumLength = maximumLength || -1;\n var elements = [];\n\n while (element = element[property]) {\n if (element.nodeType == 1)\n elements.push(Element.extend(element));\n if (elements.length == maximumLength)\n break;\n }\n\n return elements;\n },\n\n ancestors: function(element) {\n return Element.recursivelyCollect(element, 'parentNode');\n },\n\n descendants: function(element) {\n return Element.select(element, \"*\");\n },\n\n firstDescendant: function(element) {\n element = $(element).firstChild;\n while (element && element.nodeType != 1) element = element.nextSibling;\n return $(element);\n },\n\n immediateDescendants: function(element) {\n var results = [], child = $(element).firstChild;\n while (child) {\n if (child.nodeType === 1) {\n results.push(Element.extend(child));\n }\n child = child.nextSibling;\n }\n return results;\n },\n\n previousSiblings: function(element, maximumLength) {\n return Element.recursivelyCollect(element, 'previousSibling');\n },\n\n nextSiblings: function(element) {\n return Element.recursivelyCollect(element, 'nextSibling');\n },\n\n siblings: function(element) {\n element = $(element);\n return Element.previousSiblings(element).reverse()\n .concat(Element.nextSiblings(element));\n },\n\n match: function(element, selector) {\n element = $(element);\n if (Object.isString(selector))\n return Prototype.Selector.match(element, selector);\n return selector.match(element);\n },\n\n up: function(element, expression, index) {\n element = $(element);\n if (arguments.length == 1) return $(element.parentNode);\n var ancestors = Element.ancestors(element);\n return Object.isNumber(expression) ? ancestors[expression] :\n Prototype.Selector.find(ancestors, expression, index);\n },\n\n down: function(element, expression, index) {\n element = $(element);\n if (arguments.length == 1) return Element.firstDescendant(element);\n return Object.isNumber(expression) ? Element.descendants(element)[expression] :\n Element.select(element, expression)[index || 0];\n },\n\n previous: function(element, expression, index) {\n element = $(element);\n if (Object.isNumber(expression)) index = expression, expression = false;\n if (!Object.isNumber(index)) index = 0;\n\n if (expression) {\n return Prototype.Selector.find(element.previousSiblings(), expression, index);\n } else {\n return element.recursivelyCollect(\"previousSibling\", index + 1)[index];\n }\n },\n\n next: function(element, expression, index) {\n element = $(element);\n if (Object.isNumber(expression)) index = expression, expression = false;\n if (!Object.isNumber(index)) index = 0;\n\n if (expression) {\n return Prototype.Selector.find(element.nextSiblings(), expression, index);\n } else {\n var maximumLength = Object.isNumber(index) ? index + 1 : 1;\n return element.recursivelyCollect(\"nextSibling\", index + 1)[index];\n }\n },\n\n\n select: function(element) {\n element = $(element);\n var expressions = Array.prototype.slice.call(arguments, 1).join(', ');\n return Prototype.Selector.select(expressions, element);\n },\n\n adjacent: function(element) {\n element = $(element);\n var expressions = Array.prototype.slice.call(arguments, 1).join(', ');\n return Prototype.Selector.select(expressions, element.parentNode).without(element);\n },\n\n identify: function(element) {\n element = $(element);\n var id = Element.readAttribute(element, 'id');\n if (id) return id;\n do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id));\n Element.writeAttribute(element, 'id', id);\n return id;\n },\n\n readAttribute: function(element, name) {\n element = $(element);\n if (Prototype.Browser.IE) {\n var t = Element._attributeTranslations.read;\n if (t.values[name]) return t.values[name](element, name);\n if (t.names[name]) name = t.names[name];\n if (name.include(':')) {\n return (!element.attributes || !element.attributes[name]) ? null :\n element.attributes[name].value;\n }\n }\n return element.getAttribute(name);\n },\n\n writeAttribute: function(element, name, value) {\n element = $(element);\n var attributes = { }, t = Element._attributeTranslations.write;\n\n if (typeof name == 'object') attributes = name;\n else attributes[name] = Object.isUndefined(value) ? true : value;\n\n for (var attr in attributes) {\n name = t.names[attr] || attr;\n value = attributes[attr];\n if (t.values[attr]) name = t.values[attr](element, value);\n if (value === false || value === null)\n element.removeAttribute(name);\n else if (value === true)\n element.setAttribute(name, name);\n else element.setAttribute(name, value);\n }\n return element;\n },\n\n getHeight: function(element) {\n return Element.getDimensions(element).height;\n },\n\n getWidth: function(element) {\n return Element.getDimensions(element).width;\n },\n\n classNames: function(element) {\n return new Element.ClassNames(element);\n },\n\n hasClassName: function(element, className) {\n if (!(element = $(element))) return;\n var elementClassName = element.className;\n return (elementClassName && elementClassName.length > 0 && (elementClassName == className ||\n new RegExp(\"(^|\\\\s)\" + className + \"(\\\\s|$)\").test(elementClassName)));\n },\n\n addClassName: function(element, className) {\n if (!(element = $(element))) return;\n if (!Element.hasClassName(element, className))\n element.className += (element.className ? ' ' : '') + className;\n return element;\n },\n\n removeClassName: function(element, className) {\n if (!(element = $(element))) return;\n element.className = element.className.replace(\n new RegExp(\"(^|\\\\s+)\" + className + \"(\\\\s+|$)\"), ' ').strip();\n return element;\n },\n\n toggleClassName: function(element, className) {\n if (!(element = $(element))) return;\n return Element[Element.hasClassName(element, className) ?\n 'removeClassName' : 'addClassName'](element, className);\n },\n\n cleanWhitespace: function(element) {\n element = $(element);\n var node = element.firstChild;\n while (node) {\n var nextNode = node.nextSibling;\n if (node.nodeType == 3 && !/\\S/.test(node.nodeValue))\n element.removeChild(node);\n node = nextNode;\n }\n return element;\n },\n\n empty: function(element) {\n return $(element).innerHTML.blank();\n },\n\n descendantOf: function(element, ancestor) {\n element = $(element), ancestor = $(ancestor);\n\n if (element.compareDocumentPosition)\n return (element.compareDocumentPosition(ancestor) & 8) === 8;\n\n if (ancestor.contains)\n return ancestor.contains(element) && ancestor !== element;\n\n while (element = element.parentNode)\n if (element == ancestor) return true;\n\n return false;\n },\n\n scrollTo: function(element) {\n element = $(element);\n var pos = Element.cumulativeOffset(element);\n window.scrollTo(pos[0], pos[1]);\n return element;\n },\n\n getStyle: function(element, style) {\n element = $(element);\n style = style == 'float' ? 'cssFloat' : style.camelize();\n var value = element.style[style];\n if (!value || value == 'auto') {\n var css = document.defaultView.getComputedStyle(element, null);\n value = css ? css[style] : null;\n }\n if (style == 'opacity') return value ? parseFloat(value) : 1.0;\n return value == 'auto' ? null : value;\n },\n\n getOpacity: function(element) {\n return $(element).getStyle('opacity');\n },\n\n setStyle: function(element, styles) {\n element = $(element);\n var elementStyle = element.style, match;\n if (Object.isString(styles)) {\n element.style.cssText += ';' + styles;\n return styles.include('opacity') ?\n element.setOpacity(styles.match(/opacity:\\s*(\\d?\\.?\\d*)/)[1]) : element;\n }\n for (var property in styles)\n if (property == 'opacity') element.setOpacity(styles[property]);\n else\n elementStyle[(property == 'float' || property == 'cssFloat') ?\n (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :\n property] = styles[property];\n\n return element;\n },\n\n setOpacity: function(element, value) {\n element = $(element);\n element.style.opacity = (value == 1 || value === '') ? '' :\n (value < 0.00001) ? 0 : value;\n return element;\n },\n\n makePositioned: function(element) {\n element = $(element);\n var pos = Element.getStyle(element, 'position');\n if (pos == 'static' || !pos) {\n element._madePositioned = true;\n element.style.position = 'relative';\n if (Prototype.Browser.Opera) {\n element.style.top = 0;\n element.style.left = 0;\n }\n }\n return element;\n },\n\n undoPositioned: function(element) {\n element = $(element);\n if (element._madePositioned) {\n element._madePositioned = undefined;\n element.style.position =\n element.style.top =\n element.style.left =\n element.style.bottom =\n element.style.right = '';\n }\n return element;\n },\n\n makeClipping: function(element) {\n element = $(element);\n if (element._overflow) return element;\n element._overflow = Element.getStyle(element, 'overflow') || 'auto';\n if (element._overflow !== 'hidden')\n element.style.overflow = 'hidden';\n return element;\n },\n\n undoClipping: function(element) {\n element = $(element);\n if (!element._overflow) return element;\n element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;\n element._overflow = null;\n return element;\n },\n\n clonePosition: function(element, source) {\n var options = Object.extend({\n setLeft: true,\n setTop: true,\n setWidth: true,\n setHeight: true,\n offsetTop: 0,\n offsetLeft: 0\n }, arguments[2] || { });\n\n source = $(source);\n var p = Element.viewportOffset(source), delta = [0, 0], parent = null;\n\n element = $(element);\n\n if (Element.getStyle(element, 'position') == 'absolute') {\n parent = Element.getOffsetParent(element);\n delta = Element.viewportOffset(parent);\n }\n\n if (parent == document.body) {\n delta[0] -= document.body.offsetLeft;\n delta[1] -= document.body.offsetTop;\n }\n\n if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px';\n if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px';\n if (options.setWidth) element.style.width = source.offsetWidth + 'px';\n if (options.setHeight) element.style.height = source.offsetHeight + 'px';\n return element;\n }\n};\n\nObject.extend(Element.Methods, {\n getElementsBySelector: Element.Methods.select,\n\n childElements: Element.Methods.immediateDescendants\n});\n\nElement._attributeTranslations = {\n write: {\n names: {\n className: 'class',\n htmlFor: 'for'\n },\n values: { }\n }\n};\n\nif (Prototype.Browser.Opera) {\n Element.Methods.getStyle = Element.Methods.getStyle.wrap(\n function(proceed, element, style) {\n switch (style) {\n case 'height': case 'width':\n if (!Element.visible(element)) return null;\n\n var dim = parseInt(proceed(element, style), 10);\n\n if (dim !== element['offset' + style.capitalize()])\n return dim + 'px';\n\n var properties;\n if (style === 'height') {\n properties = ['border-top-width', 'padding-top',\n 'padding-bottom', 'border-bottom-width'];\n }\n else {\n properties = ['border-left-width', 'padding-left',\n 'padding-right', 'border-right-width'];\n }\n return properties.inject(dim, function(memo, property) {\n var val = proceed(element, property);\n return val === null ? memo : memo - parseInt(val, 10);\n }) + 'px';\n default: return proceed(element, style);\n }\n }\n );\n\n Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(\n function(proceed, element, attribute) {\n if (attribute === 'title') return element.title;\n return proceed(element, attribute);\n }\n );\n}\n\nelse if (Prototype.Browser.IE) {\n Element.Methods.getStyle = function(element, style) {\n element = $(element);\n style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();\n var value = element.style[style];\n if (!value && element.currentStyle) value = element.currentStyle[style];\n\n if (style == 'opacity') {\n if (value = (element.getStyle('filter') || '').match(/alpha\\(opacity=(.*)\\)/))\n if (value[1]) return parseFloat(value[1]) / 100;\n return 1.0;\n }\n\n if (value == 'auto') {\n if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))\n return element['offset' + style.capitalize()] + 'px';\n return null;\n }\n return value;\n };\n\n Element.Methods.setOpacity = function(element, value) {\n function stripAlpha(filter){\n return filter.replace(/alpha\\([^\\)]*\\)/gi,'');\n }\n element = $(element);\n var currentStyle = element.currentStyle;\n if ((currentStyle && !currentStyle.hasLayout) ||\n (!currentStyle && element.style.zoom == 'normal'))\n element.style.zoom = 1;\n\n var filter = element.getStyle('filter'), style = element.style;\n if (value == 1 || value === '') {\n (filter = stripAlpha(filter)) ?\n style.filter = filter : style.removeAttribute('filter');\n return element;\n } else if (value < 0.00001) value = 0;\n style.filter = stripAlpha(filter) +\n 'alpha(opacity=' + (value * 100) + ')';\n return element;\n };\n\n Element._attributeTranslations = (function(){\n\n var classProp = 'className',\n forProp = 'for',\n el = document.createElement('div');\n\n el.setAttribute(classProp, 'x');\n\n if (el.className !== 'x') {\n el.setAttribute('class', 'x');\n if (el.className === 'x') {\n classProp = 'class';\n }\n }\n el = null;\n\n el = document.createElement('label');\n el.setAttribute(forProp, 'x');\n if (el.htmlFor !== 'x') {\n el.setAttribute('htmlFor', 'x');\n if (el.htmlFor === 'x') {\n forProp = 'htmlFor';\n }\n }\n el = null;\n\n return {\n read: {\n names: {\n 'class': classProp,\n 'className': classProp,\n 'for': forProp,\n 'htmlFor': forProp\n },\n values: {\n _getAttr: function(element, attribute) {\n return element.getAttribute(attribute);\n },\n _getAttr2: function(element, attribute) {\n return element.getAttribute(attribute, 2);\n },\n _getAttrNode: function(element, attribute) {\n var node = element.getAttributeNode(attribute);\n return node ? node.value : \"\";\n },\n _getEv: (function(){\n\n var el = document.createElement('div'), f;\n el.onclick = Prototype.emptyFunction;\n var value = el.getAttribute('onclick');\n\n if (String(value).indexOf('{') > -1) {\n f = function(element, attribute) {\n attribute = element.getAttribute(attribute);\n if (!attribute) return null;\n attribute = attribute.toString();\n attribute = attribute.split('{')[1];\n attribute = attribute.split('}')[0];\n return attribute.strip();\n };\n }\n else if (value === '') {\n f = function(element, attribute) {\n attribute = element.getAttribute(attribute);\n if (!attribute) return null;\n return attribute.strip();\n };\n }\n el = null;\n return f;\n })(),\n _flag: function(element, attribute) {\n return $(element).hasAttribute(attribute) ? attribute : null;\n },\n style: function(element) {\n return element.style.cssText.toLowerCase();\n },\n title: function(element) {\n return element.title;\n }\n }\n }\n }\n })();\n\n Element._attributeTranslations.write = {\n names: Object.extend({\n cellpadding: 'cellPadding',\n cellspacing: 'cellSpacing'\n }, Element._attributeTranslations.read.names),\n values: {\n checked: function(element, value) {\n element.checked = !!value;\n },\n\n style: function(element, value) {\n element.style.cssText = value ? value : '';\n }\n }\n };\n\n Element._attributeTranslations.has = {};\n\n $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +\n 'encType maxLength readOnly longDesc frameBorder').each(function(attr) {\n Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;\n Element._attributeTranslations.has[attr.toLowerCase()] = attr;\n });\n\n (function(v) {\n Object.extend(v, {\n href: v._getAttr2,\n src: v._getAttr2,\n type: v._getAttr,\n action: v._getAttrNode,\n disabled: v._flag,\n checked: v._flag,\n readonly: v._flag,\n multiple: v._flag,\n onload: v._getEv,\n onunload: v._getEv,\n onclick: v._getEv,\n ondblclick: v._getEv,\n onmousedown: v._getEv,\n onmouseup: v._getEv,\n onmouseover: v._getEv,\n onmousemove: v._getEv,\n onmouseout: v._getEv,\n onfocus: v._getEv,\n onblur: v._getEv,\n onkeypress: v._getEv,\n onkeydown: v._getEv,\n onkeyup: v._getEv,\n onsubmit: v._getEv,\n onreset: v._getEv,\n onselect: v._getEv,\n onchange: v._getEv\n });\n })(Element._attributeTranslations.read.values);\n\n if (Prototype.BrowserFeatures.ElementExtensions) {\n (function() {\n function _descendants(element) {\n var nodes = element.getElementsByTagName('*'), results = [];\n for (var i = 0, node; node = nodes[i]; i++)\n if (node.tagName !== \"!\") // Filter out comment nodes.\n results.push(node);\n return results;\n }\n\n Element.Methods.down = function(element, expression, index) {\n element = $(element);\n if (arguments.length == 1) return element.firstDescendant();\n return Object.isNumber(expression) ? _descendants(element)[expression] :\n Element.select(element, expression)[index || 0];\n }\n })();\n }\n\n}\n\nelse if (Prototype.Browser.Gecko && /rv:1\\.8\\.0/.test(navigator.userAgent)) {\n Element.Methods.setOpacity = function(element, value) {\n element = $(element);\n element.style.opacity = (value == 1) ? 0.999999 :\n (value === '') ? '' : (value < 0.00001) ? 0 : value;\n return element;\n };\n}\n\nelse if (Prototype.Browser.WebKit) {\n Element.Methods.setOpacity = function(element, value) {\n element = $(element);\n element.style.opacity = (value == 1 || value === '') ? '' :\n (value < 0.00001) ? 0 : value;\n\n if (value == 1)\n if (element.tagName.toUpperCase() == 'IMG' && element.width) {\n element.width++; element.width--;\n } else try {\n var n = document.createTextNode(' ');\n element.appendChild(n);\n element.removeChild(n);\n } catch (e) { }\n\n return element;\n };\n}\n\nif ('outerHTML' in document.documentElement) {\n Element.Methods.replace = function(element, content) {\n element = $(element);\n\n if (content && content.toElement) content = content.toElement();\n if (Object.isElement(content)) {\n element.parentNode.replaceChild(content, element);\n return element;\n }\n\n content = Object.toHTML(content);\n var parent = element.parentNode, tagName = parent.tagName.toUpperCase();\n\n if (Element._insertionTranslations.tags[tagName]) {\n var nextSibling = element.next(),\n fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());\n parent.removeChild(element);\n if (nextSibling)\n fragments.each(function(node) { parent.insertBefore(node, nextSibling) });\n else\n fragments.each(function(node) { parent.appendChild(node) });\n }\n else element.outerHTML = content.stripScripts();\n\n content.evalScripts.bind(content).defer();\n return element;\n };\n}\n\nElement._returnOffset = function(l, t) {\n var result = [l, t];\n result.left = l;\n result.top = t;\n return result;\n};\n\nElement._getContentFromAnonymousElement = function(tagName, html, force) {\n var div = new Element('div'),\n t = Element._insertionTranslations.tags[tagName];\n\n var workaround = false;\n if (t) workaround = true;\n else if (force) {\n workaround = true;\n t = ['', '', 0];\n }\n\n if (workaround) {\n div.innerHTML = ' ' + t[0] + html + t[1];\n div.removeChild(div.firstChild);\n for (var i = t[2]; i--; ) {\n div = div.firstChild;\n }\n }\n else {\n div.innerHTML = html;\n }\n return $A(div.childNodes);\n};\n\nElement._insertionTranslations = {\n before: function(element, node) {\n element.parentNode.insertBefore(node, element);\n },\n top: function(element, node) {\n element.insertBefore(node, element.firstChild);\n },\n bottom: function(element, node) {\n element.appendChild(node);\n },\n after: function(element, node) {\n element.parentNode.insertBefore(node, element.nextSibling);\n },\n tags: {\n TABLE: ['', '
', 1],\n TBODY: ['', '
', 2],\n TR: ['', '
', 3],\n TD: ['
', '
', 4],\n SELECT: ['', 1]\n }\n};\n\n(function() {\n var tags = Element._insertionTranslations.tags;\n Object.extend(tags, {\n THEAD: tags.TBODY,\n TFOOT: tags.TBODY,\n TH: tags.TD\n });\n})();\n\nElement.Methods.Simulated = {\n hasAttribute: function(element, attribute) {\n attribute = Element._attributeTranslations.has[attribute] || attribute;\n var node = $(element).getAttributeNode(attribute);\n return !!(node && node.specified);\n }\n};\n\nElement.Methods.ByTag = { };\n\nObject.extend(Element, Element.Methods);\n\n(function(div) {\n\n if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {\n window.HTMLElement = { };\n window.HTMLElement.prototype = div['__proto__'];\n Prototype.BrowserFeatures.ElementExtensions = true;\n }\n\n div = null;\n\n})(document.createElement('div'));\n\nElement.extend = (function() {\n\n function checkDeficiency(tagName) {\n if (typeof window.Element != 'undefined') {\n var proto = window.Element.prototype;\n if (proto) {\n var id = '_' + (Math.random()+'').slice(2),\n el = document.createElement(tagName);\n proto[id] = 'x';\n var isBuggy = (el[id] !== 'x');\n delete proto[id];\n el = null;\n return isBuggy;\n }\n }\n return false;\n }\n\n function extendElementWith(element, methods) {\n for (var property in methods) {\n var value = methods[property];\n if (Object.isFunction(value) && !(property in element))\n element[property] = value.methodize();\n }\n }\n\n var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');\n\n if (Prototype.BrowserFeatures.SpecificElementExtensions) {\n if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {\n return function(element) {\n if (element && typeof element._extendedByPrototype == 'undefined') {\n var t = element.tagName;\n if (t && (/^(?:object|applet|embed)$/i.test(t))) {\n extendElementWith(element, Element.Methods);\n extendElementWith(element, Element.Methods.Simulated);\n extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);\n }\n }\n return element;\n }\n }\n return Prototype.K;\n }\n\n var Methods = { }, ByTag = Element.Methods.ByTag;\n\n var extend = Object.extend(function(element) {\n if (!element || typeof element._extendedByPrototype != 'undefined' ||\n element.nodeType != 1 || element == window) return element;\n\n var methods = Object.clone(Methods),\n tagName = element.tagName.toUpperCase();\n\n if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);\n\n extendElementWith(element, methods);\n\n element._extendedByPrototype = Prototype.emptyFunction;\n return element;\n\n }, {\n refresh: function() {\n if (!Prototype.BrowserFeatures.ElementExtensions) {\n Object.extend(Methods, Element.Methods);\n Object.extend(Methods, Element.Methods.Simulated);\n }\n }\n });\n\n extend.refresh();\n return extend;\n})();\n\nif (document.documentElement.hasAttribute) {\n Element.hasAttribute = function(element, attribute) {\n return element.hasAttribute(attribute);\n };\n}\nelse {\n Element.hasAttribute = Element.Methods.Simulated.hasAttribute;\n}\n\nElement.addMethods = function(methods) {\n var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;\n\n if (!methods) {\n Object.extend(Form, Form.Methods);\n Object.extend(Form.Element, Form.Element.Methods);\n Object.extend(Element.Methods.ByTag, {\n \"FORM\": Object.clone(Form.Methods),\n \"INPUT\": Object.clone(Form.Element.Methods),\n \"SELECT\": Object.clone(Form.Element.Methods),\n \"TEXTAREA\": Object.clone(Form.Element.Methods),\n \"BUTTON\": Object.clone(Form.Element.Methods)\n });\n }\n\n if (arguments.length == 2) {\n var tagName = methods;\n methods = arguments[1];\n }\n\n if (!tagName) Object.extend(Element.Methods, methods || { });\n else {\n if (Object.isArray(tagName)) tagName.each(extend);\n else extend(tagName);\n }\n\n function extend(tagName) {\n tagName = tagName.toUpperCase();\n if (!Element.Methods.ByTag[tagName])\n Element.Methods.ByTag[tagName] = { };\n Object.extend(Element.Methods.ByTag[tagName], methods);\n }\n\n function copy(methods, destination, onlyIfAbsent) {\n onlyIfAbsent = onlyIfAbsent || false;\n for (var property in methods) {\n var value = methods[property];\n if (!Object.isFunction(value)) continue;\n if (!onlyIfAbsent || !(property in destination))\n destination[property] = value.methodize();\n }\n }\n\n function findDOMClass(tagName) {\n var klass;\n var trans = {\n \"OPTGROUP\": \"OptGroup\", \"TEXTAREA\": \"TextArea\", \"P\": \"Paragraph\",\n \"FIELDSET\": \"FieldSet\", \"UL\": \"UList\", \"OL\": \"OList\", \"DL\": \"DList\",\n \"DIR\": \"Directory\", \"H1\": \"Heading\", \"H2\": \"Heading\", \"H3\": \"Heading\",\n \"H4\": \"Heading\", \"H5\": \"Heading\", \"H6\": \"Heading\", \"Q\": \"Quote\",\n \"INS\": \"Mod\", \"DEL\": \"Mod\", \"A\": \"Anchor\", \"IMG\": \"Image\", \"CAPTION\":\n \"TableCaption\", \"COL\": \"TableCol\", \"COLGROUP\": \"TableCol\", \"THEAD\":\n \"TableSection\", \"TFOOT\": \"TableSection\", \"TBODY\": \"TableSection\", \"TR\":\n \"TableRow\", \"TH\": \"TableCell\", \"TD\": \"TableCell\", \"FRAMESET\":\n \"FrameSet\", \"IFRAME\": \"IFrame\"\n };\n if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';\n if (window[klass]) return window[klass];\n klass = 'HTML' + tagName + 'Element';\n if (window[klass]) return window[klass];\n klass = 'HTML' + tagName.capitalize() + 'Element';\n if (window[klass]) return window[klass];\n\n var element = document.createElement(tagName),\n proto = element['__proto__'] || element.constructor.prototype;\n\n element = null;\n return proto;\n }\n\n var elementPrototype = window.HTMLElement ? HTMLElement.prototype :\n Element.prototype;\n\n if (F.ElementExtensions) {\n copy(Element.Methods, elementPrototype);\n copy(Element.Methods.Simulated, elementPrototype, true);\n }\n\n if (F.SpecificElementExtensions) {\n for (var tag in Element.Methods.ByTag) {\n var klass = findDOMClass(tag);\n if (Object.isUndefined(klass)) continue;\n copy(T[tag], klass.prototype);\n }\n }\n\n Object.extend(Element, Element.Methods);\n delete Element.ByTag;\n\n if (Element.extend.refresh) Element.extend.refresh();\n Element.cache = { };\n};\n\n\ndocument.viewport = {\n\n getDimensions: function() {\n return { width: this.getWidth(), height: this.getHeight() };\n },\n\n getScrollOffsets: function() {\n return Element._returnOffset(\n window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,\n window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop);\n }\n};\n\n(function(viewport) {\n var B = Prototype.Browser, doc = document, element, property = {};\n\n function getRootElement() {\n if (B.WebKit && !doc.evaluate)\n return document;\n\n if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)\n return document.body;\n\n return document.documentElement;\n }\n\n function define(D) {\n if (!element) element = getRootElement();\n\n property[D] = 'client' + D;\n\n viewport['get' + D] = function() { return element[property[D]] };\n return viewport['get' + D]();\n }\n\n viewport.getWidth = define.curry('Width');\n\n viewport.getHeight = define.curry('Height');\n})(document.viewport);\n\n\nElement.Storage = {\n UID: 1\n};\n\nElement.addMethods({\n getStorage: function(element) {\n if (!(element = $(element))) return;\n\n var uid;\n if (element === window) {\n uid = 0;\n } else {\n if (typeof element._prototypeUID === \"undefined\")\n element._prototypeUID = Element.Storage.UID++;\n uid = element._prototypeUID;\n }\n\n if (!Element.Storage[uid])\n Element.Storage[uid] = $H();\n\n return Element.Storage[uid];\n },\n\n store: function(element, key, value) {\n if (!(element = $(element))) return;\n\n if (arguments.length === 2) {\n Element.getStorage(element).update(key);\n } else {\n Element.getStorage(element).set(key, value);\n }\n\n return element;\n },\n\n retrieve: function(element, key, defaultValue) {\n if (!(element = $(element))) return;\n var hash = Element.getStorage(element), value = hash.get(key);\n\n if (Object.isUndefined(value)) {\n hash.set(key, defaultValue);\n value = defaultValue;\n }\n\n return value;\n },\n\n clone: function(element, deep) {\n if (!(element = $(element))) return;\n var clone = element.cloneNode(deep);\n clone._prototypeUID = void 0;\n if (deep) {\n var descendants = Element.select(clone, '*'),\n i = descendants.length;\n while (i--) {\n descendants[i]._prototypeUID = void 0;\n }\n }\n return Element.extend(clone);\n },\n\n purge: function(element) {\n if (!(element = $(element))) return;\n var purgeElement = Element._purgeElement;\n\n purgeElement(element);\n\n var descendants = element.getElementsByTagName('*'),\n i = descendants.length;\n\n while (i--) purgeElement(descendants[i]);\n\n return null;\n }\n});\n\n(function() {\n\n function toDecimal(pctString) {\n var match = pctString.match(/^(\\d+)%?$/i);\n if (!match) return null;\n return (Number(match[1]) / 100);\n }\n\n function getPixelValue(value, property, context) {\n var element = null;\n if (Object.isElement(value)) {\n element = value;\n value = element.getStyle(property);\n }\n\n if (value === null) {\n return null;\n }\n\n if ((/^(?:-)?\\d+(\\.\\d+)?(px)?$/i).test(value)) {\n return window.parseFloat(value);\n }\n\n var isPercentage = value.include('%'), isViewport = (context === document.viewport);\n\n if (/\\d/.test(value) && element && element.runtimeStyle && !(isPercentage && isViewport)) {\n var style = element.style.left, rStyle = element.runtimeStyle.left;\n element.runtimeStyle.left = element.currentStyle.left;\n element.style.left = value || 0;\n value = element.style.pixelLeft;\n element.style.left = style;\n element.runtimeStyle.left = rStyle;\n\n return value;\n }\n\n if (element && isPercentage) {\n context = context || element.parentNode;\n var decimal = toDecimal(value);\n var whole = null;\n var position = element.getStyle('position');\n\n var isHorizontal = property.include('left') || property.include('right') ||\n property.include('width');\n\n var isVertical = property.include('top') || property.include('bottom') ||\n property.include('height');\n\n if (context === document.viewport) {\n if (isHorizontal) {\n whole = document.viewport.getWidth();\n } else if (isVertical) {\n whole = document.viewport.getHeight();\n }\n } else {\n if (isHorizontal) {\n whole = $(context).measure('width');\n } else if (isVertical) {\n whole = $(context).measure('height');\n }\n }\n\n return (whole === null) ? 0 : whole * decimal;\n }\n\n return 0;\n }\n\n function toCSSPixels(number) {\n if (Object.isString(number) && number.endsWith('px')) {\n return number;\n }\n return number + 'px';\n }\n\n function isDisplayed(element) {\n var originalElement = element;\n while (element && element.parentNode) {\n var display = element.getStyle('display');\n if (display === 'none') {\n return false;\n }\n element = $(element.parentNode);\n }\n return true;\n }\n\n var hasLayout = Prototype.K;\n if ('currentStyle' in document.documentElement) {\n hasLayout = function(element) {\n if (!element.currentStyle.hasLayout) {\n element.style.zoom = 1;\n }\n return element;\n };\n }\n\n function cssNameFor(key) {\n if (key.include('border')) key = key + '-width';\n return key.camelize();\n }\n\n Element.Layout = Class.create(Hash, {\n initialize: function($super, element, preCompute) {\n $super();\n this.element = $(element);\n\n Element.Layout.PROPERTIES.each( function(property) {\n this._set(property, null);\n }, this);\n\n if (preCompute) {\n this._preComputing = true;\n this._begin();\n Element.Layout.PROPERTIES.each( this._compute, this );\n this._end();\n this._preComputing = false;\n }\n },\n\n _set: function(property, value) {\n return Hash.prototype.set.call(this, property, value);\n },\n\n set: function(property, value) {\n throw \"Properties of Element.Layout are read-only.\";\n },\n\n get: function($super, property) {\n var value = $super(property);\n return value === null ? this._compute(property) : value;\n },\n\n _begin: function() {\n if (this._prepared) return;\n\n var element = this.element;\n if (isDisplayed(element)) {\n this._prepared = true;\n return;\n }\n\n var originalStyles = {\n position: element.style.position || '',\n width: element.style.width || '',\n visibility: element.style.visibility || '',\n display: element.style.display || ''\n };\n\n element.store('prototype_original_styles', originalStyles);\n\n var position = element.getStyle('position'),\n width = element.getStyle('width');\n\n if (width === \"0px\" || width === null) {\n element.style.display = 'block';\n width = element.getStyle('width');\n }\n\n var context = (position === 'fixed') ? document.viewport :\n element.parentNode;\n\n element.setStyle({\n position: 'absolute',\n visibility: 'hidden',\n display: 'block'\n });\n\n var positionedWidth = element.getStyle('width');\n\n var newWidth;\n if (width && (positionedWidth === width)) {\n newWidth = getPixelValue(element, 'width', context);\n } else if (position === 'absolute' || position === 'fixed') {\n newWidth = getPixelValue(element, 'width', context);\n } else {\n var parent = element.parentNode, pLayout = $(parent).getLayout();\n\n newWidth = pLayout.get('width') -\n this.get('margin-left') -\n this.get('border-left') -\n this.get('padding-left') -\n this.get('padding-right') -\n this.get('border-right') -\n this.get('margin-right');\n }\n\n element.setStyle({ width: newWidth + 'px' });\n\n this._prepared = true;\n },\n\n _end: function() {\n var element = this.element;\n var originalStyles = element.retrieve('prototype_original_styles');\n element.store('prototype_original_styles', null);\n element.setStyle(originalStyles);\n this._prepared = false;\n },\n\n _compute: function(property) {\n var COMPUTATIONS = Element.Layout.COMPUTATIONS;\n if (!(property in COMPUTATIONS)) {\n throw \"Property not found.\";\n }\n\n return this._set(property, COMPUTATIONS[property].call(this, this.element));\n },\n\n toObject: function() {\n var args = $A(arguments);\n var keys = (args.length === 0) ? Element.Layout.PROPERTIES :\n args.join(' ').split(' ');\n var obj = {};\n keys.each( function(key) {\n if (!Element.Layout.PROPERTIES.include(key)) return;\n var value = this.get(key);\n if (value != null) obj[key] = value;\n }, this);\n return obj;\n },\n\n toHash: function() {\n var obj = this.toObject.apply(this, arguments);\n return new Hash(obj);\n },\n\n toCSS: function() {\n var args = $A(arguments);\n var keys = (args.length === 0) ? Element.Layout.PROPERTIES :\n args.join(' ').split(' ');\n var css = {};\n\n keys.each( function(key) {\n if (!Element.Layout.PROPERTIES.include(key)) return;\n if (Element.Layout.COMPOSITE_PROPERTIES.include(key)) return;\n\n var value = this.get(key);\n if (value != null) css[cssNameFor(key)] = value + 'px';\n }, this);\n return css;\n },\n\n inspect: function() {\n return \"#\";\n }\n });\n\n Object.extend(Element.Layout, {\n PROPERTIES: $w('height width top left right bottom border-left border-right border-top border-bottom padding-left padding-right padding-top padding-bottom margin-top margin-bottom margin-left margin-right padding-box-width padding-box-height border-box-width border-box-height margin-box-width margin-box-height'),\n\n COMPOSITE_PROPERTIES: $w('padding-box-width padding-box-height margin-box-width margin-box-height border-box-width border-box-height'),\n\n COMPUTATIONS: {\n 'height': function(element) {\n if (!this._preComputing) this._begin();\n\n var bHeight = this.get('border-box-height');\n if (bHeight <= 0) {\n if (!this._preComputing) this._end();\n return 0;\n }\n\n var bTop = this.get('border-top'),\n bBottom = this.get('border-bottom');\n\n var pTop = this.get('padding-top'),\n pBottom = this.get('padding-bottom');\n\n if (!this._preComputing) this._end();\n\n return bHeight - bTop - bBottom - pTop - pBottom;\n },\n\n 'width': function(element) {\n if (!this._preComputing) this._begin();\n\n var bWidth = this.get('border-box-width');\n if (bWidth <= 0) {\n if (!this._preComputing) this._end();\n return 0;\n }\n\n var bLeft = this.get('border-left'),\n bRight = this.get('border-right');\n\n var pLeft = this.get('padding-left'),\n pRight = this.get('padding-right');\n\n if (!this._preComputing) this._end();\n\n return bWidth - bLeft - bRight - pLeft - pRight;\n },\n\n 'padding-box-height': function(element) {\n var height = this.get('height'),\n pTop = this.get('padding-top'),\n pBottom = this.get('padding-bottom');\n\n return height + pTop + pBottom;\n },\n\n 'padding-box-width': function(element) {\n var width = this.get('width'),\n pLeft = this.get('padding-left'),\n pRight = this.get('padding-right');\n\n return width + pLeft + pRight;\n },\n\n 'border-box-height': function(element) {\n if (!this._preComputing) this._begin();\n var height = element.offsetHeight;\n if (!this._preComputing) this._end();\n return height;\n },\n\n 'border-box-width': function(element) {\n if (!this._preComputing) this._begin();\n var width = element.offsetWidth;\n if (!this._preComputing) this._end();\n return width;\n },\n\n 'margin-box-height': function(element) {\n var bHeight = this.get('border-box-height'),\n mTop = this.get('margin-top'),\n mBottom = this.get('margin-bottom');\n\n if (bHeight <= 0) return 0;\n\n return bHeight + mTop + mBottom;\n },\n\n 'margin-box-width': function(element) {\n var bWidth = this.get('border-box-width'),\n mLeft = this.get('margin-left'),\n mRight = this.get('margin-right');\n\n if (bWidth <= 0) return 0;\n\n return bWidth + mLeft + mRight;\n },\n\n 'top': function(element) {\n var offset = element.positionedOffset();\n return offset.top;\n },\n\n 'bottom': function(element) {\n var offset = element.positionedOffset(),\n parent = element.getOffsetParent(),\n pHeight = parent.measure('height');\n\n var mHeight = this.get('border-box-height');\n\n return pHeight - mHeight - offset.top;\n },\n\n 'left': function(element) {\n var offset = element.positionedOffset();\n return offset.left;\n },\n\n 'right': function(element) {\n var offset = element.positionedOffset(),\n parent = element.getOffsetParent(),\n pWidth = parent.measure('width');\n\n var mWidth = this.get('border-box-width');\n\n return pWidth - mWidth - offset.left;\n },\n\n 'padding-top': function(element) {\n return getPixelValue(element, 'paddingTop');\n },\n\n 'padding-bottom': function(element) {\n return getPixelValue(element, 'paddingBottom');\n },\n\n 'padding-left': function(element) {\n return getPixelValue(element, 'paddingLeft');\n },\n\n 'padding-right': function(element) {\n return getPixelValue(element, 'paddingRight');\n },\n\n 'border-top': function(element) {\n return getPixelValue(element, 'borderTopWidth');\n },\n\n 'border-bottom': function(element) {\n return getPixelValue(element, 'borderBottomWidth');\n },\n\n 'border-left': function(element) {\n return getPixelValue(element, 'borderLeftWidth');\n },\n\n 'border-right': function(element) {\n return getPixelValue(element, 'borderRightWidth');\n },\n\n 'margin-top': function(element) {\n return getPixelValue(element, 'marginTop');\n },\n\n 'margin-bottom': function(element) {\n return getPixelValue(element, 'marginBottom');\n },\n\n 'margin-left': function(element) {\n return getPixelValue(element, 'marginLeft');\n },\n\n 'margin-right': function(element) {\n return getPixelValue(element, 'marginRight');\n }\n }\n });\n\n if ('getBoundingClientRect' in document.documentElement) {\n Object.extend(Element.Layout.COMPUTATIONS, {\n 'right': function(element) {\n var parent = hasLayout(element.getOffsetParent());\n var rect = element.getBoundingClientRect(),\n pRect = parent.getBoundingClientRect();\n\n return (pRect.right - rect.right).round();\n },\n\n 'bottom': function(element) {\n var parent = hasLayout(element.getOffsetParent());\n var rect = element.getBoundingClientRect(),\n pRect = parent.getBoundingClientRect();\n\n return (pRect.bottom - rect.bottom).round();\n }\n });\n }\n\n Element.Offset = Class.create({\n initialize: function(left, top) {\n this.left = left.round();\n this.top = top.round();\n\n this[0] = this.left;\n this[1] = this.top;\n },\n\n relativeTo: function(offset) {\n return new Element.Offset(\n this.left - offset.left,\n this.top - offset.top\n );\n },\n\n inspect: function() {\n return \"#\".interpolate(this);\n },\n\n toString: function() {\n return \"[#{left}, #{top}]\".interpolate(this);\n },\n\n toArray: function() {\n return [this.left, this.top];\n }\n });\n\n function getLayout(element, preCompute) {\n return new Element.Layout(element, preCompute);\n }\n\n function measure(element, property) {\n return $(element).getLayout().get(property);\n }\n\n function getDimensions(element) {\n element = $(element);\n var display = Element.getStyle(element, 'display');\n\n if (display && display !== 'none') {\n return { width: element.offsetWidth, height: element.offsetHeight };\n }\n\n var style = element.style;\n var originalStyles = {\n visibility: style.visibility,\n position: style.position,\n display: style.display\n };\n\n var newStyles = {\n visibility: 'hidden',\n display: 'block'\n };\n\n if (originalStyles.position !== 'fixed')\n newStyles.position = 'absolute';\n\n Element.setStyle(element, newStyles);\n\n var dimensions = {\n width: element.offsetWidth,\n height: element.offsetHeight\n };\n\n Element.setStyle(element, originalStyles);\n\n return dimensions;\n }\n\n function getOffsetParent(element) {\n element = $(element);\n\n if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))\n return $(document.body);\n\n var isInline = (Element.getStyle(element, 'display') === 'inline');\n if (!isInline && element.offsetParent) return $(element.offsetParent);\n\n while ((element = element.parentNode) && element !== document.body) {\n if (Element.getStyle(element, 'position') !== 'static') {\n return isHtml(element) ? $(document.body) : $(element);\n }\n }\n\n return $(document.body);\n }\n\n\n function cumulativeOffset(element) {\n element = $(element);\n var valueT = 0, valueL = 0;\n if (element.parentNode) {\n do {\n valueT += element.offsetTop || 0;\n valueL += element.offsetLeft || 0;\n element = element.offsetParent;\n } while (element);\n }\n return new Element.Offset(valueL, valueT);\n }\n\n function positionedOffset(element) {\n element = $(element);\n\n var layout = element.getLayout();\n\n var valueT = 0, valueL = 0;\n do {\n valueT += element.offsetTop || 0;\n valueL += element.offsetLeft || 0;\n element = element.offsetParent;\n if (element) {\n if (isBody(element)) break;\n var p = Element.getStyle(element, 'position');\n if (p !== 'static') break;\n }\n } while (element);\n\n valueL -= layout.get('margin-top');\n valueT -= layout.get('margin-left');\n\n return new Element.Offset(valueL, valueT);\n }\n\n function cumulativeScrollOffset(element) {\n var valueT = 0, valueL = 0;\n do {\n valueT += element.scrollTop || 0;\n valueL += element.scrollLeft || 0;\n element = element.parentNode;\n } while (element);\n return new Element.Offset(valueL, valueT);\n }\n\n function viewportOffset(forElement) {\n element = $(element);\n var valueT = 0, valueL = 0, docBody = document.body;\n\n var element = forElement;\n do {\n valueT += element.offsetTop || 0;\n valueL += element.offsetLeft || 0;\n if (element.offsetParent == docBody &&\n Element.getStyle(element, 'position') == 'absolute') break;\n } while (element = element.offsetParent);\n\n element = forElement;\n do {\n if (element != docBody) {\n valueT -= element.scrollTop || 0;\n valueL -= element.scrollLeft || 0;\n }\n } while (element = element.parentNode);\n return new Element.Offset(valueL, valueT);\n }\n\n function absolutize(element) {\n element = $(element);\n\n if (Element.getStyle(element, 'position') === 'absolute') {\n return element;\n }\n\n var offsetParent = getOffsetParent(element);\n var eOffset = element.viewportOffset(),\n pOffset = offsetParent.viewportOffset();\n\n var offset = eOffset.relativeTo(pOffset);\n var layout = element.getLayout();\n\n element.store('prototype_absolutize_original_styles', {\n left: element.getStyle('left'),\n top: element.getStyle('top'),\n width: element.getStyle('width'),\n height: element.getStyle('height')\n });\n\n element.setStyle({\n position: 'absolute',\n top: offset.top + 'px',\n left: offset.left + 'px',\n width: layout.get('width') + 'px',\n height: layout.get('height') + 'px'\n });\n\n return element;\n }\n\n function relativize(element) {\n element = $(element);\n if (Element.getStyle(element, 'position') === 'relative') {\n return element;\n }\n\n var originalStyles =\n element.retrieve('prototype_absolutize_original_styles');\n\n if (originalStyles) element.setStyle(originalStyles);\n return element;\n }\n\n if (Prototype.Browser.IE) {\n getOffsetParent = getOffsetParent.wrap(\n function(proceed, element) {\n element = $(element);\n\n if (isDocument(element) || isDetached(element) || isBody(element) || isHtml(element))\n return $(document.body);\n\n var position = element.getStyle('position');\n if (position !== 'static') return proceed(element);\n\n element.setStyle({ position: 'relative' });\n var value = proceed(element);\n element.setStyle({ position: position });\n return value;\n }\n );\n\n positionedOffset = positionedOffset.wrap(function(proceed, element) {\n element = $(element);\n if (!element.parentNode) return new Element.Offset(0, 0);\n var position = element.getStyle('position');\n if (position !== 'static') return proceed(element);\n\n var offsetParent = element.getOffsetParent();\n if (offsetParent && offsetParent.getStyle('position') === 'fixed')\n hasLayout(offsetParent);\n\n element.setStyle({ position: 'relative' });\n var value = proceed(element);\n element.setStyle({ position: position });\n return value;\n });\n } else if (Prototype.Browser.Webkit) {\n cumulativeOffset = function(element) {\n element = $(element);\n var valueT = 0, valueL = 0;\n do {\n valueT += element.offsetTop || 0;\n valueL += element.offsetLeft || 0;\n if (element.offsetParent == document.body)\n if (Element.getStyle(element, 'position') == 'absolute') break;\n\n element = element.offsetParent;\n } while (element);\n\n return new Element.Offset(valueL, valueT);\n };\n }\n\n\n Element.addMethods({\n getLayout: getLayout,\n measure: measure,\n getDimensions: getDimensions,\n getOffsetParent: getOffsetParent,\n cumulativeOffset: cumulativeOffset,\n positionedOffset: positionedOffset,\n cumulativeScrollOffset: cumulativeScrollOffset,\n viewportOffset: viewportOffset,\n absolutize: absolutize,\n relativize: relativize\n });\n\n function isBody(element) {\n return element.nodeName.toUpperCase() === 'BODY';\n }\n\n function isHtml(element) {\n return element.nodeName.toUpperCase() === 'HTML';\n }\n\n function isDocument(element) {\n return element.nodeType === Node.DOCUMENT_NODE;\n }\n\n function isDetached(element) {\n return element !== document.body &&\n !Element.descendantOf(element, document.body);\n }\n\n if ('getBoundingClientRect' in document.documentElement) {\n Element.addMethods({\n viewportOffset: function(element) {\n element = $(element);\n if (isDetached(element)) return new Element.Offset(0, 0);\n\n var rect = element.getBoundingClientRect(),\n docEl = document.documentElement;\n return new Element.Offset(rect.left - docEl.clientLeft,\n rect.top - docEl.clientTop);\n }\n });\n }\n})();\nwindow.$$ = function() {\n var expression = $A(arguments).join(', ');\n return Prototype.Selector.select(expression, document);\n};\n\nPrototype.Selector = (function() {\n\n function select() {\n throw new Error('Method \"Prototype.Selector.select\" must be defined.');\n }\n\n function match() {\n throw new Error('Method \"Prototype.Selector.match\" must be defined.');\n }\n\n function find(elements, expression, index) {\n index = index || 0;\n var match = Prototype.Selector.match, length = elements.length, matchIndex = 0, i;\n\n for (i = 0; i < length; i++) {\n if (match(elements[i], expression) && index == matchIndex++) {\n return Element.extend(elements[i]);\n }\n }\n }\n\n function extendElements(elements) {\n for (var i = 0, length = elements.length; i < length; i++) {\n Element.extend(elements[i]);\n }\n return elements;\n }\n\n\n var K = Prototype.K;\n\n return {\n select: select,\n match: match,\n find: find,\n extendElements: (Element.extend === K) ? K : extendElements,\n extendElement: Element.extend\n };\n})();\nPrototype._original_property = window.Sizzle;\n/*!\n * Sizzle CSS Selector Engine - v1.0\n * Copyright 2009, The Dojo Foundation\n * Released under the MIT, BSD, and GPL Licenses.\n * More information: http://sizzlejs.com/\n */\n(function(){\n\nvar chunker = /((?:\\((?:\\([^()]+\\)|[^()]+)+\\)|\\[(?:\\[[^[\\]]*\\]|['\"][^'\"]*['\"]|[^[\\]'\"]+)+\\]|\\\\.|[^ >+~,(\\[\\\\]+)+|[>+~])(\\s*,\\s*)?((?:.|\\r|\\n)*)/g,\n\tdone = 0,\n\ttoString = Object.prototype.toString,\n\thasDuplicate = false,\n\tbaseHasDuplicate = true;\n\n[0, 0].sort(function(){\n\tbaseHasDuplicate = false;\n\treturn 0;\n});\n\nvar Sizzle = function(selector, context, results, seed) {\n\tresults = results || [];\n\tvar origContext = context = context || document;\n\n\tif ( context.nodeType !== 1 && context.nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tvar parts = [], m, set, checkSet, check, mode, extra, prune = true, contextXML = isXML(context),\n\t\tsoFar = selector;\n\n\twhile ( (chunker.exec(\"\"), m = chunker.exec(soFar)) !== null ) {\n\t\tsoFar = m[3];\n\n\t\tparts.push( m[1] );\n\n\t\tif ( m[2] ) {\n\t\t\textra = m[3];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif ( parts.length > 1 && origPOS.exec( selector ) ) {\n\t\tif ( parts.length === 2 && Expr.relative[ parts[0] ] ) {\n\t\t\tset = posProcess( parts[0] + parts[1], context );\n\t\t} else {\n\t\t\tset = Expr.relative[ parts[0] ] ?\n\t\t\t\t[ context ] :\n\t\t\t\tSizzle( parts.shift(), context );\n\n\t\t\twhile ( parts.length ) {\n\t\t\t\tselector = parts.shift();\n\n\t\t\t\tif ( Expr.relative[ selector ] )\n\t\t\t\t\tselector += parts.shift();\n\n\t\t\t\tset = posProcess( selector, set );\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&\n\t\t\t\tExpr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {\n\t\t\tvar ret = Sizzle.find( parts.shift(), context, contextXML );\n\t\t\tcontext = ret.expr ? Sizzle.filter( ret.expr, ret.set )[0] : ret.set[0];\n\t\t}\n\n\t\tif ( context ) {\n\t\t\tvar ret = seed ?\n\t\t\t\t{ expr: parts.pop(), set: makeArray(seed) } :\n\t\t\t\tSizzle.find( parts.pop(), parts.length === 1 && (parts[0] === \"~\" || parts[0] === \"+\") && context.parentNode ? context.parentNode : context, contextXML );\n\t\t\tset = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;\n\n\t\t\tif ( parts.length > 0 ) {\n\t\t\t\tcheckSet = makeArray(set);\n\t\t\t} else {\n\t\t\t\tprune = false;\n\t\t\t}\n\n\t\t\twhile ( parts.length ) {\n\t\t\t\tvar cur = parts.pop(), pop = cur;\n\n\t\t\t\tif ( !Expr.relative[ cur ] ) {\n\t\t\t\t\tcur = \"\";\n\t\t\t\t} else {\n\t\t\t\t\tpop = parts.pop();\n\t\t\t\t}\n\n\t\t\t\tif ( pop == null ) {\n\t\t\t\t\tpop = context;\n\t\t\t\t}\n\n\t\t\t\tExpr.relative[ cur ]( checkSet, pop, contextXML );\n\t\t\t}\n\t\t} else {\n\t\t\tcheckSet = parts = [];\n\t\t}\n\t}\n\n\tif ( !checkSet ) {\n\t\tcheckSet = set;\n\t}\n\n\tif ( !checkSet ) {\n\t\tthrow \"Syntax error, unrecognized expression: \" + (cur || selector);\n\t}\n\n\tif ( toString.call(checkSet) === \"[object Array]\" ) {\n\t\tif ( !prune ) {\n\t\t\tresults.push.apply( results, checkSet );\n\t\t} else if ( context && context.nodeType === 1 ) {\n\t\t\tfor ( var i = 0; checkSet[i] != null; i++ ) {\n\t\t\t\tif ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && contains(context, checkSet[i])) ) {\n\t\t\t\t\tresults.push( set[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( var i = 0; checkSet[i] != null; i++ ) {\n\t\t\t\tif ( checkSet[i] && checkSet[i].nodeType === 1 ) {\n\t\t\t\t\tresults.push( set[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmakeArray( checkSet, results );\n\t}\n\n\tif ( extra ) {\n\t\tSizzle( extra, origContext, results, seed );\n\t\tSizzle.uniqueSort( results );\n\t}\n\n\treturn results;\n};\n\nSizzle.uniqueSort = function(results){\n\tif ( sortOrder ) {\n\t\thasDuplicate = baseHasDuplicate;\n\t\tresults.sort(sortOrder);\n\n\t\tif ( hasDuplicate ) {\n\t\t\tfor ( var i = 1; i < results.length; i++ ) {\n\t\t\t\tif ( results[i] === results[i-1] ) {\n\t\t\t\t\tresults.splice(i--, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n};\n\nSizzle.matches = function(expr, set){\n\treturn Sizzle(expr, null, null, set);\n};\n\nSizzle.find = function(expr, context, isXML){\n\tvar set, match;\n\n\tif ( !expr ) {\n\t\treturn [];\n\t}\n\n\tfor ( var i = 0, l = Expr.order.length; i < l; i++ ) {\n\t\tvar type = Expr.order[i], match;\n\n\t\tif ( (match = Expr.leftMatch[ type ].exec( expr )) ) {\n\t\t\tvar left = match[1];\n\t\t\tmatch.splice(1,1);\n\n\t\t\tif ( left.substr( left.length - 1 ) !== \"\\\\\" ) {\n\t\t\t\tmatch[1] = (match[1] || \"\").replace(/\\\\/g, \"\");\n\t\t\t\tset = Expr.find[ type ]( match, context, isXML );\n\t\t\t\tif ( set != null ) {\n\t\t\t\t\texpr = expr.replace( Expr.match[ type ], \"\" );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( !set ) {\n\t\tset = context.getElementsByTagName(\"*\");\n\t}\n\n\treturn {set: set, expr: expr};\n};\n\nSizzle.filter = function(expr, set, inplace, not){\n\tvar old = expr, result = [], curLoop = set, match, anyFound,\n\t\tisXMLFilter = set && set[0] && isXML(set[0]);\n\n\twhile ( expr && set.length ) {\n\t\tfor ( var type in Expr.filter ) {\n\t\t\tif ( (match = Expr.match[ type ].exec( expr )) != null ) {\n\t\t\t\tvar filter = Expr.filter[ type ], found, item;\n\t\t\t\tanyFound = false;\n\n\t\t\t\tif ( curLoop == result ) {\n\t\t\t\t\tresult = [];\n\t\t\t\t}\n\n\t\t\t\tif ( Expr.preFilter[ type ] ) {\n\t\t\t\t\tmatch = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );\n\n\t\t\t\t\tif ( !match ) {\n\t\t\t\t\t\tanyFound = found = true;\n\t\t\t\t\t} else if ( match === true ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( match ) {\n\t\t\t\t\tfor ( var i = 0; (item = curLoop[i]) != null; i++ ) {\n\t\t\t\t\t\tif ( item ) {\n\t\t\t\t\t\t\tfound = filter( item, match, i, curLoop );\n\t\t\t\t\t\t\tvar pass = not ^ !!found;\n\n\t\t\t\t\t\t\tif ( inplace && found != null ) {\n\t\t\t\t\t\t\t\tif ( pass ) {\n\t\t\t\t\t\t\t\t\tanyFound = true;\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcurLoop[i] = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( pass ) {\n\t\t\t\t\t\t\t\tresult.push( item );\n\t\t\t\t\t\t\t\tanyFound = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( found !== undefined ) {\n\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\tcurLoop = result;\n\t\t\t\t\t}\n\n\t\t\t\t\texpr = expr.replace( Expr.match[ type ], \"\" );\n\n\t\t\t\t\tif ( !anyFound ) {\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( expr == old ) {\n\t\t\tif ( anyFound == null ) {\n\t\t\t\tthrow \"Syntax error, unrecognized expression: \" + expr;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\told = expr;\n\t}\n\n\treturn curLoop;\n};\n\nvar Expr = Sizzle.selectors = {\n\torder: [ \"ID\", \"NAME\", \"TAG\" ],\n\tmatch: {\n\t\tID: /#((?:[\\w\\u00c0-\\uFFFF-]|\\\\.)+)/,\n\t\tCLASS: /\\.((?:[\\w\\u00c0-\\uFFFF-]|\\\\.)+)/,\n\t\tNAME: /\\[name=['\"]*((?:[\\w\\u00c0-\\uFFFF-]|\\\\.)+)['\"]*\\]/,\n\t\tATTR: /\\[\\s*((?:[\\w\\u00c0-\\uFFFF-]|\\\\.)+)\\s*(?:(\\S?=)\\s*(['\"]*)(.*?)\\3|)\\s*\\]/,\n\t\tTAG: /^((?:[\\w\\u00c0-\\uFFFF\\*-]|\\\\.)+)/,\n\t\tCHILD: /:(only|nth|last|first)-child(?:\\((even|odd|[\\dn+-]*)\\))?/,\n\t\tPOS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\\((\\d*)\\))?(?=[^-]|$)/,\n\t\tPSEUDO: /:((?:[\\w\\u00c0-\\uFFFF-]|\\\\.)+)(?:\\((['\"]*)((?:\\([^\\)]+\\)|[^\\2\\(\\)]*)+)\\2\\))?/\n\t},\n\tleftMatch: {},\n\tattrMap: {\n\t\t\"class\": \"className\",\n\t\t\"for\": \"htmlFor\"\n\t},\n\tattrHandle: {\n\t\thref: function(elem){\n\t\t\treturn elem.getAttribute(\"href\");\n\t\t}\n\t},\n\trelative: {\n\t\t\"+\": function(checkSet, part, isXML){\n\t\t\tvar isPartStr = typeof part === \"string\",\n\t\t\t\tisTag = isPartStr && !/\\W/.test(part),\n\t\t\t\tisPartStrNotTag = isPartStr && !isTag;\n\n\t\t\tif ( isTag && !isXML ) {\n\t\t\t\tpart = part.toUpperCase();\n\t\t\t}\n\n\t\t\tfor ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {\n\t\t\t\tif ( (elem = checkSet[i]) ) {\n\t\t\t\t\twhile ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}\n\n\t\t\t\t\tcheckSet[i] = isPartStrNotTag || elem && elem.nodeName === part ?\n\t\t\t\t\t\telem || false :\n\t\t\t\t\t\telem === part;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( isPartStrNotTag ) {\n\t\t\t\tSizzle.filter( part, checkSet, true );\n\t\t\t}\n\t\t},\n\t\t\">\": function(checkSet, part, isXML){\n\t\t\tvar isPartStr = typeof part === \"string\";\n\n\t\t\tif ( isPartStr && !/\\W/.test(part) ) {\n\t\t\t\tpart = isXML ? part : part.toUpperCase();\n\n\t\t\t\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\t\t\t\tvar elem = checkSet[i];\n\t\t\t\t\tif ( elem ) {\n\t\t\t\t\t\tvar parent = elem.parentNode;\n\t\t\t\t\t\tcheckSet[i] = parent.nodeName === part ? parent : false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\t\t\t\tvar elem = checkSet[i];\n\t\t\t\t\tif ( elem ) {\n\t\t\t\t\t\tcheckSet[i] = isPartStr ?\n\t\t\t\t\t\t\telem.parentNode :\n\t\t\t\t\t\t\telem.parentNode === part;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( isPartStr ) {\n\t\t\t\t\tSizzle.filter( part, checkSet, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t\"\": function(checkSet, part, isXML){\n\t\t\tvar doneName = done++, checkFn = dirCheck;\n\n\t\t\tif ( !/\\W/.test(part) ) {\n\t\t\t\tvar nodeCheck = part = isXML ? part : part.toUpperCase();\n\t\t\t\tcheckFn = dirNodeCheck;\n\t\t\t}\n\n\t\t\tcheckFn(\"parentNode\", part, doneName, checkSet, nodeCheck, isXML);\n\t\t},\n\t\t\"~\": function(checkSet, part, isXML){\n\t\t\tvar doneName = done++, checkFn = dirCheck;\n\n\t\t\tif ( typeof part === \"string\" && !/\\W/.test(part) ) {\n\t\t\t\tvar nodeCheck = part = isXML ? part : part.toUpperCase();\n\t\t\t\tcheckFn = dirNodeCheck;\n\t\t\t}\n\n\t\t\tcheckFn(\"previousSibling\", part, doneName, checkSet, nodeCheck, isXML);\n\t\t}\n\t},\n\tfind: {\n\t\tID: function(match, context, isXML){\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\t\t\t\tvar m = context.getElementById(match[1]);\n\t\t\t\treturn m ? [m] : [];\n\t\t\t}\n\t\t},\n\t\tNAME: function(match, context, isXML){\n\t\t\tif ( typeof context.getElementsByName !== \"undefined\" ) {\n\t\t\t\tvar ret = [], results = context.getElementsByName(match[1]);\n\n\t\t\t\tfor ( var i = 0, l = results.length; i < l; i++ ) {\n\t\t\t\t\tif ( results[i].getAttribute(\"name\") === match[1] ) {\n\t\t\t\t\t\tret.push( results[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn ret.length === 0 ? null : ret;\n\t\t\t}\n\t\t},\n\t\tTAG: function(match, context){\n\t\t\treturn context.getElementsByTagName(match[1]);\n\t\t}\n\t},\n\tpreFilter: {\n\t\tCLASS: function(match, curLoop, inplace, result, not, isXML){\n\t\t\tmatch = \" \" + match[1].replace(/\\\\/g, \"\") + \" \";\n\n\t\t\tif ( isXML ) {\n\t\t\t\treturn match;\n\t\t\t}\n\n\t\t\tfor ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {\n\t\t\t\tif ( elem ) {\n\t\t\t\t\tif ( not ^ (elem.className && (\" \" + elem.className + \" \").indexOf(match) >= 0) ) {\n\t\t\t\t\t\tif ( !inplace )\n\t\t\t\t\t\t\tresult.push( elem );\n\t\t\t\t\t} else if ( inplace ) {\n\t\t\t\t\t\tcurLoop[i] = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\t\tID: function(match){\n\t\t\treturn match[1].replace(/\\\\/g, \"\");\n\t\t},\n\t\tTAG: function(match, curLoop){\n\t\t\tfor ( var i = 0; curLoop[i] === false; i++ ){}\n\t\t\treturn curLoop[i] && isXML(curLoop[i]) ? match[1] : match[1].toUpperCase();\n\t\t},\n\t\tCHILD: function(match){\n\t\t\tif ( match[1] == \"nth\" ) {\n\t\t\t\tvar test = /(-?)(\\d*)n((?:\\+|-)?\\d*)/.exec(\n\t\t\t\t\tmatch[2] == \"even\" && \"2n\" || match[2] == \"odd\" && \"2n+1\" ||\n\t\t\t\t\t!/\\D/.test( match[2] ) && \"0n+\" + match[2] || match[2]);\n\n\t\t\t\tmatch[2] = (test[1] + (test[2] || 1)) - 0;\n\t\t\t\tmatch[3] = test[3] - 0;\n\t\t\t}\n\n\t\t\tmatch[0] = done++;\n\n\t\t\treturn match;\n\t\t},\n\t\tATTR: function(match, curLoop, inplace, result, not, isXML){\n\t\t\tvar name = match[1].replace(/\\\\/g, \"\");\n\n\t\t\tif ( !isXML && Expr.attrMap[name] ) {\n\t\t\t\tmatch[1] = Expr.attrMap[name];\n\t\t\t}\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[4] = \" \" + match[4] + \" \";\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\t\tPSEUDO: function(match, curLoop, inplace, result, not){\n\t\t\tif ( match[1] === \"not\" ) {\n\t\t\t\tif ( ( chunker.exec(match[3]) || \"\" ).length > 1 || /^\\w/.test(match[3]) ) {\n\t\t\t\t\tmatch[3] = Sizzle(match[3], null, null, curLoop);\n\t\t\t\t} else {\n\t\t\t\t\tvar ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);\n\t\t\t\t\tif ( !inplace ) {\n\t\t\t\t\t\tresult.push.apply( result, ret );\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\t\tPOS: function(match){\n\t\t\tmatch.unshift( true );\n\t\t\treturn match;\n\t\t}\n\t},\n\tfilters: {\n\t\tenabled: function(elem){\n\t\t\treturn elem.disabled === false && elem.type !== \"hidden\";\n\t\t},\n\t\tdisabled: function(elem){\n\t\t\treturn elem.disabled === true;\n\t\t},\n\t\tchecked: function(elem){\n\t\t\treturn elem.checked === true;\n\t\t},\n\t\tselected: function(elem){\n\t\t\telem.parentNode.selectedIndex;\n\t\t\treturn elem.selected === true;\n\t\t},\n\t\tparent: function(elem){\n\t\t\treturn !!elem.firstChild;\n\t\t},\n\t\tempty: function(elem){\n\t\t\treturn !elem.firstChild;\n\t\t},\n\t\thas: function(elem, i, match){\n\t\t\treturn !!Sizzle( match[3], elem ).length;\n\t\t},\n\t\theader: function(elem){\n\t\t\treturn /h\\d/i.test( elem.nodeName );\n\t\t},\n\t\ttext: function(elem){\n\t\t\treturn \"text\" === elem.type;\n\t\t},\n\t\tradio: function(elem){\n\t\t\treturn \"radio\" === elem.type;\n\t\t},\n\t\tcheckbox: function(elem){\n\t\t\treturn \"checkbox\" === elem.type;\n\t\t},\n\t\tfile: function(elem){\n\t\t\treturn \"file\" === elem.type;\n\t\t},\n\t\tpassword: function(elem){\n\t\t\treturn \"password\" === elem.type;\n\t\t},\n\t\tsubmit: function(elem){\n\t\t\treturn \"submit\" === elem.type;\n\t\t},\n\t\timage: function(elem){\n\t\t\treturn \"image\" === elem.type;\n\t\t},\n\t\treset: function(elem){\n\t\t\treturn \"reset\" === elem.type;\n\t\t},\n\t\tbutton: function(elem){\n\t\t\treturn \"button\" === elem.type || elem.nodeName.toUpperCase() === \"BUTTON\";\n\t\t},\n\t\tinput: function(elem){\n\t\t\treturn /input|select|textarea|button/i.test(elem.nodeName);\n\t\t}\n\t},\n\tsetFilters: {\n\t\tfirst: function(elem, i){\n\t\t\treturn i === 0;\n\t\t},\n\t\tlast: function(elem, i, match, array){\n\t\t\treturn i === array.length - 1;\n\t\t},\n\t\teven: function(elem, i){\n\t\t\treturn i % 2 === 0;\n\t\t},\n\t\todd: function(elem, i){\n\t\t\treturn i % 2 === 1;\n\t\t},\n\t\tlt: function(elem, i, match){\n\t\t\treturn i < match[3] - 0;\n\t\t},\n\t\tgt: function(elem, i, match){\n\t\t\treturn i > match[3] - 0;\n\t\t},\n\t\tnth: function(elem, i, match){\n\t\t\treturn match[3] - 0 == i;\n\t\t},\n\t\teq: function(elem, i, match){\n\t\t\treturn match[3] - 0 == i;\n\t\t}\n\t},\n\tfilter: {\n\t\tPSEUDO: function(elem, match, i, array){\n\t\t\tvar name = match[1], filter = Expr.filters[ name ];\n\n\t\t\tif ( filter ) {\n\t\t\t\treturn filter( elem, i, match, array );\n\t\t\t} else if ( name === \"contains\" ) {\n\t\t\t\treturn (elem.textContent || elem.innerText || \"\").indexOf(match[3]) >= 0;\n\t\t\t} else if ( name === \"not\" ) {\n\t\t\t\tvar not = match[3];\n\n\t\t\t\tfor ( var i = 0, l = not.length; i < l; i++ ) {\n\t\t\t\t\tif ( not[i] === elem ) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t},\n\t\tCHILD: function(elem, match){\n\t\t\tvar type = match[1], node = elem;\n\t\t\tswitch (type) {\n\t\t\t\tcase 'only':\n\t\t\t\tcase 'first':\n\t\t\t\t\twhile ( (node = node.previousSibling) ) {\n\t\t\t\t\t\tif ( node.nodeType === 1 ) return false;\n\t\t\t\t\t}\n\t\t\t\t\tif ( type == 'first') return true;\n\t\t\t\t\tnode = elem;\n\t\t\t\tcase 'last':\n\t\t\t\t\twhile ( (node = node.nextSibling) ) {\n\t\t\t\t\t\tif ( node.nodeType === 1 ) return false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\tcase 'nth':\n\t\t\t\t\tvar first = match[2], last = match[3];\n\n\t\t\t\t\tif ( first == 1 && last == 0 ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar doneName = match[0],\n\t\t\t\t\t\tparent = elem.parentNode;\n\n\t\t\t\t\tif ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {\n\t\t\t\t\t\tvar count = 0;\n\t\t\t\t\t\tfor ( node = parent.firstChild; node; node = node.nextSibling ) {\n\t\t\t\t\t\t\tif ( node.nodeType === 1 ) {\n\t\t\t\t\t\t\t\tnode.nodeIndex = ++count;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tparent.sizcache = doneName;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar diff = elem.nodeIndex - last;\n\t\t\t\t\tif ( first == 0 ) {\n\t\t\t\t\t\treturn diff == 0;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn ( diff % first == 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tID: function(elem, match){\n\t\t\treturn elem.nodeType === 1 && elem.getAttribute(\"id\") === match;\n\t\t},\n\t\tTAG: function(elem, match){\n\t\t\treturn (match === \"*\" && elem.nodeType === 1) || elem.nodeName === match;\n\t\t},\n\t\tCLASS: function(elem, match){\n\t\t\treturn (\" \" + (elem.className || elem.getAttribute(\"class\")) + \" \")\n\t\t\t\t.indexOf( match ) > -1;\n\t\t},\n\t\tATTR: function(elem, match){\n\t\t\tvar name = match[1],\n\t\t\t\tresult = Expr.attrHandle[ name ] ?\n\t\t\t\t\tExpr.attrHandle[ name ]( elem ) :\n\t\t\t\t\telem[ name ] != null ?\n\t\t\t\t\t\telem[ name ] :\n\t\t\t\t\t\telem.getAttribute( name ),\n\t\t\t\tvalue = result + \"\",\n\t\t\t\ttype = match[2],\n\t\t\t\tcheck = match[4];\n\n\t\t\treturn result == null ?\n\t\t\t\ttype === \"!=\" :\n\t\t\t\ttype === \"=\" ?\n\t\t\t\tvalue === check :\n\t\t\t\ttype === \"*=\" ?\n\t\t\t\tvalue.indexOf(check) >= 0 :\n\t\t\t\ttype === \"~=\" ?\n\t\t\t\t(\" \" + value + \" \").indexOf(check) >= 0 :\n\t\t\t\t!check ?\n\t\t\t\tvalue && result !== false :\n\t\t\t\ttype === \"!=\" ?\n\t\t\t\tvalue != check :\n\t\t\t\ttype === \"^=\" ?\n\t\t\t\tvalue.indexOf(check) === 0 :\n\t\t\t\ttype === \"$=\" ?\n\t\t\t\tvalue.substr(value.length - check.length) === check :\n\t\t\t\ttype === \"|=\" ?\n\t\t\t\tvalue === check || value.substr(0, check.length + 1) === check + \"-\" :\n\t\t\t\tfalse;\n\t\t},\n\t\tPOS: function(elem, match, i, array){\n\t\t\tvar name = match[2], filter = Expr.setFilters[ name ];\n\n\t\t\tif ( filter ) {\n\t\t\t\treturn filter( elem, i, match, array );\n\t\t\t}\n\t\t}\n\t}\n};\n\nvar origPOS = Expr.match.POS;\n\nfor ( var type in Expr.match ) {\n\tExpr.match[ type ] = new RegExp( Expr.match[ type ].source + /(?![^\\[]*\\])(?![^\\(]*\\))/.source );\n\tExpr.leftMatch[ type ] = new RegExp( /(^(?:.|\\r|\\n)*?)/.source + Expr.match[ type ].source );\n}\n\nvar makeArray = function(array, results) {\n\tarray = Array.prototype.slice.call( array, 0 );\n\n\tif ( results ) {\n\t\tresults.push.apply( results, array );\n\t\treturn results;\n\t}\n\n\treturn array;\n};\n\ntry {\n\tArray.prototype.slice.call( document.documentElement.childNodes, 0 );\n\n} catch(e){\n\tmakeArray = function(array, results) {\n\t\tvar ret = results || [];\n\n\t\tif ( toString.call(array) === \"[object Array]\" ) {\n\t\t\tArray.prototype.push.apply( ret, array );\n\t\t} else {\n\t\t\tif ( typeof array.length === \"number\" ) {\n\t\t\t\tfor ( var i = 0, l = array.length; i < l; i++ ) {\n\t\t\t\t\tret.push( array[i] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( var i = 0; array[i]; i++ ) {\n\t\t\t\t\tret.push( array[i] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n}\n\nvar sortOrder;\n\nif ( document.documentElement.compareDocumentPosition ) {\n\tsortOrder = function( a, b ) {\n\t\tif ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {\n\t\t\tif ( a == b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar ret = a.compareDocumentPosition(b) & 4 ? -1 : a === b ? 0 : 1;\n\t\tif ( ret === 0 ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn ret;\n\t};\n} else if ( \"sourceIndex\" in document.documentElement ) {\n\tsortOrder = function( a, b ) {\n\t\tif ( !a.sourceIndex || !b.sourceIndex ) {\n\t\t\tif ( a == b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar ret = a.sourceIndex - b.sourceIndex;\n\t\tif ( ret === 0 ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn ret;\n\t};\n} else if ( document.createRange ) {\n\tsortOrder = function( a, b ) {\n\t\tif ( !a.ownerDocument || !b.ownerDocument ) {\n\t\t\tif ( a == b ) {\n\t\t\t\thasDuplicate = true;\n\t\t\t}\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar aRange = a.ownerDocument.createRange(), bRange = b.ownerDocument.createRange();\n\t\taRange.setStart(a, 0);\n\t\taRange.setEnd(a, 0);\n\t\tbRange.setStart(b, 0);\n\t\tbRange.setEnd(b, 0);\n\t\tvar ret = aRange.compareBoundaryPoints(Range.START_TO_END, bRange);\n\t\tif ( ret === 0 ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn ret;\n\t};\n}\n\n(function(){\n\tvar form = document.createElement(\"div\"),\n\t\tid = \"script\" + (new Date).getTime();\n\tform.innerHTML = \"\";\n\n\tvar root = document.documentElement;\n\troot.insertBefore( form, root.firstChild );\n\n\tif ( !!document.getElementById( id ) ) {\n\t\tExpr.find.ID = function(match, context, isXML){\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && !isXML ) {\n\t\t\t\tvar m = context.getElementById(match[1]);\n\t\t\t\treturn m ? m.id === match[1] || typeof m.getAttributeNode !== \"undefined\" && m.getAttributeNode(\"id\").nodeValue === match[1] ? [m] : undefined : [];\n\t\t\t}\n\t\t};\n\n\t\tExpr.filter.ID = function(elem, match){\n\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n\t\t\treturn elem.nodeType === 1 && node && node.nodeValue === match;\n\t\t};\n\t}\n\n\troot.removeChild( form );\n\troot = form = null; // release memory in IE\n})();\n\n(function(){\n\n\tvar div = document.createElement(\"div\");\n\tdiv.appendChild( document.createComment(\"\") );\n\n\tif ( div.getElementsByTagName(\"*\").length > 0 ) {\n\t\tExpr.find.TAG = function(match, context){\n\t\t\tvar results = context.getElementsByTagName(match[1]);\n\n\t\t\tif ( match[1] === \"*\" ) {\n\t\t\t\tvar tmp = [];\n\n\t\t\t\tfor ( var i = 0; results[i]; i++ ) {\n\t\t\t\t\tif ( results[i].nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( results[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tresults = tmp;\n\t\t\t}\n\n\t\t\treturn results;\n\t\t};\n\t}\n\n\tdiv.innerHTML = \"\";\n\tif ( div.firstChild && typeof div.firstChild.getAttribute !== \"undefined\" &&\n\t\t\tdiv.firstChild.getAttribute(\"href\") !== \"#\" ) {\n\t\tExpr.attrHandle.href = function(elem){\n\t\t\treturn elem.getAttribute(\"href\", 2);\n\t\t};\n\t}\n\n\tdiv = null; // release memory in IE\n})();\n\nif ( document.querySelectorAll ) (function(){\n\tvar oldSizzle = Sizzle, div = document.createElement(\"div\");\n\tdiv.innerHTML = \"

\";\n\n\tif ( div.querySelectorAll && div.querySelectorAll(\".TEST\").length === 0 ) {\n\t\treturn;\n\t}\n\n\tSizzle = function(query, context, extra, seed){\n\t\tcontext = context || document;\n\n\t\tif ( !seed && context.nodeType === 9 && !isXML(context) ) {\n\t\t\ttry {\n\t\t\t\treturn makeArray( context.querySelectorAll(query), extra );\n\t\t\t} catch(e){}\n\t\t}\n\n\t\treturn oldSizzle(query, context, extra, seed);\n\t};\n\n\tfor ( var prop in oldSizzle ) {\n\t\tSizzle[ prop ] = oldSizzle[ prop ];\n\t}\n\n\tdiv = null; // release memory in IE\n})();\n\nif ( document.getElementsByClassName && document.documentElement.getElementsByClassName ) (function(){\n\tvar div = document.createElement(\"div\");\n\tdiv.innerHTML = \"
\";\n\n\tif ( div.getElementsByClassName(\"e\").length === 0 )\n\t\treturn;\n\n\tdiv.lastChild.className = \"e\";\n\n\tif ( div.getElementsByClassName(\"e\").length === 1 )\n\t\treturn;\n\n\tExpr.order.splice(1, 0, \"CLASS\");\n\tExpr.find.CLASS = function(match, context, isXML) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && !isXML ) {\n\t\t\treturn context.getElementsByClassName(match[1]);\n\t\t}\n\t};\n\n\tdiv = null; // release memory in IE\n})();\n\nfunction dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\tvar sibDir = dir == \"previousSibling\" && !isXML;\n\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\tvar elem = checkSet[i];\n\t\tif ( elem ) {\n\t\t\tif ( sibDir && elem.nodeType === 1 ){\n\t\t\t\telem.sizcache = doneName;\n\t\t\t\telem.sizset = i;\n\t\t\t}\n\t\t\telem = elem[dir];\n\t\t\tvar match = false;\n\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem.sizcache === doneName ) {\n\t\t\t\t\tmatch = checkSet[elem.sizset];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeType === 1 && !isXML ){\n\t\t\t\t\telem.sizcache = doneName;\n\t\t\t\t\telem.sizset = i;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeName === cur ) {\n\t\t\t\t\tmatch = elem;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\telem = elem[dir];\n\t\t\t}\n\n\t\t\tcheckSet[i] = match;\n\t\t}\n\t}\n}\n\nfunction dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {\n\tvar sibDir = dir == \"previousSibling\" && !isXML;\n\tfor ( var i = 0, l = checkSet.length; i < l; i++ ) {\n\t\tvar elem = checkSet[i];\n\t\tif ( elem ) {\n\t\t\tif ( sibDir && elem.nodeType === 1 ) {\n\t\t\t\telem.sizcache = doneName;\n\t\t\t\telem.sizset = i;\n\t\t\t}\n\t\t\telem = elem[dir];\n\t\t\tvar match = false;\n\n\t\t\twhile ( elem ) {\n\t\t\t\tif ( elem.sizcache === doneName ) {\n\t\t\t\t\tmatch = checkSet[elem.sizset];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\tif ( !isXML ) {\n\t\t\t\t\t\telem.sizcache = doneName;\n\t\t\t\t\t\telem.sizset = i;\n\t\t\t\t\t}\n\t\t\t\t\tif ( typeof cur !== \"string\" ) {\n\t\t\t\t\t\tif ( elem === cur ) {\n\t\t\t\t\t\t\tmatch = true;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {\n\t\t\t\t\t\tmatch = elem;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telem = elem[dir];\n\t\t\t}\n\n\t\t\tcheckSet[i] = match;\n\t\t}\n\t}\n}\n\nvar contains = document.compareDocumentPosition ? function(a, b){\n\treturn a.compareDocumentPosition(b) & 16;\n} : function(a, b){\n\treturn a !== b && (a.contains ? a.contains(b) : true);\n};\n\nvar isXML = function(elem){\n\treturn elem.nodeType === 9 && elem.documentElement.nodeName !== \"HTML\" ||\n\t\t!!elem.ownerDocument && elem.ownerDocument.documentElement.nodeName !== \"HTML\";\n};\n\nvar posProcess = function(selector, context){\n\tvar tmpSet = [], later = \"\", match,\n\t\troot = context.nodeType ? [context] : context;\n\n\twhile ( (match = Expr.match.PSEUDO.exec( selector )) ) {\n\t\tlater += match[0];\n\t\tselector = selector.replace( Expr.match.PSEUDO, \"\" );\n\t}\n\n\tselector = Expr.relative[selector] ? selector + \"*\" : selector;\n\n\tfor ( var i = 0, l = root.length; i < l; i++ ) {\n\t\tSizzle( selector, root[i], tmpSet );\n\t}\n\n\treturn Sizzle.filter( later, tmpSet );\n};\n\n\nwindow.Sizzle = Sizzle;\n\n})();\n\n;(function(engine) {\n var extendElements = Prototype.Selector.extendElements;\n\n function select(selector, scope) {\n return extendElements(engine(selector, scope || document));\n }\n\n function match(element, selector) {\n return engine.matches(selector, [element]).length == 1;\n }\n\n Prototype.Selector.engine = engine;\n Prototype.Selector.select = select;\n Prototype.Selector.match = match;\n})(Sizzle);\n\nwindow.Sizzle = Prototype._original_property;\ndelete Prototype._original_property;\n\nvar Form = {\n reset: function(form) {\n form = $(form);\n form.reset();\n return form;\n },\n\n serializeElements: function(elements, options) {\n if (typeof options != 'object') options = { hash: !!options };\n else if (Object.isUndefined(options.hash)) options.hash = true;\n var key, value, submitted = false, submit = options.submit, accumulator, initial;\n\n if (options.hash) {\n initial = {};\n accumulator = function(result, key, value) {\n if (key in result) {\n if (!Object.isArray(result[key])) result[key] = [result[key]];\n result[key].push(value);\n } else result[key] = value;\n return result;\n };\n } else {\n initial = '';\n accumulator = function(result, key, value) {\n return result + (result ? '&' : '') + encodeURIComponent(key) + '=' + encodeURIComponent(value);\n }\n }\n\n return elements.inject(initial, function(result, element) {\n if (!element.disabled && element.name) {\n key = element.name; value = $(element).getValue();\n if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&\n submit !== false && (!submit || key == submit) && (submitted = true)))) {\n result = accumulator(result, key, value);\n }\n }\n return result;\n });\n }\n};\n\nForm.Methods = {\n serialize: function(form, options) {\n return Form.serializeElements(Form.getElements(form), options);\n },\n\n getElements: function(form) {\n var elements = $(form).getElementsByTagName('*'),\n element,\n arr = [ ],\n serializers = Form.Element.Serializers;\n for (var i = 0; element = elements[i]; i++) {\n arr.push(element);\n }\n return arr.inject([], function(elements, child) {\n if (serializers[child.tagName.toLowerCase()])\n elements.push(Element.extend(child));\n return elements;\n })\n },\n\n getInputs: function(form, typeName, name) {\n form = $(form);\n var inputs = form.getElementsByTagName('input');\n var textareas = form.getElementsByTagName('textarea');\n // KK patch\n var selects = form.getElementsByTagName('select');\n\n if (!typeName && !name) return $A(inputs).concat($A(textareas)).concat($A(selects)).map(Element.extend);\n\n var matchingInputs = [];\n var f = function(inputs) {\n for (var i = 0, length = inputs.length; i < length; i++) {\n var input = inputs[i];\n if ((typeName && input.type != typeName) || (name && input.name != name))\n continue;\n matchingInputs.push(Element.extend(input));\n }\n };\n f(inputs);\n f(textareas);\n f(selects);\n\n return matchingInputs;\n },\n\n disable: function(form) {\n form = $(form);\n Form.getElements(form).invoke('disable');\n return form;\n },\n\n enable: function(form) {\n form = $(form);\n Form.getElements(form).invoke('enable');\n return form;\n },\n\n findFirstElement: function(form) {\n var elements = $(form).getElements().findAll(function(element) {\n return 'hidden' != element.type && !element.disabled;\n });\n var firstByIndex = elements.findAll(function(element) {\n return element.hasAttribute('tabIndex') && element.tabIndex >= 0;\n }).sortBy(function(element) { return element.tabIndex }).first();\n\n return firstByIndex ? firstByIndex : elements.find(function(element) {\n return /^(?:input|select|textarea)$/i.test(element.tagName);\n });\n },\n\n focusFirstElement: function(form) {\n form = $(form);\n var element = form.findFirstElement();\n if (element) element.activate();\n return form;\n },\n\n request: function(form, options) {\n form = $(form), options = Object.clone(options || { });\n\n var params = options.parameters, action = form.readAttribute('action') || '';\n if (action.blank()) action = window.location.href;\n options.parameters = form.serialize(true);\n\n if (params) {\n if (Object.isString(params)) params = params.toQueryParams();\n Object.extend(options.parameters, params);\n }\n\n if (form.hasAttribute('method') && !options.method)\n options.method = form.method;\n\n return new Ajax.Request(action, options);\n }\n};\n\n/*--------------------------------------------------------------------------*/\n\n\nForm.Element = {\n focus: function(element) {\n $(element).focus();\n return element;\n },\n\n select: function(element) {\n $(element).select();\n return element;\n }\n};\n\nForm.Element.Methods = {\n\n serialize: function(element) {\n element = $(element);\n if (!element.disabled && element.name) {\n var value = element.getValue();\n if (value != undefined) {\n var pair = { };\n pair[element.name] = value;\n return Object.toQueryString(pair);\n }\n }\n return '';\n },\n\n getValue: function(element) {\n element = $(element);\n var method = element.tagName.toLowerCase();\n return Form.Element.Serializers[method](element);\n },\n\n setValue: function(element, value) {\n element = $(element);\n var method = element.tagName.toLowerCase();\n Form.Element.Serializers[method](element, value);\n return element;\n },\n\n clear: function(element) {\n $(element).value = '';\n return element;\n },\n\n present: function(element) {\n return $(element).value != '';\n },\n\n activate: function(element) {\n element = $(element);\n try {\n element.focus();\n if (element.select && (element.tagName.toLowerCase() != 'input' ||\n !(/^(?:button|reset|submit)$/i.test(element.type))))\n element.select();\n } catch (e) { }\n return element;\n },\n\n disable: function(element) {\n element = $(element);\n element.disabled = true;\n return element;\n },\n\n enable: function(element) {\n element = $(element);\n element.disabled = false;\n return element;\n }\n};\n\n/*--------------------------------------------------------------------------*/\n\nvar Field = Form.Element;\n\nvar $F = Form.Element.Methods.getValue;\n\n/*--------------------------------------------------------------------------*/\n\nForm.Element.Serializers = (function() {\n function input(element, value) {\n switch (element.type.toLowerCase()) {\n case 'checkbox':\n case 'radio':\n return inputSelector(element, value);\n default:\n return valueSelector(element, value);\n }\n }\n\n function inputSelector(element, value) {\n if (Object.isUndefined(value))\n return element.checked ? element.value : null;\n else element.checked = !!value;\n }\n\n function valueSelector(element, value) {\n if (Object.isUndefined(value)) return element.value;\n else element.value = value;\n }\n\n function select(element, value) {\n if (Object.isUndefined(value))\n return (element.type === 'select-one' ? selectOne : selectMany)(element);\n\n var opt, currentValue, single = !Object.isArray(value);\n for (var i = 0, length = element.length; i < length; i++) {\n opt = element.options[i];\n currentValue = this.optionValue(opt);\n if (single) {\n if (currentValue == value) {\n opt.selected = true;\n return;\n }\n }\n else opt.selected = value.include(currentValue);\n }\n }\n\n function selectOne(element) {\n var index = element.selectedIndex;\n return index >= 0 ? optionValue(element.options[index]) : null;\n }\n\n function selectMany(element) {\n var values, length = element.length;\n if (!length) return null;\n\n for (var i = 0, values = []; i < length; i++) {\n var opt = element.options[i];\n if (opt.selected) values.push(optionValue(opt));\n }\n return values;\n }\n\n function optionValue(opt) {\n return Element.hasAttribute(opt, 'value') ? opt.value : opt.text;\n }\n\n return {\n input: input,\n inputSelector: inputSelector,\n textarea: valueSelector,\n select: select,\n selectOne: selectOne,\n selectMany: selectMany,\n optionValue: optionValue,\n button: valueSelector\n };\n})();\n\n/*--------------------------------------------------------------------------*/\n\n\nAbstract.TimedObserver = Class.create(PeriodicalExecuter, {\n initialize: function($super, element, frequency, callback) {\n $super(callback, frequency);\n this.element = $(element);\n this.lastValue = this.getValue();\n },\n\n execute: function() {\n var value = this.getValue();\n if (Object.isString(this.lastValue) && Object.isString(value) ?\n this.lastValue != value : String(this.lastValue) != String(value)) {\n this.callback(this.element, value);\n this.lastValue = value;\n }\n }\n});\n\nForm.Element.Observer = Class.create(Abstract.TimedObserver, {\n getValue: function() {\n return Form.Element.getValue(this.element);\n }\n});\n\nForm.Observer = Class.create(Abstract.TimedObserver, {\n getValue: function() {\n return Form.serialize(this.element);\n }\n});\n\n/*--------------------------------------------------------------------------*/\n\nAbstract.EventObserver = Class.create({\n initialize: function(element, callback) {\n this.element = $(element);\n this.callback = callback;\n\n this.lastValue = this.getValue();\n if (this.element.tagName.toLowerCase() == 'form')\n this.registerFormCallbacks();\n else\n this.registerCallback(this.element);\n },\n\n onElementEvent: function() {\n var value = this.getValue();\n if (this.lastValue != value) {\n this.callback(this.element, value);\n this.lastValue = value;\n }\n },\n\n registerFormCallbacks: function() {\n Form.getElements(this.element).each(this.registerCallback, this);\n },\n\n registerCallback: function(element) {\n if (element.type) {\n switch (element.type.toLowerCase()) {\n case 'checkbox':\n case 'radio':\n Event.observe(element, 'click', this.onElementEvent.bind(this));\n break;\n default:\n Event.observe(element, 'change', this.onElementEvent.bind(this));\n break;\n }\n }\n }\n});\n\nForm.Element.EventObserver = Class.create(Abstract.EventObserver, {\n getValue: function() {\n return Form.Element.getValue(this.element);\n }\n});\n\nForm.EventObserver = Class.create(Abstract.EventObserver, {\n getValue: function() {\n return Form.serialize(this.element);\n }\n});\n(function() {\n\n var Event = {\n KEY_BACKSPACE: 8,\n KEY_TAB: 9,\n KEY_RETURN: 13,\n KEY_ESC: 27,\n KEY_LEFT: 37,\n KEY_UP: 38,\n KEY_RIGHT: 39,\n KEY_DOWN: 40,\n KEY_DELETE: 46,\n KEY_HOME: 36,\n KEY_END: 35,\n KEY_PAGEUP: 33,\n KEY_PAGEDOWN: 34,\n KEY_INSERT: 45,\n\n cache: {}\n };\n\n var docEl = document.documentElement;\n var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl\n && 'onmouseleave' in docEl;\n\n\n\n var isIELegacyEvent = function(event) { return false; };\n\n if (window.attachEvent) {\n if (window.addEventListener) {\n isIELegacyEvent = function(event) {\n return !(event instanceof window.Event);\n };\n } else {\n isIELegacyEvent = function(event) { return true; };\n }\n }\n\n var _isButton;\n\n function _isButtonForDOMEvents(event, code) {\n return event.which ? (event.which === code + 1) : (event.button === code);\n }\n\n var legacyButtonMap = { 0: 1, 1: 4, 2: 2 };\n function _isButtonForLegacyEvents(event, code) {\n return event.button === legacyButtonMap[code];\n }\n\n function _isButtonForWebKit(event, code) {\n switch (code) {\n case 0: return event.which == 1 && !event.metaKey;\n case 1: return event.which == 2 || (event.which == 1 && event.metaKey);\n case 2: return event.which == 3;\n default: return false;\n }\n }\n\n if (window.attachEvent) {\n if (!window.addEventListener) {\n _isButton = _isButtonForLegacyEvents;\n } else {\n _isButton = function(event, code) {\n return isIELegacyEvent(event) ? _isButtonForLegacyEvents(event, code) :\n _isButtonForDOMEvents(event, code);\n }\n }\n } else if (Prototype.Browser.WebKit) {\n _isButton = _isButtonForWebKit;\n } else {\n _isButton = _isButtonForDOMEvents;\n }\n\n function isLeftClick(event) { return _isButton(event, 0) }\n\n function isMiddleClick(event) { return _isButton(event, 1) }\n\n function isRightClick(event) { return _isButton(event, 2) }\n\n function element(event) {\n event = Event.extend(event);\n\n var node = event.target, type = event.type,\n currentTarget = event.currentTarget;\n\n if (currentTarget && currentTarget.tagName) {\n if (type === 'load' || type === 'error' ||\n (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'\n && currentTarget.type === 'radio'))\n node = currentTarget;\n }\n\n if (node.nodeType == Node.TEXT_NODE)\n node = node.parentNode;\n\n return Element.extend(node);\n }\n\n function findElement(event, expression) {\n var element = Event.element(event);\n\n if (!expression) return element;\n while (element) {\n if (Object.isElement(element) && Prototype.Selector.match(element, expression)) {\n return Element.extend(element);\n }\n element = element.parentNode;\n }\n }\n\n function pointer(event) {\n return { x: pointerX(event), y: pointerY(event) };\n }\n\n function pointerX(event) {\n var docElement = document.documentElement,\n body = document.body || { scrollLeft: 0 };\n\n return event.pageX || (event.clientX +\n (docElement.scrollLeft || body.scrollLeft) -\n (docElement.clientLeft || 0));\n }\n\n function pointerY(event) {\n var docElement = document.documentElement,\n body = document.body || { scrollTop: 0 };\n\n return event.pageY || (event.clientY +\n (docElement.scrollTop || body.scrollTop) -\n (docElement.clientTop || 0));\n }\n\n\n function stop(event) {\n Event.extend(event);\n event.preventDefault();\n event.stopPropagation();\n\n event.stopped = true;\n }\n\n\n Event.Methods = {\n isLeftClick: isLeftClick,\n isMiddleClick: isMiddleClick,\n isRightClick: isRightClick,\n\n element: element,\n findElement: findElement,\n\n pointer: pointer,\n pointerX: pointerX,\n pointerY: pointerY,\n\n stop: stop\n };\n\n var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {\n m[name] = Event.Methods[name].methodize();\n return m;\n });\n\n if (window.attachEvent) {\n function _relatedTarget(event) {\n var element;\n switch (event.type) {\n case 'mouseover':\n case 'mouseenter':\n element = event.fromElement;\n break;\n case 'mouseout':\n case 'mouseleave':\n element = event.toElement;\n break;\n default:\n return null;\n }\n return Element.extend(element);\n }\n\n var additionalMethods = {\n stopPropagation: function() { this.cancelBubble = true },\n preventDefault: function() { this.returnValue = false },\n inspect: function() { return '[object Event]' }\n };\n\n Event.extend = function(event, element) {\n if (!event) return false;\n\n if (!isIELegacyEvent(event)) return event;\n\n if (event._extendedByPrototype) return event;\n event._extendedByPrototype = Prototype.emptyFunction;\n\n var pointer = Event.pointer(event);\n\n Object.extend(event, {\n target: event.srcElement || element,\n relatedTarget: _relatedTarget(event),\n pageX: pointer.x,\n pageY: pointer.y\n });\n\n Object.extend(event, methods);\n Object.extend(event, additionalMethods);\n\n return event;\n };\n } else {\n Event.extend = Prototype.K;\n }\n\n if (window.addEventListener) {\n Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;\n Object.extend(Event.prototype, methods);\n }\n\n function _createResponder(element, eventName, handler) {\n var registry = Element.retrieve(element, 'prototype_event_registry');\n\n if (Object.isUndefined(registry)) {\n CACHE.push(element);\n registry = Element.retrieve(element, 'prototype_event_registry', $H());\n }\n\n var respondersForEvent = registry.get(eventName);\n if (Object.isUndefined(respondersForEvent)) {\n respondersForEvent = [];\n registry.set(eventName, respondersForEvent);\n }\n\n if (respondersForEvent.pluck('handler').include(handler)) return false;\n\n var responder;\n if (eventName.include(\":\")) {\n responder = function(event) {\n if (Object.isUndefined(event.eventName))\n return false;\n\n if (event.eventName !== eventName)\n return false;\n\n Event.extend(event, element);\n handler.call(element, event);\n };\n } else {\n if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&\n (eventName === \"mouseenter\" || eventName === \"mouseleave\")) {\n if (eventName === \"mouseenter\" || eventName === \"mouseleave\") {\n responder = function(event) {\n Event.extend(event, element);\n\n var parent = event.relatedTarget;\n while (parent && parent !== element) {\n try { parent = parent.parentNode; }\n catch(e) { parent = element; }\n }\n\n if (parent === element) return;\n\n handler.call(element, event);\n };\n }\n } else {\n responder = function(event) {\n Event.extend(event, element);\n handler.call(element, event);\n };\n }\n }\n\n responder.handler = handler;\n respondersForEvent.push(responder);\n return responder;\n }\n\n function _destroyCache() {\n for (var i = 0, length = CACHE.length; i < length; i++) {\n Event.stopObserving(CACHE[i]);\n CACHE[i] = null;\n }\n }\n\n var CACHE = [];\n\n if (Prototype.Browser.IE)\n window.attachEvent('onunload', _destroyCache);\n\n if (Prototype.Browser.WebKit)\n window.addEventListener('unload', Prototype.emptyFunction, false);\n\n\n var _getDOMEventName = Prototype.K,\n translations = { mouseenter: \"mouseover\", mouseleave: \"mouseout\" };\n\n if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {\n _getDOMEventName = function(eventName) {\n return (translations[eventName] || eventName);\n };\n }\n\n function observe(element, eventName, handler) {\n element = $(element);\n\n var responder = _createResponder(element, eventName, handler);\n\n if (!responder) return element;\n\n if (eventName.include(':')) {\n if (element.addEventListener)\n element.addEventListener(\"dataavailable\", responder, false);\n else {\n element.attachEvent(\"ondataavailable\", responder);\n element.attachEvent(\"onlosecapture\", responder);\n }\n } else {\n var actualEventName = _getDOMEventName(eventName);\n\n if (element.addEventListener)\n element.addEventListener(actualEventName, responder, false);\n else\n element.attachEvent(\"on\" + actualEventName, responder);\n }\n\n return element;\n }\n\n function stopObserving(element, eventName, handler) {\n element = $(element);\n\n var registry = Element.retrieve(element, 'prototype_event_registry');\n if (!registry) return element;\n\n if (!eventName) {\n registry.each( function(pair) {\n var eventName = pair.key;\n stopObserving(element, eventName);\n });\n return element;\n }\n\n var responders = registry.get(eventName);\n if (!responders) return element;\n\n if (!handler) {\n responders.each(function(r) {\n stopObserving(element, eventName, r.handler);\n });\n return element;\n }\n\n var i = responders.length, responder;\n while (i--) {\n if (responders[i].handler === handler) {\n responder = responders[i];\n break;\n }\n }\n if (!responder) return element;\n\n if (eventName.include(':')) {\n if (element.removeEventListener)\n element.removeEventListener(\"dataavailable\", responder, false);\n else {\n element.detachEvent(\"ondataavailable\", responder);\n element.detachEvent(\"onlosecapture\", responder);\n }\n } else {\n var actualEventName = _getDOMEventName(eventName);\n if (element.removeEventListener)\n element.removeEventListener(actualEventName, responder, false);\n else\n element.detachEvent('on' + actualEventName, responder);\n }\n\n registry.set(eventName, responders.without(responder));\n\n return element;\n }\n\n function fire(element, eventName, memo, bubble) {\n element = $(element);\n\n if (Object.isUndefined(bubble))\n bubble = true;\n\n if (element == document && document.createEvent && !element.dispatchEvent)\n element = document.documentElement;\n\n var event;\n if (document.createEvent) {\n event = document.createEvent('HTMLEvents');\n event.initEvent('dataavailable', bubble, true);\n } else {\n event = document.createEventObject();\n event.eventType = bubble ? 'ondataavailable' : 'onlosecapture';\n }\n\n event.eventName = eventName;\n event.memo = memo || { };\n\n if (document.createEvent)\n element.dispatchEvent(event);\n else\n element.fireEvent(event.eventType, event);\n\n return Event.extend(event);\n }\n\n Event.Handler = Class.create({\n initialize: function(element, eventName, selector, callback) {\n this.element = $(element);\n this.eventName = eventName;\n this.selector = selector;\n this.callback = callback;\n this.handler = this.handleEvent.bind(this);\n },\n\n start: function() {\n Event.observe(this.element, this.eventName, this.handler);\n return this;\n },\n\n stop: function() {\n Event.stopObserving(this.element, this.eventName, this.handler);\n return this;\n },\n\n handleEvent: function(event) {\n var element = Event.findElement(event, this.selector);\n if (element) this.callback.call(this.element, event, element);\n }\n });\n\n function on(element, eventName, selector, callback) {\n element = $(element);\n if (Object.isFunction(selector) && Object.isUndefined(callback)) {\n callback = selector, selector = null;\n }\n\n return new Event.Handler(element, eventName, selector, callback).start();\n }\n\n Object.extend(Event, Event.Methods);\n\n Object.extend(Event, {\n fire: fire,\n observe: observe,\n stopObserving: stopObserving,\n on: on\n });\n\n Element.addMethods({\n fire: fire,\n\n observe: observe,\n\n stopObserving: stopObserving,\n\n on: on\n });\n\n Object.extend(document, {\n fire: fire.methodize(),\n\n observe: observe.methodize(),\n\n stopObserving: stopObserving.methodize(),\n\n on: on.methodize(),\n\n loaded: false\n });\n\n if (window.Event) Object.extend(window.Event, Event);\n else window.Event = Event;\n})();\n\n(function() {\n /* Support for the DOMContentLoaded event is based on work by Dan Webb,\n Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */\n\n var timer;\n\n function fireContentLoadedEvent() {\n if (document.loaded) return;\n if (timer) window.clearTimeout(timer);\n document.loaded = true;\n document.fire('dom:loaded');\n }\n\n function checkReadyState() {\n if (document.readyState === 'complete') {\n document.stopObserving('readystatechange', checkReadyState);\n fireContentLoadedEvent();\n }\n }\n\n function pollDoScroll() {\n try { document.documentElement.doScroll('left'); }\n catch(e) {\n timer = pollDoScroll.defer();\n return;\n }\n fireContentLoadedEvent();\n }\n\n if (document.addEventListener) {\n document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);\n } else {\n document.observe('readystatechange', checkReadyState);\n if (window == top)\n timer = pollDoScroll.defer();\n }\n\n Event.observe(window, 'load', fireContentLoadedEvent);\n})();\n\nElement.addMethods();\n\n/*------------------------------- DEPRECATED -------------------------------*/\n\nHash.toQueryString = Object.toQueryString;\n\nvar Toggle = { display: Element.toggle };\n\nElement.Methods.childOf = Element.Methods.descendantOf;\n\nvar Insertion = {\n Before: function(element, content) {\n return Element.insert(element, {before:content});\n },\n\n Top: function(element, content) {\n return Element.insert(element, {top:content});\n },\n\n Bottom: function(element, content) {\n return Element.insert(element, {bottom:content});\n },\n\n After: function(element, content) {\n return Element.insert(element, {after:content});\n }\n};\n\nvar $continue = new Error('\"throw $continue\" is deprecated, use \"return\" instead');\n\nvar Position = {\n includeScrollOffsets: false,\n\n prepare: function() {\n this.deltaX = window.pageXOffset\n || document.documentElement.scrollLeft\n || document.body.scrollLeft\n || 0;\n this.deltaY = window.pageYOffset\n || document.documentElement.scrollTop\n || document.body.scrollTop\n || 0;\n },\n\n within: function(element, x, y) {\n if (this.includeScrollOffsets)\n return this.withinIncludingScrolloffsets(element, x, y);\n this.xcomp = x;\n this.ycomp = y;\n this.offset = Element.cumulativeOffset(element);\n\n return (y >= this.offset[1] &&\n y < this.offset[1] + element.offsetHeight &&\n x >= this.offset[0] &&\n x < this.offset[0] + element.offsetWidth);\n },\n\n withinIncludingScrolloffsets: function(element, x, y) {\n var offsetcache = Element.cumulativeScrollOffset(element);\n\n this.xcomp = x + offsetcache[0] - this.deltaX;\n this.ycomp = y + offsetcache[1] - this.deltaY;\n this.offset = Element.cumulativeOffset(element);\n\n return (this.ycomp >= this.offset[1] &&\n this.ycomp < this.offset[1] + element.offsetHeight &&\n this.xcomp >= this.offset[0] &&\n this.xcomp < this.offset[0] + element.offsetWidth);\n },\n\n overlap: function(mode, element) {\n if (!mode) return 0;\n if (mode == 'vertical')\n return ((this.offset[1] + element.offsetHeight) - this.ycomp) /\n element.offsetHeight;\n if (mode == 'horizontal')\n return ((this.offset[0] + element.offsetWidth) - this.xcomp) /\n element.offsetWidth;\n },\n\n\n cumulativeOffset: Element.Methods.cumulativeOffset,\n\n positionedOffset: Element.Methods.positionedOffset,\n\n absolutize: function(element) {\n Position.prepare();\n return Element.absolutize(element);\n },\n\n relativize: function(element) {\n Position.prepare();\n return Element.relativize(element);\n },\n\n realOffset: Element.Methods.cumulativeScrollOffset,\n\n offsetParent: Element.Methods.getOffsetParent,\n\n page: Element.Methods.viewportOffset,\n\n clone: function(source, target, options) {\n options = options || { };\n return Element.clonePosition(target, source, options);\n }\n};\n\n/*--------------------------------------------------------------------------*/\n\nif (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){\n function iter(name) {\n return name.blank() ? null : \"[contains(concat(' ', @class, ' '), ' \" + name + \" ')]\";\n }\n\n instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?\n function(element, className) {\n className = className.toString().strip();\n var cond = /\\s/.test(className) ? $w(className).map(iter).join('') : iter(className);\n return cond ? document._getElementsByXPath('.//*' + cond, element) : [];\n } : function(element, className) {\n className = className.toString().strip();\n var elements = [], classNames = (/\\s/.test(className) ? $w(className) : null);\n if (!classNames && !className) return elements;\n\n var nodes = $(element).getElementsByTagName('*');\n className = ' ' + className + ' ';\n\n for (var i = 0, child, cn; child = nodes[i]; i++) {\n if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||\n (classNames && classNames.all(function(name) {\n return !name.toString().blank() && cn.include(' ' + name + ' ');\n }))))\n elements.push(Element.extend(child));\n }\n return elements;\n };\n\n return function(className, parentElement) {\n return $(parentElement || document.body).getElementsByClassName(className);\n };\n}(Element.Methods);\n\n/*--------------------------------------------------------------------------*/\n\nElement.ClassNames = Class.create();\nElement.ClassNames.prototype = {\n initialize: function(element) {\n this.element = $(element);\n },\n\n _each: function(iterator) {\n this.element.className.split(/\\s+/).select(function(name) {\n return name.length > 0;\n })._each(iterator);\n },\n\n set: function(className) {\n this.element.className = className;\n },\n\n add: function(classNameToAdd) {\n if (this.include(classNameToAdd)) return;\n this.set($A(this).concat(classNameToAdd).join(' '));\n },\n\n remove: function(classNameToRemove) {\n if (!this.include(classNameToRemove)) return;\n this.set($A(this).without(classNameToRemove).join(' '));\n },\n\n toString: function() {\n return $A(this).join(' ');\n }\n};\n\nObject.extend(Element.ClassNames.prototype, Enumerable);\n\n/*--------------------------------------------------------------------------*/\n\n(function() {\n window.Selector = Class.create({\n initialize: function(expression) {\n this.expression = expression.strip();\n },\n\n findElements: function(rootElement) {\n return Prototype.Selector.select(this.expression, rootElement);\n },\n\n match: function(element) {\n return Prototype.Selector.match(element, this.expression);\n },\n\n toString: function() {\n return this.expression;\n },\n\n inspect: function() {\n return \"#\";\n }\n });\n\n Object.extend(Selector, {\n matchElements: function(elements, expression) {\n var match = Prototype.Selector.match,\n results = [];\n\n for (var i = 0, length = elements.length; i < length; i++) {\n var element = elements[i];\n if (match(element, expression)) {\n results.push(Element.extend(element));\n }\n }\n return results;\n },\n\n findElement: function(elements, expression, index) {\n index = index || 0;\n var matchIndex = 0, element;\n for (var i = 0, length = elements.length; i < length; i++) {\n element = elements[i];\n if (Prototype.Selector.match(element, expression) && index === matchIndex++) {\n return Element.extend(element);\n }\n }\n },\n\n findChildElements: function(element, expressions) {\n var selector = expressions.toArray().join(', ');\n return Prototype.Selector.select(selector, element || document);\n }\n });\n})();\n" }, "redirectURL": "", "headersSize": 374, "bodySize": 37893, "_transferSize": 38267 }, "cache": {}, "timings": { "blocked": 62.40053403063208, "dns": -1, "ssl": -1, "connect": -1, "send": 0.23300002794719887, "wait": 64.49499994050709, "receive": 411.95099998731166, "_blocked_queueing": 3.5340000176802278 }, "serverIPAddress": "52.10.180.58", "connection": "1232215", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:11.868Z", "time": 537.971976026427, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/static/de2efad2/scripts/behavior.js", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 885, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:11 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:05 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "application/javascript" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=96" }, { "name": "Content-Length", "value": "2360" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:11 GMT" } ], "cookies": [], "content": { "size": 6423, "mimeType": "application/javascript", "compression": 4063, "text": "/*\n Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the work\n of Simon Willison (see comments by Simon below).\n\n Description:\n\n \tUses css selectors to apply javascript behaviours to enable\n \tunobtrusive javascript in html documents.\n\n Usage:\n\n Behaviour.specify('b.someclass', 'myrules.alert', 10, function(element) {\n element.onclick = function() {\n alert(this.innerHTML);\n }\n });\n Behaviour.specify('#someid u', 'myrules.blah', 0, function(element) {\n element.onmouseover = function() {\n this.innerHTML = \"BLAH!\";\n }\n });\n\n\t// Call Behaviour.apply() to re-apply the rules (if you\n\t// update the dom, etc).\n\n License:\n\n \tThis file is entirely BSD licensed.\n\n More information:\n\n \thttp://ripcord.co.nz/behaviour/\n\n*/\n\nvar Behaviour = (function() {\n var storage = [{selector: '', id: '_deprecated', priority: 0}];\n return {\n\n /**\n * Specifies something to do when an element matching a CSS selector is encountered.\n * @param {String} selector a CSS selector triggering your behavior\n * @param {String} id combined with selector, uniquely identifies this behavior; prevents duplicate registrations\n * @param {Number} priority relative position of this behavior in case multiple apply to a given element; lower numbers applied first (sorted by id then selector in case of tie); choose 0 if you do not care\n * @param {Function} behavior callback function taking one parameter, a (DOM) {@link Element}, and returning void\n */\n specify : function(selector, id, priority, behavior) {\n for (var i = 0; i < storage.length; i++) {\n if (storage[i].selector == selector && storage[i].id == id) {\n storage.splice(i, 1);\n break;\n }\n }\n storage.push({selector: selector, id: id, priority: priority, behavior: behavior});\n storage.sort(function(a, b) {\n var location = a.priority - b.priority;\n return location != 0 ? location : a.id < b.id ? -1 : a.id > b.id ? 1 : a.selector < b.selector ? -1 : a.selector > b.selector ? 1 : 0;\n });\n },\n\n /** @deprecated For backward compatibility only; use {@link specify} instead. */\n\tlist : new Array,\n\n /** @deprecated For backward compatibility only; use {@link specify} instead. */\n\tregister : function(sheet){\n\t\tBehaviour.list.push(sheet);\n\t},\n\n\tstart : function(){\n\t\tBehaviour.addLoadEvent(function(){\n\t\t\tBehaviour.apply();\n\t\t});\n\t},\n\n\tapply : function(){\n this.applySubtree(document);\n },\n\n /**\n * Applies behaviour rules to a subtree/subforest.\n *\n * @param {HTMLElement|HTMLElement[]} startNode\n * Subtree/forest to apply rules.\n *\n * Within a single subtree, rules are the outer loop and the nodes in the tree are the inner loop,\n * and sometimes the behaviour rules rely on this ordering to work correctly. When you pass a forest,\n * this semantics is preserved.\n */\n applySubtree : function(startNode,includeSelf) {\n if (!(startNode instanceof Array)) {\n startNode = [startNode];\n }\n storage._each(function (registration) {\n if (registration.id == '_deprecated') {\n Behaviour.list._each(function(sheet) {\n for (var selector in sheet){\n startNode._each(function (n) {\n var list = findElementsBySelector(n, selector, includeSelf);\n if (list.length > 0) { // just to simplify setting of a breakpoint.\n //console.log('deprecated:' + selector + ' on ' + list.length + ' elements');\n list._each(sheet[selector]);\n }\n });\n }\n });\n } else {\n startNode._each(function (node) {\n var list = findElementsBySelector(node, registration.selector, includeSelf);\n if (list.length > 0) {\n //console.log(registration.id + ':' + registration.selector + ' @' + registration.priority + ' on ' + list.length + ' elements');\n list._each(registration.behavior);\n }\n });\n }\n });\n },\n\n addLoadEvent : function(func){\n\t\tvar oldonload = window.onload;\n\n\t\tif (typeof window.onload != 'function') {\n\t\t\twindow.onload = func;\n\t\t} else {\n\t\t\twindow.onload = function(e) {\n\t\t\t\toldonload(e);\n\t\t\t\tfunc(e);\n\t\t\t}\n\t\t}\n\t}\n}})();\n\nBehaviour.start();\n\n/*\n The following code is Copyright (C) Simon Willison 2004.\n\n document.getElementsBySelector(selector)\n - returns an array of element objects from the current document\n matching the CSS selector. Selectors can contain element names,\n class names and ids and can be nested. For example:\n\n elements = document.getElementsBySelect('div#main p a.external')\n\n Will return an array of all 'a' elements with 'external' in their\n class attribute that are contained inside 'p' elements that are\n contained inside the 'div' element which has id=\"main\"\n\n New in version 0.4: Support for CSS2 and CSS3 attribute selectors:\n See http://www.w3.org/TR/css3-selectors/#attribute-selectors\n\n Version 0.4 - Simon Willison, March 25th 2003\n -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows\n -- Opera 7 fails\n*/\n\nfunction findElementsBySelector(startNode,selector,includeSelf) {\n if(includeSelf) {\n function isSelfOrChild(c) {\n while(true) {\n if(startNode == c) return true;\n if(c == null) return false;\n c = c.parentNode;\n }\n }\n return Prototype.Selector.select(selector, startNode.parentNode).filter(isSelfOrChild);\n } else {\n return Prototype.Selector.select(selector, startNode);\n }\n}\n\ndocument.getElementsBySelector = function(selector) {\n return findElementsBySelector(document,selector);\n}\n\n/* That revolting regular expression explained\n/^(\\w+)\\[(\\w+)([=~\\|\\^\\$\\*]?)=?\"?([^\\]\"]*)\"?\\]$/\n \\---/ \\---/\\-------------/ \\-------/\n | | | |\n | | | The value\n | | ~,|,^,$,* or =\n | Attribute\n Tag\n*/\n" }, "redirectURL": "", "headersSize": 367, "bodySize": 2360, "_transferSize": 2727 }, "cache": {}, "timings": { "blocked": 83.95797591423614, "dns": -1, "ssl": -1, "connect": -1, "send": 0.24800002574919233, "wait": 49.86300005111846, "receive": 405.9030000353232, "_blocked_queueing": 3.9760000072419643 }, "serverIPAddress": "52.10.180.58", "connection": "1232145", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:11.868Z", "time": 733.5485810461687, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/adjuncts/de2efad2/org/kohsuke/stapler/bind.js", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 895, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:12 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:03 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "application/javascript" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=94" }, { "name": "Content-Length", "value": "936" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:12 GMT" } ], "cookies": [], "content": { "size": 2681, "mimeType": "application/javascript", "compression": 1745, "text": "// bind tag takes care of the dependency as an adjunct\n\nfunction makeStaplerProxy(url,crumb,methods) {\n if (url.substring(url.length - 1) !== '/') url+='/';\n var proxy = {};\n\n var stringify;\n if (Object.toJSON) // needs to use Prototype.js if it's present. See commit comment for discussion\n stringify = Object.toJSON; // from prototype\n else if (typeof(JSON)==\"object\" && JSON.stringify)\n stringify = JSON.stringify; // standard\n\n var genMethod = function(methodName) {\n proxy[methodName] = function() {\n var args = arguments;\n\n // the final argument can be a callback that receives the return value\n var callback = (function(){\n if (args.length==0) return null;\n var tail = args[args.length-1];\n return (typeof(tail)=='function') ? tail : null;\n })();\n\n // 'arguments' is not an array so we convert it into an array\n var a = [];\n for (var i=0; i\":\">\",'\"':\""\",\"'\":\"'\",\"/\":\"/\",\"`\":\"`\"},d=[\"toString\",\"valueOf\"],e={isArray:function(j){return a.toString.apply(j)===c;},isBoolean:function(j){return typeof j===\"boolean\";},isFunction:function(j){return(typeof j===\"function\")||a.toString.apply(j)===h;},isNull:function(j){return j===null;},isNumber:function(j){return typeof j===\"number\"&&isFinite(j);},isObject:function(j){return(j&&(typeof j===\"object\"||f.isFunction(j)))||false;},isString:function(j){return typeof j===\"string\";},isUndefined:function(j){return typeof j===\"undefined\";},_IEEnumFix:(YAHOO.env.ua.ie)?function(l,k){var j,n,m;for(j=0;j\"'\\/`]/g,function(k){return g[k];});},extend:function(m,n,l){if(!n||!m){throw new Error(\"extend failed, please check that \"+\"all dependencies are included.\");}var k=function(){},j;k.prototype=n.prototype;m.prototype=new k();m.prototype.constructor=m;m.superclass=n.prototype;if(n.prototype.constructor==a.constructor){n.prototype.constructor=n;}if(l){for(j in l){if(f.hasOwnProperty(l,j)){m.prototype[j]=l[j];}}f._IEEnumFix(m.prototype,l);}},augmentObject:function(n,m){if(!m||!n){throw new Error(\"Absorb failed, verify dependencies.\");}var j=arguments,l,o,k=j[2];if(k&&k!==true){for(l=2;l \";if(!f.isObject(j)){return j+\"\";}else{if(j instanceof Date||(\"nodeType\" in j&&\"tagName\" in j)){return j;}else{if(f.isFunction(j)){return k;}}}p=(f.isNumber(p))?p:3;if(f.isArray(j)){r.push(\"[\");for(l=0,n=j.length;l0)?f.dump(j[l],p-1):t);}else{r.push(j[l]);}r.push(q);}if(r.length>1){r.pop();}r.push(\"]\");}else{r.push(\"{\");for(l in j){if(f.hasOwnProperty(j,l)){r.push(l+m);if(f.isObject(j[l])){r.push((p>0)?f.dump(j[l],p-1):t);}else{r.push(j[l]);}r.push(q);}}if(r.length>1){r.pop();}r.push(\"}\");}return r.join(\"\");},substitute:function(x,y,E,l){var D,C,B,G,t,u,F=[],p,z=x.length,A=\"dump\",r=\" \",q=\"{\",m=\"}\",n,w;for(;;){D=x.lastIndexOf(q,z);if(D<0){break;}C=x.indexOf(m,D);if(D+1>C){break;}p=x.substring(D+1,C);G=p;u=null;B=G.indexOf(r);if(B>-1){u=G.substring(B+1);G=G.substring(0,B);}t=y[G];if(E){t=E(G,t,u);}if(f.isObject(t)){if(f.isArray(t)){t=f.dump(t,parseInt(u,10));}else{u=u||\"\";n=u.indexOf(A);if(n>-1){u=u.substring(4);}w=t.toString();if(w===i||n>-1){t=f.dump(t,parseInt(u,10));}else{t=w;}}}else{if(!f.isString(t)&&!f.isNumber(t)){t=\"~-\"+F.length+\"-~\";F[F.length]=p;}}x=x.substring(0,D)+t+x.substring(C+1);if(l===false){z=D-1;}}for(D=F.length-1;D>=0;D=D-1){x=x.replace(new RegExp(\"~-\"+D+\"-~\"),\"{\"+F[D]+\"}\",\"g\");}return x;},trim:function(j){try{return j.replace(/^\\s+|\\s+$/g,\"\");}catch(k){return j;\n}},merge:function(){var n={},k=arguments,j=k.length,m;for(m=0;m-1;}}else{}return G;},addClass:function(W,G){return e.Dom.batch(W,e.Dom._addClass,G);},_addClass:function(X,W){var G=false,Y;if(X&&W){Y=e.Dom._getAttribute(X,f)||i;if(!e.Dom._hasClass(X,W)){e.Dom.setAttribute(X,f,a(Y+b+W));G=true;}}else{}return G;},removeClass:function(W,G){return e.Dom.batch(W,e.Dom._removeClass,G);},_removeClass:function(Y,X){var W=false,aa,Z,G;if(Y&&X){aa=e.Dom._getAttribute(Y,f)||i;e.Dom.setAttribute(Y,f,aa.replace(e.Dom._getClassRegex(X),i));Z=e.Dom._getAttribute(Y,f);if(aa!==Z){e.Dom.setAttribute(Y,f,a(Z));W=true;if(e.Dom._getAttribute(Y,f)===\"\"){G=(Y.hasAttribute&&Y.hasAttribute(E))?E:f;Y.removeAttribute(G);}}}else{}return W;},replaceClass:function(X,W,G){return e.Dom.batch(X,e.Dom._replaceClass,{from:W,to:G});},_replaceClass:function(Y,X){var W,ab,aa,G=false,Z;if(Y&&X){ab=X.from;aa=X.to;if(!aa){G=false;}else{if(!ab){G=e.Dom._addClass(Y,X.to);}else{if(ab!==aa){Z=e.Dom._getAttribute(Y,f)||i;W=(b+Z.replace(e.Dom._getClassRegex(ab),b+aa).replace(/\\s+/g,b)).split(e.Dom._getClassRegex(aa));W.splice(1,0,b+aa);e.Dom.setAttribute(Y,f,a(W.join(i)));G=true;}}}}else{}return G;},generateId:function(G,X){X=X||\"yui-gen\";var W=function(Y){if(Y&&Y.id){return Y.id;}var Z=X+YAHOO.env._id_counter++;\nif(Y){if(Y[C]&&Y[C].getElementById(Z)){return e.Dom.generateId(Y,Z+X);}Y.id=Z;}return Z;};return e.Dom.batch(G,W,e.Dom,true)||W.apply(e.Dom,arguments);},isAncestor:function(W,X){W=e.Dom.get(W);X=e.Dom.get(X);var G=false;if((W&&X)&&(W[K]&&X[K])){if(W.contains&&W!==X){G=W.contains(X);}else{if(W.compareDocumentPosition){G=!!(W.compareDocumentPosition(X)&16);}}}else{}return G;},inDocument:function(G,W){return e.Dom._inDoc(e.Dom.get(G),W);},_inDoc:function(W,X){var G=false;if(W&&W[c]){X=X||W[C];G=e.Dom.isAncestor(X[U],W);}else{}return G;},getElementsBy:function(W,af,ab,ad,X,ac,ae){af=af||\"*\";ab=(ab)?e.Dom.get(ab):null||j;var aa=(ae)?null:[],G;if(ab){G=ab.getElementsByTagName(af);for(var Y=0,Z=G.length;Y=8){e.Dom.DOT_ATTRIBUTES.type=true;}})();YAHOO.util.Region=function(d,e,a,c){this.top=d;this.y=d;this[1]=d;this.right=e;this.bottom=a;this.left=c;this.x=c;this[0]=c;this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(a){return(a.left>=this.left&&a.right<=this.right&&a.top>=this.top&&a.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(f){var d=Math.max(this.top,f.top),e=Math.min(this.right,f.right),a=Math.min(this.bottom,f.bottom),c=Math.max(this.left,f.left);\nif(a>=d&&e>=c){return new YAHOO.util.Region(d,e,a,c);}else{return null;}};YAHOO.util.Region.prototype.union=function(f){var d=Math.min(this.top,f.top),e=Math.max(this.right,f.right),a=Math.max(this.bottom,f.bottom),c=Math.min(this.left,f.left);return new YAHOO.util.Region(d,e,a,c);};YAHOO.util.Region.prototype.toString=function(){return(\"Region {\"+\"top: \"+this.top+\", right: \"+this.right+\", bottom: \"+this.bottom+\", left: \"+this.left+\", height: \"+this.height+\", width: \"+this.width+\"}\");};YAHOO.util.Region.getRegion=function(e){var g=YAHOO.util.Dom.getXY(e),d=g[1],f=g[0]+e.offsetWidth,a=g[1]+e.offsetHeight,c=g[0];return new YAHOO.util.Region(d,f,a,c);};YAHOO.util.Point=function(a,b){if(YAHOO.lang.isArray(a)){b=a[1];a=a[0];}YAHOO.util.Point.superclass.constructor.call(this,b,a,b,a);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var b=YAHOO.util,a=\"clientTop\",f=\"clientLeft\",j=\"parentNode\",k=\"right\",w=\"hasLayout\",i=\"px\",u=\"opacity\",l=\"auto\",d=\"borderLeftWidth\",g=\"borderTopWidth\",p=\"borderRightWidth\",v=\"borderBottomWidth\",s=\"visible\",q=\"transparent\",n=\"height\",e=\"width\",h=\"style\",t=\"currentStyle\",r=/^width|height$/,o=/^(\\d[.\\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,m={get:function(x,z){var y=\"\",A=x[t][z];if(z===u){y=b.Dom.getStyle(x,u);}else{if(!A||(A.indexOf&&A.indexOf(i)>-1)){y=A;}else{if(b.Dom.IE_COMPUTED[z]){y=b.Dom.IE_COMPUTED[z](x,z);}else{if(o.test(A)){y=b.Dom.IE.ComputedStyle.getPixel(x,z);}else{y=A;}}}}return y;},getOffset:function(z,E){var B=z[t][E],x=E.charAt(0).toUpperCase()+E.substr(1),C=\"offset\"+x,y=\"pixel\"+x,A=\"\",D;if(B==l){D=z[C];if(D===undefined){A=0;}A=D;if(r.test(E)){z[h][E]=D;if(z[C]>D){A=D-(z[C]-D);}z[h][E]=l;}}else{if(!z[h][y]&&!z[h][E]){z[h][E]=B;}A=z[h][y];}return A+i;},getBorderWidth:function(x,z){var y=null;if(!x[t][w]){x[h].zoom=1;}switch(z){case g:y=x[a];break;case v:y=x.offsetHeight-x.clientHeight-x[a];break;case d:y=x[f];break;case p:y=x.offsetWidth-x.clientWidth-x[f];break;}return y+i;},getPixel:function(y,x){var A=null,B=y[t][k],z=y[t][x];y[h][k]=z;A=y[h].pixelRight;y[h][k]=B;return A+i;},getMargin:function(y,x){var z;if(y[t][x]==l){z=0+i;}else{z=b.Dom.IE.ComputedStyle.getPixel(y,x);}return z;},getVisibility:function(y,x){var z;while((z=y[t])&&z[x]==\"inherit\"){y=y[j];}return(z)?z[x]:s;},getColor:function(y,x){return b.Dom.Color.toRGB(y[t][x])||q;},getBorderColor:function(y,x){var z=y[t],A=z[x]||z.color;return b.Dom.Color.toRGB(b.Dom.Color.toHex(A));}},c={};c.top=c.right=c.bottom=c.left=c[e]=c[n]=m.getOffset;c.color=m.getColor;c[g]=c[p]=c[v]=c[d]=m.getBorderWidth;c.marginTop=c.marginRight=c.marginBottom=c.marginLeft=m.getMargin;c.visibility=m.getVisibility;c.borderColor=c.borderTopColor=c.borderRightColor=c.borderBottomColor=c.borderLeftColor=m.getBorderColor;b.Dom.IE_COMPUTED=c;b.Dom.IE_ComputedStyle=m;})();(function(){var c=\"toString\",a=parseInt,b=RegExp,d=YAHOO.util;d.Dom.Color={KEYWORDS:{black:\"000\",silver:\"c0c0c0\",gray:\"808080\",white:\"fff\",maroon:\"800000\",red:\"f00\",purple:\"800080\",fuchsia:\"f0f\",green:\"008000\",lime:\"0f0\",olive:\"808000\",yellow:\"ff0\",navy:\"000080\",blue:\"00f\",teal:\"008080\",aqua:\"0ff\"},re_RGB:/^rgb\\(([0-9]+)\\s*,\\s*([0-9]+)\\s*,\\s*([0-9]+)\\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(e){if(!d.Dom.Color.re_RGB.test(e)){e=d.Dom.Color.toHex(e);}if(d.Dom.Color.re_hex.exec(e)){e=\"rgb(\"+[a(b.$1,16),a(b.$2,16),a(b.$3,16)].join(\", \")+\")\";}return e;},toHex:function(f){f=d.Dom.Color.KEYWORDS[f]||f;if(d.Dom.Color.re_RGB.exec(f)){f=[Number(b.$1).toString(16),Number(b.$2).toString(16),Number(b.$3).toString(16)];for(var e=0;e0){i=c[0];}try{b=g.fn.call(f,i,g.obj);}catch(h){this.lastError=h;if(a){throw h;}}}else{try{b=g.fn.call(f,this.type,c,g.obj);}catch(d){this.lastError=d;if(a){throw d;}}}return b;},unsubscribeAll:function(){var a=this.subscribers.length,b;for(b=a-1;b>-1;b--){this._delete(b);}this.subscribers=[];return a;},_delete:function(a){var b=this.subscribers[a];if(b){delete b.fn;delete b.obj;}this.subscribers.splice(a,1);},toString:function(){return\"CustomEvent: \"+\"'\"+this.type+\"', \"+\"context: \"+this.scope;}};YAHOO.util.Subscriber=function(a,b,c){this.fn=a;this.obj=YAHOO.lang.isUndefined(b)?null:b;this.overrideContext=c;};YAHOO.util.Subscriber.prototype.getScope=function(a){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return a;};YAHOO.util.Subscriber.prototype.contains=function(a,b){if(b){return(this.fn==a&&this.obj==b);}else{return(this.fn==a);}};YAHOO.util.Subscriber.prototype.toString=function(){return\"Subscriber { obj: \"+this.obj+\", overrideContext: \"+(this.overrideContext||\"no\")+\" }\";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var g=false,h=[],j=[],a=0,e=[],b=0,c={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},d=YAHOO.env.ua.ie,f=\"focusin\",i=\"focusout\";return{POLL_RETRYS:500,POLL_INTERVAL:40,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:d,_interval:null,_dri:null,_specialTypes:{focusin:(d?\"focusin\":\"focus\"),focusout:(d?\"focusout\":\"blur\")},DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){this._interval=YAHOO.lang.later(this.POLL_INTERVAL,this,this._tryPreloadAttach,null,true);}},onAvailable:function(q,m,o,p,n){var k=(YAHOO.lang.isString(q))?[q]:q;for(var l=0;l-1;m--){s=(this.removeListener(l[m],k,r)&&s);}return s;}}if(!r||!r.call){return this.purgeElement(l,false,k);}if(\"unload\"==k){for(m=j.length-1;m>-1;m--){u=j[m];if(u&&u[0]==l&&u[1]==k&&u[2]==r){j.splice(m,1);return true;}}return false;}var n=null;var o=arguments[3];if(\"undefined\"===typeof o){o=this._getCacheIndex(h,l,k,r);}if(o>=0){n=h[o];}if(!l||!n){return false;}var t=n[this.CAPTURE]===true?true:false;try{this._simpleRemove(l,k,n[this.WFN],t);}catch(q){this.lastError=q;return false;}delete h[o][this.WFN];delete h[o][this.FN];h.splice(o,1);return true;},getTarget:function(m,l){var k=m.target||m.srcElement;return this.resolveTextNode(k);},resolveTextNode:function(l){try{if(l&&3==l.nodeType){return l.parentNode;}}catch(k){return null;}return l;},getPageX:function(l){var k=l.pageX;if(!k&&0!==k){k=l.clientX||0;if(this.isIE){k+=this._getScrollLeft();}}return k;},getPageY:function(k){var l=k.pageY;if(!l&&0!==l){l=k.clientY||0;if(this.isIE){l+=this._getScrollTop();}}return l;},getXY:function(k){return[this.getPageX(k),this.getPageY(k)];},getRelatedTarget:function(l){var k=l.relatedTarget;\nif(!k){if(l.type==\"mouseout\"){k=l.toElement;}else{if(l.type==\"mouseover\"){k=l.fromElement;}}}return this.resolveTextNode(k);},getTime:function(m){if(!m.time){var l=new Date().getTime();try{m.time=l;}catch(k){this.lastError=k;return l;}}return m.time;},stopEvent:function(k){this.stopPropagation(k);this.preventDefault(k);},stopPropagation:function(k){if(k.stopPropagation){k.stopPropagation();}else{k.cancelBubble=true;}},preventDefault:function(k){if(k.preventDefault){k.preventDefault();}else{k.returnValue=false;}},getEvent:function(m,k){var l=m||window.event;if(!l){var n=this.getEvent.caller;while(n){l=n.arguments[0];if(l&&Event==l.constructor){break;}n=n.caller;}}return l;},getCharCode:function(l){var k=l.keyCode||l.charCode||0;if(YAHOO.env.ua.webkit&&(k in c)){k=c[k];}return k;},_getCacheIndex:function(n,q,r,p){for(var o=0,m=n.length;o0&&e.length>0);}var p=[];var r=function(t,u){var s=t;if(u.overrideContext){if(u.overrideContext===true){s=u.obj;}else{s=u.overrideContext;}}u.fn.call(s,u.obj);};var l,k,o,n,m=[];for(l=0,k=e.length;l-1;l--){o=e[l];if(!o||!o.id){e.splice(l,1);}}this.startInterval();}else{if(this._interval){this._interval.cancel();this._interval=null;}}this.locked=false;},purgeElement:function(p,q,s){var n=(YAHOO.lang.isString(p))?this.getEl(p):p;var r=this.getListeners(n,s),o,k;if(r){for(o=r.length-1;o>-1;o--){var m=r[o];this.removeListener(n,m.type,m.fn);}}if(q&&n&&n.childNodes){for(o=0,k=n.childNodes.length;o-1;o--){n=h[o];if(n){try{m.removeListener(n[m.EL],n[m.TYPE],n[m.FN],o);}catch(v){}}}n=null;}try{m._simpleRemove(window,\"unload\",m._unload);m._simpleRemove(window,\"load\",m._load);}catch(u){}},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var k=document.documentElement,l=document.body;if(k&&(k.scrollTop||k.scrollLeft)){return[k.scrollTop,k.scrollLeft];}else{if(l){return[l.scrollTop,l.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(m,n,l,k){m.addEventListener(n,l,(k));};}else{if(window.attachEvent){return function(m,n,l,k){m.attachEvent(\"on\"+n,l);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(m,n,l,k){m.removeEventListener(n,l,(k));};}else{if(window.detachEvent){return function(l,m,k){l.detachEvent(\"on\"+m,k);};}else{return function(){};}}}()};}();(function(){var a=YAHOO.util.Event;a.on=a.addListener;a.onFocus=a.addFocusListener;a.onBlur=a.addBlurListener;\n/*! DOMReady: based on work by: Dean Edwards/John Resig/Matthias Miller/Diego Perini */\nif(a.isIE){if(self!==self.top){document.onreadystatechange=function(){if(document.readyState==\"complete\"){document.onreadystatechange=null;a._ready();}};}else{YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var b=document.createElement(\"p\");a._dri=setInterval(function(){try{b.doScroll(\"left\");clearInterval(a._dri);a._dri=null;a._ready();b=null;}catch(c){}},a.POLL_INTERVAL);}}else{if(a.webkit&&a.webkit<525){a._dri=setInterval(function(){var c=document.readyState;if(\"loaded\"==c||\"complete\"==c){clearInterval(a._dri);a._dri=null;a._ready();}},a.POLL_INTERVAL);}else{a._simpleAdd(document,\"DOMContentLoaded\",a._ready);}}a._simpleAdd(window,\"load\",a._load);a._simpleAdd(window,\"unload\",a._unload);a._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(a,c,f,e){this.__yui_events=this.__yui_events||{};var d=this.__yui_events[a];if(d){d.subscribe(c,f,e);}else{this.__yui_subscribers=this.__yui_subscribers||{};var b=this.__yui_subscribers;if(!b[a]){b[a]=[];}b[a].push({fn:c,obj:f,overrideContext:e});}},unsubscribe:function(c,e,g){this.__yui_events=this.__yui_events||{};var a=this.__yui_events;if(c){var f=a[c];if(f){return f.unsubscribe(e,g);}}else{var b=true;for(var d in a){if(YAHOO.lang.hasOwnProperty(a,d)){b=b&&a[d].unsubscribe(e,g);\n}}return b;}return false;},unsubscribeAll:function(a){return this.unsubscribe(a);},createEvent:function(b,g){this.__yui_events=this.__yui_events||{};var e=g||{},d=this.__yui_events,f;if(d[b]){}else{f=new YAHOO.util.CustomEvent(b,e.scope||this,e.silent,YAHOO.util.CustomEvent.FLAT,e.fireOnce);d[b]=f;if(e.onSubscribeCallback){f.subscribeEvent.subscribe(e.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var a=this.__yui_subscribers[b];if(a){for(var c=0;c0)?f:0;}if(c in d&&!(\"style\" in d&&c in d.style)){d[c]=f;}else{b.Dom.setStyle(d,c,f+e);}},getAttribute:function(c){var e=this.getEl();var g=b.Dom.getStyle(e,c);if(g!==\"auto\"&&!this.patterns.offsetUnit.test(g)){return parseFloat(g);}var d=this.patterns.offsetAttribute.exec(c)||[];var h=!!(d[3]);var f=!!(d[2]);if(\"style\" in e){if(f||(b.Dom.getStyle(e,\"position\")==\"absolute\"&&h)){g=e[\"offset\"+d[0].charAt(0).toUpperCase()+d[0].substr(1)];}else{g=0;}}else{if(c in e){g=e[c];}}return g;},getDefaultUnit:function(c){if(this.patterns.defaultUnit.test(c)){return\"px\";}return\"\";},setRuntimeAttribute:function(d){var j;var e;var f=this.attributes;this.runtimeAttributes[d]={};var h=function(i){return(typeof i!==\"undefined\");};if(!h(f[d][\"to\"])&&!h(f[d][\"by\"])){return false;}j=(h(f[d][\"from\"]))?f[d][\"from\"]:this.getAttribute(d);if(h(f[d][\"to\"])){e=f[d][\"to\"];}else{if(h(f[d][\"by\"])){if(j.constructor==Array){e=[];for(var g=0,c=j.length;g0&&isFinite(o)){if(k.currentFrame+o>=n){o=n-(m+1);}k.currentFrame+=o;}};this._queue=c;this._getIndex=a;};YAHOO.util.Bezier=new function(){this.getPosition=function(e,d){var f=e.length;var c=[];for(var b=0;b0&&!(m[0] instanceof Array)){m=[m];}else{var l=[];for(n=0,p=m.length;n0){this.runtimeAttributes[q]=this.runtimeAttributes[q].concat(m);}this.runtimeAttributes[q][this.runtimeAttributes[q].length]=j;}else{f.setRuntimeAttribute.call(this,q);}};var b=function(g,i){var h=e.Dom.getXY(this.getEl());g=[g[0]-h[0]+i[0],g[1]-h[1]+i[1]];return g;};var d=function(g){return(typeof g!==\"undefined\");};e.Motion=a;})();(function(){var d=function(f,e,g,h){if(f){d.superclass.constructor.call(this,f,e,g,h);}};d.NAME=\"Scroll\";var b=YAHOO.util;YAHOO.extend(d,b.ColorAnim);var c=d.superclass;var a=d.prototype;a.doMethod=function(e,h,f){var g=null;if(e==\"scroll\"){g=[this.method(this.currentFrame,h[0],f[0]-h[0],this.totalFrames),this.method(this.currentFrame,h[1],f[1]-h[1],this.totalFrames)];}else{g=c.doMethod.call(this,e,h,f);}return g;};a.getAttribute=function(e){var g=null;var f=this.getEl();if(e==\"scroll\"){g=[f.scrollLeft,f.scrollTop];}else{g=c.getAttribute.call(this,e);}return g;};a.setAttribute=function(e,h,g){var f=this.getEl();if(e==\"scroll\"){f.scrollLeft=h[0];f.scrollTop=h[1];}else{c.setAttribute.call(this,e,h,g);}};b.Scroll=d;})();YAHOO.register(\"animation\",YAHOO.util.Anim,{version:\"2.9.0\",build:\"2800\"});" }, "redirectURL": "", "headersSize": 367, "bodySize": 4877, "_transferSize": 5244 }, "cache": {}, "timings": { "blocked": 235.3375200160083, "dns": -1, "ssl": -1, "connect": -1, "send": 0.2200000453740074, "wait": 59.58899995312072, "receive": 448.3710000058636, "_blocked_queueing": 12.519999989308417 }, "serverIPAddress": "52.10.180.58", "connection": "1232215", "pageref": "page_1" }, { "startedDateTime": "2017-11-30T19:20:11.869Z", "time": 743.9962790298741, "request": { "method": "GET", "url": "https://buildmaster-alpha.devsnc.com/static/de2efad2/scripts/yui/dragdrop/dragdrop-min.js", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Pragma", "value": "no-cache" }, { "name": "DNT", "value": "1" }, { "name": "Accept-Encoding", "value": "gzip, deflate, br" }, { "name": "Host", "value": "buildmaster-alpha.devsnc.com" }, { "name": "Accept-Language", "value": "en-US,en;q=0.9" }, { "name": "User-Agent", "value": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36" }, { "name": "Accept", "value": "*/*" }, { "name": "Referer", "value": "https://buildmaster-alpha.devsnc.com/computer/slave-it0400/" }, { "name": "Cookie", "value": "__utma=15532709.231555084.1477022346.1477022346.1477022346.1; _ga=GA1.2.1409074943.1502845253; jenkins-timestamper-offset=28800000; ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE=amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5; screenResolution=2560x1440; jenkins-timestamper=system; jenkins-timestamper-local=false; JSESSIONID.8e86c79a=8evi7c30nan81dxijllhyna38" }, { "name": "Connection", "value": "keep-alive" }, { "name": "Cache-Control", "value": "no-cache" } ], "queryString": [], "cookies": [ { "name": "__utma", "value": "15532709.231555084.1477022346.1477022346.1477022346.1", "expires": null, "httpOnly": false, "secure": false }, { "name": "_ga", "value": "GA1.2.1409074943.1502845253", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-offset", "value": "28800000", "expires": null, "httpOnly": false, "secure": false }, { "name": "ACEGI_SECURITY_HASHED_REMEMBER_ME_COOKIE", "value": "amFzb24ubmV3YmxhbmM6MTUxMjA4MDU1MTU1NDowZjJiODk0OGI4OTEwNTc2ZDczY2YyNTU3OGZiY2VkZjQxNWNlYmFiZjg5MDJmNTVkODg1YjI2NjExZmMxZWE5", "expires": null, "httpOnly": false, "secure": false }, { "name": "screenResolution", "value": "2560x1440", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper", "value": "system", "expires": null, "httpOnly": false, "secure": false }, { "name": "jenkins-timestamper-local", "value": "false", "expires": null, "httpOnly": false, "secure": false }, { "name": "JSESSIONID.8e86c79a", "value": "8evi7c30nan81dxijllhyna38", "expires": null, "httpOnly": false, "secure": false } ], "headersSize": 902, "bodySize": 0 }, "response": { "status": 200, "statusText": "OK", "httpVersion": "HTTP/1.1", "headers": [ { "name": "Date", "value": "Thu, 30 Nov 2017 19:20:12 GMT" }, { "name": "Content-Encoding", "value": "gzip" }, { "name": "X-Content-Type-Options", "value": "nosniff" }, { "name": "Last-Modified", "value": "Wed, 13 Sep 2017 17:06:05 GMT" }, { "name": "Server", "value": "Jetty(9.2.z-SNAPSHOT)" }, { "name": "Content-Type", "value": "application/javascript" }, { "name": "Connection", "value": "Keep-Alive" }, { "name": "Accept-Ranges", "value": "bytes" }, { "name": "Keep-Alive", "value": "timeout=5, max=97" }, { "name": "Content-Length", "value": "6974" }, { "name": "Expires", "value": "Fri, 30 Nov 2018 19:20:12 GMT" } ], "cookies": [], "content": { "size": 23689, "mimeType": "application/javascript", "compression": 16715, "text": "/*\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nif(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event,B=YAHOO.util.Dom;return{useShim:false,_shimActive:false,_shimState:false,_debugShim:false,_createShim:function(){var C=document.createElement(\"div\");C.id=\"yui-ddm-shim\";if(document.body.firstChild){document.body.insertBefore(C,document.body.firstChild);}else{document.body.appendChild(C);}C.style.display=\"none\";C.style.backgroundColor=\"red\";C.style.position=\"absolute\";C.style.zIndex=\"99999\";B.setStyle(C,\"opacity\",\"0\");this._shim=C;A.on(C,\"mouseup\",this.handleMouseUp,this,true);A.on(C,\"mousemove\",this.handleMouseMove,this,true);A.on(window,\"scroll\",this._sizeShim,this,true);},_sizeShim:function(){if(this._shimActive){var C=this._shim;C.style.height=B.getDocumentHeight()+\"px\";C.style.width=B.getDocumentWidth()+\"px\";C.style.top=\"0\";C.style.left=\"0\";}},_activateShim:function(){if(this.useShim){if(!this._shim){this._createShim();}this._shimActive=true;var C=this._shim,D=\"0\";if(this._debugShim){D=\".5\";}B.setStyle(C,\"opacity\",D);this._sizeShim();C.style.display=\"block\";}},_deactivateShim:function(){this._shim.style.display=\"none\";this._shimActive=false;},_shim:null,ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(E,D){for(var F in this.ids){for(var C in this.ids[F]){var G=this.ids[F][C];if(!this.isTypeOfDD(G)){continue;}G[E].apply(G,D);}}},_onLoad:function(){this.init();A.on(document,\"mouseup\",this.handleMouseUp,this,true);A.on(document,\"mousemove\",this.handleMouseMove,this,true);A.on(window,\"unload\",this._onUnload,this,true);A.on(window,\"resize\",this._onResize,this,true);},_onResize:function(C){this._execOnAll(\"resetConstraints\",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(D,C){if(!this.initialized){this.init();}if(!this.ids[C]){this.ids[C]={};}this.ids[C][D.id]=D;},removeDDFromGroup:function(E,C){if(!this.ids[C]){this.ids[C]={};}var D=this.ids[C];if(D&&D[E.id]){delete D[E.id];}},_remove:function(E){for(var D in E.groups){if(D){var C=this.ids[D];if(C&&C[E.id]){delete C[E.id];}}}delete this.handleIds[E.id];},regHandle:function(D,C){if(!this.handleIds[D]){this.handleIds[D]={};}this.handleIds[D][C]=C;},isDragDrop:function(C){return(this.getDDById(C))?true:false;},getRelated:function(H,D){var G=[];for(var F in H.groups){for(var E in this.ids[F]){var C=this.ids[F][E];if(!this.isTypeOfDD(C)){continue;}if(!D||C.isTarget){G[G.length]=C;}}}return G;},isLegalTarget:function(G,F){var D=this.getRelated(G,true);for(var E=0,C=D.length;Ethis.clickPixelThresh||D>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){if(C&&C.events.b4Drag){C.b4Drag(F);C.fireEvent(\"b4DragEvent\",{e:F});}if(C&&C.events.drag){C.onDrag(F);C.fireEvent(\"dragEvent\",{e:F});}if(C){this.fireEvents(F,false);}}this.stopEvent(F);}},fireEvents:function(W,M){var c=this.dragCurrent;if(!c||c.isLocked()||c.dragOnly){return;}var O=YAHOO.util.Event.getPageX(W),N=YAHOO.util.Event.getPageY(W),Q=new YAHOO.util.Point(O,N),K=c.getTargetCoord(Q.x,Q.y),F=c.getDragEl(),E=[\"out\",\"over\",\"drop\",\"enter\"],V=new YAHOO.util.Region(K.y,K.x+F.offsetWidth,K.y+F.offsetHeight,K.x),I=[],D={},L={},R=[],d={outEvts:[],overEvts:[],dropEvts:[],enterEvts:[]};for(var T in this.dragOvers){var f=this.dragOvers[T];if(!this.isTypeOfDD(f)){continue;\n}if(!this.isOverTarget(Q,f,this.mode,V)){d.outEvts.push(f);}I[T]=true;delete this.dragOvers[T];}for(var S in c.groups){if(\"string\"!=typeof S){continue;}for(T in this.ids[S]){var G=this.ids[S][T];if(!this.isTypeOfDD(G)){continue;}if(G.isTarget&&!G.isLocked()&&G!=c){if(this.isOverTarget(Q,G,this.mode,V)){D[S]=true;if(M){d.dropEvts.push(G);}else{if(!I[G.id]){d.enterEvts.push(G);}else{d.overEvts.push(G);}this.dragOvers[G.id]=G;}}}}}this.interactionInfo={out:d.outEvts,enter:d.enterEvts,over:d.overEvts,drop:d.dropEvts,point:Q,draggedRegion:V,sourceRegion:this.locationCache[c.id],validDrop:M};for(var C in D){R.push(C);}if(M&&!d.dropEvts.length){this.interactionInfo.validDrop=false;if(c.events.invalidDrop){c.onInvalidDrop(W);c.fireEvent(\"invalidDropEvent\",{e:W});}}for(T=0;T2000){}else{setTimeout(C._addListeners,10);if(document&&document.body){C._timeoutCount+=1;}}}},handleWasClicked:function(C,E){if(this.isHandle(E,C.id)){return true;}else{var D=C.parentNode;while(D){if(this.isHandle(E,D.id)){return true;}else{D=D.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={events:null,on:function(){this.subscribe.apply(this,arguments);},id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,useShim:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id);\n}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(F,C,D){this.initTarget(F,C,D);A.on(this._domRef||this.id,\"mousedown\",this.handleMouseDown,this,true);for(var E in this.events){this.createEvent(E+\"Event\");}},initTarget:function(E,C,D){this.config=D||{};this.events={};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!==\"string\"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:\"default\");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:\"A\"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.events={mouseDown:true,b4MouseDown:true,mouseUp:true,b4StartDrag:true,startDrag:true,b4EndDrag:true,endDrag:true,drag:true,b4Drag:true,invalidDrop:true,b4DragOut:true,dragOut:true,dragEnter:true,b4DragOver:true,dragOver:true,b4DragDrop:true,dragDrop:true};if(this.config.events){for(var C in this.config.events){if(this.config.events[C]===false){this.events[C]=false;}}}this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);this.useShim=((this.config.useShim===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){if(G&&G.style&&(G.style.display==\"none\")){}else{}return;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!==\"string\"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!==\"string\"){C=B.generateId(C);}A.on(C,\"mousedown\",this.handleMouseDown,this,true);this.setHandleElId(C);this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,\"mousedown\",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(J,I){var D=J.which||J.button;if(this.primaryButtonOnly&&D>1){return;}if(this.isLocked()){return;}var C=this.b4MouseDown(J),F=true;if(this.events.b4MouseDown){F=this.fireEvent(\"b4MouseDownEvent\",J);}var E=this.onMouseDown(J),H=true;if(this.events.mouseDown){if(E===false){H=false;}else{H=this.fireEvent(\"mouseDownEvent\",J);}}if((C===false)||(E===false)||(F===false)||(H===false)){return;}this.DDM.refreshCache(this.groups);var G=new YAHOO.util.Point(A.getPageX(J),A.getPageY(J));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(G,this)){}else{if(this.clickValidator(J)){this.setStartPosition();this.DDM.handleMouseDown(J,this);this.DDM.stopEvent(J);}else{}}},clickValidator:function(D){var C=YAHOO.util.Event.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(Cthis.maxX){C=this.maxX;}}if(this.constrainY){if(Fthis.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!==\"string\"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!==\"string\"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;\nif(D){this.setYTicks(this.initPageY,D);}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return(\"DragDrop \"+this.id);}};YAHOO.augment(YAHOO.util.DragDrop,YAHOO.util.EventProvider);})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,\"left\"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,\"top\"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,\"left\",(E.x+this.deltaSetXY[0])+\"px\");YAHOO.util.Dom.setStyle(C,\"top\",(E.y+this.deltaSetXY[1])+\"px\");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G0&&I-NB&&F0&&J-D0){g=f-1;do{d=e.subscribers[g];if(d&&d.obj==j&&d.fn==h){return true;}}while(g--);}return false;};YAHOO.lang.augmentProto(a,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Module=function(r,q){if(r){this.init(r,q);}else{}};var f=YAHOO.util.Dom,d=YAHOO.util.Config,n=YAHOO.util.Event,m=YAHOO.util.CustomEvent,g=YAHOO.widget.Module,i=YAHOO.env.ua,h,p,o,e,a={\"BEFORE_INIT\":\"beforeInit\",\"INIT\":\"init\",\"APPEND\":\"append\",\"BEFORE_RENDER\":\"beforeRender\",\"RENDER\":\"render\",\"CHANGE_HEADER\":\"changeHeader\",\"CHANGE_BODY\":\"changeBody\",\"CHANGE_FOOTER\":\"changeFooter\",\"CHANGE_CONTENT\":\"changeContent\",\"DESTROY\":\"destroy\",\"BEFORE_SHOW\":\"beforeShow\",\"SHOW\":\"show\",\"BEFORE_HIDE\":\"beforeHide\",\"HIDE\":\"hide\"},j={\"VISIBLE\":{key:\"visible\",value:true,validator:YAHOO.lang.isBoolean},\"EFFECT\":{key:\"effect\",suppressEvent:true,supercedes:[\"visible\"]},\"MONITOR_RESIZE\":{key:\"monitorresize\",value:true},\"APPEND_TO_DOCUMENT_BODY\":{key:\"appendtodocumentbody\",value:false}};g.IMG_ROOT=null;g.IMG_ROOT_SSL=null;g.CSS_MODULE=\"yui-module\";g.CSS_HEADER=\"hd\";g.CSS_BODY=\"bd\";g.CSS_FOOTER=\"ft\";g.RESIZE_MONITOR_SECURE_URL=\"javascript:false;\";g.RESIZE_MONITOR_BUFFER=1;g.textResizeEvent=new m(\"textResize\");g.forceDocumentRedraw=function(){var q=document.documentElement;if(q){q.className+=\" \";q.className=YAHOO.lang.trim(q.className);}};function l(){if(!h){h=document.createElement(\"div\");h.innerHTML=('
'+'
');p=h.firstChild;o=p.nextSibling;e=o.nextSibling;}return h;}function k(){if(!p){l();}return(p.cloneNode(false));}function b(){if(!o){l();}return(o.cloneNode(false));}function c(){if(!e){l();}return(e.cloneNode(false));}g.prototype={constructor:g,element:null,header:null,body:null,footer:null,id:null,imageRoot:g.IMG_ROOT,initEvents:function(){var q=m.LIST;\nthis.beforeInitEvent=this.createEvent(a.BEFORE_INIT);this.beforeInitEvent.signature=q;this.initEvent=this.createEvent(a.INIT);this.initEvent.signature=q;this.appendEvent=this.createEvent(a.APPEND);this.appendEvent.signature=q;this.beforeRenderEvent=this.createEvent(a.BEFORE_RENDER);this.beforeRenderEvent.signature=q;this.renderEvent=this.createEvent(a.RENDER);this.renderEvent.signature=q;this.changeHeaderEvent=this.createEvent(a.CHANGE_HEADER);this.changeHeaderEvent.signature=q;this.changeBodyEvent=this.createEvent(a.CHANGE_BODY);this.changeBodyEvent.signature=q;this.changeFooterEvent=this.createEvent(a.CHANGE_FOOTER);this.changeFooterEvent.signature=q;this.changeContentEvent=this.createEvent(a.CHANGE_CONTENT);this.changeContentEvent.signature=q;this.destroyEvent=this.createEvent(a.DESTROY);this.destroyEvent.signature=q;this.beforeShowEvent=this.createEvent(a.BEFORE_SHOW);this.beforeShowEvent.signature=q;this.showEvent=this.createEvent(a.SHOW);this.showEvent.signature=q;this.beforeHideEvent=this.createEvent(a.BEFORE_HIDE);this.beforeHideEvent.signature=q;this.hideEvent=this.createEvent(a.HIDE);this.hideEvent.signature=q;},platform:function(){var q=navigator.userAgent.toLowerCase();if(q.indexOf(\"windows\")!=-1||q.indexOf(\"win32\")!=-1){return\"windows\";}else{if(q.indexOf(\"macintosh\")!=-1){return\"mac\";}else{return false;}}}(),browser:function(){var q=navigator.userAgent.toLowerCase();if(q.indexOf(\"opera\")!=-1){return\"opera\";}else{if(q.indexOf(\"msie 7\")!=-1){return\"ie7\";}else{if(q.indexOf(\"msie\")!=-1){return\"ie\";}else{if(q.indexOf(\"safari\")!=-1){return\"safari\";}else{if(q.indexOf(\"gecko\")!=-1){return\"gecko\";}else{return false;}}}}}}(),isSecure:function(){if(window.location.href.toLowerCase().indexOf(\"https\")===0){return true;}else{return false;}}(),initDefaultConfig:function(){this.cfg.addProperty(j.VISIBLE.key,{handler:this.configVisible,value:j.VISIBLE.value,validator:j.VISIBLE.validator});this.cfg.addProperty(j.EFFECT.key,{handler:this.configEffect,suppressEvent:j.EFFECT.suppressEvent,supercedes:j.EFFECT.supercedes});this.cfg.addProperty(j.MONITOR_RESIZE.key,{handler:this.configMonitorResize,value:j.MONITOR_RESIZE.value});this.cfg.addProperty(j.APPEND_TO_DOCUMENT_BODY.key,{value:j.APPEND_TO_DOCUMENT_BODY.value});},init:function(v,u){var s,w;this.initEvents();this.beforeInitEvent.fire(g);this.cfg=new d(this);if(this.isSecure){this.imageRoot=g.IMG_ROOT_SSL;}if(typeof v==\"string\"){s=v;v=document.getElementById(v);if(!v){v=(l()).cloneNode(false);v.id=s;}}this.id=f.generateId(v);this.element=v;w=this.element.firstChild;if(w){var r=false,q=false,t=false;do{if(1==w.nodeType){if(!r&&f.hasClass(w,g.CSS_HEADER)){this.header=w;r=true;}else{if(!q&&f.hasClass(w,g.CSS_BODY)){this.body=w;q=true;}else{if(!t&&f.hasClass(w,g.CSS_FOOTER)){this.footer=w;t=true;}}}}}while((w=w.nextSibling));}this.initDefaultConfig();f.addClass(this.element,g.CSS_MODULE);if(u){this.cfg.applyConfig(u,true);}if(!d.alreadySubscribed(this.renderEvent,this.cfg.fireQueue,this.cfg)){this.renderEvent.subscribe(this.cfg.fireQueue,this.cfg,true);}this.initEvent.fire(g);},initResizeMonitor:function(){var r=(i.gecko&&this.platform==\"windows\");if(r){var q=this;setTimeout(function(){q._initResizeMonitor();},0);}else{this._initResizeMonitor();}},_initResizeMonitor:function(){var q,s,u;function w(){g.textResizeEvent.fire();}if(!i.opera){s=f.get(\"_yuiResizeMonitor\");var v=this._supportsCWResize();if(!s){s=document.createElement(\"iframe\");if(this.isSecure&&g.RESIZE_MONITOR_SECURE_URL&&i.ie){s.src=g.RESIZE_MONITOR_SECURE_URL;}if(!v){u=[\"