]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blob - bip39-standalone.html
Normalize whitespace before using mnemonic. Fixes #19.
[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="DC POS" 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 </style>
48 </head>
49 <body>
50 <div class="container">
51
52 <h1 class="text-center">Mnemonic Code Converter</h1>
53 <hr>
54 <div class="row">
55 <div class="col-md-12">
56 <h2>Mnemonic</h2>
57 <form class="form-horizontal" role="form">
58 <div class="col-sm-2"></div>
59 <div class="col-sm-10">
60 <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>
61 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
62 </div>
63 <div class="form-group">
64 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
65 <div class="col-sm-10">
66 <textarea id="phrase" class="phrase form-control"></textarea>
67 </div>
68 </div>
69 <div class="form-group">
70 <label for="strength" class="col-sm-2 control-label">Number of words</label>
71 <div class="col-sm-10">
72 <div class="input-group">
73 <select id="strength" class="strength form-control">
74 <option val="3">3</option>
75 <option val="6">6</option>
76 <option val="9">9</option>
77 <option val="12">12</option>
78 <option val="15" selected>15</option>
79 <option val="18">18</option>
80 <option val="21">21</option>
81 <option val="24">24</option>
82 </select>
83 <span class="input-group-btn">
84 <button class="btn generate">Generate Random Mnemonic</button>
85 </span>
86 </div>
87 </div>
88 </div>
89 <div class="form-group">
90 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
91 <div class="col-sm-10">
92 <textarea id="passphrase" class="passphrase form-control"></textarea>
93 </div>
94 </div>
95 <div class="form-group">
96 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
97 <div class="col-sm-10">
98 <select id="network-phrase" class="network form-control">
99 <!-- populated by javascript -->
100 </select>
101 </div>
102 </div>
103 <div class="form-group">
104 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
105 <div class="col-sm-10">
106 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
107 </div>
108 </div>
109 </form>
110 </div>
111 </div>
112
113 <hr>
114
115 <div class="row">
116 <div class="col-md-12">
117 <h2>Derivation Path</h2>
118 <ul class="derivation-type nav nav-tabs" role="tablist">
119 <li id="bip44-tab" class="active">
120 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
121 </li>
122 <li id="bip32-tab">
123 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
124 </li>
125 </ul>
126 <div class="derivation-type tab-content">
127 <div id="bip44" class="tab-pane active">
128 <form class="form-horizontal" role="form">
129 <br>
130 <div class="col-sm-2"></div>
131 <div class="col-sm-10">
132 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
133 </div>
134 <div class="form-group">
135 <label for="purpose" class="col-sm-2 control-label">
136 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
137 </label>
138 <div class="col-sm-10">
139 <input id="purpose" type="text" class="purpose form-control" value="44">
140 </div>
141 </div>
142 <div class="form-group">
143 <label for="coin" class="col-sm-2 control-label">
144 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
145 </label>
146 <div class="col-sm-10">
147 <input id="coin" type="text" class="coin form-control" value="0">
148 </div>
149 </div>
150 <div class="form-group">
151 <label for="account" class="col-sm-2 control-label">
152 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
153 </label>
154 <div class="col-sm-10">
155 <input id="account" type="text" class="account form-control" value="0">
156 </div>
157 </div>
158 <div class="form-group">
159 <label for="change" class="col-sm-2 control-label">
160 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
161 </label>
162 <div class="col-sm-10">
163 <input id="change" type="text" class="change form-control" value="0">
164 </div>
165 </div>
166 <div class="form-group">
167 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
168 <div class="col-sm-10">
169 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
170 </div>
171 </div>
172 </form>
173 </div>
174 <div id="bip32" class="tab-pane">
175 <form class="form-horizontal" role="form">
176 <br>
177 <div class="col-sm-2"></div>
178 <div class="col-sm-10">
179 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
180 </div>
181 <div class="form-group">
182 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
183 <div class="col-sm-10">
184 <input id="bip32-path" type="text" class="path form-control" value="m/0">
185 </div>
186 </div>
187 <div class="form-group">
188 <label class="col-sm-2 control-label">Hive Wallet</label>
189 <div class="col-sm-10">
190 <p class="form-control no-border">
191 Use path <code>m/0'/0</code>.
192 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
193 </p>
194 </div>
195 </div>
196 <div class="form-group">
197 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
198 <div class="col-sm-10">
199 <p class="form-control no-border">
200 Use path <code>m/44'/0'/0'/0</code>.
201 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
202 </p>
203 </div>
204 </div>
205 </form>
206 </div>
207 </div>
208 <form class="form-horizontal" role="form">
209 <div class="form-group">
210 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
211 <div class="col-sm-10">
212 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
213 </div>
214 </div>
215 <div class="form-group">
216 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
217 <div class="col-sm-10">
218 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
219 </div>
220 </div>
221 </form>
222 </div>
223 </div>
224
225 <hr>
226
227 <div class="row">
228 <div class="col-md-12">
229 <h2>Derived Addresses</h2>
230 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
231 <table class="table table-striped">
232 <thead>
233 <th>
234 <div class="input-group">
235 Path&nbsp;&nbsp;
236 <button class="index-toggle">Toggle</button>
237 </div>
238 </th>
239 <th>
240 <div class="input-group">
241 Address&nbsp;&nbsp;
242 <button class="address-toggle">Toggle</button>
243 </div>
244 </th>
245 <th>
246 <div class="input-group">
247 Private Key&nbsp;&nbsp;
248 <button class="private-key-toggle">Toggle</button>
249 </div>
250 </th>
251 </thead>
252 <tbody class="addresses">
253 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
254 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
255 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
256 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
257 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
258 </tbody>
259 </table>
260 </div>
261 </div>
262 <span>Show next </button>
263 <input type="number" class="rows-to-add" value="20">
264 <button class="more">Show</button>
265
266 <hr>
267
268 <div class="row">
269 <div class="col-md-12">
270 <h2>More info</h2>
271 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
272 <p>
273 Read more at the
274 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
275 </p>
276 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
277 <p>
278 Read more at the
279 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
280 and see the demo at
281 <a href="http://bip32.org/" target="_blank">bip32.org</a>
282 </p>
283 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
284 <p>
285 Read more at the
286 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
287 </p>
288 <h3>Private Keys</h3>
289 <p>
290 Use private keys at
291 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
292 but be careful - it can be easy to make mistakes if you
293 don't know what you're doing
294 </p>
295 </div>
296 </div>
297
298 <hr>
299
300 <div class="row">
301 <div class="col-md-12">
302
303 <h2>Offline Usage</h2>
304
305 <p>
306 You can use this tool without having to be online.
307 </p>
308 <p>
309 In your browser, select file save-as, and save this page
310 as a file.
311 </p>
312 <p>
313 Double-click that file to open it in a browser
314 on any offline computer.
315 </p>
316 <p>
317 Alternatively, download it from
318 <a href="https://github.com/dcpos/bip39">
319 https://github.com/dcpos/bip39
320 </a>
321
322 </div>
323 </div>
324
325 <hr>
326
327 <div class="row">
328 <div class="col-md-12">
329
330 <h2>This project is 100% open-source code</h2>
331
332 <p>
333 <span>Get the source code at - </span>
334 <a href="https://github.com/dcpos/bip39" target="_blank">
335 https://github.com/dcpos/bip39
336 </a>
337 </p>
338
339 <h3>Libraries</h3>
340
341 <p>
342 <span>BitcoinJS - </span>
343 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
344 https://github.com/bitcoinjs/bitcoinjs-lib
345 </a>
346 </p>
347
348 <p>
349 <span>jsBIP39 - </span>
350 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
351 https://github.com/iancoleman/jsbip39
352 </a>
353 </p>
354
355 <p>
356 <span>sjcl - </span>
357 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
358 https://github.com/bitwiseshiftleft/sjcl
359 </a>
360 </p>
361
362 <p>
363 <span>jQuery - </span>
364 <a href="https://jquery.com/" target="_blank">
365 https://jquery.com/
366 </a>
367 </p>
368
369 <p>
370 <span>Twitter Bootstrap - </span>
371 <a href="http://getbootstrap.com/" target="_blank">
372 http://getbootstrap.com/
373 </a>
374 </p>
375
376 </div>
377 </div>
378
379 </div>
380
381 <div class="feedback-container">
382 <div class="feedback">Loading...</div>
383 </div>
384
385 <script type="text/template" id="address-row-template">
386 <tr>
387 <td class="index"><span></span></td>
388 <td class="address"><span></span></td>
389 <td class="privkey"><span></span></td>
390 </tr>
391 </script>
392 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
393 !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)
394 },_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))
395 },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});
396 </script>
397 <script>/*!
398 * Bootstrap v3.2.0 (http://getbootstrap.com)
399 * Copyright 2011-2014 Twitter, Inc.
400 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
401 */
402 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>
403 <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){
404 // (public) Constructor
405 function BigInteger(a, b, c) {
406 if (!(this instanceof BigInteger))
407 return new BigInteger(a, b, c)
408
409 if (a != null) {
410 if ("number" == typeof a) this.fromNumber(a, b, c)
411 else if (b == null && "string" != typeof a) this.fromString(a, 256)
412 else this.fromString(a, b)
413 }
414 }
415
416 var proto = BigInteger.prototype
417
418 // duck-typed isBigInteger
419 proto.__bigi = require('../package.json').version
420 BigInteger.isBigInteger = function (obj, check_ver) {
421 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
422 }
423
424 // Bits per digit
425 var dbits
426
427 // am: Compute w_j += (x*this_i), propagate carries,
428 // c is initial carry, returns final carry.
429 // c < 3*dvalue, x < 2*dvalue, this_i < dvalue
430 // We need to select the fastest one that works in this environment.
431
432 // am1: use a single mult and divide to get the high bits,
433 // max digit bits should be 26 because
434 // max internal value = 2*dvalue^2-2*dvalue (< 2^53)
435 function am1(i, x, w, j, c, n) {
436 while (--n >= 0) {
437 var v = x * this[i++] + w[j] + c
438 c = Math.floor(v / 0x4000000)
439 w[j++] = v & 0x3ffffff
440 }
441 return c
442 }
443 // am2 avoids a big mult-and-extract completely.
444 // Max digit bits should be <= 30 because we do bitwise ops
445 // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
446 function am2(i, x, w, j, c, n) {
447 var xl = x & 0x7fff,
448 xh = x >> 15
449 while (--n >= 0) {
450 var l = this[i] & 0x7fff
451 var h = this[i++] >> 15
452 var m = xh * l + h * xl
453 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
454 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
455 w[j++] = l & 0x3fffffff
456 }
457 return c
458 }
459 // Alternately, set max digit bits to 28 since some
460 // browsers slow down when dealing with 32-bit numbers.
461 function am3(i, x, w, j, c, n) {
462 var xl = x & 0x3fff,
463 xh = x >> 14
464 while (--n >= 0) {
465 var l = this[i] & 0x3fff
466 var h = this[i++] >> 14
467 var m = xh * l + h * xl
468 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
469 c = (l >> 28) + (m >> 14) + xh * h
470 w[j++] = l & 0xfffffff
471 }
472 return c
473 }
474
475 // wtf?
476 BigInteger.prototype.am = am1
477 dbits = 26
478
479 BigInteger.prototype.DB = dbits
480 BigInteger.prototype.DM = ((1 << dbits) - 1)
481 var DV = BigInteger.prototype.DV = (1 << dbits)
482
483 var BI_FP = 52
484 BigInteger.prototype.FV = Math.pow(2, BI_FP)
485 BigInteger.prototype.F1 = BI_FP - dbits
486 BigInteger.prototype.F2 = 2 * dbits - BI_FP
487
488 // Digit conversions
489 var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
490 var BI_RC = new Array()
491 var rr, vv
492 rr = "0".charCodeAt(0)
493 for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
494 rr = "a".charCodeAt(0)
495 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
496 rr = "A".charCodeAt(0)
497 for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
498
499 function int2char(n) {
500 return BI_RM.charAt(n)
501 }
502
503 function intAt(s, i) {
504 var c = BI_RC[s.charCodeAt(i)]
505 return (c == null) ? -1 : c
506 }
507
508 // (protected) copy this to r
509 function bnpCopyTo(r) {
510 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
511 r.t = this.t
512 r.s = this.s
513 }
514
515 // (protected) set from integer value x, -DV <= x < DV
516 function bnpFromInt(x) {
517 this.t = 1
518 this.s = (x < 0) ? -1 : 0
519 if (x > 0) this[0] = x
520 else if (x < -1) this[0] = x + DV
521 else this.t = 0
522 }
523
524 // return bigint initialized to value
525 function nbv(i) {
526 var r = new BigInteger()
527 r.fromInt(i)
528 return r
529 }
530
531 // (protected) set from string and radix
532 function bnpFromString(s, b) {
533 var self = this
534
535 var k
536 if (b == 16) k = 4
537 else if (b == 8) k = 3
538 else if (b == 256) k = 8; // byte array
539 else if (b == 2) k = 1
540 else if (b == 32) k = 5
541 else if (b == 4) k = 2
542 else {
543 self.fromRadix(s, b)
544 return
545 }
546 self.t = 0
547 self.s = 0
548 var i = s.length,
549 mi = false,
550 sh = 0
551 while (--i >= 0) {
552 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
553 if (x < 0) {
554 if (s.charAt(i) == "-") mi = true
555 continue
556 }
557 mi = false
558 if (sh == 0)
559 self[self.t++] = x
560 else if (sh + k > self.DB) {
561 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
562 self[self.t++] = (x >> (self.DB - sh))
563 } else
564 self[self.t - 1] |= x << sh
565 sh += k
566 if (sh >= self.DB) sh -= self.DB
567 }
568 if (k == 8 && (s[0] & 0x80) != 0) {
569 self.s = -1
570 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
571 }
572 self.clamp()
573 if (mi) BigInteger.ZERO.subTo(self, self)
574 }
575
576 // (protected) clamp off excess high words
577 function bnpClamp() {
578 var c = this.s & this.DM
579 while (this.t > 0 && this[this.t - 1] == c)--this.t
580 }
581
582 // (public) return string representation in given radix
583 function bnToString(b) {
584 var self = this
585 if (self.s < 0) return "-" + self.negate()
586 .toString(b)
587 var k
588 if (b == 16) k = 4
589 else if (b == 8) k = 3
590 else if (b == 2) k = 1
591 else if (b == 32) k = 5
592 else if (b == 4) k = 2
593 else return self.toRadix(b)
594 var km = (1 << k) - 1,
595 d, m = false,
596 r = "",
597 i = self.t
598 var p = self.DB - (i * self.DB) % k
599 if (i-- > 0) {
600 if (p < self.DB && (d = self[i] >> p) > 0) {
601 m = true
602 r = int2char(d)
603 }
604 while (i >= 0) {
605 if (p < k) {
606 d = (self[i] & ((1 << p) - 1)) << (k - p)
607 d |= self[--i] >> (p += self.DB - k)
608 } else {
609 d = (self[i] >> (p -= k)) & km
610 if (p <= 0) {
611 p += self.DB
612 --i
613 }
614 }
615 if (d > 0) m = true
616 if (m) r += int2char(d)
617 }
618 }
619 return m ? r : "0"
620 }
621
622 // (public) -this
623 function bnNegate() {
624 var r = new BigInteger()
625 BigInteger.ZERO.subTo(this, r)
626 return r
627 }
628
629 // (public) |this|
630 function bnAbs() {
631 return (this.s < 0) ? this.negate() : this
632 }
633
634 // (public) return + if this > a, - if this < a, 0 if equal
635 function bnCompareTo(a) {
636 var r = this.s - a.s
637 if (r != 0) return r
638 var i = this.t
639 r = i - a.t
640 if (r != 0) return (this.s < 0) ? -r : r
641 while (--i >= 0)
642 if ((r = this[i] - a[i]) != 0) return r
643 return 0
644 }
645
646 // returns bit length of the integer x
647 function nbits(x) {
648 var r = 1,
649 t
650 if ((t = x >>> 16) != 0) {
651 x = t
652 r += 16
653 }
654 if ((t = x >> 8) != 0) {
655 x = t
656 r += 8
657 }
658 if ((t = x >> 4) != 0) {
659 x = t
660 r += 4
661 }
662 if ((t = x >> 2) != 0) {
663 x = t
664 r += 2
665 }
666 if ((t = x >> 1) != 0) {
667 x = t
668 r += 1
669 }
670 return r
671 }
672
673 // (public) return the number of bits in "this"
674 function bnBitLength() {
675 if (this.t <= 0) return 0
676 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
677 }
678
679 // (public) return the number of bytes in "this"
680 function bnByteLength() {
681 return this.bitLength() >> 3
682 }
683
684 // (protected) r = this << n*DB
685 function bnpDLShiftTo(n, r) {
686 var i
687 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
688 for (i = n - 1; i >= 0; --i) r[i] = 0
689 r.t = this.t + n
690 r.s = this.s
691 }
692
693 // (protected) r = this >> n*DB
694 function bnpDRShiftTo(n, r) {
695 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
696 r.t = Math.max(this.t - n, 0)
697 r.s = this.s
698 }
699
700 // (protected) r = this << n
701 function bnpLShiftTo(n, r) {
702 var self = this
703 var bs = n % self.DB
704 var cbs = self.DB - bs
705 var bm = (1 << cbs) - 1
706 var ds = Math.floor(n / self.DB),
707 c = (self.s << bs) & self.DM,
708 i
709 for (i = self.t - 1; i >= 0; --i) {
710 r[i + ds + 1] = (self[i] >> cbs) | c
711 c = (self[i] & bm) << bs
712 }
713 for (i = ds - 1; i >= 0; --i) r[i] = 0
714 r[ds] = c
715 r.t = self.t + ds + 1
716 r.s = self.s
717 r.clamp()
718 }
719
720 // (protected) r = this >> n
721 function bnpRShiftTo(n, r) {
722 var self = this
723 r.s = self.s
724 var ds = Math.floor(n / self.DB)
725 if (ds >= self.t) {
726 r.t = 0
727 return
728 }
729 var bs = n % self.DB
730 var cbs = self.DB - bs
731 var bm = (1 << bs) - 1
732 r[0] = self[ds] >> bs
733 for (var i = ds + 1; i < self.t; ++i) {
734 r[i - ds - 1] |= (self[i] & bm) << cbs
735 r[i - ds] = self[i] >> bs
736 }
737 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
738 r.t = self.t - ds
739 r.clamp()
740 }
741
742 // (protected) r = this - a
743 function bnpSubTo(a, r) {
744 var self = this
745 var i = 0,
746 c = 0,
747 m = Math.min(a.t, self.t)
748 while (i < m) {
749 c += self[i] - a[i]
750 r[i++] = c & self.DM
751 c >>= self.DB
752 }
753 if (a.t < self.t) {
754 c -= a.s
755 while (i < self.t) {
756 c += self[i]
757 r[i++] = c & self.DM
758 c >>= self.DB
759 }
760 c += self.s
761 } else {
762 c += self.s
763 while (i < a.t) {
764 c -= a[i]
765 r[i++] = c & self.DM
766 c >>= self.DB
767 }
768 c -= a.s
769 }
770 r.s = (c < 0) ? -1 : 0
771 if (c < -1) r[i++] = self.DV + c
772 else if (c > 0) r[i++] = c
773 r.t = i
774 r.clamp()
775 }
776
777 // (protected) r = this * a, r != this,a (HAC 14.12)
778 // "this" should be the larger one if appropriate.
779 function bnpMultiplyTo(a, r) {
780 var x = this.abs(),
781 y = a.abs()
782 var i = x.t
783 r.t = i + y.t
784 while (--i >= 0) r[i] = 0
785 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
786 r.s = 0
787 r.clamp()
788 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
789 }
790
791 // (protected) r = this^2, r != this (HAC 14.16)
792 function bnpSquareTo(r) {
793 var x = this.abs()
794 var i = r.t = 2 * x.t
795 while (--i >= 0) r[i] = 0
796 for (i = 0; i < x.t - 1; ++i) {
797 var c = x.am(i, x[i], r, 2 * i, 0, 1)
798 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
799 r[i + x.t] -= x.DV
800 r[i + x.t + 1] = 1
801 }
802 }
803 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
804 r.s = 0
805 r.clamp()
806 }
807
808 // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
809 // r != q, this != m. q or r may be null.
810 function bnpDivRemTo(m, q, r) {
811 var self = this
812 var pm = m.abs()
813 if (pm.t <= 0) return
814 var pt = self.abs()
815 if (pt.t < pm.t) {
816 if (q != null) q.fromInt(0)
817 if (r != null) self.copyTo(r)
818 return
819 }
820 if (r == null) r = new BigInteger()
821 var y = new BigInteger(),
822 ts = self.s,
823 ms = m.s
824 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
825 if (nsh > 0) {
826 pm.lShiftTo(nsh, y)
827 pt.lShiftTo(nsh, r)
828 } else {
829 pm.copyTo(y)
830 pt.copyTo(r)
831 }
832 var ys = y.t
833 var y0 = y[ys - 1]
834 if (y0 == 0) return
835 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
836 var d1 = self.FV / yt,
837 d2 = (1 << self.F1) / yt,
838 e = 1 << self.F2
839 var i = r.t,
840 j = i - ys,
841 t = (q == null) ? new BigInteger() : q
842 y.dlShiftTo(j, t)
843 if (r.compareTo(t) >= 0) {
844 r[r.t++] = 1
845 r.subTo(t, r)
846 }
847 BigInteger.ONE.dlShiftTo(ys, t)
848 t.subTo(y, y); // "negative" y so we can replace sub with am later
849 while (y.t < ys) y[y.t++] = 0
850 while (--j >= 0) {
851 // Estimate quotient digit
852 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
853 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
854 y.dlShiftTo(j, t)
855 r.subTo(t, r)
856 while (r[i] < --qd) r.subTo(t, r)
857 }
858 }
859 if (q != null) {
860 r.drShiftTo(ys, q)
861 if (ts != ms) BigInteger.ZERO.subTo(q, q)
862 }
863 r.t = ys
864 r.clamp()
865 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
866 if (ts < 0) BigInteger.ZERO.subTo(r, r)
867 }
868
869 // (public) this mod a
870 function bnMod(a) {
871 var r = new BigInteger()
872 this.abs()
873 .divRemTo(a, null, r)
874 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
875 return r
876 }
877
878 // Modular reduction using "classic" algorithm
879 function Classic(m) {
880 this.m = m
881 }
882
883 function cConvert(x) {
884 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
885 else return x
886 }
887
888 function cRevert(x) {
889 return x
890 }
891
892 function cReduce(x) {
893 x.divRemTo(this.m, null, x)
894 }
895
896 function cMulTo(x, y, r) {
897 x.multiplyTo(y, r)
898 this.reduce(r)
899 }
900
901 function cSqrTo(x, r) {
902 x.squareTo(r)
903 this.reduce(r)
904 }
905
906 Classic.prototype.convert = cConvert
907 Classic.prototype.revert = cRevert
908 Classic.prototype.reduce = cReduce
909 Classic.prototype.mulTo = cMulTo
910 Classic.prototype.sqrTo = cSqrTo
911
912 // (protected) return "-1/this % 2^DB"; useful for Mont. reduction
913 // justification:
914 // xy == 1 (mod m)
915 // xy = 1+km
916 // xy(2-xy) = (1+km)(1-km)
917 // x[y(2-xy)] = 1-k^2m^2
918 // x[y(2-xy)] == 1 (mod m^2)
919 // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
920 // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
921 // JS multiply "overflows" differently from C/C++, so care is needed here.
922 function bnpInvDigit() {
923 if (this.t < 1) return 0
924 var x = this[0]
925 if ((x & 1) == 0) return 0
926 var y = x & 3; // y == 1/x mod 2^2
927 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
928 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
929 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
930 // last step - calculate inverse mod DV directly
931 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
932 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
933 // we really want the negative inverse, and -DV < y < DV
934 return (y > 0) ? this.DV - y : -y
935 }
936
937 // Montgomery reduction
938 function Montgomery(m) {
939 this.m = m
940 this.mp = m.invDigit()
941 this.mpl = this.mp & 0x7fff
942 this.mph = this.mp >> 15
943 this.um = (1 << (m.DB - 15)) - 1
944 this.mt2 = 2 * m.t
945 }
946
947 // xR mod m
948 function montConvert(x) {
949 var r = new BigInteger()
950 x.abs()
951 .dlShiftTo(this.m.t, r)
952 r.divRemTo(this.m, null, r)
953 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
954 return r
955 }
956
957 // x/R mod m
958 function montRevert(x) {
959 var r = new BigInteger()
960 x.copyTo(r)
961 this.reduce(r)
962 return r
963 }
964
965 // x = x/R mod m (HAC 14.32)
966 function montReduce(x) {
967 while (x.t <= this.mt2) // pad x so am has enough room later
968 x[x.t++] = 0
969 for (var i = 0; i < this.m.t; ++i) {
970 // faster way of calculating u0 = x[i]*mp mod DV
971 var j = x[i] & 0x7fff
972 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
973 // use am to combine the multiply-shift-add into one call
974 j = i + this.m.t
975 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
976 // propagate carry
977 while (x[j] >= x.DV) {
978 x[j] -= x.DV
979 x[++j]++
980 }
981 }
982 x.clamp()
983 x.drShiftTo(this.m.t, x)
984 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
985 }
986
987 // r = "x^2/R mod m"; x != r
988 function montSqrTo(x, r) {
989 x.squareTo(r)
990 this.reduce(r)
991 }
992
993 // r = "xy/R mod m"; x,y != r
994 function montMulTo(x, y, r) {
995 x.multiplyTo(y, r)
996 this.reduce(r)
997 }
998
999 Montgomery.prototype.convert = montConvert
1000 Montgomery.prototype.revert = montRevert
1001 Montgomery.prototype.reduce = montReduce
1002 Montgomery.prototype.mulTo = montMulTo
1003 Montgomery.prototype.sqrTo = montSqrTo
1004
1005 // (protected) true iff this is even
1006 function bnpIsEven() {
1007 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1008 }
1009
1010 // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1011 function bnpExp(e, z) {
1012 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1013 var r = new BigInteger(),
1014 r2 = new BigInteger(),
1015 g = z.convert(this),
1016 i = nbits(e) - 1
1017 g.copyTo(r)
1018 while (--i >= 0) {
1019 z.sqrTo(r, r2)
1020 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1021 else {
1022 var t = r
1023 r = r2
1024 r2 = t
1025 }
1026 }
1027 return z.revert(r)
1028 }
1029
1030 // (public) this^e % m, 0 <= e < 2^32
1031 function bnModPowInt(e, m) {
1032 var z
1033 if (e < 256 || m.isEven()) z = new Classic(m)
1034 else z = new Montgomery(m)
1035 return this.exp(e, z)
1036 }
1037
1038 // protected
1039 proto.copyTo = bnpCopyTo
1040 proto.fromInt = bnpFromInt
1041 proto.fromString = bnpFromString
1042 proto.clamp = bnpClamp
1043 proto.dlShiftTo = bnpDLShiftTo
1044 proto.drShiftTo = bnpDRShiftTo
1045 proto.lShiftTo = bnpLShiftTo
1046 proto.rShiftTo = bnpRShiftTo
1047 proto.subTo = bnpSubTo
1048 proto.multiplyTo = bnpMultiplyTo
1049 proto.squareTo = bnpSquareTo
1050 proto.divRemTo = bnpDivRemTo
1051 proto.invDigit = bnpInvDigit
1052 proto.isEven = bnpIsEven
1053 proto.exp = bnpExp
1054
1055 // public
1056 proto.toString = bnToString
1057 proto.negate = bnNegate
1058 proto.abs = bnAbs
1059 proto.compareTo = bnCompareTo
1060 proto.bitLength = bnBitLength
1061 proto.byteLength = bnByteLength
1062 proto.mod = bnMod
1063 proto.modPowInt = bnModPowInt
1064
1065 // (public)
1066 function bnClone() {
1067 var r = new BigInteger()
1068 this.copyTo(r)
1069 return r
1070 }
1071
1072 // (public) return value as integer
1073 function bnIntValue() {
1074 if (this.s < 0) {
1075 if (this.t == 1) return this[0] - this.DV
1076 else if (this.t == 0) return -1
1077 } else if (this.t == 1) return this[0]
1078 else if (this.t == 0) return 0
1079 // assumes 16 < DB < 32
1080 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1081 }
1082
1083 // (public) return value as byte
1084 function bnByteValue() {
1085 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1086 }
1087
1088 // (public) return value as short (assumes DB>=16)
1089 function bnShortValue() {
1090 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1091 }
1092
1093 // (protected) return x s.t. r^x < DV
1094 function bnpChunkSize(r) {
1095 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1096 }
1097
1098 // (public) 0 if this == 0, 1 if this > 0
1099 function bnSigNum() {
1100 if (this.s < 0) return -1
1101 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1102 else return 1
1103 }
1104
1105 // (protected) convert to radix string
1106 function bnpToRadix(b) {
1107 if (b == null) b = 10
1108 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1109 var cs = this.chunkSize(b)
1110 var a = Math.pow(b, cs)
1111 var d = nbv(a),
1112 y = new BigInteger(),
1113 z = new BigInteger(),
1114 r = ""
1115 this.divRemTo(d, y, z)
1116 while (y.signum() > 0) {
1117 r = (a + z.intValue())
1118 .toString(b)
1119 .substr(1) + r
1120 y.divRemTo(d, y, z)
1121 }
1122 return z.intValue()
1123 .toString(b) + r
1124 }
1125
1126 // (protected) convert from radix string
1127 function bnpFromRadix(s, b) {
1128 var self = this
1129 self.fromInt(0)
1130 if (b == null) b = 10
1131 var cs = self.chunkSize(b)
1132 var d = Math.pow(b, cs),
1133 mi = false,
1134 j = 0,
1135 w = 0
1136 for (var i = 0; i < s.length; ++i) {
1137 var x = intAt(s, i)
1138 if (x < 0) {
1139 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1140 continue
1141 }
1142 w = b * w + x
1143 if (++j >= cs) {
1144 self.dMultiply(d)
1145 self.dAddOffset(w, 0)
1146 j = 0
1147 w = 0
1148 }
1149 }
1150 if (j > 0) {
1151 self.dMultiply(Math.pow(b, j))
1152 self.dAddOffset(w, 0)
1153 }
1154 if (mi) BigInteger.ZERO.subTo(self, self)
1155 }
1156
1157 // (protected) alternate constructor
1158 function bnpFromNumber(a, b, c) {
1159 var self = this
1160 if ("number" == typeof b) {
1161 // new BigInteger(int,int,RNG)
1162 if (a < 2) self.fromInt(1)
1163 else {
1164 self.fromNumber(a, c)
1165 if (!self.testBit(a - 1)) // force MSB set
1166 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1167 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1168 while (!self.isProbablePrime(b)) {
1169 self.dAddOffset(2, 0)
1170 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1171 }
1172 }
1173 } else {
1174 // new BigInteger(int,RNG)
1175 var x = new Array(),
1176 t = a & 7
1177 x.length = (a >> 3) + 1
1178 b.nextBytes(x)
1179 if (t > 0) x[0] &= ((1 << t) - 1)
1180 else x[0] = 0
1181 self.fromString(x, 256)
1182 }
1183 }
1184
1185 // (public) convert to bigendian byte array
1186 function bnToByteArray() {
1187 var self = this
1188 var i = self.t,
1189 r = new Array()
1190 r[0] = self.s
1191 var p = self.DB - (i * self.DB) % 8,
1192 d, k = 0
1193 if (i-- > 0) {
1194 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1195 r[k++] = d | (self.s << (self.DB - p))
1196 while (i >= 0) {
1197 if (p < 8) {
1198 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1199 d |= self[--i] >> (p += self.DB - 8)
1200 } else {
1201 d = (self[i] >> (p -= 8)) & 0xff
1202 if (p <= 0) {
1203 p += self.DB
1204 --i
1205 }
1206 }
1207 if ((d & 0x80) != 0) d |= -256
1208 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1209 if (k > 0 || d != self.s) r[k++] = d
1210 }
1211 }
1212 return r
1213 }
1214
1215 function bnEquals(a) {
1216 return (this.compareTo(a) == 0)
1217 }
1218
1219 function bnMin(a) {
1220 return (this.compareTo(a) < 0) ? this : a
1221 }
1222
1223 function bnMax(a) {
1224 return (this.compareTo(a) > 0) ? this : a
1225 }
1226
1227 // (protected) r = this op a (bitwise)
1228 function bnpBitwiseTo(a, op, r) {
1229 var self = this
1230 var i, f, m = Math.min(a.t, self.t)
1231 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1232 if (a.t < self.t) {
1233 f = a.s & self.DM
1234 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1235 r.t = self.t
1236 } else {
1237 f = self.s & self.DM
1238 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1239 r.t = a.t
1240 }
1241 r.s = op(self.s, a.s)
1242 r.clamp()
1243 }
1244
1245 // (public) this & a
1246 function op_and(x, y) {
1247 return x & y
1248 }
1249
1250 function bnAnd(a) {
1251 var r = new BigInteger()
1252 this.bitwiseTo(a, op_and, r)
1253 return r
1254 }
1255
1256 // (public) this | a
1257 function op_or(x, y) {
1258 return x | y
1259 }
1260
1261 function bnOr(a) {
1262 var r = new BigInteger()
1263 this.bitwiseTo(a, op_or, r)
1264 return r
1265 }
1266
1267 // (public) this ^ a
1268 function op_xor(x, y) {
1269 return x ^ y
1270 }
1271
1272 function bnXor(a) {
1273 var r = new BigInteger()
1274 this.bitwiseTo(a, op_xor, r)
1275 return r
1276 }
1277
1278 // (public) this & ~a
1279 function op_andnot(x, y) {
1280 return x & ~y
1281 }
1282
1283 function bnAndNot(a) {
1284 var r = new BigInteger()
1285 this.bitwiseTo(a, op_andnot, r)
1286 return r
1287 }
1288
1289 // (public) ~this
1290 function bnNot() {
1291 var r = new BigInteger()
1292 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1293 r.t = this.t
1294 r.s = ~this.s
1295 return r
1296 }
1297
1298 // (public) this << n
1299 function bnShiftLeft(n) {
1300 var r = new BigInteger()
1301 if (n < 0) this.rShiftTo(-n, r)
1302 else this.lShiftTo(n, r)
1303 return r
1304 }
1305
1306 // (public) this >> n
1307 function bnShiftRight(n) {
1308 var r = new BigInteger()
1309 if (n < 0) this.lShiftTo(-n, r)
1310 else this.rShiftTo(n, r)
1311 return r
1312 }
1313
1314 // return index of lowest 1-bit in x, x < 2^31
1315 function lbit(x) {
1316 if (x == 0) return -1
1317 var r = 0
1318 if ((x & 0xffff) == 0) {
1319 x >>= 16
1320 r += 16
1321 }
1322 if ((x & 0xff) == 0) {
1323 x >>= 8
1324 r += 8
1325 }
1326 if ((x & 0xf) == 0) {
1327 x >>= 4
1328 r += 4
1329 }
1330 if ((x & 3) == 0) {
1331 x >>= 2
1332 r += 2
1333 }
1334 if ((x & 1) == 0)++r
1335 return r
1336 }
1337
1338 // (public) returns index of lowest 1-bit (or -1 if none)
1339 function bnGetLowestSetBit() {
1340 for (var i = 0; i < this.t; ++i)
1341 if (this[i] != 0) return i * this.DB + lbit(this[i])
1342 if (this.s < 0) return this.t * this.DB
1343 return -1
1344 }
1345
1346 // return number of 1 bits in x
1347 function cbit(x) {
1348 var r = 0
1349 while (x != 0) {
1350 x &= x - 1
1351 ++r
1352 }
1353 return r
1354 }
1355
1356 // (public) return number of set bits
1357 function bnBitCount() {
1358 var r = 0,
1359 x = this.s & this.DM
1360 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1361 return r
1362 }
1363
1364 // (public) true iff nth bit is set
1365 function bnTestBit(n) {
1366 var j = Math.floor(n / this.DB)
1367 if (j >= this.t) return (this.s != 0)
1368 return ((this[j] & (1 << (n % this.DB))) != 0)
1369 }
1370
1371 // (protected) this op (1<<n)
1372 function bnpChangeBit(n, op) {
1373 var r = BigInteger.ONE.shiftLeft(n)
1374 this.bitwiseTo(r, op, r)
1375 return r
1376 }
1377
1378 // (public) this | (1<<n)
1379 function bnSetBit(n) {
1380 return this.changeBit(n, op_or)
1381 }
1382
1383 // (public) this & ~(1<<n)
1384 function bnClearBit(n) {
1385 return this.changeBit(n, op_andnot)
1386 }
1387
1388 // (public) this ^ (1<<n)
1389 function bnFlipBit(n) {
1390 return this.changeBit(n, op_xor)
1391 }
1392
1393 // (protected) r = this + a
1394 function bnpAddTo(a, r) {
1395 var self = this
1396
1397 var i = 0,
1398 c = 0,
1399 m = Math.min(a.t, self.t)
1400 while (i < m) {
1401 c += self[i] + a[i]
1402 r[i++] = c & self.DM
1403 c >>= self.DB
1404 }
1405 if (a.t < self.t) {
1406 c += a.s
1407 while (i < self.t) {
1408 c += self[i]
1409 r[i++] = c & self.DM
1410 c >>= self.DB
1411 }
1412 c += self.s
1413 } else {
1414 c += self.s
1415 while (i < a.t) {
1416 c += a[i]
1417 r[i++] = c & self.DM
1418 c >>= self.DB
1419 }
1420 c += a.s
1421 }
1422 r.s = (c < 0) ? -1 : 0
1423 if (c > 0) r[i++] = c
1424 else if (c < -1) r[i++] = self.DV + c
1425 r.t = i
1426 r.clamp()
1427 }
1428
1429 // (public) this + a
1430 function bnAdd(a) {
1431 var r = new BigInteger()
1432 this.addTo(a, r)
1433 return r
1434 }
1435
1436 // (public) this - a
1437 function bnSubtract(a) {
1438 var r = new BigInteger()
1439 this.subTo(a, r)
1440 return r
1441 }
1442
1443 // (public) this * a
1444 function bnMultiply(a) {
1445 var r = new BigInteger()
1446 this.multiplyTo(a, r)
1447 return r
1448 }
1449
1450 // (public) this^2
1451 function bnSquare() {
1452 var r = new BigInteger()
1453 this.squareTo(r)
1454 return r
1455 }
1456
1457 // (public) this / a
1458 function bnDivide(a) {
1459 var r = new BigInteger()
1460 this.divRemTo(a, r, null)
1461 return r
1462 }
1463
1464 // (public) this % a
1465 function bnRemainder(a) {
1466 var r = new BigInteger()
1467 this.divRemTo(a, null, r)
1468 return r
1469 }
1470
1471 // (public) [this/a,this%a]
1472 function bnDivideAndRemainder(a) {
1473 var q = new BigInteger(),
1474 r = new BigInteger()
1475 this.divRemTo(a, q, r)
1476 return new Array(q, r)
1477 }
1478
1479 // (protected) this *= n, this >= 0, 1 < n < DV
1480 function bnpDMultiply(n) {
1481 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1482 ++this.t
1483 this.clamp()
1484 }
1485
1486 // (protected) this += n << w words, this >= 0
1487 function bnpDAddOffset(n, w) {
1488 if (n == 0) return
1489 while (this.t <= w) this[this.t++] = 0
1490 this[w] += n
1491 while (this[w] >= this.DV) {
1492 this[w] -= this.DV
1493 if (++w >= this.t) this[this.t++] = 0
1494 ++this[w]
1495 }
1496 }
1497
1498 // A "null" reducer
1499 function NullExp() {}
1500
1501 function nNop(x) {
1502 return x
1503 }
1504
1505 function nMulTo(x, y, r) {
1506 x.multiplyTo(y, r)
1507 }
1508
1509 function nSqrTo(x, r) {
1510 x.squareTo(r)
1511 }
1512
1513 NullExp.prototype.convert = nNop
1514 NullExp.prototype.revert = nNop
1515 NullExp.prototype.mulTo = nMulTo
1516 NullExp.prototype.sqrTo = nSqrTo
1517
1518 // (public) this^e
1519 function bnPow(e) {
1520 return this.exp(e, new NullExp())
1521 }
1522
1523 // (protected) r = lower n words of "this * a", a.t <= n
1524 // "this" should be the larger one if appropriate.
1525 function bnpMultiplyLowerTo(a, n, r) {
1526 var i = Math.min(this.t + a.t, n)
1527 r.s = 0; // assumes a,this >= 0
1528 r.t = i
1529 while (i > 0) r[--i] = 0
1530 var j
1531 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1532 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1533 r.clamp()
1534 }
1535
1536 // (protected) r = "this * a" without lower n words, n > 0
1537 // "this" should be the larger one if appropriate.
1538 function bnpMultiplyUpperTo(a, n, r) {
1539 --n
1540 var i = r.t = this.t + a.t - n
1541 r.s = 0; // assumes a,this >= 0
1542 while (--i >= 0) r[i] = 0
1543 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1544 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1545 r.clamp()
1546 r.drShiftTo(1, r)
1547 }
1548
1549 // Barrett modular reduction
1550 function Barrett(m) {
1551 // setup Barrett
1552 this.r2 = new BigInteger()
1553 this.q3 = new BigInteger()
1554 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1555 this.mu = this.r2.divide(m)
1556 this.m = m
1557 }
1558
1559 function barrettConvert(x) {
1560 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1561 else if (x.compareTo(this.m) < 0) return x
1562 else {
1563 var r = new BigInteger()
1564 x.copyTo(r)
1565 this.reduce(r)
1566 return r
1567 }
1568 }
1569
1570 function barrettRevert(x) {
1571 return x
1572 }
1573
1574 // x = x mod m (HAC 14.42)
1575 function barrettReduce(x) {
1576 var self = this
1577 x.drShiftTo(self.m.t - 1, self.r2)
1578 if (x.t > self.m.t + 1) {
1579 x.t = self.m.t + 1
1580 x.clamp()
1581 }
1582 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1583 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1584 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1585 x.subTo(self.r2, x)
1586 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1587 }
1588
1589 // r = x^2 mod m; x != r
1590 function barrettSqrTo(x, r) {
1591 x.squareTo(r)
1592 this.reduce(r)
1593 }
1594
1595 // r = x*y mod m; x,y != r
1596 function barrettMulTo(x, y, r) {
1597 x.multiplyTo(y, r)
1598 this.reduce(r)
1599 }
1600
1601 Barrett.prototype.convert = barrettConvert
1602 Barrett.prototype.revert = barrettRevert
1603 Barrett.prototype.reduce = barrettReduce
1604 Barrett.prototype.mulTo = barrettMulTo
1605 Barrett.prototype.sqrTo = barrettSqrTo
1606
1607 // (public) this^e % m (HAC 14.85)
1608 function bnModPow(e, m) {
1609 var i = e.bitLength(),
1610 k, r = nbv(1),
1611 z
1612 if (i <= 0) return r
1613 else if (i < 18) k = 1
1614 else if (i < 48) k = 3
1615 else if (i < 144) k = 4
1616 else if (i < 768) k = 5
1617 else k = 6
1618 if (i < 8)
1619 z = new Classic(m)
1620 else if (m.isEven())
1621 z = new Barrett(m)
1622 else
1623 z = new Montgomery(m)
1624
1625 // precomputation
1626 var g = new Array(),
1627 n = 3,
1628 k1 = k - 1,
1629 km = (1 << k) - 1
1630 g[1] = z.convert(this)
1631 if (k > 1) {
1632 var g2 = new BigInteger()
1633 z.sqrTo(g[1], g2)
1634 while (n <= km) {
1635 g[n] = new BigInteger()
1636 z.mulTo(g2, g[n - 2], g[n])
1637 n += 2
1638 }
1639 }
1640
1641 var j = e.t - 1,
1642 w, is1 = true,
1643 r2 = new BigInteger(),
1644 t
1645 i = nbits(e[j]) - 1
1646 while (j >= 0) {
1647 if (i >= k1) w = (e[j] >> (i - k1)) & km
1648 else {
1649 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1650 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1651 }
1652
1653 n = k
1654 while ((w & 1) == 0) {
1655 w >>= 1
1656 --n
1657 }
1658 if ((i -= n) < 0) {
1659 i += this.DB
1660 --j
1661 }
1662 if (is1) { // ret == 1, don't bother squaring or multiplying it
1663 g[w].copyTo(r)
1664 is1 = false
1665 } else {
1666 while (n > 1) {
1667 z.sqrTo(r, r2)
1668 z.sqrTo(r2, r)
1669 n -= 2
1670 }
1671 if (n > 0) z.sqrTo(r, r2)
1672 else {
1673 t = r
1674 r = r2
1675 r2 = t
1676 }
1677 z.mulTo(r2, g[w], r)
1678 }
1679
1680 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1681 z.sqrTo(r, r2)
1682 t = r
1683 r = r2
1684 r2 = t
1685 if (--i < 0) {
1686 i = this.DB - 1
1687 --j
1688 }
1689 }
1690 }
1691 return z.revert(r)
1692 }
1693
1694 // (public) gcd(this,a) (HAC 14.54)
1695 function bnGCD(a) {
1696 var x = (this.s < 0) ? this.negate() : this.clone()
1697 var y = (a.s < 0) ? a.negate() : a.clone()
1698 if (x.compareTo(y) < 0) {
1699 var t = x
1700 x = y
1701 y = t
1702 }
1703 var i = x.getLowestSetBit(),
1704 g = y.getLowestSetBit()
1705 if (g < 0) return x
1706 if (i < g) g = i
1707 if (g > 0) {
1708 x.rShiftTo(g, x)
1709 y.rShiftTo(g, y)
1710 }
1711 while (x.signum() > 0) {
1712 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1713 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1714 if (x.compareTo(y) >= 0) {
1715 x.subTo(y, x)
1716 x.rShiftTo(1, x)
1717 } else {
1718 y.subTo(x, y)
1719 y.rShiftTo(1, y)
1720 }
1721 }
1722 if (g > 0) y.lShiftTo(g, y)
1723 return y
1724 }
1725
1726 // (protected) this % n, n < 2^26
1727 function bnpModInt(n) {
1728 if (n <= 0) return 0
1729 var d = this.DV % n,
1730 r = (this.s < 0) ? n - 1 : 0
1731 if (this.t > 0)
1732 if (d == 0) r = this[0] % n
1733 else
1734 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1735 return r
1736 }
1737
1738 // (public) 1/this % m (HAC 14.61)
1739 function bnModInverse(m) {
1740 var ac = m.isEven()
1741 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1742 var u = m.clone(),
1743 v = this.clone()
1744 var a = nbv(1),
1745 b = nbv(0),
1746 c = nbv(0),
1747 d = nbv(1)
1748 while (u.signum() != 0) {
1749 while (u.isEven()) {
1750 u.rShiftTo(1, u)
1751 if (ac) {
1752 if (!a.isEven() || !b.isEven()) {
1753 a.addTo(this, a)
1754 b.subTo(m, b)
1755 }
1756 a.rShiftTo(1, a)
1757 } else if (!b.isEven()) b.subTo(m, b)
1758 b.rShiftTo(1, b)
1759 }
1760 while (v.isEven()) {
1761 v.rShiftTo(1, v)
1762 if (ac) {
1763 if (!c.isEven() || !d.isEven()) {
1764 c.addTo(this, c)
1765 d.subTo(m, d)
1766 }
1767 c.rShiftTo(1, c)
1768 } else if (!d.isEven()) d.subTo(m, d)
1769 d.rShiftTo(1, d)
1770 }
1771 if (u.compareTo(v) >= 0) {
1772 u.subTo(v, u)
1773 if (ac) a.subTo(c, a)
1774 b.subTo(d, b)
1775 } else {
1776 v.subTo(u, v)
1777 if (ac) c.subTo(a, c)
1778 d.subTo(b, d)
1779 }
1780 }
1781 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
1782 if (d.compareTo(m) >= 0) return d.subtract(m)
1783 if (d.signum() < 0) d.addTo(m, d)
1784 else return d
1785 if (d.signum() < 0) return d.add(m)
1786 else return d
1787 }
1788
1789 var lowprimes = [
1790 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
1791 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
1792 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
1793 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
1794 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
1795 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
1796 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
1797 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
1798 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
1799 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
1800 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
1801 ]
1802
1803 var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
1804
1805 // (public) test primality with certainty >= 1-.5^t
1806 function bnIsProbablePrime(t) {
1807 var i, x = this.abs()
1808 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
1809 for (i = 0; i < lowprimes.length; ++i)
1810 if (x[0] == lowprimes[i]) return true
1811 return false
1812 }
1813 if (x.isEven()) return false
1814 i = 1
1815 while (i < lowprimes.length) {
1816 var m = lowprimes[i],
1817 j = i + 1
1818 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1819 m = x.modInt(m)
1820 while (i < j) if (m % lowprimes[i++] == 0) return false
1821 }
1822 return x.millerRabin(t)
1823 }
1824
1825 // (protected) true if probably prime (HAC 4.24, Miller-Rabin)
1826 function bnpMillerRabin(t) {
1827 var n1 = this.subtract(BigInteger.ONE)
1828 var k = n1.getLowestSetBit()
1829 if (k <= 0) return false
1830 var r = n1.shiftRight(k)
1831 t = (t + 1) >> 1
1832 if (t > lowprimes.length) t = lowprimes.length
1833 var a = new BigInteger(null)
1834 var j, bases = []
1835 for (var i = 0; i < t; ++i) {
1836 for (;;) {
1837 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1838 if (bases.indexOf(j) == -1) break
1839 }
1840 bases.push(j)
1841 a.fromInt(j)
1842 var y = a.modPow(r, this)
1843 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
1844 var j = 1
1845 while (j++ < k && y.compareTo(n1) != 0) {
1846 y = y.modPowInt(2, this)
1847 if (y.compareTo(BigInteger.ONE) == 0) return false
1848 }
1849 if (y.compareTo(n1) != 0) return false
1850 }
1851 }
1852 return true
1853 }
1854
1855 // protected
1856 proto.chunkSize = bnpChunkSize
1857 proto.toRadix = bnpToRadix
1858 proto.fromRadix = bnpFromRadix
1859 proto.fromNumber = bnpFromNumber
1860 proto.bitwiseTo = bnpBitwiseTo
1861 proto.changeBit = bnpChangeBit
1862 proto.addTo = bnpAddTo
1863 proto.dMultiply = bnpDMultiply
1864 proto.dAddOffset = bnpDAddOffset
1865 proto.multiplyLowerTo = bnpMultiplyLowerTo
1866 proto.multiplyUpperTo = bnpMultiplyUpperTo
1867 proto.modInt = bnpModInt
1868 proto.millerRabin = bnpMillerRabin
1869
1870 // public
1871 proto.clone = bnClone
1872 proto.intValue = bnIntValue
1873 proto.byteValue = bnByteValue
1874 proto.shortValue = bnShortValue
1875 proto.signum = bnSigNum
1876 proto.toByteArray = bnToByteArray
1877 proto.equals = bnEquals
1878 proto.min = bnMin
1879 proto.max = bnMax
1880 proto.and = bnAnd
1881 proto.or = bnOr
1882 proto.xor = bnXor
1883 proto.andNot = bnAndNot
1884 proto.not = bnNot
1885 proto.shiftLeft = bnShiftLeft
1886 proto.shiftRight = bnShiftRight
1887 proto.getLowestSetBit = bnGetLowestSetBit
1888 proto.bitCount = bnBitCount
1889 proto.testBit = bnTestBit
1890 proto.setBit = bnSetBit
1891 proto.clearBit = bnClearBit
1892 proto.flipBit = bnFlipBit
1893 proto.add = bnAdd
1894 proto.subtract = bnSubtract
1895 proto.multiply = bnMultiply
1896 proto.divide = bnDivide
1897 proto.remainder = bnRemainder
1898 proto.divideAndRemainder = bnDivideAndRemainder
1899 proto.modPow = bnModPow
1900 proto.modInverse = bnModInverse
1901 proto.pow = bnPow
1902 proto.gcd = bnGCD
1903 proto.isProbablePrime = bnIsProbablePrime
1904
1905 // JSBN-specific extension
1906 proto.square = bnSquare
1907
1908 // constants
1909 BigInteger.ZERO = nbv(0)
1910 BigInteger.ONE = nbv(1)
1911 BigInteger.valueOf = nbv
1912
1913 module.exports = BigInteger
1914
1915 },{"../package.json":4}],2:[function(require,module,exports){
1916 (function (Buffer){
1917 // FIXME: Kind of a weird way to throw exceptions, consider removing
1918 var assert = require('assert')
1919 var BigInteger = require('./bigi')
1920
1921 /**
1922 * Turns a byte array into a big integer.
1923 *
1924 * This function will interpret a byte array as a big integer in big
1925 * endian notation.
1926 */
1927 BigInteger.fromByteArrayUnsigned = function(byteArray) {
1928 // BigInteger expects a DER integer conformant byte array
1929 if (byteArray[0] & 0x80) {
1930 return new BigInteger([0].concat(byteArray))
1931 }
1932
1933 return new BigInteger(byteArray)
1934 }
1935
1936 /**
1937 * Returns a byte array representation of the big integer.
1938 *
1939 * This returns the absolute of the contained value in big endian
1940 * form. A value of zero results in an empty array.
1941 */
1942 BigInteger.prototype.toByteArrayUnsigned = function() {
1943 var byteArray = this.toByteArray()
1944 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
1945 }
1946
1947 BigInteger.fromDERInteger = function(byteArray) {
1948 return new BigInteger(byteArray)
1949 }
1950
1951 /*
1952 * Converts BigInteger to a DER integer representation.
1953 *
1954 * The format for this value uses the most significant bit as a sign
1955 * bit. If the most significant bit is already set and the integer is
1956 * positive, a 0x00 is prepended.
1957 *
1958 * Examples:
1959 *
1960 * 0 => 0x00
1961 * 1 => 0x01
1962 * -1 => 0xff
1963 * 127 => 0x7f
1964 * -127 => 0x81
1965 * 128 => 0x0080
1966 * -128 => 0x80
1967 * 255 => 0x00ff
1968 * -255 => 0xff01
1969 * 16300 => 0x3fac
1970 * -16300 => 0xc054
1971 * 62300 => 0x00f35c
1972 * -62300 => 0xff0ca4
1973 */
1974 BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
1975
1976 BigInteger.fromBuffer = function(buffer) {
1977 // BigInteger expects a DER integer conformant byte array
1978 if (buffer[0] & 0x80) {
1979 var byteArray = Array.prototype.slice.call(buffer)
1980
1981 return new BigInteger([0].concat(byteArray))
1982 }
1983
1984 return new BigInteger(buffer)
1985 }
1986
1987 BigInteger.fromHex = function(hex) {
1988 if (hex === '') return BigInteger.ZERO
1989
1990 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
1991 assert.equal(hex.length % 2, 0, 'Incomplete hex')
1992 return new BigInteger(hex, 16)
1993 }
1994
1995 BigInteger.prototype.toBuffer = function(size) {
1996 var byteArray = this.toByteArrayUnsigned()
1997 var zeros = []
1998
1999 var padding = size - byteArray.length
2000 while (zeros.length < padding) zeros.push(0)
2001
2002 return new Buffer(zeros.concat(byteArray))
2003 }
2004
2005 BigInteger.prototype.toHex = function(size) {
2006 return this.toBuffer(size).toString('hex')
2007 }
2008
2009 }).call(this,require("buffer").Buffer)
2010 },{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2011 var BigInteger = require('./bigi')
2012
2013 //addons
2014 require('./convert')
2015
2016 module.exports = BigInteger
2017 },{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2018 module.exports={
2019 "name": "bigi",
2020 "version": "1.4.0",
2021 "description": "Big integers.",
2022 "keywords": [
2023 "cryptography",
2024 "math",
2025 "bitcoin",
2026 "arbitrary",
2027 "precision",
2028 "arithmetic",
2029 "big",
2030 "integer",
2031 "int",
2032 "number",
2033 "biginteger",
2034 "bigint",
2035 "bignumber",
2036 "decimal",
2037 "float"
2038 ],
2039 "devDependencies": {
2040 "mocha": "^1.20.1",
2041 "jshint": "^2.5.1",
2042 "coveralls": "^2.10.0",
2043 "istanbul": "^0.2.11"
2044 },
2045 "repository": {
2046 "url": "https://github.com/cryptocoinjs/bigi",
2047 "type": "git"
2048 },
2049 "main": "./lib/index.js",
2050 "scripts": {
2051 "test": "_mocha -- test/*.js",
2052 "jshint": "jshint --config jshint.json lib/*.js ; true",
2053 "unit": "mocha",
2054 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2055 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2056 },
2057 "dependencies": {},
2058 "testling": {
2059 "files": "test/*.js",
2060 "harness": "mocha",
2061 "browsers": [
2062 "ie/9..latest",
2063 "firefox/latest",
2064 "chrome/latest",
2065 "safari/6.0..latest",
2066 "iphone/6.0..latest",
2067 "android-browser/4.2..latest"
2068 ]
2069 },
2070 "bugs": {
2071 "url": "https://github.com/cryptocoinjs/bigi/issues"
2072 },
2073 "homepage": "https://github.com/cryptocoinjs/bigi",
2074 "_id": "bigi@1.4.0",
2075 "dist": {
2076 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2077 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2078 },
2079 "_from": "bigi@^1.4.0",
2080 "_npmVersion": "1.4.3",
2081 "_npmUser": {
2082 "name": "jp",
2083 "email": "jprichardson@gmail.com"
2084 },
2085 "maintainers": [
2086 {
2087 "name": "jp",
2088 "email": "jprichardson@gmail.com"
2089 },
2090 {
2091 "name": "midnightlightning",
2092 "email": "boydb@midnightdesign.ws"
2093 },
2094 {
2095 "name": "sidazhang",
2096 "email": "sidazhang89@gmail.com"
2097 },
2098 {
2099 "name": "nadav",
2100 "email": "npm@shesek.info"
2101 }
2102 ],
2103 "directories": {},
2104 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2105 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2106 }
2107
2108 },{}],5:[function(require,module,exports){
2109 // http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2110 //
2111 // THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2112 //
2113 // Originally from narwhal.js (http://narwhaljs.org)
2114 // Copyright (c) 2009 Thomas Robinson <280north.com>
2115 //
2116 // Permission is hereby granted, free of charge, to any person obtaining a copy
2117 // of this software and associated documentation files (the 'Software'), to
2118 // deal in the Software without restriction, including without limitation the
2119 // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2120 // sell copies of the Software, and to permit persons to whom the Software is
2121 // furnished to do so, subject to the following conditions:
2122 //
2123 // The above copyright notice and this permission notice shall be included in
2124 // all copies or substantial portions of the Software.
2125 //
2126 // THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2127 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2128 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2129 // AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2130 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2131 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
2132
2133 // when used in node, this will actually load the util module we depend on
2134 // versus loading the builtin util module as happens otherwise
2135 // this is a bug in node module loading as far as I am concerned
2136 var util = require('util/');
2137
2138 var pSlice = Array.prototype.slice;
2139 var hasOwn = Object.prototype.hasOwnProperty;
2140
2141 // 1. The assert module provides functions that throw
2142 // AssertionError's when particular conditions are not met. The
2143 // assert module must conform to the following interface.
2144
2145 var assert = module.exports = ok;
2146
2147 // 2. The AssertionError is defined in assert.
2148 // new assert.AssertionError({ message: message,
2149 // actual: actual,
2150 // expected: expected })
2151
2152 assert.AssertionError = function AssertionError(options) {
2153 this.name = 'AssertionError';
2154 this.actual = options.actual;
2155 this.expected = options.expected;
2156 this.operator = options.operator;
2157 if (options.message) {
2158 this.message = options.message;
2159 this.generatedMessage = false;
2160 } else {
2161 this.message = getMessage(this);
2162 this.generatedMessage = true;
2163 }
2164 var stackStartFunction = options.stackStartFunction || fail;
2165
2166 if (Error.captureStackTrace) {
2167 Error.captureStackTrace(this, stackStartFunction);
2168 }
2169 else {
2170 // non v8 browsers so we can have a stacktrace
2171 var err = new Error();
2172 if (err.stack) {
2173 var out = err.stack;
2174
2175 // try to strip useless frames
2176 var fn_name = stackStartFunction.name;
2177 var idx = out.indexOf('\n' + fn_name);
2178 if (idx >= 0) {
2179 // once we have located the function frame
2180 // we need to strip out everything before it (and its line)
2181 var next_line = out.indexOf('\n', idx + 1);
2182 out = out.substring(next_line + 1);
2183 }
2184
2185 this.stack = out;
2186 }
2187 }
2188 };
2189
2190 // assert.AssertionError instanceof Error
2191 util.inherits(assert.AssertionError, Error);
2192
2193 function replacer(key, value) {
2194 if (util.isUndefined(value)) {
2195 return '' + value;
2196 }
2197 if (util.isNumber(value) && !isFinite(value)) {
2198 return value.toString();
2199 }
2200 if (util.isFunction(value) || util.isRegExp(value)) {
2201 return value.toString();
2202 }
2203 return value;
2204 }
2205
2206 function truncate(s, n) {
2207 if (util.isString(s)) {
2208 return s.length < n ? s : s.slice(0, n);
2209 } else {
2210 return s;
2211 }
2212 }
2213
2214 function getMessage(self) {
2215 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2216 self.operator + ' ' +
2217 truncate(JSON.stringify(self.expected, replacer), 128);
2218 }
2219
2220 // At present only the three keys mentioned above are used and
2221 // understood by the spec. Implementations or sub modules can pass
2222 // other keys to the AssertionError's constructor - they will be
2223 // ignored.
2224
2225 // 3. All of the following functions must throw an AssertionError
2226 // when a corresponding condition is not met, with a message that
2227 // may be undefined if not provided. All assertion methods provide
2228 // both the actual and expected values to the assertion error for
2229 // display purposes.
2230
2231 function fail(actual, expected, message, operator, stackStartFunction) {
2232 throw new assert.AssertionError({
2233 message: message,
2234 actual: actual,
2235 expected: expected,
2236 operator: operator,
2237 stackStartFunction: stackStartFunction
2238 });
2239 }
2240
2241 // EXTENSION! allows for well behaved errors defined elsewhere.
2242 assert.fail = fail;
2243
2244 // 4. Pure assertion tests whether a value is truthy, as determined
2245 // by !!guard.
2246 // assert.ok(guard, message_opt);
2247 // This statement is equivalent to assert.equal(true, !!guard,
2248 // message_opt);. To test strictly for the value true, use
2249 // assert.strictEqual(true, guard, message_opt);.
2250
2251 function ok(value, message) {
2252 if (!value) fail(value, true, message, '==', assert.ok);
2253 }
2254 assert.ok = ok;
2255
2256 // 5. The equality assertion tests shallow, coercive equality with
2257 // ==.
2258 // assert.equal(actual, expected, message_opt);
2259
2260 assert.equal = function equal(actual, expected, message) {
2261 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2262 };
2263
2264 // 6. The non-equality assertion tests for whether two objects are not equal
2265 // with != assert.notEqual(actual, expected, message_opt);
2266
2267 assert.notEqual = function notEqual(actual, expected, message) {
2268 if (actual == expected) {
2269 fail(actual, expected, message, '!=', assert.notEqual);
2270 }
2271 };
2272
2273 // 7. The equivalence assertion tests a deep equality relation.
2274 // assert.deepEqual(actual, expected, message_opt);
2275
2276 assert.deepEqual = function deepEqual(actual, expected, message) {
2277 if (!_deepEqual(actual, expected)) {
2278 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2279 }
2280 };
2281
2282 function _deepEqual(actual, expected) {
2283 // 7.1. All identical values are equivalent, as determined by ===.
2284 if (actual === expected) {
2285 return true;
2286
2287 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2288 if (actual.length != expected.length) return false;
2289
2290 for (var i = 0; i < actual.length; i++) {
2291 if (actual[i] !== expected[i]) return false;
2292 }
2293
2294 return true;
2295
2296 // 7.2. If the expected value is a Date object, the actual value is
2297 // equivalent if it is also a Date object that refers to the same time.
2298 } else if (util.isDate(actual) && util.isDate(expected)) {
2299 return actual.getTime() === expected.getTime();
2300
2301 // 7.3 If the expected value is a RegExp object, the actual value is
2302 // equivalent if it is also a RegExp object with the same source and
2303 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2304 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2305 return actual.source === expected.source &&
2306 actual.global === expected.global &&
2307 actual.multiline === expected.multiline &&
2308 actual.lastIndex === expected.lastIndex &&
2309 actual.ignoreCase === expected.ignoreCase;
2310
2311 // 7.4. Other pairs that do not both pass typeof value == 'object',
2312 // equivalence is determined by ==.
2313 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2314 return actual == expected;
2315
2316 // 7.5 For all other Object pairs, including Array objects, equivalence is
2317 // determined by having the same number of owned properties (as verified
2318 // with Object.prototype.hasOwnProperty.call), the same set of keys
2319 // (although not necessarily the same order), equivalent values for every
2320 // corresponding key, and an identical 'prototype' property. Note: this
2321 // accounts for both named and indexed properties on Arrays.
2322 } else {
2323 return objEquiv(actual, expected);
2324 }
2325 }
2326
2327 function isArguments(object) {
2328 return Object.prototype.toString.call(object) == '[object Arguments]';
2329 }
2330
2331 function objEquiv(a, b) {
2332 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2333 return false;
2334 // an identical 'prototype' property.
2335 if (a.prototype !== b.prototype) return false;
2336 // if one is a primitive, the other must be same
2337 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2338 return a === b;
2339 }
2340 var aIsArgs = isArguments(a),
2341 bIsArgs = isArguments(b);
2342 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2343 return false;
2344 if (aIsArgs) {
2345 a = pSlice.call(a);
2346 b = pSlice.call(b);
2347 return _deepEqual(a, b);
2348 }
2349 var ka = objectKeys(a),
2350 kb = objectKeys(b),
2351 key, i;
2352 // having the same number of owned properties (keys incorporates
2353 // hasOwnProperty)
2354 if (ka.length != kb.length)
2355 return false;
2356 //the same set of keys (although not necessarily the same order),
2357 ka.sort();
2358 kb.sort();
2359 //~~~cheap key test
2360 for (i = ka.length - 1; i >= 0; i--) {
2361 if (ka[i] != kb[i])
2362 return false;
2363 }
2364 //equivalent values for every corresponding key, and
2365 //~~~possibly expensive deep test
2366 for (i = ka.length - 1; i >= 0; i--) {
2367 key = ka[i];
2368 if (!_deepEqual(a[key], b[key])) return false;
2369 }
2370 return true;
2371 }
2372
2373 // 8. The non-equivalence assertion tests for any deep inequality.
2374 // assert.notDeepEqual(actual, expected, message_opt);
2375
2376 assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2377 if (_deepEqual(actual, expected)) {
2378 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
2379 }
2380 };
2381
2382 // 9. The strict equality assertion tests strict equality, as determined by ===.
2383 // assert.strictEqual(actual, expected, message_opt);
2384
2385 assert.strictEqual = function strictEqual(actual, expected, message) {
2386 if (actual !== expected) {
2387 fail(actual, expected, message, '===', assert.strictEqual);
2388 }
2389 };
2390
2391 // 10. The strict non-equality assertion tests for strict inequality, as
2392 // determined by !==. assert.notStrictEqual(actual, expected, message_opt);
2393
2394 assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2395 if (actual === expected) {
2396 fail(actual, expected, message, '!==', assert.notStrictEqual);
2397 }
2398 };
2399
2400 function expectedException(actual, expected) {
2401 if (!actual || !expected) {
2402 return false;
2403 }
2404
2405 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2406 return expected.test(actual);
2407 } else if (actual instanceof expected) {
2408 return true;
2409 } else if (expected.call({}, actual) === true) {
2410 return true;
2411 }
2412
2413 return false;
2414 }
2415
2416 function _throws(shouldThrow, block, expected, message) {
2417 var actual;
2418
2419 if (util.isString(expected)) {
2420 message = expected;
2421 expected = null;
2422 }
2423
2424 try {
2425 block();
2426 } catch (e) {
2427 actual = e;
2428 }
2429
2430 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2431 (message ? ' ' + message : '.');
2432
2433 if (shouldThrow && !actual) {
2434 fail(actual, expected, 'Missing expected exception' + message);
2435 }
2436
2437 if (!shouldThrow && expectedException(actual, expected)) {
2438 fail(actual, expected, 'Got unwanted exception' + message);
2439 }
2440
2441 if ((shouldThrow && actual && expected &&
2442 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2443 throw actual;
2444 }
2445 }
2446
2447 // 11. Expected to throw an error:
2448 // assert.throws(block, Error_opt, message_opt);
2449
2450 assert.throws = function(block, /*optional*/error, /*optional*/message) {
2451 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2452 };
2453
2454 // EXTENSION! This is annoying to write outside this module.
2455 assert.doesNotThrow = function(block, /*optional*/message) {
2456 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2457 };
2458
2459 assert.ifError = function(err) { if (err) {throw err;}};
2460
2461 var objectKeys = Object.keys || function (obj) {
2462 var keys = [];
2463 for (var key in obj) {
2464 if (hasOwn.call(obj, key)) keys.push(key);
2465 }
2466 return keys;
2467 };
2468
2469 },{"util/":29}],6:[function(require,module,exports){
2470
2471 },{}],7:[function(require,module,exports){
2472 /*!
2473 * The buffer module from node.js, for the browser.
2474 *
2475 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2476 * @license MIT
2477 */
2478
2479 var base64 = require('base64-js')
2480 var ieee754 = require('ieee754')
2481 var isArray = require('is-array')
2482
2483 exports.Buffer = Buffer
2484 exports.SlowBuffer = SlowBuffer
2485 exports.INSPECT_MAX_BYTES = 50
2486 Buffer.poolSize = 8192 // not used by this implementation
2487
2488 var rootParent = {}
2489
2490 /**
2491 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2492 * === true Use Uint8Array implementation (fastest)
2493 * === false Use Object implementation (most compatible, even IE6)
2494 *
2495 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2496 * Opera 11.6+, iOS 4.2+.
2497 *
2498 * Due to various browser bugs, sometimes the Object implementation will be used even
2499 * when the browser supports typed arrays.
2500 *
2501 * Note:
2502 *
2503 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2504 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2505 *
2506 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2507 * on objects.
2508 *
2509 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2510 *
2511 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2512 * incorrect length in some situations.
2513
2514 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2515 * get the Object implementation, which is slower but behaves correctly.
2516 */
2517 Buffer.TYPED_ARRAY_SUPPORT = (function () {
2518 function Bar () {}
2519 try {
2520 var arr = new Uint8Array(1)
2521 arr.foo = function () { return 42 }
2522 arr.constructor = Bar
2523 return arr.foo() === 42 && // typed array instances can be augmented
2524 arr.constructor === Bar && // constructor can be set
2525 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2526 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2527 } catch (e) {
2528 return false
2529 }
2530 })()
2531
2532 function kMaxLength () {
2533 return Buffer.TYPED_ARRAY_SUPPORT
2534 ? 0x7fffffff
2535 : 0x3fffffff
2536 }
2537
2538 /**
2539 * Class: Buffer
2540 * =============
2541 *
2542 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2543 * with function properties for all the node `Buffer` API functions. We use
2544 * `Uint8Array` so that square bracket notation works as expected -- it returns
2545 * a single octet.
2546 *
2547 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2548 * prototype.
2549 */
2550 function Buffer (arg) {
2551 if (!(this instanceof Buffer)) {
2552 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2553 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2554 return new Buffer(arg)
2555 }
2556
2557 this.length = 0
2558 this.parent = undefined
2559
2560 // Common case.
2561 if (typeof arg === 'number') {
2562 return fromNumber(this, arg)
2563 }
2564
2565 // Slightly less common case.
2566 if (typeof arg === 'string') {
2567 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2568 }
2569
2570 // Unusual.
2571 return fromObject(this, arg)
2572 }
2573
2574 function fromNumber (that, length) {
2575 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2576 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2577 for (var i = 0; i < length; i++) {
2578 that[i] = 0
2579 }
2580 }
2581 return that
2582 }
2583
2584 function fromString (that, string, encoding) {
2585 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
2586
2587 // Assumption: byteLength() return value is always < kMaxLength.
2588 var length = byteLength(string, encoding) | 0
2589 that = allocate(that, length)
2590
2591 that.write(string, encoding)
2592 return that
2593 }
2594
2595 function fromObject (that, object) {
2596 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
2597
2598 if (isArray(object)) return fromArray(that, object)
2599
2600 if (object == null) {
2601 throw new TypeError('must start with number, buffer, array or string')
2602 }
2603
2604 if (typeof ArrayBuffer !== 'undefined') {
2605 if (object.buffer instanceof ArrayBuffer) {
2606 return fromTypedArray(that, object)
2607 }
2608 if (object instanceof ArrayBuffer) {
2609 return fromArrayBuffer(that, object)
2610 }
2611 }
2612
2613 if (object.length) return fromArrayLike(that, object)
2614
2615 return fromJsonObject(that, object)
2616 }
2617
2618 function fromBuffer (that, buffer) {
2619 var length = checked(buffer.length) | 0
2620 that = allocate(that, length)
2621 buffer.copy(that, 0, 0, length)
2622 return that
2623 }
2624
2625 function fromArray (that, array) {
2626 var length = checked(array.length) | 0
2627 that = allocate(that, length)
2628 for (var i = 0; i < length; i += 1) {
2629 that[i] = array[i] & 255
2630 }
2631 return that
2632 }
2633
2634 // Duplicate of fromArray() to keep fromArray() monomorphic.
2635 function fromTypedArray (that, array) {
2636 var length = checked(array.length) | 0
2637 that = allocate(that, length)
2638 // Truncating the elements is probably not what people expect from typed
2639 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2640 // of the old Buffer constructor.
2641 for (var i = 0; i < length; i += 1) {
2642 that[i] = array[i] & 255
2643 }
2644 return that
2645 }
2646
2647 function fromArrayBuffer (that, array) {
2648 if (Buffer.TYPED_ARRAY_SUPPORT) {
2649 // Return an augmented `Uint8Array` instance, for best performance
2650 array.byteLength
2651 that = Buffer._augment(new Uint8Array(array))
2652 } else {
2653 // Fallback: Return an object instance of the Buffer class
2654 that = fromTypedArray(that, new Uint8Array(array))
2655 }
2656 return that
2657 }
2658
2659 function fromArrayLike (that, array) {
2660 var length = checked(array.length) | 0
2661 that = allocate(that, length)
2662 for (var i = 0; i < length; i += 1) {
2663 that[i] = array[i] & 255
2664 }
2665 return that
2666 }
2667
2668 // Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2669 // Returns a zero-length buffer for inputs that don't conform to the spec.
2670 function fromJsonObject (that, object) {
2671 var array
2672 var length = 0
2673
2674 if (object.type === 'Buffer' && isArray(object.data)) {
2675 array = object.data
2676 length = checked(array.length) | 0
2677 }
2678 that = allocate(that, length)
2679
2680 for (var i = 0; i < length; i += 1) {
2681 that[i] = array[i] & 255
2682 }
2683 return that
2684 }
2685
2686 function allocate (that, length) {
2687 if (Buffer.TYPED_ARRAY_SUPPORT) {
2688 // Return an augmented `Uint8Array` instance, for best performance
2689 that = Buffer._augment(new Uint8Array(length))
2690 } else {
2691 // Fallback: Return an object instance of the Buffer class
2692 that.length = length
2693 that._isBuffer = true
2694 }
2695
2696 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2697 if (fromPool) that.parent = rootParent
2698
2699 return that
2700 }
2701
2702 function checked (length) {
2703 // Note: cannot use `length < kMaxLength` here because that fails when
2704 // length is NaN (which is otherwise coerced to zero.)
2705 if (length >= kMaxLength()) {
2706 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2707 'size: 0x' + kMaxLength().toString(16) + ' bytes')
2708 }
2709 return length | 0
2710 }
2711
2712 function SlowBuffer (subject, encoding) {
2713 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
2714
2715 var buf = new Buffer(subject, encoding)
2716 delete buf.parent
2717 return buf
2718 }
2719
2720 Buffer.isBuffer = function isBuffer (b) {
2721 return !!(b != null && b._isBuffer)
2722 }
2723
2724 Buffer.compare = function compare (a, b) {
2725 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2726 throw new TypeError('Arguments must be Buffers')
2727 }
2728
2729 if (a === b) return 0
2730
2731 var x = a.length
2732 var y = b.length
2733
2734 var i = 0
2735 var len = Math.min(x, y)
2736 while (i < len) {
2737 if (a[i] !== b[i]) break
2738
2739 ++i
2740 }
2741
2742 if (i !== len) {
2743 x = a[i]
2744 y = b[i]
2745 }
2746
2747 if (x < y) return -1
2748 if (y < x) return 1
2749 return 0
2750 }
2751
2752 Buffer.isEncoding = function isEncoding (encoding) {
2753 switch (String(encoding).toLowerCase()) {
2754 case 'hex':
2755 case 'utf8':
2756 case 'utf-8':
2757 case 'ascii':
2758 case 'binary':
2759 case 'base64':
2760 case 'raw':
2761 case 'ucs2':
2762 case 'ucs-2':
2763 case 'utf16le':
2764 case 'utf-16le':
2765 return true
2766 default:
2767 return false
2768 }
2769 }
2770
2771 Buffer.concat = function concat (list, length) {
2772 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
2773
2774 if (list.length === 0) {
2775 return new Buffer(0)
2776 }
2777
2778 var i
2779 if (length === undefined) {
2780 length = 0
2781 for (i = 0; i < list.length; i++) {
2782 length += list[i].length
2783 }
2784 }
2785
2786 var buf = new Buffer(length)
2787 var pos = 0
2788 for (i = 0; i < list.length; i++) {
2789 var item = list[i]
2790 item.copy(buf, pos)
2791 pos += item.length
2792 }
2793 return buf
2794 }
2795
2796 function byteLength (string, encoding) {
2797 if (typeof string !== 'string') string = '' + string
2798
2799 var len = string.length
2800 if (len === 0) return 0
2801
2802 // Use a for loop to avoid recursion
2803 var loweredCase = false
2804 for (;;) {
2805 switch (encoding) {
2806 case 'ascii':
2807 case 'binary':
2808 // Deprecated
2809 case 'raw':
2810 case 'raws':
2811 return len
2812 case 'utf8':
2813 case 'utf-8':
2814 return utf8ToBytes(string).length
2815 case 'ucs2':
2816 case 'ucs-2':
2817 case 'utf16le':
2818 case 'utf-16le':
2819 return len * 2
2820 case 'hex':
2821 return len >>> 1
2822 case 'base64':
2823 return base64ToBytes(string).length
2824 default:
2825 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2826 encoding = ('' + encoding).toLowerCase()
2827 loweredCase = true
2828 }
2829 }
2830 }
2831 Buffer.byteLength = byteLength
2832
2833 // pre-set for values that may exist in the future
2834 Buffer.prototype.length = undefined
2835 Buffer.prototype.parent = undefined
2836
2837 function slowToString (encoding, start, end) {
2838 var loweredCase = false
2839
2840 start = start | 0
2841 end = end === undefined || end === Infinity ? this.length : end | 0
2842
2843 if (!encoding) encoding = 'utf8'
2844 if (start < 0) start = 0
2845 if (end > this.length) end = this.length
2846 if (end <= start) return ''
2847
2848 while (true) {
2849 switch (encoding) {
2850 case 'hex':
2851 return hexSlice(this, start, end)
2852
2853 case 'utf8':
2854 case 'utf-8':
2855 return utf8Slice(this, start, end)
2856
2857 case 'ascii':
2858 return asciiSlice(this, start, end)
2859
2860 case 'binary':
2861 return binarySlice(this, start, end)
2862
2863 case 'base64':
2864 return base64Slice(this, start, end)
2865
2866 case 'ucs2':
2867 case 'ucs-2':
2868 case 'utf16le':
2869 case 'utf-16le':
2870 return utf16leSlice(this, start, end)
2871
2872 default:
2873 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2874 encoding = (encoding + '').toLowerCase()
2875 loweredCase = true
2876 }
2877 }
2878 }
2879
2880 Buffer.prototype.toString = function toString () {
2881 var length = this.length | 0
2882 if (length === 0) return ''
2883 if (arguments.length === 0) return utf8Slice(this, 0, length)
2884 return slowToString.apply(this, arguments)
2885 }
2886
2887 Buffer.prototype.equals = function equals (b) {
2888 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2889 if (this === b) return true
2890 return Buffer.compare(this, b) === 0
2891 }
2892
2893 Buffer.prototype.inspect = function inspect () {
2894 var str = ''
2895 var max = exports.INSPECT_MAX_BYTES
2896 if (this.length > 0) {
2897 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
2898 if (this.length > max) str += ' ... '
2899 }
2900 return '<Buffer ' + str + '>'
2901 }
2902
2903 Buffer.prototype.compare = function compare (b) {
2904 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2905 if (this === b) return 0
2906 return Buffer.compare(this, b)
2907 }
2908
2909 Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2910 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
2911 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
2912 byteOffset >>= 0
2913
2914 if (this.length === 0) return -1
2915 if (byteOffset >= this.length) return -1
2916
2917 // Negative offsets start from the end of the buffer
2918 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
2919
2920 if (typeof val === 'string') {
2921 if (val.length === 0) return -1 // special case: looking for empty string always fails
2922 return String.prototype.indexOf.call(this, val, byteOffset)
2923 }
2924 if (Buffer.isBuffer(val)) {
2925 return arrayIndexOf(this, val, byteOffset)
2926 }
2927 if (typeof val === 'number') {
2928 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2929 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
2930 }
2931 return arrayIndexOf(this, [ val ], byteOffset)
2932 }
2933
2934 function arrayIndexOf (arr, val, byteOffset) {
2935 var foundIndex = -1
2936 for (var i = 0; byteOffset + i < arr.length; i++) {
2937 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
2938 if (foundIndex === -1) foundIndex = i
2939 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
2940 } else {
2941 foundIndex = -1
2942 }
2943 }
2944 return -1
2945 }
2946
2947 throw new TypeError('val must be string, number or Buffer')
2948 }
2949
2950 // `get` is deprecated
2951 Buffer.prototype.get = function get (offset) {
2952 console.log('.get() is deprecated. Access using array indexes instead.')
2953 return this.readUInt8(offset)
2954 }
2955
2956 // `set` is deprecated
2957 Buffer.prototype.set = function set (v, offset) {
2958 console.log('.set() is deprecated. Access using array indexes instead.')
2959 return this.writeUInt8(v, offset)
2960 }
2961
2962 function hexWrite (buf, string, offset, length) {
2963 offset = Number(offset) || 0
2964 var remaining = buf.length - offset
2965 if (!length) {
2966 length = remaining
2967 } else {
2968 length = Number(length)
2969 if (length > remaining) {
2970 length = remaining
2971 }
2972 }
2973
2974 // must be an even number of digits
2975 var strLen = string.length
2976 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
2977
2978 if (length > strLen / 2) {
2979 length = strLen / 2
2980 }
2981 for (var i = 0; i < length; i++) {
2982 var parsed = parseInt(string.substr(i * 2, 2), 16)
2983 if (isNaN(parsed)) throw new Error('Invalid hex string')
2984 buf[offset + i] = parsed
2985 }
2986 return i
2987 }
2988
2989 function utf8Write (buf, string, offset, length) {
2990 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2991 }
2992
2993 function asciiWrite (buf, string, offset, length) {
2994 return blitBuffer(asciiToBytes(string), buf, offset, length)
2995 }
2996
2997 function binaryWrite (buf, string, offset, length) {
2998 return asciiWrite(buf, string, offset, length)
2999 }
3000
3001 function base64Write (buf, string, offset, length) {
3002 return blitBuffer(base64ToBytes(string), buf, offset, length)
3003 }
3004
3005 function ucs2Write (buf, string, offset, length) {
3006 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3007 }
3008
3009 Buffer.prototype.write = function write (string, offset, length, encoding) {
3010 // Buffer#write(string)
3011 if (offset === undefined) {
3012 encoding = 'utf8'
3013 length = this.length
3014 offset = 0
3015 // Buffer#write(string, encoding)
3016 } else if (length === undefined && typeof offset === 'string') {
3017 encoding = offset
3018 length = this.length
3019 offset = 0
3020 // Buffer#write(string, offset[, length][, encoding])
3021 } else if (isFinite(offset)) {
3022 offset = offset | 0
3023 if (isFinite(length)) {
3024 length = length | 0
3025 if (encoding === undefined) encoding = 'utf8'
3026 } else {
3027 encoding = length
3028 length = undefined
3029 }
3030 // legacy write(string, encoding, offset, length) - remove in v0.13
3031 } else {
3032 var swap = encoding
3033 encoding = offset
3034 offset = length | 0
3035 length = swap
3036 }
3037
3038 var remaining = this.length - offset
3039 if (length === undefined || length > remaining) length = remaining
3040
3041 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3042 throw new RangeError('attempt to write outside buffer bounds')
3043 }
3044
3045 if (!encoding) encoding = 'utf8'
3046
3047 var loweredCase = false
3048 for (;;) {
3049 switch (encoding) {
3050 case 'hex':
3051 return hexWrite(this, string, offset, length)
3052
3053 case 'utf8':
3054 case 'utf-8':
3055 return utf8Write(this, string, offset, length)
3056
3057 case 'ascii':
3058 return asciiWrite(this, string, offset, length)
3059
3060 case 'binary':
3061 return binaryWrite(this, string, offset, length)
3062
3063 case 'base64':
3064 // Warning: maxLength not taken into account in base64Write
3065 return base64Write(this, string, offset, length)
3066
3067 case 'ucs2':
3068 case 'ucs-2':
3069 case 'utf16le':
3070 case 'utf-16le':
3071 return ucs2Write(this, string, offset, length)
3072
3073 default:
3074 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3075 encoding = ('' + encoding).toLowerCase()
3076 loweredCase = true
3077 }
3078 }
3079 }
3080
3081 Buffer.prototype.toJSON = function toJSON () {
3082 return {
3083 type: 'Buffer',
3084 data: Array.prototype.slice.call(this._arr || this, 0)
3085 }
3086 }
3087
3088 function base64Slice (buf, start, end) {
3089 if (start === 0 && end === buf.length) {
3090 return base64.fromByteArray(buf)
3091 } else {
3092 return base64.fromByteArray(buf.slice(start, end))
3093 }
3094 }
3095
3096 function utf8Slice (buf, start, end) {
3097 end = Math.min(buf.length, end)
3098 var firstByte
3099 var secondByte
3100 var thirdByte
3101 var fourthByte
3102 var bytesPerSequence
3103 var tempCodePoint
3104 var codePoint
3105 var res = []
3106 var i = start
3107
3108 for (; i < end; i += bytesPerSequence) {
3109 firstByte = buf[i]
3110 codePoint = 0xFFFD
3111
3112 if (firstByte > 0xEF) {
3113 bytesPerSequence = 4
3114 } else if (firstByte > 0xDF) {
3115 bytesPerSequence = 3
3116 } else if (firstByte > 0xBF) {
3117 bytesPerSequence = 2
3118 } else {
3119 bytesPerSequence = 1
3120 }
3121
3122 if (i + bytesPerSequence <= end) {
3123 switch (bytesPerSequence) {
3124 case 1:
3125 if (firstByte < 0x80) {
3126 codePoint = firstByte
3127 }
3128 break
3129 case 2:
3130 secondByte = buf[i + 1]
3131 if ((secondByte & 0xC0) === 0x80) {
3132 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3133 if (tempCodePoint > 0x7F) {
3134 codePoint = tempCodePoint
3135 }
3136 }
3137 break
3138 case 3:
3139 secondByte = buf[i + 1]
3140 thirdByte = buf[i + 2]
3141 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3142 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3143 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3144 codePoint = tempCodePoint
3145 }
3146 }
3147 break
3148 case 4:
3149 secondByte = buf[i + 1]
3150 thirdByte = buf[i + 2]
3151 fourthByte = buf[i + 3]
3152 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3153 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3154 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3155 codePoint = tempCodePoint
3156 }
3157 }
3158 }
3159 }
3160
3161 if (codePoint === 0xFFFD) {
3162 // we generated an invalid codePoint so make sure to only advance by 1 byte
3163 bytesPerSequence = 1
3164 } else if (codePoint > 0xFFFF) {
3165 // encode to utf16 (surrogate pair dance)
3166 codePoint -= 0x10000
3167 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3168 codePoint = 0xDC00 | codePoint & 0x3FF
3169 }
3170
3171 res.push(codePoint)
3172 }
3173
3174 return String.fromCharCode.apply(String, res)
3175 }
3176
3177 function asciiSlice (buf, start, end) {
3178 var ret = ''
3179 end = Math.min(buf.length, end)
3180
3181 for (var i = start; i < end; i++) {
3182 ret += String.fromCharCode(buf[i] & 0x7F)
3183 }
3184 return ret
3185 }
3186
3187 function binarySlice (buf, start, end) {
3188 var ret = ''
3189 end = Math.min(buf.length, end)
3190
3191 for (var i = start; i < end; i++) {
3192 ret += String.fromCharCode(buf[i])
3193 }
3194 return ret
3195 }
3196
3197 function hexSlice (buf, start, end) {
3198 var len = buf.length
3199
3200 if (!start || start < 0) start = 0
3201 if (!end || end < 0 || end > len) end = len
3202
3203 var out = ''
3204 for (var i = start; i < end; i++) {
3205 out += toHex(buf[i])
3206 }
3207 return out
3208 }
3209
3210 function utf16leSlice (buf, start, end) {
3211 var bytes = buf.slice(start, end)
3212 var res = ''
3213 for (var i = 0; i < bytes.length; i += 2) {
3214 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3215 }
3216 return res
3217 }
3218
3219 Buffer.prototype.slice = function slice (start, end) {
3220 var len = this.length
3221 start = ~~start
3222 end = end === undefined ? len : ~~end
3223
3224 if (start < 0) {
3225 start += len
3226 if (start < 0) start = 0
3227 } else if (start > len) {
3228 start = len
3229 }
3230
3231 if (end < 0) {
3232 end += len
3233 if (end < 0) end = 0
3234 } else if (end > len) {
3235 end = len
3236 }
3237
3238 if (end < start) end = start
3239
3240 var newBuf
3241 if (Buffer.TYPED_ARRAY_SUPPORT) {
3242 newBuf = Buffer._augment(this.subarray(start, end))
3243 } else {
3244 var sliceLen = end - start
3245 newBuf = new Buffer(sliceLen, undefined)
3246 for (var i = 0; i < sliceLen; i++) {
3247 newBuf[i] = this[i + start]
3248 }
3249 }
3250
3251 if (newBuf.length) newBuf.parent = this.parent || this
3252
3253 return newBuf
3254 }
3255
3256 /*
3257 * Need to make sure that buffer isn't trying to write out of bounds.
3258 */
3259 function checkOffset (offset, ext, length) {
3260 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3261 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3262 }
3263
3264 Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3265 offset = offset | 0
3266 byteLength = byteLength | 0
3267 if (!noAssert) checkOffset(offset, byteLength, this.length)
3268
3269 var val = this[offset]
3270 var mul = 1
3271 var i = 0
3272 while (++i < byteLength && (mul *= 0x100)) {
3273 val += this[offset + i] * mul
3274 }
3275
3276 return val
3277 }
3278
3279 Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3280 offset = offset | 0
3281 byteLength = byteLength | 0
3282 if (!noAssert) {
3283 checkOffset(offset, byteLength, this.length)
3284 }
3285
3286 var val = this[offset + --byteLength]
3287 var mul = 1
3288 while (byteLength > 0 && (mul *= 0x100)) {
3289 val += this[offset + --byteLength] * mul
3290 }
3291
3292 return val
3293 }
3294
3295 Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3296 if (!noAssert) checkOffset(offset, 1, this.length)
3297 return this[offset]
3298 }
3299
3300 Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3301 if (!noAssert) checkOffset(offset, 2, this.length)
3302 return this[offset] | (this[offset + 1] << 8)
3303 }
3304
3305 Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3306 if (!noAssert) checkOffset(offset, 2, this.length)
3307 return (this[offset] << 8) | this[offset + 1]
3308 }
3309
3310 Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3311 if (!noAssert) checkOffset(offset, 4, this.length)
3312
3313 return ((this[offset]) |
3314 (this[offset + 1] << 8) |
3315 (this[offset + 2] << 16)) +
3316 (this[offset + 3] * 0x1000000)
3317 }
3318
3319 Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3320 if (!noAssert) checkOffset(offset, 4, this.length)
3321
3322 return (this[offset] * 0x1000000) +
3323 ((this[offset + 1] << 16) |
3324 (this[offset + 2] << 8) |
3325 this[offset + 3])
3326 }
3327
3328 Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3329 offset = offset | 0
3330 byteLength = byteLength | 0
3331 if (!noAssert) checkOffset(offset, byteLength, this.length)
3332
3333 var val = this[offset]
3334 var mul = 1
3335 var i = 0
3336 while (++i < byteLength && (mul *= 0x100)) {
3337 val += this[offset + i] * mul
3338 }
3339 mul *= 0x80
3340
3341 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3342
3343 return val
3344 }
3345
3346 Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3347 offset = offset | 0
3348 byteLength = byteLength | 0
3349 if (!noAssert) checkOffset(offset, byteLength, this.length)
3350
3351 var i = byteLength
3352 var mul = 1
3353 var val = this[offset + --i]
3354 while (i > 0 && (mul *= 0x100)) {
3355 val += this[offset + --i] * mul
3356 }
3357 mul *= 0x80
3358
3359 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3360
3361 return val
3362 }
3363
3364 Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3365 if (!noAssert) checkOffset(offset, 1, this.length)
3366 if (!(this[offset] & 0x80)) return (this[offset])
3367 return ((0xff - this[offset] + 1) * -1)
3368 }
3369
3370 Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3371 if (!noAssert) checkOffset(offset, 2, this.length)
3372 var val = this[offset] | (this[offset + 1] << 8)
3373 return (val & 0x8000) ? val | 0xFFFF0000 : val
3374 }
3375
3376 Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3377 if (!noAssert) checkOffset(offset, 2, this.length)
3378 var val = this[offset + 1] | (this[offset] << 8)
3379 return (val & 0x8000) ? val | 0xFFFF0000 : val
3380 }
3381
3382 Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset, 4, this.length)
3384
3385 return (this[offset]) |
3386 (this[offset + 1] << 8) |
3387 (this[offset + 2] << 16) |
3388 (this[offset + 3] << 24)
3389 }
3390
3391 Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3392 if (!noAssert) checkOffset(offset, 4, this.length)
3393
3394 return (this[offset] << 24) |
3395 (this[offset + 1] << 16) |
3396 (this[offset + 2] << 8) |
3397 (this[offset + 3])
3398 }
3399
3400 Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3401 if (!noAssert) checkOffset(offset, 4, this.length)
3402 return ieee754.read(this, offset, true, 23, 4)
3403 }
3404
3405 Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3406 if (!noAssert) checkOffset(offset, 4, this.length)
3407 return ieee754.read(this, offset, false, 23, 4)
3408 }
3409
3410 Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3411 if (!noAssert) checkOffset(offset, 8, this.length)
3412 return ieee754.read(this, offset, true, 52, 8)
3413 }
3414
3415 Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3416 if (!noAssert) checkOffset(offset, 8, this.length)
3417 return ieee754.read(this, offset, false, 52, 8)
3418 }
3419
3420 function checkInt (buf, value, offset, ext, max, min) {
3421 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3422 if (value > max || value < min) throw new RangeError('value is out of bounds')
3423 if (offset + ext > buf.length) throw new RangeError('index out of range')
3424 }
3425
3426 Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3427 value = +value
3428 offset = offset | 0
3429 byteLength = byteLength | 0
3430 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3431
3432 var mul = 1
3433 var i = 0
3434 this[offset] = value & 0xFF
3435 while (++i < byteLength && (mul *= 0x100)) {
3436 this[offset + i] = (value / mul) & 0xFF
3437 }
3438
3439 return offset + byteLength
3440 }
3441
3442 Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3443 value = +value
3444 offset = offset | 0
3445 byteLength = byteLength | 0
3446 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
3447
3448 var i = byteLength - 1
3449 var mul = 1
3450 this[offset + i] = value & 0xFF
3451 while (--i >= 0 && (mul *= 0x100)) {
3452 this[offset + i] = (value / mul) & 0xFF
3453 }
3454
3455 return offset + byteLength
3456 }
3457
3458 Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3459 value = +value
3460 offset = offset | 0
3461 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3462 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3463 this[offset] = value
3464 return offset + 1
3465 }
3466
3467 function objectWriteUInt16 (buf, value, offset, littleEndian) {
3468 if (value < 0) value = 0xffff + value + 1
3469 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3470 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3471 (littleEndian ? i : 1 - i) * 8
3472 }
3473 }
3474
3475 Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3476 value = +value
3477 offset = offset | 0
3478 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3479 if (Buffer.TYPED_ARRAY_SUPPORT) {
3480 this[offset] = value
3481 this[offset + 1] = (value >>> 8)
3482 } else {
3483 objectWriteUInt16(this, value, offset, true)
3484 }
3485 return offset + 2
3486 }
3487
3488 Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3489 value = +value
3490 offset = offset | 0
3491 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3492 if (Buffer.TYPED_ARRAY_SUPPORT) {
3493 this[offset] = (value >>> 8)
3494 this[offset + 1] = value
3495 } else {
3496 objectWriteUInt16(this, value, offset, false)
3497 }
3498 return offset + 2
3499 }
3500
3501 function objectWriteUInt32 (buf, value, offset, littleEndian) {
3502 if (value < 0) value = 0xffffffff + value + 1
3503 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3504 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3505 }
3506 }
3507
3508 Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3509 value = +value
3510 offset = offset | 0
3511 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3512 if (Buffer.TYPED_ARRAY_SUPPORT) {
3513 this[offset + 3] = (value >>> 24)
3514 this[offset + 2] = (value >>> 16)
3515 this[offset + 1] = (value >>> 8)
3516 this[offset] = value
3517 } else {
3518 objectWriteUInt32(this, value, offset, true)
3519 }
3520 return offset + 4
3521 }
3522
3523 Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3524 value = +value
3525 offset = offset | 0
3526 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3527 if (Buffer.TYPED_ARRAY_SUPPORT) {
3528 this[offset] = (value >>> 24)
3529 this[offset + 1] = (value >>> 16)
3530 this[offset + 2] = (value >>> 8)
3531 this[offset + 3] = value
3532 } else {
3533 objectWriteUInt32(this, value, offset, false)
3534 }
3535 return offset + 4
3536 }
3537
3538 Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3539 value = +value
3540 offset = offset | 0
3541 if (!noAssert) {
3542 var limit = Math.pow(2, 8 * byteLength - 1)
3543
3544 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3545 }
3546
3547 var i = 0
3548 var mul = 1
3549 var sub = value < 0 ? 1 : 0
3550 this[offset] = value & 0xFF
3551 while (++i < byteLength && (mul *= 0x100)) {
3552 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3553 }
3554
3555 return offset + byteLength
3556 }
3557
3558 Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3559 value = +value
3560 offset = offset | 0
3561 if (!noAssert) {
3562 var limit = Math.pow(2, 8 * byteLength - 1)
3563
3564 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3565 }
3566
3567 var i = byteLength - 1
3568 var mul = 1
3569 var sub = value < 0 ? 1 : 0
3570 this[offset + i] = value & 0xFF
3571 while (--i >= 0 && (mul *= 0x100)) {
3572 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3573 }
3574
3575 return offset + byteLength
3576 }
3577
3578 Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3579 value = +value
3580 offset = offset | 0
3581 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3582 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3583 if (value < 0) value = 0xff + value + 1
3584 this[offset] = value
3585 return offset + 1
3586 }
3587
3588 Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3589 value = +value
3590 offset = offset | 0
3591 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3592 if (Buffer.TYPED_ARRAY_SUPPORT) {
3593 this[offset] = value
3594 this[offset + 1] = (value >>> 8)
3595 } else {
3596 objectWriteUInt16(this, value, offset, true)
3597 }
3598 return offset + 2
3599 }
3600
3601 Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3602 value = +value
3603 offset = offset | 0
3604 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3605 if (Buffer.TYPED_ARRAY_SUPPORT) {
3606 this[offset] = (value >>> 8)
3607 this[offset + 1] = value
3608 } else {
3609 objectWriteUInt16(this, value, offset, false)
3610 }
3611 return offset + 2
3612 }
3613
3614 Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3615 value = +value
3616 offset = offset | 0
3617 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3618 if (Buffer.TYPED_ARRAY_SUPPORT) {
3619 this[offset] = value
3620 this[offset + 1] = (value >>> 8)
3621 this[offset + 2] = (value >>> 16)
3622 this[offset + 3] = (value >>> 24)
3623 } else {
3624 objectWriteUInt32(this, value, offset, true)
3625 }
3626 return offset + 4
3627 }
3628
3629 Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3630 value = +value
3631 offset = offset | 0
3632 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3633 if (value < 0) value = 0xffffffff + value + 1
3634 if (Buffer.TYPED_ARRAY_SUPPORT) {
3635 this[offset] = (value >>> 24)
3636 this[offset + 1] = (value >>> 16)
3637 this[offset + 2] = (value >>> 8)
3638 this[offset + 3] = value
3639 } else {
3640 objectWriteUInt32(this, value, offset, false)
3641 }
3642 return offset + 4
3643 }
3644
3645 function checkIEEE754 (buf, value, offset, ext, max, min) {
3646 if (value > max || value < min) throw new RangeError('value is out of bounds')
3647 if (offset + ext > buf.length) throw new RangeError('index out of range')
3648 if (offset < 0) throw new RangeError('index out of range')
3649 }
3650
3651 function writeFloat (buf, value, offset, littleEndian, noAssert) {
3652 if (!noAssert) {
3653 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3654 }
3655 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3656 return offset + 4
3657 }
3658
3659 Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3660 return writeFloat(this, value, offset, true, noAssert)
3661 }
3662
3663 Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3664 return writeFloat(this, value, offset, false, noAssert)
3665 }
3666
3667 function writeDouble (buf, value, offset, littleEndian, noAssert) {
3668 if (!noAssert) {
3669 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3670 }
3671 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3672 return offset + 8
3673 }
3674
3675 Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3676 return writeDouble(this, value, offset, true, noAssert)
3677 }
3678
3679 Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3680 return writeDouble(this, value, offset, false, noAssert)
3681 }
3682
3683 // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3684 Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3685 if (!start) start = 0
3686 if (!end && end !== 0) end = this.length
3687 if (targetStart >= target.length) targetStart = target.length
3688 if (!targetStart) targetStart = 0
3689 if (end > 0 && end < start) end = start
3690
3691 // Copy 0 bytes; we're done
3692 if (end === start) return 0
3693 if (target.length === 0 || this.length === 0) return 0
3694
3695 // Fatal error conditions
3696 if (targetStart < 0) {
3697 throw new RangeError('targetStart out of bounds')
3698 }
3699 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3700 if (end < 0) throw new RangeError('sourceEnd out of bounds')
3701
3702 // Are we oob?
3703 if (end > this.length) end = this.length
3704 if (target.length - targetStart < end - start) {
3705 end = target.length - targetStart + start
3706 }
3707
3708 var len = end - start
3709 var i
3710
3711 if (this === target && start < targetStart && targetStart < end) {
3712 // descending copy from end
3713 for (i = len - 1; i >= 0; i--) {
3714 target[i + targetStart] = this[i + start]
3715 }
3716 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3717 // ascending copy from start
3718 for (i = 0; i < len; i++) {
3719 target[i + targetStart] = this[i + start]
3720 }
3721 } else {
3722 target._set(this.subarray(start, start + len), targetStart)
3723 }
3724
3725 return len
3726 }
3727
3728 // fill(value, start=0, end=buffer.length)
3729 Buffer.prototype.fill = function fill (value, start, end) {
3730 if (!value) value = 0
3731 if (!start) start = 0
3732 if (!end) end = this.length
3733
3734 if (end < start) throw new RangeError('end < start')
3735
3736 // Fill 0 bytes; we're done
3737 if (end === start) return
3738 if (this.length === 0) return
3739
3740 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3741 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
3742
3743 var i
3744 if (typeof value === 'number') {
3745 for (i = start; i < end; i++) {
3746 this[i] = value
3747 }
3748 } else {
3749 var bytes = utf8ToBytes(value.toString())
3750 var len = bytes.length
3751 for (i = start; i < end; i++) {
3752 this[i] = bytes[i % len]
3753 }
3754 }
3755
3756 return this
3757 }
3758
3759 /**
3760 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3761 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3762 */
3763 Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3764 if (typeof Uint8Array !== 'undefined') {
3765 if (Buffer.TYPED_ARRAY_SUPPORT) {
3766 return (new Buffer(this)).buffer
3767 } else {
3768 var buf = new Uint8Array(this.length)
3769 for (var i = 0, len = buf.length; i < len; i += 1) {
3770 buf[i] = this[i]
3771 }
3772 return buf.buffer
3773 }
3774 } else {
3775 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
3776 }
3777 }
3778
3779 // HELPER FUNCTIONS
3780 // ================
3781
3782 var BP = Buffer.prototype
3783
3784 /**
3785 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3786 */
3787 Buffer._augment = function _augment (arr) {
3788 arr.constructor = Buffer
3789 arr._isBuffer = true
3790
3791 // save reference to original Uint8Array set method before overwriting
3792 arr._set = arr.set
3793
3794 // deprecated
3795 arr.get = BP.get
3796 arr.set = BP.set
3797
3798 arr.write = BP.write
3799 arr.toString = BP.toString
3800 arr.toLocaleString = BP.toString
3801 arr.toJSON = BP.toJSON
3802 arr.equals = BP.equals
3803 arr.compare = BP.compare
3804 arr.indexOf = BP.indexOf
3805 arr.copy = BP.copy
3806 arr.slice = BP.slice
3807 arr.readUIntLE = BP.readUIntLE
3808 arr.readUIntBE = BP.readUIntBE
3809 arr.readUInt8 = BP.readUInt8
3810 arr.readUInt16LE = BP.readUInt16LE
3811 arr.readUInt16BE = BP.readUInt16BE
3812 arr.readUInt32LE = BP.readUInt32LE
3813 arr.readUInt32BE = BP.readUInt32BE
3814 arr.readIntLE = BP.readIntLE
3815 arr.readIntBE = BP.readIntBE
3816 arr.readInt8 = BP.readInt8
3817 arr.readInt16LE = BP.readInt16LE
3818 arr.readInt16BE = BP.readInt16BE
3819 arr.readInt32LE = BP.readInt32LE
3820 arr.readInt32BE = BP.readInt32BE
3821 arr.readFloatLE = BP.readFloatLE
3822 arr.readFloatBE = BP.readFloatBE
3823 arr.readDoubleLE = BP.readDoubleLE
3824 arr.readDoubleBE = BP.readDoubleBE
3825 arr.writeUInt8 = BP.writeUInt8
3826 arr.writeUIntLE = BP.writeUIntLE
3827 arr.writeUIntBE = BP.writeUIntBE
3828 arr.writeUInt16LE = BP.writeUInt16LE
3829 arr.writeUInt16BE = BP.writeUInt16BE
3830 arr.writeUInt32LE = BP.writeUInt32LE
3831 arr.writeUInt32BE = BP.writeUInt32BE
3832 arr.writeIntLE = BP.writeIntLE
3833 arr.writeIntBE = BP.writeIntBE
3834 arr.writeInt8 = BP.writeInt8
3835 arr.writeInt16LE = BP.writeInt16LE
3836 arr.writeInt16BE = BP.writeInt16BE
3837 arr.writeInt32LE = BP.writeInt32LE
3838 arr.writeInt32BE = BP.writeInt32BE
3839 arr.writeFloatLE = BP.writeFloatLE
3840 arr.writeFloatBE = BP.writeFloatBE
3841 arr.writeDoubleLE = BP.writeDoubleLE
3842 arr.writeDoubleBE = BP.writeDoubleBE
3843 arr.fill = BP.fill
3844 arr.inspect = BP.inspect
3845 arr.toArrayBuffer = BP.toArrayBuffer
3846
3847 return arr
3848 }
3849
3850 var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
3851
3852 function base64clean (str) {
3853 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3854 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3855 // Node converts strings with length < 2 to ''
3856 if (str.length < 2) return ''
3857 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3858 while (str.length % 4 !== 0) {
3859 str = str + '='
3860 }
3861 return str
3862 }
3863
3864 function stringtrim (str) {
3865 if (str.trim) return str.trim()
3866 return str.replace(/^\s+|\s+$/g, '')
3867 }
3868
3869 function toHex (n) {
3870 if (n < 16) return '0' + n.toString(16)
3871 return n.toString(16)
3872 }
3873
3874 function utf8ToBytes (string, units) {
3875 units = units || Infinity
3876 var codePoint
3877 var length = string.length
3878 var leadSurrogate = null
3879 var bytes = []
3880
3881 for (var i = 0; i < length; i++) {
3882 codePoint = string.charCodeAt(i)
3883
3884 // is surrogate component
3885 if (codePoint > 0xD7FF && codePoint < 0xE000) {
3886 // last char was a lead
3887 if (!leadSurrogate) {
3888 // no lead yet
3889 if (codePoint > 0xDBFF) {
3890 // unexpected trail
3891 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3892 continue
3893
3894 } else if (i + 1 === length) {
3895 // unpaired lead
3896 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3897 continue
3898 }
3899
3900 // valid lead
3901 leadSurrogate = codePoint
3902
3903 continue
3904 }
3905
3906 // 2 leads in a row
3907 if (codePoint < 0xDC00) {
3908 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3909 leadSurrogate = codePoint
3910 continue
3911 }
3912
3913 // valid surrogate pair
3914 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
3915
3916 } else if (leadSurrogate) {
3917 // valid bmp char, but last char was a lead
3918 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3919 }
3920
3921 leadSurrogate = null
3922
3923 // encode utf8
3924 if (codePoint < 0x80) {
3925 if ((units -= 1) < 0) break
3926 bytes.push(codePoint)
3927 } else if (codePoint < 0x800) {
3928 if ((units -= 2) < 0) break
3929 bytes.push(
3930 codePoint >> 0x6 | 0xC0,
3931 codePoint & 0x3F | 0x80
3932 )
3933 } else if (codePoint < 0x10000) {
3934 if ((units -= 3) < 0) break
3935 bytes.push(
3936 codePoint >> 0xC | 0xE0,
3937 codePoint >> 0x6 & 0x3F | 0x80,
3938 codePoint & 0x3F | 0x80
3939 )
3940 } else if (codePoint < 0x110000) {
3941 if ((units -= 4) < 0) break
3942 bytes.push(
3943 codePoint >> 0x12 | 0xF0,
3944 codePoint >> 0xC & 0x3F | 0x80,
3945 codePoint >> 0x6 & 0x3F | 0x80,
3946 codePoint & 0x3F | 0x80
3947 )
3948 } else {
3949 throw new Error('Invalid code point')
3950 }
3951 }
3952
3953 return bytes
3954 }
3955
3956 function asciiToBytes (str) {
3957 var byteArray = []
3958 for (var i = 0; i < str.length; i++) {
3959 // Node's code seems to be doing this and not & 0x7F..
3960 byteArray.push(str.charCodeAt(i) & 0xFF)
3961 }
3962 return byteArray
3963 }
3964
3965 function utf16leToBytes (str, units) {
3966 var c, hi, lo
3967 var byteArray = []
3968 for (var i = 0; i < str.length; i++) {
3969 if ((units -= 2) < 0) break
3970
3971 c = str.charCodeAt(i)
3972 hi = c >> 8
3973 lo = c % 256
3974 byteArray.push(lo)
3975 byteArray.push(hi)
3976 }
3977
3978 return byteArray
3979 }
3980
3981 function base64ToBytes (str) {
3982 return base64.toByteArray(base64clean(str))
3983 }
3984
3985 function blitBuffer (src, dst, offset, length) {
3986 for (var i = 0; i < length; i++) {
3987 if ((i + offset >= dst.length) || (i >= src.length)) break
3988 dst[i + offset] = src[i]
3989 }
3990 return i
3991 }
3992
3993 },{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
3994 var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3995
3996 ;(function (exports) {
3997 'use strict';
3998
3999 var Arr = (typeof Uint8Array !== 'undefined')
4000 ? Uint8Array
4001 : Array
4002
4003 var PLUS = '+'.charCodeAt(0)
4004 var SLASH = '/'.charCodeAt(0)
4005 var NUMBER = '0'.charCodeAt(0)
4006 var LOWER = 'a'.charCodeAt(0)
4007 var UPPER = 'A'.charCodeAt(0)
4008 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4009 var SLASH_URL_SAFE = '_'.charCodeAt(0)
4010
4011 function decode (elt) {
4012 var code = elt.charCodeAt(0)
4013 if (code === PLUS ||
4014 code === PLUS_URL_SAFE)
4015 return 62 // '+'
4016 if (code === SLASH ||
4017 code === SLASH_URL_SAFE)
4018 return 63 // '/'
4019 if (code < NUMBER)
4020 return -1 //no match
4021 if (code < NUMBER + 10)
4022 return code - NUMBER + 26 + 26
4023 if (code < UPPER + 26)
4024 return code - UPPER
4025 if (code < LOWER + 26)
4026 return code - LOWER + 26
4027 }
4028
4029 function b64ToByteArray (b64) {
4030 var i, j, l, tmp, placeHolders, arr
4031
4032 if (b64.length % 4 > 0) {
4033 throw new Error('Invalid string. Length must be a multiple of 4')
4034 }
4035
4036 // the number of equal signs (place holders)
4037 // if there are two placeholders, than the two characters before it
4038 // represent one byte
4039 // if there is only one, then the three characters before it represent 2 bytes
4040 // this is just a cheap hack to not do indexOf twice
4041 var len = b64.length
4042 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
4043
4044 // base64 is 4/3 + up to two characters of the original data
4045 arr = new Arr(b64.length * 3 / 4 - placeHolders)
4046
4047 // if there are placeholders, only get up to the last complete 4 chars
4048 l = placeHolders > 0 ? b64.length - 4 : b64.length
4049
4050 var L = 0
4051
4052 function push (v) {
4053 arr[L++] = v
4054 }
4055
4056 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4057 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4058 push((tmp & 0xFF0000) >> 16)
4059 push((tmp & 0xFF00) >> 8)
4060 push(tmp & 0xFF)
4061 }
4062
4063 if (placeHolders === 2) {
4064 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4065 push(tmp & 0xFF)
4066 } else if (placeHolders === 1) {
4067 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4068 push((tmp >> 8) & 0xFF)
4069 push(tmp & 0xFF)
4070 }
4071
4072 return arr
4073 }
4074
4075 function uint8ToBase64 (uint8) {
4076 var i,
4077 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4078 output = "",
4079 temp, length
4080
4081 function encode (num) {
4082 return lookup.charAt(num)
4083 }
4084
4085 function tripletToBase64 (num) {
4086 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4087 }
4088
4089 // go through the array every three bytes, we'll deal with trailing stuff later
4090 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4091 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4092 output += tripletToBase64(temp)
4093 }
4094
4095 // pad the end with zeros, but make sure to not forget the extra bytes
4096 switch (extraBytes) {
4097 case 1:
4098 temp = uint8[uint8.length - 1]
4099 output += encode(temp >> 2)
4100 output += encode((temp << 4) & 0x3F)
4101 output += '=='
4102 break
4103 case 2:
4104 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4105 output += encode(temp >> 10)
4106 output += encode((temp >> 4) & 0x3F)
4107 output += encode((temp << 2) & 0x3F)
4108 output += '='
4109 break
4110 }
4111
4112 return output
4113 }
4114
4115 exports.toByteArray = b64ToByteArray
4116 exports.fromByteArray = uint8ToBase64
4117 }(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
4118
4119 },{}],9:[function(require,module,exports){
4120 exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4121 var e, m
4122 var eLen = nBytes * 8 - mLen - 1
4123 var eMax = (1 << eLen) - 1
4124 var eBias = eMax >> 1
4125 var nBits = -7
4126 var i = isLE ? (nBytes - 1) : 0
4127 var d = isLE ? -1 : 1
4128 var s = buffer[offset + i]
4129
4130 i += d
4131
4132 e = s & ((1 << (-nBits)) - 1)
4133 s >>= (-nBits)
4134 nBits += eLen
4135 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4136
4137 m = e & ((1 << (-nBits)) - 1)
4138 e >>= (-nBits)
4139 nBits += mLen
4140 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4141
4142 if (e === 0) {
4143 e = 1 - eBias
4144 } else if (e === eMax) {
4145 return m ? NaN : ((s ? -1 : 1) * Infinity)
4146 } else {
4147 m = m + Math.pow(2, mLen)
4148 e = e - eBias
4149 }
4150 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
4151 }
4152
4153 exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4154 var e, m, c
4155 var eLen = nBytes * 8 - mLen - 1
4156 var eMax = (1 << eLen) - 1
4157 var eBias = eMax >> 1
4158 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4159 var i = isLE ? 0 : (nBytes - 1)
4160 var d = isLE ? 1 : -1
4161 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
4162
4163 value = Math.abs(value)
4164
4165 if (isNaN(value) || value === Infinity) {
4166 m = isNaN(value) ? 1 : 0
4167 e = eMax
4168 } else {
4169 e = Math.floor(Math.log(value) / Math.LN2)
4170 if (value * (c = Math.pow(2, -e)) < 1) {
4171 e--
4172 c *= 2
4173 }
4174 if (e + eBias >= 1) {
4175 value += rt / c
4176 } else {
4177 value += rt * Math.pow(2, 1 - eBias)
4178 }
4179 if (value * c >= 2) {
4180 e++
4181 c /= 2
4182 }
4183
4184 if (e + eBias >= eMax) {
4185 m = 0
4186 e = eMax
4187 } else if (e + eBias >= 1) {
4188 m = (value * c - 1) * Math.pow(2, mLen)
4189 e = e + eBias
4190 } else {
4191 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4192 e = 0
4193 }
4194 }
4195
4196 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
4197
4198 e = (e << mLen) | m
4199 eLen += mLen
4200 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
4201
4202 buffer[offset + i - d] |= s * 128
4203 }
4204
4205 },{}],10:[function(require,module,exports){
4206
4207 /**
4208 * isArray
4209 */
4210
4211 var isArray = Array.isArray;
4212
4213 /**
4214 * toString
4215 */
4216
4217 var str = Object.prototype.toString;
4218
4219 /**
4220 * Whether or not the given `val`
4221 * is an array.
4222 *
4223 * example:
4224 *
4225 * isArray([]);
4226 * // > true
4227 * isArray(arguments);
4228 * // > false
4229 * isArray('');
4230 * // > false
4231 *
4232 * @param {mixed} val
4233 * @return {bool}
4234 */
4235
4236 module.exports = isArray || function (val) {
4237 return !! val && '[object Array]' == str.call(val);
4238 };
4239
4240 },{}],11:[function(require,module,exports){
4241 // Copyright Joyent, Inc. and other Node contributors.
4242 //
4243 // Permission is hereby granted, free of charge, to any person obtaining a
4244 // copy of this software and associated documentation files (the
4245 // "Software"), to deal in the Software without restriction, including
4246 // without limitation the rights to use, copy, modify, merge, publish,
4247 // distribute, sublicense, and/or sell copies of the Software, and to permit
4248 // persons to whom the Software is furnished to do so, subject to the
4249 // following conditions:
4250 //
4251 // The above copyright notice and this permission notice shall be included
4252 // in all copies or substantial portions of the Software.
4253 //
4254 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4255 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4256 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4257 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4258 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4259 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4260 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4261
4262 function EventEmitter() {
4263 this._events = this._events || {};
4264 this._maxListeners = this._maxListeners || undefined;
4265 }
4266 module.exports = EventEmitter;
4267
4268 // Backwards-compat with node 0.10.x
4269 EventEmitter.EventEmitter = EventEmitter;
4270
4271 EventEmitter.prototype._events = undefined;
4272 EventEmitter.prototype._maxListeners = undefined;
4273
4274 // By default EventEmitters will print a warning if more than 10 listeners are
4275 // added to it. This is a useful default which helps finding memory leaks.
4276 EventEmitter.defaultMaxListeners = 10;
4277
4278 // Obviously not all Emitters should be limited to 10. This function allows
4279 // that to be increased. Set to zero for unlimited.
4280 EventEmitter.prototype.setMaxListeners = function(n) {
4281 if (!isNumber(n) || n < 0 || isNaN(n))
4282 throw TypeError('n must be a positive number');
4283 this._maxListeners = n;
4284 return this;
4285 };
4286
4287 EventEmitter.prototype.emit = function(type) {
4288 var er, handler, len, args, i, listeners;
4289
4290 if (!this._events)
4291 this._events = {};
4292
4293 // If there is no 'error' event listener then throw.
4294 if (type === 'error') {
4295 if (!this._events.error ||
4296 (isObject(this._events.error) && !this._events.error.length)) {
4297 er = arguments[1];
4298 if (er instanceof Error) {
4299 throw er; // Unhandled 'error' event
4300 }
4301 throw TypeError('Uncaught, unspecified "error" event.');
4302 }
4303 }
4304
4305 handler = this._events[type];
4306
4307 if (isUndefined(handler))
4308 return false;
4309
4310 if (isFunction(handler)) {
4311 switch (arguments.length) {
4312 // fast cases
4313 case 1:
4314 handler.call(this);
4315 break;
4316 case 2:
4317 handler.call(this, arguments[1]);
4318 break;
4319 case 3:
4320 handler.call(this, arguments[1], arguments[2]);
4321 break;
4322 // slower
4323 default:
4324 len = arguments.length;
4325 args = new Array(len - 1);
4326 for (i = 1; i < len; i++)
4327 args[i - 1] = arguments[i];
4328 handler.apply(this, args);
4329 }
4330 } else if (isObject(handler)) {
4331 len = arguments.length;
4332 args = new Array(len - 1);
4333 for (i = 1; i < len; i++)
4334 args[i - 1] = arguments[i];
4335
4336 listeners = handler.slice();
4337 len = listeners.length;
4338 for (i = 0; i < len; i++)
4339 listeners[i].apply(this, args);
4340 }
4341
4342 return true;
4343 };
4344
4345 EventEmitter.prototype.addListener = function(type, listener) {
4346 var m;
4347
4348 if (!isFunction(listener))
4349 throw TypeError('listener must be a function');
4350
4351 if (!this._events)
4352 this._events = {};
4353
4354 // To avoid recursion in the case that type === "newListener"! Before
4355 // adding it to the listeners, first emit "newListener".
4356 if (this._events.newListener)
4357 this.emit('newListener', type,
4358 isFunction(listener.listener) ?
4359 listener.listener : listener);
4360
4361 if (!this._events[type])
4362 // Optimize the case of one listener. Don't need the extra array object.
4363 this._events[type] = listener;
4364 else if (isObject(this._events[type]))
4365 // If we've already got an array, just append.
4366 this._events[type].push(listener);
4367 else
4368 // Adding the second element, need to change to array.
4369 this._events[type] = [this._events[type], listener];
4370
4371 // Check for listener leak
4372 if (isObject(this._events[type]) && !this._events[type].warned) {
4373 var m;
4374 if (!isUndefined(this._maxListeners)) {
4375 m = this._maxListeners;
4376 } else {
4377 m = EventEmitter.defaultMaxListeners;
4378 }
4379
4380 if (m && m > 0 && this._events[type].length > m) {
4381 this._events[type].warned = true;
4382 console.error('(node) warning: possible EventEmitter memory ' +
4383 'leak detected. %d listeners added. ' +
4384 'Use emitter.setMaxListeners() to increase limit.',
4385 this._events[type].length);
4386 if (typeof console.trace === 'function') {
4387 // not supported in IE 10
4388 console.trace();
4389 }
4390 }
4391 }
4392
4393 return this;
4394 };
4395
4396 EventEmitter.prototype.on = EventEmitter.prototype.addListener;
4397
4398 EventEmitter.prototype.once = function(type, listener) {
4399 if (!isFunction(listener))
4400 throw TypeError('listener must be a function');
4401
4402 var fired = false;
4403
4404 function g() {
4405 this.removeListener(type, g);
4406
4407 if (!fired) {
4408 fired = true;
4409 listener.apply(this, arguments);
4410 }
4411 }
4412
4413 g.listener = listener;
4414 this.on(type, g);
4415
4416 return this;
4417 };
4418
4419 // emits a 'removeListener' event iff the listener was removed
4420 EventEmitter.prototype.removeListener = function(type, listener) {
4421 var list, position, length, i;
4422
4423 if (!isFunction(listener))
4424 throw TypeError('listener must be a function');
4425
4426 if (!this._events || !this._events[type])
4427 return this;
4428
4429 list = this._events[type];
4430 length = list.length;
4431 position = -1;
4432
4433 if (list === listener ||
4434 (isFunction(list.listener) && list.listener === listener)) {
4435 delete this._events[type];
4436 if (this._events.removeListener)
4437 this.emit('removeListener', type, listener);
4438
4439 } else if (isObject(list)) {
4440 for (i = length; i-- > 0;) {
4441 if (list[i] === listener ||
4442 (list[i].listener && list[i].listener === listener)) {
4443 position = i;
4444 break;
4445 }
4446 }
4447
4448 if (position < 0)
4449 return this;
4450
4451 if (list.length === 1) {
4452 list.length = 0;
4453 delete this._events[type];
4454 } else {
4455 list.splice(position, 1);
4456 }
4457
4458 if (this._events.removeListener)
4459 this.emit('removeListener', type, listener);
4460 }
4461
4462 return this;
4463 };
4464
4465 EventEmitter.prototype.removeAllListeners = function(type) {
4466 var key, listeners;
4467
4468 if (!this._events)
4469 return this;
4470
4471 // not listening for removeListener, no need to emit
4472 if (!this._events.removeListener) {
4473 if (arguments.length === 0)
4474 this._events = {};
4475 else if (this._events[type])
4476 delete this._events[type];
4477 return this;
4478 }
4479
4480 // emit removeListener for all listeners on all events
4481 if (arguments.length === 0) {
4482 for (key in this._events) {
4483 if (key === 'removeListener') continue;
4484 this.removeAllListeners(key);
4485 }
4486 this.removeAllListeners('removeListener');
4487 this._events = {};
4488 return this;
4489 }
4490
4491 listeners = this._events[type];
4492
4493 if (isFunction(listeners)) {
4494 this.removeListener(type, listeners);
4495 } else {
4496 // LIFO order
4497 while (listeners.length)
4498 this.removeListener(type, listeners[listeners.length - 1]);
4499 }
4500 delete this._events[type];
4501
4502 return this;
4503 };
4504
4505 EventEmitter.prototype.listeners = function(type) {
4506 var ret;
4507 if (!this._events || !this._events[type])
4508 ret = [];
4509 else if (isFunction(this._events[type]))
4510 ret = [this._events[type]];
4511 else
4512 ret = this._events[type].slice();
4513 return ret;
4514 };
4515
4516 EventEmitter.listenerCount = function(emitter, type) {
4517 var ret;
4518 if (!emitter._events || !emitter._events[type])
4519 ret = 0;
4520 else if (isFunction(emitter._events[type]))
4521 ret = 1;
4522 else
4523 ret = emitter._events[type].length;
4524 return ret;
4525 };
4526
4527 function isFunction(arg) {
4528 return typeof arg === 'function';
4529 }
4530
4531 function isNumber(arg) {
4532 return typeof arg === 'number';
4533 }
4534
4535 function isObject(arg) {
4536 return typeof arg === 'object' && arg !== null;
4537 }
4538
4539 function isUndefined(arg) {
4540 return arg === void 0;
4541 }
4542
4543 },{}],12:[function(require,module,exports){
4544 if (typeof Object.create === 'function') {
4545 // implementation from standard node.js 'util' module
4546 module.exports = function inherits(ctor, superCtor) {
4547 ctor.super_ = superCtor
4548 ctor.prototype = Object.create(superCtor.prototype, {
4549 constructor: {
4550 value: ctor,
4551 enumerable: false,
4552 writable: true,
4553 configurable: true
4554 }
4555 });
4556 };
4557 } else {
4558 // old school shim for old browsers
4559 module.exports = function inherits(ctor, superCtor) {
4560 ctor.super_ = superCtor
4561 var TempCtor = function () {}
4562 TempCtor.prototype = superCtor.prototype
4563 ctor.prototype = new TempCtor()
4564 ctor.prototype.constructor = ctor
4565 }
4566 }
4567
4568 },{}],13:[function(require,module,exports){
4569 module.exports = Array.isArray || function (arr) {
4570 return Object.prototype.toString.call(arr) == '[object Array]';
4571 };
4572
4573 },{}],14:[function(require,module,exports){
4574 // shim for using process in browser
4575
4576 var process = module.exports = {};
4577 var queue = [];
4578 var draining = false;
4579 var currentQueue;
4580 var queueIndex = -1;
4581
4582 function cleanUpNextTick() {
4583 draining = false;
4584 if (currentQueue.length) {
4585 queue = currentQueue.concat(queue);
4586 } else {
4587 queueIndex = -1;
4588 }
4589 if (queue.length) {
4590 drainQueue();
4591 }
4592 }
4593
4594 function drainQueue() {
4595 if (draining) {
4596 return;
4597 }
4598 var timeout = setTimeout(cleanUpNextTick);
4599 draining = true;
4600
4601 var len = queue.length;
4602 while(len) {
4603 currentQueue = queue;
4604 queue = [];
4605 while (++queueIndex < len) {
4606 currentQueue[queueIndex].run();
4607 }
4608 queueIndex = -1;
4609 len = queue.length;
4610 }
4611 currentQueue = null;
4612 draining = false;
4613 clearTimeout(timeout);
4614 }
4615
4616 process.nextTick = function (fun) {
4617 var args = new Array(arguments.length - 1);
4618 if (arguments.length > 1) {
4619 for (var i = 1; i < arguments.length; i++) {
4620 args[i - 1] = arguments[i];
4621 }
4622 }
4623 queue.push(new Item(fun, args));
4624 if (queue.length === 1 && !draining) {
4625 setTimeout(drainQueue, 0);
4626 }
4627 };
4628
4629 // v8 likes predictible objects
4630 function Item(fun, array) {
4631 this.fun = fun;
4632 this.array = array;
4633 }
4634 Item.prototype.run = function () {
4635 this.fun.apply(null, this.array);
4636 };
4637 process.title = 'browser';
4638 process.browser = true;
4639 process.env = {};
4640 process.argv = [];
4641 process.version = ''; // empty string to avoid regexp issues
4642 process.versions = {};
4643
4644 function noop() {}
4645
4646 process.on = noop;
4647 process.addListener = noop;
4648 process.once = noop;
4649 process.off = noop;
4650 process.removeListener = noop;
4651 process.removeAllListeners = noop;
4652 process.emit = noop;
4653
4654 process.binding = function (name) {
4655 throw new Error('process.binding is not supported');
4656 };
4657
4658 // TODO(shtylman)
4659 process.cwd = function () { return '/' };
4660 process.chdir = function (dir) {
4661 throw new Error('process.chdir is not supported');
4662 };
4663 process.umask = function() { return 0; };
4664
4665 },{}],15:[function(require,module,exports){
4666 module.exports = require("./lib/_stream_duplex.js")
4667
4668 },{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4669 (function (process){
4670 // Copyright Joyent, Inc. and other Node contributors.
4671 //
4672 // Permission is hereby granted, free of charge, to any person obtaining a
4673 // copy of this software and associated documentation files (the
4674 // "Software"), to deal in the Software without restriction, including
4675 // without limitation the rights to use, copy, modify, merge, publish,
4676 // distribute, sublicense, and/or sell copies of the Software, and to permit
4677 // persons to whom the Software is furnished to do so, subject to the
4678 // following conditions:
4679 //
4680 // The above copyright notice and this permission notice shall be included
4681 // in all copies or substantial portions of the Software.
4682 //
4683 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4684 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4685 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4686 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4687 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4688 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4689 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4690
4691 // a duplex stream is just a stream that is both readable and writable.
4692 // Since JS doesn't have multiple prototypal inheritance, this class
4693 // prototypally inherits from Readable, and then parasitically from
4694 // Writable.
4695
4696 module.exports = Duplex;
4697
4698 /*<replacement>*/
4699 var objectKeys = Object.keys || function (obj) {
4700 var keys = [];
4701 for (var key in obj) keys.push(key);
4702 return keys;
4703 }
4704 /*</replacement>*/
4705
4706
4707 /*<replacement>*/
4708 var util = require('core-util-is');
4709 util.inherits = require('inherits');
4710 /*</replacement>*/
4711
4712 var Readable = require('./_stream_readable');
4713 var Writable = require('./_stream_writable');
4714
4715 util.inherits(Duplex, Readable);
4716
4717 forEach(objectKeys(Writable.prototype), function(method) {
4718 if (!Duplex.prototype[method])
4719 Duplex.prototype[method] = Writable.prototype[method];
4720 });
4721
4722 function Duplex(options) {
4723 if (!(this instanceof Duplex))
4724 return new Duplex(options);
4725
4726 Readable.call(this, options);
4727 Writable.call(this, options);
4728
4729 if (options && options.readable === false)
4730 this.readable = false;
4731
4732 if (options && options.writable === false)
4733 this.writable = false;
4734
4735 this.allowHalfOpen = true;
4736 if (options && options.allowHalfOpen === false)
4737 this.allowHalfOpen = false;
4738
4739 this.once('end', onend);
4740 }
4741
4742 // the no-half-open enforcer
4743 function onend() {
4744 // if we allow half-open state, or if the writable side ended,
4745 // then we're ok.
4746 if (this.allowHalfOpen || this._writableState.ended)
4747 return;
4748
4749 // no more data can be written.
4750 // But allow more writes to happen in this tick.
4751 process.nextTick(this.end.bind(this));
4752 }
4753
4754 function forEach (xs, f) {
4755 for (var i = 0, l = xs.length; i < l; i++) {
4756 f(xs[i], i);
4757 }
4758 }
4759
4760 }).call(this,require('_process'))
4761 },{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4762 // Copyright Joyent, Inc. and other Node contributors.
4763 //
4764 // Permission is hereby granted, free of charge, to any person obtaining a
4765 // copy of this software and associated documentation files (the
4766 // "Software"), to deal in the Software without restriction, including
4767 // without limitation the rights to use, copy, modify, merge, publish,
4768 // distribute, sublicense, and/or sell copies of the Software, and to permit
4769 // persons to whom the Software is furnished to do so, subject to the
4770 // following conditions:
4771 //
4772 // The above copyright notice and this permission notice shall be included
4773 // in all copies or substantial portions of the Software.
4774 //
4775 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4776 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4777 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4778 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4779 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4780 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4781 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4782
4783 // a passthrough stream.
4784 // basically just the most minimal sort of Transform stream.
4785 // Every written chunk gets output as-is.
4786
4787 module.exports = PassThrough;
4788
4789 var Transform = require('./_stream_transform');
4790
4791 /*<replacement>*/
4792 var util = require('core-util-is');
4793 util.inherits = require('inherits');
4794 /*</replacement>*/
4795
4796 util.inherits(PassThrough, Transform);
4797
4798 function PassThrough(options) {
4799 if (!(this instanceof PassThrough))
4800 return new PassThrough(options);
4801
4802 Transform.call(this, options);
4803 }
4804
4805 PassThrough.prototype._transform = function(chunk, encoding, cb) {
4806 cb(null, chunk);
4807 };
4808
4809 },{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
4810 (function (process){
4811 // Copyright Joyent, Inc. and other Node contributors.
4812 //
4813 // Permission is hereby granted, free of charge, to any person obtaining a
4814 // copy of this software and associated documentation files (the
4815 // "Software"), to deal in the Software without restriction, including
4816 // without limitation the rights to use, copy, modify, merge, publish,
4817 // distribute, sublicense, and/or sell copies of the Software, and to permit
4818 // persons to whom the Software is furnished to do so, subject to the
4819 // following conditions:
4820 //
4821 // The above copyright notice and this permission notice shall be included
4822 // in all copies or substantial portions of the Software.
4823 //
4824 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4825 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4826 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4827 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4828 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4829 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4830 // USE OR OTHER DEALINGS IN THE SOFTWARE.
4831
4832 module.exports = Readable;
4833
4834 /*<replacement>*/
4835 var isArray = require('isarray');
4836 /*</replacement>*/
4837
4838
4839 /*<replacement>*/
4840 var Buffer = require('buffer').Buffer;
4841 /*</replacement>*/
4842
4843 Readable.ReadableState = ReadableState;
4844
4845 var EE = require('events').EventEmitter;
4846
4847 /*<replacement>*/
4848 if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4849 return emitter.listeners(type).length;
4850 };
4851 /*</replacement>*/
4852
4853 var Stream = require('stream');
4854
4855 /*<replacement>*/
4856 var util = require('core-util-is');
4857 util.inherits = require('inherits');
4858 /*</replacement>*/
4859
4860 var StringDecoder;
4861
4862
4863 /*<replacement>*/
4864 var debug = require('util');
4865 if (debug && debug.debuglog) {
4866 debug = debug.debuglog('stream');
4867 } else {
4868 debug = function () {};
4869 }
4870 /*</replacement>*/
4871
4872
4873 util.inherits(Readable, Stream);
4874
4875 function ReadableState(options, stream) {
4876 var Duplex = require('./_stream_duplex');
4877
4878 options = options || {};
4879
4880 // the point at which it stops calling _read() to fill the buffer
4881 // Note: 0 is a valid value, means "don't call _read preemptively ever"
4882 var hwm = options.highWaterMark;
4883 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
4884 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
4885
4886 // cast to ints.
4887 this.highWaterMark = ~~this.highWaterMark;
4888
4889 this.buffer = [];
4890 this.length = 0;
4891 this.pipes = null;
4892 this.pipesCount = 0;
4893 this.flowing = null;
4894 this.ended = false;
4895 this.endEmitted = false;
4896 this.reading = false;
4897
4898 // a flag to be able to tell if the onwrite cb is called immediately,
4899 // or on a later tick. We set this to true at first, because any
4900 // actions that shouldn't happen until "later" should generally also
4901 // not happen before the first write call.
4902 this.sync = true;
4903
4904 // whenever we return null, then we set a flag to say
4905 // that we're awaiting a 'readable' event emission.
4906 this.needReadable = false;
4907 this.emittedReadable = false;
4908 this.readableListening = false;
4909
4910
4911 // object stream flag. Used to make read(n) ignore n and to
4912 // make all the buffer merging and length checks go away
4913 this.objectMode = !!options.objectMode;
4914
4915 if (stream instanceof Duplex)
4916 this.objectMode = this.objectMode || !!options.readableObjectMode;
4917
4918 // Crypto is kind of old and crusty. Historically, its default string
4919 // encoding is 'binary' so we have to make this configurable.
4920 // Everything else in the universe uses 'utf8', though.
4921 this.defaultEncoding = options.defaultEncoding || 'utf8';
4922
4923 // when piping, we only care about 'readable' events that happen
4924 // after read()ing all the bytes and not getting any pushback.
4925 this.ranOut = false;
4926
4927 // the number of writers that are awaiting a drain event in .pipe()s
4928 this.awaitDrain = 0;
4929
4930 // if true, a maybeReadMore has been scheduled
4931 this.readingMore = false;
4932
4933 this.decoder = null;
4934 this.encoding = null;
4935 if (options.encoding) {
4936 if (!StringDecoder)
4937 StringDecoder = require('string_decoder/').StringDecoder;
4938 this.decoder = new StringDecoder(options.encoding);
4939 this.encoding = options.encoding;
4940 }
4941 }
4942
4943 function Readable(options) {
4944 var Duplex = require('./_stream_duplex');
4945
4946 if (!(this instanceof Readable))
4947 return new Readable(options);
4948
4949 this._readableState = new ReadableState(options, this);
4950
4951 // legacy
4952 this.readable = true;
4953
4954 Stream.call(this);
4955 }
4956
4957 // Manually shove something into the read() buffer.
4958 // This returns true if the highWaterMark has not been hit yet,
4959 // similar to how Writable.write() returns true if you should
4960 // write() some more.
4961 Readable.prototype.push = function(chunk, encoding) {
4962 var state = this._readableState;
4963
4964 if (util.isString(chunk) && !state.objectMode) {
4965 encoding = encoding || state.defaultEncoding;
4966 if (encoding !== state.encoding) {
4967 chunk = new Buffer(chunk, encoding);
4968 encoding = '';
4969 }
4970 }
4971
4972 return readableAddChunk(this, state, chunk, encoding, false);
4973 };
4974
4975 // Unshift should *always* be something directly out of read()
4976 Readable.prototype.unshift = function(chunk) {
4977 var state = this._readableState;
4978 return readableAddChunk(this, state, chunk, '', true);
4979 };
4980
4981 function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4982 var er = chunkInvalid(state, chunk);
4983 if (er) {
4984 stream.emit('error', er);
4985 } else if (util.isNullOrUndefined(chunk)) {
4986 state.reading = false;
4987 if (!state.ended)
4988 onEofChunk(stream, state);
4989 } else if (state.objectMode || chunk && chunk.length > 0) {
4990 if (state.ended && !addToFront) {
4991 var e = new Error('stream.push() after EOF');
4992 stream.emit('error', e);
4993 } else if (state.endEmitted && addToFront) {
4994 var e = new Error('stream.unshift() after end event');
4995 stream.emit('error', e);
4996 } else {
4997 if (state.decoder && !addToFront && !encoding)
4998 chunk = state.decoder.write(chunk);
4999
5000 if (!addToFront)
5001 state.reading = false;
5002
5003 // if we want the data now, just emit it.
5004 if (state.flowing && state.length === 0 && !state.sync) {
5005 stream.emit('data', chunk);
5006 stream.read(0);
5007 } else {
5008 // update the buffer info.
5009 state.length += state.objectMode ? 1 : chunk.length;
5010 if (addToFront)
5011 state.buffer.unshift(chunk);
5012 else
5013 state.buffer.push(chunk);
5014
5015 if (state.needReadable)
5016 emitReadable(stream);
5017 }
5018
5019 maybeReadMore(stream, state);
5020 }
5021 } else if (!addToFront) {
5022 state.reading = false;
5023 }
5024
5025 return needMoreData(state);
5026 }
5027
5028
5029
5030 // if it's past the high water mark, we can push in some more.
5031 // Also, if we have no data yet, we can stand some
5032 // more bytes. This is to work around cases where hwm=0,
5033 // such as the repl. Also, if the push() triggered a
5034 // readable event, and the user called read(largeNumber) such that
5035 // needReadable was set, then we ought to push more, so that another
5036 // 'readable' event will be triggered.
5037 function needMoreData(state) {
5038 return !state.ended &&
5039 (state.needReadable ||
5040 state.length < state.highWaterMark ||
5041 state.length === 0);
5042 }
5043
5044 // backwards compatibility.
5045 Readable.prototype.setEncoding = function(enc) {
5046 if (!StringDecoder)
5047 StringDecoder = require('string_decoder/').StringDecoder;
5048 this._readableState.decoder = new StringDecoder(enc);
5049 this._readableState.encoding = enc;
5050 return this;
5051 };
5052
5053 // Don't raise the hwm > 128MB
5054 var MAX_HWM = 0x800000;
5055 function roundUpToNextPowerOf2(n) {
5056 if (n >= MAX_HWM) {
5057 n = MAX_HWM;
5058 } else {
5059 // Get the next highest power of 2
5060 n--;
5061 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5062 n++;
5063 }
5064 return n;
5065 }
5066
5067 function howMuchToRead(n, state) {
5068 if (state.length === 0 && state.ended)
5069 return 0;
5070
5071 if (state.objectMode)
5072 return n === 0 ? 0 : 1;
5073
5074 if (isNaN(n) || util.isNull(n)) {
5075 // only flow one buffer at a time
5076 if (state.flowing && state.buffer.length)
5077 return state.buffer[0].length;
5078 else
5079 return state.length;
5080 }
5081
5082 if (n <= 0)
5083 return 0;
5084
5085 // If we're asking for more than the target buffer level,
5086 // then raise the water mark. Bump up to the next highest
5087 // power of 2, to prevent increasing it excessively in tiny
5088 // amounts.
5089 if (n > state.highWaterMark)
5090 state.highWaterMark = roundUpToNextPowerOf2(n);
5091
5092 // don't have that much. return null, unless we've ended.
5093 if (n > state.length) {
5094 if (!state.ended) {
5095 state.needReadable = true;
5096 return 0;
5097 } else
5098 return state.length;
5099 }
5100
5101 return n;
5102 }
5103
5104 // you can override either this method, or the async _read(n) below.
5105 Readable.prototype.read = function(n) {
5106 debug('read', n);
5107 var state = this._readableState;
5108 var nOrig = n;
5109
5110 if (!util.isNumber(n) || n > 0)
5111 state.emittedReadable = false;
5112
5113 // if we're doing read(0) to trigger a readable event, but we
5114 // already have a bunch of data in the buffer, then just trigger
5115 // the 'readable' event and move on.
5116 if (n === 0 &&
5117 state.needReadable &&
5118 (state.length >= state.highWaterMark || state.ended)) {
5119 debug('read: emitReadable', state.length, state.ended);
5120 if (state.length === 0 && state.ended)
5121 endReadable(this);
5122 else
5123 emitReadable(this);
5124 return null;
5125 }
5126
5127 n = howMuchToRead(n, state);
5128
5129 // if we've ended, and we're now clear, then finish it up.
5130 if (n === 0 && state.ended) {
5131 if (state.length === 0)
5132 endReadable(this);
5133 return null;
5134 }
5135
5136 // All the actual chunk generation logic needs to be
5137 // *below* the call to _read. The reason is that in certain
5138 // synthetic stream cases, such as passthrough streams, _read
5139 // may be a completely synchronous operation which may change
5140 // the state of the read buffer, providing enough data when
5141 // before there was *not* enough.
5142 //
5143 // So, the steps are:
5144 // 1. Figure out what the state of things will be after we do
5145 // a read from the buffer.
5146 //
5147 // 2. If that resulting state will trigger a _read, then call _read.
5148 // Note that this may be asynchronous, or synchronous. Yes, it is
5149 // deeply ugly to write APIs this way, but that still doesn't mean
5150 // that the Readable class should behave improperly, as streams are
5151 // designed to be sync/async agnostic.
5152 // Take note if the _read call is sync or async (ie, if the read call
5153 // has returned yet), so that we know whether or not it's safe to emit
5154 // 'readable' etc.
5155 //
5156 // 3. Actually pull the requested chunks out of the buffer and return.
5157
5158 // if we need a readable event, then we need to do some reading.
5159 var doRead = state.needReadable;
5160 debug('need readable', doRead);
5161
5162 // if we currently have less than the highWaterMark, then also read some
5163 if (state.length === 0 || state.length - n < state.highWaterMark) {
5164 doRead = true;
5165 debug('length less than watermark', doRead);
5166 }
5167
5168 // however, if we've ended, then there's no point, and if we're already
5169 // reading, then it's unnecessary.
5170 if (state.ended || state.reading) {
5171 doRead = false;
5172 debug('reading or ended', doRead);
5173 }
5174
5175 if (doRead) {
5176 debug('do read');
5177 state.reading = true;
5178 state.sync = true;
5179 // if the length is currently zero, then we *need* a readable event.
5180 if (state.length === 0)
5181 state.needReadable = true;
5182 // call internal read method
5183 this._read(state.highWaterMark);
5184 state.sync = false;
5185 }
5186
5187 // If _read pushed data synchronously, then `reading` will be false,
5188 // and we need to re-evaluate how much data we can return to the user.
5189 if (doRead && !state.reading)
5190 n = howMuchToRead(nOrig, state);
5191
5192 var ret;
5193 if (n > 0)
5194 ret = fromList(n, state);
5195 else
5196 ret = null;
5197
5198 if (util.isNull(ret)) {
5199 state.needReadable = true;
5200 n = 0;
5201 }
5202
5203 state.length -= n;
5204
5205 // If we have nothing in the buffer, then we want to know
5206 // as soon as we *do* get something into the buffer.
5207 if (state.length === 0 && !state.ended)
5208 state.needReadable = true;
5209
5210 // If we tried to read() past the EOF, then emit end on the next tick.
5211 if (nOrig !== n && state.ended && state.length === 0)
5212 endReadable(this);
5213
5214 if (!util.isNull(ret))
5215 this.emit('data', ret);
5216
5217 return ret;
5218 };
5219
5220 function chunkInvalid(state, chunk) {
5221 var er = null;
5222 if (!util.isBuffer(chunk) &&
5223 !util.isString(chunk) &&
5224 !util.isNullOrUndefined(chunk) &&
5225 !state.objectMode) {
5226 er = new TypeError('Invalid non-string/buffer chunk');
5227 }
5228 return er;
5229 }
5230
5231
5232 function onEofChunk(stream, state) {
5233 if (state.decoder && !state.ended) {
5234 var chunk = state.decoder.end();
5235 if (chunk && chunk.length) {
5236 state.buffer.push(chunk);
5237 state.length += state.objectMode ? 1 : chunk.length;
5238 }
5239 }
5240 state.ended = true;
5241
5242 // emit 'readable' now to make sure it gets picked up.
5243 emitReadable(stream);
5244 }
5245
5246 // Don't emit readable right away in sync mode, because this can trigger
5247 // another read() call => stack overflow. This way, it might trigger
5248 // a nextTick recursion warning, but that's not so bad.
5249 function emitReadable(stream) {
5250 var state = stream._readableState;
5251 state.needReadable = false;
5252 if (!state.emittedReadable) {
5253 debug('emitReadable', state.flowing);
5254 state.emittedReadable = true;
5255 if (state.sync)
5256 process.nextTick(function() {
5257 emitReadable_(stream);
5258 });
5259 else
5260 emitReadable_(stream);
5261 }
5262 }
5263
5264 function emitReadable_(stream) {
5265 debug('emit readable');
5266 stream.emit('readable');
5267 flow(stream);
5268 }
5269
5270
5271 // at this point, the user has presumably seen the 'readable' event,
5272 // and called read() to consume some data. that may have triggered
5273 // in turn another _read(n) call, in which case reading = true if
5274 // it's in progress.
5275 // However, if we're not ended, or reading, and the length < hwm,
5276 // then go ahead and try to read some more preemptively.
5277 function maybeReadMore(stream, state) {
5278 if (!state.readingMore) {
5279 state.readingMore = true;
5280 process.nextTick(function() {
5281 maybeReadMore_(stream, state);
5282 });
5283 }
5284 }
5285
5286 function maybeReadMore_(stream, state) {
5287 var len = state.length;
5288 while (!state.reading && !state.flowing && !state.ended &&
5289 state.length < state.highWaterMark) {
5290 debug('maybeReadMore read 0');
5291 stream.read(0);
5292 if (len === state.length)
5293 // didn't get any data, stop spinning.
5294 break;
5295 else
5296 len = state.length;
5297 }
5298 state.readingMore = false;
5299 }
5300
5301 // abstract method. to be overridden in specific implementation classes.
5302 // call cb(er, data) where data is <= n in length.
5303 // for virtual (non-string, non-buffer) streams, "length" is somewhat
5304 // arbitrary, and perhaps not very meaningful.
5305 Readable.prototype._read = function(n) {
5306 this.emit('error', new Error('not implemented'));
5307 };
5308
5309 Readable.prototype.pipe = function(dest, pipeOpts) {
5310 var src = this;
5311 var state = this._readableState;
5312
5313 switch (state.pipesCount) {
5314 case 0:
5315 state.pipes = dest;
5316 break;
5317 case 1:
5318 state.pipes = [state.pipes, dest];
5319 break;
5320 default:
5321 state.pipes.push(dest);
5322 break;
5323 }
5324 state.pipesCount += 1;
5325 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
5326
5327 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5328 dest !== process.stdout &&
5329 dest !== process.stderr;
5330
5331 var endFn = doEnd ? onend : cleanup;
5332 if (state.endEmitted)
5333 process.nextTick(endFn);
5334 else
5335 src.once('end', endFn);
5336
5337 dest.on('unpipe', onunpipe);
5338 function onunpipe(readable) {
5339 debug('onunpipe');
5340 if (readable === src) {
5341 cleanup();
5342 }
5343 }
5344
5345 function onend() {
5346 debug('onend');
5347 dest.end();
5348 }
5349
5350 // when the dest drains, it reduces the awaitDrain counter
5351 // on the source. This would be more elegant with a .once()
5352 // handler in flow(), but adding and removing repeatedly is
5353 // too slow.
5354 var ondrain = pipeOnDrain(src);
5355 dest.on('drain', ondrain);
5356
5357 function cleanup() {
5358 debug('cleanup');
5359 // cleanup event handlers once the pipe is broken
5360 dest.removeListener('close', onclose);
5361 dest.removeListener('finish', onfinish);
5362 dest.removeListener('drain', ondrain);
5363 dest.removeListener('error', onerror);
5364 dest.removeListener('unpipe', onunpipe);
5365 src.removeListener('end', onend);
5366 src.removeListener('end', cleanup);
5367 src.removeListener('data', ondata);
5368
5369 // if the reader is waiting for a drain event from this
5370 // specific writer, then it would cause it to never start
5371 // flowing again.
5372 // So, if this is awaiting a drain, then we just call it now.
5373 // If we don't know, then assume that we are waiting for one.
5374 if (state.awaitDrain &&
5375 (!dest._writableState || dest._writableState.needDrain))
5376 ondrain();
5377 }
5378
5379 src.on('data', ondata);
5380 function ondata(chunk) {
5381 debug('ondata');
5382 var ret = dest.write(chunk);
5383 if (false === ret) {
5384 debug('false write response, pause',
5385 src._readableState.awaitDrain);
5386 src._readableState.awaitDrain++;
5387 src.pause();
5388 }
5389 }
5390
5391 // if the dest has an error, then stop piping into it.
5392 // however, don't suppress the throwing behavior for this.
5393 function onerror(er) {
5394 debug('onerror', er);
5395 unpipe();
5396 dest.removeListener('error', onerror);
5397 if (EE.listenerCount(dest, 'error') === 0)
5398 dest.emit('error', er);
5399 }
5400 // This is a brutally ugly hack to make sure that our error handler
5401 // is attached before any userland ones. NEVER DO THIS.
5402 if (!dest._events || !dest._events.error)
5403 dest.on('error', onerror);
5404 else if (isArray(dest._events.error))
5405 dest._events.error.unshift(onerror);
5406 else
5407 dest._events.error = [onerror, dest._events.error];
5408
5409
5410
5411 // Both close and finish should trigger unpipe, but only once.
5412 function onclose() {
5413 dest.removeListener('finish', onfinish);
5414 unpipe();
5415 }
5416 dest.once('close', onclose);
5417 function onfinish() {
5418 debug('onfinish');
5419 dest.removeListener('close', onclose);
5420 unpipe();
5421 }
5422 dest.once('finish', onfinish);
5423
5424 function unpipe() {
5425 debug('unpipe');
5426 src.unpipe(dest);
5427 }
5428
5429 // tell the dest that it's being piped to
5430 dest.emit('pipe', src);
5431
5432 // start the flow if it hasn't been started already.
5433 if (!state.flowing) {
5434 debug('pipe resume');
5435 src.resume();
5436 }
5437
5438 return dest;
5439 };
5440
5441 function pipeOnDrain(src) {
5442 return function() {
5443 var state = src._readableState;
5444 debug('pipeOnDrain', state.awaitDrain);
5445 if (state.awaitDrain)
5446 state.awaitDrain--;
5447 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5448 state.flowing = true;
5449 flow(src);
5450 }
5451 };
5452 }
5453
5454
5455 Readable.prototype.unpipe = function(dest) {
5456 var state = this._readableState;
5457
5458 // if we're not piping anywhere, then do nothing.
5459 if (state.pipesCount === 0)
5460 return this;
5461
5462 // just one destination. most common case.
5463 if (state.pipesCount === 1) {
5464 // passed in one, but it's not the right one.
5465 if (dest && dest !== state.pipes)
5466 return this;
5467
5468 if (!dest)
5469 dest = state.pipes;
5470
5471 // got a match.
5472 state.pipes = null;
5473 state.pipesCount = 0;
5474 state.flowing = false;
5475 if (dest)
5476 dest.emit('unpipe', this);
5477 return this;
5478 }
5479
5480 // slow case. multiple pipe destinations.
5481
5482 if (!dest) {
5483 // remove all.
5484 var dests = state.pipes;
5485 var len = state.pipesCount;
5486 state.pipes = null;
5487 state.pipesCount = 0;
5488 state.flowing = false;
5489
5490 for (var i = 0; i < len; i++)
5491 dests[i].emit('unpipe', this);
5492 return this;
5493 }
5494
5495 // try to find the right one.
5496 var i = indexOf(state.pipes, dest);
5497 if (i === -1)
5498 return this;
5499
5500 state.pipes.splice(i, 1);
5501 state.pipesCount -= 1;
5502 if (state.pipesCount === 1)
5503 state.pipes = state.pipes[0];
5504
5505 dest.emit('unpipe', this);
5506
5507 return this;
5508 };
5509
5510 // set up data events if they are asked for
5511 // Ensure readable listeners eventually get something
5512 Readable.prototype.on = function(ev, fn) {
5513 var res = Stream.prototype.on.call(this, ev, fn);
5514
5515 // If listening to data, and it has not explicitly been paused,
5516 // then call resume to start the flow of data on the next tick.
5517 if (ev === 'data' && false !== this._readableState.flowing) {
5518 this.resume();
5519 }
5520
5521 if (ev === 'readable' && this.readable) {
5522 var state = this._readableState;
5523 if (!state.readableListening) {
5524 state.readableListening = true;
5525 state.emittedReadable = false;
5526 state.needReadable = true;
5527 if (!state.reading) {
5528 var self = this;
5529 process.nextTick(function() {
5530 debug('readable nexttick read 0');
5531 self.read(0);
5532 });
5533 } else if (state.length) {
5534 emitReadable(this, state);
5535 }
5536 }
5537 }
5538
5539 return res;
5540 };
5541 Readable.prototype.addListener = Readable.prototype.on;
5542
5543 // pause() and resume() are remnants of the legacy readable stream API
5544 // If the user uses them, then switch into old mode.
5545 Readable.prototype.resume = function() {
5546 var state = this._readableState;
5547 if (!state.flowing) {
5548 debug('resume');
5549 state.flowing = true;
5550 if (!state.reading) {
5551 debug('resume read 0');
5552 this.read(0);
5553 }
5554 resume(this, state);
5555 }
5556 return this;
5557 };
5558
5559 function resume(stream, state) {
5560 if (!state.resumeScheduled) {
5561 state.resumeScheduled = true;
5562 process.nextTick(function() {
5563 resume_(stream, state);
5564 });
5565 }
5566 }
5567
5568 function resume_(stream, state) {
5569 state.resumeScheduled = false;
5570 stream.emit('resume');
5571 flow(stream);
5572 if (state.flowing && !state.reading)
5573 stream.read(0);
5574 }
5575
5576 Readable.prototype.pause = function() {
5577 debug('call pause flowing=%j', this._readableState.flowing);
5578 if (false !== this._readableState.flowing) {
5579 debug('pause');
5580 this._readableState.flowing = false;
5581 this.emit('pause');
5582 }
5583 return this;
5584 };
5585
5586 function flow(stream) {
5587 var state = stream._readableState;
5588 debug('flow', state.flowing);
5589 if (state.flowing) {
5590 do {
5591 var chunk = stream.read();
5592 } while (null !== chunk && state.flowing);
5593 }
5594 }
5595
5596 // wrap an old-style stream as the async data source.
5597 // This is *not* part of the readable stream interface.
5598 // It is an ugly unfortunate mess of history.
5599 Readable.prototype.wrap = function(stream) {
5600 var state = this._readableState;
5601 var paused = false;
5602
5603 var self = this;
5604 stream.on('end', function() {
5605 debug('wrapped end');
5606 if (state.decoder && !state.ended) {
5607 var chunk = state.decoder.end();
5608 if (chunk && chunk.length)
5609 self.push(chunk);
5610 }
5611
5612 self.push(null);
5613 });
5614
5615 stream.on('data', function(chunk) {
5616 debug('wrapped data');
5617 if (state.decoder)
5618 chunk = state.decoder.write(chunk);
5619 if (!chunk || !state.objectMode && !chunk.length)
5620 return;
5621
5622 var ret = self.push(chunk);
5623 if (!ret) {
5624 paused = true;
5625 stream.pause();
5626 }
5627 });
5628
5629 // proxy all the other methods.
5630 // important when wrapping filters and duplexes.
5631 for (var i in stream) {
5632 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5633 this[i] = function(method) { return function() {
5634 return stream[method].apply(stream, arguments);
5635 }}(i);
5636 }
5637 }
5638
5639 // proxy certain important events.
5640 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5641 forEach(events, function(ev) {
5642 stream.on(ev, self.emit.bind(self, ev));
5643 });
5644
5645 // when we try to consume some more bytes, simply unpause the
5646 // underlying stream.
5647 self._read = function(n) {
5648 debug('wrapped _read', n);
5649 if (paused) {
5650 paused = false;
5651 stream.resume();
5652 }
5653 };
5654
5655 return self;
5656 };
5657
5658
5659
5660 // exposed for testing purposes only.
5661 Readable._fromList = fromList;
5662
5663 // Pluck off n bytes from an array of buffers.
5664 // Length is the combined lengths of all the buffers in the list.
5665 function fromList(n, state) {
5666 var list = state.buffer;
5667 var length = state.length;
5668 var stringMode = !!state.decoder;
5669 var objectMode = !!state.objectMode;
5670 var ret;
5671
5672 // nothing in the list, definitely empty.
5673 if (list.length === 0)
5674 return null;
5675
5676 if (length === 0)
5677 ret = null;
5678 else if (objectMode)
5679 ret = list.shift();
5680 else if (!n || n >= length) {
5681 // read it all, truncate the array.
5682 if (stringMode)
5683 ret = list.join('');
5684 else
5685 ret = Buffer.concat(list, length);
5686 list.length = 0;
5687 } else {
5688 // read just some of it.
5689 if (n < list[0].length) {
5690 // just take a part of the first list item.
5691 // slice is the same for buffers and strings.
5692 var buf = list[0];
5693 ret = buf.slice(0, n);
5694 list[0] = buf.slice(n);
5695 } else if (n === list[0].length) {
5696 // first list is a perfect match
5697 ret = list.shift();
5698 } else {
5699 // complex case.
5700 // we have enough to cover it, but it spans past the first buffer.
5701 if (stringMode)
5702 ret = '';
5703 else
5704 ret = new Buffer(n);
5705
5706 var c = 0;
5707 for (var i = 0, l = list.length; i < l && c < n; i++) {
5708 var buf = list[0];
5709 var cpy = Math.min(n - c, buf.length);
5710
5711 if (stringMode)
5712 ret += buf.slice(0, cpy);
5713 else
5714 buf.copy(ret, c, 0, cpy);
5715
5716 if (cpy < buf.length)
5717 list[0] = buf.slice(cpy);
5718 else
5719 list.shift();
5720
5721 c += cpy;
5722 }
5723 }
5724 }
5725
5726 return ret;
5727 }
5728
5729 function endReadable(stream) {
5730 var state = stream._readableState;
5731
5732 // If we get here before consuming all the bytes, then that is a
5733 // bug in node. Should never happen.
5734 if (state.length > 0)
5735 throw new Error('endReadable called on non-empty stream');
5736
5737 if (!state.endEmitted) {
5738 state.ended = true;
5739 process.nextTick(function() {
5740 // Check that we didn't get one last unshift.
5741 if (!state.endEmitted && state.length === 0) {
5742 state.endEmitted = true;
5743 stream.readable = false;
5744 stream.emit('end');
5745 }
5746 });
5747 }
5748 }
5749
5750 function forEach (xs, f) {
5751 for (var i = 0, l = xs.length; i < l; i++) {
5752 f(xs[i], i);
5753 }
5754 }
5755
5756 function indexOf (xs, x) {
5757 for (var i = 0, l = xs.length; i < l; i++) {
5758 if (xs[i] === x) return i;
5759 }
5760 return -1;
5761 }
5762
5763 }).call(this,require('_process'))
5764 },{"./_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){
5765 // Copyright Joyent, Inc. and other Node contributors.
5766 //
5767 // Permission is hereby granted, free of charge, to any person obtaining a
5768 // copy of this software and associated documentation files (the
5769 // "Software"), to deal in the Software without restriction, including
5770 // without limitation the rights to use, copy, modify, merge, publish,
5771 // distribute, sublicense, and/or sell copies of the Software, and to permit
5772 // persons to whom the Software is furnished to do so, subject to the
5773 // following conditions:
5774 //
5775 // The above copyright notice and this permission notice shall be included
5776 // in all copies or substantial portions of the Software.
5777 //
5778 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5779 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5780 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5781 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5782 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5783 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5784 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5785
5786
5787 // a transform stream is a readable/writable stream where you do
5788 // something with the data. Sometimes it's called a "filter",
5789 // but that's not a great name for it, since that implies a thing where
5790 // some bits pass through, and others are simply ignored. (That would
5791 // be a valid example of a transform, of course.)
5792 //
5793 // While the output is causally related to the input, it's not a
5794 // necessarily symmetric or synchronous transformation. For example,
5795 // a zlib stream might take multiple plain-text writes(), and then
5796 // emit a single compressed chunk some time in the future.
5797 //
5798 // Here's how this works:
5799 //
5800 // The Transform stream has all the aspects of the readable and writable
5801 // stream classes. When you write(chunk), that calls _write(chunk,cb)
5802 // internally, and returns false if there's a lot of pending writes
5803 // buffered up. When you call read(), that calls _read(n) until
5804 // there's enough pending readable data buffered up.
5805 //
5806 // In a transform stream, the written data is placed in a buffer. When
5807 // _read(n) is called, it transforms the queued up data, calling the
5808 // buffered _write cb's as it consumes chunks. If consuming a single
5809 // written chunk would result in multiple output chunks, then the first
5810 // outputted bit calls the readcb, and subsequent chunks just go into
5811 // the read buffer, and will cause it to emit 'readable' if necessary.
5812 //
5813 // This way, back-pressure is actually determined by the reading side,
5814 // since _read has to be called to start processing a new chunk. However,
5815 // a pathological inflate type of transform can cause excessive buffering
5816 // here. For example, imagine a stream where every byte of input is
5817 // interpreted as an integer from 0-255, and then results in that many
5818 // bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
5819 // 1kb of data being output. In this case, you could write a very small
5820 // amount of input, and end up with a very large amount of output. In
5821 // such a pathological inflating mechanism, there'd be no way to tell
5822 // the system to stop doing the transform. A single 4MB write could
5823 // cause the system to run out of memory.
5824 //
5825 // However, even in such a pathological case, only a single written chunk
5826 // would be consumed, and then the rest would wait (un-transformed) until
5827 // the results of the previous transformed chunk were consumed.
5828
5829 module.exports = Transform;
5830
5831 var Duplex = require('./_stream_duplex');
5832
5833 /*<replacement>*/
5834 var util = require('core-util-is');
5835 util.inherits = require('inherits');
5836 /*</replacement>*/
5837
5838 util.inherits(Transform, Duplex);
5839
5840
5841 function TransformState(options, stream) {
5842 this.afterTransform = function(er, data) {
5843 return afterTransform(stream, er, data);
5844 };
5845
5846 this.needTransform = false;
5847 this.transforming = false;
5848 this.writecb = null;
5849 this.writechunk = null;
5850 }
5851
5852 function afterTransform(stream, er, data) {
5853 var ts = stream._transformState;
5854 ts.transforming = false;
5855
5856 var cb = ts.writecb;
5857
5858 if (!cb)
5859 return stream.emit('error', new Error('no writecb in Transform class'));
5860
5861 ts.writechunk = null;
5862 ts.writecb = null;
5863
5864 if (!util.isNullOrUndefined(data))
5865 stream.push(data);
5866
5867 if (cb)
5868 cb(er);
5869
5870 var rs = stream._readableState;
5871 rs.reading = false;
5872 if (rs.needReadable || rs.length < rs.highWaterMark) {
5873 stream._read(rs.highWaterMark);
5874 }
5875 }
5876
5877
5878 function Transform(options) {
5879 if (!(this instanceof Transform))
5880 return new Transform(options);
5881
5882 Duplex.call(this, options);
5883
5884 this._transformState = new TransformState(options, this);
5885
5886 // when the writable side finishes, then flush out anything remaining.
5887 var stream = this;
5888
5889 // start out asking for a readable event once data is transformed.
5890 this._readableState.needReadable = true;
5891
5892 // we have implemented the _read method, and done the other things
5893 // that Readable wants before the first _read call, so unset the
5894 // sync guard flag.
5895 this._readableState.sync = false;
5896
5897 this.once('prefinish', function() {
5898 if (util.isFunction(this._flush))
5899 this._flush(function(er) {
5900 done(stream, er);
5901 });
5902 else
5903 done(stream);
5904 });
5905 }
5906
5907 Transform.prototype.push = function(chunk, encoding) {
5908 this._transformState.needTransform = false;
5909 return Duplex.prototype.push.call(this, chunk, encoding);
5910 };
5911
5912 // This is the part where you do stuff!
5913 // override this function in implementation classes.
5914 // 'chunk' is an input chunk.
5915 //
5916 // Call `push(newChunk)` to pass along transformed output
5917 // to the readable side. You may call 'push' zero or more times.
5918 //
5919 // Call `cb(err)` when you are done with this chunk. If you pass
5920 // an error, then that'll put the hurt on the whole operation. If you
5921 // never call cb(), then you'll never get another chunk.
5922 Transform.prototype._transform = function(chunk, encoding, cb) {
5923 throw new Error('not implemented');
5924 };
5925
5926 Transform.prototype._write = function(chunk, encoding, cb) {
5927 var ts = this._transformState;
5928 ts.writecb = cb;
5929 ts.writechunk = chunk;
5930 ts.writeencoding = encoding;
5931 if (!ts.transforming) {
5932 var rs = this._readableState;
5933 if (ts.needTransform ||
5934 rs.needReadable ||
5935 rs.length < rs.highWaterMark)
5936 this._read(rs.highWaterMark);
5937 }
5938 };
5939
5940 // Doesn't matter what the args are here.
5941 // _transform does all the work.
5942 // That we got here means that the readable side wants more data.
5943 Transform.prototype._read = function(n) {
5944 var ts = this._transformState;
5945
5946 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5947 ts.transforming = true;
5948 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5949 } else {
5950 // mark that we need a transform, so that any data that comes in
5951 // will get processed, now that we've asked for it.
5952 ts.needTransform = true;
5953 }
5954 };
5955
5956
5957 function done(stream, er) {
5958 if (er)
5959 return stream.emit('error', er);
5960
5961 // if there's nothing in the write buffer, then that means
5962 // that nothing more will ever be provided
5963 var ws = stream._writableState;
5964 var ts = stream._transformState;
5965
5966 if (ws.length)
5967 throw new Error('calling transform done when ws.length != 0');
5968
5969 if (ts.transforming)
5970 throw new Error('calling transform done when still transforming');
5971
5972 return stream.push(null);
5973 }
5974
5975 },{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
5976 (function (process){
5977 // Copyright Joyent, Inc. and other Node contributors.
5978 //
5979 // Permission is hereby granted, free of charge, to any person obtaining a
5980 // copy of this software and associated documentation files (the
5981 // "Software"), to deal in the Software without restriction, including
5982 // without limitation the rights to use, copy, modify, merge, publish,
5983 // distribute, sublicense, and/or sell copies of the Software, and to permit
5984 // persons to whom the Software is furnished to do so, subject to the
5985 // following conditions:
5986 //
5987 // The above copyright notice and this permission notice shall be included
5988 // in all copies or substantial portions of the Software.
5989 //
5990 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5991 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5992 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5993 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5994 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5995 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5996 // USE OR OTHER DEALINGS IN THE SOFTWARE.
5997
5998 // A bit simpler than readable streams.
5999 // Implement an async ._write(chunk, cb), and it'll handle all
6000 // the drain event emission and buffering.
6001
6002 module.exports = Writable;
6003
6004 /*<replacement>*/
6005 var Buffer = require('buffer').Buffer;
6006 /*</replacement>*/
6007
6008 Writable.WritableState = WritableState;
6009
6010
6011 /*<replacement>*/
6012 var util = require('core-util-is');
6013 util.inherits = require('inherits');
6014 /*</replacement>*/
6015
6016 var Stream = require('stream');
6017
6018 util.inherits(Writable, Stream);
6019
6020 function WriteReq(chunk, encoding, cb) {
6021 this.chunk = chunk;
6022 this.encoding = encoding;
6023 this.callback = cb;
6024 }
6025
6026 function WritableState(options, stream) {
6027 var Duplex = require('./_stream_duplex');
6028
6029 options = options || {};
6030
6031 // the point at which write() starts returning false
6032 // Note: 0 is a valid value, means that we always return false if
6033 // the entire buffer is not flushed immediately on write()
6034 var hwm = options.highWaterMark;
6035 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6036 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
6037
6038 // object stream flag to indicate whether or not this stream
6039 // contains buffers or objects.
6040 this.objectMode = !!options.objectMode;
6041
6042 if (stream instanceof Duplex)
6043 this.objectMode = this.objectMode || !!options.writableObjectMode;
6044
6045 // cast to ints.
6046 this.highWaterMark = ~~this.highWaterMark;
6047
6048 this.needDrain = false;
6049 // at the start of calling end()
6050 this.ending = false;
6051 // when end() has been called, and returned
6052 this.ended = false;
6053 // when 'finish' is emitted
6054 this.finished = false;
6055
6056 // should we decode strings into buffers before passing to _write?
6057 // this is here so that some node-core streams can optimize string
6058 // handling at a lower level.
6059 var noDecode = options.decodeStrings === false;
6060 this.decodeStrings = !noDecode;
6061
6062 // Crypto is kind of old and crusty. Historically, its default string
6063 // encoding is 'binary' so we have to make this configurable.
6064 // Everything else in the universe uses 'utf8', though.
6065 this.defaultEncoding = options.defaultEncoding || 'utf8';
6066
6067 // not an actual buffer we keep track of, but a measurement
6068 // of how much we're waiting to get pushed to some underlying
6069 // socket or file.
6070 this.length = 0;
6071
6072 // a flag to see when we're in the middle of a write.
6073 this.writing = false;
6074
6075 // when true all writes will be buffered until .uncork() call
6076 this.corked = 0;
6077
6078 // a flag to be able to tell if the onwrite cb is called immediately,
6079 // or on a later tick. We set this to true at first, because any
6080 // actions that shouldn't happen until "later" should generally also
6081 // not happen before the first write call.
6082 this.sync = true;
6083
6084 // a flag to know if we're processing previously buffered items, which
6085 // may call the _write() callback in the same tick, so that we don't
6086 // end up in an overlapped onwrite situation.
6087 this.bufferProcessing = false;
6088
6089 // the callback that's passed to _write(chunk,cb)
6090 this.onwrite = function(er) {
6091 onwrite(stream, er);
6092 };
6093
6094 // the callback that the user supplies to write(chunk,encoding,cb)
6095 this.writecb = null;
6096
6097 // the amount that is being written when _write is called.
6098 this.writelen = 0;
6099
6100 this.buffer = [];
6101
6102 // number of pending user-supplied write callbacks
6103 // this must be 0 before 'finish' can be emitted
6104 this.pendingcb = 0;
6105
6106 // emit prefinish if the only thing we're waiting for is _write cbs
6107 // This is relevant for synchronous Transform streams
6108 this.prefinished = false;
6109
6110 // True if the error was already emitted and should not be thrown again
6111 this.errorEmitted = false;
6112 }
6113
6114 function Writable(options) {
6115 var Duplex = require('./_stream_duplex');
6116
6117 // Writable ctor is applied to Duplexes, though they're not
6118 // instanceof Writable, they're instanceof Readable.
6119 if (!(this instanceof Writable) && !(this instanceof Duplex))
6120 return new Writable(options);
6121
6122 this._writableState = new WritableState(options, this);
6123
6124 // legacy.
6125 this.writable = true;
6126
6127 Stream.call(this);
6128 }
6129
6130 // Otherwise people can pipe Writable streams, which is just wrong.
6131 Writable.prototype.pipe = function() {
6132 this.emit('error', new Error('Cannot pipe. Not readable.'));
6133 };
6134
6135
6136 function writeAfterEnd(stream, state, cb) {
6137 var er = new Error('write after end');
6138 // TODO: defer error events consistently everywhere, not just the cb
6139 stream.emit('error', er);
6140 process.nextTick(function() {
6141 cb(er);
6142 });
6143 }
6144
6145 // If we get something that is not a buffer, string, null, or undefined,
6146 // and we're not in objectMode, then that's an error.
6147 // Otherwise stream chunks are all considered to be of length=1, and the
6148 // watermarks determine how many objects to keep in the buffer, rather than
6149 // how many bytes or characters.
6150 function validChunk(stream, state, chunk, cb) {
6151 var valid = true;
6152 if (!util.isBuffer(chunk) &&
6153 !util.isString(chunk) &&
6154 !util.isNullOrUndefined(chunk) &&
6155 !state.objectMode) {
6156 var er = new TypeError('Invalid non-string/buffer chunk');
6157 stream.emit('error', er);
6158 process.nextTick(function() {
6159 cb(er);
6160 });
6161 valid = false;
6162 }
6163 return valid;
6164 }
6165
6166 Writable.prototype.write = function(chunk, encoding, cb) {
6167 var state = this._writableState;
6168 var ret = false;
6169
6170 if (util.isFunction(encoding)) {
6171 cb = encoding;
6172 encoding = null;
6173 }
6174
6175 if (util.isBuffer(chunk))
6176 encoding = 'buffer';
6177 else if (!encoding)
6178 encoding = state.defaultEncoding;
6179
6180 if (!util.isFunction(cb))
6181 cb = function() {};
6182
6183 if (state.ended)
6184 writeAfterEnd(this, state, cb);
6185 else if (validChunk(this, state, chunk, cb)) {
6186 state.pendingcb++;
6187 ret = writeOrBuffer(this, state, chunk, encoding, cb);
6188 }
6189
6190 return ret;
6191 };
6192
6193 Writable.prototype.cork = function() {
6194 var state = this._writableState;
6195
6196 state.corked++;
6197 };
6198
6199 Writable.prototype.uncork = function() {
6200 var state = this._writableState;
6201
6202 if (state.corked) {
6203 state.corked--;
6204
6205 if (!state.writing &&
6206 !state.corked &&
6207 !state.finished &&
6208 !state.bufferProcessing &&
6209 state.buffer.length)
6210 clearBuffer(this, state);
6211 }
6212 };
6213
6214 function decodeChunk(state, chunk, encoding) {
6215 if (!state.objectMode &&
6216 state.decodeStrings !== false &&
6217 util.isString(chunk)) {
6218 chunk = new Buffer(chunk, encoding);
6219 }
6220 return chunk;
6221 }
6222
6223 // if we're already writing something, then just put this
6224 // in the queue, and wait our turn. Otherwise, call _write
6225 // If we return false, then we need a drain event, so set that flag.
6226 function writeOrBuffer(stream, state, chunk, encoding, cb) {
6227 chunk = decodeChunk(state, chunk, encoding);
6228 if (util.isBuffer(chunk))
6229 encoding = 'buffer';
6230 var len = state.objectMode ? 1 : chunk.length;
6231
6232 state.length += len;
6233
6234 var ret = state.length < state.highWaterMark;
6235 // we must ensure that previous needDrain will not be reset to false.
6236 if (!ret)
6237 state.needDrain = true;
6238
6239 if (state.writing || state.corked)
6240 state.buffer.push(new WriteReq(chunk, encoding, cb));
6241 else
6242 doWrite(stream, state, false, len, chunk, encoding, cb);
6243
6244 return ret;
6245 }
6246
6247 function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6248 state.writelen = len;
6249 state.writecb = cb;
6250 state.writing = true;
6251 state.sync = true;
6252 if (writev)
6253 stream._writev(chunk, state.onwrite);
6254 else
6255 stream._write(chunk, encoding, state.onwrite);
6256 state.sync = false;
6257 }
6258
6259 function onwriteError(stream, state, sync, er, cb) {
6260 if (sync)
6261 process.nextTick(function() {
6262 state.pendingcb--;
6263 cb(er);
6264 });
6265 else {
6266 state.pendingcb--;
6267 cb(er);
6268 }
6269
6270 stream._writableState.errorEmitted = true;
6271 stream.emit('error', er);
6272 }
6273
6274 function onwriteStateUpdate(state) {
6275 state.writing = false;
6276 state.writecb = null;
6277 state.length -= state.writelen;
6278 state.writelen = 0;
6279 }
6280
6281 function onwrite(stream, er) {
6282 var state = stream._writableState;
6283 var sync = state.sync;
6284 var cb = state.writecb;
6285
6286 onwriteStateUpdate(state);
6287
6288 if (er)
6289 onwriteError(stream, state, sync, er, cb);
6290 else {
6291 // Check if we're actually ready to finish, but don't emit yet
6292 var finished = needFinish(stream, state);
6293
6294 if (!finished &&
6295 !state.corked &&
6296 !state.bufferProcessing &&
6297 state.buffer.length) {
6298 clearBuffer(stream, state);
6299 }
6300
6301 if (sync) {
6302 process.nextTick(function() {
6303 afterWrite(stream, state, finished, cb);
6304 });
6305 } else {
6306 afterWrite(stream, state, finished, cb);
6307 }
6308 }
6309 }
6310
6311 function afterWrite(stream, state, finished, cb) {
6312 if (!finished)
6313 onwriteDrain(stream, state);
6314 state.pendingcb--;
6315 cb();
6316 finishMaybe(stream, state);
6317 }
6318
6319 // Must force callback to be called on nextTick, so that we don't
6320 // emit 'drain' before the write() consumer gets the 'false' return
6321 // value, and has a chance to attach a 'drain' listener.
6322 function onwriteDrain(stream, state) {
6323 if (state.length === 0 && state.needDrain) {
6324 state.needDrain = false;
6325 stream.emit('drain');
6326 }
6327 }
6328
6329
6330 // if there's something in the buffer waiting, then process it
6331 function clearBuffer(stream, state) {
6332 state.bufferProcessing = true;
6333
6334 if (stream._writev && state.buffer.length > 1) {
6335 // Fast case, write everything using _writev()
6336 var cbs = [];
6337 for (var c = 0; c < state.buffer.length; c++)
6338 cbs.push(state.buffer[c].callback);
6339
6340 // count the one we are adding, as well.
6341 // TODO(isaacs) clean this up
6342 state.pendingcb++;
6343 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6344 for (var i = 0; i < cbs.length; i++) {
6345 state.pendingcb--;
6346 cbs[i](err);
6347 }
6348 });
6349
6350 // Clear buffer
6351 state.buffer = [];
6352 } else {
6353 // Slow case, write chunks one-by-one
6354 for (var c = 0; c < state.buffer.length; c++) {
6355 var entry = state.buffer[c];
6356 var chunk = entry.chunk;
6357 var encoding = entry.encoding;
6358 var cb = entry.callback;
6359 var len = state.objectMode ? 1 : chunk.length;
6360
6361 doWrite(stream, state, false, len, chunk, encoding, cb);
6362
6363 // if we didn't call the onwrite immediately, then
6364 // it means that we need to wait until it does.
6365 // also, that means that the chunk and cb are currently
6366 // being processed, so move the buffer counter past them.
6367 if (state.writing) {
6368 c++;
6369 break;
6370 }
6371 }
6372
6373 if (c < state.buffer.length)
6374 state.buffer = state.buffer.slice(c);
6375 else
6376 state.buffer.length = 0;
6377 }
6378
6379 state.bufferProcessing = false;
6380 }
6381
6382 Writable.prototype._write = function(chunk, encoding, cb) {
6383 cb(new Error('not implemented'));
6384
6385 };
6386
6387 Writable.prototype._writev = null;
6388
6389 Writable.prototype.end = function(chunk, encoding, cb) {
6390 var state = this._writableState;
6391
6392 if (util.isFunction(chunk)) {
6393 cb = chunk;
6394 chunk = null;
6395 encoding = null;
6396 } else if (util.isFunction(encoding)) {
6397 cb = encoding;
6398 encoding = null;
6399 }
6400
6401 if (!util.isNullOrUndefined(chunk))
6402 this.write(chunk, encoding);
6403
6404 // .end() fully uncorks
6405 if (state.corked) {
6406 state.corked = 1;
6407 this.uncork();
6408 }
6409
6410 // ignore unnecessary end() calls.
6411 if (!state.ending && !state.finished)
6412 endWritable(this, state, cb);
6413 };
6414
6415
6416 function needFinish(stream, state) {
6417 return (state.ending &&
6418 state.length === 0 &&
6419 !state.finished &&
6420 !state.writing);
6421 }
6422
6423 function prefinish(stream, state) {
6424 if (!state.prefinished) {
6425 state.prefinished = true;
6426 stream.emit('prefinish');
6427 }
6428 }
6429
6430 function finishMaybe(stream, state) {
6431 var need = needFinish(stream, state);
6432 if (need) {
6433 if (state.pendingcb === 0) {
6434 prefinish(stream, state);
6435 state.finished = true;
6436 stream.emit('finish');
6437 } else
6438 prefinish(stream, state);
6439 }
6440 return need;
6441 }
6442
6443 function endWritable(stream, state, cb) {
6444 state.ending = true;
6445 finishMaybe(stream, state);
6446 if (cb) {
6447 if (state.finished)
6448 process.nextTick(cb);
6449 else
6450 stream.once('finish', cb);
6451 }
6452 state.ended = true;
6453 }
6454
6455 }).call(this,require('_process'))
6456 },{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6457 (function (Buffer){
6458 // Copyright Joyent, Inc. and other Node contributors.
6459 //
6460 // Permission is hereby granted, free of charge, to any person obtaining a
6461 // copy of this software and associated documentation files (the
6462 // "Software"), to deal in the Software without restriction, including
6463 // without limitation the rights to use, copy, modify, merge, publish,
6464 // distribute, sublicense, and/or sell copies of the Software, and to permit
6465 // persons to whom the Software is furnished to do so, subject to the
6466 // following conditions:
6467 //
6468 // The above copyright notice and this permission notice shall be included
6469 // in all copies or substantial portions of the Software.
6470 //
6471 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6472 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6473 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6474 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6475 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6476 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6477 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6478
6479 // NOTE: These type checking functions intentionally don't use `instanceof`
6480 // because it is fragile and can be easily faked with `Object.create()`.
6481 function isArray(ar) {
6482 return Array.isArray(ar);
6483 }
6484 exports.isArray = isArray;
6485
6486 function isBoolean(arg) {
6487 return typeof arg === 'boolean';
6488 }
6489 exports.isBoolean = isBoolean;
6490
6491 function isNull(arg) {
6492 return arg === null;
6493 }
6494 exports.isNull = isNull;
6495
6496 function isNullOrUndefined(arg) {
6497 return arg == null;
6498 }
6499 exports.isNullOrUndefined = isNullOrUndefined;
6500
6501 function isNumber(arg) {
6502 return typeof arg === 'number';
6503 }
6504 exports.isNumber = isNumber;
6505
6506 function isString(arg) {
6507 return typeof arg === 'string';
6508 }
6509 exports.isString = isString;
6510
6511 function isSymbol(arg) {
6512 return typeof arg === 'symbol';
6513 }
6514 exports.isSymbol = isSymbol;
6515
6516 function isUndefined(arg) {
6517 return arg === void 0;
6518 }
6519 exports.isUndefined = isUndefined;
6520
6521 function isRegExp(re) {
6522 return isObject(re) && objectToString(re) === '[object RegExp]';
6523 }
6524 exports.isRegExp = isRegExp;
6525
6526 function isObject(arg) {
6527 return typeof arg === 'object' && arg !== null;
6528 }
6529 exports.isObject = isObject;
6530
6531 function isDate(d) {
6532 return isObject(d) && objectToString(d) === '[object Date]';
6533 }
6534 exports.isDate = isDate;
6535
6536 function isError(e) {
6537 return isObject(e) &&
6538 (objectToString(e) === '[object Error]' || e instanceof Error);
6539 }
6540 exports.isError = isError;
6541
6542 function isFunction(arg) {
6543 return typeof arg === 'function';
6544 }
6545 exports.isFunction = isFunction;
6546
6547 function isPrimitive(arg) {
6548 return arg === null ||
6549 typeof arg === 'boolean' ||
6550 typeof arg === 'number' ||
6551 typeof arg === 'string' ||
6552 typeof arg === 'symbol' || // ES6 symbol
6553 typeof arg === 'undefined';
6554 }
6555 exports.isPrimitive = isPrimitive;
6556
6557 function isBuffer(arg) {
6558 return Buffer.isBuffer(arg);
6559 }
6560 exports.isBuffer = isBuffer;
6561
6562 function objectToString(o) {
6563 return Object.prototype.toString.call(o);
6564 }
6565 }).call(this,require("buffer").Buffer)
6566 },{"buffer":7}],22:[function(require,module,exports){
6567 module.exports = require("./lib/_stream_passthrough.js")
6568
6569 },{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6570 exports = module.exports = require('./lib/_stream_readable.js');
6571 exports.Stream = require('stream');
6572 exports.Readable = exports;
6573 exports.Writable = require('./lib/_stream_writable.js');
6574 exports.Duplex = require('./lib/_stream_duplex.js');
6575 exports.Transform = require('./lib/_stream_transform.js');
6576 exports.PassThrough = require('./lib/_stream_passthrough.js');
6577
6578 },{"./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){
6579 module.exports = require("./lib/_stream_transform.js")
6580
6581 },{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6582 module.exports = require("./lib/_stream_writable.js")
6583
6584 },{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6585 // Copyright Joyent, Inc. and other Node contributors.
6586 //
6587 // Permission is hereby granted, free of charge, to any person obtaining a
6588 // copy of this software and associated documentation files (the
6589 // "Software"), to deal in the Software without restriction, including
6590 // without limitation the rights to use, copy, modify, merge, publish,
6591 // distribute, sublicense, and/or sell copies of the Software, and to permit
6592 // persons to whom the Software is furnished to do so, subject to the
6593 // following conditions:
6594 //
6595 // The above copyright notice and this permission notice shall be included
6596 // in all copies or substantial portions of the Software.
6597 //
6598 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6599 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6600 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6601 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6602 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6603 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6604 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6605
6606 module.exports = Stream;
6607
6608 var EE = require('events').EventEmitter;
6609 var inherits = require('inherits');
6610
6611 inherits(Stream, EE);
6612 Stream.Readable = require('readable-stream/readable.js');
6613 Stream.Writable = require('readable-stream/writable.js');
6614 Stream.Duplex = require('readable-stream/duplex.js');
6615 Stream.Transform = require('readable-stream/transform.js');
6616 Stream.PassThrough = require('readable-stream/passthrough.js');
6617
6618 // Backwards-compat with node 0.4.x
6619 Stream.Stream = Stream;
6620
6621
6622
6623 // old-style streams. Note that the pipe method (the only relevant
6624 // part of this class) is overridden in the Readable class.
6625
6626 function Stream() {
6627 EE.call(this);
6628 }
6629
6630 Stream.prototype.pipe = function(dest, options) {
6631 var source = this;
6632
6633 function ondata(chunk) {
6634 if (dest.writable) {
6635 if (false === dest.write(chunk) && source.pause) {
6636 source.pause();
6637 }
6638 }
6639 }
6640
6641 source.on('data', ondata);
6642
6643 function ondrain() {
6644 if (source.readable && source.resume) {
6645 source.resume();
6646 }
6647 }
6648
6649 dest.on('drain', ondrain);
6650
6651 // If the 'end' option is not supplied, dest.end() will be called when
6652 // source gets the 'end' or 'close' events. Only dest.end() once.
6653 if (!dest._isStdio && (!options || options.end !== false)) {
6654 source.on('end', onend);
6655 source.on('close', onclose);
6656 }
6657
6658 var didOnEnd = false;
6659 function onend() {
6660 if (didOnEnd) return;
6661 didOnEnd = true;
6662
6663 dest.end();
6664 }
6665
6666
6667 function onclose() {
6668 if (didOnEnd) return;
6669 didOnEnd = true;
6670
6671 if (typeof dest.destroy === 'function') dest.destroy();
6672 }
6673
6674 // don't leave dangling pipes when there are errors.
6675 function onerror(er) {
6676 cleanup();
6677 if (EE.listenerCount(this, 'error') === 0) {
6678 throw er; // Unhandled stream error in pipe.
6679 }
6680 }
6681
6682 source.on('error', onerror);
6683 dest.on('error', onerror);
6684
6685 // remove all the event listeners that were added.
6686 function cleanup() {
6687 source.removeListener('data', ondata);
6688 dest.removeListener('drain', ondrain);
6689
6690 source.removeListener('end', onend);
6691 source.removeListener('close', onclose);
6692
6693 source.removeListener('error', onerror);
6694 dest.removeListener('error', onerror);
6695
6696 source.removeListener('end', cleanup);
6697 source.removeListener('close', cleanup);
6698
6699 dest.removeListener('close', cleanup);
6700 }
6701
6702 source.on('end', cleanup);
6703 source.on('close', cleanup);
6704
6705 dest.on('close', cleanup);
6706
6707 dest.emit('pipe', source);
6708
6709 // Allow for unix-like usage: A.pipe(B).pipe(C)
6710 return dest;
6711 };
6712
6713 },{"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){
6714 // Copyright Joyent, Inc. and other Node contributors.
6715 //
6716 // Permission is hereby granted, free of charge, to any person obtaining a
6717 // copy of this software and associated documentation files (the
6718 // "Software"), to deal in the Software without restriction, including
6719 // without limitation the rights to use, copy, modify, merge, publish,
6720 // distribute, sublicense, and/or sell copies of the Software, and to permit
6721 // persons to whom the Software is furnished to do so, subject to the
6722 // following conditions:
6723 //
6724 // The above copyright notice and this permission notice shall be included
6725 // in all copies or substantial portions of the Software.
6726 //
6727 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6728 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6729 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6730 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6731 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6732 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6733 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6734
6735 var Buffer = require('buffer').Buffer;
6736
6737 var isBufferEncoding = Buffer.isEncoding
6738 || function(encoding) {
6739 switch (encoding && encoding.toLowerCase()) {
6740 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;
6741 default: return false;
6742 }
6743 }
6744
6745
6746 function assertEncoding(encoding) {
6747 if (encoding && !isBufferEncoding(encoding)) {
6748 throw new Error('Unknown encoding: ' + encoding);
6749 }
6750 }
6751
6752 // StringDecoder provides an interface for efficiently splitting a series of
6753 // buffers into a series of JS strings without breaking apart multi-byte
6754 // characters. CESU-8 is handled as part of the UTF-8 encoding.
6755 //
6756 // @TODO Handling all encodings inside a single object makes it very difficult
6757 // to reason about this code, so it should be split up in the future.
6758 // @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6759 // points as used by CESU-8.
6760 var StringDecoder = exports.StringDecoder = function(encoding) {
6761 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6762 assertEncoding(encoding);
6763 switch (this.encoding) {
6764 case 'utf8':
6765 // CESU-8 represents each of Surrogate Pair by 3-bytes
6766 this.surrogateSize = 3;
6767 break;
6768 case 'ucs2':
6769 case 'utf16le':
6770 // UTF-16 represents each of Surrogate Pair by 2-bytes
6771 this.surrogateSize = 2;
6772 this.detectIncompleteChar = utf16DetectIncompleteChar;
6773 break;
6774 case 'base64':
6775 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6776 this.surrogateSize = 3;
6777 this.detectIncompleteChar = base64DetectIncompleteChar;
6778 break;
6779 default:
6780 this.write = passThroughWrite;
6781 return;
6782 }
6783
6784 // Enough space to store all bytes of a single character. UTF-8 needs 4
6785 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
6786 this.charBuffer = new Buffer(6);
6787 // Number of bytes received for the current incomplete multi-byte character.
6788 this.charReceived = 0;
6789 // Number of bytes expected for the current incomplete multi-byte character.
6790 this.charLength = 0;
6791 };
6792
6793
6794 // write decodes the given buffer and returns it as JS string that is
6795 // guaranteed to not contain any partial multi-byte characters. Any partial
6796 // character found at the end of the buffer is buffered up, and will be
6797 // returned when calling write again with the remaining bytes.
6798 //
6799 // Note: Converting a Buffer containing an orphan surrogate to a String
6800 // currently works, but converting a String to a Buffer (via `new Buffer`, or
6801 // Buffer#write) will replace incomplete surrogates with the unicode
6802 // replacement character. See https://codereview.chromium.org/121173009/ .
6803 StringDecoder.prototype.write = function(buffer) {
6804 var charStr = '';
6805 // if our last write ended with an incomplete multibyte character
6806 while (this.charLength) {
6807 // determine how many remaining bytes this buffer has to offer for this char
6808 var available = (buffer.length >= this.charLength - this.charReceived) ?
6809 this.charLength - this.charReceived :
6810 buffer.length;
6811
6812 // add the new bytes to the char buffer
6813 buffer.copy(this.charBuffer, this.charReceived, 0, available);
6814 this.charReceived += available;
6815
6816 if (this.charReceived < this.charLength) {
6817 // still not enough chars in this buffer? wait for more ...
6818 return '';
6819 }
6820
6821 // remove bytes belonging to the current character from the buffer
6822 buffer = buffer.slice(available, buffer.length);
6823
6824 // get the character that was split
6825 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
6826
6827 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6828 var charCode = charStr.charCodeAt(charStr.length - 1);
6829 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6830 this.charLength += this.surrogateSize;
6831 charStr = '';
6832 continue;
6833 }
6834 this.charReceived = this.charLength = 0;
6835
6836 // if there are no more bytes in this buffer, just emit our char
6837 if (buffer.length === 0) {
6838 return charStr;
6839 }
6840 break;
6841 }
6842
6843 // determine and set charLength / charReceived
6844 this.detectIncompleteChar(buffer);
6845
6846 var end = buffer.length;
6847 if (this.charLength) {
6848 // buffer the incomplete character bytes we got
6849 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
6850 end -= this.charReceived;
6851 }
6852
6853 charStr += buffer.toString(this.encoding, 0, end);
6854
6855 var end = charStr.length - 1;
6856 var charCode = charStr.charCodeAt(end);
6857 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6858 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6859 var size = this.surrogateSize;
6860 this.charLength += size;
6861 this.charReceived += size;
6862 this.charBuffer.copy(this.charBuffer, size, 0, size);
6863 buffer.copy(this.charBuffer, 0, 0, size);
6864 return charStr.substring(0, end);
6865 }
6866
6867 // or just emit the charStr
6868 return charStr;
6869 };
6870
6871 // detectIncompleteChar determines if there is an incomplete UTF-8 character at
6872 // the end of the given buffer. If so, it sets this.charLength to the byte
6873 // length that character, and sets this.charReceived to the number of bytes
6874 // that are available for this character.
6875 StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6876 // determine how many bytes we have to check at the end of this buffer
6877 var i = (buffer.length >= 3) ? 3 : buffer.length;
6878
6879 // Figure out if one of the last i bytes of our buffer announces an
6880 // incomplete char.
6881 for (; i > 0; i--) {
6882 var c = buffer[buffer.length - i];
6883
6884 // See http://en.wikipedia.org/wiki/UTF-8#Description
6885
6886 // 110XXXXX
6887 if (i == 1 && c >> 5 == 0x06) {
6888 this.charLength = 2;
6889 break;
6890 }
6891
6892 // 1110XXXX
6893 if (i <= 2 && c >> 4 == 0x0E) {
6894 this.charLength = 3;
6895 break;
6896 }
6897
6898 // 11110XXX
6899 if (i <= 3 && c >> 3 == 0x1E) {
6900 this.charLength = 4;
6901 break;
6902 }
6903 }
6904 this.charReceived = i;
6905 };
6906
6907 StringDecoder.prototype.end = function(buffer) {
6908 var res = '';
6909 if (buffer && buffer.length)
6910 res = this.write(buffer);
6911
6912 if (this.charReceived) {
6913 var cr = this.charReceived;
6914 var buf = this.charBuffer;
6915 var enc = this.encoding;
6916 res += buf.slice(0, cr).toString(enc);
6917 }
6918
6919 return res;
6920 };
6921
6922 function passThroughWrite(buffer) {
6923 return buffer.toString(this.encoding);
6924 }
6925
6926 function utf16DetectIncompleteChar(buffer) {
6927 this.charReceived = buffer.length % 2;
6928 this.charLength = this.charReceived ? 2 : 0;
6929 }
6930
6931 function base64DetectIncompleteChar(buffer) {
6932 this.charReceived = buffer.length % 3;
6933 this.charLength = this.charReceived ? 3 : 0;
6934 }
6935
6936 },{"buffer":7}],28:[function(require,module,exports){
6937 module.exports = function isBuffer(arg) {
6938 return arg && typeof arg === 'object'
6939 && typeof arg.copy === 'function'
6940 && typeof arg.fill === 'function'
6941 && typeof arg.readUInt8 === 'function';
6942 }
6943 },{}],29:[function(require,module,exports){
6944 (function (process,global){
6945 // Copyright Joyent, Inc. and other Node contributors.
6946 //
6947 // Permission is hereby granted, free of charge, to any person obtaining a
6948 // copy of this software and associated documentation files (the
6949 // "Software"), to deal in the Software without restriction, including
6950 // without limitation the rights to use, copy, modify, merge, publish,
6951 // distribute, sublicense, and/or sell copies of the Software, and to permit
6952 // persons to whom the Software is furnished to do so, subject to the
6953 // following conditions:
6954 //
6955 // The above copyright notice and this permission notice shall be included
6956 // in all copies or substantial portions of the Software.
6957 //
6958 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6959 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6960 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6961 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6962 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6963 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6964 // USE OR OTHER DEALINGS IN THE SOFTWARE.
6965
6966 var formatRegExp = /%[sdj%]/g;
6967 exports.format = function(f) {
6968 if (!isString(f)) {
6969 var objects = [];
6970 for (var i = 0; i < arguments.length; i++) {
6971 objects.push(inspect(arguments[i]));
6972 }
6973 return objects.join(' ');
6974 }
6975
6976 var i = 1;
6977 var args = arguments;
6978 var len = args.length;
6979 var str = String(f).replace(formatRegExp, function(x) {
6980 if (x === '%%') return '%';
6981 if (i >= len) return x;
6982 switch (x) {
6983 case '%s': return String(args[i++]);
6984 case '%d': return Number(args[i++]);
6985 case '%j':
6986 try {
6987 return JSON.stringify(args[i++]);
6988 } catch (_) {
6989 return '[Circular]';
6990 }
6991 default:
6992 return x;
6993 }
6994 });
6995 for (var x = args[i]; i < len; x = args[++i]) {
6996 if (isNull(x) || !isObject(x)) {
6997 str += ' ' + x;
6998 } else {
6999 str += ' ' + inspect(x);
7000 }
7001 }
7002 return str;
7003 };
7004
7005
7006 // Mark that a method should not be used.
7007 // Returns a modified function which warns once by default.
7008 // If --no-deprecation is set, then it is a no-op.
7009 exports.deprecate = function(fn, msg) {
7010 // Allow for deprecating things in the process of starting up.
7011 if (isUndefined(global.process)) {
7012 return function() {
7013 return exports.deprecate(fn, msg).apply(this, arguments);
7014 };
7015 }
7016
7017 if (process.noDeprecation === true) {
7018 return fn;
7019 }
7020
7021 var warned = false;
7022 function deprecated() {
7023 if (!warned) {
7024 if (process.throwDeprecation) {
7025 throw new Error(msg);
7026 } else if (process.traceDeprecation) {
7027 console.trace(msg);
7028 } else {
7029 console.error(msg);
7030 }
7031 warned = true;
7032 }
7033 return fn.apply(this, arguments);
7034 }
7035
7036 return deprecated;
7037 };
7038
7039
7040 var debugs = {};
7041 var debugEnviron;
7042 exports.debuglog = function(set) {
7043 if (isUndefined(debugEnviron))
7044 debugEnviron = process.env.NODE_DEBUG || '';
7045 set = set.toUpperCase();
7046 if (!debugs[set]) {
7047 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7048 var pid = process.pid;
7049 debugs[set] = function() {
7050 var msg = exports.format.apply(exports, arguments);
7051 console.error('%s %d: %s', set, pid, msg);
7052 };
7053 } else {
7054 debugs[set] = function() {};
7055 }
7056 }
7057 return debugs[set];
7058 };
7059
7060
7061 /**
7062 * Echos the value of a value. Trys to print the value out
7063 * in the best way possible given the different types.
7064 *
7065 * @param {Object} obj The object to print out.
7066 * @param {Object} opts Optional options object that alters the output.
7067 */
7068 /* legacy: obj, showHidden, depth, colors*/
7069 function inspect(obj, opts) {
7070 // default options
7071 var ctx = {
7072 seen: [],
7073 stylize: stylizeNoColor
7074 };
7075 // legacy...
7076 if (arguments.length >= 3) ctx.depth = arguments[2];
7077 if (arguments.length >= 4) ctx.colors = arguments[3];
7078 if (isBoolean(opts)) {
7079 // legacy...
7080 ctx.showHidden = opts;
7081 } else if (opts) {
7082 // got an "options" object
7083 exports._extend(ctx, opts);
7084 }
7085 // set default options
7086 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7087 if (isUndefined(ctx.depth)) ctx.depth = 2;
7088 if (isUndefined(ctx.colors)) ctx.colors = false;
7089 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7090 if (ctx.colors) ctx.stylize = stylizeWithColor;
7091 return formatValue(ctx, obj, ctx.depth);
7092 }
7093 exports.inspect = inspect;
7094
7095
7096 // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7097 inspect.colors = {
7098 'bold' : [1, 22],
7099 'italic' : [3, 23],
7100 'underline' : [4, 24],
7101 'inverse' : [7, 27],
7102 'white' : [37, 39],
7103 'grey' : [90, 39],
7104 'black' : [30, 39],
7105 'blue' : [34, 39],
7106 'cyan' : [36, 39],
7107 'green' : [32, 39],
7108 'magenta' : [35, 39],
7109 'red' : [31, 39],
7110 'yellow' : [33, 39]
7111 };
7112
7113 // Don't use 'blue' not visible on cmd.exe
7114 inspect.styles = {
7115 'special': 'cyan',
7116 'number': 'yellow',
7117 'boolean': 'yellow',
7118 'undefined': 'grey',
7119 'null': 'bold',
7120 'string': 'green',
7121 'date': 'magenta',
7122 // "name": intentionally not styling
7123 'regexp': 'red'
7124 };
7125
7126
7127 function stylizeWithColor(str, styleType) {
7128 var style = inspect.styles[styleType];
7129
7130 if (style) {
7131 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7132 '\u001b[' + inspect.colors[style][1] + 'm';
7133 } else {
7134 return str;
7135 }
7136 }
7137
7138
7139 function stylizeNoColor(str, styleType) {
7140 return str;
7141 }
7142
7143
7144 function arrayToHash(array) {
7145 var hash = {};
7146
7147 array.forEach(function(val, idx) {
7148 hash[val] = true;
7149 });
7150
7151 return hash;
7152 }
7153
7154
7155 function formatValue(ctx, value, recurseTimes) {
7156 // Provide a hook for user-specified inspect functions.
7157 // Check that value is an object with an inspect function on it
7158 if (ctx.customInspect &&
7159 value &&
7160 isFunction(value.inspect) &&
7161 // Filter out the util module, it's inspect function is special
7162 value.inspect !== exports.inspect &&
7163 // Also filter out any prototype objects using the circular check.
7164 !(value.constructor && value.constructor.prototype === value)) {
7165 var ret = value.inspect(recurseTimes, ctx);
7166 if (!isString(ret)) {
7167 ret = formatValue(ctx, ret, recurseTimes);
7168 }
7169 return ret;
7170 }
7171
7172 // Primitive types cannot have properties
7173 var primitive = formatPrimitive(ctx, value);
7174 if (primitive) {
7175 return primitive;
7176 }
7177
7178 // Look up the keys of the object.
7179 var keys = Object.keys(value);
7180 var visibleKeys = arrayToHash(keys);
7181
7182 if (ctx.showHidden) {
7183 keys = Object.getOwnPropertyNames(value);
7184 }
7185
7186 // IE doesn't make error fields non-enumerable
7187 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7188 if (isError(value)
7189 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7190 return formatError(value);
7191 }
7192
7193 // Some type of object without properties can be shortcutted.
7194 if (keys.length === 0) {
7195 if (isFunction(value)) {
7196 var name = value.name ? ': ' + value.name : '';
7197 return ctx.stylize('[Function' + name + ']', 'special');
7198 }
7199 if (isRegExp(value)) {
7200 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7201 }
7202 if (isDate(value)) {
7203 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7204 }
7205 if (isError(value)) {
7206 return formatError(value);
7207 }
7208 }
7209
7210 var base = '', array = false, braces = ['{', '}'];
7211
7212 // Make Array say that they are Array
7213 if (isArray(value)) {
7214 array = true;
7215 braces = ['[', ']'];
7216 }
7217
7218 // Make functions say that they are functions
7219 if (isFunction(value)) {
7220 var n = value.name ? ': ' + value.name : '';
7221 base = ' [Function' + n + ']';
7222 }
7223
7224 // Make RegExps say that they are RegExps
7225 if (isRegExp(value)) {
7226 base = ' ' + RegExp.prototype.toString.call(value);
7227 }
7228
7229 // Make dates with properties first say the date
7230 if (isDate(value)) {
7231 base = ' ' + Date.prototype.toUTCString.call(value);
7232 }
7233
7234 // Make error with message first say the error
7235 if (isError(value)) {
7236 base = ' ' + formatError(value);
7237 }
7238
7239 if (keys.length === 0 && (!array || value.length == 0)) {
7240 return braces[0] + base + braces[1];
7241 }
7242
7243 if (recurseTimes < 0) {
7244 if (isRegExp(value)) {
7245 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7246 } else {
7247 return ctx.stylize('[Object]', 'special');
7248 }
7249 }
7250
7251 ctx.seen.push(value);
7252
7253 var output;
7254 if (array) {
7255 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7256 } else {
7257 output = keys.map(function(key) {
7258 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7259 });
7260 }
7261
7262 ctx.seen.pop();
7263
7264 return reduceToSingleString(output, base, braces);
7265 }
7266
7267
7268 function formatPrimitive(ctx, value) {
7269 if (isUndefined(value))
7270 return ctx.stylize('undefined', 'undefined');
7271 if (isString(value)) {
7272 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7273 .replace(/'/g, "\\'")
7274 .replace(/\\"/g, '"') + '\'';
7275 return ctx.stylize(simple, 'string');
7276 }
7277 if (isNumber(value))
7278 return ctx.stylize('' + value, 'number');
7279 if (isBoolean(value))
7280 return ctx.stylize('' + value, 'boolean');
7281 // For some reason typeof null is "object", so special case here.
7282 if (isNull(value))
7283 return ctx.stylize('null', 'null');
7284 }
7285
7286
7287 function formatError(value) {
7288 return '[' + Error.prototype.toString.call(value) + ']';
7289 }
7290
7291
7292 function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7293 var output = [];
7294 for (var i = 0, l = value.length; i < l; ++i) {
7295 if (hasOwnProperty(value, String(i))) {
7296 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7297 String(i), true));
7298 } else {
7299 output.push('');
7300 }
7301 }
7302 keys.forEach(function(key) {
7303 if (!key.match(/^\d+$/)) {
7304 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7305 key, true));
7306 }
7307 });
7308 return output;
7309 }
7310
7311
7312 function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7313 var name, str, desc;
7314 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7315 if (desc.get) {
7316 if (desc.set) {
7317 str = ctx.stylize('[Getter/Setter]', 'special');
7318 } else {
7319 str = ctx.stylize('[Getter]', 'special');
7320 }
7321 } else {
7322 if (desc.set) {
7323 str = ctx.stylize('[Setter]', 'special');
7324 }
7325 }
7326 if (!hasOwnProperty(visibleKeys, key)) {
7327 name = '[' + key + ']';
7328 }
7329 if (!str) {
7330 if (ctx.seen.indexOf(desc.value) < 0) {
7331 if (isNull(recurseTimes)) {
7332 str = formatValue(ctx, desc.value, null);
7333 } else {
7334 str = formatValue(ctx, desc.value, recurseTimes - 1);
7335 }
7336 if (str.indexOf('\n') > -1) {
7337 if (array) {
7338 str = str.split('\n').map(function(line) {
7339 return ' ' + line;
7340 }).join('\n').substr(2);
7341 } else {
7342 str = '\n' + str.split('\n').map(function(line) {
7343 return ' ' + line;
7344 }).join('\n');
7345 }
7346 }
7347 } else {
7348 str = ctx.stylize('[Circular]', 'special');
7349 }
7350 }
7351 if (isUndefined(name)) {
7352 if (array && key.match(/^\d+$/)) {
7353 return str;
7354 }
7355 name = JSON.stringify('' + key);
7356 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7357 name = name.substr(1, name.length - 2);
7358 name = ctx.stylize(name, 'name');
7359 } else {
7360 name = name.replace(/'/g, "\\'")
7361 .replace(/\\"/g, '"')
7362 .replace(/(^"|"$)/g, "'");
7363 name = ctx.stylize(name, 'string');
7364 }
7365 }
7366
7367 return name + ': ' + str;
7368 }
7369
7370
7371 function reduceToSingleString(output, base, braces) {
7372 var numLinesEst = 0;
7373 var length = output.reduce(function(prev, cur) {
7374 numLinesEst++;
7375 if (cur.indexOf('\n') >= 0) numLinesEst++;
7376 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7377 }, 0);
7378
7379 if (length > 60) {
7380 return braces[0] +
7381 (base === '' ? '' : base + '\n ') +
7382 ' ' +
7383 output.join(',\n ') +
7384 ' ' +
7385 braces[1];
7386 }
7387
7388 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7389 }
7390
7391
7392 // NOTE: These type checking functions intentionally don't use `instanceof`
7393 // because it is fragile and can be easily faked with `Object.create()`.
7394 function isArray(ar) {
7395 return Array.isArray(ar);
7396 }
7397 exports.isArray = isArray;
7398
7399 function isBoolean(arg) {
7400 return typeof arg === 'boolean';
7401 }
7402 exports.isBoolean = isBoolean;
7403
7404 function isNull(arg) {
7405 return arg === null;
7406 }
7407 exports.isNull = isNull;
7408
7409 function isNullOrUndefined(arg) {
7410 return arg == null;
7411 }
7412 exports.isNullOrUndefined = isNullOrUndefined;
7413
7414 function isNumber(arg) {
7415 return typeof arg === 'number';
7416 }
7417 exports.isNumber = isNumber;
7418
7419 function isString(arg) {
7420 return typeof arg === 'string';
7421 }
7422 exports.isString = isString;
7423
7424 function isSymbol(arg) {
7425 return typeof arg === 'symbol';
7426 }
7427 exports.isSymbol = isSymbol;
7428
7429 function isUndefined(arg) {
7430 return arg === void 0;
7431 }
7432 exports.isUndefined = isUndefined;
7433
7434 function isRegExp(re) {
7435 return isObject(re) && objectToString(re) === '[object RegExp]';
7436 }
7437 exports.isRegExp = isRegExp;
7438
7439 function isObject(arg) {
7440 return typeof arg === 'object' && arg !== null;
7441 }
7442 exports.isObject = isObject;
7443
7444 function isDate(d) {
7445 return isObject(d) && objectToString(d) === '[object Date]';
7446 }
7447 exports.isDate = isDate;
7448
7449 function isError(e) {
7450 return isObject(e) &&
7451 (objectToString(e) === '[object Error]' || e instanceof Error);
7452 }
7453 exports.isError = isError;
7454
7455 function isFunction(arg) {
7456 return typeof arg === 'function';
7457 }
7458 exports.isFunction = isFunction;
7459
7460 function isPrimitive(arg) {
7461 return arg === null ||
7462 typeof arg === 'boolean' ||
7463 typeof arg === 'number' ||
7464 typeof arg === 'string' ||
7465 typeof arg === 'symbol' || // ES6 symbol
7466 typeof arg === 'undefined';
7467 }
7468 exports.isPrimitive = isPrimitive;
7469
7470 exports.isBuffer = require('./support/isBuffer');
7471
7472 function objectToString(o) {
7473 return Object.prototype.toString.call(o);
7474 }
7475
7476
7477 function pad(n) {
7478 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7479 }
7480
7481
7482 var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7483 'Oct', 'Nov', 'Dec'];
7484
7485 // 26 Feb 16:19:34
7486 function timestamp() {
7487 var d = new Date();
7488 var time = [pad(d.getHours()),
7489 pad(d.getMinutes()),
7490 pad(d.getSeconds())].join(':');
7491 return [d.getDate(), months[d.getMonth()], time].join(' ');
7492 }
7493
7494
7495 // log is just a thin wrapper to console.log that prepends a timestamp
7496 exports.log = function() {
7497 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
7498 };
7499
7500
7501 /**
7502 * Inherit the prototype methods from one constructor into another.
7503 *
7504 * The Function.prototype.inherits from lang.js rewritten as a standalone
7505 * function (not on Function.prototype). NOTE: If this file is to be loaded
7506 * during bootstrapping this function needs to be rewritten using some native
7507 * functions as prototype setup using normal JavaScript does not work as
7508 * expected during bootstrapping (see mirror.js in r114903).
7509 *
7510 * @param {function} ctor Constructor function which needs to inherit the
7511 * prototype.
7512 * @param {function} superCtor Constructor function to inherit prototype from.
7513 */
7514 exports.inherits = require('inherits');
7515
7516 exports._extend = function(origin, add) {
7517 // Don't do anything if add isn't an object
7518 if (!add || !isObject(add)) return origin;
7519
7520 var keys = Object.keys(add);
7521 var i = keys.length;
7522 while (i--) {
7523 origin[keys[i]] = add[keys[i]];
7524 }
7525 return origin;
7526 };
7527
7528 function hasOwnProperty(obj, prop) {
7529 return Object.prototype.hasOwnProperty.call(obj, prop);
7530 }
7531
7532 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7533 },{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
7534 // Base58 encoding/decoding
7535 // Originally written by Mike Hearn for BitcoinJ
7536 // Copyright (c) 2011 Google Inc
7537 // Ported to JavaScript by Stefan Thomas
7538 // Merged Buffer refactorings from base58-native by Stephen Pair
7539 // Copyright (c) 2013 BitPay Inc
7540
7541 var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
7542 var ALPHABET_MAP = {}
7543 for(var i = 0; i < ALPHABET.length; i++) {
7544 ALPHABET_MAP[ALPHABET.charAt(i)] = i
7545 }
7546 var BASE = 58
7547
7548 function encode(buffer) {
7549 if (buffer.length === 0) return ''
7550
7551 var i, j, digits = [0]
7552 for (i = 0; i < buffer.length; i++) {
7553 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7554
7555 digits[0] += buffer[i]
7556
7557 var carry = 0
7558 for (j = 0; j < digits.length; ++j) {
7559 digits[j] += carry
7560
7561 carry = (digits[j] / BASE) | 0
7562 digits[j] %= BASE
7563 }
7564
7565 while (carry) {
7566 digits.push(carry % BASE)
7567
7568 carry = (carry / BASE) | 0
7569 }
7570 }
7571
7572 // deal with leading zeros
7573 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
7574
7575 // convert digits to a string
7576 var stringOutput = ""
7577 for (var i = digits.length - 1; i >= 0; i--) {
7578 stringOutput = stringOutput + ALPHABET[digits[i]]
7579 }
7580 return stringOutput
7581 }
7582
7583 function decode(string) {
7584 if (string.length === 0) return []
7585
7586 var i, j, bytes = [0]
7587 for (i = 0; i < string.length; i++) {
7588 var c = string[i]
7589 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
7590
7591 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7592 bytes[0] += ALPHABET_MAP[c]
7593
7594 var carry = 0
7595 for (j = 0; j < bytes.length; ++j) {
7596 bytes[j] += carry
7597
7598 carry = bytes[j] >> 8
7599 bytes[j] &= 0xff
7600 }
7601
7602 while (carry) {
7603 bytes.push(carry & 0xff)
7604
7605 carry >>= 8
7606 }
7607 }
7608
7609 // deal with leading zeros
7610 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
7611
7612 return bytes.reverse()
7613 }
7614
7615 module.exports = {
7616 encode: encode,
7617 decode: decode
7618 }
7619
7620 },{}],31:[function(require,module,exports){
7621 (function (Buffer){
7622 'use strict'
7623
7624 var base58 = require('bs58')
7625 var createHash = require('create-hash')
7626
7627 // SHA256(SHA256(buffer))
7628 function sha256x2 (buffer) {
7629 buffer = createHash('sha256').update(buffer).digest()
7630 return createHash('sha256').update(buffer).digest()
7631 }
7632
7633 // Encode a buffer as a base58-check encoded string
7634 function encode (payload) {
7635 var checksum = sha256x2(payload).slice(0, 4)
7636
7637 return base58.encode(Buffer.concat([
7638 payload,
7639 checksum
7640 ]))
7641 }
7642
7643 // Decode a base58-check encoded string to a buffer
7644 function decode (string) {
7645 var buffer = new Buffer(base58.decode(string))
7646
7647 var payload = buffer.slice(0, -4)
7648 var checksum = buffer.slice(-4)
7649 var newChecksum = sha256x2(payload).slice(0, 4)
7650
7651 for (var i = 0; i < newChecksum.length; ++i) {
7652 if (newChecksum[i] === checksum[i]) continue
7653
7654 throw new Error('Invalid checksum')
7655 }
7656
7657 return payload
7658 }
7659
7660 module.exports = {
7661 encode: encode,
7662 decode: decode
7663 }
7664
7665 }).call(this,require("buffer").Buffer)
7666 },{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
7667 (function (Buffer){
7668 'use strict';
7669 var inherits = require('inherits')
7670 var md5 = require('./md5')
7671 var rmd160 = require('ripemd160')
7672 var sha = require('sha.js')
7673
7674 var Transform = require('stream').Transform
7675
7676 function HashNoConstructor(hash) {
7677 Transform.call(this)
7678
7679 this._hash = hash
7680 this.buffers = []
7681 }
7682
7683 inherits(HashNoConstructor, Transform)
7684
7685 HashNoConstructor.prototype._transform = function (data, _, next) {
7686 this.buffers.push(data)
7687
7688 next()
7689 }
7690
7691 HashNoConstructor.prototype._flush = function (next) {
7692 this.push(this.digest())
7693 next()
7694 }
7695
7696 HashNoConstructor.prototype.update = function (data, enc) {
7697 if (typeof data === 'string') {
7698 data = new Buffer(data, enc)
7699 }
7700
7701 this.buffers.push(data)
7702 return this
7703 }
7704
7705 HashNoConstructor.prototype.digest = function (enc) {
7706 var buf = Buffer.concat(this.buffers)
7707 var r = this._hash(buf)
7708 this.buffers = null
7709
7710 return enc ? r.toString(enc) : r
7711 }
7712
7713 function Hash(hash) {
7714 Transform.call(this)
7715
7716 this._hash = hash
7717 }
7718
7719 inherits(Hash, Transform)
7720
7721 Hash.prototype._transform = function (data, enc, next) {
7722 if (enc) data = new Buffer(data, enc)
7723
7724 this._hash.update(data)
7725
7726 next()
7727 }
7728
7729 Hash.prototype._flush = function (next) {
7730 this.push(this._hash.digest())
7731 this._hash = null
7732
7733 next()
7734 }
7735
7736 Hash.prototype.update = function (data, enc) {
7737 if (typeof data === 'string') {
7738 data = new Buffer(data, enc)
7739 }
7740
7741 this._hash.update(data)
7742 return this
7743 }
7744
7745 Hash.prototype.digest = function (enc) {
7746 var outData = this._hash.digest()
7747
7748 return enc ? outData.toString(enc) : outData
7749 }
7750
7751 module.exports = function createHash (alg) {
7752 if ('md5' === alg) return new HashNoConstructor(md5)
7753 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7754
7755 return new Hash(sha(alg))
7756 }
7757
7758 }).call(this,require("buffer").Buffer)
7759 },{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
7760 (function (Buffer){
7761 'use strict';
7762 var intSize = 4;
7763 var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7764 var chrsz = 8;
7765
7766 function toArray(buf, bigEndian) {
7767 if ((buf.length % intSize) !== 0) {
7768 var len = buf.length + (intSize - (buf.length % intSize));
7769 buf = Buffer.concat([buf, zeroBuffer], len);
7770 }
7771
7772 var arr = [];
7773 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7774 for (var i = 0; i < buf.length; i += intSize) {
7775 arr.push(fn.call(buf, i));
7776 }
7777 return arr;
7778 }
7779
7780 function toBuffer(arr, size, bigEndian) {
7781 var buf = new Buffer(size);
7782 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7783 for (var i = 0; i < arr.length; i++) {
7784 fn.call(buf, arr[i], i * 4, true);
7785 }
7786 return buf;
7787 }
7788
7789 function hash(buf, fn, hashSize, bigEndian) {
7790 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7791 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7792 return toBuffer(arr, hashSize, bigEndian);
7793 }
7794 exports.hash = hash;
7795 }).call(this,require("buffer").Buffer)
7796 },{"buffer":7}],34:[function(require,module,exports){
7797 'use strict';
7798 /*
7799 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7800 * Digest Algorithm, as defined in RFC 1321.
7801 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
7802 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7803 * Distributed under the BSD License
7804 * See http://pajhome.org.uk/crypt/md5 for more info.
7805 */
7806
7807 var helpers = require('./helpers');
7808
7809 /*
7810 * Calculate the MD5 of an array of little-endian words, and a bit length
7811 */
7812 function core_md5(x, len)
7813 {
7814 /* append padding */
7815 x[len >> 5] |= 0x80 << ((len) % 32);
7816 x[(((len + 64) >>> 9) << 4) + 14] = len;
7817
7818 var a = 1732584193;
7819 var b = -271733879;
7820 var c = -1732584194;
7821 var d = 271733878;
7822
7823 for(var i = 0; i < x.length; i += 16)
7824 {
7825 var olda = a;
7826 var oldb = b;
7827 var oldc = c;
7828 var oldd = d;
7829
7830 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
7831 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
7832 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
7833 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
7834 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
7835 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
7836 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
7837 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
7838 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
7839 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
7840 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
7841 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
7842 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
7843 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
7844 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
7845 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
7846
7847 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
7848 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
7849 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
7850 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
7851 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
7852 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
7853 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
7854 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
7855 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
7856 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
7857 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
7858 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
7859 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
7860 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
7861 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
7862 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
7863
7864 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
7865 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
7866 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
7867 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
7868 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
7869 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
7870 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
7871 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
7872 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
7873 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
7874 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
7875 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
7876 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
7877 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
7878 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
7879 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
7880
7881 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
7882 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
7883 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
7884 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
7885 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
7886 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
7887 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
7888 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
7889 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
7890 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
7891 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
7892 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
7893 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
7894 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
7895 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
7896 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
7897
7898 a = safe_add(a, olda);
7899 b = safe_add(b, oldb);
7900 c = safe_add(c, oldc);
7901 d = safe_add(d, oldd);
7902 }
7903 return Array(a, b, c, d);
7904
7905 }
7906
7907 /*
7908 * These functions implement the four basic operations the algorithm uses.
7909 */
7910 function md5_cmn(q, a, b, x, s, t)
7911 {
7912 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7913 }
7914 function md5_ff(a, b, c, d, x, s, t)
7915 {
7916 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7917 }
7918 function md5_gg(a, b, c, d, x, s, t)
7919 {
7920 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7921 }
7922 function md5_hh(a, b, c, d, x, s, t)
7923 {
7924 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7925 }
7926 function md5_ii(a, b, c, d, x, s, t)
7927 {
7928 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7929 }
7930
7931 /*
7932 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7933 * to work around bugs in some JS interpreters.
7934 */
7935 function safe_add(x, y)
7936 {
7937 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
7938 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7939 return (msw << 16) | (lsw & 0xFFFF);
7940 }
7941
7942 /*
7943 * Bitwise rotate a 32-bit number to the left.
7944 */
7945 function bit_rol(num, cnt)
7946 {
7947 return (num << cnt) | (num >>> (32 - cnt));
7948 }
7949
7950 module.exports = function md5(buf) {
7951 return helpers.hash(buf, core_md5, 16);
7952 };
7953 },{"./helpers":33}],35:[function(require,module,exports){
7954 arguments[4][12][0].apply(exports,arguments)
7955 },{"dup":12}],36:[function(require,module,exports){
7956 (function (Buffer){
7957 /*
7958 CryptoJS v3.1.2
7959 code.google.com/p/crypto-js
7960 (c) 2009-2013 by Jeff Mott. All rights reserved.
7961 code.google.com/p/crypto-js/wiki/License
7962 */
7963 /** @preserve
7964 (c) 2012 by Cédric Mesnil. All rights reserved.
7965
7966 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7967
7968 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7969 - 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.
7970
7971 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.
7972 */
7973
7974 // constants table
7975 var zl = [
7976 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7977 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
7978 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
7979 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
7980 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
7981 ]
7982
7983 var zr = [
7984 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
7985 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
7986 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
7987 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
7988 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
7989 ]
7990
7991 var sl = [
7992 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7993 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
7994 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
7995 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
7996 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
7997 ]
7998
7999 var sr = [
8000 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8001 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8002 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8003 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8004 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8005 ]
8006
8007 var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8008 var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
8009
8010 function bytesToWords (bytes) {
8011 var words = []
8012 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
8013 words[b >>> 5] |= bytes[i] << (24 - b % 32)
8014 }
8015 return words
8016 }
8017
8018 function wordsToBytes (words) {
8019 var bytes = []
8020 for (var b = 0; b < words.length * 32; b += 8) {
8021 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
8022 }
8023 return bytes
8024 }
8025
8026 function processBlock (H, M, offset) {
8027 // swap endian
8028 for (var i = 0; i < 16; i++) {
8029 var offset_i = offset + i
8030 var M_offset_i = M[offset_i]
8031
8032 // Swap
8033 M[offset_i] = (
8034 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8035 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8036 )
8037 }
8038
8039 // Working variables
8040 var al, bl, cl, dl, el
8041 var ar, br, cr, dr, er
8042
8043 ar = al = H[0]
8044 br = bl = H[1]
8045 cr = cl = H[2]
8046 dr = dl = H[3]
8047 er = el = H[4]
8048
8049 // computation
8050 var t
8051 for (i = 0; i < 80; i += 1) {
8052 t = (al + M[offset + zl[i]]) | 0
8053 if (i < 16) {
8054 t += f1(bl, cl, dl) + hl[0]
8055 } else if (i < 32) {
8056 t += f2(bl, cl, dl) + hl[1]
8057 } else if (i < 48) {
8058 t += f3(bl, cl, dl) + hl[2]
8059 } else if (i < 64) {
8060 t += f4(bl, cl, dl) + hl[3]
8061 } else {// if (i<80) {
8062 t += f5(bl, cl, dl) + hl[4]
8063 }
8064 t = t | 0
8065 t = rotl(t, sl[i])
8066 t = (t + el) | 0
8067 al = el
8068 el = dl
8069 dl = rotl(cl, 10)
8070 cl = bl
8071 bl = t
8072
8073 t = (ar + M[offset + zr[i]]) | 0
8074 if (i < 16) {
8075 t += f5(br, cr, dr) + hr[0]
8076 } else if (i < 32) {
8077 t += f4(br, cr, dr) + hr[1]
8078 } else if (i < 48) {
8079 t += f3(br, cr, dr) + hr[2]
8080 } else if (i < 64) {
8081 t += f2(br, cr, dr) + hr[3]
8082 } else {// if (i<80) {
8083 t += f1(br, cr, dr) + hr[4]
8084 }
8085
8086 t = t | 0
8087 t = rotl(t, sr[i])
8088 t = (t + er) | 0
8089 ar = er
8090 er = dr
8091 dr = rotl(cr, 10)
8092 cr = br
8093 br = t
8094 }
8095
8096 // intermediate hash value
8097 t = (H[1] + cl + dr) | 0
8098 H[1] = (H[2] + dl + er) | 0
8099 H[2] = (H[3] + el + ar) | 0
8100 H[3] = (H[4] + al + br) | 0
8101 H[4] = (H[0] + bl + cr) | 0
8102 H[0] = t
8103 }
8104
8105 function f1 (x, y, z) {
8106 return ((x) ^ (y) ^ (z))
8107 }
8108
8109 function f2 (x, y, z) {
8110 return (((x) & (y)) | ((~x) & (z)))
8111 }
8112
8113 function f3 (x, y, z) {
8114 return (((x) | (~(y))) ^ (z))
8115 }
8116
8117 function f4 (x, y, z) {
8118 return (((x) & (z)) | ((y) & (~(z))))
8119 }
8120
8121 function f5 (x, y, z) {
8122 return ((x) ^ ((y) | (~(z))))
8123 }
8124
8125 function rotl (x, n) {
8126 return (x << n) | (x >>> (32 - n))
8127 }
8128
8129 function ripemd160 (message) {
8130 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
8131
8132 if (typeof message === 'string') {
8133 message = new Buffer(message, 'utf8')
8134 }
8135
8136 var m = bytesToWords(message)
8137
8138 var nBitsLeft = message.length * 8
8139 var nBitsTotal = message.length * 8
8140
8141 // Add padding
8142 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
8143 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
8144 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8145 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8146 )
8147
8148 for (var i = 0; i < m.length; i += 16) {
8149 processBlock(H, m, i)
8150 }
8151
8152 // swap endian
8153 for (i = 0; i < 5; i++) {
8154 // shortcut
8155 var H_i = H[i]
8156
8157 // Swap
8158 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8159 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
8160 }
8161
8162 var digestbytes = wordsToBytes(H)
8163 return new Buffer(digestbytes)
8164 }
8165
8166 module.exports = ripemd160
8167
8168 }).call(this,require("buffer").Buffer)
8169 },{"buffer":7}],37:[function(require,module,exports){
8170 (function (Buffer){
8171 // prototype class for hash functions
8172 function Hash (blockSize, finalSize) {
8173 this._block = new Buffer(blockSize)
8174 this._finalSize = finalSize
8175 this._blockSize = blockSize
8176 this._len = 0
8177 this._s = 0
8178 }
8179
8180 Hash.prototype.update = function (data, enc) {
8181 if (typeof data === 'string') {
8182 enc = enc || 'utf8'
8183 data = new Buffer(data, enc)
8184 }
8185
8186 var l = this._len += data.length
8187 var s = this._s || 0
8188 var f = 0
8189 var buffer = this._block
8190
8191 while (s < l) {
8192 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8193 var ch = (t - f)
8194
8195 for (var i = 0; i < ch; i++) {
8196 buffer[(s % this._blockSize) + i] = data[i + f]
8197 }
8198
8199 s += ch
8200 f += ch
8201
8202 if ((s % this._blockSize) === 0) {
8203 this._update(buffer)
8204 }
8205 }
8206 this._s = s
8207
8208 return this
8209 }
8210
8211 Hash.prototype.digest = function (enc) {
8212 // Suppose the length of the message M, in bits, is l
8213 var l = this._len * 8
8214
8215 // Append the bit 1 to the end of the message
8216 this._block[this._len % this._blockSize] = 0x80
8217
8218 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8219 this._block.fill(0, this._len % this._blockSize + 1)
8220
8221 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8222 this._update(this._block)
8223 this._block.fill(0)
8224 }
8225
8226 // to this append the block which is equal to the number l written in binary
8227 // TODO: handle case where l is > Math.pow(2, 29)
8228 this._block.writeInt32BE(l, this._blockSize - 4)
8229
8230 var hash = this._update(this._block) || this._hash()
8231
8232 return enc ? hash.toString(enc) : hash
8233 }
8234
8235 Hash.prototype._update = function () {
8236 throw new Error('_update must be implemented by subclass')
8237 }
8238
8239 module.exports = Hash
8240
8241 }).call(this,require("buffer").Buffer)
8242 },{"buffer":7}],38:[function(require,module,exports){
8243 var exports = module.exports = function SHA (algorithm) {
8244 algorithm = algorithm.toLowerCase()
8245
8246 var Algorithm = exports[algorithm]
8247 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8248
8249 return new Algorithm()
8250 }
8251
8252 exports.sha = require('./sha')
8253 exports.sha1 = require('./sha1')
8254 exports.sha224 = require('./sha224')
8255 exports.sha256 = require('./sha256')
8256 exports.sha384 = require('./sha384')
8257 exports.sha512 = require('./sha512')
8258
8259 },{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8260 (function (Buffer){
8261 /*
8262 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8263 * in FIPS PUB 180-1
8264 * This source code is derived from sha1.js of the same repository.
8265 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8266 * operation was added.
8267 */
8268
8269 var inherits = require('inherits')
8270 var Hash = require('./hash')
8271
8272 var W = new Array(80)
8273
8274 function Sha () {
8275 this.init()
8276 this._w = W
8277
8278 Hash.call(this, 64, 56)
8279 }
8280
8281 inherits(Sha, Hash)
8282
8283 Sha.prototype.init = function () {
8284 this._a = 0x67452301 | 0
8285 this._b = 0xefcdab89 | 0
8286 this._c = 0x98badcfe | 0
8287 this._d = 0x10325476 | 0
8288 this._e = 0xc3d2e1f0 | 0
8289
8290 return this
8291 }
8292
8293 /*
8294 * Bitwise rotate a 32-bit number to the left.
8295 */
8296 function rol (num, cnt) {
8297 return (num << cnt) | (num >>> (32 - cnt))
8298 }
8299
8300 Sha.prototype._update = function (M) {
8301 var W = this._w
8302
8303 var a = this._a
8304 var b = this._b
8305 var c = this._c
8306 var d = this._d
8307 var e = this._e
8308
8309 var j = 0, k
8310
8311 /*
8312 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8313 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8314 */
8315 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8316 function loop (w, f) {
8317 W[j] = w
8318
8319 var t = rol(a, 5) + f + e + w + k
8320
8321 e = d
8322 d = c
8323 c = rol(b, 30)
8324 b = a
8325 a = t
8326 j++
8327 }
8328
8329 k = 1518500249
8330 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8331 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8332 k = 1859775393
8333 while (j < 40) loop(calcW(), b ^ c ^ d)
8334 k = -1894007588
8335 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8336 k = -899497514
8337 while (j < 80) loop(calcW(), b ^ c ^ d)
8338
8339 this._a = (a + this._a) | 0
8340 this._b = (b + this._b) | 0
8341 this._c = (c + this._c) | 0
8342 this._d = (d + this._d) | 0
8343 this._e = (e + this._e) | 0
8344 }
8345
8346 Sha.prototype._hash = function () {
8347 var H = new Buffer(20)
8348
8349 H.writeInt32BE(this._a | 0, 0)
8350 H.writeInt32BE(this._b | 0, 4)
8351 H.writeInt32BE(this._c | 0, 8)
8352 H.writeInt32BE(this._d | 0, 12)
8353 H.writeInt32BE(this._e | 0, 16)
8354
8355 return H
8356 }
8357
8358 module.exports = Sha
8359
8360
8361 }).call(this,require("buffer").Buffer)
8362 },{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8363 (function (Buffer){
8364 /*
8365 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8366 * in FIPS PUB 180-1
8367 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8368 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8369 * Distributed under the BSD License
8370 * See http://pajhome.org.uk/crypt/md5 for details.
8371 */
8372
8373 var inherits = require('inherits')
8374 var Hash = require('./hash')
8375
8376 var W = new Array(80)
8377
8378 function Sha1 () {
8379 this.init()
8380 this._w = W
8381
8382 Hash.call(this, 64, 56)
8383 }
8384
8385 inherits(Sha1, Hash)
8386
8387 Sha1.prototype.init = function () {
8388 this._a = 0x67452301 | 0
8389 this._b = 0xefcdab89 | 0
8390 this._c = 0x98badcfe | 0
8391 this._d = 0x10325476 | 0
8392 this._e = 0xc3d2e1f0 | 0
8393
8394 return this
8395 }
8396
8397 /*
8398 * Bitwise rotate a 32-bit number to the left.
8399 */
8400 function rol (num, cnt) {
8401 return (num << cnt) | (num >>> (32 - cnt))
8402 }
8403
8404 Sha1.prototype._update = function (M) {
8405 var W = this._w
8406
8407 var a = this._a
8408 var b = this._b
8409 var c = this._c
8410 var d = this._d
8411 var e = this._e
8412
8413 var j = 0, k
8414
8415 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8416 function loop (w, f) {
8417 W[j] = w
8418
8419 var t = rol(a, 5) + f + e + w + k
8420
8421 e = d
8422 d = c
8423 c = rol(b, 30)
8424 b = a
8425 a = t
8426 j++
8427 }
8428
8429 k = 1518500249
8430 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8431 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8432 k = 1859775393
8433 while (j < 40) loop(calcW(), b ^ c ^ d)
8434 k = -1894007588
8435 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8436 k = -899497514
8437 while (j < 80) loop(calcW(), b ^ c ^ d)
8438
8439 this._a = (a + this._a) | 0
8440 this._b = (b + this._b) | 0
8441 this._c = (c + this._c) | 0
8442 this._d = (d + this._d) | 0
8443 this._e = (e + this._e) | 0
8444 }
8445
8446 Sha1.prototype._hash = function () {
8447 var H = new Buffer(20)
8448
8449 H.writeInt32BE(this._a | 0, 0)
8450 H.writeInt32BE(this._b | 0, 4)
8451 H.writeInt32BE(this._c | 0, 8)
8452 H.writeInt32BE(this._d | 0, 12)
8453 H.writeInt32BE(this._e | 0, 16)
8454
8455 return H
8456 }
8457
8458 module.exports = Sha1
8459
8460 }).call(this,require("buffer").Buffer)
8461 },{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8462 (function (Buffer){
8463 /**
8464 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8465 * in FIPS 180-2
8466 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8467 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8468 *
8469 */
8470
8471 var inherits = require('inherits')
8472 var Sha256 = require('./sha256')
8473 var Hash = require('./hash')
8474
8475 var W = new Array(64)
8476
8477 function Sha224 () {
8478 this.init()
8479
8480 this._w = W // new Array(64)
8481
8482 Hash.call(this, 64, 56)
8483 }
8484
8485 inherits(Sha224, Sha256)
8486
8487 Sha224.prototype.init = function () {
8488 this._a = 0xc1059ed8 | 0
8489 this._b = 0x367cd507 | 0
8490 this._c = 0x3070dd17 | 0
8491 this._d = 0xf70e5939 | 0
8492 this._e = 0xffc00b31 | 0
8493 this._f = 0x68581511 | 0
8494 this._g = 0x64f98fa7 | 0
8495 this._h = 0xbefa4fa4 | 0
8496
8497 return this
8498 }
8499
8500 Sha224.prototype._hash = function () {
8501 var H = new Buffer(28)
8502
8503 H.writeInt32BE(this._a, 0)
8504 H.writeInt32BE(this._b, 4)
8505 H.writeInt32BE(this._c, 8)
8506 H.writeInt32BE(this._d, 12)
8507 H.writeInt32BE(this._e, 16)
8508 H.writeInt32BE(this._f, 20)
8509 H.writeInt32BE(this._g, 24)
8510
8511 return H
8512 }
8513
8514 module.exports = Sha224
8515
8516 }).call(this,require("buffer").Buffer)
8517 },{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8518 (function (Buffer){
8519 /**
8520 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8521 * in FIPS 180-2
8522 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8523 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8524 *
8525 */
8526
8527 var inherits = require('inherits')
8528 var Hash = require('./hash')
8529
8530 var K = [
8531 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8532 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8533 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8534 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8535 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8536 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8537 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8538 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8539 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8540 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8541 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8542 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8543 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8544 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8545 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8546 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8547 ]
8548
8549 var W = new Array(64)
8550
8551 function Sha256 () {
8552 this.init()
8553
8554 this._w = W // new Array(64)
8555
8556 Hash.call(this, 64, 56)
8557 }
8558
8559 inherits(Sha256, Hash)
8560
8561 Sha256.prototype.init = function () {
8562 this._a = 0x6a09e667 | 0
8563 this._b = 0xbb67ae85 | 0
8564 this._c = 0x3c6ef372 | 0
8565 this._d = 0xa54ff53a | 0
8566 this._e = 0x510e527f | 0
8567 this._f = 0x9b05688c | 0
8568 this._g = 0x1f83d9ab | 0
8569 this._h = 0x5be0cd19 | 0
8570
8571 return this
8572 }
8573
8574 function S (X, n) {
8575 return (X >>> n) | (X << (32 - n))
8576 }
8577
8578 function R (X, n) {
8579 return (X >>> n)
8580 }
8581
8582 function Ch (x, y, z) {
8583 return ((x & y) ^ ((~x) & z))
8584 }
8585
8586 function Maj (x, y, z) {
8587 return ((x & y) ^ (x & z) ^ (y & z))
8588 }
8589
8590 function Sigma0256 (x) {
8591 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8592 }
8593
8594 function Sigma1256 (x) {
8595 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8596 }
8597
8598 function Gamma0256 (x) {
8599 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8600 }
8601
8602 function Gamma1256 (x) {
8603 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8604 }
8605
8606 Sha256.prototype._update = function (M) {
8607 var W = this._w
8608
8609 var a = this._a | 0
8610 var b = this._b | 0
8611 var c = this._c | 0
8612 var d = this._d | 0
8613 var e = this._e | 0
8614 var f = this._f | 0
8615 var g = this._g | 0
8616 var h = this._h | 0
8617
8618 var j = 0
8619
8620 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8621 function loop (w) {
8622 W[j] = w
8623
8624 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8625 var T2 = Sigma0256(a) + Maj(a, b, c)
8626
8627 h = g
8628 g = f
8629 f = e
8630 e = d + T1
8631 d = c
8632 c = b
8633 b = a
8634 a = T1 + T2
8635
8636 j++
8637 }
8638
8639 while (j < 16) loop(M.readInt32BE(j * 4))
8640 while (j < 64) loop(calcW())
8641
8642 this._a = (a + this._a) | 0
8643 this._b = (b + this._b) | 0
8644 this._c = (c + this._c) | 0
8645 this._d = (d + this._d) | 0
8646 this._e = (e + this._e) | 0
8647 this._f = (f + this._f) | 0
8648 this._g = (g + this._g) | 0
8649 this._h = (h + this._h) | 0
8650 }
8651
8652 Sha256.prototype._hash = function () {
8653 var H = new Buffer(32)
8654
8655 H.writeInt32BE(this._a, 0)
8656 H.writeInt32BE(this._b, 4)
8657 H.writeInt32BE(this._c, 8)
8658 H.writeInt32BE(this._d, 12)
8659 H.writeInt32BE(this._e, 16)
8660 H.writeInt32BE(this._f, 20)
8661 H.writeInt32BE(this._g, 24)
8662 H.writeInt32BE(this._h, 28)
8663
8664 return H
8665 }
8666
8667 module.exports = Sha256
8668
8669 }).call(this,require("buffer").Buffer)
8670 },{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8671 (function (Buffer){
8672 var inherits = require('inherits')
8673 var SHA512 = require('./sha512')
8674 var Hash = require('./hash')
8675
8676 var W = new Array(160)
8677
8678 function Sha384 () {
8679 this.init()
8680 this._w = W
8681
8682 Hash.call(this, 128, 112)
8683 }
8684
8685 inherits(Sha384, SHA512)
8686
8687 Sha384.prototype.init = function () {
8688 this._a = 0xcbbb9d5d | 0
8689 this._b = 0x629a292a | 0
8690 this._c = 0x9159015a | 0
8691 this._d = 0x152fecd8 | 0
8692 this._e = 0x67332667 | 0
8693 this._f = 0x8eb44a87 | 0
8694 this._g = 0xdb0c2e0d | 0
8695 this._h = 0x47b5481d | 0
8696
8697 this._al = 0xc1059ed8 | 0
8698 this._bl = 0x367cd507 | 0
8699 this._cl = 0x3070dd17 | 0
8700 this._dl = 0xf70e5939 | 0
8701 this._el = 0xffc00b31 | 0
8702 this._fl = 0x68581511 | 0
8703 this._gl = 0x64f98fa7 | 0
8704 this._hl = 0xbefa4fa4 | 0
8705
8706 return this
8707 }
8708
8709 Sha384.prototype._hash = function () {
8710 var H = new Buffer(48)
8711
8712 function writeInt64BE (h, l, offset) {
8713 H.writeInt32BE(h, offset)
8714 H.writeInt32BE(l, offset + 4)
8715 }
8716
8717 writeInt64BE(this._a, this._al, 0)
8718 writeInt64BE(this._b, this._bl, 8)
8719 writeInt64BE(this._c, this._cl, 16)
8720 writeInt64BE(this._d, this._dl, 24)
8721 writeInt64BE(this._e, this._el, 32)
8722 writeInt64BE(this._f, this._fl, 40)
8723
8724 return H
8725 }
8726
8727 module.exports = Sha384
8728
8729 }).call(this,require("buffer").Buffer)
8730 },{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
8731 (function (Buffer){
8732 var inherits = require('inherits')
8733 var Hash = require('./hash')
8734
8735 var K = [
8736 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8737 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8738 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8739 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8740 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8741 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8742 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8743 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8744 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8745 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8746 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8747 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8748 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8749 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8750 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8751 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8752 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8753 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8754 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8755 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8756 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8757 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8758 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8759 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8760 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8761 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8762 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8763 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8764 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8765 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8766 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8767 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8768 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8769 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8770 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8771 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8772 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8773 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8774 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8775 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8776 ]
8777
8778 var W = new Array(160)
8779
8780 function Sha512 () {
8781 this.init()
8782 this._w = W
8783
8784 Hash.call(this, 128, 112)
8785 }
8786
8787 inherits(Sha512, Hash)
8788
8789 Sha512.prototype.init = function () {
8790 this._a = 0x6a09e667 | 0
8791 this._b = 0xbb67ae85 | 0
8792 this._c = 0x3c6ef372 | 0
8793 this._d = 0xa54ff53a | 0
8794 this._e = 0x510e527f | 0
8795 this._f = 0x9b05688c | 0
8796 this._g = 0x1f83d9ab | 0
8797 this._h = 0x5be0cd19 | 0
8798
8799 this._al = 0xf3bcc908 | 0
8800 this._bl = 0x84caa73b | 0
8801 this._cl = 0xfe94f82b | 0
8802 this._dl = 0x5f1d36f1 | 0
8803 this._el = 0xade682d1 | 0
8804 this._fl = 0x2b3e6c1f | 0
8805 this._gl = 0xfb41bd6b | 0
8806 this._hl = 0x137e2179 | 0
8807
8808 return this
8809 }
8810
8811 function S (X, Xl, n) {
8812 return (X >>> n) | (Xl << (32 - n))
8813 }
8814
8815 function Ch (x, y, z) {
8816 return ((x & y) ^ ((~x) & z))
8817 }
8818
8819 function Maj (x, y, z) {
8820 return ((x & y) ^ (x & z) ^ (y & z))
8821 }
8822
8823 Sha512.prototype._update = function (M) {
8824 var W = this._w
8825
8826 var a = this._a | 0
8827 var b = this._b | 0
8828 var c = this._c | 0
8829 var d = this._d | 0
8830 var e = this._e | 0
8831 var f = this._f | 0
8832 var g = this._g | 0
8833 var h = this._h | 0
8834
8835 var al = this._al | 0
8836 var bl = this._bl | 0
8837 var cl = this._cl | 0
8838 var dl = this._dl | 0
8839 var el = this._el | 0
8840 var fl = this._fl | 0
8841 var gl = this._gl | 0
8842 var hl = this._hl | 0
8843
8844 var i = 0, j = 0
8845 var Wi, Wil
8846 function calcW () {
8847 var x = W[j - 15 * 2]
8848 var xl = W[j - 15 * 2 + 1]
8849 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
8850 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
8851
8852 x = W[j - 2 * 2]
8853 xl = W[j - 2 * 2 + 1]
8854 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
8855 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
8856
8857 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
8858 var Wi7 = W[j - 7 * 2]
8859 var Wi7l = W[j - 7 * 2 + 1]
8860
8861 var Wi16 = W[j - 16 * 2]
8862 var Wi16l = W[j - 16 * 2 + 1]
8863
8864 Wil = gamma0l + Wi7l
8865 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
8866 Wil = Wil + gamma1l
8867 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
8868 Wil = Wil + Wi16l
8869 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
8870 }
8871
8872 function loop () {
8873 W[j] = Wi
8874 W[j + 1] = Wil
8875
8876 var maj = Maj(a, b, c)
8877 var majl = Maj(al, bl, cl)
8878
8879 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
8880 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
8881 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
8882 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
8883
8884 // t1 = h + sigma1 + ch + K[i] + W[i]
8885 var Ki = K[j]
8886 var Kil = K[j + 1]
8887
8888 var ch = Ch(e, f, g)
8889 var chl = Ch(el, fl, gl)
8890
8891 var t1l = hl + sigma1l
8892 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
8893 t1l = t1l + chl
8894 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
8895 t1l = t1l + Kil
8896 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
8897 t1l = t1l + Wil
8898 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
8899
8900 // t2 = sigma0 + maj
8901 var t2l = sigma0l + majl
8902 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
8903
8904 h = g
8905 hl = gl
8906 g = f
8907 gl = fl
8908 f = e
8909 fl = el
8910 el = (dl + t1l) | 0
8911 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8912 d = c
8913 dl = cl
8914 c = b
8915 cl = bl
8916 b = a
8917 bl = al
8918 al = (t1l + t2l) | 0
8919 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
8920
8921 i++
8922 j += 2
8923 }
8924
8925 while (i < 16) {
8926 Wi = M.readInt32BE(j * 4)
8927 Wil = M.readInt32BE(j * 4 + 4)
8928
8929 loop()
8930 }
8931
8932 while (i < 80) {
8933 calcW()
8934 loop()
8935 }
8936
8937 this._al = (this._al + al) | 0
8938 this._bl = (this._bl + bl) | 0
8939 this._cl = (this._cl + cl) | 0
8940 this._dl = (this._dl + dl) | 0
8941 this._el = (this._el + el) | 0
8942 this._fl = (this._fl + fl) | 0
8943 this._gl = (this._gl + gl) | 0
8944 this._hl = (this._hl + hl) | 0
8945
8946 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
8947 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
8948 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
8949 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8950 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
8951 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
8952 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
8953 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
8954 }
8955
8956 Sha512.prototype._hash = function () {
8957 var H = new Buffer(64)
8958
8959 function writeInt64BE (h, l, offset) {
8960 H.writeInt32BE(h, offset)
8961 H.writeInt32BE(l, offset + 4)
8962 }
8963
8964 writeInt64BE(this._a, this._al, 0)
8965 writeInt64BE(this._b, this._bl, 8)
8966 writeInt64BE(this._c, this._cl, 16)
8967 writeInt64BE(this._d, this._dl, 24)
8968 writeInt64BE(this._e, this._el, 32)
8969 writeInt64BE(this._f, this._fl, 40)
8970 writeInt64BE(this._g, this._gl, 48)
8971 writeInt64BE(this._h, this._hl, 56)
8972
8973 return H
8974 }
8975
8976 module.exports = Sha512
8977
8978 }).call(this,require("buffer").Buffer)
8979 },{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
8980 (function (Buffer){
8981 'use strict';
8982 var createHash = require('create-hash/browser');
8983 var inherits = require('inherits')
8984
8985 var Transform = require('stream').Transform
8986
8987 var ZEROS = new Buffer(128)
8988 ZEROS.fill(0)
8989
8990 function Hmac(alg, key) {
8991 Transform.call(this)
8992
8993 if (typeof key === 'string') {
8994 key = new Buffer(key)
8995 }
8996
8997 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
8998
8999 this._alg = alg
9000 this._key = key
9001
9002 if (key.length > blocksize) {
9003 key = createHash(alg).update(key).digest()
9004
9005 } else if (key.length < blocksize) {
9006 key = Buffer.concat([key, ZEROS], blocksize)
9007 }
9008
9009 var ipad = this._ipad = new Buffer(blocksize)
9010 var opad = this._opad = new Buffer(blocksize)
9011
9012 for (var i = 0; i < blocksize; i++) {
9013 ipad[i] = key[i] ^ 0x36
9014 opad[i] = key[i] ^ 0x5C
9015 }
9016
9017 this._hash = createHash(alg).update(ipad)
9018 }
9019
9020 inherits(Hmac, Transform)
9021
9022 Hmac.prototype.update = function (data, enc) {
9023 this._hash.update(data, enc)
9024
9025 return this
9026 }
9027
9028 Hmac.prototype._transform = function (data, _, next) {
9029 this._hash.update(data)
9030
9031 next()
9032 }
9033
9034 Hmac.prototype._flush = function (next) {
9035 this.push(this.digest())
9036
9037 next()
9038 }
9039
9040 Hmac.prototype.digest = function (enc) {
9041 var h = this._hash.digest()
9042
9043 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9044 }
9045
9046 module.exports = function createHmac(alg, key) {
9047 return new Hmac(alg, key)
9048 }
9049
9050 }).call(this,require("buffer").Buffer)
9051 },{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9052 arguments[4][12][0].apply(exports,arguments)
9053 },{"dup":12}],47:[function(require,module,exports){
9054 var assert = require('assert')
9055 var BigInteger = require('bigi')
9056
9057 var Point = require('./point')
9058
9059 function Curve(p, a, b, Gx, Gy, n, h) {
9060 this.p = p
9061 this.a = a
9062 this.b = b
9063 this.G = Point.fromAffine(this, Gx, Gy)
9064 this.n = n
9065 this.h = h
9066
9067 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9068
9069 // result caching
9070 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9071 }
9072
9073 Curve.prototype.pointFromX = function(isOdd, x) {
9074 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
9075 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
9076
9077 var y = beta
9078 if (beta.isEven() ^ !isOdd) {
9079 y = this.p.subtract(y) // -y % p
9080 }
9081
9082 return Point.fromAffine(this, x, y)
9083 }
9084
9085 Curve.prototype.isInfinity = function(Q) {
9086 if (Q === this.infinity) return true
9087
9088 return Q.z.signum() === 0 && Q.y.signum() !== 0
9089 }
9090
9091 Curve.prototype.isOnCurve = function(Q) {
9092 if (this.isInfinity(Q)) return true
9093
9094 var x = Q.affineX
9095 var y = Q.affineY
9096 var a = this.a
9097 var b = this.b
9098 var p = this.p
9099
9100 // Check that xQ and yQ are integers in the interval [0, p - 1]
9101 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9102 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9103
9104 // and check that y^2 = x^3 + ax + b (mod p)
9105 var lhs = y.square().mod(p)
9106 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9107 return lhs.equals(rhs)
9108 }
9109
9110 /**
9111 * Validate an elliptic curve point.
9112 *
9113 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9114 */
9115 Curve.prototype.validate = function(Q) {
9116 // Check Q != O
9117 assert(!this.isInfinity(Q), 'Point is at infinity')
9118 assert(this.isOnCurve(Q), 'Point is not on the curve')
9119
9120 // Check nQ = O (where Q is a scalar multiple of G)
9121 var nQ = Q.multiply(this.n)
9122 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9123
9124 return true
9125 }
9126
9127 module.exports = Curve
9128
9129 },{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
9130 module.exports={
9131 "secp128r1": {
9132 "p": "fffffffdffffffffffffffffffffffff",
9133 "a": "fffffffdfffffffffffffffffffffffc",
9134 "b": "e87579c11079f43dd824993c2cee5ed3",
9135 "n": "fffffffe0000000075a30d1b9038a115",
9136 "h": "01",
9137 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9138 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9139 },
9140 "secp160k1": {
9141 "p": "fffffffffffffffffffffffffffffffeffffac73",
9142 "a": "00",
9143 "b": "07",
9144 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9145 "h": "01",
9146 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9147 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9148 },
9149 "secp160r1": {
9150 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9151 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9152 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9153 "n": "0100000000000000000001f4c8f927aed3ca752257",
9154 "h": "01",
9155 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9156 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9157 },
9158 "secp192k1": {
9159 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9160 "a": "00",
9161 "b": "03",
9162 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9163 "h": "01",
9164 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9165 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9166 },
9167 "secp192r1": {
9168 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9169 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9170 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9171 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9172 "h": "01",
9173 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9174 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9175 },
9176 "secp256k1": {
9177 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9178 "a": "00",
9179 "b": "07",
9180 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9181 "h": "01",
9182 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9183 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9184 },
9185 "secp256r1": {
9186 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9187 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9188 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9189 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9190 "h": "01",
9191 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9192 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9193 }
9194 }
9195
9196 },{}],49:[function(require,module,exports){
9197 var Point = require('./point')
9198 var Curve = require('./curve')
9199
9200 var getCurveByName = require('./names')
9201
9202 module.exports = {
9203 Curve: Curve,
9204 Point: Point,
9205 getCurveByName: getCurveByName
9206 }
9207
9208 },{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9209 var BigInteger = require('bigi')
9210
9211 var curves = require('./curves')
9212 var Curve = require('./curve')
9213
9214 function getCurveByName(name) {
9215 var curve = curves[name]
9216 if (!curve) return null
9217
9218 var p = new BigInteger(curve.p, 16)
9219 var a = new BigInteger(curve.a, 16)
9220 var b = new BigInteger(curve.b, 16)
9221 var n = new BigInteger(curve.n, 16)
9222 var h = new BigInteger(curve.h, 16)
9223 var Gx = new BigInteger(curve.Gx, 16)
9224 var Gy = new BigInteger(curve.Gy, 16)
9225
9226 return new Curve(p, a, b, Gx, Gy, n, h)
9227 }
9228
9229 module.exports = getCurveByName
9230
9231 },{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
9232 (function (Buffer){
9233 var assert = require('assert')
9234 var BigInteger = require('bigi')
9235
9236 var THREE = BigInteger.valueOf(3)
9237
9238 function Point(curve, x, y, z) {
9239 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9240
9241 this.curve = curve
9242 this.x = x
9243 this.y = y
9244 this.z = z
9245 this._zInv = null
9246
9247 this.compressed = true
9248 }
9249
9250 Object.defineProperty(Point.prototype, 'zInv', {
9251 get: function() {
9252 if (this._zInv === null) {
9253 this._zInv = this.z.modInverse(this.curve.p)
9254 }
9255
9256 return this._zInv
9257 }
9258 })
9259
9260 Object.defineProperty(Point.prototype, 'affineX', {
9261 get: function() {
9262 return this.x.multiply(this.zInv).mod(this.curve.p)
9263 }
9264 })
9265
9266 Object.defineProperty(Point.prototype, 'affineY', {
9267 get: function() {
9268 return this.y.multiply(this.zInv).mod(this.curve.p)
9269 }
9270 })
9271
9272 Point.fromAffine = function(curve, x, y) {
9273 return new Point(curve, x, y, BigInteger.ONE)
9274 }
9275
9276 Point.prototype.equals = function(other) {
9277 if (other === this) return true
9278 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9279 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9280
9281 // u = Y2 * Z1 - Y1 * Z2
9282 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9283
9284 if (u.signum() !== 0) return false
9285
9286 // v = X2 * Z1 - X1 * Z2
9287 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9288
9289 return v.signum() === 0
9290 }
9291
9292 Point.prototype.negate = function() {
9293 var y = this.curve.p.subtract(this.y)
9294
9295 return new Point(this.curve, this.x, y, this.z)
9296 }
9297
9298 Point.prototype.add = function(b) {
9299 if (this.curve.isInfinity(this)) return b
9300 if (this.curve.isInfinity(b)) return this
9301
9302 var x1 = this.x
9303 var y1 = this.y
9304 var x2 = b.x
9305 var y2 = b.y
9306
9307 // u = Y2 * Z1 - Y1 * Z2
9308 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9309 // v = X2 * Z1 - X1 * Z2
9310 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9311
9312 if (v.signum() === 0) {
9313 if (u.signum() === 0) {
9314 return this.twice() // this == b, so double
9315 }
9316
9317 return this.curve.infinity // this = -b, so infinity
9318 }
9319
9320 var v2 = v.square()
9321 var v3 = v2.multiply(v)
9322 var x1v2 = x1.multiply(v2)
9323 var zu2 = u.square().multiply(this.z)
9324
9325 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9326 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9327 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9328 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)
9329 // z3 = v^3 * z1 * z2
9330 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9331
9332 return new Point(this.curve, x3, y3, z3)
9333 }
9334
9335 Point.prototype.twice = function() {
9336 if (this.curve.isInfinity(this)) return this
9337 if (this.y.signum() === 0) return this.curve.infinity
9338
9339 var x1 = this.x
9340 var y1 = this.y
9341
9342 var y1z1 = y1.multiply(this.z)
9343 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9344 var a = this.curve.a
9345
9346 // w = 3 * x1^2 + a * z1^2
9347 var w = x1.square().multiply(THREE)
9348
9349 if (a.signum() !== 0) {
9350 w = w.add(this.z.square().multiply(a))
9351 }
9352
9353 w = w.mod(this.curve.p)
9354 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9355 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9356 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9357 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9358 // z3 = 8 * (y1 * z1)^3
9359 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9360
9361 return new Point(this.curve, x3, y3, z3)
9362 }
9363
9364 // Simple NAF (Non-Adjacent Form) multiplication algorithm
9365 // TODO: modularize the multiplication algorithm
9366 Point.prototype.multiply = function(k) {
9367 if (this.curve.isInfinity(this)) return this
9368 if (k.signum() === 0) return this.curve.infinity
9369
9370 var e = k
9371 var h = e.multiply(THREE)
9372
9373 var neg = this.negate()
9374 var R = this
9375
9376 for (var i = h.bitLength() - 2; i > 0; --i) {
9377 R = R.twice()
9378
9379 var hBit = h.testBit(i)
9380 var eBit = e.testBit(i)
9381
9382 if (hBit != eBit) {
9383 R = R.add(hBit ? this : neg)
9384 }
9385 }
9386
9387 return R
9388 }
9389
9390 // Compute this*j + x*k (simultaneous multiplication)
9391 Point.prototype.multiplyTwo = function(j, x, k) {
9392 var i
9393
9394 if (j.bitLength() > k.bitLength())
9395 i = j.bitLength() - 1
9396 else
9397 i = k.bitLength() - 1
9398
9399 var R = this.curve.infinity
9400 var both = this.add(x)
9401
9402 while (i >= 0) {
9403 R = R.twice()
9404
9405 var jBit = j.testBit(i)
9406 var kBit = k.testBit(i)
9407
9408 if (jBit) {
9409 if (kBit) {
9410 R = R.add(both)
9411
9412 } else {
9413 R = R.add(this)
9414 }
9415
9416 } else {
9417 if (kBit) {
9418 R = R.add(x)
9419 }
9420 }
9421 --i
9422 }
9423
9424 return R
9425 }
9426
9427 Point.prototype.getEncoded = function(compressed) {
9428 if (compressed == undefined) compressed = this.compressed
9429 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9430
9431 var x = this.affineX
9432 var y = this.affineY
9433
9434 var buffer
9435
9436 // Determine size of q in bytes
9437 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9438
9439 // 0x02/0x03 | X
9440 if (compressed) {
9441 buffer = new Buffer(1 + byteLength)
9442 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9443
9444 // 0x04 | X | Y
9445 } else {
9446 buffer = new Buffer(1 + byteLength + byteLength)
9447 buffer.writeUInt8(0x04, 0)
9448
9449 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9450 }
9451
9452 x.toBuffer(byteLength).copy(buffer, 1)
9453
9454 return buffer
9455 }
9456
9457 Point.decodeFrom = function(curve, buffer) {
9458 var type = buffer.readUInt8(0)
9459 var compressed = (type !== 4)
9460
9461 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
9462 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
9463
9464 var Q
9465 if (compressed) {
9466 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9467 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9468
9469 var isOdd = (type === 0x03)
9470 Q = curve.pointFromX(isOdd, x)
9471
9472 } else {
9473 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9474
9475 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9476 Q = Point.fromAffine(curve, x, y)
9477 }
9478
9479 Q.compressed = compressed
9480 return Q
9481 }
9482
9483 Point.prototype.toString = function () {
9484 if (this.curve.isInfinity(this)) return '(INFINITY)'
9485
9486 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9487 }
9488
9489 module.exports = Point
9490
9491 }).call(this,require("buffer").Buffer)
9492 },{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9493 (function (process,global,Buffer){
9494 'use strict';
9495
9496 var crypto = global.crypto || global.msCrypto
9497 if(crypto && crypto.getRandomValues) {
9498 module.exports = randomBytes;
9499 } else {
9500 module.exports = oldBrowser;
9501 }
9502 function randomBytes(size, cb) {
9503 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9504 /* This will not work in older browsers.
9505 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9506 */
9507
9508 crypto.getRandomValues(bytes);
9509 if (typeof cb === 'function') {
9510 return process.nextTick(function () {
9511 cb(null, bytes);
9512 });
9513 }
9514 return bytes;
9515 }
9516 function oldBrowser() {
9517 throw new Error(
9518 'secure random number generation not supported by this browser\n'+
9519 'use chrome, FireFox or Internet Explorer 11'
9520 )
9521 }
9522
9523 }).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9524 },{"_process":14,"buffer":7}],53:[function(require,module,exports){
9525 (function (Buffer){
9526 'use strict';
9527
9528 function getFunctionName(fn) {
9529 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9530 }
9531
9532 function getTypeTypeName(type) {
9533 if (nativeTypes.Function(type)) {
9534 type = type.toJSON ? type.toJSON() : getFunctionName(type);
9535 }
9536 if (nativeTypes.Object(type)) return JSON.stringify(type);
9537
9538 return type;
9539 }
9540
9541 function getValueTypeName(value) {
9542 if (nativeTypes.Null(value)) return '';
9543
9544 return getFunctionName(value.constructor);
9545 }
9546
9547 function tfErrorString(type, value) {
9548 var typeTypeName = getTypeTypeName(type);
9549 var valueTypeName = getValueTypeName(value);
9550
9551 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9552 }
9553
9554 function tfPropertyErrorString(type, name, value) {
9555 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9556 }
9557
9558 var nativeTypes = {
9559 Array: (function (_Array) {
9560 function Array(_x) {
9561 return _Array.apply(this, arguments);
9562 }
9563
9564 Array.toString = function () {
9565 return _Array.toString();
9566 };
9567
9568 return Array;
9569 })(function (value) {
9570 return value !== null && value !== undefined && value.constructor === Array;
9571 }),
9572 Boolean: function Boolean(value) {
9573 return typeof value === 'boolean';
9574 },
9575 Buffer: (function (_Buffer) {
9576 function Buffer(_x2) {
9577 return _Buffer.apply(this, arguments);
9578 }
9579
9580 Buffer.toString = function () {
9581 return _Buffer.toString();
9582 };
9583
9584 return Buffer;
9585 })(function (value) {
9586 return Buffer.isBuffer(value);
9587 }),
9588 Function: function Function(value) {
9589 return typeof value === 'function';
9590 },
9591 Null: function Null(value) {
9592 return value === undefined || value === null;
9593 },
9594 Number: function Number(value) {
9595 return typeof value === 'number';
9596 },
9597 Object: function Object(value) {
9598 return typeof value === 'object';
9599 },
9600 String: function String(value) {
9601 return typeof value === 'string';
9602 },
9603 '': function _() {
9604 return true;
9605 }
9606 };
9607
9608 function tJSON(type) {
9609 return type && type.toJSON ? type.toJSON() : type;
9610 }
9611
9612 function sJSON(type) {
9613 var json = tJSON(type);
9614 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
9615 }
9616
9617 var otherTypes = {
9618 arrayOf: function arrayOf(type) {
9619 function arrayOf(value, strict) {
9620 try {
9621 return nativeTypes.Array(value) && value.every(function (x) {
9622 return typeforce(type, x, strict);
9623 });
9624 } catch (e) {
9625 return false;
9626 }
9627 }
9628 arrayOf.toJSON = function () {
9629 return [tJSON(type)];
9630 };
9631
9632 return arrayOf;
9633 },
9634
9635 maybe: function maybe(type) {
9636 function maybe(value, strict) {
9637 return nativeTypes.Null(value) || typeforce(type, value, strict);
9638 }
9639 maybe.toJSON = function () {
9640 return '?' + sJSON(type);
9641 };
9642
9643 return maybe;
9644 },
9645
9646 object: function object(type) {
9647 function object(value, strict) {
9648 typeforce(nativeTypes.Object, value, strict);
9649
9650 var propertyName, propertyType, propertyValue;
9651
9652 try {
9653 for (propertyName in type) {
9654 propertyType = type[propertyName];
9655 propertyValue = value[propertyName];
9656
9657 typeforce(propertyType, propertyValue, strict);
9658 }
9659 } catch (e) {
9660 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9661 }
9662
9663 if (strict) {
9664 for (propertyName in value) {
9665 if (type[propertyName]) continue;
9666
9667 throw new TypeError('Unexpected property "' + propertyName + '"');
9668 }
9669 }
9670
9671 return true;
9672 }
9673 object.toJSON = function () {
9674 return type;
9675 };
9676
9677 return object;
9678 },
9679
9680 oneOf: function oneOf() {
9681 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9682 types[_key] = arguments[_key];
9683 }
9684
9685 function oneOf(value, strict) {
9686 return types.some(function (type) {
9687 try {
9688 return typeforce(type, value, strict);
9689 } catch (e) {
9690 return false;
9691 }
9692 });
9693 }
9694 oneOf.toJSON = function () {
9695 return types.map(sJSON).join('|');
9696 };
9697
9698 return oneOf;
9699 },
9700
9701 quacksLike: function quacksLike(type) {
9702 function quacksLike(value, strict) {
9703 return type === getValueTypeName(value);
9704 }
9705 quacksLike.toJSON = function () {
9706 return type;
9707 };
9708
9709 return quacksLike;
9710 },
9711
9712 tuple: function tuple() {
9713 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9714 types[_key2] = arguments[_key2];
9715 }
9716
9717 function tuple(value, strict) {
9718 return types.every(function (type, i) {
9719 return typeforce(type, value[i], strict);
9720 });
9721 }
9722 tuple.toJSON = function () {
9723 return '(' + types.map(sJSON).join(', ') + ')';
9724 };
9725
9726 return tuple;
9727 },
9728
9729 value: function value(expected) {
9730 function value(actual) {
9731 return actual === expected;
9732 }
9733 value.toJSON = function () {
9734 return expected;
9735 };
9736
9737 return value;
9738 }
9739 };
9740
9741 function compile(type) {
9742 if (nativeTypes.String(type)) {
9743 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9744
9745 return nativeTypes[type] || otherTypes.quacksLike(type);
9746 } else if (type && nativeTypes.Object(type)) {
9747 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9748
9749 var compiled = {};
9750
9751 for (var propertyName in type) {
9752 compiled[propertyName] = compile(type[propertyName]);
9753 }
9754
9755 return otherTypes.object(compiled);
9756 } else if (nativeTypes.Function(type)) {
9757 return type;
9758 }
9759
9760 return otherTypes.value(type);
9761 }
9762
9763 function typeforce(_x3, _x4, _x5) {
9764 var _again = true;
9765
9766 _function: while (_again) {
9767 var type = _x3,
9768 value = _x4,
9769 strict = _x5;
9770 _again = false;
9771
9772 if (nativeTypes.Function(type)) {
9773 if (type(value, strict)) return true;
9774
9775 throw new TypeError(tfErrorString(type, value));
9776 }
9777
9778 // JIT
9779 _x3 = compile(type);
9780 _x4 = value;
9781 _x5 = strict;
9782 _again = true;
9783 continue _function;
9784 }
9785 }
9786
9787 // assign all types to typeforce function
9788 var typeName;
9789 Object.keys(nativeTypes).forEach(function (typeName) {
9790 var nativeType = nativeTypes[typeName];
9791 nativeType.toJSON = function () {
9792 return typeName;
9793 };
9794
9795 typeforce[typeName] = nativeType;
9796 });
9797
9798 for (typeName in otherTypes) {
9799 typeforce[typeName] = otherTypes[typeName];
9800 }
9801
9802 module.exports = typeforce;
9803 module.exports.compile = compile;
9804 }).call(this,require("buffer").Buffer)
9805 },{"buffer":7}],54:[function(require,module,exports){
9806 (function (Buffer){
9807 var assert = require('assert')
9808 var base58check = require('bs58check')
9809 var typeForce = require('typeforce')
9810 var networks = require('./networks')
9811 var scripts = require('./scripts')
9812
9813 function findScriptTypeByVersion (version) {
9814 for (var networkName in networks) {
9815 var network = networks[networkName]
9816
9817 if (version === network.pubKeyHash) return 'pubkeyhash'
9818 if (version === network.scriptHash) return 'scripthash'
9819 }
9820 }
9821
9822 function Address (hash, version) {
9823 typeForce('Buffer', hash)
9824
9825 assert.strictEqual(hash.length, 20, 'Invalid hash length')
9826 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
9827
9828 this.hash = hash
9829 this.version = version
9830 }
9831
9832 Address.fromBase58Check = function (string) {
9833 var payload = base58check.decode(string)
9834 var version = payload.readUInt8(0)
9835 var hash = payload.slice(1)
9836
9837 return new Address(hash, version)
9838 }
9839
9840 Address.fromOutputScript = function (script, network) {
9841 network = network || networks.bitcoin
9842
9843 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
9844 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
9845
9846 assert(false, script.toASM() + ' has no matching Address')
9847 }
9848
9849 Address.prototype.toBase58Check = function () {
9850 var payload = new Buffer(21)
9851 payload.writeUInt8(this.version, 0)
9852 this.hash.copy(payload, 1)
9853
9854 return base58check.encode(payload)
9855 }
9856
9857 Address.prototype.toOutputScript = function () {
9858 var scriptType = findScriptTypeByVersion(this.version)
9859
9860 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9861 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9862
9863 assert(false, this.toString() + ' has no matching Script')
9864 }
9865
9866 Address.prototype.toString = Address.prototype.toBase58Check
9867
9868 module.exports = Address
9869
9870 }).call(this,require("buffer").Buffer)
9871 },{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
9872 var bs58check = require('bs58check')
9873
9874 function decode () {
9875 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9876
9877 return bs58check.decode.apply(undefined, arguments)
9878 }
9879
9880 function encode () {
9881 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9882
9883 return bs58check.encode.apply(undefined, arguments)
9884 }
9885
9886 module.exports = {
9887 decode: decode,
9888 encode: encode
9889 }
9890
9891 },{"bs58check":31}],56:[function(require,module,exports){
9892 (function (Buffer){
9893 var assert = require('assert')
9894 var bufferutils = require('./bufferutils')
9895 var crypto = require('./crypto')
9896
9897 var Transaction = require('./transaction')
9898
9899 function Block () {
9900 this.version = 1
9901 this.prevHash = null
9902 this.merkleRoot = null
9903 this.timestamp = 0
9904 this.bits = 0
9905 this.nonce = 0
9906 }
9907
9908 Block.fromBuffer = function (buffer) {
9909 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
9910
9911 var offset = 0
9912 function readSlice (n) {
9913 offset += n
9914 return buffer.slice(offset - n, offset)
9915 }
9916
9917 function readUInt32 () {
9918 var i = buffer.readUInt32LE(offset)
9919 offset += 4
9920 return i
9921 }
9922
9923 var block = new Block()
9924 block.version = readUInt32()
9925 block.prevHash = readSlice(32)
9926 block.merkleRoot = readSlice(32)
9927 block.timestamp = readUInt32()
9928 block.bits = readUInt32()
9929 block.nonce = readUInt32()
9930
9931 if (buffer.length === 80) return block
9932
9933 function readVarInt () {
9934 var vi = bufferutils.readVarInt(buffer, offset)
9935 offset += vi.size
9936 return vi.number
9937 }
9938
9939 // FIXME: poor performance
9940 function readTransaction () {
9941 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9942
9943 offset += tx.toBuffer().length
9944 return tx
9945 }
9946
9947 var nTransactions = readVarInt()
9948 block.transactions = []
9949
9950 for (var i = 0; i < nTransactions; ++i) {
9951 var tx = readTransaction()
9952 block.transactions.push(tx)
9953 }
9954
9955 return block
9956 }
9957
9958 Block.fromHex = function (hex) {
9959 return Block.fromBuffer(new Buffer(hex, 'hex'))
9960 }
9961
9962 Block.prototype.getHash = function () {
9963 return crypto.hash256(this.toBuffer(true))
9964 }
9965
9966 Block.prototype.getId = function () {
9967 return bufferutils.reverse(this.getHash()).toString('hex')
9968 }
9969
9970 Block.prototype.getUTCDate = function () {
9971 var date = new Date(0) // epoch
9972 date.setUTCSeconds(this.timestamp)
9973
9974 return date
9975 }
9976
9977 Block.prototype.toBuffer = function (headersOnly) {
9978 var buffer = new Buffer(80)
9979
9980 var offset = 0
9981 function writeSlice (slice) {
9982 slice.copy(buffer, offset)
9983 offset += slice.length
9984 }
9985
9986 function writeUInt32 (i) {
9987 buffer.writeUInt32LE(i, offset)
9988 offset += 4
9989 }
9990
9991 writeUInt32(this.version)
9992 writeSlice(this.prevHash)
9993 writeSlice(this.merkleRoot)
9994 writeUInt32(this.timestamp)
9995 writeUInt32(this.bits)
9996 writeUInt32(this.nonce)
9997
9998 if (headersOnly || !this.transactions) return buffer
9999
10000 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10001 var txBuffers = this.transactions.map(function (tx) {
10002 return tx.toBuffer()
10003 })
10004
10005 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
10006 }
10007
10008 Block.prototype.toHex = function (headersOnly) {
10009 return this.toBuffer(headersOnly).toString('hex')
10010 }
10011
10012 module.exports = Block
10013
10014 }).call(this,require("buffer").Buffer)
10015 },{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10016 (function (Buffer){
10017 var assert = require('assert')
10018 var opcodes = require('./opcodes')
10019
10020 // https://github.com/feross/buffer/blob/master/index.js#L1127
10021 function verifuint (value, max) {
10022 assert(typeof value === 'number', 'cannot write a non-number as a number')
10023 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10024 assert(value <= max, 'value is larger than maximum value for type')
10025 assert(Math.floor(value) === value, 'value has a fractional component')
10026 }
10027
10028 function pushDataSize (i) {
10029 return i < opcodes.OP_PUSHDATA1 ? 1
10030 : i < 0xff ? 2
10031 : i < 0xffff ? 3
10032 : 5
10033 }
10034
10035 function readPushDataInt (buffer, offset) {
10036 var opcode = buffer.readUInt8(offset)
10037 var number, size
10038
10039 // ~6 bit
10040 if (opcode < opcodes.OP_PUSHDATA1) {
10041 number = opcode
10042 size = 1
10043
10044 // 8 bit
10045 } else if (opcode === opcodes.OP_PUSHDATA1) {
10046 if (offset + 2 > buffer.length) return null
10047 number = buffer.readUInt8(offset + 1)
10048 size = 2
10049
10050 // 16 bit
10051 } else if (opcode === opcodes.OP_PUSHDATA2) {
10052 if (offset + 3 > buffer.length) return null
10053 number = buffer.readUInt16LE(offset + 1)
10054 size = 3
10055
10056 // 32 bit
10057 } else {
10058 if (offset + 5 > buffer.length) return null
10059 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10060
10061 number = buffer.readUInt32LE(offset + 1)
10062 size = 5
10063 }
10064
10065 return {
10066 opcode: opcode,
10067 number: number,
10068 size: size
10069 }
10070 }
10071
10072 function readUInt64LE (buffer, offset) {
10073 var a = buffer.readUInt32LE(offset)
10074 var b = buffer.readUInt32LE(offset + 4)
10075 b *= 0x100000000
10076
10077 verifuint(b + a, 0x001fffffffffffff)
10078
10079 return b + a
10080 }
10081
10082 function readVarInt (buffer, offset) {
10083 var t = buffer.readUInt8(offset)
10084 var number, size
10085
10086 // 8 bit
10087 if (t < 253) {
10088 number = t
10089 size = 1
10090
10091 // 16 bit
10092 } else if (t < 254) {
10093 number = buffer.readUInt16LE(offset + 1)
10094 size = 3
10095
10096 // 32 bit
10097 } else if (t < 255) {
10098 number = buffer.readUInt32LE(offset + 1)
10099 size = 5
10100
10101 // 64 bit
10102 } else {
10103 number = readUInt64LE(buffer, offset + 1)
10104 size = 9
10105 }
10106
10107 return {
10108 number: number,
10109 size: size
10110 }
10111 }
10112
10113 function writePushDataInt (buffer, number, offset) {
10114 var size = pushDataSize(number)
10115
10116 // ~6 bit
10117 if (size === 1) {
10118 buffer.writeUInt8(number, offset)
10119
10120 // 8 bit
10121 } else if (size === 2) {
10122 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10123 buffer.writeUInt8(number, offset + 1)
10124
10125 // 16 bit
10126 } else if (size === 3) {
10127 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10128 buffer.writeUInt16LE(number, offset + 1)
10129
10130 // 32 bit
10131 } else {
10132 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10133 buffer.writeUInt32LE(number, offset + 1)
10134 }
10135
10136 return size
10137 }
10138
10139 function writeUInt64LE (buffer, value, offset) {
10140 verifuint(value, 0x001fffffffffffff)
10141
10142 buffer.writeInt32LE(value & -1, offset)
10143 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10144 }
10145
10146 function varIntSize (i) {
10147 return i < 253 ? 1
10148 : i < 0x10000 ? 3
10149 : i < 0x100000000 ? 5
10150 : 9
10151 }
10152
10153 function writeVarInt (buffer, number, offset) {
10154 var size = varIntSize(number)
10155
10156 // 8 bit
10157 if (size === 1) {
10158 buffer.writeUInt8(number, offset)
10159
10160 // 16 bit
10161 } else if (size === 3) {
10162 buffer.writeUInt8(253, offset)
10163 buffer.writeUInt16LE(number, offset + 1)
10164
10165 // 32 bit
10166 } else if (size === 5) {
10167 buffer.writeUInt8(254, offset)
10168 buffer.writeUInt32LE(number, offset + 1)
10169
10170 // 64 bit
10171 } else {
10172 buffer.writeUInt8(255, offset)
10173 writeUInt64LE(buffer, number, offset + 1)
10174 }
10175
10176 return size
10177 }
10178
10179 function varIntBuffer (i) {
10180 var size = varIntSize(i)
10181 var buffer = new Buffer(size)
10182 writeVarInt(buffer, i, 0)
10183
10184 return buffer
10185 }
10186
10187 function reverse (buffer) {
10188 var buffer2 = new Buffer(buffer)
10189 Array.prototype.reverse.call(buffer2)
10190 return buffer2
10191 }
10192
10193 module.exports = {
10194 pushDataSize: pushDataSize,
10195 readPushDataInt: readPushDataInt,
10196 readUInt64LE: readUInt64LE,
10197 readVarInt: readVarInt,
10198 reverse: reverse,
10199 varIntBuffer: varIntBuffer,
10200 varIntSize: varIntSize,
10201 writePushDataInt: writePushDataInt,
10202 writeUInt64LE: writeUInt64LE,
10203 writeVarInt: writeVarInt
10204 }
10205
10206 }).call(this,require("buffer").Buffer)
10207 },{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10208 var createHash = require('create-hash')
10209
10210 function hash160 (buffer) {
10211 return ripemd160(sha256(buffer))
10212 }
10213
10214 function hash256 (buffer) {
10215 return sha256(sha256(buffer))
10216 }
10217
10218 function ripemd160 (buffer) {
10219 return createHash('rmd160').update(buffer).digest()
10220 }
10221
10222 function sha1 (buffer) {
10223 return createHash('sha1').update(buffer).digest()
10224 }
10225
10226 function sha256 (buffer) {
10227 return createHash('sha256').update(buffer).digest()
10228 }
10229
10230 // FIXME: Name not consistent with others
10231 var createHmac = require('create-hmac')
10232
10233 function HmacSHA256 (buffer, secret) {
10234 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10235 return createHmac('sha256', secret).update(buffer).digest()
10236 }
10237
10238 function HmacSHA512 (buffer, secret) {
10239 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10240 return createHmac('sha512', secret).update(buffer).digest()
10241 }
10242
10243 module.exports = {
10244 ripemd160: ripemd160,
10245 sha1: sha1,
10246 sha256: sha256,
10247 hash160: hash160,
10248 hash256: hash256,
10249 HmacSHA256: HmacSHA256,
10250 HmacSHA512: HmacSHA512
10251 }
10252
10253 },{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
10254 (function (Buffer){
10255 var assert = require('assert')
10256 var createHmac = require('create-hmac')
10257 var typeForce = require('typeforce')
10258
10259 var BigInteger = require('bigi')
10260 var ECSignature = require('./ecsignature')
10261
10262 var ZERO = new Buffer([0])
10263 var ONE = new Buffer([1])
10264
10265 // https://tools.ietf.org/html/rfc6979#section-3.2
10266 function deterministicGenerateK (curve, hash, d, checkSig) {
10267 typeForce('Buffer', hash)
10268 typeForce('BigInteger', d)
10269
10270 // FIXME: remove/uncomment for 2.0.0
10271 // typeForce('Function', checkSig)
10272
10273 if (typeof checkSig !== 'function') {
10274 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10275
10276 checkSig = function (k) {
10277 var G = curve.G
10278 var n = curve.n
10279 var e = BigInteger.fromBuffer(hash)
10280
10281 var Q = G.multiply(k)
10282
10283 if (curve.isInfinity(Q))
10284 return false
10285
10286 var r = Q.affineX.mod(n)
10287 if (r.signum() === 0)
10288 return false
10289
10290 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10291 if (s.signum() === 0)
10292 return false
10293
10294 return true
10295 }
10296 }
10297
10298 // sanity check
10299 assert.equal(hash.length, 32, 'Hash must be 256 bit')
10300
10301 var x = d.toBuffer(32)
10302 var k = new Buffer(32)
10303 var v = new Buffer(32)
10304
10305 // Step A, ignored as hash already provided
10306 // Step B
10307 v.fill(1)
10308
10309 // Step C
10310 k.fill(0)
10311
10312 // Step D
10313 k = createHmac('sha256', k)
10314 .update(v)
10315 .update(ZERO)
10316 .update(x)
10317 .update(hash)
10318 .digest()
10319
10320 // Step E
10321 v = createHmac('sha256', k).update(v).digest()
10322
10323 // Step F
10324 k = createHmac('sha256', k)
10325 .update(v)
10326 .update(ONE)
10327 .update(x)
10328 .update(hash)
10329 .digest()
10330
10331 // Step G
10332 v = createHmac('sha256', k).update(v).digest()
10333
10334 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10335 // Step H2b
10336 v = createHmac('sha256', k).update(v).digest()
10337
10338 var T = BigInteger.fromBuffer(v)
10339
10340 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10341 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10342 k = createHmac('sha256', k)
10343 .update(v)
10344 .update(ZERO)
10345 .digest()
10346
10347 v = createHmac('sha256', k).update(v).digest()
10348
10349 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10350 // Step H2b again
10351 v = createHmac('sha256', k).update(v).digest()
10352 T = BigInteger.fromBuffer(v)
10353 }
10354
10355 return T
10356 }
10357
10358 function sign (curve, hash, d) {
10359 var r, s
10360
10361 var e = BigInteger.fromBuffer(hash)
10362 var n = curve.n
10363 var G = curve.G
10364
10365 deterministicGenerateK(curve, hash, d, function (k) {
10366 var Q = G.multiply(k)
10367
10368 if (curve.isInfinity(Q))
10369 return false
10370
10371 r = Q.affineX.mod(n)
10372 if (r.signum() === 0)
10373 return false
10374
10375 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10376 if (s.signum() === 0)
10377 return false
10378
10379 return true
10380 })
10381
10382 var N_OVER_TWO = n.shiftRight(1)
10383
10384 // enforce low S values, see bip62: 'low s values in signatures'
10385 if (s.compareTo(N_OVER_TWO) > 0) {
10386 s = n.subtract(s)
10387 }
10388
10389 return new ECSignature(r, s)
10390 }
10391
10392 function verifyRaw (curve, e, signature, Q) {
10393 var n = curve.n
10394 var G = curve.G
10395
10396 var r = signature.r
10397 var s = signature.s
10398
10399 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10400 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10401 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
10402
10403 // c = s^-1 mod n
10404 var c = s.modInverse(n)
10405
10406 // 1.4.4 Compute u1 = es^−1 mod n
10407 // u2 = rs^−1 mod n
10408 var u1 = e.multiply(c).mod(n)
10409 var u2 = r.multiply(c).mod(n)
10410
10411 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10412 var R = G.multiplyTwo(u1, Q, u2)
10413 var v = R.affineX.mod(n)
10414
10415 // 1.4.5 (cont.) Enforce R is not at infinity
10416 if (curve.isInfinity(R)) return false
10417
10418 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
10419 return v.equals(r)
10420 }
10421
10422 function verify (curve, hash, signature, Q) {
10423 // 1.4.2 H = Hash(M), already done by the user
10424 // 1.4.3 e = H
10425 var e = BigInteger.fromBuffer(hash)
10426
10427 return verifyRaw(curve, e, signature, Q)
10428 }
10429
10430 /**
10431 * Recover a public key from a signature.
10432 *
10433 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10434 * Key Recovery Operation".
10435 *
10436 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10437 */
10438 function recoverPubKey (curve, e, signature, i) {
10439 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10440
10441 var n = curve.n
10442 var G = curve.G
10443
10444 var r = signature.r
10445 var s = signature.s
10446
10447 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10448 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10449
10450 // A set LSB signifies that the y-coordinate is odd
10451 var isYOdd = i & 1
10452
10453 // The more significant bit specifies whether we should use the
10454 // first or second candidate key.
10455 var isSecondKey = i >> 1
10456
10457 // 1.1 Let x = r + jn
10458 var x = isSecondKey ? r.add(n) : r
10459 var R = curve.pointFromX(isYOdd, x)
10460
10461 // 1.4 Check that nR is at infinity
10462 var nR = R.multiply(n)
10463 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10464
10465 // Compute -e from e
10466 var eNeg = e.negate().mod(n)
10467
10468 // 1.6.1 Compute Q = r^-1 (sR - eG)
10469 // Q = r^-1 (sR + -eG)
10470 var rInv = r.modInverse(n)
10471
10472 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10473 curve.validate(Q)
10474
10475 return Q
10476 }
10477
10478 /**
10479 * Calculate pubkey extraction parameter.
10480 *
10481 * When extracting a pubkey from a signature, we have to
10482 * distinguish four different cases. Rather than putting this
10483 * burden on the verifier, Bitcoin includes a 2-bit value with the
10484 * signature.
10485 *
10486 * This function simply tries all four cases and returns the value
10487 * that resulted in a successful pubkey recovery.
10488 */
10489 function calcPubKeyRecoveryParam (curve, e, signature, Q) {
10490 for (var i = 0; i < 4; i++) {
10491 var Qprime = recoverPubKey(curve, e, signature, i)
10492
10493 // 1.6.2 Verify Q
10494 if (Qprime.equals(Q)) {
10495 return i
10496 }
10497 }
10498
10499 throw new Error('Unable to find valid recovery factor')
10500 }
10501
10502 module.exports = {
10503 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10504 deterministicGenerateK: deterministicGenerateK,
10505 recoverPubKey: recoverPubKey,
10506 sign: sign,
10507 verify: verify,
10508 verifyRaw: verifyRaw
10509 }
10510
10511 }).call(this,require("buffer").Buffer)
10512 },{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
10513 (function (Buffer){
10514 var assert = require('assert')
10515 var base58check = require('bs58check')
10516 var ecdsa = require('./ecdsa')
10517 var networks = require('./networks')
10518 var randomBytes = require('randombytes')
10519 var typeForce = require('typeforce')
10520
10521 var BigInteger = require('bigi')
10522 var ECPubKey = require('./ecpubkey')
10523
10524 var ecurve = require('ecurve')
10525 var secp256k1 = ecurve.getCurveByName('secp256k1')
10526
10527 function ECKey (d, compressed) {
10528 assert(d.signum() > 0, 'Private key must be greater than 0')
10529 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
10530
10531 var Q = ECKey.curve.G.multiply(d)
10532
10533 this.d = d
10534 this.pub = new ECPubKey(Q, compressed)
10535 }
10536
10537 // Constants
10538 ECKey.curve = secp256k1
10539
10540 // Static constructors
10541 ECKey.fromWIF = function (string) {
10542 var payload = base58check.decode(string)
10543 var compressed = false
10544
10545 // Ignore the version byte
10546 payload = payload.slice(1)
10547
10548 if (payload.length === 33) {
10549 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10550
10551 // Truncate the compression flag
10552 payload = payload.slice(0, -1)
10553 compressed = true
10554 }
10555
10556 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10557
10558 var d = BigInteger.fromBuffer(payload)
10559 return new ECKey(d, compressed)
10560 }
10561
10562 ECKey.makeRandom = function (compressed, rng) {
10563 rng = rng || randomBytes
10564
10565 var buffer = rng(32)
10566 typeForce('Buffer', buffer)
10567 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
10568
10569 var d = BigInteger.fromBuffer(buffer)
10570 d = d.mod(ECKey.curve.n)
10571
10572 return new ECKey(d, compressed)
10573 }
10574
10575 // Export functions
10576 ECKey.prototype.toWIF = function (network) {
10577 network = network || networks.bitcoin
10578
10579 var bufferLen = this.pub.compressed ? 34 : 33
10580 var buffer = new Buffer(bufferLen)
10581
10582 buffer.writeUInt8(network.wif, 0)
10583 this.d.toBuffer(32).copy(buffer, 1)
10584
10585 if (this.pub.compressed) {
10586 buffer.writeUInt8(0x01, 33)
10587 }
10588
10589 return base58check.encode(buffer)
10590 }
10591
10592 // Operations
10593 ECKey.prototype.sign = function (hash) {
10594 return ecdsa.sign(ECKey.curve, hash, this.d)
10595 }
10596
10597 module.exports = ECKey
10598
10599 }).call(this,require("buffer").Buffer)
10600 },{"./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){
10601 (function (Buffer){
10602 var crypto = require('./crypto')
10603 var ecdsa = require('./ecdsa')
10604 var typeForce = require('typeforce')
10605 var networks = require('./networks')
10606
10607 var Address = require('./address')
10608
10609 var ecurve = require('ecurve')
10610 var secp256k1 = ecurve.getCurveByName('secp256k1')
10611
10612 function ECPubKey (Q, compressed) {
10613 if (compressed === undefined) {
10614 compressed = true
10615 }
10616
10617 typeForce('Point', Q)
10618 typeForce('Boolean', compressed)
10619
10620 this.compressed = compressed
10621 this.Q = Q
10622 }
10623
10624 // Constants
10625 ECPubKey.curve = secp256k1
10626
10627 // Static constructors
10628 ECPubKey.fromBuffer = function (buffer) {
10629 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
10630 return new ECPubKey(Q, Q.compressed)
10631 }
10632
10633 ECPubKey.fromHex = function (hex) {
10634 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10635 }
10636
10637 // Operations
10638 ECPubKey.prototype.getAddress = function (network) {
10639 network = network || networks.bitcoin
10640
10641 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10642 }
10643
10644 ECPubKey.prototype.verify = function (hash, signature) {
10645 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
10646 }
10647
10648 // Export functions
10649 ECPubKey.prototype.toBuffer = function () {
10650 return this.Q.getEncoded(this.compressed)
10651 }
10652
10653 ECPubKey.prototype.toHex = function () {
10654 return this.toBuffer().toString('hex')
10655 }
10656
10657 module.exports = ECPubKey
10658
10659 }).call(this,require("buffer").Buffer)
10660 },{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
10661 (function (Buffer){
10662 var assert = require('assert')
10663 var typeForce = require('typeforce')
10664
10665 var BigInteger = require('bigi')
10666
10667 function ECSignature (r, s) {
10668 typeForce('BigInteger', r)
10669 typeForce('BigInteger', s)
10670
10671 this.r = r
10672 this.s = s
10673 }
10674
10675 ECSignature.parseCompact = function (buffer) {
10676 assert.equal(buffer.length, 65, 'Invalid signature length')
10677 var i = buffer.readUInt8(0) - 27
10678
10679 // At most 3 bits
10680 assert.equal(i, i & 7, 'Invalid signature parameter')
10681 var compressed = !!(i & 4)
10682
10683 // Recovery param only
10684 i = i & 3
10685
10686 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10687 var s = BigInteger.fromBuffer(buffer.slice(33))
10688
10689 return {
10690 compressed: compressed,
10691 i: i,
10692 signature: new ECSignature(r, s)
10693 }
10694 }
10695
10696 ECSignature.fromDER = function (buffer) {
10697 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10698 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10699 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10700
10701 var rLen = buffer.readUInt8(3)
10702 assert(rLen > 0, 'R length is zero')
10703
10704 var offset = 4 + rLen
10705 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10706
10707 var sLen = buffer.readUInt8(offset + 1)
10708 assert(sLen > 0, 'S length is zero')
10709
10710 var rB = buffer.slice(4, offset)
10711 var sB = buffer.slice(offset + 2)
10712 offset += 2 + sLen
10713
10714 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10715 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10716 }
10717
10718 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10719 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10720 }
10721
10722 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10723 var r = BigInteger.fromDERInteger(rB)
10724 var s = BigInteger.fromDERInteger(sB)
10725
10726 assert(r.signum() >= 0, 'R value is negative')
10727 assert(s.signum() >= 0, 'S value is negative')
10728
10729 return new ECSignature(r, s)
10730 }
10731
10732 // BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10733 ECSignature.parseScriptSignature = function (buffer) {
10734 var hashType = buffer.readUInt8(buffer.length - 1)
10735 var hashTypeMod = hashType & ~0x80
10736
10737 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10738
10739 return {
10740 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10741 hashType: hashType
10742 }
10743 }
10744
10745 ECSignature.prototype.toCompact = function (i, compressed) {
10746 if (compressed) {
10747 i += 4
10748 }
10749
10750 i += 27
10751
10752 var buffer = new Buffer(65)
10753 buffer.writeUInt8(i, 0)
10754
10755 this.r.toBuffer(32).copy(buffer, 1)
10756 this.s.toBuffer(32).copy(buffer, 33)
10757
10758 return buffer
10759 }
10760
10761 ECSignature.prototype.toDER = function () {
10762 var rBa = this.r.toDERInteger()
10763 var sBa = this.s.toDERInteger()
10764
10765 var sequence = []
10766
10767 // INTEGER
10768 sequence.push(0x02, rBa.length)
10769 sequence = sequence.concat(rBa)
10770
10771 // INTEGER
10772 sequence.push(0x02, sBa.length)
10773 sequence = sequence.concat(sBa)
10774
10775 // SEQUENCE
10776 sequence.unshift(0x30, sequence.length)
10777
10778 return new Buffer(sequence)
10779 }
10780
10781 ECSignature.prototype.toScriptSignature = function (hashType) {
10782 var hashTypeMod = hashType & ~0x80
10783 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10784
10785 var hashTypeBuffer = new Buffer(1)
10786 hashTypeBuffer.writeUInt8(hashType, 0)
10787
10788 return Buffer.concat([this.toDER(), hashTypeBuffer])
10789 }
10790
10791 module.exports = ECSignature
10792
10793 }).call(this,require("buffer").Buffer)
10794 },{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
10795 (function (Buffer){
10796 var assert = require('assert')
10797 var base58check = require('bs58check')
10798 var bcrypto = require('./crypto')
10799 var createHmac = require('create-hmac')
10800 var typeForce = require('typeforce')
10801 var networks = require('./networks')
10802
10803 var BigInteger = require('bigi')
10804 var ECKey = require('./eckey')
10805 var ECPubKey = require('./ecpubkey')
10806
10807 var ecurve = require('ecurve')
10808 var curve = ecurve.getCurveByName('secp256k1')
10809
10810 function findBIP32NetworkByVersion (version) {
10811 for (var name in networks) {
10812 var network = networks[name]
10813
10814 if (version === network.bip32.private || version === network.bip32.public) {
10815 return network
10816 }
10817 }
10818
10819 assert(false, 'Could not find network for ' + version.toString(16))
10820 }
10821
10822 function HDNode (K, chainCode, network) {
10823 network = network || networks.bitcoin
10824
10825 typeForce('Buffer', chainCode)
10826
10827 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
10828 assert(network.bip32, 'Unknown BIP32 constants for network')
10829
10830 this.chainCode = chainCode
10831 this.depth = 0
10832 this.index = 0
10833 this.parentFingerprint = 0x00000000
10834 this.network = network
10835
10836 if (K instanceof BigInteger) {
10837 this.privKey = new ECKey(K, true)
10838 this.pubKey = this.privKey.pub
10839 } else if (K instanceof ECKey) {
10840 assert(K.pub.compressed, 'ECKey must be compressed')
10841 this.privKey = K
10842 this.pubKey = K.pub
10843 } else if (K instanceof ECPubKey) {
10844 assert(K.compressed, 'ECPubKey must be compressed')
10845 this.pubKey = K
10846 } else {
10847 this.pubKey = new ECPubKey(K, true)
10848 }
10849 }
10850
10851 HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10852 HDNode.HIGHEST_BIT = 0x80000000
10853 HDNode.LENGTH = 78
10854
10855 HDNode.fromSeedBuffer = function (seed, network) {
10856 typeForce('Buffer', seed)
10857
10858 assert(seed.length >= 16, 'Seed should be at least 128 bits')
10859 assert(seed.length <= 64, 'Seed should be at most 512 bits')
10860
10861 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
10862 var IL = I.slice(0, 32)
10863 var IR = I.slice(32)
10864
10865 // In case IL is 0 or >= n, the master key is invalid
10866 // This is handled by `new ECKey` in the HDNode constructor
10867 var pIL = BigInteger.fromBuffer(IL)
10868
10869 return new HDNode(pIL, IR, network)
10870 }
10871
10872 HDNode.fromSeedHex = function (hex, network) {
10873 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10874 }
10875
10876 HDNode.fromBase58 = function (string, network) {
10877 return HDNode.fromBuffer(base58check.decode(string), network, true)
10878 }
10879
10880 // FIXME: remove in 2.x.y
10881 HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10882 if (!__ignoreDeprecation) {
10883 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
10884 }
10885
10886 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10887
10888 // 4 byte: version bytes
10889 var version = buffer.readUInt32BE(0)
10890
10891 if (network) {
10892 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10893
10894 // auto-detect
10895 } else {
10896 network = findBIP32NetworkByVersion(version)
10897 }
10898
10899 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
10900 var depth = buffer.readUInt8(4)
10901
10902 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10903 var parentFingerprint = buffer.readUInt32BE(5)
10904 if (depth === 0) {
10905 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
10906 }
10907
10908 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10909 // This is encoded in MSB order. (0x00000000 if master key)
10910 var index = buffer.readUInt32BE(9)
10911 assert(depth > 0 || index === 0, 'Invalid index')
10912
10913 // 32 bytes: the chain code
10914 var chainCode = buffer.slice(13, 45)
10915 var data, hd
10916
10917 // 33 bytes: private key data (0x00 + k)
10918 if (version === network.bip32.private) {
10919 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
10920 data = buffer.slice(46, 78)
10921 var d = BigInteger.fromBuffer(data)
10922 hd = new HDNode(d, chainCode, network)
10923
10924 // 33 bytes: public key data (0x02 + X or 0x03 + X)
10925 } else {
10926 data = buffer.slice(45, 78)
10927 var Q = ecurve.Point.decodeFrom(curve, data)
10928 assert.equal(Q.compressed, true, 'Invalid public key')
10929
10930 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10931 // If not, the extended public key is invalid.
10932 curve.validate(Q)
10933
10934 hd = new HDNode(Q, chainCode, network)
10935 }
10936
10937 hd.depth = depth
10938 hd.index = index
10939 hd.parentFingerprint = parentFingerprint
10940
10941 return hd
10942 }
10943
10944 // FIXME: remove in 2.x.y
10945 HDNode.fromHex = function (hex, network) {
10946 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
10947 }
10948
10949 HDNode.prototype.getIdentifier = function () {
10950 return bcrypto.hash160(this.pubKey.toBuffer())
10951 }
10952
10953 HDNode.prototype.getFingerprint = function () {
10954 return this.getIdentifier().slice(0, 4)
10955 }
10956
10957 HDNode.prototype.getAddress = function () {
10958 return this.pubKey.getAddress(this.network)
10959 }
10960
10961 HDNode.prototype.neutered = function () {
10962 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10963 neutered.depth = this.depth
10964 neutered.index = this.index
10965 neutered.parentFingerprint = this.parentFingerprint
10966
10967 return neutered
10968 }
10969
10970 HDNode.prototype.toBase58 = function (isPrivate) {
10971 return base58check.encode(this.toBuffer(isPrivate, true))
10972 }
10973
10974 // FIXME: remove in 2.x.y
10975 HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10976 if (isPrivate === undefined) {
10977 isPrivate = !!this.privKey
10978
10979 // FIXME: remove in 2.x.y
10980 } else {
10981 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10982 }
10983
10984 if (!__ignoreDeprecation) {
10985 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
10986 }
10987
10988 // Version
10989 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10990 var buffer = new Buffer(HDNode.LENGTH)
10991
10992 // 4 bytes: version bytes
10993 buffer.writeUInt32BE(version, 0)
10994
10995 // Depth
10996 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
10997 buffer.writeUInt8(this.depth, 4)
10998
10999 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11000 buffer.writeUInt32BE(this.parentFingerprint, 5)
11001
11002 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11003 // This is encoded in Big endian. (0x00000000 if master key)
11004 buffer.writeUInt32BE(this.index, 9)
11005
11006 // 32 bytes: the chain code
11007 this.chainCode.copy(buffer, 13)
11008
11009 // 33 bytes: the public key or private key data
11010 if (isPrivate) {
11011 // FIXME: remove in 2.x.y
11012 assert(this.privKey, 'Missing private key')
11013
11014 // 0x00 + k for private keys
11015 buffer.writeUInt8(0, 45)
11016 this.privKey.d.toBuffer(32).copy(buffer, 46)
11017 } else {
11018 // X9.62 encoding for public keys
11019 this.pubKey.toBuffer().copy(buffer, 45)
11020 }
11021
11022 return buffer
11023 }
11024
11025 // FIXME: remove in 2.x.y
11026 HDNode.prototype.toHex = function (isPrivate) {
11027 return this.toBuffer(isPrivate).toString('hex')
11028 }
11029
11030 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
11031 HDNode.prototype.derive = function (index) {
11032 var isHardened = index >= HDNode.HIGHEST_BIT
11033 var indexBuffer = new Buffer(4)
11034 indexBuffer.writeUInt32BE(index, 0)
11035
11036 var data
11037
11038 // Hardened child
11039 if (isHardened) {
11040 assert(this.privKey, 'Could not derive hardened child key')
11041
11042 // data = 0x00 || ser256(kpar) || ser32(index)
11043 data = Buffer.concat([
11044 this.privKey.d.toBuffer(33),
11045 indexBuffer
11046 ])
11047
11048 // Normal child
11049 } else {
11050 // data = serP(point(kpar)) || ser32(index)
11051 // = serP(Kpar) || ser32(index)
11052 data = Buffer.concat([
11053 this.pubKey.toBuffer(),
11054 indexBuffer
11055 ])
11056 }
11057
11058 var I = createHmac('sha512', this.chainCode).update(data).digest()
11059 var IL = I.slice(0, 32)
11060 var IR = I.slice(32)
11061
11062 var pIL = BigInteger.fromBuffer(IL)
11063
11064 // In case parse256(IL) >= n, proceed with the next value for i
11065 if (pIL.compareTo(curve.n) >= 0) {
11066 return this.derive(index + 1)
11067 }
11068
11069 // Private parent key -> private child key
11070 var hd
11071 if (this.privKey) {
11072 // ki = parse256(IL) + kpar (mod n)
11073 var ki = pIL.add(this.privKey.d).mod(curve.n)
11074
11075 // In case ki == 0, proceed with the next value for i
11076 if (ki.signum() === 0) {
11077 return this.derive(index + 1)
11078 }
11079
11080 hd = new HDNode(ki, IR, this.network)
11081
11082 // Public parent key -> public child key
11083 } else {
11084 // Ki = point(parse256(IL)) + Kpar
11085 // = G*IL + Kpar
11086 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11087
11088 // In case Ki is the point at infinity, proceed with the next value for i
11089 if (curve.isInfinity(Ki)) {
11090 return this.derive(index + 1)
11091 }
11092
11093 hd = new HDNode(Ki, IR, this.network)
11094 }
11095
11096 hd.depth = this.depth + 1
11097 hd.index = index
11098 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11099
11100 return hd
11101 }
11102
11103 HDNode.prototype.deriveHardened = function (index) {
11104 // Only derives hardened private keys by default
11105 return this.derive(index + HDNode.HIGHEST_BIT)
11106 }
11107
11108 HDNode.prototype.toString = HDNode.prototype.toBase58
11109
11110 module.exports = HDNode
11111
11112 }).call(this,require("buffer").Buffer)
11113 },{"./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){
11114 module.exports = {
11115 Address: require('./address'),
11116 base58check: require('./base58check'),
11117 Block: require('./block'),
11118 bufferutils: require('./bufferutils'),
11119 crypto: require('./crypto'),
11120 ecdsa: require('./ecdsa'),
11121 ECKey: require('./eckey'),
11122 ECPubKey: require('./ecpubkey'),
11123 ECSignature: require('./ecsignature'),
11124 Message: require('./message'),
11125 opcodes: require('./opcodes'),
11126 HDNode: require('./hdnode'),
11127 Script: require('./script'),
11128 scripts: require('./scripts'),
11129 Transaction: require('./transaction'),
11130 TransactionBuilder: require('./transaction_builder'),
11131 networks: require('./networks'),
11132 Wallet: require('./wallet')
11133 }
11134
11135 },{"./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){
11136 (function (Buffer){
11137 var bufferutils = require('./bufferutils')
11138 var crypto = require('./crypto')
11139 var ecdsa = require('./ecdsa')
11140 var networks = require('./networks')
11141
11142 var BigInteger = require('bigi')
11143 var ECPubKey = require('./ecpubkey')
11144 var ECSignature = require('./ecsignature')
11145
11146 var ecurve = require('ecurve')
11147 var ecparams = ecurve.getCurveByName('secp256k1')
11148
11149 function magicHash (message, network) {
11150 var magicPrefix = new Buffer(network.magicPrefix)
11151 var messageBuffer = new Buffer(message)
11152 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
11153
11154 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11155 return crypto.hash256(buffer)
11156 }
11157
11158 function sign (privKey, message, network) {
11159 network = network || networks.bitcoin
11160
11161 var hash = magicHash(message, network)
11162 var signature = privKey.sign(hash)
11163 var e = BigInteger.fromBuffer(hash)
11164 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11165
11166 return signature.toCompact(i, privKey.pub.compressed)
11167 }
11168
11169 // TODO: network could be implied from address
11170 function verify (address, signature, message, network) {
11171 if (!Buffer.isBuffer(signature)) {
11172 signature = new Buffer(signature, 'base64')
11173 }
11174
11175 network = network || networks.bitcoin
11176
11177 var hash = magicHash(message, network)
11178 var parsed = ECSignature.parseCompact(signature)
11179 var e = BigInteger.fromBuffer(hash)
11180 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11181
11182 var pubKey = new ECPubKey(Q, parsed.compressed)
11183 return pubKey.getAddress(network).toString() === address.toString()
11184 }
11185
11186 module.exports = {
11187 magicHash: magicHash,
11188 sign: sign,
11189 verify: verify
11190 }
11191
11192 }).call(this,require("buffer").Buffer)
11193 },{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
11194 // https://en.bitcoin.it/wiki/List_of_address_prefixes
11195 // Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11196
11197 var networks = {
11198 bitcoin: {
11199 magicPrefix: '\x18Bitcoin Signed Message:\n',
11200 bip32: {
11201 public: 0x0488b21e,
11202 private: 0x0488ade4
11203 },
11204 pubKeyHash: 0x00,
11205 scriptHash: 0x05,
11206 wif: 0x80,
11207 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11208 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11209 estimateFee: estimateFee('bitcoin')
11210 },
11211 testnet: {
11212 magicPrefix: '\x18Bitcoin Signed Message:\n',
11213 bip32: {
11214 public: 0x043587cf,
11215 private: 0x04358394
11216 },
11217 pubKeyHash: 0x6f,
11218 scriptHash: 0xc4,
11219 wif: 0xef,
11220 dustThreshold: 546,
11221 feePerKb: 10000,
11222 estimateFee: estimateFee('testnet')
11223 },
11224 litecoin: {
11225 magicPrefix: '\x19Litecoin Signed Message:\n',
11226 bip32: {
11227 public: 0x019da462,
11228 private: 0x019d9cfe
11229 },
11230 pubKeyHash: 0x30,
11231 scriptHash: 0x05,
11232 wif: 0xb0,
11233 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11234 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11235 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11236 estimateFee: estimateFee('litecoin')
11237 },
11238 dogecoin: {
11239 magicPrefix: '\x19Dogecoin Signed Message:\n',
11240 bip32: {
11241 public: 0x02facafd,
11242 private: 0x02fac398
11243 },
11244 pubKeyHash: 0x1e,
11245 scriptHash: 0x16,
11246 wif: 0x9e,
11247 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11248 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11249 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11250 estimateFee: estimateFee('dogecoin')
11251 },
11252 viacoin: {
11253 magicPrefix: '\x18Viacoin Signed Message:\n',
11254 bip32: {
11255 public: 0x0488b21e,
11256 private: 0x0488ade4
11257 },
11258 pubKeyHash: 0x47,
11259 scriptHash: 0x21,
11260 wif: 0xc7,
11261 dustThreshold: 560,
11262 dustSoftThreshold: 100000,
11263 feePerKb: 100000, //
11264 estimateFee: estimateFee('viacoin')
11265 },
11266 viacointestnet: {
11267 magicPrefix: '\x18Viacoin Signed Message:\n',
11268 bip32: {
11269 public: 0x043587cf,
11270 private: 0x04358394
11271 },
11272 pubKeyHash: 0x7f,
11273 scriptHash: 0xc4,
11274 wif: 0xff,
11275 dustThreshold: 560,
11276 dustSoftThreshold: 100000,
11277 feePerKb: 100000,
11278 estimateFee: estimateFee('viacointestnet')
11279 },
11280 gamerscoin: {
11281 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11282 bip32: {
11283 public: 0x019da462,
11284 private: 0x019d9cfe
11285 },
11286 pubKeyHash: 0x26,
11287 scriptHash: 0x05,
11288 wif: 0xA6,
11289 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11290 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11291 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11292 estimateFee: estimateFee('gamerscoin')
11293 },
11294 jumbucks: {
11295 magicPrefix: '\x19Jumbucks Signed Message:\n',
11296 bip32: {
11297 public: 0x037a689a,
11298 private: 0x037a6460
11299 },
11300 pubKeyHash: 0x2b,
11301 scriptHash: 0x05,
11302 wif: 0xab,
11303 dustThreshold: 0,
11304 dustSoftThreshold: 10000,
11305 feePerKb: 10000,
11306 estimateFee: estimateFee('jumbucks')
11307 },
11308 zetacoin: {
11309 magicPrefix: '\x18Zetacoin Signed Message:\n',
11310 bip32: {
11311 public: 0x0488b21e,
11312 private: 0x0488ade4
11313 },
11314 pubKeyHash: 0x50,
11315 scriptHash: 0x09,
11316 wif: 0xe0,
11317 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11318 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11319 estimateFee: estimateFee('zetacoin')
11320 }
11321 }
11322
11323 function estimateFee (type) {
11324 return function (tx) {
11325 var network = networks[type]
11326 var baseFee = network.feePerKb
11327 var byteSize = tx.toBuffer().length
11328
11329 var fee = baseFee * Math.ceil(byteSize / 1000)
11330 if (network.dustSoftThreshold === undefined) return fee
11331
11332 tx.outs.forEach(function (e) {
11333 if (e.value < network.dustSoftThreshold) {
11334 fee += baseFee
11335 }
11336 })
11337
11338 return fee
11339 }
11340 }
11341
11342 module.exports = networks
11343
11344 },{}],67:[function(require,module,exports){
11345 module.exports = {
11346 // push value
11347 OP_FALSE: 0,
11348 OP_0: 0,
11349 OP_PUSHDATA1: 76,
11350 OP_PUSHDATA2: 77,
11351 OP_PUSHDATA4: 78,
11352 OP_1NEGATE: 79,
11353 OP_RESERVED: 80,
11354 OP_1: 81,
11355 OP_TRUE: 81,
11356 OP_2: 82,
11357 OP_3: 83,
11358 OP_4: 84,
11359 OP_5: 85,
11360 OP_6: 86,
11361 OP_7: 87,
11362 OP_8: 88,
11363 OP_9: 89,
11364 OP_10: 90,
11365 OP_11: 91,
11366 OP_12: 92,
11367 OP_13: 93,
11368 OP_14: 94,
11369 OP_15: 95,
11370 OP_16: 96,
11371
11372 // control
11373 OP_NOP: 97,
11374 OP_VER: 98,
11375 OP_IF: 99,
11376 OP_NOTIF: 100,
11377 OP_VERIF: 101,
11378 OP_VERNOTIF: 102,
11379 OP_ELSE: 103,
11380 OP_ENDIF: 104,
11381 OP_VERIFY: 105,
11382 OP_RETURN: 106,
11383
11384 // stack ops
11385 OP_TOALTSTACK: 107,
11386 OP_FROMALTSTACK: 108,
11387 OP_2DROP: 109,
11388 OP_2DUP: 110,
11389 OP_3DUP: 111,
11390 OP_2OVER: 112,
11391 OP_2ROT: 113,
11392 OP_2SWAP: 114,
11393 OP_IFDUP: 115,
11394 OP_DEPTH: 116,
11395 OP_DROP: 117,
11396 OP_DUP: 118,
11397 OP_NIP: 119,
11398 OP_OVER: 120,
11399 OP_PICK: 121,
11400 OP_ROLL: 122,
11401 OP_ROT: 123,
11402 OP_SWAP: 124,
11403 OP_TUCK: 125,
11404
11405 // splice ops
11406 OP_CAT: 126,
11407 OP_SUBSTR: 127,
11408 OP_LEFT: 128,
11409 OP_RIGHT: 129,
11410 OP_SIZE: 130,
11411
11412 // bit logic
11413 OP_INVERT: 131,
11414 OP_AND: 132,
11415 OP_OR: 133,
11416 OP_XOR: 134,
11417 OP_EQUAL: 135,
11418 OP_EQUALVERIFY: 136,
11419 OP_RESERVED1: 137,
11420 OP_RESERVED2: 138,
11421
11422 // numeric
11423 OP_1ADD: 139,
11424 OP_1SUB: 140,
11425 OP_2MUL: 141,
11426 OP_2DIV: 142,
11427 OP_NEGATE: 143,
11428 OP_ABS: 144,
11429 OP_NOT: 145,
11430 OP_0NOTEQUAL: 146,
11431
11432 OP_ADD: 147,
11433 OP_SUB: 148,
11434 OP_MUL: 149,
11435 OP_DIV: 150,
11436 OP_MOD: 151,
11437 OP_LSHIFT: 152,
11438 OP_RSHIFT: 153,
11439
11440 OP_BOOLAND: 154,
11441 OP_BOOLOR: 155,
11442 OP_NUMEQUAL: 156,
11443 OP_NUMEQUALVERIFY: 157,
11444 OP_NUMNOTEQUAL: 158,
11445 OP_LESSTHAN: 159,
11446 OP_GREATERTHAN: 160,
11447 OP_LESSTHANOREQUAL: 161,
11448 OP_GREATERTHANOREQUAL: 162,
11449 OP_MIN: 163,
11450 OP_MAX: 164,
11451
11452 OP_WITHIN: 165,
11453
11454 // crypto
11455 OP_RIPEMD160: 166,
11456 OP_SHA1: 167,
11457 OP_SHA256: 168,
11458 OP_HASH160: 169,
11459 OP_HASH256: 170,
11460 OP_CODESEPARATOR: 171,
11461 OP_CHECKSIG: 172,
11462 OP_CHECKSIGVERIFY: 173,
11463 OP_CHECKMULTISIG: 174,
11464 OP_CHECKMULTISIGVERIFY: 175,
11465
11466 // expansion
11467 OP_NOP1: 176,
11468 OP_NOP2: 177,
11469 OP_NOP3: 178,
11470 OP_NOP4: 179,
11471 OP_NOP5: 180,
11472 OP_NOP6: 181,
11473 OP_NOP7: 182,
11474 OP_NOP8: 183,
11475 OP_NOP9: 184,
11476 OP_NOP10: 185,
11477
11478 // template matching params
11479 OP_PUBKEYHASH: 253,
11480 OP_PUBKEY: 254,
11481 OP_INVALIDOPCODE: 255
11482 }
11483
11484 },{}],68:[function(require,module,exports){
11485 (function (Buffer){
11486 var assert = require('assert')
11487 var bufferutils = require('./bufferutils')
11488 var crypto = require('./crypto')
11489 var typeForce = require('typeforce')
11490 var opcodes = require('./opcodes')
11491
11492 function Script (buffer, chunks) {
11493 typeForce('Buffer', buffer)
11494 typeForce('Array', chunks)
11495
11496 this.buffer = buffer
11497 this.chunks = chunks
11498 }
11499
11500 Script.fromASM = function (asm) {
11501 var strChunks = asm.split(' ')
11502 var chunks = strChunks.map(function (strChunk) {
11503 // opcode
11504 if (strChunk in opcodes) {
11505 return opcodes[strChunk]
11506
11507 // data chunk
11508 } else {
11509 return new Buffer(strChunk, 'hex')
11510 }
11511 })
11512
11513 return Script.fromChunks(chunks)
11514 }
11515
11516 Script.fromBuffer = function (buffer) {
11517 var chunks = []
11518 var i = 0
11519
11520 while (i < buffer.length) {
11521 var opcode = buffer.readUInt8(i)
11522
11523 // data chunk
11524 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11525 var d = bufferutils.readPushDataInt(buffer, i)
11526
11527 // did reading a pushDataInt fail? return non-chunked script
11528 if (d === null) return new Script(buffer, [])
11529 i += d.size
11530
11531 // attempt to read too much data?
11532 if (i + d.number > buffer.length) return new Script(buffer, [])
11533
11534 var data = buffer.slice(i, i + d.number)
11535 i += d.number
11536
11537 chunks.push(data)
11538
11539 // opcode
11540 } else {
11541 chunks.push(opcode)
11542
11543 i += 1
11544 }
11545 }
11546
11547 return new Script(buffer, chunks)
11548 }
11549
11550 Script.fromChunks = function (chunks) {
11551 typeForce('Array', chunks)
11552
11553 var bufferSize = chunks.reduce(function (accum, chunk) {
11554 // data chunk
11555 if (Buffer.isBuffer(chunk)) {
11556 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11557 }
11558
11559 // opcode
11560 return accum + 1
11561 }, 0.0)
11562
11563 var buffer = new Buffer(bufferSize)
11564 var offset = 0
11565
11566 chunks.forEach(function (chunk) {
11567 // data chunk
11568 if (Buffer.isBuffer(chunk)) {
11569 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11570
11571 chunk.copy(buffer, offset)
11572 offset += chunk.length
11573
11574 // opcode
11575 } else {
11576 buffer.writeUInt8(chunk, offset)
11577 offset += 1
11578 }
11579 })
11580
11581 assert.equal(offset, buffer.length, 'Could not decode chunks')
11582 return new Script(buffer, chunks)
11583 }
11584
11585 Script.fromHex = function (hex) {
11586 return Script.fromBuffer(new Buffer(hex, 'hex'))
11587 }
11588
11589 Script.EMPTY = Script.fromChunks([])
11590
11591 Script.prototype.getHash = function () {
11592 return crypto.hash160(this.buffer)
11593 }
11594
11595 // FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
11596 Script.prototype.without = function (needle) {
11597 return Script.fromChunks(this.chunks.filter(function (op) {
11598 return op !== needle
11599 }))
11600 }
11601
11602 var reverseOps = []
11603 for (var op in opcodes) {
11604 var code = opcodes[op]
11605 reverseOps[code] = op
11606 }
11607
11608 Script.prototype.toASM = function () {
11609 return this.chunks.map(function (chunk) {
11610 // data chunk
11611 if (Buffer.isBuffer(chunk)) {
11612 return chunk.toString('hex')
11613
11614 // opcode
11615 } else {
11616 return reverseOps[chunk]
11617 }
11618 }).join(' ')
11619 }
11620
11621 Script.prototype.toBuffer = function () {
11622 return this.buffer
11623 }
11624
11625 Script.prototype.toHex = function () {
11626 return this.toBuffer().toString('hex')
11627 }
11628
11629 module.exports = Script
11630
11631 }).call(this,require("buffer").Buffer)
11632 },{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
11633 (function (Buffer){
11634 var assert = require('assert')
11635 var ops = require('./opcodes')
11636 var typeForce = require('typeforce')
11637
11638 var ecurve = require('ecurve')
11639 var curve = ecurve.getCurveByName('secp256k1')
11640
11641 var ECSignature = require('./ecsignature')
11642 var Script = require('./script')
11643
11644 function isCanonicalPubKey (buffer) {
11645 if (!Buffer.isBuffer(buffer)) return false
11646
11647 try {
11648 ecurve.Point.decodeFrom(curve, buffer)
11649 } catch (e) {
11650 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11651 throw e
11652
11653 return false
11654 }
11655
11656 return true
11657 }
11658
11659 function isCanonicalSignature (buffer) {
11660 if (!Buffer.isBuffer(buffer)) return false
11661
11662 try {
11663 ECSignature.parseScriptSignature(buffer)
11664 } catch (e) {
11665 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/))) {
11666 throw e
11667 }
11668
11669 return false
11670 }
11671
11672 return true
11673 }
11674
11675 function isPubKeyHashInput (script) {
11676 return script.chunks.length === 2 &&
11677 isCanonicalSignature(script.chunks[0]) &&
11678 isCanonicalPubKey(script.chunks[1])
11679 }
11680
11681 function isPubKeyHashOutput (script) {
11682 return script.chunks.length === 5 &&
11683 script.chunks[0] === ops.OP_DUP &&
11684 script.chunks[1] === ops.OP_HASH160 &&
11685 Buffer.isBuffer(script.chunks[2]) &&
11686 script.chunks[2].length === 20 &&
11687 script.chunks[3] === ops.OP_EQUALVERIFY &&
11688 script.chunks[4] === ops.OP_CHECKSIG
11689 }
11690
11691 function isPubKeyInput (script) {
11692 return script.chunks.length === 1 &&
11693 isCanonicalSignature(script.chunks[0])
11694 }
11695
11696 function isPubKeyOutput (script) {
11697 return script.chunks.length === 2 &&
11698 isCanonicalPubKey(script.chunks[0]) &&
11699 script.chunks[1] === ops.OP_CHECKSIG
11700 }
11701
11702 function isScriptHashInput (script, allowIncomplete) {
11703 if (script.chunks.length < 2) return false
11704
11705 var lastChunk = script.chunks[script.chunks.length - 1]
11706 if (!Buffer.isBuffer(lastChunk)) return false
11707
11708 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11709 var redeemScript = Script.fromBuffer(lastChunk)
11710
11711 // is redeemScript a valid script?
11712 if (redeemScript.chunks.length === 0) return false
11713
11714 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
11715 }
11716
11717 function isScriptHashOutput (script) {
11718 return script.chunks.length === 3 &&
11719 script.chunks[0] === ops.OP_HASH160 &&
11720 Buffer.isBuffer(script.chunks[1]) &&
11721 script.chunks[1].length === 20 &&
11722 script.chunks[2] === ops.OP_EQUAL
11723 }
11724
11725 // allowIncomplete is to account for combining signatures
11726 // See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11727 function isMultisigInput (script, allowIncomplete) {
11728 if (script.chunks.length < 2) return false
11729 if (script.chunks[0] !== ops.OP_0) return false
11730
11731 if (allowIncomplete) {
11732 return script.chunks.slice(1).every(function (chunk) {
11733 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11734 })
11735 }
11736
11737 return script.chunks.slice(1).every(isCanonicalSignature)
11738 }
11739
11740 function isMultisigOutput (script) {
11741 if (script.chunks.length < 4) return false
11742 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
11743
11744 var mOp = script.chunks[0]
11745 if (mOp === ops.OP_0) return false
11746 if (mOp < ops.OP_1) return false
11747 if (mOp > ops.OP_16) return false
11748
11749 var nOp = script.chunks[script.chunks.length - 2]
11750 if (nOp === ops.OP_0) return false
11751 if (nOp < ops.OP_1) return false
11752 if (nOp > ops.OP_16) return false
11753
11754 var m = mOp - (ops.OP_1 - 1)
11755 var n = nOp - (ops.OP_1 - 1)
11756 if (n < m) return false
11757
11758 var pubKeys = script.chunks.slice(1, -2)
11759 if (n < pubKeys.length) return false
11760
11761 return pubKeys.every(isCanonicalPubKey)
11762 }
11763
11764 function isNullDataOutput (script) {
11765 return script.chunks[0] === ops.OP_RETURN
11766 }
11767
11768 function classifyOutput (script) {
11769 typeForce('Script', script)
11770
11771 if (isPubKeyHashOutput(script)) {
11772 return 'pubkeyhash'
11773 } else if (isScriptHashOutput(script)) {
11774 return 'scripthash'
11775 } else if (isMultisigOutput(script)) {
11776 return 'multisig'
11777 } else if (isPubKeyOutput(script)) {
11778 return 'pubkey'
11779 } else if (isNullDataOutput(script)) {
11780 return 'nulldata'
11781 }
11782
11783 return 'nonstandard'
11784 }
11785
11786 function classifyInput (script, allowIncomplete) {
11787 typeForce('Script', script)
11788
11789 if (isPubKeyHashInput(script)) {
11790 return 'pubkeyhash'
11791 } else if (isMultisigInput(script, allowIncomplete)) {
11792 return 'multisig'
11793 } else if (isScriptHashInput(script, allowIncomplete)) {
11794 return 'scripthash'
11795 } else if (isPubKeyInput(script)) {
11796 return 'pubkey'
11797 }
11798
11799 return 'nonstandard'
11800 }
11801
11802 // Standard Script Templates
11803 // {pubKey} OP_CHECKSIG
11804 function pubKeyOutput (pubKey) {
11805 return Script.fromChunks([
11806 pubKey.toBuffer(),
11807 ops.OP_CHECKSIG
11808 ])
11809 }
11810
11811 // OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
11812 function pubKeyHashOutput (hash) {
11813 typeForce('Buffer', hash)
11814
11815 return Script.fromChunks([
11816 ops.OP_DUP,
11817 ops.OP_HASH160,
11818 hash,
11819 ops.OP_EQUALVERIFY,
11820 ops.OP_CHECKSIG
11821 ])
11822 }
11823
11824 // OP_HASH160 {scriptHash} OP_EQUAL
11825 function scriptHashOutput (hash) {
11826 typeForce('Buffer', hash)
11827
11828 return Script.fromChunks([
11829 ops.OP_HASH160,
11830 hash,
11831 ops.OP_EQUAL
11832 ])
11833 }
11834
11835 // m [pubKeys ...] n OP_CHECKMULTISIG
11836 function multisigOutput (m, pubKeys) {
11837 typeForce(['ECPubKey'], pubKeys)
11838
11839 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
11840
11841 var pubKeyBuffers = pubKeys.map(function (pubKey) {
11842 return pubKey.toBuffer()
11843 })
11844 var n = pubKeys.length
11845
11846 return Script.fromChunks([].concat(
11847 (ops.OP_1 - 1) + m,
11848 pubKeyBuffers,
11849 (ops.OP_1 - 1) + n,
11850 ops.OP_CHECKMULTISIG
11851 ))
11852 }
11853
11854 // {signature}
11855 function pubKeyInput (signature) {
11856 typeForce('Buffer', signature)
11857
11858 return Script.fromChunks([signature])
11859 }
11860
11861 // {signature} {pubKey}
11862 function pubKeyHashInput (signature, pubKey) {
11863 typeForce('Buffer', signature)
11864
11865 return Script.fromChunks([signature, pubKey.toBuffer()])
11866 }
11867
11868 // <scriptSig> {serialized scriptPubKey script}
11869 function scriptHashInput (scriptSig, scriptPubKey) {
11870 return Script.fromChunks([].concat(
11871 scriptSig.chunks,
11872 scriptPubKey.toBuffer()
11873 ))
11874 }
11875
11876 // OP_0 [signatures ...]
11877 function multisigInput (signatures, scriptPubKey) {
11878 if (scriptPubKey) {
11879 assert(isMultisigOutput(scriptPubKey))
11880
11881 var mOp = scriptPubKey.chunks[0]
11882 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
11883 var m = mOp - (ops.OP_1 - 1)
11884 var n = nOp - (ops.OP_1 - 1)
11885
11886 assert(signatures.length >= m, 'Not enough signatures provided')
11887 assert(signatures.length <= n, 'Too many signatures provided')
11888 }
11889
11890 return Script.fromChunks([].concat(ops.OP_0, signatures))
11891 }
11892
11893 function nullDataOutput (data) {
11894 return Script.fromChunks([ops.OP_RETURN, data])
11895 }
11896
11897 module.exports = {
11898 isCanonicalPubKey: isCanonicalPubKey,
11899 isCanonicalSignature: isCanonicalSignature,
11900 isPubKeyHashInput: isPubKeyHashInput,
11901 isPubKeyHashOutput: isPubKeyHashOutput,
11902 isPubKeyInput: isPubKeyInput,
11903 isPubKeyOutput: isPubKeyOutput,
11904 isScriptHashInput: isScriptHashInput,
11905 isScriptHashOutput: isScriptHashOutput,
11906 isMultisigInput: isMultisigInput,
11907 isMultisigOutput: isMultisigOutput,
11908 isNullDataOutput: isNullDataOutput,
11909 classifyOutput: classifyOutput,
11910 classifyInput: classifyInput,
11911 pubKeyOutput: pubKeyOutput,
11912 pubKeyHashOutput: pubKeyHashOutput,
11913 scriptHashOutput: scriptHashOutput,
11914 multisigOutput: multisigOutput,
11915 pubKeyInput: pubKeyInput,
11916 pubKeyHashInput: pubKeyHashInput,
11917 scriptHashInput: scriptHashInput,
11918 multisigInput: multisigInput,
11919 dataOutput: function (data) {
11920 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
11921 return nullDataOutput(data)
11922 },
11923 nullDataOutput: nullDataOutput
11924 }
11925
11926 }).call(this,require("buffer").Buffer)
11927 },{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
11928 (function (Buffer){
11929 var assert = require('assert')
11930 var bufferutils = require('./bufferutils')
11931 var crypto = require('./crypto')
11932 var typeForce = require('typeforce')
11933 var opcodes = require('./opcodes')
11934 var scripts = require('./scripts')
11935
11936 var Address = require('./address')
11937 var ECSignature = require('./ecsignature')
11938 var Script = require('./script')
11939
11940 function Transaction () {
11941 this.version = 1
11942 this.locktime = 0
11943 this.ins = []
11944 this.outs = []
11945 }
11946
11947 Transaction.DEFAULT_SEQUENCE = 0xffffffff
11948 Transaction.SIGHASH_ALL = 0x01
11949 Transaction.SIGHASH_NONE = 0x02
11950 Transaction.SIGHASH_SINGLE = 0x03
11951 Transaction.SIGHASH_ANYONECANPAY = 0x80
11952
11953 Transaction.fromBuffer = function (buffer, __disableAssert) {
11954 var offset = 0
11955 function readSlice (n) {
11956 offset += n
11957 return buffer.slice(offset - n, offset)
11958 }
11959
11960 function readUInt32 () {
11961 var i = buffer.readUInt32LE(offset)
11962 offset += 4
11963 return i
11964 }
11965
11966 function readUInt64 () {
11967 var i = bufferutils.readUInt64LE(buffer, offset)
11968 offset += 8
11969 return i
11970 }
11971
11972 function readVarInt () {
11973 var vi = bufferutils.readVarInt(buffer, offset)
11974 offset += vi.size
11975 return vi.number
11976 }
11977
11978 function readScript () {
11979 return Script.fromBuffer(readSlice(readVarInt()))
11980 }
11981
11982 function readGenerationScript () {
11983 return new Script(readSlice(readVarInt()), [])
11984 }
11985
11986 var tx = new Transaction()
11987 tx.version = readUInt32()
11988
11989 var vinLen = readVarInt()
11990 for (var i = 0; i < vinLen; ++i) {
11991 var hash = readSlice(32)
11992
11993 if (Transaction.isCoinbaseHash(hash)) {
11994 tx.ins.push({
11995 hash: hash,
11996 index: readUInt32(),
11997 script: readGenerationScript(),
11998 sequence: readUInt32()
11999 })
12000 } else {
12001 tx.ins.push({
12002 hash: hash,
12003 index: readUInt32(),
12004 script: readScript(),
12005 sequence: readUInt32()
12006 })
12007 }
12008 }
12009
12010 var voutLen = readVarInt()
12011 for (i = 0; i < voutLen; ++i) {
12012 tx.outs.push({
12013 value: readUInt64(),
12014 script: readScript()
12015 })
12016 }
12017
12018 tx.locktime = readUInt32()
12019
12020 if (!__disableAssert) {
12021 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12022 }
12023
12024 return tx
12025 }
12026
12027 Transaction.fromHex = function (hex) {
12028 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12029 }
12030
12031 Transaction.isCoinbaseHash = function (buffer) {
12032 return Array.prototype.every.call(buffer, function (x) {
12033 return x === 0
12034 })
12035 }
12036
12037 /**
12038 * Create a new txIn.
12039 *
12040 * Can be called with any of:
12041 *
12042 * - A transaction and an index
12043 * - A transaction hash and an index
12044 *
12045 * Note that this method does not sign the created input.
12046 */
12047 Transaction.prototype.addInput = function (hash, index, sequence, script) {
12048 if (sequence === undefined || sequence === null) {
12049 sequence = Transaction.DEFAULT_SEQUENCE
12050 }
12051
12052 script = script || Script.EMPTY
12053
12054 if (typeof hash === 'string') {
12055 // TxId hex is big-endian, we need little-endian
12056 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12057 } else if (hash instanceof Transaction) {
12058 hash = hash.getHash()
12059 }
12060
12061 typeForce('Buffer', hash)
12062 typeForce('Number', index)
12063 typeForce('Number', sequence)
12064 typeForce('Script', script)
12065
12066 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
12067
12068 // Add the input and return the input's index
12069 return (this.ins.push({
12070 hash: hash,
12071 index: index,
12072 script: script,
12073 sequence: sequence
12074 }) - 1)
12075 }
12076
12077 /**
12078 * Create a new txOut.
12079 *
12080 * Can be called with:
12081 *
12082 * - A base58 address string and a value
12083 * - An Address object and a value
12084 * - A scriptPubKey Script and a value
12085 */
12086 Transaction.prototype.addOutput = function (scriptPubKey, value) {
12087 // Attempt to get a valid address if it's a base58 address string
12088 if (typeof scriptPubKey === 'string') {
12089 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12090 }
12091
12092 // Attempt to get a valid script if it's an Address object
12093 if (scriptPubKey instanceof Address) {
12094 scriptPubKey = scriptPubKey.toOutputScript()
12095 }
12096
12097 typeForce('Script', scriptPubKey)
12098 typeForce('Number', value)
12099
12100 // Add the output and return the output's index
12101 return (this.outs.push({
12102 script: scriptPubKey,
12103 value: value
12104 }) - 1)
12105 }
12106
12107 Transaction.prototype.clone = function () {
12108 var newTx = new Transaction()
12109 newTx.version = this.version
12110 newTx.locktime = this.locktime
12111
12112 newTx.ins = this.ins.map(function (txIn) {
12113 return {
12114 hash: txIn.hash,
12115 index: txIn.index,
12116 script: txIn.script,
12117 sequence: txIn.sequence
12118 }
12119 })
12120
12121 newTx.outs = this.outs.map(function (txOut) {
12122 return {
12123 script: txOut.script,
12124 value: txOut.value
12125 }
12126 })
12127
12128 return newTx
12129 }
12130
12131 /**
12132 * Hash transaction for signing a specific input.
12133 *
12134 * Bitcoin uses a different hash for each signed transaction input. This
12135 * method copies the transaction, makes the necessary changes based on the
12136 * hashType, serializes and finally hashes the result. This hash can then be
12137 * used to sign the transaction input in question.
12138 */
12139 Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12140 // FIXME: remove in 2.x.y
12141 if (arguments[0] instanceof Script) {
12142 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12143
12144 // swap the arguments (must be stored in tmp, arguments is special)
12145 var tmp = arguments[0]
12146 inIndex = arguments[1]
12147 prevOutScript = tmp
12148 }
12149
12150 typeForce('Number', inIndex)
12151 typeForce('Script', prevOutScript)
12152 typeForce('Number', hashType)
12153
12154 assert(inIndex >= 0, 'Invalid vin index')
12155 assert(inIndex < this.ins.length, 'Invalid vin index')
12156
12157 var txTmp = this.clone()
12158 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12159
12160 // Blank out other inputs' signatures
12161 txTmp.ins.forEach(function (txIn) {
12162 txIn.script = Script.EMPTY
12163 })
12164 txTmp.ins[inIndex].script = hashScript
12165
12166 var hashTypeModifier = hashType & 0x1f
12167
12168 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12169 assert(false, 'SIGHASH_NONE not yet supported')
12170 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12171 assert(false, 'SIGHASH_SINGLE not yet supported')
12172 }
12173
12174 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12175 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12176 }
12177
12178 var hashTypeBuffer = new Buffer(4)
12179 hashTypeBuffer.writeInt32LE(hashType, 0)
12180
12181 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12182 return crypto.hash256(buffer)
12183 }
12184
12185 Transaction.prototype.getHash = function () {
12186 return crypto.hash256(this.toBuffer())
12187 }
12188
12189 Transaction.prototype.getId = function () {
12190 // TxHash is little-endian, we need big-endian
12191 return bufferutils.reverse(this.getHash()).toString('hex')
12192 }
12193
12194 Transaction.prototype.toBuffer = function () {
12195 function scriptSize (script) {
12196 var length = script.buffer.length
12197
12198 return bufferutils.varIntSize(length) + length
12199 }
12200
12201 var buffer = new Buffer(
12202 8 +
12203 bufferutils.varIntSize(this.ins.length) +
12204 bufferutils.varIntSize(this.outs.length) +
12205 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12206 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
12207 )
12208
12209 var offset = 0
12210 function writeSlice (slice) {
12211 slice.copy(buffer, offset)
12212 offset += slice.length
12213 }
12214
12215 function writeUInt32 (i) {
12216 buffer.writeUInt32LE(i, offset)
12217 offset += 4
12218 }
12219
12220 function writeUInt64 (i) {
12221 bufferutils.writeUInt64LE(buffer, i, offset)
12222 offset += 8
12223 }
12224
12225 function writeVarInt (i) {
12226 var n = bufferutils.writeVarInt(buffer, i, offset)
12227 offset += n
12228 }
12229
12230 writeUInt32(this.version)
12231 writeVarInt(this.ins.length)
12232
12233 this.ins.forEach(function (txIn) {
12234 writeSlice(txIn.hash)
12235 writeUInt32(txIn.index)
12236 writeVarInt(txIn.script.buffer.length)
12237 writeSlice(txIn.script.buffer)
12238 writeUInt32(txIn.sequence)
12239 })
12240
12241 writeVarInt(this.outs.length)
12242 this.outs.forEach(function (txOut) {
12243 writeUInt64(txOut.value)
12244 writeVarInt(txOut.script.buffer.length)
12245 writeSlice(txOut.script.buffer)
12246 })
12247
12248 writeUInt32(this.locktime)
12249
12250 return buffer
12251 }
12252
12253 Transaction.prototype.toHex = function () {
12254 return this.toBuffer().toString('hex')
12255 }
12256
12257 Transaction.prototype.setInputScript = function (index, script) {
12258 typeForce('Number', index)
12259 typeForce('Script', script)
12260
12261 this.ins[index].script = script
12262 }
12263
12264 // FIXME: remove in 2.x.y
12265 Transaction.prototype.sign = function (index, privKey, hashType) {
12266 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12267
12268 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12269 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12270
12271 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12272 this.setInputScript(index, scriptSig)
12273 }
12274
12275 // FIXME: remove in 2.x.y
12276 Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12277 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12278
12279 hashType = hashType || Transaction.SIGHASH_ALL
12280
12281 var hash = this.hashForSignature(index, prevOutScript, hashType)
12282 var signature = privKey.sign(hash)
12283
12284 return signature.toScriptSignature(hashType)
12285 }
12286
12287 // FIXME: remove in 2.x.y
12288 Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12289 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12290
12291 var parsed = ECSignature.parseScriptSignature(buffer)
12292 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12293
12294 return pubKey.verify(hash, parsed.signature)
12295 }
12296
12297 module.exports = Transaction
12298
12299 }).call(this,require("buffer").Buffer)
12300 },{"./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){
12301 (function (Buffer){
12302 var assert = require('assert')
12303 var ops = require('./opcodes')
12304 var scripts = require('./scripts')
12305
12306 var ECPubKey = require('./ecpubkey')
12307 var ECSignature = require('./ecsignature')
12308 var Script = require('./script')
12309 var Transaction = require('./transaction')
12310
12311 function extractInput (txIn) {
12312 var redeemScript
12313 var scriptSig = txIn.script
12314 var prevOutScript
12315 var prevOutType = scripts.classifyInput(scriptSig, true)
12316 var scriptType
12317
12318 // Re-classify if scriptHash
12319 if (prevOutType === 'scripthash') {
12320 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12321 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12322
12323 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12324 scriptType = scripts.classifyInput(scriptSig, true)
12325 } else {
12326 scriptType = prevOutType
12327 }
12328
12329 // Extract hashType, pubKeys and signatures
12330 var hashType, parsed, pubKeys, signatures
12331
12332 switch (scriptType) {
12333 case 'pubkeyhash': {
12334 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12335 hashType = parsed.hashType
12336 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12337 signatures = [parsed.signature]
12338 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12339
12340 break
12341 }
12342
12343 case 'pubkey': {
12344 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12345 hashType = parsed.hashType
12346 signatures = [parsed.signature]
12347
12348 if (redeemScript) {
12349 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12350 }
12351
12352 break
12353 }
12354
12355 case 'multisig': {
12356 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12357 if (chunk === ops.OP_0) return chunk
12358
12359 var parsed = ECSignature.parseScriptSignature(chunk)
12360 hashType = parsed.hashType
12361
12362 return parsed.signature
12363 })
12364
12365 if (redeemScript) {
12366 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12367 }
12368
12369 break
12370 }
12371 }
12372
12373 return {
12374 hashType: hashType,
12375 prevOutScript: prevOutScript,
12376 prevOutType: prevOutType,
12377 pubKeys: pubKeys,
12378 redeemScript: redeemScript,
12379 scriptType: scriptType,
12380 signatures: signatures
12381 }
12382 }
12383
12384 function TransactionBuilder () {
12385 this.prevTxMap = {}
12386 this.prevOutScripts = {}
12387 this.prevOutTypes = {}
12388
12389 this.inputs = []
12390 this.tx = new Transaction()
12391 }
12392
12393 TransactionBuilder.fromTransaction = function (transaction) {
12394 var txb = new TransactionBuilder()
12395
12396 // Copy other transaction fields
12397 txb.tx.version = transaction.version
12398 txb.tx.locktime = transaction.locktime
12399
12400 // Extract/add inputs
12401 transaction.ins.forEach(function (txIn) {
12402 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12403 })
12404
12405 // Extract/add outputs
12406 transaction.outs.forEach(function (txOut) {
12407 txb.addOutput(txOut.script, txOut.value)
12408 })
12409
12410 // Extract/add signatures
12411 txb.inputs = transaction.ins.map(function (txIn) {
12412 // TODO: remove me after testcase added
12413 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12414
12415 // Ignore empty scripts
12416 if (txIn.script.buffer.length === 0) return {}
12417
12418 return extractInput(txIn)
12419 })
12420
12421 return txb
12422 }
12423
12424 TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12425 var prevOutHash
12426
12427 // txId
12428 if (typeof prevTx === 'string') {
12429 prevOutHash = new Buffer(prevTx, 'hex')
12430
12431 // TxId hex is big-endian, we want little-endian hash
12432 Array.prototype.reverse.call(prevOutHash)
12433
12434 // Transaction
12435 } else if (prevTx instanceof Transaction) {
12436 prevOutHash = prevTx.getHash()
12437 prevOutScript = prevTx.outs[index].script
12438
12439 // txHash
12440 } else {
12441 prevOutHash = prevTx
12442 }
12443
12444 var input = {}
12445 if (prevOutScript) {
12446 var prevOutType = scripts.classifyOutput(prevOutScript)
12447
12448 // if we can, extract pubKey information
12449 switch (prevOutType) {
12450 case 'multisig': {
12451 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12452 break
12453 }
12454
12455 case 'pubkey': {
12456 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12457 break
12458 }
12459 }
12460
12461 if (prevOutType !== 'scripthash') {
12462 input.scriptType = prevOutType
12463 }
12464
12465 input.prevOutScript = prevOutScript
12466 input.prevOutType = prevOutType
12467 }
12468
12469 assert(this.inputs.every(function (input2) {
12470 if (input2.hashType === undefined) return true
12471
12472 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12473 }), 'No, this would invalidate signatures')
12474
12475 var prevOut = prevOutHash.toString('hex') + ':' + index
12476 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12477
12478 var vin = this.tx.addInput(prevOutHash, index, sequence)
12479 this.inputs[vin] = input
12480 this.prevTxMap[prevOut] = vin
12481
12482 return vin
12483 }
12484
12485 TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12486 assert(this.inputs.every(function (input) {
12487 if (input.hashType === undefined) return true
12488
12489 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12490 }), 'No, this would invalidate signatures')
12491
12492 return this.tx.addOutput(scriptPubKey, value)
12493 }
12494
12495 TransactionBuilder.prototype.build = function () {
12496 return this.__build(false)
12497 }
12498 TransactionBuilder.prototype.buildIncomplete = function () {
12499 return this.__build(true)
12500 }
12501
12502 var canSignTypes = {
12503 'pubkeyhash': true,
12504 'multisig': true,
12505 'pubkey': true
12506 }
12507
12508 TransactionBuilder.prototype.__build = function (allowIncomplete) {
12509 if (!allowIncomplete) {
12510 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12511 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
12512 }
12513
12514 var tx = this.tx.clone()
12515
12516 // Create script signatures from signature meta-data
12517 this.inputs.forEach(function (input, index) {
12518 var scriptType = input.scriptType
12519 var scriptSig
12520
12521 if (!allowIncomplete) {
12522 assert(!!scriptType, 'Transaction is not complete')
12523 assert(scriptType in canSignTypes, scriptType + ' not supported')
12524 assert(input.signatures, 'Transaction is missing signatures')
12525 }
12526
12527 if (input.signatures) {
12528 switch (scriptType) {
12529 case 'pubkeyhash': {
12530 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12531 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12532 break
12533 }
12534
12535 case 'multisig': {
12536 // Array.prototype.map is sparse-compatible
12537 var msSignatures = input.signatures.map(function (signature) {
12538 return signature && signature.toScriptSignature(input.hashType)
12539 })
12540
12541 // fill in blanks with OP_0
12542 if (allowIncomplete) {
12543 for (var i = 0; i < msSignatures.length; ++i) {
12544 if (msSignatures[i]) continue
12545
12546 msSignatures[i] = ops.OP_0
12547 }
12548 } else {
12549 // Array.prototype.filter returns non-sparse array
12550 msSignatures = msSignatures.filter(function (x) { return x })
12551 }
12552
12553 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12554 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12555 break
12556 }
12557
12558 case 'pubkey': {
12559 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12560 scriptSig = scripts.pubKeyInput(pkSignature)
12561 break
12562 }
12563 }
12564 }
12565
12566 // did we build a scriptSig?
12567 if (scriptSig) {
12568 // wrap as scriptHash if necessary
12569 if (input.prevOutType === 'scripthash') {
12570 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12571 }
12572
12573 tx.setInputScript(index, scriptSig)
12574 }
12575 })
12576
12577 return tx
12578 }
12579
12580 TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12581 assert(index in this.inputs, 'No input at index: ' + index)
12582 hashType = hashType || Transaction.SIGHASH_ALL
12583
12584 var input = this.inputs[index]
12585 var canSign = input.hashType &&
12586 input.prevOutScript &&
12587 input.prevOutType &&
12588 input.pubKeys &&
12589 input.scriptType &&
12590 input.signatures
12591
12592 // are we almost ready to sign?
12593 if (canSign) {
12594 // if redeemScript was provided, enforce consistency
12595 if (redeemScript) {
12596 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12597 }
12598
12599 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
12600
12601 // no? prepare
12602 } else {
12603 // must be pay-to-scriptHash?
12604 if (redeemScript) {
12605 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12606 if (input.prevOutScript) {
12607 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12608
12609 var scriptHash = input.prevOutScript.chunks[1]
12610 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12611 }
12612
12613 var scriptType = scripts.classifyOutput(redeemScript)
12614 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
12615
12616 var pubKeys = []
12617 switch (scriptType) {
12618 case 'multisig': {
12619 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12620 break
12621 }
12622
12623 case 'pubkeyhash': {
12624 var pkh1 = redeemScript.chunks[2]
12625 var pkh2 = privKey.pub.getAddress().hash
12626
12627 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12628 pubKeys = [privKey.pub]
12629 break
12630 }
12631
12632 case 'pubkey': {
12633 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12634 break
12635 }
12636 }
12637
12638 if (!input.prevOutScript) {
12639 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12640 input.prevOutType = 'scripthash'
12641 }
12642
12643 input.pubKeys = pubKeys
12644 input.redeemScript = redeemScript
12645 input.scriptType = scriptType
12646
12647 // cannot be pay-to-scriptHash
12648 } else {
12649 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
12650
12651 // can we otherwise sign this?
12652 if (input.scriptType) {
12653 assert(input.pubKeys, input.scriptType + ' not supported')
12654
12655 // we know nothin' Jon Snow, assume pubKeyHash
12656 } else {
12657 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12658 input.prevOutType = 'pubkeyhash'
12659 input.pubKeys = [privKey.pub]
12660 input.scriptType = input.prevOutType
12661 }
12662 }
12663
12664 input.hashType = hashType
12665 input.signatures = input.signatures || []
12666 }
12667
12668 var signatureScript = input.redeemScript || input.prevOutScript
12669 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12670
12671 // enforce signature order matches public keys
12672 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12673 // maintain a local copy of unmatched signatures
12674 var unmatched = input.signatures.slice()
12675
12676 input.signatures = input.pubKeys.map(function (pubKey) {
12677 var match
12678
12679 // check for any matching signatures
12680 unmatched.some(function (signature, i) {
12681 if (!pubKey.verify(signatureHash, signature)) return false
12682 match = signature
12683
12684 // remove matched signature from unmatched
12685 unmatched.splice(i, 1)
12686
12687 return true
12688 })
12689
12690 return match || undefined
12691 })
12692 }
12693
12694 // enforce in order signing of public keys
12695 assert(input.pubKeys.some(function (pubKey, i) {
12696 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12697
12698 assert(!input.signatures[i], 'Signature already exists')
12699 var signature = privKey.sign(signatureHash)
12700 input.signatures[i] = signature
12701
12702 return true
12703 }, this), 'privateKey cannot sign for this input')
12704 }
12705
12706 module.exports = TransactionBuilder
12707
12708 }).call(this,require("buffer").Buffer)
12709 },{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
12710 (function (Buffer){
12711 var assert = require('assert')
12712 var bufferutils = require('./bufferutils')
12713 var typeForce = require('typeforce')
12714 var networks = require('./networks')
12715 var randomBytes = require('randombytes')
12716
12717 var Address = require('./address')
12718 var HDNode = require('./hdnode')
12719 var TransactionBuilder = require('./transaction_builder')
12720 var Script = require('./script')
12721
12722 function Wallet (seed, network) {
12723 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12724
12725 seed = seed || randomBytes(32)
12726 network = network || networks.bitcoin
12727
12728 // Stored in a closure to make accidental serialization less likely
12729 var masterKey = HDNode.fromSeedBuffer(seed, network)
12730
12731 // HD first-level child derivation method should be hardened
12732 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12733 var accountZero = masterKey.deriveHardened(0)
12734 var externalAccount = accountZero.derive(0)
12735 var internalAccount = accountZero.derive(1)
12736
12737 this.addresses = []
12738 this.changeAddresses = []
12739 this.network = network
12740 this.unspents = []
12741
12742 // FIXME: remove in 2.0.0
12743 this.unspentMap = {}
12744
12745 // FIXME: remove in 2.0.0
12746 var me = this
12747 this.newMasterKey = function (seed) {
12748 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12749
12750 seed = seed || randomBytes(32)
12751 masterKey = HDNode.fromSeedBuffer(seed, network)
12752
12753 accountZero = masterKey.deriveHardened(0)
12754 externalAccount = accountZero.derive(0)
12755 internalAccount = accountZero.derive(1)
12756
12757 me.addresses = []
12758 me.changeAddresses = []
12759
12760 me.unspents = []
12761 me.unspentMap = {}
12762 }
12763
12764 this.getMasterKey = function () {
12765 return masterKey
12766 }
12767 this.getAccountZero = function () {
12768 return accountZero
12769 }
12770 this.getExternalAccount = function () {
12771 return externalAccount
12772 }
12773 this.getInternalAccount = function () {
12774 return internalAccount
12775 }
12776 }
12777
12778 Wallet.prototype.createTransaction = function (to, value, options) {
12779 // FIXME: remove in 2.0.0
12780 if (typeof options !== 'object') {
12781 if (options !== undefined) {
12782 console.warn('Non options object parameters are deprecated, use options object instead')
12783
12784 options = {
12785 fixedFee: arguments[2],
12786 changeAddress: arguments[3]
12787 }
12788 }
12789 }
12790
12791 options = options || {}
12792
12793 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
12794
12795 var changeAddress = options.changeAddress
12796 var fixedFee = options.fixedFee
12797 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
12798
12799 // filter by minConf, then pending and sort by descending value
12800 var unspents = this.unspents.filter(function (unspent) {
12801 return unspent.confirmations >= minConf
12802 }).filter(function (unspent) {
12803 return !unspent.pending
12804 }).sort(function (o1, o2) {
12805 return o2.value - o1.value
12806 })
12807
12808 var accum = 0
12809 var addresses = []
12810 var subTotal = value
12811
12812 var txb = new TransactionBuilder()
12813 txb.addOutput(to, value)
12814
12815 for (var i = 0; i < unspents.length; ++i) {
12816 var unspent = unspents[i]
12817 addresses.push(unspent.address)
12818
12819 txb.addInput(unspent.txHash, unspent.index)
12820
12821 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
12822
12823 accum += unspent.value
12824 subTotal = value + fee
12825
12826 if (accum >= subTotal) {
12827 var change = accum - subTotal
12828
12829 if (change > this.network.dustThreshold) {
12830 txb.addOutput(changeAddress || this.getChangeAddress(), change)
12831 }
12832
12833 break
12834 }
12835 }
12836
12837 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
12838
12839 return this.signWith(txb, addresses).build()
12840 }
12841
12842 // FIXME: remove in 2.0.0
12843 Wallet.prototype.processPendingTx = function (tx) {
12844 this.__processTx(tx, true)
12845 }
12846
12847 // FIXME: remove in 2.0.0
12848 Wallet.prototype.processConfirmedTx = function (tx) {
12849 this.__processTx(tx, false)
12850 }
12851
12852 // FIXME: remove in 2.0.0
12853 Wallet.prototype.__processTx = function (tx, isPending) {
12854 console.warn('processTransaction is considered harmful, see issue #260 for more information')
12855
12856 var txId = tx.getId()
12857 var txHash = tx.getHash()
12858
12859 tx.outs.forEach(function (txOut, i) {
12860 var address
12861
12862 try {
12863 address = Address.fromOutputScript(txOut.script, this.network).toString()
12864 } catch (e) {
12865 if (!(e.message.match(/has no matching Address/)))
12866 throw e
12867 }
12868
12869 var myAddresses = this.addresses.concat(this.changeAddresses)
12870 if (myAddresses.indexOf(address) > -1) {
12871 var lookup = txId + ':' + i
12872 if (lookup in this.unspentMap) return
12873
12874 // its unique, add it
12875 var unspent = {
12876 address: address,
12877 confirmations: 0, // no way to determine this without more information
12878 index: i,
12879 txHash: txHash,
12880 txId: txId,
12881 value: txOut.value,
12882 pending: isPending
12883 }
12884
12885 this.unspentMap[lookup] = unspent
12886 this.unspents.push(unspent)
12887 }
12888 }, this)
12889
12890 tx.ins.forEach(function (txIn) {
12891 // copy and convert to big-endian hex
12892 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
12893
12894 var lookup = txInId + ':' + txIn.index
12895 if (!(lookup in this.unspentMap)) return
12896
12897 var unspent = this.unspentMap[lookup]
12898
12899 if (isPending) {
12900 unspent.pending = true
12901 unspent.spent = true
12902 } else {
12903 delete this.unspentMap[lookup]
12904
12905 this.unspents = this.unspents.filter(function (unspent2) {
12906 return unspent !== unspent2
12907 })
12908 }
12909 }, this)
12910 }
12911
12912 Wallet.prototype.generateAddress = function () {
12913 var k = this.addresses.length
12914 var address = this.getExternalAccount().derive(k).getAddress()
12915
12916 this.addresses.push(address.toString())
12917
12918 return this.getReceiveAddress()
12919 }
12920
12921 Wallet.prototype.generateChangeAddress = function () {
12922 var k = this.changeAddresses.length
12923 var address = this.getInternalAccount().derive(k).getAddress()
12924
12925 this.changeAddresses.push(address.toString())
12926
12927 return this.getChangeAddress()
12928 }
12929
12930 Wallet.prototype.getAddress = function () {
12931 if (this.addresses.length === 0) {
12932 this.generateAddress()
12933 }
12934
12935 return this.addresses[this.addresses.length - 1]
12936 }
12937
12938 Wallet.prototype.getBalance = function (minConf) {
12939 minConf = minConf || 0
12940
12941 return this.unspents.filter(function (unspent) {
12942 return unspent.confirmations >= minConf
12943
12944 // FIXME: remove spent filter in 2.0.0
12945 }).filter(function (unspent) {
12946 return !unspent.spent
12947 }).reduce(function (accum, unspent) {
12948 return accum + unspent.value
12949 }, 0)
12950 }
12951
12952 Wallet.prototype.getChangeAddress = function () {
12953 if (this.changeAddresses.length === 0) {
12954 this.generateChangeAddress()
12955 }
12956
12957 return this.changeAddresses[this.changeAddresses.length - 1]
12958 }
12959
12960 Wallet.prototype.getInternalPrivateKey = function (index) {
12961 return this.getInternalAccount().derive(index).privKey
12962 }
12963
12964 Wallet.prototype.getPrivateKey = function (index) {
12965 return this.getExternalAccount().derive(index).privKey
12966 }
12967
12968 Wallet.prototype.getPrivateKeyForAddress = function (address) {
12969 var index
12970
12971 if ((index = this.addresses.indexOf(address)) > -1) {
12972 return this.getPrivateKey(index)
12973 }
12974
12975 if ((index = this.changeAddresses.indexOf(address)) > -1) {
12976 return this.getInternalPrivateKey(index)
12977 }
12978
12979 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12980 }
12981
12982 Wallet.prototype.getUnspentOutputs = function (minConf) {
12983 minConf = minConf || 0
12984
12985 return this.unspents.filter(function (unspent) {
12986 return unspent.confirmations >= minConf
12987
12988 // FIXME: remove spent filter in 2.0.0
12989 }).filter(function (unspent) {
12990 return !unspent.spent
12991 }).map(function (unspent) {
12992 return {
12993 address: unspent.address,
12994 confirmations: unspent.confirmations,
12995 index: unspent.index,
12996 txId: unspent.txId,
12997 value: unspent.value,
12998
12999 // FIXME: remove in 2.0.0
13000 hash: unspent.txId,
13001 pending: unspent.pending
13002 }
13003 })
13004 }
13005
13006 Wallet.prototype.setUnspentOutputs = function (unspents) {
13007 this.unspentMap = {}
13008 this.unspents = unspents.map(function (unspent) {
13009 // FIXME: remove unspent.hash in 2.0.0
13010 var txId = unspent.txId || unspent.hash
13011 var index = unspent.index
13012
13013 // FIXME: remove in 2.0.0
13014 if (unspent.hash !== undefined) {
13015 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13016 }
13017
13018 // FIXME: remove in 2.0.0
13019 if (index === undefined) {
13020 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13021 index = unspent.outputIndex
13022 }
13023
13024 typeForce('String', txId)
13025 typeForce('Number', index)
13026 typeForce('Number', unspent.value)
13027
13028 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13029 assert.doesNotThrow(function () {
13030 Address.fromBase58Check(unspent.address)
13031 }, 'Expected Base58 Address, got ' + unspent.address)
13032 assert(isFinite(index), 'Expected finite index, got ' + index)
13033
13034 // FIXME: remove branch in 2.0.0
13035 if (unspent.confirmations !== undefined) {
13036 typeForce('Number', unspent.confirmations)
13037 }
13038
13039 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
13040
13041 unspent = {
13042 address: unspent.address,
13043 confirmations: unspent.confirmations || 0,
13044 index: index,
13045 txHash: txHash,
13046 txId: txId,
13047 value: unspent.value,
13048
13049 // FIXME: remove in 2.0.0
13050 pending: unspent.pending || false
13051 }
13052
13053 // FIXME: remove in 2.0.0
13054 this.unspentMap[txId + ':' + index] = unspent
13055
13056 return unspent
13057 }, this)
13058 }
13059
13060 Wallet.prototype.signWith = function (tx, addresses) {
13061 addresses.forEach(function (address, i) {
13062 var privKey = this.getPrivateKeyForAddress(address)
13063
13064 tx.sign(i, privKey)
13065 }, this)
13066
13067 return tx
13068 }
13069
13070 function estimatePaddedFee (tx, network) {
13071 var tmpTx = tx.clone()
13072 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13073
13074 return network.estimateFee(tmpTx)
13075 }
13076
13077 // FIXME: 1.0.0 shims, remove in 2.0.0
13078 Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13079 Wallet.prototype.createTx = Wallet.prototype.createTransaction
13080
13081 module.exports = Wallet
13082
13083 }).call(this,require("buffer").Buffer)
13084 },{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13085 });</script>
13086 <script>bitcoin.networks.shadow = {
13087 magicPrefix: '\x19ShadowCash Signed Message:\n',
13088 bip32: {
13089 public: 0xEE80286A,
13090 private: 0xEE8031E8
13091 },
13092 pubKeyHash: 0x3f,
13093 scriptHash: 0x7d,
13094 wif: 0xbf,
13095 dustThreshold: 0,
13096 feePerKb: 1000,
13097 estimateFee: function() { return "unused in this app" },
13098 };
13099
13100 bitcoin.networks.shadowtn = {
13101 magicPrefix: '\x19ShadowCash Signed Message:\n',
13102 bip32: {
13103 public: 0x76C0FDFB,
13104 private: 0x76C1077A
13105 },
13106 pubKeyHash: 0x7f,
13107 scriptHash: 0xc4,
13108 wif: 0xff,
13109 dustThreshold: 0,
13110 feePerKb: 1000,
13111 estimateFee: function() { return "unused in this app" },
13112 };
13113
13114 bitcoin.networks.clam = {
13115 bip32: {
13116 public: 0xa8c26d64,
13117 private: 0xa8c17826
13118 },
13119 pubKeyHash: 0x89,
13120 wif: 0x85,
13121 };
13122 </script>
13123 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
13124
13125 //// base.js
13126
13127 /** @fileOverview Javascript cryptography implementation.
13128 *
13129 * Crush to remove comments, shorten variable names and
13130 * generally reduce transmission size.
13131 *
13132 * @author Emily Stark
13133 * @author Mike Hamburg
13134 * @author Dan Boneh
13135 */
13136
13137 "use strict";
13138 /*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13139 /*global document, window, escape, unescape, module, require, Uint32Array */
13140
13141 /** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13142 var sjcl = {
13143 /** @namespace Symmetric ciphers. */
13144 cipher: {},
13145
13146 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13147 hash: {},
13148
13149 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13150 keyexchange: {},
13151
13152 /** @namespace Block cipher modes of operation. */
13153 mode: {},
13154
13155 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13156 misc: {},
13157
13158 /**
13159 * @namespace Bit array encoders and decoders.
13160 *
13161 * @description
13162 * The members of this namespace are functions which translate between
13163 * SJCL's bitArrays and other objects (usually strings). Because it
13164 * isn't always clear which direction is encoding and which is decoding,
13165 * the method names are "fromBits" and "toBits".
13166 */
13167 codec: {},
13168
13169 /** @namespace Exceptions. */
13170 exception: {
13171 /** @constructor Ciphertext is corrupt. */
13172 corrupt: function(message) {
13173 this.toString = function() { return "CORRUPT: "+this.message; };
13174 this.message = message;
13175 },
13176
13177 /** @constructor Invalid parameter. */
13178 invalid: function(message) {
13179 this.toString = function() { return "INVALID: "+this.message; };
13180 this.message = message;
13181 },
13182
13183 /** @constructor Bug or missing feature in SJCL. @constructor */
13184 bug: function(message) {
13185 this.toString = function() { return "BUG: "+this.message; };
13186 this.message = message;
13187 },
13188
13189 /** @constructor Something isn't ready. */
13190 notReady: function(message) {
13191 this.toString = function() { return "NOT READY: "+this.message; };
13192 this.message = message;
13193 }
13194 }
13195 };
13196
13197 if(typeof module !== 'undefined' && module.exports){
13198 module.exports = sjcl;
13199 }
13200 if (typeof define === "function") {
13201 define([], function () {
13202 return sjcl;
13203 });
13204 }
13205
13206
13207 //// bitArray.js
13208
13209 /** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13210 *
13211 * @author Emily Stark
13212 * @author Mike Hamburg
13213 * @author Dan Boneh
13214 */
13215
13216 /** @namespace Arrays of bits, encoded as arrays of Numbers.
13217 *
13218 * @description
13219 * <p>
13220 * These objects are the currency accepted by SJCL's crypto functions.
13221 * </p>
13222 *
13223 * <p>
13224 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13225 * but many of them can take arguments that are not a multiple of 4 bytes.
13226 * This library encodes arrays of bits (whose size need not be a multiple of 8
13227 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13228 * array of words, 32 bits at a time. Since the words are double-precision
13229 * floating point numbers, they fit some extra data. We use this (in a private,
13230 * possibly-changing manner) to encode the number of bits actually present
13231 * in the last word of the array.
13232 * </p>
13233 *
13234 * <p>
13235 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13236 * to ciphers like AES which want arrays of words.
13237 * </p>
13238 */
13239 sjcl.bitArray = {
13240 /**
13241 * Array slices in units of bits.
13242 * @param {bitArray} a The array to slice.
13243 * @param {Number} bstart The offset to the start of the slice, in bits.
13244 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13245 * slice until the end of the array.
13246 * @return {bitArray} The requested slice.
13247 */
13248 bitSlice: function (a, bstart, bend) {
13249 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13250 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13251 },
13252
13253 /**
13254 * Extract a number packed into a bit array.
13255 * @param {bitArray} a The array to slice.
13256 * @param {Number} bstart The offset to the start of the slice, in bits.
13257 * @param {Number} length The length of the number to extract.
13258 * @return {Number} The requested slice.
13259 */
13260 extract: function(a, bstart, blength) {
13261 // FIXME: this Math.floor is not necessary at all, but for some reason
13262 // seems to suppress a bug in the Chromium JIT.
13263 var x, sh = Math.floor((-bstart-blength) & 31);
13264 if ((bstart + blength - 1 ^ bstart) & -32) {
13265 // it crosses a boundary
13266 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13267 } else {
13268 // within a single word
13269 x = a[bstart/32|0] >>> sh;
13270 }
13271 return x & ((1<<blength) - 1);
13272 },
13273
13274 /**
13275 * Concatenate two bit arrays.
13276 * @param {bitArray} a1 The first array.
13277 * @param {bitArray} a2 The second array.
13278 * @return {bitArray} The concatenation of a1 and a2.
13279 */
13280 concat: function (a1, a2) {
13281 if (a1.length === 0 || a2.length === 0) {
13282 return a1.concat(a2);
13283 }
13284
13285 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13286 if (shift === 32) {
13287 return a1.concat(a2);
13288 } else {
13289 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
13290 }
13291 },
13292
13293 /**
13294 * Find the length of an array of bits.
13295 * @param {bitArray} a The array.
13296 * @return {Number} The length of a, in bits.
13297 */
13298 bitLength: function (a) {
13299 var l = a.length, x;
13300 if (l === 0) { return 0; }
13301 x = a[l - 1];
13302 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13303 },
13304
13305 /**
13306 * Truncate an array.
13307 * @param {bitArray} a The array.
13308 * @param {Number} len The length to truncate to, in bits.
13309 * @return {bitArray} A new array, truncated to len bits.
13310 */
13311 clamp: function (a, len) {
13312 if (a.length * 32 < len) { return a; }
13313 a = a.slice(0, Math.ceil(len / 32));
13314 var l = a.length;
13315 len = len & 31;
13316 if (l > 0 && len) {
13317 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13318 }
13319 return a;
13320 },
13321
13322 /**
13323 * Make a partial word for a bit array.
13324 * @param {Number} len The number of bits in the word.
13325 * @param {Number} x The bits.
13326 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13327 * @return {Number} The partial word.
13328 */
13329 partial: function (len, x, _end) {
13330 if (len === 32) { return x; }
13331 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13332 },
13333
13334 /**
13335 * Get the number of bits used by a partial word.
13336 * @param {Number} x The partial word.
13337 * @return {Number} The number of bits used by the partial word.
13338 */
13339 getPartial: function (x) {
13340 return Math.round(x/0x10000000000) || 32;
13341 },
13342
13343 /**
13344 * Compare two arrays for equality in a predictable amount of time.
13345 * @param {bitArray} a The first array.
13346 * @param {bitArray} b The second array.
13347 * @return {boolean} true if a == b; false otherwise.
13348 */
13349 equal: function (a, b) {
13350 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13351 return false;
13352 }
13353 var x = 0, i;
13354 for (i=0; i<a.length; i++) {
13355 x |= a[i]^b[i];
13356 }
13357 return (x === 0);
13358 },
13359
13360 /** Shift an array right.
13361 * @param {bitArray} a The array to shift.
13362 * @param {Number} shift The number of bits to shift.
13363 * @param {Number} [carry=0] A byte to carry in
13364 * @param {bitArray} [out=[]] An array to prepend to the output.
13365 * @private
13366 */
13367 _shiftRight: function (a, shift, carry, out) {
13368 var i, last2=0, shift2;
13369 if (out === undefined) { out = []; }
13370
13371 for (; shift >= 32; shift -= 32) {
13372 out.push(carry);
13373 carry = 0;
13374 }
13375 if (shift === 0) {
13376 return out.concat(a);
13377 }
13378
13379 for (i=0; i<a.length; i++) {
13380 out.push(carry | a[i]>>>shift);
13381 carry = a[i] << (32-shift);
13382 }
13383 last2 = a.length ? a[a.length-1] : 0;
13384 shift2 = sjcl.bitArray.getPartial(last2);
13385 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13386 return out;
13387 },
13388
13389 /** xor a block of 4 words together.
13390 * @private
13391 */
13392 _xor4: function(x,y) {
13393 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13394 },
13395
13396 /** byteswap a word array inplace.
13397 * (does not handle partial words)
13398 * @param {sjcl.bitArray} a word array
13399 * @return {sjcl.bitArray} byteswapped array
13400 */
13401 byteswapM: function(a) {
13402 var i, v, m = 0xff00;
13403 for (i = 0; i < a.length; ++i) {
13404 v = a[i];
13405 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
13406 }
13407 return a;
13408 }
13409 };
13410
13411
13412 //// codecString.js
13413
13414 /** @fileOverview Bit array codec implementations.
13415 *
13416 * @author Emily Stark
13417 * @author Mike Hamburg
13418 * @author Dan Boneh
13419 */
13420
13421 /** @namespace UTF-8 strings */
13422 sjcl.codec.utf8String = {
13423 /** Convert from a bitArray to a UTF-8 string. */
13424 fromBits: function (arr) {
13425 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13426 for (i=0; i<bl/8; i++) {
13427 if ((i&3) === 0) {
13428 tmp = arr[i/4];
13429 }
13430 out += String.fromCharCode(tmp >>> 24);
13431 tmp <<= 8;
13432 }
13433 return decodeURIComponent(escape(out));
13434 },
13435
13436 /** Convert from a UTF-8 string to a bitArray. */
13437 toBits: function (str) {
13438 str = unescape(encodeURIComponent(str));
13439 var out = [], i, tmp=0;
13440 for (i=0; i<str.length; i++) {
13441 tmp = tmp << 8 | str.charCodeAt(i);
13442 if ((i&3) === 3) {
13443 out.push(tmp);
13444 tmp = 0;
13445 }
13446 }
13447 if (i&3) {
13448 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
13449 }
13450 return out;
13451 }
13452 };
13453
13454
13455 //// codecHex.js
13456
13457 /** @fileOverview Bit array codec implementations.
13458 *
13459 * @author Emily Stark
13460 * @author Mike Hamburg
13461 * @author Dan Boneh
13462 */
13463
13464 /** @namespace Hexadecimal */
13465 sjcl.codec.hex = {
13466 /** Convert from a bitArray to a hex string. */
13467 fromBits: function (arr) {
13468 var out = "", i;
13469 for (i=0; i<arr.length; i++) {
13470 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
13471 }
13472 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13473 },
13474 /** Convert from a hex string to a bitArray. */
13475 toBits: function (str) {
13476 var i, out=[], len;
13477 str = str.replace(/\s|0x/g, "");
13478 len = str.length;
13479 str = str + "00000000";
13480 for (i=0; i<str.length; i+=8) {
13481 out.push(parseInt(str.substr(i,8),16)^0);
13482 }
13483 return sjcl.bitArray.clamp(out, len*4);
13484 }
13485 };
13486
13487
13488 //// sha512.js
13489
13490 /** @fileOverview Javascript SHA-512 implementation.
13491 *
13492 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13493 * SJCL by Stefan Thomas.
13494 *
13495 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13496 * Released with New BSD License
13497 *
13498 * @author Emily Stark
13499 * @author Mike Hamburg
13500 * @author Dan Boneh
13501 * @author Jeff Mott
13502 * @author Stefan Thomas
13503 */
13504
13505 /**
13506 * Context for a SHA-512 operation in progress.
13507 * @constructor
13508 * @class Secure Hash Algorithm, 512 bits.
13509 */
13510 sjcl.hash.sha512 = function (hash) {
13511 if (!this._key[0]) { this._precompute(); }
13512 if (hash) {
13513 this._h = hash._h.slice(0);
13514 this._buffer = hash._buffer.slice(0);
13515 this._length = hash._length;
13516 } else {
13517 this.reset();
13518 }
13519 };
13520
13521 /**
13522 * Hash a string or an array of words.
13523 * @static
13524 * @param {bitArray|String} data the data to hash.
13525 * @return {bitArray} The hash value, an array of 16 big-endian words.
13526 */
13527 sjcl.hash.sha512.hash = function (data) {
13528 return (new sjcl.hash.sha512()).update(data).finalize();
13529 };
13530
13531 sjcl.hash.sha512.prototype = {
13532 /**
13533 * The hash's block size, in bits.
13534 * @constant
13535 */
13536 blockSize: 1024,
13537
13538 /**
13539 * Reset the hash state.
13540 * @return this
13541 */
13542 reset:function () {
13543 this._h = this._init.slice(0);
13544 this._buffer = [];
13545 this._length = 0;
13546 return this;
13547 },
13548
13549 /**
13550 * Input several words to the hash.
13551 * @param {bitArray|String} data the data to hash.
13552 * @return this
13553 */
13554 update: function (data) {
13555 if (typeof data === "string") {
13556 data = sjcl.codec.utf8String.toBits(data);
13557 }
13558 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13559 ol = this._length,
13560 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13561 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13562 this._block(b.splice(0,32));
13563 }
13564 return this;
13565 },
13566
13567 /**
13568 * Complete hashing and output the hash value.
13569 * @return {bitArray} The hash value, an array of 16 big-endian words.
13570 */
13571 finalize:function () {
13572 var i, b = this._buffer, h = this._h;
13573
13574 // Round out and push the buffer
13575 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13576
13577 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13578 for (i = b.length + 4; i & 31; i++) {
13579 b.push(0);
13580 }
13581
13582 // append the length
13583 b.push(0);
13584 b.push(0);
13585 b.push(Math.floor(this._length / 0x100000000));
13586 b.push(this._length | 0);
13587
13588 while (b.length) {
13589 this._block(b.splice(0,32));
13590 }
13591
13592 this.reset();
13593 return h;
13594 },
13595
13596 /**
13597 * The SHA-512 initialization vector, to be precomputed.
13598 * @private
13599 */
13600 _init:[],
13601
13602 /**
13603 * Least significant 24 bits of SHA512 initialization values.
13604 *
13605 * Javascript only has 53 bits of precision, so we compute the 40 most
13606 * significant bits and add the remaining 24 bits as constants.
13607 *
13608 * @private
13609 */
13610 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13611
13612 /*
13613 _init:
13614 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13615 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13616 */
13617
13618 /**
13619 * The SHA-512 hash key, to be precomputed.
13620 * @private
13621 */
13622 _key:[],
13623
13624 /**
13625 * Least significant 24 bits of SHA512 key values.
13626 * @private
13627 */
13628 _keyr:
13629 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13630 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13631 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13632 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13633 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13634 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13635 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13636 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13637 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13638 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13639
13640 /*
13641 _key:
13642 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13643 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13644 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13645 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13646 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13647 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13648 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13649 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13650 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13651 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13652 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13653 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13654 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13655 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13656 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13657 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13658 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13659 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13660 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13661 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13662 */
13663
13664 /**
13665 * Function to precompute _init and _key.
13666 * @private
13667 */
13668 _precompute: function () {
13669 // XXX: This code is for precomputing the SHA256 constants, change for
13670 // SHA512 and re-enable.
13671 var i = 0, prime = 2, factor;
13672
13673 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13674 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13675
13676 outer: for (; i<80; prime++) {
13677 for (factor=2; factor*factor <= prime; factor++) {
13678 if (prime % factor === 0) {
13679 // not a prime
13680 continue outer;
13681 }
13682 }
13683
13684 if (i<8) {
13685 this._init[i*2] = frac(Math.pow(prime, 1/2));
13686 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13687 }
13688 this._key[i*2] = frac(Math.pow(prime, 1/3));
13689 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13690 i++;
13691 }
13692 },
13693
13694 /**
13695 * Perform one cycle of SHA-512.
13696 * @param {bitArray} words one block of words.
13697 * @private
13698 */
13699 _block:function (words) {
13700 var i, wrh, wrl,
13701 w = words.slice(0),
13702 h = this._h,
13703 k = this._key,
13704 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13705 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13706 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13707 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13708
13709 // Working variables
13710 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13711 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13712 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13713 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13714
13715 for (i=0; i<80; i++) {
13716 // load up the input word for this round
13717 if (i<16) {
13718 wrh = w[i * 2];
13719 wrl = w[i * 2 + 1];
13720 } else {
13721 // Gamma0
13722 var gamma0xh = w[(i-15) * 2];
13723 var gamma0xl = w[(i-15) * 2 + 1];
13724 var gamma0h =
13725 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13726 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13727 (gamma0xh >>> 7);
13728 var gamma0l =
13729 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13730 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13731 ((gamma0xh << 25) | (gamma0xl >>> 7));
13732
13733 // Gamma1
13734 var gamma1xh = w[(i-2) * 2];
13735 var gamma1xl = w[(i-2) * 2 + 1];
13736 var gamma1h =
13737 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13738 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13739 (gamma1xh >>> 6);
13740 var gamma1l =
13741 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13742 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13743 ((gamma1xh << 26) | (gamma1xl >>> 6));
13744
13745 // Shortcuts
13746 var wr7h = w[(i-7) * 2];
13747 var wr7l = w[(i-7) * 2 + 1];
13748
13749 var wr16h = w[(i-16) * 2];
13750 var wr16l = w[(i-16) * 2 + 1];
13751
13752 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13753 wrl = gamma0l + wr7l;
13754 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13755 wrl += gamma1l;
13756 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13757 wrl += wr16l;
13758 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13759 }
13760
13761 w[i*2] = wrh |= 0;
13762 w[i*2 + 1] = wrl |= 0;
13763
13764 // Ch
13765 var chh = (eh & fh) ^ (~eh & gh);
13766 var chl = (el & fl) ^ (~el & gl);
13767
13768 // Maj
13769 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13770 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13771
13772 // Sigma0
13773 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13774 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13775
13776 // Sigma1
13777 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13778 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13779
13780 // K(round)
13781 var krh = k[i*2];
13782 var krl = k[i*2+1];
13783
13784 // t1 = h + sigma1 + ch + K(round) + W(round)
13785 var t1l = hl + sigma1l;
13786 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
13787 t1l += chl;
13788 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
13789 t1l += krl;
13790 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
13791 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
13792 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
13793
13794 // t2 = sigma0 + maj
13795 var t2l = sigma0l + majl;
13796 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
13797
13798 // Update working variables
13799 hh = gh;
13800 hl = gl;
13801 gh = fh;
13802 gl = fl;
13803 fh = eh;
13804 fl = el;
13805 el = (dl + t1l) | 0;
13806 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13807 dh = ch;
13808 dl = cl;
13809 ch = bh;
13810 cl = bl;
13811 bh = ah;
13812 bl = al;
13813 al = (t1l + t2l) | 0;
13814 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
13815 }
13816
13817 // Intermediate hash
13818 h0l = h[1] = (h0l + al) | 0;
13819 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
13820 h1l = h[3] = (h1l + bl) | 0;
13821 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
13822 h2l = h[5] = (h2l + cl) | 0;
13823 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
13824 h3l = h[7] = (h3l + dl) | 0;
13825 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13826 h4l = h[9] = (h4l + el) | 0;
13827 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
13828 h5l = h[11] = (h5l + fl) | 0;
13829 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
13830 h6l = h[13] = (h6l + gl) | 0;
13831 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
13832 h7l = h[15] = (h7l + hl) | 0;
13833 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
13834 }
13835 };
13836
13837
13838 //// hmac.js
13839
13840 /** @fileOverview HMAC implementation.
13841 *
13842 * @author Emily Stark
13843 * @author Mike Hamburg
13844 * @author Dan Boneh
13845 */
13846
13847 /** HMAC with the specified hash function.
13848 * @constructor
13849 * @param {bitArray} key the key for HMAC.
13850 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13851 */
13852 sjcl.misc.hmac = function (key, Hash) {
13853 this._hash = Hash = Hash || sjcl.hash.sha256;
13854 var exKey = [[],[]], i,
13855 bs = Hash.prototype.blockSize / 32;
13856 this._baseHash = [new Hash(), new Hash()];
13857
13858 if (key.length > bs) {
13859 key = Hash.hash(key);
13860 }
13861
13862 for (i=0; i<bs; i++) {
13863 exKey[0][i] = key[i]^0x36363636;
13864 exKey[1][i] = key[i]^0x5C5C5C5C;
13865 }
13866
13867 this._baseHash[0].update(exKey[0]);
13868 this._baseHash[1].update(exKey[1]);
13869 this._resultHash = new Hash(this._baseHash[0]);
13870 };
13871
13872 /** HMAC with the specified hash function. Also called encrypt since it's a prf.
13873 * @param {bitArray|String} data The data to mac.
13874 */
13875 sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13876 if (!this._updated) {
13877 this.update(data);
13878 return this.digest(data);
13879 } else {
13880 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
13881 }
13882 };
13883
13884 sjcl.misc.hmac.prototype.reset = function () {
13885 this._resultHash = new this._hash(this._baseHash[0]);
13886 this._updated = false;
13887 };
13888
13889 sjcl.misc.hmac.prototype.update = function (data) {
13890 this._updated = true;
13891 this._resultHash.update(data);
13892 };
13893
13894 sjcl.misc.hmac.prototype.digest = function () {
13895 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
13896
13897 this.reset();
13898
13899 return result;
13900 };
13901
13902
13903 //// pbkdf2.js
13904
13905
13906 /** @fileOverview Password-based key-derivation function, version 2.0.
13907 *
13908 * @author Emily Stark
13909 * @author Mike Hamburg
13910 * @author Dan Boneh
13911 */
13912
13913 /** Password-Based Key-Derivation Function, version 2.0.
13914 *
13915 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13916 *
13917 * This is the method specified by RSA's PKCS #5 standard.
13918 *
13919 * @param {bitArray|String} password The password.
13920 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13921 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
13922 * @param {Number} [length] The length of the derived key. Defaults to the
13923 output size of the hash function.
13924 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13925 * @return {bitArray} the derived key.
13926 */
13927 sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13928 count = count || 1000;
13929
13930 if (length < 0 || count < 0) {
13931 throw sjcl.exception.invalid("invalid params to pbkdf2");
13932 }
13933
13934 if (typeof password === "string") {
13935 password = sjcl.codec.utf8String.toBits(password);
13936 }
13937
13938 if (typeof salt === "string") {
13939 salt = sjcl.codec.utf8String.toBits(salt);
13940 }
13941
13942 Prff = Prff || sjcl.misc.hmac;
13943
13944 var prf = new Prff(password),
13945 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13946
13947 for (k = 1; 32 * out.length < (length || 1); k++) {
13948 u = ui = prf.encrypt(b.concat(salt,[k]));
13949
13950 for (i=1; i<count; i++) {
13951 ui = prf.encrypt(ui);
13952 for (j=0; j<ui.length; j++) {
13953 u[j] ^= ui[j];
13954 }
13955 }
13956
13957 out = out.concat(u);
13958 }
13959
13960 if (length) { out = b.clamp(out, length); }
13961
13962 return out;
13963 };
13964
13965
13966 //// sha256.js
13967
13968 /** @fileOverview Javascript SHA-256 implementation.
13969 *
13970 * An older version of this implementation is available in the public
13971 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13972 * Stanford University 2008-2010 and BSD-licensed for liability
13973 * reasons.
13974 *
13975 * Special thanks to Aldo Cortesi for pointing out several bugs in
13976 * this code.
13977 *
13978 * @author Emily Stark
13979 * @author Mike Hamburg
13980 * @author Dan Boneh
13981 */
13982
13983 /**
13984 * Context for a SHA-256 operation in progress.
13985 * @constructor
13986 * @class Secure Hash Algorithm, 256 bits.
13987 */
13988 sjcl.hash.sha256 = function (hash) {
13989 if (!this._key[0]) { this._precompute(); }
13990 if (hash) {
13991 this._h = hash._h.slice(0);
13992 this._buffer = hash._buffer.slice(0);
13993 this._length = hash._length;
13994 } else {
13995 this.reset();
13996 }
13997 };
13998
13999 /**
14000 * Hash a string or an array of words.
14001 * @static
14002 * @param {bitArray|String} data the data to hash.
14003 * @return {bitArray} The hash value, an array of 16 big-endian words.
14004 */
14005 sjcl.hash.sha256.hash = function (data) {
14006 return (new sjcl.hash.sha256()).update(data).finalize();
14007 };
14008
14009 sjcl.hash.sha256.prototype = {
14010 /**
14011 * The hash's block size, in bits.
14012 * @constant
14013 */
14014 blockSize: 512,
14015
14016 /**
14017 * Reset the hash state.
14018 * @return this
14019 */
14020 reset:function () {
14021 this._h = this._init.slice(0);
14022 this._buffer = [];
14023 this._length = 0;
14024 return this;
14025 },
14026
14027 /**
14028 * Input several words to the hash.
14029 * @param {bitArray|String} data the data to hash.
14030 * @return this
14031 */
14032 update: function (data) {
14033 if (typeof data === "string") {
14034 data = sjcl.codec.utf8String.toBits(data);
14035 }
14036 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14037 ol = this._length,
14038 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14039 for (i = 512+ol & -512; i <= nl; i+= 512) {
14040 this._block(b.splice(0,16));
14041 }
14042 return this;
14043 },
14044
14045 /**
14046 * Complete hashing and output the hash value.
14047 * @return {bitArray} The hash value, an array of 8 big-endian words.
14048 */
14049 finalize:function () {
14050 var i, b = this._buffer, h = this._h;
14051
14052 // Round out and push the buffer
14053 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14054
14055 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14056 for (i = b.length + 2; i & 15; i++) {
14057 b.push(0);
14058 }
14059
14060 // append the length
14061 b.push(Math.floor(this._length / 0x100000000));
14062 b.push(this._length | 0);
14063
14064 while (b.length) {
14065 this._block(b.splice(0,16));
14066 }
14067
14068 this.reset();
14069 return h;
14070 },
14071
14072 /**
14073 * The SHA-256 initialization vector, to be precomputed.
14074 * @private
14075 */
14076 _init:[],
14077 /*
14078 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14079 */
14080
14081 /**
14082 * The SHA-256 hash key, to be precomputed.
14083 * @private
14084 */
14085 _key:[],
14086 /*
14087 _key:
14088 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14089 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14090 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14091 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14092 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14093 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14094 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14095 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14096 */
14097
14098
14099 /**
14100 * Function to precompute _init and _key.
14101 * @private
14102 */
14103 _precompute: function () {
14104 var i = 0, prime = 2, factor;
14105
14106 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14107
14108 outer: for (; i<64; prime++) {
14109 for (factor=2; factor*factor <= prime; factor++) {
14110 if (prime % factor === 0) {
14111 // not a prime
14112 continue outer;
14113 }
14114 }
14115
14116 if (i<8) {
14117 this._init[i] = frac(Math.pow(prime, 1/2));
14118 }
14119 this._key[i] = frac(Math.pow(prime, 1/3));
14120 i++;
14121 }
14122 },
14123
14124 /**
14125 * Perform one cycle of SHA-256.
14126 * @param {bitArray} words one block of words.
14127 * @private
14128 */
14129 _block:function (words) {
14130 var i, tmp, a, b,
14131 w = words.slice(0),
14132 h = this._h,
14133 k = this._key,
14134 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14135 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14136
14137 /* Rationale for placement of |0 :
14138 * If a value can overflow is original 32 bits by a factor of more than a few
14139 * million (2^23 ish), there is a possibility that it might overflow the
14140 * 53-bit mantissa and lose precision.
14141 *
14142 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14143 * propagates around the loop, and on the hash state h[]. I don't believe
14144 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14145 * (for h4 anyway), and better safe than sorry.
14146 *
14147 * The clamps on h[] are necessary for the output to be correct even in the
14148 * common case and for short inputs.
14149 */
14150 for (i=0; i<64; i++) {
14151 // load up the input word for this round
14152 if (i<16) {
14153 tmp = w[i];
14154 } else {
14155 a = w[(i+1 ) & 15];
14156 b = w[(i+14) & 15];
14157 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14158 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14159 w[i&15] + w[(i+9) & 15]) | 0;
14160 }
14161
14162 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14163
14164 // shift register
14165 h7 = h6; h6 = h5; h5 = h4;
14166 h4 = h3 + tmp | 0;
14167 h3 = h2; h2 = h1; h1 = h0;
14168
14169 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14170 }
14171
14172 h[0] = h[0]+h0 | 0;
14173 h[1] = h[1]+h1 | 0;
14174 h[2] = h[2]+h2 | 0;
14175 h[3] = h[3]+h3 | 0;
14176 h[4] = h[4]+h4 | 0;
14177 h[5] = h[5]+h5 | 0;
14178 h[6] = h[6]+h6 | 0;
14179 h[7] = h[7]+h7 | 0;
14180 }
14181 };
14182 </script>
14183 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
14184 WORDLISTS["english"] = [
14185 "abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14186 "access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14187 "action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14188 "adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14189 "agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14190 "alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14191 "always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14192 "angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14193 "anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14194 "area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14195 "arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14196 "assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14197 "audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14198 "aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14199 "bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14200 "barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14201 "beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14202 "best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14203 "bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14204 "blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14205 "boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14206 "bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14207 "breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14208 "broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14209 "bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14210 "butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14211 "calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14212 "canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14213 "cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14214 "cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14215 "cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14216 "chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14217 "chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14218 "citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14219 "clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14220 "cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14221 "code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14222 "comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14223 "convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14224 "cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14225 "craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14226 "crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14227 "cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14228 "cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14229 "damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14230 "debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14231 "define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14232 "depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14233 "despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14234 "diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14235 "direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14236 "divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14237 "donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14238 "drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14239 "drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14240 "dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14241 "ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14242 "elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14243 "embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14244 "endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14245 "enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14246 "era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14247 "eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14248 "excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14249 "exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14250 "eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14251 "family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14252 "fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14253 "fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14254 "film","filter","final","find","fine","finger","finish","fire","firm","first",
14255 "fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14256 "flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14257 "foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14258 "forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14259 "frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14260 "fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14261 "gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14262 "gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14263 "ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14264 "glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14265 "goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14266 "grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14267 "grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14268 "guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14269 "harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14270 "heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14271 "high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14272 "holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14273 "host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14274 "hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14275 "identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14276 "impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14277 "indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14278 "inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14279 "intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14280 "item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14281 "job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14282 "junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14283 "kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14284 "knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14285 "laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14286 "layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14287 "legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14288 "liar","liberty","library","license","life","lift","light","like","limb","limit",
14289 "link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14290 "local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14291 "loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14292 "magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14293 "mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14294 "marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14295 "maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14296 "member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14297 "metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14298 "minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14299 "model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14300 "more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14301 "much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14302 "myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14303 "near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14304 "network","neutral","never","news","next","nice","night","noble","noise","nominee",
14305 "noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14306 "nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14307 "obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14308 "oil","okay","old","olive","olympic","omit","once","one","onion","online",
14309 "only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14310 "ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14311 "outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14312 "paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14313 "parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14314 "pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14315 "penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14316 "phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14317 "pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14318 "play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14319 "pole","police","pond","pony","pool","popular","portion","position","possible","post",
14320 "potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14321 "present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14322 "prize","problem","process","produce","profit","program","project","promote","proof","property",
14323 "prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14324 "punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14325 "pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14326 "raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14327 "ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14328 "ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14329 "reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14330 "relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14331 "repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14332 "result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14333 "ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14334 "ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14335 "romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14336 "rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14337 "safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14338 "satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14339 "scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14340 "scrub","sea","search","season","seat","second","secret","section","security","seed",
14341 "seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14342 "session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14343 "sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14344 "short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14345 "siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14346 "sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14347 "skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14348 "slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14349 "snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14350 "soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14351 "sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14352 "speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14353 "spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14354 "spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14355 "stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14356 "still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14357 "strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14358 "success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14359 "sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14360 "suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14361 "swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14362 "tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14363 "teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14364 "thank","that","theme","then","theory","there","they","thing","this","thought",
14365 "three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14366 "time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14367 "toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14368 "tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14369 "toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14370 "trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14371 "trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14372 "truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14373 "twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14374 "unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14375 "unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14376 "uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14377 "useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14378 "vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14379 "verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14380 "video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14381 "vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14382 "wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14383 "wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14384 "web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14385 "wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14386 "win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14387 "wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14388 "worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14389 "yellow","you","young","youth","zebra","zero","zone","zoo"]
14390 </script>
14391 <script>/*
14392 * Copyright (c) 2013 Pavol Rusnak
14393 *
14394 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14395 * this software and associated documentation files (the "Software"), to deal in
14396 * the Software without restriction, including without limitation the rights to
14397 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14398 * of the Software, and to permit persons to whom the Software is furnished to do
14399 * so, subject to the following conditions:
14400 *
14401 * The above copyright notice and this permission notice shall be included in all
14402 * copies or substantial portions of the Software.
14403 *
14404 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14405 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14406 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14407 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14408 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14409 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14410 */
14411
14412 /*
14413 * Javascript port from python by Ian Coleman
14414 *
14415 * Requires code from sjcl
14416 * https://github.com/bitwiseshiftleft/sjcl
14417 */
14418
14419 var Mnemonic = function(language) {
14420
14421 var PBKDF2_ROUNDS = 2048;
14422 var RADIX = 2048;
14423
14424 var self = this;
14425 var wordlist = [];
14426
14427 var hmacSHA512 = function(key) {
14428 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14429 this.encrypt = function() {
14430 return hasher.encrypt.apply(hasher, arguments);
14431 };
14432 };
14433
14434 function init() {
14435 wordlist = WORDLISTS[language];
14436 if (wordlist.length != RADIX) {
14437 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14438 throw err;
14439 }
14440 }
14441
14442 self.generate = function(strength) {
14443 strength = strength || 128;
14444 var r = strength % 32;
14445 if (r > 0) {
14446 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14447 }
14448 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14449 if (!hasStrongCrypto) {
14450 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14451 }
14452 var buffer = new Uint8Array(strength / 8);
14453 var data = crypto.getRandomValues(buffer);
14454 return self.toMnemonic(data);
14455 }
14456
14457 self.toMnemonic = function(byteArray) {
14458 if (byteArray.length % 4 > 0) {
14459 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
14460 }
14461
14462 //h = hashlib.sha256(data).hexdigest()
14463 var data = byteArrayToWordArray(byteArray);
14464 var hash = sjcl.hash.sha256.hash(data);
14465 var h = sjcl.codec.hex.fromBits(hash);
14466
14467 // b is a binary string, eg '00111010101100...'
14468 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14469 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14470 //
14471 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14472 // c = bin(int(h, 16))[2:].zfill(256)
14473 // d = c[:len(data) * 8 / 32]
14474 var a = byteArrayToBinaryString(byteArray);
14475 var c = zfill(hexStringToBinaryString(h), 256);
14476 var d = c.substring(0, byteArray.length * 8 / 32);
14477 // b = line1 + line2
14478 var b = a + d;
14479
14480 var result = [];
14481 var blen = b.length / 11;
14482 for (var i=0; i<blen; i++) {
14483 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14484 result.push(wordlist[idx]);
14485 }
14486 return result.join(' ');
14487 }
14488
14489 self.check = function(mnemonic) {
14490 var mnemonic = mnemonic.split(' ')
14491 if (mnemonic.length % 3 > 0) {
14492 return false
14493 }
14494 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14495 var idx = [];
14496 for (var i=0; i<mnemonic.length; i++) {
14497 var word = mnemonic[i];
14498 var wordIndex = wordlist.indexOf(word);
14499 if (wordIndex == -1) {
14500 return false;
14501 }
14502 var binaryIndex = zfill(wordIndex.toString(2), 11);
14503 idx.push(binaryIndex);
14504 }
14505 var b = idx.join('');
14506 var l = b.length;
14507 //d = b[:l / 33 * 32]
14508 //h = b[-l / 33:]
14509 var d = b.substring(0, l / 33 * 32);
14510 var h = b.substring(l - l / 33, l);
14511 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
14512 var nd = binaryStringToWordArray(d);
14513 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
14514 var ndHash = sjcl.hash.sha256.hash(nd);
14515 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14516 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
14517 var nh = ndBstr.substring(0,l/33);
14518 return h == nh;
14519 }
14520
14521 self.toSeed = function(mnemonic, passphrase) {
14522 passphrase = passphrase || '';
14523 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
14524 passphrase = self.normalizeString(passphrase)
14525 passphrase = "mnemonic" + passphrase;
14526 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14527 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14528 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14529 var hashHex = sjcl.codec.hex.fromBits(result);
14530 return hashHex;
14531 }
14532
14533 self.normalizeString = function(str) {
14534 if (typeof str.normalize == "function") {
14535 return str.normalize("NFKD");
14536 }
14537 else {
14538 // TODO decide how to handle this in the future.
14539 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14540 return str;
14541 }
14542 }
14543
14544 function byteArrayToWordArray(data) {
14545 var a = [];
14546 for (var i=0; i<data.length/4; i++) {
14547 v = 0;
14548 v += data[i*4 + 0] << 8 * 3;
14549 v += data[i*4 + 1] << 8 * 2;
14550 v += data[i*4 + 2] << 8 * 1;
14551 v += data[i*4 + 3] << 8 * 0;
14552 a.push(v);
14553 }
14554 return a;
14555 }
14556
14557 function byteArrayToBinaryString(data) {
14558 var bin = "";
14559 for (var i=0; i<data.length; i++) {
14560 bin += zfill(data[i].toString(2), 8);
14561 }
14562 return bin;
14563 }
14564
14565 function hexStringToBinaryString(hexString) {
14566 binaryString = "";
14567 for (var i=0; i<hexString.length; i++) {
14568 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14569 }
14570 return binaryString;
14571 }
14572
14573 function binaryStringToWordArray(binary) {
14574 var aLen = binary.length / 32;
14575 var a = [];
14576 for (var i=0; i<aLen; i++) {
14577 var valueStr = binary.substring(0,32);
14578 var value = parseInt(valueStr, 2);
14579 a.push(value);
14580 binary = binary.slice(32);
14581 }
14582 return a;
14583 }
14584
14585 // Pad a numeric string on the left with zero digits until the given width
14586 // is reached.
14587 // Note this differs to the python implementation because it does not
14588 // handle numbers starting with a sign.
14589 function zfill(source, length) {
14590 source = source.toString();
14591 while (source.length < length) {
14592 source = '0' + source;
14593 }
14594 return source;
14595 }
14596
14597 init();
14598
14599 }
14600 </script>
14601 <script>(function() {
14602
14603 var mnemonic = new Mnemonic("english");
14604 var bip32RootKey = null;
14605 var bip32ExtendedKey = null;
14606 var network = bitcoin.networks.bitcoin;
14607 var addressRowTemplate = $("#address-row-template");
14608
14609 var showIndex = true;
14610 var showAddress = true;
14611 var showPrivKey = true;
14612
14613 var phraseChangeTimeoutEvent = null;
14614
14615 var DOM = {};
14616 DOM.network = $(".network");
14617 DOM.phraseNetwork = $("#network-phrase");
14618 DOM.phrase = $(".phrase");
14619 DOM.passphrase = $(".passphrase");
14620 DOM.generate = $(".generate");
14621 DOM.rootKey = $(".root-key");
14622 DOM.extendedPrivKey = $(".extended-priv-key");
14623 DOM.extendedPubKey = $(".extended-pub-key");
14624 DOM.bip32tab = $("#bip32-tab");
14625 DOM.bip44tab = $("#bip44-tab");
14626 DOM.bip32panel = $("#bip32");
14627 DOM.bip44panel = $("#bip44");
14628 DOM.bip32path = $("#bip32-path");
14629 DOM.bip44path = $("#bip44-path");
14630 DOM.bip44purpose = $("#bip44 .purpose");
14631 DOM.bip44coin = $("#bip44 .coin");
14632 DOM.bip44account = $("#bip44 .account");
14633 DOM.bip44change = $("#bip44 .change");
14634 DOM.strength = $(".strength");
14635 DOM.addresses = $(".addresses");
14636 DOM.rowsToAdd = $(".rows-to-add");
14637 DOM.more = $(".more");
14638 DOM.feedback = $(".feedback");
14639 DOM.tab = $(".derivation-type a");
14640 DOM.indexToggle = $(".index-toggle");
14641 DOM.addressToggle = $(".address-toggle");
14642 DOM.privateKeyToggle = $(".private-key-toggle");
14643
14644 var derivationPath = $(".tab-pane.active .path").val();
14645
14646 function init() {
14647 // Events
14648 DOM.network.on("change", networkChanged);
14649 DOM.phrase.on("input", delayedPhraseChanged);
14650 DOM.passphrase.on("input", delayedPhraseChanged);
14651 DOM.generate.on("click", generateClicked);
14652 DOM.more.on("click", showMore);
14653 DOM.bip32path.on("input", bip32Changed);
14654 DOM.bip44purpose.on("input", bip44Changed);
14655 DOM.bip44coin.on("input", bip44Changed);
14656 DOM.bip44account.on("input", bip44Changed);
14657 DOM.bip44change.on("input", bip44Changed);
14658 DOM.tab.on("click", tabClicked);
14659 DOM.indexToggle.on("click", toggleIndexes);
14660 DOM.addressToggle.on("click", toggleAddresses);
14661 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14662 disableForms();
14663 hidePending();
14664 hideValidationError();
14665 populateNetworkSelect();
14666 }
14667
14668 // Event handlers
14669
14670 function networkChanged(e) {
14671 var network = e.target.value;
14672 networks[network].onSelect();
14673 setBip44DerivationPath();
14674 delayedPhraseChanged();
14675 }
14676
14677 function delayedPhraseChanged() {
14678 hideValidationError();
14679 showPending();
14680 if (phraseChangeTimeoutEvent != null) {
14681 clearTimeout(phraseChangeTimeoutEvent);
14682 }
14683 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14684 }
14685
14686 function phraseChanged() {
14687 showPending();
14688 hideValidationError();
14689 // Get the mnemonic phrase
14690 var phrase = DOM.phrase.val();
14691 var passphrase = DOM.passphrase.val();
14692 var errorText = findPhraseErrors(phrase);
14693 if (errorText) {
14694 showValidationError(errorText);
14695 return;
14696 }
14697 // Get the derivation path
14698 var errorText = findDerivationPathErrors();
14699 if (errorText) {
14700 showValidationError(errorText);
14701 return;
14702 }
14703 // Calculate and display
14704 calcBip32Seed(phrase, passphrase, derivationPath);
14705 displayBip32Info();
14706 hidePending();
14707 }
14708
14709 function generateClicked() {
14710 clearDisplay();
14711 showPending();
14712 setTimeout(function() {
14713 var phrase = generateRandomPhrase();
14714 if (!phrase) {
14715 return;
14716 }
14717 phraseChanged();
14718 }, 50);
14719 }
14720
14721 function tabClicked(e) {
14722 var activePath = $(e.target.getAttribute("href") + " .path");
14723 derivationPath = activePath.val();
14724 derivationChanged();
14725 }
14726
14727 function derivationChanged() {
14728 delayedPhraseChanged();
14729 }
14730
14731 function bip32Changed() {
14732 derivationPath = DOM.bip32path.val();
14733 derivationChanged();
14734 }
14735
14736 function bip44Changed() {
14737 setBip44DerivationPath();
14738 derivationChanged();
14739 }
14740
14741 function toggleIndexes() {
14742 showIndex = !showIndex;
14743 $("td.index span").toggleClass("invisible");
14744 }
14745
14746 function toggleAddresses() {
14747 showAddress = !showAddress;
14748 $("td.address span").toggleClass("invisible");
14749 }
14750
14751 function togglePrivateKeys() {
14752 showPrivKey = !showPrivKey;
14753 $("td.privkey span").toggleClass("invisible");
14754 }
14755
14756 // Private methods
14757
14758 function generateRandomPhrase() {
14759 if (!hasStrongRandom()) {
14760 var errorText = "This browser does not support strong randomness";
14761 showValidationError(errorText);
14762 return;
14763 }
14764 var numWords = parseInt(DOM.strength.val());
14765 var strength = numWords / 3 * 32;
14766 var words = mnemonic.generate(strength);
14767 DOM.phrase.val(words);
14768 return words;
14769 }
14770
14771 function calcBip32Seed(phrase, passphrase, path) {
14772 var seed = mnemonic.toSeed(phrase, passphrase);
14773 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
14774 bip32ExtendedKey = bip32RootKey;
14775 // Derive the key from the path
14776 var pathBits = path.split("/");
14777 for (var i=0; i<pathBits.length; i++) {
14778 var bit = pathBits[i];
14779 var index = parseInt(bit);
14780 if (isNaN(index)) {
14781 continue;
14782 }
14783 var hardened = bit[bit.length-1] == "'";
14784 if (hardened) {
14785 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14786 }
14787 else {
14788 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14789 }
14790 }
14791 }
14792
14793 function showValidationError(errorText) {
14794 DOM.feedback
14795 .text(errorText)
14796 .show();
14797 }
14798
14799 function hideValidationError() {
14800 DOM.feedback
14801 .text("")
14802 .hide();
14803 }
14804
14805 function findPhraseErrors(phrase) {
14806 // TODO make this right
14807 // Preprocess the words
14808 phrase = mnemonic.normalizeString(phrase);
14809 var parts = phrase.split(" ");
14810 var proper = [];
14811 for (var i=0; i<parts.length; i++) {
14812 var part = parts[i];
14813 if (part.length > 0) {
14814 // TODO check that lowercasing is always valid to do
14815 proper.push(part.toLowerCase());
14816 }
14817 }
14818 // TODO some levenstein on the words
14819 var properPhrase = proper.join(' ');
14820 // Check the words are valid
14821 var isValid = mnemonic.check(properPhrase);
14822 if (!isValid) {
14823 return "Invalid mnemonic";
14824 }
14825 return false;
14826 }
14827
14828 function findDerivationPathErrors(path) {
14829 // TODO
14830 return false;
14831 }
14832
14833 function displayBip32Info() {
14834 // Display the key
14835 var rootKey = bip32RootKey.toBase58();
14836 DOM.rootKey.val(rootKey);
14837 var extendedPrivKey = bip32ExtendedKey.toBase58();
14838 DOM.extendedPrivKey.val(extendedPrivKey);
14839 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14840 DOM.extendedPubKey.val(extendedPubKey);
14841 // Display the addresses and privkeys
14842 clearAddressesList();
14843 displayAddresses(0, 20);
14844 }
14845
14846 function displayAddresses(start, total) {
14847 for (var i=0; i<total; i++) {
14848 var index = i + start;
14849 new TableRow(index);
14850 }
14851 }
14852
14853 function TableRow(index) {
14854
14855 function init() {
14856 calculateValues();
14857 }
14858
14859 function calculateValues() {
14860 setTimeout(function() {
14861 var key = bip32ExtendedKey.derive(index);
14862 var address = key.getAddress().toString();
14863 var privkey = key.privKey.toWIF(network);
14864 addAddressToList(index, address, privkey);
14865 }, 50)
14866 }
14867
14868 init();
14869
14870 }
14871
14872 function showMore() {
14873 var start = DOM.addresses.children().length;
14874 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14875 if (isNaN(rowsToAdd)) {
14876 rowsToAdd = 20;
14877 DOM.rowsToAdd.val("20");
14878 }
14879 if (rowsToAdd > 200) {
14880 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
14881 msg += "Do you want to continue?";
14882 if (!confirm(msg)) {
14883 return;
14884 }
14885 }
14886 displayAddresses(start, rowsToAdd);
14887 }
14888
14889 function clearDisplay() {
14890 clearAddressesList();
14891 clearKey();
14892 hideValidationError();
14893 }
14894
14895 function clearAddressesList() {
14896 DOM.addresses.empty();
14897 }
14898
14899 function clearKey() {
14900 DOM.rootKey.val("");
14901 DOM.extendedPrivKey.val("");
14902 DOM.extendedPubKey.val("");
14903 }
14904
14905 function addAddressToList(index, address, privkey) {
14906 var row = $(addressRowTemplate.html());
14907 // Elements
14908 var indexCell = row.find(".index span");
14909 var addressCell = row.find(".address span");
14910 var privkeyCell = row.find(".privkey span");
14911 // Content
14912 var indexText = derivationPath + "/" + index;
14913 indexCell.text(indexText);
14914 addressCell.text(address);
14915 privkeyCell.text(privkey);
14916 // Visibility
14917 if (!showIndex) {
14918 indexCell.addClass("invisible");
14919 }
14920 if (!showAddress) {
14921 addressCell.addClass("invisible");
14922 }
14923 if (!showPrivKey) {
14924 privkeyCell.addClass("invisible");
14925 }
14926 DOM.addresses.append(row);
14927 }
14928
14929 function hasStrongRandom() {
14930 return 'crypto' in window && window['crypto'] !== null;
14931 }
14932
14933 function disableForms() {
14934 $("form").on("submit", function(e) {
14935 e.preventDefault();
14936 });
14937 }
14938
14939 function setBip44DerivationPath() {
14940 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
14941 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
14942 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
14943 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
14944 var path = "m/";
14945 path += purpose + "'/";
14946 path += coin + "'/";
14947 path += account + "'/";
14948 path += change;
14949 DOM.bip44path.val(path);
14950 derivationPath = DOM.bip44path.val();
14951 }
14952
14953 function parseIntNoNaN(val, defaultVal) {
14954 var v = parseInt(val);
14955 if (isNaN(v)) {
14956 return defaultVal;
14957 }
14958 return v;
14959 }
14960
14961 function showPending() {
14962 DOM.feedback
14963 .text("Calculating...")
14964 .show();
14965 }
14966
14967 function hidePending() {
14968 DOM.feedback
14969 .text("")
14970 .hide();
14971 }
14972
14973 function populateNetworkSelect() {
14974 for (var i=0; i<networks.length; i++) {
14975 var network = networks[i];
14976 var option = $("<option>");
14977 option.attr("value", i);
14978 option.text(network.name);
14979 DOM.phraseNetwork.append(option);
14980 }
14981 }
14982
14983 var networks = [
14984 {
14985 name: "Bitcoin",
14986 onSelect: function() {
14987 network = bitcoin.networks.bitcoin;
14988 DOM.bip44coin.val(0);
14989 },
14990 },
14991 {
14992 name: "Bitcoin Testnet",
14993 onSelect: function() {
14994 network = bitcoin.networks.testnet;
14995 DOM.bip44coin.val(1);
14996 },
14997 },
14998 {
14999 name: "Litecoin",
15000 onSelect: function() {
15001 network = bitcoin.networks.litecoin;
15002 DOM.bip44coin.val(2);
15003 },
15004 },
15005 {
15006 name: "Dogecoin",
15007 onSelect: function() {
15008 network = bitcoin.networks.dogecoin;
15009 DOM.bip44coin.val(3);
15010 },
15011 },
15012 {
15013 name: "ShadowCash",
15014 onSelect: function() {
15015 network = bitcoin.networks.shadow;
15016 DOM.bip44coin.val(35);
15017 },
15018 },
15019 {
15020 name: "ShadowCash Testnet",
15021 onSelect: function() {
15022 network = bitcoin.networks.shadowtn;
15023 DOM.bip44coin.val(1);
15024 },
15025 },
15026 {
15027 name: "Viacoin",
15028 onSelect: function() {
15029 network = bitcoin.networks.viacoin;
15030 DOM.bip44coin.val(14);
15031 },
15032 },
15033 {
15034 name: "Viacoin Testnet",
15035 onSelect: function() {
15036 network = bitcoin.networks.viacointestnet;
15037 DOM.bip44coin.val(1);
15038 },
15039 },
15040 {
15041 name: "Jumbucks",
15042 onSelect: function() {
15043 network = bitcoin.networks.jumbucks;
15044 DOM.bip44coin.val(26);
15045 },
15046 },
15047 {
15048 name: "CLAM",
15049 onSelect: function() {
15050 network = bitcoin.networks.clam;
15051 DOM.bip44coin.val(23);
15052 },
15053 },
15054 ]
15055
15056 init();
15057
15058 })();
15059 </script>
15060 </body>
15061 </html>