]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Public key column in table, shown as hex
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
1 <!DOCTYPE html>
2 <html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
6 <style>/*!
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="Ian Coleman" name="author" />
15
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
47 .phrase {
48 word-break: keep-all;
49 }
50 .strength {
51 /* override mobile width from bootstrap */
52 width: auto!important;
53 display: inline-block;
54 }
55 .languages * {
56 padding-left: 10px;
57 }
58 </style>
59 </head>
60 <body>
61 <div class="container">
62
63 <h1 class="text-center">Mnemonic Code Converter</h1>
64 <hr>
65 <div class="row">
66 <div class="col-md-12">
67 <h2>Mnemonic</h2>
68 <form class="form-horizontal" role="form">
69 <div class="col-sm-2"></div>
70 <div class="col-sm-10">
71 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)</p>
72 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
73 </div>
74 <div class="form-group">
75 <label class="col-sm-2 control-label"></label>
76 <div class="col-sm-10">
77 <div class="form-inline">
78 <div class="input-group-inline">
79 <button class="btn generate">Generate</button>
80 <span>a random</span>
81 <select id="strength" class="strength form-control">
82 <option value="3">3</option>
83 <option value="6">6</option>
84 <option value="9">9</option>
85 <option value="12">12</option>
86 <option value="15" selected>15</option>
87 <option value="18">18</option>
88 <option value="21">21</option>
89 <option value="24">24</option>
90 </select>
91 word mnemonic, or enter your own below.
92 </div>
93 </div>
94 </div>
95 </div>
96 <div class="form-group">
97 <label class="col-sm-2 control-label"></label>
98 <div class="col-sm-10 languages">
99 <a href="#english">English</a>
100 <a href="#japanese" title="Japanese">日本語</a>
101 <a href="#spanish" title="Spanish">Español</a>
102 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
103 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
104 <a href="#french" title="French">Français</a>
105 <a href="#italian" title="Italian">Italiano</a>
106 </div>
107 </div>
108 <div class="form-group">
109 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
110 <div class="col-sm-10">
111 <textarea id="phrase" class="phrase form-control"></textarea>
112 </div>
113 </div>
114 <div class="form-group">
115 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
116 <div class="col-sm-10">
117 <textarea id="passphrase" class="passphrase form-control"></textarea>
118 </div>
119 </div>
120 <div class="form-group">
121 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
122 <div class="col-sm-10">
123 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
124 </div>
125 </div>
126 <div class="form-group">
127 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
128 <div class="col-sm-10">
129 <select id="network-phrase" class="network form-control">
130 <!-- populated by javascript -->
131 </select>
132 </div>
133 </div>
134 <div class="form-group">
135 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
136 <div class="col-sm-10">
137 <textarea id="root-key" class="root-key form-control"></textarea>
138 </div>
139 </div>
140 </form>
141 </div>
142 </div>
143
144 <hr>
145
146 <div class="row">
147 <div class="col-md-12">
148 <h2>Derivation Path</h2>
149 <ul class="derivation-type nav nav-tabs" role="tablist">
150 <li id="bip44-tab" class="active">
151 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
152 </li>
153 <li id="bip32-tab">
154 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
155 </li>
156 </ul>
157 <div class="derivation-type tab-content">
158 <div id="bip44" class="tab-pane active">
159 <form class="form-horizontal" role="form">
160 <br>
161 <div class="col-sm-2"></div>
162 <div class="col-sm-10">
163 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
164 </div>
165 <div class="form-group">
166 <label for="purpose" class="col-sm-2 control-label">
167 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
168 </label>
169 <div class="col-sm-10">
170 <input id="purpose" type="text" class="purpose form-control" value="44">
171 </div>
172 </div>
173 <div class="form-group">
174 <label for="coin" class="col-sm-2 control-label">
175 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
176 </label>
177 <div class="col-sm-10">
178 <input id="coin" type="text" class="coin form-control" value="0">
179 </div>
180 </div>
181 <div class="form-group">
182 <label for="account" class="col-sm-2 control-label">
183 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
184 </label>
185 <div class="col-sm-10">
186 <input id="account" type="text" class="account form-control" value="0">
187 </div>
188 </div>
189 <div class="form-group">
190 <label for="change" class="col-sm-2 control-label">
191 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
192 </label>
193 <div class="col-sm-10">
194 <input id="change" type="text" class="change form-control" value="0">
195 </div>
196 </div>
197 <div class="form-group">
198 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
199 <div class="col-sm-10">
200 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
201 </div>
202 </div>
203 </form>
204 </div>
205 <div id="bip32" class="tab-pane">
206 <form class="form-horizontal" role="form">
207 <br>
208 <div class="col-sm-2"></div>
209 <div class="col-sm-10">
210 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
211 </div>
212 <div class="form-group">
213 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
214 <div class="col-sm-10">
215 <input id="bip32-path" type="text" class="path form-control" value="m/0">
216 </div>
217 </div>
218 <div class="form-group">
219 <div class="col-sm-2"></div>
220 <label class="col-sm-10">
221 <input class="hardened-addresses" type="checkbox">
222 Use hardened addresses
223 </label>
224 </div>
225 <div class="form-group">
226 <label class="col-sm-2 control-label">Hive Wallet</label>
227 <div class="col-sm-10">
228 <p class="form-control no-border">
229 Use path <code>m/0'/0</code>.
230 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
231 </p>
232 </div>
233 </div>
234 <div class="form-group">
235 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
236 <div class="col-sm-10">
237 <p class="form-control no-border">
238 Use path <code>m/44'/0'/0'/0</code>.
239 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
240 </p>
241 </div>
242 </div>
243 <div class="form-group">
244 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
245 <div class="col-sm-10">
246 <p class="form-control no-border">
247 Use path <code>m/0'/0'</code> with hardened addresses.
248 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
249 </p>
250 </div>
251 </div>
252 <div class="form-group">
253 <label class="col-sm-2 control-label">Block Explorers</label>
254 <div class="col-sm-10">
255 <p class="form-control no-border">
256 Use path <code>m/44'/0'/0'</code>.
257 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
258 </p>
259 </div>
260 </div>
261 </form>
262 </div>
263 </div>
264 <form class="form-horizontal" role="form">
265 <div class="form-group">
266 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
267 <div class="col-sm-10">
268 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
269 </div>
270 </div>
271 <div class="form-group">
272 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
273 <div class="col-sm-10">
274 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
275 </div>
276 </div>
277 </form>
278 </div>
279 </div>
280
281 <hr>
282
283 <div class="row">
284 <div class="col-md-12">
285 <h2>Derived Addresses</h2>
286 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
287 <table class="table table-striped">
288 <thead>
289 <th>
290 <div class="input-group">
291 Path&nbsp;&nbsp;
292 <button class="index-toggle">Toggle</button>
293 </div>
294 </th>
295 <th>
296 <div class="input-group">
297 Address&nbsp;&nbsp;
298 <button class="address-toggle">Toggle</button>
299 </div>
300 </th>
301 <th>
302 <div class="input-group">
303 Public Key&nbsp;&nbsp;
304 <button class="public-key-toggle">Toggle</button>
305 </div>
306 </th>
307 <th>
308 <div class="input-group">
309 Private Key&nbsp;&nbsp;
310 <button class="private-key-toggle">Toggle</button>
311 </div>
312 </th>
313 </thead>
314 <tbody class="addresses">
315 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
316 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
317 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
318 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
319 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
320 </tbody>
321 </table>
322 </div>
323 </div>
324 <span>Show next </button>
325 <input type="number" class="rows-to-add" value="20">
326 <button class="more">Show</button>
327
328 <hr>
329
330 <div class="row">
331 <div class="col-md-12">
332 <h2>More info</h2>
333 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
334 <p>
335 Read more at the
336 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
337 </p>
338 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
339 <p>
340 Read more at the
341 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
342 and see the demo at
343 <a href="http://bip32.org/" target="_blank">bip32.org</a>
344 </p>
345 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
346 <p>
347 Read more at the
348 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
349 </p>
350 <h3>Private Keys</h3>
351 <p>
352 Use private keys at
353 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
354 but be careful - it can be easy to make mistakes if you
355 don't know what you're doing
356 </p>
357 </div>
358 </div>
359
360 <hr>
361
362 <div class="row">
363 <div class="col-md-12">
364
365 <h2>Offline Usage</h2>
366
367 <p>
368 You can use this tool without having to be online.
369 </p>
370 <p>
371 In your browser, select file save-as, and save this page
372 as a file.
373 </p>
374 <p>
375 Double-click that file to open it in a browser
376 on any offline computer.
377 </p>
378 <p>
379 Alternatively, download it from
380 <a href="https://github.com/iancoleman/bip39">
381 https://github.com/iancoleman/bip39
382 </a>
383
384 </div>
385 </div>
386
387 <hr>
388
389 <div class="row">
390 <div class="col-md-12">
391
392 <h2>This project is 100% open-source code</h2>
393
394 <p>
395 <span>Get the source code at - </span>
396 <a href="https://github.com/iancoleman/bip39" target="_blank">
397 https://github.com/iancoleman/bip39
398 </a>
399 </p>
400
401 <h3>Libraries</h3>
402
403 <p>
404 <span>BitcoinJS - </span>
405 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
406 https://github.com/bitcoinjs/bitcoinjs-lib
407 </a>
408 </p>
409
410 <p>
411 <span>jsBIP39 - </span>
412 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
413 https://github.com/iancoleman/jsbip39
414 </a>
415 </p>
416
417 <p>
418 <span>sjcl - </span>
419 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
420 https://github.com/bitwiseshiftleft/sjcl
421 </a>
422 </p>
423
424 <p>
425 <span>jQuery - </span>
426 <a href="https://jquery.com/" target="_blank">
427 https://jquery.com/
428 </a>
429 </p>
430
431 <p>
432 <span>Twitter Bootstrap - </span>
433 <a href="http://getbootstrap.com/" target="_blank">
434 http://getbootstrap.com/
435 </a>
436 </p>
437
438 </div>
439 </div>
440
441 </div>
442
443 <div class="feedback-container">
444 <div class="feedback">Loading...</div>
445 </div>
446
447 <script type="text/template" id="address-row-template">
448 <tr>
449 <td class="index"><span></span></td>
450 <td class="address"><span></span></td>
451 <td class="pubkey"><span></span></td>
452 <td class="privkey"><span></span></td>
453 </tr>
454 </script>
455 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
456 !function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+-new Date,v=a.document,w=0,x=0,y=gb(),z=gb(),A=gb(),B=function(a,b){return a===b&&(l=!0),0},C="undefined",D=1<<31,E={}.hasOwnProperty,F=[],G=F.pop,H=F.push,I=F.push,J=F.slice,K=F.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},L="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",N="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",O=N.replace("w","w#"),P="\\["+M+"*("+N+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+O+"))|)"+M+"*\\]",Q=":("+N+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+P+")*)|.*)\\)|)",R=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),S=new RegExp("^"+M+"*,"+M+"*"),T=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp("="+M+"*([^\\]'\"]*?)"+M+"*\\]","g"),V=new RegExp(Q),W=new RegExp("^"+O+"$"),X={ID:new RegExp("^#("+N+")"),CLASS:new RegExp("^\\.("+N+")"),TAG:new RegExp("^("+N.replace("w","w*")+")"),ATTR:new RegExp("^"+P),PSEUDO:new RegExp("^"+Q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+L+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ab=/[+~]/,bb=/'|\\/g,cb=new RegExp("\\\\([\\da-f]{1,6}"+M+"?|("+M+")|.)","ig"),db=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{I.apply(F=J.call(v.childNodes),v.childNodes),F[v.childNodes.length].nodeType}catch(eb){I={apply:F.length?function(a,b){H.apply(a,J.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fb(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],!a||"string"!=typeof a)return d;if(1!==(k=b.nodeType)&&9!==k)return[];if(p&&!e){if(f=_.exec(a))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return I.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return I.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=9===k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(bb,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+qb(o[l]);w=ab.test(a)&&ob(b.parentNode)||b,x=o.join(",")}if(x)try{return I.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function gb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function hb(a){return a[u]=!0,a}function ib(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function jb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function kb(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||D)-(~a.sourceIndex||D);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function lb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function mb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function nb(a){return hb(function(b){return b=+b,hb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function ob(a){return a&&typeof a.getElementsByTagName!==C&&a}c=fb.support={},f=fb.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fb.setDocument=function(a){var b,e=a?a.ownerDocument||a:v,g=e.defaultView;return e!==n&&9===e.nodeType&&e.documentElement?(n=e,o=e.documentElement,p=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){m()},!1):g.attachEvent&&g.attachEvent("onunload",function(){m()})),c.attributes=ib(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ib(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(e.getElementsByClassName)&&ib(function(a){return a.innerHTML="<div class='a'></div><div class='a i'></div>",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=ib(function(a){return o.appendChild(a).id=u,!e.getElementsByName||!e.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==C&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(cb,db);return function(a){var c=typeof a.getAttributeNode!==C&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==C?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==C&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(e.querySelectorAll))&&(ib(function(a){a.innerHTML="<select msallowclip=''><option selected=''></option></select>",a.querySelectorAll("[msallowclip^='']").length&&q.push("[*^$]="+M+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+M+"*(?:value|"+L+")"),a.querySelectorAll(":checked").length||q.push(":checked")}),ib(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+M+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ib(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",Q)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===v&&t(v,a)?-1:b===e||b.ownerDocument===v&&t(v,b)?1:k?K.call(k,a)-K.call(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],i=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:k?K.call(k,a)-K.call(k,b):0;if(f===g)return kb(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?kb(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},e):n},fb.matches=function(a,b){return fb(a,null,null,b)},fb.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fb(b,n,null,[a]).length>0},fb.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fb.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&E.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fb.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fb.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fb.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fb.selectors={cacheLength:50,createPseudo:hb,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(cb,db),a[3]=(a[3]||a[4]||a[5]||"").replace(cb,db),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fb.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fb.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(cb,db).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+M+")"+a+"("+M+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==C&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fb.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fb.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?hb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=K.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:hb(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?hb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:hb(function(a){return function(b){return fb(a,b).length>0}}),contains:hb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:hb(function(a){return W.test(a||"")||fb.error("unsupported lang: "+a),a=a.replace(cb,db).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:nb(function(){return[0]}),last:nb(function(a,b){return[b-1]}),eq:nb(function(a,b,c){return[0>c?c+b:c]}),even:nb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:nb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:nb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:nb(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=lb(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=mb(b);function pb(){}pb.prototype=d.filters=d.pseudos,d.setFilters=new pb,g=fb.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=S.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=T.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(R," ")}),h=h.slice(c.length));for(g in d.filter)!(e=X[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fb.error(a):z(a,i).slice(0)};function qb(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function rb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function sb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function tb(a,b,c){for(var d=0,e=b.length;e>d;d++)fb(a,b[d],c);return c}function ub(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function vb(a,b,c,d,e,f){return d&&!d[u]&&(d=vb(d)),e&&!e[u]&&(e=vb(e,f)),hb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||tb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ub(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ub(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?K.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ub(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):I.apply(g,r)})}function wb(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=rb(function(a){return a===b},h,!0),l=rb(function(a){return K.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>i;i++)if(c=d.relative[a[i].type])m=[rb(sb(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return vb(i>1&&sb(m),i>1&&qb(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&wb(a.slice(i,e)),f>e&&wb(a=a.slice(e)),f>e&&qb(a))}m.push(c)}return sb(m)}function xb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=G.call(i));s=ub(s)}I.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&fb.uniqueSort(i)}return k&&(w=v,j=t),r};return c?hb(f):f}return h=fb.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wb(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xb(e,d)),f.selector=a}return f},i=fb.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(cb,db),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(cb,db),ab.test(j[0].type)&&ob(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qb(j),!a)return I.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,ab.test(a)&&ob(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ib(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ib(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||jb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ib(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||jb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ib(function(a){return null==a.getAttribute("disabled")})||jb(L,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fb}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+Math.random()}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)
457 },_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=L.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var Q=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,R=["Top","Right","Bottom","Left"],S=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)},T=/^(?:checkbox|radio)$/i;!function(){var a=l.createDocumentFragment(),b=a.appendChild(l.createElement("div")),c=l.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||l,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[n.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];g||(this.fixHooks[e]=g=W.test(e)?this.mouseHooks:V.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new n.Event(f),b=d.length;while(b--)c=d[b],a[c]=f[c];return a.target||(a.target=l),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==_()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===_()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&n.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=n.extend(new n.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?n.event.trigger(e,null,b):n.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?Z:$):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={isDefaultPrevented:$,isPropagationStopped:$,isImmediatePropagationStopped:$,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=Z,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=Z,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=Z,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),k.focusinBubbles||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a),!0)};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=L.access(d,b);e||d.addEventListener(a,c,!0),L.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=L.access(d,b)-1;e?L.access(d,b,e):(d.removeEventListener(a,c,!0),L.remove(d,b))}}}),n.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=$;else if(!d)return this;return 1===e&&(f=d,d=function(a){return n().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=n.guid++)),this.each(function(){n.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=$),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ab=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,ib={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1></$2>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(ob(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(ob(c,"script"),kb),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(hb,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function tb(a){var b=l,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=qb[0].contentDocument,b.write(),b.close(),c=sb(a,b),qb.detach()),rb[a]=c),c}var ub=/^margin/,vb=new RegExp("^("+Q+")(?!px)[a-z%]+$","i"),wb=function(a){return a.ownerDocument.defaultView.getComputedStyle(a,null)};function xb(a,b,c){var d,e,f,g,h=a.style;return c=c||wb(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),vb.test(g)&&ub.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function yb(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d=l.documentElement,e=l.createElement("div"),f=l.createElement("div");if(f.style){f.style.backgroundClip="content-box",f.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===f.style.backgroundClip,e.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",e.appendChild(f);function g(){f.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",f.innerHTML="",d.appendChild(e);var g=a.getComputedStyle(f,null);b="1%"!==g.top,c="4px"===g.width,d.removeChild(e)}a.getComputedStyle&&n.extend(k,{pixelPosition:function(){return g(),b},boxSizingReliable:function(){return null==c&&g(),c},reliableMarginRight:function(){var b,c=f.appendChild(l.createElement("div"));return c.style.cssText=f.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",f.style.width="1px",d.appendChild(e),b=!parseFloat(a.getComputedStyle(c,null).marginRight),d.removeChild(e),b}})}}(),n.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var zb=/^(none|table(?!-c[ea]).+)/,Ab=new RegExp("^("+Q+")(.*)$","i"),Bb=new RegExp("^([+-])=("+Q+")","i"),Cb={position:"absolute",visibility:"hidden",display:"block"},Db={letterSpacing:"0",fontWeight:"400"},Eb=["Webkit","O","Moz","ms"];function Fb(a,b){if(b in a)return b;var c=b[0].toUpperCase()+b.slice(1),d=b,e=Eb.length;while(e--)if(b=Eb[e]+c,b in a)return b;return d}function Gb(a,b,c){var d=Ab.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Hb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+R[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+R[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+R[f]+"Width",!0,e))):(g+=n.css(a,"padding"+R[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+R[f]+"Width",!0,e)));return g}function Ib(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=wb(a),g="border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=xb(a,b,f),(0>e||null==e)&&(e=a.style[b]),vb.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Hb(a,b,c||(g?"border":"content"),d,f)+"px"}function Jb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=L.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&S(d)&&(f[g]=L.access(d,"olddisplay",tb(d.nodeName)))):(e=S(d),"none"===c&&e||L.set(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=xb(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;return b=n.cssProps[h]||(n.cssProps[h]=Fb(i,h)),g=n.cssHooks[b]||n.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Bb.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(n.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||n.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=Fb(a.style,h)),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=xb(a,b,d)),"normal"===e&&b in Db&&(e=Db[b]),""===c||c?(f=parseFloat(e),c===!0||n.isNumeric(f)?f||0:e):e}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?zb.test(n.css(a,"display"))&&0===a.offsetWidth?n.swap(a,Cb,function(){return Ib(a,b,d)}):Ib(a,b,d):void 0},set:function(a,c,d){var e=d&&wb(a);return Gb(a,c,d?Hb(a,b,d,"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),n.cssHooks.marginRight=yb(k.reliableMarginRight,function(a,b){return b?n.swap(a,{display:"inline-block"},xb,[a,"marginRight"]):void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+R[d]+b]=f[d]||f[d-2]||f[0];return e}},ub.test(a)||(n.cssHooks[a+b].set=Gb)}),n.fn.extend({css:function(a,b){return J(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=wb(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return Jb(this,!0)},hide:function(){return Jb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){S(this)?n(this).show():n(this).hide()})}});function Kb(a,b,c,d,e){return new Kb.prototype.init(a,b,c,d,e)}n.Tween=Kb,Kb.prototype={constructor:Kb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=Kb.propHooks[this.prop];return a&&a.get?a.get(this):Kb.propHooks._default.get(this)},run:function(a){var b,c=Kb.propHooks[this.prop];return this.pos=b=this.options.duration?n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Kb.propHooks._default.set(this),this}},Kb.prototype.init.prototype=Kb.prototype,Kb.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[n.cssProps[a.prop]]||n.cssHooks[a.prop])?n.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Kb.propHooks.scrollTop=Kb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},n.fx=Kb.prototype.init,n.fx.step={};var Lb,Mb,Nb=/^(?:toggle|show|hide)$/,Ob=new RegExp("^(?:([+-])=|)("+Q+")([a-z%]*)$","i"),Pb=/queueHooks$/,Qb=[Vb],Rb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=Ob.exec(b),f=e&&e[3]||(n.cssNumber[a]?"":"px"),g=(n.cssNumber[a]||"px"!==f&&+d)&&Ob.exec(n.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,n.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function Sb(){return setTimeout(function(){Lb=void 0}),Lb=n.now()}function Tb(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=R[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function Ub(a,b,c){for(var d,e=(Rb[b]||[]).concat(Rb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function Vb(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},o=a.style,p=a.nodeType&&S(a),q=L.get(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=n.css(a,"display"),k="none"===j?L.get(a,"olddisplay")||tb(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(o.display="inline-block")),c.overflow&&(o.overflow="hidden",l.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],Nb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}m[d]=q&&q[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(m))"inline"===("none"===j?tb(a.nodeName):j)&&(o.display=j);else{q?"hidden"in q&&(p=q.hidden):q=L.access(a,"fxshow",{}),f&&(q.hidden=!p),p?n(a).show():l.done(function(){n(a).hide()}),l.done(function(){var b;L.remove(a,"fxshow");for(b in m)n.style(a,b,m[b])});for(d in m)g=Ub(p?q[d]:0,d,l),d in q||(q[d]=g.start,p&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function Wb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function Xb(a,b,c){var d,e,f=0,g=Qb.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Lb||Sb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Lb||Sb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(Wb(k,j.opts.specialEasing);g>f;f++)if(d=Qb[f].call(j,a,k,j.opts))return d;return n.map(k,Ub,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(Xb,{tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],Rb[c]=Rb[c]||[],Rb[c].unshift(b)},prefilter:function(a,b){b?Qb.unshift(a):Qb.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(S).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=Xb(this,n.extend({},a),f);(e||L.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=L.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&Pb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=L.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(Tb(b,!0),a,d,e)}}),n.each({slideDown:Tb("show"),slideUp:Tb("hide"),slideToggle:Tb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=0,c=n.timers;for(Lb=n.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||n.fx.stop(),Lb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){Mb||(Mb=setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){clearInterval(Mb),Mb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(a,b){return a=n.fx?n.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=l.createElement("input"),b=l.createElement("select"),c=b.appendChild(l.createElement("option"));a.type="checkbox",k.checkOn=""!==a.value,k.optSelected=c.selected,b.disabled=!0,k.optDisabled=!c.disabled,a=l.createElement("input"),a.value="t",a.type="radio",k.radioValue="t"===a.value}();var Yb,Zb,$b=n.expr.attrHandle;n.fn.extend({attr:function(a,b){return J(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===U?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),d=n.attrHooks[b]||(n.expr.match.bool.test(b)?Zb:Yb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=n.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void n.removeAttr(a,b))
458 },removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),Zb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):a.setAttribute(c,c),c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=$b[b]||n.find.attr;$b[b]=function(a,b,d){var e,f;return d||(f=$b[b],$b[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,$b[b]=f),e}});var _b=/^(?:input|select|textarea|button)$/i;n.fn.extend({prop:function(a,b){return J(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[n.propFix[a]||a]})}}),n.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!n.isXMLDoc(a),f&&(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||_b.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),k.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this});var ac=/[\t\r\n\f]/g;n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=n.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(E)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ac," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?n.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(n.isFunction(a)?function(c){n(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=n(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===U||"boolean"===c)&&(this.className&&L.set(this,"__className__",this.className),this.className=this.className||a===!1?"":L.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ac," ").indexOf(b)>=0)return!0;return!1}});var bc=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(bc,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=n.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>=0:void 0}},k.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var cc=n.now(),dc=/\?/;n.parseJSON=function(a){return JSON.parse(a+"")},n.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&n.error("Invalid XML: "+a),b};var ec,fc,gc=/#.*$/,hc=/([?&])_=[^&]*/,ic=/^(.*?):[ \t]*([^\r\n]*)$/gm,jc=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,kc=/^(?:GET|HEAD)$/,lc=/^\/\//,mc=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,nc={},oc={},pc="*/".concat("*");try{fc=location.href}catch(qc){fc=l.createElement("a"),fc.href="",fc=fc.href}ec=mc.exec(fc.toLowerCase())||[];function rc(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(n.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function sc(a,b,c,d){var e={},f=a===oc;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function tc(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&n.extend(!0,a,d),a}function uc(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function vc(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:fc,type:"GET",isLocal:jc.test(ec[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":pc,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?tc(tc(a,n.ajaxSettings),b):tc(n.ajaxSettings,a)},ajaxPrefilter:rc(nc),ajaxTransport:rc(oc),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=n.ajaxSetup({},b),l=k.context||k,m=k.context&&(l.nodeType||l.jquery)?n(l):n.event,o=n.Deferred(),p=n.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!f){f={};while(b=ic.exec(e))f[b[1].toLowerCase()]=b[2]}b=f[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?e:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return c&&c.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||fc)+"").replace(gc,"").replace(lc,ec[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=n.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(h=mc.exec(k.url.toLowerCase()),k.crossDomain=!(!h||h[1]===ec[1]&&h[2]===ec[2]&&(h[3]||("http:"===h[1]?"80":"443"))===(ec[3]||("http:"===ec[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=n.param(k.data,k.traditional)),sc(nc,k,b,v),2===t)return v;i=k.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!kc.test(k.type),d=k.url,k.hasContent||(k.data&&(d=k.url+=(dc.test(d)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=hc.test(d)?d.replace(hc,"$1_="+cc++):d+(dc.test(d)?"&":"?")+"_="+cc++)),k.ifModified&&(n.lastModified[d]&&v.setRequestHeader("If-Modified-Since",n.lastModified[d]),n.etag[d]&&v.setRequestHeader("If-None-Match",n.etag[d])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+pc+"; q=0.01":""):k.accepts["*"]);for(j in k.headers)v.setRequestHeader(j,k.headers[j]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(j in{success:1,error:1,complete:1})v[j](k[j]);if(c=sc(oc,k,b,v)){v.readyState=1,i&&m.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,c.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,f,h){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),c=void 0,e=h||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,f&&(u=uc(k,v,f)),u=vc(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(n.lastModified[d]=w),w=v.getResponseHeader("etag"),w&&(n.etag[d]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,i&&m.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),i&&(m.trigger("ajaxComplete",[v,k]),--n.active||n.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){var b;return n.isFunction(a)?this.each(function(b){n(this).wrapAll(a.call(this,b))}):(this[0]&&(b=n(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return this.each(n.isFunction(a)?function(b){n(this).wrapInner(a.call(this,b))}:function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}}),n.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var wc=/%20/g,xc=/\[\]$/,yc=/\r?\n/g,zc=/^(?:submit|button|image|reset|file)$/i,Ac=/^(?:input|select|textarea|keygen)/i;function Bc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||xc.test(a)?d(a,e):Bc(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)Bc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)Bc(c,a[c],b,e);return d.join("&").replace(wc,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&Ac.test(this.nodeName)&&!zc.test(a)&&(this.checked||!T.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(yc,"\r\n")}}):{name:b.name,value:c.replace(yc,"\r\n")}}).get()}}),n.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cc=0,Dc={},Ec={0:200,1223:204},Fc=n.ajaxSettings.xhr();a.ActiveXObject&&n(a).on("unload",function(){for(var a in Dc)Dc[a]()}),k.cors=!!Fc&&"withCredentials"in Fc,k.ajax=Fc=!!Fc,n.ajaxTransport(function(a){var b;return k.cors||Fc&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cc;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Dc[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Ec[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Dc[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=n("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),l.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gc=[],Hc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gc.pop()||n.expando+"_"+cc++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hc.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hc,"$1"+e):b.jsonp!==!1&&(b.url+=(dc.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||l;var d=v.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=n.buildFragment([a],b,e),e&&e.length&&n(e).remove(),n.merge([],d.childNodes))};var Ic=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&Ic)return Ic.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=n.trim(a.slice(h)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};var Jc=a.document.documentElement;function Kc(a){return n.isWindow(a)?a:9===a.nodeType&&a.defaultView}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,n.contains(b,d)?(typeof d.getBoundingClientRect!==U&&(e=d.getBoundingClientRect()),c=Kc(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===n.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(d=a.offset()),d.top+=n.css(a[0],"borderTopWidth",!0),d.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-n.css(c,"marginTop",!0),left:b.left-d.left-n.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||Jc;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Jc})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;n.fn[b]=function(e){return J(this,function(b,e,f){var g=Kc(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=yb(k.pixelPosition,function(a,c){return c?(c=xb(a,b),vb.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return J(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var Lc=a.jQuery,Mc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=Mc),b&&a.jQuery===n&&(a.jQuery=Lc),n},typeof b===U&&(a.jQuery=a.$=n),n});
459 </script>
460 <script>/*!
461 * Bootstrap v3.2.0 (http://getbootstrap.com)
462 * Copyright 2011-2014 Twitter, Inc.
463 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
464 */
465 if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.2.0",d.prototype.close=function(b){function c(){f.detach().trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",c).emulateTransitionEnd(150):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.2.0",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),d[e](null==f[b]?this.options[b]:f[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),c.preventDefault()})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b).on("keydown.bs.carousel",a.proxy(this.keydown,this)),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.2.0",c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},c.prototype.keydown=function(a){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.to=function(b){var c=this,d=this.getItemIndex(this.$active=this.$element.find(".item.active"));return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=e[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:g});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,f&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(e)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:g});return a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one("bsTransitionEnd",function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger(m)),f&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b);!e&&f.toggle&&"show"==b&&(b=!b),e||d.data("bs.collapse",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};c.VERSION="3.2.0",c.DEFAULTS={toggle:!0},c.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},c.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var c=a.Event("show.bs.collapse");if(this.$element.trigger(c),!c.isDefaultPrevented()){var d=this.$parent&&this.$parent.find("> .panel > .in");if(d&&d.length){var e=d.data("bs.collapse");if(e&&e.transitioning)return;b.call(d,"hide"),e||d.data("bs.collapse",null)}var f=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[f](0),this.transitioning=1;var g=function(){this.$element.removeClass("collapsing").addClass("collapse in")[f](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return g.call(this);var h=a.camelCase(["scroll",f].join("-"));this.$element.one("bsTransitionEnd",a.proxy(g,this)).emulateTransitionEnd(350)[f](this.$element[0][h])}}},c.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},c.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var d=a.fn.collapse;a.fn.collapse=b,a.fn.collapse.Constructor=c,a.fn.collapse.noConflict=function(){return a.fn.collapse=d,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(c){var d,e=a(this),f=e.attr("data-target")||c.preventDefault()||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""),g=a(f),h=g.data("bs.collapse"),i=h?"toggle":e.data(),j=e.attr("data-parent"),k=j&&a(j);h&&h.transitioning||(k&&k.find('[data-toggle="collapse"][data-parent="'+j+'"]').not(e).addClass("collapsed"),e[g.hasClass("in")?"addClass":"removeClass"]("collapsed")),b.call(g,i)})}(jQuery),+function(a){"use strict";function b(b){b&&3===b.which||(a(e).remove(),a(f).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))}))}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.2.0",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('<div class="dropdown-backdrop"/>').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus"),f.toggleClass("open").trigger("shown.bs.dropdown",h)}return!1}},g.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var e=c(d),g=e.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.divider):visible a",i=e.find('[role="menu"]'+h+', [role="listbox"]'+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",b).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f+', [role="menu"], [role="listbox"]',g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$backdrop=this.isShown=null,this.scrollbarWidth=0,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.2.0",c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var c=this,d=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(d),this.isShown||d.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.$body.addClass("modal-open"),this.setScrollbar(),this.escape(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.backdrop(function(){var d=a.support.transition&&c.$element.hasClass("fade");c.$element.parent().length||c.$element.appendTo(c.$body),c.$element.show().scrollTop(0),d&&c.$element[0].offsetWidth,c.$element.addClass("in").attr("aria-hidden",!1),c.enforceFocus();var e=a.Event("shown.bs.modal",{relatedTarget:b});d?c.$element.find(".modal-dialog").one("bsTransitionEnd",function(){c.$element.trigger("focus").trigger(e)}).emulateTransitionEnd(300):c.$element.trigger("focus").trigger(e)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.$body.removeClass("modal-open"),this.resetScrollbar(),this.escape(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").attr("aria-hidden",!0).off("click.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(300):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keyup.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keyup.dismiss.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var c=this,d=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var e=a.support.transition&&d;if(this.$backdrop=a('<div class="modal-backdrop '+d+'" />').appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),e&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;e?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(150):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var f=function(){c.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",f).emulateTransitionEnd(150):f()}else b&&b()},c.prototype.checkScrollbar=function(){document.body.clientWidth>=window.innerWidth||(this.scrollbarWidth=this.scrollbarWidth||this.measureScrollbar())},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.scrollbarWidth&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right","")},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};c.VERSION="3.2.0",c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(this.options.viewport.selector||this.options.viewport);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var c=a.contains(document.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!c)return;var d=this,e=this.tip(),f=this.getUID(this.type);this.setContent(),e.attr("id",f),this.$element.attr("aria-describedby",f),this.options.animation&&e.addClass("fade");var g="function"==typeof this.options.placement?this.options.placement.call(this,e[0],this.$element[0]):this.options.placement,h=/\s?auto?\s?/i,i=h.test(g);i&&(g=g.replace(h,"")||"top"),e.detach().css({top:0,left:0,display:"block"}).addClass(g).data("bs."+this.type,this),this.options.container?e.appendTo(this.options.container):e.insertAfter(this.$element);var j=this.getPosition(),k=e[0].offsetWidth,l=e[0].offsetHeight;if(i){var m=g,n=this.$element.parent(),o=this.getPosition(n);g="bottom"==g&&j.top+j.height+l-o.scroll>o.height?"top":"top"==g&&j.top-o.scroll-l<0?"bottom":"right"==g&&j.right+k>o.width?"left":"left"==g&&j.left-k<o.left?"right":g,e.removeClass(m).addClass(g)}var p=this.getCalculatedOffset(g,j,k,l);this.applyPlacement(p,g);var q=function(){d.$element.trigger("shown.bs."+d.type),d.hoverState=null};a.support.transition&&this.$tip.hasClass("fade")?e.one("bsTransitionEnd",q).emulateTransitionEnd(150):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top=b.top+g,b.left=b.left+h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=k.left?2*k.left-e+i:2*k.top-f+j,m=k.left?"left":"top",n=k.left?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(l,d[0][n],m)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c,a?50*(1-a/b)+"%":"")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(){function b(){"in"!=c.hoverState&&d.detach(),c.$element.trigger("hidden.bs."+c.type)}var c=this,d=this.tip(),e=a.Event("hide.bs."+this.type);return this.$element.removeAttr("aria-describedby"),this.$element.trigger(e),e.isDefaultPrevented()?void 0:(d.removeClass("in"),a.support.transition&&this.$tip.hasClass("fade")?d.one("bsTransitionEnd",b).emulateTransitionEnd(150):b(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName;return a.extend({},"function"==typeof c.getBoundingClientRect?c.getBoundingClientRect():null,{scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop(),width:d?a(window).width():b.outerWidth(),height:d?a(window).height():b.outerHeight()},d?{top:0,left:0}:b.offset())},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.width&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){return this.$tip=this.$tip||a(this.options.template)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.validate=function(){this.$element[0].parentNode||(this.hide(),this.$element=null,this.options=null)},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){clearTimeout(this.timeout),this.hide().$element.off("."+this.type).removeData("bs."+this.type)};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||"destroy"!=b)&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.2.0",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").empty()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},c.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){var e=a.proxy(this.process,this);this.$body=a("body"),this.$scrollElement=a(a(c).is("body")?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",e),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.2.0",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b="offset",c=0;a.isWindow(this.$scrollElement[0])||(b="position",c=this.$scrollElement.scrollTop()),this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight();var d=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+c,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){d.offsets.push(this[0]),d.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.2.0",c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.closest("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},c.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one("bsTransitionEnd",e).emulateTransitionEnd(150):e(),f.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(c){c.preventDefault(),b.call(a(this),"show")})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.2.0",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=a(document).height(),d=this.$target.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=b-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){null!=this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:b-this.$element.height()-h}))}}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},d.offsetBottom&&(d.offset.bottom=d.offsetBottom),d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery);</script>
466 <script>(function() {
467 'use strict';
468
469 /**
470 * Extend an Object with another Object's properties.
471 *
472 * The source objects are specified as additional arguments.
473 *
474 * @param dst Object the object to extend.
475 *
476 * @return Object the final object.
477 */
478 var _extend = function(dst) {
479 var sources = Array.prototype.slice.call(arguments, 1);
480 for (var i=0; i<sources.length; ++i) {
481 var src = sources[i];
482 for (var p in src) {
483 if (src.hasOwnProperty(p)) dst[p] = src[p];
484 }
485 }
486 return dst;
487 };
488
489
490 /**
491 * Defer execution of given function.
492 * @param {Function} func
493 */
494 var _defer = function(func) {
495 if (typeof setImmediate === 'function') {
496 return setImmediate(func);
497 } else {
498 return setTimeout(func, 0);
499 }
500 };
501
502 /**
503 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
504 */
505 var Levenshtein = {
506 /**
507 * Calculate levenshtein distance of the two strings.
508 *
509 * @param str1 String the first string.
510 * @param str2 String the second string.
511 * @return Integer the levenshtein distance (0 and above).
512 */
513 get: function(str1, str2) {
514 // base cases
515 if (str1 === str2) return 0;
516 if (str1.length === 0) return str2.length;
517 if (str2.length === 0) return str1.length;
518
519 // two rows
520 var prevRow = new Array(str2.length + 1),
521 curCol, nextCol, i, j, tmp;
522
523 // initialise previous row
524 for (i=0; i<prevRow.length; ++i) {
525 prevRow[i] = i;
526 }
527
528 // calculate current row distance from previous row
529 for (i=0; i<str1.length; ++i) {
530 nextCol = i + 1;
531
532 for (j=0; j<str2.length; ++j) {
533 curCol = nextCol;
534
535 // substution
536 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
537 // insertion
538 tmp = curCol + 1;
539 if (nextCol > tmp) {
540 nextCol = tmp;
541 }
542 // deletion
543 tmp = prevRow[j + 1] + 1;
544 if (nextCol > tmp) {
545 nextCol = tmp;
546 }
547
548 // copy current col value into previous (in preparation for next iteration)
549 prevRow[j] = curCol;
550 }
551
552 // copy last col value into previous (in preparation for next iteration)
553 prevRow[j] = nextCol;
554 }
555
556 return nextCol;
557 },
558
559 /**
560 * Asynchronously calculate levenshtein distance of the two strings.
561 *
562 * @param str1 String the first string.
563 * @param str2 String the second string.
564 * @param cb Function callback function with signature: function(Error err, int distance)
565 * @param [options] Object additional options.
566 * @param [options.progress] Function progress callback with signature: function(percentComplete)
567 */
568 getAsync: function(str1, str2, cb, options) {
569 options = _extend({}, {
570 progress: null
571 }, options);
572
573 // base cases
574 if (str1 === str2) return cb(null, 0);
575 if (str1.length === 0) return cb(null, str2.length);
576 if (str2.length === 0) return cb(null, str1.length);
577
578 // two rows
579 var prevRow = new Array(str2.length + 1),
580 curCol, nextCol,
581 i, j, tmp,
582 startTime, currentTime;
583
584 // initialise previous row
585 for (i=0; i<prevRow.length; ++i) {
586 prevRow[i] = i;
587 }
588
589 nextCol = 1;
590 i = 0;
591 j = -1;
592
593 var __calculate = function() {
594 // reset timer
595 startTime = new Date().valueOf();
596 currentTime = startTime;
597
598 // keep going until one second has elapsed
599 while (currentTime - startTime < 1000) {
600 // reached end of current row?
601 if (str2.length <= (++j)) {
602 // copy current into previous (in preparation for next iteration)
603 prevRow[j] = nextCol;
604
605 // if already done all chars
606 if (str1.length <= (++i)) {
607 return cb(null, nextCol);
608 }
609 // else if we have more left to do
610 else {
611 nextCol = i + 1;
612 j = 0;
613 }
614 }
615
616 // calculation
617 curCol = nextCol;
618
619 // substution
620 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
621 // insertion
622 tmp = curCol + 1;
623 if (nextCol > tmp) {
624 nextCol = tmp;
625 }
626 // deletion
627 tmp = prevRow[j + 1] + 1;
628 if (nextCol > tmp) {
629 nextCol = tmp;
630 }
631
632 // copy current into previous (in preparation for next iteration)
633 prevRow[j] = curCol;
634
635 // get current time
636 currentTime = new Date().valueOf();
637 }
638
639 // send a progress update?
640 if (null !== options.progress) {
641 try {
642 options.progress.call(null, (i * 100.0/ str1.length));
643 } catch (err) {
644 return cb('Progress callback: ' + err.toString());
645 }
646 }
647
648 // next iteration
649 _defer(__calculate);
650 };
651
652 __calculate();
653 }
654
655 };
656
657 // amd
658 if (typeof define !== "undefined" && define !== null && define.amd) {
659 define(function() {
660 return Levenshtein;
661 });
662 }
663 // commonjs
664 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
665 module.exports = Levenshtein;
666 }
667 // web worker
668 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
669 self.Levenshtein = Levenshtein;
670 }
671 // browser main thread
672 else if (typeof window !== "undefined" && window !== null) {
673 window.Levenshtein = Levenshtein;
674 }
675 }());
676
677 </script>
678 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
679 // (public) Constructor
680 function BigInteger(a, b, c) {
681 if (!(this instanceof BigInteger))
682 return new BigInteger(a, b, c)
683
684 if (a != null) {
685 if ("number" == typeof a) this.fromNumber(a, b, c)
686 else if (b == null && "string" != typeof a) this.fromString(a, 256)
687 else this.fromString(a, b)
688 }
689 }
690
691 var proto = BigInteger.prototype
692
693 // duck-typed isBigInteger
694 proto.__bigi = require('../package.json').version
695 BigInteger.isBigInteger = function (obj, check_ver) {
696 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
697 }
698
699 // Bits per digit
700 var dbits
701
702 // am: Compute w_j += (x*this_i), propagate carries,
703 // c is initial carry, returns final carry.
704 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
705 // We need to select the fastest one that works in this environment.
706
707 // am1: use a single mult and divide to get the high bits,
708 // max digit bits should be 26 because
709 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
710 function am1(i, x, w, j, c, n) {
711 while (--n >= 0) {
712 var v = x * this[i++] + w[j] + c
713 c = Math.floor(v / 0x4000000)
714 w[j++] = v & 0x3ffffff
715 }
716 return c
717 }
718 // am2 avoids a big mult-and-extract completely.
719 // Max digit bits should be <= 30 because we do bitwise ops
720 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
721 function am2(i, x, w, j, c, n) {
722 var xl = x & 0x7fff,
723 xh = x >> 15
724 while (--n >= 0) {
725 var l = this[i] & 0x7fff
726 var h = this[i++] >> 15
727 var m = xh * l + h * xl
728 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
729 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
730 w[j++] = l & 0x3fffffff
731 }
732 return c
733 }
734 // Alternately, set max digit bits to 28 since some
735 // browsers slow down when dealing with 32-bit numbers.
736 function am3(i, x, w, j, c, n) {
737 var xl = x & 0x3fff,
738 xh = x >> 14
739 while (--n >= 0) {
740 var l = this[i] & 0x3fff
741 var h = this[i++] >> 14
742 var m = xh * l + h * xl
743 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
744 c = (l >> 28) + (m >> 14) + xh * h
745 w[j++] = l & 0xfffffff
746 }
747 return c
748 }
749
750 // wtf?
751 BigInteger.prototype.am = am1
752 dbits = 26
753
754 BigInteger.prototype.DB = dbits
755 BigInteger.prototype.DM = ((1 << dbits) - 1)
756 var DV = BigInteger.prototype.DV = (1 << dbits)
757
758 var BI_FP = 52
759 BigInteger.prototype.FV = Math.pow(2, BI_FP)
760 BigInteger.prototype.F1 = BI_FP - dbits
761 BigInteger.prototype.F2 = 2 * dbits - BI_FP
762
763 // Digit conversions
764 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
765 var BI_RC = new Array()
766 var rr, vv
767 rr = "0".charCodeAt(0)
768 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
769 rr = "a".charCodeAt(0)
770 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
771 rr = "A".charCodeAt(0)
772 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
773
774 function int2char(n) {
775 return BI_RM.charAt(n)
776 }
777
778 function intAt(s, i) {
779 var c = BI_RC[s.charCodeAt(i)]
780 return (c == null) ? -1 : c
781 }
782
783 // (protected) copy this to r
784 function bnpCopyTo(r) {
785 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
786 r.t = this.t
787 r.s = this.s
788 }
789
790 // (protected) set from integer value x, -DV <= x < DV
791 function bnpFromInt(x) {
792 this.t = 1
793 this.s = (x < 0) ? -1 : 0
794 if (x > 0) this[0] = x
795 else if (x < -1) this[0] = x + DV
796 else this.t = 0
797 }
798
799 // return bigint initialized to value
800 function nbv(i) {
801 var r = new BigInteger()
802 r.fromInt(i)
803 return r
804 }
805
806 // (protected) set from string and radix
807 function bnpFromString(s, b) {
808 var self = this
809
810 var k
811 if (b == 16) k = 4
812 else if (b == 8) k = 3
813 else if (b == 256) k = 8; // byte array
814 else if (b == 2) k = 1
815 else if (b == 32) k = 5
816 else if (b == 4) k = 2
817 else {
818 self.fromRadix(s, b)
819 return
820 }
821 self.t = 0
822 self.s = 0
823 var i = s.length,
824 mi = false,
825 sh = 0
826 while (--i >= 0) {
827 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
828 if (x < 0) {
829 if (s.charAt(i) == "-") mi = true
830 continue
831 }
832 mi = false
833 if (sh == 0)
834 self[self.t++] = x
835 else if (sh + k > self.DB) {
836 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
837 self[self.t++] = (x >> (self.DB - sh))
838 } else
839 self[self.t - 1] |= x << sh
840 sh += k
841 if (sh >= self.DB) sh -= self.DB
842 }
843 if (k == 8 && (s[0] & 0x80) != 0) {
844 self.s = -1
845 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
846 }
847 self.clamp()
848 if (mi) BigInteger.ZERO.subTo(self, self)
849 }
850
851 // (protected) clamp off excess high words
852 function bnpClamp() {
853 var c = this.s & this.DM
854 while (this.t > 0 && this[this.t - 1] == c)--this.t
855 }
856
857 // (public) return string representation in given radix
858 function bnToString(b) {
859 var self = this
860 if (self.s < 0) return "-" + self.negate()
861 .toString(b)
862 var k
863 if (b == 16) k = 4
864 else if (b == 8) k = 3
865 else if (b == 2) k = 1
866 else if (b == 32) k = 5
867 else if (b == 4) k = 2
868 else return self.toRadix(b)
869 var km = (1 << k) - 1,
870 d, m = false,
871 r = "",
872 i = self.t
873 var p = self.DB - (i * self.DB) % k
874 if (i-- > 0) {
875 if (p < self.DB && (d = self[i] >> p) > 0) {
876 m = true
877 r = int2char(d)
878 }
879 while (i >= 0) {
880 if (p < k) {
881 d = (self[i] & ((1 << p) - 1)) << (k - p)
882 d |= self[--i] >> (p += self.DB - k)
883 } else {
884 d = (self[i] >> (p -= k)) & km
885 if (p <= 0) {
886 p += self.DB
887 --i
888 }
889 }
890 if (d > 0) m = true
891 if (m) r += int2char(d)
892 }
893 }
894 return m ? r : "0"
895 }
896
897 // (public) -this
898 function bnNegate() {
899 var r = new BigInteger()
900 BigInteger.ZERO.subTo(this, r)
901 return r
902 }
903
904 // (public) |this|
905 function bnAbs() {
906 return (this.s < 0) ? this.negate() : this
907 }
908
909 // (public) return + if this > a, - if this < a, 0 if equal
910 function bnCompareTo(a) {
911 var r = this.s - a.s
912 if (r != 0) return r
913 var i = this.t
914 r = i - a.t
915 if (r != 0) return (this.s < 0) ? -r : r
916 while (--i >= 0)
917 if ((r = this[i] - a[i]) != 0) return r
918 return 0
919 }
920
921 // returns bit length of the integer x
922 function nbits(x) {
923 var r = 1,
924 t
925 if ((t = x >>> 16) != 0) {
926 x = t
927 r += 16
928 }
929 if ((t = x >> 8) != 0) {
930 x = t
931 r += 8
932 }
933 if ((t = x >> 4) != 0) {
934 x = t
935 r += 4
936 }
937 if ((t = x >> 2) != 0) {
938 x = t
939 r += 2
940 }
941 if ((t = x >> 1) != 0) {
942 x = t
943 r += 1
944 }
945 return r
946 }
947
948 // (public) return the number of bits in "this"
949 function bnBitLength() {
950 if (this.t <= 0) return 0
951 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
952 }
953
954 // (public) return the number of bytes in "this"
955 function bnByteLength() {
956 return this.bitLength() >> 3
957 }
958
959 // (protected) r = this << n*DB
960 function bnpDLShiftTo(n, r) {
961 var i
962 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
963 for (i = n - 1; i >= 0; --i) r[i] = 0
964 r.t = this.t + n
965 r.s = this.s
966 }
967
968 // (protected) r = this >> n*DB
969 function bnpDRShiftTo(n, r) {
970 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
971 r.t = Math.max(this.t - n, 0)
972 r.s = this.s
973 }
974
975 // (protected) r = this << n
976 function bnpLShiftTo(n, r) {
977 var self = this
978 var bs = n % self.DB
979 var cbs = self.DB - bs
980 var bm = (1 << cbs) - 1
981 var ds = Math.floor(n / self.DB),
982 c = (self.s << bs) & self.DM,
983 i
984 for (i = self.t - 1; i >= 0; --i) {
985 r[i + ds + 1] = (self[i] >> cbs) | c
986 c = (self[i] & bm) << bs
987 }
988 for (i = ds - 1; i >= 0; --i) r[i] = 0
989 r[ds] = c
990 r.t = self.t + ds + 1
991 r.s = self.s
992 r.clamp()
993 }
994
995 // (protected) r = this >> n
996 function bnpRShiftTo(n, r) {
997 var self = this
998 r.s = self.s
999 var ds = Math.floor(n / self.DB)
1000 if (ds >= self.t) {
1001 r.t = 0
1002 return
1003 }
1004 var bs = n % self.DB
1005 var cbs = self.DB - bs
1006 var bm = (1 << bs) - 1
1007 r[0] = self[ds] >> bs
1008 for (var i = ds + 1; i < self.t; ++i) {
1009 r[i - ds - 1] |= (self[i] & bm) << cbs
1010 r[i - ds] = self[i] >> bs
1011 }
1012 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
1013 r.t = self.t - ds
1014 r.clamp()
1015 }
1016
1017 // (protected) r = this - a
1018 function bnpSubTo(a, r) {
1019 var self = this
1020 var i = 0,
1021 c = 0,
1022 m = Math.min(a.t, self.t)
1023 while (i < m) {
1024 c += self[i] - a[i]
1025 r[i++] = c & self.DM
1026 c >>= self.DB
1027 }
1028 if (a.t < self.t) {
1029 c -= a.s
1030 while (i < self.t) {
1031 c += self[i]
1032 r[i++] = c & self.DM
1033 c >>= self.DB
1034 }
1035 c += self.s
1036 } else {
1037 c += self.s
1038 while (i < a.t) {
1039 c -= a[i]
1040 r[i++] = c & self.DM
1041 c >>= self.DB
1042 }
1043 c -= a.s
1044 }
1045 r.s = (c < 0) ? -1 : 0
1046 if (c < -1) r[i++] = self.DV + c
1047 else if (c > 0) r[i++] = c
1048 r.t = i
1049 r.clamp()
1050 }
1051
1052 // (protected) r = this * a, r != this,a (HAC 14.12)
1053 // "this" should be the larger one if appropriate.
1054 function bnpMultiplyTo(a, r) {
1055 var x = this.abs(),
1056 y = a.abs()
1057 var i = x.t
1058 r.t = i + y.t
1059 while (--i >= 0) r[i] = 0
1060 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1061 r.s = 0
1062 r.clamp()
1063 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1064 }
1065
1066 // (protected) r = this^2, r != this (HAC 14.16)
1067 function bnpSquareTo(r) {
1068 var x = this.abs()
1069 var i = r.t = 2 * x.t
1070 while (--i >= 0) r[i] = 0
1071 for (i = 0; i < x.t - 1; ++i) {
1072 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1073 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1074 r[i + x.t] -= x.DV
1075 r[i + x.t + 1] = 1
1076 }
1077 }
1078 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1079 r.s = 0
1080 r.clamp()
1081 }
1082
1083 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1084 // r != q, this != m. q or r may be null.
1085 function bnpDivRemTo(m, q, r) {
1086 var self = this
1087 var pm = m.abs()
1088 if (pm.t <= 0) return
1089 var pt = self.abs()
1090 if (pt.t < pm.t) {
1091 if (q != null) q.fromInt(0)
1092 if (r != null) self.copyTo(r)
1093 return
1094 }
1095 if (r == null) r = new BigInteger()
1096 var y = new BigInteger(),
1097 ts = self.s,
1098 ms = m.s
1099 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1100 if (nsh > 0) {
1101 pm.lShiftTo(nsh, y)
1102 pt.lShiftTo(nsh, r)
1103 } else {
1104 pm.copyTo(y)
1105 pt.copyTo(r)
1106 }
1107 var ys = y.t
1108 var y0 = y[ys - 1]
1109 if (y0 == 0) return
1110 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1111 var d1 = self.FV / yt,
1112 d2 = (1 << self.F1) / yt,
1113 e = 1 << self.F2
1114 var i = r.t,
1115 j = i - ys,
1116 t = (q == null) ? new BigInteger() : q
1117 y.dlShiftTo(j, t)
1118 if (r.compareTo(t) >= 0) {
1119 r[r.t++] = 1
1120 r.subTo(t, r)
1121 }
1122 BigInteger.ONE.dlShiftTo(ys, t)
1123 t.subTo(y, y); // "negative" y so we can replace sub with am later
1124 while (y.t < ys) y[y.t++] = 0
1125 while (--j >= 0) {
1126 // Estimate quotient digit
1127 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1128 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1129 y.dlShiftTo(j, t)
1130 r.subTo(t, r)
1131 while (r[i] < --qd) r.subTo(t, r)
1132 }
1133 }
1134 if (q != null) {
1135 r.drShiftTo(ys, q)
1136 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1137 }
1138 r.t = ys
1139 r.clamp()
1140 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1141 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1142 }
1143
1144 // (public) this mod a
1145 function bnMod(a) {
1146 var r = new BigInteger()
1147 this.abs()
1148 .divRemTo(a, null, r)
1149 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1150 return r
1151 }
1152
1153 // Modular reduction using "classic" algorithm
1154 function Classic(m) {
1155 this.m = m
1156 }
1157
1158 function cConvert(x) {
1159 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1160 else return x
1161 }
1162
1163 function cRevert(x) {
1164 return x
1165 }
1166
1167 function cReduce(x) {
1168 x.divRemTo(this.m, null, x)
1169 }
1170
1171 function cMulTo(x, y, r) {
1172 x.multiplyTo(y, r)
1173 this.reduce(r)
1174 }
1175
1176 function cSqrTo(x, r) {
1177 x.squareTo(r)
1178 this.reduce(r)
1179 }
1180
1181 Classic.prototype.convert = cConvert
1182 Classic.prototype.revert = cRevert
1183 Classic.prototype.reduce = cReduce
1184 Classic.prototype.mulTo = cMulTo
1185 Classic.prototype.sqrTo = cSqrTo
1186
1187 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1188 // justification:
1189 // xy == 1 (mod m)
1190 // xy = 1+km
1191 // xy(2-xy) = (1+km)(1-km)
1192 // x[y(2-xy)] = 1-k^2m^2
1193 // x[y(2-xy)] == 1 (mod m^2)
1194 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1195 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1196 // JS multiply "overflows" differently from C/C++, so care is needed here.
1197 function bnpInvDigit() {
1198 if (this.t < 1) return 0
1199 var x = this[0]
1200 if ((x & 1) == 0) return 0
1201 var y = x & 3; // y == 1/x mod 2^2
1202 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1203 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1204 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1205 // last step - calculate inverse mod DV directly
1206 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1207 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1208 // we really want the negative inverse, and -DV < y < DV
1209 return (y > 0) ? this.DV - y : -y
1210 }
1211
1212 // Montgomery reduction
1213 function Montgomery(m) {
1214 this.m = m
1215 this.mp = m.invDigit()
1216 this.mpl = this.mp & 0x7fff
1217 this.mph = this.mp >> 15
1218 this.um = (1 << (m.DB - 15)) - 1
1219 this.mt2 = 2 * m.t
1220 }
1221
1222 // xR mod m
1223 function montConvert(x) {
1224 var r = new BigInteger()
1225 x.abs()
1226 .dlShiftTo(this.m.t, r)
1227 r.divRemTo(this.m, null, r)
1228 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1229 return r
1230 }
1231
1232 // x/R mod m
1233 function montRevert(x) {
1234 var r = new BigInteger()
1235 x.copyTo(r)
1236 this.reduce(r)
1237 return r
1238 }
1239
1240 // x = x/R mod m (HAC 14.32)
1241 function montReduce(x) {
1242 while (x.t <= this.mt2) // pad x so am has enough room later
1243 x[x.t++] = 0
1244 for (var i = 0; i < this.m.t; ++i) {
1245 // faster way of calculating u0 = x[i]*mp mod DV
1246 var j = x[i] & 0x7fff
1247 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1248 // use am to combine the multiply-shift-add into one call
1249 j = i + this.m.t
1250 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1251 // propagate carry
1252 while (x[j] >= x.DV) {
1253 x[j] -= x.DV
1254 x[++j]++
1255 }
1256 }
1257 x.clamp()
1258 x.drShiftTo(this.m.t, x)
1259 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1260 }
1261
1262 // r = "x^2/R mod m"; x != r
1263 function montSqrTo(x, r) {
1264 x.squareTo(r)
1265 this.reduce(r)
1266 }
1267
1268 // r = "xy/R mod m"; x,y != r
1269 function montMulTo(x, y, r) {
1270 x.multiplyTo(y, r)
1271 this.reduce(r)
1272 }
1273
1274 Montgomery.prototype.convert = montConvert
1275 Montgomery.prototype.revert = montRevert
1276 Montgomery.prototype.reduce = montReduce
1277 Montgomery.prototype.mulTo = montMulTo
1278 Montgomery.prototype.sqrTo = montSqrTo
1279
1280 // (protected) true iff this is even
1281 function bnpIsEven() {
1282 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1283 }
1284
1285 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1286 function bnpExp(e, z) {
1287 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1288 var r = new BigInteger(),
1289 r2 = new BigInteger(),
1290 g = z.convert(this),
1291 i = nbits(e) - 1
1292 g.copyTo(r)
1293 while (--i >= 0) {
1294 z.sqrTo(r, r2)
1295 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1296 else {
1297 var t = r
1298 r = r2
1299 r2 = t
1300 }
1301 }
1302 return z.revert(r)
1303 }
1304
1305 // (public) this^e % m, 0 <= e < 2^32
1306 function bnModPowInt(e, m) {
1307 var z
1308 if (e < 256 || m.isEven()) z = new Classic(m)
1309 else z = new Montgomery(m)
1310 return this.exp(e, z)
1311 }
1312
1313 // protected
1314 proto.copyTo = bnpCopyTo
1315 proto.fromInt = bnpFromInt
1316 proto.fromString = bnpFromString
1317 proto.clamp = bnpClamp
1318 proto.dlShiftTo = bnpDLShiftTo
1319 proto.drShiftTo = bnpDRShiftTo
1320 proto.lShiftTo = bnpLShiftTo
1321 proto.rShiftTo = bnpRShiftTo
1322 proto.subTo = bnpSubTo
1323 proto.multiplyTo = bnpMultiplyTo
1324 proto.squareTo = bnpSquareTo
1325 proto.divRemTo = bnpDivRemTo
1326 proto.invDigit = bnpInvDigit
1327 proto.isEven = bnpIsEven
1328 proto.exp = bnpExp
1329
1330 // public
1331 proto.toString = bnToString
1332 proto.negate = bnNegate
1333 proto.abs = bnAbs
1334 proto.compareTo = bnCompareTo
1335 proto.bitLength = bnBitLength
1336 proto.byteLength = bnByteLength
1337 proto.mod = bnMod
1338 proto.modPowInt = bnModPowInt
1339
1340 // (public)
1341 function bnClone() {
1342 var r = new BigInteger()
1343 this.copyTo(r)
1344 return r
1345 }
1346
1347 // (public) return value as integer
1348 function bnIntValue() {
1349 if (this.s < 0) {
1350 if (this.t == 1) return this[0] - this.DV
1351 else if (this.t == 0) return -1
1352 } else if (this.t == 1) return this[0]
1353 else if (this.t == 0) return 0
1354 // assumes 16 < DB < 32
1355 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1356 }
1357
1358 // (public) return value as byte
1359 function bnByteValue() {
1360 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1361 }
1362
1363 // (public) return value as short (assumes DB>=16)
1364 function bnShortValue() {
1365 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1366 }
1367
1368 // (protected) return x s.t. r^x < DV
1369 function bnpChunkSize(r) {
1370 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1371 }
1372
1373 // (public) 0 if this == 0, 1 if this > 0
1374 function bnSigNum() {
1375 if (this.s < 0) return -1
1376 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1377 else return 1
1378 }
1379
1380 // (protected) convert to radix string
1381 function bnpToRadix(b) {
1382 if (b == null) b = 10
1383 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1384 var cs = this.chunkSize(b)
1385 var a = Math.pow(b, cs)
1386 var d = nbv(a),
1387 y = new BigInteger(),
1388 z = new BigInteger(),
1389 r = ""
1390 this.divRemTo(d, y, z)
1391 while (y.signum() > 0) {
1392 r = (a + z.intValue())
1393 .toString(b)
1394 .substr(1) + r
1395 y.divRemTo(d, y, z)
1396 }
1397 return z.intValue()
1398 .toString(b) + r
1399 }
1400
1401 // (protected) convert from radix string
1402 function bnpFromRadix(s, b) {
1403 var self = this
1404 self.fromInt(0)
1405 if (b == null) b = 10
1406 var cs = self.chunkSize(b)
1407 var d = Math.pow(b, cs),
1408 mi = false,
1409 j = 0,
1410 w = 0
1411 for (var i = 0; i < s.length; ++i) {
1412 var x = intAt(s, i)
1413 if (x < 0) {
1414 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1415 continue
1416 }
1417 w = b * w + x
1418 if (++j >= cs) {
1419 self.dMultiply(d)
1420 self.dAddOffset(w, 0)
1421 j = 0
1422 w = 0
1423 }
1424 }
1425 if (j > 0) {
1426 self.dMultiply(Math.pow(b, j))
1427 self.dAddOffset(w, 0)
1428 }
1429 if (mi) BigInteger.ZERO.subTo(self, self)
1430 }
1431
1432 // (protected) alternate constructor
1433 function bnpFromNumber(a, b, c) {
1434 var self = this
1435 if ("number" == typeof b) {
1436 // new BigInteger(int,int,RNG)
1437 if (a < 2) self.fromInt(1)
1438 else {
1439 self.fromNumber(a, c)
1440 if (!self.testBit(a - 1)) // force MSB set
1441 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1442 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1443 while (!self.isProbablePrime(b)) {
1444 self.dAddOffset(2, 0)
1445 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1446 }
1447 }
1448 } else {
1449 // new BigInteger(int,RNG)
1450 var x = new Array(),
1451 t = a & 7
1452 x.length = (a >> 3) + 1
1453 b.nextBytes(x)
1454 if (t > 0) x[0] &= ((1 << t) - 1)
1455 else x[0] = 0
1456 self.fromString(x, 256)
1457 }
1458 }
1459
1460 // (public) convert to bigendian byte array
1461 function bnToByteArray() {
1462 var self = this
1463 var i = self.t,
1464 r = new Array()
1465 r[0] = self.s
1466 var p = self.DB - (i * self.DB) % 8,
1467 d, k = 0
1468 if (i-- > 0) {
1469 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1470 r[k++] = d | (self.s << (self.DB - p))
1471 while (i >= 0) {
1472 if (p < 8) {
1473 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1474 d |= self[--i] >> (p += self.DB - 8)
1475 } else {
1476 d = (self[i] >> (p -= 8)) & 0xff
1477 if (p <= 0) {
1478 p += self.DB
1479 --i
1480 }
1481 }
1482 if ((d & 0x80) != 0) d |= -256
1483 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1484 if (k > 0 || d != self.s) r[k++] = d
1485 }
1486 }
1487 return r
1488 }
1489
1490 function bnEquals(a) {
1491 return (this.compareTo(a) == 0)
1492 }
1493
1494 function bnMin(a) {
1495 return (this.compareTo(a) < 0) ? this : a
1496 }
1497
1498 function bnMax(a) {
1499 return (this.compareTo(a) > 0) ? this : a
1500 }
1501
1502 // (protected) r = this op a (bitwise)
1503 function bnpBitwiseTo(a, op, r) {
1504 var self = this
1505 var i, f, m = Math.min(a.t, self.t)
1506 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1507 if (a.t < self.t) {
1508 f = a.s & self.DM
1509 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1510 r.t = self.t
1511 } else {
1512 f = self.s & self.DM
1513 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1514 r.t = a.t
1515 }
1516 r.s = op(self.s, a.s)
1517 r.clamp()
1518 }
1519
1520 // (public) this & a
1521 function op_and(x, y) {
1522 return x & y
1523 }
1524
1525 function bnAnd(a) {
1526 var r = new BigInteger()
1527 this.bitwiseTo(a, op_and, r)
1528 return r
1529 }
1530
1531 // (public) this | a
1532 function op_or(x, y) {
1533 return x | y
1534 }
1535
1536 function bnOr(a) {
1537 var r = new BigInteger()
1538 this.bitwiseTo(a, op_or, r)
1539 return r
1540 }
1541
1542 // (public) this ^ a
1543 function op_xor(x, y) {
1544 return x ^ y
1545 }
1546
1547 function bnXor(a) {
1548 var r = new BigInteger()
1549 this.bitwiseTo(a, op_xor, r)
1550 return r
1551 }
1552
1553 // (public) this & ~a
1554 function op_andnot(x, y) {
1555 return x & ~y
1556 }
1557
1558 function bnAndNot(a) {
1559 var r = new BigInteger()
1560 this.bitwiseTo(a, op_andnot, r)
1561 return r
1562 }
1563
1564 // (public) ~this
1565 function bnNot() {
1566 var r = new BigInteger()
1567 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1568 r.t = this.t
1569 r.s = ~this.s
1570 return r
1571 }
1572
1573 // (public) this << n
1574 function bnShiftLeft(n) {
1575 var r = new BigInteger()
1576 if (n < 0) this.rShiftTo(-n, r)
1577 else this.lShiftTo(n, r)
1578 return r
1579 }
1580
1581 // (public) this >> n
1582 function bnShiftRight(n) {
1583 var r = new BigInteger()
1584 if (n < 0) this.lShiftTo(-n, r)
1585 else this.rShiftTo(n, r)
1586 return r
1587 }
1588
1589 // return index of lowest 1-bit in x, x < 2^31
1590 function lbit(x) {
1591 if (x == 0) return -1
1592 var r = 0
1593 if ((x & 0xffff) == 0) {
1594 x >>= 16
1595 r += 16
1596 }
1597 if ((x & 0xff) == 0) {
1598 x >>= 8
1599 r += 8
1600 }
1601 if ((x & 0xf) == 0) {
1602 x >>= 4
1603 r += 4
1604 }
1605 if ((x & 3) == 0) {
1606 x >>= 2
1607 r += 2
1608 }
1609 if ((x & 1) == 0)++r
1610 return r
1611 }
1612
1613 // (public) returns index of lowest 1-bit (or -1 if none)
1614 function bnGetLowestSetBit() {
1615 for (var i = 0; i < this.t; ++i)
1616 if (this[i] != 0) return i * this.DB + lbit(this[i])
1617 if (this.s < 0) return this.t * this.DB
1618 return -1
1619 }
1620
1621 // return number of 1 bits in x
1622 function cbit(x) {
1623 var r = 0
1624 while (x != 0) {
1625 x &= x - 1
1626 ++r
1627 }
1628 return r
1629 }
1630
1631 // (public) return number of set bits
1632 function bnBitCount() {
1633 var r = 0,
1634 x = this.s & this.DM
1635 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1636 return r
1637 }
1638
1639 // (public) true iff nth bit is set
1640 function bnTestBit(n) {
1641 var j = Math.floor(n / this.DB)
1642 if (j >= this.t) return (this.s != 0)
1643 return ((this[j] & (1 << (n % this.DB))) != 0)
1644 }
1645
1646 // (protected) this op (1<<n)
1647 function bnpChangeBit(n, op) {
1648 var r = BigInteger.ONE.shiftLeft(n)
1649 this.bitwiseTo(r, op, r)
1650 return r
1651 }
1652
1653 // (public) this | (1<<n)
1654 function bnSetBit(n) {
1655 return this.changeBit(n, op_or)
1656 }
1657
1658 // (public) this & ~(1<<n)
1659 function bnClearBit(n) {
1660 return this.changeBit(n, op_andnot)
1661 }
1662
1663 // (public) this ^ (1<<n)
1664 function bnFlipBit(n) {
1665 return this.changeBit(n, op_xor)
1666 }
1667
1668 // (protected) r = this + a
1669 function bnpAddTo(a, r) {
1670 var self = this
1671
1672 var i = 0,
1673 c = 0,
1674 m = Math.min(a.t, self.t)
1675 while (i < m) {
1676 c += self[i] + a[i]
1677 r[i++] = c & self.DM
1678 c >>= self.DB
1679 }
1680 if (a.t < self.t) {
1681 c += a.s
1682 while (i < self.t) {
1683 c += self[i]
1684 r[i++] = c & self.DM
1685 c >>= self.DB
1686 }
1687 c += self.s
1688 } else {
1689 c += self.s
1690 while (i < a.t) {
1691 c += a[i]
1692 r[i++] = c & self.DM
1693 c >>= self.DB
1694 }
1695 c += a.s
1696 }
1697 r.s = (c < 0) ? -1 : 0
1698 if (c > 0) r[i++] = c
1699 else if (c < -1) r[i++] = self.DV + c
1700 r.t = i
1701 r.clamp()
1702 }
1703
1704 // (public) this + a
1705 function bnAdd(a) {
1706 var r = new BigInteger()
1707 this.addTo(a, r)
1708 return r
1709 }
1710
1711 // (public) this - a
1712 function bnSubtract(a) {
1713 var r = new BigInteger()
1714 this.subTo(a, r)
1715 return r
1716 }
1717
1718 // (public) this * a
1719 function bnMultiply(a) {
1720 var r = new BigInteger()
1721 this.multiplyTo(a, r)
1722 return r
1723 }
1724
1725 // (public) this^2
1726 function bnSquare() {
1727 var r = new BigInteger()
1728 this.squareTo(r)
1729 return r
1730 }
1731
1732 // (public) this / a
1733 function bnDivide(a) {
1734 var r = new BigInteger()
1735 this.divRemTo(a, r, null)
1736 return r
1737 }
1738
1739 // (public) this % a
1740 function bnRemainder(a) {
1741 var r = new BigInteger()
1742 this.divRemTo(a, null, r)
1743 return r
1744 }
1745
1746 // (public) [this/a,this%a]
1747 function bnDivideAndRemainder(a) {
1748 var q = new BigInteger(),
1749 r = new BigInteger()
1750 this.divRemTo(a, q, r)
1751 return new Array(q, r)
1752 }
1753
1754 // (protected) this *= n, this >= 0, 1 < n < DV
1755 function bnpDMultiply(n) {
1756 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1757 ++this.t
1758 this.clamp()
1759 }
1760
1761 // (protected) this += n << w words, this >= 0
1762 function bnpDAddOffset(n, w) {
1763 if (n == 0) return
1764 while (this.t <= w) this[this.t++] = 0
1765 this[w] += n
1766 while (this[w] >= this.DV) {
1767 this[w] -= this.DV
1768 if (++w >= this.t) this[this.t++] = 0
1769 ++this[w]
1770 }
1771 }
1772
1773 // A "null" reducer
1774 function NullExp() {}
1775
1776 function nNop(x) {
1777 return x
1778 }
1779
1780 function nMulTo(x, y, r) {
1781 x.multiplyTo(y, r)
1782 }
1783
1784 function nSqrTo(x, r) {
1785 x.squareTo(r)
1786 }
1787
1788 NullExp.prototype.convert = nNop
1789 NullExp.prototype.revert = nNop
1790 NullExp.prototype.mulTo = nMulTo
1791 NullExp.prototype.sqrTo = nSqrTo
1792
1793 // (public) this^e
1794 function bnPow(e) {
1795 return this.exp(e, new NullExp())
1796 }
1797
1798 // (protected) r = lower n words of "this * a", a.t <= n
1799 // "this" should be the larger one if appropriate.
1800 function bnpMultiplyLowerTo(a, n, r) {
1801 var i = Math.min(this.t + a.t, n)
1802 r.s = 0; // assumes a,this >= 0
1803 r.t = i
1804 while (i > 0) r[--i] = 0
1805 var j
1806 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1807 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1808 r.clamp()
1809 }
1810
1811 // (protected) r = "this * a" without lower n words, n > 0
1812 // "this" should be the larger one if appropriate.
1813 function bnpMultiplyUpperTo(a, n, r) {
1814 --n
1815 var i = r.t = this.t + a.t - n
1816 r.s = 0; // assumes a,this >= 0
1817 while (--i >= 0) r[i] = 0
1818 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1819 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1820 r.clamp()
1821 r.drShiftTo(1, r)
1822 }
1823
1824 // Barrett modular reduction
1825 function Barrett(m) {
1826 // setup Barrett
1827 this.r2 = new BigInteger()
1828 this.q3 = new BigInteger()
1829 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1830 this.mu = this.r2.divide(m)
1831 this.m = m
1832 }
1833
1834 function barrettConvert(x) {
1835 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1836 else if (x.compareTo(this.m) < 0) return x
1837 else {
1838 var r = new BigInteger()
1839 x.copyTo(r)
1840 this.reduce(r)
1841 return r
1842 }
1843 }
1844
1845 function barrettRevert(x) {
1846 return x
1847 }
1848
1849 // x = x mod m (HAC 14.42)
1850 function barrettReduce(x) {
1851 var self = this
1852 x.drShiftTo(self.m.t - 1, self.r2)
1853 if (x.t > self.m.t + 1) {
1854 x.t = self.m.t + 1
1855 x.clamp()
1856 }
1857 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1858 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1859 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1860 x.subTo(self.r2, x)
1861 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1862 }
1863
1864 // r = x^2 mod m; x != r
1865 function barrettSqrTo(x, r) {
1866 x.squareTo(r)
1867 this.reduce(r)
1868 }
1869
1870 // r = x*y mod m; x,y != r
1871 function barrettMulTo(x, y, r) {
1872 x.multiplyTo(y, r)
1873 this.reduce(r)
1874 }
1875
1876 Barrett.prototype.convert = barrettConvert
1877 Barrett.prototype.revert = barrettRevert
1878 Barrett.prototype.reduce = barrettReduce
1879 Barrett.prototype.mulTo = barrettMulTo
1880 Barrett.prototype.sqrTo = barrettSqrTo
1881
1882 // (public) this^e % m (HAC 14.85)
1883 function bnModPow(e, m) {
1884 var i = e.bitLength(),
1885 k, r = nbv(1),
1886 z
1887 if (i <= 0) return r
1888 else if (i < 18) k = 1
1889 else if (i < 48) k = 3
1890 else if (i < 144) k = 4
1891 else if (i < 768) k = 5
1892 else k = 6
1893 if (i < 8)
1894 z = new Classic(m)
1895 else if (m.isEven())
1896 z = new Barrett(m)
1897 else
1898 z = new Montgomery(m)
1899
1900 // precomputation
1901 var g = new Array(),
1902 n = 3,
1903 k1 = k - 1,
1904 km = (1 << k) - 1
1905 g[1] = z.convert(this)
1906 if (k > 1) {
1907 var g2 = new BigInteger()
1908 z.sqrTo(g[1], g2)
1909 while (n <= km) {
1910 g[n] = new BigInteger()
1911 z.mulTo(g2, g[n - 2], g[n])
1912 n += 2
1913 }
1914 }
1915
1916 var j = e.t - 1,
1917 w, is1 = true,
1918 r2 = new BigInteger(),
1919 t
1920 i = nbits(e[j]) - 1
1921 while (j >= 0) {
1922 if (i >= k1) w = (e[j] >> (i - k1)) & km
1923 else {
1924 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1925 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1926 }
1927
1928 n = k
1929 while ((w & 1) == 0) {
1930 w >>= 1
1931 --n
1932 }
1933 if ((i -= n) < 0) {
1934 i += this.DB
1935 --j
1936 }
1937 if (is1) { // ret == 1, don't bother squaring or multiplying it
1938 g[w].copyTo(r)
1939 is1 = false
1940 } else {
1941 while (n > 1) {
1942 z.sqrTo(r, r2)
1943 z.sqrTo(r2, r)
1944 n -= 2
1945 }
1946 if (n > 0) z.sqrTo(r, r2)
1947 else {
1948 t = r
1949 r = r2
1950 r2 = t
1951 }
1952 z.mulTo(r2, g[w], r)
1953 }
1954
1955 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1956 z.sqrTo(r, r2)
1957 t = r
1958 r = r2
1959 r2 = t
1960 if (--i < 0) {
1961 i = this.DB - 1
1962 --j
1963 }
1964 }
1965 }
1966 return z.revert(r)
1967 }
1968
1969 // (public) gcd(this,a) (HAC 14.54)
1970 function bnGCD(a) {
1971 var x = (this.s < 0) ? this.negate() : this.clone()
1972 var y = (a.s < 0) ? a.negate() : a.clone()
1973 if (x.compareTo(y) < 0) {
1974 var t = x
1975 x = y
1976 y = t
1977 }
1978 var i = x.getLowestSetBit(),
1979 g = y.getLowestSetBit()
1980 if (g < 0) return x
1981 if (i < g) g = i
1982 if (g > 0) {
1983 x.rShiftTo(g, x)
1984 y.rShiftTo(g, y)
1985 }
1986 while (x.signum() > 0) {
1987 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1988 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1989 if (x.compareTo(y) >= 0) {
1990 x.subTo(y, x)
1991 x.rShiftTo(1, x)
1992 } else {
1993 y.subTo(x, y)
1994 y.rShiftTo(1, y)
1995 }
1996 }
1997 if (g > 0) y.lShiftTo(g, y)
1998 return y
1999 }
2000
2001 // (protected) this % n, n < 2^26
2002 function bnpModInt(n) {
2003 if (n <= 0) return 0
2004 var d = this.DV % n,
2005 r = (this.s < 0) ? n - 1 : 0
2006 if (this.t > 0)
2007 if (d == 0) r = this[0] % n
2008 else
2009 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
2010 return r
2011 }
2012
2013 // (public) 1/this % m (HAC 14.61)
2014 function bnModInverse(m) {
2015 var ac = m.isEven()
2016 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
2017 var u = m.clone(),
2018 v = this.clone()
2019 var a = nbv(1),
2020 b = nbv(0),
2021 c = nbv(0),
2022 d = nbv(1)
2023 while (u.signum() != 0) {
2024 while (u.isEven()) {
2025 u.rShiftTo(1, u)
2026 if (ac) {
2027 if (!a.isEven() || !b.isEven()) {
2028 a.addTo(this, a)
2029 b.subTo(m, b)
2030 }
2031 a.rShiftTo(1, a)
2032 } else if (!b.isEven()) b.subTo(m, b)
2033 b.rShiftTo(1, b)
2034 }
2035 while (v.isEven()) {
2036 v.rShiftTo(1, v)
2037 if (ac) {
2038 if (!c.isEven() || !d.isEven()) {
2039 c.addTo(this, c)
2040 d.subTo(m, d)
2041 }
2042 c.rShiftTo(1, c)
2043 } else if (!d.isEven()) d.subTo(m, d)
2044 d.rShiftTo(1, d)
2045 }
2046 if (u.compareTo(v) >= 0) {
2047 u.subTo(v, u)
2048 if (ac) a.subTo(c, a)
2049 b.subTo(d, b)
2050 } else {
2051 v.subTo(u, v)
2052 if (ac) c.subTo(a, c)
2053 d.subTo(b, d)
2054 }
2055 }
2056 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2057 if (d.compareTo(m) >= 0) return d.subtract(m)
2058 if (d.signum() < 0) d.addTo(m, d)
2059 else return d
2060 if (d.signum() < 0) return d.add(m)
2061 else return d
2062 }
2063
2064 var lowprimes = [
2065 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2066 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2067 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2068 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2069 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2070 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2071 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2072 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2073 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2074 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2075 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2076 ]
2077
2078 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2079
2080 // (public) test primality with certainty >= 1-.5^t
2081 function bnIsProbablePrime(t) {
2082 var i, x = this.abs()
2083 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2084 for (i = 0; i < lowprimes.length; ++i)
2085 if (x[0] == lowprimes[i]) return true
2086 return false
2087 }
2088 if (x.isEven()) return false
2089 i = 1
2090 while (i < lowprimes.length) {
2091 var m = lowprimes[i],
2092 j = i + 1
2093 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2094 m = x.modInt(m)
2095 while (i < j) if (m % lowprimes[i++] == 0) return false
2096 }
2097 return x.millerRabin(t)
2098 }
2099
2100 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2101 function bnpMillerRabin(t) {
2102 var n1 = this.subtract(BigInteger.ONE)
2103 var k = n1.getLowestSetBit()
2104 if (k <= 0) return false
2105 var r = n1.shiftRight(k)
2106 t = (t + 1) >> 1
2107 if (t > lowprimes.length) t = lowprimes.length
2108 var a = new BigInteger(null)
2109 var j, bases = []
2110 for (var i = 0; i < t; ++i) {
2111 for (;;) {
2112 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2113 if (bases.indexOf(j) == -1) break
2114 }
2115 bases.push(j)
2116 a.fromInt(j)
2117 var y = a.modPow(r, this)
2118 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2119 var j = 1
2120 while (j++ < k && y.compareTo(n1) != 0) {
2121 y = y.modPowInt(2, this)
2122 if (y.compareTo(BigInteger.ONE) == 0) return false
2123 }
2124 if (y.compareTo(n1) != 0) return false
2125 }
2126 }
2127 return true
2128 }
2129
2130 // protected
2131 proto.chunkSize = bnpChunkSize
2132 proto.toRadix = bnpToRadix
2133 proto.fromRadix = bnpFromRadix
2134 proto.fromNumber = bnpFromNumber
2135 proto.bitwiseTo = bnpBitwiseTo
2136 proto.changeBit = bnpChangeBit
2137 proto.addTo = bnpAddTo
2138 proto.dMultiply = bnpDMultiply
2139 proto.dAddOffset = bnpDAddOffset
2140 proto.multiplyLowerTo = bnpMultiplyLowerTo
2141 proto.multiplyUpperTo = bnpMultiplyUpperTo
2142 proto.modInt = bnpModInt
2143 proto.millerRabin = bnpMillerRabin
2144
2145 // public
2146 proto.clone = bnClone
2147 proto.intValue = bnIntValue
2148 proto.byteValue = bnByteValue
2149 proto.shortValue = bnShortValue
2150 proto.signum = bnSigNum
2151 proto.toByteArray = bnToByteArray
2152 proto.equals = bnEquals
2153 proto.min = bnMin
2154 proto.max = bnMax
2155 proto.and = bnAnd
2156 proto.or = bnOr
2157 proto.xor = bnXor
2158 proto.andNot = bnAndNot
2159 proto.not = bnNot
2160 proto.shiftLeft = bnShiftLeft
2161 proto.shiftRight = bnShiftRight
2162 proto.getLowestSetBit = bnGetLowestSetBit
2163 proto.bitCount = bnBitCount
2164 proto.testBit = bnTestBit
2165 proto.setBit = bnSetBit
2166 proto.clearBit = bnClearBit
2167 proto.flipBit = bnFlipBit
2168 proto.add = bnAdd
2169 proto.subtract = bnSubtract
2170 proto.multiply = bnMultiply
2171 proto.divide = bnDivide
2172 proto.remainder = bnRemainder
2173 proto.divideAndRemainder = bnDivideAndRemainder
2174 proto.modPow = bnModPow
2175 proto.modInverse = bnModInverse
2176 proto.pow = bnPow
2177 proto.gcd = bnGCD
2178 proto.isProbablePrime = bnIsProbablePrime
2179
2180 // JSBN-specific extension
2181 proto.square = bnSquare
2182
2183 // constants
2184 BigInteger.ZERO = nbv(0)
2185 BigInteger.ONE = nbv(1)
2186 BigInteger.valueOf = nbv
2187
2188 module.exports = BigInteger
2189
2190 },{"../package.json":4}],2:[function(require,module,exports){
2191 (function (Buffer){
2192 // FIXME: Kind of a weird way to throw exceptions, consider removing
2193 var assert = require('assert')
2194 var BigInteger = require('./bigi')
2195
2196 /**
2197 * Turns a byte array into a big integer.
2198 *
2199 * This function will interpret a byte array as a big integer in big
2200 * endian notation.
2201 */
2202 BigInteger.fromByteArrayUnsigned = function(byteArray) {
2203 // BigInteger expects a DER integer conformant byte array
2204 if (byteArray[0] & 0x80) {
2205 return new BigInteger([0].concat(byteArray))
2206 }
2207
2208 return new BigInteger(byteArray)
2209 }
2210
2211 /**
2212 * Returns a byte array representation of the big integer.
2213 *
2214 * This returns the absolute of the contained value in big endian
2215 * form. A value of zero results in an empty array.
2216 */
2217 BigInteger.prototype.toByteArrayUnsigned = function() {
2218 var byteArray = this.toByteArray()
2219 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2220 }
2221
2222 BigInteger.fromDERInteger = function(byteArray) {
2223 return new BigInteger(byteArray)
2224 }
2225
2226 /*
2227 * Converts BigInteger to a DER integer representation.
2228 *
2229 * The format for this value uses the most significant bit as a sign
2230 * bit. If the most significant bit is already set and the integer is
2231 * positive, a 0x00 is prepended.
2232 *
2233 * Examples:
2234 *
2235 * 0 => 0x00
2236 * 1 => 0x01
2237 * -1 => 0xff
2238 * 127 => 0x7f
2239 * -127 => 0x81
2240 * 128 => 0x0080
2241 * -128 => 0x80
2242 * 255 => 0x00ff
2243 * -255 => 0xff01
2244 * 16300 => 0x3fac
2245 * -16300 => 0xc054
2246 * 62300 => 0x00f35c
2247 * -62300 => 0xff0ca4
2248 */
2249 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
2250
2251 BigInteger.fromBuffer = function(buffer) {
2252 // BigInteger expects a DER integer conformant byte array
2253 if (buffer[0] & 0x80) {
2254 var byteArray = Array.prototype.slice.call(buffer)
2255
2256 return new BigInteger([0].concat(byteArray))
2257 }
2258
2259 return new BigInteger(buffer)
2260 }
2261
2262 BigInteger.fromHex = function(hex) {
2263 if (hex === '') return BigInteger.ZERO
2264
2265 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2266 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2267 return new BigInteger(hex, 16)
2268 }
2269
2270 BigInteger.prototype.toBuffer = function(size) {
2271 var byteArray = this.toByteArrayUnsigned()
2272 var zeros = []
2273
2274 var padding = size - byteArray.length
2275 while (zeros.length < padding) zeros.push(0)
2276
2277 return new Buffer(zeros.concat(byteArray))
2278 }
2279
2280 BigInteger.prototype.toHex = function(size) {
2281 return this.toBuffer(size).toString('hex')
2282 }
2283
2284 }).call(this,require("buffer").Buffer)
2285 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2286 var BigInteger = require('./bigi')
2287
2288 //addons
2289 require('./convert')
2290
2291 module.exports = BigInteger
2292 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2293 module.exports={
2294 "name": "bigi",
2295 "version": "1.4.0",
2296 "description": "Big integers.",
2297 "keywords": [
2298 "cryptography",
2299 "math",
2300 "bitcoin",
2301 "arbitrary",
2302 "precision",
2303 "arithmetic",
2304 "big",
2305 "integer",
2306 "int",
2307 "number",
2308 "biginteger",
2309 "bigint",
2310 "bignumber",
2311 "decimal",
2312 "float"
2313 ],
2314 "devDependencies": {
2315 "mocha": "^1.20.1",
2316 "jshint": "^2.5.1",
2317 "coveralls": "^2.10.0",
2318 "istanbul": "^0.2.11"
2319 },
2320 "repository": {
2321 "url": "https://github.com/cryptocoinjs/bigi",
2322 "type": "git"
2323 },
2324 "main": "./lib/index.js",
2325 "scripts": {
2326 "test": "_mocha -- test/*.js",
2327 "jshint": "jshint --config jshint.json lib/*.js ; true",
2328 "unit": "mocha",
2329 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2330 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2331 },
2332 "dependencies": {},
2333 "testling": {
2334 "files": "test/*.js",
2335 "harness": "mocha",
2336 "browsers": [
2337 "ie/9..latest",
2338 "firefox/latest",
2339 "chrome/latest",
2340 "safari/6.0..latest",
2341 "iphone/6.0..latest",
2342 "android-browser/4.2..latest"
2343 ]
2344 },
2345 "bugs": {
2346 "url": "https://github.com/cryptocoinjs/bigi/issues"
2347 },
2348 "homepage": "https://github.com/cryptocoinjs/bigi",
2349 "_id": "bigi@1.4.0",
2350 "dist": {
2351 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2352 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2353 },
2354 "_from": "bigi@^1.4.0",
2355 "_npmVersion": "1.4.3",
2356 "_npmUser": {
2357 "name": "jp",
2358 "email": "jprichardson@gmail.com"
2359 },
2360 "maintainers": [
2361 {
2362 "name": "jp",
2363 "email": "jprichardson@gmail.com"
2364 },
2365 {
2366 "name": "midnightlightning",
2367 "email": "boydb@midnightdesign.ws"
2368 },
2369 {
2370 "name": "sidazhang",
2371 "email": "sidazhang89@gmail.com"
2372 },
2373 {
2374 "name": "nadav",
2375 "email": "npm@shesek.info"
2376 }
2377 ],
2378 "directories": {},
2379 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2380 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2381 }
2382
2383 },{}],5:[function(require,module,exports){
2384 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2385 //
2386 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2387 //
2388 // Originally from narwhal.js (http://narwhaljs.org)
2389 // Copyright (c) 2009 Thomas Robinson <280north.com>
2390 //
2391 // Permission is hereby granted, free of charge, to any person obtaining a copy
2392 // of this software and associated documentation files (the 'Software'), to
2393 // deal in the Software without restriction, including without limitation the
2394 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2395 // sell copies of the Software, and to permit persons to whom the Software is
2396 // furnished to do so, subject to the following conditions:
2397 //
2398 // The above copyright notice and this permission notice shall be included in
2399 // all copies or substantial portions of the Software.
2400 //
2401 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2402 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2403 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2404 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2405 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2406 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2407
2408 // when used in node, this will actually load the util module we depend on
2409 // versus loading the builtin util module as happens otherwise
2410 // this is a bug in node module loading as far as I am concerned
2411 var util = require('util/');
2412
2413 var pSlice = Array.prototype.slice;
2414 var hasOwn = Object.prototype.hasOwnProperty;
2415
2416 // 1. The assert module provides functions that throw
2417 // AssertionError's when particular conditions are not met. The
2418 // assert module must conform to the following interface.
2419
2420 var assert = module.exports = ok;
2421
2422 // 2. The AssertionError is defined in assert.
2423 // new assert.AssertionError({ message: message,
2424 // actual: actual,
2425 // expected: expected })
2426
2427 assert.AssertionError = function AssertionError(options) {
2428 this.name = 'AssertionError';
2429 this.actual = options.actual;
2430 this.expected = options.expected;
2431 this.operator = options.operator;
2432 if (options.message) {
2433 this.message = options.message;
2434 this.generatedMessage = false;
2435 } else {
2436 this.message = getMessage(this);
2437 this.generatedMessage = true;
2438 }
2439 var stackStartFunction = options.stackStartFunction || fail;
2440
2441 if (Error.captureStackTrace) {
2442 Error.captureStackTrace(this, stackStartFunction);
2443 }
2444 else {
2445 // non v8 browsers so we can have a stacktrace
2446 var err = new Error();
2447 if (err.stack) {
2448 var out = err.stack;
2449
2450 // try to strip useless frames
2451 var fn_name = stackStartFunction.name;
2452 var idx = out.indexOf('\n' + fn_name);
2453 if (idx >= 0) {
2454 // once we have located the function frame
2455 // we need to strip out everything before it (and its line)
2456 var next_line = out.indexOf('\n', idx + 1);
2457 out = out.substring(next_line + 1);
2458 }
2459
2460 this.stack = out;
2461 }
2462 }
2463 };
2464
2465 // assert.AssertionError instanceof Error
2466 util.inherits(assert.AssertionError, Error);
2467
2468 function replacer(key, value) {
2469 if (util.isUndefined(value)) {
2470 return '' + value;
2471 }
2472 if (util.isNumber(value) && !isFinite(value)) {
2473 return value.toString();
2474 }
2475 if (util.isFunction(value) || util.isRegExp(value)) {
2476 return value.toString();
2477 }
2478 return value;
2479 }
2480
2481 function truncate(s, n) {
2482 if (util.isString(s)) {
2483 return s.length < n ? s : s.slice(0, n);
2484 } else {
2485 return s;
2486 }
2487 }
2488
2489 function getMessage(self) {
2490 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2491 self.operator + ' ' +
2492 truncate(JSON.stringify(self.expected, replacer), 128);
2493 }
2494
2495 // At present only the three keys mentioned above are used and
2496 // understood by the spec. Implementations or sub modules can pass
2497 // other keys to the AssertionError's constructor - they will be
2498 // ignored.
2499
2500 // 3. All of the following functions must throw an AssertionError
2501 // when a corresponding condition is not met, with a message that
2502 // may be undefined if not provided. All assertion methods provide
2503 // both the actual and expected values to the assertion error for
2504 // display purposes.
2505
2506 function fail(actual, expected, message, operator, stackStartFunction) {
2507 throw new assert.AssertionError({
2508 message: message,
2509 actual: actual,
2510 expected: expected,
2511 operator: operator,
2512 stackStartFunction: stackStartFunction
2513 });
2514 }
2515
2516 // EXTENSION! allows for well behaved errors defined elsewhere.
2517 assert.fail = fail;
2518
2519 // 4. Pure assertion tests whether a value is truthy, as determined
2520 // by !!guard.
2521 // assert.ok(guard, message_opt);
2522 // This statement is equivalent to assert.equal(true, !!guard,
2523 // message_opt);. To test strictly for the value true, use
2524 // assert.strictEqual(true, guard, message_opt);.
2525
2526 function ok(value, message) {
2527 if (!value) fail(value, true, message, '==', assert.ok);
2528 }
2529 assert.ok = ok;
2530
2531 // 5. The equality assertion tests shallow, coercive equality with
2532 // ==.
2533 // assert.equal(actual, expected, message_opt);
2534
2535 assert.equal = function equal(actual, expected, message) {
2536 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2537 };
2538
2539 // 6. The non-equality assertion tests for whether two objects are not equal
2540 // with != assert.notEqual(actual, expected, message_opt);
2541
2542 assert.notEqual = function notEqual(actual, expected, message) {
2543 if (actual == expected) {
2544 fail(actual, expected, message, '!=', assert.notEqual);
2545 }
2546 };
2547
2548 // 7. The equivalence assertion tests a deep equality relation.
2549 // assert.deepEqual(actual, expected, message_opt);
2550
2551 assert.deepEqual = function deepEqual(actual, expected, message) {
2552 if (!_deepEqual(actual, expected)) {
2553 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2554 }
2555 };
2556
2557 function _deepEqual(actual, expected) {
2558 // 7.1. All identical values are equivalent, as determined by ===.
2559 if (actual === expected) {
2560 return true;
2561
2562 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2563 if (actual.length != expected.length) return false;
2564
2565 for (var i = 0; i < actual.length; i++) {
2566 if (actual[i] !== expected[i]) return false;
2567 }
2568
2569 return true;
2570
2571 // 7.2. If the expected value is a Date object, the actual value is
2572 // equivalent if it is also a Date object that refers to the same time.
2573 } else if (util.isDate(actual) && util.isDate(expected)) {
2574 return actual.getTime() === expected.getTime();
2575
2576 // 7.3 If the expected value is a RegExp object, the actual value is
2577 // equivalent if it is also a RegExp object with the same source and
2578 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2579 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2580 return actual.source === expected.source &&
2581 actual.global === expected.global &&
2582 actual.multiline === expected.multiline &&
2583 actual.lastIndex === expected.lastIndex &&
2584 actual.ignoreCase === expected.ignoreCase;
2585
2586 // 7.4. Other pairs that do not both pass typeof value == 'object',
2587 // equivalence is determined by ==.
2588 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2589 return actual == expected;
2590
2591 // 7.5 For all other Object pairs, including Array objects, equivalence is
2592 // determined by having the same number of owned properties (as verified
2593 // with Object.prototype.hasOwnProperty.call), the same set of keys
2594 // (although not necessarily the same order), equivalent values for every
2595 // corresponding key, and an identical 'prototype' property. Note: this
2596 // accounts for both named and indexed properties on Arrays.
2597 } else {
2598 return objEquiv(actual, expected);
2599 }
2600 }
2601
2602 function isArguments(object) {
2603 return Object.prototype.toString.call(object) == '[object Arguments]';
2604 }
2605
2606 function objEquiv(a, b) {
2607 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2608 return false;
2609 // an identical 'prototype' property.
2610 if (a.prototype !== b.prototype) return false;
2611 // if one is a primitive, the other must be same
2612 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2613 return a === b;
2614 }
2615 var aIsArgs = isArguments(a),
2616 bIsArgs = isArguments(b);
2617 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2618 return false;
2619 if (aIsArgs) {
2620 a = pSlice.call(a);
2621 b = pSlice.call(b);
2622 return _deepEqual(a, b);
2623 }
2624 var ka = objectKeys(a),
2625 kb = objectKeys(b),
2626 key, i;
2627 // having the same number of owned properties (keys incorporates
2628 // hasOwnProperty)
2629 if (ka.length != kb.length)
2630 return false;
2631 //the same set of keys (although not necessarily the same order),
2632 ka.sort();
2633 kb.sort();
2634 //~~~cheap key test
2635 for (i = ka.length - 1; i >= 0; i--) {
2636 if (ka[i] != kb[i])
2637 return false;
2638 }
2639 //equivalent values for every corresponding key, and
2640 //~~~possibly expensive deep test
2641 for (i = ka.length - 1; i >= 0; i--) {
2642 key = ka[i];
2643 if (!_deepEqual(a[key], b[key])) return false;
2644 }
2645 return true;
2646 }
2647
2648 // 8. The non-equivalence assertion tests for any deep inequality.
2649 // assert.notDeepEqual(actual, expected, message_opt);
2650
2651 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2652 if (_deepEqual(actual, expected)) {
2653 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2654 }
2655 };
2656
2657 // 9. The strict equality assertion tests strict equality, as determined by ===.
2658 // assert.strictEqual(actual, expected, message_opt);
2659
2660 assert.strictEqual = function strictEqual(actual, expected, message) {
2661 if (actual !== expected) {
2662 fail(actual, expected, message, '===', assert.strictEqual);
2663 }
2664 };
2665
2666 // 10. The strict non-equality assertion tests for strict inequality, as
2667 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2668
2669 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2670 if (actual === expected) {
2671 fail(actual, expected, message, '!==', assert.notStrictEqual);
2672 }
2673 };
2674
2675 function expectedException(actual, expected) {
2676 if (!actual || !expected) {
2677 return false;
2678 }
2679
2680 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2681 return expected.test(actual);
2682 } else if (actual instanceof expected) {
2683 return true;
2684 } else if (expected.call({}, actual) === true) {
2685 return true;
2686 }
2687
2688 return false;
2689 }
2690
2691 function _throws(shouldThrow, block, expected, message) {
2692 var actual;
2693
2694 if (util.isString(expected)) {
2695 message = expected;
2696 expected = null;
2697 }
2698
2699 try {
2700 block();
2701 } catch (e) {
2702 actual = e;
2703 }
2704
2705 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2706 (message ? ' ' + message : '.');
2707
2708 if (shouldThrow && !actual) {
2709 fail(actual, expected, 'Missing expected exception' + message);
2710 }
2711
2712 if (!shouldThrow && expectedException(actual, expected)) {
2713 fail(actual, expected, 'Got unwanted exception' + message);
2714 }
2715
2716 if ((shouldThrow && actual && expected &&
2717 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2718 throw actual;
2719 }
2720 }
2721
2722 // 11. Expected to throw an error:
2723 // assert.throws(block, Error_opt, message_opt);
2724
2725 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2726 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2727 };
2728
2729 // EXTENSION! This is annoying to write outside this module.
2730 assert.doesNotThrow = function(block, /*optional*/message) {
2731 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2732 };
2733
2734 assert.ifError = function(err) { if (err) {throw err;}};
2735
2736 var objectKeys = Object.keys || function (obj) {
2737 var keys = [];
2738 for (var key in obj) {
2739 if (hasOwn.call(obj, key)) keys.push(key);
2740 }
2741 return keys;
2742 };
2743
2744 },{"util/":29}],6:[function(require,module,exports){
2745
2746 },{}],7:[function(require,module,exports){
2747 /*!
2748 * The buffer module from node.js, for the browser.
2749 *
2750 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2751 * @license MIT
2752 */
2753
2754 var base64 = require('base64-js')
2755 var ieee754 = require('ieee754')
2756 var isArray = require('is-array')
2757
2758 exports.Buffer = Buffer
2759 exports.SlowBuffer = SlowBuffer
2760 exports.INSPECT_MAX_BYTES = 50
2761 Buffer.poolSize = 8192 // not used by this implementation
2762
2763 var rootParent = {}
2764
2765 /**
2766 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2767 * === true Use Uint8Array implementation (fastest)
2768 * === false Use Object implementation (most compatible, even IE6)
2769 *
2770 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2771 * Opera 11.6+, iOS 4.2+.
2772 *
2773 * Due to various browser bugs, sometimes the Object implementation will be used even
2774 * when the browser supports typed arrays.
2775 *
2776 * Note:
2777 *
2778 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2779 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2780 *
2781 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2782 * on objects.
2783 *
2784 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2785 *
2786 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2787 * incorrect length in some situations.
2788
2789 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2790 * get the Object implementation, which is slower but behaves correctly.
2791 */
2792 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2793 function Bar () {}
2794 try {
2795 var arr = new Uint8Array(1)
2796 arr.foo = function () { return 42 }
2797 arr.constructor = Bar
2798 return arr.foo() === 42 && // typed array instances can be augmented
2799 arr.constructor === Bar && // constructor can be set
2800 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2801 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2802 } catch (e) {
2803 return false
2804 }
2805 })()
2806
2807 function kMaxLength () {
2808 return Buffer.TYPED_ARRAY_SUPPORT
2809 ? 0x7fffffff
2810 : 0x3fffffff
2811 }
2812
2813 /**
2814 * Class: Buffer
2815 * =============
2816 *
2817 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2818 * with function properties for all the node `Buffer` API functions. We use
2819 * `Uint8Array` so that square bracket notation works as expected -- it returns
2820 * a single octet.
2821 *
2822 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2823 * prototype.
2824 */
2825 function Buffer (arg) {
2826 if (!(this instanceof Buffer)) {
2827 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2828 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2829 return new Buffer(arg)
2830 }
2831
2832 this.length = 0
2833 this.parent = undefined
2834
2835 // Common case.
2836 if (typeof arg === 'number') {
2837 return fromNumber(this, arg)
2838 }
2839
2840 // Slightly less common case.
2841 if (typeof arg === 'string') {
2842 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2843 }
2844
2845 // Unusual.
2846 return fromObject(this, arg)
2847 }
2848
2849 function fromNumber (that, length) {
2850 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2851 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2852 for (var i = 0; i < length; i++) {
2853 that[i] = 0
2854 }
2855 }
2856 return that
2857 }
2858
2859 function fromString (that, string, encoding) {
2860 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2861
2862 // Assumption: byteLength() return value is always < kMaxLength.
2863 var length = byteLength(string, encoding) | 0
2864 that = allocate(that, length)
2865
2866 that.write(string, encoding)
2867 return that
2868 }
2869
2870 function fromObject (that, object) {
2871 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2872
2873 if (isArray(object)) return fromArray(that, object)
2874
2875 if (object == null) {
2876 throw new TypeError('must start with number, buffer, array or string')
2877 }
2878
2879 if (typeof ArrayBuffer !== 'undefined') {
2880 if (object.buffer instanceof ArrayBuffer) {
2881 return fromTypedArray(that, object)
2882 }
2883 if (object instanceof ArrayBuffer) {
2884 return fromArrayBuffer(that, object)
2885 }
2886 }
2887
2888 if (object.length) return fromArrayLike(that, object)
2889
2890 return fromJsonObject(that, object)
2891 }
2892
2893 function fromBuffer (that, buffer) {
2894 var length = checked(buffer.length) | 0
2895 that = allocate(that, length)
2896 buffer.copy(that, 0, 0, length)
2897 return that
2898 }
2899
2900 function fromArray (that, array) {
2901 var length = checked(array.length) | 0
2902 that = allocate(that, length)
2903 for (var i = 0; i < length; i += 1) {
2904 that[i] = array[i] & 255
2905 }
2906 return that
2907 }
2908
2909 // Duplicate of fromArray() to keep fromArray() monomorphic.
2910 function fromTypedArray (that, array) {
2911 var length = checked(array.length) | 0
2912 that = allocate(that, length)
2913 // Truncating the elements is probably not what people expect from typed
2914 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2915 // of the old Buffer constructor.
2916 for (var i = 0; i < length; i += 1) {
2917 that[i] = array[i] & 255
2918 }
2919 return that
2920 }
2921
2922 function fromArrayBuffer (that, array) {
2923 if (Buffer.TYPED_ARRAY_SUPPORT) {
2924 // Return an augmented `Uint8Array` instance, for best performance
2925 array.byteLength
2926 that = Buffer._augment(new Uint8Array(array))
2927 } else {
2928 // Fallback: Return an object instance of the Buffer class
2929 that = fromTypedArray(that, new Uint8Array(array))
2930 }
2931 return that
2932 }
2933
2934 function fromArrayLike (that, array) {
2935 var length = checked(array.length) | 0
2936 that = allocate(that, length)
2937 for (var i = 0; i < length; i += 1) {
2938 that[i] = array[i] & 255
2939 }
2940 return that
2941 }
2942
2943 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2944 // Returns a zero-length buffer for inputs that don't conform to the spec.
2945 function fromJsonObject (that, object) {
2946 var array
2947 var length = 0
2948
2949 if (object.type === 'Buffer' && isArray(object.data)) {
2950 array = object.data
2951 length = checked(array.length) | 0
2952 }
2953 that = allocate(that, length)
2954
2955 for (var i = 0; i < length; i += 1) {
2956 that[i] = array[i] & 255
2957 }
2958 return that
2959 }
2960
2961 function allocate (that, length) {
2962 if (Buffer.TYPED_ARRAY_SUPPORT) {
2963 // Return an augmented `Uint8Array` instance, for best performance
2964 that = Buffer._augment(new Uint8Array(length))
2965 } else {
2966 // Fallback: Return an object instance of the Buffer class
2967 that.length = length
2968 that._isBuffer = true
2969 }
2970
2971 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2972 if (fromPool) that.parent = rootParent
2973
2974 return that
2975 }
2976
2977 function checked (length) {
2978 // Note: cannot use `length < kMaxLength` here because that fails when
2979 // length is NaN (which is otherwise coerced to zero.)
2980 if (length >= kMaxLength()) {
2981 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2982 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2983 }
2984 return length | 0
2985 }
2986
2987 function SlowBuffer (subject, encoding) {
2988 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2989
2990 var buf = new Buffer(subject, encoding)
2991 delete buf.parent
2992 return buf
2993 }
2994
2995 Buffer.isBuffer = function isBuffer (b) {
2996 return !!(b != null && b._isBuffer)
2997 }
2998
2999 Buffer.compare = function compare (a, b) {
3000 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
3001 throw new TypeError('Arguments must be Buffers')
3002 }
3003
3004 if (a === b) return 0
3005
3006 var x = a.length
3007 var y = b.length
3008
3009 var i = 0
3010 var len = Math.min(x, y)
3011 while (i < len) {
3012 if (a[i] !== b[i]) break
3013
3014 ++i
3015 }
3016
3017 if (i !== len) {
3018 x = a[i]
3019 y = b[i]
3020 }
3021
3022 if (x < y) return -1
3023 if (y < x) return 1
3024 return 0
3025 }
3026
3027 Buffer.isEncoding = function isEncoding (encoding) {
3028 switch (String(encoding).toLowerCase()) {
3029 case 'hex':
3030 case 'utf8':
3031 case 'utf-8':
3032 case 'ascii':
3033 case 'binary':
3034 case 'base64':
3035 case 'raw':
3036 case 'ucs2':
3037 case 'ucs-2':
3038 case 'utf16le':
3039 case 'utf-16le':
3040 return true
3041 default:
3042 return false
3043 }
3044 }
3045
3046 Buffer.concat = function concat (list, length) {
3047 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3048
3049 if (list.length === 0) {
3050 return new Buffer(0)
3051 }
3052
3053 var i
3054 if (length === undefined) {
3055 length = 0
3056 for (i = 0; i < list.length; i++) {
3057 length += list[i].length
3058 }
3059 }
3060
3061 var buf = new Buffer(length)
3062 var pos = 0
3063 for (i = 0; i < list.length; i++) {
3064 var item = list[i]
3065 item.copy(buf, pos)
3066 pos += item.length
3067 }
3068 return buf
3069 }
3070
3071 function byteLength (string, encoding) {
3072 if (typeof string !== 'string') string = '' + string
3073
3074 var len = string.length
3075 if (len === 0) return 0
3076
3077 // Use a for loop to avoid recursion
3078 var loweredCase = false
3079 for (;;) {
3080 switch (encoding) {
3081 case 'ascii':
3082 case 'binary':
3083 // Deprecated
3084 case 'raw':
3085 case 'raws':
3086 return len
3087 case 'utf8':
3088 case 'utf-8':
3089 return utf8ToBytes(string).length
3090 case 'ucs2':
3091 case 'ucs-2':
3092 case 'utf16le':
3093 case 'utf-16le':
3094 return len * 2
3095 case 'hex':
3096 return len >>> 1
3097 case 'base64':
3098 return base64ToBytes(string).length
3099 default:
3100 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3101 encoding = ('' + encoding).toLowerCase()
3102 loweredCase = true
3103 }
3104 }
3105 }
3106 Buffer.byteLength = byteLength
3107
3108 // pre-set for values that may exist in the future
3109 Buffer.prototype.length = undefined
3110 Buffer.prototype.parent = undefined
3111
3112 function slowToString (encoding, start, end) {
3113 var loweredCase = false
3114
3115 start = start | 0
3116 end = end === undefined || end === Infinity ? this.length : end | 0
3117
3118 if (!encoding) encoding = 'utf8'
3119 if (start < 0) start = 0
3120 if (end > this.length) end = this.length
3121 if (end <= start) return ''
3122
3123 while (true) {
3124 switch (encoding) {
3125 case 'hex':
3126 return hexSlice(this, start, end)
3127
3128 case 'utf8':
3129 case 'utf-8':
3130 return utf8Slice(this, start, end)
3131
3132 case 'ascii':
3133 return asciiSlice(this, start, end)
3134
3135 case 'binary':
3136 return binarySlice(this, start, end)
3137
3138 case 'base64':
3139 return base64Slice(this, start, end)
3140
3141 case 'ucs2':
3142 case 'ucs-2':
3143 case 'utf16le':
3144 case 'utf-16le':
3145 return utf16leSlice(this, start, end)
3146
3147 default:
3148 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3149 encoding = (encoding + '').toLowerCase()
3150 loweredCase = true
3151 }
3152 }
3153 }
3154
3155 Buffer.prototype.toString = function toString () {
3156 var length = this.length | 0
3157 if (length === 0) return ''
3158 if (arguments.length === 0) return utf8Slice(this, 0, length)
3159 return slowToString.apply(this, arguments)
3160 }
3161
3162 Buffer.prototype.equals = function equals (b) {
3163 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3164 if (this === b) return true
3165 return Buffer.compare(this, b) === 0
3166 }
3167
3168 Buffer.prototype.inspect = function inspect () {
3169 var str = ''
3170 var max = exports.INSPECT_MAX_BYTES
3171 if (this.length > 0) {
3172 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3173 if (this.length > max) str += ' ... '
3174 }
3175 return '<Buffer ' + str + '>'
3176 }
3177
3178 Buffer.prototype.compare = function compare (b) {
3179 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3180 if (this === b) return 0
3181 return Buffer.compare(this, b)
3182 }
3183
3184 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3185 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3186 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3187 byteOffset >>= 0
3188
3189 if (this.length === 0) return -1
3190 if (byteOffset >= this.length) return -1
3191
3192 // Negative offsets start from the end of the buffer
3193 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3194
3195 if (typeof val === 'string') {
3196 if (val.length === 0) return -1 // special case: looking for empty string always fails
3197 return String.prototype.indexOf.call(this, val, byteOffset)
3198 }
3199 if (Buffer.isBuffer(val)) {
3200 return arrayIndexOf(this, val, byteOffset)
3201 }
3202 if (typeof val === 'number') {
3203 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3204 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3205 }
3206 return arrayIndexOf(this, [ val ], byteOffset)
3207 }
3208
3209 function arrayIndexOf (arr, val, byteOffset) {
3210 var foundIndex = -1
3211 for (var i = 0; byteOffset + i < arr.length; i++) {
3212 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3213 if (foundIndex === -1) foundIndex = i
3214 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3215 } else {
3216 foundIndex = -1
3217 }
3218 }
3219 return -1
3220 }
3221
3222 throw new TypeError('val must be string, number or Buffer')
3223 }
3224
3225 // `get` is deprecated
3226 Buffer.prototype.get = function get (offset) {
3227 console.log('.get() is deprecated. Access using array indexes instead.')
3228 return this.readUInt8(offset)
3229 }
3230
3231 // `set` is deprecated
3232 Buffer.prototype.set = function set (v, offset) {
3233 console.log('.set() is deprecated. Access using array indexes instead.')
3234 return this.writeUInt8(v, offset)
3235 }
3236
3237 function hexWrite (buf, string, offset, length) {
3238 offset = Number(offset) || 0
3239 var remaining = buf.length - offset
3240 if (!length) {
3241 length = remaining
3242 } else {
3243 length = Number(length)
3244 if (length > remaining) {
3245 length = remaining
3246 }
3247 }
3248
3249 // must be an even number of digits
3250 var strLen = string.length
3251 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3252
3253 if (length > strLen / 2) {
3254 length = strLen / 2
3255 }
3256 for (var i = 0; i < length; i++) {
3257 var parsed = parseInt(string.substr(i * 2, 2), 16)
3258 if (isNaN(parsed)) throw new Error('Invalid hex string')
3259 buf[offset + i] = parsed
3260 }
3261 return i
3262 }
3263
3264 function utf8Write (buf, string, offset, length) {
3265 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3266 }
3267
3268 function asciiWrite (buf, string, offset, length) {
3269 return blitBuffer(asciiToBytes(string), buf, offset, length)
3270 }
3271
3272 function binaryWrite (buf, string, offset, length) {
3273 return asciiWrite(buf, string, offset, length)
3274 }
3275
3276 function base64Write (buf, string, offset, length) {
3277 return blitBuffer(base64ToBytes(string), buf, offset, length)
3278 }
3279
3280 function ucs2Write (buf, string, offset, length) {
3281 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3282 }
3283
3284 Buffer.prototype.write = function write (string, offset, length, encoding) {
3285 // Buffer#write(string)
3286 if (offset === undefined) {
3287 encoding = 'utf8'
3288 length = this.length
3289 offset = 0
3290 // Buffer#write(string, encoding)
3291 } else if (length === undefined && typeof offset === 'string') {
3292 encoding = offset
3293 length = this.length
3294 offset = 0
3295 // Buffer#write(string, offset[, length][, encoding])
3296 } else if (isFinite(offset)) {
3297 offset = offset | 0
3298 if (isFinite(length)) {
3299 length = length | 0
3300 if (encoding === undefined) encoding = 'utf8'
3301 } else {
3302 encoding = length
3303 length = undefined
3304 }
3305 // legacy write(string, encoding, offset, length) - remove in v0.13
3306 } else {
3307 var swap = encoding
3308 encoding = offset
3309 offset = length | 0
3310 length = swap
3311 }
3312
3313 var remaining = this.length - offset
3314 if (length === undefined || length > remaining) length = remaining
3315
3316 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3317 throw new RangeError('attempt to write outside buffer bounds')
3318 }
3319
3320 if (!encoding) encoding = 'utf8'
3321
3322 var loweredCase = false
3323 for (;;) {
3324 switch (encoding) {
3325 case 'hex':
3326 return hexWrite(this, string, offset, length)
3327
3328 case 'utf8':
3329 case 'utf-8':
3330 return utf8Write(this, string, offset, length)
3331
3332 case 'ascii':
3333 return asciiWrite(this, string, offset, length)
3334
3335 case 'binary':
3336 return binaryWrite(this, string, offset, length)
3337
3338 case 'base64':
3339 // Warning: maxLength not taken into account in base64Write
3340 return base64Write(this, string, offset, length)
3341
3342 case 'ucs2':
3343 case 'ucs-2':
3344 case 'utf16le':
3345 case 'utf-16le':
3346 return ucs2Write(this, string, offset, length)
3347
3348 default:
3349 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3350 encoding = ('' + encoding).toLowerCase()
3351 loweredCase = true
3352 }
3353 }
3354 }
3355
3356 Buffer.prototype.toJSON = function toJSON () {
3357 return {
3358 type: 'Buffer',
3359 data: Array.prototype.slice.call(this._arr || this, 0)
3360 }
3361 }
3362
3363 function base64Slice (buf, start, end) {
3364 if (start === 0 && end === buf.length) {
3365 return base64.fromByteArray(buf)
3366 } else {
3367 return base64.fromByteArray(buf.slice(start, end))
3368 }
3369 }
3370
3371 function utf8Slice (buf, start, end) {
3372 end = Math.min(buf.length, end)
3373 var firstByte
3374 var secondByte
3375 var thirdByte
3376 var fourthByte
3377 var bytesPerSequence
3378 var tempCodePoint
3379 var codePoint
3380 var res = []
3381 var i = start
3382
3383 for (; i < end; i += bytesPerSequence) {
3384 firstByte = buf[i]
3385 codePoint = 0xFFFD
3386
3387 if (firstByte > 0xEF) {
3388 bytesPerSequence = 4
3389 } else if (firstByte > 0xDF) {
3390 bytesPerSequence = 3
3391 } else if (firstByte > 0xBF) {
3392 bytesPerSequence = 2
3393 } else {
3394 bytesPerSequence = 1
3395 }
3396
3397 if (i + bytesPerSequence <= end) {
3398 switch (bytesPerSequence) {
3399 case 1:
3400 if (firstByte < 0x80) {
3401 codePoint = firstByte
3402 }
3403 break
3404 case 2:
3405 secondByte = buf[i + 1]
3406 if ((secondByte & 0xC0) === 0x80) {
3407 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3408 if (tempCodePoint > 0x7F) {
3409 codePoint = tempCodePoint
3410 }
3411 }
3412 break
3413 case 3:
3414 secondByte = buf[i + 1]
3415 thirdByte = buf[i + 2]
3416 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3417 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3418 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3419 codePoint = tempCodePoint
3420 }
3421 }
3422 break
3423 case 4:
3424 secondByte = buf[i + 1]
3425 thirdByte = buf[i + 2]
3426 fourthByte = buf[i + 3]
3427 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3428 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3429 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3430 codePoint = tempCodePoint
3431 }
3432 }
3433 }
3434 }
3435
3436 if (codePoint === 0xFFFD) {
3437 // we generated an invalid codePoint so make sure to only advance by 1 byte
3438 bytesPerSequence = 1
3439 } else if (codePoint > 0xFFFF) {
3440 // encode to utf16 (surrogate pair dance)
3441 codePoint -= 0x10000
3442 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3443 codePoint = 0xDC00 | codePoint & 0x3FF
3444 }
3445
3446 res.push(codePoint)
3447 }
3448
3449 return String.fromCharCode.apply(String, res)
3450 }
3451
3452 function asciiSlice (buf, start, end) {
3453 var ret = ''
3454 end = Math.min(buf.length, end)
3455
3456 for (var i = start; i < end; i++) {
3457 ret += String.fromCharCode(buf[i] & 0x7F)
3458 }
3459 return ret
3460 }
3461
3462 function binarySlice (buf, start, end) {
3463 var ret = ''
3464 end = Math.min(buf.length, end)
3465
3466 for (var i = start; i < end; i++) {
3467 ret += String.fromCharCode(buf[i])
3468 }
3469 return ret
3470 }
3471
3472 function hexSlice (buf, start, end) {
3473 var len = buf.length
3474
3475 if (!start || start < 0) start = 0
3476 if (!end || end < 0 || end > len) end = len
3477
3478 var out = ''
3479 for (var i = start; i < end; i++) {
3480 out += toHex(buf[i])
3481 }
3482 return out
3483 }
3484
3485 function utf16leSlice (buf, start, end) {
3486 var bytes = buf.slice(start, end)
3487 var res = ''
3488 for (var i = 0; i < bytes.length; i += 2) {
3489 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3490 }
3491 return res
3492 }
3493
3494 Buffer.prototype.slice = function slice (start, end) {
3495 var len = this.length
3496 start = ~~start
3497 end = end === undefined ? len : ~~end
3498
3499 if (start < 0) {
3500 start += len
3501 if (start < 0) start = 0
3502 } else if (start > len) {
3503 start = len
3504 }
3505
3506 if (end < 0) {
3507 end += len
3508 if (end < 0) end = 0
3509 } else if (end > len) {
3510 end = len
3511 }
3512
3513 if (end < start) end = start
3514
3515 var newBuf
3516 if (Buffer.TYPED_ARRAY_SUPPORT) {
3517 newBuf = Buffer._augment(this.subarray(start, end))
3518 } else {
3519 var sliceLen = end - start
3520 newBuf = new Buffer(sliceLen, undefined)
3521 for (var i = 0; i < sliceLen; i++) {
3522 newBuf[i] = this[i + start]
3523 }
3524 }
3525
3526 if (newBuf.length) newBuf.parent = this.parent || this
3527
3528 return newBuf
3529 }
3530
3531 /*
3532 * Need to make sure that buffer isn't trying to write out of bounds.
3533 */
3534 function checkOffset (offset, ext, length) {
3535 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3536 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3537 }
3538
3539 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3540 offset = offset | 0
3541 byteLength = byteLength | 0
3542 if (!noAssert) checkOffset(offset, byteLength, this.length)
3543
3544 var val = this[offset]
3545 var mul = 1
3546 var i = 0
3547 while (++i < byteLength && (mul *= 0x100)) {
3548 val += this[offset + i] * mul
3549 }
3550
3551 return val
3552 }
3553
3554 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3555 offset = offset | 0
3556 byteLength = byteLength | 0
3557 if (!noAssert) {
3558 checkOffset(offset, byteLength, this.length)
3559 }
3560
3561 var val = this[offset + --byteLength]
3562 var mul = 1
3563 while (byteLength > 0 && (mul *= 0x100)) {
3564 val += this[offset + --byteLength] * mul
3565 }
3566
3567 return val
3568 }
3569
3570 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3571 if (!noAssert) checkOffset(offset, 1, this.length)
3572 return this[offset]
3573 }
3574
3575 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3576 if (!noAssert) checkOffset(offset, 2, this.length)
3577 return this[offset] | (this[offset + 1] << 8)
3578 }
3579
3580 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3581 if (!noAssert) checkOffset(offset, 2, this.length)
3582 return (this[offset] << 8) | this[offset + 1]
3583 }
3584
3585 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3586 if (!noAssert) checkOffset(offset, 4, this.length)
3587
3588 return ((this[offset]) |
3589 (this[offset + 1] << 8) |
3590 (this[offset + 2] << 16)) +
3591 (this[offset + 3] * 0x1000000)
3592 }
3593
3594 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3595 if (!noAssert) checkOffset(offset, 4, this.length)
3596
3597 return (this[offset] * 0x1000000) +
3598 ((this[offset + 1] << 16) |
3599 (this[offset + 2] << 8) |
3600 this[offset + 3])
3601 }
3602
3603 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3604 offset = offset | 0
3605 byteLength = byteLength | 0
3606 if (!noAssert) checkOffset(offset, byteLength, this.length)
3607
3608 var val = this[offset]
3609 var mul = 1
3610 var i = 0
3611 while (++i < byteLength && (mul *= 0x100)) {
3612 val += this[offset + i] * mul
3613 }
3614 mul *= 0x80
3615
3616 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3617
3618 return val
3619 }
3620
3621 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3622 offset = offset | 0
3623 byteLength = byteLength | 0
3624 if (!noAssert) checkOffset(offset, byteLength, this.length)
3625
3626 var i = byteLength
3627 var mul = 1
3628 var val = this[offset + --i]
3629 while (i > 0 && (mul *= 0x100)) {
3630 val += this[offset + --i] * mul
3631 }
3632 mul *= 0x80
3633
3634 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3635
3636 return val
3637 }
3638
3639 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3640 if (!noAssert) checkOffset(offset, 1, this.length)
3641 if (!(this[offset] & 0x80)) return (this[offset])
3642 return ((0xff - this[offset] + 1) * -1)
3643 }
3644
3645 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3646 if (!noAssert) checkOffset(offset, 2, this.length)
3647 var val = this[offset] | (this[offset + 1] << 8)
3648 return (val & 0x8000) ? val | 0xFFFF0000 : val
3649 }
3650
3651 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3652 if (!noAssert) checkOffset(offset, 2, this.length)
3653 var val = this[offset + 1] | (this[offset] << 8)
3654 return (val & 0x8000) ? val | 0xFFFF0000 : val
3655 }
3656
3657 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3658 if (!noAssert) checkOffset(offset, 4, this.length)
3659
3660 return (this[offset]) |
3661 (this[offset + 1] << 8) |
3662 (this[offset + 2] << 16) |
3663 (this[offset + 3] << 24)
3664 }
3665
3666 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3667 if (!noAssert) checkOffset(offset, 4, this.length)
3668
3669 return (this[offset] << 24) |
3670 (this[offset + 1] << 16) |
3671 (this[offset + 2] << 8) |
3672 (this[offset + 3])
3673 }
3674
3675 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3676 if (!noAssert) checkOffset(offset, 4, this.length)
3677 return ieee754.read(this, offset, true, 23, 4)
3678 }
3679
3680 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3681 if (!noAssert) checkOffset(offset, 4, this.length)
3682 return ieee754.read(this, offset, false, 23, 4)
3683 }
3684
3685 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3686 if (!noAssert) checkOffset(offset, 8, this.length)
3687 return ieee754.read(this, offset, true, 52, 8)
3688 }
3689
3690 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3691 if (!noAssert) checkOffset(offset, 8, this.length)
3692 return ieee754.read(this, offset, false, 52, 8)
3693 }
3694
3695 function checkInt (buf, value, offset, ext, max, min) {
3696 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3697 if (value > max || value < min) throw new RangeError('value is out of bounds')
3698 if (offset + ext > buf.length) throw new RangeError('index out of range')
3699 }
3700
3701 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3702 value = +value
3703 offset = offset | 0
3704 byteLength = byteLength | 0
3705 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3706
3707 var mul = 1
3708 var i = 0
3709 this[offset] = value & 0xFF
3710 while (++i < byteLength && (mul *= 0x100)) {
3711 this[offset + i] = (value / mul) & 0xFF
3712 }
3713
3714 return offset + byteLength
3715 }
3716
3717 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3718 value = +value
3719 offset = offset | 0
3720 byteLength = byteLength | 0
3721 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3722
3723 var i = byteLength - 1
3724 var mul = 1
3725 this[offset + i] = value & 0xFF
3726 while (--i >= 0 && (mul *= 0x100)) {
3727 this[offset + i] = (value / mul) & 0xFF
3728 }
3729
3730 return offset + byteLength
3731 }
3732
3733 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3734 value = +value
3735 offset = offset | 0
3736 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3737 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3738 this[offset] = value
3739 return offset + 1
3740 }
3741
3742 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3743 if (value < 0) value = 0xffff + value + 1
3744 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3745 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3746 (littleEndian ? i : 1 - i) * 8
3747 }
3748 }
3749
3750 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3751 value = +value
3752 offset = offset | 0
3753 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3754 if (Buffer.TYPED_ARRAY_SUPPORT) {
3755 this[offset] = value
3756 this[offset + 1] = (value >>> 8)
3757 } else {
3758 objectWriteUInt16(this, value, offset, true)
3759 }
3760 return offset + 2
3761 }
3762
3763 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3764 value = +value
3765 offset = offset | 0
3766 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3767 if (Buffer.TYPED_ARRAY_SUPPORT) {
3768 this[offset] = (value >>> 8)
3769 this[offset + 1] = value
3770 } else {
3771 objectWriteUInt16(this, value, offset, false)
3772 }
3773 return offset + 2
3774 }
3775
3776 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3777 if (value < 0) value = 0xffffffff + value + 1
3778 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3779 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3780 }
3781 }
3782
3783 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3784 value = +value
3785 offset = offset | 0
3786 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3787 if (Buffer.TYPED_ARRAY_SUPPORT) {
3788 this[offset + 3] = (value >>> 24)
3789 this[offset + 2] = (value >>> 16)
3790 this[offset + 1] = (value >>> 8)
3791 this[offset] = value
3792 } else {
3793 objectWriteUInt32(this, value, offset, true)
3794 }
3795 return offset + 4
3796 }
3797
3798 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3799 value = +value
3800 offset = offset | 0
3801 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3802 if (Buffer.TYPED_ARRAY_SUPPORT) {
3803 this[offset] = (value >>> 24)
3804 this[offset + 1] = (value >>> 16)
3805 this[offset + 2] = (value >>> 8)
3806 this[offset + 3] = value
3807 } else {
3808 objectWriteUInt32(this, value, offset, false)
3809 }
3810 return offset + 4
3811 }
3812
3813 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3814 value = +value
3815 offset = offset | 0
3816 if (!noAssert) {
3817 var limit = Math.pow(2, 8 * byteLength - 1)
3818
3819 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3820 }
3821
3822 var i = 0
3823 var mul = 1
3824 var sub = value < 0 ? 1 : 0
3825 this[offset] = value & 0xFF
3826 while (++i < byteLength && (mul *= 0x100)) {
3827 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3828 }
3829
3830 return offset + byteLength
3831 }
3832
3833 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3834 value = +value
3835 offset = offset | 0
3836 if (!noAssert) {
3837 var limit = Math.pow(2, 8 * byteLength - 1)
3838
3839 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3840 }
3841
3842 var i = byteLength - 1
3843 var mul = 1
3844 var sub = value < 0 ? 1 : 0
3845 this[offset + i] = value & 0xFF
3846 while (--i >= 0 && (mul *= 0x100)) {
3847 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3848 }
3849
3850 return offset + byteLength
3851 }
3852
3853 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3854 value = +value
3855 offset = offset | 0
3856 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3857 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3858 if (value < 0) value = 0xff + value + 1
3859 this[offset] = value
3860 return offset + 1
3861 }
3862
3863 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3864 value = +value
3865 offset = offset | 0
3866 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3867 if (Buffer.TYPED_ARRAY_SUPPORT) {
3868 this[offset] = value
3869 this[offset + 1] = (value >>> 8)
3870 } else {
3871 objectWriteUInt16(this, value, offset, true)
3872 }
3873 return offset + 2
3874 }
3875
3876 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3877 value = +value
3878 offset = offset | 0
3879 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3880 if (Buffer.TYPED_ARRAY_SUPPORT) {
3881 this[offset] = (value >>> 8)
3882 this[offset + 1] = value
3883 } else {
3884 objectWriteUInt16(this, value, offset, false)
3885 }
3886 return offset + 2
3887 }
3888
3889 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3890 value = +value
3891 offset = offset | 0
3892 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3893 if (Buffer.TYPED_ARRAY_SUPPORT) {
3894 this[offset] = value
3895 this[offset + 1] = (value >>> 8)
3896 this[offset + 2] = (value >>> 16)
3897 this[offset + 3] = (value >>> 24)
3898 } else {
3899 objectWriteUInt32(this, value, offset, true)
3900 }
3901 return offset + 4
3902 }
3903
3904 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3905 value = +value
3906 offset = offset | 0
3907 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3908 if (value < 0) value = 0xffffffff + value + 1
3909 if (Buffer.TYPED_ARRAY_SUPPORT) {
3910 this[offset] = (value >>> 24)
3911 this[offset + 1] = (value >>> 16)
3912 this[offset + 2] = (value >>> 8)
3913 this[offset + 3] = value
3914 } else {
3915 objectWriteUInt32(this, value, offset, false)
3916 }
3917 return offset + 4
3918 }
3919
3920 function checkIEEE754 (buf, value, offset, ext, max, min) {
3921 if (value > max || value < min) throw new RangeError('value is out of bounds')
3922 if (offset + ext > buf.length) throw new RangeError('index out of range')
3923 if (offset < 0) throw new RangeError('index out of range')
3924 }
3925
3926 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3927 if (!noAssert) {
3928 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3929 }
3930 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3931 return offset + 4
3932 }
3933
3934 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3935 return writeFloat(this, value, offset, true, noAssert)
3936 }
3937
3938 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3939 return writeFloat(this, value, offset, false, noAssert)
3940 }
3941
3942 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3943 if (!noAssert) {
3944 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3945 }
3946 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3947 return offset + 8
3948 }
3949
3950 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3951 return writeDouble(this, value, offset, true, noAssert)
3952 }
3953
3954 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3955 return writeDouble(this, value, offset, false, noAssert)
3956 }
3957
3958 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3959 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3960 if (!start) start = 0
3961 if (!end && end !== 0) end = this.length
3962 if (targetStart >= target.length) targetStart = target.length
3963 if (!targetStart) targetStart = 0
3964 if (end > 0 && end < start) end = start
3965
3966 // Copy 0 bytes; we're done
3967 if (end === start) return 0
3968 if (target.length === 0 || this.length === 0) return 0
3969
3970 // Fatal error conditions
3971 if (targetStart < 0) {
3972 throw new RangeError('targetStart out of bounds')
3973 }
3974 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3975 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3976
3977 // Are we oob?
3978 if (end > this.length) end = this.length
3979 if (target.length - targetStart < end - start) {
3980 end = target.length - targetStart + start
3981 }
3982
3983 var len = end - start
3984 var i
3985
3986 if (this === target && start < targetStart && targetStart < end) {
3987 // descending copy from end
3988 for (i = len - 1; i >= 0; i--) {
3989 target[i + targetStart] = this[i + start]
3990 }
3991 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3992 // ascending copy from start
3993 for (i = 0; i < len; i++) {
3994 target[i + targetStart] = this[i + start]
3995 }
3996 } else {
3997 target._set(this.subarray(start, start + len), targetStart)
3998 }
3999
4000 return len
4001 }
4002
4003 // fill(value, start=0, end=buffer.length)
4004 Buffer.prototype.fill = function fill (value, start, end) {
4005 if (!value) value = 0
4006 if (!start) start = 0
4007 if (!end) end = this.length
4008
4009 if (end < start) throw new RangeError('end < start')
4010
4011 // Fill 0 bytes; we're done
4012 if (end === start) return
4013 if (this.length === 0) return
4014
4015 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
4016 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
4017
4018 var i
4019 if (typeof value === 'number') {
4020 for (i = start; i < end; i++) {
4021 this[i] = value
4022 }
4023 } else {
4024 var bytes = utf8ToBytes(value.toString())
4025 var len = bytes.length
4026 for (i = start; i < end; i++) {
4027 this[i] = bytes[i % len]
4028 }
4029 }
4030
4031 return this
4032 }
4033
4034 /**
4035 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4036 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4037 */
4038 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4039 if (typeof Uint8Array !== 'undefined') {
4040 if (Buffer.TYPED_ARRAY_SUPPORT) {
4041 return (new Buffer(this)).buffer
4042 } else {
4043 var buf = new Uint8Array(this.length)
4044 for (var i = 0, len = buf.length; i < len; i += 1) {
4045 buf[i] = this[i]
4046 }
4047 return buf.buffer
4048 }
4049 } else {
4050 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
4051 }
4052 }
4053
4054 // HELPER FUNCTIONS
4055 // ================
4056
4057 var BP = Buffer.prototype
4058
4059 /**
4060 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4061 */
4062 Buffer._augment = function _augment (arr) {
4063 arr.constructor = Buffer
4064 arr._isBuffer = true
4065
4066 // save reference to original Uint8Array set method before overwriting
4067 arr._set = arr.set
4068
4069 // deprecated
4070 arr.get = BP.get
4071 arr.set = BP.set
4072
4073 arr.write = BP.write
4074 arr.toString = BP.toString
4075 arr.toLocaleString = BP.toString
4076 arr.toJSON = BP.toJSON
4077 arr.equals = BP.equals
4078 arr.compare = BP.compare
4079 arr.indexOf = BP.indexOf
4080 arr.copy = BP.copy
4081 arr.slice = BP.slice
4082 arr.readUIntLE = BP.readUIntLE
4083 arr.readUIntBE = BP.readUIntBE
4084 arr.readUInt8 = BP.readUInt8
4085 arr.readUInt16LE = BP.readUInt16LE
4086 arr.readUInt16BE = BP.readUInt16BE
4087 arr.readUInt32LE = BP.readUInt32LE
4088 arr.readUInt32BE = BP.readUInt32BE
4089 arr.readIntLE = BP.readIntLE
4090 arr.readIntBE = BP.readIntBE
4091 arr.readInt8 = BP.readInt8
4092 arr.readInt16LE = BP.readInt16LE
4093 arr.readInt16BE = BP.readInt16BE
4094 arr.readInt32LE = BP.readInt32LE
4095 arr.readInt32BE = BP.readInt32BE
4096 arr.readFloatLE = BP.readFloatLE
4097 arr.readFloatBE = BP.readFloatBE
4098 arr.readDoubleLE = BP.readDoubleLE
4099 arr.readDoubleBE = BP.readDoubleBE
4100 arr.writeUInt8 = BP.writeUInt8
4101 arr.writeUIntLE = BP.writeUIntLE
4102 arr.writeUIntBE = BP.writeUIntBE
4103 arr.writeUInt16LE = BP.writeUInt16LE
4104 arr.writeUInt16BE = BP.writeUInt16BE
4105 arr.writeUInt32LE = BP.writeUInt32LE
4106 arr.writeUInt32BE = BP.writeUInt32BE
4107 arr.writeIntLE = BP.writeIntLE
4108 arr.writeIntBE = BP.writeIntBE
4109 arr.writeInt8 = BP.writeInt8
4110 arr.writeInt16LE = BP.writeInt16LE
4111 arr.writeInt16BE = BP.writeInt16BE
4112 arr.writeInt32LE = BP.writeInt32LE
4113 arr.writeInt32BE = BP.writeInt32BE
4114 arr.writeFloatLE = BP.writeFloatLE
4115 arr.writeFloatBE = BP.writeFloatBE
4116 arr.writeDoubleLE = BP.writeDoubleLE
4117 arr.writeDoubleBE = BP.writeDoubleBE
4118 arr.fill = BP.fill
4119 arr.inspect = BP.inspect
4120 arr.toArrayBuffer = BP.toArrayBuffer
4121
4122 return arr
4123 }
4124
4125 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
4126
4127 function base64clean (str) {
4128 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4129 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4130 // Node converts strings with length < 2 to ''
4131 if (str.length < 2) return ''
4132 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4133 while (str.length % 4 !== 0) {
4134 str = str + '='
4135 }
4136 return str
4137 }
4138
4139 function stringtrim (str) {
4140 if (str.trim) return str.trim()
4141 return str.replace(/^\s+|\s+$/g, '')
4142 }
4143
4144 function toHex (n) {
4145 if (n < 16) return '0' + n.toString(16)
4146 return n.toString(16)
4147 }
4148
4149 function utf8ToBytes (string, units) {
4150 units = units || Infinity
4151 var codePoint
4152 var length = string.length
4153 var leadSurrogate = null
4154 var bytes = []
4155
4156 for (var i = 0; i < length; i++) {
4157 codePoint = string.charCodeAt(i)
4158
4159 // is surrogate component
4160 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4161 // last char was a lead
4162 if (!leadSurrogate) {
4163 // no lead yet
4164 if (codePoint > 0xDBFF) {
4165 // unexpected trail
4166 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4167 continue
4168
4169 } else if (i + 1 === length) {
4170 // unpaired lead
4171 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4172 continue
4173 }
4174
4175 // valid lead
4176 leadSurrogate = codePoint
4177
4178 continue
4179 }
4180
4181 // 2 leads in a row
4182 if (codePoint < 0xDC00) {
4183 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4184 leadSurrogate = codePoint
4185 continue
4186 }
4187
4188 // valid surrogate pair
4189 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4190
4191 } else if (leadSurrogate) {
4192 // valid bmp char, but last char was a lead
4193 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4194 }
4195
4196 leadSurrogate = null
4197
4198 // encode utf8
4199 if (codePoint < 0x80) {
4200 if ((units -= 1) < 0) break
4201 bytes.push(codePoint)
4202 } else if (codePoint < 0x800) {
4203 if ((units -= 2) < 0) break
4204 bytes.push(
4205 codePoint >> 0x6 | 0xC0,
4206 codePoint & 0x3F | 0x80
4207 )
4208 } else if (codePoint < 0x10000) {
4209 if ((units -= 3) < 0) break
4210 bytes.push(
4211 codePoint >> 0xC | 0xE0,
4212 codePoint >> 0x6 & 0x3F | 0x80,
4213 codePoint & 0x3F | 0x80
4214 )
4215 } else if (codePoint < 0x110000) {
4216 if ((units -= 4) < 0) break
4217 bytes.push(
4218 codePoint >> 0x12 | 0xF0,
4219 codePoint >> 0xC & 0x3F | 0x80,
4220 codePoint >> 0x6 & 0x3F | 0x80,
4221 codePoint & 0x3F | 0x80
4222 )
4223 } else {
4224 throw new Error('Invalid code point')
4225 }
4226 }
4227
4228 return bytes
4229 }
4230
4231 function asciiToBytes (str) {
4232 var byteArray = []
4233 for (var i = 0; i < str.length; i++) {
4234 // Node's code seems to be doing this and not & 0x7F..
4235 byteArray.push(str.charCodeAt(i) & 0xFF)
4236 }
4237 return byteArray
4238 }
4239
4240 function utf16leToBytes (str, units) {
4241 var c, hi, lo
4242 var byteArray = []
4243 for (var i = 0; i < str.length; i++) {
4244 if ((units -= 2) < 0) break
4245
4246 c = str.charCodeAt(i)
4247 hi = c >> 8
4248 lo = c % 256
4249 byteArray.push(lo)
4250 byteArray.push(hi)
4251 }
4252
4253 return byteArray
4254 }
4255
4256 function base64ToBytes (str) {
4257 return base64.toByteArray(base64clean(str))
4258 }
4259
4260 function blitBuffer (src, dst, offset, length) {
4261 for (var i = 0; i < length; i++) {
4262 if ((i + offset >= dst.length) || (i >= src.length)) break
4263 dst[i + offset] = src[i]
4264 }
4265 return i
4266 }
4267
4268 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4269 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4270
4271 ;(function (exports) {
4272 'use strict';
4273
4274 var Arr = (typeof Uint8Array !== 'undefined')
4275 ? Uint8Array
4276 : Array
4277
4278 var PLUS = '+'.charCodeAt(0)
4279 var SLASH = '/'.charCodeAt(0)
4280 var NUMBER = '0'.charCodeAt(0)
4281 var LOWER = 'a'.charCodeAt(0)
4282 var UPPER = 'A'.charCodeAt(0)
4283 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4284 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4285
4286 function decode (elt) {
4287 var code = elt.charCodeAt(0)
4288 if (code === PLUS ||
4289 code === PLUS_URL_SAFE)
4290 return 62 // '+'
4291 if (code === SLASH ||
4292 code === SLASH_URL_SAFE)
4293 return 63 // '/'
4294 if (code < NUMBER)
4295 return -1 //no match
4296 if (code < NUMBER + 10)
4297 return code - NUMBER + 26 + 26
4298 if (code < UPPER + 26)
4299 return code - UPPER
4300 if (code < LOWER + 26)
4301 return code - LOWER + 26
4302 }
4303
4304 function b64ToByteArray (b64) {
4305 var i, j, l, tmp, placeHolders, arr
4306
4307 if (b64.length % 4 > 0) {
4308 throw new Error('Invalid string. Length must be a multiple of 4')
4309 }
4310
4311 // the number of equal signs (place holders)
4312 // if there are two placeholders, than the two characters before it
4313 // represent one byte
4314 // if there is only one, then the three characters before it represent 2 bytes
4315 // this is just a cheap hack to not do indexOf twice
4316 var len = b64.length
4317 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4318
4319 // base64 is 4/3 + up to two characters of the original data
4320 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4321
4322 // if there are placeholders, only get up to the last complete 4 chars
4323 l = placeHolders > 0 ? b64.length - 4 : b64.length
4324
4325 var L = 0
4326
4327 function push (v) {
4328 arr[L++] = v
4329 }
4330
4331 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4332 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4333 push((tmp & 0xFF0000) >> 16)
4334 push((tmp & 0xFF00) >> 8)
4335 push(tmp & 0xFF)
4336 }
4337
4338 if (placeHolders === 2) {
4339 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4340 push(tmp & 0xFF)
4341 } else if (placeHolders === 1) {
4342 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4343 push((tmp >> 8) & 0xFF)
4344 push(tmp & 0xFF)
4345 }
4346
4347 return arr
4348 }
4349
4350 function uint8ToBase64 (uint8) {
4351 var i,
4352 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4353 output = "",
4354 temp, length
4355
4356 function encode (num) {
4357 return lookup.charAt(num)
4358 }
4359
4360 function tripletToBase64 (num) {
4361 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4362 }
4363
4364 // go through the array every three bytes, we'll deal with trailing stuff later
4365 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4366 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4367 output += tripletToBase64(temp)
4368 }
4369
4370 // pad the end with zeros, but make sure to not forget the extra bytes
4371 switch (extraBytes) {
4372 case 1:
4373 temp = uint8[uint8.length - 1]
4374 output += encode(temp >> 2)
4375 output += encode((temp << 4) & 0x3F)
4376 output += '=='
4377 break
4378 case 2:
4379 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4380 output += encode(temp >> 10)
4381 output += encode((temp >> 4) & 0x3F)
4382 output += encode((temp << 2) & 0x3F)
4383 output += '='
4384 break
4385 }
4386
4387 return output
4388 }
4389
4390 exports.toByteArray = b64ToByteArray
4391 exports.fromByteArray = uint8ToBase64
4392 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4393
4394 },{}],9:[function(require,module,exports){
4395 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4396 var e, m
4397 var eLen = nBytes * 8 - mLen - 1
4398 var eMax = (1 << eLen) - 1
4399 var eBias = eMax >> 1
4400 var nBits = -7
4401 var i = isLE ? (nBytes - 1) : 0
4402 var d = isLE ? -1 : 1
4403 var s = buffer[offset + i]
4404
4405 i += d
4406
4407 e = s & ((1 << (-nBits)) - 1)
4408 s >>= (-nBits)
4409 nBits += eLen
4410 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4411
4412 m = e & ((1 << (-nBits)) - 1)
4413 e >>= (-nBits)
4414 nBits += mLen
4415 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4416
4417 if (e === 0) {
4418 e = 1 - eBias
4419 } else if (e === eMax) {
4420 return m ? NaN : ((s ? -1 : 1) * Infinity)
4421 } else {
4422 m = m + Math.pow(2, mLen)
4423 e = e - eBias
4424 }
4425 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4426 }
4427
4428 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4429 var e, m, c
4430 var eLen = nBytes * 8 - mLen - 1
4431 var eMax = (1 << eLen) - 1
4432 var eBias = eMax >> 1
4433 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4434 var i = isLE ? 0 : (nBytes - 1)
4435 var d = isLE ? 1 : -1
4436 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4437
4438 value = Math.abs(value)
4439
4440 if (isNaN(value) || value === Infinity) {
4441 m = isNaN(value) ? 1 : 0
4442 e = eMax
4443 } else {
4444 e = Math.floor(Math.log(value) / Math.LN2)
4445 if (value * (c = Math.pow(2, -e)) < 1) {
4446 e--
4447 c *= 2
4448 }
4449 if (e + eBias >= 1) {
4450 value += rt / c
4451 } else {
4452 value += rt * Math.pow(2, 1 - eBias)
4453 }
4454 if (value * c >= 2) {
4455 e++
4456 c /= 2
4457 }
4458
4459 if (e + eBias >= eMax) {
4460 m = 0
4461 e = eMax
4462 } else if (e + eBias >= 1) {
4463 m = (value * c - 1) * Math.pow(2, mLen)
4464 e = e + eBias
4465 } else {
4466 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4467 e = 0
4468 }
4469 }
4470
4471 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4472
4473 e = (e << mLen) | m
4474 eLen += mLen
4475 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4476
4477 buffer[offset + i - d] |= s * 128
4478 }
4479
4480 },{}],10:[function(require,module,exports){
4481
4482 /**
4483 * isArray
4484 */
4485
4486 var isArray = Array.isArray;
4487
4488 /**
4489 * toString
4490 */
4491
4492 var str = Object.prototype.toString;
4493
4494 /**
4495 * Whether or not the given `val`
4496 * is an array.
4497 *
4498 * example:
4499 *
4500 * isArray([]);
4501 * // > true
4502 * isArray(arguments);
4503 * // > false
4504 * isArray('');
4505 * // > false
4506 *
4507 * @param {mixed} val
4508 * @return {bool}
4509 */
4510
4511 module.exports = isArray || function (val) {
4512 return !! val && '[object Array]' == str.call(val);
4513 };
4514
4515 },{}],11:[function(require,module,exports){
4516 // Copyright Joyent, Inc. and other Node contributors.
4517 //
4518 // Permission is hereby granted, free of charge, to any person obtaining a
4519 // copy of this software and associated documentation files (the
4520 // "Software"), to deal in the Software without restriction, including
4521 // without limitation the rights to use, copy, modify, merge, publish,
4522 // distribute, sublicense, and/or sell copies of the Software, and to permit
4523 // persons to whom the Software is furnished to do so, subject to the
4524 // following conditions:
4525 //
4526 // The above copyright notice and this permission notice shall be included
4527 // in all copies or substantial portions of the Software.
4528 //
4529 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4530 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4531 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4532 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4533 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4534 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4535 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4536
4537 function EventEmitter() {
4538 this._events = this._events || {};
4539 this._maxListeners = this._maxListeners || undefined;
4540 }
4541 module.exports = EventEmitter;
4542
4543 // Backwards-compat with node 0.10.x
4544 EventEmitter.EventEmitter = EventEmitter;
4545
4546 EventEmitter.prototype._events = undefined;
4547 EventEmitter.prototype._maxListeners = undefined;
4548
4549 // By default EventEmitters will print a warning if more than 10 listeners are
4550 // added to it. This is a useful default which helps finding memory leaks.
4551 EventEmitter.defaultMaxListeners = 10;
4552
4553 // Obviously not all Emitters should be limited to 10. This function allows
4554 // that to be increased. Set to zero for unlimited.
4555 EventEmitter.prototype.setMaxListeners = function(n) {
4556 if (!isNumber(n) || n < 0 || isNaN(n))
4557 throw TypeError('n must be a positive number');
4558 this._maxListeners = n;
4559 return this;
4560 };
4561
4562 EventEmitter.prototype.emit = function(type) {
4563 var er, handler, len, args, i, listeners;
4564
4565 if (!this._events)
4566 this._events = {};
4567
4568 // If there is no 'error' event listener then throw.
4569 if (type === 'error') {
4570 if (!this._events.error ||
4571 (isObject(this._events.error) && !this._events.error.length)) {
4572 er = arguments[1];
4573 if (er instanceof Error) {
4574 throw er; // Unhandled 'error' event
4575 }
4576 throw TypeError('Uncaught, unspecified "error" event.');
4577 }
4578 }
4579
4580 handler = this._events[type];
4581
4582 if (isUndefined(handler))
4583 return false;
4584
4585 if (isFunction(handler)) {
4586 switch (arguments.length) {
4587 // fast cases
4588 case 1:
4589 handler.call(this);
4590 break;
4591 case 2:
4592 handler.call(this, arguments[1]);
4593 break;
4594 case 3:
4595 handler.call(this, arguments[1], arguments[2]);
4596 break;
4597 // slower
4598 default:
4599 len = arguments.length;
4600 args = new Array(len - 1);
4601 for (i = 1; i < len; i++)
4602 args[i - 1] = arguments[i];
4603 handler.apply(this, args);
4604 }
4605 } else if (isObject(handler)) {
4606 len = arguments.length;
4607 args = new Array(len - 1);
4608 for (i = 1; i < len; i++)
4609 args[i - 1] = arguments[i];
4610
4611 listeners = handler.slice();
4612 len = listeners.length;
4613 for (i = 0; i < len; i++)
4614 listeners[i].apply(this, args);
4615 }
4616
4617 return true;
4618 };
4619
4620 EventEmitter.prototype.addListener = function(type, listener) {
4621 var m;
4622
4623 if (!isFunction(listener))
4624 throw TypeError('listener must be a function');
4625
4626 if (!this._events)
4627 this._events = {};
4628
4629 // To avoid recursion in the case that type === "newListener"! Before
4630 // adding it to the listeners, first emit "newListener".
4631 if (this._events.newListener)
4632 this.emit('newListener', type,
4633 isFunction(listener.listener) ?
4634 listener.listener : listener);
4635
4636 if (!this._events[type])
4637 // Optimize the case of one listener. Don't need the extra array object.
4638 this._events[type] = listener;
4639 else if (isObject(this._events[type]))
4640 // If we've already got an array, just append.
4641 this._events[type].push(listener);
4642 else
4643 // Adding the second element, need to change to array.
4644 this._events[type] = [this._events[type], listener];
4645
4646 // Check for listener leak
4647 if (isObject(this._events[type]) && !this._events[type].warned) {
4648 var m;
4649 if (!isUndefined(this._maxListeners)) {
4650 m = this._maxListeners;
4651 } else {
4652 m = EventEmitter.defaultMaxListeners;
4653 }
4654
4655 if (m && m > 0 && this._events[type].length > m) {
4656 this._events[type].warned = true;
4657 console.error('(node) warning: possible EventEmitter memory ' +
4658 'leak detected. %d listeners added. ' +
4659 'Use emitter.setMaxListeners() to increase limit.',
4660 this._events[type].length);
4661 if (typeof console.trace === 'function') {
4662 // not supported in IE 10
4663 console.trace();
4664 }
4665 }
4666 }
4667
4668 return this;
4669 };
4670
4671 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4672
4673 EventEmitter.prototype.once = function(type, listener) {
4674 if (!isFunction(listener))
4675 throw TypeError('listener must be a function');
4676
4677 var fired = false;
4678
4679 function g() {
4680 this.removeListener(type, g);
4681
4682 if (!fired) {
4683 fired = true;
4684 listener.apply(this, arguments);
4685 }
4686 }
4687
4688 g.listener = listener;
4689 this.on(type, g);
4690
4691 return this;
4692 };
4693
4694 // emits a 'removeListener' event iff the listener was removed
4695 EventEmitter.prototype.removeListener = function(type, listener) {
4696 var list, position, length, i;
4697
4698 if (!isFunction(listener))
4699 throw TypeError('listener must be a function');
4700
4701 if (!this._events || !this._events[type])
4702 return this;
4703
4704 list = this._events[type];
4705 length = list.length;
4706 position = -1;
4707
4708 if (list === listener ||
4709 (isFunction(list.listener) && list.listener === listener)) {
4710 delete this._events[type];
4711 if (this._events.removeListener)
4712 this.emit('removeListener', type, listener);
4713
4714 } else if (isObject(list)) {
4715 for (i = length; i-- > 0;) {
4716 if (list[i] === listener ||
4717 (list[i].listener && list[i].listener === listener)) {
4718 position = i;
4719 break;
4720 }
4721 }
4722
4723 if (position < 0)
4724 return this;
4725
4726 if (list.length === 1) {
4727 list.length = 0;
4728 delete this._events[type];
4729 } else {
4730 list.splice(position, 1);
4731 }
4732
4733 if (this._events.removeListener)
4734 this.emit('removeListener', type, listener);
4735 }
4736
4737 return this;
4738 };
4739
4740 EventEmitter.prototype.removeAllListeners = function(type) {
4741 var key, listeners;
4742
4743 if (!this._events)
4744 return this;
4745
4746 // not listening for removeListener, no need to emit
4747 if (!this._events.removeListener) {
4748 if (arguments.length === 0)
4749 this._events = {};
4750 else if (this._events[type])
4751 delete this._events[type];
4752 return this;
4753 }
4754
4755 // emit removeListener for all listeners on all events
4756 if (arguments.length === 0) {
4757 for (key in this._events) {
4758 if (key === 'removeListener') continue;
4759 this.removeAllListeners(key);
4760 }
4761 this.removeAllListeners('removeListener');
4762 this._events = {};
4763 return this;
4764 }
4765
4766 listeners = this._events[type];
4767
4768 if (isFunction(listeners)) {
4769 this.removeListener(type, listeners);
4770 } else {
4771 // LIFO order
4772 while (listeners.length)
4773 this.removeListener(type, listeners[listeners.length - 1]);
4774 }
4775 delete this._events[type];
4776
4777 return this;
4778 };
4779
4780 EventEmitter.prototype.listeners = function(type) {
4781 var ret;
4782 if (!this._events || !this._events[type])
4783 ret = [];
4784 else if (isFunction(this._events[type]))
4785 ret = [this._events[type]];
4786 else
4787 ret = this._events[type].slice();
4788 return ret;
4789 };
4790
4791 EventEmitter.listenerCount = function(emitter, type) {
4792 var ret;
4793 if (!emitter._events || !emitter._events[type])
4794 ret = 0;
4795 else if (isFunction(emitter._events[type]))
4796 ret = 1;
4797 else
4798 ret = emitter._events[type].length;
4799 return ret;
4800 };
4801
4802 function isFunction(arg) {
4803 return typeof arg === 'function';
4804 }
4805
4806 function isNumber(arg) {
4807 return typeof arg === 'number';
4808 }
4809
4810 function isObject(arg) {
4811 return typeof arg === 'object' && arg !== null;
4812 }
4813
4814 function isUndefined(arg) {
4815 return arg === void 0;
4816 }
4817
4818 },{}],12:[function(require,module,exports){
4819 if (typeof Object.create === 'function') {
4820 // implementation from standard node.js 'util' module
4821 module.exports = function inherits(ctor, superCtor) {
4822 ctor.super_ = superCtor
4823 ctor.prototype = Object.create(superCtor.prototype, {
4824 constructor: {
4825 value: ctor,
4826 enumerable: false,
4827 writable: true,
4828 configurable: true
4829 }
4830 });
4831 };
4832 } else {
4833 // old school shim for old browsers
4834 module.exports = function inherits(ctor, superCtor) {
4835 ctor.super_ = superCtor
4836 var TempCtor = function () {}
4837 TempCtor.prototype = superCtor.prototype
4838 ctor.prototype = new TempCtor()
4839 ctor.prototype.constructor = ctor
4840 }
4841 }
4842
4843 },{}],13:[function(require,module,exports){
4844 module.exports = Array.isArray || function (arr) {
4845 return Object.prototype.toString.call(arr) == '[object Array]';
4846 };
4847
4848 },{}],14:[function(require,module,exports){
4849 // shim for using process in browser
4850
4851 var process = module.exports = {};
4852 var queue = [];
4853 var draining = false;
4854 var currentQueue;
4855 var queueIndex = -1;
4856
4857 function cleanUpNextTick() {
4858 draining = false;
4859 if (currentQueue.length) {
4860 queue = currentQueue.concat(queue);
4861 } else {
4862 queueIndex = -1;
4863 }
4864 if (queue.length) {
4865 drainQueue();
4866 }
4867 }
4868
4869 function drainQueue() {
4870 if (draining) {
4871 return;
4872 }
4873 var timeout = setTimeout(cleanUpNextTick);
4874 draining = true;
4875
4876 var len = queue.length;
4877 while(len) {
4878 currentQueue = queue;
4879 queue = [];
4880 while (++queueIndex < len) {
4881 currentQueue[queueIndex].run();
4882 }
4883 queueIndex = -1;
4884 len = queue.length;
4885 }
4886 currentQueue = null;
4887 draining = false;
4888 clearTimeout(timeout);
4889 }
4890
4891 process.nextTick = function (fun) {
4892 var args = new Array(arguments.length - 1);
4893 if (arguments.length > 1) {
4894 for (var i = 1; i < arguments.length; i++) {
4895 args[i - 1] = arguments[i];
4896 }
4897 }
4898 queue.push(new Item(fun, args));
4899 if (queue.length === 1 && !draining) {
4900 setTimeout(drainQueue, 0);
4901 }
4902 };
4903
4904 // v8 likes predictible objects
4905 function Item(fun, array) {
4906 this.fun = fun;
4907 this.array = array;
4908 }
4909 Item.prototype.run = function () {
4910 this.fun.apply(null, this.array);
4911 };
4912 process.title = 'browser';
4913 process.browser = true;
4914 process.env = {};
4915 process.argv = [];
4916 process.version = ''; // empty string to avoid regexp issues
4917 process.versions = {};
4918
4919 function noop() {}
4920
4921 process.on = noop;
4922 process.addListener = noop;
4923 process.once = noop;
4924 process.off = noop;
4925 process.removeListener = noop;
4926 process.removeAllListeners = noop;
4927 process.emit = noop;
4928
4929 process.binding = function (name) {
4930 throw new Error('process.binding is not supported');
4931 };
4932
4933 // TODO(shtylman)
4934 process.cwd = function () { return '/' };
4935 process.chdir = function (dir) {
4936 throw new Error('process.chdir is not supported');
4937 };
4938 process.umask = function() { return 0; };
4939
4940 },{}],15:[function(require,module,exports){
4941 module.exports = require("./lib/_stream_duplex.js")
4942
4943 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4944 (function (process){
4945 // Copyright Joyent, Inc. and other Node contributors.
4946 //
4947 // Permission is hereby granted, free of charge, to any person obtaining a
4948 // copy of this software and associated documentation files (the
4949 // "Software"), to deal in the Software without restriction, including
4950 // without limitation the rights to use, copy, modify, merge, publish,
4951 // distribute, sublicense, and/or sell copies of the Software, and to permit
4952 // persons to whom the Software is furnished to do so, subject to the
4953 // following conditions:
4954 //
4955 // The above copyright notice and this permission notice shall be included
4956 // in all copies or substantial portions of the Software.
4957 //
4958 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4959 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4960 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4961 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4962 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4963 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4964 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4965
4966 // a duplex stream is just a stream that is both readable and writable.
4967 // Since JS doesn't have multiple prototypal inheritance, this class
4968 // prototypally inherits from Readable, and then parasitically from
4969 // Writable.
4970
4971 module.exports = Duplex;
4972
4973 /*<replacement>*/
4974 var objectKeys = Object.keys || function (obj) {
4975 var keys = [];
4976 for (var key in obj) keys.push(key);
4977 return keys;
4978 }
4979 /*</replacement>*/
4980
4981
4982 /*<replacement>*/
4983 var util = require('core-util-is');
4984 util.inherits = require('inherits');
4985 /*</replacement>*/
4986
4987 var Readable = require('./_stream_readable');
4988 var Writable = require('./_stream_writable');
4989
4990 util.inherits(Duplex, Readable);
4991
4992 forEach(objectKeys(Writable.prototype), function(method) {
4993 if (!Duplex.prototype[method])
4994 Duplex.prototype[method] = Writable.prototype[method];
4995 });
4996
4997 function Duplex(options) {
4998 if (!(this instanceof Duplex))
4999 return new Duplex(options);
5000
5001 Readable.call(this, options);
5002 Writable.call(this, options);
5003
5004 if (options && options.readable === false)
5005 this.readable = false;
5006
5007 if (options && options.writable === false)
5008 this.writable = false;
5009
5010 this.allowHalfOpen = true;
5011 if (options && options.allowHalfOpen === false)
5012 this.allowHalfOpen = false;
5013
5014 this.once('end', onend);
5015 }
5016
5017 // the no-half-open enforcer
5018 function onend() {
5019 // if we allow half-open state, or if the writable side ended,
5020 // then we're ok.
5021 if (this.allowHalfOpen || this._writableState.ended)
5022 return;
5023
5024 // no more data can be written.
5025 // But allow more writes to happen in this tick.
5026 process.nextTick(this.end.bind(this));
5027 }
5028
5029 function forEach (xs, f) {
5030 for (var i = 0, l = xs.length; i < l; i++) {
5031 f(xs[i], i);
5032 }
5033 }
5034
5035 }).call(this,require('_process'))
5036 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5037 // Copyright Joyent, Inc. and other Node contributors.
5038 //
5039 // Permission is hereby granted, free of charge, to any person obtaining a
5040 // copy of this software and associated documentation files (the
5041 // "Software"), to deal in the Software without restriction, including
5042 // without limitation the rights to use, copy, modify, merge, publish,
5043 // distribute, sublicense, and/or sell copies of the Software, and to permit
5044 // persons to whom the Software is furnished to do so, subject to the
5045 // following conditions:
5046 //
5047 // The above copyright notice and this permission notice shall be included
5048 // in all copies or substantial portions of the Software.
5049 //
5050 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5051 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5052 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5053 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5054 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5055 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5056 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5057
5058 // a passthrough stream.
5059 // basically just the most minimal sort of Transform stream.
5060 // Every written chunk gets output as-is.
5061
5062 module.exports = PassThrough;
5063
5064 var Transform = require('./_stream_transform');
5065
5066 /*<replacement>*/
5067 var util = require('core-util-is');
5068 util.inherits = require('inherits');
5069 /*</replacement>*/
5070
5071 util.inherits(PassThrough, Transform);
5072
5073 function PassThrough(options) {
5074 if (!(this instanceof PassThrough))
5075 return new PassThrough(options);
5076
5077 Transform.call(this, options);
5078 }
5079
5080 PassThrough.prototype._transform = function(chunk, encoding, cb) {
5081 cb(null, chunk);
5082 };
5083
5084 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5085 (function (process){
5086 // Copyright Joyent, Inc. and other Node contributors.
5087 //
5088 // Permission is hereby granted, free of charge, to any person obtaining a
5089 // copy of this software and associated documentation files (the
5090 // "Software"), to deal in the Software without restriction, including
5091 // without limitation the rights to use, copy, modify, merge, publish,
5092 // distribute, sublicense, and/or sell copies of the Software, and to permit
5093 // persons to whom the Software is furnished to do so, subject to the
5094 // following conditions:
5095 //
5096 // The above copyright notice and this permission notice shall be included
5097 // in all copies or substantial portions of the Software.
5098 //
5099 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5100 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5101 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5102 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5103 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5104 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5105 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5106
5107 module.exports = Readable;
5108
5109 /*<replacement>*/
5110 var isArray = require('isarray');
5111 /*</replacement>*/
5112
5113
5114 /*<replacement>*/
5115 var Buffer = require('buffer').Buffer;
5116 /*</replacement>*/
5117
5118 Readable.ReadableState = ReadableState;
5119
5120 var EE = require('events').EventEmitter;
5121
5122 /*<replacement>*/
5123 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5124 return emitter.listeners(type).length;
5125 };
5126 /*</replacement>*/
5127
5128 var Stream = require('stream');
5129
5130 /*<replacement>*/
5131 var util = require('core-util-is');
5132 util.inherits = require('inherits');
5133 /*</replacement>*/
5134
5135 var StringDecoder;
5136
5137
5138 /*<replacement>*/
5139 var debug = require('util');
5140 if (debug && debug.debuglog) {
5141 debug = debug.debuglog('stream');
5142 } else {
5143 debug = function () {};
5144 }
5145 /*</replacement>*/
5146
5147
5148 util.inherits(Readable, Stream);
5149
5150 function ReadableState(options, stream) {
5151 var Duplex = require('./_stream_duplex');
5152
5153 options = options || {};
5154
5155 // the point at which it stops calling _read() to fill the buffer
5156 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5157 var hwm = options.highWaterMark;
5158 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5159 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5160
5161 // cast to ints.
5162 this.highWaterMark = ~~this.highWaterMark;
5163
5164 this.buffer = [];
5165 this.length = 0;
5166 this.pipes = null;
5167 this.pipesCount = 0;
5168 this.flowing = null;
5169 this.ended = false;
5170 this.endEmitted = false;
5171 this.reading = false;
5172
5173 // a flag to be able to tell if the onwrite cb is called immediately,
5174 // or on a later tick. We set this to true at first, because any
5175 // actions that shouldn't happen until "later" should generally also
5176 // not happen before the first write call.
5177 this.sync = true;
5178
5179 // whenever we return null, then we set a flag to say
5180 // that we're awaiting a 'readable' event emission.
5181 this.needReadable = false;
5182 this.emittedReadable = false;
5183 this.readableListening = false;
5184
5185
5186 // object stream flag. Used to make read(n) ignore n and to
5187 // make all the buffer merging and length checks go away
5188 this.objectMode = !!options.objectMode;
5189
5190 if (stream instanceof Duplex)
5191 this.objectMode = this.objectMode || !!options.readableObjectMode;
5192
5193 // Crypto is kind of old and crusty. Historically, its default string
5194 // encoding is 'binary' so we have to make this configurable.
5195 // Everything else in the universe uses 'utf8', though.
5196 this.defaultEncoding = options.defaultEncoding || 'utf8';
5197
5198 // when piping, we only care about 'readable' events that happen
5199 // after read()ing all the bytes and not getting any pushback.
5200 this.ranOut = false;
5201
5202 // the number of writers that are awaiting a drain event in .pipe()s
5203 this.awaitDrain = 0;
5204
5205 // if true, a maybeReadMore has been scheduled
5206 this.readingMore = false;
5207
5208 this.decoder = null;
5209 this.encoding = null;
5210 if (options.encoding) {
5211 if (!StringDecoder)
5212 StringDecoder = require('string_decoder/').StringDecoder;
5213 this.decoder = new StringDecoder(options.encoding);
5214 this.encoding = options.encoding;
5215 }
5216 }
5217
5218 function Readable(options) {
5219 var Duplex = require('./_stream_duplex');
5220
5221 if (!(this instanceof Readable))
5222 return new Readable(options);
5223
5224 this._readableState = new ReadableState(options, this);
5225
5226 // legacy
5227 this.readable = true;
5228
5229 Stream.call(this);
5230 }
5231
5232 // Manually shove something into the read() buffer.
5233 // This returns true if the highWaterMark has not been hit yet,
5234 // similar to how Writable.write() returns true if you should
5235 // write() some more.
5236 Readable.prototype.push = function(chunk, encoding) {
5237 var state = this._readableState;
5238
5239 if (util.isString(chunk) && !state.objectMode) {
5240 encoding = encoding || state.defaultEncoding;
5241 if (encoding !== state.encoding) {
5242 chunk = new Buffer(chunk, encoding);
5243 encoding = '';
5244 }
5245 }
5246
5247 return readableAddChunk(this, state, chunk, encoding, false);
5248 };
5249
5250 // Unshift should *always* be something directly out of read()
5251 Readable.prototype.unshift = function(chunk) {
5252 var state = this._readableState;
5253 return readableAddChunk(this, state, chunk, '', true);
5254 };
5255
5256 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5257 var er = chunkInvalid(state, chunk);
5258 if (er) {
5259 stream.emit('error', er);
5260 } else if (util.isNullOrUndefined(chunk)) {
5261 state.reading = false;
5262 if (!state.ended)
5263 onEofChunk(stream, state);
5264 } else if (state.objectMode || chunk && chunk.length > 0) {
5265 if (state.ended && !addToFront) {
5266 var e = new Error('stream.push() after EOF');
5267 stream.emit('error', e);
5268 } else if (state.endEmitted && addToFront) {
5269 var e = new Error('stream.unshift() after end event');
5270 stream.emit('error', e);
5271 } else {
5272 if (state.decoder && !addToFront && !encoding)
5273 chunk = state.decoder.write(chunk);
5274
5275 if (!addToFront)
5276 state.reading = false;
5277
5278 // if we want the data now, just emit it.
5279 if (state.flowing && state.length === 0 && !state.sync) {
5280 stream.emit('data', chunk);
5281 stream.read(0);
5282 } else {
5283 // update the buffer info.
5284 state.length += state.objectMode ? 1 : chunk.length;
5285 if (addToFront)
5286 state.buffer.unshift(chunk);
5287 else
5288 state.buffer.push(chunk);
5289
5290 if (state.needReadable)
5291 emitReadable(stream);
5292 }
5293
5294 maybeReadMore(stream, state);
5295 }
5296 } else if (!addToFront) {
5297 state.reading = false;
5298 }
5299
5300 return needMoreData(state);
5301 }
5302
5303
5304
5305 // if it's past the high water mark, we can push in some more.
5306 // Also, if we have no data yet, we can stand some
5307 // more bytes. This is to work around cases where hwm=0,
5308 // such as the repl. Also, if the push() triggered a
5309 // readable event, and the user called read(largeNumber) such that
5310 // needReadable was set, then we ought to push more, so that another
5311 // 'readable' event will be triggered.
5312 function needMoreData(state) {
5313 return !state.ended &&
5314 (state.needReadable ||
5315 state.length < state.highWaterMark ||
5316 state.length === 0);
5317 }
5318
5319 // backwards compatibility.
5320 Readable.prototype.setEncoding = function(enc) {
5321 if (!StringDecoder)
5322 StringDecoder = require('string_decoder/').StringDecoder;
5323 this._readableState.decoder = new StringDecoder(enc);
5324 this._readableState.encoding = enc;
5325 return this;
5326 };
5327
5328 // Don't raise the hwm > 128MB
5329 var MAX_HWM = 0x800000;
5330 function roundUpToNextPowerOf2(n) {
5331 if (n >= MAX_HWM) {
5332 n = MAX_HWM;
5333 } else {
5334 // Get the next highest power of 2
5335 n--;
5336 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5337 n++;
5338 }
5339 return n;
5340 }
5341
5342 function howMuchToRead(n, state) {
5343 if (state.length === 0 && state.ended)
5344 return 0;
5345
5346 if (state.objectMode)
5347 return n === 0 ? 0 : 1;
5348
5349 if (isNaN(n) || util.isNull(n)) {
5350 // only flow one buffer at a time
5351 if (state.flowing && state.buffer.length)
5352 return state.buffer[0].length;
5353 else
5354 return state.length;
5355 }
5356
5357 if (n <= 0)
5358 return 0;
5359
5360 // If we're asking for more than the target buffer level,
5361 // then raise the water mark. Bump up to the next highest
5362 // power of 2, to prevent increasing it excessively in tiny
5363 // amounts.
5364 if (n > state.highWaterMark)
5365 state.highWaterMark = roundUpToNextPowerOf2(n);
5366
5367 // don't have that much. return null, unless we've ended.
5368 if (n > state.length) {
5369 if (!state.ended) {
5370 state.needReadable = true;
5371 return 0;
5372 } else
5373 return state.length;
5374 }
5375
5376 return n;
5377 }
5378
5379 // you can override either this method, or the async _read(n) below.
5380 Readable.prototype.read = function(n) {
5381 debug('read', n);
5382 var state = this._readableState;
5383 var nOrig = n;
5384
5385 if (!util.isNumber(n) || n > 0)
5386 state.emittedReadable = false;
5387
5388 // if we're doing read(0) to trigger a readable event, but we
5389 // already have a bunch of data in the buffer, then just trigger
5390 // the 'readable' event and move on.
5391 if (n === 0 &&
5392 state.needReadable &&
5393 (state.length >= state.highWaterMark || state.ended)) {
5394 debug('read: emitReadable', state.length, state.ended);
5395 if (state.length === 0 && state.ended)
5396 endReadable(this);
5397 else
5398 emitReadable(this);
5399 return null;
5400 }
5401
5402 n = howMuchToRead(n, state);
5403
5404 // if we've ended, and we're now clear, then finish it up.
5405 if (n === 0 && state.ended) {
5406 if (state.length === 0)
5407 endReadable(this);
5408 return null;
5409 }
5410
5411 // All the actual chunk generation logic needs to be
5412 // *below* the call to _read. The reason is that in certain
5413 // synthetic stream cases, such as passthrough streams, _read
5414 // may be a completely synchronous operation which may change
5415 // the state of the read buffer, providing enough data when
5416 // before there was *not* enough.
5417 //
5418 // So, the steps are:
5419 // 1. Figure out what the state of things will be after we do
5420 // a read from the buffer.
5421 //
5422 // 2. If that resulting state will trigger a _read, then call _read.
5423 // Note that this may be asynchronous, or synchronous. Yes, it is
5424 // deeply ugly to write APIs this way, but that still doesn't mean
5425 // that the Readable class should behave improperly, as streams are
5426 // designed to be sync/async agnostic.
5427 // Take note if the _read call is sync or async (ie, if the read call
5428 // has returned yet), so that we know whether or not it's safe to emit
5429 // 'readable' etc.
5430 //
5431 // 3. Actually pull the requested chunks out of the buffer and return.
5432
5433 // if we need a readable event, then we need to do some reading.
5434 var doRead = state.needReadable;
5435 debug('need readable', doRead);
5436
5437 // if we currently have less than the highWaterMark, then also read some
5438 if (state.length === 0 || state.length - n < state.highWaterMark) {
5439 doRead = true;
5440 debug('length less than watermark', doRead);
5441 }
5442
5443 // however, if we've ended, then there's no point, and if we're already
5444 // reading, then it's unnecessary.
5445 if (state.ended || state.reading) {
5446 doRead = false;
5447 debug('reading or ended', doRead);
5448 }
5449
5450 if (doRead) {
5451 debug('do read');
5452 state.reading = true;
5453 state.sync = true;
5454 // if the length is currently zero, then we *need* a readable event.
5455 if (state.length === 0)
5456 state.needReadable = true;
5457 // call internal read method
5458 this._read(state.highWaterMark);
5459 state.sync = false;
5460 }
5461
5462 // If _read pushed data synchronously, then `reading` will be false,
5463 // and we need to re-evaluate how much data we can return to the user.
5464 if (doRead && !state.reading)
5465 n = howMuchToRead(nOrig, state);
5466
5467 var ret;
5468 if (n > 0)
5469 ret = fromList(n, state);
5470 else
5471 ret = null;
5472
5473 if (util.isNull(ret)) {
5474 state.needReadable = true;
5475 n = 0;
5476 }
5477
5478 state.length -= n;
5479
5480 // If we have nothing in the buffer, then we want to know
5481 // as soon as we *do* get something into the buffer.
5482 if (state.length === 0 && !state.ended)
5483 state.needReadable = true;
5484
5485 // If we tried to read() past the EOF, then emit end on the next tick.
5486 if (nOrig !== n && state.ended && state.length === 0)
5487 endReadable(this);
5488
5489 if (!util.isNull(ret))
5490 this.emit('data', ret);
5491
5492 return ret;
5493 };
5494
5495 function chunkInvalid(state, chunk) {
5496 var er = null;
5497 if (!util.isBuffer(chunk) &&
5498 !util.isString(chunk) &&
5499 !util.isNullOrUndefined(chunk) &&
5500 !state.objectMode) {
5501 er = new TypeError('Invalid non-string/buffer chunk');
5502 }
5503 return er;
5504 }
5505
5506
5507 function onEofChunk(stream, state) {
5508 if (state.decoder && !state.ended) {
5509 var chunk = state.decoder.end();
5510 if (chunk && chunk.length) {
5511 state.buffer.push(chunk);
5512 state.length += state.objectMode ? 1 : chunk.length;
5513 }
5514 }
5515 state.ended = true;
5516
5517 // emit 'readable' now to make sure it gets picked up.
5518 emitReadable(stream);
5519 }
5520
5521 // Don't emit readable right away in sync mode, because this can trigger
5522 // another read() call => stack overflow. This way, it might trigger
5523 // a nextTick recursion warning, but that's not so bad.
5524 function emitReadable(stream) {
5525 var state = stream._readableState;
5526 state.needReadable = false;
5527 if (!state.emittedReadable) {
5528 debug('emitReadable', state.flowing);
5529 state.emittedReadable = true;
5530 if (state.sync)
5531 process.nextTick(function() {
5532 emitReadable_(stream);
5533 });
5534 else
5535 emitReadable_(stream);
5536 }
5537 }
5538
5539 function emitReadable_(stream) {
5540 debug('emit readable');
5541 stream.emit('readable');
5542 flow(stream);
5543 }
5544
5545
5546 // at this point, the user has presumably seen the 'readable' event,
5547 // and called read() to consume some data. that may have triggered
5548 // in turn another _read(n) call, in which case reading = true if
5549 // it's in progress.
5550 // However, if we're not ended, or reading, and the length < hwm,
5551 // then go ahead and try to read some more preemptively.
5552 function maybeReadMore(stream, state) {
5553 if (!state.readingMore) {
5554 state.readingMore = true;
5555 process.nextTick(function() {
5556 maybeReadMore_(stream, state);
5557 });
5558 }
5559 }
5560
5561 function maybeReadMore_(stream, state) {
5562 var len = state.length;
5563 while (!state.reading && !state.flowing && !state.ended &&
5564 state.length < state.highWaterMark) {
5565 debug('maybeReadMore read 0');
5566 stream.read(0);
5567 if (len === state.length)
5568 // didn't get any data, stop spinning.
5569 break;
5570 else
5571 len = state.length;
5572 }
5573 state.readingMore = false;
5574 }
5575
5576 // abstract method. to be overridden in specific implementation classes.
5577 // call cb(er, data) where data is <= n in length.
5578 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5579 // arbitrary, and perhaps not very meaningful.
5580 Readable.prototype._read = function(n) {
5581 this.emit('error', new Error('not implemented'));
5582 };
5583
5584 Readable.prototype.pipe = function(dest, pipeOpts) {
5585 var src = this;
5586 var state = this._readableState;
5587
5588 switch (state.pipesCount) {
5589 case 0:
5590 state.pipes = dest;
5591 break;
5592 case 1:
5593 state.pipes = [state.pipes, dest];
5594 break;
5595 default:
5596 state.pipes.push(dest);
5597 break;
5598 }
5599 state.pipesCount += 1;
5600 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5601
5602 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5603 dest !== process.stdout &&
5604 dest !== process.stderr;
5605
5606 var endFn = doEnd ? onend : cleanup;
5607 if (state.endEmitted)
5608 process.nextTick(endFn);
5609 else
5610 src.once('end', endFn);
5611
5612 dest.on('unpipe', onunpipe);
5613 function onunpipe(readable) {
5614 debug('onunpipe');
5615 if (readable === src) {
5616 cleanup();
5617 }
5618 }
5619
5620 function onend() {
5621 debug('onend');
5622 dest.end();
5623 }
5624
5625 // when the dest drains, it reduces the awaitDrain counter
5626 // on the source. This would be more elegant with a .once()
5627 // handler in flow(), but adding and removing repeatedly is
5628 // too slow.
5629 var ondrain = pipeOnDrain(src);
5630 dest.on('drain', ondrain);
5631
5632 function cleanup() {
5633 debug('cleanup');
5634 // cleanup event handlers once the pipe is broken
5635 dest.removeListener('close', onclose);
5636 dest.removeListener('finish', onfinish);
5637 dest.removeListener('drain', ondrain);
5638 dest.removeListener('error', onerror);
5639 dest.removeListener('unpipe', onunpipe);
5640 src.removeListener('end', onend);
5641 src.removeListener('end', cleanup);
5642 src.removeListener('data', ondata);
5643
5644 // if the reader is waiting for a drain event from this
5645 // specific writer, then it would cause it to never start
5646 // flowing again.
5647 // So, if this is awaiting a drain, then we just call it now.
5648 // If we don't know, then assume that we are waiting for one.
5649 if (state.awaitDrain &&
5650 (!dest._writableState || dest._writableState.needDrain))
5651 ondrain();
5652 }
5653
5654 src.on('data', ondata);
5655 function ondata(chunk) {
5656 debug('ondata');
5657 var ret = dest.write(chunk);
5658 if (false === ret) {
5659 debug('false write response, pause',
5660 src._readableState.awaitDrain);
5661 src._readableState.awaitDrain++;
5662 src.pause();
5663 }
5664 }
5665
5666 // if the dest has an error, then stop piping into it.
5667 // however, don't suppress the throwing behavior for this.
5668 function onerror(er) {
5669 debug('onerror', er);
5670 unpipe();
5671 dest.removeListener('error', onerror);
5672 if (EE.listenerCount(dest, 'error') === 0)
5673 dest.emit('error', er);
5674 }
5675 // This is a brutally ugly hack to make sure that our error handler
5676 // is attached before any userland ones. NEVER DO THIS.
5677 if (!dest._events || !dest._events.error)
5678 dest.on('error', onerror);
5679 else if (isArray(dest._events.error))
5680 dest._events.error.unshift(onerror);
5681 else
5682 dest._events.error = [onerror, dest._events.error];
5683
5684
5685
5686 // Both close and finish should trigger unpipe, but only once.
5687 function onclose() {
5688 dest.removeListener('finish', onfinish);
5689 unpipe();
5690 }
5691 dest.once('close', onclose);
5692 function onfinish() {
5693 debug('onfinish');
5694 dest.removeListener('close', onclose);
5695 unpipe();
5696 }
5697 dest.once('finish', onfinish);
5698
5699 function unpipe() {
5700 debug('unpipe');
5701 src.unpipe(dest);
5702 }
5703
5704 // tell the dest that it's being piped to
5705 dest.emit('pipe', src);
5706
5707 // start the flow if it hasn't been started already.
5708 if (!state.flowing) {
5709 debug('pipe resume');
5710 src.resume();
5711 }
5712
5713 return dest;
5714 };
5715
5716 function pipeOnDrain(src) {
5717 return function() {
5718 var state = src._readableState;
5719 debug('pipeOnDrain', state.awaitDrain);
5720 if (state.awaitDrain)
5721 state.awaitDrain--;
5722 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5723 state.flowing = true;
5724 flow(src);
5725 }
5726 };
5727 }
5728
5729
5730 Readable.prototype.unpipe = function(dest) {
5731 var state = this._readableState;
5732
5733 // if we're not piping anywhere, then do nothing.
5734 if (state.pipesCount === 0)
5735 return this;
5736
5737 // just one destination. most common case.
5738 if (state.pipesCount === 1) {
5739 // passed in one, but it's not the right one.
5740 if (dest && dest !== state.pipes)
5741 return this;
5742
5743 if (!dest)
5744 dest = state.pipes;
5745
5746 // got a match.
5747 state.pipes = null;
5748 state.pipesCount = 0;
5749 state.flowing = false;
5750 if (dest)
5751 dest.emit('unpipe', this);
5752 return this;
5753 }
5754
5755 // slow case. multiple pipe destinations.
5756
5757 if (!dest) {
5758 // remove all.
5759 var dests = state.pipes;
5760 var len = state.pipesCount;
5761 state.pipes = null;
5762 state.pipesCount = 0;
5763 state.flowing = false;
5764
5765 for (var i = 0; i < len; i++)
5766 dests[i].emit('unpipe', this);
5767 return this;
5768 }
5769
5770 // try to find the right one.
5771 var i = indexOf(state.pipes, dest);
5772 if (i === -1)
5773 return this;
5774
5775 state.pipes.splice(i, 1);
5776 state.pipesCount -= 1;
5777 if (state.pipesCount === 1)
5778 state.pipes = state.pipes[0];
5779
5780 dest.emit('unpipe', this);
5781
5782 return this;
5783 };
5784
5785 // set up data events if they are asked for
5786 // Ensure readable listeners eventually get something
5787 Readable.prototype.on = function(ev, fn) {
5788 var res = Stream.prototype.on.call(this, ev, fn);
5789
5790 // If listening to data, and it has not explicitly been paused,
5791 // then call resume to start the flow of data on the next tick.
5792 if (ev === 'data' && false !== this._readableState.flowing) {
5793 this.resume();
5794 }
5795
5796 if (ev === 'readable' && this.readable) {
5797 var state = this._readableState;
5798 if (!state.readableListening) {
5799 state.readableListening = true;
5800 state.emittedReadable = false;
5801 state.needReadable = true;
5802 if (!state.reading) {
5803 var self = this;
5804 process.nextTick(function() {
5805 debug('readable nexttick read 0');
5806 self.read(0);
5807 });
5808 } else if (state.length) {
5809 emitReadable(this, state);
5810 }
5811 }
5812 }
5813
5814 return res;
5815 };
5816 Readable.prototype.addListener = Readable.prototype.on;
5817
5818 // pause() and resume() are remnants of the legacy readable stream API
5819 // If the user uses them, then switch into old mode.
5820 Readable.prototype.resume = function() {
5821 var state = this._readableState;
5822 if (!state.flowing) {
5823 debug('resume');
5824 state.flowing = true;
5825 if (!state.reading) {
5826 debug('resume read 0');
5827 this.read(0);
5828 }
5829 resume(this, state);
5830 }
5831 return this;
5832 };
5833
5834 function resume(stream, state) {
5835 if (!state.resumeScheduled) {
5836 state.resumeScheduled = true;
5837 process.nextTick(function() {
5838 resume_(stream, state);
5839 });
5840 }
5841 }
5842
5843 function resume_(stream, state) {
5844 state.resumeScheduled = false;
5845 stream.emit('resume');
5846 flow(stream);
5847 if (state.flowing && !state.reading)
5848 stream.read(0);
5849 }
5850
5851 Readable.prototype.pause = function() {
5852 debug('call pause flowing=%j', this._readableState.flowing);
5853 if (false !== this._readableState.flowing) {
5854 debug('pause');
5855 this._readableState.flowing = false;
5856 this.emit('pause');
5857 }
5858 return this;
5859 };
5860
5861 function flow(stream) {
5862 var state = stream._readableState;
5863 debug('flow', state.flowing);
5864 if (state.flowing) {
5865 do {
5866 var chunk = stream.read();
5867 } while (null !== chunk && state.flowing);
5868 }
5869 }
5870
5871 // wrap an old-style stream as the async data source.
5872 // This is *not* part of the readable stream interface.
5873 // It is an ugly unfortunate mess of history.
5874 Readable.prototype.wrap = function(stream) {
5875 var state = this._readableState;
5876 var paused = false;
5877
5878 var self = this;
5879 stream.on('end', function() {
5880 debug('wrapped end');
5881 if (state.decoder && !state.ended) {
5882 var chunk = state.decoder.end();
5883 if (chunk && chunk.length)
5884 self.push(chunk);
5885 }
5886
5887 self.push(null);
5888 });
5889
5890 stream.on('data', function(chunk) {
5891 debug('wrapped data');
5892 if (state.decoder)
5893 chunk = state.decoder.write(chunk);
5894 if (!chunk || !state.objectMode && !chunk.length)
5895 return;
5896
5897 var ret = self.push(chunk);
5898 if (!ret) {
5899 paused = true;
5900 stream.pause();
5901 }
5902 });
5903
5904 // proxy all the other methods.
5905 // important when wrapping filters and duplexes.
5906 for (var i in stream) {
5907 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5908 this[i] = function(method) { return function() {
5909 return stream[method].apply(stream, arguments);
5910 }}(i);
5911 }
5912 }
5913
5914 // proxy certain important events.
5915 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5916 forEach(events, function(ev) {
5917 stream.on(ev, self.emit.bind(self, ev));
5918 });
5919
5920 // when we try to consume some more bytes, simply unpause the
5921 // underlying stream.
5922 self._read = function(n) {
5923 debug('wrapped _read', n);
5924 if (paused) {
5925 paused = false;
5926 stream.resume();
5927 }
5928 };
5929
5930 return self;
5931 };
5932
5933
5934
5935 // exposed for testing purposes only.
5936 Readable._fromList = fromList;
5937
5938 // Pluck off n bytes from an array of buffers.
5939 // Length is the combined lengths of all the buffers in the list.
5940 function fromList(n, state) {
5941 var list = state.buffer;
5942 var length = state.length;
5943 var stringMode = !!state.decoder;
5944 var objectMode = !!state.objectMode;
5945 var ret;
5946
5947 // nothing in the list, definitely empty.
5948 if (list.length === 0)
5949 return null;
5950
5951 if (length === 0)
5952 ret = null;
5953 else if (objectMode)
5954 ret = list.shift();
5955 else if (!n || n >= length) {
5956 // read it all, truncate the array.
5957 if (stringMode)
5958 ret = list.join('');
5959 else
5960 ret = Buffer.concat(list, length);
5961 list.length = 0;
5962 } else {
5963 // read just some of it.
5964 if (n < list[0].length) {
5965 // just take a part of the first list item.
5966 // slice is the same for buffers and strings.
5967 var buf = list[0];
5968 ret = buf.slice(0, n);
5969 list[0] = buf.slice(n);
5970 } else if (n === list[0].length) {
5971 // first list is a perfect match
5972 ret = list.shift();
5973 } else {
5974 // complex case.
5975 // we have enough to cover it, but it spans past the first buffer.
5976 if (stringMode)
5977 ret = '';
5978 else
5979 ret = new Buffer(n);
5980
5981 var c = 0;
5982 for (var i = 0, l = list.length; i < l && c < n; i++) {
5983 var buf = list[0];
5984 var cpy = Math.min(n - c, buf.length);
5985
5986 if (stringMode)
5987 ret += buf.slice(0, cpy);
5988 else
5989 buf.copy(ret, c, 0, cpy);
5990
5991 if (cpy < buf.length)
5992 list[0] = buf.slice(cpy);
5993 else
5994 list.shift();
5995
5996 c += cpy;
5997 }
5998 }
5999 }
6000
6001 return ret;
6002 }
6003
6004 function endReadable(stream) {
6005 var state = stream._readableState;
6006
6007 // If we get here before consuming all the bytes, then that is a
6008 // bug in node. Should never happen.
6009 if (state.length > 0)
6010 throw new Error('endReadable called on non-empty stream');
6011
6012 if (!state.endEmitted) {
6013 state.ended = true;
6014 process.nextTick(function() {
6015 // Check that we didn't get one last unshift.
6016 if (!state.endEmitted && state.length === 0) {
6017 state.endEmitted = true;
6018 stream.readable = false;
6019 stream.emit('end');
6020 }
6021 });
6022 }
6023 }
6024
6025 function forEach (xs, f) {
6026 for (var i = 0, l = xs.length; i < l; i++) {
6027 f(xs[i], i);
6028 }
6029 }
6030
6031 function indexOf (xs, x) {
6032 for (var i = 0, l = xs.length; i < l; i++) {
6033 if (xs[i] === x) return i;
6034 }
6035 return -1;
6036 }
6037
6038 }).call(this,require('_process'))
6039 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
6040 // Copyright Joyent, Inc. and other Node contributors.
6041 //
6042 // Permission is hereby granted, free of charge, to any person obtaining a
6043 // copy of this software and associated documentation files (the
6044 // "Software"), to deal in the Software without restriction, including
6045 // without limitation the rights to use, copy, modify, merge, publish,
6046 // distribute, sublicense, and/or sell copies of the Software, and to permit
6047 // persons to whom the Software is furnished to do so, subject to the
6048 // following conditions:
6049 //
6050 // The above copyright notice and this permission notice shall be included
6051 // in all copies or substantial portions of the Software.
6052 //
6053 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6054 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6055 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6056 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6057 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6058 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6059 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6060
6061
6062 // a transform stream is a readable/writable stream where you do
6063 // something with the data. Sometimes it's called a "filter",
6064 // but that's not a great name for it, since that implies a thing where
6065 // some bits pass through, and others are simply ignored. (That would
6066 // be a valid example of a transform, of course.)
6067 //
6068 // While the output is causally related to the input, it's not a
6069 // necessarily symmetric or synchronous transformation. For example,
6070 // a zlib stream might take multiple plain-text writes(), and then
6071 // emit a single compressed chunk some time in the future.
6072 //
6073 // Here's how this works:
6074 //
6075 // The Transform stream has all the aspects of the readable and writable
6076 // stream classes. When you write(chunk), that calls _write(chunk,cb)
6077 // internally, and returns false if there's a lot of pending writes
6078 // buffered up. When you call read(), that calls _read(n) until
6079 // there's enough pending readable data buffered up.
6080 //
6081 // In a transform stream, the written data is placed in a buffer. When
6082 // _read(n) is called, it transforms the queued up data, calling the
6083 // buffered _write cb's as it consumes chunks. If consuming a single
6084 // written chunk would result in multiple output chunks, then the first
6085 // outputted bit calls the readcb, and subsequent chunks just go into
6086 // the read buffer, and will cause it to emit 'readable' if necessary.
6087 //
6088 // This way, back-pressure is actually determined by the reading side,
6089 // since _read has to be called to start processing a new chunk. However,
6090 // a pathological inflate type of transform can cause excessive buffering
6091 // here. For example, imagine a stream where every byte of input is
6092 // interpreted as an integer from 0-255, and then results in that many
6093 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6094 // 1kb of data being output. In this case, you could write a very small
6095 // amount of input, and end up with a very large amount of output. In
6096 // such a pathological inflating mechanism, there'd be no way to tell
6097 // the system to stop doing the transform. A single 4MB write could
6098 // cause the system to run out of memory.
6099 //
6100 // However, even in such a pathological case, only a single written chunk
6101 // would be consumed, and then the rest would wait (un-transformed) until
6102 // the results of the previous transformed chunk were consumed.
6103
6104 module.exports = Transform;
6105
6106 var Duplex = require('./_stream_duplex');
6107
6108 /*<replacement>*/
6109 var util = require('core-util-is');
6110 util.inherits = require('inherits');
6111 /*</replacement>*/
6112
6113 util.inherits(Transform, Duplex);
6114
6115
6116 function TransformState(options, stream) {
6117 this.afterTransform = function(er, data) {
6118 return afterTransform(stream, er, data);
6119 };
6120
6121 this.needTransform = false;
6122 this.transforming = false;
6123 this.writecb = null;
6124 this.writechunk = null;
6125 }
6126
6127 function afterTransform(stream, er, data) {
6128 var ts = stream._transformState;
6129 ts.transforming = false;
6130
6131 var cb = ts.writecb;
6132
6133 if (!cb)
6134 return stream.emit('error', new Error('no writecb in Transform class'));
6135
6136 ts.writechunk = null;
6137 ts.writecb = null;
6138
6139 if (!util.isNullOrUndefined(data))
6140 stream.push(data);
6141
6142 if (cb)
6143 cb(er);
6144
6145 var rs = stream._readableState;
6146 rs.reading = false;
6147 if (rs.needReadable || rs.length < rs.highWaterMark) {
6148 stream._read(rs.highWaterMark);
6149 }
6150 }
6151
6152
6153 function Transform(options) {
6154 if (!(this instanceof Transform))
6155 return new Transform(options);
6156
6157 Duplex.call(this, options);
6158
6159 this._transformState = new TransformState(options, this);
6160
6161 // when the writable side finishes, then flush out anything remaining.
6162 var stream = this;
6163
6164 // start out asking for a readable event once data is transformed.
6165 this._readableState.needReadable = true;
6166
6167 // we have implemented the _read method, and done the other things
6168 // that Readable wants before the first _read call, so unset the
6169 // sync guard flag.
6170 this._readableState.sync = false;
6171
6172 this.once('prefinish', function() {
6173 if (util.isFunction(this._flush))
6174 this._flush(function(er) {
6175 done(stream, er);
6176 });
6177 else
6178 done(stream);
6179 });
6180 }
6181
6182 Transform.prototype.push = function(chunk, encoding) {
6183 this._transformState.needTransform = false;
6184 return Duplex.prototype.push.call(this, chunk, encoding);
6185 };
6186
6187 // This is the part where you do stuff!
6188 // override this function in implementation classes.
6189 // 'chunk' is an input chunk.
6190 //
6191 // Call `push(newChunk)` to pass along transformed output
6192 // to the readable side. You may call 'push' zero or more times.
6193 //
6194 // Call `cb(err)` when you are done with this chunk. If you pass
6195 // an error, then that'll put the hurt on the whole operation. If you
6196 // never call cb(), then you'll never get another chunk.
6197 Transform.prototype._transform = function(chunk, encoding, cb) {
6198 throw new Error('not implemented');
6199 };
6200
6201 Transform.prototype._write = function(chunk, encoding, cb) {
6202 var ts = this._transformState;
6203 ts.writecb = cb;
6204 ts.writechunk = chunk;
6205 ts.writeencoding = encoding;
6206 if (!ts.transforming) {
6207 var rs = this._readableState;
6208 if (ts.needTransform ||
6209 rs.needReadable ||
6210 rs.length < rs.highWaterMark)
6211 this._read(rs.highWaterMark);
6212 }
6213 };
6214
6215 // Doesn't matter what the args are here.
6216 // _transform does all the work.
6217 // That we got here means that the readable side wants more data.
6218 Transform.prototype._read = function(n) {
6219 var ts = this._transformState;
6220
6221 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6222 ts.transforming = true;
6223 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6224 } else {
6225 // mark that we need a transform, so that any data that comes in
6226 // will get processed, now that we've asked for it.
6227 ts.needTransform = true;
6228 }
6229 };
6230
6231
6232 function done(stream, er) {
6233 if (er)
6234 return stream.emit('error', er);
6235
6236 // if there's nothing in the write buffer, then that means
6237 // that nothing more will ever be provided
6238 var ws = stream._writableState;
6239 var ts = stream._transformState;
6240
6241 if (ws.length)
6242 throw new Error('calling transform done when ws.length != 0');
6243
6244 if (ts.transforming)
6245 throw new Error('calling transform done when still transforming');
6246
6247 return stream.push(null);
6248 }
6249
6250 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6251 (function (process){
6252 // Copyright Joyent, Inc. and other Node contributors.
6253 //
6254 // Permission is hereby granted, free of charge, to any person obtaining a
6255 // copy of this software and associated documentation files (the
6256 // "Software"), to deal in the Software without restriction, including
6257 // without limitation the rights to use, copy, modify, merge, publish,
6258 // distribute, sublicense, and/or sell copies of the Software, and to permit
6259 // persons to whom the Software is furnished to do so, subject to the
6260 // following conditions:
6261 //
6262 // The above copyright notice and this permission notice shall be included
6263 // in all copies or substantial portions of the Software.
6264 //
6265 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6266 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6267 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6268 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6269 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6270 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6271 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6272
6273 // A bit simpler than readable streams.
6274 // Implement an async ._write(chunk, cb), and it'll handle all
6275 // the drain event emission and buffering.
6276
6277 module.exports = Writable;
6278
6279 /*<replacement>*/
6280 var Buffer = require('buffer').Buffer;
6281 /*</replacement>*/
6282
6283 Writable.WritableState = WritableState;
6284
6285
6286 /*<replacement>*/
6287 var util = require('core-util-is');
6288 util.inherits = require('inherits');
6289 /*</replacement>*/
6290
6291 var Stream = require('stream');
6292
6293 util.inherits(Writable, Stream);
6294
6295 function WriteReq(chunk, encoding, cb) {
6296 this.chunk = chunk;
6297 this.encoding = encoding;
6298 this.callback = cb;
6299 }
6300
6301 function WritableState(options, stream) {
6302 var Duplex = require('./_stream_duplex');
6303
6304 options = options || {};
6305
6306 // the point at which write() starts returning false
6307 // Note: 0 is a valid value, means that we always return false if
6308 // the entire buffer is not flushed immediately on write()
6309 var hwm = options.highWaterMark;
6310 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6311 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6312
6313 // object stream flag to indicate whether or not this stream
6314 // contains buffers or objects.
6315 this.objectMode = !!options.objectMode;
6316
6317 if (stream instanceof Duplex)
6318 this.objectMode = this.objectMode || !!options.writableObjectMode;
6319
6320 // cast to ints.
6321 this.highWaterMark = ~~this.highWaterMark;
6322
6323 this.needDrain = false;
6324 // at the start of calling end()
6325 this.ending = false;
6326 // when end() has been called, and returned
6327 this.ended = false;
6328 // when 'finish' is emitted
6329 this.finished = false;
6330
6331 // should we decode strings into buffers before passing to _write?
6332 // this is here so that some node-core streams can optimize string
6333 // handling at a lower level.
6334 var noDecode = options.decodeStrings === false;
6335 this.decodeStrings = !noDecode;
6336
6337 // Crypto is kind of old and crusty. Historically, its default string
6338 // encoding is 'binary' so we have to make this configurable.
6339 // Everything else in the universe uses 'utf8', though.
6340 this.defaultEncoding = options.defaultEncoding || 'utf8';
6341
6342 // not an actual buffer we keep track of, but a measurement
6343 // of how much we're waiting to get pushed to some underlying
6344 // socket or file.
6345 this.length = 0;
6346
6347 // a flag to see when we're in the middle of a write.
6348 this.writing = false;
6349
6350 // when true all writes will be buffered until .uncork() call
6351 this.corked = 0;
6352
6353 // a flag to be able to tell if the onwrite cb is called immediately,
6354 // or on a later tick. We set this to true at first, because any
6355 // actions that shouldn't happen until "later" should generally also
6356 // not happen before the first write call.
6357 this.sync = true;
6358
6359 // a flag to know if we're processing previously buffered items, which
6360 // may call the _write() callback in the same tick, so that we don't
6361 // end up in an overlapped onwrite situation.
6362 this.bufferProcessing = false;
6363
6364 // the callback that's passed to _write(chunk,cb)
6365 this.onwrite = function(er) {
6366 onwrite(stream, er);
6367 };
6368
6369 // the callback that the user supplies to write(chunk,encoding,cb)
6370 this.writecb = null;
6371
6372 // the amount that is being written when _write is called.
6373 this.writelen = 0;
6374
6375 this.buffer = [];
6376
6377 // number of pending user-supplied write callbacks
6378 // this must be 0 before 'finish' can be emitted
6379 this.pendingcb = 0;
6380
6381 // emit prefinish if the only thing we're waiting for is _write cbs
6382 // This is relevant for synchronous Transform streams
6383 this.prefinished = false;
6384
6385 // True if the error was already emitted and should not be thrown again
6386 this.errorEmitted = false;
6387 }
6388
6389 function Writable(options) {
6390 var Duplex = require('./_stream_duplex');
6391
6392 // Writable ctor is applied to Duplexes, though they're not
6393 // instanceof Writable, they're instanceof Readable.
6394 if (!(this instanceof Writable) && !(this instanceof Duplex))
6395 return new Writable(options);
6396
6397 this._writableState = new WritableState(options, this);
6398
6399 // legacy.
6400 this.writable = true;
6401
6402 Stream.call(this);
6403 }
6404
6405 // Otherwise people can pipe Writable streams, which is just wrong.
6406 Writable.prototype.pipe = function() {
6407 this.emit('error', new Error('Cannot pipe. Not readable.'));
6408 };
6409
6410
6411 function writeAfterEnd(stream, state, cb) {
6412 var er = new Error('write after end');
6413 // TODO: defer error events consistently everywhere, not just the cb
6414 stream.emit('error', er);
6415 process.nextTick(function() {
6416 cb(er);
6417 });
6418 }
6419
6420 // If we get something that is not a buffer, string, null, or undefined,
6421 // and we're not in objectMode, then that's an error.
6422 // Otherwise stream chunks are all considered to be of length=1, and the
6423 // watermarks determine how many objects to keep in the buffer, rather than
6424 // how many bytes or characters.
6425 function validChunk(stream, state, chunk, cb) {
6426 var valid = true;
6427 if (!util.isBuffer(chunk) &&
6428 !util.isString(chunk) &&
6429 !util.isNullOrUndefined(chunk) &&
6430 !state.objectMode) {
6431 var er = new TypeError('Invalid non-string/buffer chunk');
6432 stream.emit('error', er);
6433 process.nextTick(function() {
6434 cb(er);
6435 });
6436 valid = false;
6437 }
6438 return valid;
6439 }
6440
6441 Writable.prototype.write = function(chunk, encoding, cb) {
6442 var state = this._writableState;
6443 var ret = false;
6444
6445 if (util.isFunction(encoding)) {
6446 cb = encoding;
6447 encoding = null;
6448 }
6449
6450 if (util.isBuffer(chunk))
6451 encoding = 'buffer';
6452 else if (!encoding)
6453 encoding = state.defaultEncoding;
6454
6455 if (!util.isFunction(cb))
6456 cb = function() {};
6457
6458 if (state.ended)
6459 writeAfterEnd(this, state, cb);
6460 else if (validChunk(this, state, chunk, cb)) {
6461 state.pendingcb++;
6462 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6463 }
6464
6465 return ret;
6466 };
6467
6468 Writable.prototype.cork = function() {
6469 var state = this._writableState;
6470
6471 state.corked++;
6472 };
6473
6474 Writable.prototype.uncork = function() {
6475 var state = this._writableState;
6476
6477 if (state.corked) {
6478 state.corked--;
6479
6480 if (!state.writing &&
6481 !state.corked &&
6482 !state.finished &&
6483 !state.bufferProcessing &&
6484 state.buffer.length)
6485 clearBuffer(this, state);
6486 }
6487 };
6488
6489 function decodeChunk(state, chunk, encoding) {
6490 if (!state.objectMode &&
6491 state.decodeStrings !== false &&
6492 util.isString(chunk)) {
6493 chunk = new Buffer(chunk, encoding);
6494 }
6495 return chunk;
6496 }
6497
6498 // if we're already writing something, then just put this
6499 // in the queue, and wait our turn. Otherwise, call _write
6500 // If we return false, then we need a drain event, so set that flag.
6501 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6502 chunk = decodeChunk(state, chunk, encoding);
6503 if (util.isBuffer(chunk))
6504 encoding = 'buffer';
6505 var len = state.objectMode ? 1 : chunk.length;
6506
6507 state.length += len;
6508
6509 var ret = state.length < state.highWaterMark;
6510 // we must ensure that previous needDrain will not be reset to false.
6511 if (!ret)
6512 state.needDrain = true;
6513
6514 if (state.writing || state.corked)
6515 state.buffer.push(new WriteReq(chunk, encoding, cb));
6516 else
6517 doWrite(stream, state, false, len, chunk, encoding, cb);
6518
6519 return ret;
6520 }
6521
6522 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6523 state.writelen = len;
6524 state.writecb = cb;
6525 state.writing = true;
6526 state.sync = true;
6527 if (writev)
6528 stream._writev(chunk, state.onwrite);
6529 else
6530 stream._write(chunk, encoding, state.onwrite);
6531 state.sync = false;
6532 }
6533
6534 function onwriteError(stream, state, sync, er, cb) {
6535 if (sync)
6536 process.nextTick(function() {
6537 state.pendingcb--;
6538 cb(er);
6539 });
6540 else {
6541 state.pendingcb--;
6542 cb(er);
6543 }
6544
6545 stream._writableState.errorEmitted = true;
6546 stream.emit('error', er);
6547 }
6548
6549 function onwriteStateUpdate(state) {
6550 state.writing = false;
6551 state.writecb = null;
6552 state.length -= state.writelen;
6553 state.writelen = 0;
6554 }
6555
6556 function onwrite(stream, er) {
6557 var state = stream._writableState;
6558 var sync = state.sync;
6559 var cb = state.writecb;
6560
6561 onwriteStateUpdate(state);
6562
6563 if (er)
6564 onwriteError(stream, state, sync, er, cb);
6565 else {
6566 // Check if we're actually ready to finish, but don't emit yet
6567 var finished = needFinish(stream, state);
6568
6569 if (!finished &&
6570 !state.corked &&
6571 !state.bufferProcessing &&
6572 state.buffer.length) {
6573 clearBuffer(stream, state);
6574 }
6575
6576 if (sync) {
6577 process.nextTick(function() {
6578 afterWrite(stream, state, finished, cb);
6579 });
6580 } else {
6581 afterWrite(stream, state, finished, cb);
6582 }
6583 }
6584 }
6585
6586 function afterWrite(stream, state, finished, cb) {
6587 if (!finished)
6588 onwriteDrain(stream, state);
6589 state.pendingcb--;
6590 cb();
6591 finishMaybe(stream, state);
6592 }
6593
6594 // Must force callback to be called on nextTick, so that we don't
6595 // emit 'drain' before the write() consumer gets the 'false' return
6596 // value, and has a chance to attach a 'drain' listener.
6597 function onwriteDrain(stream, state) {
6598 if (state.length === 0 && state.needDrain) {
6599 state.needDrain = false;
6600 stream.emit('drain');
6601 }
6602 }
6603
6604
6605 // if there's something in the buffer waiting, then process it
6606 function clearBuffer(stream, state) {
6607 state.bufferProcessing = true;
6608
6609 if (stream._writev && state.buffer.length > 1) {
6610 // Fast case, write everything using _writev()
6611 var cbs = [];
6612 for (var c = 0; c < state.buffer.length; c++)
6613 cbs.push(state.buffer[c].callback);
6614
6615 // count the one we are adding, as well.
6616 // TODO(isaacs) clean this up
6617 state.pendingcb++;
6618 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6619 for (var i = 0; i < cbs.length; i++) {
6620 state.pendingcb--;
6621 cbs[i](err);
6622 }
6623 });
6624
6625 // Clear buffer
6626 state.buffer = [];
6627 } else {
6628 // Slow case, write chunks one-by-one
6629 for (var c = 0; c < state.buffer.length; c++) {
6630 var entry = state.buffer[c];
6631 var chunk = entry.chunk;
6632 var encoding = entry.encoding;
6633 var cb = entry.callback;
6634 var len = state.objectMode ? 1 : chunk.length;
6635
6636 doWrite(stream, state, false, len, chunk, encoding, cb);
6637
6638 // if we didn't call the onwrite immediately, then
6639 // it means that we need to wait until it does.
6640 // also, that means that the chunk and cb are currently
6641 // being processed, so move the buffer counter past them.
6642 if (state.writing) {
6643 c++;
6644 break;
6645 }
6646 }
6647
6648 if (c < state.buffer.length)
6649 state.buffer = state.buffer.slice(c);
6650 else
6651 state.buffer.length = 0;
6652 }
6653
6654 state.bufferProcessing = false;
6655 }
6656
6657 Writable.prototype._write = function(chunk, encoding, cb) {
6658 cb(new Error('not implemented'));
6659
6660 };
6661
6662 Writable.prototype._writev = null;
6663
6664 Writable.prototype.end = function(chunk, encoding, cb) {
6665 var state = this._writableState;
6666
6667 if (util.isFunction(chunk)) {
6668 cb = chunk;
6669 chunk = null;
6670 encoding = null;
6671 } else if (util.isFunction(encoding)) {
6672 cb = encoding;
6673 encoding = null;
6674 }
6675
6676 if (!util.isNullOrUndefined(chunk))
6677 this.write(chunk, encoding);
6678
6679 // .end() fully uncorks
6680 if (state.corked) {
6681 state.corked = 1;
6682 this.uncork();
6683 }
6684
6685 // ignore unnecessary end() calls.
6686 if (!state.ending && !state.finished)
6687 endWritable(this, state, cb);
6688 };
6689
6690
6691 function needFinish(stream, state) {
6692 return (state.ending &&
6693 state.length === 0 &&
6694 !state.finished &&
6695 !state.writing);
6696 }
6697
6698 function prefinish(stream, state) {
6699 if (!state.prefinished) {
6700 state.prefinished = true;
6701 stream.emit('prefinish');
6702 }
6703 }
6704
6705 function finishMaybe(stream, state) {
6706 var need = needFinish(stream, state);
6707 if (need) {
6708 if (state.pendingcb === 0) {
6709 prefinish(stream, state);
6710 state.finished = true;
6711 stream.emit('finish');
6712 } else
6713 prefinish(stream, state);
6714 }
6715 return need;
6716 }
6717
6718 function endWritable(stream, state, cb) {
6719 state.ending = true;
6720 finishMaybe(stream, state);
6721 if (cb) {
6722 if (state.finished)
6723 process.nextTick(cb);
6724 else
6725 stream.once('finish', cb);
6726 }
6727 state.ended = true;
6728 }
6729
6730 }).call(this,require('_process'))
6731 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6732 (function (Buffer){
6733 // Copyright Joyent, Inc. and other Node contributors.
6734 //
6735 // Permission is hereby granted, free of charge, to any person obtaining a
6736 // copy of this software and associated documentation files (the
6737 // "Software"), to deal in the Software without restriction, including
6738 // without limitation the rights to use, copy, modify, merge, publish,
6739 // distribute, sublicense, and/or sell copies of the Software, and to permit
6740 // persons to whom the Software is furnished to do so, subject to the
6741 // following conditions:
6742 //
6743 // The above copyright notice and this permission notice shall be included
6744 // in all copies or substantial portions of the Software.
6745 //
6746 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6747 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6748 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6749 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6750 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6751 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6752 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6753
6754 // NOTE: These type checking functions intentionally don't use `instanceof`
6755 // because it is fragile and can be easily faked with `Object.create()`.
6756 function isArray(ar) {
6757 return Array.isArray(ar);
6758 }
6759 exports.isArray = isArray;
6760
6761 function isBoolean(arg) {
6762 return typeof arg === 'boolean';
6763 }
6764 exports.isBoolean = isBoolean;
6765
6766 function isNull(arg) {
6767 return arg === null;
6768 }
6769 exports.isNull = isNull;
6770
6771 function isNullOrUndefined(arg) {
6772 return arg == null;
6773 }
6774 exports.isNullOrUndefined = isNullOrUndefined;
6775
6776 function isNumber(arg) {
6777 return typeof arg === 'number';
6778 }
6779 exports.isNumber = isNumber;
6780
6781 function isString(arg) {
6782 return typeof arg === 'string';
6783 }
6784 exports.isString = isString;
6785
6786 function isSymbol(arg) {
6787 return typeof arg === 'symbol';
6788 }
6789 exports.isSymbol = isSymbol;
6790
6791 function isUndefined(arg) {
6792 return arg === void 0;
6793 }
6794 exports.isUndefined = isUndefined;
6795
6796 function isRegExp(re) {
6797 return isObject(re) && objectToString(re) === '[object RegExp]';
6798 }
6799 exports.isRegExp = isRegExp;
6800
6801 function isObject(arg) {
6802 return typeof arg === 'object' && arg !== null;
6803 }
6804 exports.isObject = isObject;
6805
6806 function isDate(d) {
6807 return isObject(d) && objectToString(d) === '[object Date]';
6808 }
6809 exports.isDate = isDate;
6810
6811 function isError(e) {
6812 return isObject(e) &&
6813 (objectToString(e) === '[object Error]' || e instanceof Error);
6814 }
6815 exports.isError = isError;
6816
6817 function isFunction(arg) {
6818 return typeof arg === 'function';
6819 }
6820 exports.isFunction = isFunction;
6821
6822 function isPrimitive(arg) {
6823 return arg === null ||
6824 typeof arg === 'boolean' ||
6825 typeof arg === 'number' ||
6826 typeof arg === 'string' ||
6827 typeof arg === 'symbol' || // ES6 symbol
6828 typeof arg === 'undefined';
6829 }
6830 exports.isPrimitive = isPrimitive;
6831
6832 function isBuffer(arg) {
6833 return Buffer.isBuffer(arg);
6834 }
6835 exports.isBuffer = isBuffer;
6836
6837 function objectToString(o) {
6838 return Object.prototype.toString.call(o);
6839 }
6840 }).call(this,require("buffer").Buffer)
6841 },{"buffer":7}],22:[function(require,module,exports){
6842 module.exports = require("./lib/_stream_passthrough.js")
6843
6844 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6845 exports = module.exports = require('./lib/_stream_readable.js');
6846 exports.Stream = require('stream');
6847 exports.Readable = exports;
6848 exports.Writable = require('./lib/_stream_writable.js');
6849 exports.Duplex = require('./lib/_stream_duplex.js');
6850 exports.Transform = require('./lib/_stream_transform.js');
6851 exports.PassThrough = require('./lib/_stream_passthrough.js');
6852
6853 },{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
6854 module.exports = require("./lib/_stream_transform.js")
6855
6856 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6857 module.exports = require("./lib/_stream_writable.js")
6858
6859 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6860 // Copyright Joyent, Inc. and other Node contributors.
6861 //
6862 // Permission is hereby granted, free of charge, to any person obtaining a
6863 // copy of this software and associated documentation files (the
6864 // "Software"), to deal in the Software without restriction, including
6865 // without limitation the rights to use, copy, modify, merge, publish,
6866 // distribute, sublicense, and/or sell copies of the Software, and to permit
6867 // persons to whom the Software is furnished to do so, subject to the
6868 // following conditions:
6869 //
6870 // The above copyright notice and this permission notice shall be included
6871 // in all copies or substantial portions of the Software.
6872 //
6873 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6874 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6875 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6876 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6877 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6878 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6879 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6880
6881 module.exports = Stream;
6882
6883 var EE = require('events').EventEmitter;
6884 var inherits = require('inherits');
6885
6886 inherits(Stream, EE);
6887 Stream.Readable = require('readable-stream/readable.js');
6888 Stream.Writable = require('readable-stream/writable.js');
6889 Stream.Duplex = require('readable-stream/duplex.js');
6890 Stream.Transform = require('readable-stream/transform.js');
6891 Stream.PassThrough = require('readable-stream/passthrough.js');
6892
6893 // Backwards-compat with node 0.4.x
6894 Stream.Stream = Stream;
6895
6896
6897
6898 // old-style streams. Note that the pipe method (the only relevant
6899 // part of this class) is overridden in the Readable class.
6900
6901 function Stream() {
6902 EE.call(this);
6903 }
6904
6905 Stream.prototype.pipe = function(dest, options) {
6906 var source = this;
6907
6908 function ondata(chunk) {
6909 if (dest.writable) {
6910 if (false === dest.write(chunk) && source.pause) {
6911 source.pause();
6912 }
6913 }
6914 }
6915
6916 source.on('data', ondata);
6917
6918 function ondrain() {
6919 if (source.readable && source.resume) {
6920 source.resume();
6921 }
6922 }
6923
6924 dest.on('drain', ondrain);
6925
6926 // If the 'end' option is not supplied, dest.end() will be called when
6927 // source gets the 'end' or 'close' events. Only dest.end() once.
6928 if (!dest._isStdio && (!options || options.end !== false)) {
6929 source.on('end', onend);
6930 source.on('close', onclose);
6931 }
6932
6933 var didOnEnd = false;
6934 function onend() {
6935 if (didOnEnd) return;
6936 didOnEnd = true;
6937
6938 dest.end();
6939 }
6940
6941
6942 function onclose() {
6943 if (didOnEnd) return;
6944 didOnEnd = true;
6945
6946 if (typeof dest.destroy === 'function') dest.destroy();
6947 }
6948
6949 // don't leave dangling pipes when there are errors.
6950 function onerror(er) {
6951 cleanup();
6952 if (EE.listenerCount(this, 'error') === 0) {
6953 throw er; // Unhandled stream error in pipe.
6954 }
6955 }
6956
6957 source.on('error', onerror);
6958 dest.on('error', onerror);
6959
6960 // remove all the event listeners that were added.
6961 function cleanup() {
6962 source.removeListener('data', ondata);
6963 dest.removeListener('drain', ondrain);
6964
6965 source.removeListener('end', onend);
6966 source.removeListener('close', onclose);
6967
6968 source.removeListener('error', onerror);
6969 dest.removeListener('error', onerror);
6970
6971 source.removeListener('end', cleanup);
6972 source.removeListener('close', cleanup);
6973
6974 dest.removeListener('close', cleanup);
6975 }
6976
6977 source.on('end', cleanup);
6978 source.on('close', cleanup);
6979
6980 dest.on('close', cleanup);
6981
6982 dest.emit('pipe', source);
6983
6984 // Allow for unix-like usage: A.pipe(B).pipe(C)
6985 return dest;
6986 };
6987
6988 },{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
6989 // Copyright Joyent, Inc. and other Node contributors.
6990 //
6991 // Permission is hereby granted, free of charge, to any person obtaining a
6992 // copy of this software and associated documentation files (the
6993 // "Software"), to deal in the Software without restriction, including
6994 // without limitation the rights to use, copy, modify, merge, publish,
6995 // distribute, sublicense, and/or sell copies of the Software, and to permit
6996 // persons to whom the Software is furnished to do so, subject to the
6997 // following conditions:
6998 //
6999 // The above copyright notice and this permission notice shall be included
7000 // in all copies or substantial portions of the Software.
7001 //
7002 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7003 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7004 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7005 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7006 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7007 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7008 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7009
7010 var Buffer = require('buffer').Buffer;
7011
7012 var isBufferEncoding = Buffer.isEncoding
7013 || function(encoding) {
7014 switch (encoding && encoding.toLowerCase()) {
7015 case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;
7016 default: return false;
7017 }
7018 }
7019
7020
7021 function assertEncoding(encoding) {
7022 if (encoding && !isBufferEncoding(encoding)) {
7023 throw new Error('Unknown encoding: ' + encoding);
7024 }
7025 }
7026
7027 // StringDecoder provides an interface for efficiently splitting a series of
7028 // buffers into a series of JS strings without breaking apart multi-byte
7029 // characters. CESU-8 is handled as part of the UTF-8 encoding.
7030 //
7031 // @TODO Handling all encodings inside a single object makes it very difficult
7032 // to reason about this code, so it should be split up in the future.
7033 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7034 // points as used by CESU-8.
7035 var StringDecoder = exports.StringDecoder = function(encoding) {
7036 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7037 assertEncoding(encoding);
7038 switch (this.encoding) {
7039 case 'utf8':
7040 // CESU-8 represents each of Surrogate Pair by 3-bytes
7041 this.surrogateSize = 3;
7042 break;
7043 case 'ucs2':
7044 case 'utf16le':
7045 // UTF-16 represents each of Surrogate Pair by 2-bytes
7046 this.surrogateSize = 2;
7047 this.detectIncompleteChar = utf16DetectIncompleteChar;
7048 break;
7049 case 'base64':
7050 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7051 this.surrogateSize = 3;
7052 this.detectIncompleteChar = base64DetectIncompleteChar;
7053 break;
7054 default:
7055 this.write = passThroughWrite;
7056 return;
7057 }
7058
7059 // Enough space to store all bytes of a single character. UTF-8 needs 4
7060 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7061 this.charBuffer = new Buffer(6);
7062 // Number of bytes received for the current incomplete multi-byte character.
7063 this.charReceived = 0;
7064 // Number of bytes expected for the current incomplete multi-byte character.
7065 this.charLength = 0;
7066 };
7067
7068
7069 // write decodes the given buffer and returns it as JS string that is
7070 // guaranteed to not contain any partial multi-byte characters. Any partial
7071 // character found at the end of the buffer is buffered up, and will be
7072 // returned when calling write again with the remaining bytes.
7073 //
7074 // Note: Converting a Buffer containing an orphan surrogate to a String
7075 // currently works, but converting a String to a Buffer (via `new Buffer`, or
7076 // Buffer#write) will replace incomplete surrogates with the unicode
7077 // replacement character. See https://codereview.chromium.org/121173009/ .
7078 StringDecoder.prototype.write = function(buffer) {
7079 var charStr = '';
7080 // if our last write ended with an incomplete multibyte character
7081 while (this.charLength) {
7082 // determine how many remaining bytes this buffer has to offer for this char
7083 var available = (buffer.length >= this.charLength - this.charReceived) ?
7084 this.charLength - this.charReceived :
7085 buffer.length;
7086
7087 // add the new bytes to the char buffer
7088 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7089 this.charReceived += available;
7090
7091 if (this.charReceived < this.charLength) {
7092 // still not enough chars in this buffer? wait for more ...
7093 return '';
7094 }
7095
7096 // remove bytes belonging to the current character from the buffer
7097 buffer = buffer.slice(available, buffer.length);
7098
7099 // get the character that was split
7100 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7101
7102 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7103 var charCode = charStr.charCodeAt(charStr.length - 1);
7104 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7105 this.charLength += this.surrogateSize;
7106 charStr = '';
7107 continue;
7108 }
7109 this.charReceived = this.charLength = 0;
7110
7111 // if there are no more bytes in this buffer, just emit our char
7112 if (buffer.length === 0) {
7113 return charStr;
7114 }
7115 break;
7116 }
7117
7118 // determine and set charLength / charReceived
7119 this.detectIncompleteChar(buffer);
7120
7121 var end = buffer.length;
7122 if (this.charLength) {
7123 // buffer the incomplete character bytes we got
7124 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7125 end -= this.charReceived;
7126 }
7127
7128 charStr += buffer.toString(this.encoding, 0, end);
7129
7130 var end = charStr.length - 1;
7131 var charCode = charStr.charCodeAt(end);
7132 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7133 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7134 var size = this.surrogateSize;
7135 this.charLength += size;
7136 this.charReceived += size;
7137 this.charBuffer.copy(this.charBuffer, size, 0, size);
7138 buffer.copy(this.charBuffer, 0, 0, size);
7139 return charStr.substring(0, end);
7140 }
7141
7142 // or just emit the charStr
7143 return charStr;
7144 };
7145
7146 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
7147 // the end of the given buffer. If so, it sets this.charLength to the byte
7148 // length that character, and sets this.charReceived to the number of bytes
7149 // that are available for this character.
7150 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7151 // determine how many bytes we have to check at the end of this buffer
7152 var i = (buffer.length >= 3) ? 3 : buffer.length;
7153
7154 // Figure out if one of the last i bytes of our buffer announces an
7155 // incomplete char.
7156 for (; i > 0; i--) {
7157 var c = buffer[buffer.length - i];
7158
7159 // See http://en.wikipedia.org/wiki/UTF-8#Description
7160
7161 // 110XXXXX
7162 if (i == 1 && c >> 5 == 0x06) {
7163 this.charLength = 2;
7164 break;
7165 }
7166
7167 // 1110XXXX
7168 if (i <= 2 && c >> 4 == 0x0E) {
7169 this.charLength = 3;
7170 break;
7171 }
7172
7173 // 11110XXX
7174 if (i <= 3 && c >> 3 == 0x1E) {
7175 this.charLength = 4;
7176 break;
7177 }
7178 }
7179 this.charReceived = i;
7180 };
7181
7182 StringDecoder.prototype.end = function(buffer) {
7183 var res = '';
7184 if (buffer && buffer.length)
7185 res = this.write(buffer);
7186
7187 if (this.charReceived) {
7188 var cr = this.charReceived;
7189 var buf = this.charBuffer;
7190 var enc = this.encoding;
7191 res += buf.slice(0, cr).toString(enc);
7192 }
7193
7194 return res;
7195 };
7196
7197 function passThroughWrite(buffer) {
7198 return buffer.toString(this.encoding);
7199 }
7200
7201 function utf16DetectIncompleteChar(buffer) {
7202 this.charReceived = buffer.length % 2;
7203 this.charLength = this.charReceived ? 2 : 0;
7204 }
7205
7206 function base64DetectIncompleteChar(buffer) {
7207 this.charReceived = buffer.length % 3;
7208 this.charLength = this.charReceived ? 3 : 0;
7209 }
7210
7211 },{"buffer":7}],28:[function(require,module,exports){
7212 module.exports = function isBuffer(arg) {
7213 return arg && typeof arg === 'object'
7214 && typeof arg.copy === 'function'
7215 && typeof arg.fill === 'function'
7216 && typeof arg.readUInt8 === 'function';
7217 }
7218 },{}],29:[function(require,module,exports){
7219 (function (process,global){
7220 // Copyright Joyent, Inc. and other Node contributors.
7221 //
7222 // Permission is hereby granted, free of charge, to any person obtaining a
7223 // copy of this software and associated documentation files (the
7224 // "Software"), to deal in the Software without restriction, including
7225 // without limitation the rights to use, copy, modify, merge, publish,
7226 // distribute, sublicense, and/or sell copies of the Software, and to permit
7227 // persons to whom the Software is furnished to do so, subject to the
7228 // following conditions:
7229 //
7230 // The above copyright notice and this permission notice shall be included
7231 // in all copies or substantial portions of the Software.
7232 //
7233 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7234 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7235 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7236 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7237 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7238 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7239 // USE OR OTHER DEALINGS IN THE SOFTWARE.
7240
7241 var formatRegExp = /%[sdj%]/g;
7242 exports.format = function(f) {
7243 if (!isString(f)) {
7244 var objects = [];
7245 for (var i = 0; i < arguments.length; i++) {
7246 objects.push(inspect(arguments[i]));
7247 }
7248 return objects.join(' ');
7249 }
7250
7251 var i = 1;
7252 var args = arguments;
7253 var len = args.length;
7254 var str = String(f).replace(formatRegExp, function(x) {
7255 if (x === '%%') return '%';
7256 if (i >= len) return x;
7257 switch (x) {
7258 case '%s': return String(args[i++]);
7259 case '%d': return Number(args[i++]);
7260 case '%j':
7261 try {
7262 return JSON.stringify(args[i++]);
7263 } catch (_) {
7264 return '[Circular]';
7265 }
7266 default:
7267 return x;
7268 }
7269 });
7270 for (var x = args[i]; i < len; x = args[++i]) {
7271 if (isNull(x) || !isObject(x)) {
7272 str += ' ' + x;
7273 } else {
7274 str += ' ' + inspect(x);
7275 }
7276 }
7277 return str;
7278 };
7279
7280
7281 // Mark that a method should not be used.
7282 // Returns a modified function which warns once by default.
7283 // If --no-deprecation is set, then it is a no-op.
7284 exports.deprecate = function(fn, msg) {
7285 // Allow for deprecating things in the process of starting up.
7286 if (isUndefined(global.process)) {
7287 return function() {
7288 return exports.deprecate(fn, msg).apply(this, arguments);
7289 };
7290 }
7291
7292 if (process.noDeprecation === true) {
7293 return fn;
7294 }
7295
7296 var warned = false;
7297 function deprecated() {
7298 if (!warned) {
7299 if (process.throwDeprecation) {
7300 throw new Error(msg);
7301 } else if (process.traceDeprecation) {
7302 console.trace(msg);
7303 } else {
7304 console.error(msg);
7305 }
7306 warned = true;
7307 }
7308 return fn.apply(this, arguments);
7309 }
7310
7311 return deprecated;
7312 };
7313
7314
7315 var debugs = {};
7316 var debugEnviron;
7317 exports.debuglog = function(set) {
7318 if (isUndefined(debugEnviron))
7319 debugEnviron = process.env.NODE_DEBUG || '';
7320 set = set.toUpperCase();
7321 if (!debugs[set]) {
7322 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7323 var pid = process.pid;
7324 debugs[set] = function() {
7325 var msg = exports.format.apply(exports, arguments);
7326 console.error('%s %d: %s', set, pid, msg);
7327 };
7328 } else {
7329 debugs[set] = function() {};
7330 }
7331 }
7332 return debugs[set];
7333 };
7334
7335
7336 /**
7337 * Echos the value of a value. Trys to print the value out
7338 * in the best way possible given the different types.
7339 *
7340 * @param {Object} obj The object to print out.
7341 * @param {Object} opts Optional options object that alters the output.
7342 */
7343 /* legacy: obj, showHidden, depth, colors*/
7344 function inspect(obj, opts) {
7345 // default options
7346 var ctx = {
7347 seen: [],
7348 stylize: stylizeNoColor
7349 };
7350 // legacy...
7351 if (arguments.length >= 3) ctx.depth = arguments[2];
7352 if (arguments.length >= 4) ctx.colors = arguments[3];
7353 if (isBoolean(opts)) {
7354 // legacy...
7355 ctx.showHidden = opts;
7356 } else if (opts) {
7357 // got an "options" object
7358 exports._extend(ctx, opts);
7359 }
7360 // set default options
7361 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7362 if (isUndefined(ctx.depth)) ctx.depth = 2;
7363 if (isUndefined(ctx.colors)) ctx.colors = false;
7364 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7365 if (ctx.colors) ctx.stylize = stylizeWithColor;
7366 return formatValue(ctx, obj, ctx.depth);
7367 }
7368 exports.inspect = inspect;
7369
7370
7371 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7372 inspect.colors = {
7373 'bold' : [1, 22],
7374 'italic' : [3, 23],
7375 'underline' : [4, 24],
7376 'inverse' : [7, 27],
7377 'white' : [37, 39],
7378 'grey' : [90, 39],
7379 'black' : [30, 39],
7380 'blue' : [34, 39],
7381 'cyan' : [36, 39],
7382 'green' : [32, 39],
7383 'magenta' : [35, 39],
7384 'red' : [31, 39],
7385 'yellow' : [33, 39]
7386 };
7387
7388 // Don't use 'blue' not visible on cmd.exe
7389 inspect.styles = {
7390 'special': 'cyan',
7391 'number': 'yellow',
7392 'boolean': 'yellow',
7393 'undefined': 'grey',
7394 'null': 'bold',
7395 'string': 'green',
7396 'date': 'magenta',
7397 // "name": intentionally not styling
7398 'regexp': 'red'
7399 };
7400
7401
7402 function stylizeWithColor(str, styleType) {
7403 var style = inspect.styles[styleType];
7404
7405 if (style) {
7406 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7407 '\u001b[' + inspect.colors[style][1] + 'm';
7408 } else {
7409 return str;
7410 }
7411 }
7412
7413
7414 function stylizeNoColor(str, styleType) {
7415 return str;
7416 }
7417
7418
7419 function arrayToHash(array) {
7420 var hash = {};
7421
7422 array.forEach(function(val, idx) {
7423 hash[val] = true;
7424 });
7425
7426 return hash;
7427 }
7428
7429
7430 function formatValue(ctx, value, recurseTimes) {
7431 // Provide a hook for user-specified inspect functions.
7432 // Check that value is an object with an inspect function on it
7433 if (ctx.customInspect &&
7434 value &&
7435 isFunction(value.inspect) &&
7436 // Filter out the util module, it's inspect function is special
7437 value.inspect !== exports.inspect &&
7438 // Also filter out any prototype objects using the circular check.
7439 !(value.constructor && value.constructor.prototype === value)) {
7440 var ret = value.inspect(recurseTimes, ctx);
7441 if (!isString(ret)) {
7442 ret = formatValue(ctx, ret, recurseTimes);
7443 }
7444 return ret;
7445 }
7446
7447 // Primitive types cannot have properties
7448 var primitive = formatPrimitive(ctx, value);
7449 if (primitive) {
7450 return primitive;
7451 }
7452
7453 // Look up the keys of the object.
7454 var keys = Object.keys(value);
7455 var visibleKeys = arrayToHash(keys);
7456
7457 if (ctx.showHidden) {
7458 keys = Object.getOwnPropertyNames(value);
7459 }
7460
7461 // IE doesn't make error fields non-enumerable
7462 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7463 if (isError(value)
7464 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7465 return formatError(value);
7466 }
7467
7468 // Some type of object without properties can be shortcutted.
7469 if (keys.length === 0) {
7470 if (isFunction(value)) {
7471 var name = value.name ? ': ' + value.name : '';
7472 return ctx.stylize('[Function' + name + ']', 'special');
7473 }
7474 if (isRegExp(value)) {
7475 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7476 }
7477 if (isDate(value)) {
7478 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7479 }
7480 if (isError(value)) {
7481 return formatError(value);
7482 }
7483 }
7484
7485 var base = '', array = false, braces = ['{', '}'];
7486
7487 // Make Array say that they are Array
7488 if (isArray(value)) {
7489 array = true;
7490 braces = ['[', ']'];
7491 }
7492
7493 // Make functions say that they are functions
7494 if (isFunction(value)) {
7495 var n = value.name ? ': ' + value.name : '';
7496 base = ' [Function' + n + ']';
7497 }
7498
7499 // Make RegExps say that they are RegExps
7500 if (isRegExp(value)) {
7501 base = ' ' + RegExp.prototype.toString.call(value);
7502 }
7503
7504 // Make dates with properties first say the date
7505 if (isDate(value)) {
7506 base = ' ' + Date.prototype.toUTCString.call(value);
7507 }
7508
7509 // Make error with message first say the error
7510 if (isError(value)) {
7511 base = ' ' + formatError(value);
7512 }
7513
7514 if (keys.length === 0 && (!array || value.length == 0)) {
7515 return braces[0] + base + braces[1];
7516 }
7517
7518 if (recurseTimes < 0) {
7519 if (isRegExp(value)) {
7520 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7521 } else {
7522 return ctx.stylize('[Object]', 'special');
7523 }
7524 }
7525
7526 ctx.seen.push(value);
7527
7528 var output;
7529 if (array) {
7530 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7531 } else {
7532 output = keys.map(function(key) {
7533 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7534 });
7535 }
7536
7537 ctx.seen.pop();
7538
7539 return reduceToSingleString(output, base, braces);
7540 }
7541
7542
7543 function formatPrimitive(ctx, value) {
7544 if (isUndefined(value))
7545 return ctx.stylize('undefined', 'undefined');
7546 if (isString(value)) {
7547 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7548 .replace(/'/g, "\\'")
7549 .replace(/\\"/g, '"') + '\'';
7550 return ctx.stylize(simple, 'string');
7551 }
7552 if (isNumber(value))
7553 return ctx.stylize('' + value, 'number');
7554 if (isBoolean(value))
7555 return ctx.stylize('' + value, 'boolean');
7556 // For some reason typeof null is "object", so special case here.
7557 if (isNull(value))
7558 return ctx.stylize('null', 'null');
7559 }
7560
7561
7562 function formatError(value) {
7563 return '[' + Error.prototype.toString.call(value) + ']';
7564 }
7565
7566
7567 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7568 var output = [];
7569 for (var i = 0, l = value.length; i < l; ++i) {
7570 if (hasOwnProperty(value, String(i))) {
7571 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7572 String(i), true));
7573 } else {
7574 output.push('');
7575 }
7576 }
7577 keys.forEach(function(key) {
7578 if (!key.match(/^\d+$/)) {
7579 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7580 key, true));
7581 }
7582 });
7583 return output;
7584 }
7585
7586
7587 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7588 var name, str, desc;
7589 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7590 if (desc.get) {
7591 if (desc.set) {
7592 str = ctx.stylize('[Getter/Setter]', 'special');
7593 } else {
7594 str = ctx.stylize('[Getter]', 'special');
7595 }
7596 } else {
7597 if (desc.set) {
7598 str = ctx.stylize('[Setter]', 'special');
7599 }
7600 }
7601 if (!hasOwnProperty(visibleKeys, key)) {
7602 name = '[' + key + ']';
7603 }
7604 if (!str) {
7605 if (ctx.seen.indexOf(desc.value) < 0) {
7606 if (isNull(recurseTimes)) {
7607 str = formatValue(ctx, desc.value, null);
7608 } else {
7609 str = formatValue(ctx, desc.value, recurseTimes - 1);
7610 }
7611 if (str.indexOf('\n') > -1) {
7612 if (array) {
7613 str = str.split('\n').map(function(line) {
7614 return ' ' + line;
7615 }).join('\n').substr(2);
7616 } else {
7617 str = '\n' + str.split('\n').map(function(line) {
7618 return ' ' + line;
7619 }).join('\n');
7620 }
7621 }
7622 } else {
7623 str = ctx.stylize('[Circular]', 'special');
7624 }
7625 }
7626 if (isUndefined(name)) {
7627 if (array && key.match(/^\d+$/)) {
7628 return str;
7629 }
7630 name = JSON.stringify('' + key);
7631 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7632 name = name.substr(1, name.length - 2);
7633 name = ctx.stylize(name, 'name');
7634 } else {
7635 name = name.replace(/'/g, "\\'")
7636 .replace(/\\"/g, '"')
7637 .replace(/(^"|"$)/g, "'");
7638 name = ctx.stylize(name, 'string');
7639 }
7640 }
7641
7642 return name + ': ' + str;
7643 }
7644
7645
7646 function reduceToSingleString(output, base, braces) {
7647 var numLinesEst = 0;
7648 var length = output.reduce(function(prev, cur) {
7649 numLinesEst++;
7650 if (cur.indexOf('\n') >= 0) numLinesEst++;
7651 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7652 }, 0);
7653
7654 if (length > 60) {
7655 return braces[0] +
7656 (base === '' ? '' : base + '\n ') +
7657 ' ' +
7658 output.join(',\n ') +
7659 ' ' +
7660 braces[1];
7661 }
7662
7663 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7664 }
7665
7666
7667 // NOTE: These type checking functions intentionally don't use `instanceof`
7668 // because it is fragile and can be easily faked with `Object.create()`.
7669 function isArray(ar) {
7670 return Array.isArray(ar);
7671 }
7672 exports.isArray = isArray;
7673
7674 function isBoolean(arg) {
7675 return typeof arg === 'boolean';
7676 }
7677 exports.isBoolean = isBoolean;
7678
7679 function isNull(arg) {
7680 return arg === null;
7681 }
7682 exports.isNull = isNull;
7683
7684 function isNullOrUndefined(arg) {
7685 return arg == null;
7686 }
7687 exports.isNullOrUndefined = isNullOrUndefined;
7688
7689 function isNumber(arg) {
7690 return typeof arg === 'number';
7691 }
7692 exports.isNumber = isNumber;
7693
7694 function isString(arg) {
7695 return typeof arg === 'string';
7696 }
7697 exports.isString = isString;
7698
7699 function isSymbol(arg) {
7700 return typeof arg === 'symbol';
7701 }
7702 exports.isSymbol = isSymbol;
7703
7704 function isUndefined(arg) {
7705 return arg === void 0;
7706 }
7707 exports.isUndefined = isUndefined;
7708
7709 function isRegExp(re) {
7710 return isObject(re) && objectToString(re) === '[object RegExp]';
7711 }
7712 exports.isRegExp = isRegExp;
7713
7714 function isObject(arg) {
7715 return typeof arg === 'object' && arg !== null;
7716 }
7717 exports.isObject = isObject;
7718
7719 function isDate(d) {
7720 return isObject(d) && objectToString(d) === '[object Date]';
7721 }
7722 exports.isDate = isDate;
7723
7724 function isError(e) {
7725 return isObject(e) &&
7726 (objectToString(e) === '[object Error]' || e instanceof Error);
7727 }
7728 exports.isError = isError;
7729
7730 function isFunction(arg) {
7731 return typeof arg === 'function';
7732 }
7733 exports.isFunction = isFunction;
7734
7735 function isPrimitive(arg) {
7736 return arg === null ||
7737 typeof arg === 'boolean' ||
7738 typeof arg === 'number' ||
7739 typeof arg === 'string' ||
7740 typeof arg === 'symbol' || // ES6 symbol
7741 typeof arg === 'undefined';
7742 }
7743 exports.isPrimitive = isPrimitive;
7744
7745 exports.isBuffer = require('./support/isBuffer');
7746
7747 function objectToString(o) {
7748 return Object.prototype.toString.call(o);
7749 }
7750
7751
7752 function pad(n) {
7753 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7754 }
7755
7756
7757 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7758 'Oct', 'Nov', 'Dec'];
7759
7760 // 26 Feb 16:19:34
7761 function timestamp() {
7762 var d = new Date();
7763 var time = [pad(d.getHours()),
7764 pad(d.getMinutes()),
7765 pad(d.getSeconds())].join(':');
7766 return [d.getDate(), months[d.getMonth()], time].join(' ');
7767 }
7768
7769
7770 // log is just a thin wrapper to console.log that prepends a timestamp
7771 exports.log = function() {
7772 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7773 };
7774
7775
7776 /**
7777 * Inherit the prototype methods from one constructor into another.
7778 *
7779 * The Function.prototype.inherits from lang.js rewritten as a standalone
7780 * function (not on Function.prototype). NOTE: If this file is to be loaded
7781 * during bootstrapping this function needs to be rewritten using some native
7782 * functions as prototype setup using normal JavaScript does not work as
7783 * expected during bootstrapping (see mirror.js in r114903).
7784 *
7785 * @param {function} ctor Constructor function which needs to inherit the
7786 * prototype.
7787 * @param {function} superCtor Constructor function to inherit prototype from.
7788 */
7789 exports.inherits = require('inherits');
7790
7791 exports._extend = function(origin, add) {
7792 // Don't do anything if add isn't an object
7793 if (!add || !isObject(add)) return origin;
7794
7795 var keys = Object.keys(add);
7796 var i = keys.length;
7797 while (i--) {
7798 origin[keys[i]] = add[keys[i]];
7799 }
7800 return origin;
7801 };
7802
7803 function hasOwnProperty(obj, prop) {
7804 return Object.prototype.hasOwnProperty.call(obj, prop);
7805 }
7806
7807 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7808 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7809 // Base58 encoding/decoding
7810 // Originally written by Mike Hearn for BitcoinJ
7811 // Copyright (c) 2011 Google Inc
7812 // Ported to JavaScript by Stefan Thomas
7813 // Merged Buffer refactorings from base58-native by Stephen Pair
7814 // Copyright (c) 2013 BitPay Inc
7815
7816 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7817 var ALPHABET_MAP = {}
7818 for(var i = 0; i < ALPHABET.length; i++) {
7819 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7820 }
7821 var BASE = 58
7822
7823 function encode(buffer) {
7824 if (buffer.length === 0) return ''
7825
7826 var i, j, digits = [0]
7827 for (i = 0; i < buffer.length; i++) {
7828 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7829
7830 digits[0] += buffer[i]
7831
7832 var carry = 0
7833 for (j = 0; j < digits.length; ++j) {
7834 digits[j] += carry
7835
7836 carry = (digits[j] / BASE) | 0
7837 digits[j] %= BASE
7838 }
7839
7840 while (carry) {
7841 digits.push(carry % BASE)
7842
7843 carry = (carry / BASE) | 0
7844 }
7845 }
7846
7847 // deal with leading zeros
7848 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7849
7850 // convert digits to a string
7851 var stringOutput = ""
7852 for (var i = digits.length - 1; i >= 0; i--) {
7853 stringOutput = stringOutput + ALPHABET[digits[i]]
7854 }
7855 return stringOutput
7856 }
7857
7858 function decode(string) {
7859 if (string.length === 0) return []
7860
7861 var i, j, bytes = [0]
7862 for (i = 0; i < string.length; i++) {
7863 var c = string[i]
7864 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7865
7866 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7867 bytes[0] += ALPHABET_MAP[c]
7868
7869 var carry = 0
7870 for (j = 0; j < bytes.length; ++j) {
7871 bytes[j] += carry
7872
7873 carry = bytes[j] >> 8
7874 bytes[j] &= 0xff
7875 }
7876
7877 while (carry) {
7878 bytes.push(carry & 0xff)
7879
7880 carry >>= 8
7881 }
7882 }
7883
7884 // deal with leading zeros
7885 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7886
7887 return bytes.reverse()
7888 }
7889
7890 module.exports = {
7891 encode: encode,
7892 decode: decode
7893 }
7894
7895 },{}],31:[function(require,module,exports){
7896 (function (Buffer){
7897 'use strict'
7898
7899 var base58 = require('bs58')
7900 var createHash = require('create-hash')
7901
7902 // SHA256(SHA256(buffer))
7903 function sha256x2 (buffer) {
7904 buffer = createHash('sha256').update(buffer).digest()
7905 return createHash('sha256').update(buffer).digest()
7906 }
7907
7908 // Encode a buffer as a base58-check encoded string
7909 function encode (payload) {
7910 var checksum = sha256x2(payload).slice(0, 4)
7911
7912 return base58.encode(Buffer.concat([
7913 payload,
7914 checksum
7915 ]))
7916 }
7917
7918 // Decode a base58-check encoded string to a buffer
7919 function decode (string) {
7920 var buffer = new Buffer(base58.decode(string))
7921
7922 var payload = buffer.slice(0, -4)
7923 var checksum = buffer.slice(-4)
7924 var newChecksum = sha256x2(payload).slice(0, 4)
7925
7926 for (var i = 0; i < newChecksum.length; ++i) {
7927 if (newChecksum[i] === checksum[i]) continue
7928
7929 throw new Error('Invalid checksum')
7930 }
7931
7932 return payload
7933 }
7934
7935 module.exports = {
7936 encode: encode,
7937 decode: decode
7938 }
7939
7940 }).call(this,require("buffer").Buffer)
7941 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7942 (function (Buffer){
7943 'use strict';
7944 var inherits = require('inherits')
7945 var md5 = require('./md5')
7946 var rmd160 = require('ripemd160')
7947 var sha = require('sha.js')
7948
7949 var Transform = require('stream').Transform
7950
7951 function HashNoConstructor(hash) {
7952 Transform.call(this)
7953
7954 this._hash = hash
7955 this.buffers = []
7956 }
7957
7958 inherits(HashNoConstructor, Transform)
7959
7960 HashNoConstructor.prototype._transform = function (data, _, next) {
7961 this.buffers.push(data)
7962
7963 next()
7964 }
7965
7966 HashNoConstructor.prototype._flush = function (next) {
7967 this.push(this.digest())
7968 next()
7969 }
7970
7971 HashNoConstructor.prototype.update = function (data, enc) {
7972 if (typeof data === 'string') {
7973 data = new Buffer(data, enc)
7974 }
7975
7976 this.buffers.push(data)
7977 return this
7978 }
7979
7980 HashNoConstructor.prototype.digest = function (enc) {
7981 var buf = Buffer.concat(this.buffers)
7982 var r = this._hash(buf)
7983 this.buffers = null
7984
7985 return enc ? r.toString(enc) : r
7986 }
7987
7988 function Hash(hash) {
7989 Transform.call(this)
7990
7991 this._hash = hash
7992 }
7993
7994 inherits(Hash, Transform)
7995
7996 Hash.prototype._transform = function (data, enc, next) {
7997 if (enc) data = new Buffer(data, enc)
7998
7999 this._hash.update(data)
8000
8001 next()
8002 }
8003
8004 Hash.prototype._flush = function (next) {
8005 this.push(this._hash.digest())
8006 this._hash = null
8007
8008 next()
8009 }
8010
8011 Hash.prototype.update = function (data, enc) {
8012 if (typeof data === 'string') {
8013 data = new Buffer(data, enc)
8014 }
8015
8016 this._hash.update(data)
8017 return this
8018 }
8019
8020 Hash.prototype.digest = function (enc) {
8021 var outData = this._hash.digest()
8022
8023 return enc ? outData.toString(enc) : outData
8024 }
8025
8026 module.exports = function createHash (alg) {
8027 if ('md5' === alg) return new HashNoConstructor(md5)
8028 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8029
8030 return new Hash(sha(alg))
8031 }
8032
8033 }).call(this,require("buffer").Buffer)
8034 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
8035 (function (Buffer){
8036 'use strict';
8037 var intSize = 4;
8038 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8039 var chrsz = 8;
8040
8041 function toArray(buf, bigEndian) {
8042 if ((buf.length % intSize) !== 0) {
8043 var len = buf.length + (intSize - (buf.length % intSize));
8044 buf = Buffer.concat([buf, zeroBuffer], len);
8045 }
8046
8047 var arr = [];
8048 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8049 for (var i = 0; i < buf.length; i += intSize) {
8050 arr.push(fn.call(buf, i));
8051 }
8052 return arr;
8053 }
8054
8055 function toBuffer(arr, size, bigEndian) {
8056 var buf = new Buffer(size);
8057 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8058 for (var i = 0; i < arr.length; i++) {
8059 fn.call(buf, arr[i], i * 4, true);
8060 }
8061 return buf;
8062 }
8063
8064 function hash(buf, fn, hashSize, bigEndian) {
8065 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8066 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8067 return toBuffer(arr, hashSize, bigEndian);
8068 }
8069 exports.hash = hash;
8070 }).call(this,require("buffer").Buffer)
8071 },{"buffer":7}],34:[function(require,module,exports){
8072 'use strict';
8073 /*
8074 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8075 * Digest Algorithm, as defined in RFC 1321.
8076 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8077 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8078 * Distributed under the BSD License
8079 * See http://pajhome.org.uk/crypt/md5 for more info.
8080 */
8081
8082 var helpers = require('./helpers');
8083
8084 /*
8085 * Calculate the MD5 of an array of little-endian words, and a bit length
8086 */
8087 function core_md5(x, len)
8088 {
8089 /* append padding */
8090 x[len >> 5] |= 0x80 << ((len) % 32);
8091 x[(((len + 64) >>> 9) << 4) + 14] = len;
8092
8093 var a = 1732584193;
8094 var b = -271733879;
8095 var c = -1732584194;
8096 var d = 271733878;
8097
8098 for(var i = 0; i < x.length; i += 16)
8099 {
8100 var olda = a;
8101 var oldb = b;
8102 var oldc = c;
8103 var oldd = d;
8104
8105 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8106 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8107 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8108 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8109 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8110 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8111 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8112 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8113 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8114 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8115 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8116 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8117 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8118 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8119 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8120 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8121
8122 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8123 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8124 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8125 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8126 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8127 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8128 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8129 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8130 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8131 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8132 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8133 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8134 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8135 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8136 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8137 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8138
8139 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8140 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8141 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8142 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8143 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8144 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8145 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8146 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8147 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8148 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8149 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8150 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8151 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8152 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8153 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8154 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8155
8156 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8157 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8158 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8159 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8160 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8161 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8162 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8163 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8164 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8165 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8166 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8167 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8168 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8169 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8170 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8171 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8172
8173 a = safe_add(a, olda);
8174 b = safe_add(b, oldb);
8175 c = safe_add(c, oldc);
8176 d = safe_add(d, oldd);
8177 }
8178 return Array(a, b, c, d);
8179
8180 }
8181
8182 /*
8183 * These functions implement the four basic operations the algorithm uses.
8184 */
8185 function md5_cmn(q, a, b, x, s, t)
8186 {
8187 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8188 }
8189 function md5_ff(a, b, c, d, x, s, t)
8190 {
8191 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8192 }
8193 function md5_gg(a, b, c, d, x, s, t)
8194 {
8195 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8196 }
8197 function md5_hh(a, b, c, d, x, s, t)
8198 {
8199 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8200 }
8201 function md5_ii(a, b, c, d, x, s, t)
8202 {
8203 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8204 }
8205
8206 /*
8207 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8208 * to work around bugs in some JS interpreters.
8209 */
8210 function safe_add(x, y)
8211 {
8212 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8213 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8214 return (msw << 16) | (lsw & 0xFFFF);
8215 }
8216
8217 /*
8218 * Bitwise rotate a 32-bit number to the left.
8219 */
8220 function bit_rol(num, cnt)
8221 {
8222 return (num << cnt) | (num >>> (32 - cnt));
8223 }
8224
8225 module.exports = function md5(buf) {
8226 return helpers.hash(buf, core_md5, 16);
8227 };
8228 },{"./helpers":33}],35:[function(require,module,exports){
8229 arguments[4][12][0].apply(exports,arguments)
8230 },{"dup":12}],36:[function(require,module,exports){
8231 (function (Buffer){
8232 /*
8233 CryptoJS v3.1.2
8234 code.google.com/p/crypto-js
8235 (c) 2009-2013 by Jeff Mott. All rights reserved.
8236 code.google.com/p/crypto-js/wiki/License
8237 */
8238 /** @preserve
8239 (c) 2012 by Cédric Mesnil. All rights reserved.
8240
8241 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8242
8243 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8244 - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
8245
8246 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8247 */
8248
8249 // constants table
8250 var zl = [
8251 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8252 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8253 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8254 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8255 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8256 ]
8257
8258 var zr = [
8259 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8260 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8261 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8262 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8263 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8264 ]
8265
8266 var sl = [
8267 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8268 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8269 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8270 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8271 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8272 ]
8273
8274 var sr = [
8275 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8276 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8277 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8278 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8279 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8280 ]
8281
8282 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8283 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8284
8285 function bytesToWords (bytes) {
8286 var words = []
8287 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8288 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8289 }
8290 return words
8291 }
8292
8293 function wordsToBytes (words) {
8294 var bytes = []
8295 for (var b = 0; b < words.length * 32; b += 8) {
8296 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8297 }
8298 return bytes
8299 }
8300
8301 function processBlock (H, M, offset) {
8302 // swap endian
8303 for (var i = 0; i < 16; i++) {
8304 var offset_i = offset + i
8305 var M_offset_i = M[offset_i]
8306
8307 // Swap
8308 M[offset_i] = (
8309 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8310 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8311 )
8312 }
8313
8314 // Working variables
8315 var al, bl, cl, dl, el
8316 var ar, br, cr, dr, er
8317
8318 ar = al = H[0]
8319 br = bl = H[1]
8320 cr = cl = H[2]
8321 dr = dl = H[3]
8322 er = el = H[4]
8323
8324 // computation
8325 var t
8326 for (i = 0; i < 80; i += 1) {
8327 t = (al + M[offset + zl[i]]) | 0
8328 if (i < 16) {
8329 t += f1(bl, cl, dl) + hl[0]
8330 } else if (i < 32) {
8331 t += f2(bl, cl, dl) + hl[1]
8332 } else if (i < 48) {
8333 t += f3(bl, cl, dl) + hl[2]
8334 } else if (i < 64) {
8335 t += f4(bl, cl, dl) + hl[3]
8336 } else {// if (i<80) {
8337 t += f5(bl, cl, dl) + hl[4]
8338 }
8339 t = t | 0
8340 t = rotl(t, sl[i])
8341 t = (t + el) | 0
8342 al = el
8343 el = dl
8344 dl = rotl(cl, 10)
8345 cl = bl
8346 bl = t
8347
8348 t = (ar + M[offset + zr[i]]) | 0
8349 if (i < 16) {
8350 t += f5(br, cr, dr) + hr[0]
8351 } else if (i < 32) {
8352 t += f4(br, cr, dr) + hr[1]
8353 } else if (i < 48) {
8354 t += f3(br, cr, dr) + hr[2]
8355 } else if (i < 64) {
8356 t += f2(br, cr, dr) + hr[3]
8357 } else {// if (i<80) {
8358 t += f1(br, cr, dr) + hr[4]
8359 }
8360
8361 t = t | 0
8362 t = rotl(t, sr[i])
8363 t = (t + er) | 0
8364 ar = er
8365 er = dr
8366 dr = rotl(cr, 10)
8367 cr = br
8368 br = t
8369 }
8370
8371 // intermediate hash value
8372 t = (H[1] + cl + dr) | 0
8373 H[1] = (H[2] + dl + er) | 0
8374 H[2] = (H[3] + el + ar) | 0
8375 H[3] = (H[4] + al + br) | 0
8376 H[4] = (H[0] + bl + cr) | 0
8377 H[0] = t
8378 }
8379
8380 function f1 (x, y, z) {
8381 return ((x) ^ (y) ^ (z))
8382 }
8383
8384 function f2 (x, y, z) {
8385 return (((x) & (y)) | ((~x) & (z)))
8386 }
8387
8388 function f3 (x, y, z) {
8389 return (((x) | (~(y))) ^ (z))
8390 }
8391
8392 function f4 (x, y, z) {
8393 return (((x) & (z)) | ((y) & (~(z))))
8394 }
8395
8396 function f5 (x, y, z) {
8397 return ((x) ^ ((y) | (~(z))))
8398 }
8399
8400 function rotl (x, n) {
8401 return (x << n) | (x >>> (32 - n))
8402 }
8403
8404 function ripemd160 (message) {
8405 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8406
8407 if (typeof message === 'string') {
8408 message = new Buffer(message, 'utf8')
8409 }
8410
8411 var m = bytesToWords(message)
8412
8413 var nBitsLeft = message.length * 8
8414 var nBitsTotal = message.length * 8
8415
8416 // Add padding
8417 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8418 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8419 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8420 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8421 )
8422
8423 for (var i = 0; i < m.length; i += 16) {
8424 processBlock(H, m, i)
8425 }
8426
8427 // swap endian
8428 for (i = 0; i < 5; i++) {
8429 // shortcut
8430 var H_i = H[i]
8431
8432 // Swap
8433 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8434 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8435 }
8436
8437 var digestbytes = wordsToBytes(H)
8438 return new Buffer(digestbytes)
8439 }
8440
8441 module.exports = ripemd160
8442
8443 }).call(this,require("buffer").Buffer)
8444 },{"buffer":7}],37:[function(require,module,exports){
8445 (function (Buffer){
8446 // prototype class for hash functions
8447 function Hash (blockSize, finalSize) {
8448 this._block = new Buffer(blockSize)
8449 this._finalSize = finalSize
8450 this._blockSize = blockSize
8451 this._len = 0
8452 this._s = 0
8453 }
8454
8455 Hash.prototype.update = function (data, enc) {
8456 if (typeof data === 'string') {
8457 enc = enc || 'utf8'
8458 data = new Buffer(data, enc)
8459 }
8460
8461 var l = this._len += data.length
8462 var s = this._s || 0
8463 var f = 0
8464 var buffer = this._block
8465
8466 while (s < l) {
8467 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8468 var ch = (t - f)
8469
8470 for (var i = 0; i < ch; i++) {
8471 buffer[(s % this._blockSize) + i] = data[i + f]
8472 }
8473
8474 s += ch
8475 f += ch
8476
8477 if ((s % this._blockSize) === 0) {
8478 this._update(buffer)
8479 }
8480 }
8481 this._s = s
8482
8483 return this
8484 }
8485
8486 Hash.prototype.digest = function (enc) {
8487 // Suppose the length of the message M, in bits, is l
8488 var l = this._len * 8
8489
8490 // Append the bit 1 to the end of the message
8491 this._block[this._len % this._blockSize] = 0x80
8492
8493 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8494 this._block.fill(0, this._len % this._blockSize + 1)
8495
8496 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8497 this._update(this._block)
8498 this._block.fill(0)
8499 }
8500
8501 // to this append the block which is equal to the number l written in binary
8502 // TODO: handle case where l is > Math.pow(2, 29)
8503 this._block.writeInt32BE(l, this._blockSize - 4)
8504
8505 var hash = this._update(this._block) || this._hash()
8506
8507 return enc ? hash.toString(enc) : hash
8508 }
8509
8510 Hash.prototype._update = function () {
8511 throw new Error('_update must be implemented by subclass')
8512 }
8513
8514 module.exports = Hash
8515
8516 }).call(this,require("buffer").Buffer)
8517 },{"buffer":7}],38:[function(require,module,exports){
8518 var exports = module.exports = function SHA (algorithm) {
8519 algorithm = algorithm.toLowerCase()
8520
8521 var Algorithm = exports[algorithm]
8522 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8523
8524 return new Algorithm()
8525 }
8526
8527 exports.sha = require('./sha')
8528 exports.sha1 = require('./sha1')
8529 exports.sha224 = require('./sha224')
8530 exports.sha256 = require('./sha256')
8531 exports.sha384 = require('./sha384')
8532 exports.sha512 = require('./sha512')
8533
8534 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8535 (function (Buffer){
8536 /*
8537 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8538 * in FIPS PUB 180-1
8539 * This source code is derived from sha1.js of the same repository.
8540 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8541 * operation was added.
8542 */
8543
8544 var inherits = require('inherits')
8545 var Hash = require('./hash')
8546
8547 var W = new Array(80)
8548
8549 function Sha () {
8550 this.init()
8551 this._w = W
8552
8553 Hash.call(this, 64, 56)
8554 }
8555
8556 inherits(Sha, Hash)
8557
8558 Sha.prototype.init = function () {
8559 this._a = 0x67452301 | 0
8560 this._b = 0xefcdab89 | 0
8561 this._c = 0x98badcfe | 0
8562 this._d = 0x10325476 | 0
8563 this._e = 0xc3d2e1f0 | 0
8564
8565 return this
8566 }
8567
8568 /*
8569 * Bitwise rotate a 32-bit number to the left.
8570 */
8571 function rol (num, cnt) {
8572 return (num << cnt) | (num >>> (32 - cnt))
8573 }
8574
8575 Sha.prototype._update = function (M) {
8576 var W = this._w
8577
8578 var a = this._a
8579 var b = this._b
8580 var c = this._c
8581 var d = this._d
8582 var e = this._e
8583
8584 var j = 0, k
8585
8586 /*
8587 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8588 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8589 */
8590 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8591 function loop (w, f) {
8592 W[j] = w
8593
8594 var t = rol(a, 5) + f + e + w + k
8595
8596 e = d
8597 d = c
8598 c = rol(b, 30)
8599 b = a
8600 a = t
8601 j++
8602 }
8603
8604 k = 1518500249
8605 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8606 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8607 k = 1859775393
8608 while (j < 40) loop(calcW(), b ^ c ^ d)
8609 k = -1894007588
8610 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8611 k = -899497514
8612 while (j < 80) loop(calcW(), b ^ c ^ d)
8613
8614 this._a = (a + this._a) | 0
8615 this._b = (b + this._b) | 0
8616 this._c = (c + this._c) | 0
8617 this._d = (d + this._d) | 0
8618 this._e = (e + this._e) | 0
8619 }
8620
8621 Sha.prototype._hash = function () {
8622 var H = new Buffer(20)
8623
8624 H.writeInt32BE(this._a | 0, 0)
8625 H.writeInt32BE(this._b | 0, 4)
8626 H.writeInt32BE(this._c | 0, 8)
8627 H.writeInt32BE(this._d | 0, 12)
8628 H.writeInt32BE(this._e | 0, 16)
8629
8630 return H
8631 }
8632
8633 module.exports = Sha
8634
8635
8636 }).call(this,require("buffer").Buffer)
8637 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8638 (function (Buffer){
8639 /*
8640 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8641 * in FIPS PUB 180-1
8642 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8643 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8644 * Distributed under the BSD License
8645 * See http://pajhome.org.uk/crypt/md5 for details.
8646 */
8647
8648 var inherits = require('inherits')
8649 var Hash = require('./hash')
8650
8651 var W = new Array(80)
8652
8653 function Sha1 () {
8654 this.init()
8655 this._w = W
8656
8657 Hash.call(this, 64, 56)
8658 }
8659
8660 inherits(Sha1, Hash)
8661
8662 Sha1.prototype.init = function () {
8663 this._a = 0x67452301 | 0
8664 this._b = 0xefcdab89 | 0
8665 this._c = 0x98badcfe | 0
8666 this._d = 0x10325476 | 0
8667 this._e = 0xc3d2e1f0 | 0
8668
8669 return this
8670 }
8671
8672 /*
8673 * Bitwise rotate a 32-bit number to the left.
8674 */
8675 function rol (num, cnt) {
8676 return (num << cnt) | (num >>> (32 - cnt))
8677 }
8678
8679 Sha1.prototype._update = function (M) {
8680 var W = this._w
8681
8682 var a = this._a
8683 var b = this._b
8684 var c = this._c
8685 var d = this._d
8686 var e = this._e
8687
8688 var j = 0, k
8689
8690 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8691 function loop (w, f) {
8692 W[j] = w
8693
8694 var t = rol(a, 5) + f + e + w + k
8695
8696 e = d
8697 d = c
8698 c = rol(b, 30)
8699 b = a
8700 a = t
8701 j++
8702 }
8703
8704 k = 1518500249
8705 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8706 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8707 k = 1859775393
8708 while (j < 40) loop(calcW(), b ^ c ^ d)
8709 k = -1894007588
8710 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8711 k = -899497514
8712 while (j < 80) loop(calcW(), b ^ c ^ d)
8713
8714 this._a = (a + this._a) | 0
8715 this._b = (b + this._b) | 0
8716 this._c = (c + this._c) | 0
8717 this._d = (d + this._d) | 0
8718 this._e = (e + this._e) | 0
8719 }
8720
8721 Sha1.prototype._hash = function () {
8722 var H = new Buffer(20)
8723
8724 H.writeInt32BE(this._a | 0, 0)
8725 H.writeInt32BE(this._b | 0, 4)
8726 H.writeInt32BE(this._c | 0, 8)
8727 H.writeInt32BE(this._d | 0, 12)
8728 H.writeInt32BE(this._e | 0, 16)
8729
8730 return H
8731 }
8732
8733 module.exports = Sha1
8734
8735 }).call(this,require("buffer").Buffer)
8736 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8737 (function (Buffer){
8738 /**
8739 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8740 * in FIPS 180-2
8741 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8742 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8743 *
8744 */
8745
8746 var inherits = require('inherits')
8747 var Sha256 = require('./sha256')
8748 var Hash = require('./hash')
8749
8750 var W = new Array(64)
8751
8752 function Sha224 () {
8753 this.init()
8754
8755 this._w = W // new Array(64)
8756
8757 Hash.call(this, 64, 56)
8758 }
8759
8760 inherits(Sha224, Sha256)
8761
8762 Sha224.prototype.init = function () {
8763 this._a = 0xc1059ed8 | 0
8764 this._b = 0x367cd507 | 0
8765 this._c = 0x3070dd17 | 0
8766 this._d = 0xf70e5939 | 0
8767 this._e = 0xffc00b31 | 0
8768 this._f = 0x68581511 | 0
8769 this._g = 0x64f98fa7 | 0
8770 this._h = 0xbefa4fa4 | 0
8771
8772 return this
8773 }
8774
8775 Sha224.prototype._hash = function () {
8776 var H = new Buffer(28)
8777
8778 H.writeInt32BE(this._a, 0)
8779 H.writeInt32BE(this._b, 4)
8780 H.writeInt32BE(this._c, 8)
8781 H.writeInt32BE(this._d, 12)
8782 H.writeInt32BE(this._e, 16)
8783 H.writeInt32BE(this._f, 20)
8784 H.writeInt32BE(this._g, 24)
8785
8786 return H
8787 }
8788
8789 module.exports = Sha224
8790
8791 }).call(this,require("buffer").Buffer)
8792 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8793 (function (Buffer){
8794 /**
8795 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8796 * in FIPS 180-2
8797 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8798 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8799 *
8800 */
8801
8802 var inherits = require('inherits')
8803 var Hash = require('./hash')
8804
8805 var K = [
8806 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8807 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8808 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8809 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8810 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8811 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8812 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8813 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8814 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8815 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8816 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8817 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8818 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8819 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8820 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8821 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8822 ]
8823
8824 var W = new Array(64)
8825
8826 function Sha256 () {
8827 this.init()
8828
8829 this._w = W // new Array(64)
8830
8831 Hash.call(this, 64, 56)
8832 }
8833
8834 inherits(Sha256, Hash)
8835
8836 Sha256.prototype.init = function () {
8837 this._a = 0x6a09e667 | 0
8838 this._b = 0xbb67ae85 | 0
8839 this._c = 0x3c6ef372 | 0
8840 this._d = 0xa54ff53a | 0
8841 this._e = 0x510e527f | 0
8842 this._f = 0x9b05688c | 0
8843 this._g = 0x1f83d9ab | 0
8844 this._h = 0x5be0cd19 | 0
8845
8846 return this
8847 }
8848
8849 function S (X, n) {
8850 return (X >>> n) | (X << (32 - n))
8851 }
8852
8853 function R (X, n) {
8854 return (X >>> n)
8855 }
8856
8857 function Ch (x, y, z) {
8858 return ((x & y) ^ ((~x) & z))
8859 }
8860
8861 function Maj (x, y, z) {
8862 return ((x & y) ^ (x & z) ^ (y & z))
8863 }
8864
8865 function Sigma0256 (x) {
8866 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8867 }
8868
8869 function Sigma1256 (x) {
8870 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8871 }
8872
8873 function Gamma0256 (x) {
8874 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8875 }
8876
8877 function Gamma1256 (x) {
8878 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8879 }
8880
8881 Sha256.prototype._update = function (M) {
8882 var W = this._w
8883
8884 var a = this._a | 0
8885 var b = this._b | 0
8886 var c = this._c | 0
8887 var d = this._d | 0
8888 var e = this._e | 0
8889 var f = this._f | 0
8890 var g = this._g | 0
8891 var h = this._h | 0
8892
8893 var j = 0
8894
8895 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8896 function loop (w) {
8897 W[j] = w
8898
8899 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8900 var T2 = Sigma0256(a) + Maj(a, b, c)
8901
8902 h = g
8903 g = f
8904 f = e
8905 e = d + T1
8906 d = c
8907 c = b
8908 b = a
8909 a = T1 + T2
8910
8911 j++
8912 }
8913
8914 while (j < 16) loop(M.readInt32BE(j * 4))
8915 while (j < 64) loop(calcW())
8916
8917 this._a = (a + this._a) | 0
8918 this._b = (b + this._b) | 0
8919 this._c = (c + this._c) | 0
8920 this._d = (d + this._d) | 0
8921 this._e = (e + this._e) | 0
8922 this._f = (f + this._f) | 0
8923 this._g = (g + this._g) | 0
8924 this._h = (h + this._h) | 0
8925 }
8926
8927 Sha256.prototype._hash = function () {
8928 var H = new Buffer(32)
8929
8930 H.writeInt32BE(this._a, 0)
8931 H.writeInt32BE(this._b, 4)
8932 H.writeInt32BE(this._c, 8)
8933 H.writeInt32BE(this._d, 12)
8934 H.writeInt32BE(this._e, 16)
8935 H.writeInt32BE(this._f, 20)
8936 H.writeInt32BE(this._g, 24)
8937 H.writeInt32BE(this._h, 28)
8938
8939 return H
8940 }
8941
8942 module.exports = Sha256
8943
8944 }).call(this,require("buffer").Buffer)
8945 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8946 (function (Buffer){
8947 var inherits = require('inherits')
8948 var SHA512 = require('./sha512')
8949 var Hash = require('./hash')
8950
8951 var W = new Array(160)
8952
8953 function Sha384 () {
8954 this.init()
8955 this._w = W
8956
8957 Hash.call(this, 128, 112)
8958 }
8959
8960 inherits(Sha384, SHA512)
8961
8962 Sha384.prototype.init = function () {
8963 this._a = 0xcbbb9d5d | 0
8964 this._b = 0x629a292a | 0
8965 this._c = 0x9159015a | 0
8966 this._d = 0x152fecd8 | 0
8967 this._e = 0x67332667 | 0
8968 this._f = 0x8eb44a87 | 0
8969 this._g = 0xdb0c2e0d | 0
8970 this._h = 0x47b5481d | 0
8971
8972 this._al = 0xc1059ed8 | 0
8973 this._bl = 0x367cd507 | 0
8974 this._cl = 0x3070dd17 | 0
8975 this._dl = 0xf70e5939 | 0
8976 this._el = 0xffc00b31 | 0
8977 this._fl = 0x68581511 | 0
8978 this._gl = 0x64f98fa7 | 0
8979 this._hl = 0xbefa4fa4 | 0
8980
8981 return this
8982 }
8983
8984 Sha384.prototype._hash = function () {
8985 var H = new Buffer(48)
8986
8987 function writeInt64BE (h, l, offset) {
8988 H.writeInt32BE(h, offset)
8989 H.writeInt32BE(l, offset + 4)
8990 }
8991
8992 writeInt64BE(this._a, this._al, 0)
8993 writeInt64BE(this._b, this._bl, 8)
8994 writeInt64BE(this._c, this._cl, 16)
8995 writeInt64BE(this._d, this._dl, 24)
8996 writeInt64BE(this._e, this._el, 32)
8997 writeInt64BE(this._f, this._fl, 40)
8998
8999 return H
9000 }
9001
9002 module.exports = Sha384
9003
9004 }).call(this,require("buffer").Buffer)
9005 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
9006 (function (Buffer){
9007 var inherits = require('inherits')
9008 var Hash = require('./hash')
9009
9010 var K = [
9011 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
9012 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
9013 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
9014 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
9015 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
9016 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
9017 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
9018 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
9019 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
9020 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
9021 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
9022 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
9023 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
9024 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9025 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9026 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9027 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9028 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9029 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9030 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9031 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9032 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9033 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9034 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9035 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9036 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9037 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9038 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9039 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9040 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9041 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9042 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9043 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9044 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9045 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9046 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9047 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9048 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9049 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9050 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9051 ]
9052
9053 var W = new Array(160)
9054
9055 function Sha512 () {
9056 this.init()
9057 this._w = W
9058
9059 Hash.call(this, 128, 112)
9060 }
9061
9062 inherits(Sha512, Hash)
9063
9064 Sha512.prototype.init = function () {
9065 this._a = 0x6a09e667 | 0
9066 this._b = 0xbb67ae85 | 0
9067 this._c = 0x3c6ef372 | 0
9068 this._d = 0xa54ff53a | 0
9069 this._e = 0x510e527f | 0
9070 this._f = 0x9b05688c | 0
9071 this._g = 0x1f83d9ab | 0
9072 this._h = 0x5be0cd19 | 0
9073
9074 this._al = 0xf3bcc908 | 0
9075 this._bl = 0x84caa73b | 0
9076 this._cl = 0xfe94f82b | 0
9077 this._dl = 0x5f1d36f1 | 0
9078 this._el = 0xade682d1 | 0
9079 this._fl = 0x2b3e6c1f | 0
9080 this._gl = 0xfb41bd6b | 0
9081 this._hl = 0x137e2179 | 0
9082
9083 return this
9084 }
9085
9086 function S (X, Xl, n) {
9087 return (X >>> n) | (Xl << (32 - n))
9088 }
9089
9090 function Ch (x, y, z) {
9091 return ((x & y) ^ ((~x) & z))
9092 }
9093
9094 function Maj (x, y, z) {
9095 return ((x & y) ^ (x & z) ^ (y & z))
9096 }
9097
9098 Sha512.prototype._update = function (M) {
9099 var W = this._w
9100
9101 var a = this._a | 0
9102 var b = this._b | 0
9103 var c = this._c | 0
9104 var d = this._d | 0
9105 var e = this._e | 0
9106 var f = this._f | 0
9107 var g = this._g | 0
9108 var h = this._h | 0
9109
9110 var al = this._al | 0
9111 var bl = this._bl | 0
9112 var cl = this._cl | 0
9113 var dl = this._dl | 0
9114 var el = this._el | 0
9115 var fl = this._fl | 0
9116 var gl = this._gl | 0
9117 var hl = this._hl | 0
9118
9119 var i = 0, j = 0
9120 var Wi, Wil
9121 function calcW () {
9122 var x = W[j - 15 * 2]
9123 var xl = W[j - 15 * 2 + 1]
9124 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9125 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9126
9127 x = W[j - 2 * 2]
9128 xl = W[j - 2 * 2 + 1]
9129 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9130 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9131
9132 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9133 var Wi7 = W[j - 7 * 2]
9134 var Wi7l = W[j - 7 * 2 + 1]
9135
9136 var Wi16 = W[j - 16 * 2]
9137 var Wi16l = W[j - 16 * 2 + 1]
9138
9139 Wil = gamma0l + Wi7l
9140 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9141 Wil = Wil + gamma1l
9142 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9143 Wil = Wil + Wi16l
9144 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9145 }
9146
9147 function loop () {
9148 W[j] = Wi
9149 W[j + 1] = Wil
9150
9151 var maj = Maj(a, b, c)
9152 var majl = Maj(al, bl, cl)
9153
9154 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9155 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9156 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9157 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
9158
9159 // t1 = h + sigma1 + ch + K[i] + W[i]
9160 var Ki = K[j]
9161 var Kil = K[j + 1]
9162
9163 var ch = Ch(e, f, g)
9164 var chl = Ch(el, fl, gl)
9165
9166 var t1l = hl + sigma1l
9167 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9168 t1l = t1l + chl
9169 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9170 t1l = t1l + Kil
9171 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9172 t1l = t1l + Wil
9173 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
9174
9175 // t2 = sigma0 + maj
9176 var t2l = sigma0l + majl
9177 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
9178
9179 h = g
9180 hl = gl
9181 g = f
9182 gl = fl
9183 f = e
9184 fl = el
9185 el = (dl + t1l) | 0
9186 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9187 d = c
9188 dl = cl
9189 c = b
9190 cl = bl
9191 b = a
9192 bl = al
9193 al = (t1l + t2l) | 0
9194 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9195
9196 i++
9197 j += 2
9198 }
9199
9200 while (i < 16) {
9201 Wi = M.readInt32BE(j * 4)
9202 Wil = M.readInt32BE(j * 4 + 4)
9203
9204 loop()
9205 }
9206
9207 while (i < 80) {
9208 calcW()
9209 loop()
9210 }
9211
9212 this._al = (this._al + al) | 0
9213 this._bl = (this._bl + bl) | 0
9214 this._cl = (this._cl + cl) | 0
9215 this._dl = (this._dl + dl) | 0
9216 this._el = (this._el + el) | 0
9217 this._fl = (this._fl + fl) | 0
9218 this._gl = (this._gl + gl) | 0
9219 this._hl = (this._hl + hl) | 0
9220
9221 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9222 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9223 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9224 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9225 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9226 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9227 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9228 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9229 }
9230
9231 Sha512.prototype._hash = function () {
9232 var H = new Buffer(64)
9233
9234 function writeInt64BE (h, l, offset) {
9235 H.writeInt32BE(h, offset)
9236 H.writeInt32BE(l, offset + 4)
9237 }
9238
9239 writeInt64BE(this._a, this._al, 0)
9240 writeInt64BE(this._b, this._bl, 8)
9241 writeInt64BE(this._c, this._cl, 16)
9242 writeInt64BE(this._d, this._dl, 24)
9243 writeInt64BE(this._e, this._el, 32)
9244 writeInt64BE(this._f, this._fl, 40)
9245 writeInt64BE(this._g, this._gl, 48)
9246 writeInt64BE(this._h, this._hl, 56)
9247
9248 return H
9249 }
9250
9251 module.exports = Sha512
9252
9253 }).call(this,require("buffer").Buffer)
9254 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9255 (function (Buffer){
9256 'use strict';
9257 var createHash = require('create-hash/browser');
9258 var inherits = require('inherits')
9259
9260 var Transform = require('stream').Transform
9261
9262 var ZEROS = new Buffer(128)
9263 ZEROS.fill(0)
9264
9265 function Hmac(alg, key) {
9266 Transform.call(this)
9267
9268 if (typeof key === 'string') {
9269 key = new Buffer(key)
9270 }
9271
9272 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
9273
9274 this._alg = alg
9275 this._key = key
9276
9277 if (key.length > blocksize) {
9278 key = createHash(alg).update(key).digest()
9279
9280 } else if (key.length < blocksize) {
9281 key = Buffer.concat([key, ZEROS], blocksize)
9282 }
9283
9284 var ipad = this._ipad = new Buffer(blocksize)
9285 var opad = this._opad = new Buffer(blocksize)
9286
9287 for (var i = 0; i < blocksize; i++) {
9288 ipad[i] = key[i] ^ 0x36
9289 opad[i] = key[i] ^ 0x5C
9290 }
9291
9292 this._hash = createHash(alg).update(ipad)
9293 }
9294
9295 inherits(Hmac, Transform)
9296
9297 Hmac.prototype.update = function (data, enc) {
9298 this._hash.update(data, enc)
9299
9300 return this
9301 }
9302
9303 Hmac.prototype._transform = function (data, _, next) {
9304 this._hash.update(data)
9305
9306 next()
9307 }
9308
9309 Hmac.prototype._flush = function (next) {
9310 this.push(this.digest())
9311
9312 next()
9313 }
9314
9315 Hmac.prototype.digest = function (enc) {
9316 var h = this._hash.digest()
9317
9318 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9319 }
9320
9321 module.exports = function createHmac(alg, key) {
9322 return new Hmac(alg, key)
9323 }
9324
9325 }).call(this,require("buffer").Buffer)
9326 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9327 arguments[4][12][0].apply(exports,arguments)
9328 },{"dup":12}],47:[function(require,module,exports){
9329 var assert = require('assert')
9330 var BigInteger = require('bigi')
9331
9332 var Point = require('./point')
9333
9334 function Curve(p, a, b, Gx, Gy, n, h) {
9335 this.p = p
9336 this.a = a
9337 this.b = b
9338 this.G = Point.fromAffine(this, Gx, Gy)
9339 this.n = n
9340 this.h = h
9341
9342 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9343
9344 // result caching
9345 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9346 }
9347
9348 Curve.prototype.pointFromX = function(isOdd, x) {
9349 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9350 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9351
9352 var y = beta
9353 if (beta.isEven() ^ !isOdd) {
9354 y = this.p.subtract(y) // -y % p
9355 }
9356
9357 return Point.fromAffine(this, x, y)
9358 }
9359
9360 Curve.prototype.isInfinity = function(Q) {
9361 if (Q === this.infinity) return true
9362
9363 return Q.z.signum() === 0 && Q.y.signum() !== 0
9364 }
9365
9366 Curve.prototype.isOnCurve = function(Q) {
9367 if (this.isInfinity(Q)) return true
9368
9369 var x = Q.affineX
9370 var y = Q.affineY
9371 var a = this.a
9372 var b = this.b
9373 var p = this.p
9374
9375 // Check that xQ and yQ are integers in the interval [0, p - 1]
9376 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9377 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9378
9379 // and check that y^2 = x^3 + ax + b (mod p)
9380 var lhs = y.square().mod(p)
9381 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9382 return lhs.equals(rhs)
9383 }
9384
9385 /**
9386 * Validate an elliptic curve point.
9387 *
9388 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9389 */
9390 Curve.prototype.validate = function(Q) {
9391 // Check Q != O
9392 assert(!this.isInfinity(Q), 'Point is at infinity')
9393 assert(this.isOnCurve(Q), 'Point is not on the curve')
9394
9395 // Check nQ = O (where Q is a scalar multiple of G)
9396 var nQ = Q.multiply(this.n)
9397 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9398
9399 return true
9400 }
9401
9402 module.exports = Curve
9403
9404 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9405 module.exports={
9406 "secp128r1": {
9407 "p": "fffffffdffffffffffffffffffffffff",
9408 "a": "fffffffdfffffffffffffffffffffffc",
9409 "b": "e87579c11079f43dd824993c2cee5ed3",
9410 "n": "fffffffe0000000075a30d1b9038a115",
9411 "h": "01",
9412 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9413 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9414 },
9415 "secp160k1": {
9416 "p": "fffffffffffffffffffffffffffffffeffffac73",
9417 "a": "00",
9418 "b": "07",
9419 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9420 "h": "01",
9421 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9422 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9423 },
9424 "secp160r1": {
9425 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9426 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9427 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9428 "n": "0100000000000000000001f4c8f927aed3ca752257",
9429 "h": "01",
9430 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9431 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9432 },
9433 "secp192k1": {
9434 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9435 "a": "00",
9436 "b": "03",
9437 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9438 "h": "01",
9439 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9440 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9441 },
9442 "secp192r1": {
9443 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9444 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9445 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9446 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9447 "h": "01",
9448 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9449 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9450 },
9451 "secp256k1": {
9452 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9453 "a": "00",
9454 "b": "07",
9455 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9456 "h": "01",
9457 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9458 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9459 },
9460 "secp256r1": {
9461 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9462 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9463 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9464 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9465 "h": "01",
9466 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9467 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9468 }
9469 }
9470
9471 },{}],49:[function(require,module,exports){
9472 var Point = require('./point')
9473 var Curve = require('./curve')
9474
9475 var getCurveByName = require('./names')
9476
9477 module.exports = {
9478 Curve: Curve,
9479 Point: Point,
9480 getCurveByName: getCurveByName
9481 }
9482
9483 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9484 var BigInteger = require('bigi')
9485
9486 var curves = require('./curves')
9487 var Curve = require('./curve')
9488
9489 function getCurveByName(name) {
9490 var curve = curves[name]
9491 if (!curve) return null
9492
9493 var p = new BigInteger(curve.p, 16)
9494 var a = new BigInteger(curve.a, 16)
9495 var b = new BigInteger(curve.b, 16)
9496 var n = new BigInteger(curve.n, 16)
9497 var h = new BigInteger(curve.h, 16)
9498 var Gx = new BigInteger(curve.Gx, 16)
9499 var Gy = new BigInteger(curve.Gy, 16)
9500
9501 return new Curve(p, a, b, Gx, Gy, n, h)
9502 }
9503
9504 module.exports = getCurveByName
9505
9506 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9507 (function (Buffer){
9508 var assert = require('assert')
9509 var BigInteger = require('bigi')
9510
9511 var THREE = BigInteger.valueOf(3)
9512
9513 function Point(curve, x, y, z) {
9514 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9515
9516 this.curve = curve
9517 this.x = x
9518 this.y = y
9519 this.z = z
9520 this._zInv = null
9521
9522 this.compressed = true
9523 }
9524
9525 Object.defineProperty(Point.prototype, 'zInv', {
9526 get: function() {
9527 if (this._zInv === null) {
9528 this._zInv = this.z.modInverse(this.curve.p)
9529 }
9530
9531 return this._zInv
9532 }
9533 })
9534
9535 Object.defineProperty(Point.prototype, 'affineX', {
9536 get: function() {
9537 return this.x.multiply(this.zInv).mod(this.curve.p)
9538 }
9539 })
9540
9541 Object.defineProperty(Point.prototype, 'affineY', {
9542 get: function() {
9543 return this.y.multiply(this.zInv).mod(this.curve.p)
9544 }
9545 })
9546
9547 Point.fromAffine = function(curve, x, y) {
9548 return new Point(curve, x, y, BigInteger.ONE)
9549 }
9550
9551 Point.prototype.equals = function(other) {
9552 if (other === this) return true
9553 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9554 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9555
9556 // u = Y2 * Z1 - Y1 * Z2
9557 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9558
9559 if (u.signum() !== 0) return false
9560
9561 // v = X2 * Z1 - X1 * Z2
9562 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9563
9564 return v.signum() === 0
9565 }
9566
9567 Point.prototype.negate = function() {
9568 var y = this.curve.p.subtract(this.y)
9569
9570 return new Point(this.curve, this.x, y, this.z)
9571 }
9572
9573 Point.prototype.add = function(b) {
9574 if (this.curve.isInfinity(this)) return b
9575 if (this.curve.isInfinity(b)) return this
9576
9577 var x1 = this.x
9578 var y1 = this.y
9579 var x2 = b.x
9580 var y2 = b.y
9581
9582 // u = Y2 * Z1 - Y1 * Z2
9583 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9584 // v = X2 * Z1 - X1 * Z2
9585 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9586
9587 if (v.signum() === 0) {
9588 if (u.signum() === 0) {
9589 return this.twice() // this == b, so double
9590 }
9591
9592 return this.curve.infinity // this = -b, so infinity
9593 }
9594
9595 var v2 = v.square()
9596 var v3 = v2.multiply(v)
9597 var x1v2 = x1.multiply(v2)
9598 var zu2 = u.square().multiply(this.z)
9599
9600 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9601 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9602 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9603 var y3 = x1v2.multiply(THREE).multiply(u).subtract(y1.multiply(v3)).subtract(zu2.multiply(u)).multiply(b.z).add(u.multiply(v3)).mod(this.curve.p)
9604 // z3 = v^3 * z1 * z2
9605 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9606
9607 return new Point(this.curve, x3, y3, z3)
9608 }
9609
9610 Point.prototype.twice = function() {
9611 if (this.curve.isInfinity(this)) return this
9612 if (this.y.signum() === 0) return this.curve.infinity
9613
9614 var x1 = this.x
9615 var y1 = this.y
9616
9617 var y1z1 = y1.multiply(this.z)
9618 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9619 var a = this.curve.a
9620
9621 // w = 3 * x1^2 + a * z1^2
9622 var w = x1.square().multiply(THREE)
9623
9624 if (a.signum() !== 0) {
9625 w = w.add(this.z.square().multiply(a))
9626 }
9627
9628 w = w.mod(this.curve.p)
9629 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9630 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9631 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9632 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9633 // z3 = 8 * (y1 * z1)^3
9634 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9635
9636 return new Point(this.curve, x3, y3, z3)
9637 }
9638
9639 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9640 // TODO: modularize the multiplication algorithm
9641 Point.prototype.multiply = function(k) {
9642 if (this.curve.isInfinity(this)) return this
9643 if (k.signum() === 0) return this.curve.infinity
9644
9645 var e = k
9646 var h = e.multiply(THREE)
9647
9648 var neg = this.negate()
9649 var R = this
9650
9651 for (var i = h.bitLength() - 2; i > 0; --i) {
9652 R = R.twice()
9653
9654 var hBit = h.testBit(i)
9655 var eBit = e.testBit(i)
9656
9657 if (hBit != eBit) {
9658 R = R.add(hBit ? this : neg)
9659 }
9660 }
9661
9662 return R
9663 }
9664
9665 // Compute this*j + x*k (simultaneous multiplication)
9666 Point.prototype.multiplyTwo = function(j, x, k) {
9667 var i
9668
9669 if (j.bitLength() > k.bitLength())
9670 i = j.bitLength() - 1
9671 else
9672 i = k.bitLength() - 1
9673
9674 var R = this.curve.infinity
9675 var both = this.add(x)
9676
9677 while (i >= 0) {
9678 R = R.twice()
9679
9680 var jBit = j.testBit(i)
9681 var kBit = k.testBit(i)
9682
9683 if (jBit) {
9684 if (kBit) {
9685 R = R.add(both)
9686
9687 } else {
9688 R = R.add(this)
9689 }
9690
9691 } else {
9692 if (kBit) {
9693 R = R.add(x)
9694 }
9695 }
9696 --i
9697 }
9698
9699 return R
9700 }
9701
9702 Point.prototype.getEncoded = function(compressed) {
9703 if (compressed == undefined) compressed = this.compressed
9704 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9705
9706 var x = this.affineX
9707 var y = this.affineY
9708
9709 var buffer
9710
9711 // Determine size of q in bytes
9712 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9713
9714 // 0x02/0x03 | X
9715 if (compressed) {
9716 buffer = new Buffer(1 + byteLength)
9717 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9718
9719 // 0x04 | X | Y
9720 } else {
9721 buffer = new Buffer(1 + byteLength + byteLength)
9722 buffer.writeUInt8(0x04, 0)
9723
9724 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9725 }
9726
9727 x.toBuffer(byteLength).copy(buffer, 1)
9728
9729 return buffer
9730 }
9731
9732 Point.decodeFrom = function(curve, buffer) {
9733 var type = buffer.readUInt8(0)
9734 var compressed = (type !== 4)
9735
9736 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9737 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9738
9739 var Q
9740 if (compressed) {
9741 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9742 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9743
9744 var isOdd = (type === 0x03)
9745 Q = curve.pointFromX(isOdd, x)
9746
9747 } else {
9748 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9749
9750 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9751 Q = Point.fromAffine(curve, x, y)
9752 }
9753
9754 Q.compressed = compressed
9755 return Q
9756 }
9757
9758 Point.prototype.toString = function () {
9759 if (this.curve.isInfinity(this)) return '(INFINITY)'
9760
9761 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9762 }
9763
9764 module.exports = Point
9765
9766 }).call(this,require("buffer").Buffer)
9767 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9768 (function (process,global,Buffer){
9769 'use strict';
9770
9771 var crypto = global.crypto || global.msCrypto
9772 if(crypto && crypto.getRandomValues) {
9773 module.exports = randomBytes;
9774 } else {
9775 module.exports = oldBrowser;
9776 }
9777 function randomBytes(size, cb) {
9778 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9779 /* This will not work in older browsers.
9780 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9781 */
9782
9783 crypto.getRandomValues(bytes);
9784 if (typeof cb === 'function') {
9785 return process.nextTick(function () {
9786 cb(null, bytes);
9787 });
9788 }
9789 return bytes;
9790 }
9791 function oldBrowser() {
9792 throw new Error(
9793 'secure random number generation not supported by this browser\n'+
9794 'use chrome, FireFox or Internet Explorer 11'
9795 )
9796 }
9797
9798 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9799 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9800 (function (Buffer){
9801 'use strict';
9802
9803 function getFunctionName(fn) {
9804 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9805 }
9806
9807 function getTypeTypeName(type) {
9808 if (nativeTypes.Function(type)) {
9809 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9810 }
9811 if (nativeTypes.Object(type)) return JSON.stringify(type);
9812
9813 return type;
9814 }
9815
9816 function getValueTypeName(value) {
9817 if (nativeTypes.Null(value)) return '';
9818
9819 return getFunctionName(value.constructor);
9820 }
9821
9822 function tfErrorString(type, value) {
9823 var typeTypeName = getTypeTypeName(type);
9824 var valueTypeName = getValueTypeName(value);
9825
9826 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9827 }
9828
9829 function tfPropertyErrorString(type, name, value) {
9830 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9831 }
9832
9833 var nativeTypes = {
9834 Array: (function (_Array) {
9835 function Array(_x) {
9836 return _Array.apply(this, arguments);
9837 }
9838
9839 Array.toString = function () {
9840 return _Array.toString();
9841 };
9842
9843 return Array;
9844 })(function (value) {
9845 return value !== null && value !== undefined && value.constructor === Array;
9846 }),
9847 Boolean: function Boolean(value) {
9848 return typeof value === 'boolean';
9849 },
9850 Buffer: (function (_Buffer) {
9851 function Buffer(_x2) {
9852 return _Buffer.apply(this, arguments);
9853 }
9854
9855 Buffer.toString = function () {
9856 return _Buffer.toString();
9857 };
9858
9859 return Buffer;
9860 })(function (value) {
9861 return Buffer.isBuffer(value);
9862 }),
9863 Function: function Function(value) {
9864 return typeof value === 'function';
9865 },
9866 Null: function Null(value) {
9867 return value === undefined || value === null;
9868 },
9869 Number: function Number(value) {
9870 return typeof value === 'number';
9871 },
9872 Object: function Object(value) {
9873 return typeof value === 'object';
9874 },
9875 String: function String(value) {
9876 return typeof value === 'string';
9877 },
9878 '': function _() {
9879 return true;
9880 }
9881 };
9882
9883 function tJSON(type) {
9884 return type && type.toJSON ? type.toJSON() : type;
9885 }
9886
9887 function sJSON(type) {
9888 var json = tJSON(type);
9889 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9890 }
9891
9892 var otherTypes = {
9893 arrayOf: function arrayOf(type) {
9894 function arrayOf(value, strict) {
9895 try {
9896 return nativeTypes.Array(value) && value.every(function (x) {
9897 return typeforce(type, x, strict);
9898 });
9899 } catch (e) {
9900 return false;
9901 }
9902 }
9903 arrayOf.toJSON = function () {
9904 return [tJSON(type)];
9905 };
9906
9907 return arrayOf;
9908 },
9909
9910 maybe: function maybe(type) {
9911 function maybe(value, strict) {
9912 return nativeTypes.Null(value) || typeforce(type, value, strict);
9913 }
9914 maybe.toJSON = function () {
9915 return '?' + sJSON(type);
9916 };
9917
9918 return maybe;
9919 },
9920
9921 object: function object(type) {
9922 function object(value, strict) {
9923 typeforce(nativeTypes.Object, value, strict);
9924
9925 var propertyName, propertyType, propertyValue;
9926
9927 try {
9928 for (propertyName in type) {
9929 propertyType = type[propertyName];
9930 propertyValue = value[propertyName];
9931
9932 typeforce(propertyType, propertyValue, strict);
9933 }
9934 } catch (e) {
9935 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9936 }
9937
9938 if (strict) {
9939 for (propertyName in value) {
9940 if (type[propertyName]) continue;
9941
9942 throw new TypeError('Unexpected property "' + propertyName + '"');
9943 }
9944 }
9945
9946 return true;
9947 }
9948 object.toJSON = function () {
9949 return type;
9950 };
9951
9952 return object;
9953 },
9954
9955 oneOf: function oneOf() {
9956 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9957 types[_key] = arguments[_key];
9958 }
9959
9960 function oneOf(value, strict) {
9961 return types.some(function (type) {
9962 try {
9963 return typeforce(type, value, strict);
9964 } catch (e) {
9965 return false;
9966 }
9967 });
9968 }
9969 oneOf.toJSON = function () {
9970 return types.map(sJSON).join('|');
9971 };
9972
9973 return oneOf;
9974 },
9975
9976 quacksLike: function quacksLike(type) {
9977 function quacksLike(value, strict) {
9978 return type === getValueTypeName(value);
9979 }
9980 quacksLike.toJSON = function () {
9981 return type;
9982 };
9983
9984 return quacksLike;
9985 },
9986
9987 tuple: function tuple() {
9988 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9989 types[_key2] = arguments[_key2];
9990 }
9991
9992 function tuple(value, strict) {
9993 return types.every(function (type, i) {
9994 return typeforce(type, value[i], strict);
9995 });
9996 }
9997 tuple.toJSON = function () {
9998 return '(' + types.map(sJSON).join(', ') + ')';
9999 };
10000
10001 return tuple;
10002 },
10003
10004 value: function value(expected) {
10005 function value(actual) {
10006 return actual === expected;
10007 }
10008 value.toJSON = function () {
10009 return expected;
10010 };
10011
10012 return value;
10013 }
10014 };
10015
10016 function compile(type) {
10017 if (nativeTypes.String(type)) {
10018 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
10019
10020 return nativeTypes[type] || otherTypes.quacksLike(type);
10021 } else if (type && nativeTypes.Object(type)) {
10022 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
10023
10024 var compiled = {};
10025
10026 for (var propertyName in type) {
10027 compiled[propertyName] = compile(type[propertyName]);
10028 }
10029
10030 return otherTypes.object(compiled);
10031 } else if (nativeTypes.Function(type)) {
10032 return type;
10033 }
10034
10035 return otherTypes.value(type);
10036 }
10037
10038 function typeforce(_x3, _x4, _x5) {
10039 var _again = true;
10040
10041 _function: while (_again) {
10042 var type = _x3,
10043 value = _x4,
10044 strict = _x5;
10045 _again = false;
10046
10047 if (nativeTypes.Function(type)) {
10048 if (type(value, strict)) return true;
10049
10050 throw new TypeError(tfErrorString(type, value));
10051 }
10052
10053 // JIT
10054 _x3 = compile(type);
10055 _x4 = value;
10056 _x5 = strict;
10057 _again = true;
10058 continue _function;
10059 }
10060 }
10061
10062 // assign all types to typeforce function
10063 var typeName;
10064 Object.keys(nativeTypes).forEach(function (typeName) {
10065 var nativeType = nativeTypes[typeName];
10066 nativeType.toJSON = function () {
10067 return typeName;
10068 };
10069
10070 typeforce[typeName] = nativeType;
10071 });
10072
10073 for (typeName in otherTypes) {
10074 typeforce[typeName] = otherTypes[typeName];
10075 }
10076
10077 module.exports = typeforce;
10078 module.exports.compile = compile;
10079 }).call(this,require("buffer").Buffer)
10080 },{"buffer":7}],54:[function(require,module,exports){
10081 (function (Buffer){
10082 var assert = require('assert')
10083 var base58check = require('bs58check')
10084 var typeForce = require('typeforce')
10085 var networks = require('./networks')
10086 var scripts = require('./scripts')
10087
10088 function findScriptTypeByVersion (version) {
10089 for (var networkName in networks) {
10090 var network = networks[networkName]
10091
10092 if (version === network.pubKeyHash) return 'pubkeyhash'
10093 if (version === network.scriptHash) return 'scripthash'
10094 }
10095 }
10096
10097 function Address (hash, version) {
10098 typeForce('Buffer', hash)
10099
10100 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10101 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10102
10103 this.hash = hash
10104 this.version = version
10105 }
10106
10107 Address.fromBase58Check = function (string) {
10108 var payload = base58check.decode(string)
10109 var version = payload.readUInt8(0)
10110 var hash = payload.slice(1)
10111
10112 return new Address(hash, version)
10113 }
10114
10115 Address.fromOutputScript = function (script, network) {
10116 network = network || networks.bitcoin
10117
10118 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10119 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
10120
10121 assert(false, script.toASM() + ' has no matching Address')
10122 }
10123
10124 Address.prototype.toBase58Check = function () {
10125 var payload = new Buffer(21)
10126 payload.writeUInt8(this.version, 0)
10127 this.hash.copy(payload, 1)
10128
10129 return base58check.encode(payload)
10130 }
10131
10132 Address.prototype.toOutputScript = function () {
10133 var scriptType = findScriptTypeByVersion(this.version)
10134
10135 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10136 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10137
10138 assert(false, this.toString() + ' has no matching Script')
10139 }
10140
10141 Address.prototype.toString = Address.prototype.toBase58Check
10142
10143 module.exports = Address
10144
10145 }).call(this,require("buffer").Buffer)
10146 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10147 var bs58check = require('bs58check')
10148
10149 function decode () {
10150 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10151
10152 return bs58check.decode.apply(undefined, arguments)
10153 }
10154
10155 function encode () {
10156 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10157
10158 return bs58check.encode.apply(undefined, arguments)
10159 }
10160
10161 module.exports = {
10162 decode: decode,
10163 encode: encode
10164 }
10165
10166 },{"bs58check":31}],56:[function(require,module,exports){
10167 (function (Buffer){
10168 var assert = require('assert')
10169 var bufferutils = require('./bufferutils')
10170 var crypto = require('./crypto')
10171
10172 var Transaction = require('./transaction')
10173
10174 function Block () {
10175 this.version = 1
10176 this.prevHash = null
10177 this.merkleRoot = null
10178 this.timestamp = 0
10179 this.bits = 0
10180 this.nonce = 0
10181 }
10182
10183 Block.fromBuffer = function (buffer) {
10184 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10185
10186 var offset = 0
10187 function readSlice (n) {
10188 offset += n
10189 return buffer.slice(offset - n, offset)
10190 }
10191
10192 function readUInt32 () {
10193 var i = buffer.readUInt32LE(offset)
10194 offset += 4
10195 return i
10196 }
10197
10198 var block = new Block()
10199 block.version = readUInt32()
10200 block.prevHash = readSlice(32)
10201 block.merkleRoot = readSlice(32)
10202 block.timestamp = readUInt32()
10203 block.bits = readUInt32()
10204 block.nonce = readUInt32()
10205
10206 if (buffer.length === 80) return block
10207
10208 function readVarInt () {
10209 var vi = bufferutils.readVarInt(buffer, offset)
10210 offset += vi.size
10211 return vi.number
10212 }
10213
10214 // FIXME: poor performance
10215 function readTransaction () {
10216 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10217
10218 offset += tx.toBuffer().length
10219 return tx
10220 }
10221
10222 var nTransactions = readVarInt()
10223 block.transactions = []
10224
10225 for (var i = 0; i < nTransactions; ++i) {
10226 var tx = readTransaction()
10227 block.transactions.push(tx)
10228 }
10229
10230 return block
10231 }
10232
10233 Block.fromHex = function (hex) {
10234 return Block.fromBuffer(new Buffer(hex, 'hex'))
10235 }
10236
10237 Block.prototype.getHash = function () {
10238 return crypto.hash256(this.toBuffer(true))
10239 }
10240
10241 Block.prototype.getId = function () {
10242 return bufferutils.reverse(this.getHash()).toString('hex')
10243 }
10244
10245 Block.prototype.getUTCDate = function () {
10246 var date = new Date(0) // epoch
10247 date.setUTCSeconds(this.timestamp)
10248
10249 return date
10250 }
10251
10252 Block.prototype.toBuffer = function (headersOnly) {
10253 var buffer = new Buffer(80)
10254
10255 var offset = 0
10256 function writeSlice (slice) {
10257 slice.copy(buffer, offset)
10258 offset += slice.length
10259 }
10260
10261 function writeUInt32 (i) {
10262 buffer.writeUInt32LE(i, offset)
10263 offset += 4
10264 }
10265
10266 writeUInt32(this.version)
10267 writeSlice(this.prevHash)
10268 writeSlice(this.merkleRoot)
10269 writeUInt32(this.timestamp)
10270 writeUInt32(this.bits)
10271 writeUInt32(this.nonce)
10272
10273 if (headersOnly || !this.transactions) return buffer
10274
10275 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10276 var txBuffers = this.transactions.map(function (tx) {
10277 return tx.toBuffer()
10278 })
10279
10280 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10281 }
10282
10283 Block.prototype.toHex = function (headersOnly) {
10284 return this.toBuffer(headersOnly).toString('hex')
10285 }
10286
10287 module.exports = Block
10288
10289 }).call(this,require("buffer").Buffer)
10290 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10291 (function (Buffer){
10292 var assert = require('assert')
10293 var opcodes = require('./opcodes')
10294
10295 // https://github.com/feross/buffer/blob/master/index.js#L1127
10296 function verifuint (value, max) {
10297 assert(typeof value === 'number', 'cannot write a non-number as a number')
10298 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10299 assert(value <= max, 'value is larger than maximum value for type')
10300 assert(Math.floor(value) === value, 'value has a fractional component')
10301 }
10302
10303 function pushDataSize (i) {
10304 return i < opcodes.OP_PUSHDATA1 ? 1
10305 : i < 0xff ? 2
10306 : i < 0xffff ? 3
10307 : 5
10308 }
10309
10310 function readPushDataInt (buffer, offset) {
10311 var opcode = buffer.readUInt8(offset)
10312 var number, size
10313
10314 // ~6 bit
10315 if (opcode < opcodes.OP_PUSHDATA1) {
10316 number = opcode
10317 size = 1
10318
10319 // 8 bit
10320 } else if (opcode === opcodes.OP_PUSHDATA1) {
10321 if (offset + 2 > buffer.length) return null
10322 number = buffer.readUInt8(offset + 1)
10323 size = 2
10324
10325 // 16 bit
10326 } else if (opcode === opcodes.OP_PUSHDATA2) {
10327 if (offset + 3 > buffer.length) return null
10328 number = buffer.readUInt16LE(offset + 1)
10329 size = 3
10330
10331 // 32 bit
10332 } else {
10333 if (offset + 5 > buffer.length) return null
10334 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10335
10336 number = buffer.readUInt32LE(offset + 1)
10337 size = 5
10338 }
10339
10340 return {
10341 opcode: opcode,
10342 number: number,
10343 size: size
10344 }
10345 }
10346
10347 function readUInt64LE (buffer, offset) {
10348 var a = buffer.readUInt32LE(offset)
10349 var b = buffer.readUInt32LE(offset + 4)
10350 b *= 0x100000000
10351
10352 verifuint(b + a, 0x001fffffffffffff)
10353
10354 return b + a
10355 }
10356
10357 function readVarInt (buffer, offset) {
10358 var t = buffer.readUInt8(offset)
10359 var number, size
10360
10361 // 8 bit
10362 if (t < 253) {
10363 number = t
10364 size = 1
10365
10366 // 16 bit
10367 } else if (t < 254) {
10368 number = buffer.readUInt16LE(offset + 1)
10369 size = 3
10370
10371 // 32 bit
10372 } else if (t < 255) {
10373 number = buffer.readUInt32LE(offset + 1)
10374 size = 5
10375
10376 // 64 bit
10377 } else {
10378 number = readUInt64LE(buffer, offset + 1)
10379 size = 9
10380 }
10381
10382 return {
10383 number: number,
10384 size: size
10385 }
10386 }
10387
10388 function writePushDataInt (buffer, number, offset) {
10389 var size = pushDataSize(number)
10390
10391 // ~6 bit
10392 if (size === 1) {
10393 buffer.writeUInt8(number, offset)
10394
10395 // 8 bit
10396 } else if (size === 2) {
10397 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10398 buffer.writeUInt8(number, offset + 1)
10399
10400 // 16 bit
10401 } else if (size === 3) {
10402 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10403 buffer.writeUInt16LE(number, offset + 1)
10404
10405 // 32 bit
10406 } else {
10407 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10408 buffer.writeUInt32LE(number, offset + 1)
10409 }
10410
10411 return size
10412 }
10413
10414 function writeUInt64LE (buffer, value, offset) {
10415 verifuint(value, 0x001fffffffffffff)
10416
10417 buffer.writeInt32LE(value & -1, offset)
10418 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10419 }
10420
10421 function varIntSize (i) {
10422 return i < 253 ? 1
10423 : i < 0x10000 ? 3
10424 : i < 0x100000000 ? 5
10425 : 9
10426 }
10427
10428 function writeVarInt (buffer, number, offset) {
10429 var size = varIntSize(number)
10430
10431 // 8 bit
10432 if (size === 1) {
10433 buffer.writeUInt8(number, offset)
10434
10435 // 16 bit
10436 } else if (size === 3) {
10437 buffer.writeUInt8(253, offset)
10438 buffer.writeUInt16LE(number, offset + 1)
10439
10440 // 32 bit
10441 } else if (size === 5) {
10442 buffer.writeUInt8(254, offset)
10443 buffer.writeUInt32LE(number, offset + 1)
10444
10445 // 64 bit
10446 } else {
10447 buffer.writeUInt8(255, offset)
10448 writeUInt64LE(buffer, number, offset + 1)
10449 }
10450
10451 return size
10452 }
10453
10454 function varIntBuffer (i) {
10455 var size = varIntSize(i)
10456 var buffer = new Buffer(size)
10457 writeVarInt(buffer, i, 0)
10458
10459 return buffer
10460 }
10461
10462 function reverse (buffer) {
10463 var buffer2 = new Buffer(buffer)
10464 Array.prototype.reverse.call(buffer2)
10465 return buffer2
10466 }
10467
10468 module.exports = {
10469 pushDataSize: pushDataSize,
10470 readPushDataInt: readPushDataInt,
10471 readUInt64LE: readUInt64LE,
10472 readVarInt: readVarInt,
10473 reverse: reverse,
10474 varIntBuffer: varIntBuffer,
10475 varIntSize: varIntSize,
10476 writePushDataInt: writePushDataInt,
10477 writeUInt64LE: writeUInt64LE,
10478 writeVarInt: writeVarInt
10479 }
10480
10481 }).call(this,require("buffer").Buffer)
10482 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10483 var createHash = require('create-hash')
10484
10485 function hash160 (buffer) {
10486 return ripemd160(sha256(buffer))
10487 }
10488
10489 function hash256 (buffer) {
10490 return sha256(sha256(buffer))
10491 }
10492
10493 function ripemd160 (buffer) {
10494 return createHash('rmd160').update(buffer).digest()
10495 }
10496
10497 function sha1 (buffer) {
10498 return createHash('sha1').update(buffer).digest()
10499 }
10500
10501 function sha256 (buffer) {
10502 return createHash('sha256').update(buffer).digest()
10503 }
10504
10505 // FIXME: Name not consistent with others
10506 var createHmac = require('create-hmac')
10507
10508 function HmacSHA256 (buffer, secret) {
10509 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10510 return createHmac('sha256', secret).update(buffer).digest()
10511 }
10512
10513 function HmacSHA512 (buffer, secret) {
10514 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10515 return createHmac('sha512', secret).update(buffer).digest()
10516 }
10517
10518 module.exports = {
10519 ripemd160: ripemd160,
10520 sha1: sha1,
10521 sha256: sha256,
10522 hash160: hash160,
10523 hash256: hash256,
10524 HmacSHA256: HmacSHA256,
10525 HmacSHA512: HmacSHA512
10526 }
10527
10528 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10529 (function (Buffer){
10530 var assert = require('assert')
10531 var createHmac = require('create-hmac')
10532 var typeForce = require('typeforce')
10533
10534 var BigInteger = require('bigi')
10535 var ECSignature = require('./ecsignature')
10536
10537 var ZERO = new Buffer([0])
10538 var ONE = new Buffer([1])
10539
10540 // https://tools.ietf.org/html/rfc6979#section-3.2
10541 function deterministicGenerateK (curve, hash, d, checkSig) {
10542 typeForce('Buffer', hash)
10543 typeForce('BigInteger', d)
10544
10545 // FIXME: remove/uncomment for 2.0.0
10546 // typeForce('Function', checkSig)
10547
10548 if (typeof checkSig !== 'function') {
10549 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10550
10551 checkSig = function (k) {
10552 var G = curve.G
10553 var n = curve.n
10554 var e = BigInteger.fromBuffer(hash)
10555
10556 var Q = G.multiply(k)
10557
10558 if (curve.isInfinity(Q))
10559 return false
10560
10561 var r = Q.affineX.mod(n)
10562 if (r.signum() === 0)
10563 return false
10564
10565 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10566 if (s.signum() === 0)
10567 return false
10568
10569 return true
10570 }
10571 }
10572
10573 // sanity check
10574 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10575
10576 var x = d.toBuffer(32)
10577 var k = new Buffer(32)
10578 var v = new Buffer(32)
10579
10580 // Step A, ignored as hash already provided
10581 // Step B
10582 v.fill(1)
10583
10584 // Step C
10585 k.fill(0)
10586
10587 // Step D
10588 k = createHmac('sha256', k)
10589 .update(v)
10590 .update(ZERO)
10591 .update(x)
10592 .update(hash)
10593 .digest()
10594
10595 // Step E
10596 v = createHmac('sha256', k).update(v).digest()
10597
10598 // Step F
10599 k = createHmac('sha256', k)
10600 .update(v)
10601 .update(ONE)
10602 .update(x)
10603 .update(hash)
10604 .digest()
10605
10606 // Step G
10607 v = createHmac('sha256', k).update(v).digest()
10608
10609 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10610 // Step H2b
10611 v = createHmac('sha256', k).update(v).digest()
10612
10613 var T = BigInteger.fromBuffer(v)
10614
10615 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10616 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10617 k = createHmac('sha256', k)
10618 .update(v)
10619 .update(ZERO)
10620 .digest()
10621
10622 v = createHmac('sha256', k).update(v).digest()
10623
10624 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10625 // Step H2b again
10626 v = createHmac('sha256', k).update(v).digest()
10627 T = BigInteger.fromBuffer(v)
10628 }
10629
10630 return T
10631 }
10632
10633 function sign (curve, hash, d) {
10634 var r, s
10635
10636 var e = BigInteger.fromBuffer(hash)
10637 var n = curve.n
10638 var G = curve.G
10639
10640 deterministicGenerateK(curve, hash, d, function (k) {
10641 var Q = G.multiply(k)
10642
10643 if (curve.isInfinity(Q))
10644 return false
10645
10646 r = Q.affineX.mod(n)
10647 if (r.signum() === 0)
10648 return false
10649
10650 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10651 if (s.signum() === 0)
10652 return false
10653
10654 return true
10655 })
10656
10657 var N_OVER_TWO = n.shiftRight(1)
10658
10659 // enforce low S values, see bip62: 'low s values in signatures'
10660 if (s.compareTo(N_OVER_TWO) > 0) {
10661 s = n.subtract(s)
10662 }
10663
10664 return new ECSignature(r, s)
10665 }
10666
10667 function verifyRaw (curve, e, signature, Q) {
10668 var n = curve.n
10669 var G = curve.G
10670
10671 var r = signature.r
10672 var s = signature.s
10673
10674 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10675 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10676 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10677
10678 // c = s^-1 mod n
10679 var c = s.modInverse(n)
10680
10681 // 1.4.4 Compute u1 = es^−1 mod n
10682 // u2 = rs^−1 mod n
10683 var u1 = e.multiply(c).mod(n)
10684 var u2 = r.multiply(c).mod(n)
10685
10686 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10687 var R = G.multiplyTwo(u1, Q, u2)
10688 var v = R.affineX.mod(n)
10689
10690 // 1.4.5 (cont.) Enforce R is not at infinity
10691 if (curve.isInfinity(R)) return false
10692
10693 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10694 return v.equals(r)
10695 }
10696
10697 function verify (curve, hash, signature, Q) {
10698 // 1.4.2 H = Hash(M), already done by the user
10699 // 1.4.3 e = H
10700 var e = BigInteger.fromBuffer(hash)
10701
10702 return verifyRaw(curve, e, signature, Q)
10703 }
10704
10705 /**
10706 * Recover a public key from a signature.
10707 *
10708 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10709 * Key Recovery Operation".
10710 *
10711 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10712 */
10713 function recoverPubKey (curve, e, signature, i) {
10714 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10715
10716 var n = curve.n
10717 var G = curve.G
10718
10719 var r = signature.r
10720 var s = signature.s
10721
10722 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10723 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10724
10725 // A set LSB signifies that the y-coordinate is odd
10726 var isYOdd = i & 1
10727
10728 // The more significant bit specifies whether we should use the
10729 // first or second candidate key.
10730 var isSecondKey = i >> 1
10731
10732 // 1.1 Let x = r + jn
10733 var x = isSecondKey ? r.add(n) : r
10734 var R = curve.pointFromX(isYOdd, x)
10735
10736 // 1.4 Check that nR is at infinity
10737 var nR = R.multiply(n)
10738 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10739
10740 // Compute -e from e
10741 var eNeg = e.negate().mod(n)
10742
10743 // 1.6.1 Compute Q = r^-1 (sR - eG)
10744 // Q = r^-1 (sR + -eG)
10745 var rInv = r.modInverse(n)
10746
10747 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10748 curve.validate(Q)
10749
10750 return Q
10751 }
10752
10753 /**
10754 * Calculate pubkey extraction parameter.
10755 *
10756 * When extracting a pubkey from a signature, we have to
10757 * distinguish four different cases. Rather than putting this
10758 * burden on the verifier, Bitcoin includes a 2-bit value with the
10759 * signature.
10760 *
10761 * This function simply tries all four cases and returns the value
10762 * that resulted in a successful pubkey recovery.
10763 */
10764 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10765 for (var i = 0; i < 4; i++) {
10766 var Qprime = recoverPubKey(curve, e, signature, i)
10767
10768 // 1.6.2 Verify Q
10769 if (Qprime.equals(Q)) {
10770 return i
10771 }
10772 }
10773
10774 throw new Error('Unable to find valid recovery factor')
10775 }
10776
10777 module.exports = {
10778 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10779 deterministicGenerateK: deterministicGenerateK,
10780 recoverPubKey: recoverPubKey,
10781 sign: sign,
10782 verify: verify,
10783 verifyRaw: verifyRaw
10784 }
10785
10786 }).call(this,require("buffer").Buffer)
10787 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10788 (function (Buffer){
10789 var assert = require('assert')
10790 var base58check = require('bs58check')
10791 var ecdsa = require('./ecdsa')
10792 var networks = require('./networks')
10793 var randomBytes = require('randombytes')
10794 var typeForce = require('typeforce')
10795
10796 var BigInteger = require('bigi')
10797 var ECPubKey = require('./ecpubkey')
10798
10799 var ecurve = require('ecurve')
10800 var secp256k1 = ecurve.getCurveByName('secp256k1')
10801
10802 function ECKey (d, compressed) {
10803 assert(d.signum() > 0, 'Private key must be greater than 0')
10804 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10805
10806 var Q = ECKey.curve.G.multiply(d)
10807
10808 this.d = d
10809 this.pub = new ECPubKey(Q, compressed)
10810 }
10811
10812 // Constants
10813 ECKey.curve = secp256k1
10814
10815 // Static constructors
10816 ECKey.fromWIF = function (string) {
10817 var payload = base58check.decode(string)
10818 var compressed = false
10819
10820 // Ignore the version byte
10821 payload = payload.slice(1)
10822
10823 if (payload.length === 33) {
10824 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10825
10826 // Truncate the compression flag
10827 payload = payload.slice(0, -1)
10828 compressed = true
10829 }
10830
10831 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10832
10833 var d = BigInteger.fromBuffer(payload)
10834 return new ECKey(d, compressed)
10835 }
10836
10837 ECKey.makeRandom = function (compressed, rng) {
10838 rng = rng || randomBytes
10839
10840 var buffer = rng(32)
10841 typeForce('Buffer', buffer)
10842 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10843
10844 var d = BigInteger.fromBuffer(buffer)
10845 d = d.mod(ECKey.curve.n)
10846
10847 return new ECKey(d, compressed)
10848 }
10849
10850 // Export functions
10851 ECKey.prototype.toWIF = function (network) {
10852 network = network || networks.bitcoin
10853
10854 var bufferLen = this.pub.compressed ? 34 : 33
10855 var buffer = new Buffer(bufferLen)
10856
10857 buffer.writeUInt8(network.wif, 0)
10858 this.d.toBuffer(32).copy(buffer, 1)
10859
10860 if (this.pub.compressed) {
10861 buffer.writeUInt8(0x01, 33)
10862 }
10863
10864 return base58check.encode(buffer)
10865 }
10866
10867 // Operations
10868 ECKey.prototype.sign = function (hash) {
10869 return ecdsa.sign(ECKey.curve, hash, this.d)
10870 }
10871
10872 module.exports = ECKey
10873
10874 }).call(this,require("buffer").Buffer)
10875 },{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
10876 (function (Buffer){
10877 var crypto = require('./crypto')
10878 var ecdsa = require('./ecdsa')
10879 var typeForce = require('typeforce')
10880 var networks = require('./networks')
10881
10882 var Address = require('./address')
10883
10884 var ecurve = require('ecurve')
10885 var secp256k1 = ecurve.getCurveByName('secp256k1')
10886
10887 function ECPubKey (Q, compressed) {
10888 if (compressed === undefined) {
10889 compressed = true
10890 }
10891
10892 typeForce('Point', Q)
10893 typeForce('Boolean', compressed)
10894
10895 this.compressed = compressed
10896 this.Q = Q
10897 }
10898
10899 // Constants
10900 ECPubKey.curve = secp256k1
10901
10902 // Static constructors
10903 ECPubKey.fromBuffer = function (buffer) {
10904 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10905 return new ECPubKey(Q, Q.compressed)
10906 }
10907
10908 ECPubKey.fromHex = function (hex) {
10909 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10910 }
10911
10912 // Operations
10913 ECPubKey.prototype.getAddress = function (network) {
10914 network = network || networks.bitcoin
10915
10916 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10917 }
10918
10919 ECPubKey.prototype.verify = function (hash, signature) {
10920 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10921 }
10922
10923 // Export functions
10924 ECPubKey.prototype.toBuffer = function () {
10925 return this.Q.getEncoded(this.compressed)
10926 }
10927
10928 ECPubKey.prototype.toHex = function () {
10929 return this.toBuffer().toString('hex')
10930 }
10931
10932 module.exports = ECPubKey
10933
10934 }).call(this,require("buffer").Buffer)
10935 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10936 (function (Buffer){
10937 var assert = require('assert')
10938 var typeForce = require('typeforce')
10939
10940 var BigInteger = require('bigi')
10941
10942 function ECSignature (r, s) {
10943 typeForce('BigInteger', r)
10944 typeForce('BigInteger', s)
10945
10946 this.r = r
10947 this.s = s
10948 }
10949
10950 ECSignature.parseCompact = function (buffer) {
10951 assert.equal(buffer.length, 65, 'Invalid signature length')
10952 var i = buffer.readUInt8(0) - 27
10953
10954 // At most 3 bits
10955 assert.equal(i, i & 7, 'Invalid signature parameter')
10956 var compressed = !!(i & 4)
10957
10958 // Recovery param only
10959 i = i & 3
10960
10961 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10962 var s = BigInteger.fromBuffer(buffer.slice(33))
10963
10964 return {
10965 compressed: compressed,
10966 i: i,
10967 signature: new ECSignature(r, s)
10968 }
10969 }
10970
10971 ECSignature.fromDER = function (buffer) {
10972 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10973 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10974 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10975
10976 var rLen = buffer.readUInt8(3)
10977 assert(rLen > 0, 'R length is zero')
10978
10979 var offset = 4 + rLen
10980 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10981
10982 var sLen = buffer.readUInt8(offset + 1)
10983 assert(sLen > 0, 'S length is zero')
10984
10985 var rB = buffer.slice(4, offset)
10986 var sB = buffer.slice(offset + 2)
10987 offset += 2 + sLen
10988
10989 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10990 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10991 }
10992
10993 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10994 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10995 }
10996
10997 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10998 var r = BigInteger.fromDERInteger(rB)
10999 var s = BigInteger.fromDERInteger(sB)
11000
11001 assert(r.signum() >= 0, 'R value is negative')
11002 assert(s.signum() >= 0, 'S value is negative')
11003
11004 return new ECSignature(r, s)
11005 }
11006
11007 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
11008 ECSignature.parseScriptSignature = function (buffer) {
11009 var hashType = buffer.readUInt8(buffer.length - 1)
11010 var hashTypeMod = hashType & ~0x80
11011
11012 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11013
11014 return {
11015 signature: ECSignature.fromDER(buffer.slice(0, -1)),
11016 hashType: hashType
11017 }
11018 }
11019
11020 ECSignature.prototype.toCompact = function (i, compressed) {
11021 if (compressed) {
11022 i += 4
11023 }
11024
11025 i += 27
11026
11027 var buffer = new Buffer(65)
11028 buffer.writeUInt8(i, 0)
11029
11030 this.r.toBuffer(32).copy(buffer, 1)
11031 this.s.toBuffer(32).copy(buffer, 33)
11032
11033 return buffer
11034 }
11035
11036 ECSignature.prototype.toDER = function () {
11037 var rBa = this.r.toDERInteger()
11038 var sBa = this.s.toDERInteger()
11039
11040 var sequence = []
11041
11042 // INTEGER
11043 sequence.push(0x02, rBa.length)
11044 sequence = sequence.concat(rBa)
11045
11046 // INTEGER
11047 sequence.push(0x02, sBa.length)
11048 sequence = sequence.concat(sBa)
11049
11050 // SEQUENCE
11051 sequence.unshift(0x30, sequence.length)
11052
11053 return new Buffer(sequence)
11054 }
11055
11056 ECSignature.prototype.toScriptSignature = function (hashType) {
11057 var hashTypeMod = hashType & ~0x80
11058 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11059
11060 var hashTypeBuffer = new Buffer(1)
11061 hashTypeBuffer.writeUInt8(hashType, 0)
11062
11063 return Buffer.concat([this.toDER(), hashTypeBuffer])
11064 }
11065
11066 module.exports = ECSignature
11067
11068 }).call(this,require("buffer").Buffer)
11069 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
11070 (function (Buffer){
11071 var assert = require('assert')
11072 var base58check = require('bs58check')
11073 var bcrypto = require('./crypto')
11074 var createHmac = require('create-hmac')
11075 var typeForce = require('typeforce')
11076 var networks = require('./networks')
11077
11078 var BigInteger = require('bigi')
11079 var ECKey = require('./eckey')
11080 var ECPubKey = require('./ecpubkey')
11081
11082 var ecurve = require('ecurve')
11083 var curve = ecurve.getCurveByName('secp256k1')
11084
11085 function findBIP32NetworkByVersion (version) {
11086 for (var name in networks) {
11087 var network = networks[name]
11088
11089 if (version === network.bip32.private || version === network.bip32.public) {
11090 return network
11091 }
11092 }
11093
11094 assert(false, 'Could not find network for ' + version.toString(16))
11095 }
11096
11097 function HDNode (K, chainCode, network) {
11098 network = network || networks.bitcoin
11099
11100 typeForce('Buffer', chainCode)
11101
11102 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
11103 assert(network.bip32, 'Unknown BIP32 constants for network')
11104
11105 this.chainCode = chainCode
11106 this.depth = 0
11107 this.index = 0
11108 this.parentFingerprint = 0x00000000
11109 this.network = network
11110
11111 if (K instanceof BigInteger) {
11112 this.privKey = new ECKey(K, true)
11113 this.pubKey = this.privKey.pub
11114 } else if (K instanceof ECKey) {
11115 assert(K.pub.compressed, 'ECKey must be compressed')
11116 this.privKey = K
11117 this.pubKey = K.pub
11118 } else if (K instanceof ECPubKey) {
11119 assert(K.compressed, 'ECPubKey must be compressed')
11120 this.pubKey = K
11121 } else {
11122 this.pubKey = new ECPubKey(K, true)
11123 }
11124 }
11125
11126 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11127 HDNode.HIGHEST_BIT = 0x80000000
11128 HDNode.LENGTH = 78
11129
11130 HDNode.fromSeedBuffer = function (seed, network) {
11131 typeForce('Buffer', seed)
11132
11133 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11134 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11135
11136 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
11137 var IL = I.slice(0, 32)
11138 var IR = I.slice(32)
11139
11140 // In case IL is 0 or >= n, the master key is invalid
11141 // This is handled by `new ECKey` in the HDNode constructor
11142 var pIL = BigInteger.fromBuffer(IL)
11143
11144 return new HDNode(pIL, IR, network)
11145 }
11146
11147 HDNode.fromSeedHex = function (hex, network) {
11148 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11149 }
11150
11151 HDNode.fromBase58 = function (string, network) {
11152 return HDNode.fromBuffer(base58check.decode(string), network, true)
11153 }
11154
11155 // FIXME: remove in 2.x.y
11156 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11157 if (!__ignoreDeprecation) {
11158 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11159 }
11160
11161 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11162
11163 // 4 byte: version bytes
11164 var version = buffer.readUInt32BE(0)
11165
11166 if (network) {
11167 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11168
11169 // auto-detect
11170 } else {
11171 network = findBIP32NetworkByVersion(version)
11172 }
11173
11174 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11175 var depth = buffer.readUInt8(4)
11176
11177 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11178 var parentFingerprint = buffer.readUInt32BE(5)
11179 if (depth === 0) {
11180 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11181 }
11182
11183 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11184 // This is encoded in MSB order. (0x00000000 if master key)
11185 var index = buffer.readUInt32BE(9)
11186 assert(depth > 0 || index === 0, 'Invalid index')
11187
11188 // 32 bytes: the chain code
11189 var chainCode = buffer.slice(13, 45)
11190 var data, hd
11191
11192 // 33 bytes: private key data (0x00 + k)
11193 if (version === network.bip32.private) {
11194 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
11195 data = buffer.slice(46, 78)
11196 var d = BigInteger.fromBuffer(data)
11197 hd = new HDNode(d, chainCode, network)
11198
11199 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11200 } else {
11201 data = buffer.slice(45, 78)
11202 var Q = ecurve.Point.decodeFrom(curve, data)
11203 assert.equal(Q.compressed, true, 'Invalid public key')
11204
11205 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11206 // If not, the extended public key is invalid.
11207 curve.validate(Q)
11208
11209 hd = new HDNode(Q, chainCode, network)
11210 }
11211
11212 hd.depth = depth
11213 hd.index = index
11214 hd.parentFingerprint = parentFingerprint
11215
11216 return hd
11217 }
11218
11219 // FIXME: remove in 2.x.y
11220 HDNode.fromHex = function (hex, network) {
11221 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
11222 }
11223
11224 HDNode.prototype.getIdentifier = function () {
11225 return bcrypto.hash160(this.pubKey.toBuffer())
11226 }
11227
11228 HDNode.prototype.getFingerprint = function () {
11229 return this.getIdentifier().slice(0, 4)
11230 }
11231
11232 HDNode.prototype.getAddress = function () {
11233 return this.pubKey.getAddress(this.network)
11234 }
11235
11236 HDNode.prototype.neutered = function () {
11237 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11238 neutered.depth = this.depth
11239 neutered.index = this.index
11240 neutered.parentFingerprint = this.parentFingerprint
11241
11242 return neutered
11243 }
11244
11245 HDNode.prototype.toBase58 = function (isPrivate) {
11246 return base58check.encode(this.toBuffer(isPrivate, true))
11247 }
11248
11249 // FIXME: remove in 2.x.y
11250 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11251 if (isPrivate === undefined) {
11252 isPrivate = !!this.privKey
11253
11254 // FIXME: remove in 2.x.y
11255 } else {
11256 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11257 }
11258
11259 if (!__ignoreDeprecation) {
11260 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11261 }
11262
11263 // Version
11264 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11265 var buffer = new Buffer(HDNode.LENGTH)
11266
11267 // 4 bytes: version bytes
11268 buffer.writeUInt32BE(version, 0)
11269
11270 // Depth
11271 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11272 buffer.writeUInt8(this.depth, 4)
11273
11274 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11275 buffer.writeUInt32BE(this.parentFingerprint, 5)
11276
11277 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11278 // This is encoded in Big endian. (0x00000000 if master key)
11279 buffer.writeUInt32BE(this.index, 9)
11280
11281 // 32 bytes: the chain code
11282 this.chainCode.copy(buffer, 13)
11283
11284 // 33 bytes: the public key or private key data
11285 if (isPrivate) {
11286 // FIXME: remove in 2.x.y
11287 assert(this.privKey, 'Missing private key')
11288
11289 // 0x00 + k for private keys
11290 buffer.writeUInt8(0, 45)
11291 this.privKey.d.toBuffer(32).copy(buffer, 46)
11292 } else {
11293 // X9.62 encoding for public keys
11294 this.pubKey.toBuffer().copy(buffer, 45)
11295 }
11296
11297 return buffer
11298 }
11299
11300 // FIXME: remove in 2.x.y
11301 HDNode.prototype.toHex = function (isPrivate) {
11302 return this.toBuffer(isPrivate).toString('hex')
11303 }
11304
11305 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11306 HDNode.prototype.derive = function (index) {
11307 var isHardened = index >= HDNode.HIGHEST_BIT
11308 var indexBuffer = new Buffer(4)
11309 indexBuffer.writeUInt32BE(index, 0)
11310
11311 var data
11312
11313 // Hardened child
11314 if (isHardened) {
11315 assert(this.privKey, 'Could not derive hardened child key')
11316
11317 // data = 0x00 || ser256(kpar) || ser32(index)
11318 data = Buffer.concat([
11319 this.privKey.d.toBuffer(33),
11320 indexBuffer
11321 ])
11322
11323 // Normal child
11324 } else {
11325 // data = serP(point(kpar)) || ser32(index)
11326 // = serP(Kpar) || ser32(index)
11327 data = Buffer.concat([
11328 this.pubKey.toBuffer(),
11329 indexBuffer
11330 ])
11331 }
11332
11333 var I = createHmac('sha512', this.chainCode).update(data).digest()
11334 var IL = I.slice(0, 32)
11335 var IR = I.slice(32)
11336
11337 var pIL = BigInteger.fromBuffer(IL)
11338
11339 // In case parse256(IL) >= n, proceed with the next value for i
11340 if (pIL.compareTo(curve.n) >= 0) {
11341 return this.derive(index + 1)
11342 }
11343
11344 // Private parent key -> private child key
11345 var hd
11346 if (this.privKey) {
11347 // ki = parse256(IL) + kpar (mod n)
11348 var ki = pIL.add(this.privKey.d).mod(curve.n)
11349
11350 // In case ki == 0, proceed with the next value for i
11351 if (ki.signum() === 0) {
11352 return this.derive(index + 1)
11353 }
11354
11355 hd = new HDNode(ki, IR, this.network)
11356
11357 // Public parent key -> public child key
11358 } else {
11359 // Ki = point(parse256(IL)) + Kpar
11360 // = G*IL + Kpar
11361 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11362
11363 // In case Ki is the point at infinity, proceed with the next value for i
11364 if (curve.isInfinity(Ki)) {
11365 return this.derive(index + 1)
11366 }
11367
11368 hd = new HDNode(Ki, IR, this.network)
11369 }
11370
11371 hd.depth = this.depth + 1
11372 hd.index = index
11373 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11374
11375 return hd
11376 }
11377
11378 HDNode.prototype.deriveHardened = function (index) {
11379 // Only derives hardened private keys by default
11380 return this.derive(index + HDNode.HIGHEST_BIT)
11381 }
11382
11383 HDNode.prototype.toString = HDNode.prototype.toBase58
11384
11385 module.exports = HDNode
11386
11387 }).call(this,require("buffer").Buffer)
11388 },{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
11389 module.exports = {
11390 Address: require('./address'),
11391 base58check: require('./base58check'),
11392 Block: require('./block'),
11393 bufferutils: require('./bufferutils'),
11394 crypto: require('./crypto'),
11395 ecdsa: require('./ecdsa'),
11396 ECKey: require('./eckey'),
11397 ECPubKey: require('./ecpubkey'),
11398 ECSignature: require('./ecsignature'),
11399 Message: require('./message'),
11400 opcodes: require('./opcodes'),
11401 HDNode: require('./hdnode'),
11402 Script: require('./script'),
11403 scripts: require('./scripts'),
11404 Transaction: require('./transaction'),
11405 TransactionBuilder: require('./transaction_builder'),
11406 networks: require('./networks'),
11407 Wallet: require('./wallet')
11408 }
11409
11410 },{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
11411 (function (Buffer){
11412 var bufferutils = require('./bufferutils')
11413 var crypto = require('./crypto')
11414 var ecdsa = require('./ecdsa')
11415 var networks = require('./networks')
11416
11417 var BigInteger = require('bigi')
11418 var ECPubKey = require('./ecpubkey')
11419 var ECSignature = require('./ecsignature')
11420
11421 var ecurve = require('ecurve')
11422 var ecparams = ecurve.getCurveByName('secp256k1')
11423
11424 function magicHash (message, network) {
11425 var magicPrefix = new Buffer(network.magicPrefix)
11426 var messageBuffer = new Buffer(message)
11427 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11428
11429 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11430 return crypto.hash256(buffer)
11431 }
11432
11433 function sign (privKey, message, network) {
11434 network = network || networks.bitcoin
11435
11436 var hash = magicHash(message, network)
11437 var signature = privKey.sign(hash)
11438 var e = BigInteger.fromBuffer(hash)
11439 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11440
11441 return signature.toCompact(i, privKey.pub.compressed)
11442 }
11443
11444 // TODO: network could be implied from address
11445 function verify (address, signature, message, network) {
11446 if (!Buffer.isBuffer(signature)) {
11447 signature = new Buffer(signature, 'base64')
11448 }
11449
11450 network = network || networks.bitcoin
11451
11452 var hash = magicHash(message, network)
11453 var parsed = ECSignature.parseCompact(signature)
11454 var e = BigInteger.fromBuffer(hash)
11455 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11456
11457 var pubKey = new ECPubKey(Q, parsed.compressed)
11458 return pubKey.getAddress(network).toString() === address.toString()
11459 }
11460
11461 module.exports = {
11462 magicHash: magicHash,
11463 sign: sign,
11464 verify: verify
11465 }
11466
11467 }).call(this,require("buffer").Buffer)
11468 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11469 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11470 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11471
11472 var networks = {
11473 bitcoin: {
11474 magicPrefix: '\x18Bitcoin Signed Message:\n',
11475 bip32: {
11476 public: 0x0488b21e,
11477 private: 0x0488ade4
11478 },
11479 pubKeyHash: 0x00,
11480 scriptHash: 0x05,
11481 wif: 0x80,
11482 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11483 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11484 estimateFee: estimateFee('bitcoin')
11485 },
11486 testnet: {
11487 magicPrefix: '\x18Bitcoin Signed Message:\n',
11488 bip32: {
11489 public: 0x043587cf,
11490 private: 0x04358394
11491 },
11492 pubKeyHash: 0x6f,
11493 scriptHash: 0xc4,
11494 wif: 0xef,
11495 dustThreshold: 546,
11496 feePerKb: 10000,
11497 estimateFee: estimateFee('testnet')
11498 },
11499 litecoin: {
11500 magicPrefix: '\x19Litecoin Signed Message:\n',
11501 bip32: {
11502 public: 0x019da462,
11503 private: 0x019d9cfe
11504 },
11505 pubKeyHash: 0x30,
11506 scriptHash: 0x05,
11507 wif: 0xb0,
11508 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11509 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11510 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11511 estimateFee: estimateFee('litecoin')
11512 },
11513 dogecoin: {
11514 magicPrefix: '\x19Dogecoin Signed Message:\n',
11515 bip32: {
11516 public: 0x02facafd,
11517 private: 0x02fac398
11518 },
11519 pubKeyHash: 0x1e,
11520 scriptHash: 0x16,
11521 wif: 0x9e,
11522 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11523 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11524 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11525 estimateFee: estimateFee('dogecoin')
11526 },
11527 viacoin: {
11528 magicPrefix: '\x18Viacoin Signed Message:\n',
11529 bip32: {
11530 public: 0x0488b21e,
11531 private: 0x0488ade4
11532 },
11533 pubKeyHash: 0x47,
11534 scriptHash: 0x21,
11535 wif: 0xc7,
11536 dustThreshold: 560,
11537 dustSoftThreshold: 100000,
11538 feePerKb: 100000, //
11539 estimateFee: estimateFee('viacoin')
11540 },
11541 viacointestnet: {
11542 magicPrefix: '\x18Viacoin Signed Message:\n',
11543 bip32: {
11544 public: 0x043587cf,
11545 private: 0x04358394
11546 },
11547 pubKeyHash: 0x7f,
11548 scriptHash: 0xc4,
11549 wif: 0xff,
11550 dustThreshold: 560,
11551 dustSoftThreshold: 100000,
11552 feePerKb: 100000,
11553 estimateFee: estimateFee('viacointestnet')
11554 },
11555 gamerscoin: {
11556 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11557 bip32: {
11558 public: 0x019da462,
11559 private: 0x019d9cfe
11560 },
11561 pubKeyHash: 0x26,
11562 scriptHash: 0x05,
11563 wif: 0xA6,
11564 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11565 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11566 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11567 estimateFee: estimateFee('gamerscoin')
11568 },
11569 jumbucks: {
11570 magicPrefix: '\x19Jumbucks Signed Message:\n',
11571 bip32: {
11572 public: 0x037a689a,
11573 private: 0x037a6460
11574 },
11575 pubKeyHash: 0x2b,
11576 scriptHash: 0x05,
11577 wif: 0xab,
11578 dustThreshold: 0,
11579 dustSoftThreshold: 10000,
11580 feePerKb: 10000,
11581 estimateFee: estimateFee('jumbucks')
11582 },
11583 zetacoin: {
11584 magicPrefix: '\x18Zetacoin Signed Message:\n',
11585 bip32: {
11586 public: 0x0488b21e,
11587 private: 0x0488ade4
11588 },
11589 pubKeyHash: 0x50,
11590 scriptHash: 0x09,
11591 wif: 0xe0,
11592 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11593 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11594 estimateFee: estimateFee('zetacoin')
11595 }
11596 }
11597
11598 function estimateFee (type) {
11599 return function (tx) {
11600 var network = networks[type]
11601 var baseFee = network.feePerKb
11602 var byteSize = tx.toBuffer().length
11603
11604 var fee = baseFee * Math.ceil(byteSize / 1000)
11605 if (network.dustSoftThreshold === undefined) return fee
11606
11607 tx.outs.forEach(function (e) {
11608 if (e.value < network.dustSoftThreshold) {
11609 fee += baseFee
11610 }
11611 })
11612
11613 return fee
11614 }
11615 }
11616
11617 module.exports = networks
11618
11619 },{}],67:[function(require,module,exports){
11620 module.exports = {
11621 // push value
11622 OP_FALSE: 0,
11623 OP_0: 0,
11624 OP_PUSHDATA1: 76,
11625 OP_PUSHDATA2: 77,
11626 OP_PUSHDATA4: 78,
11627 OP_1NEGATE: 79,
11628 OP_RESERVED: 80,
11629 OP_1: 81,
11630 OP_TRUE: 81,
11631 OP_2: 82,
11632 OP_3: 83,
11633 OP_4: 84,
11634 OP_5: 85,
11635 OP_6: 86,
11636 OP_7: 87,
11637 OP_8: 88,
11638 OP_9: 89,
11639 OP_10: 90,
11640 OP_11: 91,
11641 OP_12: 92,
11642 OP_13: 93,
11643 OP_14: 94,
11644 OP_15: 95,
11645 OP_16: 96,
11646
11647 // control
11648 OP_NOP: 97,
11649 OP_VER: 98,
11650 OP_IF: 99,
11651 OP_NOTIF: 100,
11652 OP_VERIF: 101,
11653 OP_VERNOTIF: 102,
11654 OP_ELSE: 103,
11655 OP_ENDIF: 104,
11656 OP_VERIFY: 105,
11657 OP_RETURN: 106,
11658
11659 // stack ops
11660 OP_TOALTSTACK: 107,
11661 OP_FROMALTSTACK: 108,
11662 OP_2DROP: 109,
11663 OP_2DUP: 110,
11664 OP_3DUP: 111,
11665 OP_2OVER: 112,
11666 OP_2ROT: 113,
11667 OP_2SWAP: 114,
11668 OP_IFDUP: 115,
11669 OP_DEPTH: 116,
11670 OP_DROP: 117,
11671 OP_DUP: 118,
11672 OP_NIP: 119,
11673 OP_OVER: 120,
11674 OP_PICK: 121,
11675 OP_ROLL: 122,
11676 OP_ROT: 123,
11677 OP_SWAP: 124,
11678 OP_TUCK: 125,
11679
11680 // splice ops
11681 OP_CAT: 126,
11682 OP_SUBSTR: 127,
11683 OP_LEFT: 128,
11684 OP_RIGHT: 129,
11685 OP_SIZE: 130,
11686
11687 // bit logic
11688 OP_INVERT: 131,
11689 OP_AND: 132,
11690 OP_OR: 133,
11691 OP_XOR: 134,
11692 OP_EQUAL: 135,
11693 OP_EQUALVERIFY: 136,
11694 OP_RESERVED1: 137,
11695 OP_RESERVED2: 138,
11696
11697 // numeric
11698 OP_1ADD: 139,
11699 OP_1SUB: 140,
11700 OP_2MUL: 141,
11701 OP_2DIV: 142,
11702 OP_NEGATE: 143,
11703 OP_ABS: 144,
11704 OP_NOT: 145,
11705 OP_0NOTEQUAL: 146,
11706
11707 OP_ADD: 147,
11708 OP_SUB: 148,
11709 OP_MUL: 149,
11710 OP_DIV: 150,
11711 OP_MOD: 151,
11712 OP_LSHIFT: 152,
11713 OP_RSHIFT: 153,
11714
11715 OP_BOOLAND: 154,
11716 OP_BOOLOR: 155,
11717 OP_NUMEQUAL: 156,
11718 OP_NUMEQUALVERIFY: 157,
11719 OP_NUMNOTEQUAL: 158,
11720 OP_LESSTHAN: 159,
11721 OP_GREATERTHAN: 160,
11722 OP_LESSTHANOREQUAL: 161,
11723 OP_GREATERTHANOREQUAL: 162,
11724 OP_MIN: 163,
11725 OP_MAX: 164,
11726
11727 OP_WITHIN: 165,
11728
11729 // crypto
11730 OP_RIPEMD160: 166,
11731 OP_SHA1: 167,
11732 OP_SHA256: 168,
11733 OP_HASH160: 169,
11734 OP_HASH256: 170,
11735 OP_CODESEPARATOR: 171,
11736 OP_CHECKSIG: 172,
11737 OP_CHECKSIGVERIFY: 173,
11738 OP_CHECKMULTISIG: 174,
11739 OP_CHECKMULTISIGVERIFY: 175,
11740
11741 // expansion
11742 OP_NOP1: 176,
11743 OP_NOP2: 177,
11744 OP_NOP3: 178,
11745 OP_NOP4: 179,
11746 OP_NOP5: 180,
11747 OP_NOP6: 181,
11748 OP_NOP7: 182,
11749 OP_NOP8: 183,
11750 OP_NOP9: 184,
11751 OP_NOP10: 185,
11752
11753 // template matching params
11754 OP_PUBKEYHASH: 253,
11755 OP_PUBKEY: 254,
11756 OP_INVALIDOPCODE: 255
11757 }
11758
11759 },{}],68:[function(require,module,exports){
11760 (function (Buffer){
11761 var assert = require('assert')
11762 var bufferutils = require('./bufferutils')
11763 var crypto = require('./crypto')
11764 var typeForce = require('typeforce')
11765 var opcodes = require('./opcodes')
11766
11767 function Script (buffer, chunks) {
11768 typeForce('Buffer', buffer)
11769 typeForce('Array', chunks)
11770
11771 this.buffer = buffer
11772 this.chunks = chunks
11773 }
11774
11775 Script.fromASM = function (asm) {
11776 var strChunks = asm.split(' ')
11777 var chunks = strChunks.map(function (strChunk) {
11778 // opcode
11779 if (strChunk in opcodes) {
11780 return opcodes[strChunk]
11781
11782 // data chunk
11783 } else {
11784 return new Buffer(strChunk, 'hex')
11785 }
11786 })
11787
11788 return Script.fromChunks(chunks)
11789 }
11790
11791 Script.fromBuffer = function (buffer) {
11792 var chunks = []
11793 var i = 0
11794
11795 while (i < buffer.length) {
11796 var opcode = buffer.readUInt8(i)
11797
11798 // data chunk
11799 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11800 var d = bufferutils.readPushDataInt(buffer, i)
11801
11802 // did reading a pushDataInt fail? return non-chunked script
11803 if (d === null) return new Script(buffer, [])
11804 i += d.size
11805
11806 // attempt to read too much data?
11807 if (i + d.number > buffer.length) return new Script(buffer, [])
11808
11809 var data = buffer.slice(i, i + d.number)
11810 i += d.number
11811
11812 chunks.push(data)
11813
11814 // opcode
11815 } else {
11816 chunks.push(opcode)
11817
11818 i += 1
11819 }
11820 }
11821
11822 return new Script(buffer, chunks)
11823 }
11824
11825 Script.fromChunks = function (chunks) {
11826 typeForce('Array', chunks)
11827
11828 var bufferSize = chunks.reduce(function (accum, chunk) {
11829 // data chunk
11830 if (Buffer.isBuffer(chunk)) {
11831 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11832 }
11833
11834 // opcode
11835 return accum + 1
11836 }, 0.0)
11837
11838 var buffer = new Buffer(bufferSize)
11839 var offset = 0
11840
11841 chunks.forEach(function (chunk) {
11842 // data chunk
11843 if (Buffer.isBuffer(chunk)) {
11844 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11845
11846 chunk.copy(buffer, offset)
11847 offset += chunk.length
11848
11849 // opcode
11850 } else {
11851 buffer.writeUInt8(chunk, offset)
11852 offset += 1
11853 }
11854 })
11855
11856 assert.equal(offset, buffer.length, 'Could not decode chunks')
11857 return new Script(buffer, chunks)
11858 }
11859
11860 Script.fromHex = function (hex) {
11861 return Script.fromBuffer(new Buffer(hex, 'hex'))
11862 }
11863
11864 Script.EMPTY = Script.fromChunks([])
11865
11866 Script.prototype.getHash = function () {
11867 return crypto.hash160(this.buffer)
11868 }
11869
11870 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11871 Script.prototype.without = function (needle) {
11872 return Script.fromChunks(this.chunks.filter(function (op) {
11873 return op !== needle
11874 }))
11875 }
11876
11877 var reverseOps = []
11878 for (var op in opcodes) {
11879 var code = opcodes[op]
11880 reverseOps[code] = op
11881 }
11882
11883 Script.prototype.toASM = function () {
11884 return this.chunks.map(function (chunk) {
11885 // data chunk
11886 if (Buffer.isBuffer(chunk)) {
11887 return chunk.toString('hex')
11888
11889 // opcode
11890 } else {
11891 return reverseOps[chunk]
11892 }
11893 }).join(' ')
11894 }
11895
11896 Script.prototype.toBuffer = function () {
11897 return this.buffer
11898 }
11899
11900 Script.prototype.toHex = function () {
11901 return this.toBuffer().toString('hex')
11902 }
11903
11904 module.exports = Script
11905
11906 }).call(this,require("buffer").Buffer)
11907 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11908 (function (Buffer){
11909 var assert = require('assert')
11910 var ops = require('./opcodes')
11911 var typeForce = require('typeforce')
11912
11913 var ecurve = require('ecurve')
11914 var curve = ecurve.getCurveByName('secp256k1')
11915
11916 var ECSignature = require('./ecsignature')
11917 var Script = require('./script')
11918
11919 function isCanonicalPubKey (buffer) {
11920 if (!Buffer.isBuffer(buffer)) return false
11921
11922 try {
11923 ecurve.Point.decodeFrom(curve, buffer)
11924 } catch (e) {
11925 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11926 throw e
11927
11928 return false
11929 }
11930
11931 return true
11932 }
11933
11934 function isCanonicalSignature (buffer) {
11935 if (!Buffer.isBuffer(buffer)) return false
11936
11937 try {
11938 ECSignature.parseScriptSignature(buffer)
11939 } catch (e) {
11940 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
11941 throw e
11942 }
11943
11944 return false
11945 }
11946
11947 return true
11948 }
11949
11950 function isPubKeyHashInput (script) {
11951 return script.chunks.length === 2 &&
11952 isCanonicalSignature(script.chunks[0]) &&
11953 isCanonicalPubKey(script.chunks[1])
11954 }
11955
11956 function isPubKeyHashOutput (script) {
11957 return script.chunks.length === 5 &&
11958 script.chunks[0] === ops.OP_DUP &&
11959 script.chunks[1] === ops.OP_HASH160 &&
11960 Buffer.isBuffer(script.chunks[2]) &&
11961 script.chunks[2].length === 20 &&
11962 script.chunks[3] === ops.OP_EQUALVERIFY &&
11963 script.chunks[4] === ops.OP_CHECKSIG
11964 }
11965
11966 function isPubKeyInput (script) {
11967 return script.chunks.length === 1 &&
11968 isCanonicalSignature(script.chunks[0])
11969 }
11970
11971 function isPubKeyOutput (script) {
11972 return script.chunks.length === 2 &&
11973 isCanonicalPubKey(script.chunks[0]) &&
11974 script.chunks[1] === ops.OP_CHECKSIG
11975 }
11976
11977 function isScriptHashInput (script, allowIncomplete) {
11978 if (script.chunks.length < 2) return false
11979
11980 var lastChunk = script.chunks[script.chunks.length - 1]
11981 if (!Buffer.isBuffer(lastChunk)) return false
11982
11983 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11984 var redeemScript = Script.fromBuffer(lastChunk)
11985
11986 // is redeemScript a valid script?
11987 if (redeemScript.chunks.length === 0) return false
11988
11989 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11990 }
11991
11992 function isScriptHashOutput (script) {
11993 return script.chunks.length === 3 &&
11994 script.chunks[0] === ops.OP_HASH160 &&
11995 Buffer.isBuffer(script.chunks[1]) &&
11996 script.chunks[1].length === 20 &&
11997 script.chunks[2] === ops.OP_EQUAL
11998 }
11999
12000 // allowIncomplete is to account for combining signatures
12001 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
12002 function isMultisigInput (script, allowIncomplete) {
12003 if (script.chunks.length < 2) return false
12004 if (script.chunks[0] !== ops.OP_0) return false
12005
12006 if (allowIncomplete) {
12007 return script.chunks.slice(1).every(function (chunk) {
12008 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
12009 })
12010 }
12011
12012 return script.chunks.slice(1).every(isCanonicalSignature)
12013 }
12014
12015 function isMultisigOutput (script) {
12016 if (script.chunks.length < 4) return false
12017 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
12018
12019 var mOp = script.chunks[0]
12020 if (mOp === ops.OP_0) return false
12021 if (mOp < ops.OP_1) return false
12022 if (mOp > ops.OP_16) return false
12023
12024 var nOp = script.chunks[script.chunks.length - 2]
12025 if (nOp === ops.OP_0) return false
12026 if (nOp < ops.OP_1) return false
12027 if (nOp > ops.OP_16) return false
12028
12029 var m = mOp - (ops.OP_1 - 1)
12030 var n = nOp - (ops.OP_1 - 1)
12031 if (n < m) return false
12032
12033 var pubKeys = script.chunks.slice(1, -2)
12034 if (n < pubKeys.length) return false
12035
12036 return pubKeys.every(isCanonicalPubKey)
12037 }
12038
12039 function isNullDataOutput (script) {
12040 return script.chunks[0] === ops.OP_RETURN
12041 }
12042
12043 function classifyOutput (script) {
12044 typeForce('Script', script)
12045
12046 if (isPubKeyHashOutput(script)) {
12047 return 'pubkeyhash'
12048 } else if (isScriptHashOutput(script)) {
12049 return 'scripthash'
12050 } else if (isMultisigOutput(script)) {
12051 return 'multisig'
12052 } else if (isPubKeyOutput(script)) {
12053 return 'pubkey'
12054 } else if (isNullDataOutput(script)) {
12055 return 'nulldata'
12056 }
12057
12058 return 'nonstandard'
12059 }
12060
12061 function classifyInput (script, allowIncomplete) {
12062 typeForce('Script', script)
12063
12064 if (isPubKeyHashInput(script)) {
12065 return 'pubkeyhash'
12066 } else if (isMultisigInput(script, allowIncomplete)) {
12067 return 'multisig'
12068 } else if (isScriptHashInput(script, allowIncomplete)) {
12069 return 'scripthash'
12070 } else if (isPubKeyInput(script)) {
12071 return 'pubkey'
12072 }
12073
12074 return 'nonstandard'
12075 }
12076
12077 // Standard Script Templates
12078 // {pubKey} OP_CHECKSIG
12079 function pubKeyOutput (pubKey) {
12080 return Script.fromChunks([
12081 pubKey.toBuffer(),
12082 ops.OP_CHECKSIG
12083 ])
12084 }
12085
12086 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
12087 function pubKeyHashOutput (hash) {
12088 typeForce('Buffer', hash)
12089
12090 return Script.fromChunks([
12091 ops.OP_DUP,
12092 ops.OP_HASH160,
12093 hash,
12094 ops.OP_EQUALVERIFY,
12095 ops.OP_CHECKSIG
12096 ])
12097 }
12098
12099 // OP_HASH160 {scriptHash} OP_EQUAL
12100 function scriptHashOutput (hash) {
12101 typeForce('Buffer', hash)
12102
12103 return Script.fromChunks([
12104 ops.OP_HASH160,
12105 hash,
12106 ops.OP_EQUAL
12107 ])
12108 }
12109
12110 // m [pubKeys ...] n OP_CHECKMULTISIG
12111 function multisigOutput (m, pubKeys) {
12112 typeForce(['ECPubKey'], pubKeys)
12113
12114 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12115
12116 var pubKeyBuffers = pubKeys.map(function (pubKey) {
12117 return pubKey.toBuffer()
12118 })
12119 var n = pubKeys.length
12120
12121 return Script.fromChunks([].concat(
12122 (ops.OP_1 - 1) + m,
12123 pubKeyBuffers,
12124 (ops.OP_1 - 1) + n,
12125 ops.OP_CHECKMULTISIG
12126 ))
12127 }
12128
12129 // {signature}
12130 function pubKeyInput (signature) {
12131 typeForce('Buffer', signature)
12132
12133 return Script.fromChunks([signature])
12134 }
12135
12136 // {signature} {pubKey}
12137 function pubKeyHashInput (signature, pubKey) {
12138 typeForce('Buffer', signature)
12139
12140 return Script.fromChunks([signature, pubKey.toBuffer()])
12141 }
12142
12143 // <scriptSig> {serialized scriptPubKey script}
12144 function scriptHashInput (scriptSig, scriptPubKey) {
12145 return Script.fromChunks([].concat(
12146 scriptSig.chunks,
12147 scriptPubKey.toBuffer()
12148 ))
12149 }
12150
12151 // OP_0 [signatures ...]
12152 function multisigInput (signatures, scriptPubKey) {
12153 if (scriptPubKey) {
12154 assert(isMultisigOutput(scriptPubKey))
12155
12156 var mOp = scriptPubKey.chunks[0]
12157 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12158 var m = mOp - (ops.OP_1 - 1)
12159 var n = nOp - (ops.OP_1 - 1)
12160
12161 assert(signatures.length >= m, 'Not enough signatures provided')
12162 assert(signatures.length <= n, 'Too many signatures provided')
12163 }
12164
12165 return Script.fromChunks([].concat(ops.OP_0, signatures))
12166 }
12167
12168 function nullDataOutput (data) {
12169 return Script.fromChunks([ops.OP_RETURN, data])
12170 }
12171
12172 module.exports = {
12173 isCanonicalPubKey: isCanonicalPubKey,
12174 isCanonicalSignature: isCanonicalSignature,
12175 isPubKeyHashInput: isPubKeyHashInput,
12176 isPubKeyHashOutput: isPubKeyHashOutput,
12177 isPubKeyInput: isPubKeyInput,
12178 isPubKeyOutput: isPubKeyOutput,
12179 isScriptHashInput: isScriptHashInput,
12180 isScriptHashOutput: isScriptHashOutput,
12181 isMultisigInput: isMultisigInput,
12182 isMultisigOutput: isMultisigOutput,
12183 isNullDataOutput: isNullDataOutput,
12184 classifyOutput: classifyOutput,
12185 classifyInput: classifyInput,
12186 pubKeyOutput: pubKeyOutput,
12187 pubKeyHashOutput: pubKeyHashOutput,
12188 scriptHashOutput: scriptHashOutput,
12189 multisigOutput: multisigOutput,
12190 pubKeyInput: pubKeyInput,
12191 pubKeyHashInput: pubKeyHashInput,
12192 scriptHashInput: scriptHashInput,
12193 multisigInput: multisigInput,
12194 dataOutput: function (data) {
12195 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12196 return nullDataOutput(data)
12197 },
12198 nullDataOutput: nullDataOutput
12199 }
12200
12201 }).call(this,require("buffer").Buffer)
12202 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
12203 (function (Buffer){
12204 var assert = require('assert')
12205 var bufferutils = require('./bufferutils')
12206 var crypto = require('./crypto')
12207 var typeForce = require('typeforce')
12208 var opcodes = require('./opcodes')
12209 var scripts = require('./scripts')
12210
12211 var Address = require('./address')
12212 var ECSignature = require('./ecsignature')
12213 var Script = require('./script')
12214
12215 function Transaction () {
12216 this.version = 1
12217 this.locktime = 0
12218 this.ins = []
12219 this.outs = []
12220 }
12221
12222 Transaction.DEFAULT_SEQUENCE = 0xffffffff
12223 Transaction.SIGHASH_ALL = 0x01
12224 Transaction.SIGHASH_NONE = 0x02
12225 Transaction.SIGHASH_SINGLE = 0x03
12226 Transaction.SIGHASH_ANYONECANPAY = 0x80
12227
12228 Transaction.fromBuffer = function (buffer, __disableAssert) {
12229 var offset = 0
12230 function readSlice (n) {
12231 offset += n
12232 return buffer.slice(offset - n, offset)
12233 }
12234
12235 function readUInt32 () {
12236 var i = buffer.readUInt32LE(offset)
12237 offset += 4
12238 return i
12239 }
12240
12241 function readUInt64 () {
12242 var i = bufferutils.readUInt64LE(buffer, offset)
12243 offset += 8
12244 return i
12245 }
12246
12247 function readVarInt () {
12248 var vi = bufferutils.readVarInt(buffer, offset)
12249 offset += vi.size
12250 return vi.number
12251 }
12252
12253 function readScript () {
12254 return Script.fromBuffer(readSlice(readVarInt()))
12255 }
12256
12257 function readGenerationScript () {
12258 return new Script(readSlice(readVarInt()), [])
12259 }
12260
12261 var tx = new Transaction()
12262 tx.version = readUInt32()
12263
12264 var vinLen = readVarInt()
12265 for (var i = 0; i < vinLen; ++i) {
12266 var hash = readSlice(32)
12267
12268 if (Transaction.isCoinbaseHash(hash)) {
12269 tx.ins.push({
12270 hash: hash,
12271 index: readUInt32(),
12272 script: readGenerationScript(),
12273 sequence: readUInt32()
12274 })
12275 } else {
12276 tx.ins.push({
12277 hash: hash,
12278 index: readUInt32(),
12279 script: readScript(),
12280 sequence: readUInt32()
12281 })
12282 }
12283 }
12284
12285 var voutLen = readVarInt()
12286 for (i = 0; i < voutLen; ++i) {
12287 tx.outs.push({
12288 value: readUInt64(),
12289 script: readScript()
12290 })
12291 }
12292
12293 tx.locktime = readUInt32()
12294
12295 if (!__disableAssert) {
12296 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12297 }
12298
12299 return tx
12300 }
12301
12302 Transaction.fromHex = function (hex) {
12303 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12304 }
12305
12306 Transaction.isCoinbaseHash = function (buffer) {
12307 return Array.prototype.every.call(buffer, function (x) {
12308 return x === 0
12309 })
12310 }
12311
12312 /**
12313 * Create a new txIn.
12314 *
12315 * Can be called with any of:
12316 *
12317 * - A transaction and an index
12318 * - A transaction hash and an index
12319 *
12320 * Note that this method does not sign the created input.
12321 */
12322 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12323 if (sequence === undefined || sequence === null) {
12324 sequence = Transaction.DEFAULT_SEQUENCE
12325 }
12326
12327 script = script || Script.EMPTY
12328
12329 if (typeof hash === 'string') {
12330 // TxId hex is big-endian, we need little-endian
12331 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12332 } else if (hash instanceof Transaction) {
12333 hash = hash.getHash()
12334 }
12335
12336 typeForce('Buffer', hash)
12337 typeForce('Number', index)
12338 typeForce('Number', sequence)
12339 typeForce('Script', script)
12340
12341 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12342
12343 // Add the input and return the input's index
12344 return (this.ins.push({
12345 hash: hash,
12346 index: index,
12347 script: script,
12348 sequence: sequence
12349 }) - 1)
12350 }
12351
12352 /**
12353 * Create a new txOut.
12354 *
12355 * Can be called with:
12356 *
12357 * - A base58 address string and a value
12358 * - An Address object and a value
12359 * - A scriptPubKey Script and a value
12360 */
12361 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12362 // Attempt to get a valid address if it's a base58 address string
12363 if (typeof scriptPubKey === 'string') {
12364 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12365 }
12366
12367 // Attempt to get a valid script if it's an Address object
12368 if (scriptPubKey instanceof Address) {
12369 scriptPubKey = scriptPubKey.toOutputScript()
12370 }
12371
12372 typeForce('Script', scriptPubKey)
12373 typeForce('Number', value)
12374
12375 // Add the output and return the output's index
12376 return (this.outs.push({
12377 script: scriptPubKey,
12378 value: value
12379 }) - 1)
12380 }
12381
12382 Transaction.prototype.clone = function () {
12383 var newTx = new Transaction()
12384 newTx.version = this.version
12385 newTx.locktime = this.locktime
12386
12387 newTx.ins = this.ins.map(function (txIn) {
12388 return {
12389 hash: txIn.hash,
12390 index: txIn.index,
12391 script: txIn.script,
12392 sequence: txIn.sequence
12393 }
12394 })
12395
12396 newTx.outs = this.outs.map(function (txOut) {
12397 return {
12398 script: txOut.script,
12399 value: txOut.value
12400 }
12401 })
12402
12403 return newTx
12404 }
12405
12406 /**
12407 * Hash transaction for signing a specific input.
12408 *
12409 * Bitcoin uses a different hash for each signed transaction input. This
12410 * method copies the transaction, makes the necessary changes based on the
12411 * hashType, serializes and finally hashes the result. This hash can then be
12412 * used to sign the transaction input in question.
12413 */
12414 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12415 // FIXME: remove in 2.x.y
12416 if (arguments[0] instanceof Script) {
12417 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12418
12419 // swap the arguments (must be stored in tmp, arguments is special)
12420 var tmp = arguments[0]
12421 inIndex = arguments[1]
12422 prevOutScript = tmp
12423 }
12424
12425 typeForce('Number', inIndex)
12426 typeForce('Script', prevOutScript)
12427 typeForce('Number', hashType)
12428
12429 assert(inIndex >= 0, 'Invalid vin index')
12430 assert(inIndex < this.ins.length, 'Invalid vin index')
12431
12432 var txTmp = this.clone()
12433 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12434
12435 // Blank out other inputs' signatures
12436 txTmp.ins.forEach(function (txIn) {
12437 txIn.script = Script.EMPTY
12438 })
12439 txTmp.ins[inIndex].script = hashScript
12440
12441 var hashTypeModifier = hashType & 0x1f
12442
12443 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12444 assert(false, 'SIGHASH_NONE not yet supported')
12445 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12446 assert(false, 'SIGHASH_SINGLE not yet supported')
12447 }
12448
12449 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12450 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12451 }
12452
12453 var hashTypeBuffer = new Buffer(4)
12454 hashTypeBuffer.writeInt32LE(hashType, 0)
12455
12456 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12457 return crypto.hash256(buffer)
12458 }
12459
12460 Transaction.prototype.getHash = function () {
12461 return crypto.hash256(this.toBuffer())
12462 }
12463
12464 Transaction.prototype.getId = function () {
12465 // TxHash is little-endian, we need big-endian
12466 return bufferutils.reverse(this.getHash()).toString('hex')
12467 }
12468
12469 Transaction.prototype.toBuffer = function () {
12470 function scriptSize (script) {
12471 var length = script.buffer.length
12472
12473 return bufferutils.varIntSize(length) + length
12474 }
12475
12476 var buffer = new Buffer(
12477 8 +
12478 bufferutils.varIntSize(this.ins.length) +
12479 bufferutils.varIntSize(this.outs.length) +
12480 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12481 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12482 )
12483
12484 var offset = 0
12485 function writeSlice (slice) {
12486 slice.copy(buffer, offset)
12487 offset += slice.length
12488 }
12489
12490 function writeUInt32 (i) {
12491 buffer.writeUInt32LE(i, offset)
12492 offset += 4
12493 }
12494
12495 function writeUInt64 (i) {
12496 bufferutils.writeUInt64LE(buffer, i, offset)
12497 offset += 8
12498 }
12499
12500 function writeVarInt (i) {
12501 var n = bufferutils.writeVarInt(buffer, i, offset)
12502 offset += n
12503 }
12504
12505 writeUInt32(this.version)
12506 writeVarInt(this.ins.length)
12507
12508 this.ins.forEach(function (txIn) {
12509 writeSlice(txIn.hash)
12510 writeUInt32(txIn.index)
12511 writeVarInt(txIn.script.buffer.length)
12512 writeSlice(txIn.script.buffer)
12513 writeUInt32(txIn.sequence)
12514 })
12515
12516 writeVarInt(this.outs.length)
12517 this.outs.forEach(function (txOut) {
12518 writeUInt64(txOut.value)
12519 writeVarInt(txOut.script.buffer.length)
12520 writeSlice(txOut.script.buffer)
12521 })
12522
12523 writeUInt32(this.locktime)
12524
12525 return buffer
12526 }
12527
12528 Transaction.prototype.toHex = function () {
12529 return this.toBuffer().toString('hex')
12530 }
12531
12532 Transaction.prototype.setInputScript = function (index, script) {
12533 typeForce('Number', index)
12534 typeForce('Script', script)
12535
12536 this.ins[index].script = script
12537 }
12538
12539 // FIXME: remove in 2.x.y
12540 Transaction.prototype.sign = function (index, privKey, hashType) {
12541 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12542
12543 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12544 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12545
12546 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12547 this.setInputScript(index, scriptSig)
12548 }
12549
12550 // FIXME: remove in 2.x.y
12551 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12552 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12553
12554 hashType = hashType || Transaction.SIGHASH_ALL
12555
12556 var hash = this.hashForSignature(index, prevOutScript, hashType)
12557 var signature = privKey.sign(hash)
12558
12559 return signature.toScriptSignature(hashType)
12560 }
12561
12562 // FIXME: remove in 2.x.y
12563 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12564 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12565
12566 var parsed = ECSignature.parseScriptSignature(buffer)
12567 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12568
12569 return pubKey.verify(hash, parsed.signature)
12570 }
12571
12572 module.exports = Transaction
12573
12574 }).call(this,require("buffer").Buffer)
12575 },{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
12576 (function (Buffer){
12577 var assert = require('assert')
12578 var ops = require('./opcodes')
12579 var scripts = require('./scripts')
12580
12581 var ECPubKey = require('./ecpubkey')
12582 var ECSignature = require('./ecsignature')
12583 var Script = require('./script')
12584 var Transaction = require('./transaction')
12585
12586 function extractInput (txIn) {
12587 var redeemScript
12588 var scriptSig = txIn.script
12589 var prevOutScript
12590 var prevOutType = scripts.classifyInput(scriptSig, true)
12591 var scriptType
12592
12593 // Re-classify if scriptHash
12594 if (prevOutType === 'scripthash') {
12595 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12596 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12597
12598 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12599 scriptType = scripts.classifyInput(scriptSig, true)
12600 } else {
12601 scriptType = prevOutType
12602 }
12603
12604 // Extract hashType, pubKeys and signatures
12605 var hashType, parsed, pubKeys, signatures
12606
12607 switch (scriptType) {
12608 case 'pubkeyhash': {
12609 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12610 hashType = parsed.hashType
12611 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12612 signatures = [parsed.signature]
12613 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12614
12615 break
12616 }
12617
12618 case 'pubkey': {
12619 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12620 hashType = parsed.hashType
12621 signatures = [parsed.signature]
12622
12623 if (redeemScript) {
12624 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12625 }
12626
12627 break
12628 }
12629
12630 case 'multisig': {
12631 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12632 if (chunk === ops.OP_0) return chunk
12633
12634 var parsed = ECSignature.parseScriptSignature(chunk)
12635 hashType = parsed.hashType
12636
12637 return parsed.signature
12638 })
12639
12640 if (redeemScript) {
12641 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12642 }
12643
12644 break
12645 }
12646 }
12647
12648 return {
12649 hashType: hashType,
12650 prevOutScript: prevOutScript,
12651 prevOutType: prevOutType,
12652 pubKeys: pubKeys,
12653 redeemScript: redeemScript,
12654 scriptType: scriptType,
12655 signatures: signatures
12656 }
12657 }
12658
12659 function TransactionBuilder () {
12660 this.prevTxMap = {}
12661 this.prevOutScripts = {}
12662 this.prevOutTypes = {}
12663
12664 this.inputs = []
12665 this.tx = new Transaction()
12666 }
12667
12668 TransactionBuilder.fromTransaction = function (transaction) {
12669 var txb = new TransactionBuilder()
12670
12671 // Copy other transaction fields
12672 txb.tx.version = transaction.version
12673 txb.tx.locktime = transaction.locktime
12674
12675 // Extract/add inputs
12676 transaction.ins.forEach(function (txIn) {
12677 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12678 })
12679
12680 // Extract/add outputs
12681 transaction.outs.forEach(function (txOut) {
12682 txb.addOutput(txOut.script, txOut.value)
12683 })
12684
12685 // Extract/add signatures
12686 txb.inputs = transaction.ins.map(function (txIn) {
12687 // TODO: remove me after testcase added
12688 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12689
12690 // Ignore empty scripts
12691 if (txIn.script.buffer.length === 0) return {}
12692
12693 return extractInput(txIn)
12694 })
12695
12696 return txb
12697 }
12698
12699 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12700 var prevOutHash
12701
12702 // txId
12703 if (typeof prevTx === 'string') {
12704 prevOutHash = new Buffer(prevTx, 'hex')
12705
12706 // TxId hex is big-endian, we want little-endian hash
12707 Array.prototype.reverse.call(prevOutHash)
12708
12709 // Transaction
12710 } else if (prevTx instanceof Transaction) {
12711 prevOutHash = prevTx.getHash()
12712 prevOutScript = prevTx.outs[index].script
12713
12714 // txHash
12715 } else {
12716 prevOutHash = prevTx
12717 }
12718
12719 var input = {}
12720 if (prevOutScript) {
12721 var prevOutType = scripts.classifyOutput(prevOutScript)
12722
12723 // if we can, extract pubKey information
12724 switch (prevOutType) {
12725 case 'multisig': {
12726 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12727 break
12728 }
12729
12730 case 'pubkey': {
12731 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12732 break
12733 }
12734 }
12735
12736 if (prevOutType !== 'scripthash') {
12737 input.scriptType = prevOutType
12738 }
12739
12740 input.prevOutScript = prevOutScript
12741 input.prevOutType = prevOutType
12742 }
12743
12744 assert(this.inputs.every(function (input2) {
12745 if (input2.hashType === undefined) return true
12746
12747 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12748 }), 'No, this would invalidate signatures')
12749
12750 var prevOut = prevOutHash.toString('hex') + ':' + index
12751 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12752
12753 var vin = this.tx.addInput(prevOutHash, index, sequence)
12754 this.inputs[vin] = input
12755 this.prevTxMap[prevOut] = vin
12756
12757 return vin
12758 }
12759
12760 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12761 assert(this.inputs.every(function (input) {
12762 if (input.hashType === undefined) return true
12763
12764 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12765 }), 'No, this would invalidate signatures')
12766
12767 return this.tx.addOutput(scriptPubKey, value)
12768 }
12769
12770 TransactionBuilder.prototype.build = function () {
12771 return this.__build(false)
12772 }
12773 TransactionBuilder.prototype.buildIncomplete = function () {
12774 return this.__build(true)
12775 }
12776
12777 var canSignTypes = {
12778 'pubkeyhash': true,
12779 'multisig': true,
12780 'pubkey': true
12781 }
12782
12783 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12784 if (!allowIncomplete) {
12785 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12786 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12787 }
12788
12789 var tx = this.tx.clone()
12790
12791 // Create script signatures from signature meta-data
12792 this.inputs.forEach(function (input, index) {
12793 var scriptType = input.scriptType
12794 var scriptSig
12795
12796 if (!allowIncomplete) {
12797 assert(!!scriptType, 'Transaction is not complete')
12798 assert(scriptType in canSignTypes, scriptType + ' not supported')
12799 assert(input.signatures, 'Transaction is missing signatures')
12800 }
12801
12802 if (input.signatures) {
12803 switch (scriptType) {
12804 case 'pubkeyhash': {
12805 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12806 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12807 break
12808 }
12809
12810 case 'multisig': {
12811 // Array.prototype.map is sparse-compatible
12812 var msSignatures = input.signatures.map(function (signature) {
12813 return signature && signature.toScriptSignature(input.hashType)
12814 })
12815
12816 // fill in blanks with OP_0
12817 if (allowIncomplete) {
12818 for (var i = 0; i < msSignatures.length; ++i) {
12819 if (msSignatures[i]) continue
12820
12821 msSignatures[i] = ops.OP_0
12822 }
12823 } else {
12824 // Array.prototype.filter returns non-sparse array
12825 msSignatures = msSignatures.filter(function (x) { return x })
12826 }
12827
12828 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12829 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12830 break
12831 }
12832
12833 case 'pubkey': {
12834 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12835 scriptSig = scripts.pubKeyInput(pkSignature)
12836 break
12837 }
12838 }
12839 }
12840
12841 // did we build a scriptSig?
12842 if (scriptSig) {
12843 // wrap as scriptHash if necessary
12844 if (input.prevOutType === 'scripthash') {
12845 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12846 }
12847
12848 tx.setInputScript(index, scriptSig)
12849 }
12850 })
12851
12852 return tx
12853 }
12854
12855 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12856 assert(index in this.inputs, 'No input at index: ' + index)
12857 hashType = hashType || Transaction.SIGHASH_ALL
12858
12859 var input = this.inputs[index]
12860 var canSign = input.hashType &&
12861 input.prevOutScript &&
12862 input.prevOutType &&
12863 input.pubKeys &&
12864 input.scriptType &&
12865 input.signatures
12866
12867 // are we almost ready to sign?
12868 if (canSign) {
12869 // if redeemScript was provided, enforce consistency
12870 if (redeemScript) {
12871 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12872 }
12873
12874 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12875
12876 // no? prepare
12877 } else {
12878 // must be pay-to-scriptHash?
12879 if (redeemScript) {
12880 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12881 if (input.prevOutScript) {
12882 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12883
12884 var scriptHash = input.prevOutScript.chunks[1]
12885 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12886 }
12887
12888 var scriptType = scripts.classifyOutput(redeemScript)
12889 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12890
12891 var pubKeys = []
12892 switch (scriptType) {
12893 case 'multisig': {
12894 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12895 break
12896 }
12897
12898 case 'pubkeyhash': {
12899 var pkh1 = redeemScript.chunks[2]
12900 var pkh2 = privKey.pub.getAddress().hash
12901
12902 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12903 pubKeys = [privKey.pub]
12904 break
12905 }
12906
12907 case 'pubkey': {
12908 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12909 break
12910 }
12911 }
12912
12913 if (!input.prevOutScript) {
12914 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12915 input.prevOutType = 'scripthash'
12916 }
12917
12918 input.pubKeys = pubKeys
12919 input.redeemScript = redeemScript
12920 input.scriptType = scriptType
12921
12922 // cannot be pay-to-scriptHash
12923 } else {
12924 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12925
12926 // can we otherwise sign this?
12927 if (input.scriptType) {
12928 assert(input.pubKeys, input.scriptType + ' not supported')
12929
12930 // we know nothin' Jon Snow, assume pubKeyHash
12931 } else {
12932 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12933 input.prevOutType = 'pubkeyhash'
12934 input.pubKeys = [privKey.pub]
12935 input.scriptType = input.prevOutType
12936 }
12937 }
12938
12939 input.hashType = hashType
12940 input.signatures = input.signatures || []
12941 }
12942
12943 var signatureScript = input.redeemScript || input.prevOutScript
12944 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12945
12946 // enforce signature order matches public keys
12947 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12948 // maintain a local copy of unmatched signatures
12949 var unmatched = input.signatures.slice()
12950
12951 input.signatures = input.pubKeys.map(function (pubKey) {
12952 var match
12953
12954 // check for any matching signatures
12955 unmatched.some(function (signature, i) {
12956 if (!pubKey.verify(signatureHash, signature)) return false
12957 match = signature
12958
12959 // remove matched signature from unmatched
12960 unmatched.splice(i, 1)
12961
12962 return true
12963 })
12964
12965 return match || undefined
12966 })
12967 }
12968
12969 // enforce in order signing of public keys
12970 assert(input.pubKeys.some(function (pubKey, i) {
12971 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12972
12973 assert(!input.signatures[i], 'Signature already exists')
12974 var signature = privKey.sign(signatureHash)
12975 input.signatures[i] = signature
12976
12977 return true
12978 }, this), 'privateKey cannot sign for this input')
12979 }
12980
12981 module.exports = TransactionBuilder
12982
12983 }).call(this,require("buffer").Buffer)
12984 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12985 (function (Buffer){
12986 var assert = require('assert')
12987 var bufferutils = require('./bufferutils')
12988 var typeForce = require('typeforce')
12989 var networks = require('./networks')
12990 var randomBytes = require('randombytes')
12991
12992 var Address = require('./address')
12993 var HDNode = require('./hdnode')
12994 var TransactionBuilder = require('./transaction_builder')
12995 var Script = require('./script')
12996
12997 function Wallet (seed, network) {
12998 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12999
13000 seed = seed || randomBytes(32)
13001 network = network || networks.bitcoin
13002
13003 // Stored in a closure to make accidental serialization less likely
13004 var masterKey = HDNode.fromSeedBuffer(seed, network)
13005
13006 // HD first-level child derivation method should be hardened
13007 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
13008 var accountZero = masterKey.deriveHardened(0)
13009 var externalAccount = accountZero.derive(0)
13010 var internalAccount = accountZero.derive(1)
13011
13012 this.addresses = []
13013 this.changeAddresses = []
13014 this.network = network
13015 this.unspents = []
13016
13017 // FIXME: remove in 2.0.0
13018 this.unspentMap = {}
13019
13020 // FIXME: remove in 2.0.0
13021 var me = this
13022 this.newMasterKey = function (seed) {
13023 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
13024
13025 seed = seed || randomBytes(32)
13026 masterKey = HDNode.fromSeedBuffer(seed, network)
13027
13028 accountZero = masterKey.deriveHardened(0)
13029 externalAccount = accountZero.derive(0)
13030 internalAccount = accountZero.derive(1)
13031
13032 me.addresses = []
13033 me.changeAddresses = []
13034
13035 me.unspents = []
13036 me.unspentMap = {}
13037 }
13038
13039 this.getMasterKey = function () {
13040 return masterKey
13041 }
13042 this.getAccountZero = function () {
13043 return accountZero
13044 }
13045 this.getExternalAccount = function () {
13046 return externalAccount
13047 }
13048 this.getInternalAccount = function () {
13049 return internalAccount
13050 }
13051 }
13052
13053 Wallet.prototype.createTransaction = function (to, value, options) {
13054 // FIXME: remove in 2.0.0
13055 if (typeof options !== 'object') {
13056 if (options !== undefined) {
13057 console.warn('Non options object parameters are deprecated, use options object instead')
13058
13059 options = {
13060 fixedFee: arguments[2],
13061 changeAddress: arguments[3]
13062 }
13063 }
13064 }
13065
13066 options = options || {}
13067
13068 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
13069
13070 var changeAddress = options.changeAddress
13071 var fixedFee = options.fixedFee
13072 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
13073
13074 // filter by minConf, then pending and sort by descending value
13075 var unspents = this.unspents.filter(function (unspent) {
13076 return unspent.confirmations >= minConf
13077 }).filter(function (unspent) {
13078 return !unspent.pending
13079 }).sort(function (o1, o2) {
13080 return o2.value - o1.value
13081 })
13082
13083 var accum = 0
13084 var addresses = []
13085 var subTotal = value
13086
13087 var txb = new TransactionBuilder()
13088 txb.addOutput(to, value)
13089
13090 for (var i = 0; i < unspents.length; ++i) {
13091 var unspent = unspents[i]
13092 addresses.push(unspent.address)
13093
13094 txb.addInput(unspent.txHash, unspent.index)
13095
13096 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
13097
13098 accum += unspent.value
13099 subTotal = value + fee
13100
13101 if (accum >= subTotal) {
13102 var change = accum - subTotal
13103
13104 if (change > this.network.dustThreshold) {
13105 txb.addOutput(changeAddress || this.getChangeAddress(), change)
13106 }
13107
13108 break
13109 }
13110 }
13111
13112 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
13113
13114 return this.signWith(txb, addresses).build()
13115 }
13116
13117 // FIXME: remove in 2.0.0
13118 Wallet.prototype.processPendingTx = function (tx) {
13119 this.__processTx(tx, true)
13120 }
13121
13122 // FIXME: remove in 2.0.0
13123 Wallet.prototype.processConfirmedTx = function (tx) {
13124 this.__processTx(tx, false)
13125 }
13126
13127 // FIXME: remove in 2.0.0
13128 Wallet.prototype.__processTx = function (tx, isPending) {
13129 console.warn('processTransaction is considered harmful, see issue #260 for more information')
13130
13131 var txId = tx.getId()
13132 var txHash = tx.getHash()
13133
13134 tx.outs.forEach(function (txOut, i) {
13135 var address
13136
13137 try {
13138 address = Address.fromOutputScript(txOut.script, this.network).toString()
13139 } catch (e) {
13140 if (!(e.message.match(/has no matching Address/)))
13141 throw e
13142 }
13143
13144 var myAddresses = this.addresses.concat(this.changeAddresses)
13145 if (myAddresses.indexOf(address) > -1) {
13146 var lookup = txId + ':' + i
13147 if (lookup in this.unspentMap) return
13148
13149 // its unique, add it
13150 var unspent = {
13151 address: address,
13152 confirmations: 0, // no way to determine this without more information
13153 index: i,
13154 txHash: txHash,
13155 txId: txId,
13156 value: txOut.value,
13157 pending: isPending
13158 }
13159
13160 this.unspentMap[lookup] = unspent
13161 this.unspents.push(unspent)
13162 }
13163 }, this)
13164
13165 tx.ins.forEach(function (txIn) {
13166 // copy and convert to big-endian hex
13167 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
13168
13169 var lookup = txInId + ':' + txIn.index
13170 if (!(lookup in this.unspentMap)) return
13171
13172 var unspent = this.unspentMap[lookup]
13173
13174 if (isPending) {
13175 unspent.pending = true
13176 unspent.spent = true
13177 } else {
13178 delete this.unspentMap[lookup]
13179
13180 this.unspents = this.unspents.filter(function (unspent2) {
13181 return unspent !== unspent2
13182 })
13183 }
13184 }, this)
13185 }
13186
13187 Wallet.prototype.generateAddress = function () {
13188 var k = this.addresses.length
13189 var address = this.getExternalAccount().derive(k).getAddress()
13190
13191 this.addresses.push(address.toString())
13192
13193 return this.getReceiveAddress()
13194 }
13195
13196 Wallet.prototype.generateChangeAddress = function () {
13197 var k = this.changeAddresses.length
13198 var address = this.getInternalAccount().derive(k).getAddress()
13199
13200 this.changeAddresses.push(address.toString())
13201
13202 return this.getChangeAddress()
13203 }
13204
13205 Wallet.prototype.getAddress = function () {
13206 if (this.addresses.length === 0) {
13207 this.generateAddress()
13208 }
13209
13210 return this.addresses[this.addresses.length - 1]
13211 }
13212
13213 Wallet.prototype.getBalance = function (minConf) {
13214 minConf = minConf || 0
13215
13216 return this.unspents.filter(function (unspent) {
13217 return unspent.confirmations >= minConf
13218
13219 // FIXME: remove spent filter in 2.0.0
13220 }).filter(function (unspent) {
13221 return !unspent.spent
13222 }).reduce(function (accum, unspent) {
13223 return accum + unspent.value
13224 }, 0)
13225 }
13226
13227 Wallet.prototype.getChangeAddress = function () {
13228 if (this.changeAddresses.length === 0) {
13229 this.generateChangeAddress()
13230 }
13231
13232 return this.changeAddresses[this.changeAddresses.length - 1]
13233 }
13234
13235 Wallet.prototype.getInternalPrivateKey = function (index) {
13236 return this.getInternalAccount().derive(index).privKey
13237 }
13238
13239 Wallet.prototype.getPrivateKey = function (index) {
13240 return this.getExternalAccount().derive(index).privKey
13241 }
13242
13243 Wallet.prototype.getPrivateKeyForAddress = function (address) {
13244 var index
13245
13246 if ((index = this.addresses.indexOf(address)) > -1) {
13247 return this.getPrivateKey(index)
13248 }
13249
13250 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13251 return this.getInternalPrivateKey(index)
13252 }
13253
13254 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13255 }
13256
13257 Wallet.prototype.getUnspentOutputs = function (minConf) {
13258 minConf = minConf || 0
13259
13260 return this.unspents.filter(function (unspent) {
13261 return unspent.confirmations >= minConf
13262
13263 // FIXME: remove spent filter in 2.0.0
13264 }).filter(function (unspent) {
13265 return !unspent.spent
13266 }).map(function (unspent) {
13267 return {
13268 address: unspent.address,
13269 confirmations: unspent.confirmations,
13270 index: unspent.index,
13271 txId: unspent.txId,
13272 value: unspent.value,
13273
13274 // FIXME: remove in 2.0.0
13275 hash: unspent.txId,
13276 pending: unspent.pending
13277 }
13278 })
13279 }
13280
13281 Wallet.prototype.setUnspentOutputs = function (unspents) {
13282 this.unspentMap = {}
13283 this.unspents = unspents.map(function (unspent) {
13284 // FIXME: remove unspent.hash in 2.0.0
13285 var txId = unspent.txId || unspent.hash
13286 var index = unspent.index
13287
13288 // FIXME: remove in 2.0.0
13289 if (unspent.hash !== undefined) {
13290 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13291 }
13292
13293 // FIXME: remove in 2.0.0
13294 if (index === undefined) {
13295 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13296 index = unspent.outputIndex
13297 }
13298
13299 typeForce('String', txId)
13300 typeForce('Number', index)
13301 typeForce('Number', unspent.value)
13302
13303 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13304 assert.doesNotThrow(function () {
13305 Address.fromBase58Check(unspent.address)
13306 }, 'Expected Base58 Address, got ' + unspent.address)
13307 assert(isFinite(index), 'Expected finite index, got ' + index)
13308
13309 // FIXME: remove branch in 2.0.0
13310 if (unspent.confirmations !== undefined) {
13311 typeForce('Number', unspent.confirmations)
13312 }
13313
13314 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13315
13316 unspent = {
13317 address: unspent.address,
13318 confirmations: unspent.confirmations || 0,
13319 index: index,
13320 txHash: txHash,
13321 txId: txId,
13322 value: unspent.value,
13323
13324 // FIXME: remove in 2.0.0
13325 pending: unspent.pending || false
13326 }
13327
13328 // FIXME: remove in 2.0.0
13329 this.unspentMap[txId + ':' + index] = unspent
13330
13331 return unspent
13332 }, this)
13333 }
13334
13335 Wallet.prototype.signWith = function (tx, addresses) {
13336 addresses.forEach(function (address, i) {
13337 var privKey = this.getPrivateKeyForAddress(address)
13338
13339 tx.sign(i, privKey)
13340 }, this)
13341
13342 return tx
13343 }
13344
13345 function estimatePaddedFee (tx, network) {
13346 var tmpTx = tx.clone()
13347 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13348
13349 return network.estimateFee(tmpTx)
13350 }
13351
13352 // FIXME: 1.0.0 shims, remove in 2.0.0
13353 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13354 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13355
13356 module.exports = Wallet
13357
13358 }).call(this,require("buffer").Buffer)
13359 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13360 });</script>
13361 <script>bitcoin.networks.shadow = {
13362 magicPrefix: '\x19ShadowCash Signed Message:\n',
13363 bip32: {
13364 public: 0xEE80286A,
13365 private: 0xEE8031E8
13366 },
13367 pubKeyHash: 0x3f,
13368 scriptHash: 0x7d,
13369 wif: 0xbf,
13370 dustThreshold: 0,
13371 feePerKb: 1000,
13372 estimateFee: function() { return "unused in this app" },
13373 };
13374
13375 bitcoin.networks.shadowtn = {
13376 magicPrefix: '\x19ShadowCash Signed Message:\n',
13377 bip32: {
13378 public: 0x76C0FDFB,
13379 private: 0x76C1077A
13380 },
13381 pubKeyHash: 0x7f,
13382 scriptHash: 0xc4,
13383 wif: 0xff,
13384 dustThreshold: 0,
13385 feePerKb: 1000,
13386 estimateFee: function() { return "unused in this app" },
13387 };
13388
13389 bitcoin.networks.clam = {
13390 bip32: {
13391 public: 0xa8c26d64,
13392 private: 0xa8c17826
13393 },
13394 pubKeyHash: 0x89,
13395 wif: 0x85,
13396 };
13397
13398 bitcoin.networks.dash = {
13399 bip32: {
13400 public: 0x0488b21e,
13401 private: 0x0488ade4
13402 },
13403 pubKeyHash: 0x4c,
13404 scriptHash: 0x10,
13405 wif: 0xcc,
13406 };
13407
13408 bitcoin.networks.namecoin = {
13409 bip32: {
13410 public: 0x0488b21e,
13411 private: 0x0488ade4
13412 },
13413 pubKeyHash: 0x34,
13414 //scriptHash: 0x10,
13415 wif: 0x80,
13416 };
13417
13418 bitcoin.networks.peercoin = {
13419 bip32: {
13420 public: 0x0488b21e,
13421 private: 0x0488ade4
13422 },
13423 pubKeyHash: 0x37,
13424 //scriptHash: 0x10,
13425 wif: 0xb7,
13426 };
13427
13428 </script>
13429 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13430
13431 //// base.js
13432
13433 /** @fileOverview Javascript cryptography implementation.
13434 *
13435 * Crush to remove comments, shorten variable names and
13436 * generally reduce transmission size.
13437 *
13438 * @author Emily Stark
13439 * @author Mike Hamburg
13440 * @author Dan Boneh
13441 */
13442
13443 "use strict";
13444 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13445 /*global document, window, escape, unescape, module, require, Uint32Array */
13446
13447 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13448 var sjcl = {
13449 /** @namespace Symmetric ciphers. */
13450 cipher: {},
13451
13452 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13453 hash: {},
13454
13455 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13456 keyexchange: {},
13457
13458 /** @namespace Block cipher modes of operation. */
13459 mode: {},
13460
13461 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13462 misc: {},
13463
13464 /**
13465 * @namespace Bit array encoders and decoders.
13466 *
13467 * @description
13468 * The members of this namespace are functions which translate between
13469 * SJCL's bitArrays and other objects (usually strings). Because it
13470 * isn't always clear which direction is encoding and which is decoding,
13471 * the method names are "fromBits" and "toBits".
13472 */
13473 codec: {},
13474
13475 /** @namespace Exceptions. */
13476 exception: {
13477 /** @constructor Ciphertext is corrupt. */
13478 corrupt: function(message) {
13479 this.toString = function() { return "CORRUPT: "+this.message; };
13480 this.message = message;
13481 },
13482
13483 /** @constructor Invalid parameter. */
13484 invalid: function(message) {
13485 this.toString = function() { return "INVALID: "+this.message; };
13486 this.message = message;
13487 },
13488
13489 /** @constructor Bug or missing feature in SJCL. @constructor */
13490 bug: function(message) {
13491 this.toString = function() { return "BUG: "+this.message; };
13492 this.message = message;
13493 },
13494
13495 /** @constructor Something isn't ready. */
13496 notReady: function(message) {
13497 this.toString = function() { return "NOT READY: "+this.message; };
13498 this.message = message;
13499 }
13500 }
13501 };
13502
13503 if(typeof module !== 'undefined' && module.exports){
13504 module.exports = sjcl;
13505 }
13506 if (typeof define === "function") {
13507 define([], function () {
13508 return sjcl;
13509 });
13510 }
13511
13512
13513 //// bitArray.js
13514
13515 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13516 *
13517 * @author Emily Stark
13518 * @author Mike Hamburg
13519 * @author Dan Boneh
13520 */
13521
13522 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13523 *
13524 * @description
13525 * <p>
13526 * These objects are the currency accepted by SJCL's crypto functions.
13527 * </p>
13528 *
13529 * <p>
13530 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13531 * but many of them can take arguments that are not a multiple of 4 bytes.
13532 * This library encodes arrays of bits (whose size need not be a multiple of 8
13533 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13534 * array of words, 32 bits at a time. Since the words are double-precision
13535 * floating point numbers, they fit some extra data. We use this (in a private,
13536 * possibly-changing manner) to encode the number of bits actually present
13537 * in the last word of the array.
13538 * </p>
13539 *
13540 * <p>
13541 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13542 * to ciphers like AES which want arrays of words.
13543 * </p>
13544 */
13545 sjcl.bitArray = {
13546 /**
13547 * Array slices in units of bits.
13548 * @param {bitArray} a The array to slice.
13549 * @param {Number} bstart The offset to the start of the slice, in bits.
13550 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13551 * slice until the end of the array.
13552 * @return {bitArray} The requested slice.
13553 */
13554 bitSlice: function (a, bstart, bend) {
13555 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13556 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13557 },
13558
13559 /**
13560 * Extract a number packed into a bit array.
13561 * @param {bitArray} a The array to slice.
13562 * @param {Number} bstart The offset to the start of the slice, in bits.
13563 * @param {Number} length The length of the number to extract.
13564 * @return {Number} The requested slice.
13565 */
13566 extract: function(a, bstart, blength) {
13567 // FIXME: this Math.floor is not necessary at all, but for some reason
13568 // seems to suppress a bug in the Chromium JIT.
13569 var x, sh = Math.floor((-bstart-blength) & 31);
13570 if ((bstart + blength - 1 ^ bstart) & -32) {
13571 // it crosses a boundary
13572 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13573 } else {
13574 // within a single word
13575 x = a[bstart/32|0] >>> sh;
13576 }
13577 return x & ((1<<blength) - 1);
13578 },
13579
13580 /**
13581 * Concatenate two bit arrays.
13582 * @param {bitArray} a1 The first array.
13583 * @param {bitArray} a2 The second array.
13584 * @return {bitArray} The concatenation of a1 and a2.
13585 */
13586 concat: function (a1, a2) {
13587 if (a1.length === 0 || a2.length === 0) {
13588 return a1.concat(a2);
13589 }
13590
13591 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13592 if (shift === 32) {
13593 return a1.concat(a2);
13594 } else {
13595 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13596 }
13597 },
13598
13599 /**
13600 * Find the length of an array of bits.
13601 * @param {bitArray} a The array.
13602 * @return {Number} The length of a, in bits.
13603 */
13604 bitLength: function (a) {
13605 var l = a.length, x;
13606 if (l === 0) { return 0; }
13607 x = a[l - 1];
13608 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13609 },
13610
13611 /**
13612 * Truncate an array.
13613 * @param {bitArray} a The array.
13614 * @param {Number} len The length to truncate to, in bits.
13615 * @return {bitArray} A new array, truncated to len bits.
13616 */
13617 clamp: function (a, len) {
13618 if (a.length * 32 < len) { return a; }
13619 a = a.slice(0, Math.ceil(len / 32));
13620 var l = a.length;
13621 len = len & 31;
13622 if (l > 0 && len) {
13623 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13624 }
13625 return a;
13626 },
13627
13628 /**
13629 * Make a partial word for a bit array.
13630 * @param {Number} len The number of bits in the word.
13631 * @param {Number} x The bits.
13632 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13633 * @return {Number} The partial word.
13634 */
13635 partial: function (len, x, _end) {
13636 if (len === 32) { return x; }
13637 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13638 },
13639
13640 /**
13641 * Get the number of bits used by a partial word.
13642 * @param {Number} x The partial word.
13643 * @return {Number} The number of bits used by the partial word.
13644 */
13645 getPartial: function (x) {
13646 return Math.round(x/0x10000000000) || 32;
13647 },
13648
13649 /**
13650 * Compare two arrays for equality in a predictable amount of time.
13651 * @param {bitArray} a The first array.
13652 * @param {bitArray} b The second array.
13653 * @return {boolean} true if a == b; false otherwise.
13654 */
13655 equal: function (a, b) {
13656 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13657 return false;
13658 }
13659 var x = 0, i;
13660 for (i=0; i<a.length; i++) {
13661 x |= a[i]^b[i];
13662 }
13663 return (x === 0);
13664 },
13665
13666 /** Shift an array right.
13667 * @param {bitArray} a The array to shift.
13668 * @param {Number} shift The number of bits to shift.
13669 * @param {Number} [carry=0] A byte to carry in
13670 * @param {bitArray} [out=[]] An array to prepend to the output.
13671 * @private
13672 */
13673 _shiftRight: function (a, shift, carry, out) {
13674 var i, last2=0, shift2;
13675 if (out === undefined) { out = []; }
13676
13677 for (; shift >= 32; shift -= 32) {
13678 out.push(carry);
13679 carry = 0;
13680 }
13681 if (shift === 0) {
13682 return out.concat(a);
13683 }
13684
13685 for (i=0; i<a.length; i++) {
13686 out.push(carry | a[i]>>>shift);
13687 carry = a[i] << (32-shift);
13688 }
13689 last2 = a.length ? a[a.length-1] : 0;
13690 shift2 = sjcl.bitArray.getPartial(last2);
13691 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13692 return out;
13693 },
13694
13695 /** xor a block of 4 words together.
13696 * @private
13697 */
13698 _xor4: function(x,y) {
13699 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13700 },
13701
13702 /** byteswap a word array inplace.
13703 * (does not handle partial words)
13704 * @param {sjcl.bitArray} a word array
13705 * @return {sjcl.bitArray} byteswapped array
13706 */
13707 byteswapM: function(a) {
13708 var i, v, m = 0xff00;
13709 for (i = 0; i < a.length; ++i) {
13710 v = a[i];
13711 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13712 }
13713 return a;
13714 }
13715 };
13716
13717
13718 //// codecString.js
13719
13720 /** @fileOverview Bit array codec implementations.
13721 *
13722 * @author Emily Stark
13723 * @author Mike Hamburg
13724 * @author Dan Boneh
13725 */
13726
13727 /** @namespace UTF-8 strings */
13728 sjcl.codec.utf8String = {
13729 /** Convert from a bitArray to a UTF-8 string. */
13730 fromBits: function (arr) {
13731 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13732 for (i=0; i<bl/8; i++) {
13733 if ((i&3) === 0) {
13734 tmp = arr[i/4];
13735 }
13736 out += String.fromCharCode(tmp >>> 24);
13737 tmp <<= 8;
13738 }
13739 return decodeURIComponent(escape(out));
13740 },
13741
13742 /** Convert from a UTF-8 string to a bitArray. */
13743 toBits: function (str) {
13744 str = unescape(encodeURIComponent(str));
13745 var out = [], i, tmp=0;
13746 for (i=0; i<str.length; i++) {
13747 tmp = tmp << 8 | str.charCodeAt(i);
13748 if ((i&3) === 3) {
13749 out.push(tmp);
13750 tmp = 0;
13751 }
13752 }
13753 if (i&3) {
13754 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13755 }
13756 return out;
13757 }
13758 };
13759
13760
13761 //// codecHex.js
13762
13763 /** @fileOverview Bit array codec implementations.
13764 *
13765 * @author Emily Stark
13766 * @author Mike Hamburg
13767 * @author Dan Boneh
13768 */
13769
13770 /** @namespace Hexadecimal */
13771 sjcl.codec.hex = {
13772 /** Convert from a bitArray to a hex string. */
13773 fromBits: function (arr) {
13774 var out = "", i;
13775 for (i=0; i<arr.length; i++) {
13776 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13777 }
13778 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13779 },
13780 /** Convert from a hex string to a bitArray. */
13781 toBits: function (str) {
13782 var i, out=[], len;
13783 str = str.replace(/\s|0x/g, "");
13784 len = str.length;
13785 str = str + "00000000";
13786 for (i=0; i<str.length; i+=8) {
13787 out.push(parseInt(str.substr(i,8),16)^0);
13788 }
13789 return sjcl.bitArray.clamp(out, len*4);
13790 }
13791 };
13792
13793
13794 //// sha512.js
13795
13796 /** @fileOverview Javascript SHA-512 implementation.
13797 *
13798 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13799 * SJCL by Stefan Thomas.
13800 *
13801 * CryptoJS (c) 20092012 by Jeff Mott. All rights reserved.
13802 * Released with New BSD License
13803 *
13804 * @author Emily Stark
13805 * @author Mike Hamburg
13806 * @author Dan Boneh
13807 * @author Jeff Mott
13808 * @author Stefan Thomas
13809 */
13810
13811 /**
13812 * Context for a SHA-512 operation in progress.
13813 * @constructor
13814 * @class Secure Hash Algorithm, 512 bits.
13815 */
13816 sjcl.hash.sha512 = function (hash) {
13817 if (!this._key[0]) { this._precompute(); }
13818 if (hash) {
13819 this._h = hash._h.slice(0);
13820 this._buffer = hash._buffer.slice(0);
13821 this._length = hash._length;
13822 } else {
13823 this.reset();
13824 }
13825 };
13826
13827 /**
13828 * Hash a string or an array of words.
13829 * @static
13830 * @param {bitArray|String} data the data to hash.
13831 * @return {bitArray} The hash value, an array of 16 big-endian words.
13832 */
13833 sjcl.hash.sha512.hash = function (data) {
13834 return (new sjcl.hash.sha512()).update(data).finalize();
13835 };
13836
13837 sjcl.hash.sha512.prototype = {
13838 /**
13839 * The hash's block size, in bits.
13840 * @constant
13841 */
13842 blockSize: 1024,
13843
13844 /**
13845 * Reset the hash state.
13846 * @return this
13847 */
13848 reset:function () {
13849 this._h = this._init.slice(0);
13850 this._buffer = [];
13851 this._length = 0;
13852 return this;
13853 },
13854
13855 /**
13856 * Input several words to the hash.
13857 * @param {bitArray|String} data the data to hash.
13858 * @return this
13859 */
13860 update: function (data) {
13861 if (typeof data === "string") {
13862 data = sjcl.codec.utf8String.toBits(data);
13863 }
13864 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13865 ol = this._length,
13866 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13867 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13868 this._block(b.splice(0,32));
13869 }
13870 return this;
13871 },
13872
13873 /**
13874 * Complete hashing and output the hash value.
13875 * @return {bitArray} The hash value, an array of 16 big-endian words.
13876 */
13877 finalize:function () {
13878 var i, b = this._buffer, h = this._h;
13879
13880 // Round out and push the buffer
13881 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13882
13883 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13884 for (i = b.length + 4; i & 31; i++) {
13885 b.push(0);
13886 }
13887
13888 // append the length
13889 b.push(0);
13890 b.push(0);
13891 b.push(Math.floor(this._length / 0x100000000));
13892 b.push(this._length | 0);
13893
13894 while (b.length) {
13895 this._block(b.splice(0,32));
13896 }
13897
13898 this.reset();
13899 return h;
13900 },
13901
13902 /**
13903 * The SHA-512 initialization vector, to be precomputed.
13904 * @private
13905 */
13906 _init:[],
13907
13908 /**
13909 * Least significant 24 bits of SHA512 initialization values.
13910 *
13911 * Javascript only has 53 bits of precision, so we compute the 40 most
13912 * significant bits and add the remaining 24 bits as constants.
13913 *
13914 * @private
13915 */
13916 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13917
13918 /*
13919 _init:
13920 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13921 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13922 */
13923
13924 /**
13925 * The SHA-512 hash key, to be precomputed.
13926 * @private
13927 */
13928 _key:[],
13929
13930 /**
13931 * Least significant 24 bits of SHA512 key values.
13932 * @private
13933 */
13934 _keyr:
13935 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13936 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13937 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13938 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13939 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13940 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13941 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13942 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13943 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13944 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13945
13946 /*
13947 _key:
13948 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13949 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13950 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13951 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13952 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13953 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13954 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13955 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13956 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13957 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13958 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13959 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13960 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13961 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13962 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13963 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13964 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13965 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13966 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13967 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13968 */
13969
13970 /**
13971 * Function to precompute _init and _key.
13972 * @private
13973 */
13974 _precompute: function () {
13975 // XXX: This code is for precomputing the SHA256 constants, change for
13976 // SHA512 and re-enable.
13977 var i = 0, prime = 2, factor;
13978
13979 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13980 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13981
13982 outer: for (; i<80; prime++) {
13983 for (factor=2; factor*factor <= prime; factor++) {
13984 if (prime % factor === 0) {
13985 // not a prime
13986 continue outer;
13987 }
13988 }
13989
13990 if (i<8) {
13991 this._init[i*2] = frac(Math.pow(prime, 1/2));
13992 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13993 }
13994 this._key[i*2] = frac(Math.pow(prime, 1/3));
13995 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13996 i++;
13997 }
13998 },
13999
14000 /**
14001 * Perform one cycle of SHA-512.
14002 * @param {bitArray} words one block of words.
14003 * @private
14004 */
14005 _block:function (words) {
14006 var i, wrh, wrl,
14007 w = words.slice(0),
14008 h = this._h,
14009 k = this._key,
14010 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
14011 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
14012 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
14013 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
14014
14015 // Working variables
14016 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
14017 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
14018 eh = h4h, el = h4l, fh = h5h, fl = h5l,
14019 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
14020
14021 for (i=0; i<80; i++) {
14022 // load up the input word for this round
14023 if (i<16) {
14024 wrh = w[i * 2];
14025 wrl = w[i * 2 + 1];
14026 } else {
14027 // Gamma0
14028 var gamma0xh = w[(i-15) * 2];
14029 var gamma0xl = w[(i-15) * 2 + 1];
14030 var gamma0h =
14031 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14032 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14033 (gamma0xh >>> 7);
14034 var gamma0l =
14035 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14036 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14037 ((gamma0xh << 25) | (gamma0xl >>> 7));
14038
14039 // Gamma1
14040 var gamma1xh = w[(i-2) * 2];
14041 var gamma1xl = w[(i-2) * 2 + 1];
14042 var gamma1h =
14043 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14044 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14045 (gamma1xh >>> 6);
14046 var gamma1l =
14047 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14048 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14049 ((gamma1xh << 26) | (gamma1xl >>> 6));
14050
14051 // Shortcuts
14052 var wr7h = w[(i-7) * 2];
14053 var wr7l = w[(i-7) * 2 + 1];
14054
14055 var wr16h = w[(i-16) * 2];
14056 var wr16l = w[(i-16) * 2 + 1];
14057
14058 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14059 wrl = gamma0l + wr7l;
14060 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14061 wrl += gamma1l;
14062 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14063 wrl += wr16l;
14064 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14065 }
14066
14067 w[i*2] = wrh |= 0;
14068 w[i*2 + 1] = wrl |= 0;
14069
14070 // Ch
14071 var chh = (eh & fh) ^ (~eh & gh);
14072 var chl = (el & fl) ^ (~el & gl);
14073
14074 // Maj
14075 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14076 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14077
14078 // Sigma0
14079 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14080 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14081
14082 // Sigma1
14083 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14084 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14085
14086 // K(round)
14087 var krh = k[i*2];
14088 var krl = k[i*2+1];
14089
14090 // t1 = h + sigma1 + ch + K(round) + W(round)
14091 var t1l = hl + sigma1l;
14092 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14093 t1l += chl;
14094 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14095 t1l += krl;
14096 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14097 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14098 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14099
14100 // t2 = sigma0 + maj
14101 var t2l = sigma0l + majl;
14102 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14103
14104 // Update working variables
14105 hh = gh;
14106 hl = gl;
14107 gh = fh;
14108 gl = fl;
14109 fh = eh;
14110 fl = el;
14111 el = (dl + t1l) | 0;
14112 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14113 dh = ch;
14114 dl = cl;
14115 ch = bh;
14116 cl = bl;
14117 bh = ah;
14118 bl = al;
14119 al = (t1l + t2l) | 0;
14120 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14121 }
14122
14123 // Intermediate hash
14124 h0l = h[1] = (h0l + al) | 0;
14125 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14126 h1l = h[3] = (h1l + bl) | 0;
14127 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14128 h2l = h[5] = (h2l + cl) | 0;
14129 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14130 h3l = h[7] = (h3l + dl) | 0;
14131 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14132 h4l = h[9] = (h4l + el) | 0;
14133 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14134 h5l = h[11] = (h5l + fl) | 0;
14135 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14136 h6l = h[13] = (h6l + gl) | 0;
14137 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14138 h7l = h[15] = (h7l + hl) | 0;
14139 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14140 }
14141 };
14142
14143
14144 //// hmac.js
14145
14146 /** @fileOverview HMAC implementation.
14147 *
14148 * @author Emily Stark
14149 * @author Mike Hamburg
14150 * @author Dan Boneh
14151 */
14152
14153 /** HMAC with the specified hash function.
14154 * @constructor
14155 * @param {bitArray} key the key for HMAC.
14156 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14157 */
14158 sjcl.misc.hmac = function (key, Hash) {
14159 this._hash = Hash = Hash || sjcl.hash.sha256;
14160 var exKey = [[],[]], i,
14161 bs = Hash.prototype.blockSize / 32;
14162 this._baseHash = [new Hash(), new Hash()];
14163
14164 if (key.length > bs) {
14165 key = Hash.hash(key);
14166 }
14167
14168 for (i=0; i<bs; i++) {
14169 exKey[0][i] = key[i]^0x36363636;
14170 exKey[1][i] = key[i]^0x5C5C5C5C;
14171 }
14172
14173 this._baseHash[0].update(exKey[0]);
14174 this._baseHash[1].update(exKey[1]);
14175 this._resultHash = new Hash(this._baseHash[0]);
14176 };
14177
14178 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
14179 * @param {bitArray|String} data The data to mac.
14180 */
14181 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14182 if (!this._updated) {
14183 this.update(data);
14184 return this.digest(data);
14185 } else {
14186 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14187 }
14188 };
14189
14190 sjcl.misc.hmac.prototype.reset = function () {
14191 this._resultHash = new this._hash(this._baseHash[0]);
14192 this._updated = false;
14193 };
14194
14195 sjcl.misc.hmac.prototype.update = function (data) {
14196 this._updated = true;
14197 this._resultHash.update(data);
14198 };
14199
14200 sjcl.misc.hmac.prototype.digest = function () {
14201 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14202
14203 this.reset();
14204
14205 return result;
14206 };
14207
14208
14209 //// pbkdf2.js
14210
14211
14212 /** @fileOverview Password-based key-derivation function, version 2.0.
14213 *
14214 * @author Emily Stark
14215 * @author Mike Hamburg
14216 * @author Dan Boneh
14217 */
14218
14219 /** Password-Based Key-Derivation Function, version 2.0.
14220 *
14221 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14222 *
14223 * This is the method specified by RSA's PKCS #5 standard.
14224 *
14225 * @param {bitArray|String} password The password.
14226 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14227 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14228 * @param {Number} [length] The length of the derived key. Defaults to the
14229 output size of the hash function.
14230 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14231 * @return {bitArray} the derived key.
14232 */
14233 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14234 count = count || 1000;
14235
14236 if (length < 0 || count < 0) {
14237 throw sjcl.exception.invalid("invalid params to pbkdf2");
14238 }
14239
14240 if (typeof password === "string") {
14241 password = sjcl.codec.utf8String.toBits(password);
14242 }
14243
14244 if (typeof salt === "string") {
14245 salt = sjcl.codec.utf8String.toBits(salt);
14246 }
14247
14248 Prff = Prff || sjcl.misc.hmac;
14249
14250 var prf = new Prff(password),
14251 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14252
14253 for (k = 1; 32 * out.length < (length || 1); k++) {
14254 u = ui = prf.encrypt(b.concat(salt,[k]));
14255
14256 for (i=1; i<count; i++) {
14257 ui = prf.encrypt(ui);
14258 for (j=0; j<ui.length; j++) {
14259 u[j] ^= ui[j];
14260 }
14261 }
14262
14263 out = out.concat(u);
14264 }
14265
14266 if (length) { out = b.clamp(out, length); }
14267
14268 return out;
14269 };
14270
14271
14272 //// sha256.js
14273
14274 /** @fileOverview Javascript SHA-256 implementation.
14275 *
14276 * An older version of this implementation is available in the public
14277 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14278 * Stanford University 2008-2010 and BSD-licensed for liability
14279 * reasons.
14280 *
14281 * Special thanks to Aldo Cortesi for pointing out several bugs in
14282 * this code.
14283 *
14284 * @author Emily Stark
14285 * @author Mike Hamburg
14286 * @author Dan Boneh
14287 */
14288
14289 /**
14290 * Context for a SHA-256 operation in progress.
14291 * @constructor
14292 * @class Secure Hash Algorithm, 256 bits.
14293 */
14294 sjcl.hash.sha256 = function (hash) {
14295 if (!this._key[0]) { this._precompute(); }
14296 if (hash) {
14297 this._h = hash._h.slice(0);
14298 this._buffer = hash._buffer.slice(0);
14299 this._length = hash._length;
14300 } else {
14301 this.reset();
14302 }
14303 };
14304
14305 /**
14306 * Hash a string or an array of words.
14307 * @static
14308 * @param {bitArray|String} data the data to hash.
14309 * @return {bitArray} The hash value, an array of 16 big-endian words.
14310 */
14311 sjcl.hash.sha256.hash = function (data) {
14312 return (new sjcl.hash.sha256()).update(data).finalize();
14313 };
14314
14315 sjcl.hash.sha256.prototype = {
14316 /**
14317 * The hash's block size, in bits.
14318 * @constant
14319 */
14320 blockSize: 512,
14321
14322 /**
14323 * Reset the hash state.
14324 * @return this
14325 */
14326 reset:function () {
14327 this._h = this._init.slice(0);
14328 this._buffer = [];
14329 this._length = 0;
14330 return this;
14331 },
14332
14333 /**
14334 * Input several words to the hash.
14335 * @param {bitArray|String} data the data to hash.
14336 * @return this
14337 */
14338 update: function (data) {
14339 if (typeof data === "string") {
14340 data = sjcl.codec.utf8String.toBits(data);
14341 }
14342 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14343 ol = this._length,
14344 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14345 for (i = 512+ol & -512; i <= nl; i+= 512) {
14346 this._block(b.splice(0,16));
14347 }
14348 return this;
14349 },
14350
14351 /**
14352 * Complete hashing and output the hash value.
14353 * @return {bitArray} The hash value, an array of 8 big-endian words.
14354 */
14355 finalize:function () {
14356 var i, b = this._buffer, h = this._h;
14357
14358 // Round out and push the buffer
14359 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14360
14361 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14362 for (i = b.length + 2; i & 15; i++) {
14363 b.push(0);
14364 }
14365
14366 // append the length
14367 b.push(Math.floor(this._length / 0x100000000));
14368 b.push(this._length | 0);
14369
14370 while (b.length) {
14371 this._block(b.splice(0,16));
14372 }
14373
14374 this.reset();
14375 return h;
14376 },
14377
14378 /**
14379 * The SHA-256 initialization vector, to be precomputed.
14380 * @private
14381 */
14382 _init:[],
14383 /*
14384 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14385 */
14386
14387 /**
14388 * The SHA-256 hash key, to be precomputed.
14389 * @private
14390 */
14391 _key:[],
14392 /*
14393 _key:
14394 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14395 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14396 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14397 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14398 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14399 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14400 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14401 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14402 */
14403
14404
14405 /**
14406 * Function to precompute _init and _key.
14407 * @private
14408 */
14409 _precompute: function () {
14410 var i = 0, prime = 2, factor;
14411
14412 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14413
14414 outer: for (; i<64; prime++) {
14415 for (factor=2; factor*factor <= prime; factor++) {
14416 if (prime % factor === 0) {
14417 // not a prime
14418 continue outer;
14419 }
14420 }
14421
14422 if (i<8) {
14423 this._init[i] = frac(Math.pow(prime, 1/2));
14424 }
14425 this._key[i] = frac(Math.pow(prime, 1/3));
14426 i++;
14427 }
14428 },
14429
14430 /**
14431 * Perform one cycle of SHA-256.
14432 * @param {bitArray} words one block of words.
14433 * @private
14434 */
14435 _block:function (words) {
14436 var i, tmp, a, b,
14437 w = words.slice(0),
14438 h = this._h,
14439 k = this._key,
14440 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14441 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14442
14443 /* Rationale for placement of |0 :
14444 * If a value can overflow is original 32 bits by a factor of more than a few
14445 * million (2^23 ish), there is a possibility that it might overflow the
14446 * 53-bit mantissa and lose precision.
14447 *
14448 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14449 * propagates around the loop, and on the hash state h[]. I don't believe
14450 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14451 * (for h4 anyway), and better safe than sorry.
14452 *
14453 * The clamps on h[] are necessary for the output to be correct even in the
14454 * common case and for short inputs.
14455 */
14456 for (i=0; i<64; i++) {
14457 // load up the input word for this round
14458 if (i<16) {
14459 tmp = w[i];
14460 } else {
14461 a = w[(i+1 ) & 15];
14462 b = w[(i+14) & 15];
14463 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14464 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14465 w[i&15] + w[(i+9) & 15]) | 0;
14466 }
14467
14468 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14469
14470 // shift register
14471 h7 = h6; h6 = h5; h5 = h4;
14472 h4 = h3 + tmp | 0;
14473 h3 = h2; h2 = h1; h1 = h0;
14474
14475 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14476 }
14477
14478 h[0] = h[0]+h0 | 0;
14479 h[1] = h[1]+h1 | 0;
14480 h[2] = h[2]+h2 | 0;
14481 h[3] = h[3]+h3 | 0;
14482 h[4] = h[4]+h4 | 0;
14483 h[5] = h[5]+h5 | 0;
14484 h[6] = h[6]+h6 | 0;
14485 h[7] = h[7]+h7 | 0;
14486 }
14487 };
14488 </script>
14489 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14490 WORDLISTS["english"] = [
14491 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14492 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14493 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14494 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14495 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14496 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14497 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14498 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14499 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14500 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14501 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14502 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14503 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14504 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14505 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14506 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14507 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14508 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14509 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14510 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14511 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14512 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14513 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14514 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14515 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14516 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14517 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14518 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14519 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14520 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14521 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14522 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14523 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14524 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14525 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14526 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14527 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14528 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14529 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14530 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14531 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14532 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14533 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14534 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14535 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14536 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14537 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14538 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14539 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14540 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14541 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14542 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14543 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14544 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14545 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14546 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14547 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14548 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14549 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14550 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14551 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14552 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14553 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14554 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14555 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14556 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14557 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14558 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14559 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14560 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14561 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14562 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14563 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14564 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14565 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14566 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14567 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14568 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14569 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14570 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14571 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14572 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14573 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14574 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14575 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14576 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14577 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14578 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14579 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14580 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14581 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14582 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14583 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14584 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14585 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14586 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14587 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14588 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14589 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14590 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14591 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14592 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14593 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14594 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14595 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14596 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14597 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14598 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14599 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14600 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14601 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14602 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14603 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14604 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14605 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14606 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14607 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14608 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14609 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14610 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14611 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14612 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14613 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14614 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14615 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14616 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14617 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14618 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14619 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14620 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14621 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14622 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14623 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14624 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14625 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14626 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14627 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14628 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14629 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14630 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14631 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14632 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14633 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14634 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14635 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14636 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14637 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14638 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14639 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14640 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14641 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14642 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14643 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14644 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14645 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14646 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14647 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14648 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14649 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14650 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14651 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14652 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14653 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14654 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14655 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14656 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14657 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14658 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14659 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14660 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14661 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14662 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14663 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14664 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14665 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14666 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14667 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14668 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14669 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14670 "thank","that","theme","then","theory","there","they","thing","this","thought",
14671 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14672 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14673 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14674 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14675 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14676 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14677 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14678 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14679 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14680 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14681 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14682 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14683 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14684 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14685 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14686 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14687 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14688 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14689 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14690 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14691 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14692 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14693 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14694 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14695 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14696 </script>
14697 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14698 WORDLISTS["japanese"] = [
14699 "あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
14700 "あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
14701 "あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
14702 "あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
14703 "あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
14704 "あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
14705 "いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
14706 "いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
14707 "いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
14708 "いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
14709 "いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
14710 "いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
14711 "いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
14712 "いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
14713 "いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
14714 "うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
14715 "うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
14716 "うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
14717 "うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
14718 "うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
14719 "うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
14720 "えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
14721 "えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
14722 "えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
14723 "えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
14724 "おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
14725 "おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
14726 "おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
14727 "おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
14728 "おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
14729 "おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
14730 "おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
14731 "かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
14732 "かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
14733 "かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
14734 "がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
14735 "かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
14736 "かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
14737 "きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
14738 "きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
14739 "ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
14740 "きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
14741 "きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
14742 "きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
14743 "きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
14744 "きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
14745 "くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
14746 "くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
14747 "くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
14748 "ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
14749 "くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
14750 "ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
14751 "けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
14752 "げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
14753 "けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
14754 "けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
14755 "けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
14756 "けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
14757 "けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
14758 "けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
14759 "ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
14760 "ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
14761 "ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
14762 "こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
14763 "こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
14764 "こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
14765 "こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
14766 "こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
14767 "こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
14768 "こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
14769 "こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
14770 "さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
14771 "さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
14772 "さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
14773 "さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
14774 "さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
14775 "さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
14776 "ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
14777 "しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
14778 "しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
14779 "しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
14780 "しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
14781 "しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
14782 "しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
14783 "しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
14784 "しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
14785 "しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
14786 "しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
14787 "すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
14788 "すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
14789 "すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
14790 "ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
14791 "すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
14792 "せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
14793 "せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
14794 "せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
14795 "せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
14796 "ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
14797 "せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
14798 "せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
14799 "そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
14800 "そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
14801 "そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
14802 "そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
14803 "そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
14804 "ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
14805 "たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
14806 "だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
14807 "たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
14808 "たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
14809 "たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
14810 "たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
14811 "たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
14812 "ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
14813 "たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
14814 "たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
14815 "たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
14816 "ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
14817 "ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
14818 "ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
14819 "ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
14820 "ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
14821 "つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
14822 "つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
14823 "つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
14824 "てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
14825 "ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
14826 "てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
14827 "でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
14828 "てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
14829 "でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
14830 "でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
14831 "どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
14832 "とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
14833 "とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
14834 "とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
14835 "どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
14836 "ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
14837 "なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
14838 "なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
14839 "ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
14840 "にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
14841 "にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
14842 "にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
14843 "にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
14844 "にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
14845 "ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
14846 "ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
14847 "ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
14848 "ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
14849 "ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
14850 "のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
14851 "のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
14852 "ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
14853 "はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
14854 "はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
14855 "はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
14856 "はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
14857 "はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
14858 "はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
14859 "はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
14860 "ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
14861 "ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
14862 "ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
14863 "ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
14864 "ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
14865 "ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
14866 "ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
14867 "ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
14868 "ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
14869 "ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
14870 "ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
14871 "ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
14872 "へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
14873 "へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
14874 "へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
14875 "ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
14876 "ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
14877 "ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
14878 "ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
14879 "まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
14880 "まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
14881 "みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
14882 "みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
14883 "みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
14884 "むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
14885 "むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
14886 "むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
14887 "めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
14888 "めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
14889 "もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
14890 "やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
14891 "やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
14892 "ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
14893 "ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
14894 "よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
14895 "よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
14896 "らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
14897 "りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
14898 "りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
14899 "りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
14900 "れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
14901 "れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
14902 "ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
14903 "わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
14904 </script>
14905 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14906 WORDLISTS["spanish"] = [
14907 "ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
14908 "abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
14909 "aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
14910 "acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
14911 "afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
14912 "agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
14913 "alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
14914 "aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
14915 "altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
14916 "amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
14917 "ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
14918 "anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
14919 "apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
14920 "apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
14921 "arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
14922 "arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
14923 "asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
14924 "astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
14925 "atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
14926 "ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
14927 "aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
14928 "baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
14929 "banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
14930 "batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
14931 "beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
14932 "bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
14933 "bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
14934 "bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
14935 "bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
14936 "bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
14937 "caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
14938 "caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
14939 "calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
14940 "canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
14941 "captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
14942 "carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
14943 "causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
14944 "ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
14945 "chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
14946 "choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
14947 "cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
14948 "clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
14949 "cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
14950 "cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
14951 "comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
14952 "copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
14953 "cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
14954 "cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
14955 "cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
14956 "cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
14957 "curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
14958 "decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
14959 "dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
14960 "detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
14961 "dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
14962 "dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
14963 "don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
14964 "duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
14965 "ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
14966 "eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
14967 "elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
14968 "encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
14969 "enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
14970 "erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
14971 "espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
14972 "eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
14973 "excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
14974 "fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
14975 "faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
14976 "fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
14977 "fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
14978 "fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
14979 "fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
14980 "fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
14981 "forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
14982 "fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
14983 "fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
14984 "gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
14985 "ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
14986 "género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
14987 "giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
14988 "gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
14989 "grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
14990 "grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
14991 "gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
14992 "harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
14993 "hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
14994 "hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
14995 "horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
14996 "humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
14997 "ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
14998 "imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
14999 "inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
15000 "ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
15001 "jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
15002 "juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
15003 "juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
15004 "lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
15005 "lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
15006 "latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
15007 "legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
15008 "leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
15009 "lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
15010 "líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
15011 "llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
15012 "lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
15013 "luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
15014 "maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
15015 "mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
15016 "manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
15017 "marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
15018 "matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
15019 "mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
15020 "mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
15021 "miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
15022 "minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
15023 "moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
15024 "monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
15025 "morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
15026 "mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
15027 "muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
15028 "nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
15029 "naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
15030 "neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
15031 "nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
15032 "novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
15033 "nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
15034 "observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
15035 "octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
15036 "oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
15037 "olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
15038 "ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
15039 "orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
15040 "orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
15041 "óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
15042 "país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
15043 "panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
15044 "pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
15045 "paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
15046 "pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
15047 "peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
15048 "pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
15049 "persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
15050 "pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
15051 "pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
15052 "pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
15053 "pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
15054 "policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
15055 "posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
15056 "premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
15057 "proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
15058 "prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
15059 "pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
15060 "queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
15061 "rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
15062 "rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
15063 "rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
15064 "reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
15065 "reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
15066 "remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
15067 "resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
15068 "rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
15069 "riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
15070 "rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
15071 "ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
15072 "rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
15073 "rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
15074 "salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
15075 "sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
15076 "sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
15077 "seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
15078 "sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
15079 "severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
15080 "silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
15081 "sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
15082 "sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
15083 "sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
15084 "sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
15085 "surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
15086 "talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
15087 "tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
15088 "tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
15089 "tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
15090 "tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
15091 "testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
15092 "tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
15093 "tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
15094 "todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
15095 "torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
15096 "toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
15097 "trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
15098 "trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
15099 "truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
15100 "turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
15101 "uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
15102 "utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
15103 "válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
15104 "vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
15105 "veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
15106 "verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
15107 "vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
15108 "viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
15109 "vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
15110 "vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
15111 "zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
15112 </script>
15113 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15114 WORDLISTS["chinese_simplified"] = [
15115 "的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
15116 "中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
15117 "时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
15118 "就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
15119 "同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
15120 "面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
15121 "民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
15122 "度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
15123 "二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
15124 "两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
15125 "去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
15126 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15127 "那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
15128 "样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
15129 "心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
15130 "或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
15131 "条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
15132 "无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
15133 "已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
15134 "果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
15135 "次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
15136 "求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
15137 "图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
15138 "别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
15139 "几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
15140 "必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
15141 "南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
15142 "百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
15143 "压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
15144 "术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
15145 "收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
15146 "风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
15147 "身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
15148 "达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
15149 "八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
15150 "节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
15151 "传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
15152 "研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
15153 "织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
15154 "复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
15155 "深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
15156 "半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
15157 "史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
15158 "何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
15159 "号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
15160 "毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
15161 "王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
15162 "却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
15163 "包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
15164 "细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
15165 "官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
15166 "女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
15167 "含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
15168 "英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
15169 "破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
15170 "河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
15171 "案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
15172 "仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
15173 "轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
15174 "足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
15175 "负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
15176 "修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
15177 "财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
15178 "跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
15179 "初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
15180 "未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
15181 "钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
15182 "限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
15183 "州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
15184 "础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
15185 "袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
15186 "诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
15187 "夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
15188 "终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
15189 "烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
15190 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15191 "侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
15192 "货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
15193 "息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
15194 "医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
15195 "训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
15196 "脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
15197 "械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
15198 "粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
15199 "钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
15200 "培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
15201 "答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
15202 "脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
15203 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
15204 "评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
15205 "伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
15206 "亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
15207 "诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15208 "绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
15209 "屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
15210 "束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
15211 "胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
15212 "宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
15213 "露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
15214 "库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
15215 "鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
15216 "借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
15217 "润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
15218 "欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
15219 "纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
15220 "塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
15221 "刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
15222 "洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
15223 "献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15224 "阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15225 "楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
15226 "馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
15227 "塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
15228 "楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
15229 "监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
15230 "壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
15231 "桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
15232 "您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
15233 "纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
15234 "湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
15235 "齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
15236 "净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15237 "庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
15238 "伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
15239 "璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
15240 "纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
15241 "津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
15242 "肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
15243 "贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
15244 "峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
15245 "浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
15246 "睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
15247 "炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
15248 "呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
15249 "授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
15250 "幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
15251 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
15252 "夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
15253 "绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
15254 "礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
15255 "勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
15256 "饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
15257 "扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
15258 "奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
15259 "寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
15260 "贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
15261 "渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
15262 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
15263 "锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
15264 "缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
15265 "碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
15266 "票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
15267 "荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
15268 "撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
15269 "陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
15270 "虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
15271 "乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
15272 "瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
15273 "秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
15274 "洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
15275 "籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
15276 "醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
15277 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
15278 "趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
15279 "滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
15280 "泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
15281 "胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
15282 "串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
15283 "辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
15284 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
15285 "侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
15286 "豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
15287 "掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
15288 "雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
15289 "蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
15290 "番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
15291 "扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
15292 "悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
15293 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
15294 "霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
15295 "甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
15296 "伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
15297 "弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
15298 "逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
15299 "冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
15300 "欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
15301 "搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
15302 "忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
15303 "杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
15304 "烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
15305 "姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
15306 "董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
15307 "拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
15308 "览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
15309 "凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
15310 "丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
15311 "铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
15312 "窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
15313 "胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
15314 "疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
15315 "嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
15316 "莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
15317 "皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
15318 "巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
15319 "卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
15320 </script>
15321 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15322 WORDLISTS["chinese_traditional"] = [
15323 "的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
15324 "中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
15325 "時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
15326 "就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
15327 "同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
15328 "面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
15329 "民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
15330 "度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
15331 "二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
15332 "兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
15333 "去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
15334 "由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
15335 "那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
15336 "樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
15337 "心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
15338 "或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
15339 "條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
15340 "無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
15341 "已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
15342 "果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
15343 "次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
15344 "求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
15345 "圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
15346 "別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
15347 "幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
15348 "必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
15349 "南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
15350 "百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
15351 "壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
15352 "術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
15353 "收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
15354 "風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
15355 "身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
15356 "達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
15357 "八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
15358 "節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
15359 "傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
15360 "研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
15361 "織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
15362 "复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
15363 "深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
15364 "半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
15365 "史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
15366 "何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
15367 "號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
15368 "毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
15369 "王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
15370 "卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
15371 "包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
15372 "細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
15373 "官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
15374 "女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
15375 "含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
15376 "英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
15377 "破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
15378 "河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
15379 "案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
15380 "僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
15381 "輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
15382 "足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
15383 "負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
15384 "修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
15385 "財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
15386 "跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
15387 "初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
15388 "未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
15389 "錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
15390 "限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
15391 "州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
15392 "礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
15393 "袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
15394 "訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
15395 "夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
15396 "終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
15397 "烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
15398 "括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
15399 "侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
15400 "貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
15401 "息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
15402 "醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
15403 "訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
15404 "脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
15405 "械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
15406 "粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
15407 "鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
15408 "培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
15409 "答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
15410 "腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
15411 "概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
15412 "評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
15413 "傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
15414 "亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
15415 "詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
15416 "綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
15417 "屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
15418 "束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
15419 "胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
15420 "宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
15421 "露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
15422 "庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
15423 "鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
15424 "借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
15425 "潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
15426 "歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
15427 "納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
15428 "塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
15429 "刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
15430 "洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
15431 "獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
15432 "陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
15433 "樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
15434 "館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
15435 "塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
15436 "楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
15437 "監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
15438 "壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
15439 "橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
15440 "您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
15441 "紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
15442 "灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
15443 "齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
15444 "淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
15445 "莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
15446 "夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
15447 "璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
15448 "縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
15449 "津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
15450 "肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
15451 "貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
15452 "峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
15453 "浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
15454 "睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
15455 "炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
15456 "呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
15457 "授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
15458 "幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
15459 "姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
15460 "夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
15461 "繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
15462 "禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
15463 "勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
15464 "飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
15465 "掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
15466 "奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
15467 "寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
15468 "貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
15469 "漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
15470 "乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
15471 "銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
15472 "缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
15473 "碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
15474 "票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
15475 "荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
15476 "撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
15477 "陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
15478 "蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
15479 "乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
15480 "瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
15481 "秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
15482 "洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
15483 "籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
15484 "醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
15485 "玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
15486 "趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
15487 "灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
15488 "泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
15489 "脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
15490 "串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
15491 "輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
15492 "沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
15493 "僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
15494 "豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
15495 "掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
15496 "霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
15497 "蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
15498 "番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
15499 "扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
15500 "悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
15501 "渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
15502 "黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
15503 "甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
15504 "偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
15505 "弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
15506 "逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
15507 "冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
15508 "欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
15509 "搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
15510 "憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
15511 "杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
15512 "烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
15513 "姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
15514 "董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
15515 "拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
15516 "覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
15517 "兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
15518 "叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
15519 "鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
15520 "窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
15521 "胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
15522 "瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
15523 "嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
15524 "蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
15525 "皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
15526 "巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
15527 "卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
15528 </script>
15529 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15530 WORDLISTS["french"] = [
15531 "abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
15532 "abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
15533 "acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
15534 "aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
15535 "adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
15536 "adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
15537 "agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
15538 "aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
15539 "alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
15540 "ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
15541 "amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
15542 "animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
15543 "anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
15544 "aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
15545 "armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
15546 "aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
15547 "atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
15548 "audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
15549 "aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
15550 "badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
15551 "bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
15552 "bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
15553 "bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
15554 "bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
15555 "biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
15556 "blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
15557 "bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
15558 "bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
15559 "breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
15560 "broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
15561 "bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
15562 "caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
15563 "caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
15564 "caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
15565 "carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
15566 "caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
15567 "cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
15568 "charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
15569 "chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
15570 "chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
15571 "citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
15572 "cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
15573 "coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
15574 "colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
15575 "connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
15576 "corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
15577 "couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
15578 "crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
15579 "crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
15580 "curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
15581 "dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
15582 "déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
15583 "dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
15584 "dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
15585 "dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
15586 "détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
15587 "différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
15588 "discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
15589 "domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
15590 "doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
15591 "dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
15592 "écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
15593 "écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
15594 "effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
15595 "élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
15596 "embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
15597 "émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
15598 "enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
15599 "ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
15600 "énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
15601 "épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
15602 "épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
15603 "espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
15604 "estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
15605 "ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
15606 "évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
15607 "exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
15608 "exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
15609 "exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
15610 "farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
15611 "favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
15612 "féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
15613 "figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
15614 "fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
15615 "fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
15616 "fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
15617 "fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
15618 "frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
15619 "fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
15620 "galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
15621 "gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
15622 "gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
15623 "gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
15624 "goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
15625 "grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
15626 "gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
15627 "hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
15628 "hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
15629 "histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
15630 "horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
15631 "humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
15632 "illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
15633 "imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
15634 "inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
15635 "inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
15636 "inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
15637 "inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
15638 "jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
15639 "jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
15640 "joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
15641 "kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
15642 "laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
15643 "laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
15644 "lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
15645 "ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
15646 "lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
15647 "loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
15648 "lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
15649 "magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
15650 "malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
15651 "marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
15652 "matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
15653 "méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
15654 "mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
15655 "métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
15656 "mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
15657 "moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
15658 "morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
15659 "mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
15660 "muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
15661 "natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
15662 "négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
15663 "nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
15664 "normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
15665 "nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
15666 "obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
15667 "octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
15668 "olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
15669 "opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
15670 "oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
15671 "otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
15672 "paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
15673 "panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
15674 "parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
15675 "patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
15676 "pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
15677 "perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
15678 "pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
15679 "pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
15680 "pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
15681 "pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
15682 "pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
15683 "ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
15684 "pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
15685 "préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
15686 "problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
15687 "prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
15688 "pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
15689 "question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
15690 "ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
15691 "réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
15692 "rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
15693 "régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
15694 "remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
15695 "reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
15696 "rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
15697 "révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
15698 "rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
15699 "rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
15700 "ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
15701 "sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
15702 "sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
15703 "savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
15704 "scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
15705 "séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
15706 "séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
15707 "sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
15708 "sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
15709 "soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
15710 "sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
15711 "soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
15712 "station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
15713 "subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
15714 "surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
15715 "synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
15716 "tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
15717 "tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
15718 "tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
15719 "tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
15720 "tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
15721 "torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
15722 "trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
15723 "tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
15724 "tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
15725 "typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
15726 "univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
15727 "vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
15728 "valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
15729 "végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
15730 "vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
15731 "viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
15732 "violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
15733 "vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
15734 "voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
15735 "voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
15736 </script>
15737 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
15738 WORDLISTS["italian"] = [
15739 "abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
15740 "accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
15741 "addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
15742 "affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
15743 "agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
15744 "alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
15745 "allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
15746 "altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
15747 "america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
15748 "amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
15749 "andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
15750 "anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
15751 "appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
15752 "archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
15753 "arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
15754 "asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
15755 "astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
15756 "attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
15757 "avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
15758 "badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
15759 "bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
15760 "battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
15761 "benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
15762 "bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
15763 "bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
15764 "botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
15765 "brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
15766 "buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
15767 "cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
15768 "camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
15769 "capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
15770 "carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
15771 "casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
15772 "cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
15773 "cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
15774 "ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
15775 "ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
15776 "cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
15777 "comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
15778 "consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
15779 "cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
15780 "cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
15781 "critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
15782 "cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
15783 "daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
15784 "decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
15785 "demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
15786 "desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
15787 "diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
15788 "disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
15789 "dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
15790 "dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
15791 "dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
15792 "economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
15793 "elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
15794 "eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
15795 "enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
15796 "eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
15797 "erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
15798 "esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
15799 "esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
15800 "europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
15801 "famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
15802 "fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
15803 "feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
15804 "feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
15805 "fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
15806 "fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
15807 "fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
15808 "fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
15809 "frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
15810 "fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
15811 "gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
15812 "garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
15813 "gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
15814 "ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
15815 "gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
15816 "gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
15817 "gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
15818 "guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
15819 "idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
15820 "imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
15821 "importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
15822 "incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
15823 "ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
15824 "insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
15825 "invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
15826 "irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
15827 "lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
15828 "larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
15829 "lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
15830 "levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
15831 "liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
15832 "lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
15833 "luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
15834 "macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
15835 "malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
15836 "mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
15837 "massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
15838 "medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
15839 "merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
15840 "mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
15841 "minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
15842 "mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
15843 "molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
15844 "mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
15845 "mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
15846 "muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
15847 "narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
15848 "negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
15849 "nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
15850 "normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
15851 "nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
15852 "obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
15853 "offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
15854 "ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
15855 "onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
15856 "orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
15857 "orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
15858 "ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
15859 "ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
15860 "padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
15861 "pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
15862 "parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
15863 "pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
15864 "penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
15865 "periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
15866 "pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
15867 "piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
15868 "pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
15869 "pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
15870 "poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
15871 "pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
15872 "positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
15873 "prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
15874 "principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
15875 "proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
15876 "pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
15877 "qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
15878 "ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
15879 "rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
15880 "recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
15881 "remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
15882 "rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
15883 "ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
15884 "rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
15885 "rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
15886 "ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
15887 "rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
15888 "riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
15889 "rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
15890 "rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
15891 "rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
15892 "salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
15893 "sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
15894 "sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
15895 "sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
15896 "scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
15897 "scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
15898 "scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
15899 "sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
15900 "selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
15901 "sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
15902 "setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
15903 "sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
15904 "sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
15905 "sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
15906 "sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
15907 "smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
15908 "snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
15909 "solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
15910 "sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
15911 "sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
15912 "spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
15913 "spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
15914 "sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
15915 "statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
15916 "storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
15917 "succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
15918 "sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
15919 "svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
15920 "tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
15921 "tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
15922 "tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
15923 "tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
15924 "titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
15925 "tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
15926 "tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
15927 "trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
15928 "trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
15929 "trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
15930 "tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
15931 "ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
15932 "unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
15933 "usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
15934 "valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
15935 "vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
15936 "vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
15937 "verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
15938 "vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
15939 "vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
15940 "viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
15941 "viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
15942 "zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
15943 "zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
15944 </script>
15945 <script>/*
15946 * Copyright (c) 2013 Pavol Rusnak
15947 *
15948 * Permission is hereby granted, free of charge, to any person obtaining a copy of
15949 * this software and associated documentation files (the "Software"), to deal in
15950 * the Software without restriction, including without limitation the rights to
15951 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
15952 * of the Software, and to permit persons to whom the Software is furnished to do
15953 * so, subject to the following conditions:
15954 *
15955 * The above copyright notice and this permission notice shall be included in all
15956 * copies or substantial portions of the Software.
15957 *
15958 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15959 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15960 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15961 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
15962 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
15963 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
15964 */
15965
15966 /*
15967 * Javascript port from python by Ian Coleman
15968 *
15969 * Requires code from sjcl
15970 * https://github.com/bitwiseshiftleft/sjcl
15971 */
15972
15973 var Mnemonic = function(language) {
15974
15975 var PBKDF2_ROUNDS = 2048;
15976 var RADIX = 2048;
15977
15978 var self = this;
15979 var wordlist = [];
15980
15981 var hmacSHA512 = function(key) {
15982 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
15983 this.encrypt = function() {
15984 return hasher.encrypt.apply(hasher, arguments);
15985 };
15986 };
15987
15988 function init() {
15989 wordlist = WORDLISTS[language];
15990 if (wordlist.length != RADIX) {
15991 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
15992 throw err;
15993 }
15994 }
15995
15996 self.generate = function(strength) {
15997 strength = strength || 128;
15998 var r = strength % 32;
15999 if (r > 0) {
16000 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
16001 }
16002 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
16003 if (!hasStrongCrypto) {
16004 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
16005 }
16006 var buffer = new Uint8Array(strength / 8);
16007 var data = crypto.getRandomValues(buffer);
16008 return self.toMnemonic(data);
16009 }
16010
16011 self.toMnemonic = function(byteArray) {
16012 if (byteArray.length % 4 > 0) {
16013 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
16014 }
16015
16016 //h = hashlib.sha256(data).hexdigest()
16017 var data = byteArrayToWordArray(byteArray);
16018 var hash = sjcl.hash.sha256.hash(data);
16019 var h = sjcl.codec.hex.fromBits(hash);
16020
16021 // b is a binary string, eg '00111010101100...'
16022 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
16023 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
16024 //
16025 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
16026 // c = bin(int(h, 16))[2:].zfill(256)
16027 // d = c[:len(data) * 8 / 32]
16028 var a = byteArrayToBinaryString(byteArray);
16029 var c = zfill(hexStringToBinaryString(h), 256);
16030 var d = c.substring(0, byteArray.length * 8 / 32);
16031 // b = line1 + line2
16032 var b = a + d;
16033
16034 var result = [];
16035 var blen = b.length / 11;
16036 for (var i=0; i<blen; i++) {
16037 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
16038 result.push(wordlist[idx]);
16039 }
16040 return self.joinWords(result);
16041 }
16042
16043 self.check = function(mnemonic) {
16044 var mnemonic = self.splitWords(mnemonic);
16045 if (mnemonic.length % 3 > 0) {
16046 return false
16047 }
16048 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
16049 var idx = [];
16050 for (var i=0; i<mnemonic.length; i++) {
16051 var word = mnemonic[i];
16052 var wordIndex = wordlist.indexOf(word);
16053 if (wordIndex == -1) {
16054 return false;
16055 }
16056 var binaryIndex = zfill(wordIndex.toString(2), 11);
16057 idx.push(binaryIndex);
16058 }
16059 var b = idx.join('');
16060 var l = b.length;
16061 //d = b[:l / 33 * 32]
16062 //h = b[-l / 33:]
16063 var d = b.substring(0, l / 33 * 32);
16064 var h = b.substring(l - l / 33, l);
16065 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
16066 var nd = binaryStringToWordArray(d);
16067 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
16068 var ndHash = sjcl.hash.sha256.hash(nd);
16069 var ndHex = sjcl.codec.hex.fromBits(ndHash);
16070 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
16071 var nh = ndBstr.substring(0,l/33);
16072 return h == nh;
16073 }
16074
16075 self.toSeed = function(mnemonic, passphrase) {
16076 passphrase = passphrase || '';
16077 mnemonic = self.joinWords(self.splitWords(self.normalizeString(mnemonic))); // removes blanks
16078 passphrase = self.normalizeString(passphrase)
16079 passphrase = "mnemonic" + passphrase;
16080 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
16081 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
16082 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
16083 var hashHex = sjcl.codec.hex.fromBits(result);
16084 return hashHex;
16085 }
16086
16087 self.splitWords = function(mnemonic) {
16088 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
16089 }
16090
16091 self.joinWords = function(words) {
16092 // Set space correctly depending on the language
16093 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
16094 var space = " ";
16095 if (language == "japanese") {
16096 space = "\u3000"; // ideographic space
16097 }
16098 return words.join(space);
16099 }
16100
16101 self.normalizeString = function(str) {
16102 if (typeof str.normalize == "function") {
16103 return str.normalize("NFKD");
16104 }
16105 else {
16106 // TODO decide how to handle this in the future.
16107 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
16108 return str;
16109 }
16110 }
16111
16112 function byteArrayToWordArray(data) {
16113 var a = [];
16114 for (var i=0; i<data.length/4; i++) {
16115 v = 0;
16116 v += data[i*4 + 0] << 8 * 3;
16117 v += data[i*4 + 1] << 8 * 2;
16118 v += data[i*4 + 2] << 8 * 1;
16119 v += data[i*4 + 3] << 8 * 0;
16120 a.push(v);
16121 }
16122 return a;
16123 }
16124
16125 function byteArrayToBinaryString(data) {
16126 var bin = "";
16127 for (var i=0; i<data.length; i++) {
16128 bin += zfill(data[i].toString(2), 8);
16129 }
16130 return bin;
16131 }
16132
16133 function hexStringToBinaryString(hexString) {
16134 binaryString = "";
16135 for (var i=0; i<hexString.length; i++) {
16136 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
16137 }
16138 return binaryString;
16139 }
16140
16141 function binaryStringToWordArray(binary) {
16142 var aLen = binary.length / 32;
16143 var a = [];
16144 for (var i=0; i<aLen; i++) {
16145 var valueStr = binary.substring(0,32);
16146 var value = parseInt(valueStr, 2);
16147 a.push(value);
16148 binary = binary.slice(32);
16149 }
16150 return a;
16151 }
16152
16153 // Pad a numeric string on the left with zero digits until the given width
16154 // is reached.
16155 // Note this differs to the python implementation because it does not
16156 // handle numbers starting with a sign.
16157 function zfill(source, length) {
16158 source = source.toString();
16159 while (source.length < length) {
16160 source = '0' + source;
16161 }
16162 return source;
16163 }
16164
16165 init();
16166
16167 }
16168 </script>
16169 <script>(function() {
16170
16171 // mnemonics is populated as required by getLanguage
16172 var mnemonics = { "english": new Mnemonic("english") };
16173 var mnemonic = mnemonics["english"];
16174 var seed = null
16175 var bip32RootKey = null;
16176 var bip32ExtendedKey = null;
16177 var network = bitcoin.networks.bitcoin;
16178 var addressRowTemplate = $("#address-row-template");
16179
16180 var showIndex = true;
16181 var showAddress = true;
16182 var showPubKey = true;
16183 var showPrivKey = true;
16184
16185 var phraseChangeTimeoutEvent = null;
16186 var rootKeyChangedTimeoutEvent = null;
16187
16188 var DOM = {};
16189 DOM.network = $(".network");
16190 DOM.phraseNetwork = $("#network-phrase");
16191 DOM.phrase = $(".phrase");
16192 DOM.passphrase = $(".passphrase");
16193 DOM.generate = $(".generate");
16194 DOM.seed = $(".seed");
16195 DOM.rootKey = $(".root-key");
16196 DOM.extendedPrivKey = $(".extended-priv-key");
16197 DOM.extendedPubKey = $(".extended-pub-key");
16198 DOM.bip32tab = $("#bip32-tab");
16199 DOM.bip44tab = $("#bip44-tab");
16200 DOM.bip32panel = $("#bip32");
16201 DOM.bip44panel = $("#bip44");
16202 DOM.bip32path = $("#bip32-path");
16203 DOM.bip44path = $("#bip44-path");
16204 DOM.bip44purpose = $("#bip44 .purpose");
16205 DOM.bip44coin = $("#bip44 .coin");
16206 DOM.bip44account = $("#bip44 .account");
16207 DOM.bip44change = $("#bip44 .change");
16208 DOM.strength = $(".strength");
16209 DOM.hardenedAddresses = $(".hardened-addresses");
16210 DOM.addresses = $(".addresses");
16211 DOM.rowsToAdd = $(".rows-to-add");
16212 DOM.more = $(".more");
16213 DOM.feedback = $(".feedback");
16214 DOM.tab = $(".derivation-type a");
16215 DOM.indexToggle = $(".index-toggle");
16216 DOM.addressToggle = $(".address-toggle");
16217 DOM.publicKeyToggle = $(".public-key-toggle");
16218 DOM.privateKeyToggle = $(".private-key-toggle");
16219 DOM.languages = $(".languages a");
16220
16221 function init() {
16222 // Events
16223 DOM.network.on("change", networkChanged);
16224 DOM.phrase.on("input", delayedPhraseChanged);
16225 DOM.passphrase.on("input", delayedPhraseChanged);
16226 DOM.generate.on("click", generateClicked);
16227 DOM.more.on("click", showMore);
16228 DOM.rootKey.on("input", delayedRootKeyChanged);
16229 DOM.bip32path.on("input", calcForDerivationPath);
16230 DOM.bip44purpose.on("input", calcForDerivationPath);
16231 DOM.bip44coin.on("input", calcForDerivationPath);
16232 DOM.bip44account.on("input", calcForDerivationPath);
16233 DOM.bip44change.on("input", calcForDerivationPath);
16234 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
16235 DOM.hardenedAddresses.on("change", calcForDerivationPath);
16236 DOM.indexToggle.on("click", toggleIndexes);
16237 DOM.addressToggle.on("click", toggleAddresses);
16238 DOM.publicKeyToggle.on("click", togglePublicKeys);
16239 DOM.privateKeyToggle.on("click", togglePrivateKeys);
16240 DOM.languages.on("click", languageChanged);
16241 disableForms();
16242 hidePending();
16243 hideValidationError();
16244 populateNetworkSelect();
16245 }
16246
16247 // Event handlers
16248
16249 function networkChanged(e) {
16250 var networkIndex = e.target.value;
16251 networks[networkIndex].onSelect();
16252 if (seed != null) {
16253 phraseChanged();
16254 }
16255 else {
16256 rootKeyChanged();
16257 }
16258 }
16259
16260 function delayedPhraseChanged() {
16261 hideValidationError();
16262 showPending();
16263 if (phraseChangeTimeoutEvent != null) {
16264 clearTimeout(phraseChangeTimeoutEvent);
16265 }
16266 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
16267 }
16268
16269 function phraseChanged() {
16270 showPending();
16271 hideValidationError();
16272 setMnemonicLanguage();
16273 // Get the mnemonic phrase
16274 var phrase = DOM.phrase.val();
16275 var errorText = findPhraseErrors(phrase);
16276 if (errorText) {
16277 showValidationError(errorText);
16278 return;
16279 }
16280 // Calculate and display
16281 var passphrase = DOM.passphrase.val();
16282 calcBip32RootKeyFromSeed(phrase, passphrase);
16283 calcForDerivationPath();
16284 hidePending();
16285 }
16286
16287 function delayedRootKeyChanged() {
16288 // Warn if there is an existing mnemonic or passphrase.
16289 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
16290 if (!confirm("This will clear existing mnemonic and passphrase")) {
16291 DOM.rootKey.val(bip32RootKey);
16292 return
16293 }
16294 }
16295 hideValidationError();
16296 showPending();
16297 // Clear existing mnemonic and passphrase
16298 DOM.phrase.val("");
16299 DOM.passphrase.val("");
16300 seed = null;
16301 if (rootKeyChangedTimeoutEvent != null) {
16302 clearTimeout(rootKeyChangedTimeoutEvent);
16303 }
16304 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
16305 }
16306
16307 function rootKeyChanged() {
16308 showPending();
16309 hideValidationError();
16310 // Validate the root key TODO
16311 var rootKeyBase58 = DOM.rootKey.val();
16312 var errorText = validateRootKey(rootKeyBase58);
16313 if (errorText) {
16314 showValidationError(errorText);
16315 return;
16316 }
16317 // Calculate and display
16318 calcBip32RootKeyFromBase58(rootKeyBase58);
16319 calcForDerivationPath();
16320 hidePending();
16321 }
16322
16323 function calcForDerivationPath() {
16324 showPending();
16325 hideValidationError();
16326 // Get the derivation path
16327 var derivationPath = getDerivationPath();
16328 var errorText = findDerivationPathErrors(derivationPath);
16329 if (errorText) {
16330 showValidationError(errorText);
16331 return;
16332 }
16333 calcBip32ExtendedKey(derivationPath);
16334 displayBip32Info();
16335 hidePending();
16336 }
16337
16338 function generateClicked() {
16339 clearDisplay();
16340 showPending();
16341 setTimeout(function() {
16342 setMnemonicLanguage();
16343 var phrase = generateRandomPhrase();
16344 if (!phrase) {
16345 return;
16346 }
16347 phraseChanged();
16348 }, 50);
16349 }
16350
16351 function languageChanged() {
16352 setTimeout(function() {
16353 setMnemonicLanguage();
16354 if (DOM.phrase.val().length > 0) {
16355 var newPhrase = convertPhraseToNewLanguage();
16356 DOM.phrase.val(newPhrase);
16357 phraseChanged();
16358 }
16359 else {
16360 DOM.generate.trigger("click");
16361 }
16362 }, 50);
16363 }
16364
16365 function toggleIndexes() {
16366 showIndex = !showIndex;
16367 $("td.index span").toggleClass("invisible");
16368 }
16369
16370 function toggleAddresses() {
16371 showAddress = !showAddress;
16372 $("td.address span").toggleClass("invisible");
16373 }
16374
16375 function togglePublicKeys() {
16376 showPubKey = !showPubKey;
16377 $("td.pubkey span").toggleClass("invisible");
16378 }
16379
16380 function togglePrivateKeys() {
16381 showPrivKey = !showPrivKey;
16382 $("td.privkey span").toggleClass("invisible");
16383 }
16384
16385 // Private methods
16386
16387 function generateRandomPhrase() {
16388 if (!hasStrongRandom()) {
16389 var errorText = "This browser does not support strong randomness";
16390 showValidationError(errorText);
16391 return;
16392 }
16393 var numWords = parseInt(DOM.strength.val());
16394 var strength = numWords / 3 * 32;
16395 var words = mnemonic.generate(strength);
16396 DOM.phrase.val(words);
16397 return words;
16398 }
16399
16400 function calcBip32RootKeyFromSeed(phrase, passphrase) {
16401 seed = mnemonic.toSeed(phrase, passphrase);
16402 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
16403 }
16404
16405 function calcBip32RootKeyFromBase58(rootKeyBase58) {
16406 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
16407 }
16408
16409 function calcBip32ExtendedKey(path) {
16410 bip32ExtendedKey = bip32RootKey;
16411 // Derive the key from the path
16412 var pathBits = path.split("/");
16413 for (var i=0; i<pathBits.length; i++) {
16414 var bit = pathBits[i];
16415 var index = parseInt(bit);
16416 if (isNaN(index)) {
16417 continue;
16418 }
16419 var hardened = bit[bit.length-1] == "'";
16420 if (hardened) {
16421 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
16422 }
16423 else {
16424 bip32ExtendedKey = bip32ExtendedKey.derive(index);
16425 }
16426 }
16427 }
16428
16429 function showValidationError(errorText) {
16430 DOM.feedback
16431 .text(errorText)
16432 .show();
16433 }
16434
16435 function hideValidationError() {
16436 DOM.feedback
16437 .text("")
16438 .hide();
16439 }
16440
16441 function findPhraseErrors(phrase) {
16442 // TODO make this right
16443 // Preprocess the words
16444 phrase = mnemonic.normalizeString(phrase);
16445 var words = phraseToWordArray(phrase);
16446 // Check each word
16447 for (var i=0; i<words.length; i++) {
16448 var word = words[i];
16449 var language = getLanguage();
16450 if (WORDLISTS[language].indexOf(word) == -1) {
16451 console.log("Finding closest match to " + word);
16452 var nearestWord = findNearestWord(word);
16453 return word + " not in wordlist, did you mean " + nearestWord + "?";
16454 }
16455 }
16456 // Check the words are valid
16457 var properPhrase = wordArrayToPhrase(words);
16458 var isValid = mnemonic.check(properPhrase);
16459 if (!isValid) {
16460 return "Invalid mnemonic";
16461 }
16462 return false;
16463 }
16464
16465 function validateRootKey(rootKeyBase58) {
16466 try {
16467 bitcoin.HDNode.fromBase58(rootKeyBase58);
16468 }
16469 catch (e) {
16470 return "Invalid root key";
16471 }
16472 return "";
16473 }
16474
16475 function getDerivationPath() {
16476 if (DOM.bip44tab.hasClass("active")) {
16477 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
16478 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
16479 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
16480 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
16481 var path = "m/";
16482 path += purpose + "'/";
16483 path += coin + "'/";
16484 path += account + "'/";
16485 path += change;
16486 DOM.bip44path.val(path);
16487 var derivationPath = DOM.bip44path.val();
16488 console.log("Using derivation path from BIP44 tab: " + derivationPath);
16489 return derivationPath;
16490 }
16491 else if (DOM.bip32tab.hasClass("active")) {
16492 var derivationPath = DOM.bip32path.val();
16493 console.log("Using derivation path from BIP32 tab: " + derivationPath);
16494 return derivationPath;
16495 }
16496 else {
16497 console.log("Unknown derivation path");
16498 }
16499 }
16500
16501 function findDerivationPathErrors(path) {
16502 // TODO is not perfect but is better than nothing
16503 // Inspired by
16504 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
16505 // and
16506 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
16507 var maxDepth = 255; // TODO verify this!!
16508 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
16509 if (path[0] != "m") {
16510 return "First character must be 'm'";
16511 }
16512 if (path.length > 1) {
16513 if (path[1] != "/") {
16514 return "Separator must be '/'";
16515 }
16516 var indexes = path.split("/");
16517 if (indexes.length > maxDepth) {
16518 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
16519 }
16520 for (var depth = 1; depth<indexes.length; depth++) {
16521 var index = indexes[depth];
16522 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
16523 if (invalidChars.length > 0) {
16524 return "Invalid characters " + invalidChars + " found at depth " + depth;
16525 }
16526 var indexValue = parseInt(index.replace("'", ""));
16527 if (isNaN(depth)) {
16528 return "Invalid number at depth " + depth;
16529 }
16530 if (indexValue > maxIndexValue) {
16531 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
16532 }
16533 }
16534 }
16535 return false;
16536 }
16537
16538 function displayBip32Info() {
16539 // Display the key
16540 DOM.seed.val(seed);
16541 var rootKey = bip32RootKey.toBase58();
16542 DOM.rootKey.val(rootKey);
16543 var extendedPrivKey = bip32ExtendedKey.toBase58();
16544 DOM.extendedPrivKey.val(extendedPrivKey);
16545 var extendedPubKey = bip32ExtendedKey.toBase58(false);
16546 DOM.extendedPubKey.val(extendedPubKey);
16547 // Display the addresses and privkeys
16548 clearAddressesList();
16549 displayAddresses(0, 20);
16550 }
16551
16552 function displayAddresses(start, total) {
16553 for (var i=0; i<total; i++) {
16554 var index = i + start;
16555 new TableRow(index);
16556 }
16557 }
16558
16559 function TableRow(index) {
16560
16561 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
16562
16563 function init() {
16564 calculateValues();
16565 }
16566
16567 function calculateValues() {
16568 setTimeout(function() {
16569 var key = "";
16570 if (useHardenedAddresses) {
16571 key = bip32ExtendedKey.deriveHardened(index);
16572 }
16573 else {
16574 key = bip32ExtendedKey.derive(index);
16575 }
16576 var address = key.getAddress().toString();
16577 var privkey = key.privKey.toWIF(network);
16578 var pubkey = key.pubKey.toHex();
16579 var indexText = getDerivationPath() + "/" + index;
16580 if (useHardenedAddresses) {
16581 indexText = indexText + "'";
16582 }
16583 addAddressToList(indexText, address, pubkey, privkey);
16584 }, 50)
16585 }
16586
16587 init();
16588
16589 }
16590
16591 function showMore() {
16592 var start = DOM.addresses.children().length;
16593 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
16594 if (isNaN(rowsToAdd)) {
16595 rowsToAdd = 20;
16596 DOM.rowsToAdd.val("20");
16597 }
16598 if (rowsToAdd > 200) {
16599 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
16600 msg += "Do you want to continue?";
16601 if (!confirm(msg)) {
16602 return;
16603 }
16604 }
16605 displayAddresses(start, rowsToAdd);
16606 }
16607
16608 function clearDisplay() {
16609 clearAddressesList();
16610 clearKey();
16611 hideValidationError();
16612 }
16613
16614 function clearAddressesList() {
16615 DOM.addresses.empty();
16616 }
16617
16618 function clearKey() {
16619 DOM.rootKey.val("");
16620 DOM.extendedPrivKey.val("");
16621 DOM.extendedPubKey.val("");
16622 }
16623
16624 function addAddressToList(indexText, address, pubkey, privkey) {
16625 var row = $(addressRowTemplate.html());
16626 // Elements
16627 var indexCell = row.find(".index span");
16628 var addressCell = row.find(".address span");
16629 var pubkeyCell = row.find(".pubkey span");
16630 var privkeyCell = row.find(".privkey span");
16631 // Content
16632 indexCell.text(indexText);
16633 addressCell.text(address);
16634 pubkeyCell.text(pubkey);
16635 privkeyCell.text(privkey);
16636 // Visibility
16637 if (!showIndex) {
16638 indexCell.addClass("invisible");
16639 }
16640 if (!showAddress) {
16641 addressCell.addClass("invisible");
16642 }
16643 if (!showPubKey) {
16644 pubkeyCell.addClass("invisible");
16645 }
16646 if (!showPrivKey) {
16647 privkeyCell.addClass("invisible");
16648 }
16649 DOM.addresses.append(row);
16650 }
16651
16652 function hasStrongRandom() {
16653 return 'crypto' in window && window['crypto'] !== null;
16654 }
16655
16656 function disableForms() {
16657 $("form").on("submit", function(e) {
16658 e.preventDefault();
16659 });
16660 }
16661
16662 function parseIntNoNaN(val, defaultVal) {
16663 var v = parseInt(val);
16664 if (isNaN(v)) {
16665 return defaultVal;
16666 }
16667 return v;
16668 }
16669
16670 function showPending() {
16671 DOM.feedback
16672 .text("Calculating...")
16673 .show();
16674 }
16675
16676 function findNearestWord(word) {
16677 var language = getLanguage();
16678 var words = WORDLISTS[language];
16679 var minDistance = 99;
16680 var closestWord = words[0];
16681 for (var i=0; i<words.length; i++) {
16682 var comparedTo = words[i];
16683 var distance = Levenshtein.get(word, comparedTo);
16684 if (distance < minDistance) {
16685 closestWord = comparedTo;
16686 minDistance = distance;
16687 }
16688 }
16689 return closestWord;
16690 }
16691
16692 function hidePending() {
16693 DOM.feedback
16694 .text("")
16695 .hide();
16696 }
16697
16698 function populateNetworkSelect() {
16699 for (var i=0; i<networks.length; i++) {
16700 var network = networks[i];
16701 var option = $("<option>");
16702 option.attr("value", i);
16703 option.text(network.name);
16704 DOM.phraseNetwork.append(option);
16705 }
16706 }
16707
16708 function getLanguage() {
16709 var defaultLanguage = "english";
16710 // Try to get from existing phrase
16711 var language = getLanguageFromPhrase();
16712 // Try to get from url if not from phrase
16713 if (language.length == 0) {
16714 language = getLanguageFromUrl();
16715 }
16716 // Default to English if no other option
16717 if (language.length == 0) {
16718 language = defaultLanguage;
16719 }
16720 return language;
16721 }
16722
16723 function getLanguageFromPhrase(phrase) {
16724 // Check if how many words from existing phrase match a language.
16725 var language = "";
16726 if (!phrase) {
16727 phrase = DOM.phrase.val();
16728 }
16729 if (phrase.length > 0) {
16730 var words = phraseToWordArray(phrase);
16731 var languageMatches = {};
16732 for (l in WORDLISTS) {
16733 // Track how many words match in this language
16734 languageMatches[l] = 0;
16735 for (var i=0; i<words.length; i++) {
16736 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
16737 if (wordInLanguage) {
16738 languageMatches[l]++;
16739 }
16740 }
16741 // Find languages with most word matches.
16742 // This is made difficult due to commonalities between Chinese
16743 // simplified vs traditional.
16744 var mostMatches = 0;
16745 var mostMatchedLanguages = [];
16746 for (var l in languageMatches) {
16747 var numMatches = languageMatches[l];
16748 if (numMatches > mostMatches) {
16749 mostMatches = numMatches;
16750 mostMatchedLanguages = [l];
16751 }
16752 else if (numMatches == mostMatches) {
16753 mostMatchedLanguages.push(l);
16754 }
16755 }
16756 }
16757 if (mostMatchedLanguages.length > 0) {
16758 // Use first language and warn if multiple detected
16759 language = mostMatchedLanguages[0];
16760 if (mostMatchedLanguages.length > 1) {
16761 console.warn("Multiple possible languages");
16762 console.warn(mostMatchedLanguages);
16763 }
16764 }
16765 }
16766 return language;
16767 }
16768
16769 function getLanguageFromUrl() {
16770 return window.location.hash.substring(1);
16771 }
16772
16773 function setMnemonicLanguage() {
16774 var language = getLanguage();
16775 // Load the bip39 mnemonic generator for this language if required
16776 if (!(language in mnemonics)) {
16777 mnemonics[language] = new Mnemonic(language);
16778 }
16779 mnemonic = mnemonics[language];
16780 }
16781
16782 function convertPhraseToNewLanguage() {
16783 var oldLanguage = getLanguageFromPhrase();
16784 var newLanguage = getLanguageFromUrl();
16785 var oldPhrase = DOM.phrase.val();
16786 var oldWords = phraseToWordArray(oldPhrase);
16787 var newWords = [];
16788 for (var i=0; i<oldWords.length; i++) {
16789 var oldWord = oldWords[i];
16790 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
16791 var newWord = WORDLISTS[newLanguage][index];
16792 newWords.push(newWord);
16793 }
16794 newPhrase = wordArrayToPhrase(newWords);
16795 return newPhrase;
16796 }
16797
16798 // TODO look at jsbip39 - mnemonic.splitWords
16799 function phraseToWordArray(phrase) {
16800 var words = phrase.split(/\s/g);
16801 var noBlanks = [];
16802 for (var i=0; i<words.length; i++) {
16803 var word = words[i];
16804 if (word.length > 0) {
16805 noBlanks.push(word);
16806 }
16807 }
16808 return noBlanks;
16809 }
16810
16811 // TODO look at jsbip39 - mnemonic.joinWords
16812 function wordArrayToPhrase(words) {
16813 var phrase = words.join(" ");
16814 var language = getLanguageFromPhrase(phrase);
16815 if (language == "japanese") {
16816 phrase = words.join("\u3000");
16817 }
16818 return phrase;
16819 }
16820
16821 var networks = [
16822 {
16823 name: "Bitcoin",
16824 onSelect: function() {
16825 network = bitcoin.networks.bitcoin;
16826 DOM.bip44coin.val(0);
16827 },
16828 },
16829 {
16830 name: "Bitcoin Testnet",
16831 onSelect: function() {
16832 network = bitcoin.networks.testnet;
16833 DOM.bip44coin.val(1);
16834 },
16835 },
16836 {
16837 name: "Litecoin",
16838 onSelect: function() {
16839 network = bitcoin.networks.litecoin;
16840 DOM.bip44coin.val(2);
16841 },
16842 },
16843 {
16844 name: "Dogecoin",
16845 onSelect: function() {
16846 network = bitcoin.networks.dogecoin;
16847 DOM.bip44coin.val(3);
16848 },
16849 },
16850 {
16851 name: "ShadowCash",
16852 onSelect: function() {
16853 network = bitcoin.networks.shadow;
16854 DOM.bip44coin.val(35);
16855 },
16856 },
16857 {
16858 name: "ShadowCash Testnet",
16859 onSelect: function() {
16860 network = bitcoin.networks.shadowtn;
16861 DOM.bip44coin.val(1);
16862 },
16863 },
16864 {
16865 name: "Viacoin",
16866 onSelect: function() {
16867 network = bitcoin.networks.viacoin;
16868 DOM.bip44coin.val(14);
16869 },
16870 },
16871 {
16872 name: "Viacoin Testnet",
16873 onSelect: function() {
16874 network = bitcoin.networks.viacointestnet;
16875 DOM.bip44coin.val(1);
16876 },
16877 },
16878 {
16879 name: "Jumbucks",
16880 onSelect: function() {
16881 network = bitcoin.networks.jumbucks;
16882 DOM.bip44coin.val(26);
16883 },
16884 },
16885 {
16886 name: "CLAM",
16887 onSelect: function() {
16888 network = bitcoin.networks.clam;
16889 DOM.bip44coin.val(23);
16890 },
16891 },
16892 {
16893 name: "DASH",
16894 onSelect: function() {
16895 network = bitcoin.networks.dash;
16896 DOM.bip44coin.val(5);
16897 },
16898 },
16899 {
16900 name: "Namecoin",
16901 onSelect: function() {
16902 network = bitcoin.networks.namecoin;
16903 DOM.bip44coin.val(7);
16904 },
16905 },
16906 {
16907 name: "Peercoin",
16908 onSelect: function() {
16909 network = bitcoin.networks.peercoin;
16910 DOM.bip44coin.val(6);
16911 },
16912 },
16913 ]
16914
16915 init();
16916
16917 })();
16918 </script>
16919 </body>
16920 </html>