]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Wallet tabs removed, added text to BIP32 tab
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
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)
ab78acc6
IC
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" />
3af2954a 15
ab78acc6
IC
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 </style>
43 </head>
44 <body>
45 <div class="container">
3af2954a 46
ab78acc6
IC
47 <h1 class="text-center">Mnemonic Code Converter</h1>
48 <hr>
49 <div class="row">
50 <div class="col-md-12">
51 <h2>Mnemonic</h2>
52 <form class="form-horizontal" role="form">
53 <div class="col-sm-2"></div>
54 <div class="col-sm-10">
55 <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>
56 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
57 </div>
58 <div class="form-group">
59 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
60 <div class="col-sm-10">
61 <textarea id="phrase" class="phrase form-control"></textarea>
62 </div>
63 </div>
64 <div class="form-group">
65 <label for="strength" class="col-sm-2 control-label">Number of words</label>
66 <div class="col-sm-10">
67 <div class="input-group">
68 <input type="number" class="strength form-control" id="strength" value="12">
69 <span class="input-group-btn">
70 <button class="btn generate">Generate Random Mnemonic</button>
71 </span>
72 </div>
73 </div>
74 </div>
75 <div class="form-group">
76 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
77 <div class="col-sm-10">
78 <textarea id="passphrase" class="passphrase form-control"></textarea>
79 </div>
80 </div>
81 <div class="form-group">
82 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
83 <div class="col-sm-10">
84 <select id="network-phrase" class="network form-control">
85 <!-- populated by javascript -->
86 </select>
87 </div>
88 </div>
89 <div class="form-group">
90 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
91 <div class="col-sm-10">
92 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
93 </div>
94 </div>
95 </form>
96 </div>
97 </div>
3af2954a 98
ab78acc6 99 <hr>
3af2954a 100
ab78acc6
IC
101 <div class="row">
102 <div class="col-md-12">
103 <h2>Derivation Path</h2>
104 <ul class="derivation-type nav nav-tabs" role="tablist">
105 <li id="hive-tab" class="active">
106 <a href="#hive" role="tab" data-toggle="tab">Hive Wallet</a>
107 </li>
108 <li id="mycelium-tab">
109 <a href="#mycelium" role="tab" data-toggle="tab">Mycelium Wallet</a>
110 </li>
111 <li id="bip44-tab">
112 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
113 </li>
114 <li id="bip32-tab">
115 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
116 </li>
117 </ul>
118 <div class="derivation-type tab-content">
119 <div id="hive" class="tab-pane active">
120 <form class="form-horizontal" role="form">
121 <br>
122 <div class="col-sm-2"></div>
123 <div class="col-sm-10">
124 <p>For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a></p>
125 </div>
126 <div class="form-group">
127 <label for="hive-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
128 <div class="col-sm-10">
129 <input id="hive-path" type="text" class="path form-control" value="m/0'/0" readonly="readonly">
130 </div>
131 </div>
132 </form>
133 </div>
134 <div id="mycelium" class="tab-pane">
135 <form class="form-horizontal" role="form">
136 <br>
137 <div class="col-sm-2"></div>
138 <div class="col-sm-10">
139 <p>For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a></p>
140 </div>
141 <div class="form-group">
142 <label for="mycelium-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
143 <div class="col-sm-10">
144 <input id="mycelium-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
145 </div>
146 </div>
147 </form>
148 </div>
149 <div id="bip44" class="tab-pane">
150 <form class="form-horizontal" role="form">
151 <br>
152 <div class="col-sm-2"></div>
153 <div class="col-sm-10">
154 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
155 </div>
156 <div class="form-group">
157 <label for="purpose" class="col-sm-2 control-label">
158 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
159 </label>
160 <div class="col-sm-10">
161 <input id="purpose" type="text" class="purpose form-control" value="44">
162 </div>
163 </div>
164 <div class="form-group">
165 <label for="coin" class="col-sm-2 control-label">
166 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
167 </label>
168 <div class="col-sm-10">
169 <input id="coin" type="text" class="coin form-control" value="0">
170 </div>
171 </div>
172 <div class="form-group">
173 <label for="account" class="col-sm-2 control-label">
174 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
175 </label>
176 <div class="col-sm-10">
177 <input id="account" type="text" class="account form-control" value="0">
178 </div>
179 </div>
180 <div class="form-group">
181 <label for="change" class="col-sm-2 control-label">
182 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
183 </label>
184 <div class="col-sm-10">
185 <input id="change" type="text" class="change form-control" value="0">
186 </div>
187 </div>
188 <div class="form-group">
189 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
190 <div class="col-sm-10">
191 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
192 </div>
193 </div>
194 </form>
195 </div>
196 <div id="bip32" class="tab-pane">
197 <form class="form-horizontal" role="form">
198 <br>
199 <div class="col-sm-2"></div>
200 <div class="col-sm-10">
201 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
202 </div>
203 <div class="form-group">
204 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
205 <div class="col-sm-10">
206 <input id="bip32-path" type="text" class="path form-control" value="m/0">
207 </div>
208 </div>
209 </form>
210 </div>
211 </div>
212 <form class="form-horizontal" role="form">
213 <div class="form-group">
214 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
215 <div class="col-sm-10">
216 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
217 </div>
218 </div>
219 <div class="form-group">
220 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
221 <div class="col-sm-10">
222 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
223 </div>
224 </div>
225 </form>
226 </div>
227 </div>
3af2954a 228
ab78acc6 229 <hr>
3af2954a 230
ab78acc6
IC
231 <div class="row">
232 <div class="col-md-12">
233 <h2>Derived Addresses</h2>
234 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
235 <table class="table table-striped">
236 <thead>
237 <th>
238 <div class="input-group">
239 Index&nbsp;&nbsp;
240 <button class="index-toggle">Toggle</button>
241 </div>
242 </th>
243 <th>
244 <div class="input-group">
245 Address&nbsp;&nbsp;
246 <button class="address-toggle">Toggle</button>
247 </div>
248 </th>
249 <th>
250 <div class="input-group">
251 Private Key&nbsp;&nbsp;
252 <button class="private-key-toggle">Toggle</button>
253 </div>
254 </th>
255 </thead>
256 <tbody class="addresses">
257 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
258 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
259 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
260 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
261 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
262 </tbody>
263 </table>
264 </div>
265 </div>
266 <span>Show next </button>
267 <input type="number" class="rows-to-add" value="20">
268 <button class="more">Show</button>
3af2954a 269
ab78acc6 270 <hr>
3af2954a 271
ab78acc6
IC
272 <div class="row">
273 <div class="col-md-12">
274 <h2>More info</h2>
275 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
276 <p>
277 Read more at the
278 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
279 </p>
280 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
281 <p>
282 Read more at the
283 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
284 and see the demo at
285 <a href="http://bip32.org/" target="_blank">bip32.org</a>
286 </p>
287 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
288 <p>
289 Read more at the
290 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
291 </p>
292 <h3>Private Keys</h3>
293 <p>
294 Use private keys at
295 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
296 but be careful - it can be easy to make mistakes if you
297 don't know what you're doing
298 </p>
299 </div>
300 </div>
3af2954a 301
ab78acc6 302 <hr>
3af2954a 303
ab78acc6
IC
304 <div class="row">
305 <div class="col-md-12">
3af2954a 306
ab78acc6 307 <h2>Offline Usage</h2>
3af2954a 308
ab78acc6
IC
309 <p>
310 You can use this tool without having to be online.
311 </p>
312 <p>
313 In your browser, select file save-as, and save this page
314 as a file.
315 </p>
316 <p>
317 Double-click that file to open it in a browser
318 on any offline computer.
319 </p>
320 <p>
321 Alternatively, download it from
322 <a href="https://github.com/dcpos/bip39">
323 https://github.com/dcpos/bip39
324 </a>
3af2954a 325
ab78acc6
IC
326 </div>
327 </div>
3af2954a 328
ab78acc6 329 <hr>
3af2954a 330
ab78acc6
IC
331 <div class="row">
332 <div class="col-md-12">
3af2954a 333
ab78acc6 334 <h2>This project is 100% open-source code</h2>
3af2954a 335
ab78acc6
IC
336 <p>
337 <span>Get the source code at - </span>
338 <a href="https://github.com/dcpos/bip39" target="_blank">
339 https://github.com/dcpos/bip39
340 </a>
341 </p>
3af2954a 342
ab78acc6 343 <h3>Libraries</h3>
3af2954a 344
ab78acc6
IC
345 <p>
346 <span>BitcoinJS - </span>
347 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
348 https://github.com/bitcoinjs/bitcoinjs-lib
349 </a>
350 </p>
3af2954a 351
ab78acc6
IC
352 <p>
353 <span>jsBIP39 - </span>
354 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
355 https://github.com/iancoleman/jsbip39
356 </a>
357 </p>
3af2954a 358
ab78acc6
IC
359 <p>
360 <span>sjcl - </span>
361 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
362 https://github.com/bitwiseshiftleft/sjcl
363 </a>
364 </p>
3af2954a 365
ab78acc6
IC
366 <p>
367 <span>jQuery - </span>
368 <a href="https://jquery.com/" target="_blank">
369 https://jquery.com/
370 </a>
371 </p>
3af2954a 372
ab78acc6
IC
373 <p>
374 <span>Twitter Bootstrap - </span>
375 <a href="http://getbootstrap.com/" target="_blank">
376 http://getbootstrap.com/
377 </a>
378 </p>
3af2954a 379
ab78acc6
IC
380 </div>
381 </div>
3af2954a 382
ab78acc6 383 </div>
3af2954a 384
ab78acc6
IC
385 <div class="feedback-container">
386 <div class="feedback">Loading...</div>
387 </div>
3af2954a 388
ab78acc6
IC
389 <script type="text/template" id="address-row-template">
390 <tr>
391 <td class="index"><span></span></td>
392 <td class="address"><span></span></td>
393 <td class="privkey"><span></span></td>
394 </tr>
395 </script>
396 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
397!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)
398},_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))
399},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});
400</script>
401 <script>/*!
402 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
403 * Copyright 2011-2014 Twitter, Inc.
404 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
405 */
406if("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>
407 <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){
408// (public) Constructor
409function BigInteger(a, b, c) {
410 if (!(this instanceof BigInteger))
411 return new BigInteger(a, b, c)
3af2954a 412
ab78acc6
IC
413 if (a != null) {
414 if ("number" == typeof a) this.fromNumber(a, b, c)
415 else if (b == null && "string" != typeof a) this.fromString(a, 256)
416 else this.fromString(a, b)
417 }
418}
3af2954a 419
ab78acc6 420var proto = BigInteger.prototype
3af2954a 421
ab78acc6
IC
422// duck-typed isBigInteger
423proto.__bigi = require('../package.json').version
424BigInteger.isBigInteger = function (obj, check_ver) {
425 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
426}
3af2954a 427
ab78acc6
IC
428// Bits per digit
429var dbits
3af2954a 430
ab78acc6
IC
431// am: Compute w_j += (x*this_i), propagate carries,
432// c is initial carry, returns final carry.
433// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
434// We need to select the fastest one that works in this environment.
3af2954a 435
ab78acc6
IC
436// am1: use a single mult and divide to get the high bits,
437// max digit bits should be 26 because
438// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
439function am1(i, x, w, j, c, n) {
440 while (--n >= 0) {
441 var v = x * this[i++] + w[j] + c
442 c = Math.floor(v / 0x4000000)
443 w[j++] = v & 0x3ffffff
3af2954a 444 }
ab78acc6
IC
445 return c
446}
447// am2 avoids a big mult-and-extract completely.
448// Max digit bits should be <= 30 because we do bitwise ops
449// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
450function am2(i, x, w, j, c, n) {
451 var xl = x & 0x7fff,
452 xh = x >> 15
453 while (--n >= 0) {
454 var l = this[i] & 0x7fff
455 var h = this[i++] >> 15
456 var m = xh * l + h * xl
457 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
458 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
459 w[j++] = l & 0x3fffffff
460 }
461 return c
462}
463// Alternately, set max digit bits to 28 since some
464// browsers slow down when dealing with 32-bit numbers.
465function am3(i, x, w, j, c, n) {
466 var xl = x & 0x3fff,
467 xh = x >> 14
468 while (--n >= 0) {
469 var l = this[i] & 0x3fff
470 var h = this[i++] >> 14
471 var m = xh * l + h * xl
472 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
473 c = (l >> 28) + (m >> 14) + xh * h
474 w[j++] = l & 0xfffffff
3af2954a 475 }
ab78acc6
IC
476 return c
477}
3af2954a 478
ab78acc6
IC
479// wtf?
480BigInteger.prototype.am = am1
481dbits = 26
3af2954a 482
ab78acc6
IC
483BigInteger.prototype.DB = dbits
484BigInteger.prototype.DM = ((1 << dbits) - 1)
485var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 486
ab78acc6
IC
487var BI_FP = 52
488BigInteger.prototype.FV = Math.pow(2, BI_FP)
489BigInteger.prototype.F1 = BI_FP - dbits
490BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 491
ab78acc6
IC
492// Digit conversions
493var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
494var BI_RC = new Array()
495var rr, vv
496rr = "0".charCodeAt(0)
497for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
498rr = "a".charCodeAt(0)
499for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
500rr = "A".charCodeAt(0)
501for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 502
ab78acc6
IC
503function int2char(n) {
504 return BI_RM.charAt(n)
505}
3af2954a 506
ab78acc6
IC
507function intAt(s, i) {
508 var c = BI_RC[s.charCodeAt(i)]
509 return (c == null) ? -1 : c
510}
3af2954a 511
ab78acc6
IC
512// (protected) copy this to r
513function bnpCopyTo(r) {
514 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
515 r.t = this.t
516 r.s = this.s
517}
3af2954a 518
ab78acc6
IC
519// (protected) set from integer value x, -DV <= x < DV
520function bnpFromInt(x) {
521 this.t = 1
522 this.s = (x < 0) ? -1 : 0
523 if (x > 0) this[0] = x
524 else if (x < -1) this[0] = x + DV
525 else this.t = 0
526}
3af2954a 527
ab78acc6
IC
528// return bigint initialized to value
529function nbv(i) {
530 var r = new BigInteger()
531 r.fromInt(i)
532 return r
533}
3af2954a 534
ab78acc6
IC
535// (protected) set from string and radix
536function bnpFromString(s, b) {
537 var self = this
3af2954a 538
ab78acc6
IC
539 var k
540 if (b == 16) k = 4
541 else if (b == 8) k = 3
542 else if (b == 256) k = 8; // byte array
543 else if (b == 2) k = 1
544 else if (b == 32) k = 5
545 else if (b == 4) k = 2
546 else {
547 self.fromRadix(s, b)
548 return
549 }
550 self.t = 0
551 self.s = 0
552 var i = s.length,
553 mi = false,
554 sh = 0
555 while (--i >= 0) {
556 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
557 if (x < 0) {
558 if (s.charAt(i) == "-") mi = true
559 continue
560 }
561 mi = false
562 if (sh == 0)
563 self[self.t++] = x
564 else if (sh + k > self.DB) {
565 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
566 self[self.t++] = (x >> (self.DB - sh))
567 } else
568 self[self.t - 1] |= x << sh
569 sh += k
570 if (sh >= self.DB) sh -= self.DB
571 }
572 if (k == 8 && (s[0] & 0x80) != 0) {
573 self.s = -1
574 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
575 }
576 self.clamp()
577 if (mi) BigInteger.ZERO.subTo(self, self)
578}
3af2954a 579
ab78acc6
IC
580// (protected) clamp off excess high words
581function bnpClamp() {
582 var c = this.s & this.DM
583 while (this.t > 0 && this[this.t - 1] == c)--this.t
584}
3af2954a 585
ab78acc6
IC
586// (public) return string representation in given radix
587function bnToString(b) {
588 var self = this
589 if (self.s < 0) return "-" + self.negate()
590 .toString(b)
591 var k
592 if (b == 16) k = 4
593 else if (b == 8) k = 3
594 else if (b == 2) k = 1
595 else if (b == 32) k = 5
596 else if (b == 4) k = 2
597 else return self.toRadix(b)
598 var km = (1 << k) - 1,
599 d, m = false,
600 r = "",
601 i = self.t
602 var p = self.DB - (i * self.DB) % k
603 if (i-- > 0) {
604 if (p < self.DB && (d = self[i] >> p) > 0) {
605 m = true
606 r = int2char(d)
607 }
608 while (i >= 0) {
609 if (p < k) {
610 d = (self[i] & ((1 << p) - 1)) << (k - p)
611 d |= self[--i] >> (p += self.DB - k)
612 } else {
613 d = (self[i] >> (p -= k)) & km
614 if (p <= 0) {
615 p += self.DB
616 --i
617 }
618 }
619 if (d > 0) m = true
620 if (m) r += int2char(d)
3af2954a 621 }
3af2954a 622 }
ab78acc6
IC
623 return m ? r : "0"
624}
3af2954a 625
ab78acc6
IC
626// (public) -this
627function bnNegate() {
628 var r = new BigInteger()
629 BigInteger.ZERO.subTo(this, r)
630 return r
631}
3af2954a 632
ab78acc6
IC
633// (public) |this|
634function bnAbs() {
635 return (this.s < 0) ? this.negate() : this
636}
3af2954a 637
ab78acc6
IC
638// (public) return + if this > a, - if this < a, 0 if equal
639function bnCompareTo(a) {
640 var r = this.s - a.s
641 if (r != 0) return r
642 var i = this.t
643 r = i - a.t
644 if (r != 0) return (this.s < 0) ? -r : r
645 while (--i >= 0)
646 if ((r = this[i] - a[i]) != 0) return r
647 return 0
648}
3af2954a 649
ab78acc6
IC
650// returns bit length of the integer x
651function nbits(x) {
652 var r = 1,
653 t
654 if ((t = x >>> 16) != 0) {
655 x = t
656 r += 16
657 }
658 if ((t = x >> 8) != 0) {
659 x = t
660 r += 8
661 }
662 if ((t = x >> 4) != 0) {
663 x = t
664 r += 4
665 }
666 if ((t = x >> 2) != 0) {
667 x = t
668 r += 2
3af2954a 669 }
ab78acc6
IC
670 if ((t = x >> 1) != 0) {
671 x = t
672 r += 1
673 }
674 return r
675}
676
677// (public) return the number of bits in "this"
678function bnBitLength() {
679 if (this.t <= 0) return 0
680 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
681}
3af2954a 682
ab78acc6
IC
683// (public) return the number of bytes in "this"
684function bnByteLength() {
685 return this.bitLength() >> 3
686}
3af2954a 687
ab78acc6
IC
688// (protected) r = this << n*DB
689function bnpDLShiftTo(n, r) {
690 var i
691 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
692 for (i = n - 1; i >= 0; --i) r[i] = 0
693 r.t = this.t + n
694 r.s = this.s
695}
3af2954a 696
ab78acc6
IC
697// (protected) r = this >> n*DB
698function bnpDRShiftTo(n, r) {
699 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
700 r.t = Math.max(this.t - n, 0)
701 r.s = this.s
702}
3af2954a 703
ab78acc6
IC
704// (protected) r = this << n
705function bnpLShiftTo(n, r) {
706 var self = this
707 var bs = n % self.DB
708 var cbs = self.DB - bs
709 var bm = (1 << cbs) - 1
710 var ds = Math.floor(n / self.DB),
711 c = (self.s << bs) & self.DM,
712 i
713 for (i = self.t - 1; i >= 0; --i) {
714 r[i + ds + 1] = (self[i] >> cbs) | c
715 c = (self[i] & bm) << bs
716 }
717 for (i = ds - 1; i >= 0; --i) r[i] = 0
718 r[ds] = c
719 r.t = self.t + ds + 1
720 r.s = self.s
721 r.clamp()
722}
3af2954a 723
ab78acc6
IC
724// (protected) r = this >> n
725function bnpRShiftTo(n, r) {
726 var self = this
727 r.s = self.s
728 var ds = Math.floor(n / self.DB)
729 if (ds >= self.t) {
730 r.t = 0
731 return
3af2954a 732 }
ab78acc6
IC
733 var bs = n % self.DB
734 var cbs = self.DB - bs
735 var bm = (1 << bs) - 1
736 r[0] = self[ds] >> bs
737 for (var i = ds + 1; i < self.t; ++i) {
738 r[i - ds - 1] |= (self[i] & bm) << cbs
739 r[i - ds] = self[i] >> bs
740 }
741 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
742 r.t = self.t - ds
743 r.clamp()
744}
3af2954a 745
ab78acc6
IC
746// (protected) r = this - a
747function bnpSubTo(a, r) {
748 var self = this
749 var i = 0,
750 c = 0,
751 m = Math.min(a.t, self.t)
752 while (i < m) {
753 c += self[i] - a[i]
754 r[i++] = c & self.DM
755 c >>= self.DB
756 }
757 if (a.t < self.t) {
758 c -= a.s
759 while (i < self.t) {
760 c += self[i]
761 r[i++] = c & self.DM
762 c >>= self.DB
763 }
764 c += self.s
765 } else {
766 c += self.s
767 while (i < a.t) {
768 c -= a[i]
769 r[i++] = c & self.DM
770 c >>= self.DB
771 }
772 c -= a.s
773 }
774 r.s = (c < 0) ? -1 : 0
775 if (c < -1) r[i++] = self.DV + c
776 else if (c > 0) r[i++] = c
777 r.t = i
778 r.clamp()
779}
3af2954a 780
ab78acc6
IC
781// (protected) r = this * a, r != this,a (HAC 14.12)
782// "this" should be the larger one if appropriate.
783function bnpMultiplyTo(a, r) {
784 var x = this.abs(),
785 y = a.abs()
786 var i = x.t
787 r.t = i + y.t
788 while (--i >= 0) r[i] = 0
789 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
790 r.s = 0
791 r.clamp()
792 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
793}
3af2954a 794
ab78acc6
IC
795// (protected) r = this^2, r != this (HAC 14.16)
796function bnpSquareTo(r) {
797 var x = this.abs()
798 var i = r.t = 2 * x.t
799 while (--i >= 0) r[i] = 0
800 for (i = 0; i < x.t - 1; ++i) {
801 var c = x.am(i, x[i], r, 2 * i, 0, 1)
802 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
803 r[i + x.t] -= x.DV
804 r[i + x.t + 1] = 1
805 }
806 }
807 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
808 r.s = 0
809 r.clamp()
810}
3af2954a 811
ab78acc6
IC
812// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
813// r != q, this != m. q or r may be null.
814function bnpDivRemTo(m, q, r) {
815 var self = this
816 var pm = m.abs()
817 if (pm.t <= 0) return
818 var pt = self.abs()
819 if (pt.t < pm.t) {
820 if (q != null) q.fromInt(0)
821 if (r != null) self.copyTo(r)
822 return
823 }
824 if (r == null) r = new BigInteger()
825 var y = new BigInteger(),
826 ts = self.s,
827 ms = m.s
828 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
829 if (nsh > 0) {
830 pm.lShiftTo(nsh, y)
831 pt.lShiftTo(nsh, r)
832 } else {
833 pm.copyTo(y)
834 pt.copyTo(r)
835 }
836 var ys = y.t
837 var y0 = y[ys - 1]
838 if (y0 == 0) return
839 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
840 var d1 = self.FV / yt,
841 d2 = (1 << self.F1) / yt,
842 e = 1 << self.F2
843 var i = r.t,
844 j = i - ys,
845 t = (q == null) ? new BigInteger() : q
846 y.dlShiftTo(j, t)
847 if (r.compareTo(t) >= 0) {
848 r[r.t++] = 1
849 r.subTo(t, r)
850 }
851 BigInteger.ONE.dlShiftTo(ys, t)
852 t.subTo(y, y); // "negative" y so we can replace sub with am later
853 while (y.t < ys) y[y.t++] = 0
854 while (--j >= 0) {
855 // Estimate quotient digit
856 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
857 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
858 y.dlShiftTo(j, t)
859 r.subTo(t, r)
860 while (r[i] < --qd) r.subTo(t, r)
3af2954a 861 }
ab78acc6
IC
862 }
863 if (q != null) {
864 r.drShiftTo(ys, q)
865 if (ts != ms) BigInteger.ZERO.subTo(q, q)
866 }
867 r.t = ys
868 r.clamp()
869 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
870 if (ts < 0) BigInteger.ZERO.subTo(r, r)
871}
3af2954a 872
ab78acc6
IC
873// (public) this mod a
874function bnMod(a) {
875 var r = new BigInteger()
876 this.abs()
877 .divRemTo(a, null, r)
878 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
879 return r
880}
3af2954a 881
ab78acc6
IC
882// Modular reduction using "classic" algorithm
883function Classic(m) {
884 this.m = m
885}
3af2954a 886
ab78acc6
IC
887function cConvert(x) {
888 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
889 else return x
890}
891
892function cRevert(x) {
893 return x
894}
3af2954a 895
ab78acc6
IC
896function cReduce(x) {
897 x.divRemTo(this.m, null, x)
898}
3af2954a 899
ab78acc6
IC
900function cMulTo(x, y, r) {
901 x.multiplyTo(y, r)
902 this.reduce(r)
903}
3af2954a 904
ab78acc6
IC
905function cSqrTo(x, r) {
906 x.squareTo(r)
907 this.reduce(r)
908}
3af2954a 909
ab78acc6
IC
910Classic.prototype.convert = cConvert
911Classic.prototype.revert = cRevert
912Classic.prototype.reduce = cReduce
913Classic.prototype.mulTo = cMulTo
914Classic.prototype.sqrTo = cSqrTo
3af2954a 915
ab78acc6
IC
916// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
917// justification:
918// xy == 1 (mod m)
919// xy = 1+km
920// xy(2-xy) = (1+km)(1-km)
921// x[y(2-xy)] = 1-k^2m^2
922// x[y(2-xy)] == 1 (mod m^2)
923// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
924// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
925// JS multiply "overflows" differently from C/C++, so care is needed here.
926function bnpInvDigit() {
927 if (this.t < 1) return 0
928 var x = this[0]
929 if ((x & 1) == 0) return 0
930 var y = x & 3; // y == 1/x mod 2^2
931 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
932 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
933 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
934 // last step - calculate inverse mod DV directly
935 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
936 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
937 // we really want the negative inverse, and -DV < y < DV
938 return (y > 0) ? this.DV - y : -y
939}
3af2954a 940
ab78acc6
IC
941// Montgomery reduction
942function Montgomery(m) {
943 this.m = m
944 this.mp = m.invDigit()
945 this.mpl = this.mp & 0x7fff
946 this.mph = this.mp >> 15
947 this.um = (1 << (m.DB - 15)) - 1
948 this.mt2 = 2 * m.t
949}
3af2954a 950
ab78acc6
IC
951// xR mod m
952function montConvert(x) {
953 var r = new BigInteger()
954 x.abs()
955 .dlShiftTo(this.m.t, r)
956 r.divRemTo(this.m, null, r)
957 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
958 return r
959}
3af2954a 960
ab78acc6
IC
961// x/R mod m
962function montRevert(x) {
963 var r = new BigInteger()
964 x.copyTo(r)
965 this.reduce(r)
966 return r
967}
3af2954a 968
ab78acc6
IC
969// x = x/R mod m (HAC 14.32)
970function montReduce(x) {
971 while (x.t <= this.mt2) // pad x so am has enough room later
972 x[x.t++] = 0
973 for (var i = 0; i < this.m.t; ++i) {
974 // faster way of calculating u0 = x[i]*mp mod DV
975 var j = x[i] & 0x7fff
976 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
977 // use am to combine the multiply-shift-add into one call
978 j = i + this.m.t
979 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
980 // propagate carry
981 while (x[j] >= x.DV) {
982 x[j] -= x.DV
983 x[++j]++
984 }
985 }
986 x.clamp()
987 x.drShiftTo(this.m.t, x)
988 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
989}
3af2954a 990
ab78acc6
IC
991// r = "x^2/R mod m"; x != r
992function montSqrTo(x, r) {
993 x.squareTo(r)
994 this.reduce(r)
995}
3af2954a 996
ab78acc6
IC
997// r = "xy/R mod m"; x,y != r
998function montMulTo(x, y, r) {
999 x.multiplyTo(y, r)
1000 this.reduce(r)
1001}
3af2954a 1002
ab78acc6
IC
1003Montgomery.prototype.convert = montConvert
1004Montgomery.prototype.revert = montRevert
1005Montgomery.prototype.reduce = montReduce
1006Montgomery.prototype.mulTo = montMulTo
1007Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1008
ab78acc6
IC
1009// (protected) true iff this is even
1010function bnpIsEven() {
1011 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1012}
3af2954a 1013
ab78acc6
IC
1014// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1015function bnpExp(e, z) {
1016 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1017 var r = new BigInteger(),
1018 r2 = new BigInteger(),
1019 g = z.convert(this),
1020 i = nbits(e) - 1
1021 g.copyTo(r)
1022 while (--i >= 0) {
1023 z.sqrTo(r, r2)
1024 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1025 else {
1026 var t = r
1027 r = r2
1028 r2 = t
3af2954a 1029 }
3af2954a 1030 }
ab78acc6
IC
1031 return z.revert(r)
1032}
3af2954a 1033
ab78acc6
IC
1034// (public) this^e % m, 0 <= e < 2^32
1035function bnModPowInt(e, m) {
1036 var z
1037 if (e < 256 || m.isEven()) z = new Classic(m)
1038 else z = new Montgomery(m)
1039 return this.exp(e, z)
1040}
3af2954a 1041
ab78acc6
IC
1042// protected
1043proto.copyTo = bnpCopyTo
1044proto.fromInt = bnpFromInt
1045proto.fromString = bnpFromString
1046proto.clamp = bnpClamp
1047proto.dlShiftTo = bnpDLShiftTo
1048proto.drShiftTo = bnpDRShiftTo
1049proto.lShiftTo = bnpLShiftTo
1050proto.rShiftTo = bnpRShiftTo
1051proto.subTo = bnpSubTo
1052proto.multiplyTo = bnpMultiplyTo
1053proto.squareTo = bnpSquareTo
1054proto.divRemTo = bnpDivRemTo
1055proto.invDigit = bnpInvDigit
1056proto.isEven = bnpIsEven
1057proto.exp = bnpExp
3af2954a 1058
ab78acc6
IC
1059// public
1060proto.toString = bnToString
1061proto.negate = bnNegate
1062proto.abs = bnAbs
1063proto.compareTo = bnCompareTo
1064proto.bitLength = bnBitLength
1065proto.byteLength = bnByteLength
1066proto.mod = bnMod
1067proto.modPowInt = bnModPowInt
3af2954a 1068
ab78acc6
IC
1069// (public)
1070function bnClone() {
1071 var r = new BigInteger()
1072 this.copyTo(r)
1073 return r
1074}
3af2954a 1075
ab78acc6
IC
1076// (public) return value as integer
1077function bnIntValue() {
1078 if (this.s < 0) {
1079 if (this.t == 1) return this[0] - this.DV
1080 else if (this.t == 0) return -1
1081 } else if (this.t == 1) return this[0]
1082 else if (this.t == 0) return 0
1083 // assumes 16 < DB < 32
1084 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1085}
3af2954a 1086
ab78acc6
IC
1087// (public) return value as byte
1088function bnByteValue() {
1089 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1090}
3af2954a 1091
ab78acc6
IC
1092// (public) return value as short (assumes DB>=16)
1093function bnShortValue() {
1094 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1095}
3af2954a 1096
ab78acc6
IC
1097// (protected) return x s.t. r^x < DV
1098function bnpChunkSize(r) {
1099 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1100}
3af2954a 1101
ab78acc6
IC
1102// (public) 0 if this == 0, 1 if this > 0
1103function bnSigNum() {
1104 if (this.s < 0) return -1
1105 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1106 else return 1
1107}
3af2954a 1108
ab78acc6
IC
1109// (protected) convert to radix string
1110function bnpToRadix(b) {
1111 if (b == null) b = 10
1112 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1113 var cs = this.chunkSize(b)
1114 var a = Math.pow(b, cs)
1115 var d = nbv(a),
1116 y = new BigInteger(),
1117 z = new BigInteger(),
1118 r = ""
1119 this.divRemTo(d, y, z)
1120 while (y.signum() > 0) {
1121 r = (a + z.intValue())
1122 .toString(b)
1123 .substr(1) + r
1124 y.divRemTo(d, y, z)
1125 }
1126 return z.intValue()
1127 .toString(b) + r
1128}
3af2954a 1129
ab78acc6
IC
1130// (protected) convert from radix string
1131function bnpFromRadix(s, b) {
1132 var self = this
1133 self.fromInt(0)
1134 if (b == null) b = 10
1135 var cs = self.chunkSize(b)
1136 var d = Math.pow(b, cs),
1137 mi = false,
1138 j = 0,
1139 w = 0
1140 for (var i = 0; i < s.length; ++i) {
1141 var x = intAt(s, i)
1142 if (x < 0) {
1143 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1144 continue
1145 }
1146 w = b * w + x
1147 if (++j >= cs) {
1148 self.dMultiply(d)
1149 self.dAddOffset(w, 0)
1150 j = 0
1151 w = 0
1152 }
1153 }
1154 if (j > 0) {
1155 self.dMultiply(Math.pow(b, j))
1156 self.dAddOffset(w, 0)
1157 }
1158 if (mi) BigInteger.ZERO.subTo(self, self)
1159}
3af2954a 1160
ab78acc6
IC
1161// (protected) alternate constructor
1162function bnpFromNumber(a, b, c) {
1163 var self = this
1164 if ("number" == typeof b) {
1165 // new BigInteger(int,int,RNG)
1166 if (a < 2) self.fromInt(1)
1167 else {
1168 self.fromNumber(a, c)
1169 if (!self.testBit(a - 1)) // force MSB set
1170 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1171 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1172 while (!self.isProbablePrime(b)) {
1173 self.dAddOffset(2, 0)
1174 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1175 }
1176 }
1177 } else {
1178 // new BigInteger(int,RNG)
1179 var x = new Array(),
1180 t = a & 7
1181 x.length = (a >> 3) + 1
1182 b.nextBytes(x)
1183 if (t > 0) x[0] &= ((1 << t) - 1)
1184 else x[0] = 0
1185 self.fromString(x, 256)
3af2954a 1186 }
ab78acc6 1187}
3af2954a 1188
ab78acc6
IC
1189// (public) convert to bigendian byte array
1190function bnToByteArray() {
1191 var self = this
1192 var i = self.t,
1193 r = new Array()
1194 r[0] = self.s
1195 var p = self.DB - (i * self.DB) % 8,
1196 d, k = 0
1197 if (i-- > 0) {
1198 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1199 r[k++] = d | (self.s << (self.DB - p))
1200 while (i >= 0) {
1201 if (p < 8) {
1202 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1203 d |= self[--i] >> (p += self.DB - 8)
1204 } else {
1205 d = (self[i] >> (p -= 8)) & 0xff
1206 if (p <= 0) {
1207 p += self.DB
1208 --i
1209 }
1210 }
1211 if ((d & 0x80) != 0) d |= -256
1212 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1213 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1214 }
3af2954a 1215 }
ab78acc6
IC
1216 return r
1217}
3af2954a 1218
ab78acc6
IC
1219function bnEquals(a) {
1220 return (this.compareTo(a) == 0)
1221}
3af2954a 1222
ab78acc6
IC
1223function bnMin(a) {
1224 return (this.compareTo(a) < 0) ? this : a
1225}
3af2954a 1226
ab78acc6
IC
1227function bnMax(a) {
1228 return (this.compareTo(a) > 0) ? this : a
1229}
3af2954a 1230
ab78acc6
IC
1231// (protected) r = this op a (bitwise)
1232function bnpBitwiseTo(a, op, r) {
1233 var self = this
1234 var i, f, m = Math.min(a.t, self.t)
1235 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1236 if (a.t < self.t) {
1237 f = a.s & self.DM
1238 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1239 r.t = self.t
1240 } else {
1241 f = self.s & self.DM
1242 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1243 r.t = a.t
3af2954a 1244 }
ab78acc6
IC
1245 r.s = op(self.s, a.s)
1246 r.clamp()
1247}
3af2954a 1248
ab78acc6
IC
1249// (public) this & a
1250function op_and(x, y) {
1251 return x & y
1252}
3af2954a 1253
ab78acc6
IC
1254function bnAnd(a) {
1255 var r = new BigInteger()
1256 this.bitwiseTo(a, op_and, r)
1257 return r
1258}
3af2954a 1259
ab78acc6
IC
1260// (public) this | a
1261function op_or(x, y) {
1262 return x | y
1263}
3af2954a 1264
ab78acc6
IC
1265function bnOr(a) {
1266 var r = new BigInteger()
1267 this.bitwiseTo(a, op_or, r)
1268 return r
1269}
3af2954a 1270
ab78acc6
IC
1271// (public) this ^ a
1272function op_xor(x, y) {
1273 return x ^ y
1274}
3af2954a 1275
ab78acc6
IC
1276function bnXor(a) {
1277 var r = new BigInteger()
1278 this.bitwiseTo(a, op_xor, r)
1279 return r
1280}
3af2954a 1281
ab78acc6
IC
1282// (public) this & ~a
1283function op_andnot(x, y) {
1284 return x & ~y
1285}
3af2954a 1286
ab78acc6
IC
1287function bnAndNot(a) {
1288 var r = new BigInteger()
1289 this.bitwiseTo(a, op_andnot, r)
1290 return r
1291}
3af2954a 1292
ab78acc6
IC
1293// (public) ~this
1294function bnNot() {
1295 var r = new BigInteger()
1296 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1297 r.t = this.t
1298 r.s = ~this.s
1299 return r
1300}
3af2954a 1301
ab78acc6
IC
1302// (public) this << n
1303function bnShiftLeft(n) {
1304 var r = new BigInteger()
1305 if (n < 0) this.rShiftTo(-n, r)
1306 else this.lShiftTo(n, r)
1307 return r
1308}
3af2954a 1309
ab78acc6
IC
1310// (public) this >> n
1311function bnShiftRight(n) {
1312 var r = new BigInteger()
1313 if (n < 0) this.lShiftTo(-n, r)
1314 else this.rShiftTo(n, r)
1315 return r
1316}
3af2954a 1317
ab78acc6
IC
1318// return index of lowest 1-bit in x, x < 2^31
1319function lbit(x) {
1320 if (x == 0) return -1
1321 var r = 0
1322 if ((x & 0xffff) == 0) {
1323 x >>= 16
1324 r += 16
3af2954a 1325 }
ab78acc6
IC
1326 if ((x & 0xff) == 0) {
1327 x >>= 8
1328 r += 8
1329 }
1330 if ((x & 0xf) == 0) {
1331 x >>= 4
1332 r += 4
1333 }
1334 if ((x & 3) == 0) {
1335 x >>= 2
1336 r += 2
1337 }
1338 if ((x & 1) == 0)++r
1339 return r
1340}
3af2954a 1341
ab78acc6
IC
1342// (public) returns index of lowest 1-bit (or -1 if none)
1343function bnGetLowestSetBit() {
1344 for (var i = 0; i < this.t; ++i)
1345 if (this[i] != 0) return i * this.DB + lbit(this[i])
1346 if (this.s < 0) return this.t * this.DB
1347 return -1
1348}
3af2954a 1349
ab78acc6
IC
1350// return number of 1 bits in x
1351function cbit(x) {
1352 var r = 0
1353 while (x != 0) {
1354 x &= x - 1
1355 ++r
3af2954a 1356 }
ab78acc6
IC
1357 return r
1358}
3af2954a 1359
ab78acc6
IC
1360// (public) return number of set bits
1361function bnBitCount() {
1362 var r = 0,
1363 x = this.s & this.DM
1364 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1365 return r
1366}
1367
1368// (public) true iff nth bit is set
1369function bnTestBit(n) {
1370 var j = Math.floor(n / this.DB)
1371 if (j >= this.t) return (this.s != 0)
1372 return ((this[j] & (1 << (n % this.DB))) != 0)
1373}
3af2954a 1374
ab78acc6
IC
1375// (protected) this op (1<<n)
1376function bnpChangeBit(n, op) {
1377 var r = BigInteger.ONE.shiftLeft(n)
1378 this.bitwiseTo(r, op, r)
1379 return r
1380}
3af2954a 1381
ab78acc6
IC
1382// (public) this | (1<<n)
1383function bnSetBit(n) {
1384 return this.changeBit(n, op_or)
1385}
3af2954a 1386
ab78acc6
IC
1387// (public) this & ~(1<<n)
1388function bnClearBit(n) {
1389 return this.changeBit(n, op_andnot)
1390}
3af2954a 1391
ab78acc6
IC
1392// (public) this ^ (1<<n)
1393function bnFlipBit(n) {
1394 return this.changeBit(n, op_xor)
1395}
3af2954a 1396
ab78acc6
IC
1397// (protected) r = this + a
1398function bnpAddTo(a, r) {
1399 var self = this
3af2954a 1400
ab78acc6
IC
1401 var i = 0,
1402 c = 0,
1403 m = Math.min(a.t, self.t)
1404 while (i < m) {
1405 c += self[i] + a[i]
1406 r[i++] = c & self.DM
1407 c >>= self.DB
1408 }
1409 if (a.t < self.t) {
1410 c += a.s
1411 while (i < self.t) {
1412 c += self[i]
1413 r[i++] = c & self.DM
1414 c >>= self.DB
1415 }
1416 c += self.s
1417 } else {
1418 c += self.s
1419 while (i < a.t) {
1420 c += a[i]
1421 r[i++] = c & self.DM
1422 c >>= self.DB
1423 }
1424 c += a.s
1425 }
1426 r.s = (c < 0) ? -1 : 0
1427 if (c > 0) r[i++] = c
1428 else if (c < -1) r[i++] = self.DV + c
1429 r.t = i
1430 r.clamp()
1431}
3af2954a 1432
ab78acc6
IC
1433// (public) this + a
1434function bnAdd(a) {
1435 var r = new BigInteger()
1436 this.addTo(a, r)
1437 return r
1438}
3af2954a 1439
ab78acc6
IC
1440// (public) this - a
1441function bnSubtract(a) {
1442 var r = new BigInteger()
1443 this.subTo(a, r)
1444 return r
1445}
3af2954a 1446
ab78acc6
IC
1447// (public) this * a
1448function bnMultiply(a) {
1449 var r = new BigInteger()
1450 this.multiplyTo(a, r)
1451 return r
1452}
3af2954a 1453
ab78acc6
IC
1454// (public) this^2
1455function bnSquare() {
1456 var r = new BigInteger()
1457 this.squareTo(r)
1458 return r
1459}
3af2954a 1460
ab78acc6
IC
1461// (public) this / a
1462function bnDivide(a) {
1463 var r = new BigInteger()
1464 this.divRemTo(a, r, null)
1465 return r
1466}
3af2954a 1467
ab78acc6
IC
1468// (public) this % a
1469function bnRemainder(a) {
1470 var r = new BigInteger()
1471 this.divRemTo(a, null, r)
1472 return r
1473}
3af2954a 1474
ab78acc6
IC
1475// (public) [this/a,this%a]
1476function bnDivideAndRemainder(a) {
1477 var q = new BigInteger(),
1478 r = new BigInteger()
1479 this.divRemTo(a, q, r)
1480 return new Array(q, r)
1481}
3af2954a 1482
ab78acc6
IC
1483// (protected) this *= n, this >= 0, 1 < n < DV
1484function bnpDMultiply(n) {
1485 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1486 ++this.t
1487 this.clamp()
1488}
3af2954a 1489
ab78acc6
IC
1490// (protected) this += n << w words, this >= 0
1491function bnpDAddOffset(n, w) {
1492 if (n == 0) return
1493 while (this.t <= w) this[this.t++] = 0
1494 this[w] += n
1495 while (this[w] >= this.DV) {
1496 this[w] -= this.DV
1497 if (++w >= this.t) this[this.t++] = 0
1498 ++this[w]
3af2954a 1499 }
ab78acc6 1500}
3af2954a 1501
ab78acc6
IC
1502// A "null" reducer
1503function NullExp() {}
3af2954a 1504
ab78acc6
IC
1505function nNop(x) {
1506 return x
1507}
3af2954a 1508
ab78acc6
IC
1509function nMulTo(x, y, r) {
1510 x.multiplyTo(y, r)
1511}
3af2954a 1512
ab78acc6
IC
1513function nSqrTo(x, r) {
1514 x.squareTo(r)
1515}
3af2954a 1516
ab78acc6
IC
1517NullExp.prototype.convert = nNop
1518NullExp.prototype.revert = nNop
1519NullExp.prototype.mulTo = nMulTo
1520NullExp.prototype.sqrTo = nSqrTo
3af2954a 1521
ab78acc6
IC
1522// (public) this^e
1523function bnPow(e) {
1524 return this.exp(e, new NullExp())
1525}
3af2954a 1526
ab78acc6
IC
1527// (protected) r = lower n words of "this * a", a.t <= n
1528// "this" should be the larger one if appropriate.
1529function bnpMultiplyLowerTo(a, n, r) {
1530 var i = Math.min(this.t + a.t, n)
1531 r.s = 0; // assumes a,this >= 0
1532 r.t = i
1533 while (i > 0) r[--i] = 0
1534 var j
1535 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1536 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1537 r.clamp()
1538}
3af2954a 1539
ab78acc6
IC
1540// (protected) r = "this * a" without lower n words, n > 0
1541// "this" should be the larger one if appropriate.
1542function bnpMultiplyUpperTo(a, n, r) {
1543 --n
1544 var i = r.t = this.t + a.t - n
1545 r.s = 0; // assumes a,this >= 0
1546 while (--i >= 0) r[i] = 0
1547 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1548 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1549 r.clamp()
1550 r.drShiftTo(1, r)
1551}
3af2954a 1552
ab78acc6
IC
1553// Barrett modular reduction
1554function Barrett(m) {
1555 // setup Barrett
1556 this.r2 = new BigInteger()
1557 this.q3 = new BigInteger()
1558 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1559 this.mu = this.r2.divide(m)
1560 this.m = m
1561}
3af2954a 1562
ab78acc6
IC
1563function barrettConvert(x) {
1564 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1565 else if (x.compareTo(this.m) < 0) return x
1566 else {
1567 var r = new BigInteger()
1568 x.copyTo(r)
1569 this.reduce(r)
1570 return r
3af2954a 1571 }
ab78acc6 1572}
3af2954a 1573
ab78acc6
IC
1574function barrettRevert(x) {
1575 return x
1576}
3af2954a 1577
ab78acc6
IC
1578// x = x mod m (HAC 14.42)
1579function barrettReduce(x) {
1580 var self = this
1581 x.drShiftTo(self.m.t - 1, self.r2)
1582 if (x.t > self.m.t + 1) {
1583 x.t = self.m.t + 1
1584 x.clamp()
3af2954a 1585 }
ab78acc6
IC
1586 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1587 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1588 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1589 x.subTo(self.r2, x)
1590 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1591}
3af2954a 1592
ab78acc6
IC
1593// r = x^2 mod m; x != r
1594function barrettSqrTo(x, r) {
1595 x.squareTo(r)
1596 this.reduce(r)
1597}
3af2954a 1598
ab78acc6
IC
1599// r = x*y mod m; x,y != r
1600function barrettMulTo(x, y, r) {
1601 x.multiplyTo(y, r)
1602 this.reduce(r)
1603}
3af2954a 1604
ab78acc6
IC
1605Barrett.prototype.convert = barrettConvert
1606Barrett.prototype.revert = barrettRevert
1607Barrett.prototype.reduce = barrettReduce
1608Barrett.prototype.mulTo = barrettMulTo
1609Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1610
ab78acc6
IC
1611// (public) this^e % m (HAC 14.85)
1612function bnModPow(e, m) {
1613 var i = e.bitLength(),
1614 k, r = nbv(1),
1615 z
1616 if (i <= 0) return r
1617 else if (i < 18) k = 1
1618 else if (i < 48) k = 3
1619 else if (i < 144) k = 4
1620 else if (i < 768) k = 5
1621 else k = 6
1622 if (i < 8)
1623 z = new Classic(m)
1624 else if (m.isEven())
1625 z = new Barrett(m)
1626 else
1627 z = new Montgomery(m)
3af2954a 1628
ab78acc6
IC
1629 // precomputation
1630 var g = new Array(),
1631 n = 3,
1632 k1 = k - 1,
1633 km = (1 << k) - 1
1634 g[1] = z.convert(this)
1635 if (k > 1) {
1636 var g2 = new BigInteger()
1637 z.sqrTo(g[1], g2)
1638 while (n <= km) {
1639 g[n] = new BigInteger()
1640 z.mulTo(g2, g[n - 2], g[n])
1641 n += 2
1642 }
1643 }
1644
1645 var j = e.t - 1,
1646 w, is1 = true,
1647 r2 = new BigInteger(),
1648 t
1649 i = nbits(e[j]) - 1
1650 while (j >= 0) {
1651 if (i >= k1) w = (e[j] >> (i - k1)) & km
1652 else {
1653 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1654 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1655 }
3af2954a 1656
ab78acc6
IC
1657 n = k
1658 while ((w & 1) == 0) {
1659 w >>= 1
1660 --n
1661 }
1662 if ((i -= n) < 0) {
1663 i += this.DB
1664 --j
1665 }
1666 if (is1) { // ret == 1, don't bother squaring or multiplying it
1667 g[w].copyTo(r)
1668 is1 = false
1669 } else {
1670 while (n > 1) {
1671 z.sqrTo(r, r2)
1672 z.sqrTo(r2, r)
1673 n -= 2
1674 }
1675 if (n > 0) z.sqrTo(r, r2)
1676 else {
1677 t = r
1678 r = r2
1679 r2 = t
1680 }
1681 z.mulTo(r2, g[w], r)
1682 }
3af2954a 1683
ab78acc6
IC
1684 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1685 z.sqrTo(r, r2)
1686 t = r
1687 r = r2
1688 r2 = t
1689 if (--i < 0) {
1690 i = this.DB - 1
1691 --j
3af2954a 1692 }
3af2954a
IC
1693 }
1694 }
ab78acc6
IC
1695 return z.revert(r)
1696}
3af2954a 1697
ab78acc6
IC
1698// (public) gcd(this,a) (HAC 14.54)
1699function bnGCD(a) {
1700 var x = (this.s < 0) ? this.negate() : this.clone()
1701 var y = (a.s < 0) ? a.negate() : a.clone()
1702 if (x.compareTo(y) < 0) {
1703 var t = x
1704 x = y
1705 y = t
1706 }
1707 var i = x.getLowestSetBit(),
1708 g = y.getLowestSetBit()
1709 if (g < 0) return x
1710 if (i < g) g = i
1711 if (g > 0) {
1712 x.rShiftTo(g, x)
1713 y.rShiftTo(g, y)
1714 }
1715 while (x.signum() > 0) {
1716 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1717 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1718 if (x.compareTo(y) >= 0) {
1719 x.subTo(y, x)
1720 x.rShiftTo(1, x)
1721 } else {
1722 y.subTo(x, y)
1723 y.rShiftTo(1, y)
1724 }
3af2954a 1725 }
ab78acc6
IC
1726 if (g > 0) y.lShiftTo(g, y)
1727 return y
1728}
3af2954a 1729
ab78acc6
IC
1730// (protected) this % n, n < 2^26
1731function bnpModInt(n) {
1732 if (n <= 0) return 0
1733 var d = this.DV % n,
1734 r = (this.s < 0) ? n - 1 : 0
1735 if (this.t > 0)
1736 if (d == 0) r = this[0] % n
1737 else
1738 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1739 return r
1740}
3af2954a 1741
ab78acc6
IC
1742// (public) 1/this % m (HAC 14.61)
1743function bnModInverse(m) {
1744 var ac = m.isEven()
1745 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1746 var u = m.clone(),
1747 v = this.clone()
1748 var a = nbv(1),
1749 b = nbv(0),
1750 c = nbv(0),
1751 d = nbv(1)
1752 while (u.signum() != 0) {
1753 while (u.isEven()) {
1754 u.rShiftTo(1, u)
1755 if (ac) {
1756 if (!a.isEven() || !b.isEven()) {
1757 a.addTo(this, a)
1758 b.subTo(m, b)
1759 }
1760 a.rShiftTo(1, a)
1761 } else if (!b.isEven()) b.subTo(m, b)
1762 b.rShiftTo(1, b)
1763 }
1764 while (v.isEven()) {
1765 v.rShiftTo(1, v)
1766 if (ac) {
1767 if (!c.isEven() || !d.isEven()) {
1768 c.addTo(this, c)
1769 d.subTo(m, d)
1770 }
1771 c.rShiftTo(1, c)
1772 } else if (!d.isEven()) d.subTo(m, d)
1773 d.rShiftTo(1, d)
1774 }
1775 if (u.compareTo(v) >= 0) {
1776 u.subTo(v, u)
1777 if (ac) a.subTo(c, a)
1778 b.subTo(d, b)
1779 } else {
1780 v.subTo(u, v)
1781 if (ac) c.subTo(a, c)
1782 d.subTo(b, d)
1783 }
1784 }
1785 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
1786 if (d.compareTo(m) >= 0) return d.subtract(m)
1787 if (d.signum() < 0) d.addTo(m, d)
1788 else return d
1789 if (d.signum() < 0) return d.add(m)
1790 else return d
1791}
1792
1793var lowprimes = [
1794 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
1795 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
1796 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
1797 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
1798 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
1799 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
1800 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
1801 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
1802 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
1803 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
1804 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
1805]
1806
1807var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
1808
1809// (public) test primality with certainty >= 1-.5^t
1810function bnIsProbablePrime(t) {
1811 var i, x = this.abs()
1812 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
1813 for (i = 0; i < lowprimes.length; ++i)
1814 if (x[0] == lowprimes[i]) return true
1815 return false
3af2954a 1816 }
ab78acc6
IC
1817 if (x.isEven()) return false
1818 i = 1
1819 while (i < lowprimes.length) {
1820 var m = lowprimes[i],
1821 j = i + 1
1822 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1823 m = x.modInt(m)
1824 while (i < j) if (m % lowprimes[i++] == 0) return false
1825 }
1826 return x.millerRabin(t)
1827}
1828
1829// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
1830function bnpMillerRabin(t) {
1831 var n1 = this.subtract(BigInteger.ONE)
1832 var k = n1.getLowestSetBit()
1833 if (k <= 0) return false
1834 var r = n1.shiftRight(k)
1835 t = (t + 1) >> 1
1836 if (t > lowprimes.length) t = lowprimes.length
1837 var a = new BigInteger(null)
1838 var j, bases = []
1839 for (var i = 0; i < t; ++i) {
1840 for (;;) {
1841 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1842 if (bases.indexOf(j) == -1) break
1843 }
1844 bases.push(j)
1845 a.fromInt(j)
1846 var y = a.modPow(r, this)
1847 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
1848 var j = 1
1849 while (j++ < k && y.compareTo(n1) != 0) {
1850 y = y.modPowInt(2, this)
1851 if (y.compareTo(BigInteger.ONE) == 0) return false
1852 }
1853 if (y.compareTo(n1) != 0) return false
1854 }
3af2954a 1855 }
ab78acc6
IC
1856 return true
1857}
3af2954a 1858
ab78acc6
IC
1859// protected
1860proto.chunkSize = bnpChunkSize
1861proto.toRadix = bnpToRadix
1862proto.fromRadix = bnpFromRadix
1863proto.fromNumber = bnpFromNumber
1864proto.bitwiseTo = bnpBitwiseTo
1865proto.changeBit = bnpChangeBit
1866proto.addTo = bnpAddTo
1867proto.dMultiply = bnpDMultiply
1868proto.dAddOffset = bnpDAddOffset
1869proto.multiplyLowerTo = bnpMultiplyLowerTo
1870proto.multiplyUpperTo = bnpMultiplyUpperTo
1871proto.modInt = bnpModInt
1872proto.millerRabin = bnpMillerRabin
3af2954a 1873
ab78acc6
IC
1874// public
1875proto.clone = bnClone
1876proto.intValue = bnIntValue
1877proto.byteValue = bnByteValue
1878proto.shortValue = bnShortValue
1879proto.signum = bnSigNum
1880proto.toByteArray = bnToByteArray
1881proto.equals = bnEquals
1882proto.min = bnMin
1883proto.max = bnMax
1884proto.and = bnAnd
1885proto.or = bnOr
1886proto.xor = bnXor
1887proto.andNot = bnAndNot
1888proto.not = bnNot
1889proto.shiftLeft = bnShiftLeft
1890proto.shiftRight = bnShiftRight
1891proto.getLowestSetBit = bnGetLowestSetBit
1892proto.bitCount = bnBitCount
1893proto.testBit = bnTestBit
1894proto.setBit = bnSetBit
1895proto.clearBit = bnClearBit
1896proto.flipBit = bnFlipBit
1897proto.add = bnAdd
1898proto.subtract = bnSubtract
1899proto.multiply = bnMultiply
1900proto.divide = bnDivide
1901proto.remainder = bnRemainder
1902proto.divideAndRemainder = bnDivideAndRemainder
1903proto.modPow = bnModPow
1904proto.modInverse = bnModInverse
1905proto.pow = bnPow
1906proto.gcd = bnGCD
1907proto.isProbablePrime = bnIsProbablePrime
3af2954a 1908
ab78acc6
IC
1909// JSBN-specific extension
1910proto.square = bnSquare
3af2954a 1911
ab78acc6
IC
1912// constants
1913BigInteger.ZERO = nbv(0)
1914BigInteger.ONE = nbv(1)
1915BigInteger.valueOf = nbv
3af2954a 1916
ab78acc6 1917module.exports = BigInteger
3af2954a 1918
ab78acc6
IC
1919},{"../package.json":4}],2:[function(require,module,exports){
1920(function (Buffer){
1921// FIXME: Kind of a weird way to throw exceptions, consider removing
1922var assert = require('assert')
1923var BigInteger = require('./bigi')
3af2954a 1924
ab78acc6
IC
1925/**
1926 * Turns a byte array into a big integer.
1927 *
1928 * This function will interpret a byte array as a big integer in big
1929 * endian notation.
1930 */
1931BigInteger.fromByteArrayUnsigned = function(byteArray) {
1932 // BigInteger expects a DER integer conformant byte array
1933 if (byteArray[0] & 0x80) {
1934 return new BigInteger([0].concat(byteArray))
3af2954a
IC
1935 }
1936
ab78acc6
IC
1937 return new BigInteger(byteArray)
1938}
3af2954a 1939
ab78acc6
IC
1940/**
1941 * Returns a byte array representation of the big integer.
1942 *
1943 * This returns the absolute of the contained value in big endian
1944 * form. A value of zero results in an empty array.
1945 */
1946BigInteger.prototype.toByteArrayUnsigned = function() {
1947 var byteArray = this.toByteArray()
1948 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
1949}
3af2954a 1950
ab78acc6
IC
1951BigInteger.fromDERInteger = function(byteArray) {
1952 return new BigInteger(byteArray)
1953}
3af2954a 1954
ab78acc6
IC
1955/*
1956 * Converts BigInteger to a DER integer representation.
1957 *
1958 * The format for this value uses the most significant bit as a sign
1959 * bit. If the most significant bit is already set and the integer is
1960 * positive, a 0x00 is prepended.
1961 *
1962 * Examples:
1963 *
1964 * 0 => 0x00
1965 * 1 => 0x01
1966 * -1 => 0xff
1967 * 127 => 0x7f
1968 * -127 => 0x81
1969 * 128 => 0x0080
1970 * -128 => 0x80
1971 * 255 => 0x00ff
1972 * -255 => 0xff01
1973 * 16300 => 0x3fac
1974 * -16300 => 0xc054
1975 * 62300 => 0x00f35c
1976 * -62300 => 0xff0ca4
1977*/
1978BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 1979
ab78acc6
IC
1980BigInteger.fromBuffer = function(buffer) {
1981 // BigInteger expects a DER integer conformant byte array
1982 if (buffer[0] & 0x80) {
1983 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 1984
ab78acc6 1985 return new BigInteger([0].concat(byteArray))
3af2954a
IC
1986 }
1987
ab78acc6
IC
1988 return new BigInteger(buffer)
1989}
3af2954a 1990
ab78acc6
IC
1991BigInteger.fromHex = function(hex) {
1992 if (hex === '') return BigInteger.ZERO
3af2954a 1993
ab78acc6
IC
1994 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
1995 assert.equal(hex.length % 2, 0, 'Incomplete hex')
1996 return new BigInteger(hex, 16)
1997}
3af2954a 1998
ab78acc6
IC
1999BigInteger.prototype.toBuffer = function(size) {
2000 var byteArray = this.toByteArrayUnsigned()
2001 var zeros = []
3af2954a 2002
ab78acc6
IC
2003 var padding = size - byteArray.length
2004 while (zeros.length < padding) zeros.push(0)
3af2954a 2005
ab78acc6
IC
2006 return new Buffer(zeros.concat(byteArray))
2007}
3af2954a 2008
ab78acc6
IC
2009BigInteger.prototype.toHex = function(size) {
2010 return this.toBuffer(size).toString('hex')
2011}
3af2954a 2012
ab78acc6
IC
2013}).call(this,require("buffer").Buffer)
2014},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2015var BigInteger = require('./bigi')
3af2954a 2016
ab78acc6
IC
2017//addons
2018require('./convert')
3af2954a 2019
ab78acc6
IC
2020module.exports = BigInteger
2021},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2022module.exports={
2023 "name": "bigi",
2024 "version": "1.4.0",
2025 "description": "Big integers.",
2026 "keywords": [
2027 "cryptography",
2028 "math",
2029 "bitcoin",
2030 "arbitrary",
2031 "precision",
2032 "arithmetic",
2033 "big",
2034 "integer",
2035 "int",
2036 "number",
2037 "biginteger",
2038 "bigint",
2039 "bignumber",
2040 "decimal",
2041 "float"
2042 ],
2043 "devDependencies": {
2044 "mocha": "^1.20.1",
2045 "jshint": "^2.5.1",
2046 "coveralls": "^2.10.0",
2047 "istanbul": "^0.2.11"
2048 },
2049 "repository": {
2050 "url": "https://github.com/cryptocoinjs/bigi",
2051 "type": "git"
2052 },
2053 "main": "./lib/index.js",
2054 "scripts": {
2055 "test": "_mocha -- test/*.js",
2056 "jshint": "jshint --config jshint.json lib/*.js ; true",
2057 "unit": "mocha",
2058 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2059 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2060 },
2061 "dependencies": {},
2062 "testling": {
2063 "files": "test/*.js",
2064 "harness": "mocha",
2065 "browsers": [
2066 "ie/9..latest",
2067 "firefox/latest",
2068 "chrome/latest",
2069 "safari/6.0..latest",
2070 "iphone/6.0..latest",
2071 "android-browser/4.2..latest"
2072 ]
2073 },
2074 "bugs": {
2075 "url": "https://github.com/cryptocoinjs/bigi/issues"
2076 },
2077 "homepage": "https://github.com/cryptocoinjs/bigi",
2078 "_id": "bigi@1.4.0",
2079 "dist": {
2080 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2081 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2082 },
2083 "_from": "bigi@^1.4.0",
2084 "_npmVersion": "1.4.3",
2085 "_npmUser": {
2086 "name": "jp",
2087 "email": "jprichardson@gmail.com"
2088 },
2089 "maintainers": [
2090 {
2091 "name": "jp",
2092 "email": "jprichardson@gmail.com"
2093 },
2094 {
2095 "name": "midnightlightning",
2096 "email": "boydb@midnightdesign.ws"
2097 },
2098 {
2099 "name": "sidazhang",
2100 "email": "sidazhang89@gmail.com"
2101 },
2102 {
2103 "name": "nadav",
2104 "email": "npm@shesek.info"
3af2954a 2105 }
ab78acc6
IC
2106 ],
2107 "directories": {},
2108 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2109 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2110}
3af2954a 2111
ab78acc6
IC
2112},{}],5:[function(require,module,exports){
2113// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2114//
2115// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2116//
2117// Originally from narwhal.js (http://narwhaljs.org)
2118// Copyright (c) 2009 Thomas Robinson <280north.com>
2119//
2120// Permission is hereby granted, free of charge, to any person obtaining a copy
2121// of this software and associated documentation files (the 'Software'), to
2122// deal in the Software without restriction, including without limitation the
2123// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2124// sell copies of the Software, and to permit persons to whom the Software is
2125// furnished to do so, subject to the following conditions:
2126//
2127// The above copyright notice and this permission notice shall be included in
2128// all copies or substantial portions of the Software.
2129//
2130// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2131// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2132// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2133// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2134// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2135// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2136
ab78acc6
IC
2137// when used in node, this will actually load the util module we depend on
2138// versus loading the builtin util module as happens otherwise
2139// this is a bug in node module loading as far as I am concerned
2140var util = require('util/');
3af2954a 2141
ab78acc6
IC
2142var pSlice = Array.prototype.slice;
2143var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2144
ab78acc6
IC
2145// 1. The assert module provides functions that throw
2146// AssertionError's when particular conditions are not met. The
2147// assert module must conform to the following interface.
3af2954a 2148
ab78acc6 2149var assert = module.exports = ok;
3af2954a 2150
ab78acc6
IC
2151// 2. The AssertionError is defined in assert.
2152// new assert.AssertionError({ message: message,
2153// actual: actual,
2154// expected: expected })
3af2954a 2155
ab78acc6
IC
2156assert.AssertionError = function AssertionError(options) {
2157 this.name = 'AssertionError';
2158 this.actual = options.actual;
2159 this.expected = options.expected;
2160 this.operator = options.operator;
2161 if (options.message) {
2162 this.message = options.message;
2163 this.generatedMessage = false;
2164 } else {
2165 this.message = getMessage(this);
2166 this.generatedMessage = true;
2167 }
2168 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2169
ab78acc6
IC
2170 if (Error.captureStackTrace) {
2171 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2172 }
ab78acc6
IC
2173 else {
2174 // non v8 browsers so we can have a stacktrace
2175 var err = new Error();
2176 if (err.stack) {
2177 var out = err.stack;
3af2954a 2178
ab78acc6
IC
2179 // try to strip useless frames
2180 var fn_name = stackStartFunction.name;
2181 var idx = out.indexOf('\n' + fn_name);
2182 if (idx >= 0) {
2183 // once we have located the function frame
2184 // we need to strip out everything before it (and its line)
2185 var next_line = out.indexOf('\n', idx + 1);
2186 out = out.substring(next_line + 1);
2187 }
3af2954a 2188
ab78acc6 2189 this.stack = out;
3af2954a 2190 }
3af2954a 2191 }
ab78acc6 2192};
3af2954a 2193
ab78acc6
IC
2194// assert.AssertionError instanceof Error
2195util.inherits(assert.AssertionError, Error);
3af2954a 2196
ab78acc6
IC
2197function replacer(key, value) {
2198 if (util.isUndefined(value)) {
2199 return '' + value;
2200 }
2201 if (util.isNumber(value) && !isFinite(value)) {
2202 return value.toString();
2203 }
2204 if (util.isFunction(value) || util.isRegExp(value)) {
2205 return value.toString();
2206 }
2207 return value;
2208}
3af2954a 2209
ab78acc6
IC
2210function truncate(s, n) {
2211 if (util.isString(s)) {
2212 return s.length < n ? s : s.slice(0, n);
2213 } else {
2214 return s;
2215 }
2216}
3af2954a 2217
ab78acc6
IC
2218function getMessage(self) {
2219 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2220 self.operator + ' ' +
2221 truncate(JSON.stringify(self.expected, replacer), 128);
2222}
3af2954a 2223
ab78acc6
IC
2224// At present only the three keys mentioned above are used and
2225// understood by the spec. Implementations or sub modules can pass
2226// other keys to the AssertionError's constructor - they will be
2227// ignored.
3af2954a 2228
ab78acc6
IC
2229// 3. All of the following functions must throw an AssertionError
2230// when a corresponding condition is not met, with a message that
2231// may be undefined if not provided. All assertion methods provide
2232// both the actual and expected values to the assertion error for
2233// display purposes.
3af2954a 2234
ab78acc6
IC
2235function fail(actual, expected, message, operator, stackStartFunction) {
2236 throw new assert.AssertionError({
2237 message: message,
2238 actual: actual,
2239 expected: expected,
2240 operator: operator,
2241 stackStartFunction: stackStartFunction
2242 });
2243}
3af2954a 2244
ab78acc6
IC
2245// EXTENSION! allows for well behaved errors defined elsewhere.
2246assert.fail = fail;
ebd8d4e8 2247
ab78acc6
IC
2248// 4. Pure assertion tests whether a value is truthy, as determined
2249// by !!guard.
2250// assert.ok(guard, message_opt);
2251// This statement is equivalent to assert.equal(true, !!guard,
2252// message_opt);. To test strictly for the value true, use
2253// assert.strictEqual(true, guard, message_opt);.
3af2954a 2254
ab78acc6
IC
2255function ok(value, message) {
2256 if (!value) fail(value, true, message, '==', assert.ok);
2257}
2258assert.ok = ok;
3af2954a 2259
ab78acc6
IC
2260// 5. The equality assertion tests shallow, coercive equality with
2261// ==.
2262// assert.equal(actual, expected, message_opt);
3af2954a 2263
ab78acc6
IC
2264assert.equal = function equal(actual, expected, message) {
2265 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2266};
3af2954a 2267
ab78acc6
IC
2268// 6. The non-equality assertion tests for whether two objects are not equal
2269// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2270
ab78acc6
IC
2271assert.notEqual = function notEqual(actual, expected, message) {
2272 if (actual == expected) {
2273 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2274 }
ab78acc6 2275};
3af2954a 2276
ab78acc6
IC
2277// 7. The equivalence assertion tests a deep equality relation.
2278// assert.deepEqual(actual, expected, message_opt);
3af2954a 2279
ab78acc6
IC
2280assert.deepEqual = function deepEqual(actual, expected, message) {
2281 if (!_deepEqual(actual, expected)) {
2282 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2283 }
2284};
3af2954a 2285
ab78acc6
IC
2286function _deepEqual(actual, expected) {
2287 // 7.1. All identical values are equivalent, as determined by ===.
2288 if (actual === expected) {
2289 return true;
3af2954a 2290
ab78acc6
IC
2291 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2292 if (actual.length != expected.length) return false;
3af2954a 2293
ab78acc6
IC
2294 for (var i = 0; i < actual.length; i++) {
2295 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2296 }
2297
ab78acc6 2298 return true;
3af2954a 2299
ab78acc6
IC
2300 // 7.2. If the expected value is a Date object, the actual value is
2301 // equivalent if it is also a Date object that refers to the same time.
2302 } else if (util.isDate(actual) && util.isDate(expected)) {
2303 return actual.getTime() === expected.getTime();
3af2954a 2304
ab78acc6
IC
2305 // 7.3 If the expected value is a RegExp object, the actual value is
2306 // equivalent if it is also a RegExp object with the same source and
2307 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2308 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2309 return actual.source === expected.source &&
2310 actual.global === expected.global &&
2311 actual.multiline === expected.multiline &&
2312 actual.lastIndex === expected.lastIndex &&
2313 actual.ignoreCase === expected.ignoreCase;
3af2954a 2314
ab78acc6
IC
2315 // 7.4. Other pairs that do not both pass typeof value == 'object',
2316 // equivalence is determined by ==.
2317 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2318 return actual == expected;
3af2954a 2319
ab78acc6
IC
2320 // 7.5 For all other Object pairs, including Array objects, equivalence is
2321 // determined by having the same number of owned properties (as verified
2322 // with Object.prototype.hasOwnProperty.call), the same set of keys
2323 // (although not necessarily the same order), equivalent values for every
2324 // corresponding key, and an identical 'prototype' property. Note: this
2325 // accounts for both named and indexed properties on Arrays.
2326 } else {
2327 return objEquiv(actual, expected);
3af2954a 2328 }
ab78acc6 2329}
3af2954a 2330
ab78acc6
IC
2331function isArguments(object) {
2332 return Object.prototype.toString.call(object) == '[object Arguments]';
2333}
3af2954a 2334
ab78acc6
IC
2335function objEquiv(a, b) {
2336 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2337 return false;
2338 // an identical 'prototype' property.
2339 if (a.prototype !== b.prototype) return false;
2340 // if one is a primitive, the other must be same
2341 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2342 return a === b;
3af2954a 2343 }
ab78acc6
IC
2344 var aIsArgs = isArguments(a),
2345 bIsArgs = isArguments(b);
2346 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2347 return false;
2348 if (aIsArgs) {
2349 a = pSlice.call(a);
2350 b = pSlice.call(b);
2351 return _deepEqual(a, b);
3af2954a 2352 }
ab78acc6
IC
2353 var ka = objectKeys(a),
2354 kb = objectKeys(b),
2355 key, i;
2356 // having the same number of owned properties (keys incorporates
2357 // hasOwnProperty)
2358 if (ka.length != kb.length)
2359 return false;
2360 //the same set of keys (although not necessarily the same order),
2361 ka.sort();
2362 kb.sort();
2363 //~~~cheap key test
2364 for (i = ka.length - 1; i >= 0; i--) {
2365 if (ka[i] != kb[i])
2366 return false;
3af2954a 2367 }
ab78acc6
IC
2368 //equivalent values for every corresponding key, and
2369 //~~~possibly expensive deep test
2370 for (i = ka.length - 1; i >= 0; i--) {
2371 key = ka[i];
2372 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2373 }
ab78acc6
IC
2374 return true;
2375}
2376
2377// 8. The non-equivalence assertion tests for any deep inequality.
2378// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2379
ab78acc6
IC
2380assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2381 if (_deepEqual(actual, expected)) {
2382 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2383 }
ab78acc6 2384};
3af2954a 2385
ab78acc6
IC
2386// 9. The strict equality assertion tests strict equality, as determined by ===.
2387// assert.strictEqual(actual, expected, message_opt);
3af2954a 2388
ab78acc6
IC
2389assert.strictEqual = function strictEqual(actual, expected, message) {
2390 if (actual !== expected) {
2391 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2392 }
ab78acc6 2393};
3af2954a 2394
ab78acc6
IC
2395// 10. The strict non-equality assertion tests for strict inequality, as
2396// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2397
ab78acc6
IC
2398assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2399 if (actual === expected) {
2400 fail(actual, expected, message, '!==', assert.notStrictEqual);
2401 }
2402};
3af2954a 2403
ab78acc6
IC
2404function expectedException(actual, expected) {
2405 if (!actual || !expected) {
2406 return false;
2407 }
3af2954a 2408
ab78acc6
IC
2409 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2410 return expected.test(actual);
2411 } else if (actual instanceof expected) {
2412 return true;
2413 } else if (expected.call({}, actual) === true) {
2414 return true;
3af2954a
IC
2415 }
2416
ab78acc6
IC
2417 return false;
2418}
3af2954a 2419
ab78acc6
IC
2420function _throws(shouldThrow, block, expected, message) {
2421 var actual;
3af2954a 2422
ab78acc6
IC
2423 if (util.isString(expected)) {
2424 message = expected;
2425 expected = null;
3af2954a
IC
2426 }
2427
ab78acc6
IC
2428 try {
2429 block();
2430 } catch (e) {
2431 actual = e;
3af2954a
IC
2432 }
2433
ab78acc6
IC
2434 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2435 (message ? ' ' + message : '.');
3af2954a 2436
ab78acc6
IC
2437 if (shouldThrow && !actual) {
2438 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2439 }
2440
ab78acc6
IC
2441 if (!shouldThrow && expectedException(actual, expected)) {
2442 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2443 }
2444
ab78acc6
IC
2445 if ((shouldThrow && actual && expected &&
2446 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2447 throw actual;
3af2954a 2448 }
ab78acc6 2449}
3af2954a 2450
ab78acc6
IC
2451// 11. Expected to throw an error:
2452// assert.throws(block, Error_opt, message_opt);
3af2954a 2453
ab78acc6
IC
2454assert.throws = function(block, /*optional*/error, /*optional*/message) {
2455 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2456};
3af2954a 2457
ab78acc6
IC
2458// EXTENSION! This is annoying to write outside this module.
2459assert.doesNotThrow = function(block, /*optional*/message) {
2460 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2461};
3af2954a 2462
ab78acc6 2463assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2464
ab78acc6
IC
2465var objectKeys = Object.keys || function (obj) {
2466 var keys = [];
2467 for (var key in obj) {
2468 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2469 }
ab78acc6
IC
2470 return keys;
2471};
3af2954a 2472
ab78acc6 2473},{"util/":29}],6:[function(require,module,exports){
3af2954a 2474
ab78acc6
IC
2475},{}],7:[function(require,module,exports){
2476/*!
2477 * The buffer module from node.js, for the browser.
2478 *
2479 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2480 * @license MIT
2481 */
3af2954a 2482
ab78acc6
IC
2483var base64 = require('base64-js')
2484var ieee754 = require('ieee754')
2485var isArray = require('is-array')
3af2954a 2486
ab78acc6
IC
2487exports.Buffer = Buffer
2488exports.SlowBuffer = SlowBuffer
2489exports.INSPECT_MAX_BYTES = 50
2490Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2491
ab78acc6 2492var rootParent = {}
3af2954a 2493
ab78acc6
IC
2494/**
2495 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2496 * === true Use Uint8Array implementation (fastest)
2497 * === false Use Object implementation (most compatible, even IE6)
2498 *
2499 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2500 * Opera 11.6+, iOS 4.2+.
2501 *
2502 * Due to various browser bugs, sometimes the Object implementation will be used even
2503 * when the browser supports typed arrays.
2504 *
2505 * Note:
2506 *
2507 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2508 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2509 *
2510 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2511 * on objects.
2512 *
2513 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2514 *
2515 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2516 * incorrect length in some situations.
3af2954a 2517
ab78acc6
IC
2518 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2519 * get the Object implementation, which is slower but behaves correctly.
2520 */
2521Buffer.TYPED_ARRAY_SUPPORT = (function () {
2522 function Bar () {}
2523 try {
2524 var arr = new Uint8Array(1)
2525 arr.foo = function () { return 42 }
2526 arr.constructor = Bar
2527 return arr.foo() === 42 && // typed array instances can be augmented
2528 arr.constructor === Bar && // constructor can be set
2529 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2530 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2531 } catch (e) {
2532 return false
2533 }
2534})()
3af2954a 2535
ab78acc6
IC
2536function kMaxLength () {
2537 return Buffer.TYPED_ARRAY_SUPPORT
2538 ? 0x7fffffff
2539 : 0x3fffffff
2540}
3af2954a 2541
ab78acc6
IC
2542/**
2543 * Class: Buffer
2544 * =============
2545 *
2546 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2547 * with function properties for all the node `Buffer` API functions. We use
2548 * `Uint8Array` so that square bracket notation works as expected -- it returns
2549 * a single octet.
2550 *
2551 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2552 * prototype.
2553 */
2554function Buffer (arg) {
2555 if (!(this instanceof Buffer)) {
2556 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2557 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2558 return new Buffer(arg)
3af2954a
IC
2559 }
2560
ab78acc6
IC
2561 this.length = 0
2562 this.parent = undefined
3af2954a 2563
ab78acc6
IC
2564 // Common case.
2565 if (typeof arg === 'number') {
2566 return fromNumber(this, arg)
2567 }
3af2954a 2568
ab78acc6
IC
2569 // Slightly less common case.
2570 if (typeof arg === 'string') {
2571 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2572 }
3af2954a 2573
ab78acc6
IC
2574 // Unusual.
2575 return fromObject(this, arg)
2576}
3af2954a 2577
ab78acc6
IC
2578function fromNumber (that, length) {
2579 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2580 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2581 for (var i = 0; i < length; i++) {
2582 that[i] = 0
2583 }
3af2954a 2584 }
ab78acc6
IC
2585 return that
2586}
3af2954a 2587
ab78acc6
IC
2588function fromString (that, string, encoding) {
2589 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2590
ab78acc6
IC
2591 // Assumption: byteLength() return value is always < kMaxLength.
2592 var length = byteLength(string, encoding) | 0
2593 that = allocate(that, length)
3af2954a 2594
ab78acc6
IC
2595 that.write(string, encoding)
2596 return that
2597}
3af2954a 2598
ab78acc6
IC
2599function fromObject (that, object) {
2600 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2601
ab78acc6 2602 if (isArray(object)) return fromArray(that, object)
3af2954a 2603
ab78acc6
IC
2604 if (object == null) {
2605 throw new TypeError('must start with number, buffer, array or string')
2606 }
3af2954a 2607
ab78acc6
IC
2608 if (typeof ArrayBuffer !== 'undefined') {
2609 if (object.buffer instanceof ArrayBuffer) {
2610 return fromTypedArray(that, object)
2611 }
2612 if (object instanceof ArrayBuffer) {
2613 return fromArrayBuffer(that, object)
2614 }
3af2954a
IC
2615 }
2616
ab78acc6 2617 if (object.length) return fromArrayLike(that, object)
3af2954a 2618
ab78acc6
IC
2619 return fromJsonObject(that, object)
2620}
3af2954a 2621
ab78acc6
IC
2622function fromBuffer (that, buffer) {
2623 var length = checked(buffer.length) | 0
2624 that = allocate(that, length)
2625 buffer.copy(that, 0, 0, length)
2626 return that
2627}
3af2954a 2628
ab78acc6
IC
2629function fromArray (that, array) {
2630 var length = checked(array.length) | 0
2631 that = allocate(that, length)
2632 for (var i = 0; i < length; i += 1) {
2633 that[i] = array[i] & 255
3af2954a 2634 }
ab78acc6
IC
2635 return that
2636}
3af2954a 2637
ab78acc6
IC
2638// Duplicate of fromArray() to keep fromArray() monomorphic.
2639function fromTypedArray (that, array) {
2640 var length = checked(array.length) | 0
2641 that = allocate(that, length)
2642 // Truncating the elements is probably not what people expect from typed
2643 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2644 // of the old Buffer constructor.
2645 for (var i = 0; i < length; i += 1) {
2646 that[i] = array[i] & 255
3af2954a 2647 }
ab78acc6
IC
2648 return that
2649}
3af2954a 2650
ab78acc6
IC
2651function fromArrayBuffer (that, array) {
2652 if (Buffer.TYPED_ARRAY_SUPPORT) {
2653 // Return an augmented `Uint8Array` instance, for best performance
2654 array.byteLength
2655 that = Buffer._augment(new Uint8Array(array))
2656 } else {
2657 // Fallback: Return an object instance of the Buffer class
2658 that = fromTypedArray(that, new Uint8Array(array))
2659 }
2660 return that
2661}
3af2954a 2662
ab78acc6
IC
2663function fromArrayLike (that, array) {
2664 var length = checked(array.length) | 0
2665 that = allocate(that, length)
2666 for (var i = 0; i < length; i += 1) {
2667 that[i] = array[i] & 255
3af2954a 2668 }
ab78acc6
IC
2669 return that
2670}
3af2954a 2671
ab78acc6
IC
2672// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2673// Returns a zero-length buffer for inputs that don't conform to the spec.
2674function fromJsonObject (that, object) {
2675 var array
2676 var length = 0
2677
2678 if (object.type === 'Buffer' && isArray(object.data)) {
2679 array = object.data
2680 length = checked(array.length) | 0
3af2954a 2681 }
ab78acc6 2682 that = allocate(that, length)
3af2954a 2683
ab78acc6
IC
2684 for (var i = 0; i < length; i += 1) {
2685 that[i] = array[i] & 255
3af2954a 2686 }
ab78acc6
IC
2687 return that
2688}
3af2954a 2689
ab78acc6
IC
2690function allocate (that, length) {
2691 if (Buffer.TYPED_ARRAY_SUPPORT) {
2692 // Return an augmented `Uint8Array` instance, for best performance
2693 that = Buffer._augment(new Uint8Array(length))
2694 } else {
2695 // Fallback: Return an object instance of the Buffer class
2696 that.length = length
2697 that._isBuffer = true
2698 }
3af2954a 2699
ab78acc6
IC
2700 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2701 if (fromPool) that.parent = rootParent
3af2954a 2702
ab78acc6
IC
2703 return that
2704}
3af2954a 2705
ab78acc6
IC
2706function checked (length) {
2707 // Note: cannot use `length < kMaxLength` here because that fails when
2708 // length is NaN (which is otherwise coerced to zero.)
2709 if (length >= kMaxLength()) {
2710 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2711 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2712 }
ab78acc6
IC
2713 return length | 0
2714}
3af2954a 2715
ab78acc6
IC
2716function SlowBuffer (subject, encoding) {
2717 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2718
ab78acc6
IC
2719 var buf = new Buffer(subject, encoding)
2720 delete buf.parent
2721 return buf
2722}
3af2954a 2723
ab78acc6
IC
2724Buffer.isBuffer = function isBuffer (b) {
2725 return !!(b != null && b._isBuffer)
2726}
3af2954a 2727
ab78acc6
IC
2728Buffer.compare = function compare (a, b) {
2729 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2730 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2731 }
2732
ab78acc6 2733 if (a === b) return 0
3af2954a 2734
ab78acc6
IC
2735 var x = a.length
2736 var y = b.length
3af2954a 2737
ab78acc6
IC
2738 var i = 0
2739 var len = Math.min(x, y)
2740 while (i < len) {
2741 if (a[i] !== b[i]) break
3af2954a 2742
ab78acc6
IC
2743 ++i
2744 }
3af2954a 2745
ab78acc6
IC
2746 if (i !== len) {
2747 x = a[i]
2748 y = b[i]
2749 }
3af2954a 2750
ab78acc6
IC
2751 if (x < y) return -1
2752 if (y < x) return 1
2753 return 0
2754}
3af2954a 2755
ab78acc6
IC
2756Buffer.isEncoding = function isEncoding (encoding) {
2757 switch (String(encoding).toLowerCase()) {
2758 case 'hex':
2759 case 'utf8':
2760 case 'utf-8':
2761 case 'ascii':
2762 case 'binary':
2763 case 'base64':
2764 case 'raw':
2765 case 'ucs2':
2766 case 'ucs-2':
2767 case 'utf16le':
2768 case 'utf-16le':
2769 return true
2770 default:
2771 return false
3af2954a 2772 }
ab78acc6 2773}
3af2954a 2774
ab78acc6
IC
2775Buffer.concat = function concat (list, length) {
2776 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 2777
ab78acc6
IC
2778 if (list.length === 0) {
2779 return new Buffer(0)
3af2954a
IC
2780 }
2781
ab78acc6
IC
2782 var i
2783 if (length === undefined) {
2784 length = 0
2785 for (i = 0; i < list.length; i++) {
2786 length += list[i].length
2787 }
3af2954a
IC
2788 }
2789
ab78acc6
IC
2790 var buf = new Buffer(length)
2791 var pos = 0
2792 for (i = 0; i < list.length; i++) {
2793 var item = list[i]
2794 item.copy(buf, pos)
2795 pos += item.length
2796 }
2797 return buf
2798}
3af2954a 2799
ab78acc6
IC
2800function byteLength (string, encoding) {
2801 if (typeof string !== 'string') string = '' + string
2802
2803 var len = string.length
2804 if (len === 0) return 0
2805
2806 // Use a for loop to avoid recursion
2807 var loweredCase = false
2808 for (;;) {
2809 switch (encoding) {
2810 case 'ascii':
2811 case 'binary':
2812 // Deprecated
2813 case 'raw':
2814 case 'raws':
2815 return len
2816 case 'utf8':
2817 case 'utf-8':
2818 return utf8ToBytes(string).length
2819 case 'ucs2':
2820 case 'ucs-2':
2821 case 'utf16le':
2822 case 'utf-16le':
2823 return len * 2
2824 case 'hex':
2825 return len >>> 1
2826 case 'base64':
2827 return base64ToBytes(string).length
2828 default:
2829 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2830 encoding = ('' + encoding).toLowerCase()
2831 loweredCase = true
3af2954a 2832 }
3af2954a 2833 }
ab78acc6
IC
2834}
2835Buffer.byteLength = byteLength
3af2954a 2836
ab78acc6
IC
2837// pre-set for values that may exist in the future
2838Buffer.prototype.length = undefined
2839Buffer.prototype.parent = undefined
3af2954a 2840
ab78acc6
IC
2841function slowToString (encoding, start, end) {
2842 var loweredCase = false
3af2954a 2843
ab78acc6
IC
2844 start = start | 0
2845 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 2846
ab78acc6
IC
2847 if (!encoding) encoding = 'utf8'
2848 if (start < 0) start = 0
2849 if (end > this.length) end = this.length
2850 if (end <= start) return ''
3af2954a 2851
ab78acc6
IC
2852 while (true) {
2853 switch (encoding) {
2854 case 'hex':
2855 return hexSlice(this, start, end)
3af2954a 2856
ab78acc6
IC
2857 case 'utf8':
2858 case 'utf-8':
2859 return utf8Slice(this, start, end)
3af2954a 2860
ab78acc6
IC
2861 case 'ascii':
2862 return asciiSlice(this, start, end)
3af2954a 2863
ab78acc6
IC
2864 case 'binary':
2865 return binarySlice(this, start, end)
3af2954a 2866
ab78acc6
IC
2867 case 'base64':
2868 return base64Slice(this, start, end)
3af2954a 2869
ab78acc6
IC
2870 case 'ucs2':
2871 case 'ucs-2':
2872 case 'utf16le':
2873 case 'utf-16le':
2874 return utf16leSlice(this, start, end)
3af2954a 2875
ab78acc6
IC
2876 default:
2877 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2878 encoding = (encoding + '').toLowerCase()
2879 loweredCase = true
2880 }
3af2954a 2881 }
ab78acc6 2882}
3af2954a 2883
ab78acc6
IC
2884Buffer.prototype.toString = function toString () {
2885 var length = this.length | 0
2886 if (length === 0) return ''
2887 if (arguments.length === 0) return utf8Slice(this, 0, length)
2888 return slowToString.apply(this, arguments)
2889}
3af2954a 2890
ab78acc6
IC
2891Buffer.prototype.equals = function equals (b) {
2892 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2893 if (this === b) return true
2894 return Buffer.compare(this, b) === 0
2895}
3af2954a 2896
ab78acc6
IC
2897Buffer.prototype.inspect = function inspect () {
2898 var str = ''
2899 var max = exports.INSPECT_MAX_BYTES
2900 if (this.length > 0) {
2901 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
2902 if (this.length > max) str += ' ... '
3af2954a 2903 }
ab78acc6
IC
2904 return '<Buffer ' + str + '>'
2905}
3af2954a 2906
ab78acc6
IC
2907Buffer.prototype.compare = function compare (b) {
2908 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2909 if (this === b) return 0
2910 return Buffer.compare(this, b)
2911}
3af2954a 2912
ab78acc6
IC
2913Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2914 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
2915 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
2916 byteOffset >>= 0
3af2954a 2917
ab78acc6
IC
2918 if (this.length === 0) return -1
2919 if (byteOffset >= this.length) return -1
3af2954a 2920
ab78acc6
IC
2921 // Negative offsets start from the end of the buffer
2922 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 2923
ab78acc6
IC
2924 if (typeof val === 'string') {
2925 if (val.length === 0) return -1 // special case: looking for empty string always fails
2926 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 2927 }
ab78acc6
IC
2928 if (Buffer.isBuffer(val)) {
2929 return arrayIndexOf(this, val, byteOffset)
3af2954a 2930 }
ab78acc6
IC
2931 if (typeof val === 'number') {
2932 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2933 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 2934 }
ab78acc6 2935 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
2936 }
2937
ab78acc6
IC
2938 function arrayIndexOf (arr, val, byteOffset) {
2939 var foundIndex = -1
2940 for (var i = 0; byteOffset + i < arr.length; i++) {
2941 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
2942 if (foundIndex === -1) foundIndex = i
2943 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 2944 } else {
ab78acc6 2945 foundIndex = -1
3af2954a 2946 }
3af2954a 2947 }
ab78acc6
IC
2948 return -1
2949 }
3af2954a 2950
ab78acc6
IC
2951 throw new TypeError('val must be string, number or Buffer')
2952}
3af2954a 2953
ab78acc6
IC
2954// `get` is deprecated
2955Buffer.prototype.get = function get (offset) {
2956 console.log('.get() is deprecated. Access using array indexes instead.')
2957 return this.readUInt8(offset)
2958}
3af2954a 2959
ab78acc6
IC
2960// `set` is deprecated
2961Buffer.prototype.set = function set (v, offset) {
2962 console.log('.set() is deprecated. Access using array indexes instead.')
2963 return this.writeUInt8(v, offset)
2964}
3af2954a 2965
ab78acc6
IC
2966function hexWrite (buf, string, offset, length) {
2967 offset = Number(offset) || 0
2968 var remaining = buf.length - offset
2969 if (!length) {
2970 length = remaining
2971 } else {
2972 length = Number(length)
2973 if (length > remaining) {
2974 length = remaining
2975 }
2976 }
3af2954a 2977
ab78acc6
IC
2978 // must be an even number of digits
2979 var strLen = string.length
2980 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 2981
ab78acc6
IC
2982 if (length > strLen / 2) {
2983 length = strLen / 2
2984 }
2985 for (var i = 0; i < length; i++) {
2986 var parsed = parseInt(string.substr(i * 2, 2), 16)
2987 if (isNaN(parsed)) throw new Error('Invalid hex string')
2988 buf[offset + i] = parsed
3af2954a 2989 }
ab78acc6
IC
2990 return i
2991}
2992
2993function utf8Write (buf, string, offset, length) {
2994 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2995}
3af2954a 2996
ab78acc6
IC
2997function asciiWrite (buf, string, offset, length) {
2998 return blitBuffer(asciiToBytes(string), buf, offset, length)
2999}
3af2954a 3000
ab78acc6
IC
3001function binaryWrite (buf, string, offset, length) {
3002 return asciiWrite(buf, string, offset, length)
3003}
3af2954a 3004
ab78acc6
IC
3005function base64Write (buf, string, offset, length) {
3006 return blitBuffer(base64ToBytes(string), buf, offset, length)
3007}
3af2954a 3008
ab78acc6
IC
3009function ucs2Write (buf, string, offset, length) {
3010 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3011}
3af2954a 3012
ab78acc6
IC
3013Buffer.prototype.write = function write (string, offset, length, encoding) {
3014 // Buffer#write(string)
3015 if (offset === undefined) {
3016 encoding = 'utf8'
3017 length = this.length
3018 offset = 0
3019 // Buffer#write(string, encoding)
3020 } else if (length === undefined && typeof offset === 'string') {
3021 encoding = offset
3022 length = this.length
3023 offset = 0
3024 // Buffer#write(string, offset[, length][, encoding])
3025 } else if (isFinite(offset)) {
3026 offset = offset | 0
3027 if (isFinite(length)) {
3028 length = length | 0
3029 if (encoding === undefined) encoding = 'utf8'
3030 } else {
3031 encoding = length
3032 length = undefined
3033 }
3034 // legacy write(string, encoding, offset, length) - remove in v0.13
3035 } else {
3036 var swap = encoding
3037 encoding = offset
3038 offset = length | 0
3039 length = swap
3af2954a
IC
3040 }
3041
ab78acc6
IC
3042 var remaining = this.length - offset
3043 if (length === undefined || length > remaining) length = remaining
3af2954a 3044
ab78acc6
IC
3045 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3046 throw new RangeError('attempt to write outside buffer bounds')
3047 }
3af2954a 3048
ab78acc6 3049 if (!encoding) encoding = 'utf8'
3af2954a 3050
ab78acc6
IC
3051 var loweredCase = false
3052 for (;;) {
3053 switch (encoding) {
3054 case 'hex':
3055 return hexWrite(this, string, offset, length)
ebd8d4e8 3056
ab78acc6
IC
3057 case 'utf8':
3058 case 'utf-8':
3059 return utf8Write(this, string, offset, length)
ebd8d4e8 3060
ab78acc6
IC
3061 case 'ascii':
3062 return asciiWrite(this, string, offset, length)
ebd8d4e8 3063
ab78acc6
IC
3064 case 'binary':
3065 return binaryWrite(this, string, offset, length)
ebd8d4e8 3066
ab78acc6
IC
3067 case 'base64':
3068 // Warning: maxLength not taken into account in base64Write
3069 return base64Write(this, string, offset, length)
ebd8d4e8 3070
ab78acc6
IC
3071 case 'ucs2':
3072 case 'ucs-2':
3073 case 'utf16le':
3074 case 'utf-16le':
3075 return ucs2Write(this, string, offset, length)
ebd8d4e8 3076
ab78acc6
IC
3077 default:
3078 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3079 encoding = ('' + encoding).toLowerCase()
3080 loweredCase = true
3081 }
3082 }
3083}
212b1b46 3084
ab78acc6
IC
3085Buffer.prototype.toJSON = function toJSON () {
3086 return {
3087 type: 'Buffer',
3088 data: Array.prototype.slice.call(this._arr || this, 0)
3089 }
3090}
212b1b46 3091
ab78acc6
IC
3092function base64Slice (buf, start, end) {
3093 if (start === 0 && end === buf.length) {
3094 return base64.fromByteArray(buf)
3095 } else {
3096 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3097 }
ab78acc6
IC
3098}
3099
3100function utf8Slice (buf, start, end) {
3101 end = Math.min(buf.length, end)
3102 var firstByte
3103 var secondByte
3104 var thirdByte
3105 var fourthByte
3106 var bytesPerSequence
3107 var tempCodePoint
3108 var codePoint
3109 var res = []
3110 var i = start
3111
3112 for (; i < end; i += bytesPerSequence) {
3113 firstByte = buf[i]
3114 codePoint = 0xFFFD
3115
3116 if (firstByte > 0xEF) {
3117 bytesPerSequence = 4
3118 } else if (firstByte > 0xDF) {
3119 bytesPerSequence = 3
3120 } else if (firstByte > 0xBF) {
3121 bytesPerSequence = 2
3122 } else {
3123 bytesPerSequence = 1
3124 }
212b1b46 3125
ab78acc6
IC
3126 if (i + bytesPerSequence <= end) {
3127 switch (bytesPerSequence) {
3128 case 1:
3129 if (firstByte < 0x80) {
3130 codePoint = firstByte
3131 }
3132 break
3133 case 2:
3134 secondByte = buf[i + 1]
3135 if ((secondByte & 0xC0) === 0x80) {
3136 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3137 if (tempCodePoint > 0x7F) {
3138 codePoint = tempCodePoint
3139 }
3140 }
3141 break
3142 case 3:
3143 secondByte = buf[i + 1]
3144 thirdByte = buf[i + 2]
3145 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3146 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3147 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3148 codePoint = tempCodePoint
3149 }
3150 }
3151 break
3152 case 4:
3153 secondByte = buf[i + 1]
3154 thirdByte = buf[i + 2]
3155 fourthByte = buf[i + 3]
3156 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3157 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3158 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3159 codePoint = tempCodePoint
3160 }
3161 }
3162 }
3163 }
212b1b46 3164
ab78acc6
IC
3165 if (codePoint === 0xFFFD) {
3166 // we generated an invalid codePoint so make sure to only advance by 1 byte
3167 bytesPerSequence = 1
3168 } else if (codePoint > 0xFFFF) {
3169 // encode to utf16 (surrogate pair dance)
3170 codePoint -= 0x10000
3171 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3172 codePoint = 0xDC00 | codePoint & 0x3FF
3173 }
212b1b46 3174
ab78acc6 3175 res.push(codePoint)
3af2954a 3176 }
212b1b46 3177
ab78acc6
IC
3178 return String.fromCharCode.apply(String, res)
3179}
212b1b46 3180
ab78acc6
IC
3181function asciiSlice (buf, start, end) {
3182 var ret = ''
3183 end = Math.min(buf.length, end)
3184
3185 for (var i = start; i < end; i++) {
3186 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3187 }
ab78acc6
IC
3188 return ret
3189}
212b1b46 3190
ab78acc6
IC
3191function binarySlice (buf, start, end) {
3192 var ret = ''
3193 end = Math.min(buf.length, end)
212b1b46 3194
ab78acc6
IC
3195 for (var i = start; i < end; i++) {
3196 ret += String.fromCharCode(buf[i])
3197 }
3198 return ret
3199}
212b1b46 3200
ab78acc6
IC
3201function hexSlice (buf, start, end) {
3202 var len = buf.length
212b1b46 3203
ab78acc6
IC
3204 if (!start || start < 0) start = 0
3205 if (!end || end < 0 || end > len) end = len
212b1b46 3206
ab78acc6
IC
3207 var out = ''
3208 for (var i = start; i < end; i++) {
3209 out += toHex(buf[i])
3210 }
3211 return out
3212}
212b1b46 3213
ab78acc6
IC
3214function utf16leSlice (buf, start, end) {
3215 var bytes = buf.slice(start, end)
3216 var res = ''
3217 for (var i = 0; i < bytes.length; i += 2) {
3218 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3219 }
3220 return res
3221}
212b1b46 3222
ab78acc6
IC
3223Buffer.prototype.slice = function slice (start, end) {
3224 var len = this.length
3225 start = ~~start
3226 end = end === undefined ? len : ~~end
212b1b46 3227
ab78acc6
IC
3228 if (start < 0) {
3229 start += len
3230 if (start < 0) start = 0
3231 } else if (start > len) {
3232 start = len
3233 }
212b1b46 3234
ab78acc6
IC
3235 if (end < 0) {
3236 end += len
3237 if (end < 0) end = 0
3238 } else if (end > len) {
3239 end = len
3240 }
212b1b46 3241
ab78acc6 3242 if (end < start) end = start
212b1b46 3243
ab78acc6
IC
3244 var newBuf
3245 if (Buffer.TYPED_ARRAY_SUPPORT) {
3246 newBuf = Buffer._augment(this.subarray(start, end))
3247 } else {
3248 var sliceLen = end - start
3249 newBuf = new Buffer(sliceLen, undefined)
3250 for (var i = 0; i < sliceLen; i++) {
3251 newBuf[i] = this[i + start]
3af2954a
IC
3252 }
3253 }
212b1b46 3254
ab78acc6 3255 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3256
ab78acc6
IC
3257 return newBuf
3258}
ebd8d4e8 3259
ab78acc6
IC
3260/*
3261 * Need to make sure that buffer isn't trying to write out of bounds.
3262 */
3263function checkOffset (offset, ext, length) {
3264 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3265 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3266}
ebd8d4e8 3267
ab78acc6
IC
3268Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3269 offset = offset | 0
3270 byteLength = byteLength | 0
3271 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3272
ab78acc6
IC
3273 var val = this[offset]
3274 var mul = 1
3275 var i = 0
3276 while (++i < byteLength && (mul *= 0x100)) {
3277 val += this[offset + i] * mul
3278 }
3af2954a 3279
ab78acc6
IC
3280 return val
3281}
3af2954a 3282
ab78acc6
IC
3283Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3284 offset = offset | 0
3285 byteLength = byteLength | 0
3286 if (!noAssert) {
3287 checkOffset(offset, byteLength, this.length)
3288 }
3af2954a 3289
ab78acc6
IC
3290 var val = this[offset + --byteLength]
3291 var mul = 1
3292 while (byteLength > 0 && (mul *= 0x100)) {
3293 val += this[offset + --byteLength] * mul
3af2954a
IC
3294 }
3295
ab78acc6
IC
3296 return val
3297}
3af2954a 3298
ab78acc6
IC
3299Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3300 if (!noAssert) checkOffset(offset, 1, this.length)
3301 return this[offset]
3302}
3af2954a 3303
ab78acc6
IC
3304Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3305 if (!noAssert) checkOffset(offset, 2, this.length)
3306 return this[offset] | (this[offset + 1] << 8)
3307}
3af2954a 3308
ab78acc6
IC
3309Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3310 if (!noAssert) checkOffset(offset, 2, this.length)
3311 return (this[offset] << 8) | this[offset + 1]
3312}
ebd8d4e8 3313
ab78acc6
IC
3314Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3315 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3316
ab78acc6
IC
3317 return ((this[offset]) |
3318 (this[offset + 1] << 8) |
3319 (this[offset + 2] << 16)) +
3320 (this[offset + 3] * 0x1000000)
3321}
3af2954a 3322
ab78acc6
IC
3323Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3324 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3325
ab78acc6
IC
3326 return (this[offset] * 0x1000000) +
3327 ((this[offset + 1] << 16) |
3328 (this[offset + 2] << 8) |
3329 this[offset + 3])
3330}
ebd8d4e8 3331
ab78acc6
IC
3332Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3333 offset = offset | 0
3334 byteLength = byteLength | 0
3335 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3336
ab78acc6
IC
3337 var val = this[offset]
3338 var mul = 1
3339 var i = 0
3340 while (++i < byteLength && (mul *= 0x100)) {
3341 val += this[offset + i] * mul
ebd8d4e8 3342 }
ab78acc6 3343 mul *= 0x80
ebd8d4e8 3344
ab78acc6
IC
3345 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3346
3347 return val
ebd8d4e8
IC
3348}
3349
ab78acc6
IC
3350Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3351 offset = offset | 0
3352 byteLength = byteLength | 0
3353 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3354
ab78acc6
IC
3355 var i = byteLength
3356 var mul = 1
3357 var val = this[offset + --i]
3358 while (i > 0 && (mul *= 0x100)) {
3359 val += this[offset + --i] * mul
3360 }
3361 mul *= 0x80
ebd8d4e8 3362
ab78acc6 3363 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3364
ab78acc6
IC
3365 return val
3366}
ebd8d4e8 3367
ab78acc6
IC
3368Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3369 if (!noAssert) checkOffset(offset, 1, this.length)
3370 if (!(this[offset] & 0x80)) return (this[offset])
3371 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3372}
ab78acc6
IC
3373
3374Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3375 if (!noAssert) checkOffset(offset, 2, this.length)
3376 var val = this[offset] | (this[offset + 1] << 8)
3377 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3378}
ab78acc6
IC
3379
3380Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3381 if (!noAssert) checkOffset(offset, 2, this.length)
3382 var val = this[offset + 1] | (this[offset] << 8)
3383 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3384}
3385
ab78acc6
IC
3386Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3387 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3388
ab78acc6
IC
3389 return (this[offset]) |
3390 (this[offset + 1] << 8) |
3391 (this[offset + 2] << 16) |
3392 (this[offset + 3] << 24)
ebd8d4e8 3393}
ebd8d4e8 3394
ab78acc6
IC
3395Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3396 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3397
ab78acc6
IC
3398 return (this[offset] << 24) |
3399 (this[offset + 1] << 16) |
3400 (this[offset + 2] << 8) |
3401 (this[offset + 3])
ebd8d4e8
IC
3402}
3403
ab78acc6
IC
3404Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3405 if (!noAssert) checkOffset(offset, 4, this.length)
3406 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3407}
3408
ab78acc6
IC
3409Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3410 if (!noAssert) checkOffset(offset, 4, this.length)
3411 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3412}
3413
ab78acc6
IC
3414Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3415 if (!noAssert) checkOffset(offset, 8, this.length)
3416 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3417}
3418
ab78acc6
IC
3419Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3420 if (!noAssert) checkOffset(offset, 8, this.length)
3421 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3422}
3423
ab78acc6
IC
3424function checkInt (buf, value, offset, ext, max, min) {
3425 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3426 if (value > max || value < min) throw new RangeError('value is out of bounds')
3427 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3428}
3429
ab78acc6
IC
3430Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3431 value = +value
3432 offset = offset | 0
3433 byteLength = byteLength | 0
3434 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3435
ab78acc6
IC
3436 var mul = 1
3437 var i = 0
3438 this[offset] = value & 0xFF
3439 while (++i < byteLength && (mul *= 0x100)) {
3440 this[offset + i] = (value / mul) & 0xFF
3441 }
ebd8d4e8 3442
ab78acc6 3443 return offset + byteLength
ebd8d4e8
IC
3444}
3445
ab78acc6
IC
3446Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3447 value = +value
3448 offset = offset | 0
3449 byteLength = byteLength | 0
3450 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3451
ab78acc6
IC
3452 var i = byteLength - 1
3453 var mul = 1
3454 this[offset + i] = value & 0xFF
3455 while (--i >= 0 && (mul *= 0x100)) {
3456 this[offset + i] = (value / mul) & 0xFF
3457 }
ebd8d4e8 3458
ab78acc6 3459 return offset + byteLength
ebd8d4e8
IC
3460}
3461
ab78acc6
IC
3462Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3463 value = +value
3464 offset = offset | 0
3465 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3466 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3467 this[offset] = value
3468 return offset + 1
ebd8d4e8
IC
3469}
3470
ab78acc6
IC
3471function objectWriteUInt16 (buf, value, offset, littleEndian) {
3472 if (value < 0) value = 0xffff + value + 1
3473 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3474 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3475 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3476 }
ebd8d4e8
IC
3477}
3478
ab78acc6
IC
3479Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3480 value = +value
3481 offset = offset | 0
3482 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3483 if (Buffer.TYPED_ARRAY_SUPPORT) {
3484 this[offset] = value
3485 this[offset + 1] = (value >>> 8)
3486 } else {
3487 objectWriteUInt16(this, value, offset, true)
3488 }
3489 return offset + 2
ebd8d4e8
IC
3490}
3491
ab78acc6
IC
3492Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3493 value = +value
3494 offset = offset | 0
3495 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3496 if (Buffer.TYPED_ARRAY_SUPPORT) {
3497 this[offset] = (value >>> 8)
3498 this[offset + 1] = value
3499 } else {
3500 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3501 }
ab78acc6 3502 return offset + 2
ebd8d4e8
IC
3503}
3504
ab78acc6
IC
3505function objectWriteUInt32 (buf, value, offset, littleEndian) {
3506 if (value < 0) value = 0xffffffff + value + 1
3507 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3508 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3509 }
ebd8d4e8
IC
3510}
3511
ab78acc6
IC
3512Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3513 value = +value
3514 offset = offset | 0
3515 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3516 if (Buffer.TYPED_ARRAY_SUPPORT) {
3517 this[offset + 3] = (value >>> 24)
3518 this[offset + 2] = (value >>> 16)
3519 this[offset + 1] = (value >>> 8)
3520 this[offset] = value
3521 } else {
3522 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3523 }
ab78acc6 3524 return offset + 4
ebd8d4e8
IC
3525}
3526
ab78acc6
IC
3527Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3528 value = +value
3529 offset = offset | 0
3530 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3531 if (Buffer.TYPED_ARRAY_SUPPORT) {
3532 this[offset] = (value >>> 24)
3533 this[offset + 1] = (value >>> 16)
3534 this[offset + 2] = (value >>> 8)
3535 this[offset + 3] = value
3536 } else {
3537 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3538 }
ab78acc6
IC
3539 return offset + 4
3540}
3541
3542Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3543 value = +value
3544 offset = offset | 0
3545 if (!noAssert) {
3546 var limit = Math.pow(2, 8 * byteLength - 1)
3547
3548 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3549 }
ab78acc6
IC
3550
3551 var i = 0
3552 var mul = 1
3553 var sub = value < 0 ? 1 : 0
3554 this[offset] = value & 0xFF
3555 while (++i < byteLength && (mul *= 0x100)) {
3556 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3557 }
ebd8d4e8 3558
ab78acc6 3559 return offset + byteLength
ebd8d4e8
IC
3560}
3561
ab78acc6
IC
3562Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3563 value = +value
3564 offset = offset | 0
3565 if (!noAssert) {
3566 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3567
ab78acc6
IC
3568 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3569 }
ebd8d4e8 3570
ab78acc6
IC
3571 var i = byteLength - 1
3572 var mul = 1
3573 var sub = value < 0 ? 1 : 0
3574 this[offset + i] = value & 0xFF
3575 while (--i >= 0 && (mul *= 0x100)) {
3576 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3577 }
3578
3579 return offset + byteLength
ebd8d4e8
IC
3580}
3581
ab78acc6
IC
3582Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3583 value = +value
3584 offset = offset | 0
3585 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3586 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3587 if (value < 0) value = 0xff + value + 1
3588 this[offset] = value
3589 return offset + 1
ebd8d4e8
IC
3590}
3591
ab78acc6
IC
3592Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3593 value = +value
3594 offset = offset | 0
3595 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3596 if (Buffer.TYPED_ARRAY_SUPPORT) {
3597 this[offset] = value
3598 this[offset + 1] = (value >>> 8)
3599 } else {
3600 objectWriteUInt16(this, value, offset, true)
3601 }
3602 return offset + 2
ebd8d4e8
IC
3603}
3604
ab78acc6
IC
3605Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3606 value = +value
3607 offset = offset | 0
3608 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3609 if (Buffer.TYPED_ARRAY_SUPPORT) {
3610 this[offset] = (value >>> 8)
3611 this[offset + 1] = value
3612 } else {
3613 objectWriteUInt16(this, value, offset, false)
3614 }
3615 return offset + 2
ebd8d4e8
IC
3616}
3617
ab78acc6
IC
3618Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3619 value = +value
3620 offset = offset | 0
3621 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3622 if (Buffer.TYPED_ARRAY_SUPPORT) {
3623 this[offset] = value
3624 this[offset + 1] = (value >>> 8)
3625 this[offset + 2] = (value >>> 16)
3626 this[offset + 3] = (value >>> 24)
3627 } else {
3628 objectWriteUInt32(this, value, offset, true)
3629 }
3630 return offset + 4
3631}
3632
3633Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3634 value = +value
3635 offset = offset | 0
3636 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3637 if (value < 0) value = 0xffffffff + value + 1
3638 if (Buffer.TYPED_ARRAY_SUPPORT) {
3639 this[offset] = (value >>> 24)
3640 this[offset + 1] = (value >>> 16)
3641 this[offset + 2] = (value >>> 8)
3642 this[offset + 3] = value
3643 } else {
3644 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3645 }
ab78acc6 3646 return offset + 4
ebd8d4e8
IC
3647}
3648
ab78acc6
IC
3649function checkIEEE754 (buf, value, offset, ext, max, min) {
3650 if (value > max || value < min) throw new RangeError('value is out of bounds')
3651 if (offset + ext > buf.length) throw new RangeError('index out of range')
3652 if (offset < 0) throw new RangeError('index out of range')
3653}
ebd8d4e8 3654
ab78acc6
IC
3655function writeFloat (buf, value, offset, littleEndian, noAssert) {
3656 if (!noAssert) {
3657 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3658 }
3659 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3660 return offset + 4
3661}
ebd8d4e8 3662
ab78acc6
IC
3663Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3664 return writeFloat(this, value, offset, true, noAssert)
3665}
ebd8d4e8 3666
ab78acc6
IC
3667Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3668 return writeFloat(this, value, offset, false, noAssert)
3669}
ebd8d4e8 3670
ab78acc6
IC
3671function writeDouble (buf, value, offset, littleEndian, noAssert) {
3672 if (!noAssert) {
3673 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3674 }
ab78acc6
IC
3675 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3676 return offset + 8
ebd8d4e8
IC
3677}
3678
ab78acc6
IC
3679Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3680 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3681}
3682
ab78acc6
IC
3683Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3684 return writeDouble(this, value, offset, false, noAssert)
3685}
ebd8d4e8 3686
ab78acc6
IC
3687// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3688Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3689 if (!start) start = 0
3690 if (!end && end !== 0) end = this.length
3691 if (targetStart >= target.length) targetStart = target.length
3692 if (!targetStart) targetStart = 0
3693 if (end > 0 && end < start) end = start
3694
3695 // Copy 0 bytes; we're done
3696 if (end === start) return 0
3697 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3698
ab78acc6
IC
3699 // Fatal error conditions
3700 if (targetStart < 0) {
3701 throw new RangeError('targetStart out of bounds')
3702 }
3703 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3704 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3705
ab78acc6
IC
3706 // Are we oob?
3707 if (end > this.length) end = this.length
3708 if (target.length - targetStart < end - start) {
3709 end = target.length - targetStart + start
3710 }
ebd8d4e8 3711
ab78acc6
IC
3712 var len = end - start
3713 var i
ebd8d4e8 3714
ab78acc6
IC
3715 if (this === target && start < targetStart && targetStart < end) {
3716 // descending copy from end
3717 for (i = len - 1; i >= 0; i--) {
3718 target[i + targetStart] = this[i + start]
3719 }
3720 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3721 // ascending copy from start
3722 for (i = 0; i < len; i++) {
3723 target[i + targetStart] = this[i + start]
3724 }
3725 } else {
3726 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3727 }
ebd8d4e8 3728
ab78acc6
IC
3729 return len
3730}
ebd8d4e8 3731
ab78acc6
IC
3732// fill(value, start=0, end=buffer.length)
3733Buffer.prototype.fill = function fill (value, start, end) {
3734 if (!value) value = 0
3735 if (!start) start = 0
3736 if (!end) end = this.length
ebd8d4e8 3737
ab78acc6 3738 if (end < start) throw new RangeError('end < start')
ebd8d4e8 3739
ab78acc6
IC
3740 // Fill 0 bytes; we're done
3741 if (end === start) return
3742 if (this.length === 0) return
ebd8d4e8 3743
ab78acc6
IC
3744 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3745 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 3746
ab78acc6
IC
3747 var i
3748 if (typeof value === 'number') {
3749 for (i = start; i < end; i++) {
3750 this[i] = value
ebd8d4e8 3751 }
ab78acc6
IC
3752 } else {
3753 var bytes = utf8ToBytes(value.toString())
3754 var len = bytes.length
3755 for (i = start; i < end; i++) {
3756 this[i] = bytes[i % len]
ebd8d4e8
IC
3757 }
3758 }
ebd8d4e8 3759
ab78acc6 3760 return this
ebd8d4e8
IC
3761}
3762
ab78acc6
IC
3763/**
3764 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3765 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3766 */
3767Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3768 if (typeof Uint8Array !== 'undefined') {
3769 if (Buffer.TYPED_ARRAY_SUPPORT) {
3770 return (new Buffer(this)).buffer
3771 } else {
3772 var buf = new Uint8Array(this.length)
3773 for (var i = 0, len = buf.length; i < len; i += 1) {
3774 buf[i] = this[i]
ebd8d4e8 3775 }
ab78acc6 3776 return buf.buffer
ebd8d4e8 3777 }
ab78acc6
IC
3778 } else {
3779 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 3780 }
ebd8d4e8
IC
3781}
3782
ab78acc6
IC
3783// HELPER FUNCTIONS
3784// ================
ebd8d4e8 3785
ab78acc6 3786var BP = Buffer.prototype
ebd8d4e8 3787
ab78acc6
IC
3788/**
3789 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3790 */
3791Buffer._augment = function _augment (arr) {
3792 arr.constructor = Buffer
3793 arr._isBuffer = true
ebd8d4e8 3794
ab78acc6
IC
3795 // save reference to original Uint8Array set method before overwriting
3796 arr._set = arr.set
ebd8d4e8 3797
ab78acc6
IC
3798 // deprecated
3799 arr.get = BP.get
3800 arr.set = BP.set
ebd8d4e8 3801
ab78acc6
IC
3802 arr.write = BP.write
3803 arr.toString = BP.toString
3804 arr.toLocaleString = BP.toString
3805 arr.toJSON = BP.toJSON
3806 arr.equals = BP.equals
3807 arr.compare = BP.compare
3808 arr.indexOf = BP.indexOf
3809 arr.copy = BP.copy
3810 arr.slice = BP.slice
3811 arr.readUIntLE = BP.readUIntLE
3812 arr.readUIntBE = BP.readUIntBE
3813 arr.readUInt8 = BP.readUInt8
3814 arr.readUInt16LE = BP.readUInt16LE
3815 arr.readUInt16BE = BP.readUInt16BE
3816 arr.readUInt32LE = BP.readUInt32LE
3817 arr.readUInt32BE = BP.readUInt32BE
3818 arr.readIntLE = BP.readIntLE
3819 arr.readIntBE = BP.readIntBE
3820 arr.readInt8 = BP.readInt8
3821 arr.readInt16LE = BP.readInt16LE
3822 arr.readInt16BE = BP.readInt16BE
3823 arr.readInt32LE = BP.readInt32LE
3824 arr.readInt32BE = BP.readInt32BE
3825 arr.readFloatLE = BP.readFloatLE
3826 arr.readFloatBE = BP.readFloatBE
3827 arr.readDoubleLE = BP.readDoubleLE
3828 arr.readDoubleBE = BP.readDoubleBE
3829 arr.writeUInt8 = BP.writeUInt8
3830 arr.writeUIntLE = BP.writeUIntLE
3831 arr.writeUIntBE = BP.writeUIntBE
3832 arr.writeUInt16LE = BP.writeUInt16LE
3833 arr.writeUInt16BE = BP.writeUInt16BE
3834 arr.writeUInt32LE = BP.writeUInt32LE
3835 arr.writeUInt32BE = BP.writeUInt32BE
3836 arr.writeIntLE = BP.writeIntLE
3837 arr.writeIntBE = BP.writeIntBE
3838 arr.writeInt8 = BP.writeInt8
3839 arr.writeInt16LE = BP.writeInt16LE
3840 arr.writeInt16BE = BP.writeInt16BE
3841 arr.writeInt32LE = BP.writeInt32LE
3842 arr.writeInt32BE = BP.writeInt32BE
3843 arr.writeFloatLE = BP.writeFloatLE
3844 arr.writeFloatBE = BP.writeFloatBE
3845 arr.writeDoubleLE = BP.writeDoubleLE
3846 arr.writeDoubleBE = BP.writeDoubleBE
3847 arr.fill = BP.fill
3848 arr.inspect = BP.inspect
3849 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 3850
ab78acc6 3851 return arr
ebd8d4e8
IC
3852}
3853
ab78acc6 3854var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 3855
ab78acc6
IC
3856function base64clean (str) {
3857 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3858 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3859 // Node converts strings with length < 2 to ''
3860 if (str.length < 2) return ''
3861 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3862 while (str.length % 4 !== 0) {
3863 str = str + '='
3864 }
3865 return str
ebd8d4e8
IC
3866}
3867
ab78acc6
IC
3868function stringtrim (str) {
3869 if (str.trim) return str.trim()
3870 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
3871}
3872
ab78acc6
IC
3873function toHex (n) {
3874 if (n < 16) return '0' + n.toString(16)
3875 return n.toString(16)
ebd8d4e8
IC
3876}
3877
ab78acc6
IC
3878function utf8ToBytes (string, units) {
3879 units = units || Infinity
3880 var codePoint
3881 var length = string.length
3882 var leadSurrogate = null
3883 var bytes = []
ebd8d4e8 3884
ab78acc6
IC
3885 for (var i = 0; i < length; i++) {
3886 codePoint = string.charCodeAt(i)
ebd8d4e8 3887
ab78acc6
IC
3888 // is surrogate component
3889 if (codePoint > 0xD7FF && codePoint < 0xE000) {
3890 // last char was a lead
3891 if (!leadSurrogate) {
3892 // no lead yet
3893 if (codePoint > 0xDBFF) {
3894 // unexpected trail
3895 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3896 continue
ebd8d4e8 3897
ab78acc6
IC
3898 } else if (i + 1 === length) {
3899 // unpaired lead
3900 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3901 continue
3902 }
ebd8d4e8 3903
ab78acc6
IC
3904 // valid lead
3905 leadSurrogate = codePoint
ebd8d4e8 3906
ab78acc6
IC
3907 continue
3908 }
ebd8d4e8 3909
ab78acc6
IC
3910 // 2 leads in a row
3911 if (codePoint < 0xDC00) {
3912 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3913 leadSurrogate = codePoint
3914 continue
3915 }
ebd8d4e8 3916
ab78acc6
IC
3917 // valid surrogate pair
3918 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
3919
3920 } else if (leadSurrogate) {
3921 // valid bmp char, but last char was a lead
3922 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3923 }
3924
3925 leadSurrogate = null
3926
3927 // encode utf8
3928 if (codePoint < 0x80) {
3929 if ((units -= 1) < 0) break
3930 bytes.push(codePoint)
3931 } else if (codePoint < 0x800) {
3932 if ((units -= 2) < 0) break
3933 bytes.push(
3934 codePoint >> 0x6 | 0xC0,
3935 codePoint & 0x3F | 0x80
3936 )
3937 } else if (codePoint < 0x10000) {
3938 if ((units -= 3) < 0) break
3939 bytes.push(
3940 codePoint >> 0xC | 0xE0,
3941 codePoint >> 0x6 & 0x3F | 0x80,
3942 codePoint & 0x3F | 0x80
3943 )
3944 } else if (codePoint < 0x110000) {
3945 if ((units -= 4) < 0) break
3946 bytes.push(
3947 codePoint >> 0x12 | 0xF0,
3948 codePoint >> 0xC & 0x3F | 0x80,
3949 codePoint >> 0x6 & 0x3F | 0x80,
3950 codePoint & 0x3F | 0x80
3951 )
3952 } else {
3953 throw new Error('Invalid code point')
ebd8d4e8 3954 }
ebd8d4e8 3955 }
ab78acc6
IC
3956
3957 return bytes
3958}
3959
3960function asciiToBytes (str) {
3961 var byteArray = []
3962 for (var i = 0; i < str.length; i++) {
3963 // Node's code seems to be doing this and not & 0x7F..
3964 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 3965 }
ab78acc6 3966 return byteArray
ebd8d4e8
IC
3967}
3968
ab78acc6
IC
3969function utf16leToBytes (str, units) {
3970 var c, hi, lo
3971 var byteArray = []
3972 for (var i = 0; i < str.length; i++) {
3973 if ((units -= 2) < 0) break
ebd8d4e8 3974
ab78acc6
IC
3975 c = str.charCodeAt(i)
3976 hi = c >> 8
3977 lo = c % 256
3978 byteArray.push(lo)
3979 byteArray.push(hi)
3980 }
ebd8d4e8 3981
ab78acc6
IC
3982 return byteArray
3983}
ebd8d4e8 3984
ab78acc6
IC
3985function base64ToBytes (str) {
3986 return base64.toByteArray(base64clean(str))
3987}
ebd8d4e8 3988
ab78acc6
IC
3989function blitBuffer (src, dst, offset, length) {
3990 for (var i = 0; i < length; i++) {
3991 if ((i + offset >= dst.length) || (i >= src.length)) break
3992 dst[i + offset] = src[i]
3993 }
3994 return i
3995}
3996
3997},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
3998var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3999
4000;(function (exports) {
4001 'use strict';
4002
4003 var Arr = (typeof Uint8Array !== 'undefined')
4004 ? Uint8Array
4005 : Array
ebd8d4e8 4006
ab78acc6
IC
4007 var PLUS = '+'.charCodeAt(0)
4008 var SLASH = '/'.charCodeAt(0)
4009 var NUMBER = '0'.charCodeAt(0)
4010 var LOWER = 'a'.charCodeAt(0)
4011 var UPPER = 'A'.charCodeAt(0)
4012 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4013 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4014
ab78acc6
IC
4015 function decode (elt) {
4016 var code = elt.charCodeAt(0)
4017 if (code === PLUS ||
4018 code === PLUS_URL_SAFE)
4019 return 62 // '+'
4020 if (code === SLASH ||
4021 code === SLASH_URL_SAFE)
4022 return 63 // '/'
4023 if (code < NUMBER)
4024 return -1 //no match
4025 if (code < NUMBER + 10)
4026 return code - NUMBER + 26 + 26
4027 if (code < UPPER + 26)
4028 return code - UPPER
4029 if (code < LOWER + 26)
4030 return code - LOWER + 26
4031 }
ebd8d4e8 4032
ab78acc6
IC
4033 function b64ToByteArray (b64) {
4034 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4035
ab78acc6
IC
4036 if (b64.length % 4 > 0) {
4037 throw new Error('Invalid string. Length must be a multiple of 4')
4038 }
ebd8d4e8 4039
ab78acc6
IC
4040 // the number of equal signs (place holders)
4041 // if there are two placeholders, than the two characters before it
4042 // represent one byte
4043 // if there is only one, then the three characters before it represent 2 bytes
4044 // this is just a cheap hack to not do indexOf twice
4045 var len = b64.length
4046 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4047
ab78acc6
IC
4048 // base64 is 4/3 + up to two characters of the original data
4049 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4050
ab78acc6
IC
4051 // if there are placeholders, only get up to the last complete 4 chars
4052 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4053
ab78acc6 4054 var L = 0
ebd8d4e8 4055
ab78acc6
IC
4056 function push (v) {
4057 arr[L++] = v
4058 }
ebd8d4e8 4059
ab78acc6
IC
4060 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4061 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4062 push((tmp & 0xFF0000) >> 16)
4063 push((tmp & 0xFF00) >> 8)
4064 push(tmp & 0xFF)
4065 }
ebd8d4e8 4066
ab78acc6
IC
4067 if (placeHolders === 2) {
4068 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4069 push(tmp & 0xFF)
4070 } else if (placeHolders === 1) {
4071 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4072 push((tmp >> 8) & 0xFF)
4073 push(tmp & 0xFF)
4074 }
ebd8d4e8 4075
ab78acc6
IC
4076 return arr
4077 }
ebd8d4e8 4078
ab78acc6
IC
4079 function uint8ToBase64 (uint8) {
4080 var i,
4081 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4082 output = "",
4083 temp, length
ebd8d4e8 4084
ab78acc6
IC
4085 function encode (num) {
4086 return lookup.charAt(num)
4087 }
ebd8d4e8 4088
ab78acc6
IC
4089 function tripletToBase64 (num) {
4090 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4091 }
ebd8d4e8 4092
ab78acc6
IC
4093 // go through the array every three bytes, we'll deal with trailing stuff later
4094 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4095 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4096 output += tripletToBase64(temp)
4097 }
ebd8d4e8 4098
ab78acc6
IC
4099 // pad the end with zeros, but make sure to not forget the extra bytes
4100 switch (extraBytes) {
4101 case 1:
4102 temp = uint8[uint8.length - 1]
4103 output += encode(temp >> 2)
4104 output += encode((temp << 4) & 0x3F)
4105 output += '=='
4106 break
4107 case 2:
4108 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4109 output += encode(temp >> 10)
4110 output += encode((temp >> 4) & 0x3F)
4111 output += encode((temp << 2) & 0x3F)
4112 output += '='
4113 break
4114 }
ebd8d4e8 4115
ab78acc6
IC
4116 return output
4117 }
ebd8d4e8 4118
ab78acc6
IC
4119 exports.toByteArray = b64ToByteArray
4120 exports.fromByteArray = uint8ToBase64
4121}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4122
ab78acc6
IC
4123},{}],9:[function(require,module,exports){
4124exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4125 var e, m
4126 var eLen = nBytes * 8 - mLen - 1
4127 var eMax = (1 << eLen) - 1
4128 var eBias = eMax >> 1
4129 var nBits = -7
4130 var i = isLE ? (nBytes - 1) : 0
4131 var d = isLE ? -1 : 1
4132 var s = buffer[offset + i]
4133
4134 i += d
4135
4136 e = s & ((1 << (-nBits)) - 1)
4137 s >>= (-nBits)
4138 nBits += eLen
4139 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4140
4141 m = e & ((1 << (-nBits)) - 1)
4142 e >>= (-nBits)
4143 nBits += mLen
4144 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4145
ab78acc6
IC
4146 if (e === 0) {
4147 e = 1 - eBias
4148 } else if (e === eMax) {
4149 return m ? NaN : ((s ? -1 : 1) * Infinity)
4150 } else {
4151 m = m + Math.pow(2, mLen)
4152 e = e - eBias
ebd8d4e8 4153 }
ab78acc6 4154 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4155}
4156
ab78acc6
IC
4157exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4158 var e, m, c
4159 var eLen = nBytes * 8 - mLen - 1
4160 var eMax = (1 << eLen) - 1
4161 var eBias = eMax >> 1
4162 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4163 var i = isLE ? 0 : (nBytes - 1)
4164 var d = isLE ? 1 : -1
4165 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4166
ab78acc6 4167 value = Math.abs(value)
ebd8d4e8 4168
ab78acc6
IC
4169 if (isNaN(value) || value === Infinity) {
4170 m = isNaN(value) ? 1 : 0
4171 e = eMax
4172 } else {
4173 e = Math.floor(Math.log(value) / Math.LN2)
4174 if (value * (c = Math.pow(2, -e)) < 1) {
4175 e--
4176 c *= 2
ebd8d4e8 4177 }
ab78acc6
IC
4178 if (e + eBias >= 1) {
4179 value += rt / c
4180 } else {
4181 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4182 }
ab78acc6
IC
4183 if (value * c >= 2) {
4184 e++
4185 c /= 2
ebd8d4e8 4186 }
ab78acc6
IC
4187
4188 if (e + eBias >= eMax) {
4189 m = 0
4190 e = eMax
4191 } else if (e + eBias >= 1) {
4192 m = (value * c - 1) * Math.pow(2, mLen)
4193 e = e + eBias
4194 } else {
4195 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4196 e = 0
ebd8d4e8
IC
4197 }
4198 }
ebd8d4e8 4199
ab78acc6 4200 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4201
ab78acc6
IC
4202 e = (e << mLen) | m
4203 eLen += mLen
4204 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4205
ab78acc6
IC
4206 buffer[offset + i - d] |= s * 128
4207}
ebd8d4e8 4208
ab78acc6 4209},{}],10:[function(require,module,exports){
ebd8d4e8 4210
ab78acc6
IC
4211/**
4212 * isArray
4213 */
ebd8d4e8 4214
ab78acc6 4215var isArray = Array.isArray;
ebd8d4e8
IC
4216
4217/**
ab78acc6 4218 * toString
ebd8d4e8 4219 */
ebd8d4e8 4220
ab78acc6 4221var str = Object.prototype.toString;
ebd8d4e8
IC
4222
4223/**
ab78acc6
IC
4224 * Whether or not the given `val`
4225 * is an array.
ebd8d4e8 4226 *
ab78acc6
IC
4227 * example:
4228 *
4229 * isArray([]);
4230 * // > true
4231 * isArray(arguments);
4232 * // > false
4233 * isArray('');
4234 * // > false
4235 *
4236 * @param {mixed} val
4237 * @return {bool}
ebd8d4e8 4238 */
ebd8d4e8 4239
ab78acc6
IC
4240module.exports = isArray || function (val) {
4241 return !! val && '[object Array]' == str.call(val);
4242};
4243
4244},{}],11:[function(require,module,exports){
4245// Copyright Joyent, Inc. and other Node contributors.
4246//
4247// Permission is hereby granted, free of charge, to any person obtaining a
4248// copy of this software and associated documentation files (the
4249// "Software"), to deal in the Software without restriction, including
4250// without limitation the rights to use, copy, modify, merge, publish,
4251// distribute, sublicense, and/or sell copies of the Software, and to permit
4252// persons to whom the Software is furnished to do so, subject to the
4253// following conditions:
4254//
4255// The above copyright notice and this permission notice shall be included
4256// in all copies or substantial portions of the Software.
4257//
4258// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4259// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4260// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4261// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4262// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4263// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4264// USE OR OTHER DEALINGS IN THE SOFTWARE.
4265
4266function EventEmitter() {
4267 this._events = this._events || {};
4268 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4269}
ab78acc6 4270module.exports = EventEmitter;
ebd8d4e8 4271
ab78acc6
IC
4272// Backwards-compat with node 0.10.x
4273EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4274
ab78acc6
IC
4275EventEmitter.prototype._events = undefined;
4276EventEmitter.prototype._maxListeners = undefined;
4277
4278// By default EventEmitters will print a warning if more than 10 listeners are
4279// added to it. This is a useful default which helps finding memory leaks.
4280EventEmitter.defaultMaxListeners = 10;
4281
4282// Obviously not all Emitters should be limited to 10. This function allows
4283// that to be increased. Set to zero for unlimited.
4284EventEmitter.prototype.setMaxListeners = function(n) {
4285 if (!isNumber(n) || n < 0 || isNaN(n))
4286 throw TypeError('n must be a positive number');
4287 this._maxListeners = n;
4288 return this;
4289};
4290
4291EventEmitter.prototype.emit = function(type) {
4292 var er, handler, len, args, i, listeners;
4293
4294 if (!this._events)
4295 this._events = {};
4296
4297 // If there is no 'error' event listener then throw.
4298 if (type === 'error') {
4299 if (!this._events.error ||
4300 (isObject(this._events.error) && !this._events.error.length)) {
4301 er = arguments[1];
4302 if (er instanceof Error) {
4303 throw er; // Unhandled 'error' event
4304 }
4305 throw TypeError('Uncaught, unspecified "error" event.');
4306 }
4307 }
4308
4309 handler = this._events[type];
4310
4311 if (isUndefined(handler))
4312 return false;
4313
4314 if (isFunction(handler)) {
4315 switch (arguments.length) {
4316 // fast cases
4317 case 1:
4318 handler.call(this);
4319 break;
4320 case 2:
4321 handler.call(this, arguments[1]);
4322 break;
4323 case 3:
4324 handler.call(this, arguments[1], arguments[2]);
4325 break;
4326 // slower
4327 default:
4328 len = arguments.length;
4329 args = new Array(len - 1);
4330 for (i = 1; i < len; i++)
4331 args[i - 1] = arguments[i];
4332 handler.apply(this, args);
4333 }
4334 } else if (isObject(handler)) {
4335 len = arguments.length;
4336 args = new Array(len - 1);
4337 for (i = 1; i < len; i++)
4338 args[i - 1] = arguments[i];
ebd8d4e8 4339
ab78acc6
IC
4340 listeners = handler.slice();
4341 len = listeners.length;
4342 for (i = 0; i < len; i++)
4343 listeners[i].apply(this, args);
ebd8d4e8
IC
4344 }
4345
ab78acc6
IC
4346 return true;
4347};
ebd8d4e8 4348
ab78acc6
IC
4349EventEmitter.prototype.addListener = function(type, listener) {
4350 var m;
ebd8d4e8 4351
ab78acc6
IC
4352 if (!isFunction(listener))
4353 throw TypeError('listener must be a function');
ebd8d4e8 4354
ab78acc6
IC
4355 if (!this._events)
4356 this._events = {};
ebd8d4e8 4357
ab78acc6
IC
4358 // To avoid recursion in the case that type === "newListener"! Before
4359 // adding it to the listeners, first emit "newListener".
4360 if (this._events.newListener)
4361 this.emit('newListener', type,
4362 isFunction(listener.listener) ?
4363 listener.listener : listener);
ebd8d4e8 4364
ab78acc6
IC
4365 if (!this._events[type])
4366 // Optimize the case of one listener. Don't need the extra array object.
4367 this._events[type] = listener;
4368 else if (isObject(this._events[type]))
4369 // If we've already got an array, just append.
4370 this._events[type].push(listener);
4371 else
4372 // Adding the second element, need to change to array.
4373 this._events[type] = [this._events[type], listener];
4374
4375 // Check for listener leak
4376 if (isObject(this._events[type]) && !this._events[type].warned) {
4377 var m;
4378 if (!isUndefined(this._maxListeners)) {
4379 m = this._maxListeners;
4380 } else {
4381 m = EventEmitter.defaultMaxListeners;
4382 }
4383
4384 if (m && m > 0 && this._events[type].length > m) {
4385 this._events[type].warned = true;
4386 console.error('(node) warning: possible EventEmitter memory ' +
4387 'leak detected. %d listeners added. ' +
4388 'Use emitter.setMaxListeners() to increase limit.',
4389 this._events[type].length);
4390 if (typeof console.trace === 'function') {
4391 // not supported in IE 10
4392 console.trace();
4393 }
4394 }
4395 }
ebd8d4e8 4396
ab78acc6
IC
4397 return this;
4398};
ebd8d4e8 4399
ab78acc6 4400EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4401
ab78acc6
IC
4402EventEmitter.prototype.once = function(type, listener) {
4403 if (!isFunction(listener))
4404 throw TypeError('listener must be a function');
ebd8d4e8 4405
ab78acc6 4406 var fired = false;
ebd8d4e8 4407
ab78acc6
IC
4408 function g() {
4409 this.removeListener(type, g);
ebd8d4e8 4410
ab78acc6
IC
4411 if (!fired) {
4412 fired = true;
4413 listener.apply(this, arguments);
4414 }
4415 }
ebd8d4e8 4416
ab78acc6
IC
4417 g.listener = listener;
4418 this.on(type, g);
ebd8d4e8 4419
ab78acc6
IC
4420 return this;
4421};
ebd8d4e8 4422
ab78acc6
IC
4423// emits a 'removeListener' event iff the listener was removed
4424EventEmitter.prototype.removeListener = function(type, listener) {
4425 var list, position, length, i;
ebd8d4e8 4426
ab78acc6
IC
4427 if (!isFunction(listener))
4428 throw TypeError('listener must be a function');
ebd8d4e8 4429
ab78acc6
IC
4430 if (!this._events || !this._events[type])
4431 return this;
ebd8d4e8 4432
ab78acc6
IC
4433 list = this._events[type];
4434 length = list.length;
4435 position = -1;
4436
4437 if (list === listener ||
4438 (isFunction(list.listener) && list.listener === listener)) {
4439 delete this._events[type];
4440 if (this._events.removeListener)
4441 this.emit('removeListener', type, listener);
4442
4443 } else if (isObject(list)) {
4444 for (i = length; i-- > 0;) {
4445 if (list[i] === listener ||
4446 (list[i].listener && list[i].listener === listener)) {
4447 position = i;
4448 break;
ebd8d4e8 4449 }
ab78acc6 4450 }
ebd8d4e8 4451
ab78acc6
IC
4452 if (position < 0)
4453 return this;
4454
4455 if (list.length === 1) {
4456 list.length = 0;
4457 delete this._events[type];
4458 } else {
4459 list.splice(position, 1);
ebd8d4e8 4460 }
ab78acc6
IC
4461
4462 if (this._events.removeListener)
4463 this.emit('removeListener', type, listener);
ebd8d4e8 4464 }
ab78acc6
IC
4465
4466 return this;
ebd8d4e8
IC
4467};
4468
ab78acc6
IC
4469EventEmitter.prototype.removeAllListeners = function(type) {
4470 var key, listeners;
ebd8d4e8 4471
ab78acc6
IC
4472 if (!this._events)
4473 return this;
4474
4475 // not listening for removeListener, no need to emit
4476 if (!this._events.removeListener) {
4477 if (arguments.length === 0)
4478 this._events = {};
4479 else if (this._events[type])
4480 delete this._events[type];
4481 return this;
ebd8d4e8 4482 }
ab78acc6
IC
4483
4484 // emit removeListener for all listeners on all events
4485 if (arguments.length === 0) {
4486 for (key in this._events) {
4487 if (key === 'removeListener') continue;
4488 this.removeAllListeners(key);
4489 }
4490 this.removeAllListeners('removeListener');
4491 this._events = {};
4492 return this;
ebd8d4e8 4493 }
ebd8d4e8 4494
ab78acc6
IC
4495 listeners = this._events[type];
4496
4497 if (isFunction(listeners)) {
4498 this.removeListener(type, listeners);
ebd8d4e8 4499 } else {
ab78acc6
IC
4500 // LIFO order
4501 while (listeners.length)
4502 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4503 }
ab78acc6 4504 delete this._events[type];
ebd8d4e8 4505
ab78acc6
IC
4506 return this;
4507};
ebd8d4e8 4508
ab78acc6
IC
4509EventEmitter.prototype.listeners = function(type) {
4510 var ret;
4511 if (!this._events || !this._events[type])
4512 ret = [];
4513 else if (isFunction(this._events[type]))
4514 ret = [this._events[type]];
4515 else
4516 ret = this._events[type].slice();
4517 return ret;
4518};
ebd8d4e8 4519
ab78acc6
IC
4520EventEmitter.listenerCount = function(emitter, type) {
4521 var ret;
4522 if (!emitter._events || !emitter._events[type])
4523 ret = 0;
4524 else if (isFunction(emitter._events[type]))
4525 ret = 1;
4526 else
4527 ret = emitter._events[type].length;
4528 return ret;
4529};
ebd8d4e8 4530
ab78acc6
IC
4531function isFunction(arg) {
4532 return typeof arg === 'function';
ebd8d4e8
IC
4533}
4534
ab78acc6
IC
4535function isNumber(arg) {
4536 return typeof arg === 'number';
4537}
ebd8d4e8 4538
ab78acc6
IC
4539function isObject(arg) {
4540 return typeof arg === 'object' && arg !== null;
4541}
ebd8d4e8 4542
ab78acc6
IC
4543function isUndefined(arg) {
4544 return arg === void 0;
ebd8d4e8 4545}
ebd8d4e8 4546
ab78acc6
IC
4547},{}],12:[function(require,module,exports){
4548if (typeof Object.create === 'function') {
4549 // implementation from standard node.js 'util' module
4550 module.exports = function inherits(ctor, superCtor) {
4551 ctor.super_ = superCtor
4552 ctor.prototype = Object.create(superCtor.prototype, {
4553 constructor: {
4554 value: ctor,
4555 enumerable: false,
4556 writable: true,
4557 configurable: true
4558 }
4559 });
4560 };
4561} else {
4562 // old school shim for old browsers
4563 module.exports = function inherits(ctor, superCtor) {
4564 ctor.super_ = superCtor
4565 var TempCtor = function () {}
4566 TempCtor.prototype = superCtor.prototype
4567 ctor.prototype = new TempCtor()
4568 ctor.prototype.constructor = ctor
4569 }
4570}
ebd8d4e8 4571
ab78acc6
IC
4572},{}],13:[function(require,module,exports){
4573module.exports = Array.isArray || function (arr) {
4574 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4575};
4576
ab78acc6
IC
4577},{}],14:[function(require,module,exports){
4578// shim for using process in browser
ebd8d4e8 4579
ab78acc6
IC
4580var process = module.exports = {};
4581var queue = [];
4582var draining = false;
4583var currentQueue;
4584var queueIndex = -1;
4585
4586function cleanUpNextTick() {
4587 draining = false;
4588 if (currentQueue.length) {
4589 queue = currentQueue.concat(queue);
4590 } else {
4591 queueIndex = -1;
4592 }
4593 if (queue.length) {
4594 drainQueue();
4595 }
4596}
ebd8d4e8 4597
ab78acc6
IC
4598function drainQueue() {
4599 if (draining) {
4600 return;
4601 }
4602 var timeout = setTimeout(cleanUpNextTick);
4603 draining = true;
ebd8d4e8 4604
ab78acc6
IC
4605 var len = queue.length;
4606 while(len) {
4607 currentQueue = queue;
4608 queue = [];
4609 while (++queueIndex < len) {
4610 currentQueue[queueIndex].run();
4611 }
4612 queueIndex = -1;
4613 len = queue.length;
4614 }
4615 currentQueue = null;
4616 draining = false;
4617 clearTimeout(timeout);
4618}
4619
4620process.nextTick = function (fun) {
4621 var args = new Array(arguments.length - 1);
4622 if (arguments.length > 1) {
4623 for (var i = 1; i < arguments.length; i++) {
4624 args[i - 1] = arguments[i];
4625 }
4626 }
4627 queue.push(new Item(fun, args));
4628 if (queue.length === 1 && !draining) {
4629 setTimeout(drainQueue, 0);
4630 }
ebd8d4e8
IC
4631};
4632
ab78acc6
IC
4633// v8 likes predictible objects
4634function Item(fun, array) {
4635 this.fun = fun;
4636 this.array = array;
4637}
4638Item.prototype.run = function () {
4639 this.fun.apply(null, this.array);
4640};
4641process.title = 'browser';
4642process.browser = true;
4643process.env = {};
4644process.argv = [];
4645process.version = ''; // empty string to avoid regexp issues
4646process.versions = {};
ebd8d4e8 4647
ab78acc6
IC
4648function noop() {}
4649
4650process.on = noop;
4651process.addListener = noop;
4652process.once = noop;
4653process.off = noop;
4654process.removeListener = noop;
4655process.removeAllListeners = noop;
4656process.emit = noop;
4657
4658process.binding = function (name) {
4659 throw new Error('process.binding is not supported');
4660};
ebd8d4e8 4661
ab78acc6
IC
4662// TODO(shtylman)
4663process.cwd = function () { return '/' };
4664process.chdir = function (dir) {
4665 throw new Error('process.chdir is not supported');
4666};
4667process.umask = function() { return 0; };
ebd8d4e8 4668
ab78acc6
IC
4669},{}],15:[function(require,module,exports){
4670module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4671
ab78acc6
IC
4672},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4673(function (process){
4674// Copyright Joyent, Inc. and other Node contributors.
4675//
4676// Permission is hereby granted, free of charge, to any person obtaining a
4677// copy of this software and associated documentation files (the
4678// "Software"), to deal in the Software without restriction, including
4679// without limitation the rights to use, copy, modify, merge, publish,
4680// distribute, sublicense, and/or sell copies of the Software, and to permit
4681// persons to whom the Software is furnished to do so, subject to the
4682// following conditions:
4683//
4684// The above copyright notice and this permission notice shall be included
4685// in all copies or substantial portions of the Software.
4686//
4687// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4688// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4689// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4690// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4691// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4692// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4693// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4694
ab78acc6
IC
4695// a duplex stream is just a stream that is both readable and writable.
4696// Since JS doesn't have multiple prototypal inheritance, this class
4697// prototypally inherits from Readable, and then parasitically from
4698// Writable.
ebd8d4e8 4699
ab78acc6 4700module.exports = Duplex;
ebd8d4e8 4701
ab78acc6
IC
4702/*<replacement>*/
4703var objectKeys = Object.keys || function (obj) {
4704 var keys = [];
4705 for (var key in obj) keys.push(key);
4706 return keys;
ebd8d4e8 4707}
ab78acc6 4708/*</replacement>*/
ebd8d4e8 4709
ebd8d4e8 4710
ab78acc6
IC
4711/*<replacement>*/
4712var util = require('core-util-is');
4713util.inherits = require('inherits');
4714/*</replacement>*/
ebd8d4e8 4715
ab78acc6
IC
4716var Readable = require('./_stream_readable');
4717var Writable = require('./_stream_writable');
ebd8d4e8 4718
ab78acc6 4719util.inherits(Duplex, Readable);
ebd8d4e8 4720
ab78acc6
IC
4721forEach(objectKeys(Writable.prototype), function(method) {
4722 if (!Duplex.prototype[method])
4723 Duplex.prototype[method] = Writable.prototype[method];
4724});
ebd8d4e8 4725
ab78acc6
IC
4726function Duplex(options) {
4727 if (!(this instanceof Duplex))
4728 return new Duplex(options);
ebd8d4e8 4729
ab78acc6
IC
4730 Readable.call(this, options);
4731 Writable.call(this, options);
ebd8d4e8 4732
ab78acc6
IC
4733 if (options && options.readable === false)
4734 this.readable = false;
ebd8d4e8 4735
ab78acc6
IC
4736 if (options && options.writable === false)
4737 this.writable = false;
ebd8d4e8 4738
ab78acc6
IC
4739 this.allowHalfOpen = true;
4740 if (options && options.allowHalfOpen === false)
4741 this.allowHalfOpen = false;
ebd8d4e8 4742
ab78acc6 4743 this.once('end', onend);
ebd8d4e8
IC
4744}
4745
ab78acc6
IC
4746// the no-half-open enforcer
4747function onend() {
4748 // if we allow half-open state, or if the writable side ended,
4749 // then we're ok.
4750 if (this.allowHalfOpen || this._writableState.ended)
4751 return;
ebd8d4e8 4752
ab78acc6
IC
4753 // no more data can be written.
4754 // But allow more writes to happen in this tick.
4755 process.nextTick(this.end.bind(this));
4756}
ebd8d4e8 4757
ab78acc6
IC
4758function forEach (xs, f) {
4759 for (var i = 0, l = xs.length; i < l; i++) {
4760 f(xs[i], i);
ebd8d4e8 4761 }
ab78acc6 4762}
ebd8d4e8 4763
ab78acc6
IC
4764}).call(this,require('_process'))
4765},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4766// Copyright Joyent, Inc. and other Node contributors.
4767//
4768// Permission is hereby granted, free of charge, to any person obtaining a
4769// copy of this software and associated documentation files (the
4770// "Software"), to deal in the Software without restriction, including
4771// without limitation the rights to use, copy, modify, merge, publish,
4772// distribute, sublicense, and/or sell copies of the Software, and to permit
4773// persons to whom the Software is furnished to do so, subject to the
4774// following conditions:
4775//
4776// The above copyright notice and this permission notice shall be included
4777// in all copies or substantial portions of the Software.
4778//
4779// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4780// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4781// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4782// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4783// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4784// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4785// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4786
ab78acc6
IC
4787// a passthrough stream.
4788// basically just the most minimal sort of Transform stream.
4789// Every written chunk gets output as-is.
ebd8d4e8 4790
ab78acc6 4791module.exports = PassThrough;
ebd8d4e8 4792
ab78acc6 4793var Transform = require('./_stream_transform');
ebd8d4e8 4794
ab78acc6
IC
4795/*<replacement>*/
4796var util = require('core-util-is');
4797util.inherits = require('inherits');
4798/*</replacement>*/
ebd8d4e8 4799
ab78acc6 4800util.inherits(PassThrough, Transform);
ebd8d4e8 4801
ab78acc6
IC
4802function PassThrough(options) {
4803 if (!(this instanceof PassThrough))
4804 return new PassThrough(options);
ebd8d4e8 4805
ab78acc6
IC
4806 Transform.call(this, options);
4807}
ebd8d4e8 4808
ab78acc6
IC
4809PassThrough.prototype._transform = function(chunk, encoding, cb) {
4810 cb(null, chunk);
ebd8d4e8
IC
4811};
4812
ab78acc6
IC
4813},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
4814(function (process){
ebd8d4e8
IC
4815// Copyright Joyent, Inc. and other Node contributors.
4816//
4817// Permission is hereby granted, free of charge, to any person obtaining a
4818// copy of this software and associated documentation files (the
4819// "Software"), to deal in the Software without restriction, including
4820// without limitation the rights to use, copy, modify, merge, publish,
4821// distribute, sublicense, and/or sell copies of the Software, and to permit
4822// persons to whom the Software is furnished to do so, subject to the
4823// following conditions:
4824//
4825// The above copyright notice and this permission notice shall be included
4826// in all copies or substantial portions of the Software.
4827//
4828// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4829// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4830// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4831// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4832// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4833// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4834// USE OR OTHER DEALINGS IN THE SOFTWARE.
4835
ab78acc6 4836module.exports = Readable;
ebd8d4e8 4837
ab78acc6
IC
4838/*<replacement>*/
4839var isArray = require('isarray');
4840/*</replacement>*/
4841
4842
4843/*<replacement>*/
4844var Buffer = require('buffer').Buffer;
4845/*</replacement>*/
4846
4847Readable.ReadableState = ReadableState;
4848
4849var EE = require('events').EventEmitter;
4850
4851/*<replacement>*/
4852if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4853 return emitter.listeners(type).length;
ebd8d4e8 4854};
ab78acc6
IC
4855/*</replacement>*/
4856
4857var Stream = require('stream');
4858
4859/*<replacement>*/
4860var util = require('core-util-is');
4861util.inherits = require('inherits');
4862/*</replacement>*/
4863
4864var StringDecoder;
4865
4866
4867/*<replacement>*/
4868var debug = require('util');
4869if (debug && debug.debuglog) {
4870 debug = debug.debuglog('stream');
4871} else {
4872 debug = function () {};
4873}
4874/*</replacement>*/
4875
4876
4877util.inherits(Readable, Stream);
4878
4879function ReadableState(options, stream) {
4880 var Duplex = require('./_stream_duplex');
4881
4882 options = options || {};
4883
4884 // the point at which it stops calling _read() to fill the buffer
4885 // Note: 0 is a valid value, means "don't call _read preemptively ever"
4886 var hwm = options.highWaterMark;
4887 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
4888 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
4889
4890 // cast to ints.
4891 this.highWaterMark = ~~this.highWaterMark;
4892
4893 this.buffer = [];
4894 this.length = 0;
4895 this.pipes = null;
4896 this.pipesCount = 0;
4897 this.flowing = null;
4898 this.ended = false;
4899 this.endEmitted = false;
4900 this.reading = false;
ebd8d4e8 4901
ab78acc6
IC
4902 // a flag to be able to tell if the onwrite cb is called immediately,
4903 // or on a later tick. We set this to true at first, because any
4904 // actions that shouldn't happen until "later" should generally also
4905 // not happen before the first write call.
4906 this.sync = true;
ebd8d4e8 4907
ab78acc6
IC
4908 // whenever we return null, then we set a flag to say
4909 // that we're awaiting a 'readable' event emission.
4910 this.needReadable = false;
4911 this.emittedReadable = false;
4912 this.readableListening = false;
ebd8d4e8 4913
ab78acc6
IC
4914
4915 // object stream flag. Used to make read(n) ignore n and to
4916 // make all the buffer merging and length checks go away
4917 this.objectMode = !!options.objectMode;
4918
4919 if (stream instanceof Duplex)
4920 this.objectMode = this.objectMode || !!options.readableObjectMode;
4921
4922 // Crypto is kind of old and crusty. Historically, its default string
4923 // encoding is 'binary' so we have to make this configurable.
4924 // Everything else in the universe uses 'utf8', though.
4925 this.defaultEncoding = options.defaultEncoding || 'utf8';
4926
4927 // when piping, we only care about 'readable' events that happen
4928 // after read()ing all the bytes and not getting any pushback.
4929 this.ranOut = false;
4930
4931 // the number of writers that are awaiting a drain event in .pipe()s
4932 this.awaitDrain = 0;
4933
4934 // if true, a maybeReadMore has been scheduled
4935 this.readingMore = false;
4936
4937 this.decoder = null;
4938 this.encoding = null;
4939 if (options.encoding) {
4940 if (!StringDecoder)
4941 StringDecoder = require('string_decoder/').StringDecoder;
4942 this.decoder = new StringDecoder(options.encoding);
4943 this.encoding = options.encoding;
ebd8d4e8 4944 }
ab78acc6 4945}
ebd8d4e8 4946
ab78acc6
IC
4947function Readable(options) {
4948 var Duplex = require('./_stream_duplex');
4949
4950 if (!(this instanceof Readable))
4951 return new Readable(options);
4952
4953 this._readableState = new ReadableState(options, this);
4954
4955 // legacy
4956 this.readable = true;
4957
4958 Stream.call(this);
4959}
4960
4961// Manually shove something into the read() buffer.
4962// This returns true if the highWaterMark has not been hit yet,
4963// similar to how Writable.write() returns true if you should
4964// write() some more.
4965Readable.prototype.push = function(chunk, encoding) {
4966 var state = this._readableState;
4967
4968 if (util.isString(chunk) && !state.objectMode) {
4969 encoding = encoding || state.defaultEncoding;
4970 if (encoding !== state.encoding) {
4971 chunk = new Buffer(chunk, encoding);
4972 encoding = '';
ebd8d4e8 4973 }
ebd8d4e8
IC
4974 }
4975
ab78acc6 4976 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
4977};
4978
ab78acc6
IC
4979// Unshift should *always* be something directly out of read()
4980Readable.prototype.unshift = function(chunk) {
4981 var state = this._readableState;
4982 return readableAddChunk(this, state, chunk, '', true);
4983};
ebd8d4e8 4984
ab78acc6
IC
4985function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4986 var er = chunkInvalid(state, chunk);
4987 if (er) {
4988 stream.emit('error', er);
4989 } else if (util.isNullOrUndefined(chunk)) {
4990 state.reading = false;
4991 if (!state.ended)
4992 onEofChunk(stream, state);
4993 } else if (state.objectMode || chunk && chunk.length > 0) {
4994 if (state.ended && !addToFront) {
4995 var e = new Error('stream.push() after EOF');
4996 stream.emit('error', e);
4997 } else if (state.endEmitted && addToFront) {
4998 var e = new Error('stream.unshift() after end event');
4999 stream.emit('error', e);
ebd8d4e8 5000 } else {
ab78acc6
IC
5001 if (state.decoder && !addToFront && !encoding)
5002 chunk = state.decoder.write(chunk);
5003
5004 if (!addToFront)
5005 state.reading = false;
5006
5007 // if we want the data now, just emit it.
5008 if (state.flowing && state.length === 0 && !state.sync) {
5009 stream.emit('data', chunk);
5010 stream.read(0);
5011 } else {
5012 // update the buffer info.
5013 state.length += state.objectMode ? 1 : chunk.length;
5014 if (addToFront)
5015 state.buffer.unshift(chunk);
5016 else
5017 state.buffer.push(chunk);
5018
5019 if (state.needReadable)
5020 emitReadable(stream);
5021 }
5022
5023 maybeReadMore(stream, state);
ebd8d4e8 5024 }
ab78acc6
IC
5025 } else if (!addToFront) {
5026 state.reading = false;
ebd8d4e8 5027 }
ebd8d4e8 5028
ab78acc6
IC
5029 return needMoreData(state);
5030}
ebd8d4e8 5031
ab78acc6
IC
5032
5033
5034// if it's past the high water mark, we can push in some more.
5035// Also, if we have no data yet, we can stand some
5036// more bytes. This is to work around cases where hwm=0,
5037// such as the repl. Also, if the push() triggered a
5038// readable event, and the user called read(largeNumber) such that
5039// needReadable was set, then we ought to push more, so that another
5040// 'readable' event will be triggered.
5041function needMoreData(state) {
5042 return !state.ended &&
5043 (state.needReadable ||
5044 state.length < state.highWaterMark ||
5045 state.length === 0);
5046}
5047
5048// backwards compatibility.
5049Readable.prototype.setEncoding = function(enc) {
5050 if (!StringDecoder)
5051 StringDecoder = require('string_decoder/').StringDecoder;
5052 this._readableState.decoder = new StringDecoder(enc);
5053 this._readableState.encoding = enc;
5054 return this;
5055};
5056
5057// Don't raise the hwm > 128MB
5058var MAX_HWM = 0x800000;
5059function roundUpToNextPowerOf2(n) {
5060 if (n >= MAX_HWM) {
5061 n = MAX_HWM;
5062 } else {
5063 // Get the next highest power of 2
5064 n--;
5065 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5066 n++;
ebd8d4e8 5067 }
ab78acc6 5068 return n;
ebd8d4e8 5069}
ebd8d4e8 5070
ab78acc6
IC
5071function howMuchToRead(n, state) {
5072 if (state.length === 0 && state.ended)
5073 return 0;
ebd8d4e8 5074
ab78acc6
IC
5075 if (state.objectMode)
5076 return n === 0 ? 0 : 1;
ebd8d4e8 5077
ab78acc6
IC
5078 if (isNaN(n) || util.isNull(n)) {
5079 // only flow one buffer at a time
5080 if (state.flowing && state.buffer.length)
5081 return state.buffer[0].length;
5082 else
5083 return state.length;
5084 }
ebd8d4e8 5085
ab78acc6
IC
5086 if (n <= 0)
5087 return 0;
ebd8d4e8 5088
ab78acc6
IC
5089 // If we're asking for more than the target buffer level,
5090 // then raise the water mark. Bump up to the next highest
5091 // power of 2, to prevent increasing it excessively in tiny
5092 // amounts.
5093 if (n > state.highWaterMark)
5094 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5095
ab78acc6
IC
5096 // don't have that much. return null, unless we've ended.
5097 if (n > state.length) {
5098 if (!state.ended) {
5099 state.needReadable = true;
5100 return 0;
5101 } else
5102 return state.length;
ebd8d4e8 5103 }
ab78acc6
IC
5104
5105 return n;
ebd8d4e8
IC
5106}
5107
ab78acc6
IC
5108// you can override either this method, or the async _read(n) below.
5109Readable.prototype.read = function(n) {
5110 debug('read', n);
5111 var state = this._readableState;
5112 var nOrig = n;
ebd8d4e8 5113
ab78acc6
IC
5114 if (!util.isNumber(n) || n > 0)
5115 state.emittedReadable = false;
5116
5117 // if we're doing read(0) to trigger a readable event, but we
5118 // already have a bunch of data in the buffer, then just trigger
5119 // the 'readable' event and move on.
5120 if (n === 0 &&
5121 state.needReadable &&
5122 (state.length >= state.highWaterMark || state.ended)) {
5123 debug('read: emitReadable', state.length, state.ended);
5124 if (state.length === 0 && state.ended)
5125 endReadable(this);
5126 else
5127 emitReadable(this);
5128 return null;
5129 }
5130
5131 n = howMuchToRead(n, state);
5132
5133 // if we've ended, and we're now clear, then finish it up.
5134 if (n === 0 && state.ended) {
5135 if (state.length === 0)
5136 endReadable(this);
5137 return null;
5138 }
5139
5140 // All the actual chunk generation logic needs to be
5141 // *below* the call to _read. The reason is that in certain
5142 // synthetic stream cases, such as passthrough streams, _read
5143 // may be a completely synchronous operation which may change
5144 // the state of the read buffer, providing enough data when
5145 // before there was *not* enough.
5146 //
5147 // So, the steps are:
5148 // 1. Figure out what the state of things will be after we do
5149 // a read from the buffer.
5150 //
5151 // 2. If that resulting state will trigger a _read, then call _read.
5152 // Note that this may be asynchronous, or synchronous. Yes, it is
5153 // deeply ugly to write APIs this way, but that still doesn't mean
5154 // that the Readable class should behave improperly, as streams are
5155 // designed to be sync/async agnostic.
5156 // Take note if the _read call is sync or async (ie, if the read call
5157 // has returned yet), so that we know whether or not it's safe to emit
5158 // 'readable' etc.
5159 //
5160 // 3. Actually pull the requested chunks out of the buffer and return.
5161
5162 // if we need a readable event, then we need to do some reading.
5163 var doRead = state.needReadable;
5164 debug('need readable', doRead);
5165
5166 // if we currently have less than the highWaterMark, then also read some
5167 if (state.length === 0 || state.length - n < state.highWaterMark) {
5168 doRead = true;
5169 debug('length less than watermark', doRead);
5170 }
5171
5172 // however, if we've ended, then there's no point, and if we're already
5173 // reading, then it's unnecessary.
5174 if (state.ended || state.reading) {
5175 doRead = false;
5176 debug('reading or ended', doRead);
5177 }
5178
5179 if (doRead) {
5180 debug('do read');
5181 state.reading = true;
5182 state.sync = true;
5183 // if the length is currently zero, then we *need* a readable event.
5184 if (state.length === 0)
5185 state.needReadable = true;
5186 // call internal read method
5187 this._read(state.highWaterMark);
5188 state.sync = false;
5189 }
5190
5191 // If _read pushed data synchronously, then `reading` will be false,
5192 // and we need to re-evaluate how much data we can return to the user.
5193 if (doRead && !state.reading)
5194 n = howMuchToRead(nOrig, state);
5195
5196 var ret;
5197 if (n > 0)
5198 ret = fromList(n, state);
5199 else
5200 ret = null;
ebd8d4e8 5201
ab78acc6
IC
5202 if (util.isNull(ret)) {
5203 state.needReadable = true;
5204 n = 0;
5205 }
ebd8d4e8 5206
ab78acc6 5207 state.length -= n;
ebd8d4e8 5208
ab78acc6
IC
5209 // If we have nothing in the buffer, then we want to know
5210 // as soon as we *do* get something into the buffer.
5211 if (state.length === 0 && !state.ended)
5212 state.needReadable = true;
ebd8d4e8 5213
ab78acc6
IC
5214 // If we tried to read() past the EOF, then emit end on the next tick.
5215 if (nOrig !== n && state.ended && state.length === 0)
5216 endReadable(this);
5217
5218 if (!util.isNull(ret))
5219 this.emit('data', ret);
5220
5221 return ret;
5222};
5223
5224function chunkInvalid(state, chunk) {
5225 var er = null;
5226 if (!util.isBuffer(chunk) &&
5227 !util.isString(chunk) &&
5228 !util.isNullOrUndefined(chunk) &&
5229 !state.objectMode) {
5230 er = new TypeError('Invalid non-string/buffer chunk');
5231 }
5232 return er;
ebd8d4e8
IC
5233}
5234
5235
ab78acc6
IC
5236function onEofChunk(stream, state) {
5237 if (state.decoder && !state.ended) {
5238 var chunk = state.decoder.end();
5239 if (chunk && chunk.length) {
5240 state.buffer.push(chunk);
5241 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5242 }
ebd8d4e8 5243 }
ab78acc6 5244 state.ended = true;
ebd8d4e8 5245
ab78acc6
IC
5246 // emit 'readable' now to make sure it gets picked up.
5247 emitReadable(stream);
5248}
5249
5250// Don't emit readable right away in sync mode, because this can trigger
5251// another read() call => stack overflow. This way, it might trigger
5252// a nextTick recursion warning, but that's not so bad.
5253function emitReadable(stream) {
5254 var state = stream._readableState;
5255 state.needReadable = false;
5256 if (!state.emittedReadable) {
5257 debug('emitReadable', state.flowing);
5258 state.emittedReadable = true;
5259 if (state.sync)
5260 process.nextTick(function() {
5261 emitReadable_(stream);
5262 });
5263 else
5264 emitReadable_(stream);
ebd8d4e8 5265 }
ab78acc6 5266}
ebd8d4e8 5267
ab78acc6
IC
5268function emitReadable_(stream) {
5269 debug('emit readable');
5270 stream.emit('readable');
5271 flow(stream);
5272}
ebd8d4e8 5273
ab78acc6
IC
5274
5275// at this point, the user has presumably seen the 'readable' event,
5276// and called read() to consume some data. that may have triggered
5277// in turn another _read(n) call, in which case reading = true if
5278// it's in progress.
5279// However, if we're not ended, or reading, and the length < hwm,
5280// then go ahead and try to read some more preemptively.
5281function maybeReadMore(stream, state) {
5282 if (!state.readingMore) {
5283 state.readingMore = true;
5284 process.nextTick(function() {
5285 maybeReadMore_(stream, state);
5286 });
ebd8d4e8 5287 }
ab78acc6 5288}
ebd8d4e8 5289
ab78acc6
IC
5290function maybeReadMore_(stream, state) {
5291 var len = state.length;
5292 while (!state.reading && !state.flowing && !state.ended &&
5293 state.length < state.highWaterMark) {
5294 debug('maybeReadMore read 0');
5295 stream.read(0);
5296 if (len === state.length)
5297 // didn't get any data, stop spinning.
5298 break;
5299 else
5300 len = state.length;
ebd8d4e8 5301 }
ab78acc6
IC
5302 state.readingMore = false;
5303}
ebd8d4e8 5304
ab78acc6
IC
5305// abstract method. to be overridden in specific implementation classes.
5306// call cb(er, data) where data is <= n in length.
5307// for virtual (non-string, non-buffer) streams, "length" is somewhat
5308// arbitrary, and perhaps not very meaningful.
5309Readable.prototype._read = function(n) {
5310 this.emit('error', new Error('not implemented'));
5311};
5312
5313Readable.prototype.pipe = function(dest, pipeOpts) {
5314 var src = this;
5315 var state = this._readableState;
5316
5317 switch (state.pipesCount) {
5318 case 0:
5319 state.pipes = dest;
5320 break;
5321 case 1:
5322 state.pipes = [state.pipes, dest];
5323 break;
5324 default:
5325 state.pipes.push(dest);
5326 break;
ebd8d4e8 5327 }
ab78acc6
IC
5328 state.pipesCount += 1;
5329 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5330
ab78acc6
IC
5331 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5332 dest !== process.stdout &&
5333 dest !== process.stderr;
ebd8d4e8 5334
ab78acc6
IC
5335 var endFn = doEnd ? onend : cleanup;
5336 if (state.endEmitted)
5337 process.nextTick(endFn);
5338 else
5339 src.once('end', endFn);
5340
5341 dest.on('unpipe', onunpipe);
5342 function onunpipe(readable) {
5343 debug('onunpipe');
5344 if (readable === src) {
5345 cleanup();
5346 }
5347 }
5348
5349 function onend() {
5350 debug('onend');
5351 dest.end();
5352 }
5353
5354 // when the dest drains, it reduces the awaitDrain counter
5355 // on the source. This would be more elegant with a .once()
5356 // handler in flow(), but adding and removing repeatedly is
5357 // too slow.
5358 var ondrain = pipeOnDrain(src);
5359 dest.on('drain', ondrain);
5360
5361 function cleanup() {
5362 debug('cleanup');
5363 // cleanup event handlers once the pipe is broken
5364 dest.removeListener('close', onclose);
5365 dest.removeListener('finish', onfinish);
5366 dest.removeListener('drain', ondrain);
5367 dest.removeListener('error', onerror);
5368 dest.removeListener('unpipe', onunpipe);
5369 src.removeListener('end', onend);
5370 src.removeListener('end', cleanup);
5371 src.removeListener('data', ondata);
5372
5373 // if the reader is waiting for a drain event from this
5374 // specific writer, then it would cause it to never start
5375 // flowing again.
5376 // So, if this is awaiting a drain, then we just call it now.
5377 // If we don't know, then assume that we are waiting for one.
5378 if (state.awaitDrain &&
5379 (!dest._writableState || dest._writableState.needDrain))
5380 ondrain();
5381 }
5382
5383 src.on('data', ondata);
5384 function ondata(chunk) {
5385 debug('ondata');
5386 var ret = dest.write(chunk);
5387 if (false === ret) {
5388 debug('false write response, pause',
5389 src._readableState.awaitDrain);
5390 src._readableState.awaitDrain++;
5391 src.pause();
5392 }
5393 }
5394
5395 // if the dest has an error, then stop piping into it.
5396 // however, don't suppress the throwing behavior for this.
5397 function onerror(er) {
5398 debug('onerror', er);
5399 unpipe();
5400 dest.removeListener('error', onerror);
5401 if (EE.listenerCount(dest, 'error') === 0)
5402 dest.emit('error', er);
5403 }
5404 // This is a brutally ugly hack to make sure that our error handler
5405 // is attached before any userland ones. NEVER DO THIS.
5406 if (!dest._events || !dest._events.error)
5407 dest.on('error', onerror);
5408 else if (isArray(dest._events.error))
5409 dest._events.error.unshift(onerror);
5410 else
5411 dest._events.error = [onerror, dest._events.error];
5412
5413
5414
5415 // Both close and finish should trigger unpipe, but only once.
5416 function onclose() {
5417 dest.removeListener('finish', onfinish);
5418 unpipe();
ebd8d4e8 5419 }
ab78acc6
IC
5420 dest.once('close', onclose);
5421 function onfinish() {
5422 debug('onfinish');
5423 dest.removeListener('close', onclose);
5424 unpipe();
5425 }
5426 dest.once('finish', onfinish);
ebd8d4e8 5427
ab78acc6
IC
5428 function unpipe() {
5429 debug('unpipe');
5430 src.unpipe(dest);
ebd8d4e8
IC
5431 }
5432
ab78acc6
IC
5433 // tell the dest that it's being piped to
5434 dest.emit('pipe', src);
5435
5436 // start the flow if it hasn't been started already.
5437 if (!state.flowing) {
5438 debug('pipe resume');
5439 src.resume();
ebd8d4e8
IC
5440 }
5441
ab78acc6
IC
5442 return dest;
5443};
5444
5445function pipeOnDrain(src) {
5446 return function() {
5447 var state = src._readableState;
5448 debug('pipeOnDrain', state.awaitDrain);
5449 if (state.awaitDrain)
5450 state.awaitDrain--;
5451 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5452 state.flowing = true;
5453 flow(src);
5454 }
5455 };
5456}
5457
5458
5459Readable.prototype.unpipe = function(dest) {
5460 var state = this._readableState;
5461
5462 // if we're not piping anywhere, then do nothing.
5463 if (state.pipesCount === 0)
5464 return this;
5465
5466 // just one destination. most common case.
5467 if (state.pipesCount === 1) {
5468 // passed in one, but it's not the right one.
5469 if (dest && dest !== state.pipes)
5470 return this;
5471
5472 if (!dest)
5473 dest = state.pipes;
5474
5475 // got a match.
5476 state.pipes = null;
5477 state.pipesCount = 0;
5478 state.flowing = false;
5479 if (dest)
5480 dest.emit('unpipe', this);
5481 return this;
ebd8d4e8
IC
5482 }
5483
ab78acc6
IC
5484 // slow case. multiple pipe destinations.
5485
5486 if (!dest) {
5487 // remove all.
5488 var dests = state.pipes;
5489 var len = state.pipesCount;
5490 state.pipes = null;
5491 state.pipesCount = 0;
5492 state.flowing = false;
5493
5494 for (var i = 0; i < len; i++)
5495 dests[i].emit('unpipe', this);
5496 return this;
ebd8d4e8
IC
5497 }
5498
ab78acc6
IC
5499 // try to find the right one.
5500 var i = indexOf(state.pipes, dest);
5501 if (i === -1)
5502 return this;
5503
5504 state.pipes.splice(i, 1);
5505 state.pipesCount -= 1;
5506 if (state.pipesCount === 1)
5507 state.pipes = state.pipes[0];
5508
5509 dest.emit('unpipe', this);
ebd8d4e8 5510
ab78acc6
IC
5511 return this;
5512};
5513
5514// set up data events if they are asked for
5515// Ensure readable listeners eventually get something
5516Readable.prototype.on = function(ev, fn) {
5517 var res = Stream.prototype.on.call(this, ev, fn);
5518
5519 // If listening to data, and it has not explicitly been paused,
5520 // then call resume to start the flow of data on the next tick.
5521 if (ev === 'data' && false !== this._readableState.flowing) {
5522 this.resume();
5523 }
5524
5525 if (ev === 'readable' && this.readable) {
5526 var state = this._readableState;
5527 if (!state.readableListening) {
5528 state.readableListening = true;
5529 state.emittedReadable = false;
5530 state.needReadable = true;
5531 if (!state.reading) {
5532 var self = this;
5533 process.nextTick(function() {
5534 debug('readable nexttick read 0');
5535 self.read(0);
5536 });
5537 } else if (state.length) {
5538 emitReadable(this, state);
5539 }
ebd8d4e8
IC
5540 }
5541 }
5542
ab78acc6
IC
5543 return res;
5544};
5545Readable.prototype.addListener = Readable.prototype.on;
5546
5547// pause() and resume() are remnants of the legacy readable stream API
5548// If the user uses them, then switch into old mode.
5549Readable.prototype.resume = function() {
5550 var state = this._readableState;
5551 if (!state.flowing) {
5552 debug('resume');
5553 state.flowing = true;
5554 if (!state.reading) {
5555 debug('resume read 0');
5556 this.read(0);
5557 }
5558 resume(this, state);
5559 }
5560 return this;
5561};
ebd8d4e8 5562
ab78acc6
IC
5563function resume(stream, state) {
5564 if (!state.resumeScheduled) {
5565 state.resumeScheduled = true;
5566 process.nextTick(function() {
5567 resume_(stream, state);
ebd8d4e8
IC
5568 });
5569 }
ebd8d4e8
IC
5570}
5571
ab78acc6
IC
5572function resume_(stream, state) {
5573 state.resumeScheduled = false;
5574 stream.emit('resume');
5575 flow(stream);
5576 if (state.flowing && !state.reading)
5577 stream.read(0);
ebd8d4e8
IC
5578}
5579
ab78acc6
IC
5580Readable.prototype.pause = function() {
5581 debug('call pause flowing=%j', this._readableState.flowing);
5582 if (false !== this._readableState.flowing) {
5583 debug('pause');
5584 this._readableState.flowing = false;
5585 this.emit('pause');
5586 }
5587 return this;
5588};
ebd8d4e8 5589
ab78acc6
IC
5590function flow(stream) {
5591 var state = stream._readableState;
5592 debug('flow', state.flowing);
5593 if (state.flowing) {
5594 do {
5595 var chunk = stream.read();
5596 } while (null !== chunk && state.flowing);
5597 }
ebd8d4e8
IC
5598}
5599
ab78acc6
IC
5600// wrap an old-style stream as the async data source.
5601// This is *not* part of the readable stream interface.
5602// It is an ugly unfortunate mess of history.
5603Readable.prototype.wrap = function(stream) {
5604 var state = this._readableState;
5605 var paused = false;
ebd8d4e8 5606
ab78acc6
IC
5607 var self = this;
5608 stream.on('end', function() {
5609 debug('wrapped end');
5610 if (state.decoder && !state.ended) {
5611 var chunk = state.decoder.end();
5612 if (chunk && chunk.length)
5613 self.push(chunk);
ebd8d4e8 5614 }
ab78acc6
IC
5615
5616 self.push(null);
ebd8d4e8 5617 });
ebd8d4e8 5618
ab78acc6
IC
5619 stream.on('data', function(chunk) {
5620 debug('wrapped data');
5621 if (state.decoder)
5622 chunk = state.decoder.write(chunk);
5623 if (!chunk || !state.objectMode && !chunk.length)
5624 return;
ebd8d4e8 5625
ab78acc6
IC
5626 var ret = self.push(chunk);
5627 if (!ret) {
5628 paused = true;
5629 stream.pause();
ebd8d4e8 5630 }
ab78acc6
IC
5631 });
5632
5633 // proxy all the other methods.
5634 // important when wrapping filters and duplexes.
5635 for (var i in stream) {
5636 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5637 this[i] = function(method) { return function() {
5638 return stream[method].apply(stream, arguments);
5639 }}(i);
ebd8d4e8
IC
5640 }
5641 }
ab78acc6
IC
5642
5643 // proxy certain important events.
5644 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5645 forEach(events, function(ev) {
5646 stream.on(ev, self.emit.bind(self, ev));
5647 });
5648
5649 // when we try to consume some more bytes, simply unpause the
5650 // underlying stream.
5651 self._read = function(n) {
5652 debug('wrapped _read', n);
5653 if (paused) {
5654 paused = false;
5655 stream.resume();
ebd8d4e8 5656 }
ab78acc6
IC
5657 };
5658
5659 return self;
5660};
5661
5662
5663
5664// exposed for testing purposes only.
5665Readable._fromList = fromList;
5666
5667// Pluck off n bytes from an array of buffers.
5668// Length is the combined lengths of all the buffers in the list.
5669function fromList(n, state) {
5670 var list = state.buffer;
5671 var length = state.length;
5672 var stringMode = !!state.decoder;
5673 var objectMode = !!state.objectMode;
5674 var ret;
5675
5676 // nothing in the list, definitely empty.
5677 if (list.length === 0)
5678 return null;
5679
5680 if (length === 0)
5681 ret = null;
5682 else if (objectMode)
5683 ret = list.shift();
5684 else if (!n || n >= length) {
5685 // read it all, truncate the array.
5686 if (stringMode)
5687 ret = list.join('');
5688 else
5689 ret = Buffer.concat(list, length);
5690 list.length = 0;
5691 } else {
5692 // read just some of it.
5693 if (n < list[0].length) {
5694 // just take a part of the first list item.
5695 // slice is the same for buffers and strings.
5696 var buf = list[0];
5697 ret = buf.slice(0, n);
5698 list[0] = buf.slice(n);
5699 } else if (n === list[0].length) {
5700 // first list is a perfect match
5701 ret = list.shift();
ebd8d4e8 5702 } else {
ab78acc6
IC
5703 // complex case.
5704 // we have enough to cover it, but it spans past the first buffer.
5705 if (stringMode)
5706 ret = '';
5707 else
5708 ret = new Buffer(n);
ebd8d4e8 5709
ab78acc6
IC
5710 var c = 0;
5711 for (var i = 0, l = list.length; i < l && c < n; i++) {
5712 var buf = list[0];
5713 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5714
ab78acc6
IC
5715 if (stringMode)
5716 ret += buf.slice(0, cpy);
5717 else
5718 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5719
ab78acc6
IC
5720 if (cpy < buf.length)
5721 list[0] = buf.slice(cpy);
5722 else
5723 list.shift();
ebd8d4e8 5724
ab78acc6
IC
5725 c += cpy;
5726 }
5727 }
ebd8d4e8
IC
5728 }
5729
ab78acc6 5730 return ret;
ebd8d4e8
IC
5731}
5732
ab78acc6
IC
5733function endReadable(stream) {
5734 var state = stream._readableState;
ebd8d4e8 5735
ab78acc6
IC
5736 // If we get here before consuming all the bytes, then that is a
5737 // bug in node. Should never happen.
5738 if (state.length > 0)
5739 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 5740
ab78acc6
IC
5741 if (!state.endEmitted) {
5742 state.ended = true;
5743 process.nextTick(function() {
5744 // Check that we didn't get one last unshift.
5745 if (!state.endEmitted && state.length === 0) {
5746 state.endEmitted = true;
5747 stream.readable = false;
5748 stream.emit('end');
5749 }
5750 });
5751 }
ebd8d4e8 5752}
ebd8d4e8 5753
ab78acc6
IC
5754function forEach (xs, f) {
5755 for (var i = 0, l = xs.length; i < l; i++) {
5756 f(xs[i], i);
5757 }
ebd8d4e8 5758}
ebd8d4e8 5759
ab78acc6
IC
5760function indexOf (xs, x) {
5761 for (var i = 0, l = xs.length; i < l; i++) {
5762 if (xs[i] === x) return i;
5763 }
5764 return -1;
ebd8d4e8 5765}
ebd8d4e8 5766
ab78acc6
IC
5767}).call(this,require('_process'))
5768},{"./_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){
5769// Copyright Joyent, Inc. and other Node contributors.
5770//
5771// Permission is hereby granted, free of charge, to any person obtaining a
5772// copy of this software and associated documentation files (the
5773// "Software"), to deal in the Software without restriction, including
5774// without limitation the rights to use, copy, modify, merge, publish,
5775// distribute, sublicense, and/or sell copies of the Software, and to permit
5776// persons to whom the Software is furnished to do so, subject to the
5777// following conditions:
5778//
5779// The above copyright notice and this permission notice shall be included
5780// in all copies or substantial portions of the Software.
5781//
5782// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5783// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5784// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5785// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5786// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5787// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5788// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5789
ebd8d4e8 5790
ab78acc6
IC
5791// a transform stream is a readable/writable stream where you do
5792// something with the data. Sometimes it's called a "filter",
5793// but that's not a great name for it, since that implies a thing where
5794// some bits pass through, and others are simply ignored. (That would
5795// be a valid example of a transform, of course.)
5796//
5797// While the output is causally related to the input, it's not a
5798// necessarily symmetric or synchronous transformation. For example,
5799// a zlib stream might take multiple plain-text writes(), and then
5800// emit a single compressed chunk some time in the future.
5801//
5802// Here's how this works:
5803//
5804// The Transform stream has all the aspects of the readable and writable
5805// stream classes. When you write(chunk), that calls _write(chunk,cb)
5806// internally, and returns false if there's a lot of pending writes
5807// buffered up. When you call read(), that calls _read(n) until
5808// there's enough pending readable data buffered up.
5809//
5810// In a transform stream, the written data is placed in a buffer. When
5811// _read(n) is called, it transforms the queued up data, calling the
5812// buffered _write cb's as it consumes chunks. If consuming a single
5813// written chunk would result in multiple output chunks, then the first
5814// outputted bit calls the readcb, and subsequent chunks just go into
5815// the read buffer, and will cause it to emit 'readable' if necessary.
5816//
5817// This way, back-pressure is actually determined by the reading side,
5818// since _read has to be called to start processing a new chunk. However,
5819// a pathological inflate type of transform can cause excessive buffering
5820// here. For example, imagine a stream where every byte of input is
5821// interpreted as an integer from 0-255, and then results in that many
5822// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
5823// 1kb of data being output. In this case, you could write a very small
5824// amount of input, and end up with a very large amount of output. In
5825// such a pathological inflating mechanism, there'd be no way to tell
5826// the system to stop doing the transform. A single 4MB write could
5827// cause the system to run out of memory.
5828//
5829// However, even in such a pathological case, only a single written chunk
5830// would be consumed, and then the rest would wait (un-transformed) until
5831// the results of the previous transformed chunk were consumed.
ebd8d4e8 5832
ab78acc6 5833module.exports = Transform;
ebd8d4e8 5834
ab78acc6 5835var Duplex = require('./_stream_duplex');
ebd8d4e8 5836
ab78acc6
IC
5837/*<replacement>*/
5838var util = require('core-util-is');
5839util.inherits = require('inherits');
5840/*</replacement>*/
5841
5842util.inherits(Transform, Duplex);
5843
5844
5845function TransformState(options, stream) {
5846 this.afterTransform = function(er, data) {
5847 return afterTransform(stream, er, data);
5848 };
5849
5850 this.needTransform = false;
5851 this.transforming = false;
5852 this.writecb = null;
5853 this.writechunk = null;
ebd8d4e8 5854}
ebd8d4e8 5855
ab78acc6
IC
5856function afterTransform(stream, er, data) {
5857 var ts = stream._transformState;
5858 ts.transforming = false;
5859
5860 var cb = ts.writecb;
5861
5862 if (!cb)
5863 return stream.emit('error', new Error('no writecb in Transform class'));
5864
5865 ts.writechunk = null;
5866 ts.writecb = null;
5867
5868 if (!util.isNullOrUndefined(data))
5869 stream.push(data);
5870
5871 if (cb)
5872 cb(er);
5873
5874 var rs = stream._readableState;
5875 rs.reading = false;
5876 if (rs.needReadable || rs.length < rs.highWaterMark) {
5877 stream._read(rs.highWaterMark);
5878 }
ebd8d4e8 5879}
ebd8d4e8 5880
ab78acc6
IC
5881
5882function Transform(options) {
5883 if (!(this instanceof Transform))
5884 return new Transform(options);
5885
5886 Duplex.call(this, options);
5887
5888 this._transformState = new TransformState(options, this);
5889
5890 // when the writable side finishes, then flush out anything remaining.
5891 var stream = this;
5892
5893 // start out asking for a readable event once data is transformed.
5894 this._readableState.needReadable = true;
5895
5896 // we have implemented the _read method, and done the other things
5897 // that Readable wants before the first _read call, so unset the
5898 // sync guard flag.
5899 this._readableState.sync = false;
5900
5901 this.once('prefinish', function() {
5902 if (util.isFunction(this._flush))
5903 this._flush(function(er) {
5904 done(stream, er);
5905 });
5906 else
5907 done(stream);
5908 });
ebd8d4e8 5909}
ebd8d4e8 5910
ab78acc6
IC
5911Transform.prototype.push = function(chunk, encoding) {
5912 this._transformState.needTransform = false;
5913 return Duplex.prototype.push.call(this, chunk, encoding);
5914};
5915
5916// This is the part where you do stuff!
5917// override this function in implementation classes.
5918// 'chunk' is an input chunk.
5919//
5920// Call `push(newChunk)` to pass along transformed output
5921// to the readable side. You may call 'push' zero or more times.
5922//
5923// Call `cb(err)` when you are done with this chunk. If you pass
5924// an error, then that'll put the hurt on the whole operation. If you
5925// never call cb(), then you'll never get another chunk.
5926Transform.prototype._transform = function(chunk, encoding, cb) {
5927 throw new Error('not implemented');
5928};
5929
5930Transform.prototype._write = function(chunk, encoding, cb) {
5931 var ts = this._transformState;
5932 ts.writecb = cb;
5933 ts.writechunk = chunk;
5934 ts.writeencoding = encoding;
5935 if (!ts.transforming) {
5936 var rs = this._readableState;
5937 if (ts.needTransform ||
5938 rs.needReadable ||
5939 rs.length < rs.highWaterMark)
5940 this._read(rs.highWaterMark);
5941 }
5942};
5943
5944// Doesn't matter what the args are here.
5945// _transform does all the work.
5946// That we got here means that the readable side wants more data.
5947Transform.prototype._read = function(n) {
5948 var ts = this._transformState;
ebd8d4e8 5949
ab78acc6
IC
5950 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5951 ts.transforming = true;
5952 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5953 } else {
5954 // mark that we need a transform, so that any data that comes in
5955 // will get processed, now that we've asked for it.
5956 ts.needTransform = true;
5957 }
5958};
ebd8d4e8 5959
ebd8d4e8 5960
ab78acc6
IC
5961function done(stream, er) {
5962 if (er)
5963 return stream.emit('error', er);
ebd8d4e8 5964
ab78acc6
IC
5965 // if there's nothing in the write buffer, then that means
5966 // that nothing more will ever be provided
5967 var ws = stream._writableState;
5968 var ts = stream._transformState;
ebd8d4e8 5969
ab78acc6
IC
5970 if (ws.length)
5971 throw new Error('calling transform done when ws.length != 0');
5972
5973 if (ts.transforming)
5974 throw new Error('calling transform done when still transforming');
5975
5976 return stream.push(null);
ebd8d4e8
IC
5977}
5978
ab78acc6
IC
5979},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
5980(function (process){
5981// Copyright Joyent, Inc. and other Node contributors.
5982//
5983// Permission is hereby granted, free of charge, to any person obtaining a
5984// copy of this software and associated documentation files (the
5985// "Software"), to deal in the Software without restriction, including
5986// without limitation the rights to use, copy, modify, merge, publish,
5987// distribute, sublicense, and/or sell copies of the Software, and to permit
5988// persons to whom the Software is furnished to do so, subject to the
5989// following conditions:
5990//
5991// The above copyright notice and this permission notice shall be included
5992// in all copies or substantial portions of the Software.
5993//
5994// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5995// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5996// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5997// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5998// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5999// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6000// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6001
ab78acc6
IC
6002// A bit simpler than readable streams.
6003// Implement an async ._write(chunk, cb), and it'll handle all
6004// the drain event emission and buffering.
ebd8d4e8 6005
ab78acc6 6006module.exports = Writable;
ebd8d4e8 6007
ab78acc6
IC
6008/*<replacement>*/
6009var Buffer = require('buffer').Buffer;
6010/*</replacement>*/
ebd8d4e8 6011
ab78acc6 6012Writable.WritableState = WritableState;
ebd8d4e8
IC
6013
6014
ab78acc6
IC
6015/*<replacement>*/
6016var util = require('core-util-is');
6017util.inherits = require('inherits');
6018/*</replacement>*/
ebd8d4e8 6019
ab78acc6 6020var Stream = require('stream');
ebd8d4e8 6021
ab78acc6 6022util.inherits(Writable, Stream);
ebd8d4e8 6023
ab78acc6
IC
6024function WriteReq(chunk, encoding, cb) {
6025 this.chunk = chunk;
6026 this.encoding = encoding;
6027 this.callback = cb;
ebd8d4e8
IC
6028}
6029
ab78acc6
IC
6030function WritableState(options, stream) {
6031 var Duplex = require('./_stream_duplex');
ebd8d4e8 6032
ab78acc6 6033 options = options || {};
ebd8d4e8 6034
ab78acc6
IC
6035 // the point at which write() starts returning false
6036 // Note: 0 is a valid value, means that we always return false if
6037 // the entire buffer is not flushed immediately on write()
6038 var hwm = options.highWaterMark;
6039 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6040 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6041
ab78acc6
IC
6042 // object stream flag to indicate whether or not this stream
6043 // contains buffers or objects.
6044 this.objectMode = !!options.objectMode;
ebd8d4e8 6045
ab78acc6
IC
6046 if (stream instanceof Duplex)
6047 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6048
ab78acc6
IC
6049 // cast to ints.
6050 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6051
ab78acc6
IC
6052 this.needDrain = false;
6053 // at the start of calling end()
6054 this.ending = false;
6055 // when end() has been called, and returned
6056 this.ended = false;
6057 // when 'finish' is emitted
6058 this.finished = false;
ebd8d4e8 6059
ab78acc6
IC
6060 // should we decode strings into buffers before passing to _write?
6061 // this is here so that some node-core streams can optimize string
6062 // handling at a lower level.
6063 var noDecode = options.decodeStrings === false;
6064 this.decodeStrings = !noDecode;
ebd8d4e8 6065
ab78acc6
IC
6066 // Crypto is kind of old and crusty. Historically, its default string
6067 // encoding is 'binary' so we have to make this configurable.
6068 // Everything else in the universe uses 'utf8', though.
6069 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6070
ab78acc6
IC
6071 // not an actual buffer we keep track of, but a measurement
6072 // of how much we're waiting to get pushed to some underlying
6073 // socket or file.
6074 this.length = 0;
ebd8d4e8 6075
ab78acc6
IC
6076 // a flag to see when we're in the middle of a write.
6077 this.writing = false;
ebd8d4e8 6078
ab78acc6
IC
6079 // when true all writes will be buffered until .uncork() call
6080 this.corked = 0;
ebd8d4e8 6081
ab78acc6
IC
6082 // a flag to be able to tell if the onwrite cb is called immediately,
6083 // or on a later tick. We set this to true at first, because any
6084 // actions that shouldn't happen until "later" should generally also
6085 // not happen before the first write call.
6086 this.sync = true;
ebd8d4e8 6087
ab78acc6
IC
6088 // a flag to know if we're processing previously buffered items, which
6089 // may call the _write() callback in the same tick, so that we don't
6090 // end up in an overlapped onwrite situation.
6091 this.bufferProcessing = false;
ebd8d4e8 6092
ab78acc6
IC
6093 // the callback that's passed to _write(chunk,cb)
6094 this.onwrite = function(er) {
6095 onwrite(stream, er);
6096 };
ebd8d4e8 6097
ab78acc6
IC
6098 // the callback that the user supplies to write(chunk,encoding,cb)
6099 this.writecb = null;
ebd8d4e8 6100
ab78acc6
IC
6101 // the amount that is being written when _write is called.
6102 this.writelen = 0;
ebd8d4e8 6103
ab78acc6 6104 this.buffer = [];
ebd8d4e8 6105
ab78acc6
IC
6106 // number of pending user-supplied write callbacks
6107 // this must be 0 before 'finish' can be emitted
6108 this.pendingcb = 0;
ebd8d4e8 6109
ab78acc6
IC
6110 // emit prefinish if the only thing we're waiting for is _write cbs
6111 // This is relevant for synchronous Transform streams
6112 this.prefinished = false;
ebd8d4e8 6113
ab78acc6
IC
6114 // True if the error was already emitted and should not be thrown again
6115 this.errorEmitted = false;
ebd8d4e8
IC
6116}
6117
ab78acc6
IC
6118function Writable(options) {
6119 var Duplex = require('./_stream_duplex');
ebd8d4e8 6120
ab78acc6
IC
6121 // Writable ctor is applied to Duplexes, though they're not
6122 // instanceof Writable, they're instanceof Readable.
6123 if (!(this instanceof Writable) && !(this instanceof Duplex))
6124 return new Writable(options);
ebd8d4e8 6125
ab78acc6 6126 this._writableState = new WritableState(options, this);
ebd8d4e8 6127
ab78acc6
IC
6128 // legacy.
6129 this.writable = true;
ebd8d4e8 6130
ab78acc6 6131 Stream.call(this);
ebd8d4e8
IC
6132}
6133
ab78acc6
IC
6134// Otherwise people can pipe Writable streams, which is just wrong.
6135Writable.prototype.pipe = function() {
6136 this.emit('error', new Error('Cannot pipe. Not readable.'));
6137};
ebd8d4e8 6138
ebd8d4e8 6139
ab78acc6
IC
6140function writeAfterEnd(stream, state, cb) {
6141 var er = new Error('write after end');
6142 // TODO: defer error events consistently everywhere, not just the cb
6143 stream.emit('error', er);
6144 process.nextTick(function() {
6145 cb(er);
6146 });
ebd8d4e8
IC
6147}
6148
ab78acc6
IC
6149// If we get something that is not a buffer, string, null, or undefined,
6150// and we're not in objectMode, then that's an error.
6151// Otherwise stream chunks are all considered to be of length=1, and the
6152// watermarks determine how many objects to keep in the buffer, rather than
6153// how many bytes or characters.
6154function validChunk(stream, state, chunk, cb) {
6155 var valid = true;
6156 if (!util.isBuffer(chunk) &&
6157 !util.isString(chunk) &&
6158 !util.isNullOrUndefined(chunk) &&
6159 !state.objectMode) {
6160 var er = new TypeError('Invalid non-string/buffer chunk');
6161 stream.emit('error', er);
6162 process.nextTick(function() {
6163 cb(er);
6164 });
6165 valid = false;
6166 }
6167 return valid;
ebd8d4e8
IC
6168}
6169
ab78acc6
IC
6170Writable.prototype.write = function(chunk, encoding, cb) {
6171 var state = this._writableState;
6172 var ret = false;
ebd8d4e8 6173
ab78acc6
IC
6174 if (util.isFunction(encoding)) {
6175 cb = encoding;
6176 encoding = null;
ebd8d4e8 6177 }
ebd8d4e8 6178
ab78acc6
IC
6179 if (util.isBuffer(chunk))
6180 encoding = 'buffer';
6181 else if (!encoding)
6182 encoding = state.defaultEncoding;
6183
6184 if (!util.isFunction(cb))
6185 cb = function() {};
6186
6187 if (state.ended)
6188 writeAfterEnd(this, state, cb);
6189 else if (validChunk(this, state, chunk, cb)) {
6190 state.pendingcb++;
6191 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6192 }
ebd8d4e8 6193
ab78acc6
IC
6194 return ret;
6195};
6196
6197Writable.prototype.cork = function() {
6198 var state = this._writableState;
6199
6200 state.corked++;
6201};
ebd8d4e8 6202
ab78acc6
IC
6203Writable.prototype.uncork = function() {
6204 var state = this._writableState;
ebd8d4e8 6205
ab78acc6
IC
6206 if (state.corked) {
6207 state.corked--;
ebd8d4e8 6208
ab78acc6
IC
6209 if (!state.writing &&
6210 !state.corked &&
6211 !state.finished &&
6212 !state.bufferProcessing &&
6213 state.buffer.length)
6214 clearBuffer(this, state);
ebd8d4e8 6215 }
ab78acc6 6216};
ebd8d4e8 6217
ab78acc6
IC
6218function decodeChunk(state, chunk, encoding) {
6219 if (!state.objectMode &&
6220 state.decodeStrings !== false &&
6221 util.isString(chunk)) {
6222 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6223 }
ab78acc6 6224 return chunk;
ebd8d4e8
IC
6225}
6226
ab78acc6
IC
6227// if we're already writing something, then just put this
6228// in the queue, and wait our turn. Otherwise, call _write
6229// If we return false, then we need a drain event, so set that flag.
6230function writeOrBuffer(stream, state, chunk, encoding, cb) {
6231 chunk = decodeChunk(state, chunk, encoding);
6232 if (util.isBuffer(chunk))
6233 encoding = 'buffer';
6234 var len = state.objectMode ? 1 : chunk.length;
6235
6236 state.length += len;
6237
6238 var ret = state.length < state.highWaterMark;
6239 // we must ensure that previous needDrain will not be reset to false.
6240 if (!ret)
6241 state.needDrain = true;
6242
6243 if (state.writing || state.corked)
6244 state.buffer.push(new WriteReq(chunk, encoding, cb));
6245 else
6246 doWrite(stream, state, false, len, chunk, encoding, cb);
6247
6248 return ret;
ebd8d4e8
IC
6249}
6250
ab78acc6
IC
6251function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6252 state.writelen = len;
6253 state.writecb = cb;
6254 state.writing = true;
6255 state.sync = true;
6256 if (writev)
6257 stream._writev(chunk, state.onwrite);
6258 else
6259 stream._write(chunk, encoding, state.onwrite);
6260 state.sync = false;
ebd8d4e8
IC
6261}
6262
ab78acc6
IC
6263function onwriteError(stream, state, sync, er, cb) {
6264 if (sync)
6265 process.nextTick(function() {
6266 state.pendingcb--;
6267 cb(er);
6268 });
6269 else {
6270 state.pendingcb--;
6271 cb(er);
6272 }
ebd8d4e8 6273
ab78acc6
IC
6274 stream._writableState.errorEmitted = true;
6275 stream.emit('error', er);
6276}
ebd8d4e8 6277
ab78acc6
IC
6278function onwriteStateUpdate(state) {
6279 state.writing = false;
6280 state.writecb = null;
6281 state.length -= state.writelen;
6282 state.writelen = 0;
6283}
ebd8d4e8 6284
ab78acc6
IC
6285function onwrite(stream, er) {
6286 var state = stream._writableState;
6287 var sync = state.sync;
6288 var cb = state.writecb;
ebd8d4e8 6289
ab78acc6 6290 onwriteStateUpdate(state);
ebd8d4e8 6291
ab78acc6
IC
6292 if (er)
6293 onwriteError(stream, state, sync, er, cb);
6294 else {
6295 // Check if we're actually ready to finish, but don't emit yet
6296 var finished = needFinish(stream, state);
ebd8d4e8 6297
ab78acc6
IC
6298 if (!finished &&
6299 !state.corked &&
6300 !state.bufferProcessing &&
6301 state.buffer.length) {
6302 clearBuffer(stream, state);
6303 }
6304
6305 if (sync) {
6306 process.nextTick(function() {
6307 afterWrite(stream, state, finished, cb);
6308 });
6309 } else {
6310 afterWrite(stream, state, finished, cb);
ebd8d4e8 6311 }
ebd8d4e8
IC
6312 }
6313}
6314
ab78acc6
IC
6315function afterWrite(stream, state, finished, cb) {
6316 if (!finished)
6317 onwriteDrain(stream, state);
6318 state.pendingcb--;
6319 cb();
6320 finishMaybe(stream, state);
6321}
6322
6323// Must force callback to be called on nextTick, so that we don't
6324// emit 'drain' before the write() consumer gets the 'false' return
6325// value, and has a chance to attach a 'drain' listener.
6326function onwriteDrain(stream, state) {
6327 if (state.length === 0 && state.needDrain) {
6328 state.needDrain = false;
6329 stream.emit('drain');
ebd8d4e8
IC
6330 }
6331}
6332
ebd8d4e8 6333
ab78acc6
IC
6334// if there's something in the buffer waiting, then process it
6335function clearBuffer(stream, state) {
6336 state.bufferProcessing = true;
6337
6338 if (stream._writev && state.buffer.length > 1) {
6339 // Fast case, write everything using _writev()
6340 var cbs = [];
6341 for (var c = 0; c < state.buffer.length; c++)
6342 cbs.push(state.buffer[c].callback);
6343
6344 // count the one we are adding, as well.
6345 // TODO(isaacs) clean this up
6346 state.pendingcb++;
6347 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6348 for (var i = 0; i < cbs.length; i++) {
6349 state.pendingcb--;
6350 cbs[i](err);
6351 }
6352 });
6353
6354 // Clear buffer
6355 state.buffer = [];
6356 } else {
6357 // Slow case, write chunks one-by-one
6358 for (var c = 0; c < state.buffer.length; c++) {
6359 var entry = state.buffer[c];
6360 var chunk = entry.chunk;
6361 var encoding = entry.encoding;
6362 var cb = entry.callback;
6363 var len = state.objectMode ? 1 : chunk.length;
6364
6365 doWrite(stream, state, false, len, chunk, encoding, cb);
6366
6367 // if we didn't call the onwrite immediately, then
6368 // it means that we need to wait until it does.
6369 // also, that means that the chunk and cb are currently
6370 // being processed, so move the buffer counter past them.
6371 if (state.writing) {
6372 c++;
6373 break;
6374 }
ebd8d4e8 6375 }
ab78acc6
IC
6376
6377 if (c < state.buffer.length)
6378 state.buffer = state.buffer.slice(c);
6379 else
6380 state.buffer.length = 0;
ebd8d4e8
IC
6381 }
6382
ab78acc6 6383 state.bufferProcessing = false;
ebd8d4e8
IC
6384}
6385
ab78acc6
IC
6386Writable.prototype._write = function(chunk, encoding, cb) {
6387 cb(new Error('not implemented'));
ebd8d4e8 6388
ab78acc6 6389};
ebd8d4e8 6390
ab78acc6 6391Writable.prototype._writev = null;
ebd8d4e8 6392
ab78acc6
IC
6393Writable.prototype.end = function(chunk, encoding, cb) {
6394 var state = this._writableState;
ebd8d4e8 6395
ab78acc6
IC
6396 if (util.isFunction(chunk)) {
6397 cb = chunk;
6398 chunk = null;
6399 encoding = null;
6400 } else if (util.isFunction(encoding)) {
6401 cb = encoding;
6402 encoding = null;
6403 }
ebd8d4e8 6404
ab78acc6
IC
6405 if (!util.isNullOrUndefined(chunk))
6406 this.write(chunk, encoding);
6407
6408 // .end() fully uncorks
6409 if (state.corked) {
6410 state.corked = 1;
6411 this.uncork();
ebd8d4e8 6412 }
ab78acc6
IC
6413
6414 // ignore unnecessary end() calls.
6415 if (!state.ending && !state.finished)
6416 endWritable(this, state, cb);
6417};
6418
6419
6420function needFinish(stream, state) {
6421 return (state.ending &&
6422 state.length === 0 &&
6423 !state.finished &&
6424 !state.writing);
ebd8d4e8
IC
6425}
6426
ab78acc6
IC
6427function prefinish(stream, state) {
6428 if (!state.prefinished) {
6429 state.prefinished = true;
6430 stream.emit('prefinish');
ebd8d4e8 6431 }
ebd8d4e8
IC
6432}
6433
ab78acc6
IC
6434function finishMaybe(stream, state) {
6435 var need = needFinish(stream, state);
6436 if (need) {
6437 if (state.pendingcb === 0) {
6438 prefinish(stream, state);
6439 state.finished = true;
6440 stream.emit('finish');
6441 } else
6442 prefinish(stream, state);
6443 }
6444 return need;
6445}
ebd8d4e8 6446
ab78acc6
IC
6447function endWritable(stream, state, cb) {
6448 state.ending = true;
6449 finishMaybe(stream, state);
6450 if (cb) {
6451 if (state.finished)
6452 process.nextTick(cb);
6453 else
6454 stream.once('finish', cb);
ebd8d4e8 6455 }
ab78acc6 6456 state.ended = true;
ebd8d4e8
IC
6457}
6458
ab78acc6
IC
6459}).call(this,require('_process'))
6460},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6461(function (Buffer){
6462// Copyright Joyent, Inc. and other Node contributors.
6463//
6464// Permission is hereby granted, free of charge, to any person obtaining a
6465// copy of this software and associated documentation files (the
6466// "Software"), to deal in the Software without restriction, including
6467// without limitation the rights to use, copy, modify, merge, publish,
6468// distribute, sublicense, and/or sell copies of the Software, and to permit
6469// persons to whom the Software is furnished to do so, subject to the
6470// following conditions:
6471//
6472// The above copyright notice and this permission notice shall be included
6473// in all copies or substantial portions of the Software.
6474//
6475// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6476// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6477// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6478// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6479// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6480// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6481// USE OR OTHER DEALINGS IN THE SOFTWARE.
6482
6483// NOTE: These type checking functions intentionally don't use `instanceof`
6484// because it is fragile and can be easily faked with `Object.create()`.
6485function isArray(ar) {
6486 return Array.isArray(ar);
ebd8d4e8 6487}
ab78acc6 6488exports.isArray = isArray;
ebd8d4e8 6489
ab78acc6
IC
6490function isBoolean(arg) {
6491 return typeof arg === 'boolean';
ebd8d4e8 6492}
ab78acc6 6493exports.isBoolean = isBoolean;
ebd8d4e8 6494
ab78acc6
IC
6495function isNull(arg) {
6496 return arg === null;
6497}
6498exports.isNull = isNull;
ebd8d4e8 6499
ab78acc6
IC
6500function isNullOrUndefined(arg) {
6501 return arg == null;
6502}
6503exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6504
ab78acc6
IC
6505function isNumber(arg) {
6506 return typeof arg === 'number';
ebd8d4e8 6507}
ab78acc6 6508exports.isNumber = isNumber;
ebd8d4e8 6509
ab78acc6
IC
6510function isString(arg) {
6511 return typeof arg === 'string';
6512}
6513exports.isString = isString;
ebd8d4e8 6514
ab78acc6
IC
6515function isSymbol(arg) {
6516 return typeof arg === 'symbol';
6517}
6518exports.isSymbol = isSymbol;
ebd8d4e8 6519
ab78acc6
IC
6520function isUndefined(arg) {
6521 return arg === void 0;
ebd8d4e8 6522}
ab78acc6 6523exports.isUndefined = isUndefined;
ebd8d4e8 6524
ab78acc6
IC
6525function isRegExp(re) {
6526 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6527}
ab78acc6 6528exports.isRegExp = isRegExp;
ebd8d4e8 6529
ab78acc6
IC
6530function isObject(arg) {
6531 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6532}
ab78acc6 6533exports.isObject = isObject;
ebd8d4e8 6534
ab78acc6
IC
6535function isDate(d) {
6536 return isObject(d) && objectToString(d) === '[object Date]';
6537}
6538exports.isDate = isDate;
ebd8d4e8 6539
ab78acc6
IC
6540function isError(e) {
6541 return isObject(e) &&
6542 (objectToString(e) === '[object Error]' || e instanceof Error);
6543}
6544exports.isError = isError;
ebd8d4e8 6545
ab78acc6
IC
6546function isFunction(arg) {
6547 return typeof arg === 'function';
6548}
6549exports.isFunction = isFunction;
6550
6551function isPrimitive(arg) {
6552 return arg === null ||
6553 typeof arg === 'boolean' ||
6554 typeof arg === 'number' ||
6555 typeof arg === 'string' ||
6556 typeof arg === 'symbol' || // ES6 symbol
6557 typeof arg === 'undefined';
ebd8d4e8 6558}
ab78acc6 6559exports.isPrimitive = isPrimitive;
ebd8d4e8 6560
ab78acc6
IC
6561function isBuffer(arg) {
6562 return Buffer.isBuffer(arg);
ebd8d4e8 6563}
ab78acc6 6564exports.isBuffer = isBuffer;
ebd8d4e8 6565
ab78acc6
IC
6566function objectToString(o) {
6567 return Object.prototype.toString.call(o);
ebd8d4e8 6568}
ab78acc6
IC
6569}).call(this,require("buffer").Buffer)
6570},{"buffer":7}],22:[function(require,module,exports){
6571module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6572
ab78acc6
IC
6573},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6574exports = module.exports = require('./lib/_stream_readable.js');
6575exports.Stream = require('stream');
6576exports.Readable = exports;
6577exports.Writable = require('./lib/_stream_writable.js');
6578exports.Duplex = require('./lib/_stream_duplex.js');
6579exports.Transform = require('./lib/_stream_transform.js');
6580exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6581
ab78acc6
IC
6582},{"./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){
6583module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6584
ab78acc6
IC
6585},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6586module.exports = require("./lib/_stream_writable.js")
6587
6588},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6589// Copyright Joyent, Inc. and other Node contributors.
6590//
6591// Permission is hereby granted, free of charge, to any person obtaining a
6592// copy of this software and associated documentation files (the
6593// "Software"), to deal in the Software without restriction, including
6594// without limitation the rights to use, copy, modify, merge, publish,
6595// distribute, sublicense, and/or sell copies of the Software, and to permit
6596// persons to whom the Software is furnished to do so, subject to the
6597// following conditions:
6598//
6599// The above copyright notice and this permission notice shall be included
6600// in all copies or substantial portions of the Software.
6601//
6602// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6603// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6604// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6605// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6606// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6607// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6608// USE OR OTHER DEALINGS IN THE SOFTWARE.
6609
6610module.exports = Stream;
6611
6612var EE = require('events').EventEmitter;
6613var inherits = require('inherits');
6614
6615inherits(Stream, EE);
6616Stream.Readable = require('readable-stream/readable.js');
6617Stream.Writable = require('readable-stream/writable.js');
6618Stream.Duplex = require('readable-stream/duplex.js');
6619Stream.Transform = require('readable-stream/transform.js');
6620Stream.PassThrough = require('readable-stream/passthrough.js');
6621
6622// Backwards-compat with node 0.4.x
6623Stream.Stream = Stream;
6624
6625
6626
6627// old-style streams. Note that the pipe method (the only relevant
6628// part of this class) is overridden in the Readable class.
6629
6630function Stream() {
6631 EE.call(this);
ebd8d4e8
IC
6632}
6633
ab78acc6
IC
6634Stream.prototype.pipe = function(dest, options) {
6635 var source = this;
ebd8d4e8 6636
ab78acc6
IC
6637 function ondata(chunk) {
6638 if (dest.writable) {
6639 if (false === dest.write(chunk) && source.pause) {
6640 source.pause();
6641 }
6642 }
6643 }
ebd8d4e8 6644
ab78acc6 6645 source.on('data', ondata);
ebd8d4e8 6646
ab78acc6
IC
6647 function ondrain() {
6648 if (source.readable && source.resume) {
6649 source.resume();
6650 }
6651 }
ebd8d4e8 6652
ab78acc6 6653 dest.on('drain', ondrain);
ebd8d4e8 6654
ab78acc6
IC
6655 // If the 'end' option is not supplied, dest.end() will be called when
6656 // source gets the 'end' or 'close' events. Only dest.end() once.
6657 if (!dest._isStdio && (!options || options.end !== false)) {
6658 source.on('end', onend);
6659 source.on('close', onclose);
ebd8d4e8
IC
6660 }
6661
ab78acc6
IC
6662 var didOnEnd = false;
6663 function onend() {
6664 if (didOnEnd) return;
6665 didOnEnd = true;
ebd8d4e8 6666
ab78acc6
IC
6667 dest.end();
6668 }
ebd8d4e8 6669
ebd8d4e8 6670
ab78acc6
IC
6671 function onclose() {
6672 if (didOnEnd) return;
6673 didOnEnd = true;
ebd8d4e8 6674
ab78acc6 6675 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6676 }
6677
ab78acc6
IC
6678 // don't leave dangling pipes when there are errors.
6679 function onerror(er) {
6680 cleanup();
6681 if (EE.listenerCount(this, 'error') === 0) {
6682 throw er; // Unhandled stream error in pipe.
6683 }
6684 }
ebd8d4e8 6685
ab78acc6
IC
6686 source.on('error', onerror);
6687 dest.on('error', onerror);
ebd8d4e8 6688
ab78acc6
IC
6689 // remove all the event listeners that were added.
6690 function cleanup() {
6691 source.removeListener('data', ondata);
6692 dest.removeListener('drain', ondrain);
ebd8d4e8 6693
ab78acc6
IC
6694 source.removeListener('end', onend);
6695 source.removeListener('close', onclose);
6696
6697 source.removeListener('error', onerror);
6698 dest.removeListener('error', onerror);
6699
6700 source.removeListener('end', cleanup);
6701 source.removeListener('close', cleanup);
6702
6703 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6704 }
6705
ab78acc6
IC
6706 source.on('end', cleanup);
6707 source.on('close', cleanup);
ebd8d4e8 6708
ab78acc6 6709 dest.on('close', cleanup);
ebd8d4e8 6710
ab78acc6 6711 dest.emit('pipe', source);
ebd8d4e8 6712
ab78acc6
IC
6713 // Allow for unix-like usage: A.pipe(B).pipe(C)
6714 return dest;
6715};
ebd8d4e8 6716
ab78acc6
IC
6717},{"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){
6718// Copyright Joyent, Inc. and other Node contributors.
6719//
6720// Permission is hereby granted, free of charge, to any person obtaining a
6721// copy of this software and associated documentation files (the
6722// "Software"), to deal in the Software without restriction, including
6723// without limitation the rights to use, copy, modify, merge, publish,
6724// distribute, sublicense, and/or sell copies of the Software, and to permit
6725// persons to whom the Software is furnished to do so, subject to the
6726// following conditions:
6727//
6728// The above copyright notice and this permission notice shall be included
6729// in all copies or substantial portions of the Software.
6730//
6731// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6732// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6733// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6734// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6735// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6736// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6737// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6738
ab78acc6 6739var Buffer = require('buffer').Buffer;
ebd8d4e8 6740
ab78acc6
IC
6741var isBufferEncoding = Buffer.isEncoding
6742 || function(encoding) {
6743 switch (encoding && encoding.toLowerCase()) {
6744 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;
6745 default: return false;
6746 }
6747 }
ebd8d4e8 6748
ebd8d4e8 6749
ab78acc6
IC
6750function assertEncoding(encoding) {
6751 if (encoding && !isBufferEncoding(encoding)) {
6752 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 6753 }
ebd8d4e8
IC
6754}
6755
ab78acc6
IC
6756// StringDecoder provides an interface for efficiently splitting a series of
6757// buffers into a series of JS strings without breaking apart multi-byte
6758// characters. CESU-8 is handled as part of the UTF-8 encoding.
6759//
6760// @TODO Handling all encodings inside a single object makes it very difficult
6761// to reason about this code, so it should be split up in the future.
6762// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6763// points as used by CESU-8.
6764var StringDecoder = exports.StringDecoder = function(encoding) {
6765 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6766 assertEncoding(encoding);
6767 switch (this.encoding) {
6768 case 'utf8':
6769 // CESU-8 represents each of Surrogate Pair by 3-bytes
6770 this.surrogateSize = 3;
6771 break;
6772 case 'ucs2':
6773 case 'utf16le':
6774 // UTF-16 represents each of Surrogate Pair by 2-bytes
6775 this.surrogateSize = 2;
6776 this.detectIncompleteChar = utf16DetectIncompleteChar;
6777 break;
6778 case 'base64':
6779 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6780 this.surrogateSize = 3;
6781 this.detectIncompleteChar = base64DetectIncompleteChar;
6782 break;
6783 default:
6784 this.write = passThroughWrite;
6785 return;
6786 }
ebd8d4e8 6787
ab78acc6
IC
6788 // Enough space to store all bytes of a single character. UTF-8 needs 4
6789 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
6790 this.charBuffer = new Buffer(6);
6791 // Number of bytes received for the current incomplete multi-byte character.
6792 this.charReceived = 0;
6793 // Number of bytes expected for the current incomplete multi-byte character.
6794 this.charLength = 0;
6795};
ebd8d4e8 6796
ebd8d4e8 6797
ab78acc6
IC
6798// write decodes the given buffer and returns it as JS string that is
6799// guaranteed to not contain any partial multi-byte characters. Any partial
6800// character found at the end of the buffer is buffered up, and will be
6801// returned when calling write again with the remaining bytes.
6802//
6803// Note: Converting a Buffer containing an orphan surrogate to a String
6804// currently works, but converting a String to a Buffer (via `new Buffer`, or
6805// Buffer#write) will replace incomplete surrogates with the unicode
6806// replacement character. See https://codereview.chromium.org/121173009/ .
6807StringDecoder.prototype.write = function(buffer) {
6808 var charStr = '';
6809 // if our last write ended with an incomplete multibyte character
6810 while (this.charLength) {
6811 // determine how many remaining bytes this buffer has to offer for this char
6812 var available = (buffer.length >= this.charLength - this.charReceived) ?
6813 this.charLength - this.charReceived :
6814 buffer.length;
6815
6816 // add the new bytes to the char buffer
6817 buffer.copy(this.charBuffer, this.charReceived, 0, available);
6818 this.charReceived += available;
6819
6820 if (this.charReceived < this.charLength) {
6821 // still not enough chars in this buffer? wait for more ...
6822 return '';
6823 }
6824
6825 // remove bytes belonging to the current character from the buffer
6826 buffer = buffer.slice(available, buffer.length);
6827
6828 // get the character that was split
6829 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
6830
6831 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6832 var charCode = charStr.charCodeAt(charStr.length - 1);
6833 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6834 this.charLength += this.surrogateSize;
6835 charStr = '';
6836 continue;
6837 }
6838 this.charReceived = this.charLength = 0;
ebd8d4e8 6839
ab78acc6
IC
6840 // if there are no more bytes in this buffer, just emit our char
6841 if (buffer.length === 0) {
6842 return charStr;
6843 }
6844 break;
ebd8d4e8 6845 }
ebd8d4e8 6846
ab78acc6
IC
6847 // determine and set charLength / charReceived
6848 this.detectIncompleteChar(buffer);
ebd8d4e8 6849
ab78acc6
IC
6850 var end = buffer.length;
6851 if (this.charLength) {
6852 // buffer the incomplete character bytes we got
6853 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
6854 end -= this.charReceived;
ebd8d4e8
IC
6855 }
6856
ab78acc6 6857 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 6858
ab78acc6
IC
6859 var end = charStr.length - 1;
6860 var charCode = charStr.charCodeAt(end);
6861 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6862 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6863 var size = this.surrogateSize;
6864 this.charLength += size;
6865 this.charReceived += size;
6866 this.charBuffer.copy(this.charBuffer, size, 0, size);
6867 buffer.copy(this.charBuffer, 0, 0, size);
6868 return charStr.substring(0, end);
ebd8d4e8
IC
6869 }
6870
ab78acc6
IC
6871 // or just emit the charStr
6872 return charStr;
6873};
ebd8d4e8 6874
ab78acc6
IC
6875// detectIncompleteChar determines if there is an incomplete UTF-8 character at
6876// the end of the given buffer. If so, it sets this.charLength to the byte
6877// length that character, and sets this.charReceived to the number of bytes
6878// that are available for this character.
6879StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6880 // determine how many bytes we have to check at the end of this buffer
6881 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 6882
ab78acc6
IC
6883 // Figure out if one of the last i bytes of our buffer announces an
6884 // incomplete char.
6885 for (; i > 0; i--) {
6886 var c = buffer[buffer.length - i];
ebd8d4e8 6887
ab78acc6 6888 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 6889
ab78acc6
IC
6890 // 110XXXXX
6891 if (i == 1 && c >> 5 == 0x06) {
6892 this.charLength = 2;
6893 break;
6894 }
ebd8d4e8 6895
ab78acc6
IC
6896 // 1110XXXX
6897 if (i <= 2 && c >> 4 == 0x0E) {
6898 this.charLength = 3;
6899 break;
6900 }
ebd8d4e8 6901
ab78acc6
IC
6902 // 11110XXX
6903 if (i <= 3 && c >> 3 == 0x1E) {
6904 this.charLength = 4;
6905 break;
6906 }
6907 }
6908 this.charReceived = i;
6909};
ebd8d4e8 6910
ab78acc6
IC
6911StringDecoder.prototype.end = function(buffer) {
6912 var res = '';
6913 if (buffer && buffer.length)
6914 res = this.write(buffer);
ebd8d4e8 6915
ab78acc6
IC
6916 if (this.charReceived) {
6917 var cr = this.charReceived;
6918 var buf = this.charBuffer;
6919 var enc = this.encoding;
6920 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
6921 }
6922
ab78acc6
IC
6923 return res;
6924};
ebd8d4e8 6925
ab78acc6
IC
6926function passThroughWrite(buffer) {
6927 return buffer.toString(this.encoding);
ebd8d4e8
IC
6928}
6929
ab78acc6
IC
6930function utf16DetectIncompleteChar(buffer) {
6931 this.charReceived = buffer.length % 2;
6932 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
6933}
6934
ab78acc6
IC
6935function base64DetectIncompleteChar(buffer) {
6936 this.charReceived = buffer.length % 3;
6937 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
6938}
6939
ab78acc6
IC
6940},{"buffer":7}],28:[function(require,module,exports){
6941module.exports = function isBuffer(arg) {
6942 return arg && typeof arg === 'object'
6943 && typeof arg.copy === 'function'
6944 && typeof arg.fill === 'function'
6945 && typeof arg.readUInt8 === 'function';
6946}
6947},{}],29:[function(require,module,exports){
6948(function (process,global){
6949// Copyright Joyent, Inc. and other Node contributors.
6950//
6951// Permission is hereby granted, free of charge, to any person obtaining a
6952// copy of this software and associated documentation files (the
6953// "Software"), to deal in the Software without restriction, including
6954// without limitation the rights to use, copy, modify, merge, publish,
6955// distribute, sublicense, and/or sell copies of the Software, and to permit
6956// persons to whom the Software is furnished to do so, subject to the
6957// following conditions:
6958//
6959// The above copyright notice and this permission notice shall be included
6960// in all copies or substantial portions of the Software.
6961//
6962// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6963// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6964// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6965// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6966// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6967// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6968// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6969
ab78acc6
IC
6970var formatRegExp = /%[sdj%]/g;
6971exports.format = function(f) {
6972 if (!isString(f)) {
6973 var objects = [];
6974 for (var i = 0; i < arguments.length; i++) {
6975 objects.push(inspect(arguments[i]));
6976 }
6977 return objects.join(' ');
6978 }
ebd8d4e8 6979
ab78acc6
IC
6980 var i = 1;
6981 var args = arguments;
6982 var len = args.length;
6983 var str = String(f).replace(formatRegExp, function(x) {
6984 if (x === '%%') return '%';
6985 if (i >= len) return x;
6986 switch (x) {
6987 case '%s': return String(args[i++]);
6988 case '%d': return Number(args[i++]);
6989 case '%j':
6990 try {
6991 return JSON.stringify(args[i++]);
6992 } catch (_) {
6993 return '[Circular]';
6994 }
6995 default:
6996 return x;
6997 }
6998 });
6999 for (var x = args[i]; i < len; x = args[++i]) {
7000 if (isNull(x) || !isObject(x)) {
7001 str += ' ' + x;
7002 } else {
7003 str += ' ' + inspect(x);
7004 }
7005 }
7006 return str;
7007};
ebd8d4e8 7008
ebd8d4e8 7009
ab78acc6
IC
7010// Mark that a method should not be used.
7011// Returns a modified function which warns once by default.
7012// If --no-deprecation is set, then it is a no-op.
7013exports.deprecate = function(fn, msg) {
7014 // Allow for deprecating things in the process of starting up.
7015 if (isUndefined(global.process)) {
7016 return function() {
7017 return exports.deprecate(fn, msg).apply(this, arguments);
7018 };
7019 }
ebd8d4e8 7020
ab78acc6
IC
7021 if (process.noDeprecation === true) {
7022 return fn;
7023 }
ebd8d4e8 7024
ab78acc6
IC
7025 var warned = false;
7026 function deprecated() {
7027 if (!warned) {
7028 if (process.throwDeprecation) {
7029 throw new Error(msg);
7030 } else if (process.traceDeprecation) {
7031 console.trace(msg);
7032 } else {
7033 console.error(msg);
7034 }
7035 warned = true;
7036 }
7037 return fn.apply(this, arguments);
7038 }
ebd8d4e8 7039
ab78acc6
IC
7040 return deprecated;
7041};
ebd8d4e8 7042
ebd8d4e8 7043
ab78acc6
IC
7044var debugs = {};
7045var debugEnviron;
7046exports.debuglog = function(set) {
7047 if (isUndefined(debugEnviron))
7048 debugEnviron = process.env.NODE_DEBUG || '';
7049 set = set.toUpperCase();
7050 if (!debugs[set]) {
7051 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7052 var pid = process.pid;
7053 debugs[set] = function() {
7054 var msg = exports.format.apply(exports, arguments);
7055 console.error('%s %d: %s', set, pid, msg);
7056 };
7057 } else {
7058 debugs[set] = function() {};
ebd8d4e8
IC
7059 }
7060 }
ab78acc6
IC
7061 return debugs[set];
7062};
ebd8d4e8 7063
ebd8d4e8
IC
7064
7065/**
ab78acc6
IC
7066 * Echos the value of a value. Trys to print the value out
7067 * in the best way possible given the different types.
7068 *
7069 * @param {Object} obj The object to print out.
7070 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7071 */
ab78acc6
IC
7072/* legacy: obj, showHidden, depth, colors*/
7073function inspect(obj, opts) {
7074 // default options
7075 var ctx = {
7076 seen: [],
7077 stylize: stylizeNoColor
7078 };
7079 // legacy...
7080 if (arguments.length >= 3) ctx.depth = arguments[2];
7081 if (arguments.length >= 4) ctx.colors = arguments[3];
7082 if (isBoolean(opts)) {
7083 // legacy...
7084 ctx.showHidden = opts;
7085 } else if (opts) {
7086 // got an "options" object
7087 exports._extend(ctx, opts);
ebd8d4e8 7088 }
ab78acc6
IC
7089 // set default options
7090 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7091 if (isUndefined(ctx.depth)) ctx.depth = 2;
7092 if (isUndefined(ctx.colors)) ctx.colors = false;
7093 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7094 if (ctx.colors) ctx.stylize = stylizeWithColor;
7095 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7096}
ab78acc6 7097exports.inspect = inspect;
ebd8d4e8 7098
ebd8d4e8 7099
ab78acc6
IC
7100// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7101inspect.colors = {
7102 'bold' : [1, 22],
7103 'italic' : [3, 23],
7104 'underline' : [4, 24],
7105 'inverse' : [7, 27],
7106 'white' : [37, 39],
7107 'grey' : [90, 39],
7108 'black' : [30, 39],
7109 'blue' : [34, 39],
7110 'cyan' : [36, 39],
7111 'green' : [32, 39],
7112 'magenta' : [35, 39],
7113 'red' : [31, 39],
7114 'yellow' : [33, 39]
7115};
ebd8d4e8 7116
ab78acc6
IC
7117// Don't use 'blue' not visible on cmd.exe
7118inspect.styles = {
7119 'special': 'cyan',
7120 'number': 'yellow',
7121 'boolean': 'yellow',
7122 'undefined': 'grey',
7123 'null': 'bold',
7124 'string': 'green',
7125 'date': 'magenta',
7126 // "name": intentionally not styling
7127 'regexp': 'red'
7128};
ebd8d4e8 7129
ebd8d4e8 7130
ab78acc6
IC
7131function stylizeWithColor(str, styleType) {
7132 var style = inspect.styles[styleType];
ebd8d4e8 7133
ab78acc6
IC
7134 if (style) {
7135 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7136 '\u001b[' + inspect.colors[style][1] + 'm';
7137 } else {
7138 return str;
ebd8d4e8 7139 }
ebd8d4e8
IC
7140}
7141
ebd8d4e8 7142
ab78acc6
IC
7143function stylizeNoColor(str, styleType) {
7144 return str;
ebd8d4e8
IC
7145}
7146
ebd8d4e8 7147
ab78acc6
IC
7148function arrayToHash(array) {
7149 var hash = {};
ebd8d4e8 7150
ab78acc6
IC
7151 array.forEach(function(val, idx) {
7152 hash[val] = true;
7153 });
ebd8d4e8 7154
ab78acc6 7155 return hash;
ebd8d4e8
IC
7156}
7157
ebd8d4e8 7158
ab78acc6
IC
7159function formatValue(ctx, value, recurseTimes) {
7160 // Provide a hook for user-specified inspect functions.
7161 // Check that value is an object with an inspect function on it
7162 if (ctx.customInspect &&
7163 value &&
7164 isFunction(value.inspect) &&
7165 // Filter out the util module, it's inspect function is special
7166 value.inspect !== exports.inspect &&
7167 // Also filter out any prototype objects using the circular check.
7168 !(value.constructor && value.constructor.prototype === value)) {
7169 var ret = value.inspect(recurseTimes, ctx);
7170 if (!isString(ret)) {
7171 ret = formatValue(ctx, ret, recurseTimes);
7172 }
7173 return ret;
ebd8d4e8 7174 }
ebd8d4e8 7175
ab78acc6
IC
7176 // Primitive types cannot have properties
7177 var primitive = formatPrimitive(ctx, value);
7178 if (primitive) {
7179 return primitive;
ebd8d4e8
IC
7180 }
7181
ab78acc6
IC
7182 // Look up the keys of the object.
7183 var keys = Object.keys(value);
7184 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7185
ab78acc6
IC
7186 if (ctx.showHidden) {
7187 keys = Object.getOwnPropertyNames(value);
7188 }
ebd8d4e8 7189
ab78acc6
IC
7190 // IE doesn't make error fields non-enumerable
7191 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7192 if (isError(value)
7193 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7194 return formatError(value);
ebd8d4e8 7195 }
ebd8d4e8 7196
ab78acc6
IC
7197 // Some type of object without properties can be shortcutted.
7198 if (keys.length === 0) {
7199 if (isFunction(value)) {
7200 var name = value.name ? ': ' + value.name : '';
7201 return ctx.stylize('[Function' + name + ']', 'special');
7202 }
7203 if (isRegExp(value)) {
7204 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7205 }
7206 if (isDate(value)) {
7207 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7208 }
7209 if (isError(value)) {
7210 return formatError(value);
7211 }
ebd8d4e8 7212 }
ebd8d4e8 7213
ab78acc6 7214 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7215
ab78acc6
IC
7216 // Make Array say that they are Array
7217 if (isArray(value)) {
7218 array = true;
7219 braces = ['[', ']'];
7220 }
ebd8d4e8 7221
ab78acc6
IC
7222 // Make functions say that they are functions
7223 if (isFunction(value)) {
7224 var n = value.name ? ': ' + value.name : '';
7225 base = ' [Function' + n + ']';
7226 }
ebd8d4e8 7227
ab78acc6
IC
7228 // Make RegExps say that they are RegExps
7229 if (isRegExp(value)) {
7230 base = ' ' + RegExp.prototype.toString.call(value);
7231 }
ebd8d4e8 7232
ab78acc6
IC
7233 // Make dates with properties first say the date
7234 if (isDate(value)) {
7235 base = ' ' + Date.prototype.toUTCString.call(value);
7236 }
ebd8d4e8 7237
ab78acc6
IC
7238 // Make error with message first say the error
7239 if (isError(value)) {
7240 base = ' ' + formatError(value);
7241 }
ebd8d4e8 7242
ab78acc6
IC
7243 if (keys.length === 0 && (!array || value.length == 0)) {
7244 return braces[0] + base + braces[1];
7245 }
ebd8d4e8 7246
ab78acc6
IC
7247 if (recurseTimes < 0) {
7248 if (isRegExp(value)) {
7249 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7250 } else {
7251 return ctx.stylize('[Object]', 'special');
7252 }
7253 }
ebd8d4e8 7254
ab78acc6 7255 ctx.seen.push(value);
ebd8d4e8 7256
ab78acc6
IC
7257 var output;
7258 if (array) {
7259 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7260 } else {
7261 output = keys.map(function(key) {
7262 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7263 });
7264 }
ebd8d4e8 7265
ab78acc6 7266 ctx.seen.pop();
ebd8d4e8 7267
ab78acc6
IC
7268 return reduceToSingleString(output, base, braces);
7269}
ebd8d4e8 7270
ebd8d4e8 7271
ab78acc6
IC
7272function formatPrimitive(ctx, value) {
7273 if (isUndefined(value))
7274 return ctx.stylize('undefined', 'undefined');
7275 if (isString(value)) {
7276 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7277 .replace(/'/g, "\\'")
7278 .replace(/\\"/g, '"') + '\'';
7279 return ctx.stylize(simple, 'string');
7280 }
7281 if (isNumber(value))
7282 return ctx.stylize('' + value, 'number');
7283 if (isBoolean(value))
7284 return ctx.stylize('' + value, 'boolean');
7285 // For some reason typeof null is "object", so special case here.
7286 if (isNull(value))
7287 return ctx.stylize('null', 'null');
7288}
ebd8d4e8 7289
ebd8d4e8 7290
ab78acc6
IC
7291function formatError(value) {
7292 return '[' + Error.prototype.toString.call(value) + ']';
7293}
ebd8d4e8 7294
ebd8d4e8 7295
ab78acc6
IC
7296function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7297 var output = [];
7298 for (var i = 0, l = value.length; i < l; ++i) {
7299 if (hasOwnProperty(value, String(i))) {
7300 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7301 String(i), true));
7302 } else {
7303 output.push('');
7304 }
7305 }
7306 keys.forEach(function(key) {
7307 if (!key.match(/^\d+$/)) {
7308 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7309 key, true));
7310 }
7311 });
7312 return output;
7313}
ebd8d4e8 7314
ebd8d4e8 7315
ab78acc6
IC
7316function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7317 var name, str, desc;
7318 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7319 if (desc.get) {
7320 if (desc.set) {
7321 str = ctx.stylize('[Getter/Setter]', 'special');
7322 } else {
7323 str = ctx.stylize('[Getter]', 'special');
7324 }
7325 } else {
7326 if (desc.set) {
7327 str = ctx.stylize('[Setter]', 'special');
7328 }
7329 }
7330 if (!hasOwnProperty(visibleKeys, key)) {
7331 name = '[' + key + ']';
7332 }
7333 if (!str) {
7334 if (ctx.seen.indexOf(desc.value) < 0) {
7335 if (isNull(recurseTimes)) {
7336 str = formatValue(ctx, desc.value, null);
7337 } else {
7338 str = formatValue(ctx, desc.value, recurseTimes - 1);
7339 }
7340 if (str.indexOf('\n') > -1) {
7341 if (array) {
7342 str = str.split('\n').map(function(line) {
7343 return ' ' + line;
7344 }).join('\n').substr(2);
7345 } else {
7346 str = '\n' + str.split('\n').map(function(line) {
7347 return ' ' + line;
7348 }).join('\n');
7349 }
7350 }
7351 } else {
7352 str = ctx.stylize('[Circular]', 'special');
7353 }
7354 }
7355 if (isUndefined(name)) {
7356 if (array && key.match(/^\d+$/)) {
7357 return str;
7358 }
7359 name = JSON.stringify('' + key);
7360 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7361 name = name.substr(1, name.length - 2);
7362 name = ctx.stylize(name, 'name');
7363 } else {
7364 name = name.replace(/'/g, "\\'")
7365 .replace(/\\"/g, '"')
7366 .replace(/(^"|"$)/g, "'");
7367 name = ctx.stylize(name, 'string');
7368 }
7369 }
ebd8d4e8 7370
ab78acc6
IC
7371 return name + ': ' + str;
7372}
ebd8d4e8 7373
ebd8d4e8 7374
ab78acc6
IC
7375function reduceToSingleString(output, base, braces) {
7376 var numLinesEst = 0;
7377 var length = output.reduce(function(prev, cur) {
7378 numLinesEst++;
7379 if (cur.indexOf('\n') >= 0) numLinesEst++;
7380 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7381 }, 0);
ebd8d4e8 7382
ab78acc6
IC
7383 if (length > 60) {
7384 return braces[0] +
7385 (base === '' ? '' : base + '\n ') +
7386 ' ' +
7387 output.join(',\n ') +
7388 ' ' +
7389 braces[1];
7390 }
ebd8d4e8 7391
ab78acc6
IC
7392 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7393}
ebd8d4e8 7394
ebd8d4e8 7395
ab78acc6
IC
7396// NOTE: These type checking functions intentionally don't use `instanceof`
7397// because it is fragile and can be easily faked with `Object.create()`.
7398function isArray(ar) {
7399 return Array.isArray(ar);
7400}
7401exports.isArray = isArray;
ebd8d4e8 7402
ab78acc6
IC
7403function isBoolean(arg) {
7404 return typeof arg === 'boolean';
7405}
7406exports.isBoolean = isBoolean;
ebd8d4e8 7407
ab78acc6
IC
7408function isNull(arg) {
7409 return arg === null;
7410}
7411exports.isNull = isNull;
ebd8d4e8 7412
ab78acc6
IC
7413function isNullOrUndefined(arg) {
7414 return arg == null;
7415}
7416exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7417
ab78acc6
IC
7418function isNumber(arg) {
7419 return typeof arg === 'number';
7420}
7421exports.isNumber = isNumber;
ebd8d4e8 7422
ab78acc6
IC
7423function isString(arg) {
7424 return typeof arg === 'string';
7425}
7426exports.isString = isString;
ebd8d4e8 7427
ab78acc6
IC
7428function isSymbol(arg) {
7429 return typeof arg === 'symbol';
7430}
7431exports.isSymbol = isSymbol;
ebd8d4e8 7432
ab78acc6
IC
7433function isUndefined(arg) {
7434 return arg === void 0;
7435}
7436exports.isUndefined = isUndefined;
ebd8d4e8 7437
ab78acc6
IC
7438function isRegExp(re) {
7439 return isObject(re) && objectToString(re) === '[object RegExp]';
7440}
7441exports.isRegExp = isRegExp;
ebd8d4e8 7442
ab78acc6
IC
7443function isObject(arg) {
7444 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7445}
ab78acc6 7446exports.isObject = isObject;
ebd8d4e8 7447
ab78acc6
IC
7448function isDate(d) {
7449 return isObject(d) && objectToString(d) === '[object Date]';
7450}
7451exports.isDate = isDate;
ebd8d4e8 7452
ab78acc6
IC
7453function isError(e) {
7454 return isObject(e) &&
7455 (objectToString(e) === '[object Error]' || e instanceof Error);
7456}
7457exports.isError = isError;
ebd8d4e8 7458
ab78acc6
IC
7459function isFunction(arg) {
7460 return typeof arg === 'function';
7461}
7462exports.isFunction = isFunction;
ebd8d4e8 7463
ab78acc6
IC
7464function isPrimitive(arg) {
7465 return arg === null ||
7466 typeof arg === 'boolean' ||
7467 typeof arg === 'number' ||
7468 typeof arg === 'string' ||
7469 typeof arg === 'symbol' || // ES6 symbol
7470 typeof arg === 'undefined';
7471}
7472exports.isPrimitive = isPrimitive;
ebd8d4e8 7473
ab78acc6 7474exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7475
ab78acc6
IC
7476function objectToString(o) {
7477 return Object.prototype.toString.call(o);
7478}
ebd8d4e8 7479
ebd8d4e8 7480
ab78acc6
IC
7481function pad(n) {
7482 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7483}
ebd8d4e8 7484
ebd8d4e8 7485
ab78acc6
IC
7486var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7487 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7488
ab78acc6
IC
7489// 26 Feb 16:19:34
7490function timestamp() {
7491 var d = new Date();
7492 var time = [pad(d.getHours()),
7493 pad(d.getMinutes()),
7494 pad(d.getSeconds())].join(':');
7495 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7496}
7497
ab78acc6
IC
7498
7499// log is just a thin wrapper to console.log that prepends a timestamp
7500exports.log = function() {
7501 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7502};
7503
ab78acc6
IC
7504
7505/**
7506 * Inherit the prototype methods from one constructor into another.
7507 *
7508 * The Function.prototype.inherits from lang.js rewritten as a standalone
7509 * function (not on Function.prototype). NOTE: If this file is to be loaded
7510 * during bootstrapping this function needs to be rewritten using some native
7511 * functions as prototype setup using normal JavaScript does not work as
7512 * expected during bootstrapping (see mirror.js in r114903).
7513 *
7514 * @param {function} ctor Constructor function which needs to inherit the
7515 * prototype.
7516 * @param {function} superCtor Constructor function to inherit prototype from.
7517 */
7518exports.inherits = require('inherits');
7519
7520exports._extend = function(origin, add) {
7521 // Don't do anything if add isn't an object
7522 if (!add || !isObject(add)) return origin;
7523
7524 var keys = Object.keys(add);
7525 var i = keys.length;
7526 while (i--) {
7527 origin[keys[i]] = add[keys[i]];
7528 }
7529 return origin;
7530};
7531
7532function hasOwnProperty(obj, prop) {
7533 return Object.prototype.hasOwnProperty.call(obj, prop);
7534}
7535
7536}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7537},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7538// Base58 encoding/decoding
7539// Originally written by Mike Hearn for BitcoinJ
7540// Copyright (c) 2011 Google Inc
7541// Ported to JavaScript by Stefan Thomas
7542// Merged Buffer refactorings from base58-native by Stephen Pair
7543// Copyright (c) 2013 BitPay Inc
7544
ebd8d4e8 7545var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7546var ALPHABET_MAP = {}
7547for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7548 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7549}
ab78acc6 7550var BASE = 58
ebd8d4e8
IC
7551
7552function encode(buffer) {
ab78acc6
IC
7553 if (buffer.length === 0) return ''
7554
7555 var i, j, digits = [0]
7556 for (i = 0; i < buffer.length; i++) {
7557 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7558
7559 digits[0] += buffer[i]
ebd8d4e8 7560
ab78acc6
IC
7561 var carry = 0
7562 for (j = 0; j < digits.length; ++j) {
7563 digits[j] += carry
ebd8d4e8 7564
ab78acc6
IC
7565 carry = (digits[j] / BASE) | 0
7566 digits[j] %= BASE
7567 }
7568
7569 while (carry) {
7570 digits.push(carry % BASE)
7571
7572 carry = (carry / BASE) | 0
7573 }
ebd8d4e8
IC
7574 }
7575
7576 // deal with leading zeros
ab78acc6 7577 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7578
ab78acc6
IC
7579 // convert digits to a string
7580 var stringOutput = ""
7581 for (var i = digits.length - 1; i >= 0; i--) {
7582 stringOutput = stringOutput + ALPHABET[digits[i]]
7583 }
7584 return stringOutput
ebd8d4e8
IC
7585}
7586
7587function decode(string) {
ab78acc6 7588 if (string.length === 0) return []
ebd8d4e8 7589
ab78acc6
IC
7590 var i, j, bytes = [0]
7591 for (i = 0; i < string.length; i++) {
7592 var c = string[i]
7593 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7594
ab78acc6
IC
7595 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7596 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7597
ab78acc6
IC
7598 var carry = 0
7599 for (j = 0; j < bytes.length; ++j) {
7600 bytes[j] += carry
ebd8d4e8 7601
ab78acc6
IC
7602 carry = bytes[j] >> 8
7603 bytes[j] &= 0xff
7604 }
ebd8d4e8 7605
ab78acc6
IC
7606 while (carry) {
7607 bytes.push(carry & 0xff)
7608
7609 carry >>= 8
7610 }
ebd8d4e8
IC
7611 }
7612
ab78acc6
IC
7613 // deal with leading zeros
7614 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7615
ab78acc6 7616 return bytes.reverse()
ebd8d4e8
IC
7617}
7618
7619module.exports = {
7620 encode: encode,
7621 decode: decode
7622}
7623
ab78acc6 7624},{}],31:[function(require,module,exports){
ebd8d4e8 7625(function (Buffer){
ab78acc6
IC
7626'use strict'
7627
7628var base58 = require('bs58')
7629var createHash = require('create-hash')
7630
7631// SHA256(SHA256(buffer))
7632function sha256x2 (buffer) {
7633 buffer = createHash('sha256').update(buffer).digest()
7634 return createHash('sha256').update(buffer).digest()
7635}
7636
7637// Encode a buffer as a base58-check encoded string
7638function encode (payload) {
7639 var checksum = sha256x2(payload).slice(0, 4)
7640
7641 return base58.encode(Buffer.concat([
7642 payload,
7643 checksum
7644 ]))
7645}
7646
7647// Decode a base58-check encoded string to a buffer
7648function decode (string) {
7649 var buffer = new Buffer(base58.decode(string))
7650
7651 var payload = buffer.slice(0, -4)
7652 var checksum = buffer.slice(-4)
7653 var newChecksum = sha256x2(payload).slice(0, 4)
7654
7655 for (var i = 0; i < newChecksum.length; ++i) {
7656 if (newChecksum[i] === checksum[i]) continue
7657
7658 throw new Error('Invalid checksum')
ebd8d4e8 7659 }
ab78acc6
IC
7660
7661 return payload
ebd8d4e8
IC
7662}
7663
ab78acc6
IC
7664module.exports = {
7665 encode: encode,
7666 decode: decode
ebd8d4e8
IC
7667}
7668
ab78acc6
IC
7669}).call(this,require("buffer").Buffer)
7670},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7671(function (Buffer){
ab78acc6
IC
7672'use strict';
7673var inherits = require('inherits')
7674var md5 = require('./md5')
7675var rmd160 = require('ripemd160')
7676var sha = require('sha.js')
ebd8d4e8 7677
ab78acc6 7678var Transform = require('stream').Transform
ebd8d4e8 7679
ab78acc6
IC
7680function HashNoConstructor(hash) {
7681 Transform.call(this)
ebd8d4e8 7682
ab78acc6
IC
7683 this._hash = hash
7684 this.buffers = []
7685}
ebd8d4e8 7686
ab78acc6 7687inherits(HashNoConstructor, Transform)
ebd8d4e8 7688
ab78acc6
IC
7689HashNoConstructor.prototype._transform = function (data, _, next) {
7690 this.buffers.push(data)
ebd8d4e8 7691
ab78acc6
IC
7692 next()
7693}
ebd8d4e8 7694
ab78acc6
IC
7695HashNoConstructor.prototype._flush = function (next) {
7696 this.push(this.digest())
7697 next()
7698}
7699
7700HashNoConstructor.prototype.update = function (data, enc) {
7701 if (typeof data === 'string') {
7702 data = new Buffer(data, enc)
ebd8d4e8
IC
7703 }
7704
ab78acc6
IC
7705 this.buffers.push(data)
7706 return this
7707}
7708
7709HashNoConstructor.prototype.digest = function (enc) {
7710 var buf = Buffer.concat(this.buffers)
7711 var r = this._hash(buf)
7712 this.buffers = null
7713
7714 return enc ? r.toString(enc) : r
7715}
7716
7717function Hash(hash) {
7718 Transform.call(this)
7719
7720 this._hash = hash
7721}
7722
7723inherits(Hash, Transform)
7724
7725Hash.prototype._transform = function (data, enc, next) {
7726 if (enc) data = new Buffer(data, enc)
7727
7728 this._hash.update(data)
7729
7730 next()
ebd8d4e8
IC
7731}
7732
ab78acc6
IC
7733Hash.prototype._flush = function (next) {
7734 this.push(this._hash.digest())
7735 this._hash = null
7736
7737 next()
7738}
7739
7740Hash.prototype.update = function (data, enc) {
7741 if (typeof data === 'string') {
7742 data = new Buffer(data, enc)
7743 }
7744
7745 this._hash.update(data)
ebd8d4e8
IC
7746 return this
7747}
7748
ab78acc6
IC
7749Hash.prototype.digest = function (enc) {
7750 var outData = this._hash.digest()
7751
7752 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
7753}
7754
ab78acc6
IC
7755module.exports = function createHash (alg) {
7756 if ('md5' === alg) return new HashNoConstructor(md5)
7757 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7758
7759 return new Hash(sha(alg))
7760}
ebd8d4e8 7761
ab78acc6
IC
7762}).call(this,require("buffer").Buffer)
7763},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 7764(function (Buffer){
ab78acc6 7765'use strict';
ebd8d4e8
IC
7766var intSize = 4;
7767var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7768var chrsz = 8;
7769
7770function toArray(buf, bigEndian) {
7771 if ((buf.length % intSize) !== 0) {
7772 var len = buf.length + (intSize - (buf.length % intSize));
7773 buf = Buffer.concat([buf, zeroBuffer], len);
7774 }
7775
7776 var arr = [];
7777 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7778 for (var i = 0; i < buf.length; i += intSize) {
7779 arr.push(fn.call(buf, i));
7780 }
7781 return arr;
7782}
7783
7784function toBuffer(arr, size, bigEndian) {
7785 var buf = new Buffer(size);
7786 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7787 for (var i = 0; i < arr.length; i++) {
7788 fn.call(buf, arr[i], i * 4, true);
7789 }
7790 return buf;
7791}
7792
7793function hash(buf, fn, hashSize, bigEndian) {
7794 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7795 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7796 return toBuffer(arr, hashSize, bigEndian);
7797}
ab78acc6
IC
7798exports.hash = hash;
7799}).call(this,require("buffer").Buffer)
7800},{"buffer":7}],34:[function(require,module,exports){
7801'use strict';
ebd8d4e8
IC
7802/*
7803 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7804 * Digest Algorithm, as defined in RFC 1321.
7805 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
7806 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7807 * Distributed under the BSD License
7808 * See http://pajhome.org.uk/crypt/md5 for more info.
7809 */
7810
ab78acc6 7811var helpers = require('./helpers');
ebd8d4e8
IC
7812
7813/*
7814 * Calculate the MD5 of an array of little-endian words, and a bit length
7815 */
7816function core_md5(x, len)
7817{
7818 /* append padding */
7819 x[len >> 5] |= 0x80 << ((len) % 32);
7820 x[(((len + 64) >>> 9) << 4) + 14] = len;
7821
7822 var a = 1732584193;
7823 var b = -271733879;
7824 var c = -1732584194;
7825 var d = 271733878;
7826
7827 for(var i = 0; i < x.length; i += 16)
7828 {
7829 var olda = a;
7830 var oldb = b;
7831 var oldc = c;
7832 var oldd = d;
7833
7834 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
7835 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
7836 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
7837 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
7838 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
7839 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
7840 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
7841 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
7842 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
7843 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
7844 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
7845 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
7846 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
7847 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
7848 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
7849 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
7850
7851 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
7852 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
7853 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
7854 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
7855 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
7856 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
7857 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
7858 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
7859 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
7860 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
7861 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
7862 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
7863 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
7864 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
7865 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
7866 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
7867
7868 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
7869 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
7870 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
7871 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
7872 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
7873 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
7874 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
7875 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
7876 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
7877 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
7878 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
7879 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
7880 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
7881 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
7882 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
7883 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
7884
7885 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
7886 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
7887 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
7888 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
7889 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
7890 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
7891 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
7892 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
7893 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
7894 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
7895 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
7896 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
7897 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
7898 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
7899 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
7900 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
7901
7902 a = safe_add(a, olda);
7903 b = safe_add(b, oldb);
7904 c = safe_add(c, oldc);
7905 d = safe_add(d, oldd);
7906 }
7907 return Array(a, b, c, d);
7908
7909}
7910
7911/*
7912 * These functions implement the four basic operations the algorithm uses.
7913 */
7914function md5_cmn(q, a, b, x, s, t)
7915{
7916 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7917}
7918function md5_ff(a, b, c, d, x, s, t)
7919{
7920 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7921}
7922function md5_gg(a, b, c, d, x, s, t)
7923{
7924 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7925}
7926function md5_hh(a, b, c, d, x, s, t)
7927{
7928 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7929}
7930function md5_ii(a, b, c, d, x, s, t)
7931{
7932 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7933}
7934
7935/*
7936 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7937 * to work around bugs in some JS interpreters.
7938 */
7939function safe_add(x, y)
7940{
7941 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
7942 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7943 return (msw << 16) | (lsw & 0xFFFF);
7944}
7945
7946/*
7947 * Bitwise rotate a 32-bit number to the left.
7948 */
7949function bit_rol(num, cnt)
7950{
7951 return (num << cnt) | (num >>> (32 - cnt));
7952}
7953
7954module.exports = function md5(buf) {
7955 return helpers.hash(buf, core_md5, 16);
7956};
ab78acc6
IC
7957},{"./helpers":33}],35:[function(require,module,exports){
7958arguments[4][12][0].apply(exports,arguments)
7959},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 7960(function (Buffer){
ebd8d4e8
IC
7961/*
7962CryptoJS v3.1.2
7963code.google.com/p/crypto-js
7964(c) 2009-2013 by Jeff Mott. All rights reserved.
7965code.google.com/p/crypto-js/wiki/License
7966*/
7967/** @preserve
7968(c) 2012 by Cédric Mesnil. All rights reserved.
7969
7970Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7971
7972 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7973 - 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.
7974
7975THIS 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.
7976*/
7977
ab78acc6 7978// constants table
ebd8d4e8 7979var zl = [
ab78acc6
IC
7980 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7981 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
7982 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
7983 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
7984 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
7985]
7986
ebd8d4e8 7987var zr = [
ab78acc6
IC
7988 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
7989 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
7990 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
7991 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
7992 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
7993]
7994
ebd8d4e8 7995var sl = [
ab78acc6
IC
7996 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7997 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
7998 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
7999 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8000 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8001]
8002
ebd8d4e8 8003var sr = [
ab78acc6
IC
8004 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8005 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8006 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8007 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8008 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8009]
ebd8d4e8 8010
ab78acc6
IC
8011var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8012var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8013
ab78acc6
IC
8014function bytesToWords (bytes) {
8015 var words = []
ebd8d4e8 8016 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8017 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8018 }
ab78acc6
IC
8019 return words
8020}
ebd8d4e8 8021
ab78acc6
IC
8022function wordsToBytes (words) {
8023 var bytes = []
ebd8d4e8 8024 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8025 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8026 }
ab78acc6
IC
8027 return bytes
8028}
ebd8d4e8 8029
ab78acc6
IC
8030function processBlock (H, M, offset) {
8031 // swap endian
ebd8d4e8 8032 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8033 var offset_i = offset + i
8034 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8035
8036 // Swap
8037 M[offset_i] = (
ab78acc6
IC
8038 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8039 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8040 )
ebd8d4e8
IC
8041 }
8042
8043 // Working variables
ab78acc6
IC
8044 var al, bl, cl, dl, el
8045 var ar, br, cr, dr, er
8046
8047 ar = al = H[0]
8048 br = bl = H[1]
8049 cr = cl = H[2]
8050 dr = dl = H[3]
8051 er = el = H[4]
8052
8053 // computation
8054 var t
8055 for (i = 0; i < 80; i += 1) {
8056 t = (al + M[offset + zl[i]]) | 0
8057 if (i < 16) {
8058 t += f1(bl, cl, dl) + hl[0]
8059 } else if (i < 32) {
8060 t += f2(bl, cl, dl) + hl[1]
8061 } else if (i < 48) {
8062 t += f3(bl, cl, dl) + hl[2]
8063 } else if (i < 64) {
8064 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8065 } else {// if (i<80) {
ab78acc6
IC
8066 t += f5(bl, cl, dl) + hl[4]
8067 }
8068 t = t | 0
8069 t = rotl(t, sl[i])
8070 t = (t + el) | 0
8071 al = el
8072 el = dl
8073 dl = rotl(cl, 10)
8074 cl = bl
8075 bl = t
8076
8077 t = (ar + M[offset + zr[i]]) | 0
8078 if (i < 16) {
8079 t += f5(br, cr, dr) + hr[0]
8080 } else if (i < 32) {
8081 t += f4(br, cr, dr) + hr[1]
8082 } else if (i < 48) {
8083 t += f3(br, cr, dr) + hr[2]
8084 } else if (i < 64) {
8085 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8086 } else {// if (i<80) {
ab78acc6 8087 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8088 }
ebd8d4e8 8089
ab78acc6
IC
8090 t = t | 0
8091 t = rotl(t, sr[i])
8092 t = (t + er) | 0
8093 ar = er
8094 er = dr
8095 dr = rotl(cr, 10)
8096 cr = br
8097 br = t
8098 }
8099
8100 // intermediate hash value
8101 t = (H[1] + cl + dr) | 0
8102 H[1] = (H[2] + dl + er) | 0
8103 H[2] = (H[3] + el + ar) | 0
8104 H[3] = (H[4] + al + br) | 0
8105 H[4] = (H[0] + bl + cr) | 0
8106 H[0] = t
ebd8d4e8
IC
8107}
8108
ab78acc6
IC
8109function f1 (x, y, z) {
8110 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8111}
8112
ab78acc6
IC
8113function f2 (x, y, z) {
8114 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8115}
8116
ab78acc6
IC
8117function f3 (x, y, z) {
8118 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8119}
8120
ab78acc6
IC
8121function f4 (x, y, z) {
8122 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8123}
8124
ab78acc6
IC
8125function f5 (x, y, z) {
8126 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8127}
8128
ab78acc6
IC
8129function rotl (x, n) {
8130 return (x << n) | (x >>> (32 - n))
8131}
8132
8133function ripemd160 (message) {
8134 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8135
ab78acc6
IC
8136 if (typeof message === 'string') {
8137 message = new Buffer(message, 'utf8')
8138 }
ebd8d4e8 8139
ab78acc6 8140 var m = bytesToWords(message)
ebd8d4e8 8141
ab78acc6
IC
8142 var nBitsLeft = message.length * 8
8143 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8144
8145 // Add padding
ab78acc6 8146 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8147 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8148 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8149 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8150 )
ebd8d4e8 8151
ab78acc6
IC
8152 for (var i = 0; i < m.length; i += 16) {
8153 processBlock(H, m, i)
ebd8d4e8
IC
8154 }
8155
ab78acc6
IC
8156 // swap endian
8157 for (i = 0; i < 5; i++) {
8158 // shortcut
8159 var H_i = H[i]
ebd8d4e8
IC
8160
8161 // Swap
ab78acc6
IC
8162 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8163 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8164 }
8165
ab78acc6
IC
8166 var digestbytes = wordsToBytes(H)
8167 return new Buffer(digestbytes)
ebd8d4e8
IC
8168}
8169
ab78acc6
IC
8170module.exports = ripemd160
8171
8172}).call(this,require("buffer").Buffer)
8173},{"buffer":7}],37:[function(require,module,exports){
8174(function (Buffer){
8175// prototype class for hash functions
8176function Hash (blockSize, finalSize) {
8177 this._block = new Buffer(blockSize)
8178 this._finalSize = finalSize
8179 this._blockSize = blockSize
8180 this._len = 0
8181 this._s = 0
8182}
ebd8d4e8 8183
ab78acc6
IC
8184Hash.prototype.update = function (data, enc) {
8185 if (typeof data === 'string') {
8186 enc = enc || 'utf8'
8187 data = new Buffer(data, enc)
8188 }
ebd8d4e8 8189
ab78acc6
IC
8190 var l = this._len += data.length
8191 var s = this._s || 0
8192 var f = 0
8193 var buffer = this._block
ebd8d4e8 8194
ab78acc6
IC
8195 while (s < l) {
8196 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8197 var ch = (t - f)
ebd8d4e8 8198
ab78acc6
IC
8199 for (var i = 0; i < ch; i++) {
8200 buffer[(s % this._blockSize) + i] = data[i + f]
8201 }
8202
8203 s += ch
8204 f += ch
ebd8d4e8 8205
ab78acc6
IC
8206 if ((s % this._blockSize) === 0) {
8207 this._update(buffer)
8208 }
ebd8d4e8 8209 }
ab78acc6
IC
8210 this._s = s
8211
8212 return this
8213}
ebd8d4e8 8214
ab78acc6
IC
8215Hash.prototype.digest = function (enc) {
8216 // Suppose the length of the message M, in bits, is l
8217 var l = this._len * 8
8218
8219 // Append the bit 1 to the end of the message
8220 this._block[this._len % this._blockSize] = 0x80
8221
8222 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8223 this._block.fill(0, this._len % this._blockSize + 1)
8224
8225 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8226 this._update(this._block)
8227 this._block.fill(0)
ebd8d4e8
IC
8228 }
8229
ab78acc6
IC
8230 // to this append the block which is equal to the number l written in binary
8231 // TODO: handle case where l is > Math.pow(2, 29)
8232 this._block.writeInt32BE(l, this._blockSize - 4)
8233
8234 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8235
ab78acc6
IC
8236 return enc ? hash.toString(enc) : hash
8237}
ebd8d4e8 8238
ab78acc6
IC
8239Hash.prototype._update = function () {
8240 throw new Error('_update must be implemented by subclass')
8241}
ebd8d4e8 8242
ab78acc6 8243module.exports = Hash
ebd8d4e8 8244
ab78acc6
IC
8245}).call(this,require("buffer").Buffer)
8246},{"buffer":7}],38:[function(require,module,exports){
8247var exports = module.exports = function SHA (algorithm) {
8248 algorithm = algorithm.toLowerCase()
ebd8d4e8 8249
ab78acc6
IC
8250 var Algorithm = exports[algorithm]
8251 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8252
ab78acc6
IC
8253 return new Algorithm()
8254}
8255
8256exports.sha = require('./sha')
8257exports.sha1 = require('./sha1')
8258exports.sha224 = require('./sha224')
8259exports.sha256 = require('./sha256')
8260exports.sha384 = require('./sha384')
8261exports.sha512 = require('./sha512')
8262
8263},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8264(function (Buffer){
8265/*
8266 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8267 * in FIPS PUB 180-1
8268 * This source code is derived from sha1.js of the same repository.
8269 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8270 * operation was added.
8271 */
ebd8d4e8 8272
ab78acc6
IC
8273var inherits = require('inherits')
8274var Hash = require('./hash')
ebd8d4e8 8275
ab78acc6 8276var W = new Array(80)
ebd8d4e8 8277
ab78acc6
IC
8278function Sha () {
8279 this.init()
8280 this._w = W
ebd8d4e8 8281
ab78acc6
IC
8282 Hash.call(this, 64, 56)
8283}
ebd8d4e8 8284
ab78acc6 8285inherits(Sha, Hash)
ebd8d4e8 8286
ab78acc6
IC
8287Sha.prototype.init = function () {
8288 this._a = 0x67452301 | 0
8289 this._b = 0xefcdab89 | 0
8290 this._c = 0x98badcfe | 0
8291 this._d = 0x10325476 | 0
8292 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8293
ab78acc6
IC
8294 return this
8295}
8296
8297/*
8298 * Bitwise rotate a 32-bit number to the left.
8299 */
8300function rol (num, cnt) {
8301 return (num << cnt) | (num >>> (32 - cnt))
8302}
8303
8304Sha.prototype._update = function (M) {
8305 var W = this._w
8306
8307 var a = this._a
8308 var b = this._b
8309 var c = this._c
8310 var d = this._d
8311 var e = this._e
ebd8d4e8 8312
ab78acc6
IC
8313 var j = 0, k
8314
8315 /*
8316 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8317 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8318 */
8319 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8320 function loop (w, f) {
8321 W[j] = w
8322
8323 var t = rol(a, 5) + f + e + w + k
8324
8325 e = d
8326 d = c
8327 c = rol(b, 30)
8328 b = a
8329 a = t
8330 j++
ebd8d4e8
IC
8331 }
8332
ab78acc6
IC
8333 k = 1518500249
8334 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8335 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8336 k = 1859775393
8337 while (j < 40) loop(calcW(), b ^ c ^ d)
8338 k = -1894007588
8339 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8340 k = -899497514
8341 while (j < 80) loop(calcW(), b ^ c ^ d)
8342
8343 this._a = (a + this._a) | 0
8344 this._b = (b + this._b) | 0
8345 this._c = (c + this._c) | 0
8346 this._d = (d + this._d) | 0
8347 this._e = (e + this._e) | 0
ebd8d4e8
IC
8348}
8349
ab78acc6
IC
8350Sha.prototype._hash = function () {
8351 var H = new Buffer(20)
8352
8353 H.writeInt32BE(this._a | 0, 0)
8354 H.writeInt32BE(this._b | 0, 4)
8355 H.writeInt32BE(this._c | 0, 8)
8356 H.writeInt32BE(this._d | 0, 12)
8357 H.writeInt32BE(this._e | 0, 16)
8358
8359 return H
ebd8d4e8
IC
8360}
8361
ab78acc6 8362module.exports = Sha
ebd8d4e8 8363
ebd8d4e8 8364
ab78acc6
IC
8365}).call(this,require("buffer").Buffer)
8366},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8367(function (Buffer){
ebd8d4e8
IC
8368/*
8369 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8370 * in FIPS PUB 180-1
8371 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8372 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8373 * Distributed under the BSD License
8374 * See http://pajhome.org.uk/crypt/md5 for details.
8375 */
ebd8d4e8 8376
ab78acc6
IC
8377var inherits = require('inherits')
8378var Hash = require('./hash')
ebd8d4e8 8379
ab78acc6 8380var W = new Array(80)
ebd8d4e8 8381
ab78acc6
IC
8382function Sha1 () {
8383 this.init()
8384 this._w = W
ebd8d4e8 8385
ab78acc6
IC
8386 Hash.call(this, 64, 56)
8387}
ebd8d4e8 8388
ab78acc6 8389inherits(Sha1, Hash)
ebd8d4e8 8390
ab78acc6
IC
8391Sha1.prototype.init = function () {
8392 this._a = 0x67452301 | 0
8393 this._b = 0xefcdab89 | 0
8394 this._c = 0x98badcfe | 0
8395 this._d = 0x10325476 | 0
8396 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8397
ab78acc6
IC
8398 return this
8399}
ebd8d4e8 8400
ab78acc6
IC
8401/*
8402 * Bitwise rotate a 32-bit number to the left.
8403 */
8404function rol (num, cnt) {
8405 return (num << cnt) | (num >>> (32 - cnt))
8406}
ebd8d4e8 8407
ab78acc6
IC
8408Sha1.prototype._update = function (M) {
8409 var W = this._w
ebd8d4e8 8410
ab78acc6
IC
8411 var a = this._a
8412 var b = this._b
8413 var c = this._c
8414 var d = this._d
8415 var e = this._e
ebd8d4e8 8416
ab78acc6 8417 var j = 0, k
ebd8d4e8 8418
ab78acc6
IC
8419 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8420 function loop (w, f) {
8421 W[j] = w
ebd8d4e8 8422
ab78acc6 8423 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8424
ab78acc6
IC
8425 e = d
8426 d = c
8427 c = rol(b, 30)
8428 b = a
8429 a = t
8430 j++
ebd8d4e8
IC
8431 }
8432
ab78acc6
IC
8433 k = 1518500249
8434 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8435 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8436 k = 1859775393
8437 while (j < 40) loop(calcW(), b ^ c ^ d)
8438 k = -1894007588
8439 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8440 k = -899497514
8441 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8442
ab78acc6
IC
8443 this._a = (a + this._a) | 0
8444 this._b = (b + this._b) | 0
8445 this._c = (c + this._c) | 0
8446 this._d = (d + this._d) | 0
8447 this._e = (e + this._e) | 0
8448}
ebd8d4e8 8449
ab78acc6
IC
8450Sha1.prototype._hash = function () {
8451 var H = new Buffer(20)
ebd8d4e8 8452
ab78acc6
IC
8453 H.writeInt32BE(this._a | 0, 0)
8454 H.writeInt32BE(this._b | 0, 4)
8455 H.writeInt32BE(this._c | 0, 8)
8456 H.writeInt32BE(this._d | 0, 12)
8457 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8458
ab78acc6
IC
8459 return H
8460}
ebd8d4e8 8461
ab78acc6 8462module.exports = Sha1
ebd8d4e8 8463
ab78acc6
IC
8464}).call(this,require("buffer").Buffer)
8465},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8466(function (Buffer){
8467/**
8468 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8469 * in FIPS 180-2
8470 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8471 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8472 *
8473 */
ebd8d4e8 8474
ab78acc6
IC
8475var inherits = require('inherits')
8476var Sha256 = require('./sha256')
8477var Hash = require('./hash')
ebd8d4e8 8478
ab78acc6 8479var W = new Array(64)
ebd8d4e8 8480
ab78acc6
IC
8481function Sha224 () {
8482 this.init()
ebd8d4e8 8483
ab78acc6 8484 this._w = W // new Array(64)
ebd8d4e8 8485
ab78acc6
IC
8486 Hash.call(this, 64, 56)
8487}
ebd8d4e8 8488
ab78acc6 8489inherits(Sha224, Sha256)
ebd8d4e8 8490
ab78acc6
IC
8491Sha224.prototype.init = function () {
8492 this._a = 0xc1059ed8 | 0
8493 this._b = 0x367cd507 | 0
8494 this._c = 0x3070dd17 | 0
8495 this._d = 0xf70e5939 | 0
8496 this._e = 0xffc00b31 | 0
8497 this._f = 0x68581511 | 0
8498 this._g = 0x64f98fa7 | 0
8499 this._h = 0xbefa4fa4 | 0
8500
8501 return this
8502}
8503
8504Sha224.prototype._hash = function () {
8505 var H = new Buffer(28)
8506
8507 H.writeInt32BE(this._a, 0)
8508 H.writeInt32BE(this._b, 4)
8509 H.writeInt32BE(this._c, 8)
8510 H.writeInt32BE(this._d, 12)
8511 H.writeInt32BE(this._e, 16)
8512 H.writeInt32BE(this._f, 20)
8513 H.writeInt32BE(this._g, 24)
8514
8515 return H
ebd8d4e8
IC
8516}
8517
ab78acc6 8518module.exports = Sha224
ebd8d4e8 8519
ab78acc6
IC
8520}).call(this,require("buffer").Buffer)
8521},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8522(function (Buffer){
ebd8d4e8
IC
8523/**
8524 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8525 * in FIPS 180-2
8526 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8527 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8528 *
8529 */
8530
ab78acc6
IC
8531var inherits = require('inherits')
8532var Hash = require('./hash')
8533
8534var K = [
8535 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8536 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8537 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8538 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8539 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8540 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8541 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8542 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8543 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8544 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8545 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8546 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8547 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8548 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8549 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8550 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8551]
8552
8553var W = new Array(64)
8554
8555function Sha256 () {
8556 this.init()
8557
8558 this._w = W // new Array(64)
8559
8560 Hash.call(this, 64, 56)
8561}
8562
8563inherits(Sha256, Hash)
8564
8565Sha256.prototype.init = function () {
8566 this._a = 0x6a09e667 | 0
8567 this._b = 0xbb67ae85 | 0
8568 this._c = 0x3c6ef372 | 0
8569 this._d = 0xa54ff53a | 0
8570 this._e = 0x510e527f | 0
8571 this._f = 0x9b05688c | 0
8572 this._g = 0x1f83d9ab | 0
8573 this._h = 0x5be0cd19 | 0
ebd8d4e8 8574
ab78acc6
IC
8575 return this
8576}
ebd8d4e8 8577
ab78acc6
IC
8578function S (X, n) {
8579 return (X >>> n) | (X << (32 - n))
8580}
ebd8d4e8 8581
ab78acc6
IC
8582function R (X, n) {
8583 return (X >>> n)
8584}
ebd8d4e8 8585
ab78acc6
IC
8586function Ch (x, y, z) {
8587 return ((x & y) ^ ((~x) & z))
8588}
ebd8d4e8 8589
ab78acc6
IC
8590function Maj (x, y, z) {
8591 return ((x & y) ^ (x & z) ^ (y & z))
8592}
ebd8d4e8 8593
ab78acc6
IC
8594function Sigma0256 (x) {
8595 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8596}
ebd8d4e8 8597
ab78acc6
IC
8598function Sigma1256 (x) {
8599 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8600}
ebd8d4e8 8601
ab78acc6
IC
8602function Gamma0256 (x) {
8603 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8604}
ebd8d4e8 8605
ab78acc6
IC
8606function Gamma1256 (x) {
8607 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8608}
ebd8d4e8 8609
ab78acc6
IC
8610Sha256.prototype._update = function (M) {
8611 var W = this._w
ebd8d4e8 8612
ab78acc6
IC
8613 var a = this._a | 0
8614 var b = this._b | 0
8615 var c = this._c | 0
8616 var d = this._d | 0
8617 var e = this._e | 0
8618 var f = this._f | 0
8619 var g = this._g | 0
8620 var h = this._h | 0
ebd8d4e8 8621
ab78acc6 8622 var j = 0
ebd8d4e8 8623
ab78acc6
IC
8624 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8625 function loop (w) {
8626 W[j] = w
ebd8d4e8 8627
ab78acc6
IC
8628 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8629 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8630
ab78acc6
IC
8631 h = g
8632 g = f
8633 f = e
8634 e = d + T1
8635 d = c
8636 c = b
8637 b = a
8638 a = T1 + T2
ebd8d4e8 8639
ab78acc6 8640 j++
ebd8d4e8
IC
8641 }
8642
ab78acc6
IC
8643 while (j < 16) loop(M.readInt32BE(j * 4))
8644 while (j < 64) loop(calcW())
ebd8d4e8 8645
ab78acc6
IC
8646 this._a = (a + this._a) | 0
8647 this._b = (b + this._b) | 0
8648 this._c = (c + this._c) | 0
8649 this._d = (d + this._d) | 0
8650 this._e = (e + this._e) | 0
8651 this._f = (f + this._f) | 0
8652 this._g = (g + this._g) | 0
8653 this._h = (h + this._h) | 0
8654}
ebd8d4e8 8655
ab78acc6
IC
8656Sha256.prototype._hash = function () {
8657 var H = new Buffer(32)
ebd8d4e8 8658
ab78acc6
IC
8659 H.writeInt32BE(this._a, 0)
8660 H.writeInt32BE(this._b, 4)
8661 H.writeInt32BE(this._c, 8)
8662 H.writeInt32BE(this._d, 12)
8663 H.writeInt32BE(this._e, 16)
8664 H.writeInt32BE(this._f, 20)
8665 H.writeInt32BE(this._g, 24)
8666 H.writeInt32BE(this._h, 28)
ebd8d4e8 8667
ab78acc6
IC
8668 return H
8669}
ebd8d4e8 8670
ab78acc6 8671module.exports = Sha256
ebd8d4e8 8672
ab78acc6
IC
8673}).call(this,require("buffer").Buffer)
8674},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8675(function (Buffer){
8676var inherits = require('inherits')
8677var SHA512 = require('./sha512')
8678var Hash = require('./hash')
ebd8d4e8 8679
ab78acc6 8680var W = new Array(160)
ebd8d4e8 8681
ab78acc6
IC
8682function Sha384 () {
8683 this.init()
8684 this._w = W
ebd8d4e8 8685
ab78acc6
IC
8686 Hash.call(this, 128, 112)
8687}
ebd8d4e8 8688
ab78acc6 8689inherits(Sha384, SHA512)
ebd8d4e8 8690
ab78acc6
IC
8691Sha384.prototype.init = function () {
8692 this._a = 0xcbbb9d5d | 0
8693 this._b = 0x629a292a | 0
8694 this._c = 0x9159015a | 0
8695 this._d = 0x152fecd8 | 0
8696 this._e = 0x67332667 | 0
8697 this._f = 0x8eb44a87 | 0
8698 this._g = 0xdb0c2e0d | 0
8699 this._h = 0x47b5481d | 0
ebd8d4e8 8700
ab78acc6
IC
8701 this._al = 0xc1059ed8 | 0
8702 this._bl = 0x367cd507 | 0
8703 this._cl = 0x3070dd17 | 0
8704 this._dl = 0xf70e5939 | 0
8705 this._el = 0xffc00b31 | 0
8706 this._fl = 0x68581511 | 0
8707 this._gl = 0x64f98fa7 | 0
8708 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8709
ab78acc6 8710 return this
ebd8d4e8
IC
8711}
8712
ab78acc6
IC
8713Sha384.prototype._hash = function () {
8714 var H = new Buffer(48)
ebd8d4e8 8715
ab78acc6
IC
8716 function writeInt64BE (h, l, offset) {
8717 H.writeInt32BE(h, offset)
8718 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8719 }
ebd8d4e8 8720
ab78acc6
IC
8721 writeInt64BE(this._a, this._al, 0)
8722 writeInt64BE(this._b, this._bl, 8)
8723 writeInt64BE(this._c, this._cl, 16)
8724 writeInt64BE(this._d, this._dl, 24)
8725 writeInt64BE(this._e, this._el, 32)
8726 writeInt64BE(this._f, this._fl, 40)
8727
8728 return H
ebd8d4e8
IC
8729}
8730
ab78acc6 8731module.exports = Sha384
ebd8d4e8 8732
ab78acc6
IC
8733}).call(this,require("buffer").Buffer)
8734},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8735(function (Buffer){
ab78acc6
IC
8736var inherits = require('inherits')
8737var Hash = require('./hash')
8738
8739var K = [
8740 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8741 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8742 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8743 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8744 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8745 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8746 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8747 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8748 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8749 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8750 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8751 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8752 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8753 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8754 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8755 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8756 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8757 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8758 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8759 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8760 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8761 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8762 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8763 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8764 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8765 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8766 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8767 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8768 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8769 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8770 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8771 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8772 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8773 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8774 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8775 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8776 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8777 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8778 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8779 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8780]
8781
8782var W = new Array(160)
8783
8784function Sha512 () {
8785 this.init()
8786 this._w = W
8787
8788 Hash.call(this, 128, 112)
8789}
8790
8791inherits(Sha512, Hash)
8792
8793Sha512.prototype.init = function () {
8794 this._a = 0x6a09e667 | 0
8795 this._b = 0xbb67ae85 | 0
8796 this._c = 0x3c6ef372 | 0
8797 this._d = 0xa54ff53a | 0
8798 this._e = 0x510e527f | 0
8799 this._f = 0x9b05688c | 0
8800 this._g = 0x1f83d9ab | 0
8801 this._h = 0x5be0cd19 | 0
8802
8803 this._al = 0xf3bcc908 | 0
8804 this._bl = 0x84caa73b | 0
8805 this._cl = 0xfe94f82b | 0
8806 this._dl = 0x5f1d36f1 | 0
8807 this._el = 0xade682d1 | 0
8808 this._fl = 0x2b3e6c1f | 0
8809 this._gl = 0xfb41bd6b | 0
8810 this._hl = 0x137e2179 | 0
ebd8d4e8 8811
ab78acc6 8812 return this
ebd8d4e8
IC
8813}
8814
ab78acc6
IC
8815function S (X, Xl, n) {
8816 return (X >>> n) | (Xl << (32 - n))
8817}
8818
8819function Ch (x, y, z) {
8820 return ((x & y) ^ ((~x) & z))
8821}
8822
8823function Maj (x, y, z) {
8824 return ((x & y) ^ (x & z) ^ (y & z))
8825}
8826
8827Sha512.prototype._update = function (M) {
8828 var W = this._w
8829
8830 var a = this._a | 0
8831 var b = this._b | 0
8832 var c = this._c | 0
8833 var d = this._d | 0
8834 var e = this._e | 0
8835 var f = this._f | 0
8836 var g = this._g | 0
8837 var h = this._h | 0
8838
8839 var al = this._al | 0
8840 var bl = this._bl | 0
8841 var cl = this._cl | 0
8842 var dl = this._dl | 0
8843 var el = this._el | 0
8844 var fl = this._fl | 0
8845 var gl = this._gl | 0
8846 var hl = this._hl | 0
8847
8848 var i = 0, j = 0
8849 var Wi, Wil
8850 function calcW () {
8851 var x = W[j - 15 * 2]
8852 var xl = W[j - 15 * 2 + 1]
8853 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
8854 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
8855
8856 x = W[j - 2 * 2]
8857 xl = W[j - 2 * 2 + 1]
8858 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
8859 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
8860
8861 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
8862 var Wi7 = W[j - 7 * 2]
8863 var Wi7l = W[j - 7 * 2 + 1]
8864
8865 var Wi16 = W[j - 16 * 2]
8866 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 8867
ab78acc6
IC
8868 Wil = gamma0l + Wi7l
8869 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
8870 Wil = Wil + gamma1l
8871 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
8872 Wil = Wil + Wi16l
8873 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
8874 }
8875
8876 function loop () {
8877 W[j] = Wi
8878 W[j + 1] = Wil
ebd8d4e8 8879
ab78acc6
IC
8880 var maj = Maj(a, b, c)
8881 var majl = Maj(al, bl, cl)
ebd8d4e8 8882
ab78acc6
IC
8883 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
8884 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
8885 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
8886 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 8887
ab78acc6
IC
8888 // t1 = h + sigma1 + ch + K[i] + W[i]
8889 var Ki = K[j]
8890 var Kil = K[j + 1]
ebd8d4e8 8891
ab78acc6
IC
8892 var ch = Ch(e, f, g)
8893 var chl = Ch(el, fl, gl)
ebd8d4e8 8894
ab78acc6
IC
8895 var t1l = hl + sigma1l
8896 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
8897 t1l = t1l + chl
8898 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
8899 t1l = t1l + Kil
8900 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
8901 t1l = t1l + Wil
8902 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 8903
ab78acc6
IC
8904 // t2 = sigma0 + maj
8905 var t2l = sigma0l + majl
8906 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 8907
ab78acc6
IC
8908 h = g
8909 hl = gl
8910 g = f
8911 gl = fl
8912 f = e
8913 fl = el
8914 el = (dl + t1l) | 0
8915 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8916 d = c
8917 dl = cl
8918 c = b
8919 cl = bl
8920 b = a
8921 bl = al
8922 al = (t1l + t2l) | 0
8923 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
8924
8925 i++
8926 j += 2
8927 }
8928
8929 while (i < 16) {
8930 Wi = M.readInt32BE(j * 4)
8931 Wil = M.readInt32BE(j * 4 + 4)
8932
8933 loop()
8934 }
8935
8936 while (i < 80) {
8937 calcW()
8938 loop()
8939 }
8940
8941 this._al = (this._al + al) | 0
8942 this._bl = (this._bl + bl) | 0
8943 this._cl = (this._cl + cl) | 0
8944 this._dl = (this._dl + dl) | 0
8945 this._el = (this._el + el) | 0
8946 this._fl = (this._fl + fl) | 0
8947 this._gl = (this._gl + gl) | 0
8948 this._hl = (this._hl + hl) | 0
8949
8950 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
8951 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
8952 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
8953 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8954 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
8955 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
8956 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
8957 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
8958}
8959
8960Sha512.prototype._hash = function () {
8961 var H = new Buffer(64)
8962
8963 function writeInt64BE (h, l, offset) {
8964 H.writeInt32BE(h, offset)
8965 H.writeInt32BE(l, offset + 4)
8966 }
8967
8968 writeInt64BE(this._a, this._al, 0)
8969 writeInt64BE(this._b, this._bl, 8)
8970 writeInt64BE(this._c, this._cl, 16)
8971 writeInt64BE(this._d, this._dl, 24)
8972 writeInt64BE(this._e, this._el, 32)
8973 writeInt64BE(this._f, this._fl, 40)
8974 writeInt64BE(this._g, this._gl, 48)
8975 writeInt64BE(this._h, this._hl, 56)
8976
8977 return H
8978}
8979
8980module.exports = Sha512
8981
8982}).call(this,require("buffer").Buffer)
8983},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
8984(function (Buffer){
8985'use strict';
8986var createHash = require('create-hash/browser');
8987var inherits = require('inherits')
ebd8d4e8 8988
ab78acc6 8989var Transform = require('stream').Transform
ebd8d4e8 8990
ab78acc6
IC
8991var ZEROS = new Buffer(128)
8992ZEROS.fill(0)
ebd8d4e8 8993
ab78acc6
IC
8994function Hmac(alg, key) {
8995 Transform.call(this)
ebd8d4e8 8996
ab78acc6
IC
8997 if (typeof key === 'string') {
8998 key = new Buffer(key)
8999 }
ebd8d4e8 9000
ab78acc6 9001 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9002
ab78acc6
IC
9003 this._alg = alg
9004 this._key = key
ebd8d4e8 9005
ab78acc6
IC
9006 if (key.length > blocksize) {
9007 key = createHash(alg).update(key).digest()
ebd8d4e8 9008
ab78acc6
IC
9009 } else if (key.length < blocksize) {
9010 key = Buffer.concat([key, ZEROS], blocksize)
9011 }
ebd8d4e8 9012
ab78acc6
IC
9013 var ipad = this._ipad = new Buffer(blocksize)
9014 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9015
ab78acc6
IC
9016 for (var i = 0; i < blocksize; i++) {
9017 ipad[i] = key[i] ^ 0x36
9018 opad[i] = key[i] ^ 0x5C
9019 }
ebd8d4e8 9020
ab78acc6
IC
9021 this._hash = createHash(alg).update(ipad)
9022}
ebd8d4e8 9023
ab78acc6 9024inherits(Hmac, Transform)
ebd8d4e8 9025
ab78acc6
IC
9026Hmac.prototype.update = function (data, enc) {
9027 this._hash.update(data, enc)
ebd8d4e8 9028
ab78acc6
IC
9029 return this
9030}
ebd8d4e8 9031
ab78acc6
IC
9032Hmac.prototype._transform = function (data, _, next) {
9033 this._hash.update(data)
ebd8d4e8 9034
ab78acc6
IC
9035 next()
9036}
ebd8d4e8 9037
ab78acc6
IC
9038Hmac.prototype._flush = function (next) {
9039 this.push(this.digest())
ebd8d4e8 9040
ab78acc6
IC
9041 next()
9042}
ebd8d4e8 9043
ab78acc6
IC
9044Hmac.prototype.digest = function (enc) {
9045 var h = this._hash.digest()
ebd8d4e8 9046
ab78acc6
IC
9047 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9048}
ebd8d4e8 9049
ab78acc6
IC
9050module.exports = function createHmac(alg, key) {
9051 return new Hmac(alg, key)
9052}
ebd8d4e8 9053
ab78acc6
IC
9054}).call(this,require("buffer").Buffer)
9055},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9056arguments[4][12][0].apply(exports,arguments)
9057},{"dup":12}],47:[function(require,module,exports){
9058var assert = require('assert')
9059var BigInteger = require('bigi')
ebd8d4e8 9060
ab78acc6 9061var Point = require('./point')
ebd8d4e8
IC
9062
9063function Curve(p, a, b, Gx, Gy, n, h) {
9064 this.p = p
9065 this.a = a
9066 this.b = b
9067 this.G = Point.fromAffine(this, Gx, Gy)
9068 this.n = n
9069 this.h = h
9070
9071 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9072
9073 // result caching
9074 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9075}
9076
9077Curve.prototype.pointFromX = function(isOdd, x) {
9078 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9079 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9080
9081 var y = beta
9082 if (beta.isEven() ^ !isOdd) {
9083 y = this.p.subtract(y) // -y % p
9084 }
9085
9086 return Point.fromAffine(this, x, y)
9087}
9088
9089Curve.prototype.isInfinity = function(Q) {
9090 if (Q === this.infinity) return true
9091
9092 return Q.z.signum() === 0 && Q.y.signum() !== 0
9093}
9094
9095Curve.prototype.isOnCurve = function(Q) {
9096 if (this.isInfinity(Q)) return true
9097
9098 var x = Q.affineX
9099 var y = Q.affineY
9100 var a = this.a
9101 var b = this.b
9102 var p = this.p
9103
9104 // Check that xQ and yQ are integers in the interval [0, p - 1]
9105 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9106 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9107
9108 // and check that y^2 = x^3 + ax + b (mod p)
9109 var lhs = y.square().mod(p)
9110 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9111 return lhs.equals(rhs)
9112}
9113
9114/**
9115 * Validate an elliptic curve point.
9116 *
9117 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9118 */
9119Curve.prototype.validate = function(Q) {
9120 // Check Q != O
9121 assert(!this.isInfinity(Q), 'Point is at infinity')
9122 assert(this.isOnCurve(Q), 'Point is not on the curve')
9123
9124 // Check nQ = O (where Q is a scalar multiple of G)
9125 var nQ = Q.multiply(this.n)
9126 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9127
9128 return true
9129}
9130
9131module.exports = Curve
9132
ab78acc6 9133},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9134module.exports={
9135 "secp128r1": {
9136 "p": "fffffffdffffffffffffffffffffffff",
9137 "a": "fffffffdfffffffffffffffffffffffc",
9138 "b": "e87579c11079f43dd824993c2cee5ed3",
9139 "n": "fffffffe0000000075a30d1b9038a115",
9140 "h": "01",
9141 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9142 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9143 },
9144 "secp160k1": {
9145 "p": "fffffffffffffffffffffffffffffffeffffac73",
9146 "a": "00",
9147 "b": "07",
9148 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9149 "h": "01",
9150 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9151 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9152 },
9153 "secp160r1": {
9154 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9155 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9156 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9157 "n": "0100000000000000000001f4c8f927aed3ca752257",
9158 "h": "01",
9159 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9160 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9161 },
9162 "secp192k1": {
9163 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9164 "a": "00",
9165 "b": "03",
9166 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9167 "h": "01",
9168 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9169 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9170 },
9171 "secp192r1": {
9172 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9173 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9174 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9175 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9176 "h": "01",
9177 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9178 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9179 },
ebd8d4e8
IC
9180 "secp256k1": {
9181 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9182 "a": "00",
9183 "b": "07",
9184 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9185 "h": "01",
9186 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9187 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9188 },
9189 "secp256r1": {
9190 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9191 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9192 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9193 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9194 "h": "01",
9195 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9196 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9197 }
9198}
9199
ab78acc6
IC
9200},{}],49:[function(require,module,exports){
9201var Point = require('./point')
9202var Curve = require('./curve')
ebd8d4e8 9203
ab78acc6 9204var getCurveByName = require('./names')
ebd8d4e8
IC
9205
9206module.exports = {
9207 Curve: Curve,
9208 Point: Point,
9209 getCurveByName: getCurveByName
9210}
9211
ab78acc6
IC
9212},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9213var BigInteger = require('bigi')
ebd8d4e8 9214
ab78acc6
IC
9215var curves = require('./curves')
9216var Curve = require('./curve')
ebd8d4e8
IC
9217
9218function getCurveByName(name) {
9219 var curve = curves[name]
9220 if (!curve) return null
9221
9222 var p = new BigInteger(curve.p, 16)
9223 var a = new BigInteger(curve.a, 16)
9224 var b = new BigInteger(curve.b, 16)
9225 var n = new BigInteger(curve.n, 16)
9226 var h = new BigInteger(curve.h, 16)
9227 var Gx = new BigInteger(curve.Gx, 16)
9228 var Gy = new BigInteger(curve.Gy, 16)
9229
9230 return new Curve(p, a, b, Gx, Gy, n, h)
9231}
9232
9233module.exports = getCurveByName
9234
ab78acc6 9235},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9236(function (Buffer){
ab78acc6
IC
9237var assert = require('assert')
9238var BigInteger = require('bigi')
ebd8d4e8
IC
9239
9240var THREE = BigInteger.valueOf(3)
9241
9242function Point(curve, x, y, z) {
9243 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9244
9245 this.curve = curve
9246 this.x = x
9247 this.y = y
9248 this.z = z
9249 this._zInv = null
9250
9251 this.compressed = true
9252}
9253
9254Object.defineProperty(Point.prototype, 'zInv', {
9255 get: function() {
9256 if (this._zInv === null) {
9257 this._zInv = this.z.modInverse(this.curve.p)
9258 }
9259
9260 return this._zInv
9261 }
9262})
9263
9264Object.defineProperty(Point.prototype, 'affineX', {
9265 get: function() {
9266 return this.x.multiply(this.zInv).mod(this.curve.p)
9267 }
9268})
9269
9270Object.defineProperty(Point.prototype, 'affineY', {
9271 get: function() {
9272 return this.y.multiply(this.zInv).mod(this.curve.p)
9273 }
9274})
9275
9276Point.fromAffine = function(curve, x, y) {
9277 return new Point(curve, x, y, BigInteger.ONE)
9278}
9279
9280Point.prototype.equals = function(other) {
9281 if (other === this) return true
9282 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9283 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9284
9285 // u = Y2 * Z1 - Y1 * Z2
9286 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9287
9288 if (u.signum() !== 0) return false
9289
9290 // v = X2 * Z1 - X1 * Z2
9291 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9292
9293 return v.signum() === 0
9294}
9295
9296Point.prototype.negate = function() {
9297 var y = this.curve.p.subtract(this.y)
9298
9299 return new Point(this.curve, this.x, y, this.z)
9300}
9301
9302Point.prototype.add = function(b) {
9303 if (this.curve.isInfinity(this)) return b
9304 if (this.curve.isInfinity(b)) return this
9305
9306 var x1 = this.x
9307 var y1 = this.y
9308 var x2 = b.x
9309 var y2 = b.y
9310
9311 // u = Y2 * Z1 - Y1 * Z2
9312 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9313 // v = X2 * Z1 - X1 * Z2
9314 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9315
9316 if (v.signum() === 0) {
9317 if (u.signum() === 0) {
9318 return this.twice() // this == b, so double
9319 }
9320
9321 return this.curve.infinity // this = -b, so infinity
9322 }
9323
9324 var v2 = v.square()
9325 var v3 = v2.multiply(v)
9326 var x1v2 = x1.multiply(v2)
9327 var zu2 = u.square().multiply(this.z)
9328
9329 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9330 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9331 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9332 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)
9333 // z3 = v^3 * z1 * z2
9334 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9335
9336 return new Point(this.curve, x3, y3, z3)
9337}
9338
9339Point.prototype.twice = function() {
9340 if (this.curve.isInfinity(this)) return this
9341 if (this.y.signum() === 0) return this.curve.infinity
9342
9343 var x1 = this.x
9344 var y1 = this.y
9345
9346 var y1z1 = y1.multiply(this.z)
9347 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9348 var a = this.curve.a
9349
9350 // w = 3 * x1^2 + a * z1^2
9351 var w = x1.square().multiply(THREE)
9352
9353 if (a.signum() !== 0) {
9354 w = w.add(this.z.square().multiply(a))
9355 }
9356
9357 w = w.mod(this.curve.p)
9358 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9359 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9360 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9361 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9362 // z3 = 8 * (y1 * z1)^3
9363 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9364
9365 return new Point(this.curve, x3, y3, z3)
9366}
9367
9368// Simple NAF (Non-Adjacent Form) multiplication algorithm
9369// TODO: modularize the multiplication algorithm
9370Point.prototype.multiply = function(k) {
9371 if (this.curve.isInfinity(this)) return this
9372 if (k.signum() === 0) return this.curve.infinity
9373
9374 var e = k
9375 var h = e.multiply(THREE)
9376
9377 var neg = this.negate()
9378 var R = this
9379
9380 for (var i = h.bitLength() - 2; i > 0; --i) {
9381 R = R.twice()
9382
9383 var hBit = h.testBit(i)
9384 var eBit = e.testBit(i)
9385
9386 if (hBit != eBit) {
9387 R = R.add(hBit ? this : neg)
9388 }
9389 }
9390
9391 return R
9392}
9393
9394// Compute this*j + x*k (simultaneous multiplication)
9395Point.prototype.multiplyTwo = function(j, x, k) {
9396 var i
9397
9398 if (j.bitLength() > k.bitLength())
9399 i = j.bitLength() - 1
9400 else
9401 i = k.bitLength() - 1
9402
9403 var R = this.curve.infinity
9404 var both = this.add(x)
9405
9406 while (i >= 0) {
9407 R = R.twice()
9408
9409 var jBit = j.testBit(i)
9410 var kBit = k.testBit(i)
9411
9412 if (jBit) {
9413 if (kBit) {
9414 R = R.add(both)
9415
9416 } else {
9417 R = R.add(this)
9418 }
9419
9420 } else {
9421 if (kBit) {
9422 R = R.add(x)
9423 }
9424 }
9425 --i
9426 }
9427
9428 return R
9429}
9430
9431Point.prototype.getEncoded = function(compressed) {
9432 if (compressed == undefined) compressed = this.compressed
9433 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9434
9435 var x = this.affineX
9436 var y = this.affineY
9437
9438 var buffer
9439
9440 // Determine size of q in bytes
9441 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9442
9443 // 0x02/0x03 | X
9444 if (compressed) {
9445 buffer = new Buffer(1 + byteLength)
9446 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9447
9448 // 0x04 | X | Y
9449 } else {
9450 buffer = new Buffer(1 + byteLength + byteLength)
9451 buffer.writeUInt8(0x04, 0)
9452
9453 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9454 }
9455
9456 x.toBuffer(byteLength).copy(buffer, 1)
9457
9458 return buffer
9459}
9460
9461Point.decodeFrom = function(curve, buffer) {
9462 var type = buffer.readUInt8(0)
9463 var compressed = (type !== 4)
9464
ebd8d4e8 9465 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9466 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9467
9468 var Q
9469 if (compressed) {
9470 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9471 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9472
9473 var isOdd = (type === 0x03)
9474 Q = curve.pointFromX(isOdd, x)
9475
9476 } else {
9477 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9478
9479 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9480 Q = Point.fromAffine(curve, x, y)
9481 }
9482
9483 Q.compressed = compressed
9484 return Q
9485}
9486
9487Point.prototype.toString = function () {
9488 if (this.curve.isInfinity(this)) return '(INFINITY)'
9489
9490 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9491}
9492
9493module.exports = Point
9494
ab78acc6
IC
9495}).call(this,require("buffer").Buffer)
9496},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9497(function (process,global,Buffer){
9498'use strict';
ebd8d4e8 9499
ab78acc6
IC
9500var crypto = global.crypto || global.msCrypto
9501if(crypto && crypto.getRandomValues) {
9502 module.exports = randomBytes;
9503} else {
9504 module.exports = oldBrowser;
9505}
9506function randomBytes(size, cb) {
9507 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9508 /* This will not work in older browsers.
9509 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9510 */
9511
9512 crypto.getRandomValues(bytes);
9513 if (typeof cb === 'function') {
9514 return process.nextTick(function () {
9515 cb(null, bytes);
9516 });
ebd8d4e8 9517 }
ab78acc6
IC
9518 return bytes;
9519}
9520function oldBrowser() {
9521 throw new Error(
9522 'secure random number generation not supported by this browser\n'+
9523 'use chrome, FireFox or Internet Explorer 11'
9524 )
ebd8d4e8
IC
9525}
9526
ab78acc6
IC
9527}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9528},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9529(function (Buffer){
9530'use strict';
ebd8d4e8 9531
ab78acc6
IC
9532function getFunctionName(fn) {
9533 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9534}
9535
9536function getTypeTypeName(type) {
9537 if (nativeTypes.Function(type)) {
9538 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9539 }
ab78acc6
IC
9540 if (nativeTypes.Object(type)) return JSON.stringify(type);
9541
9542 return type;
ebd8d4e8
IC
9543}
9544
ab78acc6
IC
9545function getValueTypeName(value) {
9546 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9547
ab78acc6
IC
9548 return getFunctionName(value.constructor);
9549}
9550
9551function tfErrorString(type, value) {
9552 var typeTypeName = getTypeTypeName(type);
9553 var valueTypeName = getValueTypeName(value);
9554
9555 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9556}
9557
9558function tfPropertyErrorString(type, name, value) {
9559 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9560}
9561
9562var nativeTypes = {
9563 Array: (function (_Array) {
9564 function Array(_x) {
9565 return _Array.apply(this, arguments);
9566 }
9567
9568 Array.toString = function () {
9569 return _Array.toString();
9570 };
9571
9572 return Array;
9573 })(function (value) {
9574 return value !== null && value !== undefined && value.constructor === Array;
9575 }),
9576 Boolean: function Boolean(value) {
9577 return typeof value === 'boolean';
9578 },
9579 Buffer: (function (_Buffer) {
9580 function Buffer(_x2) {
9581 return _Buffer.apply(this, arguments);
9582 }
9583
9584 Buffer.toString = function () {
9585 return _Buffer.toString();
9586 };
9587
9588 return Buffer;
9589 })(function (value) {
9590 return Buffer.isBuffer(value);
9591 }),
9592 Function: function Function(value) {
9593 return typeof value === 'function';
9594 },
9595 Null: function Null(value) {
9596 return value === undefined || value === null;
9597 },
9598 Number: function Number(value) {
9599 return typeof value === 'number';
9600 },
9601 Object: function Object(value) {
9602 return typeof value === 'object';
9603 },
9604 String: function String(value) {
9605 return typeof value === 'string';
9606 },
9607 '': function _() {
9608 return true;
ebd8d4e8 9609 }
ab78acc6
IC
9610};
9611
9612function tJSON(type) {
9613 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9614}
9615
ab78acc6
IC
9616function sJSON(type) {
9617 var json = tJSON(type);
9618 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9619}
9620
ab78acc6
IC
9621var otherTypes = {
9622 arrayOf: function arrayOf(type) {
9623 function arrayOf(value, strict) {
9624 try {
9625 return nativeTypes.Array(value) && value.every(function (x) {
9626 return typeforce(type, x, strict);
9627 });
9628 } catch (e) {
9629 return false;
9630 }
9631 }
9632 arrayOf.toJSON = function () {
9633 return [tJSON(type)];
9634 };
9635
9636 return arrayOf;
9637 },
9638
9639 maybe: function maybe(type) {
9640 function maybe(value, strict) {
9641 return nativeTypes.Null(value) || typeforce(type, value, strict);
9642 }
9643 maybe.toJSON = function () {
9644 return '?' + sJSON(type);
9645 };
9646
9647 return maybe;
9648 },
9649
9650 object: function object(type) {
9651 function object(value, strict) {
9652 typeforce(nativeTypes.Object, value, strict);
9653
9654 var propertyName, propertyType, propertyValue;
9655
9656 try {
9657 for (propertyName in type) {
9658 propertyType = type[propertyName];
9659 propertyValue = value[propertyName];
9660
9661 typeforce(propertyType, propertyValue, strict);
9662 }
9663 } catch (e) {
9664 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9665 }
9666
9667 if (strict) {
9668 for (propertyName in value) {
9669 if (type[propertyName]) continue;
9670
9671 throw new TypeError('Unexpected property "' + propertyName + '"');
9672 }
9673 }
9674
9675 return true;
9676 }
9677 object.toJSON = function () {
9678 return type;
9679 };
9680
9681 return object;
9682 },
9683
9684 oneOf: function oneOf() {
9685 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9686 types[_key] = arguments[_key];
9687 }
9688
9689 function oneOf(value, strict) {
9690 return types.some(function (type) {
9691 try {
9692 return typeforce(type, value, strict);
9693 } catch (e) {
9694 return false;
9695 }
9696 });
9697 }
9698 oneOf.toJSON = function () {
9699 return types.map(sJSON).join('|');
9700 };
9701
9702 return oneOf;
9703 },
9704
9705 quacksLike: function quacksLike(type) {
9706 function quacksLike(value, strict) {
9707 return type === getValueTypeName(value);
9708 }
9709 quacksLike.toJSON = function () {
9710 return type;
9711 };
9712
9713 return quacksLike;
9714 },
9715
9716 tuple: function tuple() {
9717 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9718 types[_key2] = arguments[_key2];
9719 }
9720
9721 function tuple(value, strict) {
9722 return types.every(function (type, i) {
9723 return typeforce(type, value[i], strict);
9724 });
9725 }
9726 tuple.toJSON = function () {
9727 return '(' + types.map(sJSON).join(', ') + ')';
9728 };
9729
9730 return tuple;
9731 },
9732
9733 value: function value(expected) {
9734 function value(actual) {
9735 return actual === expected;
9736 }
9737 value.toJSON = function () {
9738 return expected;
9739 };
9740
9741 return value;
9742 }
9743};
9744
9745function compile(type) {
9746 if (nativeTypes.String(type)) {
9747 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9748
9749 return nativeTypes[type] || otherTypes.quacksLike(type);
9750 } else if (type && nativeTypes.Object(type)) {
9751 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9752
9753 var compiled = {};
9754
9755 for (var propertyName in type) {
9756 compiled[propertyName] = compile(type[propertyName]);
9757 }
9758
9759 return otherTypes.object(compiled);
9760 } else if (nativeTypes.Function(type)) {
9761 return type;
9762 }
9763
9764 return otherTypes.value(type);
ebd8d4e8
IC
9765}
9766
ab78acc6
IC
9767function typeforce(_x3, _x4, _x5) {
9768 var _again = true;
9769
9770 _function: while (_again) {
9771 var type = _x3,
9772 value = _x4,
9773 strict = _x5;
9774 _again = false;
9775
9776 if (nativeTypes.Function(type)) {
9777 if (type(value, strict)) return true;
9778
9779 throw new TypeError(tfErrorString(type, value));
9780 }
9781
9782 // JIT
9783 _x3 = compile(type);
9784 _x4 = value;
9785 _x5 = strict;
9786 _again = true;
9787 continue _function;
9788 }
ebd8d4e8
IC
9789}
9790
ab78acc6
IC
9791// assign all types to typeforce function
9792var typeName;
9793Object.keys(nativeTypes).forEach(function (typeName) {
9794 var nativeType = nativeTypes[typeName];
9795 nativeType.toJSON = function () {
9796 return typeName;
9797 };
9798
9799 typeforce[typeName] = nativeType;
9800});
ebd8d4e8 9801
ab78acc6
IC
9802for (typeName in otherTypes) {
9803 typeforce[typeName] = otherTypes[typeName];
9804}
ebd8d4e8 9805
ab78acc6
IC
9806module.exports = typeforce;
9807module.exports.compile = compile;
9808}).call(this,require("buffer").Buffer)
9809},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 9810(function (Buffer){
ab78acc6
IC
9811var assert = require('assert')
9812var base58check = require('bs58check')
9813var typeForce = require('typeforce')
9814var networks = require('./networks')
9815var scripts = require('./scripts')
ebd8d4e8 9816
ab78acc6 9817function findScriptTypeByVersion (version) {
ebd8d4e8
IC
9818 for (var networkName in networks) {
9819 var network = networks[networkName]
9820
9821 if (version === network.pubKeyHash) return 'pubkeyhash'
9822 if (version === network.scriptHash) return 'scripthash'
9823 }
9824}
9825
ab78acc6
IC
9826function Address (hash, version) {
9827 typeForce('Buffer', hash)
9828
ebd8d4e8
IC
9829 assert.strictEqual(hash.length, 20, 'Invalid hash length')
9830 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
9831
9832 this.hash = hash
9833 this.version = version
9834}
9835
ab78acc6 9836Address.fromBase58Check = function (string) {
ebd8d4e8
IC
9837 var payload = base58check.decode(string)
9838 var version = payload.readUInt8(0)
9839 var hash = payload.slice(1)
9840
9841 return new Address(hash, version)
9842}
9843
ab78acc6 9844Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
9845 network = network || networks.bitcoin
9846
ab78acc6
IC
9847 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
9848 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 9849
ab78acc6 9850 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
9851}
9852
ebd8d4e8
IC
9853Address.prototype.toBase58Check = function () {
9854 var payload = new Buffer(21)
9855 payload.writeUInt8(this.version, 0)
9856 this.hash.copy(payload, 1)
9857
9858 return base58check.encode(payload)
9859}
9860
ab78acc6 9861Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
9862 var scriptType = findScriptTypeByVersion(this.version)
9863
9864 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9865 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9866
ab78acc6
IC
9867 assert(false, this.toString() + ' has no matching Script')
9868}
9869
9870Address.prototype.toString = Address.prototype.toBase58Check
9871
9872module.exports = Address
9873
9874}).call(this,require("buffer").Buffer)
9875},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
9876var bs58check = require('bs58check')
9877
9878function decode () {
9879 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9880
9881 return bs58check.decode.apply(undefined, arguments)
9882}
9883
9884function encode () {
9885 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9886
9887 return bs58check.encode.apply(undefined, arguments)
9888}
9889
9890module.exports = {
9891 decode: decode,
9892 encode: encode
9893}
9894
9895},{"bs58check":31}],56:[function(require,module,exports){
9896(function (Buffer){
9897var assert = require('assert')
9898var bufferutils = require('./bufferutils')
9899var crypto = require('./crypto')
9900
9901var Transaction = require('./transaction')
9902
9903function Block () {
9904 this.version = 1
9905 this.prevHash = null
9906 this.merkleRoot = null
9907 this.timestamp = 0
9908 this.bits = 0
9909 this.nonce = 0
9910}
9911
9912Block.fromBuffer = function (buffer) {
9913 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
9914
9915 var offset = 0
9916 function readSlice (n) {
9917 offset += n
9918 return buffer.slice(offset - n, offset)
9919 }
9920
9921 function readUInt32 () {
9922 var i = buffer.readUInt32LE(offset)
9923 offset += 4
9924 return i
9925 }
9926
9927 var block = new Block()
9928 block.version = readUInt32()
9929 block.prevHash = readSlice(32)
9930 block.merkleRoot = readSlice(32)
9931 block.timestamp = readUInt32()
9932 block.bits = readUInt32()
9933 block.nonce = readUInt32()
9934
9935 if (buffer.length === 80) return block
9936
9937 function readVarInt () {
9938 var vi = bufferutils.readVarInt(buffer, offset)
9939 offset += vi.size
9940 return vi.number
9941 }
9942
9943 // FIXME: poor performance
9944 function readTransaction () {
9945 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9946
9947 offset += tx.toBuffer().length
9948 return tx
9949 }
9950
9951 var nTransactions = readVarInt()
9952 block.transactions = []
9953
9954 for (var i = 0; i < nTransactions; ++i) {
9955 var tx = readTransaction()
9956 block.transactions.push(tx)
9957 }
9958
9959 return block
9960}
9961
9962Block.fromHex = function (hex) {
9963 return Block.fromBuffer(new Buffer(hex, 'hex'))
9964}
9965
9966Block.prototype.getHash = function () {
9967 return crypto.hash256(this.toBuffer(true))
9968}
9969
9970Block.prototype.getId = function () {
9971 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
9972}
9973
ab78acc6
IC
9974Block.prototype.getUTCDate = function () {
9975 var date = new Date(0) // epoch
9976 date.setUTCSeconds(this.timestamp)
ebd8d4e8 9977
ab78acc6
IC
9978 return date
9979}
ebd8d4e8 9980
ab78acc6
IC
9981Block.prototype.toBuffer = function (headersOnly) {
9982 var buffer = new Buffer(80)
ebd8d4e8 9983
ab78acc6
IC
9984 var offset = 0
9985 function writeSlice (slice) {
9986 slice.copy(buffer, offset)
9987 offset += slice.length
9988 }
ebd8d4e8 9989
ab78acc6
IC
9990 function writeUInt32 (i) {
9991 buffer.writeUInt32LE(i, offset)
9992 offset += 4
9993 }
ebd8d4e8 9994
ab78acc6
IC
9995 writeUInt32(this.version)
9996 writeSlice(this.prevHash)
9997 writeSlice(this.merkleRoot)
9998 writeUInt32(this.timestamp)
9999 writeUInt32(this.bits)
10000 writeUInt32(this.nonce)
ebd8d4e8 10001
ab78acc6 10002 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10003
ab78acc6
IC
10004 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10005 var txBuffers = this.transactions.map(function (tx) {
10006 return tx.toBuffer()
10007 })
ebd8d4e8 10008
ab78acc6 10009 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10010}
10011
ab78acc6
IC
10012Block.prototype.toHex = function (headersOnly) {
10013 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10014}
10015
ab78acc6
IC
10016module.exports = Block
10017
10018}).call(this,require("buffer").Buffer)
10019},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10020(function (Buffer){
10021var assert = require('assert')
10022var opcodes = require('./opcodes')
ebd8d4e8
IC
10023
10024// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10025function verifuint (value, max) {
ebd8d4e8
IC
10026 assert(typeof value === 'number', 'cannot write a non-number as a number')
10027 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10028 assert(value <= max, 'value is larger than maximum value for type')
10029 assert(Math.floor(value) === value, 'value has a fractional component')
10030}
10031
ab78acc6 10032function pushDataSize (i) {
ebd8d4e8 10033 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10034 : i < 0xff ? 2
10035 : i < 0xffff ? 3
10036 : 5
ebd8d4e8
IC
10037}
10038
ab78acc6 10039function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10040 var opcode = buffer.readUInt8(offset)
10041 var number, size
10042
10043 // ~6 bit
10044 if (opcode < opcodes.OP_PUSHDATA1) {
10045 number = opcode
10046 size = 1
10047
10048 // 8 bit
10049 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10050 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10051 number = buffer.readUInt8(offset + 1)
10052 size = 2
10053
10054 // 16 bit
10055 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10056 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10057 number = buffer.readUInt16LE(offset + 1)
10058 size = 3
10059
10060 // 32 bit
10061 } else {
ab78acc6 10062 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10063 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10064
10065 number = buffer.readUInt32LE(offset + 1)
10066 size = 5
ebd8d4e8
IC
10067 }
10068
10069 return {
10070 opcode: opcode,
10071 number: number,
10072 size: size
10073 }
10074}
10075
ab78acc6 10076function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10077 var a = buffer.readUInt32LE(offset)
10078 var b = buffer.readUInt32LE(offset + 4)
10079 b *= 0x100000000
10080
10081 verifuint(b + a, 0x001fffffffffffff)
10082
10083 return b + a
10084}
10085
ab78acc6 10086function readVarInt (buffer, offset) {
ebd8d4e8
IC
10087 var t = buffer.readUInt8(offset)
10088 var number, size
10089
10090 // 8 bit
10091 if (t < 253) {
10092 number = t
10093 size = 1
10094
10095 // 16 bit
10096 } else if (t < 254) {
10097 number = buffer.readUInt16LE(offset + 1)
10098 size = 3
10099
10100 // 32 bit
10101 } else if (t < 255) {
10102 number = buffer.readUInt32LE(offset + 1)
10103 size = 5
10104
10105 // 64 bit
10106 } else {
10107 number = readUInt64LE(buffer, offset + 1)
10108 size = 9
10109 }
10110
10111 return {
10112 number: number,
10113 size: size
10114 }
10115}
10116
ab78acc6 10117function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10118 var size = pushDataSize(number)
10119
10120 // ~6 bit
10121 if (size === 1) {
10122 buffer.writeUInt8(number, offset)
10123
10124 // 8 bit
10125 } else if (size === 2) {
10126 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10127 buffer.writeUInt8(number, offset + 1)
10128
10129 // 16 bit
10130 } else if (size === 3) {
10131 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10132 buffer.writeUInt16LE(number, offset + 1)
10133
10134 // 32 bit
10135 } else {
10136 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10137 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10138 }
10139
10140 return size
10141}
10142
ab78acc6 10143function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10144 verifuint(value, 0x001fffffffffffff)
10145
10146 buffer.writeInt32LE(value & -1, offset)
10147 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10148}
10149
ab78acc6
IC
10150function varIntSize (i) {
10151 return i < 253 ? 1
10152 : i < 0x10000 ? 3
10153 : i < 0x100000000 ? 5
10154 : 9
ebd8d4e8
IC
10155}
10156
ab78acc6 10157function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10158 var size = varIntSize(number)
10159
10160 // 8 bit
10161 if (size === 1) {
10162 buffer.writeUInt8(number, offset)
10163
10164 // 16 bit
10165 } else if (size === 3) {
10166 buffer.writeUInt8(253, offset)
10167 buffer.writeUInt16LE(number, offset + 1)
10168
10169 // 32 bit
10170 } else if (size === 5) {
10171 buffer.writeUInt8(254, offset)
10172 buffer.writeUInt32LE(number, offset + 1)
10173
10174 // 64 bit
10175 } else {
10176 buffer.writeUInt8(255, offset)
10177 writeUInt64LE(buffer, number, offset + 1)
10178 }
10179
10180 return size
10181}
10182
ab78acc6
IC
10183function varIntBuffer (i) {
10184 var size = varIntSize(i)
10185 var buffer = new Buffer(size)
10186 writeVarInt(buffer, i, 0)
10187
10188 return buffer
10189}
10190
10191function reverse (buffer) {
10192 var buffer2 = new Buffer(buffer)
10193 Array.prototype.reverse.call(buffer2)
10194 return buffer2
10195}
10196
ebd8d4e8
IC
10197module.exports = {
10198 pushDataSize: pushDataSize,
10199 readPushDataInt: readPushDataInt,
10200 readUInt64LE: readUInt64LE,
10201 readVarInt: readVarInt,
ab78acc6
IC
10202 reverse: reverse,
10203 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10204 varIntSize: varIntSize,
10205 writePushDataInt: writePushDataInt,
10206 writeUInt64LE: writeUInt64LE,
10207 writeVarInt: writeVarInt
10208}
10209
ab78acc6
IC
10210}).call(this,require("buffer").Buffer)
10211},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10212var createHash = require('create-hash')
ebd8d4e8 10213
ab78acc6 10214function hash160 (buffer) {
ebd8d4e8
IC
10215 return ripemd160(sha256(buffer))
10216}
10217
ab78acc6 10218function hash256 (buffer) {
ebd8d4e8
IC
10219 return sha256(sha256(buffer))
10220}
10221
ab78acc6
IC
10222function ripemd160 (buffer) {
10223 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10224}
10225
ab78acc6
IC
10226function sha1 (buffer) {
10227 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10228}
10229
ab78acc6
IC
10230function sha256 (buffer) {
10231 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10232}
10233
10234// FIXME: Name not consistent with others
ab78acc6 10235var createHmac = require('create-hmac')
ebd8d4e8 10236
ab78acc6
IC
10237function HmacSHA256 (buffer, secret) {
10238 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10239 return createHmac('sha256', secret).update(buffer).digest()
10240}
ebd8d4e8 10241
ab78acc6
IC
10242function HmacSHA512 (buffer, secret) {
10243 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10244 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10245}
10246
10247module.exports = {
10248 ripemd160: ripemd160,
10249 sha1: sha1,
10250 sha256: sha256,
10251 hash160: hash160,
10252 hash256: hash256,
10253 HmacSHA256: HmacSHA256,
10254 HmacSHA512: HmacSHA512
10255}
10256
ab78acc6 10257},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10258(function (Buffer){
ab78acc6
IC
10259var assert = require('assert')
10260var createHmac = require('create-hmac')
10261var typeForce = require('typeforce')
ebd8d4e8 10262
ab78acc6
IC
10263var BigInteger = require('bigi')
10264var ECSignature = require('./ecsignature')
10265
10266var ZERO = new Buffer([0])
10267var ONE = new Buffer([1])
ebd8d4e8
IC
10268
10269// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10270function deterministicGenerateK (curve, hash, d, checkSig) {
10271 typeForce('Buffer', hash)
10272 typeForce('BigInteger', d)
10273
10274 // FIXME: remove/uncomment for 2.0.0
10275 // typeForce('Function', checkSig)
10276
10277 if (typeof checkSig !== 'function') {
10278 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10279
10280 checkSig = function (k) {
10281 var G = curve.G
10282 var n = curve.n
10283 var e = BigInteger.fromBuffer(hash)
10284
10285 var Q = G.multiply(k)
10286
10287 if (curve.isInfinity(Q))
10288 return false
10289
10290 var r = Q.affineX.mod(n)
10291 if (r.signum() === 0)
10292 return false
10293
10294 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10295 if (s.signum() === 0)
10296 return false
10297
10298 return true
10299 }
10300 }
10301
10302 // sanity check
ebd8d4e8 10303 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10304
10305 var x = d.toBuffer(32)
10306 var k = new Buffer(32)
10307 var v = new Buffer(32)
10308
ab78acc6 10309 // Step A, ignored as hash already provided
ebd8d4e8
IC
10310 // Step B
10311 v.fill(1)
10312
10313 // Step C
10314 k.fill(0)
10315
10316 // Step D
ab78acc6
IC
10317 k = createHmac('sha256', k)
10318 .update(v)
10319 .update(ZERO)
10320 .update(x)
10321 .update(hash)
10322 .digest()
ebd8d4e8
IC
10323
10324 // Step E
ab78acc6 10325 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10326
10327 // Step F
ab78acc6
IC
10328 k = createHmac('sha256', k)
10329 .update(v)
10330 .update(ONE)
10331 .update(x)
10332 .update(hash)
10333 .digest()
ebd8d4e8
IC
10334
10335 // Step G
ab78acc6 10336 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10337
10338 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10339 // Step H2b
ab78acc6 10340 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10341
10342 var T = BigInteger.fromBuffer(v)
10343
ab78acc6
IC
10344 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10345 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10346 k = createHmac('sha256', k)
10347 .update(v)
10348 .update(ZERO)
10349 .digest()
10350
10351 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10352
ab78acc6
IC
10353 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10354 // Step H2b again
10355 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10356 T = BigInteger.fromBuffer(v)
10357 }
10358
10359 return T
10360}
10361
ab78acc6
IC
10362function sign (curve, hash, d) {
10363 var r, s
ebd8d4e8 10364
ab78acc6 10365 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10366 var n = curve.n
10367 var G = curve.G
ebd8d4e8 10368
ab78acc6
IC
10369 deterministicGenerateK(curve, hash, d, function (k) {
10370 var Q = G.multiply(k)
10371
10372 if (curve.isInfinity(Q))
10373 return false
10374
10375 r = Q.affineX.mod(n)
10376 if (r.signum() === 0)
10377 return false
10378
10379 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10380 if (s.signum() === 0)
10381 return false
ebd8d4e8 10382
ab78acc6
IC
10383 return true
10384 })
ebd8d4e8
IC
10385
10386 var N_OVER_TWO = n.shiftRight(1)
10387
10388 // enforce low S values, see bip62: 'low s values in signatures'
10389 if (s.compareTo(N_OVER_TWO) > 0) {
10390 s = n.subtract(s)
10391 }
10392
10393 return new ECSignature(r, s)
10394}
10395
ab78acc6 10396function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10397 var n = curve.n
10398 var G = curve.G
10399
10400 var r = signature.r
10401 var s = signature.s
10402
ab78acc6
IC
10403 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10404 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10405 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10406
ab78acc6 10407 // c = s^-1 mod n
ebd8d4e8
IC
10408 var c = s.modInverse(n)
10409
ab78acc6
IC
10410 // 1.4.4 Compute u1 = es^−1 mod n
10411 // u2 = rs^−1 mod n
ebd8d4e8
IC
10412 var u1 = e.multiply(c).mod(n)
10413 var u2 = r.multiply(c).mod(n)
10414
ab78acc6
IC
10415 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10416 var R = G.multiplyTwo(u1, Q, u2)
10417 var v = R.affineX.mod(n)
ebd8d4e8 10418
ab78acc6
IC
10419 // 1.4.5 (cont.) Enforce R is not at infinity
10420 if (curve.isInfinity(R)) return false
10421
10422 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10423 return v.equals(r)
10424}
10425
ab78acc6
IC
10426function verify (curve, hash, signature, Q) {
10427 // 1.4.2 H = Hash(M), already done by the user
10428 // 1.4.3 e = H
10429 var e = BigInteger.fromBuffer(hash)
10430
10431 return verifyRaw(curve, e, signature, Q)
10432}
10433
ebd8d4e8
IC
10434/**
10435 * Recover a public key from a signature.
10436 *
10437 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10438 * Key Recovery Operation".
10439 *
10440 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10441 */
ab78acc6 10442function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10443 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10444
ab78acc6
IC
10445 var n = curve.n
10446 var G = curve.G
10447
ebd8d4e8
IC
10448 var r = signature.r
10449 var s = signature.s
10450
ab78acc6
IC
10451 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10452 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10453
ebd8d4e8
IC
10454 // A set LSB signifies that the y-coordinate is odd
10455 var isYOdd = i & 1
10456
10457 // The more significant bit specifies whether we should use the
10458 // first or second candidate key.
10459 var isSecondKey = i >> 1
10460
ebd8d4e8
IC
10461 // 1.1 Let x = r + jn
10462 var x = isSecondKey ? r.add(n) : r
10463 var R = curve.pointFromX(isYOdd, x)
10464
10465 // 1.4 Check that nR is at infinity
10466 var nR = R.multiply(n)
10467 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10468
10469 // Compute -e from e
10470 var eNeg = e.negate().mod(n)
10471
10472 // 1.6.1 Compute Q = r^-1 (sR - eG)
10473 // Q = r^-1 (sR + -eG)
10474 var rInv = r.modInverse(n)
10475
10476 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10477 curve.validate(Q)
10478
10479 return Q
10480}
10481
10482/**
10483 * Calculate pubkey extraction parameter.
10484 *
10485 * When extracting a pubkey from a signature, we have to
10486 * distinguish four different cases. Rather than putting this
10487 * burden on the verifier, Bitcoin includes a 2-bit value with the
10488 * signature.
10489 *
10490 * This function simply tries all four cases and returns the value
10491 * that resulted in a successful pubkey recovery.
10492 */
ab78acc6 10493function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10494 for (var i = 0; i < 4; i++) {
10495 var Qprime = recoverPubKey(curve, e, signature, i)
10496
10497 // 1.6.2 Verify Q
10498 if (Qprime.equals(Q)) {
10499 return i
10500 }
10501 }
10502
10503 throw new Error('Unable to find valid recovery factor')
10504}
10505
10506module.exports = {
10507 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10508 deterministicGenerateK: deterministicGenerateK,
10509 recoverPubKey: recoverPubKey,
10510 sign: sign,
10511 verify: verify,
10512 verifyRaw: verifyRaw
10513}
10514
ab78acc6
IC
10515}).call(this,require("buffer").Buffer)
10516},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10517(function (Buffer){
ab78acc6
IC
10518var assert = require('assert')
10519var base58check = require('bs58check')
10520var ecdsa = require('./ecdsa')
10521var networks = require('./networks')
10522var randomBytes = require('randombytes')
10523var typeForce = require('typeforce')
ebd8d4e8 10524
ab78acc6
IC
10525var BigInteger = require('bigi')
10526var ECPubKey = require('./ecpubkey')
ebd8d4e8 10527
ab78acc6
IC
10528var ecurve = require('ecurve')
10529var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10530
ab78acc6 10531function ECKey (d, compressed) {
ebd8d4e8 10532 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10533 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10534
ab78acc6 10535 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10536
10537 this.d = d
10538 this.pub = new ECPubKey(Q, compressed)
10539}
10540
ab78acc6
IC
10541// Constants
10542ECKey.curve = secp256k1
10543
ebd8d4e8 10544// Static constructors
ab78acc6 10545ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10546 var payload = base58check.decode(string)
10547 var compressed = false
10548
10549 // Ignore the version byte
10550 payload = payload.slice(1)
10551
10552 if (payload.length === 33) {
10553 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10554
10555 // Truncate the compression flag
10556 payload = payload.slice(0, -1)
10557 compressed = true
10558 }
10559
10560 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10561
10562 var d = BigInteger.fromBuffer(payload)
10563 return new ECKey(d, compressed)
10564}
10565
ab78acc6
IC
10566ECKey.makeRandom = function (compressed, rng) {
10567 rng = rng || randomBytes
ebd8d4e8
IC
10568
10569 var buffer = rng(32)
ab78acc6
IC
10570 typeForce('Buffer', buffer)
10571 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10572
10573 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10574 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10575
10576 return new ECKey(d, compressed)
10577}
10578
10579// Export functions
ab78acc6 10580ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10581 network = network || networks.bitcoin
10582
10583 var bufferLen = this.pub.compressed ? 34 : 33
10584 var buffer = new Buffer(bufferLen)
10585
10586 buffer.writeUInt8(network.wif, 0)
10587 this.d.toBuffer(32).copy(buffer, 1)
10588
10589 if (this.pub.compressed) {
10590 buffer.writeUInt8(0x01, 33)
10591 }
10592
10593 return base58check.encode(buffer)
10594}
10595
10596// Operations
ab78acc6
IC
10597ECKey.prototype.sign = function (hash) {
10598 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10599}
10600
10601module.exports = ECKey
10602
ab78acc6
IC
10603}).call(this,require("buffer").Buffer)
10604},{"./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){
ebd8d4e8 10605(function (Buffer){
ab78acc6
IC
10606var crypto = require('./crypto')
10607var ecdsa = require('./ecdsa')
10608var typeForce = require('typeforce')
10609var networks = require('./networks')
ebd8d4e8 10610
ab78acc6 10611var Address = require('./address')
ebd8d4e8 10612
ab78acc6
IC
10613var ecurve = require('ecurve')
10614var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10615
ab78acc6
IC
10616function ECPubKey (Q, compressed) {
10617 if (compressed === undefined) {
10618 compressed = true
10619 }
ebd8d4e8 10620
ab78acc6
IC
10621 typeForce('Point', Q)
10622 typeForce('Boolean', compressed)
ebd8d4e8
IC
10623
10624 this.compressed = compressed
10625 this.Q = Q
10626}
10627
ab78acc6
IC
10628// Constants
10629ECPubKey.curve = secp256k1
10630
ebd8d4e8 10631// Static constructors
ab78acc6
IC
10632ECPubKey.fromBuffer = function (buffer) {
10633 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10634 return new ECPubKey(Q, Q.compressed)
10635}
10636
ab78acc6 10637ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10638 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10639}
10640
10641// Operations
ab78acc6 10642ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10643 network = network || networks.bitcoin
10644
10645 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10646}
10647
ab78acc6
IC
10648ECPubKey.prototype.verify = function (hash, signature) {
10649 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10650}
10651
10652// Export functions
ab78acc6 10653ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10654 return this.Q.getEncoded(this.compressed)
10655}
10656
ab78acc6 10657ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10658 return this.toBuffer().toString('hex')
10659}
10660
10661module.exports = ECPubKey
10662
ab78acc6
IC
10663}).call(this,require("buffer").Buffer)
10664},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10665(function (Buffer){
ab78acc6
IC
10666var assert = require('assert')
10667var typeForce = require('typeforce')
10668
10669var BigInteger = require('bigi')
10670
10671function ECSignature (r, s) {
10672 typeForce('BigInteger', r)
10673 typeForce('BigInteger', s)
ebd8d4e8 10674
ebd8d4e8
IC
10675 this.r = r
10676 this.s = s
10677}
10678
ab78acc6 10679ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10680 assert.equal(buffer.length, 65, 'Invalid signature length')
10681 var i = buffer.readUInt8(0) - 27
10682
10683 // At most 3 bits
10684 assert.equal(i, i & 7, 'Invalid signature parameter')
10685 var compressed = !!(i & 4)
10686
10687 // Recovery param only
10688 i = i & 3
10689
10690 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10691 var s = BigInteger.fromBuffer(buffer.slice(33))
10692
10693 return {
10694 compressed: compressed,
10695 i: i,
10696 signature: new ECSignature(r, s)
10697 }
10698}
10699
ab78acc6 10700ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10701 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10702 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10703 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10704
10705 var rLen = buffer.readUInt8(3)
10706 assert(rLen > 0, 'R length is zero')
10707
10708 var offset = 4 + rLen
10709 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10710
10711 var sLen = buffer.readUInt8(offset + 1)
10712 assert(sLen > 0, 'S length is zero')
10713
10714 var rB = buffer.slice(4, offset)
10715 var sB = buffer.slice(offset + 2)
10716 offset += 2 + sLen
10717
10718 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10719 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10720 }
10721
10722 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10723 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10724 }
10725
10726 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10727 var r = BigInteger.fromDERInteger(rB)
10728 var s = BigInteger.fromDERInteger(sB)
10729
10730 assert(r.signum() >= 0, 'R value is negative')
10731 assert(s.signum() >= 0, 'S value is negative')
10732
10733 return new ECSignature(r, s)
10734}
10735
ab78acc6
IC
10736// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10737ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
10738 var hashType = buffer.readUInt8(buffer.length - 1)
10739 var hashTypeMod = hashType & ~0x80
10740
ab78acc6 10741 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
10742
10743 return {
10744 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10745 hashType: hashType
10746 }
10747}
10748
ab78acc6
IC
10749ECSignature.prototype.toCompact = function (i, compressed) {
10750 if (compressed) {
10751 i += 4
10752 }
10753
ebd8d4e8
IC
10754 i += 27
10755
10756 var buffer = new Buffer(65)
10757 buffer.writeUInt8(i, 0)
10758
10759 this.r.toBuffer(32).copy(buffer, 1)
10760 this.s.toBuffer(32).copy(buffer, 33)
10761
10762 return buffer
10763}
10764
ab78acc6 10765ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
10766 var rBa = this.r.toDERInteger()
10767 var sBa = this.s.toDERInteger()
10768
10769 var sequence = []
ab78acc6
IC
10770
10771 // INTEGER
10772 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
10773 sequence = sequence.concat(rBa)
10774
ab78acc6
IC
10775 // INTEGER
10776 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
10777 sequence = sequence.concat(sBa)
10778
ab78acc6
IC
10779 // SEQUENCE
10780 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
10781
10782 return new Buffer(sequence)
10783}
10784
ab78acc6
IC
10785ECSignature.prototype.toScriptSignature = function (hashType) {
10786 var hashTypeMod = hashType & ~0x80
10787 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10788
ebd8d4e8
IC
10789 var hashTypeBuffer = new Buffer(1)
10790 hashTypeBuffer.writeUInt8(hashType, 0)
10791
10792 return Buffer.concat([this.toDER(), hashTypeBuffer])
10793}
10794
10795module.exports = ECSignature
10796
ab78acc6
IC
10797}).call(this,require("buffer").Buffer)
10798},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 10799(function (Buffer){
ab78acc6
IC
10800var assert = require('assert')
10801var base58check = require('bs58check')
10802var bcrypto = require('./crypto')
10803var createHmac = require('create-hmac')
10804var typeForce = require('typeforce')
10805var networks = require('./networks')
10806
10807var BigInteger = require('bigi')
10808var ECKey = require('./eckey')
10809var ECPubKey = require('./ecpubkey')
10810
10811var ecurve = require('ecurve')
ebd8d4e8
IC
10812var curve = ecurve.getCurveByName('secp256k1')
10813
ab78acc6 10814function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
10815 for (var name in networks) {
10816 var network = networks[name]
10817
ab78acc6
IC
10818 if (version === network.bip32.private || version === network.bip32.public) {
10819 return network
ebd8d4e8
IC
10820 }
10821 }
10822
ab78acc6 10823 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
10824}
10825
ab78acc6 10826function HDNode (K, chainCode, network) {
ebd8d4e8
IC
10827 network = network || networks.bitcoin
10828
ab78acc6
IC
10829 typeForce('Buffer', chainCode)
10830
10831 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
10832 assert(network.bip32, 'Unknown BIP32 constants for network')
10833
10834 this.chainCode = chainCode
10835 this.depth = 0
10836 this.index = 0
ab78acc6 10837 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
10838 this.network = network
10839
10840 if (K instanceof BigInteger) {
10841 this.privKey = new ECKey(K, true)
10842 this.pubKey = this.privKey.pub
ab78acc6
IC
10843 } else if (K instanceof ECKey) {
10844 assert(K.pub.compressed, 'ECKey must be compressed')
10845 this.privKey = K
10846 this.pubKey = K.pub
10847 } else if (K instanceof ECPubKey) {
10848 assert(K.compressed, 'ECPubKey must be compressed')
10849 this.pubKey = K
ebd8d4e8
IC
10850 } else {
10851 this.pubKey = new ECPubKey(K, true)
10852 }
10853}
10854
10855HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10856HDNode.HIGHEST_BIT = 0x80000000
10857HDNode.LENGTH = 78
10858
ab78acc6
IC
10859HDNode.fromSeedBuffer = function (seed, network) {
10860 typeForce('Buffer', seed)
10861
10862 assert(seed.length >= 16, 'Seed should be at least 128 bits')
10863 assert(seed.length <= 64, 'Seed should be at most 512 bits')
10864
10865 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
10866 var IL = I.slice(0, 32)
10867 var IR = I.slice(32)
10868
10869 // In case IL is 0 or >= n, the master key is invalid
10870 // This is handled by `new ECKey` in the HDNode constructor
10871 var pIL = BigInteger.fromBuffer(IL)
10872
10873 return new HDNode(pIL, IR, network)
10874}
10875
ab78acc6 10876HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
10877 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10878}
10879
ab78acc6
IC
10880HDNode.fromBase58 = function (string, network) {
10881 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
10882}
10883
ab78acc6
IC
10884// FIXME: remove in 2.x.y
10885HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10886 if (!__ignoreDeprecation) {
10887 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
10888 }
10889
ebd8d4e8
IC
10890 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10891
10892 // 4 byte: version bytes
10893 var version = buffer.readUInt32BE(0)
ab78acc6
IC
10894
10895 if (network) {
10896 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10897
10898 // auto-detect
10899 } else {
10900 network = findBIP32NetworkByVersion(version)
10901 }
ebd8d4e8
IC
10902
10903 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
10904 var depth = buffer.readUInt8(4)
10905
10906 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10907 var parentFingerprint = buffer.readUInt32BE(5)
10908 if (depth === 0) {
10909 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
10910 }
10911
10912 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10913 // This is encoded in MSB order. (0x00000000 if master key)
10914 var index = buffer.readUInt32BE(9)
10915 assert(depth > 0 || index === 0, 'Invalid index')
10916
10917 // 32 bytes: the chain code
10918 var chainCode = buffer.slice(13, 45)
ab78acc6 10919 var data, hd
ebd8d4e8
IC
10920
10921 // 33 bytes: private key data (0x00 + k)
ab78acc6 10922 if (version === network.bip32.private) {
ebd8d4e8 10923 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 10924 data = buffer.slice(46, 78)
ebd8d4e8 10925 var d = BigInteger.fromBuffer(data)
ab78acc6 10926 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
10927
10928 // 33 bytes: public key data (0x02 + X or 0x03 + X)
10929 } else {
ab78acc6 10930 data = buffer.slice(45, 78)
ebd8d4e8
IC
10931 var Q = ecurve.Point.decodeFrom(curve, data)
10932 assert.equal(Q.compressed, true, 'Invalid public key')
10933
10934 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10935 // If not, the extended public key is invalid.
10936 curve.validate(Q)
10937
ab78acc6 10938 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
10939 }
10940
10941 hd.depth = depth
10942 hd.index = index
10943 hd.parentFingerprint = parentFingerprint
10944
10945 return hd
10946}
10947
ab78acc6
IC
10948// FIXME: remove in 2.x.y
10949HDNode.fromHex = function (hex, network) {
10950 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
10951}
10952
ab78acc6
IC
10953HDNode.prototype.getIdentifier = function () {
10954 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
10955}
10956
ab78acc6 10957HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
10958 return this.getIdentifier().slice(0, 4)
10959}
10960
ab78acc6 10961HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
10962 return this.pubKey.getAddress(this.network)
10963}
10964
ab78acc6
IC
10965HDNode.prototype.neutered = function () {
10966 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10967 neutered.depth = this.depth
10968 neutered.index = this.index
10969 neutered.parentFingerprint = this.parentFingerprint
10970
10971 return neutered
10972}
10973
10974HDNode.prototype.toBase58 = function (isPrivate) {
10975 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
10976}
10977
ab78acc6
IC
10978// FIXME: remove in 2.x.y
10979HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10980 if (isPrivate === undefined) {
10981 isPrivate = !!this.privKey
10982
10983 // FIXME: remove in 2.x.y
10984 } else {
10985 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10986 }
10987
10988 if (!__ignoreDeprecation) {
10989 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
10990 }
ebd8d4e8
IC
10991
10992 // Version
10993 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10994 var buffer = new Buffer(HDNode.LENGTH)
10995
10996 // 4 bytes: version bytes
10997 buffer.writeUInt32BE(version, 0)
10998
10999 // Depth
11000 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11001 buffer.writeUInt8(this.depth, 4)
11002
11003 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11004 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11005
11006 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11007 // This is encoded in Big endian. (0x00000000 if master key)
11008 buffer.writeUInt32BE(this.index, 9)
11009
11010 // 32 bytes: the chain code
11011 this.chainCode.copy(buffer, 13)
11012
11013 // 33 bytes: the public key or private key data
11014 if (isPrivate) {
ab78acc6 11015 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11016 assert(this.privKey, 'Missing private key')
11017
11018 // 0x00 + k for private keys
11019 buffer.writeUInt8(0, 45)
11020 this.privKey.d.toBuffer(32).copy(buffer, 46)
11021 } else {
ebd8d4e8
IC
11022 // X9.62 encoding for public keys
11023 this.pubKey.toBuffer().copy(buffer, 45)
11024 }
11025
11026 return buffer
11027}
11028
ab78acc6
IC
11029// FIXME: remove in 2.x.y
11030HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11031 return this.toBuffer(isPrivate).toString('hex')
11032}
11033
11034// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11035HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11036 var isHardened = index >= HDNode.HIGHEST_BIT
11037 var indexBuffer = new Buffer(4)
11038 indexBuffer.writeUInt32BE(index, 0)
11039
11040 var data
11041
11042 // Hardened child
11043 if (isHardened) {
11044 assert(this.privKey, 'Could not derive hardened child key')
11045
11046 // data = 0x00 || ser256(kpar) || ser32(index)
11047 data = Buffer.concat([
11048 this.privKey.d.toBuffer(33),
11049 indexBuffer
11050 ])
11051
11052 // Normal child
11053 } else {
11054 // data = serP(point(kpar)) || ser32(index)
11055 // = serP(Kpar) || ser32(index)
11056 data = Buffer.concat([
11057 this.pubKey.toBuffer(),
11058 indexBuffer
11059 ])
11060 }
11061
ab78acc6 11062 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11063 var IL = I.slice(0, 32)
11064 var IR = I.slice(32)
11065
11066 var pIL = BigInteger.fromBuffer(IL)
11067
11068 // In case parse256(IL) >= n, proceed with the next value for i
11069 if (pIL.compareTo(curve.n) >= 0) {
11070 return this.derive(index + 1)
11071 }
11072
11073 // Private parent key -> private child key
11074 var hd
11075 if (this.privKey) {
11076 // ki = parse256(IL) + kpar (mod n)
11077 var ki = pIL.add(this.privKey.d).mod(curve.n)
11078
11079 // In case ki == 0, proceed with the next value for i
11080 if (ki.signum() === 0) {
11081 return this.derive(index + 1)
11082 }
11083
11084 hd = new HDNode(ki, IR, this.network)
11085
11086 // Public parent key -> public child key
11087 } else {
11088 // Ki = point(parse256(IL)) + Kpar
11089 // = G*IL + Kpar
11090 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11091
11092 // In case Ki is the point at infinity, proceed with the next value for i
11093 if (curve.isInfinity(Ki)) {
11094 return this.derive(index + 1)
11095 }
11096
11097 hd = new HDNode(Ki, IR, this.network)
11098 }
11099
11100 hd.depth = this.depth + 1
11101 hd.index = index
11102 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11103
11104 return hd
11105}
11106
ab78acc6 11107HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11108 // Only derives hardened private keys by default
11109 return this.derive(index + HDNode.HIGHEST_BIT)
11110}
11111
11112HDNode.prototype.toString = HDNode.prototype.toBase58
11113
11114module.exports = HDNode
11115
ab78acc6
IC
11116}).call(this,require("buffer").Buffer)
11117},{"./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){
ebd8d4e8 11118module.exports = {
ab78acc6
IC
11119 Address: require('./address'),
11120 base58check: require('./base58check'),
11121 Block: require('./block'),
11122 bufferutils: require('./bufferutils'),
11123 crypto: require('./crypto'),
11124 ecdsa: require('./ecdsa'),
11125 ECKey: require('./eckey'),
11126 ECPubKey: require('./ecpubkey'),
11127 ECSignature: require('./ecsignature'),
11128 Message: require('./message'),
11129 opcodes: require('./opcodes'),
11130 HDNode: require('./hdnode'),
11131 Script: require('./script'),
11132 scripts: require('./scripts'),
11133 Transaction: require('./transaction'),
11134 TransactionBuilder: require('./transaction_builder'),
11135 networks: require('./networks'),
11136 Wallet: require('./wallet')
11137}
11138
11139},{"./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){
ebd8d4e8 11140(function (Buffer){
ab78acc6
IC
11141var bufferutils = require('./bufferutils')
11142var crypto = require('./crypto')
11143var ecdsa = require('./ecdsa')
11144var networks = require('./networks')
11145
11146var BigInteger = require('bigi')
11147var ECPubKey = require('./ecpubkey')
11148var ECSignature = require('./ecsignature')
11149
11150var ecurve = require('ecurve')
ebd8d4e8
IC
11151var ecparams = ecurve.getCurveByName('secp256k1')
11152
ab78acc6 11153function magicHash (message, network) {
ebd8d4e8
IC
11154 var magicPrefix = new Buffer(network.magicPrefix)
11155 var messageBuffer = new Buffer(message)
ab78acc6 11156 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11157
11158 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11159 return crypto.hash256(buffer)
11160}
11161
ab78acc6 11162function sign (privKey, message, network) {
ebd8d4e8
IC
11163 network = network || networks.bitcoin
11164
11165 var hash = magicHash(message, network)
11166 var signature = privKey.sign(hash)
11167 var e = BigInteger.fromBuffer(hash)
11168 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11169
11170 return signature.toCompact(i, privKey.pub.compressed)
11171}
11172
11173// TODO: network could be implied from address
ab78acc6
IC
11174function verify (address, signature, message, network) {
11175 if (!Buffer.isBuffer(signature)) {
11176 signature = new Buffer(signature, 'base64')
ebd8d4e8 11177 }
ab78acc6 11178
ebd8d4e8
IC
11179 network = network || networks.bitcoin
11180
11181 var hash = magicHash(message, network)
ab78acc6 11182 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11183 var e = BigInteger.fromBuffer(hash)
11184 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11185
11186 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11187 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11188}
11189
11190module.exports = {
11191 magicHash: magicHash,
11192 sign: sign,
11193 verify: verify
11194}
11195
ab78acc6
IC
11196}).call(this,require("buffer").Buffer)
11197},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
ebd8d4e8
IC
11198// https://en.bitcoin.it/wiki/List_of_address_prefixes
11199// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11200
11201var networks = {
11202 bitcoin: {
11203 magicPrefix: '\x18Bitcoin Signed Message:\n',
11204 bip32: {
11205 public: 0x0488b21e,
11206 private: 0x0488ade4
11207 },
11208 pubKeyHash: 0x00,
11209 scriptHash: 0x05,
11210 wif: 0x80,
11211 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11212 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11213 estimateFee: estimateFee('bitcoin')
a9385c1b 11214 },
ab78acc6
IC
11215 testnet: {
11216 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11217 bip32: {
ab78acc6
IC
11218 public: 0x043587cf,
11219 private: 0x04358394
a9385c1b 11220 },
ab78acc6
IC
11221 pubKeyHash: 0x6f,
11222 scriptHash: 0xc4,
11223 wif: 0xef,
11224 dustThreshold: 546,
cb325c58 11225 feePerKb: 10000,
ab78acc6 11226 estimateFee: estimateFee('testnet')
a9385c1b 11227 },
ab78acc6
IC
11228 litecoin: {
11229 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11230 bip32: {
ab78acc6
IC
11231 public: 0x019da462,
11232 private: 0x019d9cfe
a9385c1b 11233 },
ab78acc6
IC
11234 pubKeyHash: 0x30,
11235 scriptHash: 0x05,
11236 wif: 0xb0,
11237 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11238 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11239 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11240 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11241 },
11242 dogecoin: {
11243 magicPrefix: '\x19Dogecoin Signed Message:\n',
11244 bip32: {
11245 public: 0x02facafd,
11246 private: 0x02fac398
11247 },
11248 pubKeyHash: 0x1e,
11249 scriptHash: 0x16,
11250 wif: 0x9e,
11251 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11252 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11253 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11254 estimateFee: estimateFee('dogecoin')
11255 },
ab78acc6
IC
11256 viacoin: {
11257 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11258 bip32: {
ab78acc6
IC
11259 public: 0x0488b21e,
11260 private: 0x0488ade4
ebd8d4e8 11261 },
ab78acc6
IC
11262 pubKeyHash: 0x47,
11263 scriptHash: 0x21,
11264 wif: 0xc7,
11265 dustThreshold: 560,
11266 dustSoftThreshold: 100000,
11267 feePerKb: 100000, //
11268 estimateFee: estimateFee('viacoin')
ebd8d4e8 11269 },
ab78acc6
IC
11270 viacointestnet: {
11271 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11272 bip32: {
11273 public: 0x043587cf,
11274 private: 0x04358394
11275 },
ab78acc6 11276 pubKeyHash: 0x7f,
ebd8d4e8 11277 scriptHash: 0xc4,
ab78acc6
IC
11278 wif: 0xff,
11279 dustThreshold: 560,
11280 dustSoftThreshold: 100000,
11281 feePerKb: 100000,
11282 estimateFee: estimateFee('viacointestnet')
11283 },
11284 gamerscoin: {
11285 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11286 bip32: {
11287 public: 0x019da462,
11288 private: 0x019d9cfe
11289 },
11290 pubKeyHash: 0x26,
11291 scriptHash: 0x05,
11292 wif: 0xA6,
11293 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11294 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11295 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11296 estimateFee: estimateFee('gamerscoin')
11297 },
11298 jumbucks: {
11299 magicPrefix: '\x19Jumbucks Signed Message:\n',
11300 bip32: {
11301 public: 0x037a689a,
11302 private: 0x037a6460
11303 },
11304 pubKeyHash: 0x2b,
11305 scriptHash: 0x05,
11306 wif: 0xab,
11307 dustThreshold: 0,
11308 dustSoftThreshold: 10000,
ebd8d4e8 11309 feePerKb: 10000,
ab78acc6
IC
11310 estimateFee: estimateFee('jumbucks')
11311 },
11312 zetacoin: {
11313 magicPrefix: '\x18Zetacoin Signed Message:\n',
11314 bip32: {
11315 public: 0x0488b21e,
11316 private: 0x0488ade4
11317 },
11318 pubKeyHash: 0x50,
11319 scriptHash: 0x09,
11320 wif: 0xe0,
11321 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11322 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11323 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11324 }
11325}
11326
ab78acc6
IC
11327function estimateFee (type) {
11328 return function (tx) {
ebd8d4e8
IC
11329 var network = networks[type]
11330 var baseFee = network.feePerKb
11331 var byteSize = tx.toBuffer().length
11332
11333 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11334 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11335
ab78acc6 11336 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11337 if (e.value < network.dustSoftThreshold) {
11338 fee += baseFee
11339 }
11340 })
11341
11342 return fee
11343 }
11344}
11345
11346module.exports = networks
11347
ab78acc6 11348},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11349module.exports = {
11350 // push value
ab78acc6
IC
11351 OP_FALSE: 0,
11352 OP_0: 0,
11353 OP_PUSHDATA1: 76,
11354 OP_PUSHDATA2: 77,
11355 OP_PUSHDATA4: 78,
11356 OP_1NEGATE: 79,
11357 OP_RESERVED: 80,
11358 OP_1: 81,
11359 OP_TRUE: 81,
11360 OP_2: 82,
11361 OP_3: 83,
11362 OP_4: 84,
11363 OP_5: 85,
11364 OP_6: 86,
11365 OP_7: 87,
11366 OP_8: 88,
11367 OP_9: 89,
11368 OP_10: 90,
11369 OP_11: 91,
11370 OP_12: 92,
11371 OP_13: 93,
11372 OP_14: 94,
11373 OP_15: 95,
11374 OP_16: 96,
ebd8d4e8
IC
11375
11376 // control
ab78acc6
IC
11377 OP_NOP: 97,
11378 OP_VER: 98,
11379 OP_IF: 99,
11380 OP_NOTIF: 100,
11381 OP_VERIF: 101,
11382 OP_VERNOTIF: 102,
11383 OP_ELSE: 103,
11384 OP_ENDIF: 104,
11385 OP_VERIFY: 105,
11386 OP_RETURN: 106,
ebd8d4e8
IC
11387
11388 // stack ops
ab78acc6
IC
11389 OP_TOALTSTACK: 107,
11390 OP_FROMALTSTACK: 108,
11391 OP_2DROP: 109,
11392 OP_2DUP: 110,
11393 OP_3DUP: 111,
11394 OP_2OVER: 112,
11395 OP_2ROT: 113,
11396 OP_2SWAP: 114,
11397 OP_IFDUP: 115,
11398 OP_DEPTH: 116,
11399 OP_DROP: 117,
11400 OP_DUP: 118,
11401 OP_NIP: 119,
11402 OP_OVER: 120,
11403 OP_PICK: 121,
11404 OP_ROLL: 122,
11405 OP_ROT: 123,
11406 OP_SWAP: 124,
11407 OP_TUCK: 125,
ebd8d4e8
IC
11408
11409 // splice ops
ab78acc6
IC
11410 OP_CAT: 126,
11411 OP_SUBSTR: 127,
11412 OP_LEFT: 128,
11413 OP_RIGHT: 129,
11414 OP_SIZE: 130,
ebd8d4e8
IC
11415
11416 // bit logic
ab78acc6
IC
11417 OP_INVERT: 131,
11418 OP_AND: 132,
11419 OP_OR: 133,
11420 OP_XOR: 134,
11421 OP_EQUAL: 135,
11422 OP_EQUALVERIFY: 136,
11423 OP_RESERVED1: 137,
11424 OP_RESERVED2: 138,
ebd8d4e8
IC
11425
11426 // numeric
ab78acc6
IC
11427 OP_1ADD: 139,
11428 OP_1SUB: 140,
11429 OP_2MUL: 141,
11430 OP_2DIV: 142,
11431 OP_NEGATE: 143,
11432 OP_ABS: 144,
11433 OP_NOT: 145,
11434 OP_0NOTEQUAL: 146,
11435
11436 OP_ADD: 147,
11437 OP_SUB: 148,
11438 OP_MUL: 149,
11439 OP_DIV: 150,
11440 OP_MOD: 151,
11441 OP_LSHIFT: 152,
11442 OP_RSHIFT: 153,
11443
11444 OP_BOOLAND: 154,
11445 OP_BOOLOR: 155,
11446 OP_NUMEQUAL: 156,
11447 OP_NUMEQUALVERIFY: 157,
11448 OP_NUMNOTEQUAL: 158,
11449 OP_LESSTHAN: 159,
11450 OP_GREATERTHAN: 160,
11451 OP_LESSTHANOREQUAL: 161,
11452 OP_GREATERTHANOREQUAL: 162,
11453 OP_MIN: 163,
11454 OP_MAX: 164,
11455
11456 OP_WITHIN: 165,
ebd8d4e8
IC
11457
11458 // crypto
ab78acc6
IC
11459 OP_RIPEMD160: 166,
11460 OP_SHA1: 167,
11461 OP_SHA256: 168,
11462 OP_HASH160: 169,
11463 OP_HASH256: 170,
11464 OP_CODESEPARATOR: 171,
11465 OP_CHECKSIG: 172,
11466 OP_CHECKSIGVERIFY: 173,
11467 OP_CHECKMULTISIG: 174,
11468 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11469
11470 // expansion
ab78acc6
IC
11471 OP_NOP1: 176,
11472 OP_NOP2: 177,
11473 OP_NOP3: 178,
11474 OP_NOP4: 179,
11475 OP_NOP5: 180,
11476 OP_NOP6: 181,
11477 OP_NOP7: 182,
11478 OP_NOP8: 183,
11479 OP_NOP9: 184,
11480 OP_NOP10: 185,
ebd8d4e8
IC
11481
11482 // template matching params
ab78acc6
IC
11483 OP_PUBKEYHASH: 253,
11484 OP_PUBKEY: 254,
11485 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11486}
11487
ab78acc6 11488},{}],68:[function(require,module,exports){
ebd8d4e8 11489(function (Buffer){
ab78acc6
IC
11490var assert = require('assert')
11491var bufferutils = require('./bufferutils')
11492var crypto = require('./crypto')
11493var typeForce = require('typeforce')
11494var opcodes = require('./opcodes')
ebd8d4e8 11495
ab78acc6
IC
11496function Script (buffer, chunks) {
11497 typeForce('Buffer', buffer)
11498 typeForce('Array', chunks)
ebd8d4e8
IC
11499
11500 this.buffer = buffer
11501 this.chunks = chunks
11502}
11503
ab78acc6 11504Script.fromASM = function (asm) {
ebd8d4e8 11505 var strChunks = asm.split(' ')
ab78acc6
IC
11506 var chunks = strChunks.map(function (strChunk) {
11507 // opcode
ebd8d4e8
IC
11508 if (strChunk in opcodes) {
11509 return opcodes[strChunk]
11510
ab78acc6 11511 // data chunk
ebd8d4e8
IC
11512 } else {
11513 return new Buffer(strChunk, 'hex')
11514 }
11515 })
11516
11517 return Script.fromChunks(chunks)
11518}
11519
ab78acc6 11520Script.fromBuffer = function (buffer) {
ebd8d4e8 11521 var chunks = []
ebd8d4e8
IC
11522 var i = 0
11523
11524 while (i < buffer.length) {
11525 var opcode = buffer.readUInt8(i)
11526
ab78acc6 11527 // data chunk
ebd8d4e8
IC
11528 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11529 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11530
11531 // did reading a pushDataInt fail? return non-chunked script
11532 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11533 i += d.size
11534
ab78acc6
IC
11535 // attempt to read too much data?
11536 if (i + d.number > buffer.length) return new Script(buffer, [])
11537
ebd8d4e8
IC
11538 var data = buffer.slice(i, i + d.number)
11539 i += d.number
11540
11541 chunks.push(data)
11542
ab78acc6 11543 // opcode
ebd8d4e8
IC
11544 } else {
11545 chunks.push(opcode)
11546
11547 i += 1
11548 }
11549 }
11550
11551 return new Script(buffer, chunks)
11552}
11553
ab78acc6
IC
11554Script.fromChunks = function (chunks) {
11555 typeForce('Array', chunks)
ebd8d4e8 11556
ab78acc6
IC
11557 var bufferSize = chunks.reduce(function (accum, chunk) {
11558 // data chunk
ebd8d4e8
IC
11559 if (Buffer.isBuffer(chunk)) {
11560 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11561 }
11562
ab78acc6 11563 // opcode
ebd8d4e8
IC
11564 return accum + 1
11565 }, 0.0)
11566
11567 var buffer = new Buffer(bufferSize)
11568 var offset = 0
11569
ab78acc6
IC
11570 chunks.forEach(function (chunk) {
11571 // data chunk
ebd8d4e8
IC
11572 if (Buffer.isBuffer(chunk)) {
11573 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11574
11575 chunk.copy(buffer, offset)
11576 offset += chunk.length
11577
ab78acc6 11578 // opcode
ebd8d4e8
IC
11579 } else {
11580 buffer.writeUInt8(chunk, offset)
11581 offset += 1
11582 }
11583 })
11584
11585 assert.equal(offset, buffer.length, 'Could not decode chunks')
11586 return new Script(buffer, chunks)
11587}
11588
ab78acc6 11589Script.fromHex = function (hex) {
ebd8d4e8
IC
11590 return Script.fromBuffer(new Buffer(hex, 'hex'))
11591}
11592
ebd8d4e8
IC
11593Script.EMPTY = Script.fromChunks([])
11594
ab78acc6 11595Script.prototype.getHash = function () {
ebd8d4e8
IC
11596 return crypto.hash160(this.buffer)
11597}
11598
11599// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11600Script.prototype.without = function (needle) {
11601 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11602 return op !== needle
11603 }))
11604}
11605
ebd8d4e8
IC
11606var reverseOps = []
11607for (var op in opcodes) {
11608 var code = opcodes[op]
11609 reverseOps[code] = op
11610}
11611
ab78acc6
IC
11612Script.prototype.toASM = function () {
11613 return this.chunks.map(function (chunk) {
11614 // data chunk
ebd8d4e8
IC
11615 if (Buffer.isBuffer(chunk)) {
11616 return chunk.toString('hex')
11617
ab78acc6 11618 // opcode
ebd8d4e8
IC
11619 } else {
11620 return reverseOps[chunk]
11621 }
11622 }).join(' ')
11623}
11624
ab78acc6 11625Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11626 return this.buffer
11627}
11628
ab78acc6 11629Script.prototype.toHex = function () {
ebd8d4e8
IC
11630 return this.toBuffer().toString('hex')
11631}
11632
11633module.exports = Script
11634
ab78acc6
IC
11635}).call(this,require("buffer").Buffer)
11636},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11637(function (Buffer){
ab78acc6
IC
11638var assert = require('assert')
11639var ops = require('./opcodes')
11640var typeForce = require('typeforce')
ebd8d4e8 11641
ab78acc6 11642var ecurve = require('ecurve')
ebd8d4e8
IC
11643var curve = ecurve.getCurveByName('secp256k1')
11644
ab78acc6
IC
11645var ECSignature = require('./ecsignature')
11646var Script = require('./script')
ebd8d4e8 11647
ab78acc6 11648function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11649 if (!Buffer.isBuffer(buffer)) return false
11650
11651 try {
ebd8d4e8
IC
11652 ecurve.Point.decodeFrom(curve, buffer)
11653 } catch (e) {
ab78acc6
IC
11654 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11655 throw e
ebd8d4e8
IC
11656
11657 return false
11658 }
11659
11660 return true
11661}
11662
ab78acc6 11663function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11664 if (!Buffer.isBuffer(buffer)) return false
11665
11666 try {
11667 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11668 } catch (e) {
11669 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/))) {
11670 throw e
11671 }
ebd8d4e8
IC
11672
11673 return false
11674 }
11675
11676 return true
11677}
11678
ab78acc6
IC
11679function isPubKeyHashInput (script) {
11680 return script.chunks.length === 2 &&
11681 isCanonicalSignature(script.chunks[0]) &&
11682 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11683}
11684
ab78acc6
IC
11685function isPubKeyHashOutput (script) {
11686 return script.chunks.length === 5 &&
11687 script.chunks[0] === ops.OP_DUP &&
11688 script.chunks[1] === ops.OP_HASH160 &&
11689 Buffer.isBuffer(script.chunks[2]) &&
11690 script.chunks[2].length === 20 &&
11691 script.chunks[3] === ops.OP_EQUALVERIFY &&
11692 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11693}
11694
ab78acc6
IC
11695function isPubKeyInput (script) {
11696 return script.chunks.length === 1 &&
11697 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11698}
11699
ab78acc6
IC
11700function isPubKeyOutput (script) {
11701 return script.chunks.length === 2 &&
11702 isCanonicalPubKey(script.chunks[0]) &&
11703 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11704}
11705
ab78acc6
IC
11706function isScriptHashInput (script, allowIncomplete) {
11707 if (script.chunks.length < 2) return false
ebd8d4e8 11708
ab78acc6 11709 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11710 if (!Buffer.isBuffer(lastChunk)) return false
11711
ab78acc6
IC
11712 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11713 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11714
ab78acc6
IC
11715 // is redeemScript a valid script?
11716 if (redeemScript.chunks.length === 0) return false
11717
11718 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11719}
11720
ab78acc6
IC
11721function isScriptHashOutput (script) {
11722 return script.chunks.length === 3 &&
11723 script.chunks[0] === ops.OP_HASH160 &&
11724 Buffer.isBuffer(script.chunks[1]) &&
11725 script.chunks[1].length === 20 &&
11726 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11727}
11728
ab78acc6
IC
11729// allowIncomplete is to account for combining signatures
11730// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11731function isMultisigInput (script, allowIncomplete) {
11732 if (script.chunks.length < 2) return false
11733 if (script.chunks[0] !== ops.OP_0) return false
11734
11735 if (allowIncomplete) {
11736 return script.chunks.slice(1).every(function (chunk) {
11737 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11738 })
11739 }
11740
11741 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
11742}
11743
ab78acc6
IC
11744function isMultisigOutput (script) {
11745 if (script.chunks.length < 4) return false
11746 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 11747
ab78acc6
IC
11748 var mOp = script.chunks[0]
11749 if (mOp === ops.OP_0) return false
11750 if (mOp < ops.OP_1) return false
11751 if (mOp > ops.OP_16) return false
ebd8d4e8 11752
ab78acc6
IC
11753 var nOp = script.chunks[script.chunks.length - 2]
11754 if (nOp === ops.OP_0) return false
11755 if (nOp < ops.OP_1) return false
11756 if (nOp > ops.OP_16) return false
ebd8d4e8 11757
ab78acc6
IC
11758 var m = mOp - (ops.OP_1 - 1)
11759 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
11760 if (n < m) return false
11761
ab78acc6 11762 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
11763 if (n < pubKeys.length) return false
11764
11765 return pubKeys.every(isCanonicalPubKey)
11766}
11767
ab78acc6
IC
11768function isNullDataOutput (script) {
11769 return script.chunks[0] === ops.OP_RETURN
11770}
11771
11772function classifyOutput (script) {
11773 typeForce('Script', script)
11774
11775 if (isPubKeyHashOutput(script)) {
11776 return 'pubkeyhash'
11777 } else if (isScriptHashOutput(script)) {
11778 return 'scripthash'
11779 } else if (isMultisigOutput(script)) {
11780 return 'multisig'
11781 } else if (isPubKeyOutput(script)) {
11782 return 'pubkey'
11783 } else if (isNullDataOutput(script)) {
11784 return 'nulldata'
11785 }
11786
11787 return 'nonstandard'
11788}
11789
11790function classifyInput (script, allowIncomplete) {
11791 typeForce('Script', script)
11792
11793 if (isPubKeyHashInput(script)) {
11794 return 'pubkeyhash'
11795 } else if (isMultisigInput(script, allowIncomplete)) {
11796 return 'multisig'
11797 } else if (isScriptHashInput(script, allowIncomplete)) {
11798 return 'scripthash'
11799 } else if (isPubKeyInput(script)) {
11800 return 'pubkey'
11801 }
11802
11803 return 'nonstandard'
ebd8d4e8
IC
11804}
11805
11806// Standard Script Templates
11807// {pubKey} OP_CHECKSIG
ab78acc6 11808function pubKeyOutput (pubKey) {
ebd8d4e8
IC
11809 return Script.fromChunks([
11810 pubKey.toBuffer(),
ab78acc6 11811 ops.OP_CHECKSIG
ebd8d4e8
IC
11812 ])
11813}
11814
11815// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
11816function pubKeyHashOutput (hash) {
11817 typeForce('Buffer', hash)
ebd8d4e8
IC
11818
11819 return Script.fromChunks([
ab78acc6
IC
11820 ops.OP_DUP,
11821 ops.OP_HASH160,
ebd8d4e8 11822 hash,
ab78acc6
IC
11823 ops.OP_EQUALVERIFY,
11824 ops.OP_CHECKSIG
ebd8d4e8
IC
11825 ])
11826}
11827
11828// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
11829function scriptHashOutput (hash) {
11830 typeForce('Buffer', hash)
ebd8d4e8
IC
11831
11832 return Script.fromChunks([
ab78acc6 11833 ops.OP_HASH160,
ebd8d4e8 11834 hash,
ab78acc6 11835 ops.OP_EQUAL
ebd8d4e8
IC
11836 ])
11837}
11838
11839// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
11840function multisigOutput (m, pubKeys) {
11841 typeForce(['ECPubKey'], pubKeys)
11842
ebd8d4e8
IC
11843 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
11844
ab78acc6 11845 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
11846 return pubKey.toBuffer()
11847 })
11848 var n = pubKeys.length
11849
11850 return Script.fromChunks([].concat(
ab78acc6 11851 (ops.OP_1 - 1) + m,
ebd8d4e8 11852 pubKeyBuffers,
ab78acc6
IC
11853 (ops.OP_1 - 1) + n,
11854 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
11855 ))
11856}
11857
11858// {signature}
ab78acc6
IC
11859function pubKeyInput (signature) {
11860 typeForce('Buffer', signature)
ebd8d4e8
IC
11861
11862 return Script.fromChunks([signature])
11863}
11864
11865// {signature} {pubKey}
ab78acc6
IC
11866function pubKeyHashInput (signature, pubKey) {
11867 typeForce('Buffer', signature)
ebd8d4e8
IC
11868
11869 return Script.fromChunks([signature, pubKey.toBuffer()])
11870}
11871
11872// <scriptSig> {serialized scriptPubKey script}
ab78acc6 11873function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
11874 return Script.fromChunks([].concat(
11875 scriptSig.chunks,
11876 scriptPubKey.toBuffer()
11877 ))
11878}
11879
11880// OP_0 [signatures ...]
ab78acc6 11881function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 11882 if (scriptPubKey) {
ab78acc6
IC
11883 assert(isMultisigOutput(scriptPubKey))
11884
11885 var mOp = scriptPubKey.chunks[0]
11886 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
11887 var m = mOp - (ops.OP_1 - 1)
11888 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 11889
ab78acc6
IC
11890 assert(signatures.length >= m, 'Not enough signatures provided')
11891 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
11892 }
11893
ab78acc6
IC
11894 return Script.fromChunks([].concat(ops.OP_0, signatures))
11895}
11896
11897function nullDataOutput (data) {
11898 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
11899}
11900
11901module.exports = {
ab78acc6
IC
11902 isCanonicalPubKey: isCanonicalPubKey,
11903 isCanonicalSignature: isCanonicalSignature,
11904 isPubKeyHashInput: isPubKeyHashInput,
11905 isPubKeyHashOutput: isPubKeyHashOutput,
11906 isPubKeyInput: isPubKeyInput,
11907 isPubKeyOutput: isPubKeyOutput,
11908 isScriptHashInput: isScriptHashInput,
11909 isScriptHashOutput: isScriptHashOutput,
11910 isMultisigInput: isMultisigInput,
11911 isMultisigOutput: isMultisigOutput,
11912 isNullDataOutput: isNullDataOutput,
ebd8d4e8 11913 classifyOutput: classifyOutput,
ab78acc6
IC
11914 classifyInput: classifyInput,
11915 pubKeyOutput: pubKeyOutput,
ebd8d4e8 11916 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
11917 scriptHashOutput: scriptHashOutput,
11918 multisigOutput: multisigOutput,
ebd8d4e8 11919 pubKeyInput: pubKeyInput,
ab78acc6 11920 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 11921 scriptHashInput: scriptHashInput,
ab78acc6
IC
11922 multisigInput: multisigInput,
11923 dataOutput: function (data) {
11924 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
11925 return nullDataOutput(data)
11926 },
11927 nullDataOutput: nullDataOutput
ebd8d4e8
IC
11928}
11929
ab78acc6
IC
11930}).call(this,require("buffer").Buffer)
11931},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 11932(function (Buffer){
ab78acc6
IC
11933var assert = require('assert')
11934var bufferutils = require('./bufferutils')
11935var crypto = require('./crypto')
11936var typeForce = require('typeforce')
11937var opcodes = require('./opcodes')
11938var scripts = require('./scripts')
11939
11940var Address = require('./address')
11941var ECSignature = require('./ecsignature')
11942var Script = require('./script')
11943
11944function Transaction () {
11945 this.version = 1
11946 this.locktime = 0
11947 this.ins = []
11948 this.outs = []
11949}
ebd8d4e8
IC
11950
11951Transaction.DEFAULT_SEQUENCE = 0xffffffff
11952Transaction.SIGHASH_ALL = 0x01
11953Transaction.SIGHASH_NONE = 0x02
11954Transaction.SIGHASH_SINGLE = 0x03
11955Transaction.SIGHASH_ANYONECANPAY = 0x80
11956
ab78acc6
IC
11957Transaction.fromBuffer = function (buffer, __disableAssert) {
11958 var offset = 0
11959 function readSlice (n) {
11960 offset += n
11961 return buffer.slice(offset - n, offset)
11962 }
11963
11964 function readUInt32 () {
11965 var i = buffer.readUInt32LE(offset)
11966 offset += 4
11967 return i
11968 }
11969
11970 function readUInt64 () {
11971 var i = bufferutils.readUInt64LE(buffer, offset)
11972 offset += 8
11973 return i
11974 }
11975
11976 function readVarInt () {
11977 var vi = bufferutils.readVarInt(buffer, offset)
11978 offset += vi.size
11979 return vi.number
11980 }
11981
11982 function readScript () {
11983 return Script.fromBuffer(readSlice(readVarInt()))
11984 }
11985
11986 function readGenerationScript () {
11987 return new Script(readSlice(readVarInt()), [])
11988 }
11989
11990 var tx = new Transaction()
11991 tx.version = readUInt32()
11992
11993 var vinLen = readVarInt()
11994 for (var i = 0; i < vinLen; ++i) {
11995 var hash = readSlice(32)
11996
11997 if (Transaction.isCoinbaseHash(hash)) {
11998 tx.ins.push({
11999 hash: hash,
12000 index: readUInt32(),
12001 script: readGenerationScript(),
12002 sequence: readUInt32()
12003 })
12004 } else {
12005 tx.ins.push({
12006 hash: hash,
12007 index: readUInt32(),
12008 script: readScript(),
12009 sequence: readUInt32()
12010 })
12011 }
12012 }
12013
12014 var voutLen = readVarInt()
12015 for (i = 0; i < voutLen; ++i) {
12016 tx.outs.push({
12017 value: readUInt64(),
12018 script: readScript()
12019 })
12020 }
12021
12022 tx.locktime = readUInt32()
12023
12024 if (!__disableAssert) {
12025 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12026 }
12027
12028 return tx
12029}
12030
12031Transaction.fromHex = function (hex) {
12032 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12033}
12034
12035Transaction.isCoinbaseHash = function (buffer) {
12036 return Array.prototype.every.call(buffer, function (x) {
12037 return x === 0
12038 })
ebd8d4e8
IC
12039}
12040
12041/**
ab78acc6 12042 * Create a new txIn.
ebd8d4e8
IC
12043 *
12044 * Can be called with any of:
12045 *
12046 * - A transaction and an index
12047 * - A transaction hash and an index
12048 *
12049 * Note that this method does not sign the created input.
12050 */
ab78acc6
IC
12051Transaction.prototype.addInput = function (hash, index, sequence, script) {
12052 if (sequence === undefined || sequence === null) {
12053 sequence = Transaction.DEFAULT_SEQUENCE
12054 }
ebd8d4e8 12055
ab78acc6 12056 script = script || Script.EMPTY
ebd8d4e8 12057
ab78acc6 12058 if (typeof hash === 'string') {
ebd8d4e8 12059 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12060 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12061 } else if (hash instanceof Transaction) {
12062 hash = hash.getHash()
ebd8d4e8
IC
12063 }
12064
ab78acc6
IC
12065 typeForce('Buffer', hash)
12066 typeForce('Number', index)
12067 typeForce('Number', sequence)
12068 typeForce('Script', script)
12069
ebd8d4e8 12070 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12071
ab78acc6 12072 // Add the input and return the input's index
ebd8d4e8
IC
12073 return (this.ins.push({
12074 hash: hash,
12075 index: index,
ab78acc6 12076 script: script,
ebd8d4e8
IC
12077 sequence: sequence
12078 }) - 1)
12079}
12080
12081/**
ab78acc6 12082 * Create a new txOut.
ebd8d4e8
IC
12083 *
12084 * Can be called with:
12085 *
12086 * - A base58 address string and a value
12087 * - An Address object and a value
12088 * - A scriptPubKey Script and a value
12089 */
ab78acc6 12090Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12091 // Attempt to get a valid address if it's a base58 address string
12092 if (typeof scriptPubKey === 'string') {
12093 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12094 }
12095
12096 // Attempt to get a valid script if it's an Address object
12097 if (scriptPubKey instanceof Address) {
ab78acc6 12098 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12099 }
12100
ab78acc6
IC
12101 typeForce('Script', scriptPubKey)
12102 typeForce('Number', value)
12103
12104 // Add the output and return the output's index
ebd8d4e8
IC
12105 return (this.outs.push({
12106 script: scriptPubKey,
ab78acc6 12107 value: value
ebd8d4e8
IC
12108 }) - 1)
12109}
12110
ab78acc6
IC
12111Transaction.prototype.clone = function () {
12112 var newTx = new Transaction()
12113 newTx.version = this.version
12114 newTx.locktime = this.locktime
12115
12116 newTx.ins = this.ins.map(function (txIn) {
12117 return {
12118 hash: txIn.hash,
12119 index: txIn.index,
12120 script: txIn.script,
12121 sequence: txIn.sequence
12122 }
12123 })
12124
12125 newTx.outs = this.outs.map(function (txOut) {
12126 return {
12127 script: txOut.script,
12128 value: txOut.value
12129 }
12130 })
12131
12132 return newTx
12133}
12134
12135/**
12136 * Hash transaction for signing a specific input.
12137 *
12138 * Bitcoin uses a different hash for each signed transaction input. This
12139 * method copies the transaction, makes the necessary changes based on the
12140 * hashType, serializes and finally hashes the result. This hash can then be
12141 * used to sign the transaction input in question.
12142 */
12143Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12144 // FIXME: remove in 2.x.y
12145 if (arguments[0] instanceof Script) {
12146 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12147
12148 // swap the arguments (must be stored in tmp, arguments is special)
12149 var tmp = arguments[0]
12150 inIndex = arguments[1]
12151 prevOutScript = tmp
12152 }
12153
12154 typeForce('Number', inIndex)
12155 typeForce('Script', prevOutScript)
12156 typeForce('Number', hashType)
12157
12158 assert(inIndex >= 0, 'Invalid vin index')
12159 assert(inIndex < this.ins.length, 'Invalid vin index')
12160
12161 var txTmp = this.clone()
12162 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12163
12164 // Blank out other inputs' signatures
12165 txTmp.ins.forEach(function (txIn) {
12166 txIn.script = Script.EMPTY
12167 })
12168 txTmp.ins[inIndex].script = hashScript
12169
12170 var hashTypeModifier = hashType & 0x1f
12171
12172 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12173 assert(false, 'SIGHASH_NONE not yet supported')
12174 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12175 assert(false, 'SIGHASH_SINGLE not yet supported')
12176 }
12177
12178 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12179 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12180 }
12181
12182 var hashTypeBuffer = new Buffer(4)
12183 hashTypeBuffer.writeInt32LE(hashType, 0)
12184
12185 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12186 return crypto.hash256(buffer)
12187}
12188
12189Transaction.prototype.getHash = function () {
12190 return crypto.hash256(this.toBuffer())
12191}
12192
12193Transaction.prototype.getId = function () {
12194 // TxHash is little-endian, we need big-endian
12195 return bufferutils.reverse(this.getHash()).toString('hex')
12196}
12197
ebd8d4e8 12198Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12199 function scriptSize (script) {
12200 var length = script.buffer.length
ebd8d4e8 12201
ab78acc6
IC
12202 return bufferutils.varIntSize(length) + length
12203 }
ebd8d4e8
IC
12204
12205 var buffer = new Buffer(
12206 8 +
12207 bufferutils.varIntSize(this.ins.length) +
12208 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12209 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12210 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12211 )
12212
12213 var offset = 0
ab78acc6 12214 function writeSlice (slice) {
ebd8d4e8
IC
12215 slice.copy(buffer, offset)
12216 offset += slice.length
12217 }
ab78acc6
IC
12218
12219 function writeUInt32 (i) {
ebd8d4e8
IC
12220 buffer.writeUInt32LE(i, offset)
12221 offset += 4
12222 }
ab78acc6
IC
12223
12224 function writeUInt64 (i) {
ebd8d4e8
IC
12225 bufferutils.writeUInt64LE(buffer, i, offset)
12226 offset += 8
12227 }
ab78acc6
IC
12228
12229 function writeVarInt (i) {
ebd8d4e8
IC
12230 var n = bufferutils.writeVarInt(buffer, i, offset)
12231 offset += n
12232 }
12233
12234 writeUInt32(this.version)
12235 writeVarInt(this.ins.length)
12236
ab78acc6
IC
12237 this.ins.forEach(function (txIn) {
12238 writeSlice(txIn.hash)
12239 writeUInt32(txIn.index)
12240 writeVarInt(txIn.script.buffer.length)
12241 writeSlice(txIn.script.buffer)
12242 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12243 })
12244
12245 writeVarInt(this.outs.length)
ab78acc6
IC
12246 this.outs.forEach(function (txOut) {
12247 writeUInt64(txOut.value)
12248 writeVarInt(txOut.script.buffer.length)
12249 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12250 })
12251
12252 writeUInt32(this.locktime)
12253
12254 return buffer
12255}
12256
ab78acc6 12257Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12258 return this.toBuffer().toString('hex')
12259}
12260
ab78acc6
IC
12261Transaction.prototype.setInputScript = function (index, script) {
12262 typeForce('Number', index)
12263 typeForce('Script', script)
12264
12265 this.ins[index].script = script
12266}
12267
12268// FIXME: remove in 2.x.y
12269Transaction.prototype.sign = function (index, privKey, hashType) {
12270 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12271
12272 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12273 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12274
12275 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12276 this.setInputScript(index, scriptSig)
12277}
12278
12279// FIXME: remove in 2.x.y
12280Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12281 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12282
12283 hashType = hashType || Transaction.SIGHASH_ALL
12284
12285 var hash = this.hashForSignature(index, prevOutScript, hashType)
12286 var signature = privKey.sign(hash)
12287
12288 return signature.toScriptSignature(hashType)
12289}
12290
12291// FIXME: remove in 2.x.y
12292Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12293 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12294
12295 var parsed = ECSignature.parseScriptSignature(buffer)
12296 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12297
12298 return pubKey.verify(hash, parsed.signature)
12299}
12300
12301module.exports = Transaction
12302
12303}).call(this,require("buffer").Buffer)
12304},{"./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){
12305(function (Buffer){
12306var assert = require('assert')
12307var ops = require('./opcodes')
12308var scripts = require('./scripts')
12309
12310var ECPubKey = require('./ecpubkey')
12311var ECSignature = require('./ecsignature')
12312var Script = require('./script')
12313var Transaction = require('./transaction')
12314
12315function extractInput (txIn) {
12316 var redeemScript
12317 var scriptSig = txIn.script
12318 var prevOutScript
12319 var prevOutType = scripts.classifyInput(scriptSig, true)
12320 var scriptType
12321
12322 // Re-classify if scriptHash
12323 if (prevOutType === 'scripthash') {
12324 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12325 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12326
12327 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12328 scriptType = scripts.classifyInput(scriptSig, true)
12329 } else {
12330 scriptType = prevOutType
12331 }
12332
12333 // Extract hashType, pubKeys and signatures
12334 var hashType, parsed, pubKeys, signatures
12335
12336 switch (scriptType) {
12337 case 'pubkeyhash': {
12338 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12339 hashType = parsed.hashType
12340 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12341 signatures = [parsed.signature]
12342 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12343
12344 break
12345 }
12346
12347 case 'pubkey': {
12348 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12349 hashType = parsed.hashType
12350 signatures = [parsed.signature]
12351
12352 if (redeemScript) {
12353 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12354 }
12355
12356 break
12357 }
12358
12359 case 'multisig': {
12360 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12361 if (chunk === ops.OP_0) return chunk
12362
12363 var parsed = ECSignature.parseScriptSignature(chunk)
12364 hashType = parsed.hashType
12365
12366 return parsed.signature
12367 })
12368
12369 if (redeemScript) {
12370 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12371 }
12372
12373 break
12374 }
12375 }
12376
12377 return {
12378 hashType: hashType,
12379 prevOutScript: prevOutScript,
12380 prevOutType: prevOutType,
12381 pubKeys: pubKeys,
12382 redeemScript: redeemScript,
12383 scriptType: scriptType,
12384 signatures: signatures
12385 }
12386}
12387
12388function TransactionBuilder () {
12389 this.prevTxMap = {}
12390 this.prevOutScripts = {}
12391 this.prevOutTypes = {}
12392
12393 this.inputs = []
12394 this.tx = new Transaction()
12395}
12396
12397TransactionBuilder.fromTransaction = function (transaction) {
12398 var txb = new TransactionBuilder()
12399
12400 // Copy other transaction fields
12401 txb.tx.version = transaction.version
12402 txb.tx.locktime = transaction.locktime
12403
12404 // Extract/add inputs
12405 transaction.ins.forEach(function (txIn) {
12406 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12407 })
12408
12409 // Extract/add outputs
12410 transaction.outs.forEach(function (txOut) {
12411 txb.addOutput(txOut.script, txOut.value)
12412 })
12413
12414 // Extract/add signatures
12415 txb.inputs = transaction.ins.map(function (txIn) {
12416 // TODO: remove me after testcase added
12417 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12418
12419 // Ignore empty scripts
12420 if (txIn.script.buffer.length === 0) return {}
12421
12422 return extractInput(txIn)
12423 })
12424
12425 return txb
12426}
12427
12428TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12429 var prevOutHash
12430
12431 // txId
12432 if (typeof prevTx === 'string') {
12433 prevOutHash = new Buffer(prevTx, 'hex')
12434
12435 // TxId hex is big-endian, we want little-endian hash
12436 Array.prototype.reverse.call(prevOutHash)
12437
12438 // Transaction
12439 } else if (prevTx instanceof Transaction) {
12440 prevOutHash = prevTx.getHash()
12441 prevOutScript = prevTx.outs[index].script
12442
12443 // txHash
12444 } else {
12445 prevOutHash = prevTx
12446 }
12447
12448 var input = {}
12449 if (prevOutScript) {
12450 var prevOutType = scripts.classifyOutput(prevOutScript)
12451
12452 // if we can, extract pubKey information
12453 switch (prevOutType) {
12454 case 'multisig': {
12455 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12456 break
12457 }
12458
12459 case 'pubkey': {
12460 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12461 break
12462 }
12463 }
12464
12465 if (prevOutType !== 'scripthash') {
12466 input.scriptType = prevOutType
12467 }
12468
12469 input.prevOutScript = prevOutScript
12470 input.prevOutType = prevOutType
12471 }
12472
12473 assert(this.inputs.every(function (input2) {
12474 if (input2.hashType === undefined) return true
12475
12476 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12477 }), 'No, this would invalidate signatures')
12478
12479 var prevOut = prevOutHash.toString('hex') + ':' + index
12480 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12481
12482 var vin = this.tx.addInput(prevOutHash, index, sequence)
12483 this.inputs[vin] = input
12484 this.prevTxMap[prevOut] = vin
12485
12486 return vin
12487}
12488
12489TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12490 assert(this.inputs.every(function (input) {
12491 if (input.hashType === undefined) return true
ebd8d4e8 12492
ab78acc6
IC
12493 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12494 }), 'No, this would invalidate signatures')
ebd8d4e8 12495
ab78acc6
IC
12496 return this.tx.addOutput(scriptPubKey, value)
12497}
ebd8d4e8 12498
ab78acc6
IC
12499TransactionBuilder.prototype.build = function () {
12500 return this.__build(false)
12501}
12502TransactionBuilder.prototype.buildIncomplete = function () {
12503 return this.__build(true)
12504}
ebd8d4e8 12505
ab78acc6
IC
12506var canSignTypes = {
12507 'pubkeyhash': true,
12508 'multisig': true,
12509 'pubkey': true
12510}
ebd8d4e8 12511
ab78acc6
IC
12512TransactionBuilder.prototype.__build = function (allowIncomplete) {
12513 if (!allowIncomplete) {
12514 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12515 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12516 }
12517
ab78acc6 12518 var tx = this.tx.clone()
ebd8d4e8 12519
ab78acc6
IC
12520 // Create script signatures from signature meta-data
12521 this.inputs.forEach(function (input, index) {
12522 var scriptType = input.scriptType
12523 var scriptSig
ebd8d4e8 12524
ab78acc6
IC
12525 if (!allowIncomplete) {
12526 assert(!!scriptType, 'Transaction is not complete')
12527 assert(scriptType in canSignTypes, scriptType + ' not supported')
12528 assert(input.signatures, 'Transaction is missing signatures')
12529 }
ebd8d4e8 12530
ab78acc6
IC
12531 if (input.signatures) {
12532 switch (scriptType) {
12533 case 'pubkeyhash': {
12534 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12535 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12536 break
12537 }
ebd8d4e8 12538
ab78acc6
IC
12539 case 'multisig': {
12540 // Array.prototype.map is sparse-compatible
12541 var msSignatures = input.signatures.map(function (signature) {
12542 return signature && signature.toScriptSignature(input.hashType)
12543 })
ebd8d4e8 12544
ab78acc6
IC
12545 // fill in blanks with OP_0
12546 if (allowIncomplete) {
12547 for (var i = 0; i < msSignatures.length; ++i) {
12548 if (msSignatures[i]) continue
ebd8d4e8 12549
ab78acc6
IC
12550 msSignatures[i] = ops.OP_0
12551 }
12552 } else {
12553 // Array.prototype.filter returns non-sparse array
12554 msSignatures = msSignatures.filter(function (x) { return x })
12555 }
ebd8d4e8 12556
ab78acc6
IC
12557 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12558 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12559 break
12560 }
ebd8d4e8 12561
ab78acc6
IC
12562 case 'pubkey': {
12563 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12564 scriptSig = scripts.pubKeyInput(pkSignature)
12565 break
12566 }
12567 }
ebd8d4e8 12568 }
ebd8d4e8 12569
ab78acc6
IC
12570 // did we build a scriptSig?
12571 if (scriptSig) {
12572 // wrap as scriptHash if necessary
12573 if (input.prevOutType === 'scripthash') {
12574 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12575 }
12576
12577 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12578 }
12579 })
12580
ab78acc6 12581 return tx
ebd8d4e8
IC
12582}
12583
ab78acc6
IC
12584TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12585 assert(index in this.inputs, 'No input at index: ' + index)
12586 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12587
ab78acc6
IC
12588 var input = this.inputs[index]
12589 var canSign = input.hashType &&
12590 input.prevOutScript &&
12591 input.prevOutType &&
12592 input.pubKeys &&
12593 input.scriptType &&
12594 input.signatures
ebd8d4e8 12595
ab78acc6
IC
12596 // are we almost ready to sign?
12597 if (canSign) {
12598 // if redeemScript was provided, enforce consistency
12599 if (redeemScript) {
12600 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12601 }
ebd8d4e8 12602
ab78acc6 12603 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12604
ab78acc6
IC
12605 // no? prepare
12606 } else {
12607 // must be pay-to-scriptHash?
12608 if (redeemScript) {
12609 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12610 if (input.prevOutScript) {
12611 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12612
12613 var scriptHash = input.prevOutScript.chunks[1]
12614 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12615 }
ebd8d4e8 12616
ab78acc6
IC
12617 var scriptType = scripts.classifyOutput(redeemScript)
12618 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12619
ab78acc6
IC
12620 var pubKeys = []
12621 switch (scriptType) {
12622 case 'multisig': {
12623 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12624 break
12625 }
ebd8d4e8 12626
ab78acc6
IC
12627 case 'pubkeyhash': {
12628 var pkh1 = redeemScript.chunks[2]
12629 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12630
ab78acc6
IC
12631 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12632 pubKeys = [privKey.pub]
12633 break
12634 }
ebd8d4e8 12635
ab78acc6
IC
12636 case 'pubkey': {
12637 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12638 break
12639 }
12640 }
ebd8d4e8 12641
ab78acc6
IC
12642 if (!input.prevOutScript) {
12643 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12644 input.prevOutType = 'scripthash'
12645 }
ebd8d4e8 12646
ab78acc6
IC
12647 input.pubKeys = pubKeys
12648 input.redeemScript = redeemScript
12649 input.scriptType = scriptType
ebd8d4e8 12650
ab78acc6
IC
12651 // cannot be pay-to-scriptHash
12652 } else {
12653 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12654
ab78acc6
IC
12655 // can we otherwise sign this?
12656 if (input.scriptType) {
12657 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12658
ab78acc6
IC
12659 // we know nothin' Jon Snow, assume pubKeyHash
12660 } else {
12661 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12662 input.prevOutType = 'pubkeyhash'
12663 input.pubKeys = [privKey.pub]
12664 input.scriptType = input.prevOutType
12665 }
12666 }
ebd8d4e8 12667
ab78acc6
IC
12668 input.hashType = hashType
12669 input.signatures = input.signatures || []
12670 }
12671
12672 var signatureScript = input.redeemScript || input.prevOutScript
12673 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12674
12675 // enforce signature order matches public keys
12676 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12677 // maintain a local copy of unmatched signatures
12678 var unmatched = input.signatures.slice()
12679
12680 input.signatures = input.pubKeys.map(function (pubKey) {
12681 var match
12682
12683 // check for any matching signatures
12684 unmatched.some(function (signature, i) {
12685 if (!pubKey.verify(signatureHash, signature)) return false
12686 match = signature
12687
12688 // remove matched signature from unmatched
12689 unmatched.splice(i, 1)
12690
12691 return true
12692 })
12693
12694 return match || undefined
12695 })
12696 }
12697
12698 // enforce in order signing of public keys
12699 assert(input.pubKeys.some(function (pubKey, i) {
12700 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12701
12702 assert(!input.signatures[i], 'Signature already exists')
12703 var signature = privKey.sign(signatureHash)
12704 input.signatures[i] = signature
12705
12706 return true
12707 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12708}
12709
ab78acc6 12710module.exports = TransactionBuilder
ebd8d4e8 12711
ab78acc6
IC
12712}).call(this,require("buffer").Buffer)
12713},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12714(function (Buffer){
ab78acc6
IC
12715var assert = require('assert')
12716var bufferutils = require('./bufferutils')
12717var typeForce = require('typeforce')
12718var networks = require('./networks')
12719var randomBytes = require('randombytes')
ebd8d4e8 12720
ab78acc6
IC
12721var Address = require('./address')
12722var HDNode = require('./hdnode')
12723var TransactionBuilder = require('./transaction_builder')
12724var Script = require('./script')
ebd8d4e8 12725
ab78acc6
IC
12726function Wallet (seed, network) {
12727 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12728
12729 seed = seed || randomBytes(32)
ebd8d4e8
IC
12730 network = network || networks.bitcoin
12731
12732 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12733 var masterKey = HDNode.fromSeedBuffer(seed, network)
12734
12735 // HD first-level child derivation method should be hardened
12736 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12737 var accountZero = masterKey.deriveHardened(0)
12738 var externalAccount = accountZero.derive(0)
12739 var internalAccount = accountZero.derive(1)
ebd8d4e8 12740
ebd8d4e8
IC
12741 this.addresses = []
12742 this.changeAddresses = []
ab78acc6
IC
12743 this.network = network
12744 this.unspents = []
ebd8d4e8 12745
ab78acc6
IC
12746 // FIXME: remove in 2.0.0
12747 this.unspentMap = {}
ebd8d4e8 12748
ab78acc6
IC
12749 // FIXME: remove in 2.0.0
12750 var me = this
12751 this.newMasterKey = function (seed) {
12752 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12753
12754 seed = seed || randomBytes(32)
12755 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 12756
ab78acc6 12757 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
12758 externalAccount = accountZero.derive(0)
12759 internalAccount = accountZero.derive(1)
12760
12761 me.addresses = []
12762 me.changeAddresses = []
12763
ab78acc6
IC
12764 me.unspents = []
12765 me.unspentMap = {}
ebd8d4e8
IC
12766 }
12767
ab78acc6
IC
12768 this.getMasterKey = function () {
12769 return masterKey
ebd8d4e8 12770 }
ab78acc6
IC
12771 this.getAccountZero = function () {
12772 return accountZero
ebd8d4e8 12773 }
ab78acc6
IC
12774 this.getExternalAccount = function () {
12775 return externalAccount
12776 }
12777 this.getInternalAccount = function () {
12778 return internalAccount
ebd8d4e8 12779 }
ab78acc6 12780}
ebd8d4e8 12781
ab78acc6
IC
12782Wallet.prototype.createTransaction = function (to, value, options) {
12783 // FIXME: remove in 2.0.0
12784 if (typeof options !== 'object') {
12785 if (options !== undefined) {
12786 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 12787
ab78acc6
IC
12788 options = {
12789 fixedFee: arguments[2],
12790 changeAddress: arguments[3]
12791 }
ebd8d4e8 12792 }
ebd8d4e8
IC
12793 }
12794
ab78acc6 12795 options = options || {}
ebd8d4e8 12796
ab78acc6 12797 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 12798
ab78acc6
IC
12799 var changeAddress = options.changeAddress
12800 var fixedFee = options.fixedFee
12801 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 12802
ab78acc6
IC
12803 // filter by minConf, then pending and sort by descending value
12804 var unspents = this.unspents.filter(function (unspent) {
12805 return unspent.confirmations >= minConf
12806 }).filter(function (unspent) {
12807 return !unspent.pending
12808 }).sort(function (o1, o2) {
12809 return o2.value - o1.value
12810 })
ebd8d4e8 12811
ab78acc6
IC
12812 var accum = 0
12813 var addresses = []
12814 var subTotal = value
ebd8d4e8 12815
ab78acc6
IC
12816 var txb = new TransactionBuilder()
12817 txb.addOutput(to, value)
ebd8d4e8 12818
ab78acc6
IC
12819 for (var i = 0; i < unspents.length; ++i) {
12820 var unspent = unspents[i]
12821 addresses.push(unspent.address)
ebd8d4e8 12822
ab78acc6
IC
12823 txb.addInput(unspent.txHash, unspent.index)
12824
12825 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 12826
ab78acc6
IC
12827 accum += unspent.value
12828 subTotal = value + fee
12829
12830 if (accum >= subTotal) {
12831 var change = accum - subTotal
12832
12833 if (change > this.network.dustThreshold) {
12834 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 12835 }
ebd8d4e8 12836
ab78acc6 12837 break
ebd8d4e8
IC
12838 }
12839 }
12840
ab78acc6 12841 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 12842
ab78acc6
IC
12843 return this.signWith(txb, addresses).build()
12844}
ebd8d4e8 12845
ab78acc6
IC
12846// FIXME: remove in 2.0.0
12847Wallet.prototype.processPendingTx = function (tx) {
12848 this.__processTx(tx, true)
12849}
ebd8d4e8 12850
ab78acc6
IC
12851// FIXME: remove in 2.0.0
12852Wallet.prototype.processConfirmedTx = function (tx) {
12853 this.__processTx(tx, false)
12854}
ebd8d4e8 12855
ab78acc6
IC
12856// FIXME: remove in 2.0.0
12857Wallet.prototype.__processTx = function (tx, isPending) {
12858 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 12859
ab78acc6
IC
12860 var txId = tx.getId()
12861 var txHash = tx.getHash()
ebd8d4e8 12862
ab78acc6
IC
12863 tx.outs.forEach(function (txOut, i) {
12864 var address
ebd8d4e8 12865
ab78acc6
IC
12866 try {
12867 address = Address.fromOutputScript(txOut.script, this.network).toString()
12868 } catch (e) {
12869 if (!(e.message.match(/has no matching Address/)))
12870 throw e
12871 }
12872
12873 var myAddresses = this.addresses.concat(this.changeAddresses)
12874 if (myAddresses.indexOf(address) > -1) {
12875 var lookup = txId + ':' + i
12876 if (lookup in this.unspentMap) return
12877
12878 // its unique, add it
12879 var unspent = {
12880 address: address,
12881 confirmations: 0, // no way to determine this without more information
12882 index: i,
12883 txHash: txHash,
12884 txId: txId,
12885 value: txOut.value,
12886 pending: isPending
ebd8d4e8 12887 }
ebd8d4e8 12888
ab78acc6
IC
12889 this.unspentMap[lookup] = unspent
12890 this.unspents.push(unspent)
12891 }
12892 }, this)
ebd8d4e8 12893
ab78acc6
IC
12894 tx.ins.forEach(function (txIn) {
12895 // copy and convert to big-endian hex
12896 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 12897
ab78acc6
IC
12898 var lookup = txInId + ':' + txIn.index
12899 if (!(lookup in this.unspentMap)) return
ebd8d4e8 12900
ab78acc6 12901 var unspent = this.unspentMap[lookup]
ebd8d4e8 12902
ab78acc6
IC
12903 if (isPending) {
12904 unspent.pending = true
12905 unspent.spent = true
12906 } else {
12907 delete this.unspentMap[lookup]
ebd8d4e8 12908
ab78acc6
IC
12909 this.unspents = this.unspents.filter(function (unspent2) {
12910 return unspent !== unspent2
12911 })
12912 }
12913 }, this)
12914}
ebd8d4e8 12915
ab78acc6
IC
12916Wallet.prototype.generateAddress = function () {
12917 var k = this.addresses.length
12918 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 12919
ab78acc6 12920 this.addresses.push(address.toString())
ebd8d4e8 12921
ab78acc6
IC
12922 return this.getReceiveAddress()
12923}
ebd8d4e8 12924
ab78acc6
IC
12925Wallet.prototype.generateChangeAddress = function () {
12926 var k = this.changeAddresses.length
12927 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 12928
ab78acc6 12929 this.changeAddresses.push(address.toString())
ebd8d4e8 12930
ab78acc6
IC
12931 return this.getChangeAddress()
12932}
ebd8d4e8 12933
ab78acc6
IC
12934Wallet.prototype.getAddress = function () {
12935 if (this.addresses.length === 0) {
12936 this.generateAddress()
ebd8d4e8
IC
12937 }
12938
ab78acc6
IC
12939 return this.addresses[this.addresses.length - 1]
12940}
ebd8d4e8 12941
ab78acc6
IC
12942Wallet.prototype.getBalance = function (minConf) {
12943 minConf = minConf || 0
ebd8d4e8 12944
ab78acc6
IC
12945 return this.unspents.filter(function (unspent) {
12946 return unspent.confirmations >= minConf
12947
12948 // FIXME: remove spent filter in 2.0.0
12949 }).filter(function (unspent) {
12950 return !unspent.spent
12951 }).reduce(function (accum, unspent) {
12952 return accum + unspent.value
12953 }, 0)
12954}
ebd8d4e8 12955
ab78acc6
IC
12956Wallet.prototype.getChangeAddress = function () {
12957 if (this.changeAddresses.length === 0) {
12958 this.generateChangeAddress()
ebd8d4e8
IC
12959 }
12960
ab78acc6
IC
12961 return this.changeAddresses[this.changeAddresses.length - 1]
12962}
12963
12964Wallet.prototype.getInternalPrivateKey = function (index) {
12965 return this.getInternalAccount().derive(index).privKey
12966}
12967
12968Wallet.prototype.getPrivateKey = function (index) {
12969 return this.getExternalAccount().derive(index).privKey
12970}
12971
12972Wallet.prototype.getPrivateKeyForAddress = function (address) {
12973 var index
ebd8d4e8 12974
ab78acc6
IC
12975 if ((index = this.addresses.indexOf(address)) > -1) {
12976 return this.getPrivateKey(index)
ebd8d4e8
IC
12977 }
12978
ab78acc6
IC
12979 if ((index = this.changeAddresses.indexOf(address)) > -1) {
12980 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
12981 }
12982
ab78acc6
IC
12983 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12984}
ebd8d4e8 12985
ab78acc6
IC
12986Wallet.prototype.getUnspentOutputs = function (minConf) {
12987 minConf = minConf || 0
ebd8d4e8 12988
ab78acc6
IC
12989 return this.unspents.filter(function (unspent) {
12990 return unspent.confirmations >= minConf
ebd8d4e8 12991
ab78acc6
IC
12992 // FIXME: remove spent filter in 2.0.0
12993 }).filter(function (unspent) {
12994 return !unspent.spent
12995 }).map(function (unspent) {
12996 return {
12997 address: unspent.address,
12998 confirmations: unspent.confirmations,
12999 index: unspent.index,
13000 txId: unspent.txId,
13001 value: unspent.value,
13002
13003 // FIXME: remove in 2.0.0
13004 hash: unspent.txId,
13005 pending: unspent.pending
13006 }
13007 })
13008}
ebd8d4e8 13009
ab78acc6
IC
13010Wallet.prototype.setUnspentOutputs = function (unspents) {
13011 this.unspentMap = {}
13012 this.unspents = unspents.map(function (unspent) {
13013 // FIXME: remove unspent.hash in 2.0.0
13014 var txId = unspent.txId || unspent.hash
13015 var index = unspent.index
ebd8d4e8 13016
ab78acc6
IC
13017 // FIXME: remove in 2.0.0
13018 if (unspent.hash !== undefined) {
13019 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13020 }
ebd8d4e8 13021
ab78acc6
IC
13022 // FIXME: remove in 2.0.0
13023 if (index === undefined) {
13024 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13025 index = unspent.outputIndex
13026 }
ebd8d4e8 13027
ab78acc6
IC
13028 typeForce('String', txId)
13029 typeForce('Number', index)
13030 typeForce('Number', unspent.value)
13031
13032 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13033 assert.doesNotThrow(function () {
13034 Address.fromBase58Check(unspent.address)
13035 }, 'Expected Base58 Address, got ' + unspent.address)
13036 assert(isFinite(index), 'Expected finite index, got ' + index)
13037
13038 // FIXME: remove branch in 2.0.0
13039 if (unspent.confirmations !== undefined) {
13040 typeForce('Number', unspent.confirmations)
ebd8d4e8 13041 }
ebd8d4e8 13042
ab78acc6 13043 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13044
ab78acc6
IC
13045 unspent = {
13046 address: unspent.address,
13047 confirmations: unspent.confirmations || 0,
13048 index: index,
13049 txHash: txHash,
13050 txId: txId,
13051 value: unspent.value,
ebd8d4e8 13052
ab78acc6
IC
13053 // FIXME: remove in 2.0.0
13054 pending: unspent.pending || false
13055 }
13056
13057 // FIXME: remove in 2.0.0
13058 this.unspentMap[txId + ':' + index] = unspent
13059
13060 return unspent
13061 }, this)
13062}
13063
13064Wallet.prototype.signWith = function (tx, addresses) {
13065 addresses.forEach(function (address, i) {
13066 var privKey = this.getPrivateKeyForAddress(address)
13067
13068 tx.sign(i, privKey)
13069 }, this)
13070
13071 return tx
13072}
13073
13074function estimatePaddedFee (tx, network) {
13075 var tmpTx = tx.clone()
13076 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13077
13078 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13079}
13080
ab78acc6
IC
13081// FIXME: 1.0.0 shims, remove in 2.0.0
13082Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13083Wallet.prototype.createTx = Wallet.prototype.createTransaction
13084
ebd8d4e8
IC
13085module.exports = Wallet
13086
ab78acc6
IC
13087}).call(this,require("buffer").Buffer)
13088},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13089});</script>
13090 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13091
13092//// base.js
13093
13094/** @fileOverview Javascript cryptography implementation.
13095 *
13096 * Crush to remove comments, shorten variable names and
13097 * generally reduce transmission size.
13098 *
13099 * @author Emily Stark
13100 * @author Mike Hamburg
13101 * @author Dan Boneh
13102 */
13103
13104"use strict";
13105/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13106/*global document, window, escape, unescape, module, require, Uint32Array */
13107
13108/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13109var sjcl = {
13110 /** @namespace Symmetric ciphers. */
13111 cipher: {},
13112
13113 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13114 hash: {},
13115
13116 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13117 keyexchange: {},
13118
13119 /** @namespace Block cipher modes of operation. */
13120 mode: {},
13121
13122 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13123 misc: {},
13124
13125 /**
13126 * @namespace Bit array encoders and decoders.
13127 *
13128 * @description
13129 * The members of this namespace are functions which translate between
13130 * SJCL's bitArrays and other objects (usually strings). Because it
13131 * isn't always clear which direction is encoding and which is decoding,
13132 * the method names are "fromBits" and "toBits".
13133 */
13134 codec: {},
13135
13136 /** @namespace Exceptions. */
13137 exception: {
13138 /** @constructor Ciphertext is corrupt. */
13139 corrupt: function(message) {
13140 this.toString = function() { return "CORRUPT: "+this.message; };
13141 this.message = message;
13142 },
13143
13144 /** @constructor Invalid parameter. */
13145 invalid: function(message) {
13146 this.toString = function() { return "INVALID: "+this.message; };
13147 this.message = message;
13148 },
13149
13150 /** @constructor Bug or missing feature in SJCL. @constructor */
13151 bug: function(message) {
13152 this.toString = function() { return "BUG: "+this.message; };
13153 this.message = message;
13154 },
13155
13156 /** @constructor Something isn't ready. */
13157 notReady: function(message) {
13158 this.toString = function() { return "NOT READY: "+this.message; };
13159 this.message = message;
ebd8d4e8 13160 }
80c4dd2a
IC
13161 }
13162};
13163
13164if(typeof module !== 'undefined' && module.exports){
13165 module.exports = sjcl;
13166}
13167if (typeof define === "function") {
13168 define([], function () {
13169 return sjcl;
13170 });
13171}
13172
13173
13174//// bitArray.js
13175
13176/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13177 *
13178 * @author Emily Stark
13179 * @author Mike Hamburg
13180 * @author Dan Boneh
13181 */
13182
13183/** @namespace Arrays of bits, encoded as arrays of Numbers.
13184 *
13185 * @description
13186 * <p>
13187 * These objects are the currency accepted by SJCL's crypto functions.
13188 * </p>
13189 *
13190 * <p>
13191 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13192 * but many of them can take arguments that are not a multiple of 4 bytes.
13193 * This library encodes arrays of bits (whose size need not be a multiple of 8
13194 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13195 * array of words, 32 bits at a time. Since the words are double-precision
13196 * floating point numbers, they fit some extra data. We use this (in a private,
13197 * possibly-changing manner) to encode the number of bits actually present
13198 * in the last word of the array.
13199 * </p>
13200 *
13201 * <p>
13202 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13203 * to ciphers like AES which want arrays of words.
13204 * </p>
13205 */
13206sjcl.bitArray = {
13207 /**
13208 * Array slices in units of bits.
13209 * @param {bitArray} a The array to slice.
13210 * @param {Number} bstart The offset to the start of the slice, in bits.
13211 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13212 * slice until the end of the array.
13213 * @return {bitArray} The requested slice.
13214 */
13215 bitSlice: function (a, bstart, bend) {
13216 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13217 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13218 },
13219
13220 /**
13221 * Extract a number packed into a bit array.
13222 * @param {bitArray} a The array to slice.
13223 * @param {Number} bstart The offset to the start of the slice, in bits.
13224 * @param {Number} length The length of the number to extract.
13225 * @return {Number} The requested slice.
13226 */
13227 extract: function(a, bstart, blength) {
13228 // FIXME: this Math.floor is not necessary at all, but for some reason
13229 // seems to suppress a bug in the Chromium JIT.
13230 var x, sh = Math.floor((-bstart-blength) & 31);
13231 if ((bstart + blength - 1 ^ bstart) & -32) {
13232 // it crosses a boundary
13233 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13234 } else {
13235 // within a single word
13236 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13237 }
80c4dd2a
IC
13238 return x & ((1<<blength) - 1);
13239 },
13240
13241 /**
13242 * Concatenate two bit arrays.
13243 * @param {bitArray} a1 The first array.
13244 * @param {bitArray} a2 The second array.
13245 * @return {bitArray} The concatenation of a1 and a2.
13246 */
13247 concat: function (a1, a2) {
13248 if (a1.length === 0 || a2.length === 0) {
13249 return a1.concat(a2);
13250 }
13251
13252 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13253 if (shift === 32) {
13254 return a1.concat(a2);
13255 } else {
13256 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13257 }
80c4dd2a
IC
13258 },
13259
13260 /**
13261 * Find the length of an array of bits.
13262 * @param {bitArray} a The array.
13263 * @return {Number} The length of a, in bits.
13264 */
13265 bitLength: function (a) {
13266 var l = a.length, x;
13267 if (l === 0) { return 0; }
13268 x = a[l - 1];
13269 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13270 },
13271
13272 /**
13273 * Truncate an array.
13274 * @param {bitArray} a The array.
13275 * @param {Number} len The length to truncate to, in bits.
13276 * @return {bitArray} A new array, truncated to len bits.
13277 */
13278 clamp: function (a, len) {
13279 if (a.length * 32 < len) { return a; }
13280 a = a.slice(0, Math.ceil(len / 32));
13281 var l = a.length;
13282 len = len & 31;
13283 if (l > 0 && len) {
13284 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13285 }
13286 return a;
13287 },
13288
13289 /**
13290 * Make a partial word for a bit array.
13291 * @param {Number} len The number of bits in the word.
13292 * @param {Number} x The bits.
13293 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13294 * @return {Number} The partial word.
13295 */
13296 partial: function (len, x, _end) {
13297 if (len === 32) { return x; }
13298 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13299 },
13300
13301 /**
13302 * Get the number of bits used by a partial word.
13303 * @param {Number} x The partial word.
13304 * @return {Number} The number of bits used by the partial word.
13305 */
13306 getPartial: function (x) {
13307 return Math.round(x/0x10000000000) || 32;
13308 },
13309
13310 /**
13311 * Compare two arrays for equality in a predictable amount of time.
13312 * @param {bitArray} a The first array.
13313 * @param {bitArray} b The second array.
13314 * @return {boolean} true if a == b; false otherwise.
13315 */
13316 equal: function (a, b) {
13317 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13318 return false;
ebd8d4e8 13319 }
80c4dd2a
IC
13320 var x = 0, i;
13321 for (i=0; i<a.length; i++) {
13322 x |= a[i]^b[i];
ebd8d4e8 13323 }
80c4dd2a
IC
13324 return (x === 0);
13325 },
13326
13327 /** Shift an array right.
13328 * @param {bitArray} a The array to shift.
13329 * @param {Number} shift The number of bits to shift.
13330 * @param {Number} [carry=0] A byte to carry in
13331 * @param {bitArray} [out=[]] An array to prepend to the output.
13332 * @private
13333 */
13334 _shiftRight: function (a, shift, carry, out) {
13335 var i, last2=0, shift2;
13336 if (out === undefined) { out = []; }
13337
13338 for (; shift >= 32; shift -= 32) {
13339 out.push(carry);
13340 carry = 0;
13341 }
13342 if (shift === 0) {
13343 return out.concat(a);
13344 }
13345
13346 for (i=0; i<a.length; i++) {
13347 out.push(carry | a[i]>>>shift);
13348 carry = a[i] << (32-shift);
13349 }
13350 last2 = a.length ? a[a.length-1] : 0;
13351 shift2 = sjcl.bitArray.getPartial(last2);
13352 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13353 return out;
13354 },
13355
13356 /** xor a block of 4 words together.
13357 * @private
13358 */
13359 _xor4: function(x,y) {
13360 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13361 },
13362
13363 /** byteswap a word array inplace.
13364 * (does not handle partial words)
13365 * @param {sjcl.bitArray} a word array
13366 * @return {sjcl.bitArray} byteswapped array
13367 */
13368 byteswapM: function(a) {
13369 var i, v, m = 0xff00;
13370 for (i = 0; i < a.length; ++i) {
13371 v = a[i];
13372 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13373 }
80c4dd2a
IC
13374 return a;
13375 }
13376};
13377
13378
13379//// codecString.js
13380
13381/** @fileOverview Bit array codec implementations.
13382 *
13383 * @author Emily Stark
13384 * @author Mike Hamburg
13385 * @author Dan Boneh
13386 */
13387
13388/** @namespace UTF-8 strings */
13389sjcl.codec.utf8String = {
13390 /** Convert from a bitArray to a UTF-8 string. */
13391 fromBits: function (arr) {
13392 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13393 for (i=0; i<bl/8; i++) {
13394 if ((i&3) === 0) {
13395 tmp = arr[i/4];
13396 }
13397 out += String.fromCharCode(tmp >>> 24);
13398 tmp <<= 8;
ebd8d4e8 13399 }
80c4dd2a
IC
13400 return decodeURIComponent(escape(out));
13401 },
13402
13403 /** Convert from a UTF-8 string to a bitArray. */
13404 toBits: function (str) {
13405 str = unescape(encodeURIComponent(str));
13406 var out = [], i, tmp=0;
13407 for (i=0; i<str.length; i++) {
13408 tmp = tmp << 8 | str.charCodeAt(i);
13409 if ((i&3) === 3) {
13410 out.push(tmp);
13411 tmp = 0;
13412 }
ebd8d4e8 13413 }
80c4dd2a
IC
13414 if (i&3) {
13415 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13416 }
80c4dd2a
IC
13417 return out;
13418 }
13419};
13420
13421
13422//// codecHex.js
13423
13424/** @fileOverview Bit array codec implementations.
13425 *
13426 * @author Emily Stark
13427 * @author Mike Hamburg
13428 * @author Dan Boneh
13429 */
13430
13431/** @namespace Hexadecimal */
13432sjcl.codec.hex = {
13433 /** Convert from a bitArray to a hex string. */
13434 fromBits: function (arr) {
13435 var out = "", i;
13436 for (i=0; i<arr.length; i++) {
13437 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13438 }
80c4dd2a
IC
13439 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13440 },
13441 /** Convert from a hex string to a bitArray. */
13442 toBits: function (str) {
13443 var i, out=[], len;
13444 str = str.replace(/\s|0x/g, "");
13445 len = str.length;
13446 str = str + "00000000";
13447 for (i=0; i<str.length; i+=8) {
13448 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13449 }
80c4dd2a
IC
13450 return sjcl.bitArray.clamp(out, len*4);
13451 }
13452};
13453
13454
13455//// sha512.js
13456
13457/** @fileOverview Javascript SHA-512 implementation.
13458 *
13459 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13460 * SJCL by Stefan Thomas.
13461 *
13462 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13463 * Released with New BSD License
13464 *
13465 * @author Emily Stark
13466 * @author Mike Hamburg
13467 * @author Dan Boneh
13468 * @author Jeff Mott
13469 * @author Stefan Thomas
13470 */
13471
13472/**
13473 * Context for a SHA-512 operation in progress.
13474 * @constructor
13475 * @class Secure Hash Algorithm, 512 bits.
13476 */
13477sjcl.hash.sha512 = function (hash) {
13478 if (!this._key[0]) { this._precompute(); }
13479 if (hash) {
13480 this._h = hash._h.slice(0);
13481 this._buffer = hash._buffer.slice(0);
13482 this._length = hash._length;
13483 } else {
13484 this.reset();
13485 }
13486};
13487
13488/**
13489 * Hash a string or an array of words.
13490 * @static
13491 * @param {bitArray|String} data the data to hash.
13492 * @return {bitArray} The hash value, an array of 16 big-endian words.
13493 */
13494sjcl.hash.sha512.hash = function (data) {
13495 return (new sjcl.hash.sha512()).update(data).finalize();
13496};
13497
13498sjcl.hash.sha512.prototype = {
13499 /**
13500 * The hash's block size, in bits.
13501 * @constant
13502 */
13503 blockSize: 1024,
13504
13505 /**
13506 * Reset the hash state.
13507 * @return this
13508 */
13509 reset:function () {
13510 this._h = this._init.slice(0);
13511 this._buffer = [];
13512 this._length = 0;
13513 return this;
13514 },
13515
13516 /**
13517 * Input several words to the hash.
13518 * @param {bitArray|String} data the data to hash.
13519 * @return this
13520 */
13521 update: function (data) {
13522 if (typeof data === "string") {
13523 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13524 }
80c4dd2a
IC
13525 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13526 ol = this._length,
13527 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13528 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13529 this._block(b.splice(0,32));
ebd8d4e8 13530 }
80c4dd2a
IC
13531 return this;
13532 },
13533
13534 /**
13535 * Complete hashing and output the hash value.
13536 * @return {bitArray} The hash value, an array of 16 big-endian words.
13537 */
13538 finalize:function () {
13539 var i, b = this._buffer, h = this._h;
13540
13541 // Round out and push the buffer
13542 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13543
13544 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13545 for (i = b.length + 4; i & 31; i++) {
13546 b.push(0);
ebd8d4e8 13547 }
80c4dd2a
IC
13548
13549 // append the length
13550 b.push(0);
13551 b.push(0);
13552 b.push(Math.floor(this._length / 0x100000000));
13553 b.push(this._length | 0);
13554
13555 while (b.length) {
13556 this._block(b.splice(0,32));
ebd8d4e8 13557 }
80c4dd2a
IC
13558
13559 this.reset();
13560 return h;
13561 },
13562
13563 /**
13564 * The SHA-512 initialization vector, to be precomputed.
13565 * @private
13566 */
13567 _init:[],
13568
13569 /**
13570 * Least significant 24 bits of SHA512 initialization values.
13571 *
13572 * Javascript only has 53 bits of precision, so we compute the 40 most
13573 * significant bits and add the remaining 24 bits as constants.
13574 *
13575 * @private
13576 */
13577 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13578
13579 /*
13580 _init:
13581 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13582 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13583 */
13584
13585 /**
13586 * The SHA-512 hash key, to be precomputed.
13587 * @private
13588 */
13589 _key:[],
13590
13591 /**
13592 * Least significant 24 bits of SHA512 key values.
13593 * @private
13594 */
13595 _keyr:
13596 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13597 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13598 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13599 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13600 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13601 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13602 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13603 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13604 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13605 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13606
13607 /*
13608 _key:
13609 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13610 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13611 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13612 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13613 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13614 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13615 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13616 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13617 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13618 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13619 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13620 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13621 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13622 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13623 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13624 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13625 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13626 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13627 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13628 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13629 */
13630
13631 /**
13632 * Function to precompute _init and _key.
13633 * @private
13634 */
13635 _precompute: function () {
13636 // XXX: This code is for precomputing the SHA256 constants, change for
13637 // SHA512 and re-enable.
13638 var i = 0, prime = 2, factor;
13639
13640 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13641 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13642
13643 outer: for (; i<80; prime++) {
13644 for (factor=2; factor*factor <= prime; factor++) {
13645 if (prime % factor === 0) {
13646 // not a prime
13647 continue outer;
ebd8d4e8 13648 }
80c4dd2a
IC
13649 }
13650
13651 if (i<8) {
13652 this._init[i*2] = frac(Math.pow(prime, 1/2));
13653 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13654 }
13655 this._key[i*2] = frac(Math.pow(prime, 1/3));
13656 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13657 i++;
ebd8d4e8 13658 }
80c4dd2a
IC
13659 },
13660
13661 /**
13662 * Perform one cycle of SHA-512.
13663 * @param {bitArray} words one block of words.
13664 * @private
13665 */
13666 _block:function (words) {
13667 var i, wrh, wrl,
13668 w = words.slice(0),
13669 h = this._h,
13670 k = this._key,
13671 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13672 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13673 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13674 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13675
13676 // Working variables
13677 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13678 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13679 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13680 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13681
13682 for (i=0; i<80; i++) {
13683 // load up the input word for this round
13684 if (i<16) {
13685 wrh = w[i * 2];
13686 wrl = w[i * 2 + 1];
13687 } else {
13688 // Gamma0
13689 var gamma0xh = w[(i-15) * 2];
13690 var gamma0xl = w[(i-15) * 2 + 1];
13691 var gamma0h =
13692 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13693 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13694 (gamma0xh >>> 7);
13695 var gamma0l =
13696 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13697 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13698 ((gamma0xh << 25) | (gamma0xl >>> 7));
13699
13700 // Gamma1
13701 var gamma1xh = w[(i-2) * 2];
13702 var gamma1xl = w[(i-2) * 2 + 1];
13703 var gamma1h =
13704 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13705 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13706 (gamma1xh >>> 6);
13707 var gamma1l =
13708 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13709 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13710 ((gamma1xh << 26) | (gamma1xl >>> 6));
13711
13712 // Shortcuts
13713 var wr7h = w[(i-7) * 2];
13714 var wr7l = w[(i-7) * 2 + 1];
13715
13716 var wr16h = w[(i-16) * 2];
13717 var wr16l = w[(i-16) * 2 + 1];
13718
13719 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13720 wrl = gamma0l + wr7l;
13721 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13722 wrl += gamma1l;
13723 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13724 wrl += wr16l;
13725 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13726 }
13727
13728 w[i*2] = wrh |= 0;
13729 w[i*2 + 1] = wrl |= 0;
13730
13731 // Ch
13732 var chh = (eh & fh) ^ (~eh & gh);
13733 var chl = (el & fl) ^ (~el & gl);
13734
13735 // Maj
13736 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13737 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13738
13739 // Sigma0
13740 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13741 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13742
13743 // Sigma1
13744 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13745 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13746
13747 // K(round)
13748 var krh = k[i*2];
13749 var krl = k[i*2+1];
13750
13751 // t1 = h + sigma1 + ch + K(round) + W(round)
13752 var t1l = hl + sigma1l;
13753 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
13754 t1l += chl;
13755 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
13756 t1l += krl;
13757 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
13758 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
13759 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
13760
13761 // t2 = sigma0 + maj
13762 var t2l = sigma0l + majl;
13763 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
13764
13765 // Update working variables
13766 hh = gh;
13767 hl = gl;
13768 gh = fh;
13769 gl = fl;
13770 fh = eh;
13771 fl = el;
13772 el = (dl + t1l) | 0;
13773 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13774 dh = ch;
13775 dl = cl;
13776 ch = bh;
13777 cl = bl;
13778 bh = ah;
13779 bl = al;
13780 al = (t1l + t2l) | 0;
13781 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
13782 }
13783
13784 // Intermediate hash
13785 h0l = h[1] = (h0l + al) | 0;
13786 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
13787 h1l = h[3] = (h1l + bl) | 0;
13788 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
13789 h2l = h[5] = (h2l + cl) | 0;
13790 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
13791 h3l = h[7] = (h3l + dl) | 0;
13792 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13793 h4l = h[9] = (h4l + el) | 0;
13794 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
13795 h5l = h[11] = (h5l + fl) | 0;
13796 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
13797 h6l = h[13] = (h6l + gl) | 0;
13798 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
13799 h7l = h[15] = (h7l + hl) | 0;
13800 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
13801 }
13802};
13803
13804
13805//// hmac.js
13806
13807/** @fileOverview HMAC implementation.
13808 *
13809 * @author Emily Stark
13810 * @author Mike Hamburg
13811 * @author Dan Boneh
13812 */
13813
13814/** HMAC with the specified hash function.
13815 * @constructor
13816 * @param {bitArray} key the key for HMAC.
13817 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13818 */
13819sjcl.misc.hmac = function (key, Hash) {
13820 this._hash = Hash = Hash || sjcl.hash.sha256;
13821 var exKey = [[],[]], i,
13822 bs = Hash.prototype.blockSize / 32;
13823 this._baseHash = [new Hash(), new Hash()];
13824
13825 if (key.length > bs) {
13826 key = Hash.hash(key);
13827 }
13828
13829 for (i=0; i<bs; i++) {
13830 exKey[0][i] = key[i]^0x36363636;
13831 exKey[1][i] = key[i]^0x5C5C5C5C;
13832 }
13833
13834 this._baseHash[0].update(exKey[0]);
13835 this._baseHash[1].update(exKey[1]);
13836 this._resultHash = new Hash(this._baseHash[0]);
13837};
13838
13839/** HMAC with the specified hash function. Also called encrypt since it's a prf.
13840 * @param {bitArray|String} data The data to mac.
13841 */
13842sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13843 if (!this._updated) {
13844 this.update(data);
13845 return this.digest(data);
13846 } else {
13847 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
13848 }
13849};
13850
13851sjcl.misc.hmac.prototype.reset = function () {
13852 this._resultHash = new this._hash(this._baseHash[0]);
13853 this._updated = false;
13854};
13855
13856sjcl.misc.hmac.prototype.update = function (data) {
13857 this._updated = true;
13858 this._resultHash.update(data);
13859};
13860
13861sjcl.misc.hmac.prototype.digest = function () {
13862 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
13863
13864 this.reset();
13865
13866 return result;
13867};
13868
13869
13870//// pbkdf2.js
13871
13872
13873/** @fileOverview Password-based key-derivation function, version 2.0.
13874 *
13875 * @author Emily Stark
13876 * @author Mike Hamburg
13877 * @author Dan Boneh
13878 */
13879
13880/** Password-Based Key-Derivation Function, version 2.0.
13881 *
13882 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13883 *
13884 * This is the method specified by RSA's PKCS #5 standard.
13885 *
13886 * @param {bitArray|String} password The password.
13887 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13888 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
13889 * @param {Number} [length] The length of the derived key. Defaults to the
13890 output size of the hash function.
13891 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13892 * @return {bitArray} the derived key.
13893 */
13894sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13895 count = count || 1000;
13896
13897 if (length < 0 || count < 0) {
13898 throw sjcl.exception.invalid("invalid params to pbkdf2");
13899 }
13900
13901 if (typeof password === "string") {
13902 password = sjcl.codec.utf8String.toBits(password);
13903 }
13904
13905 if (typeof salt === "string") {
13906 salt = sjcl.codec.utf8String.toBits(salt);
13907 }
13908
13909 Prff = Prff || sjcl.misc.hmac;
13910
13911 var prf = new Prff(password),
13912 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13913
13914 for (k = 1; 32 * out.length < (length || 1); k++) {
13915 u = ui = prf.encrypt(b.concat(salt,[k]));
13916
13917 for (i=1; i<count; i++) {
13918 ui = prf.encrypt(ui);
13919 for (j=0; j<ui.length; j++) {
13920 u[j] ^= ui[j];
13921 }
ebd8d4e8 13922 }
80c4dd2a
IC
13923
13924 out = out.concat(u);
13925 }
13926
13927 if (length) { out = b.clamp(out, length); }
13928
13929 return out;
13930};
13931
13932
13933//// sha256.js
13934
13935/** @fileOverview Javascript SHA-256 implementation.
13936 *
13937 * An older version of this implementation is available in the public
13938 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13939 * Stanford University 2008-2010 and BSD-licensed for liability
13940 * reasons.
13941 *
13942 * Special thanks to Aldo Cortesi for pointing out several bugs in
13943 * this code.
13944 *
13945 * @author Emily Stark
13946 * @author Mike Hamburg
13947 * @author Dan Boneh
13948 */
13949
13950/**
13951 * Context for a SHA-256 operation in progress.
13952 * @constructor
13953 * @class Secure Hash Algorithm, 256 bits.
13954 */
13955sjcl.hash.sha256 = function (hash) {
13956 if (!this._key[0]) { this._precompute(); }
13957 if (hash) {
13958 this._h = hash._h.slice(0);
13959 this._buffer = hash._buffer.slice(0);
13960 this._length = hash._length;
13961 } else {
13962 this.reset();
13963 }
13964};
13965
13966/**
13967 * Hash a string or an array of words.
13968 * @static
13969 * @param {bitArray|String} data the data to hash.
13970 * @return {bitArray} The hash value, an array of 16 big-endian words.
13971 */
13972sjcl.hash.sha256.hash = function (data) {
13973 return (new sjcl.hash.sha256()).update(data).finalize();
13974};
13975
13976sjcl.hash.sha256.prototype = {
13977 /**
13978 * The hash's block size, in bits.
13979 * @constant
13980 */
13981 blockSize: 512,
13982
13983 /**
13984 * Reset the hash state.
13985 * @return this
13986 */
13987 reset:function () {
13988 this._h = this._init.slice(0);
13989 this._buffer = [];
13990 this._length = 0;
13991 return this;
13992 },
13993
13994 /**
13995 * Input several words to the hash.
13996 * @param {bitArray|String} data the data to hash.
13997 * @return this
13998 */
13999 update: function (data) {
14000 if (typeof data === "string") {
14001 data = sjcl.codec.utf8String.toBits(data);
14002 }
14003 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14004 ol = this._length,
14005 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14006 for (i = 512+ol & -512; i <= nl; i+= 512) {
14007 this._block(b.splice(0,16));
ebd8d4e8 14008 }
3af2954a 14009 return this;
80c4dd2a
IC
14010 },
14011
14012 /**
14013 * Complete hashing and output the hash value.
14014 * @return {bitArray} The hash value, an array of 8 big-endian words.
14015 */
14016 finalize:function () {
14017 var i, b = this._buffer, h = this._h;
14018
14019 // Round out and push the buffer
14020 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14021
14022 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14023 for (i = b.length + 2; i & 15; i++) {
14024 b.push(0);
14025 }
14026
14027 // append the length
14028 b.push(Math.floor(this._length / 0x100000000));
14029 b.push(this._length | 0);
14030
14031 while (b.length) {
14032 this._block(b.splice(0,16));
14033 }
14034
14035 this.reset();
14036 return h;
14037 },
14038
14039 /**
14040 * The SHA-256 initialization vector, to be precomputed.
14041 * @private
14042 */
14043 _init:[],
14044 /*
14045 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14046 */
14047
14048 /**
14049 * The SHA-256 hash key, to be precomputed.
14050 * @private
14051 */
14052 _key:[],
14053 /*
14054 _key:
14055 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14056 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14057 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14058 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14059 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14060 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14061 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14062 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14063 */
14064
14065
14066 /**
14067 * Function to precompute _init and _key.
14068 * @private
14069 */
14070 _precompute: function () {
14071 var i = 0, prime = 2, factor;
14072
14073 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14074
14075 outer: for (; i<64; prime++) {
14076 for (factor=2; factor*factor <= prime; factor++) {
14077 if (prime % factor === 0) {
14078 // not a prime
14079 continue outer;
ebd8d4e8 14080 }
80c4dd2a
IC
14081 }
14082
14083 if (i<8) {
14084 this._init[i] = frac(Math.pow(prime, 1/2));
14085 }
14086 this._key[i] = frac(Math.pow(prime, 1/3));
14087 i++;
ebd8d4e8 14088 }
80c4dd2a
IC
14089 },
14090
14091 /**
14092 * Perform one cycle of SHA-256.
14093 * @param {bitArray} words one block of words.
14094 * @private
14095 */
14096 _block:function (words) {
14097 var i, tmp, a, b,
14098 w = words.slice(0),
14099 h = this._h,
14100 k = this._key,
14101 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14102 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14103
14104 /* Rationale for placement of |0 :
14105 * If a value can overflow is original 32 bits by a factor of more than a few
14106 * million (2^23 ish), there is a possibility that it might overflow the
14107 * 53-bit mantissa and lose precision.
14108 *
14109 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14110 * propagates around the loop, and on the hash state h[]. I don't believe
14111 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14112 * (for h4 anyway), and better safe than sorry.
14113 *
14114 * The clamps on h[] are necessary for the output to be correct even in the
14115 * common case and for short inputs.
14116 */
14117 for (i=0; i<64; i++) {
14118 // load up the input word for this round
14119 if (i<16) {
14120 tmp = w[i];
14121 } else {
14122 a = w[(i+1 ) & 15];
14123 b = w[(i+14) & 15];
14124 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14125 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14126 w[i&15] + w[(i+9) & 15]) | 0;
14127 }
14128
14129 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14130
14131 // shift register
14132 h7 = h6; h6 = h5; h5 = h4;
14133 h4 = h3 + tmp | 0;
14134 h3 = h2; h2 = h1; h1 = h0;
14135
14136 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14137 }
14138
14139 h[0] = h[0]+h0 | 0;
14140 h[1] = h[1]+h1 | 0;
14141 h[2] = h[2]+h2 | 0;
14142 h[3] = h[3]+h3 | 0;
14143 h[4] = h[4]+h4 | 0;
14144 h[5] = h[5]+h5 | 0;
14145 h[6] = h[6]+h6 | 0;
14146 h[7] = h[7]+h7 | 0;
14147 }
14148};
dc55c6b0 14149</script>
ab78acc6 14150 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14151WORDLISTS["english"] = [
ebd8d4e8
IC
14152"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14153"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14154"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14155"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14156"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14157"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14158"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14159"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14160"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14161"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14162"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14163"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14164"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14165"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14166"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14167"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14168"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14169"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14170"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14171"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14172"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14173"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14174"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14175"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14176"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14177"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14178"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14179"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14180"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14181"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14182"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14183"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14184"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14185"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14186"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14187"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14188"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14189"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14190"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14191"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14192"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14193"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14194"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14195"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14196"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14197"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14198"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14199"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14200"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14201"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14202"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14203"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14204"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14205"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14206"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14207"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14208"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14209"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14210"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14211"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14212"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14213"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14214"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14215"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14216"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14217"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14218"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14219"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14220"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14221"film","filter","final","find","fine","finger","finish","fire","firm","first",
14222"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14223"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14224"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14225"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14226"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14227"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14228"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14229"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14230"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14231"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14232"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14233"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14234"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14235"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14236"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14237"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14238"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14239"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14240"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14241"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14242"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14243"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14244"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14245"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14246"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14247"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14248"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14249"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14250"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14251"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14252"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14253"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14254"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14255"liar","liberty","library","license","life","lift","light","like","limb","limit",
14256"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14257"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14258"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14259"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14260"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14261"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14262"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14263"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14264"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14265"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14266"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14267"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14268"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14269"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14270"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14271"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14272"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14273"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14274"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14275"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14276"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14277"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14278"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14279"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14280"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14281"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14282"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14283"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14284"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14285"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14286"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14287"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14288"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14289"prize","problem","process","produce","profit","program","project","promote","proof","property",
14290"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14291"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14292"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14293"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14294"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14295"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14296"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14297"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14298"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14299"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14300"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14301"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14302"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14303"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14304"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14305"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14306"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14307"scrub","sea","search","season","seat","second","secret","section","security","seed",
14308"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14309"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14310"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14311"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14312"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14313"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14314"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14315"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14316"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14317"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14318"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14319"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14320"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14321"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14322"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14323"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14324"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14325"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14326"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14327"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14328"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14329"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14330"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14331"thank","that","theme","then","theory","there","they","thing","this","thought",
14332"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14333"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14334"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14335"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14336"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14337"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14338"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14339"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14340"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14341"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14342"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14343"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14344"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14345"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14346"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14347"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14348"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14349"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14350"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14351"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14352"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14353"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14354"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14355"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14356"yellow","you","young","youth","zebra","zero","zone","zoo"]
dc55c6b0 14357</script>
ab78acc6 14358 <script>/*
3af2954a
IC
14359 * Copyright (c) 2013 Pavol Rusnak
14360 *
14361 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14362 * this software and associated documentation files (the "Software"), to deal in
14363 * the Software without restriction, including without limitation the rights to
14364 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14365 * of the Software, and to permit persons to whom the Software is furnished to do
14366 * so, subject to the following conditions:
14367 *
14368 * The above copyright notice and this permission notice shall be included in all
14369 * copies or substantial portions of the Software.
14370 *
14371 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14372 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14373 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14374 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14375 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14376 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14377 */
14378
14379/*
14380 * Javascript port from python by Ian Coleman
14381 *
80c4dd2a
IC
14382 * Requires code from sjcl
14383 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
14384 */
14385
14386var Mnemonic = function(language) {
14387
14388 var PBKDF2_ROUNDS = 2048;
14389 var RADIX = 2048;
14390
14391 var self = this;
14392 var wordlist = [];
14393
80c4dd2a
IC
14394 var hmacSHA512 = function(key) {
14395 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14396 this.encrypt = function() {
14397 return hasher.encrypt.apply(hasher, arguments);
14398 };
14399 };
14400
3af2954a
IC
14401 function init() {
14402 wordlist = WORDLISTS[language];
14403 if (wordlist.length != RADIX) {
14404 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14405 throw err;
14406 }
14407 }
14408
14409 self.generate = function(strength) {
14410 strength = strength || 128;
14411 var r = strength % 32;
14412 if (r > 0) {
14413 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14414 }
14415 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14416 if (!hasStrongCrypto) {
14417 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14418 }
14419 var buffer = new Uint8Array(strength / 8);
14420 var data = crypto.getRandomValues(buffer);
14421 return self.toMnemonic(data);
14422 }
14423
80c4dd2a
IC
14424 self.toMnemonic = function(byteArray) {
14425 if (byteArray.length % 4 > 0) {
14426 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
14427 }
14428
14429 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
14430 var data = byteArrayToWordArray(byteArray);
14431 var hash = sjcl.hash.sha256.hash(data);
14432 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
14433
14434 // b is a binary string, eg '00111010101100...'
14435 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14436 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14437 //
14438 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14439 // c = bin(int(h, 16))[2:].zfill(256)
14440 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
14441 var a = byteArrayToBinaryString(byteArray);
14442 var c = zfill(hexStringToBinaryString(h), 256);
14443 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
14444 // b = line1 + line2
14445 var b = a + d;
14446
14447 var result = [];
14448 var blen = b.length / 11;
14449 for (var i=0; i<blen; i++) {
14450 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14451 result.push(wordlist[idx]);
14452 }
14453 return result.join(' ');
14454 }
14455
14456 self.check = function(mnemonic) {
14457 var mnemonic = mnemonic.split(' ')
14458 if (mnemonic.length % 3 > 0) {
14459 return false
14460 }
14461 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14462 var idx = [];
14463 for (var i=0; i<mnemonic.length; i++) {
14464 var word = mnemonic[i];
14465 var wordIndex = wordlist.indexOf(word);
14466 if (wordIndex == -1) {
14467 return false;
14468 }
14469 var binaryIndex = zfill(wordIndex.toString(2), 11);
14470 idx.push(binaryIndex);
14471 }
14472 var b = idx.join('');
14473 var l = b.length;
14474 //d = b[:l / 33 * 32]
14475 //h = b[-l / 33:]
14476 var d = b.substring(0, l / 33 * 32);
14477 var h = b.substring(l - l / 33, l);
14478 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 14479 var nd = binaryStringToWordArray(d);
3af2954a 14480 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
14481 var ndHash = sjcl.hash.sha256.hash(nd);
14482 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14483 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
14484 var nh = ndBstr.substring(0,l/33);
14485 return h == nh;
14486 }
14487
14488 self.toSeed = function(mnemonic, passphrase) {
14489 passphrase = passphrase || '';
14490 mnemonic = self.normalizeString(mnemonic)
14491 passphrase = self.normalizeString(passphrase)
14492 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
14493 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14494 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14495 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14496 var hashHex = sjcl.codec.hex.fromBits(result);
14497 return hashHex;
3af2954a
IC
14498 }
14499
14500 self.normalizeString = function(str) {
14501 if (typeof str.normalize == "function") {
14502 return str.normalize("NFKD");
14503 }
14504 else {
14505 // TODO decide how to handle this in the future.
14506 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14507 return str;
14508 }
14509 }
14510
80c4dd2a
IC
14511 function byteArrayToWordArray(data) {
14512 var a = [];
14513 for (var i=0; i<data.length/4; i++) {
14514 v = 0;
14515 v += data[i*4 + 0] << 8 * 3;
14516 v += data[i*4 + 1] << 8 * 2;
14517 v += data[i*4 + 2] << 8 * 1;
14518 v += data[i*4 + 3] << 8 * 0;
14519 a.push(v);
14520 }
14521 return a;
14522 }
14523
3af2954a
IC
14524 function byteArrayToBinaryString(data) {
14525 var bin = "";
14526 for (var i=0; i<data.length; i++) {
14527 bin += zfill(data[i].toString(2), 8);
14528 }
14529 return bin;
14530 }
14531
80c4dd2a
IC
14532 function hexStringToBinaryString(hexString) {
14533 binaryString = "";
14534 for (var i=0; i<hexString.length; i++) {
14535 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14536 }
14537 return binaryString;
14538 }
14539
14540 function binaryStringToWordArray(binary) {
14541 var aLen = binary.length / 32;
14542 var a = [];
14543 for (var i=0; i<aLen; i++) {
14544 var valueStr = binary.substring(0,32);
3af2954a 14545 var value = parseInt(valueStr, 2);
80c4dd2a
IC
14546 a.push(value);
14547 binary = binary.slice(32);
3af2954a 14548 }
80c4dd2a 14549 return a;
3af2954a
IC
14550 }
14551
14552 // Pad a numeric string on the left with zero digits until the given width
14553 // is reached.
14554 // Note this differs to the python implementation because it does not
14555 // handle numbers starting with a sign.
14556 function zfill(source, length) {
14557 source = source.toString();
14558 while (source.length < length) {
14559 source = '0' + source;
14560 }
14561 return source;
14562 }
14563
14564 init();
ebd8d4e8 14565
3af2954a 14566}
dc55c6b0 14567</script>
ab78acc6 14568 <script>(function() {
ebd8d4e8
IC
14569
14570 var mnemonic = new Mnemonic("english");
14571 var bip32RootKey = null;
14572 var bip32ExtendedKey = null;
ab78acc6 14573 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
14574 var addressRowTemplate = $("#address-row-template");
14575
80c4dd2a
IC
14576 var showIndex = true;
14577 var showAddress = true;
14578 var showPrivKey = true;
14579
ebd8d4e8
IC
14580 var phraseChangeTimeoutEvent = null;
14581
14582 var DOM = {};
d6cedc94
IC
14583 DOM.network = $(".network");
14584 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 14585 DOM.phrase = $(".phrase");
721b7284 14586 DOM.passphrase = $(".passphrase");
ebd8d4e8
IC
14587 DOM.generate = $(".generate");
14588 DOM.rootKey = $(".root-key");
14589 DOM.extendedPrivKey = $(".extended-priv-key");
14590 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
14591 DOM.bip32tab = $("#bip32-tab");
14592 DOM.bip44tab = $("#bip44-tab");
14593 DOM.bip32panel = $("#bip32");
14594 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
14595 DOM.bip32path = $("#bip32-path");
14596 DOM.bip44path = $("#bip44-path");
14597 DOM.bip44purpose = $("#bip44 .purpose");
14598 DOM.bip44coin = $("#bip44 .coin");
14599 DOM.bip44account = $("#bip44 .account");
14600 DOM.bip44change = $("#bip44 .change");
14601 DOM.strength = $(".strength");
14602 DOM.addresses = $(".addresses");
14603 DOM.rowsToAdd = $(".rows-to-add");
14604 DOM.more = $(".more");
14605 DOM.feedback = $(".feedback");
14606 DOM.tab = $(".derivation-type a");
14607 DOM.indexToggle = $(".index-toggle");
14608 DOM.addressToggle = $(".address-toggle");
14609 DOM.privateKeyToggle = $(".private-key-toggle");
9b5f4cc7 14610 DOM.myceliumPath = $("#mycelium-path");
ebd8d4e8 14611
dc55c6b0 14612 var derivationPath = $(".tab-pane.active .path").val();
ebd8d4e8
IC
14613
14614 function init() {
14615 // Events
d6cedc94 14616 DOM.network.on("change", networkChanged);
a19a5498
IC
14617 DOM.phrase.on("input", delayedPhraseChanged);
14618 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
14619 DOM.generate.on("click", generateClicked);
14620 DOM.more.on("click", showMore);
a19a5498
IC
14621 DOM.bip32path.on("input", bip32Changed);
14622 DOM.bip44purpose.on("input", bip44Changed);
14623 DOM.bip44coin.on("input", bip44Changed);
14624 DOM.bip44account.on("input", bip44Changed);
14625 DOM.bip44change.on("input", bip44Changed);
ebd8d4e8
IC
14626 DOM.tab.on("click", tabClicked);
14627 DOM.indexToggle.on("click", toggleIndexes);
14628 DOM.addressToggle.on("click", toggleAddresses);
14629 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14630 disableForms();
14631 hidePending();
14632 hideValidationError();
ab78acc6 14633 populateNetworkSelect();
ebd8d4e8
IC
14634 }
14635
14636 // Event handlers
14637
d6cedc94 14638 function networkChanged(e) {
ab78acc6
IC
14639 var network = e.target.value;
14640 networks[network].onSelect();
dc55c6b0 14641 setBip44DerivationPath();
d6cedc94
IC
14642 delayedPhraseChanged();
14643 }
14644
ebd8d4e8
IC
14645 function delayedPhraseChanged() {
14646 hideValidationError();
14647 showPending();
14648 if (phraseChangeTimeoutEvent != null) {
14649 clearTimeout(phraseChangeTimeoutEvent);
14650 }
14651 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14652 }
14653
14654 function phraseChanged() {
14655 showPending();
14656 hideValidationError();
14657 // Get the mnemonic phrase
14658 var phrase = DOM.phrase.val();
721b7284 14659 var passphrase = DOM.passphrase.val();
ebd8d4e8
IC
14660 var errorText = findPhraseErrors(phrase);
14661 if (errorText) {
14662 showValidationError(errorText);
14663 return;
14664 }
14665 // Get the derivation path
14666 var errorText = findDerivationPathErrors();
14667 if (errorText) {
14668 showValidationError(errorText);
14669 return;
14670 }
14671 // Calculate and display
721b7284 14672 calcBip32Seed(phrase, passphrase, derivationPath);
ebd8d4e8
IC
14673 displayBip32Info();
14674 hidePending();
14675 }
14676
14677 function generateClicked() {
14678 clearDisplay();
14679 showPending();
14680 setTimeout(function() {
14681 var phrase = generateRandomPhrase();
14682 if (!phrase) {
14683 return;
14684 }
14685 phraseChanged();
14686 }, 50);
14687 }
14688
14689 function tabClicked(e) {
14690 var activePath = $(e.target.getAttribute("href") + " .path");
14691 derivationPath = activePath.val();
14692 derivationChanged();
14693 }
14694
14695 function derivationChanged() {
59780293 14696 delayedPhraseChanged();
ebd8d4e8
IC
14697 }
14698
14699 function bip32Changed() {
14700 derivationPath = DOM.bip32path.val();
14701 derivationChanged();
14702 }
14703
14704 function bip44Changed() {
14705 setBip44DerivationPath();
14706 derivationPath = DOM.bip44path.val();
14707 derivationChanged();
14708 }
14709
14710 function toggleIndexes() {
80c4dd2a 14711 showIndex = !showIndex;
ebd8d4e8
IC
14712 $("td.index span").toggleClass("invisible");
14713 }
14714
14715 function toggleAddresses() {
80c4dd2a 14716 showAddress = !showAddress;
ebd8d4e8
IC
14717 $("td.address span").toggleClass("invisible");
14718 }
14719
14720 function togglePrivateKeys() {
80c4dd2a 14721 showPrivKey = !showPrivKey;
ebd8d4e8
IC
14722 $("td.privkey span").toggleClass("invisible");
14723 }
14724
14725 // Private methods
14726
14727 function generateRandomPhrase() {
14728 if (!hasStrongRandom()) {
14729 var errorText = "This browser does not support strong randomness";
14730 showValidationError(errorText);
14731 return;
14732 }
14733 var numWords = parseInt(DOM.strength.val());
14734 // Check strength is an integer
14735 if (isNaN(numWords)) {
14736 DOM.strength.val("12");
14737 numWords = 12;
14738 }
14739 // Check strength is a multiple of 32, if not round it down
14740 if (numWords % 3 != 0) {
14741 numWords = Math.floor(numWords / 3) * 3;
14742 DOM.strength.val(numWords);
14743 }
14744 // Check strength is at least 32
14745 if (numWords == 0) {
14746 numWords = 3;
14747 DOM.strength.val(numWords);
14748 }
14749 var strength = numWords / 3 * 32;
14750 var words = mnemonic.generate(strength);
14751 DOM.phrase.val(words);
14752 return words;
14753 }
14754
721b7284
IC
14755 function calcBip32Seed(phrase, passphrase, path) {
14756 var seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 14757 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
ebd8d4e8
IC
14758 bip32ExtendedKey = bip32RootKey;
14759 // Derive the key from the path
14760 var pathBits = path.split("/");
14761 for (var i=0; i<pathBits.length; i++) {
14762 var bit = pathBits[i];
14763 var index = parseInt(bit);
14764 if (isNaN(index)) {
14765 continue;
14766 }
14767 var hardened = bit[bit.length-1] == "'";
14768 if (hardened) {
14769 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14770 }
14771 else {
14772 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14773 }
14774 }
14775 }
14776
14777 function showValidationError(errorText) {
14778 DOM.feedback
14779 .text(errorText)
14780 .show();
14781 }
14782
14783 function hideValidationError() {
14784 DOM.feedback
14785 .text("")
14786 .hide();
14787 }
14788
14789 function findPhraseErrors(phrase) {
14790 // TODO make this right
14791 // Preprocess the words
783981de 14792 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
14793 var parts = phrase.split(" ");
14794 var proper = [];
14795 for (var i=0; i<parts.length; i++) {
14796 var part = parts[i];
14797 if (part.length > 0) {
14798 // TODO check that lowercasing is always valid to do
14799 proper.push(part.toLowerCase());
14800 }
14801 }
14802 // TODO some levenstein on the words
14803 var properPhrase = proper.join(' ');
14804 // Check the words are valid
14805 var isValid = mnemonic.check(properPhrase);
14806 if (!isValid) {
14807 return "Invalid mnemonic";
14808 }
14809 return false;
14810 }
14811
14812 function findDerivationPathErrors(path) {
14813 // TODO
14814 return false;
14815 }
14816
14817 function displayBip32Info() {
14818 // Display the key
14819 var rootKey = bip32RootKey.toBase58();
14820 DOM.rootKey.val(rootKey);
14821 var extendedPrivKey = bip32ExtendedKey.toBase58();
14822 DOM.extendedPrivKey.val(extendedPrivKey);
14823 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14824 DOM.extendedPubKey.val(extendedPubKey);
14825 // Display the addresses and privkeys
14826 clearAddressesList();
14827 displayAddresses(0, 20);
14828 }
14829
14830 function displayAddresses(start, total) {
14831 for (var i=0; i<total; i++) {
80c4dd2a
IC
14832 var index = i + start;
14833 new TableRow(index);
14834 }
14835 }
14836
14837 function TableRow(index) {
14838
14839 function init() {
14840 calculateValues();
14841 }
14842
14843 function calculateValues() {
14844 setTimeout(function() {
14845 var key = bip32ExtendedKey.derive(index);
14846 var address = key.getAddress().toString();
14847 var privkey = key.privKey.toWIF(network);
14848 addAddressToList(index, address, privkey);
14849 }, 50)
ebd8d4e8 14850 }
80c4dd2a
IC
14851
14852 init();
14853
ebd8d4e8
IC
14854 }
14855
14856 function showMore() {
14857 var start = DOM.addresses.children().length;
14858 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14859 if (isNaN(rowsToAdd)) {
14860 rowsToAdd = 20;
14861 DOM.rowsToAdd.val("20");
14862 }
14863 if (rowsToAdd > 200) {
14864 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
14865 msg += "Do you want to continue?";
14866 if (!confirm(msg)) {
14867 return;
14868 }
14869 }
ebd8d4e8 14870 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
14871 }
14872
14873 function clearDisplay() {
14874 clearAddressesList();
14875 clearKey();
14876 hideValidationError();
14877 }
14878
14879 function clearAddressesList() {
14880 DOM.addresses.empty();
14881 }
14882
14883 function clearKey() {
14884 DOM.rootKey.val("");
14885 DOM.extendedPrivKey.val("");
14886 DOM.extendedPubKey.val("");
14887 }
14888
14889 function addAddressToList(index, address, privkey) {
14890 var row = $(addressRowTemplate.html());
80c4dd2a
IC
14891 // Elements
14892 var indexCell = row.find(".index span");
14893 var addressCell = row.find(".address span");
14894 var privkeyCell = row.find(".privkey span");
14895 // Content
14896 indexCell.text(index);
14897 addressCell.text(address);
14898 privkeyCell.text(privkey);
14899 // Visibility
14900 if (!showIndex) {
14901 indexCell.addClass("invisible");
14902 }
14903 if (!showAddress) {
14904 addressCell.addClass("invisible");
14905 }
14906 if (!showPrivKey) {
14907 privkeCell.addClass("invisible");
14908 }
ebd8d4e8
IC
14909 DOM.addresses.append(row);
14910 }
14911
14912 function hasStrongRandom() {
14913 return 'crypto' in window && window['crypto'] !== null;
14914 }
14915
14916 function disableForms() {
14917 $("form").on("submit", function(e) {
14918 e.preventDefault();
14919 });
14920 }
14921
14922 function setBip44DerivationPath() {
14923 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
14924 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
14925 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
14926 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
14927 var path = "m/";
14928 path += purpose + "'/";
14929 path += coin + "'/";
14930 path += account + "'/";
14931 path += change;
14932 DOM.bip44path.val(path);
14933 }
14934
14935 function parseIntNoNaN(val, defaultVal) {
14936 var v = parseInt(val);
14937 if (isNaN(v)) {
14938 return defaultVal;
14939 }
14940 return v;
14941 }
14942
14943 function showPending() {
14944 DOM.feedback
14945 .text("Calculating...")
14946 .show();
14947 }
14948
14949 function hidePending() {
14950 DOM.feedback
14951 .text("")
14952 .hide();
14953 }
14954
ab78acc6
IC
14955 function populateNetworkSelect() {
14956 for (var i=0; i<networks.length; i++) {
14957 var network = networks[i];
14958 var option = $("<option>");
14959 option.attr("value", i);
14960 option.text(network.name);
14961 DOM.phraseNetwork.append(option);
14962 }
14963 }
14964
14965 var networks = [
14966 {
14967 name: "Bitcoin",
14968 onSelect: function() {
14969 network = bitcoin.networks.bitcoin;
14970 DOM.bip44coin.val(0);
14971 DOM.myceliumPath.val("m/44'/0'/0'/0");
14972 },
14973 },
14974 {
14975 name: "Bitcoin Testnet",
14976 onSelect: function() {
14977 network = bitcoin.networks.testnet;
14978 DOM.bip44coin.val(1);
14979 DOM.myceliumPath.val("m/44'/1'/0'/0");
14980 },
14981 },
14982 {
14983 name: "Litecoin",
14984 onSelect: function() {
14985 network = bitcoin.networks.litecoin;
14986 DOM.bip44coin.val(2);
14987 },
14988 },
14989 {
14990 name: "Dogecoin",
14991 onSelect: function() {
14992 network = bitcoin.networks.dogecoin;
14993 DOM.bip44coin.val(3);
14994 },
14995 },
14996 ]
14997
ebd8d4e8
IC
14998 init();
14999
15000})();
dc55c6b0 15001</script>
ebd8d4e8
IC
15002 </body>
15003</html>