]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Template code in comment for future tests.
[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 }
d5dc92fd
IC
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
ab78acc6
IC
47 </style>
48 </head>
49 <body>
50 <div class="container">
3af2954a 51
ab78acc6
IC
52 <h1 class="text-center">Mnemonic Code Converter</h1>
53 <hr>
54 <div class="row">
55 <div class="col-md-12">
56 <h2>Mnemonic</h2>
57 <form class="form-horizontal" role="form">
58 <div class="col-sm-2"></div>
59 <div class="col-sm-10">
60 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)</p>
61 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
62 </div>
63 <div class="form-group">
64 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
65 <div class="col-sm-10">
66 <textarea id="phrase" class="phrase form-control"></textarea>
67 </div>
68 </div>
69 <div class="form-group">
70 <label for="strength" class="col-sm-2 control-label">Number of words</label>
71 <div class="col-sm-10">
72 <div class="input-group">
18531979 73 <select id="strength" class="strength form-control">
54563907
IC
74 <option value="3">3</option>
75 <option value="6">6</option>
76 <option value="9">9</option>
77 <option value="12">12</option>
78 <option value="15" selected>15</option>
79 <option value="18">18</option>
80 <option value="21">21</option>
81 <option value="24">24</option>
18531979 82 </select>
ab78acc6
IC
83 <span class="input-group-btn">
84 <button class="btn generate">Generate Random Mnemonic</button>
85 </span>
86 </div>
87 </div>
88 </div>
89 <div class="form-group">
90 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
91 <div class="col-sm-10">
92 <textarea id="passphrase" class="passphrase form-control"></textarea>
93 </div>
94 </div>
73161a92
IC
95 <div class="form-group">
96 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
97 <div class="col-sm-10">
98 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
99 </div>
100 </div>
ab78acc6
IC
101 <div class="form-group">
102 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
103 <div class="col-sm-10">
104 <select id="network-phrase" class="network form-control">
105 <!-- populated by javascript -->
106 </select>
107 </div>
108 </div>
109 <div class="form-group">
110 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
111 <div class="col-sm-10">
efe41586 112 <textarea id="root-key" class="root-key form-control"></textarea>
ab78acc6
IC
113 </div>
114 </div>
115 </form>
116 </div>
117 </div>
3af2954a 118
ab78acc6 119 <hr>
3af2954a 120
ab78acc6
IC
121 <div class="row">
122 <div class="col-md-12">
123 <h2>Derivation Path</h2>
124 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 125 <li id="bip44-tab" class="active">
ab78acc6
IC
126 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
127 </li>
128 <li id="bip32-tab">
129 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
130 </li>
131 </ul>
132 <div class="derivation-type tab-content">
d5dc92fd 133 <div id="bip44" class="tab-pane active">
ab78acc6
IC
134 <form class="form-horizontal" role="form">
135 <br>
136 <div class="col-sm-2"></div>
137 <div class="col-sm-10">
138 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
139 </div>
140 <div class="form-group">
141 <label for="purpose" class="col-sm-2 control-label">
142 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
143 </label>
144 <div class="col-sm-10">
145 <input id="purpose" type="text" class="purpose form-control" value="44">
146 </div>
147 </div>
148 <div class="form-group">
149 <label for="coin" class="col-sm-2 control-label">
150 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
151 </label>
152 <div class="col-sm-10">
153 <input id="coin" type="text" class="coin form-control" value="0">
154 </div>
155 </div>
156 <div class="form-group">
157 <label for="account" class="col-sm-2 control-label">
158 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
159 </label>
160 <div class="col-sm-10">
161 <input id="account" type="text" class="account form-control" value="0">
162 </div>
163 </div>
164 <div class="form-group">
165 <label for="change" class="col-sm-2 control-label">
166 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
167 </label>
168 <div class="col-sm-10">
169 <input id="change" type="text" class="change form-control" value="0">
170 </div>
171 </div>
172 <div class="form-group">
173 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
174 <div class="col-sm-10">
175 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
176 </div>
177 </div>
178 </form>
179 </div>
180 <div id="bip32" class="tab-pane">
181 <form class="form-horizontal" role="form">
182 <br>
183 <div class="col-sm-2"></div>
184 <div class="col-sm-10">
185 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
186 </div>
187 <div class="form-group">
188 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
189 <div class="col-sm-10">
190 <input id="bip32-path" type="text" class="path form-control" value="m/0">
191 </div>
192 </div>
1975bfbc
IC
193 <div class="form-group">
194 <div class="col-sm-2"></div>
195 <label class="col-sm-10">
196 <input class="hardened-addresses" type="checkbox">
197 Use hardened addresses
198 </label>
199 </div>
d5dc92fd
IC
200 <div class="form-group">
201 <label class="col-sm-2 control-label">Hive Wallet</label>
202 <div class="col-sm-10">
203 <p class="form-control no-border">
204 Use path <code>m/0'/0</code>.
205 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
206 </p>
207 </div>
208 </div>
209 <div class="form-group">
210 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
211 <div class="col-sm-10">
212 <p class="form-control no-border">
213 Use path <code>m/44'/0'/0'/0</code>.
214 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
215 </p>
216 </div>
217 </div>
1975bfbc
IC
218 <div class="form-group">
219 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
220 <div class="col-sm-10">
221 <p class="form-control no-border">
222 Use path <code>m/0'/0'</code> with hardened addresses.
223 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
224 </p>
225 </div>
226 </div>
aa51da11
IC
227 <div class="form-group">
228 <label class="col-sm-2 control-label">Block Explorers</label>
229 <div class="col-sm-10">
230 <p class="form-control no-border">
231 Use path <code>m/44'/0'/0'</code>.
232 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
233 </p>
234 </div>
235 </div>
ab78acc6
IC
236 </form>
237 </div>
238 </div>
239 <form class="form-horizontal" role="form">
240 <div class="form-group">
241 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
242 <div class="col-sm-10">
243 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
244 </div>
245 </div>
246 <div class="form-group">
247 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
248 <div class="col-sm-10">
249 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
250 </div>
251 </div>
252 </form>
253 </div>
254 </div>
3af2954a 255
ab78acc6 256 <hr>
3af2954a 257
ab78acc6
IC
258 <div class="row">
259 <div class="col-md-12">
260 <h2>Derived Addresses</h2>
261 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
262 <table class="table table-striped">
263 <thead>
264 <th>
265 <div class="input-group">
ae30fed8 266 Path&nbsp;&nbsp;
ab78acc6
IC
267 <button class="index-toggle">Toggle</button>
268 </div>
269 </th>
270 <th>
271 <div class="input-group">
272 Address&nbsp;&nbsp;
273 <button class="address-toggle">Toggle</button>
274 </div>
275 </th>
276 <th>
277 <div class="input-group">
278 Private Key&nbsp;&nbsp;
279 <button class="private-key-toggle">Toggle</button>
280 </div>
281 </th>
282 </thead>
283 <tbody class="addresses">
284 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
285 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
286 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
287 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
288 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
289 </tbody>
290 </table>
291 </div>
292 </div>
293 <span>Show next </button>
294 <input type="number" class="rows-to-add" value="20">
295 <button class="more">Show</button>
3af2954a 296
ab78acc6 297 <hr>
3af2954a 298
ab78acc6
IC
299 <div class="row">
300 <div class="col-md-12">
301 <h2>More info</h2>
302 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
303 <p>
304 Read more at the
305 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
306 </p>
307 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
308 <p>
309 Read more at the
310 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
311 and see the demo at
312 <a href="http://bip32.org/" target="_blank">bip32.org</a>
313 </p>
314 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
315 <p>
316 Read more at the
317 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
318 </p>
319 <h3>Private Keys</h3>
320 <p>
321 Use private keys at
322 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
323 but be careful - it can be easy to make mistakes if you
324 don't know what you're doing
325 </p>
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>Offline Usage</h2>
3af2954a 335
ab78acc6
IC
336 <p>
337 You can use this tool without having to be online.
338 </p>
339 <p>
340 In your browser, select file save-as, and save this page
341 as a file.
342 </p>
343 <p>
344 Double-click that file to open it in a browser
345 on any offline computer.
346 </p>
347 <p>
348 Alternatively, download it from
349 <a href="https://github.com/dcpos/bip39">
350 https://github.com/dcpos/bip39
351 </a>
3af2954a 352
ab78acc6
IC
353 </div>
354 </div>
3af2954a 355
ab78acc6 356 <hr>
3af2954a 357
ab78acc6
IC
358 <div class="row">
359 <div class="col-md-12">
3af2954a 360
ab78acc6 361 <h2>This project is 100% open-source code</h2>
3af2954a 362
ab78acc6
IC
363 <p>
364 <span>Get the source code at - </span>
365 <a href="https://github.com/dcpos/bip39" target="_blank">
366 https://github.com/dcpos/bip39
367 </a>
368 </p>
3af2954a 369
ab78acc6 370 <h3>Libraries</h3>
3af2954a 371
ab78acc6
IC
372 <p>
373 <span>BitcoinJS - </span>
374 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
375 https://github.com/bitcoinjs/bitcoinjs-lib
376 </a>
377 </p>
3af2954a 378
ab78acc6
IC
379 <p>
380 <span>jsBIP39 - </span>
381 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
382 https://github.com/iancoleman/jsbip39
383 </a>
384 </p>
3af2954a 385
ab78acc6
IC
386 <p>
387 <span>sjcl - </span>
388 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
389 https://github.com/bitwiseshiftleft/sjcl
390 </a>
391 </p>
3af2954a 392
ab78acc6
IC
393 <p>
394 <span>jQuery - </span>
395 <a href="https://jquery.com/" target="_blank">
396 https://jquery.com/
397 </a>
398 </p>
3af2954a 399
ab78acc6
IC
400 <p>
401 <span>Twitter Bootstrap - </span>
402 <a href="http://getbootstrap.com/" target="_blank">
403 http://getbootstrap.com/
404 </a>
405 </p>
3af2954a 406
ab78acc6
IC
407 </div>
408 </div>
3af2954a 409
ab78acc6 410 </div>
3af2954a 411
ab78acc6
IC
412 <div class="feedback-container">
413 <div class="feedback">Loading...</div>
414 </div>
3af2954a 415
ab78acc6
IC
416 <script type="text/template" id="address-row-template">
417 <tr>
418 <td class="index"><span></span></td>
419 <td class="address"><span></span></td>
420 <td class="privkey"><span></span></td>
421 </tr>
422 </script>
423 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
424!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)
425},_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))
426},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});
427</script>
428 <script>/*!
429 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
430 * Copyright 2011-2014 Twitter, Inc.
431 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
432 */
433if("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>
563e401a
IC
434 <script>(function() {
435 'use strict';
436
437 /**
438 * Extend an Object with another Object's properties.
439 *
440 * The source objects are specified as additional arguments.
441 *
442 * @param dst Object the object to extend.
443 *
444 * @return Object the final object.
445 */
446 var _extend = function(dst) {
447 var sources = Array.prototype.slice.call(arguments, 1);
448 for (var i=0; i<sources.length; ++i) {
449 var src = sources[i];
450 for (var p in src) {
451 if (src.hasOwnProperty(p)) dst[p] = src[p];
452 }
453 }
454 return dst;
455 };
456
457
458 /**
459 * Defer execution of given function.
460 * @param {Function} func
461 */
462 var _defer = function(func) {
463 if (typeof setImmediate === 'function') {
464 return setImmediate(func);
465 } else {
466 return setTimeout(func, 0);
467 }
468 };
469
470 /**
471 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
472 */
473 var Levenshtein = {
474 /**
475 * Calculate levenshtein distance of the two strings.
476 *
477 * @param str1 String the first string.
478 * @param str2 String the second string.
479 * @return Integer the levenshtein distance (0 and above).
480 */
481 get: function(str1, str2) {
482 // base cases
483 if (str1 === str2) return 0;
484 if (str1.length === 0) return str2.length;
485 if (str2.length === 0) return str1.length;
486
487 // two rows
488 var prevRow = new Array(str2.length + 1),
489 curCol, nextCol, i, j, tmp;
490
491 // initialise previous row
492 for (i=0; i<prevRow.length; ++i) {
493 prevRow[i] = i;
494 }
495
496 // calculate current row distance from previous row
497 for (i=0; i<str1.length; ++i) {
498 nextCol = i + 1;
499
500 for (j=0; j<str2.length; ++j) {
501 curCol = nextCol;
502
503 // substution
504 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
505 // insertion
506 tmp = curCol + 1;
507 if (nextCol > tmp) {
508 nextCol = tmp;
509 }
510 // deletion
511 tmp = prevRow[j + 1] + 1;
512 if (nextCol > tmp) {
513 nextCol = tmp;
514 }
515
516 // copy current col value into previous (in preparation for next iteration)
517 prevRow[j] = curCol;
518 }
519
520 // copy last col value into previous (in preparation for next iteration)
521 prevRow[j] = nextCol;
522 }
523
524 return nextCol;
525 },
526
527 /**
528 * Asynchronously calculate levenshtein distance of the two strings.
529 *
530 * @param str1 String the first string.
531 * @param str2 String the second string.
532 * @param cb Function callback function with signature: function(Error err, int distance)
533 * @param [options] Object additional options.
534 * @param [options.progress] Function progress callback with signature: function(percentComplete)
535 */
536 getAsync: function(str1, str2, cb, options) {
537 options = _extend({}, {
538 progress: null
539 }, options);
540
541 // base cases
542 if (str1 === str2) return cb(null, 0);
543 if (str1.length === 0) return cb(null, str2.length);
544 if (str2.length === 0) return cb(null, str1.length);
545
546 // two rows
547 var prevRow = new Array(str2.length + 1),
548 curCol, nextCol,
549 i, j, tmp,
550 startTime, currentTime;
551
552 // initialise previous row
553 for (i=0; i<prevRow.length; ++i) {
554 prevRow[i] = i;
555 }
556
557 nextCol = 1;
558 i = 0;
559 j = -1;
560
561 var __calculate = function() {
562 // reset timer
563 startTime = new Date().valueOf();
564 currentTime = startTime;
565
566 // keep going until one second has elapsed
567 while (currentTime - startTime < 1000) {
568 // reached end of current row?
569 if (str2.length <= (++j)) {
570 // copy current into previous (in preparation for next iteration)
571 prevRow[j] = nextCol;
572
573 // if already done all chars
574 if (str1.length <= (++i)) {
575 return cb(null, nextCol);
576 }
577 // else if we have more left to do
578 else {
579 nextCol = i + 1;
580 j = 0;
581 }
582 }
583
584 // calculation
585 curCol = nextCol;
586
587 // substution
588 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
589 // insertion
590 tmp = curCol + 1;
591 if (nextCol > tmp) {
592 nextCol = tmp;
593 }
594 // deletion
595 tmp = prevRow[j + 1] + 1;
596 if (nextCol > tmp) {
597 nextCol = tmp;
598 }
599
600 // copy current into previous (in preparation for next iteration)
601 prevRow[j] = curCol;
602
603 // get current time
604 currentTime = new Date().valueOf();
605 }
606
607 // send a progress update?
608 if (null !== options.progress) {
609 try {
610 options.progress.call(null, (i * 100.0/ str1.length));
611 } catch (err) {
612 return cb('Progress callback: ' + err.toString());
613 }
614 }
615
616 // next iteration
617 _defer(__calculate);
618 };
619
620 __calculate();
621 }
622
623 };
624
625 // amd
626 if (typeof define !== "undefined" && define !== null && define.amd) {
627 define(function() {
628 return Levenshtein;
629 });
630 }
631 // commonjs
632 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
633 module.exports = Levenshtein;
634 }
635 // web worker
636 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
637 self.Levenshtein = Levenshtein;
638 }
639 // browser main thread
640 else if (typeof window !== "undefined" && window !== null) {
641 window.Levenshtein = Levenshtein;
642 }
643}());
644
645</script>
ab78acc6
IC
646 <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){
647// (public) Constructor
648function BigInteger(a, b, c) {
649 if (!(this instanceof BigInteger))
650 return new BigInteger(a, b, c)
3af2954a 651
ab78acc6
IC
652 if (a != null) {
653 if ("number" == typeof a) this.fromNumber(a, b, c)
654 else if (b == null && "string" != typeof a) this.fromString(a, 256)
655 else this.fromString(a, b)
656 }
657}
3af2954a 658
ab78acc6 659var proto = BigInteger.prototype
3af2954a 660
ab78acc6
IC
661// duck-typed isBigInteger
662proto.__bigi = require('../package.json').version
663BigInteger.isBigInteger = function (obj, check_ver) {
664 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
665}
3af2954a 666
ab78acc6
IC
667// Bits per digit
668var dbits
3af2954a 669
ab78acc6
IC
670// am: Compute w_j += (x*this_i), propagate carries,
671// c is initial carry, returns final carry.
672// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
673// We need to select the fastest one that works in this environment.
3af2954a 674
ab78acc6
IC
675// am1: use a single mult and divide to get the high bits,
676// max digit bits should be 26 because
677// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
678function am1(i, x, w, j, c, n) {
679 while (--n >= 0) {
680 var v = x * this[i++] + w[j] + c
681 c = Math.floor(v / 0x4000000)
682 w[j++] = v & 0x3ffffff
3af2954a 683 }
ab78acc6
IC
684 return c
685}
686// am2 avoids a big mult-and-extract completely.
687// Max digit bits should be <= 30 because we do bitwise ops
688// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
689function am2(i, x, w, j, c, n) {
690 var xl = x & 0x7fff,
691 xh = x >> 15
692 while (--n >= 0) {
693 var l = this[i] & 0x7fff
694 var h = this[i++] >> 15
695 var m = xh * l + h * xl
696 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
697 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
698 w[j++] = l & 0x3fffffff
699 }
700 return c
701}
702// Alternately, set max digit bits to 28 since some
703// browsers slow down when dealing with 32-bit numbers.
704function am3(i, x, w, j, c, n) {
705 var xl = x & 0x3fff,
706 xh = x >> 14
707 while (--n >= 0) {
708 var l = this[i] & 0x3fff
709 var h = this[i++] >> 14
710 var m = xh * l + h * xl
711 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
712 c = (l >> 28) + (m >> 14) + xh * h
713 w[j++] = l & 0xfffffff
3af2954a 714 }
ab78acc6
IC
715 return c
716}
3af2954a 717
ab78acc6
IC
718// wtf?
719BigInteger.prototype.am = am1
720dbits = 26
3af2954a 721
ab78acc6
IC
722BigInteger.prototype.DB = dbits
723BigInteger.prototype.DM = ((1 << dbits) - 1)
724var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 725
ab78acc6
IC
726var BI_FP = 52
727BigInteger.prototype.FV = Math.pow(2, BI_FP)
728BigInteger.prototype.F1 = BI_FP - dbits
729BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 730
ab78acc6
IC
731// Digit conversions
732var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
733var BI_RC = new Array()
734var rr, vv
735rr = "0".charCodeAt(0)
736for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
737rr = "a".charCodeAt(0)
738for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
739rr = "A".charCodeAt(0)
740for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 741
ab78acc6
IC
742function int2char(n) {
743 return BI_RM.charAt(n)
744}
3af2954a 745
ab78acc6
IC
746function intAt(s, i) {
747 var c = BI_RC[s.charCodeAt(i)]
748 return (c == null) ? -1 : c
749}
3af2954a 750
ab78acc6
IC
751// (protected) copy this to r
752function bnpCopyTo(r) {
753 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
754 r.t = this.t
755 r.s = this.s
756}
3af2954a 757
ab78acc6
IC
758// (protected) set from integer value x, -DV <= x < DV
759function bnpFromInt(x) {
760 this.t = 1
761 this.s = (x < 0) ? -1 : 0
762 if (x > 0) this[0] = x
763 else if (x < -1) this[0] = x + DV
764 else this.t = 0
765}
3af2954a 766
ab78acc6
IC
767// return bigint initialized to value
768function nbv(i) {
769 var r = new BigInteger()
770 r.fromInt(i)
771 return r
772}
3af2954a 773
ab78acc6
IC
774// (protected) set from string and radix
775function bnpFromString(s, b) {
776 var self = this
3af2954a 777
ab78acc6
IC
778 var k
779 if (b == 16) k = 4
780 else if (b == 8) k = 3
781 else if (b == 256) k = 8; // byte array
782 else if (b == 2) k = 1
783 else if (b == 32) k = 5
784 else if (b == 4) k = 2
785 else {
786 self.fromRadix(s, b)
787 return
788 }
789 self.t = 0
790 self.s = 0
791 var i = s.length,
792 mi = false,
793 sh = 0
794 while (--i >= 0) {
795 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
796 if (x < 0) {
797 if (s.charAt(i) == "-") mi = true
798 continue
799 }
800 mi = false
801 if (sh == 0)
802 self[self.t++] = x
803 else if (sh + k > self.DB) {
804 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
805 self[self.t++] = (x >> (self.DB - sh))
806 } else
807 self[self.t - 1] |= x << sh
808 sh += k
809 if (sh >= self.DB) sh -= self.DB
810 }
811 if (k == 8 && (s[0] & 0x80) != 0) {
812 self.s = -1
813 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
814 }
815 self.clamp()
816 if (mi) BigInteger.ZERO.subTo(self, self)
817}
3af2954a 818
ab78acc6
IC
819// (protected) clamp off excess high words
820function bnpClamp() {
821 var c = this.s & this.DM
822 while (this.t > 0 && this[this.t - 1] == c)--this.t
823}
3af2954a 824
ab78acc6
IC
825// (public) return string representation in given radix
826function bnToString(b) {
827 var self = this
828 if (self.s < 0) return "-" + self.negate()
829 .toString(b)
830 var k
831 if (b == 16) k = 4
832 else if (b == 8) k = 3
833 else if (b == 2) k = 1
834 else if (b == 32) k = 5
835 else if (b == 4) k = 2
836 else return self.toRadix(b)
837 var km = (1 << k) - 1,
838 d, m = false,
839 r = "",
840 i = self.t
841 var p = self.DB - (i * self.DB) % k
842 if (i-- > 0) {
843 if (p < self.DB && (d = self[i] >> p) > 0) {
844 m = true
845 r = int2char(d)
846 }
847 while (i >= 0) {
848 if (p < k) {
849 d = (self[i] & ((1 << p) - 1)) << (k - p)
850 d |= self[--i] >> (p += self.DB - k)
851 } else {
852 d = (self[i] >> (p -= k)) & km
853 if (p <= 0) {
854 p += self.DB
855 --i
856 }
857 }
858 if (d > 0) m = true
859 if (m) r += int2char(d)
3af2954a 860 }
3af2954a 861 }
ab78acc6
IC
862 return m ? r : "0"
863}
3af2954a 864
ab78acc6
IC
865// (public) -this
866function bnNegate() {
867 var r = new BigInteger()
868 BigInteger.ZERO.subTo(this, r)
869 return r
870}
3af2954a 871
ab78acc6
IC
872// (public) |this|
873function bnAbs() {
874 return (this.s < 0) ? this.negate() : this
875}
3af2954a 876
ab78acc6
IC
877// (public) return + if this > a, - if this < a, 0 if equal
878function bnCompareTo(a) {
879 var r = this.s - a.s
880 if (r != 0) return r
881 var i = this.t
882 r = i - a.t
883 if (r != 0) return (this.s < 0) ? -r : r
884 while (--i >= 0)
885 if ((r = this[i] - a[i]) != 0) return r
886 return 0
887}
3af2954a 888
ab78acc6
IC
889// returns bit length of the integer x
890function nbits(x) {
891 var r = 1,
892 t
893 if ((t = x >>> 16) != 0) {
894 x = t
895 r += 16
896 }
897 if ((t = x >> 8) != 0) {
898 x = t
899 r += 8
900 }
901 if ((t = x >> 4) != 0) {
902 x = t
903 r += 4
904 }
905 if ((t = x >> 2) != 0) {
906 x = t
907 r += 2
3af2954a 908 }
ab78acc6
IC
909 if ((t = x >> 1) != 0) {
910 x = t
911 r += 1
912 }
913 return r
914}
915
916// (public) return the number of bits in "this"
917function bnBitLength() {
918 if (this.t <= 0) return 0
919 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
920}
3af2954a 921
ab78acc6
IC
922// (public) return the number of bytes in "this"
923function bnByteLength() {
924 return this.bitLength() >> 3
925}
3af2954a 926
ab78acc6
IC
927// (protected) r = this << n*DB
928function bnpDLShiftTo(n, r) {
929 var i
930 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
931 for (i = n - 1; i >= 0; --i) r[i] = 0
932 r.t = this.t + n
933 r.s = this.s
934}
3af2954a 935
ab78acc6
IC
936// (protected) r = this >> n*DB
937function bnpDRShiftTo(n, r) {
938 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
939 r.t = Math.max(this.t - n, 0)
940 r.s = this.s
941}
3af2954a 942
ab78acc6
IC
943// (protected) r = this << n
944function bnpLShiftTo(n, r) {
945 var self = this
946 var bs = n % self.DB
947 var cbs = self.DB - bs
948 var bm = (1 << cbs) - 1
949 var ds = Math.floor(n / self.DB),
950 c = (self.s << bs) & self.DM,
951 i
952 for (i = self.t - 1; i >= 0; --i) {
953 r[i + ds + 1] = (self[i] >> cbs) | c
954 c = (self[i] & bm) << bs
955 }
956 for (i = ds - 1; i >= 0; --i) r[i] = 0
957 r[ds] = c
958 r.t = self.t + ds + 1
959 r.s = self.s
960 r.clamp()
961}
3af2954a 962
ab78acc6
IC
963// (protected) r = this >> n
964function bnpRShiftTo(n, r) {
965 var self = this
966 r.s = self.s
967 var ds = Math.floor(n / self.DB)
968 if (ds >= self.t) {
969 r.t = 0
970 return
3af2954a 971 }
ab78acc6
IC
972 var bs = n % self.DB
973 var cbs = self.DB - bs
974 var bm = (1 << bs) - 1
975 r[0] = self[ds] >> bs
976 for (var i = ds + 1; i < self.t; ++i) {
977 r[i - ds - 1] |= (self[i] & bm) << cbs
978 r[i - ds] = self[i] >> bs
979 }
980 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
981 r.t = self.t - ds
982 r.clamp()
983}
3af2954a 984
ab78acc6
IC
985// (protected) r = this - a
986function bnpSubTo(a, r) {
987 var self = this
988 var i = 0,
989 c = 0,
990 m = Math.min(a.t, self.t)
991 while (i < m) {
992 c += self[i] - a[i]
993 r[i++] = c & self.DM
994 c >>= self.DB
995 }
996 if (a.t < self.t) {
997 c -= a.s
998 while (i < self.t) {
999 c += self[i]
1000 r[i++] = c & self.DM
1001 c >>= self.DB
1002 }
1003 c += self.s
1004 } else {
1005 c += self.s
1006 while (i < a.t) {
1007 c -= a[i]
1008 r[i++] = c & self.DM
1009 c >>= self.DB
1010 }
1011 c -= a.s
1012 }
1013 r.s = (c < 0) ? -1 : 0
1014 if (c < -1) r[i++] = self.DV + c
1015 else if (c > 0) r[i++] = c
1016 r.t = i
1017 r.clamp()
1018}
3af2954a 1019
ab78acc6
IC
1020// (protected) r = this * a, r != this,a (HAC 14.12)
1021// "this" should be the larger one if appropriate.
1022function bnpMultiplyTo(a, r) {
1023 var x = this.abs(),
1024 y = a.abs()
1025 var i = x.t
1026 r.t = i + y.t
1027 while (--i >= 0) r[i] = 0
1028 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1029 r.s = 0
1030 r.clamp()
1031 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1032}
3af2954a 1033
ab78acc6
IC
1034// (protected) r = this^2, r != this (HAC 14.16)
1035function bnpSquareTo(r) {
1036 var x = this.abs()
1037 var i = r.t = 2 * x.t
1038 while (--i >= 0) r[i] = 0
1039 for (i = 0; i < x.t - 1; ++i) {
1040 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1041 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1042 r[i + x.t] -= x.DV
1043 r[i + x.t + 1] = 1
1044 }
1045 }
1046 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1047 r.s = 0
1048 r.clamp()
1049}
3af2954a 1050
ab78acc6
IC
1051// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1052// r != q, this != m. q or r may be null.
1053function bnpDivRemTo(m, q, r) {
1054 var self = this
1055 var pm = m.abs()
1056 if (pm.t <= 0) return
1057 var pt = self.abs()
1058 if (pt.t < pm.t) {
1059 if (q != null) q.fromInt(0)
1060 if (r != null) self.copyTo(r)
1061 return
1062 }
1063 if (r == null) r = new BigInteger()
1064 var y = new BigInteger(),
1065 ts = self.s,
1066 ms = m.s
1067 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1068 if (nsh > 0) {
1069 pm.lShiftTo(nsh, y)
1070 pt.lShiftTo(nsh, r)
1071 } else {
1072 pm.copyTo(y)
1073 pt.copyTo(r)
1074 }
1075 var ys = y.t
1076 var y0 = y[ys - 1]
1077 if (y0 == 0) return
1078 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1079 var d1 = self.FV / yt,
1080 d2 = (1 << self.F1) / yt,
1081 e = 1 << self.F2
1082 var i = r.t,
1083 j = i - ys,
1084 t = (q == null) ? new BigInteger() : q
1085 y.dlShiftTo(j, t)
1086 if (r.compareTo(t) >= 0) {
1087 r[r.t++] = 1
1088 r.subTo(t, r)
1089 }
1090 BigInteger.ONE.dlShiftTo(ys, t)
1091 t.subTo(y, y); // "negative" y so we can replace sub with am later
1092 while (y.t < ys) y[y.t++] = 0
1093 while (--j >= 0) {
1094 // Estimate quotient digit
1095 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1096 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1097 y.dlShiftTo(j, t)
1098 r.subTo(t, r)
1099 while (r[i] < --qd) r.subTo(t, r)
3af2954a 1100 }
ab78acc6
IC
1101 }
1102 if (q != null) {
1103 r.drShiftTo(ys, q)
1104 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1105 }
1106 r.t = ys
1107 r.clamp()
1108 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1109 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1110}
3af2954a 1111
ab78acc6
IC
1112// (public) this mod a
1113function bnMod(a) {
1114 var r = new BigInteger()
1115 this.abs()
1116 .divRemTo(a, null, r)
1117 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1118 return r
1119}
3af2954a 1120
ab78acc6
IC
1121// Modular reduction using "classic" algorithm
1122function Classic(m) {
1123 this.m = m
1124}
3af2954a 1125
ab78acc6
IC
1126function cConvert(x) {
1127 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1128 else return x
1129}
1130
1131function cRevert(x) {
1132 return x
1133}
3af2954a 1134
ab78acc6
IC
1135function cReduce(x) {
1136 x.divRemTo(this.m, null, x)
1137}
3af2954a 1138
ab78acc6
IC
1139function cMulTo(x, y, r) {
1140 x.multiplyTo(y, r)
1141 this.reduce(r)
1142}
3af2954a 1143
ab78acc6
IC
1144function cSqrTo(x, r) {
1145 x.squareTo(r)
1146 this.reduce(r)
1147}
3af2954a 1148
ab78acc6
IC
1149Classic.prototype.convert = cConvert
1150Classic.prototype.revert = cRevert
1151Classic.prototype.reduce = cReduce
1152Classic.prototype.mulTo = cMulTo
1153Classic.prototype.sqrTo = cSqrTo
3af2954a 1154
ab78acc6
IC
1155// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1156// justification:
1157// xy == 1 (mod m)
1158// xy = 1+km
1159// xy(2-xy) = (1+km)(1-km)
1160// x[y(2-xy)] = 1-k^2m^2
1161// x[y(2-xy)] == 1 (mod m^2)
1162// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1163// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1164// JS multiply "overflows" differently from C/C++, so care is needed here.
1165function bnpInvDigit() {
1166 if (this.t < 1) return 0
1167 var x = this[0]
1168 if ((x & 1) == 0) return 0
1169 var y = x & 3; // y == 1/x mod 2^2
1170 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1171 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1172 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1173 // last step - calculate inverse mod DV directly
1174 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1175 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1176 // we really want the negative inverse, and -DV < y < DV
1177 return (y > 0) ? this.DV - y : -y
1178}
3af2954a 1179
ab78acc6
IC
1180// Montgomery reduction
1181function Montgomery(m) {
1182 this.m = m
1183 this.mp = m.invDigit()
1184 this.mpl = this.mp & 0x7fff
1185 this.mph = this.mp >> 15
1186 this.um = (1 << (m.DB - 15)) - 1
1187 this.mt2 = 2 * m.t
1188}
3af2954a 1189
ab78acc6
IC
1190// xR mod m
1191function montConvert(x) {
1192 var r = new BigInteger()
1193 x.abs()
1194 .dlShiftTo(this.m.t, r)
1195 r.divRemTo(this.m, null, r)
1196 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1197 return r
1198}
3af2954a 1199
ab78acc6
IC
1200// x/R mod m
1201function montRevert(x) {
1202 var r = new BigInteger()
1203 x.copyTo(r)
1204 this.reduce(r)
1205 return r
1206}
3af2954a 1207
ab78acc6
IC
1208// x = x/R mod m (HAC 14.32)
1209function montReduce(x) {
1210 while (x.t <= this.mt2) // pad x so am has enough room later
1211 x[x.t++] = 0
1212 for (var i = 0; i < this.m.t; ++i) {
1213 // faster way of calculating u0 = x[i]*mp mod DV
1214 var j = x[i] & 0x7fff
1215 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1216 // use am to combine the multiply-shift-add into one call
1217 j = i + this.m.t
1218 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1219 // propagate carry
1220 while (x[j] >= x.DV) {
1221 x[j] -= x.DV
1222 x[++j]++
1223 }
1224 }
1225 x.clamp()
1226 x.drShiftTo(this.m.t, x)
1227 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1228}
3af2954a 1229
ab78acc6
IC
1230// r = "x^2/R mod m"; x != r
1231function montSqrTo(x, r) {
1232 x.squareTo(r)
1233 this.reduce(r)
1234}
3af2954a 1235
ab78acc6
IC
1236// r = "xy/R mod m"; x,y != r
1237function montMulTo(x, y, r) {
1238 x.multiplyTo(y, r)
1239 this.reduce(r)
1240}
3af2954a 1241
ab78acc6
IC
1242Montgomery.prototype.convert = montConvert
1243Montgomery.prototype.revert = montRevert
1244Montgomery.prototype.reduce = montReduce
1245Montgomery.prototype.mulTo = montMulTo
1246Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1247
ab78acc6
IC
1248// (protected) true iff this is even
1249function bnpIsEven() {
1250 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1251}
3af2954a 1252
ab78acc6
IC
1253// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1254function bnpExp(e, z) {
1255 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1256 var r = new BigInteger(),
1257 r2 = new BigInteger(),
1258 g = z.convert(this),
1259 i = nbits(e) - 1
1260 g.copyTo(r)
1261 while (--i >= 0) {
1262 z.sqrTo(r, r2)
1263 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1264 else {
1265 var t = r
1266 r = r2
1267 r2 = t
3af2954a 1268 }
3af2954a 1269 }
ab78acc6
IC
1270 return z.revert(r)
1271}
3af2954a 1272
ab78acc6
IC
1273// (public) this^e % m, 0 <= e < 2^32
1274function bnModPowInt(e, m) {
1275 var z
1276 if (e < 256 || m.isEven()) z = new Classic(m)
1277 else z = new Montgomery(m)
1278 return this.exp(e, z)
1279}
3af2954a 1280
ab78acc6
IC
1281// protected
1282proto.copyTo = bnpCopyTo
1283proto.fromInt = bnpFromInt
1284proto.fromString = bnpFromString
1285proto.clamp = bnpClamp
1286proto.dlShiftTo = bnpDLShiftTo
1287proto.drShiftTo = bnpDRShiftTo
1288proto.lShiftTo = bnpLShiftTo
1289proto.rShiftTo = bnpRShiftTo
1290proto.subTo = bnpSubTo
1291proto.multiplyTo = bnpMultiplyTo
1292proto.squareTo = bnpSquareTo
1293proto.divRemTo = bnpDivRemTo
1294proto.invDigit = bnpInvDigit
1295proto.isEven = bnpIsEven
1296proto.exp = bnpExp
3af2954a 1297
ab78acc6
IC
1298// public
1299proto.toString = bnToString
1300proto.negate = bnNegate
1301proto.abs = bnAbs
1302proto.compareTo = bnCompareTo
1303proto.bitLength = bnBitLength
1304proto.byteLength = bnByteLength
1305proto.mod = bnMod
1306proto.modPowInt = bnModPowInt
3af2954a 1307
ab78acc6
IC
1308// (public)
1309function bnClone() {
1310 var r = new BigInteger()
1311 this.copyTo(r)
1312 return r
1313}
3af2954a 1314
ab78acc6
IC
1315// (public) return value as integer
1316function bnIntValue() {
1317 if (this.s < 0) {
1318 if (this.t == 1) return this[0] - this.DV
1319 else if (this.t == 0) return -1
1320 } else if (this.t == 1) return this[0]
1321 else if (this.t == 0) return 0
1322 // assumes 16 < DB < 32
1323 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1324}
3af2954a 1325
ab78acc6
IC
1326// (public) return value as byte
1327function bnByteValue() {
1328 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1329}
3af2954a 1330
ab78acc6
IC
1331// (public) return value as short (assumes DB>=16)
1332function bnShortValue() {
1333 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1334}
3af2954a 1335
ab78acc6
IC
1336// (protected) return x s.t. r^x < DV
1337function bnpChunkSize(r) {
1338 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1339}
3af2954a 1340
ab78acc6
IC
1341// (public) 0 if this == 0, 1 if this > 0
1342function bnSigNum() {
1343 if (this.s < 0) return -1
1344 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1345 else return 1
1346}
3af2954a 1347
ab78acc6
IC
1348// (protected) convert to radix string
1349function bnpToRadix(b) {
1350 if (b == null) b = 10
1351 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1352 var cs = this.chunkSize(b)
1353 var a = Math.pow(b, cs)
1354 var d = nbv(a),
1355 y = new BigInteger(),
1356 z = new BigInteger(),
1357 r = ""
1358 this.divRemTo(d, y, z)
1359 while (y.signum() > 0) {
1360 r = (a + z.intValue())
1361 .toString(b)
1362 .substr(1) + r
1363 y.divRemTo(d, y, z)
1364 }
1365 return z.intValue()
1366 .toString(b) + r
1367}
3af2954a 1368
ab78acc6
IC
1369// (protected) convert from radix string
1370function bnpFromRadix(s, b) {
1371 var self = this
1372 self.fromInt(0)
1373 if (b == null) b = 10
1374 var cs = self.chunkSize(b)
1375 var d = Math.pow(b, cs),
1376 mi = false,
1377 j = 0,
1378 w = 0
1379 for (var i = 0; i < s.length; ++i) {
1380 var x = intAt(s, i)
1381 if (x < 0) {
1382 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1383 continue
1384 }
1385 w = b * w + x
1386 if (++j >= cs) {
1387 self.dMultiply(d)
1388 self.dAddOffset(w, 0)
1389 j = 0
1390 w = 0
1391 }
1392 }
1393 if (j > 0) {
1394 self.dMultiply(Math.pow(b, j))
1395 self.dAddOffset(w, 0)
1396 }
1397 if (mi) BigInteger.ZERO.subTo(self, self)
1398}
3af2954a 1399
ab78acc6
IC
1400// (protected) alternate constructor
1401function bnpFromNumber(a, b, c) {
1402 var self = this
1403 if ("number" == typeof b) {
1404 // new BigInteger(int,int,RNG)
1405 if (a < 2) self.fromInt(1)
1406 else {
1407 self.fromNumber(a, c)
1408 if (!self.testBit(a - 1)) // force MSB set
1409 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1410 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1411 while (!self.isProbablePrime(b)) {
1412 self.dAddOffset(2, 0)
1413 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1414 }
1415 }
1416 } else {
1417 // new BigInteger(int,RNG)
1418 var x = new Array(),
1419 t = a & 7
1420 x.length = (a >> 3) + 1
1421 b.nextBytes(x)
1422 if (t > 0) x[0] &= ((1 << t) - 1)
1423 else x[0] = 0
1424 self.fromString(x, 256)
3af2954a 1425 }
ab78acc6 1426}
3af2954a 1427
ab78acc6
IC
1428// (public) convert to bigendian byte array
1429function bnToByteArray() {
1430 var self = this
1431 var i = self.t,
1432 r = new Array()
1433 r[0] = self.s
1434 var p = self.DB - (i * self.DB) % 8,
1435 d, k = 0
1436 if (i-- > 0) {
1437 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1438 r[k++] = d | (self.s << (self.DB - p))
1439 while (i >= 0) {
1440 if (p < 8) {
1441 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1442 d |= self[--i] >> (p += self.DB - 8)
1443 } else {
1444 d = (self[i] >> (p -= 8)) & 0xff
1445 if (p <= 0) {
1446 p += self.DB
1447 --i
1448 }
1449 }
1450 if ((d & 0x80) != 0) d |= -256
1451 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1452 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1453 }
3af2954a 1454 }
ab78acc6
IC
1455 return r
1456}
3af2954a 1457
ab78acc6
IC
1458function bnEquals(a) {
1459 return (this.compareTo(a) == 0)
1460}
3af2954a 1461
ab78acc6
IC
1462function bnMin(a) {
1463 return (this.compareTo(a) < 0) ? this : a
1464}
3af2954a 1465
ab78acc6
IC
1466function bnMax(a) {
1467 return (this.compareTo(a) > 0) ? this : a
1468}
3af2954a 1469
ab78acc6
IC
1470// (protected) r = this op a (bitwise)
1471function bnpBitwiseTo(a, op, r) {
1472 var self = this
1473 var i, f, m = Math.min(a.t, self.t)
1474 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1475 if (a.t < self.t) {
1476 f = a.s & self.DM
1477 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1478 r.t = self.t
1479 } else {
1480 f = self.s & self.DM
1481 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1482 r.t = a.t
3af2954a 1483 }
ab78acc6
IC
1484 r.s = op(self.s, a.s)
1485 r.clamp()
1486}
3af2954a 1487
ab78acc6
IC
1488// (public) this & a
1489function op_and(x, y) {
1490 return x & y
1491}
3af2954a 1492
ab78acc6
IC
1493function bnAnd(a) {
1494 var r = new BigInteger()
1495 this.bitwiseTo(a, op_and, r)
1496 return r
1497}
3af2954a 1498
ab78acc6
IC
1499// (public) this | a
1500function op_or(x, y) {
1501 return x | y
1502}
3af2954a 1503
ab78acc6
IC
1504function bnOr(a) {
1505 var r = new BigInteger()
1506 this.bitwiseTo(a, op_or, r)
1507 return r
1508}
3af2954a 1509
ab78acc6
IC
1510// (public) this ^ a
1511function op_xor(x, y) {
1512 return x ^ y
1513}
3af2954a 1514
ab78acc6
IC
1515function bnXor(a) {
1516 var r = new BigInteger()
1517 this.bitwiseTo(a, op_xor, r)
1518 return r
1519}
3af2954a 1520
ab78acc6
IC
1521// (public) this & ~a
1522function op_andnot(x, y) {
1523 return x & ~y
1524}
3af2954a 1525
ab78acc6
IC
1526function bnAndNot(a) {
1527 var r = new BigInteger()
1528 this.bitwiseTo(a, op_andnot, r)
1529 return r
1530}
3af2954a 1531
ab78acc6
IC
1532// (public) ~this
1533function bnNot() {
1534 var r = new BigInteger()
1535 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1536 r.t = this.t
1537 r.s = ~this.s
1538 return r
1539}
3af2954a 1540
ab78acc6
IC
1541// (public) this << n
1542function bnShiftLeft(n) {
1543 var r = new BigInteger()
1544 if (n < 0) this.rShiftTo(-n, r)
1545 else this.lShiftTo(n, r)
1546 return r
1547}
3af2954a 1548
ab78acc6
IC
1549// (public) this >> n
1550function bnShiftRight(n) {
1551 var r = new BigInteger()
1552 if (n < 0) this.lShiftTo(-n, r)
1553 else this.rShiftTo(n, r)
1554 return r
1555}
3af2954a 1556
ab78acc6
IC
1557// return index of lowest 1-bit in x, x < 2^31
1558function lbit(x) {
1559 if (x == 0) return -1
1560 var r = 0
1561 if ((x & 0xffff) == 0) {
1562 x >>= 16
1563 r += 16
3af2954a 1564 }
ab78acc6
IC
1565 if ((x & 0xff) == 0) {
1566 x >>= 8
1567 r += 8
1568 }
1569 if ((x & 0xf) == 0) {
1570 x >>= 4
1571 r += 4
1572 }
1573 if ((x & 3) == 0) {
1574 x >>= 2
1575 r += 2
1576 }
1577 if ((x & 1) == 0)++r
1578 return r
1579}
3af2954a 1580
ab78acc6
IC
1581// (public) returns index of lowest 1-bit (or -1 if none)
1582function bnGetLowestSetBit() {
1583 for (var i = 0; i < this.t; ++i)
1584 if (this[i] != 0) return i * this.DB + lbit(this[i])
1585 if (this.s < 0) return this.t * this.DB
1586 return -1
1587}
3af2954a 1588
ab78acc6
IC
1589// return number of 1 bits in x
1590function cbit(x) {
1591 var r = 0
1592 while (x != 0) {
1593 x &= x - 1
1594 ++r
3af2954a 1595 }
ab78acc6
IC
1596 return r
1597}
3af2954a 1598
ab78acc6
IC
1599// (public) return number of set bits
1600function bnBitCount() {
1601 var r = 0,
1602 x = this.s & this.DM
1603 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1604 return r
1605}
1606
1607// (public) true iff nth bit is set
1608function bnTestBit(n) {
1609 var j = Math.floor(n / this.DB)
1610 if (j >= this.t) return (this.s != 0)
1611 return ((this[j] & (1 << (n % this.DB))) != 0)
1612}
3af2954a 1613
ab78acc6
IC
1614// (protected) this op (1<<n)
1615function bnpChangeBit(n, op) {
1616 var r = BigInteger.ONE.shiftLeft(n)
1617 this.bitwiseTo(r, op, r)
1618 return r
1619}
3af2954a 1620
ab78acc6
IC
1621// (public) this | (1<<n)
1622function bnSetBit(n) {
1623 return this.changeBit(n, op_or)
1624}
3af2954a 1625
ab78acc6
IC
1626// (public) this & ~(1<<n)
1627function bnClearBit(n) {
1628 return this.changeBit(n, op_andnot)
1629}
3af2954a 1630
ab78acc6
IC
1631// (public) this ^ (1<<n)
1632function bnFlipBit(n) {
1633 return this.changeBit(n, op_xor)
1634}
3af2954a 1635
ab78acc6
IC
1636// (protected) r = this + a
1637function bnpAddTo(a, r) {
1638 var self = this
3af2954a 1639
ab78acc6
IC
1640 var i = 0,
1641 c = 0,
1642 m = Math.min(a.t, self.t)
1643 while (i < m) {
1644 c += self[i] + a[i]
1645 r[i++] = c & self.DM
1646 c >>= self.DB
1647 }
1648 if (a.t < self.t) {
1649 c += a.s
1650 while (i < self.t) {
1651 c += self[i]
1652 r[i++] = c & self.DM
1653 c >>= self.DB
1654 }
1655 c += self.s
1656 } else {
1657 c += self.s
1658 while (i < a.t) {
1659 c += a[i]
1660 r[i++] = c & self.DM
1661 c >>= self.DB
1662 }
1663 c += a.s
1664 }
1665 r.s = (c < 0) ? -1 : 0
1666 if (c > 0) r[i++] = c
1667 else if (c < -1) r[i++] = self.DV + c
1668 r.t = i
1669 r.clamp()
1670}
3af2954a 1671
ab78acc6
IC
1672// (public) this + a
1673function bnAdd(a) {
1674 var r = new BigInteger()
1675 this.addTo(a, r)
1676 return r
1677}
3af2954a 1678
ab78acc6
IC
1679// (public) this - a
1680function bnSubtract(a) {
1681 var r = new BigInteger()
1682 this.subTo(a, r)
1683 return r
1684}
3af2954a 1685
ab78acc6
IC
1686// (public) this * a
1687function bnMultiply(a) {
1688 var r = new BigInteger()
1689 this.multiplyTo(a, r)
1690 return r
1691}
3af2954a 1692
ab78acc6
IC
1693// (public) this^2
1694function bnSquare() {
1695 var r = new BigInteger()
1696 this.squareTo(r)
1697 return r
1698}
3af2954a 1699
ab78acc6
IC
1700// (public) this / a
1701function bnDivide(a) {
1702 var r = new BigInteger()
1703 this.divRemTo(a, r, null)
1704 return r
1705}
3af2954a 1706
ab78acc6
IC
1707// (public) this % a
1708function bnRemainder(a) {
1709 var r = new BigInteger()
1710 this.divRemTo(a, null, r)
1711 return r
1712}
3af2954a 1713
ab78acc6
IC
1714// (public) [this/a,this%a]
1715function bnDivideAndRemainder(a) {
1716 var q = new BigInteger(),
1717 r = new BigInteger()
1718 this.divRemTo(a, q, r)
1719 return new Array(q, r)
1720}
3af2954a 1721
ab78acc6
IC
1722// (protected) this *= n, this >= 0, 1 < n < DV
1723function bnpDMultiply(n) {
1724 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1725 ++this.t
1726 this.clamp()
1727}
3af2954a 1728
ab78acc6
IC
1729// (protected) this += n << w words, this >= 0
1730function bnpDAddOffset(n, w) {
1731 if (n == 0) return
1732 while (this.t <= w) this[this.t++] = 0
1733 this[w] += n
1734 while (this[w] >= this.DV) {
1735 this[w] -= this.DV
1736 if (++w >= this.t) this[this.t++] = 0
1737 ++this[w]
3af2954a 1738 }
ab78acc6 1739}
3af2954a 1740
ab78acc6
IC
1741// A "null" reducer
1742function NullExp() {}
3af2954a 1743
ab78acc6
IC
1744function nNop(x) {
1745 return x
1746}
3af2954a 1747
ab78acc6
IC
1748function nMulTo(x, y, r) {
1749 x.multiplyTo(y, r)
1750}
3af2954a 1751
ab78acc6
IC
1752function nSqrTo(x, r) {
1753 x.squareTo(r)
1754}
3af2954a 1755
ab78acc6
IC
1756NullExp.prototype.convert = nNop
1757NullExp.prototype.revert = nNop
1758NullExp.prototype.mulTo = nMulTo
1759NullExp.prototype.sqrTo = nSqrTo
3af2954a 1760
ab78acc6
IC
1761// (public) this^e
1762function bnPow(e) {
1763 return this.exp(e, new NullExp())
1764}
3af2954a 1765
ab78acc6
IC
1766// (protected) r = lower n words of "this * a", a.t <= n
1767// "this" should be the larger one if appropriate.
1768function bnpMultiplyLowerTo(a, n, r) {
1769 var i = Math.min(this.t + a.t, n)
1770 r.s = 0; // assumes a,this >= 0
1771 r.t = i
1772 while (i > 0) r[--i] = 0
1773 var j
1774 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1775 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1776 r.clamp()
1777}
3af2954a 1778
ab78acc6
IC
1779// (protected) r = "this * a" without lower n words, n > 0
1780// "this" should be the larger one if appropriate.
1781function bnpMultiplyUpperTo(a, n, r) {
1782 --n
1783 var i = r.t = this.t + a.t - n
1784 r.s = 0; // assumes a,this >= 0
1785 while (--i >= 0) r[i] = 0
1786 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1787 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1788 r.clamp()
1789 r.drShiftTo(1, r)
1790}
3af2954a 1791
ab78acc6
IC
1792// Barrett modular reduction
1793function Barrett(m) {
1794 // setup Barrett
1795 this.r2 = new BigInteger()
1796 this.q3 = new BigInteger()
1797 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1798 this.mu = this.r2.divide(m)
1799 this.m = m
1800}
3af2954a 1801
ab78acc6
IC
1802function barrettConvert(x) {
1803 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1804 else if (x.compareTo(this.m) < 0) return x
1805 else {
1806 var r = new BigInteger()
1807 x.copyTo(r)
1808 this.reduce(r)
1809 return r
3af2954a 1810 }
ab78acc6 1811}
3af2954a 1812
ab78acc6
IC
1813function barrettRevert(x) {
1814 return x
1815}
3af2954a 1816
ab78acc6
IC
1817// x = x mod m (HAC 14.42)
1818function barrettReduce(x) {
1819 var self = this
1820 x.drShiftTo(self.m.t - 1, self.r2)
1821 if (x.t > self.m.t + 1) {
1822 x.t = self.m.t + 1
1823 x.clamp()
3af2954a 1824 }
ab78acc6
IC
1825 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1826 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1827 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1828 x.subTo(self.r2, x)
1829 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1830}
3af2954a 1831
ab78acc6
IC
1832// r = x^2 mod m; x != r
1833function barrettSqrTo(x, r) {
1834 x.squareTo(r)
1835 this.reduce(r)
1836}
3af2954a 1837
ab78acc6
IC
1838// r = x*y mod m; x,y != r
1839function barrettMulTo(x, y, r) {
1840 x.multiplyTo(y, r)
1841 this.reduce(r)
1842}
3af2954a 1843
ab78acc6
IC
1844Barrett.prototype.convert = barrettConvert
1845Barrett.prototype.revert = barrettRevert
1846Barrett.prototype.reduce = barrettReduce
1847Barrett.prototype.mulTo = barrettMulTo
1848Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1849
ab78acc6
IC
1850// (public) this^e % m (HAC 14.85)
1851function bnModPow(e, m) {
1852 var i = e.bitLength(),
1853 k, r = nbv(1),
1854 z
1855 if (i <= 0) return r
1856 else if (i < 18) k = 1
1857 else if (i < 48) k = 3
1858 else if (i < 144) k = 4
1859 else if (i < 768) k = 5
1860 else k = 6
1861 if (i < 8)
1862 z = new Classic(m)
1863 else if (m.isEven())
1864 z = new Barrett(m)
1865 else
1866 z = new Montgomery(m)
3af2954a 1867
ab78acc6
IC
1868 // precomputation
1869 var g = new Array(),
1870 n = 3,
1871 k1 = k - 1,
1872 km = (1 << k) - 1
1873 g[1] = z.convert(this)
1874 if (k > 1) {
1875 var g2 = new BigInteger()
1876 z.sqrTo(g[1], g2)
1877 while (n <= km) {
1878 g[n] = new BigInteger()
1879 z.mulTo(g2, g[n - 2], g[n])
1880 n += 2
1881 }
1882 }
1883
1884 var j = e.t - 1,
1885 w, is1 = true,
1886 r2 = new BigInteger(),
1887 t
1888 i = nbits(e[j]) - 1
1889 while (j >= 0) {
1890 if (i >= k1) w = (e[j] >> (i - k1)) & km
1891 else {
1892 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1893 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1894 }
3af2954a 1895
ab78acc6
IC
1896 n = k
1897 while ((w & 1) == 0) {
1898 w >>= 1
1899 --n
1900 }
1901 if ((i -= n) < 0) {
1902 i += this.DB
1903 --j
1904 }
1905 if (is1) { // ret == 1, don't bother squaring or multiplying it
1906 g[w].copyTo(r)
1907 is1 = false
1908 } else {
1909 while (n > 1) {
1910 z.sqrTo(r, r2)
1911 z.sqrTo(r2, r)
1912 n -= 2
1913 }
1914 if (n > 0) z.sqrTo(r, r2)
1915 else {
1916 t = r
1917 r = r2
1918 r2 = t
1919 }
1920 z.mulTo(r2, g[w], r)
1921 }
3af2954a 1922
ab78acc6
IC
1923 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1924 z.sqrTo(r, r2)
1925 t = r
1926 r = r2
1927 r2 = t
1928 if (--i < 0) {
1929 i = this.DB - 1
1930 --j
3af2954a 1931 }
3af2954a
IC
1932 }
1933 }
ab78acc6
IC
1934 return z.revert(r)
1935}
3af2954a 1936
ab78acc6
IC
1937// (public) gcd(this,a) (HAC 14.54)
1938function bnGCD(a) {
1939 var x = (this.s < 0) ? this.negate() : this.clone()
1940 var y = (a.s < 0) ? a.negate() : a.clone()
1941 if (x.compareTo(y) < 0) {
1942 var t = x
1943 x = y
1944 y = t
1945 }
1946 var i = x.getLowestSetBit(),
1947 g = y.getLowestSetBit()
1948 if (g < 0) return x
1949 if (i < g) g = i
1950 if (g > 0) {
1951 x.rShiftTo(g, x)
1952 y.rShiftTo(g, y)
1953 }
1954 while (x.signum() > 0) {
1955 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1956 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1957 if (x.compareTo(y) >= 0) {
1958 x.subTo(y, x)
1959 x.rShiftTo(1, x)
1960 } else {
1961 y.subTo(x, y)
1962 y.rShiftTo(1, y)
1963 }
3af2954a 1964 }
ab78acc6
IC
1965 if (g > 0) y.lShiftTo(g, y)
1966 return y
1967}
3af2954a 1968
ab78acc6
IC
1969// (protected) this % n, n < 2^26
1970function bnpModInt(n) {
1971 if (n <= 0) return 0
1972 var d = this.DV % n,
1973 r = (this.s < 0) ? n - 1 : 0
1974 if (this.t > 0)
1975 if (d == 0) r = this[0] % n
1976 else
1977 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1978 return r
1979}
3af2954a 1980
ab78acc6
IC
1981// (public) 1/this % m (HAC 14.61)
1982function bnModInverse(m) {
1983 var ac = m.isEven()
1984 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1985 var u = m.clone(),
1986 v = this.clone()
1987 var a = nbv(1),
1988 b = nbv(0),
1989 c = nbv(0),
1990 d = nbv(1)
1991 while (u.signum() != 0) {
1992 while (u.isEven()) {
1993 u.rShiftTo(1, u)
1994 if (ac) {
1995 if (!a.isEven() || !b.isEven()) {
1996 a.addTo(this, a)
1997 b.subTo(m, b)
1998 }
1999 a.rShiftTo(1, a)
2000 } else if (!b.isEven()) b.subTo(m, b)
2001 b.rShiftTo(1, b)
2002 }
2003 while (v.isEven()) {
2004 v.rShiftTo(1, v)
2005 if (ac) {
2006 if (!c.isEven() || !d.isEven()) {
2007 c.addTo(this, c)
2008 d.subTo(m, d)
2009 }
2010 c.rShiftTo(1, c)
2011 } else if (!d.isEven()) d.subTo(m, d)
2012 d.rShiftTo(1, d)
2013 }
2014 if (u.compareTo(v) >= 0) {
2015 u.subTo(v, u)
2016 if (ac) a.subTo(c, a)
2017 b.subTo(d, b)
2018 } else {
2019 v.subTo(u, v)
2020 if (ac) c.subTo(a, c)
2021 d.subTo(b, d)
2022 }
2023 }
2024 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2025 if (d.compareTo(m) >= 0) return d.subtract(m)
2026 if (d.signum() < 0) d.addTo(m, d)
2027 else return d
2028 if (d.signum() < 0) return d.add(m)
2029 else return d
2030}
2031
2032var lowprimes = [
2033 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2034 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2035 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2036 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2037 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2038 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2039 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2040 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2041 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2042 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2043 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2044]
2045
2046var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2047
2048// (public) test primality with certainty >= 1-.5^t
2049function bnIsProbablePrime(t) {
2050 var i, x = this.abs()
2051 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2052 for (i = 0; i < lowprimes.length; ++i)
2053 if (x[0] == lowprimes[i]) return true
2054 return false
3af2954a 2055 }
ab78acc6
IC
2056 if (x.isEven()) return false
2057 i = 1
2058 while (i < lowprimes.length) {
2059 var m = lowprimes[i],
2060 j = i + 1
2061 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2062 m = x.modInt(m)
2063 while (i < j) if (m % lowprimes[i++] == 0) return false
2064 }
2065 return x.millerRabin(t)
2066}
2067
2068// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2069function bnpMillerRabin(t) {
2070 var n1 = this.subtract(BigInteger.ONE)
2071 var k = n1.getLowestSetBit()
2072 if (k <= 0) return false
2073 var r = n1.shiftRight(k)
2074 t = (t + 1) >> 1
2075 if (t > lowprimes.length) t = lowprimes.length
2076 var a = new BigInteger(null)
2077 var j, bases = []
2078 for (var i = 0; i < t; ++i) {
2079 for (;;) {
2080 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2081 if (bases.indexOf(j) == -1) break
2082 }
2083 bases.push(j)
2084 a.fromInt(j)
2085 var y = a.modPow(r, this)
2086 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2087 var j = 1
2088 while (j++ < k && y.compareTo(n1) != 0) {
2089 y = y.modPowInt(2, this)
2090 if (y.compareTo(BigInteger.ONE) == 0) return false
2091 }
2092 if (y.compareTo(n1) != 0) return false
2093 }
3af2954a 2094 }
ab78acc6
IC
2095 return true
2096}
3af2954a 2097
ab78acc6
IC
2098// protected
2099proto.chunkSize = bnpChunkSize
2100proto.toRadix = bnpToRadix
2101proto.fromRadix = bnpFromRadix
2102proto.fromNumber = bnpFromNumber
2103proto.bitwiseTo = bnpBitwiseTo
2104proto.changeBit = bnpChangeBit
2105proto.addTo = bnpAddTo
2106proto.dMultiply = bnpDMultiply
2107proto.dAddOffset = bnpDAddOffset
2108proto.multiplyLowerTo = bnpMultiplyLowerTo
2109proto.multiplyUpperTo = bnpMultiplyUpperTo
2110proto.modInt = bnpModInt
2111proto.millerRabin = bnpMillerRabin
3af2954a 2112
ab78acc6
IC
2113// public
2114proto.clone = bnClone
2115proto.intValue = bnIntValue
2116proto.byteValue = bnByteValue
2117proto.shortValue = bnShortValue
2118proto.signum = bnSigNum
2119proto.toByteArray = bnToByteArray
2120proto.equals = bnEquals
2121proto.min = bnMin
2122proto.max = bnMax
2123proto.and = bnAnd
2124proto.or = bnOr
2125proto.xor = bnXor
2126proto.andNot = bnAndNot
2127proto.not = bnNot
2128proto.shiftLeft = bnShiftLeft
2129proto.shiftRight = bnShiftRight
2130proto.getLowestSetBit = bnGetLowestSetBit
2131proto.bitCount = bnBitCount
2132proto.testBit = bnTestBit
2133proto.setBit = bnSetBit
2134proto.clearBit = bnClearBit
2135proto.flipBit = bnFlipBit
2136proto.add = bnAdd
2137proto.subtract = bnSubtract
2138proto.multiply = bnMultiply
2139proto.divide = bnDivide
2140proto.remainder = bnRemainder
2141proto.divideAndRemainder = bnDivideAndRemainder
2142proto.modPow = bnModPow
2143proto.modInverse = bnModInverse
2144proto.pow = bnPow
2145proto.gcd = bnGCD
2146proto.isProbablePrime = bnIsProbablePrime
3af2954a 2147
ab78acc6
IC
2148// JSBN-specific extension
2149proto.square = bnSquare
3af2954a 2150
ab78acc6
IC
2151// constants
2152BigInteger.ZERO = nbv(0)
2153BigInteger.ONE = nbv(1)
2154BigInteger.valueOf = nbv
3af2954a 2155
ab78acc6 2156module.exports = BigInteger
3af2954a 2157
ab78acc6
IC
2158},{"../package.json":4}],2:[function(require,module,exports){
2159(function (Buffer){
2160// FIXME: Kind of a weird way to throw exceptions, consider removing
2161var assert = require('assert')
2162var BigInteger = require('./bigi')
3af2954a 2163
ab78acc6
IC
2164/**
2165 * Turns a byte array into a big integer.
2166 *
2167 * This function will interpret a byte array as a big integer in big
2168 * endian notation.
2169 */
2170BigInteger.fromByteArrayUnsigned = function(byteArray) {
2171 // BigInteger expects a DER integer conformant byte array
2172 if (byteArray[0] & 0x80) {
2173 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2174 }
2175
ab78acc6
IC
2176 return new BigInteger(byteArray)
2177}
3af2954a 2178
ab78acc6
IC
2179/**
2180 * Returns a byte array representation of the big integer.
2181 *
2182 * This returns the absolute of the contained value in big endian
2183 * form. A value of zero results in an empty array.
2184 */
2185BigInteger.prototype.toByteArrayUnsigned = function() {
2186 var byteArray = this.toByteArray()
2187 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2188}
3af2954a 2189
ab78acc6
IC
2190BigInteger.fromDERInteger = function(byteArray) {
2191 return new BigInteger(byteArray)
2192}
3af2954a 2193
ab78acc6
IC
2194/*
2195 * Converts BigInteger to a DER integer representation.
2196 *
2197 * The format for this value uses the most significant bit as a sign
2198 * bit. If the most significant bit is already set and the integer is
2199 * positive, a 0x00 is prepended.
2200 *
2201 * Examples:
2202 *
2203 * 0 => 0x00
2204 * 1 => 0x01
2205 * -1 => 0xff
2206 * 127 => 0x7f
2207 * -127 => 0x81
2208 * 128 => 0x0080
2209 * -128 => 0x80
2210 * 255 => 0x00ff
2211 * -255 => 0xff01
2212 * 16300 => 0x3fac
2213 * -16300 => 0xc054
2214 * 62300 => 0x00f35c
2215 * -62300 => 0xff0ca4
2216*/
2217BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 2218
ab78acc6
IC
2219BigInteger.fromBuffer = function(buffer) {
2220 // BigInteger expects a DER integer conformant byte array
2221 if (buffer[0] & 0x80) {
2222 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 2223
ab78acc6 2224 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2225 }
2226
ab78acc6
IC
2227 return new BigInteger(buffer)
2228}
3af2954a 2229
ab78acc6
IC
2230BigInteger.fromHex = function(hex) {
2231 if (hex === '') return BigInteger.ZERO
3af2954a 2232
ab78acc6
IC
2233 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2234 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2235 return new BigInteger(hex, 16)
2236}
3af2954a 2237
ab78acc6
IC
2238BigInteger.prototype.toBuffer = function(size) {
2239 var byteArray = this.toByteArrayUnsigned()
2240 var zeros = []
3af2954a 2241
ab78acc6
IC
2242 var padding = size - byteArray.length
2243 while (zeros.length < padding) zeros.push(0)
3af2954a 2244
ab78acc6
IC
2245 return new Buffer(zeros.concat(byteArray))
2246}
3af2954a 2247
ab78acc6
IC
2248BigInteger.prototype.toHex = function(size) {
2249 return this.toBuffer(size).toString('hex')
2250}
3af2954a 2251
ab78acc6
IC
2252}).call(this,require("buffer").Buffer)
2253},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2254var BigInteger = require('./bigi')
3af2954a 2255
ab78acc6
IC
2256//addons
2257require('./convert')
3af2954a 2258
ab78acc6
IC
2259module.exports = BigInteger
2260},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2261module.exports={
2262 "name": "bigi",
2263 "version": "1.4.0",
2264 "description": "Big integers.",
2265 "keywords": [
2266 "cryptography",
2267 "math",
2268 "bitcoin",
2269 "arbitrary",
2270 "precision",
2271 "arithmetic",
2272 "big",
2273 "integer",
2274 "int",
2275 "number",
2276 "biginteger",
2277 "bigint",
2278 "bignumber",
2279 "decimal",
2280 "float"
2281 ],
2282 "devDependencies": {
2283 "mocha": "^1.20.1",
2284 "jshint": "^2.5.1",
2285 "coveralls": "^2.10.0",
2286 "istanbul": "^0.2.11"
2287 },
2288 "repository": {
2289 "url": "https://github.com/cryptocoinjs/bigi",
2290 "type": "git"
2291 },
2292 "main": "./lib/index.js",
2293 "scripts": {
2294 "test": "_mocha -- test/*.js",
2295 "jshint": "jshint --config jshint.json lib/*.js ; true",
2296 "unit": "mocha",
2297 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2298 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2299 },
2300 "dependencies": {},
2301 "testling": {
2302 "files": "test/*.js",
2303 "harness": "mocha",
2304 "browsers": [
2305 "ie/9..latest",
2306 "firefox/latest",
2307 "chrome/latest",
2308 "safari/6.0..latest",
2309 "iphone/6.0..latest",
2310 "android-browser/4.2..latest"
2311 ]
2312 },
2313 "bugs": {
2314 "url": "https://github.com/cryptocoinjs/bigi/issues"
2315 },
2316 "homepage": "https://github.com/cryptocoinjs/bigi",
2317 "_id": "bigi@1.4.0",
2318 "dist": {
2319 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2320 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2321 },
2322 "_from": "bigi@^1.4.0",
2323 "_npmVersion": "1.4.3",
2324 "_npmUser": {
2325 "name": "jp",
2326 "email": "jprichardson@gmail.com"
2327 },
2328 "maintainers": [
2329 {
2330 "name": "jp",
2331 "email": "jprichardson@gmail.com"
2332 },
2333 {
2334 "name": "midnightlightning",
2335 "email": "boydb@midnightdesign.ws"
2336 },
2337 {
2338 "name": "sidazhang",
2339 "email": "sidazhang89@gmail.com"
2340 },
2341 {
2342 "name": "nadav",
2343 "email": "npm@shesek.info"
3af2954a 2344 }
ab78acc6
IC
2345 ],
2346 "directories": {},
2347 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2348 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2349}
3af2954a 2350
ab78acc6
IC
2351},{}],5:[function(require,module,exports){
2352// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2353//
2354// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2355//
2356// Originally from narwhal.js (http://narwhaljs.org)
2357// Copyright (c) 2009 Thomas Robinson <280north.com>
2358//
2359// Permission is hereby granted, free of charge, to any person obtaining a copy
2360// of this software and associated documentation files (the 'Software'), to
2361// deal in the Software without restriction, including without limitation the
2362// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2363// sell copies of the Software, and to permit persons to whom the Software is
2364// furnished to do so, subject to the following conditions:
2365//
2366// The above copyright notice and this permission notice shall be included in
2367// all copies or substantial portions of the Software.
2368//
2369// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2370// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2371// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2372// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2373// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2374// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2375
ab78acc6
IC
2376// when used in node, this will actually load the util module we depend on
2377// versus loading the builtin util module as happens otherwise
2378// this is a bug in node module loading as far as I am concerned
2379var util = require('util/');
3af2954a 2380
ab78acc6
IC
2381var pSlice = Array.prototype.slice;
2382var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2383
ab78acc6
IC
2384// 1. The assert module provides functions that throw
2385// AssertionError's when particular conditions are not met. The
2386// assert module must conform to the following interface.
3af2954a 2387
ab78acc6 2388var assert = module.exports = ok;
3af2954a 2389
ab78acc6
IC
2390// 2. The AssertionError is defined in assert.
2391// new assert.AssertionError({ message: message,
2392// actual: actual,
2393// expected: expected })
3af2954a 2394
ab78acc6
IC
2395assert.AssertionError = function AssertionError(options) {
2396 this.name = 'AssertionError';
2397 this.actual = options.actual;
2398 this.expected = options.expected;
2399 this.operator = options.operator;
2400 if (options.message) {
2401 this.message = options.message;
2402 this.generatedMessage = false;
2403 } else {
2404 this.message = getMessage(this);
2405 this.generatedMessage = true;
2406 }
2407 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2408
ab78acc6
IC
2409 if (Error.captureStackTrace) {
2410 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2411 }
ab78acc6
IC
2412 else {
2413 // non v8 browsers so we can have a stacktrace
2414 var err = new Error();
2415 if (err.stack) {
2416 var out = err.stack;
3af2954a 2417
ab78acc6
IC
2418 // try to strip useless frames
2419 var fn_name = stackStartFunction.name;
2420 var idx = out.indexOf('\n' + fn_name);
2421 if (idx >= 0) {
2422 // once we have located the function frame
2423 // we need to strip out everything before it (and its line)
2424 var next_line = out.indexOf('\n', idx + 1);
2425 out = out.substring(next_line + 1);
2426 }
3af2954a 2427
ab78acc6 2428 this.stack = out;
3af2954a 2429 }
3af2954a 2430 }
ab78acc6 2431};
3af2954a 2432
ab78acc6
IC
2433// assert.AssertionError instanceof Error
2434util.inherits(assert.AssertionError, Error);
3af2954a 2435
ab78acc6
IC
2436function replacer(key, value) {
2437 if (util.isUndefined(value)) {
2438 return '' + value;
2439 }
2440 if (util.isNumber(value) && !isFinite(value)) {
2441 return value.toString();
2442 }
2443 if (util.isFunction(value) || util.isRegExp(value)) {
2444 return value.toString();
2445 }
2446 return value;
2447}
3af2954a 2448
ab78acc6
IC
2449function truncate(s, n) {
2450 if (util.isString(s)) {
2451 return s.length < n ? s : s.slice(0, n);
2452 } else {
2453 return s;
2454 }
2455}
3af2954a 2456
ab78acc6
IC
2457function getMessage(self) {
2458 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2459 self.operator + ' ' +
2460 truncate(JSON.stringify(self.expected, replacer), 128);
2461}
3af2954a 2462
ab78acc6
IC
2463// At present only the three keys mentioned above are used and
2464// understood by the spec. Implementations or sub modules can pass
2465// other keys to the AssertionError's constructor - they will be
2466// ignored.
3af2954a 2467
ab78acc6
IC
2468// 3. All of the following functions must throw an AssertionError
2469// when a corresponding condition is not met, with a message that
2470// may be undefined if not provided. All assertion methods provide
2471// both the actual and expected values to the assertion error for
2472// display purposes.
3af2954a 2473
ab78acc6
IC
2474function fail(actual, expected, message, operator, stackStartFunction) {
2475 throw new assert.AssertionError({
2476 message: message,
2477 actual: actual,
2478 expected: expected,
2479 operator: operator,
2480 stackStartFunction: stackStartFunction
2481 });
2482}
3af2954a 2483
ab78acc6
IC
2484// EXTENSION! allows for well behaved errors defined elsewhere.
2485assert.fail = fail;
ebd8d4e8 2486
ab78acc6
IC
2487// 4. Pure assertion tests whether a value is truthy, as determined
2488// by !!guard.
2489// assert.ok(guard, message_opt);
2490// This statement is equivalent to assert.equal(true, !!guard,
2491// message_opt);. To test strictly for the value true, use
2492// assert.strictEqual(true, guard, message_opt);.
3af2954a 2493
ab78acc6
IC
2494function ok(value, message) {
2495 if (!value) fail(value, true, message, '==', assert.ok);
2496}
2497assert.ok = ok;
3af2954a 2498
ab78acc6
IC
2499// 5. The equality assertion tests shallow, coercive equality with
2500// ==.
2501// assert.equal(actual, expected, message_opt);
3af2954a 2502
ab78acc6
IC
2503assert.equal = function equal(actual, expected, message) {
2504 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2505};
3af2954a 2506
ab78acc6
IC
2507// 6. The non-equality assertion tests for whether two objects are not equal
2508// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2509
ab78acc6
IC
2510assert.notEqual = function notEqual(actual, expected, message) {
2511 if (actual == expected) {
2512 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2513 }
ab78acc6 2514};
3af2954a 2515
ab78acc6
IC
2516// 7. The equivalence assertion tests a deep equality relation.
2517// assert.deepEqual(actual, expected, message_opt);
3af2954a 2518
ab78acc6
IC
2519assert.deepEqual = function deepEqual(actual, expected, message) {
2520 if (!_deepEqual(actual, expected)) {
2521 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2522 }
2523};
3af2954a 2524
ab78acc6
IC
2525function _deepEqual(actual, expected) {
2526 // 7.1. All identical values are equivalent, as determined by ===.
2527 if (actual === expected) {
2528 return true;
3af2954a 2529
ab78acc6
IC
2530 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2531 if (actual.length != expected.length) return false;
3af2954a 2532
ab78acc6
IC
2533 for (var i = 0; i < actual.length; i++) {
2534 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2535 }
2536
ab78acc6 2537 return true;
3af2954a 2538
ab78acc6
IC
2539 // 7.2. If the expected value is a Date object, the actual value is
2540 // equivalent if it is also a Date object that refers to the same time.
2541 } else if (util.isDate(actual) && util.isDate(expected)) {
2542 return actual.getTime() === expected.getTime();
3af2954a 2543
ab78acc6
IC
2544 // 7.3 If the expected value is a RegExp object, the actual value is
2545 // equivalent if it is also a RegExp object with the same source and
2546 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2547 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2548 return actual.source === expected.source &&
2549 actual.global === expected.global &&
2550 actual.multiline === expected.multiline &&
2551 actual.lastIndex === expected.lastIndex &&
2552 actual.ignoreCase === expected.ignoreCase;
3af2954a 2553
ab78acc6
IC
2554 // 7.4. Other pairs that do not both pass typeof value == 'object',
2555 // equivalence is determined by ==.
2556 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2557 return actual == expected;
3af2954a 2558
ab78acc6
IC
2559 // 7.5 For all other Object pairs, including Array objects, equivalence is
2560 // determined by having the same number of owned properties (as verified
2561 // with Object.prototype.hasOwnProperty.call), the same set of keys
2562 // (although not necessarily the same order), equivalent values for every
2563 // corresponding key, and an identical 'prototype' property. Note: this
2564 // accounts for both named and indexed properties on Arrays.
2565 } else {
2566 return objEquiv(actual, expected);
3af2954a 2567 }
ab78acc6 2568}
3af2954a 2569
ab78acc6
IC
2570function isArguments(object) {
2571 return Object.prototype.toString.call(object) == '[object Arguments]';
2572}
3af2954a 2573
ab78acc6
IC
2574function objEquiv(a, b) {
2575 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2576 return false;
2577 // an identical 'prototype' property.
2578 if (a.prototype !== b.prototype) return false;
2579 // if one is a primitive, the other must be same
2580 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2581 return a === b;
3af2954a 2582 }
ab78acc6
IC
2583 var aIsArgs = isArguments(a),
2584 bIsArgs = isArguments(b);
2585 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2586 return false;
2587 if (aIsArgs) {
2588 a = pSlice.call(a);
2589 b = pSlice.call(b);
2590 return _deepEqual(a, b);
3af2954a 2591 }
ab78acc6
IC
2592 var ka = objectKeys(a),
2593 kb = objectKeys(b),
2594 key, i;
2595 // having the same number of owned properties (keys incorporates
2596 // hasOwnProperty)
2597 if (ka.length != kb.length)
2598 return false;
2599 //the same set of keys (although not necessarily the same order),
2600 ka.sort();
2601 kb.sort();
2602 //~~~cheap key test
2603 for (i = ka.length - 1; i >= 0; i--) {
2604 if (ka[i] != kb[i])
2605 return false;
3af2954a 2606 }
ab78acc6
IC
2607 //equivalent values for every corresponding key, and
2608 //~~~possibly expensive deep test
2609 for (i = ka.length - 1; i >= 0; i--) {
2610 key = ka[i];
2611 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2612 }
ab78acc6
IC
2613 return true;
2614}
2615
2616// 8. The non-equivalence assertion tests for any deep inequality.
2617// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2618
ab78acc6
IC
2619assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2620 if (_deepEqual(actual, expected)) {
2621 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2622 }
ab78acc6 2623};
3af2954a 2624
ab78acc6
IC
2625// 9. The strict equality assertion tests strict equality, as determined by ===.
2626// assert.strictEqual(actual, expected, message_opt);
3af2954a 2627
ab78acc6
IC
2628assert.strictEqual = function strictEqual(actual, expected, message) {
2629 if (actual !== expected) {
2630 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2631 }
ab78acc6 2632};
3af2954a 2633
ab78acc6
IC
2634// 10. The strict non-equality assertion tests for strict inequality, as
2635// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2636
ab78acc6
IC
2637assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2638 if (actual === expected) {
2639 fail(actual, expected, message, '!==', assert.notStrictEqual);
2640 }
2641};
3af2954a 2642
ab78acc6
IC
2643function expectedException(actual, expected) {
2644 if (!actual || !expected) {
2645 return false;
2646 }
3af2954a 2647
ab78acc6
IC
2648 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2649 return expected.test(actual);
2650 } else if (actual instanceof expected) {
2651 return true;
2652 } else if (expected.call({}, actual) === true) {
2653 return true;
3af2954a
IC
2654 }
2655
ab78acc6
IC
2656 return false;
2657}
3af2954a 2658
ab78acc6
IC
2659function _throws(shouldThrow, block, expected, message) {
2660 var actual;
3af2954a 2661
ab78acc6
IC
2662 if (util.isString(expected)) {
2663 message = expected;
2664 expected = null;
3af2954a
IC
2665 }
2666
ab78acc6
IC
2667 try {
2668 block();
2669 } catch (e) {
2670 actual = e;
3af2954a
IC
2671 }
2672
ab78acc6
IC
2673 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2674 (message ? ' ' + message : '.');
3af2954a 2675
ab78acc6
IC
2676 if (shouldThrow && !actual) {
2677 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2678 }
2679
ab78acc6
IC
2680 if (!shouldThrow && expectedException(actual, expected)) {
2681 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2682 }
2683
ab78acc6
IC
2684 if ((shouldThrow && actual && expected &&
2685 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2686 throw actual;
3af2954a 2687 }
ab78acc6 2688}
3af2954a 2689
ab78acc6
IC
2690// 11. Expected to throw an error:
2691// assert.throws(block, Error_opt, message_opt);
3af2954a 2692
ab78acc6
IC
2693assert.throws = function(block, /*optional*/error, /*optional*/message) {
2694 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2695};
3af2954a 2696
ab78acc6
IC
2697// EXTENSION! This is annoying to write outside this module.
2698assert.doesNotThrow = function(block, /*optional*/message) {
2699 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2700};
3af2954a 2701
ab78acc6 2702assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2703
ab78acc6
IC
2704var objectKeys = Object.keys || function (obj) {
2705 var keys = [];
2706 for (var key in obj) {
2707 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2708 }
ab78acc6
IC
2709 return keys;
2710};
3af2954a 2711
ab78acc6 2712},{"util/":29}],6:[function(require,module,exports){
3af2954a 2713
ab78acc6
IC
2714},{}],7:[function(require,module,exports){
2715/*!
2716 * The buffer module from node.js, for the browser.
2717 *
2718 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2719 * @license MIT
2720 */
3af2954a 2721
ab78acc6
IC
2722var base64 = require('base64-js')
2723var ieee754 = require('ieee754')
2724var isArray = require('is-array')
3af2954a 2725
ab78acc6
IC
2726exports.Buffer = Buffer
2727exports.SlowBuffer = SlowBuffer
2728exports.INSPECT_MAX_BYTES = 50
2729Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2730
ab78acc6 2731var rootParent = {}
3af2954a 2732
ab78acc6
IC
2733/**
2734 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2735 * === true Use Uint8Array implementation (fastest)
2736 * === false Use Object implementation (most compatible, even IE6)
2737 *
2738 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2739 * Opera 11.6+, iOS 4.2+.
2740 *
2741 * Due to various browser bugs, sometimes the Object implementation will be used even
2742 * when the browser supports typed arrays.
2743 *
2744 * Note:
2745 *
2746 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2747 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2748 *
2749 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2750 * on objects.
2751 *
2752 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2753 *
2754 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2755 * incorrect length in some situations.
3af2954a 2756
ab78acc6
IC
2757 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2758 * get the Object implementation, which is slower but behaves correctly.
2759 */
2760Buffer.TYPED_ARRAY_SUPPORT = (function () {
2761 function Bar () {}
2762 try {
2763 var arr = new Uint8Array(1)
2764 arr.foo = function () { return 42 }
2765 arr.constructor = Bar
2766 return arr.foo() === 42 && // typed array instances can be augmented
2767 arr.constructor === Bar && // constructor can be set
2768 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2769 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2770 } catch (e) {
2771 return false
2772 }
2773})()
3af2954a 2774
ab78acc6
IC
2775function kMaxLength () {
2776 return Buffer.TYPED_ARRAY_SUPPORT
2777 ? 0x7fffffff
2778 : 0x3fffffff
2779}
3af2954a 2780
ab78acc6
IC
2781/**
2782 * Class: Buffer
2783 * =============
2784 *
2785 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2786 * with function properties for all the node `Buffer` API functions. We use
2787 * `Uint8Array` so that square bracket notation works as expected -- it returns
2788 * a single octet.
2789 *
2790 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2791 * prototype.
2792 */
2793function Buffer (arg) {
2794 if (!(this instanceof Buffer)) {
2795 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2796 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2797 return new Buffer(arg)
3af2954a
IC
2798 }
2799
ab78acc6
IC
2800 this.length = 0
2801 this.parent = undefined
3af2954a 2802
ab78acc6
IC
2803 // Common case.
2804 if (typeof arg === 'number') {
2805 return fromNumber(this, arg)
2806 }
3af2954a 2807
ab78acc6
IC
2808 // Slightly less common case.
2809 if (typeof arg === 'string') {
2810 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2811 }
3af2954a 2812
ab78acc6
IC
2813 // Unusual.
2814 return fromObject(this, arg)
2815}
3af2954a 2816
ab78acc6
IC
2817function fromNumber (that, length) {
2818 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2819 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2820 for (var i = 0; i < length; i++) {
2821 that[i] = 0
2822 }
3af2954a 2823 }
ab78acc6
IC
2824 return that
2825}
3af2954a 2826
ab78acc6
IC
2827function fromString (that, string, encoding) {
2828 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2829
ab78acc6
IC
2830 // Assumption: byteLength() return value is always < kMaxLength.
2831 var length = byteLength(string, encoding) | 0
2832 that = allocate(that, length)
3af2954a 2833
ab78acc6
IC
2834 that.write(string, encoding)
2835 return that
2836}
3af2954a 2837
ab78acc6
IC
2838function fromObject (that, object) {
2839 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2840
ab78acc6 2841 if (isArray(object)) return fromArray(that, object)
3af2954a 2842
ab78acc6
IC
2843 if (object == null) {
2844 throw new TypeError('must start with number, buffer, array or string')
2845 }
3af2954a 2846
ab78acc6
IC
2847 if (typeof ArrayBuffer !== 'undefined') {
2848 if (object.buffer instanceof ArrayBuffer) {
2849 return fromTypedArray(that, object)
2850 }
2851 if (object instanceof ArrayBuffer) {
2852 return fromArrayBuffer(that, object)
2853 }
3af2954a
IC
2854 }
2855
ab78acc6 2856 if (object.length) return fromArrayLike(that, object)
3af2954a 2857
ab78acc6
IC
2858 return fromJsonObject(that, object)
2859}
3af2954a 2860
ab78acc6
IC
2861function fromBuffer (that, buffer) {
2862 var length = checked(buffer.length) | 0
2863 that = allocate(that, length)
2864 buffer.copy(that, 0, 0, length)
2865 return that
2866}
3af2954a 2867
ab78acc6
IC
2868function fromArray (that, array) {
2869 var length = checked(array.length) | 0
2870 that = allocate(that, length)
2871 for (var i = 0; i < length; i += 1) {
2872 that[i] = array[i] & 255
3af2954a 2873 }
ab78acc6
IC
2874 return that
2875}
3af2954a 2876
ab78acc6
IC
2877// Duplicate of fromArray() to keep fromArray() monomorphic.
2878function fromTypedArray (that, array) {
2879 var length = checked(array.length) | 0
2880 that = allocate(that, length)
2881 // Truncating the elements is probably not what people expect from typed
2882 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2883 // of the old Buffer constructor.
2884 for (var i = 0; i < length; i += 1) {
2885 that[i] = array[i] & 255
3af2954a 2886 }
ab78acc6
IC
2887 return that
2888}
3af2954a 2889
ab78acc6
IC
2890function fromArrayBuffer (that, array) {
2891 if (Buffer.TYPED_ARRAY_SUPPORT) {
2892 // Return an augmented `Uint8Array` instance, for best performance
2893 array.byteLength
2894 that = Buffer._augment(new Uint8Array(array))
2895 } else {
2896 // Fallback: Return an object instance of the Buffer class
2897 that = fromTypedArray(that, new Uint8Array(array))
2898 }
2899 return that
2900}
3af2954a 2901
ab78acc6
IC
2902function fromArrayLike (that, array) {
2903 var length = checked(array.length) | 0
2904 that = allocate(that, length)
2905 for (var i = 0; i < length; i += 1) {
2906 that[i] = array[i] & 255
3af2954a 2907 }
ab78acc6
IC
2908 return that
2909}
3af2954a 2910
ab78acc6
IC
2911// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2912// Returns a zero-length buffer for inputs that don't conform to the spec.
2913function fromJsonObject (that, object) {
2914 var array
2915 var length = 0
2916
2917 if (object.type === 'Buffer' && isArray(object.data)) {
2918 array = object.data
2919 length = checked(array.length) | 0
3af2954a 2920 }
ab78acc6 2921 that = allocate(that, length)
3af2954a 2922
ab78acc6
IC
2923 for (var i = 0; i < length; i += 1) {
2924 that[i] = array[i] & 255
3af2954a 2925 }
ab78acc6
IC
2926 return that
2927}
3af2954a 2928
ab78acc6
IC
2929function allocate (that, length) {
2930 if (Buffer.TYPED_ARRAY_SUPPORT) {
2931 // Return an augmented `Uint8Array` instance, for best performance
2932 that = Buffer._augment(new Uint8Array(length))
2933 } else {
2934 // Fallback: Return an object instance of the Buffer class
2935 that.length = length
2936 that._isBuffer = true
2937 }
3af2954a 2938
ab78acc6
IC
2939 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2940 if (fromPool) that.parent = rootParent
3af2954a 2941
ab78acc6
IC
2942 return that
2943}
3af2954a 2944
ab78acc6
IC
2945function checked (length) {
2946 // Note: cannot use `length < kMaxLength` here because that fails when
2947 // length is NaN (which is otherwise coerced to zero.)
2948 if (length >= kMaxLength()) {
2949 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2950 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2951 }
ab78acc6
IC
2952 return length | 0
2953}
3af2954a 2954
ab78acc6
IC
2955function SlowBuffer (subject, encoding) {
2956 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2957
ab78acc6
IC
2958 var buf = new Buffer(subject, encoding)
2959 delete buf.parent
2960 return buf
2961}
3af2954a 2962
ab78acc6
IC
2963Buffer.isBuffer = function isBuffer (b) {
2964 return !!(b != null && b._isBuffer)
2965}
3af2954a 2966
ab78acc6
IC
2967Buffer.compare = function compare (a, b) {
2968 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2969 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2970 }
2971
ab78acc6 2972 if (a === b) return 0
3af2954a 2973
ab78acc6
IC
2974 var x = a.length
2975 var y = b.length
3af2954a 2976
ab78acc6
IC
2977 var i = 0
2978 var len = Math.min(x, y)
2979 while (i < len) {
2980 if (a[i] !== b[i]) break
3af2954a 2981
ab78acc6
IC
2982 ++i
2983 }
3af2954a 2984
ab78acc6
IC
2985 if (i !== len) {
2986 x = a[i]
2987 y = b[i]
2988 }
3af2954a 2989
ab78acc6
IC
2990 if (x < y) return -1
2991 if (y < x) return 1
2992 return 0
2993}
3af2954a 2994
ab78acc6
IC
2995Buffer.isEncoding = function isEncoding (encoding) {
2996 switch (String(encoding).toLowerCase()) {
2997 case 'hex':
2998 case 'utf8':
2999 case 'utf-8':
3000 case 'ascii':
3001 case 'binary':
3002 case 'base64':
3003 case 'raw':
3004 case 'ucs2':
3005 case 'ucs-2':
3006 case 'utf16le':
3007 case 'utf-16le':
3008 return true
3009 default:
3010 return false
3af2954a 3011 }
ab78acc6 3012}
3af2954a 3013
ab78acc6
IC
3014Buffer.concat = function concat (list, length) {
3015 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 3016
ab78acc6
IC
3017 if (list.length === 0) {
3018 return new Buffer(0)
3af2954a
IC
3019 }
3020
ab78acc6
IC
3021 var i
3022 if (length === undefined) {
3023 length = 0
3024 for (i = 0; i < list.length; i++) {
3025 length += list[i].length
3026 }
3af2954a
IC
3027 }
3028
ab78acc6
IC
3029 var buf = new Buffer(length)
3030 var pos = 0
3031 for (i = 0; i < list.length; i++) {
3032 var item = list[i]
3033 item.copy(buf, pos)
3034 pos += item.length
3035 }
3036 return buf
3037}
3af2954a 3038
ab78acc6
IC
3039function byteLength (string, encoding) {
3040 if (typeof string !== 'string') string = '' + string
3041
3042 var len = string.length
3043 if (len === 0) return 0
3044
3045 // Use a for loop to avoid recursion
3046 var loweredCase = false
3047 for (;;) {
3048 switch (encoding) {
3049 case 'ascii':
3050 case 'binary':
3051 // Deprecated
3052 case 'raw':
3053 case 'raws':
3054 return len
3055 case 'utf8':
3056 case 'utf-8':
3057 return utf8ToBytes(string).length
3058 case 'ucs2':
3059 case 'ucs-2':
3060 case 'utf16le':
3061 case 'utf-16le':
3062 return len * 2
3063 case 'hex':
3064 return len >>> 1
3065 case 'base64':
3066 return base64ToBytes(string).length
3067 default:
3068 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3069 encoding = ('' + encoding).toLowerCase()
3070 loweredCase = true
3af2954a 3071 }
3af2954a 3072 }
ab78acc6
IC
3073}
3074Buffer.byteLength = byteLength
3af2954a 3075
ab78acc6
IC
3076// pre-set for values that may exist in the future
3077Buffer.prototype.length = undefined
3078Buffer.prototype.parent = undefined
3af2954a 3079
ab78acc6
IC
3080function slowToString (encoding, start, end) {
3081 var loweredCase = false
3af2954a 3082
ab78acc6
IC
3083 start = start | 0
3084 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 3085
ab78acc6
IC
3086 if (!encoding) encoding = 'utf8'
3087 if (start < 0) start = 0
3088 if (end > this.length) end = this.length
3089 if (end <= start) return ''
3af2954a 3090
ab78acc6
IC
3091 while (true) {
3092 switch (encoding) {
3093 case 'hex':
3094 return hexSlice(this, start, end)
3af2954a 3095
ab78acc6
IC
3096 case 'utf8':
3097 case 'utf-8':
3098 return utf8Slice(this, start, end)
3af2954a 3099
ab78acc6
IC
3100 case 'ascii':
3101 return asciiSlice(this, start, end)
3af2954a 3102
ab78acc6
IC
3103 case 'binary':
3104 return binarySlice(this, start, end)
3af2954a 3105
ab78acc6
IC
3106 case 'base64':
3107 return base64Slice(this, start, end)
3af2954a 3108
ab78acc6
IC
3109 case 'ucs2':
3110 case 'ucs-2':
3111 case 'utf16le':
3112 case 'utf-16le':
3113 return utf16leSlice(this, start, end)
3af2954a 3114
ab78acc6
IC
3115 default:
3116 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3117 encoding = (encoding + '').toLowerCase()
3118 loweredCase = true
3119 }
3af2954a 3120 }
ab78acc6 3121}
3af2954a 3122
ab78acc6
IC
3123Buffer.prototype.toString = function toString () {
3124 var length = this.length | 0
3125 if (length === 0) return ''
3126 if (arguments.length === 0) return utf8Slice(this, 0, length)
3127 return slowToString.apply(this, arguments)
3128}
3af2954a 3129
ab78acc6
IC
3130Buffer.prototype.equals = function equals (b) {
3131 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3132 if (this === b) return true
3133 return Buffer.compare(this, b) === 0
3134}
3af2954a 3135
ab78acc6
IC
3136Buffer.prototype.inspect = function inspect () {
3137 var str = ''
3138 var max = exports.INSPECT_MAX_BYTES
3139 if (this.length > 0) {
3140 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3141 if (this.length > max) str += ' ... '
3af2954a 3142 }
ab78acc6
IC
3143 return '<Buffer ' + str + '>'
3144}
3af2954a 3145
ab78acc6
IC
3146Buffer.prototype.compare = function compare (b) {
3147 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3148 if (this === b) return 0
3149 return Buffer.compare(this, b)
3150}
3af2954a 3151
ab78acc6
IC
3152Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3153 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3154 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3155 byteOffset >>= 0
3af2954a 3156
ab78acc6
IC
3157 if (this.length === 0) return -1
3158 if (byteOffset >= this.length) return -1
3af2954a 3159
ab78acc6
IC
3160 // Negative offsets start from the end of the buffer
3161 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 3162
ab78acc6
IC
3163 if (typeof val === 'string') {
3164 if (val.length === 0) return -1 // special case: looking for empty string always fails
3165 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3166 }
ab78acc6
IC
3167 if (Buffer.isBuffer(val)) {
3168 return arrayIndexOf(this, val, byteOffset)
3af2954a 3169 }
ab78acc6
IC
3170 if (typeof val === 'number') {
3171 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3172 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3173 }
ab78acc6 3174 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
3175 }
3176
ab78acc6
IC
3177 function arrayIndexOf (arr, val, byteOffset) {
3178 var foundIndex = -1
3179 for (var i = 0; byteOffset + i < arr.length; i++) {
3180 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3181 if (foundIndex === -1) foundIndex = i
3182 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 3183 } else {
ab78acc6 3184 foundIndex = -1
3af2954a 3185 }
3af2954a 3186 }
ab78acc6
IC
3187 return -1
3188 }
3af2954a 3189
ab78acc6
IC
3190 throw new TypeError('val must be string, number or Buffer')
3191}
3af2954a 3192
ab78acc6
IC
3193// `get` is deprecated
3194Buffer.prototype.get = function get (offset) {
3195 console.log('.get() is deprecated. Access using array indexes instead.')
3196 return this.readUInt8(offset)
3197}
3af2954a 3198
ab78acc6
IC
3199// `set` is deprecated
3200Buffer.prototype.set = function set (v, offset) {
3201 console.log('.set() is deprecated. Access using array indexes instead.')
3202 return this.writeUInt8(v, offset)
3203}
3af2954a 3204
ab78acc6
IC
3205function hexWrite (buf, string, offset, length) {
3206 offset = Number(offset) || 0
3207 var remaining = buf.length - offset
3208 if (!length) {
3209 length = remaining
3210 } else {
3211 length = Number(length)
3212 if (length > remaining) {
3213 length = remaining
3214 }
3215 }
3af2954a 3216
ab78acc6
IC
3217 // must be an even number of digits
3218 var strLen = string.length
3219 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 3220
ab78acc6
IC
3221 if (length > strLen / 2) {
3222 length = strLen / 2
3223 }
3224 for (var i = 0; i < length; i++) {
3225 var parsed = parseInt(string.substr(i * 2, 2), 16)
3226 if (isNaN(parsed)) throw new Error('Invalid hex string')
3227 buf[offset + i] = parsed
3af2954a 3228 }
ab78acc6
IC
3229 return i
3230}
3231
3232function utf8Write (buf, string, offset, length) {
3233 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3234}
3af2954a 3235
ab78acc6
IC
3236function asciiWrite (buf, string, offset, length) {
3237 return blitBuffer(asciiToBytes(string), buf, offset, length)
3238}
3af2954a 3239
ab78acc6
IC
3240function binaryWrite (buf, string, offset, length) {
3241 return asciiWrite(buf, string, offset, length)
3242}
3af2954a 3243
ab78acc6
IC
3244function base64Write (buf, string, offset, length) {
3245 return blitBuffer(base64ToBytes(string), buf, offset, length)
3246}
3af2954a 3247
ab78acc6
IC
3248function ucs2Write (buf, string, offset, length) {
3249 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3250}
3af2954a 3251
ab78acc6
IC
3252Buffer.prototype.write = function write (string, offset, length, encoding) {
3253 // Buffer#write(string)
3254 if (offset === undefined) {
3255 encoding = 'utf8'
3256 length = this.length
3257 offset = 0
3258 // Buffer#write(string, encoding)
3259 } else if (length === undefined && typeof offset === 'string') {
3260 encoding = offset
3261 length = this.length
3262 offset = 0
3263 // Buffer#write(string, offset[, length][, encoding])
3264 } else if (isFinite(offset)) {
3265 offset = offset | 0
3266 if (isFinite(length)) {
3267 length = length | 0
3268 if (encoding === undefined) encoding = 'utf8'
3269 } else {
3270 encoding = length
3271 length = undefined
3272 }
3273 // legacy write(string, encoding, offset, length) - remove in v0.13
3274 } else {
3275 var swap = encoding
3276 encoding = offset
3277 offset = length | 0
3278 length = swap
3af2954a
IC
3279 }
3280
ab78acc6
IC
3281 var remaining = this.length - offset
3282 if (length === undefined || length > remaining) length = remaining
3af2954a 3283
ab78acc6
IC
3284 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3285 throw new RangeError('attempt to write outside buffer bounds')
3286 }
3af2954a 3287
ab78acc6 3288 if (!encoding) encoding = 'utf8'
3af2954a 3289
ab78acc6
IC
3290 var loweredCase = false
3291 for (;;) {
3292 switch (encoding) {
3293 case 'hex':
3294 return hexWrite(this, string, offset, length)
ebd8d4e8 3295
ab78acc6
IC
3296 case 'utf8':
3297 case 'utf-8':
3298 return utf8Write(this, string, offset, length)
ebd8d4e8 3299
ab78acc6
IC
3300 case 'ascii':
3301 return asciiWrite(this, string, offset, length)
ebd8d4e8 3302
ab78acc6
IC
3303 case 'binary':
3304 return binaryWrite(this, string, offset, length)
ebd8d4e8 3305
ab78acc6
IC
3306 case 'base64':
3307 // Warning: maxLength not taken into account in base64Write
3308 return base64Write(this, string, offset, length)
ebd8d4e8 3309
ab78acc6
IC
3310 case 'ucs2':
3311 case 'ucs-2':
3312 case 'utf16le':
3313 case 'utf-16le':
3314 return ucs2Write(this, string, offset, length)
ebd8d4e8 3315
ab78acc6
IC
3316 default:
3317 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3318 encoding = ('' + encoding).toLowerCase()
3319 loweredCase = true
3320 }
3321 }
3322}
212b1b46 3323
ab78acc6
IC
3324Buffer.prototype.toJSON = function toJSON () {
3325 return {
3326 type: 'Buffer',
3327 data: Array.prototype.slice.call(this._arr || this, 0)
3328 }
3329}
212b1b46 3330
ab78acc6
IC
3331function base64Slice (buf, start, end) {
3332 if (start === 0 && end === buf.length) {
3333 return base64.fromByteArray(buf)
3334 } else {
3335 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3336 }
ab78acc6
IC
3337}
3338
3339function utf8Slice (buf, start, end) {
3340 end = Math.min(buf.length, end)
3341 var firstByte
3342 var secondByte
3343 var thirdByte
3344 var fourthByte
3345 var bytesPerSequence
3346 var tempCodePoint
3347 var codePoint
3348 var res = []
3349 var i = start
3350
3351 for (; i < end; i += bytesPerSequence) {
3352 firstByte = buf[i]
3353 codePoint = 0xFFFD
3354
3355 if (firstByte > 0xEF) {
3356 bytesPerSequence = 4
3357 } else if (firstByte > 0xDF) {
3358 bytesPerSequence = 3
3359 } else if (firstByte > 0xBF) {
3360 bytesPerSequence = 2
3361 } else {
3362 bytesPerSequence = 1
3363 }
212b1b46 3364
ab78acc6
IC
3365 if (i + bytesPerSequence <= end) {
3366 switch (bytesPerSequence) {
3367 case 1:
3368 if (firstByte < 0x80) {
3369 codePoint = firstByte
3370 }
3371 break
3372 case 2:
3373 secondByte = buf[i + 1]
3374 if ((secondByte & 0xC0) === 0x80) {
3375 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3376 if (tempCodePoint > 0x7F) {
3377 codePoint = tempCodePoint
3378 }
3379 }
3380 break
3381 case 3:
3382 secondByte = buf[i + 1]
3383 thirdByte = buf[i + 2]
3384 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3385 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3386 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3387 codePoint = tempCodePoint
3388 }
3389 }
3390 break
3391 case 4:
3392 secondByte = buf[i + 1]
3393 thirdByte = buf[i + 2]
3394 fourthByte = buf[i + 3]
3395 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3396 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3397 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3398 codePoint = tempCodePoint
3399 }
3400 }
3401 }
3402 }
212b1b46 3403
ab78acc6
IC
3404 if (codePoint === 0xFFFD) {
3405 // we generated an invalid codePoint so make sure to only advance by 1 byte
3406 bytesPerSequence = 1
3407 } else if (codePoint > 0xFFFF) {
3408 // encode to utf16 (surrogate pair dance)
3409 codePoint -= 0x10000
3410 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3411 codePoint = 0xDC00 | codePoint & 0x3FF
3412 }
212b1b46 3413
ab78acc6 3414 res.push(codePoint)
3af2954a 3415 }
212b1b46 3416
ab78acc6
IC
3417 return String.fromCharCode.apply(String, res)
3418}
212b1b46 3419
ab78acc6
IC
3420function asciiSlice (buf, start, end) {
3421 var ret = ''
3422 end = Math.min(buf.length, end)
3423
3424 for (var i = start; i < end; i++) {
3425 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3426 }
ab78acc6
IC
3427 return ret
3428}
212b1b46 3429
ab78acc6
IC
3430function binarySlice (buf, start, end) {
3431 var ret = ''
3432 end = Math.min(buf.length, end)
212b1b46 3433
ab78acc6
IC
3434 for (var i = start; i < end; i++) {
3435 ret += String.fromCharCode(buf[i])
3436 }
3437 return ret
3438}
212b1b46 3439
ab78acc6
IC
3440function hexSlice (buf, start, end) {
3441 var len = buf.length
212b1b46 3442
ab78acc6
IC
3443 if (!start || start < 0) start = 0
3444 if (!end || end < 0 || end > len) end = len
212b1b46 3445
ab78acc6
IC
3446 var out = ''
3447 for (var i = start; i < end; i++) {
3448 out += toHex(buf[i])
3449 }
3450 return out
3451}
212b1b46 3452
ab78acc6
IC
3453function utf16leSlice (buf, start, end) {
3454 var bytes = buf.slice(start, end)
3455 var res = ''
3456 for (var i = 0; i < bytes.length; i += 2) {
3457 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3458 }
3459 return res
3460}
212b1b46 3461
ab78acc6
IC
3462Buffer.prototype.slice = function slice (start, end) {
3463 var len = this.length
3464 start = ~~start
3465 end = end === undefined ? len : ~~end
212b1b46 3466
ab78acc6
IC
3467 if (start < 0) {
3468 start += len
3469 if (start < 0) start = 0
3470 } else if (start > len) {
3471 start = len
3472 }
212b1b46 3473
ab78acc6
IC
3474 if (end < 0) {
3475 end += len
3476 if (end < 0) end = 0
3477 } else if (end > len) {
3478 end = len
3479 }
212b1b46 3480
ab78acc6 3481 if (end < start) end = start
212b1b46 3482
ab78acc6
IC
3483 var newBuf
3484 if (Buffer.TYPED_ARRAY_SUPPORT) {
3485 newBuf = Buffer._augment(this.subarray(start, end))
3486 } else {
3487 var sliceLen = end - start
3488 newBuf = new Buffer(sliceLen, undefined)
3489 for (var i = 0; i < sliceLen; i++) {
3490 newBuf[i] = this[i + start]
3af2954a
IC
3491 }
3492 }
212b1b46 3493
ab78acc6 3494 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3495
ab78acc6
IC
3496 return newBuf
3497}
ebd8d4e8 3498
ab78acc6
IC
3499/*
3500 * Need to make sure that buffer isn't trying to write out of bounds.
3501 */
3502function checkOffset (offset, ext, length) {
3503 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3504 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3505}
ebd8d4e8 3506
ab78acc6
IC
3507Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3508 offset = offset | 0
3509 byteLength = byteLength | 0
3510 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3511
ab78acc6
IC
3512 var val = this[offset]
3513 var mul = 1
3514 var i = 0
3515 while (++i < byteLength && (mul *= 0x100)) {
3516 val += this[offset + i] * mul
3517 }
3af2954a 3518
ab78acc6
IC
3519 return val
3520}
3af2954a 3521
ab78acc6
IC
3522Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3523 offset = offset | 0
3524 byteLength = byteLength | 0
3525 if (!noAssert) {
3526 checkOffset(offset, byteLength, this.length)
3527 }
3af2954a 3528
ab78acc6
IC
3529 var val = this[offset + --byteLength]
3530 var mul = 1
3531 while (byteLength > 0 && (mul *= 0x100)) {
3532 val += this[offset + --byteLength] * mul
3af2954a
IC
3533 }
3534
ab78acc6
IC
3535 return val
3536}
3af2954a 3537
ab78acc6
IC
3538Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3539 if (!noAssert) checkOffset(offset, 1, this.length)
3540 return this[offset]
3541}
3af2954a 3542
ab78acc6
IC
3543Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3544 if (!noAssert) checkOffset(offset, 2, this.length)
3545 return this[offset] | (this[offset + 1] << 8)
3546}
3af2954a 3547
ab78acc6
IC
3548Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3549 if (!noAssert) checkOffset(offset, 2, this.length)
3550 return (this[offset] << 8) | this[offset + 1]
3551}
ebd8d4e8 3552
ab78acc6
IC
3553Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3554 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3555
ab78acc6
IC
3556 return ((this[offset]) |
3557 (this[offset + 1] << 8) |
3558 (this[offset + 2] << 16)) +
3559 (this[offset + 3] * 0x1000000)
3560}
3af2954a 3561
ab78acc6
IC
3562Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3563 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3564
ab78acc6
IC
3565 return (this[offset] * 0x1000000) +
3566 ((this[offset + 1] << 16) |
3567 (this[offset + 2] << 8) |
3568 this[offset + 3])
3569}
ebd8d4e8 3570
ab78acc6
IC
3571Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3572 offset = offset | 0
3573 byteLength = byteLength | 0
3574 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3575
ab78acc6
IC
3576 var val = this[offset]
3577 var mul = 1
3578 var i = 0
3579 while (++i < byteLength && (mul *= 0x100)) {
3580 val += this[offset + i] * mul
ebd8d4e8 3581 }
ab78acc6 3582 mul *= 0x80
ebd8d4e8 3583
ab78acc6
IC
3584 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3585
3586 return val
ebd8d4e8
IC
3587}
3588
ab78acc6
IC
3589Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3590 offset = offset | 0
3591 byteLength = byteLength | 0
3592 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3593
ab78acc6
IC
3594 var i = byteLength
3595 var mul = 1
3596 var val = this[offset + --i]
3597 while (i > 0 && (mul *= 0x100)) {
3598 val += this[offset + --i] * mul
3599 }
3600 mul *= 0x80
ebd8d4e8 3601
ab78acc6 3602 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3603
ab78acc6
IC
3604 return val
3605}
ebd8d4e8 3606
ab78acc6
IC
3607Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3608 if (!noAssert) checkOffset(offset, 1, this.length)
3609 if (!(this[offset] & 0x80)) return (this[offset])
3610 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3611}
ab78acc6
IC
3612
3613Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3614 if (!noAssert) checkOffset(offset, 2, this.length)
3615 var val = this[offset] | (this[offset + 1] << 8)
3616 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3617}
ab78acc6
IC
3618
3619Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3620 if (!noAssert) checkOffset(offset, 2, this.length)
3621 var val = this[offset + 1] | (this[offset] << 8)
3622 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3623}
3624
ab78acc6
IC
3625Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3626 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3627
ab78acc6
IC
3628 return (this[offset]) |
3629 (this[offset + 1] << 8) |
3630 (this[offset + 2] << 16) |
3631 (this[offset + 3] << 24)
ebd8d4e8 3632}
ebd8d4e8 3633
ab78acc6
IC
3634Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3635 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3636
ab78acc6
IC
3637 return (this[offset] << 24) |
3638 (this[offset + 1] << 16) |
3639 (this[offset + 2] << 8) |
3640 (this[offset + 3])
ebd8d4e8
IC
3641}
3642
ab78acc6
IC
3643Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3644 if (!noAssert) checkOffset(offset, 4, this.length)
3645 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3646}
3647
ab78acc6
IC
3648Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3649 if (!noAssert) checkOffset(offset, 4, this.length)
3650 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3651}
3652
ab78acc6
IC
3653Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3654 if (!noAssert) checkOffset(offset, 8, this.length)
3655 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3656}
3657
ab78acc6
IC
3658Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3659 if (!noAssert) checkOffset(offset, 8, this.length)
3660 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3661}
3662
ab78acc6
IC
3663function checkInt (buf, value, offset, ext, max, min) {
3664 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3665 if (value > max || value < min) throw new RangeError('value is out of bounds')
3666 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3667}
3668
ab78acc6
IC
3669Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3670 value = +value
3671 offset = offset | 0
3672 byteLength = byteLength | 0
3673 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3674
ab78acc6
IC
3675 var mul = 1
3676 var i = 0
3677 this[offset] = value & 0xFF
3678 while (++i < byteLength && (mul *= 0x100)) {
3679 this[offset + i] = (value / mul) & 0xFF
3680 }
ebd8d4e8 3681
ab78acc6 3682 return offset + byteLength
ebd8d4e8
IC
3683}
3684
ab78acc6
IC
3685Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3686 value = +value
3687 offset = offset | 0
3688 byteLength = byteLength | 0
3689 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3690
ab78acc6
IC
3691 var i = byteLength - 1
3692 var mul = 1
3693 this[offset + i] = value & 0xFF
3694 while (--i >= 0 && (mul *= 0x100)) {
3695 this[offset + i] = (value / mul) & 0xFF
3696 }
ebd8d4e8 3697
ab78acc6 3698 return offset + byteLength
ebd8d4e8
IC
3699}
3700
ab78acc6
IC
3701Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3702 value = +value
3703 offset = offset | 0
3704 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3705 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3706 this[offset] = value
3707 return offset + 1
ebd8d4e8
IC
3708}
3709
ab78acc6
IC
3710function objectWriteUInt16 (buf, value, offset, littleEndian) {
3711 if (value < 0) value = 0xffff + value + 1
3712 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3713 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3714 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3715 }
ebd8d4e8
IC
3716}
3717
ab78acc6
IC
3718Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3719 value = +value
3720 offset = offset | 0
3721 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3722 if (Buffer.TYPED_ARRAY_SUPPORT) {
3723 this[offset] = value
3724 this[offset + 1] = (value >>> 8)
3725 } else {
3726 objectWriteUInt16(this, value, offset, true)
3727 }
3728 return offset + 2
ebd8d4e8
IC
3729}
3730
ab78acc6
IC
3731Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3732 value = +value
3733 offset = offset | 0
3734 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3735 if (Buffer.TYPED_ARRAY_SUPPORT) {
3736 this[offset] = (value >>> 8)
3737 this[offset + 1] = value
3738 } else {
3739 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3740 }
ab78acc6 3741 return offset + 2
ebd8d4e8
IC
3742}
3743
ab78acc6
IC
3744function objectWriteUInt32 (buf, value, offset, littleEndian) {
3745 if (value < 0) value = 0xffffffff + value + 1
3746 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3747 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3748 }
ebd8d4e8
IC
3749}
3750
ab78acc6
IC
3751Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3752 value = +value
3753 offset = offset | 0
3754 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3755 if (Buffer.TYPED_ARRAY_SUPPORT) {
3756 this[offset + 3] = (value >>> 24)
3757 this[offset + 2] = (value >>> 16)
3758 this[offset + 1] = (value >>> 8)
3759 this[offset] = value
3760 } else {
3761 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3762 }
ab78acc6 3763 return offset + 4
ebd8d4e8
IC
3764}
3765
ab78acc6
IC
3766Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3767 value = +value
3768 offset = offset | 0
3769 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3770 if (Buffer.TYPED_ARRAY_SUPPORT) {
3771 this[offset] = (value >>> 24)
3772 this[offset + 1] = (value >>> 16)
3773 this[offset + 2] = (value >>> 8)
3774 this[offset + 3] = value
3775 } else {
3776 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3777 }
ab78acc6
IC
3778 return offset + 4
3779}
3780
3781Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3782 value = +value
3783 offset = offset | 0
3784 if (!noAssert) {
3785 var limit = Math.pow(2, 8 * byteLength - 1)
3786
3787 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3788 }
ab78acc6
IC
3789
3790 var i = 0
3791 var mul = 1
3792 var sub = value < 0 ? 1 : 0
3793 this[offset] = value & 0xFF
3794 while (++i < byteLength && (mul *= 0x100)) {
3795 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3796 }
ebd8d4e8 3797
ab78acc6 3798 return offset + byteLength
ebd8d4e8
IC
3799}
3800
ab78acc6
IC
3801Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3802 value = +value
3803 offset = offset | 0
3804 if (!noAssert) {
3805 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3806
ab78acc6
IC
3807 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3808 }
ebd8d4e8 3809
ab78acc6
IC
3810 var i = byteLength - 1
3811 var mul = 1
3812 var sub = value < 0 ? 1 : 0
3813 this[offset + i] = value & 0xFF
3814 while (--i >= 0 && (mul *= 0x100)) {
3815 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3816 }
3817
3818 return offset + byteLength
ebd8d4e8
IC
3819}
3820
ab78acc6
IC
3821Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3822 value = +value
3823 offset = offset | 0
3824 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3825 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3826 if (value < 0) value = 0xff + value + 1
3827 this[offset] = value
3828 return offset + 1
ebd8d4e8
IC
3829}
3830
ab78acc6
IC
3831Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3832 value = +value
3833 offset = offset | 0
3834 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3835 if (Buffer.TYPED_ARRAY_SUPPORT) {
3836 this[offset] = value
3837 this[offset + 1] = (value >>> 8)
3838 } else {
3839 objectWriteUInt16(this, value, offset, true)
3840 }
3841 return offset + 2
ebd8d4e8
IC
3842}
3843
ab78acc6
IC
3844Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3845 value = +value
3846 offset = offset | 0
3847 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3848 if (Buffer.TYPED_ARRAY_SUPPORT) {
3849 this[offset] = (value >>> 8)
3850 this[offset + 1] = value
3851 } else {
3852 objectWriteUInt16(this, value, offset, false)
3853 }
3854 return offset + 2
ebd8d4e8
IC
3855}
3856
ab78acc6
IC
3857Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3858 value = +value
3859 offset = offset | 0
3860 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3861 if (Buffer.TYPED_ARRAY_SUPPORT) {
3862 this[offset] = value
3863 this[offset + 1] = (value >>> 8)
3864 this[offset + 2] = (value >>> 16)
3865 this[offset + 3] = (value >>> 24)
3866 } else {
3867 objectWriteUInt32(this, value, offset, true)
3868 }
3869 return offset + 4
3870}
3871
3872Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3873 value = +value
3874 offset = offset | 0
3875 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3876 if (value < 0) value = 0xffffffff + value + 1
3877 if (Buffer.TYPED_ARRAY_SUPPORT) {
3878 this[offset] = (value >>> 24)
3879 this[offset + 1] = (value >>> 16)
3880 this[offset + 2] = (value >>> 8)
3881 this[offset + 3] = value
3882 } else {
3883 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3884 }
ab78acc6 3885 return offset + 4
ebd8d4e8
IC
3886}
3887
ab78acc6
IC
3888function checkIEEE754 (buf, value, offset, ext, max, min) {
3889 if (value > max || value < min) throw new RangeError('value is out of bounds')
3890 if (offset + ext > buf.length) throw new RangeError('index out of range')
3891 if (offset < 0) throw new RangeError('index out of range')
3892}
ebd8d4e8 3893
ab78acc6
IC
3894function writeFloat (buf, value, offset, littleEndian, noAssert) {
3895 if (!noAssert) {
3896 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3897 }
3898 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3899 return offset + 4
3900}
ebd8d4e8 3901
ab78acc6
IC
3902Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3903 return writeFloat(this, value, offset, true, noAssert)
3904}
ebd8d4e8 3905
ab78acc6
IC
3906Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3907 return writeFloat(this, value, offset, false, noAssert)
3908}
ebd8d4e8 3909
ab78acc6
IC
3910function writeDouble (buf, value, offset, littleEndian, noAssert) {
3911 if (!noAssert) {
3912 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3913 }
ab78acc6
IC
3914 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3915 return offset + 8
ebd8d4e8
IC
3916}
3917
ab78acc6
IC
3918Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3919 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3920}
3921
ab78acc6
IC
3922Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3923 return writeDouble(this, value, offset, false, noAssert)
3924}
ebd8d4e8 3925
ab78acc6
IC
3926// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3927Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3928 if (!start) start = 0
3929 if (!end && end !== 0) end = this.length
3930 if (targetStart >= target.length) targetStart = target.length
3931 if (!targetStart) targetStart = 0
3932 if (end > 0 && end < start) end = start
3933
3934 // Copy 0 bytes; we're done
3935 if (end === start) return 0
3936 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3937
ab78acc6
IC
3938 // Fatal error conditions
3939 if (targetStart < 0) {
3940 throw new RangeError('targetStart out of bounds')
3941 }
3942 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3943 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3944
ab78acc6
IC
3945 // Are we oob?
3946 if (end > this.length) end = this.length
3947 if (target.length - targetStart < end - start) {
3948 end = target.length - targetStart + start
3949 }
ebd8d4e8 3950
ab78acc6
IC
3951 var len = end - start
3952 var i
ebd8d4e8 3953
ab78acc6
IC
3954 if (this === target && start < targetStart && targetStart < end) {
3955 // descending copy from end
3956 for (i = len - 1; i >= 0; i--) {
3957 target[i + targetStart] = this[i + start]
3958 }
3959 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3960 // ascending copy from start
3961 for (i = 0; i < len; i++) {
3962 target[i + targetStart] = this[i + start]
3963 }
3964 } else {
3965 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3966 }
ebd8d4e8 3967
ab78acc6
IC
3968 return len
3969}
ebd8d4e8 3970
ab78acc6
IC
3971// fill(value, start=0, end=buffer.length)
3972Buffer.prototype.fill = function fill (value, start, end) {
3973 if (!value) value = 0
3974 if (!start) start = 0
3975 if (!end) end = this.length
ebd8d4e8 3976
ab78acc6 3977 if (end < start) throw new RangeError('end < start')
ebd8d4e8 3978
ab78acc6
IC
3979 // Fill 0 bytes; we're done
3980 if (end === start) return
3981 if (this.length === 0) return
ebd8d4e8 3982
ab78acc6
IC
3983 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3984 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 3985
ab78acc6
IC
3986 var i
3987 if (typeof value === 'number') {
3988 for (i = start; i < end; i++) {
3989 this[i] = value
ebd8d4e8 3990 }
ab78acc6
IC
3991 } else {
3992 var bytes = utf8ToBytes(value.toString())
3993 var len = bytes.length
3994 for (i = start; i < end; i++) {
3995 this[i] = bytes[i % len]
ebd8d4e8
IC
3996 }
3997 }
ebd8d4e8 3998
ab78acc6 3999 return this
ebd8d4e8
IC
4000}
4001
ab78acc6
IC
4002/**
4003 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4004 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4005 */
4006Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4007 if (typeof Uint8Array !== 'undefined') {
4008 if (Buffer.TYPED_ARRAY_SUPPORT) {
4009 return (new Buffer(this)).buffer
4010 } else {
4011 var buf = new Uint8Array(this.length)
4012 for (var i = 0, len = buf.length; i < len; i += 1) {
4013 buf[i] = this[i]
ebd8d4e8 4014 }
ab78acc6 4015 return buf.buffer
ebd8d4e8 4016 }
ab78acc6
IC
4017 } else {
4018 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 4019 }
ebd8d4e8
IC
4020}
4021
ab78acc6
IC
4022// HELPER FUNCTIONS
4023// ================
ebd8d4e8 4024
ab78acc6 4025var BP = Buffer.prototype
ebd8d4e8 4026
ab78acc6
IC
4027/**
4028 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4029 */
4030Buffer._augment = function _augment (arr) {
4031 arr.constructor = Buffer
4032 arr._isBuffer = true
ebd8d4e8 4033
ab78acc6
IC
4034 // save reference to original Uint8Array set method before overwriting
4035 arr._set = arr.set
ebd8d4e8 4036
ab78acc6
IC
4037 // deprecated
4038 arr.get = BP.get
4039 arr.set = BP.set
ebd8d4e8 4040
ab78acc6
IC
4041 arr.write = BP.write
4042 arr.toString = BP.toString
4043 arr.toLocaleString = BP.toString
4044 arr.toJSON = BP.toJSON
4045 arr.equals = BP.equals
4046 arr.compare = BP.compare
4047 arr.indexOf = BP.indexOf
4048 arr.copy = BP.copy
4049 arr.slice = BP.slice
4050 arr.readUIntLE = BP.readUIntLE
4051 arr.readUIntBE = BP.readUIntBE
4052 arr.readUInt8 = BP.readUInt8
4053 arr.readUInt16LE = BP.readUInt16LE
4054 arr.readUInt16BE = BP.readUInt16BE
4055 arr.readUInt32LE = BP.readUInt32LE
4056 arr.readUInt32BE = BP.readUInt32BE
4057 arr.readIntLE = BP.readIntLE
4058 arr.readIntBE = BP.readIntBE
4059 arr.readInt8 = BP.readInt8
4060 arr.readInt16LE = BP.readInt16LE
4061 arr.readInt16BE = BP.readInt16BE
4062 arr.readInt32LE = BP.readInt32LE
4063 arr.readInt32BE = BP.readInt32BE
4064 arr.readFloatLE = BP.readFloatLE
4065 arr.readFloatBE = BP.readFloatBE
4066 arr.readDoubleLE = BP.readDoubleLE
4067 arr.readDoubleBE = BP.readDoubleBE
4068 arr.writeUInt8 = BP.writeUInt8
4069 arr.writeUIntLE = BP.writeUIntLE
4070 arr.writeUIntBE = BP.writeUIntBE
4071 arr.writeUInt16LE = BP.writeUInt16LE
4072 arr.writeUInt16BE = BP.writeUInt16BE
4073 arr.writeUInt32LE = BP.writeUInt32LE
4074 arr.writeUInt32BE = BP.writeUInt32BE
4075 arr.writeIntLE = BP.writeIntLE
4076 arr.writeIntBE = BP.writeIntBE
4077 arr.writeInt8 = BP.writeInt8
4078 arr.writeInt16LE = BP.writeInt16LE
4079 arr.writeInt16BE = BP.writeInt16BE
4080 arr.writeInt32LE = BP.writeInt32LE
4081 arr.writeInt32BE = BP.writeInt32BE
4082 arr.writeFloatLE = BP.writeFloatLE
4083 arr.writeFloatBE = BP.writeFloatBE
4084 arr.writeDoubleLE = BP.writeDoubleLE
4085 arr.writeDoubleBE = BP.writeDoubleBE
4086 arr.fill = BP.fill
4087 arr.inspect = BP.inspect
4088 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 4089
ab78acc6 4090 return arr
ebd8d4e8
IC
4091}
4092
ab78acc6 4093var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 4094
ab78acc6
IC
4095function base64clean (str) {
4096 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4097 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4098 // Node converts strings with length < 2 to ''
4099 if (str.length < 2) return ''
4100 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4101 while (str.length % 4 !== 0) {
4102 str = str + '='
4103 }
4104 return str
ebd8d4e8
IC
4105}
4106
ab78acc6
IC
4107function stringtrim (str) {
4108 if (str.trim) return str.trim()
4109 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
4110}
4111
ab78acc6
IC
4112function toHex (n) {
4113 if (n < 16) return '0' + n.toString(16)
4114 return n.toString(16)
ebd8d4e8
IC
4115}
4116
ab78acc6
IC
4117function utf8ToBytes (string, units) {
4118 units = units || Infinity
4119 var codePoint
4120 var length = string.length
4121 var leadSurrogate = null
4122 var bytes = []
ebd8d4e8 4123
ab78acc6
IC
4124 for (var i = 0; i < length; i++) {
4125 codePoint = string.charCodeAt(i)
ebd8d4e8 4126
ab78acc6
IC
4127 // is surrogate component
4128 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4129 // last char was a lead
4130 if (!leadSurrogate) {
4131 // no lead yet
4132 if (codePoint > 0xDBFF) {
4133 // unexpected trail
4134 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4135 continue
ebd8d4e8 4136
ab78acc6
IC
4137 } else if (i + 1 === length) {
4138 // unpaired lead
4139 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4140 continue
4141 }
ebd8d4e8 4142
ab78acc6
IC
4143 // valid lead
4144 leadSurrogate = codePoint
ebd8d4e8 4145
ab78acc6
IC
4146 continue
4147 }
ebd8d4e8 4148
ab78acc6
IC
4149 // 2 leads in a row
4150 if (codePoint < 0xDC00) {
4151 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4152 leadSurrogate = codePoint
4153 continue
4154 }
ebd8d4e8 4155
ab78acc6
IC
4156 // valid surrogate pair
4157 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4158
4159 } else if (leadSurrogate) {
4160 // valid bmp char, but last char was a lead
4161 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4162 }
4163
4164 leadSurrogate = null
4165
4166 // encode utf8
4167 if (codePoint < 0x80) {
4168 if ((units -= 1) < 0) break
4169 bytes.push(codePoint)
4170 } else if (codePoint < 0x800) {
4171 if ((units -= 2) < 0) break
4172 bytes.push(
4173 codePoint >> 0x6 | 0xC0,
4174 codePoint & 0x3F | 0x80
4175 )
4176 } else if (codePoint < 0x10000) {
4177 if ((units -= 3) < 0) break
4178 bytes.push(
4179 codePoint >> 0xC | 0xE0,
4180 codePoint >> 0x6 & 0x3F | 0x80,
4181 codePoint & 0x3F | 0x80
4182 )
4183 } else if (codePoint < 0x110000) {
4184 if ((units -= 4) < 0) break
4185 bytes.push(
4186 codePoint >> 0x12 | 0xF0,
4187 codePoint >> 0xC & 0x3F | 0x80,
4188 codePoint >> 0x6 & 0x3F | 0x80,
4189 codePoint & 0x3F | 0x80
4190 )
4191 } else {
4192 throw new Error('Invalid code point')
ebd8d4e8 4193 }
ebd8d4e8 4194 }
ab78acc6
IC
4195
4196 return bytes
4197}
4198
4199function asciiToBytes (str) {
4200 var byteArray = []
4201 for (var i = 0; i < str.length; i++) {
4202 // Node's code seems to be doing this and not & 0x7F..
4203 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 4204 }
ab78acc6 4205 return byteArray
ebd8d4e8
IC
4206}
4207
ab78acc6
IC
4208function utf16leToBytes (str, units) {
4209 var c, hi, lo
4210 var byteArray = []
4211 for (var i = 0; i < str.length; i++) {
4212 if ((units -= 2) < 0) break
ebd8d4e8 4213
ab78acc6
IC
4214 c = str.charCodeAt(i)
4215 hi = c >> 8
4216 lo = c % 256
4217 byteArray.push(lo)
4218 byteArray.push(hi)
4219 }
ebd8d4e8 4220
ab78acc6
IC
4221 return byteArray
4222}
ebd8d4e8 4223
ab78acc6
IC
4224function base64ToBytes (str) {
4225 return base64.toByteArray(base64clean(str))
4226}
ebd8d4e8 4227
ab78acc6
IC
4228function blitBuffer (src, dst, offset, length) {
4229 for (var i = 0; i < length; i++) {
4230 if ((i + offset >= dst.length) || (i >= src.length)) break
4231 dst[i + offset] = src[i]
4232 }
4233 return i
4234}
4235
4236},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4237var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4238
4239;(function (exports) {
4240 'use strict';
4241
4242 var Arr = (typeof Uint8Array !== 'undefined')
4243 ? Uint8Array
4244 : Array
ebd8d4e8 4245
ab78acc6
IC
4246 var PLUS = '+'.charCodeAt(0)
4247 var SLASH = '/'.charCodeAt(0)
4248 var NUMBER = '0'.charCodeAt(0)
4249 var LOWER = 'a'.charCodeAt(0)
4250 var UPPER = 'A'.charCodeAt(0)
4251 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4252 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4253
ab78acc6
IC
4254 function decode (elt) {
4255 var code = elt.charCodeAt(0)
4256 if (code === PLUS ||
4257 code === PLUS_URL_SAFE)
4258 return 62 // '+'
4259 if (code === SLASH ||
4260 code === SLASH_URL_SAFE)
4261 return 63 // '/'
4262 if (code < NUMBER)
4263 return -1 //no match
4264 if (code < NUMBER + 10)
4265 return code - NUMBER + 26 + 26
4266 if (code < UPPER + 26)
4267 return code - UPPER
4268 if (code < LOWER + 26)
4269 return code - LOWER + 26
4270 }
ebd8d4e8 4271
ab78acc6
IC
4272 function b64ToByteArray (b64) {
4273 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4274
ab78acc6
IC
4275 if (b64.length % 4 > 0) {
4276 throw new Error('Invalid string. Length must be a multiple of 4')
4277 }
ebd8d4e8 4278
ab78acc6
IC
4279 // the number of equal signs (place holders)
4280 // if there are two placeholders, than the two characters before it
4281 // represent one byte
4282 // if there is only one, then the three characters before it represent 2 bytes
4283 // this is just a cheap hack to not do indexOf twice
4284 var len = b64.length
4285 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4286
ab78acc6
IC
4287 // base64 is 4/3 + up to two characters of the original data
4288 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4289
ab78acc6
IC
4290 // if there are placeholders, only get up to the last complete 4 chars
4291 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4292
ab78acc6 4293 var L = 0
ebd8d4e8 4294
ab78acc6
IC
4295 function push (v) {
4296 arr[L++] = v
4297 }
ebd8d4e8 4298
ab78acc6
IC
4299 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4300 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4301 push((tmp & 0xFF0000) >> 16)
4302 push((tmp & 0xFF00) >> 8)
4303 push(tmp & 0xFF)
4304 }
ebd8d4e8 4305
ab78acc6
IC
4306 if (placeHolders === 2) {
4307 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4308 push(tmp & 0xFF)
4309 } else if (placeHolders === 1) {
4310 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4311 push((tmp >> 8) & 0xFF)
4312 push(tmp & 0xFF)
4313 }
ebd8d4e8 4314
ab78acc6
IC
4315 return arr
4316 }
ebd8d4e8 4317
ab78acc6
IC
4318 function uint8ToBase64 (uint8) {
4319 var i,
4320 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4321 output = "",
4322 temp, length
ebd8d4e8 4323
ab78acc6
IC
4324 function encode (num) {
4325 return lookup.charAt(num)
4326 }
ebd8d4e8 4327
ab78acc6
IC
4328 function tripletToBase64 (num) {
4329 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4330 }
ebd8d4e8 4331
ab78acc6
IC
4332 // go through the array every three bytes, we'll deal with trailing stuff later
4333 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4334 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4335 output += tripletToBase64(temp)
4336 }
ebd8d4e8 4337
ab78acc6
IC
4338 // pad the end with zeros, but make sure to not forget the extra bytes
4339 switch (extraBytes) {
4340 case 1:
4341 temp = uint8[uint8.length - 1]
4342 output += encode(temp >> 2)
4343 output += encode((temp << 4) & 0x3F)
4344 output += '=='
4345 break
4346 case 2:
4347 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4348 output += encode(temp >> 10)
4349 output += encode((temp >> 4) & 0x3F)
4350 output += encode((temp << 2) & 0x3F)
4351 output += '='
4352 break
4353 }
ebd8d4e8 4354
ab78acc6
IC
4355 return output
4356 }
ebd8d4e8 4357
ab78acc6
IC
4358 exports.toByteArray = b64ToByteArray
4359 exports.fromByteArray = uint8ToBase64
4360}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4361
ab78acc6
IC
4362},{}],9:[function(require,module,exports){
4363exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4364 var e, m
4365 var eLen = nBytes * 8 - mLen - 1
4366 var eMax = (1 << eLen) - 1
4367 var eBias = eMax >> 1
4368 var nBits = -7
4369 var i = isLE ? (nBytes - 1) : 0
4370 var d = isLE ? -1 : 1
4371 var s = buffer[offset + i]
4372
4373 i += d
4374
4375 e = s & ((1 << (-nBits)) - 1)
4376 s >>= (-nBits)
4377 nBits += eLen
4378 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4379
4380 m = e & ((1 << (-nBits)) - 1)
4381 e >>= (-nBits)
4382 nBits += mLen
4383 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4384
ab78acc6
IC
4385 if (e === 0) {
4386 e = 1 - eBias
4387 } else if (e === eMax) {
4388 return m ? NaN : ((s ? -1 : 1) * Infinity)
4389 } else {
4390 m = m + Math.pow(2, mLen)
4391 e = e - eBias
ebd8d4e8 4392 }
ab78acc6 4393 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4394}
4395
ab78acc6
IC
4396exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4397 var e, m, c
4398 var eLen = nBytes * 8 - mLen - 1
4399 var eMax = (1 << eLen) - 1
4400 var eBias = eMax >> 1
4401 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4402 var i = isLE ? 0 : (nBytes - 1)
4403 var d = isLE ? 1 : -1
4404 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4405
ab78acc6 4406 value = Math.abs(value)
ebd8d4e8 4407
ab78acc6
IC
4408 if (isNaN(value) || value === Infinity) {
4409 m = isNaN(value) ? 1 : 0
4410 e = eMax
4411 } else {
4412 e = Math.floor(Math.log(value) / Math.LN2)
4413 if (value * (c = Math.pow(2, -e)) < 1) {
4414 e--
4415 c *= 2
ebd8d4e8 4416 }
ab78acc6
IC
4417 if (e + eBias >= 1) {
4418 value += rt / c
4419 } else {
4420 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4421 }
ab78acc6
IC
4422 if (value * c >= 2) {
4423 e++
4424 c /= 2
ebd8d4e8 4425 }
ab78acc6
IC
4426
4427 if (e + eBias >= eMax) {
4428 m = 0
4429 e = eMax
4430 } else if (e + eBias >= 1) {
4431 m = (value * c - 1) * Math.pow(2, mLen)
4432 e = e + eBias
4433 } else {
4434 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4435 e = 0
ebd8d4e8
IC
4436 }
4437 }
ebd8d4e8 4438
ab78acc6 4439 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4440
ab78acc6
IC
4441 e = (e << mLen) | m
4442 eLen += mLen
4443 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4444
ab78acc6
IC
4445 buffer[offset + i - d] |= s * 128
4446}
ebd8d4e8 4447
ab78acc6 4448},{}],10:[function(require,module,exports){
ebd8d4e8 4449
ab78acc6
IC
4450/**
4451 * isArray
4452 */
ebd8d4e8 4453
ab78acc6 4454var isArray = Array.isArray;
ebd8d4e8
IC
4455
4456/**
ab78acc6 4457 * toString
ebd8d4e8 4458 */
ebd8d4e8 4459
ab78acc6 4460var str = Object.prototype.toString;
ebd8d4e8
IC
4461
4462/**
ab78acc6
IC
4463 * Whether or not the given `val`
4464 * is an array.
ebd8d4e8 4465 *
ab78acc6
IC
4466 * example:
4467 *
4468 * isArray([]);
4469 * // > true
4470 * isArray(arguments);
4471 * // > false
4472 * isArray('');
4473 * // > false
4474 *
4475 * @param {mixed} val
4476 * @return {bool}
ebd8d4e8 4477 */
ebd8d4e8 4478
ab78acc6
IC
4479module.exports = isArray || function (val) {
4480 return !! val && '[object Array]' == str.call(val);
4481};
4482
4483},{}],11:[function(require,module,exports){
4484// Copyright Joyent, Inc. and other Node contributors.
4485//
4486// Permission is hereby granted, free of charge, to any person obtaining a
4487// copy of this software and associated documentation files (the
4488// "Software"), to deal in the Software without restriction, including
4489// without limitation the rights to use, copy, modify, merge, publish,
4490// distribute, sublicense, and/or sell copies of the Software, and to permit
4491// persons to whom the Software is furnished to do so, subject to the
4492// following conditions:
4493//
4494// The above copyright notice and this permission notice shall be included
4495// in all copies or substantial portions of the Software.
4496//
4497// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4498// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4499// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4500// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4501// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4502// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4503// USE OR OTHER DEALINGS IN THE SOFTWARE.
4504
4505function EventEmitter() {
4506 this._events = this._events || {};
4507 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4508}
ab78acc6 4509module.exports = EventEmitter;
ebd8d4e8 4510
ab78acc6
IC
4511// Backwards-compat with node 0.10.x
4512EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4513
ab78acc6
IC
4514EventEmitter.prototype._events = undefined;
4515EventEmitter.prototype._maxListeners = undefined;
4516
4517// By default EventEmitters will print a warning if more than 10 listeners are
4518// added to it. This is a useful default which helps finding memory leaks.
4519EventEmitter.defaultMaxListeners = 10;
4520
4521// Obviously not all Emitters should be limited to 10. This function allows
4522// that to be increased. Set to zero for unlimited.
4523EventEmitter.prototype.setMaxListeners = function(n) {
4524 if (!isNumber(n) || n < 0 || isNaN(n))
4525 throw TypeError('n must be a positive number');
4526 this._maxListeners = n;
4527 return this;
4528};
4529
4530EventEmitter.prototype.emit = function(type) {
4531 var er, handler, len, args, i, listeners;
4532
4533 if (!this._events)
4534 this._events = {};
4535
4536 // If there is no 'error' event listener then throw.
4537 if (type === 'error') {
4538 if (!this._events.error ||
4539 (isObject(this._events.error) && !this._events.error.length)) {
4540 er = arguments[1];
4541 if (er instanceof Error) {
4542 throw er; // Unhandled 'error' event
4543 }
4544 throw TypeError('Uncaught, unspecified "error" event.');
4545 }
4546 }
4547
4548 handler = this._events[type];
4549
4550 if (isUndefined(handler))
4551 return false;
4552
4553 if (isFunction(handler)) {
4554 switch (arguments.length) {
4555 // fast cases
4556 case 1:
4557 handler.call(this);
4558 break;
4559 case 2:
4560 handler.call(this, arguments[1]);
4561 break;
4562 case 3:
4563 handler.call(this, arguments[1], arguments[2]);
4564 break;
4565 // slower
4566 default:
4567 len = arguments.length;
4568 args = new Array(len - 1);
4569 for (i = 1; i < len; i++)
4570 args[i - 1] = arguments[i];
4571 handler.apply(this, args);
4572 }
4573 } else if (isObject(handler)) {
4574 len = arguments.length;
4575 args = new Array(len - 1);
4576 for (i = 1; i < len; i++)
4577 args[i - 1] = arguments[i];
ebd8d4e8 4578
ab78acc6
IC
4579 listeners = handler.slice();
4580 len = listeners.length;
4581 for (i = 0; i < len; i++)
4582 listeners[i].apply(this, args);
ebd8d4e8
IC
4583 }
4584
ab78acc6
IC
4585 return true;
4586};
ebd8d4e8 4587
ab78acc6
IC
4588EventEmitter.prototype.addListener = function(type, listener) {
4589 var m;
ebd8d4e8 4590
ab78acc6
IC
4591 if (!isFunction(listener))
4592 throw TypeError('listener must be a function');
ebd8d4e8 4593
ab78acc6
IC
4594 if (!this._events)
4595 this._events = {};
ebd8d4e8 4596
ab78acc6
IC
4597 // To avoid recursion in the case that type === "newListener"! Before
4598 // adding it to the listeners, first emit "newListener".
4599 if (this._events.newListener)
4600 this.emit('newListener', type,
4601 isFunction(listener.listener) ?
4602 listener.listener : listener);
ebd8d4e8 4603
ab78acc6
IC
4604 if (!this._events[type])
4605 // Optimize the case of one listener. Don't need the extra array object.
4606 this._events[type] = listener;
4607 else if (isObject(this._events[type]))
4608 // If we've already got an array, just append.
4609 this._events[type].push(listener);
4610 else
4611 // Adding the second element, need to change to array.
4612 this._events[type] = [this._events[type], listener];
4613
4614 // Check for listener leak
4615 if (isObject(this._events[type]) && !this._events[type].warned) {
4616 var m;
4617 if (!isUndefined(this._maxListeners)) {
4618 m = this._maxListeners;
4619 } else {
4620 m = EventEmitter.defaultMaxListeners;
4621 }
4622
4623 if (m && m > 0 && this._events[type].length > m) {
4624 this._events[type].warned = true;
4625 console.error('(node) warning: possible EventEmitter memory ' +
4626 'leak detected. %d listeners added. ' +
4627 'Use emitter.setMaxListeners() to increase limit.',
4628 this._events[type].length);
4629 if (typeof console.trace === 'function') {
4630 // not supported in IE 10
4631 console.trace();
4632 }
4633 }
4634 }
ebd8d4e8 4635
ab78acc6
IC
4636 return this;
4637};
ebd8d4e8 4638
ab78acc6 4639EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4640
ab78acc6
IC
4641EventEmitter.prototype.once = function(type, listener) {
4642 if (!isFunction(listener))
4643 throw TypeError('listener must be a function');
ebd8d4e8 4644
ab78acc6 4645 var fired = false;
ebd8d4e8 4646
ab78acc6
IC
4647 function g() {
4648 this.removeListener(type, g);
ebd8d4e8 4649
ab78acc6
IC
4650 if (!fired) {
4651 fired = true;
4652 listener.apply(this, arguments);
4653 }
4654 }
ebd8d4e8 4655
ab78acc6
IC
4656 g.listener = listener;
4657 this.on(type, g);
ebd8d4e8 4658
ab78acc6
IC
4659 return this;
4660};
ebd8d4e8 4661
ab78acc6
IC
4662// emits a 'removeListener' event iff the listener was removed
4663EventEmitter.prototype.removeListener = function(type, listener) {
4664 var list, position, length, i;
ebd8d4e8 4665
ab78acc6
IC
4666 if (!isFunction(listener))
4667 throw TypeError('listener must be a function');
ebd8d4e8 4668
ab78acc6
IC
4669 if (!this._events || !this._events[type])
4670 return this;
ebd8d4e8 4671
ab78acc6
IC
4672 list = this._events[type];
4673 length = list.length;
4674 position = -1;
4675
4676 if (list === listener ||
4677 (isFunction(list.listener) && list.listener === listener)) {
4678 delete this._events[type];
4679 if (this._events.removeListener)
4680 this.emit('removeListener', type, listener);
4681
4682 } else if (isObject(list)) {
4683 for (i = length; i-- > 0;) {
4684 if (list[i] === listener ||
4685 (list[i].listener && list[i].listener === listener)) {
4686 position = i;
4687 break;
ebd8d4e8 4688 }
ab78acc6 4689 }
ebd8d4e8 4690
ab78acc6
IC
4691 if (position < 0)
4692 return this;
4693
4694 if (list.length === 1) {
4695 list.length = 0;
4696 delete this._events[type];
4697 } else {
4698 list.splice(position, 1);
ebd8d4e8 4699 }
ab78acc6
IC
4700
4701 if (this._events.removeListener)
4702 this.emit('removeListener', type, listener);
ebd8d4e8 4703 }
ab78acc6
IC
4704
4705 return this;
ebd8d4e8
IC
4706};
4707
ab78acc6
IC
4708EventEmitter.prototype.removeAllListeners = function(type) {
4709 var key, listeners;
ebd8d4e8 4710
ab78acc6
IC
4711 if (!this._events)
4712 return this;
4713
4714 // not listening for removeListener, no need to emit
4715 if (!this._events.removeListener) {
4716 if (arguments.length === 0)
4717 this._events = {};
4718 else if (this._events[type])
4719 delete this._events[type];
4720 return this;
ebd8d4e8 4721 }
ab78acc6
IC
4722
4723 // emit removeListener for all listeners on all events
4724 if (arguments.length === 0) {
4725 for (key in this._events) {
4726 if (key === 'removeListener') continue;
4727 this.removeAllListeners(key);
4728 }
4729 this.removeAllListeners('removeListener');
4730 this._events = {};
4731 return this;
ebd8d4e8 4732 }
ebd8d4e8 4733
ab78acc6
IC
4734 listeners = this._events[type];
4735
4736 if (isFunction(listeners)) {
4737 this.removeListener(type, listeners);
ebd8d4e8 4738 } else {
ab78acc6
IC
4739 // LIFO order
4740 while (listeners.length)
4741 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4742 }
ab78acc6 4743 delete this._events[type];
ebd8d4e8 4744
ab78acc6
IC
4745 return this;
4746};
ebd8d4e8 4747
ab78acc6
IC
4748EventEmitter.prototype.listeners = function(type) {
4749 var ret;
4750 if (!this._events || !this._events[type])
4751 ret = [];
4752 else if (isFunction(this._events[type]))
4753 ret = [this._events[type]];
4754 else
4755 ret = this._events[type].slice();
4756 return ret;
4757};
ebd8d4e8 4758
ab78acc6
IC
4759EventEmitter.listenerCount = function(emitter, type) {
4760 var ret;
4761 if (!emitter._events || !emitter._events[type])
4762 ret = 0;
4763 else if (isFunction(emitter._events[type]))
4764 ret = 1;
4765 else
4766 ret = emitter._events[type].length;
4767 return ret;
4768};
ebd8d4e8 4769
ab78acc6
IC
4770function isFunction(arg) {
4771 return typeof arg === 'function';
ebd8d4e8
IC
4772}
4773
ab78acc6
IC
4774function isNumber(arg) {
4775 return typeof arg === 'number';
4776}
ebd8d4e8 4777
ab78acc6
IC
4778function isObject(arg) {
4779 return typeof arg === 'object' && arg !== null;
4780}
ebd8d4e8 4781
ab78acc6
IC
4782function isUndefined(arg) {
4783 return arg === void 0;
ebd8d4e8 4784}
ebd8d4e8 4785
ab78acc6
IC
4786},{}],12:[function(require,module,exports){
4787if (typeof Object.create === 'function') {
4788 // implementation from standard node.js 'util' module
4789 module.exports = function inherits(ctor, superCtor) {
4790 ctor.super_ = superCtor
4791 ctor.prototype = Object.create(superCtor.prototype, {
4792 constructor: {
4793 value: ctor,
4794 enumerable: false,
4795 writable: true,
4796 configurable: true
4797 }
4798 });
4799 };
4800} else {
4801 // old school shim for old browsers
4802 module.exports = function inherits(ctor, superCtor) {
4803 ctor.super_ = superCtor
4804 var TempCtor = function () {}
4805 TempCtor.prototype = superCtor.prototype
4806 ctor.prototype = new TempCtor()
4807 ctor.prototype.constructor = ctor
4808 }
4809}
ebd8d4e8 4810
ab78acc6
IC
4811},{}],13:[function(require,module,exports){
4812module.exports = Array.isArray || function (arr) {
4813 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4814};
4815
ab78acc6
IC
4816},{}],14:[function(require,module,exports){
4817// shim for using process in browser
ebd8d4e8 4818
ab78acc6
IC
4819var process = module.exports = {};
4820var queue = [];
4821var draining = false;
4822var currentQueue;
4823var queueIndex = -1;
4824
4825function cleanUpNextTick() {
4826 draining = false;
4827 if (currentQueue.length) {
4828 queue = currentQueue.concat(queue);
4829 } else {
4830 queueIndex = -1;
4831 }
4832 if (queue.length) {
4833 drainQueue();
4834 }
4835}
ebd8d4e8 4836
ab78acc6
IC
4837function drainQueue() {
4838 if (draining) {
4839 return;
4840 }
4841 var timeout = setTimeout(cleanUpNextTick);
4842 draining = true;
ebd8d4e8 4843
ab78acc6
IC
4844 var len = queue.length;
4845 while(len) {
4846 currentQueue = queue;
4847 queue = [];
4848 while (++queueIndex < len) {
4849 currentQueue[queueIndex].run();
4850 }
4851 queueIndex = -1;
4852 len = queue.length;
4853 }
4854 currentQueue = null;
4855 draining = false;
4856 clearTimeout(timeout);
4857}
4858
4859process.nextTick = function (fun) {
4860 var args = new Array(arguments.length - 1);
4861 if (arguments.length > 1) {
4862 for (var i = 1; i < arguments.length; i++) {
4863 args[i - 1] = arguments[i];
4864 }
4865 }
4866 queue.push(new Item(fun, args));
4867 if (queue.length === 1 && !draining) {
4868 setTimeout(drainQueue, 0);
4869 }
ebd8d4e8
IC
4870};
4871
ab78acc6
IC
4872// v8 likes predictible objects
4873function Item(fun, array) {
4874 this.fun = fun;
4875 this.array = array;
4876}
4877Item.prototype.run = function () {
4878 this.fun.apply(null, this.array);
4879};
4880process.title = 'browser';
4881process.browser = true;
4882process.env = {};
4883process.argv = [];
4884process.version = ''; // empty string to avoid regexp issues
4885process.versions = {};
ebd8d4e8 4886
ab78acc6
IC
4887function noop() {}
4888
4889process.on = noop;
4890process.addListener = noop;
4891process.once = noop;
4892process.off = noop;
4893process.removeListener = noop;
4894process.removeAllListeners = noop;
4895process.emit = noop;
4896
4897process.binding = function (name) {
4898 throw new Error('process.binding is not supported');
4899};
ebd8d4e8 4900
ab78acc6
IC
4901// TODO(shtylman)
4902process.cwd = function () { return '/' };
4903process.chdir = function (dir) {
4904 throw new Error('process.chdir is not supported');
4905};
4906process.umask = function() { return 0; };
ebd8d4e8 4907
ab78acc6
IC
4908},{}],15:[function(require,module,exports){
4909module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4910
ab78acc6
IC
4911},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4912(function (process){
4913// Copyright Joyent, Inc. and other Node contributors.
4914//
4915// Permission is hereby granted, free of charge, to any person obtaining a
4916// copy of this software and associated documentation files (the
4917// "Software"), to deal in the Software without restriction, including
4918// without limitation the rights to use, copy, modify, merge, publish,
4919// distribute, sublicense, and/or sell copies of the Software, and to permit
4920// persons to whom the Software is furnished to do so, subject to the
4921// following conditions:
4922//
4923// The above copyright notice and this permission notice shall be included
4924// in all copies or substantial portions of the Software.
4925//
4926// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4927// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4928// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4929// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4930// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4931// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4932// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4933
ab78acc6
IC
4934// a duplex stream is just a stream that is both readable and writable.
4935// Since JS doesn't have multiple prototypal inheritance, this class
4936// prototypally inherits from Readable, and then parasitically from
4937// Writable.
ebd8d4e8 4938
ab78acc6 4939module.exports = Duplex;
ebd8d4e8 4940
ab78acc6
IC
4941/*<replacement>*/
4942var objectKeys = Object.keys || function (obj) {
4943 var keys = [];
4944 for (var key in obj) keys.push(key);
4945 return keys;
ebd8d4e8 4946}
ab78acc6 4947/*</replacement>*/
ebd8d4e8 4948
ebd8d4e8 4949
ab78acc6
IC
4950/*<replacement>*/
4951var util = require('core-util-is');
4952util.inherits = require('inherits');
4953/*</replacement>*/
ebd8d4e8 4954
ab78acc6
IC
4955var Readable = require('./_stream_readable');
4956var Writable = require('./_stream_writable');
ebd8d4e8 4957
ab78acc6 4958util.inherits(Duplex, Readable);
ebd8d4e8 4959
ab78acc6
IC
4960forEach(objectKeys(Writable.prototype), function(method) {
4961 if (!Duplex.prototype[method])
4962 Duplex.prototype[method] = Writable.prototype[method];
4963});
ebd8d4e8 4964
ab78acc6
IC
4965function Duplex(options) {
4966 if (!(this instanceof Duplex))
4967 return new Duplex(options);
ebd8d4e8 4968
ab78acc6
IC
4969 Readable.call(this, options);
4970 Writable.call(this, options);
ebd8d4e8 4971
ab78acc6
IC
4972 if (options && options.readable === false)
4973 this.readable = false;
ebd8d4e8 4974
ab78acc6
IC
4975 if (options && options.writable === false)
4976 this.writable = false;
ebd8d4e8 4977
ab78acc6
IC
4978 this.allowHalfOpen = true;
4979 if (options && options.allowHalfOpen === false)
4980 this.allowHalfOpen = false;
ebd8d4e8 4981
ab78acc6 4982 this.once('end', onend);
ebd8d4e8
IC
4983}
4984
ab78acc6
IC
4985// the no-half-open enforcer
4986function onend() {
4987 // if we allow half-open state, or if the writable side ended,
4988 // then we're ok.
4989 if (this.allowHalfOpen || this._writableState.ended)
4990 return;
ebd8d4e8 4991
ab78acc6
IC
4992 // no more data can be written.
4993 // But allow more writes to happen in this tick.
4994 process.nextTick(this.end.bind(this));
4995}
ebd8d4e8 4996
ab78acc6
IC
4997function forEach (xs, f) {
4998 for (var i = 0, l = xs.length; i < l; i++) {
4999 f(xs[i], i);
ebd8d4e8 5000 }
ab78acc6 5001}
ebd8d4e8 5002
ab78acc6
IC
5003}).call(this,require('_process'))
5004},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5005// Copyright Joyent, Inc. and other Node contributors.
5006//
5007// Permission is hereby granted, free of charge, to any person obtaining a
5008// copy of this software and associated documentation files (the
5009// "Software"), to deal in the Software without restriction, including
5010// without limitation the rights to use, copy, modify, merge, publish,
5011// distribute, sublicense, and/or sell copies of the Software, and to permit
5012// persons to whom the Software is furnished to do so, subject to the
5013// following conditions:
5014//
5015// The above copyright notice and this permission notice shall be included
5016// in all copies or substantial portions of the Software.
5017//
5018// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5019// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5020// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5021// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5022// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5023// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5024// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5025
ab78acc6
IC
5026// a passthrough stream.
5027// basically just the most minimal sort of Transform stream.
5028// Every written chunk gets output as-is.
ebd8d4e8 5029
ab78acc6 5030module.exports = PassThrough;
ebd8d4e8 5031
ab78acc6 5032var Transform = require('./_stream_transform');
ebd8d4e8 5033
ab78acc6
IC
5034/*<replacement>*/
5035var util = require('core-util-is');
5036util.inherits = require('inherits');
5037/*</replacement>*/
ebd8d4e8 5038
ab78acc6 5039util.inherits(PassThrough, Transform);
ebd8d4e8 5040
ab78acc6
IC
5041function PassThrough(options) {
5042 if (!(this instanceof PassThrough))
5043 return new PassThrough(options);
ebd8d4e8 5044
ab78acc6
IC
5045 Transform.call(this, options);
5046}
ebd8d4e8 5047
ab78acc6
IC
5048PassThrough.prototype._transform = function(chunk, encoding, cb) {
5049 cb(null, chunk);
ebd8d4e8
IC
5050};
5051
ab78acc6
IC
5052},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5053(function (process){
ebd8d4e8
IC
5054// Copyright Joyent, Inc. and other Node contributors.
5055//
5056// Permission is hereby granted, free of charge, to any person obtaining a
5057// copy of this software and associated documentation files (the
5058// "Software"), to deal in the Software without restriction, including
5059// without limitation the rights to use, copy, modify, merge, publish,
5060// distribute, sublicense, and/or sell copies of the Software, and to permit
5061// persons to whom the Software is furnished to do so, subject to the
5062// following conditions:
5063//
5064// The above copyright notice and this permission notice shall be included
5065// in all copies or substantial portions of the Software.
5066//
5067// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5068// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5069// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5070// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5071// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5072// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5073// USE OR OTHER DEALINGS IN THE SOFTWARE.
5074
ab78acc6 5075module.exports = Readable;
ebd8d4e8 5076
ab78acc6
IC
5077/*<replacement>*/
5078var isArray = require('isarray');
5079/*</replacement>*/
5080
5081
5082/*<replacement>*/
5083var Buffer = require('buffer').Buffer;
5084/*</replacement>*/
5085
5086Readable.ReadableState = ReadableState;
5087
5088var EE = require('events').EventEmitter;
5089
5090/*<replacement>*/
5091if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5092 return emitter.listeners(type).length;
ebd8d4e8 5093};
ab78acc6
IC
5094/*</replacement>*/
5095
5096var Stream = require('stream');
5097
5098/*<replacement>*/
5099var util = require('core-util-is');
5100util.inherits = require('inherits');
5101/*</replacement>*/
5102
5103var StringDecoder;
5104
5105
5106/*<replacement>*/
5107var debug = require('util');
5108if (debug && debug.debuglog) {
5109 debug = debug.debuglog('stream');
5110} else {
5111 debug = function () {};
5112}
5113/*</replacement>*/
5114
5115
5116util.inherits(Readable, Stream);
5117
5118function ReadableState(options, stream) {
5119 var Duplex = require('./_stream_duplex');
5120
5121 options = options || {};
5122
5123 // the point at which it stops calling _read() to fill the buffer
5124 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5125 var hwm = options.highWaterMark;
5126 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5127 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5128
5129 // cast to ints.
5130 this.highWaterMark = ~~this.highWaterMark;
5131
5132 this.buffer = [];
5133 this.length = 0;
5134 this.pipes = null;
5135 this.pipesCount = 0;
5136 this.flowing = null;
5137 this.ended = false;
5138 this.endEmitted = false;
5139 this.reading = false;
ebd8d4e8 5140
ab78acc6
IC
5141 // a flag to be able to tell if the onwrite cb is called immediately,
5142 // or on a later tick. We set this to true at first, because any
5143 // actions that shouldn't happen until "later" should generally also
5144 // not happen before the first write call.
5145 this.sync = true;
ebd8d4e8 5146
ab78acc6
IC
5147 // whenever we return null, then we set a flag to say
5148 // that we're awaiting a 'readable' event emission.
5149 this.needReadable = false;
5150 this.emittedReadable = false;
5151 this.readableListening = false;
ebd8d4e8 5152
ab78acc6
IC
5153
5154 // object stream flag. Used to make read(n) ignore n and to
5155 // make all the buffer merging and length checks go away
5156 this.objectMode = !!options.objectMode;
5157
5158 if (stream instanceof Duplex)
5159 this.objectMode = this.objectMode || !!options.readableObjectMode;
5160
5161 // Crypto is kind of old and crusty. Historically, its default string
5162 // encoding is 'binary' so we have to make this configurable.
5163 // Everything else in the universe uses 'utf8', though.
5164 this.defaultEncoding = options.defaultEncoding || 'utf8';
5165
5166 // when piping, we only care about 'readable' events that happen
5167 // after read()ing all the bytes and not getting any pushback.
5168 this.ranOut = false;
5169
5170 // the number of writers that are awaiting a drain event in .pipe()s
5171 this.awaitDrain = 0;
5172
5173 // if true, a maybeReadMore has been scheduled
5174 this.readingMore = false;
5175
5176 this.decoder = null;
5177 this.encoding = null;
5178 if (options.encoding) {
5179 if (!StringDecoder)
5180 StringDecoder = require('string_decoder/').StringDecoder;
5181 this.decoder = new StringDecoder(options.encoding);
5182 this.encoding = options.encoding;
ebd8d4e8 5183 }
ab78acc6 5184}
ebd8d4e8 5185
ab78acc6
IC
5186function Readable(options) {
5187 var Duplex = require('./_stream_duplex');
5188
5189 if (!(this instanceof Readable))
5190 return new Readable(options);
5191
5192 this._readableState = new ReadableState(options, this);
5193
5194 // legacy
5195 this.readable = true;
5196
5197 Stream.call(this);
5198}
5199
5200// Manually shove something into the read() buffer.
5201// This returns true if the highWaterMark has not been hit yet,
5202// similar to how Writable.write() returns true if you should
5203// write() some more.
5204Readable.prototype.push = function(chunk, encoding) {
5205 var state = this._readableState;
5206
5207 if (util.isString(chunk) && !state.objectMode) {
5208 encoding = encoding || state.defaultEncoding;
5209 if (encoding !== state.encoding) {
5210 chunk = new Buffer(chunk, encoding);
5211 encoding = '';
ebd8d4e8 5212 }
ebd8d4e8
IC
5213 }
5214
ab78acc6 5215 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
5216};
5217
ab78acc6
IC
5218// Unshift should *always* be something directly out of read()
5219Readable.prototype.unshift = function(chunk) {
5220 var state = this._readableState;
5221 return readableAddChunk(this, state, chunk, '', true);
5222};
ebd8d4e8 5223
ab78acc6
IC
5224function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5225 var er = chunkInvalid(state, chunk);
5226 if (er) {
5227 stream.emit('error', er);
5228 } else if (util.isNullOrUndefined(chunk)) {
5229 state.reading = false;
5230 if (!state.ended)
5231 onEofChunk(stream, state);
5232 } else if (state.objectMode || chunk && chunk.length > 0) {
5233 if (state.ended && !addToFront) {
5234 var e = new Error('stream.push() after EOF');
5235 stream.emit('error', e);
5236 } else if (state.endEmitted && addToFront) {
5237 var e = new Error('stream.unshift() after end event');
5238 stream.emit('error', e);
ebd8d4e8 5239 } else {
ab78acc6
IC
5240 if (state.decoder && !addToFront && !encoding)
5241 chunk = state.decoder.write(chunk);
5242
5243 if (!addToFront)
5244 state.reading = false;
5245
5246 // if we want the data now, just emit it.
5247 if (state.flowing && state.length === 0 && !state.sync) {
5248 stream.emit('data', chunk);
5249 stream.read(0);
5250 } else {
5251 // update the buffer info.
5252 state.length += state.objectMode ? 1 : chunk.length;
5253 if (addToFront)
5254 state.buffer.unshift(chunk);
5255 else
5256 state.buffer.push(chunk);
5257
5258 if (state.needReadable)
5259 emitReadable(stream);
5260 }
5261
5262 maybeReadMore(stream, state);
ebd8d4e8 5263 }
ab78acc6
IC
5264 } else if (!addToFront) {
5265 state.reading = false;
ebd8d4e8 5266 }
ebd8d4e8 5267
ab78acc6
IC
5268 return needMoreData(state);
5269}
ebd8d4e8 5270
ab78acc6
IC
5271
5272
5273// if it's past the high water mark, we can push in some more.
5274// Also, if we have no data yet, we can stand some
5275// more bytes. This is to work around cases where hwm=0,
5276// such as the repl. Also, if the push() triggered a
5277// readable event, and the user called read(largeNumber) such that
5278// needReadable was set, then we ought to push more, so that another
5279// 'readable' event will be triggered.
5280function needMoreData(state) {
5281 return !state.ended &&
5282 (state.needReadable ||
5283 state.length < state.highWaterMark ||
5284 state.length === 0);
5285}
5286
5287// backwards compatibility.
5288Readable.prototype.setEncoding = function(enc) {
5289 if (!StringDecoder)
5290 StringDecoder = require('string_decoder/').StringDecoder;
5291 this._readableState.decoder = new StringDecoder(enc);
5292 this._readableState.encoding = enc;
5293 return this;
5294};
5295
5296// Don't raise the hwm > 128MB
5297var MAX_HWM = 0x800000;
5298function roundUpToNextPowerOf2(n) {
5299 if (n >= MAX_HWM) {
5300 n = MAX_HWM;
5301 } else {
5302 // Get the next highest power of 2
5303 n--;
5304 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5305 n++;
ebd8d4e8 5306 }
ab78acc6 5307 return n;
ebd8d4e8 5308}
ebd8d4e8 5309
ab78acc6
IC
5310function howMuchToRead(n, state) {
5311 if (state.length === 0 && state.ended)
5312 return 0;
ebd8d4e8 5313
ab78acc6
IC
5314 if (state.objectMode)
5315 return n === 0 ? 0 : 1;
ebd8d4e8 5316
ab78acc6
IC
5317 if (isNaN(n) || util.isNull(n)) {
5318 // only flow one buffer at a time
5319 if (state.flowing && state.buffer.length)
5320 return state.buffer[0].length;
5321 else
5322 return state.length;
5323 }
ebd8d4e8 5324
ab78acc6
IC
5325 if (n <= 0)
5326 return 0;
ebd8d4e8 5327
ab78acc6
IC
5328 // If we're asking for more than the target buffer level,
5329 // then raise the water mark. Bump up to the next highest
5330 // power of 2, to prevent increasing it excessively in tiny
5331 // amounts.
5332 if (n > state.highWaterMark)
5333 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5334
ab78acc6
IC
5335 // don't have that much. return null, unless we've ended.
5336 if (n > state.length) {
5337 if (!state.ended) {
5338 state.needReadable = true;
5339 return 0;
5340 } else
5341 return state.length;
ebd8d4e8 5342 }
ab78acc6
IC
5343
5344 return n;
ebd8d4e8
IC
5345}
5346
ab78acc6
IC
5347// you can override either this method, or the async _read(n) below.
5348Readable.prototype.read = function(n) {
5349 debug('read', n);
5350 var state = this._readableState;
5351 var nOrig = n;
ebd8d4e8 5352
ab78acc6
IC
5353 if (!util.isNumber(n) || n > 0)
5354 state.emittedReadable = false;
5355
5356 // if we're doing read(0) to trigger a readable event, but we
5357 // already have a bunch of data in the buffer, then just trigger
5358 // the 'readable' event and move on.
5359 if (n === 0 &&
5360 state.needReadable &&
5361 (state.length >= state.highWaterMark || state.ended)) {
5362 debug('read: emitReadable', state.length, state.ended);
5363 if (state.length === 0 && state.ended)
5364 endReadable(this);
5365 else
5366 emitReadable(this);
5367 return null;
5368 }
5369
5370 n = howMuchToRead(n, state);
5371
5372 // if we've ended, and we're now clear, then finish it up.
5373 if (n === 0 && state.ended) {
5374 if (state.length === 0)
5375 endReadable(this);
5376 return null;
5377 }
5378
5379 // All the actual chunk generation logic needs to be
5380 // *below* the call to _read. The reason is that in certain
5381 // synthetic stream cases, such as passthrough streams, _read
5382 // may be a completely synchronous operation which may change
5383 // the state of the read buffer, providing enough data when
5384 // before there was *not* enough.
5385 //
5386 // So, the steps are:
5387 // 1. Figure out what the state of things will be after we do
5388 // a read from the buffer.
5389 //
5390 // 2. If that resulting state will trigger a _read, then call _read.
5391 // Note that this may be asynchronous, or synchronous. Yes, it is
5392 // deeply ugly to write APIs this way, but that still doesn't mean
5393 // that the Readable class should behave improperly, as streams are
5394 // designed to be sync/async agnostic.
5395 // Take note if the _read call is sync or async (ie, if the read call
5396 // has returned yet), so that we know whether or not it's safe to emit
5397 // 'readable' etc.
5398 //
5399 // 3. Actually pull the requested chunks out of the buffer and return.
5400
5401 // if we need a readable event, then we need to do some reading.
5402 var doRead = state.needReadable;
5403 debug('need readable', doRead);
5404
5405 // if we currently have less than the highWaterMark, then also read some
5406 if (state.length === 0 || state.length - n < state.highWaterMark) {
5407 doRead = true;
5408 debug('length less than watermark', doRead);
5409 }
5410
5411 // however, if we've ended, then there's no point, and if we're already
5412 // reading, then it's unnecessary.
5413 if (state.ended || state.reading) {
5414 doRead = false;
5415 debug('reading or ended', doRead);
5416 }
5417
5418 if (doRead) {
5419 debug('do read');
5420 state.reading = true;
5421 state.sync = true;
5422 // if the length is currently zero, then we *need* a readable event.
5423 if (state.length === 0)
5424 state.needReadable = true;
5425 // call internal read method
5426 this._read(state.highWaterMark);
5427 state.sync = false;
5428 }
5429
5430 // If _read pushed data synchronously, then `reading` will be false,
5431 // and we need to re-evaluate how much data we can return to the user.
5432 if (doRead && !state.reading)
5433 n = howMuchToRead(nOrig, state);
5434
5435 var ret;
5436 if (n > 0)
5437 ret = fromList(n, state);
5438 else
5439 ret = null;
ebd8d4e8 5440
ab78acc6
IC
5441 if (util.isNull(ret)) {
5442 state.needReadable = true;
5443 n = 0;
5444 }
ebd8d4e8 5445
ab78acc6 5446 state.length -= n;
ebd8d4e8 5447
ab78acc6
IC
5448 // If we have nothing in the buffer, then we want to know
5449 // as soon as we *do* get something into the buffer.
5450 if (state.length === 0 && !state.ended)
5451 state.needReadable = true;
ebd8d4e8 5452
ab78acc6
IC
5453 // If we tried to read() past the EOF, then emit end on the next tick.
5454 if (nOrig !== n && state.ended && state.length === 0)
5455 endReadable(this);
5456
5457 if (!util.isNull(ret))
5458 this.emit('data', ret);
5459
5460 return ret;
5461};
5462
5463function chunkInvalid(state, chunk) {
5464 var er = null;
5465 if (!util.isBuffer(chunk) &&
5466 !util.isString(chunk) &&
5467 !util.isNullOrUndefined(chunk) &&
5468 !state.objectMode) {
5469 er = new TypeError('Invalid non-string/buffer chunk');
5470 }
5471 return er;
ebd8d4e8
IC
5472}
5473
5474
ab78acc6
IC
5475function onEofChunk(stream, state) {
5476 if (state.decoder && !state.ended) {
5477 var chunk = state.decoder.end();
5478 if (chunk && chunk.length) {
5479 state.buffer.push(chunk);
5480 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5481 }
ebd8d4e8 5482 }
ab78acc6 5483 state.ended = true;
ebd8d4e8 5484
ab78acc6
IC
5485 // emit 'readable' now to make sure it gets picked up.
5486 emitReadable(stream);
5487}
5488
5489// Don't emit readable right away in sync mode, because this can trigger
5490// another read() call => stack overflow. This way, it might trigger
5491// a nextTick recursion warning, but that's not so bad.
5492function emitReadable(stream) {
5493 var state = stream._readableState;
5494 state.needReadable = false;
5495 if (!state.emittedReadable) {
5496 debug('emitReadable', state.flowing);
5497 state.emittedReadable = true;
5498 if (state.sync)
5499 process.nextTick(function() {
5500 emitReadable_(stream);
5501 });
5502 else
5503 emitReadable_(stream);
ebd8d4e8 5504 }
ab78acc6 5505}
ebd8d4e8 5506
ab78acc6
IC
5507function emitReadable_(stream) {
5508 debug('emit readable');
5509 stream.emit('readable');
5510 flow(stream);
5511}
ebd8d4e8 5512
ab78acc6
IC
5513
5514// at this point, the user has presumably seen the 'readable' event,
5515// and called read() to consume some data. that may have triggered
5516// in turn another _read(n) call, in which case reading = true if
5517// it's in progress.
5518// However, if we're not ended, or reading, and the length < hwm,
5519// then go ahead and try to read some more preemptively.
5520function maybeReadMore(stream, state) {
5521 if (!state.readingMore) {
5522 state.readingMore = true;
5523 process.nextTick(function() {
5524 maybeReadMore_(stream, state);
5525 });
ebd8d4e8 5526 }
ab78acc6 5527}
ebd8d4e8 5528
ab78acc6
IC
5529function maybeReadMore_(stream, state) {
5530 var len = state.length;
5531 while (!state.reading && !state.flowing && !state.ended &&
5532 state.length < state.highWaterMark) {
5533 debug('maybeReadMore read 0');
5534 stream.read(0);
5535 if (len === state.length)
5536 // didn't get any data, stop spinning.
5537 break;
5538 else
5539 len = state.length;
ebd8d4e8 5540 }
ab78acc6
IC
5541 state.readingMore = false;
5542}
ebd8d4e8 5543
ab78acc6
IC
5544// abstract method. to be overridden in specific implementation classes.
5545// call cb(er, data) where data is <= n in length.
5546// for virtual (non-string, non-buffer) streams, "length" is somewhat
5547// arbitrary, and perhaps not very meaningful.
5548Readable.prototype._read = function(n) {
5549 this.emit('error', new Error('not implemented'));
5550};
5551
5552Readable.prototype.pipe = function(dest, pipeOpts) {
5553 var src = this;
5554 var state = this._readableState;
5555
5556 switch (state.pipesCount) {
5557 case 0:
5558 state.pipes = dest;
5559 break;
5560 case 1:
5561 state.pipes = [state.pipes, dest];
5562 break;
5563 default:
5564 state.pipes.push(dest);
5565 break;
ebd8d4e8 5566 }
ab78acc6
IC
5567 state.pipesCount += 1;
5568 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5569
ab78acc6
IC
5570 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5571 dest !== process.stdout &&
5572 dest !== process.stderr;
ebd8d4e8 5573
ab78acc6
IC
5574 var endFn = doEnd ? onend : cleanup;
5575 if (state.endEmitted)
5576 process.nextTick(endFn);
5577 else
5578 src.once('end', endFn);
5579
5580 dest.on('unpipe', onunpipe);
5581 function onunpipe(readable) {
5582 debug('onunpipe');
5583 if (readable === src) {
5584 cleanup();
5585 }
5586 }
5587
5588 function onend() {
5589 debug('onend');
5590 dest.end();
5591 }
5592
5593 // when the dest drains, it reduces the awaitDrain counter
5594 // on the source. This would be more elegant with a .once()
5595 // handler in flow(), but adding and removing repeatedly is
5596 // too slow.
5597 var ondrain = pipeOnDrain(src);
5598 dest.on('drain', ondrain);
5599
5600 function cleanup() {
5601 debug('cleanup');
5602 // cleanup event handlers once the pipe is broken
5603 dest.removeListener('close', onclose);
5604 dest.removeListener('finish', onfinish);
5605 dest.removeListener('drain', ondrain);
5606 dest.removeListener('error', onerror);
5607 dest.removeListener('unpipe', onunpipe);
5608 src.removeListener('end', onend);
5609 src.removeListener('end', cleanup);
5610 src.removeListener('data', ondata);
5611
5612 // if the reader is waiting for a drain event from this
5613 // specific writer, then it would cause it to never start
5614 // flowing again.
5615 // So, if this is awaiting a drain, then we just call it now.
5616 // If we don't know, then assume that we are waiting for one.
5617 if (state.awaitDrain &&
5618 (!dest._writableState || dest._writableState.needDrain))
5619 ondrain();
5620 }
5621
5622 src.on('data', ondata);
5623 function ondata(chunk) {
5624 debug('ondata');
5625 var ret = dest.write(chunk);
5626 if (false === ret) {
5627 debug('false write response, pause',
5628 src._readableState.awaitDrain);
5629 src._readableState.awaitDrain++;
5630 src.pause();
5631 }
5632 }
5633
5634 // if the dest has an error, then stop piping into it.
5635 // however, don't suppress the throwing behavior for this.
5636 function onerror(er) {
5637 debug('onerror', er);
5638 unpipe();
5639 dest.removeListener('error', onerror);
5640 if (EE.listenerCount(dest, 'error') === 0)
5641 dest.emit('error', er);
5642 }
5643 // This is a brutally ugly hack to make sure that our error handler
5644 // is attached before any userland ones. NEVER DO THIS.
5645 if (!dest._events || !dest._events.error)
5646 dest.on('error', onerror);
5647 else if (isArray(dest._events.error))
5648 dest._events.error.unshift(onerror);
5649 else
5650 dest._events.error = [onerror, dest._events.error];
5651
5652
5653
5654 // Both close and finish should trigger unpipe, but only once.
5655 function onclose() {
5656 dest.removeListener('finish', onfinish);
5657 unpipe();
ebd8d4e8 5658 }
ab78acc6
IC
5659 dest.once('close', onclose);
5660 function onfinish() {
5661 debug('onfinish');
5662 dest.removeListener('close', onclose);
5663 unpipe();
5664 }
5665 dest.once('finish', onfinish);
ebd8d4e8 5666
ab78acc6
IC
5667 function unpipe() {
5668 debug('unpipe');
5669 src.unpipe(dest);
ebd8d4e8
IC
5670 }
5671
ab78acc6
IC
5672 // tell the dest that it's being piped to
5673 dest.emit('pipe', src);
5674
5675 // start the flow if it hasn't been started already.
5676 if (!state.flowing) {
5677 debug('pipe resume');
5678 src.resume();
ebd8d4e8
IC
5679 }
5680
ab78acc6
IC
5681 return dest;
5682};
5683
5684function pipeOnDrain(src) {
5685 return function() {
5686 var state = src._readableState;
5687 debug('pipeOnDrain', state.awaitDrain);
5688 if (state.awaitDrain)
5689 state.awaitDrain--;
5690 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5691 state.flowing = true;
5692 flow(src);
5693 }
5694 };
5695}
5696
5697
5698Readable.prototype.unpipe = function(dest) {
5699 var state = this._readableState;
5700
5701 // if we're not piping anywhere, then do nothing.
5702 if (state.pipesCount === 0)
5703 return this;
5704
5705 // just one destination. most common case.
5706 if (state.pipesCount === 1) {
5707 // passed in one, but it's not the right one.
5708 if (dest && dest !== state.pipes)
5709 return this;
5710
5711 if (!dest)
5712 dest = state.pipes;
5713
5714 // got a match.
5715 state.pipes = null;
5716 state.pipesCount = 0;
5717 state.flowing = false;
5718 if (dest)
5719 dest.emit('unpipe', this);
5720 return this;
ebd8d4e8
IC
5721 }
5722
ab78acc6
IC
5723 // slow case. multiple pipe destinations.
5724
5725 if (!dest) {
5726 // remove all.
5727 var dests = state.pipes;
5728 var len = state.pipesCount;
5729 state.pipes = null;
5730 state.pipesCount = 0;
5731 state.flowing = false;
5732
5733 for (var i = 0; i < len; i++)
5734 dests[i].emit('unpipe', this);
5735 return this;
ebd8d4e8
IC
5736 }
5737
ab78acc6
IC
5738 // try to find the right one.
5739 var i = indexOf(state.pipes, dest);
5740 if (i === -1)
5741 return this;
5742
5743 state.pipes.splice(i, 1);
5744 state.pipesCount -= 1;
5745 if (state.pipesCount === 1)
5746 state.pipes = state.pipes[0];
5747
5748 dest.emit('unpipe', this);
ebd8d4e8 5749
ab78acc6
IC
5750 return this;
5751};
5752
5753// set up data events if they are asked for
5754// Ensure readable listeners eventually get something
5755Readable.prototype.on = function(ev, fn) {
5756 var res = Stream.prototype.on.call(this, ev, fn);
5757
5758 // If listening to data, and it has not explicitly been paused,
5759 // then call resume to start the flow of data on the next tick.
5760 if (ev === 'data' && false !== this._readableState.flowing) {
5761 this.resume();
5762 }
5763
5764 if (ev === 'readable' && this.readable) {
5765 var state = this._readableState;
5766 if (!state.readableListening) {
5767 state.readableListening = true;
5768 state.emittedReadable = false;
5769 state.needReadable = true;
5770 if (!state.reading) {
5771 var self = this;
5772 process.nextTick(function() {
5773 debug('readable nexttick read 0');
5774 self.read(0);
5775 });
5776 } else if (state.length) {
5777 emitReadable(this, state);
5778 }
ebd8d4e8
IC
5779 }
5780 }
5781
ab78acc6
IC
5782 return res;
5783};
5784Readable.prototype.addListener = Readable.prototype.on;
5785
5786// pause() and resume() are remnants of the legacy readable stream API
5787// If the user uses them, then switch into old mode.
5788Readable.prototype.resume = function() {
5789 var state = this._readableState;
5790 if (!state.flowing) {
5791 debug('resume');
5792 state.flowing = true;
5793 if (!state.reading) {
5794 debug('resume read 0');
5795 this.read(0);
5796 }
5797 resume(this, state);
5798 }
5799 return this;
5800};
ebd8d4e8 5801
ab78acc6
IC
5802function resume(stream, state) {
5803 if (!state.resumeScheduled) {
5804 state.resumeScheduled = true;
5805 process.nextTick(function() {
5806 resume_(stream, state);
ebd8d4e8
IC
5807 });
5808 }
ebd8d4e8
IC
5809}
5810
ab78acc6
IC
5811function resume_(stream, state) {
5812 state.resumeScheduled = false;
5813 stream.emit('resume');
5814 flow(stream);
5815 if (state.flowing && !state.reading)
5816 stream.read(0);
ebd8d4e8
IC
5817}
5818
ab78acc6
IC
5819Readable.prototype.pause = function() {
5820 debug('call pause flowing=%j', this._readableState.flowing);
5821 if (false !== this._readableState.flowing) {
5822 debug('pause');
5823 this._readableState.flowing = false;
5824 this.emit('pause');
5825 }
5826 return this;
5827};
ebd8d4e8 5828
ab78acc6
IC
5829function flow(stream) {
5830 var state = stream._readableState;
5831 debug('flow', state.flowing);
5832 if (state.flowing) {
5833 do {
5834 var chunk = stream.read();
5835 } while (null !== chunk && state.flowing);
5836 }
ebd8d4e8
IC
5837}
5838
ab78acc6
IC
5839// wrap an old-style stream as the async data source.
5840// This is *not* part of the readable stream interface.
5841// It is an ugly unfortunate mess of history.
5842Readable.prototype.wrap = function(stream) {
5843 var state = this._readableState;
5844 var paused = false;
ebd8d4e8 5845
ab78acc6
IC
5846 var self = this;
5847 stream.on('end', function() {
5848 debug('wrapped end');
5849 if (state.decoder && !state.ended) {
5850 var chunk = state.decoder.end();
5851 if (chunk && chunk.length)
5852 self.push(chunk);
ebd8d4e8 5853 }
ab78acc6
IC
5854
5855 self.push(null);
ebd8d4e8 5856 });
ebd8d4e8 5857
ab78acc6
IC
5858 stream.on('data', function(chunk) {
5859 debug('wrapped data');
5860 if (state.decoder)
5861 chunk = state.decoder.write(chunk);
5862 if (!chunk || !state.objectMode && !chunk.length)
5863 return;
ebd8d4e8 5864
ab78acc6
IC
5865 var ret = self.push(chunk);
5866 if (!ret) {
5867 paused = true;
5868 stream.pause();
ebd8d4e8 5869 }
ab78acc6
IC
5870 });
5871
5872 // proxy all the other methods.
5873 // important when wrapping filters and duplexes.
5874 for (var i in stream) {
5875 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5876 this[i] = function(method) { return function() {
5877 return stream[method].apply(stream, arguments);
5878 }}(i);
ebd8d4e8
IC
5879 }
5880 }
ab78acc6
IC
5881
5882 // proxy certain important events.
5883 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5884 forEach(events, function(ev) {
5885 stream.on(ev, self.emit.bind(self, ev));
5886 });
5887
5888 // when we try to consume some more bytes, simply unpause the
5889 // underlying stream.
5890 self._read = function(n) {
5891 debug('wrapped _read', n);
5892 if (paused) {
5893 paused = false;
5894 stream.resume();
ebd8d4e8 5895 }
ab78acc6
IC
5896 };
5897
5898 return self;
5899};
5900
5901
5902
5903// exposed for testing purposes only.
5904Readable._fromList = fromList;
5905
5906// Pluck off n bytes from an array of buffers.
5907// Length is the combined lengths of all the buffers in the list.
5908function fromList(n, state) {
5909 var list = state.buffer;
5910 var length = state.length;
5911 var stringMode = !!state.decoder;
5912 var objectMode = !!state.objectMode;
5913 var ret;
5914
5915 // nothing in the list, definitely empty.
5916 if (list.length === 0)
5917 return null;
5918
5919 if (length === 0)
5920 ret = null;
5921 else if (objectMode)
5922 ret = list.shift();
5923 else if (!n || n >= length) {
5924 // read it all, truncate the array.
5925 if (stringMode)
5926 ret = list.join('');
5927 else
5928 ret = Buffer.concat(list, length);
5929 list.length = 0;
5930 } else {
5931 // read just some of it.
5932 if (n < list[0].length) {
5933 // just take a part of the first list item.
5934 // slice is the same for buffers and strings.
5935 var buf = list[0];
5936 ret = buf.slice(0, n);
5937 list[0] = buf.slice(n);
5938 } else if (n === list[0].length) {
5939 // first list is a perfect match
5940 ret = list.shift();
ebd8d4e8 5941 } else {
ab78acc6
IC
5942 // complex case.
5943 // we have enough to cover it, but it spans past the first buffer.
5944 if (stringMode)
5945 ret = '';
5946 else
5947 ret = new Buffer(n);
ebd8d4e8 5948
ab78acc6
IC
5949 var c = 0;
5950 for (var i = 0, l = list.length; i < l && c < n; i++) {
5951 var buf = list[0];
5952 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5953
ab78acc6
IC
5954 if (stringMode)
5955 ret += buf.slice(0, cpy);
5956 else
5957 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5958
ab78acc6
IC
5959 if (cpy < buf.length)
5960 list[0] = buf.slice(cpy);
5961 else
5962 list.shift();
ebd8d4e8 5963
ab78acc6
IC
5964 c += cpy;
5965 }
5966 }
ebd8d4e8
IC
5967 }
5968
ab78acc6 5969 return ret;
ebd8d4e8
IC
5970}
5971
ab78acc6
IC
5972function endReadable(stream) {
5973 var state = stream._readableState;
ebd8d4e8 5974
ab78acc6
IC
5975 // If we get here before consuming all the bytes, then that is a
5976 // bug in node. Should never happen.
5977 if (state.length > 0)
5978 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 5979
ab78acc6
IC
5980 if (!state.endEmitted) {
5981 state.ended = true;
5982 process.nextTick(function() {
5983 // Check that we didn't get one last unshift.
5984 if (!state.endEmitted && state.length === 0) {
5985 state.endEmitted = true;
5986 stream.readable = false;
5987 stream.emit('end');
5988 }
5989 });
5990 }
ebd8d4e8 5991}
ebd8d4e8 5992
ab78acc6
IC
5993function forEach (xs, f) {
5994 for (var i = 0, l = xs.length; i < l; i++) {
5995 f(xs[i], i);
5996 }
ebd8d4e8 5997}
ebd8d4e8 5998
ab78acc6
IC
5999function indexOf (xs, x) {
6000 for (var i = 0, l = xs.length; i < l; i++) {
6001 if (xs[i] === x) return i;
6002 }
6003 return -1;
ebd8d4e8 6004}
ebd8d4e8 6005
ab78acc6
IC
6006}).call(this,require('_process'))
6007},{"./_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){
6008// Copyright Joyent, Inc. and other Node contributors.
6009//
6010// Permission is hereby granted, free of charge, to any person obtaining a
6011// copy of this software and associated documentation files (the
6012// "Software"), to deal in the Software without restriction, including
6013// without limitation the rights to use, copy, modify, merge, publish,
6014// distribute, sublicense, and/or sell copies of the Software, and to permit
6015// persons to whom the Software is furnished to do so, subject to the
6016// following conditions:
6017//
6018// The above copyright notice and this permission notice shall be included
6019// in all copies or substantial portions of the Software.
6020//
6021// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6022// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6023// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6024// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6025// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6026// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6027// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6028
ebd8d4e8 6029
ab78acc6
IC
6030// a transform stream is a readable/writable stream where you do
6031// something with the data. Sometimes it's called a "filter",
6032// but that's not a great name for it, since that implies a thing where
6033// some bits pass through, and others are simply ignored. (That would
6034// be a valid example of a transform, of course.)
6035//
6036// While the output is causally related to the input, it's not a
6037// necessarily symmetric or synchronous transformation. For example,
6038// a zlib stream might take multiple plain-text writes(), and then
6039// emit a single compressed chunk some time in the future.
6040//
6041// Here's how this works:
6042//
6043// The Transform stream has all the aspects of the readable and writable
6044// stream classes. When you write(chunk), that calls _write(chunk,cb)
6045// internally, and returns false if there's a lot of pending writes
6046// buffered up. When you call read(), that calls _read(n) until
6047// there's enough pending readable data buffered up.
6048//
6049// In a transform stream, the written data is placed in a buffer. When
6050// _read(n) is called, it transforms the queued up data, calling the
6051// buffered _write cb's as it consumes chunks. If consuming a single
6052// written chunk would result in multiple output chunks, then the first
6053// outputted bit calls the readcb, and subsequent chunks just go into
6054// the read buffer, and will cause it to emit 'readable' if necessary.
6055//
6056// This way, back-pressure is actually determined by the reading side,
6057// since _read has to be called to start processing a new chunk. However,
6058// a pathological inflate type of transform can cause excessive buffering
6059// here. For example, imagine a stream where every byte of input is
6060// interpreted as an integer from 0-255, and then results in that many
6061// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6062// 1kb of data being output. In this case, you could write a very small
6063// amount of input, and end up with a very large amount of output. In
6064// such a pathological inflating mechanism, there'd be no way to tell
6065// the system to stop doing the transform. A single 4MB write could
6066// cause the system to run out of memory.
6067//
6068// However, even in such a pathological case, only a single written chunk
6069// would be consumed, and then the rest would wait (un-transformed) until
6070// the results of the previous transformed chunk were consumed.
ebd8d4e8 6071
ab78acc6 6072module.exports = Transform;
ebd8d4e8 6073
ab78acc6 6074var Duplex = require('./_stream_duplex');
ebd8d4e8 6075
ab78acc6
IC
6076/*<replacement>*/
6077var util = require('core-util-is');
6078util.inherits = require('inherits');
6079/*</replacement>*/
6080
6081util.inherits(Transform, Duplex);
6082
6083
6084function TransformState(options, stream) {
6085 this.afterTransform = function(er, data) {
6086 return afterTransform(stream, er, data);
6087 };
6088
6089 this.needTransform = false;
6090 this.transforming = false;
6091 this.writecb = null;
6092 this.writechunk = null;
ebd8d4e8 6093}
ebd8d4e8 6094
ab78acc6
IC
6095function afterTransform(stream, er, data) {
6096 var ts = stream._transformState;
6097 ts.transforming = false;
6098
6099 var cb = ts.writecb;
6100
6101 if (!cb)
6102 return stream.emit('error', new Error('no writecb in Transform class'));
6103
6104 ts.writechunk = null;
6105 ts.writecb = null;
6106
6107 if (!util.isNullOrUndefined(data))
6108 stream.push(data);
6109
6110 if (cb)
6111 cb(er);
6112
6113 var rs = stream._readableState;
6114 rs.reading = false;
6115 if (rs.needReadable || rs.length < rs.highWaterMark) {
6116 stream._read(rs.highWaterMark);
6117 }
ebd8d4e8 6118}
ebd8d4e8 6119
ab78acc6
IC
6120
6121function Transform(options) {
6122 if (!(this instanceof Transform))
6123 return new Transform(options);
6124
6125 Duplex.call(this, options);
6126
6127 this._transformState = new TransformState(options, this);
6128
6129 // when the writable side finishes, then flush out anything remaining.
6130 var stream = this;
6131
6132 // start out asking for a readable event once data is transformed.
6133 this._readableState.needReadable = true;
6134
6135 // we have implemented the _read method, and done the other things
6136 // that Readable wants before the first _read call, so unset the
6137 // sync guard flag.
6138 this._readableState.sync = false;
6139
6140 this.once('prefinish', function() {
6141 if (util.isFunction(this._flush))
6142 this._flush(function(er) {
6143 done(stream, er);
6144 });
6145 else
6146 done(stream);
6147 });
ebd8d4e8 6148}
ebd8d4e8 6149
ab78acc6
IC
6150Transform.prototype.push = function(chunk, encoding) {
6151 this._transformState.needTransform = false;
6152 return Duplex.prototype.push.call(this, chunk, encoding);
6153};
6154
6155// This is the part where you do stuff!
6156// override this function in implementation classes.
6157// 'chunk' is an input chunk.
6158//
6159// Call `push(newChunk)` to pass along transformed output
6160// to the readable side. You may call 'push' zero or more times.
6161//
6162// Call `cb(err)` when you are done with this chunk. If you pass
6163// an error, then that'll put the hurt on the whole operation. If you
6164// never call cb(), then you'll never get another chunk.
6165Transform.prototype._transform = function(chunk, encoding, cb) {
6166 throw new Error('not implemented');
6167};
6168
6169Transform.prototype._write = function(chunk, encoding, cb) {
6170 var ts = this._transformState;
6171 ts.writecb = cb;
6172 ts.writechunk = chunk;
6173 ts.writeencoding = encoding;
6174 if (!ts.transforming) {
6175 var rs = this._readableState;
6176 if (ts.needTransform ||
6177 rs.needReadable ||
6178 rs.length < rs.highWaterMark)
6179 this._read(rs.highWaterMark);
6180 }
6181};
6182
6183// Doesn't matter what the args are here.
6184// _transform does all the work.
6185// That we got here means that the readable side wants more data.
6186Transform.prototype._read = function(n) {
6187 var ts = this._transformState;
ebd8d4e8 6188
ab78acc6
IC
6189 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6190 ts.transforming = true;
6191 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6192 } else {
6193 // mark that we need a transform, so that any data that comes in
6194 // will get processed, now that we've asked for it.
6195 ts.needTransform = true;
6196 }
6197};
ebd8d4e8 6198
ebd8d4e8 6199
ab78acc6
IC
6200function done(stream, er) {
6201 if (er)
6202 return stream.emit('error', er);
ebd8d4e8 6203
ab78acc6
IC
6204 // if there's nothing in the write buffer, then that means
6205 // that nothing more will ever be provided
6206 var ws = stream._writableState;
6207 var ts = stream._transformState;
ebd8d4e8 6208
ab78acc6
IC
6209 if (ws.length)
6210 throw new Error('calling transform done when ws.length != 0');
6211
6212 if (ts.transforming)
6213 throw new Error('calling transform done when still transforming');
6214
6215 return stream.push(null);
ebd8d4e8
IC
6216}
6217
ab78acc6
IC
6218},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6219(function (process){
6220// Copyright Joyent, Inc. and other Node contributors.
6221//
6222// Permission is hereby granted, free of charge, to any person obtaining a
6223// copy of this software and associated documentation files (the
6224// "Software"), to deal in the Software without restriction, including
6225// without limitation the rights to use, copy, modify, merge, publish,
6226// distribute, sublicense, and/or sell copies of the Software, and to permit
6227// persons to whom the Software is furnished to do so, subject to the
6228// following conditions:
6229//
6230// The above copyright notice and this permission notice shall be included
6231// in all copies or substantial portions of the Software.
6232//
6233// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6234// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6235// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6236// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6237// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6238// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6239// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6240
ab78acc6
IC
6241// A bit simpler than readable streams.
6242// Implement an async ._write(chunk, cb), and it'll handle all
6243// the drain event emission and buffering.
ebd8d4e8 6244
ab78acc6 6245module.exports = Writable;
ebd8d4e8 6246
ab78acc6
IC
6247/*<replacement>*/
6248var Buffer = require('buffer').Buffer;
6249/*</replacement>*/
ebd8d4e8 6250
ab78acc6 6251Writable.WritableState = WritableState;
ebd8d4e8
IC
6252
6253
ab78acc6
IC
6254/*<replacement>*/
6255var util = require('core-util-is');
6256util.inherits = require('inherits');
6257/*</replacement>*/
ebd8d4e8 6258
ab78acc6 6259var Stream = require('stream');
ebd8d4e8 6260
ab78acc6 6261util.inherits(Writable, Stream);
ebd8d4e8 6262
ab78acc6
IC
6263function WriteReq(chunk, encoding, cb) {
6264 this.chunk = chunk;
6265 this.encoding = encoding;
6266 this.callback = cb;
ebd8d4e8
IC
6267}
6268
ab78acc6
IC
6269function WritableState(options, stream) {
6270 var Duplex = require('./_stream_duplex');
ebd8d4e8 6271
ab78acc6 6272 options = options || {};
ebd8d4e8 6273
ab78acc6
IC
6274 // the point at which write() starts returning false
6275 // Note: 0 is a valid value, means that we always return false if
6276 // the entire buffer is not flushed immediately on write()
6277 var hwm = options.highWaterMark;
6278 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6279 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6280
ab78acc6
IC
6281 // object stream flag to indicate whether or not this stream
6282 // contains buffers or objects.
6283 this.objectMode = !!options.objectMode;
ebd8d4e8 6284
ab78acc6
IC
6285 if (stream instanceof Duplex)
6286 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6287
ab78acc6
IC
6288 // cast to ints.
6289 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6290
ab78acc6
IC
6291 this.needDrain = false;
6292 // at the start of calling end()
6293 this.ending = false;
6294 // when end() has been called, and returned
6295 this.ended = false;
6296 // when 'finish' is emitted
6297 this.finished = false;
ebd8d4e8 6298
ab78acc6
IC
6299 // should we decode strings into buffers before passing to _write?
6300 // this is here so that some node-core streams can optimize string
6301 // handling at a lower level.
6302 var noDecode = options.decodeStrings === false;
6303 this.decodeStrings = !noDecode;
ebd8d4e8 6304
ab78acc6
IC
6305 // Crypto is kind of old and crusty. Historically, its default string
6306 // encoding is 'binary' so we have to make this configurable.
6307 // Everything else in the universe uses 'utf8', though.
6308 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6309
ab78acc6
IC
6310 // not an actual buffer we keep track of, but a measurement
6311 // of how much we're waiting to get pushed to some underlying
6312 // socket or file.
6313 this.length = 0;
ebd8d4e8 6314
ab78acc6
IC
6315 // a flag to see when we're in the middle of a write.
6316 this.writing = false;
ebd8d4e8 6317
ab78acc6
IC
6318 // when true all writes will be buffered until .uncork() call
6319 this.corked = 0;
ebd8d4e8 6320
ab78acc6
IC
6321 // a flag to be able to tell if the onwrite cb is called immediately,
6322 // or on a later tick. We set this to true at first, because any
6323 // actions that shouldn't happen until "later" should generally also
6324 // not happen before the first write call.
6325 this.sync = true;
ebd8d4e8 6326
ab78acc6
IC
6327 // a flag to know if we're processing previously buffered items, which
6328 // may call the _write() callback in the same tick, so that we don't
6329 // end up in an overlapped onwrite situation.
6330 this.bufferProcessing = false;
ebd8d4e8 6331
ab78acc6
IC
6332 // the callback that's passed to _write(chunk,cb)
6333 this.onwrite = function(er) {
6334 onwrite(stream, er);
6335 };
ebd8d4e8 6336
ab78acc6
IC
6337 // the callback that the user supplies to write(chunk,encoding,cb)
6338 this.writecb = null;
ebd8d4e8 6339
ab78acc6
IC
6340 // the amount that is being written when _write is called.
6341 this.writelen = 0;
ebd8d4e8 6342
ab78acc6 6343 this.buffer = [];
ebd8d4e8 6344
ab78acc6
IC
6345 // number of pending user-supplied write callbacks
6346 // this must be 0 before 'finish' can be emitted
6347 this.pendingcb = 0;
ebd8d4e8 6348
ab78acc6
IC
6349 // emit prefinish if the only thing we're waiting for is _write cbs
6350 // This is relevant for synchronous Transform streams
6351 this.prefinished = false;
ebd8d4e8 6352
ab78acc6
IC
6353 // True if the error was already emitted and should not be thrown again
6354 this.errorEmitted = false;
ebd8d4e8
IC
6355}
6356
ab78acc6
IC
6357function Writable(options) {
6358 var Duplex = require('./_stream_duplex');
ebd8d4e8 6359
ab78acc6
IC
6360 // Writable ctor is applied to Duplexes, though they're not
6361 // instanceof Writable, they're instanceof Readable.
6362 if (!(this instanceof Writable) && !(this instanceof Duplex))
6363 return new Writable(options);
ebd8d4e8 6364
ab78acc6 6365 this._writableState = new WritableState(options, this);
ebd8d4e8 6366
ab78acc6
IC
6367 // legacy.
6368 this.writable = true;
ebd8d4e8 6369
ab78acc6 6370 Stream.call(this);
ebd8d4e8
IC
6371}
6372
ab78acc6
IC
6373// Otherwise people can pipe Writable streams, which is just wrong.
6374Writable.prototype.pipe = function() {
6375 this.emit('error', new Error('Cannot pipe. Not readable.'));
6376};
ebd8d4e8 6377
ebd8d4e8 6378
ab78acc6
IC
6379function writeAfterEnd(stream, state, cb) {
6380 var er = new Error('write after end');
6381 // TODO: defer error events consistently everywhere, not just the cb
6382 stream.emit('error', er);
6383 process.nextTick(function() {
6384 cb(er);
6385 });
ebd8d4e8
IC
6386}
6387
ab78acc6
IC
6388// If we get something that is not a buffer, string, null, or undefined,
6389// and we're not in objectMode, then that's an error.
6390// Otherwise stream chunks are all considered to be of length=1, and the
6391// watermarks determine how many objects to keep in the buffer, rather than
6392// how many bytes or characters.
6393function validChunk(stream, state, chunk, cb) {
6394 var valid = true;
6395 if (!util.isBuffer(chunk) &&
6396 !util.isString(chunk) &&
6397 !util.isNullOrUndefined(chunk) &&
6398 !state.objectMode) {
6399 var er = new TypeError('Invalid non-string/buffer chunk');
6400 stream.emit('error', er);
6401 process.nextTick(function() {
6402 cb(er);
6403 });
6404 valid = false;
6405 }
6406 return valid;
ebd8d4e8
IC
6407}
6408
ab78acc6
IC
6409Writable.prototype.write = function(chunk, encoding, cb) {
6410 var state = this._writableState;
6411 var ret = false;
ebd8d4e8 6412
ab78acc6
IC
6413 if (util.isFunction(encoding)) {
6414 cb = encoding;
6415 encoding = null;
ebd8d4e8 6416 }
ebd8d4e8 6417
ab78acc6
IC
6418 if (util.isBuffer(chunk))
6419 encoding = 'buffer';
6420 else if (!encoding)
6421 encoding = state.defaultEncoding;
6422
6423 if (!util.isFunction(cb))
6424 cb = function() {};
6425
6426 if (state.ended)
6427 writeAfterEnd(this, state, cb);
6428 else if (validChunk(this, state, chunk, cb)) {
6429 state.pendingcb++;
6430 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6431 }
ebd8d4e8 6432
ab78acc6
IC
6433 return ret;
6434};
6435
6436Writable.prototype.cork = function() {
6437 var state = this._writableState;
6438
6439 state.corked++;
6440};
ebd8d4e8 6441
ab78acc6
IC
6442Writable.prototype.uncork = function() {
6443 var state = this._writableState;
ebd8d4e8 6444
ab78acc6
IC
6445 if (state.corked) {
6446 state.corked--;
ebd8d4e8 6447
ab78acc6
IC
6448 if (!state.writing &&
6449 !state.corked &&
6450 !state.finished &&
6451 !state.bufferProcessing &&
6452 state.buffer.length)
6453 clearBuffer(this, state);
ebd8d4e8 6454 }
ab78acc6 6455};
ebd8d4e8 6456
ab78acc6
IC
6457function decodeChunk(state, chunk, encoding) {
6458 if (!state.objectMode &&
6459 state.decodeStrings !== false &&
6460 util.isString(chunk)) {
6461 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6462 }
ab78acc6 6463 return chunk;
ebd8d4e8
IC
6464}
6465
ab78acc6
IC
6466// if we're already writing something, then just put this
6467// in the queue, and wait our turn. Otherwise, call _write
6468// If we return false, then we need a drain event, so set that flag.
6469function writeOrBuffer(stream, state, chunk, encoding, cb) {
6470 chunk = decodeChunk(state, chunk, encoding);
6471 if (util.isBuffer(chunk))
6472 encoding = 'buffer';
6473 var len = state.objectMode ? 1 : chunk.length;
6474
6475 state.length += len;
6476
6477 var ret = state.length < state.highWaterMark;
6478 // we must ensure that previous needDrain will not be reset to false.
6479 if (!ret)
6480 state.needDrain = true;
6481
6482 if (state.writing || state.corked)
6483 state.buffer.push(new WriteReq(chunk, encoding, cb));
6484 else
6485 doWrite(stream, state, false, len, chunk, encoding, cb);
6486
6487 return ret;
ebd8d4e8
IC
6488}
6489
ab78acc6
IC
6490function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6491 state.writelen = len;
6492 state.writecb = cb;
6493 state.writing = true;
6494 state.sync = true;
6495 if (writev)
6496 stream._writev(chunk, state.onwrite);
6497 else
6498 stream._write(chunk, encoding, state.onwrite);
6499 state.sync = false;
ebd8d4e8
IC
6500}
6501
ab78acc6
IC
6502function onwriteError(stream, state, sync, er, cb) {
6503 if (sync)
6504 process.nextTick(function() {
6505 state.pendingcb--;
6506 cb(er);
6507 });
6508 else {
6509 state.pendingcb--;
6510 cb(er);
6511 }
ebd8d4e8 6512
ab78acc6
IC
6513 stream._writableState.errorEmitted = true;
6514 stream.emit('error', er);
6515}
ebd8d4e8 6516
ab78acc6
IC
6517function onwriteStateUpdate(state) {
6518 state.writing = false;
6519 state.writecb = null;
6520 state.length -= state.writelen;
6521 state.writelen = 0;
6522}
ebd8d4e8 6523
ab78acc6
IC
6524function onwrite(stream, er) {
6525 var state = stream._writableState;
6526 var sync = state.sync;
6527 var cb = state.writecb;
ebd8d4e8 6528
ab78acc6 6529 onwriteStateUpdate(state);
ebd8d4e8 6530
ab78acc6
IC
6531 if (er)
6532 onwriteError(stream, state, sync, er, cb);
6533 else {
6534 // Check if we're actually ready to finish, but don't emit yet
6535 var finished = needFinish(stream, state);
ebd8d4e8 6536
ab78acc6
IC
6537 if (!finished &&
6538 !state.corked &&
6539 !state.bufferProcessing &&
6540 state.buffer.length) {
6541 clearBuffer(stream, state);
6542 }
6543
6544 if (sync) {
6545 process.nextTick(function() {
6546 afterWrite(stream, state, finished, cb);
6547 });
6548 } else {
6549 afterWrite(stream, state, finished, cb);
ebd8d4e8 6550 }
ebd8d4e8
IC
6551 }
6552}
6553
ab78acc6
IC
6554function afterWrite(stream, state, finished, cb) {
6555 if (!finished)
6556 onwriteDrain(stream, state);
6557 state.pendingcb--;
6558 cb();
6559 finishMaybe(stream, state);
6560}
6561
6562// Must force callback to be called on nextTick, so that we don't
6563// emit 'drain' before the write() consumer gets the 'false' return
6564// value, and has a chance to attach a 'drain' listener.
6565function onwriteDrain(stream, state) {
6566 if (state.length === 0 && state.needDrain) {
6567 state.needDrain = false;
6568 stream.emit('drain');
ebd8d4e8
IC
6569 }
6570}
6571
ebd8d4e8 6572
ab78acc6
IC
6573// if there's something in the buffer waiting, then process it
6574function clearBuffer(stream, state) {
6575 state.bufferProcessing = true;
6576
6577 if (stream._writev && state.buffer.length > 1) {
6578 // Fast case, write everything using _writev()
6579 var cbs = [];
6580 for (var c = 0; c < state.buffer.length; c++)
6581 cbs.push(state.buffer[c].callback);
6582
6583 // count the one we are adding, as well.
6584 // TODO(isaacs) clean this up
6585 state.pendingcb++;
6586 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6587 for (var i = 0; i < cbs.length; i++) {
6588 state.pendingcb--;
6589 cbs[i](err);
6590 }
6591 });
6592
6593 // Clear buffer
6594 state.buffer = [];
6595 } else {
6596 // Slow case, write chunks one-by-one
6597 for (var c = 0; c < state.buffer.length; c++) {
6598 var entry = state.buffer[c];
6599 var chunk = entry.chunk;
6600 var encoding = entry.encoding;
6601 var cb = entry.callback;
6602 var len = state.objectMode ? 1 : chunk.length;
6603
6604 doWrite(stream, state, false, len, chunk, encoding, cb);
6605
6606 // if we didn't call the onwrite immediately, then
6607 // it means that we need to wait until it does.
6608 // also, that means that the chunk and cb are currently
6609 // being processed, so move the buffer counter past them.
6610 if (state.writing) {
6611 c++;
6612 break;
6613 }
ebd8d4e8 6614 }
ab78acc6
IC
6615
6616 if (c < state.buffer.length)
6617 state.buffer = state.buffer.slice(c);
6618 else
6619 state.buffer.length = 0;
ebd8d4e8
IC
6620 }
6621
ab78acc6 6622 state.bufferProcessing = false;
ebd8d4e8
IC
6623}
6624
ab78acc6
IC
6625Writable.prototype._write = function(chunk, encoding, cb) {
6626 cb(new Error('not implemented'));
ebd8d4e8 6627
ab78acc6 6628};
ebd8d4e8 6629
ab78acc6 6630Writable.prototype._writev = null;
ebd8d4e8 6631
ab78acc6
IC
6632Writable.prototype.end = function(chunk, encoding, cb) {
6633 var state = this._writableState;
ebd8d4e8 6634
ab78acc6
IC
6635 if (util.isFunction(chunk)) {
6636 cb = chunk;
6637 chunk = null;
6638 encoding = null;
6639 } else if (util.isFunction(encoding)) {
6640 cb = encoding;
6641 encoding = null;
6642 }
ebd8d4e8 6643
ab78acc6
IC
6644 if (!util.isNullOrUndefined(chunk))
6645 this.write(chunk, encoding);
6646
6647 // .end() fully uncorks
6648 if (state.corked) {
6649 state.corked = 1;
6650 this.uncork();
ebd8d4e8 6651 }
ab78acc6
IC
6652
6653 // ignore unnecessary end() calls.
6654 if (!state.ending && !state.finished)
6655 endWritable(this, state, cb);
6656};
6657
6658
6659function needFinish(stream, state) {
6660 return (state.ending &&
6661 state.length === 0 &&
6662 !state.finished &&
6663 !state.writing);
ebd8d4e8
IC
6664}
6665
ab78acc6
IC
6666function prefinish(stream, state) {
6667 if (!state.prefinished) {
6668 state.prefinished = true;
6669 stream.emit('prefinish');
ebd8d4e8 6670 }
ebd8d4e8
IC
6671}
6672
ab78acc6
IC
6673function finishMaybe(stream, state) {
6674 var need = needFinish(stream, state);
6675 if (need) {
6676 if (state.pendingcb === 0) {
6677 prefinish(stream, state);
6678 state.finished = true;
6679 stream.emit('finish');
6680 } else
6681 prefinish(stream, state);
6682 }
6683 return need;
6684}
ebd8d4e8 6685
ab78acc6
IC
6686function endWritable(stream, state, cb) {
6687 state.ending = true;
6688 finishMaybe(stream, state);
6689 if (cb) {
6690 if (state.finished)
6691 process.nextTick(cb);
6692 else
6693 stream.once('finish', cb);
ebd8d4e8 6694 }
ab78acc6 6695 state.ended = true;
ebd8d4e8
IC
6696}
6697
ab78acc6
IC
6698}).call(this,require('_process'))
6699},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6700(function (Buffer){
6701// Copyright Joyent, Inc. and other Node contributors.
6702//
6703// Permission is hereby granted, free of charge, to any person obtaining a
6704// copy of this software and associated documentation files (the
6705// "Software"), to deal in the Software without restriction, including
6706// without limitation the rights to use, copy, modify, merge, publish,
6707// distribute, sublicense, and/or sell copies of the Software, and to permit
6708// persons to whom the Software is furnished to do so, subject to the
6709// following conditions:
6710//
6711// The above copyright notice and this permission notice shall be included
6712// in all copies or substantial portions of the Software.
6713//
6714// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6715// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6716// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6717// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6718// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6719// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6720// USE OR OTHER DEALINGS IN THE SOFTWARE.
6721
6722// NOTE: These type checking functions intentionally don't use `instanceof`
6723// because it is fragile and can be easily faked with `Object.create()`.
6724function isArray(ar) {
6725 return Array.isArray(ar);
ebd8d4e8 6726}
ab78acc6 6727exports.isArray = isArray;
ebd8d4e8 6728
ab78acc6
IC
6729function isBoolean(arg) {
6730 return typeof arg === 'boolean';
ebd8d4e8 6731}
ab78acc6 6732exports.isBoolean = isBoolean;
ebd8d4e8 6733
ab78acc6
IC
6734function isNull(arg) {
6735 return arg === null;
6736}
6737exports.isNull = isNull;
ebd8d4e8 6738
ab78acc6
IC
6739function isNullOrUndefined(arg) {
6740 return arg == null;
6741}
6742exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6743
ab78acc6
IC
6744function isNumber(arg) {
6745 return typeof arg === 'number';
ebd8d4e8 6746}
ab78acc6 6747exports.isNumber = isNumber;
ebd8d4e8 6748
ab78acc6
IC
6749function isString(arg) {
6750 return typeof arg === 'string';
6751}
6752exports.isString = isString;
ebd8d4e8 6753
ab78acc6
IC
6754function isSymbol(arg) {
6755 return typeof arg === 'symbol';
6756}
6757exports.isSymbol = isSymbol;
ebd8d4e8 6758
ab78acc6
IC
6759function isUndefined(arg) {
6760 return arg === void 0;
ebd8d4e8 6761}
ab78acc6 6762exports.isUndefined = isUndefined;
ebd8d4e8 6763
ab78acc6
IC
6764function isRegExp(re) {
6765 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6766}
ab78acc6 6767exports.isRegExp = isRegExp;
ebd8d4e8 6768
ab78acc6
IC
6769function isObject(arg) {
6770 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6771}
ab78acc6 6772exports.isObject = isObject;
ebd8d4e8 6773
ab78acc6
IC
6774function isDate(d) {
6775 return isObject(d) && objectToString(d) === '[object Date]';
6776}
6777exports.isDate = isDate;
ebd8d4e8 6778
ab78acc6
IC
6779function isError(e) {
6780 return isObject(e) &&
6781 (objectToString(e) === '[object Error]' || e instanceof Error);
6782}
6783exports.isError = isError;
ebd8d4e8 6784
ab78acc6
IC
6785function isFunction(arg) {
6786 return typeof arg === 'function';
6787}
6788exports.isFunction = isFunction;
6789
6790function isPrimitive(arg) {
6791 return arg === null ||
6792 typeof arg === 'boolean' ||
6793 typeof arg === 'number' ||
6794 typeof arg === 'string' ||
6795 typeof arg === 'symbol' || // ES6 symbol
6796 typeof arg === 'undefined';
ebd8d4e8 6797}
ab78acc6 6798exports.isPrimitive = isPrimitive;
ebd8d4e8 6799
ab78acc6
IC
6800function isBuffer(arg) {
6801 return Buffer.isBuffer(arg);
ebd8d4e8 6802}
ab78acc6 6803exports.isBuffer = isBuffer;
ebd8d4e8 6804
ab78acc6
IC
6805function objectToString(o) {
6806 return Object.prototype.toString.call(o);
ebd8d4e8 6807}
ab78acc6
IC
6808}).call(this,require("buffer").Buffer)
6809},{"buffer":7}],22:[function(require,module,exports){
6810module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6811
ab78acc6
IC
6812},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6813exports = module.exports = require('./lib/_stream_readable.js');
6814exports.Stream = require('stream');
6815exports.Readable = exports;
6816exports.Writable = require('./lib/_stream_writable.js');
6817exports.Duplex = require('./lib/_stream_duplex.js');
6818exports.Transform = require('./lib/_stream_transform.js');
6819exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6820
ab78acc6
IC
6821},{"./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){
6822module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6823
ab78acc6
IC
6824},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6825module.exports = require("./lib/_stream_writable.js")
6826
6827},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6828// Copyright Joyent, Inc. and other Node contributors.
6829//
6830// Permission is hereby granted, free of charge, to any person obtaining a
6831// copy of this software and associated documentation files (the
6832// "Software"), to deal in the Software without restriction, including
6833// without limitation the rights to use, copy, modify, merge, publish,
6834// distribute, sublicense, and/or sell copies of the Software, and to permit
6835// persons to whom the Software is furnished to do so, subject to the
6836// following conditions:
6837//
6838// The above copyright notice and this permission notice shall be included
6839// in all copies or substantial portions of the Software.
6840//
6841// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6842// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6843// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6844// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6845// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6846// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6847// USE OR OTHER DEALINGS IN THE SOFTWARE.
6848
6849module.exports = Stream;
6850
6851var EE = require('events').EventEmitter;
6852var inherits = require('inherits');
6853
6854inherits(Stream, EE);
6855Stream.Readable = require('readable-stream/readable.js');
6856Stream.Writable = require('readable-stream/writable.js');
6857Stream.Duplex = require('readable-stream/duplex.js');
6858Stream.Transform = require('readable-stream/transform.js');
6859Stream.PassThrough = require('readable-stream/passthrough.js');
6860
6861// Backwards-compat with node 0.4.x
6862Stream.Stream = Stream;
6863
6864
6865
6866// old-style streams. Note that the pipe method (the only relevant
6867// part of this class) is overridden in the Readable class.
6868
6869function Stream() {
6870 EE.call(this);
ebd8d4e8
IC
6871}
6872
ab78acc6
IC
6873Stream.prototype.pipe = function(dest, options) {
6874 var source = this;
ebd8d4e8 6875
ab78acc6
IC
6876 function ondata(chunk) {
6877 if (dest.writable) {
6878 if (false === dest.write(chunk) && source.pause) {
6879 source.pause();
6880 }
6881 }
6882 }
ebd8d4e8 6883
ab78acc6 6884 source.on('data', ondata);
ebd8d4e8 6885
ab78acc6
IC
6886 function ondrain() {
6887 if (source.readable && source.resume) {
6888 source.resume();
6889 }
6890 }
ebd8d4e8 6891
ab78acc6 6892 dest.on('drain', ondrain);
ebd8d4e8 6893
ab78acc6
IC
6894 // If the 'end' option is not supplied, dest.end() will be called when
6895 // source gets the 'end' or 'close' events. Only dest.end() once.
6896 if (!dest._isStdio && (!options || options.end !== false)) {
6897 source.on('end', onend);
6898 source.on('close', onclose);
ebd8d4e8
IC
6899 }
6900
ab78acc6
IC
6901 var didOnEnd = false;
6902 function onend() {
6903 if (didOnEnd) return;
6904 didOnEnd = true;
ebd8d4e8 6905
ab78acc6
IC
6906 dest.end();
6907 }
ebd8d4e8 6908
ebd8d4e8 6909
ab78acc6
IC
6910 function onclose() {
6911 if (didOnEnd) return;
6912 didOnEnd = true;
ebd8d4e8 6913
ab78acc6 6914 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6915 }
6916
ab78acc6
IC
6917 // don't leave dangling pipes when there are errors.
6918 function onerror(er) {
6919 cleanup();
6920 if (EE.listenerCount(this, 'error') === 0) {
6921 throw er; // Unhandled stream error in pipe.
6922 }
6923 }
ebd8d4e8 6924
ab78acc6
IC
6925 source.on('error', onerror);
6926 dest.on('error', onerror);
ebd8d4e8 6927
ab78acc6
IC
6928 // remove all the event listeners that were added.
6929 function cleanup() {
6930 source.removeListener('data', ondata);
6931 dest.removeListener('drain', ondrain);
ebd8d4e8 6932
ab78acc6
IC
6933 source.removeListener('end', onend);
6934 source.removeListener('close', onclose);
6935
6936 source.removeListener('error', onerror);
6937 dest.removeListener('error', onerror);
6938
6939 source.removeListener('end', cleanup);
6940 source.removeListener('close', cleanup);
6941
6942 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6943 }
6944
ab78acc6
IC
6945 source.on('end', cleanup);
6946 source.on('close', cleanup);
ebd8d4e8 6947
ab78acc6 6948 dest.on('close', cleanup);
ebd8d4e8 6949
ab78acc6 6950 dest.emit('pipe', source);
ebd8d4e8 6951
ab78acc6
IC
6952 // Allow for unix-like usage: A.pipe(B).pipe(C)
6953 return dest;
6954};
ebd8d4e8 6955
ab78acc6
IC
6956},{"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){
6957// Copyright Joyent, Inc. and other Node contributors.
6958//
6959// Permission is hereby granted, free of charge, to any person obtaining a
6960// copy of this software and associated documentation files (the
6961// "Software"), to deal in the Software without restriction, including
6962// without limitation the rights to use, copy, modify, merge, publish,
6963// distribute, sublicense, and/or sell copies of the Software, and to permit
6964// persons to whom the Software is furnished to do so, subject to the
6965// following conditions:
6966//
6967// The above copyright notice and this permission notice shall be included
6968// in all copies or substantial portions of the Software.
6969//
6970// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6971// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6972// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6973// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6974// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6975// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6976// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6977
ab78acc6 6978var Buffer = require('buffer').Buffer;
ebd8d4e8 6979
ab78acc6
IC
6980var isBufferEncoding = Buffer.isEncoding
6981 || function(encoding) {
6982 switch (encoding && encoding.toLowerCase()) {
6983 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;
6984 default: return false;
6985 }
6986 }
ebd8d4e8 6987
ebd8d4e8 6988
ab78acc6
IC
6989function assertEncoding(encoding) {
6990 if (encoding && !isBufferEncoding(encoding)) {
6991 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 6992 }
ebd8d4e8
IC
6993}
6994
ab78acc6
IC
6995// StringDecoder provides an interface for efficiently splitting a series of
6996// buffers into a series of JS strings without breaking apart multi-byte
6997// characters. CESU-8 is handled as part of the UTF-8 encoding.
6998//
6999// @TODO Handling all encodings inside a single object makes it very difficult
7000// to reason about this code, so it should be split up in the future.
7001// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7002// points as used by CESU-8.
7003var StringDecoder = exports.StringDecoder = function(encoding) {
7004 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7005 assertEncoding(encoding);
7006 switch (this.encoding) {
7007 case 'utf8':
7008 // CESU-8 represents each of Surrogate Pair by 3-bytes
7009 this.surrogateSize = 3;
7010 break;
7011 case 'ucs2':
7012 case 'utf16le':
7013 // UTF-16 represents each of Surrogate Pair by 2-bytes
7014 this.surrogateSize = 2;
7015 this.detectIncompleteChar = utf16DetectIncompleteChar;
7016 break;
7017 case 'base64':
7018 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7019 this.surrogateSize = 3;
7020 this.detectIncompleteChar = base64DetectIncompleteChar;
7021 break;
7022 default:
7023 this.write = passThroughWrite;
7024 return;
7025 }
ebd8d4e8 7026
ab78acc6
IC
7027 // Enough space to store all bytes of a single character. UTF-8 needs 4
7028 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7029 this.charBuffer = new Buffer(6);
7030 // Number of bytes received for the current incomplete multi-byte character.
7031 this.charReceived = 0;
7032 // Number of bytes expected for the current incomplete multi-byte character.
7033 this.charLength = 0;
7034};
ebd8d4e8 7035
ebd8d4e8 7036
ab78acc6
IC
7037// write decodes the given buffer and returns it as JS string that is
7038// guaranteed to not contain any partial multi-byte characters. Any partial
7039// character found at the end of the buffer is buffered up, and will be
7040// returned when calling write again with the remaining bytes.
7041//
7042// Note: Converting a Buffer containing an orphan surrogate to a String
7043// currently works, but converting a String to a Buffer (via `new Buffer`, or
7044// Buffer#write) will replace incomplete surrogates with the unicode
7045// replacement character. See https://codereview.chromium.org/121173009/ .
7046StringDecoder.prototype.write = function(buffer) {
7047 var charStr = '';
7048 // if our last write ended with an incomplete multibyte character
7049 while (this.charLength) {
7050 // determine how many remaining bytes this buffer has to offer for this char
7051 var available = (buffer.length >= this.charLength - this.charReceived) ?
7052 this.charLength - this.charReceived :
7053 buffer.length;
7054
7055 // add the new bytes to the char buffer
7056 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7057 this.charReceived += available;
7058
7059 if (this.charReceived < this.charLength) {
7060 // still not enough chars in this buffer? wait for more ...
7061 return '';
7062 }
7063
7064 // remove bytes belonging to the current character from the buffer
7065 buffer = buffer.slice(available, buffer.length);
7066
7067 // get the character that was split
7068 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7069
7070 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7071 var charCode = charStr.charCodeAt(charStr.length - 1);
7072 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7073 this.charLength += this.surrogateSize;
7074 charStr = '';
7075 continue;
7076 }
7077 this.charReceived = this.charLength = 0;
ebd8d4e8 7078
ab78acc6
IC
7079 // if there are no more bytes in this buffer, just emit our char
7080 if (buffer.length === 0) {
7081 return charStr;
7082 }
7083 break;
ebd8d4e8 7084 }
ebd8d4e8 7085
ab78acc6
IC
7086 // determine and set charLength / charReceived
7087 this.detectIncompleteChar(buffer);
ebd8d4e8 7088
ab78acc6
IC
7089 var end = buffer.length;
7090 if (this.charLength) {
7091 // buffer the incomplete character bytes we got
7092 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7093 end -= this.charReceived;
ebd8d4e8
IC
7094 }
7095
ab78acc6 7096 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 7097
ab78acc6
IC
7098 var end = charStr.length - 1;
7099 var charCode = charStr.charCodeAt(end);
7100 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7101 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7102 var size = this.surrogateSize;
7103 this.charLength += size;
7104 this.charReceived += size;
7105 this.charBuffer.copy(this.charBuffer, size, 0, size);
7106 buffer.copy(this.charBuffer, 0, 0, size);
7107 return charStr.substring(0, end);
ebd8d4e8
IC
7108 }
7109
ab78acc6
IC
7110 // or just emit the charStr
7111 return charStr;
7112};
ebd8d4e8 7113
ab78acc6
IC
7114// detectIncompleteChar determines if there is an incomplete UTF-8 character at
7115// the end of the given buffer. If so, it sets this.charLength to the byte
7116// length that character, and sets this.charReceived to the number of bytes
7117// that are available for this character.
7118StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7119 // determine how many bytes we have to check at the end of this buffer
7120 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 7121
ab78acc6
IC
7122 // Figure out if one of the last i bytes of our buffer announces an
7123 // incomplete char.
7124 for (; i > 0; i--) {
7125 var c = buffer[buffer.length - i];
ebd8d4e8 7126
ab78acc6 7127 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 7128
ab78acc6
IC
7129 // 110XXXXX
7130 if (i == 1 && c >> 5 == 0x06) {
7131 this.charLength = 2;
7132 break;
7133 }
ebd8d4e8 7134
ab78acc6
IC
7135 // 1110XXXX
7136 if (i <= 2 && c >> 4 == 0x0E) {
7137 this.charLength = 3;
7138 break;
7139 }
ebd8d4e8 7140
ab78acc6
IC
7141 // 11110XXX
7142 if (i <= 3 && c >> 3 == 0x1E) {
7143 this.charLength = 4;
7144 break;
7145 }
7146 }
7147 this.charReceived = i;
7148};
ebd8d4e8 7149
ab78acc6
IC
7150StringDecoder.prototype.end = function(buffer) {
7151 var res = '';
7152 if (buffer && buffer.length)
7153 res = this.write(buffer);
ebd8d4e8 7154
ab78acc6
IC
7155 if (this.charReceived) {
7156 var cr = this.charReceived;
7157 var buf = this.charBuffer;
7158 var enc = this.encoding;
7159 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
7160 }
7161
ab78acc6
IC
7162 return res;
7163};
ebd8d4e8 7164
ab78acc6
IC
7165function passThroughWrite(buffer) {
7166 return buffer.toString(this.encoding);
ebd8d4e8
IC
7167}
7168
ab78acc6
IC
7169function utf16DetectIncompleteChar(buffer) {
7170 this.charReceived = buffer.length % 2;
7171 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
7172}
7173
ab78acc6
IC
7174function base64DetectIncompleteChar(buffer) {
7175 this.charReceived = buffer.length % 3;
7176 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
7177}
7178
ab78acc6
IC
7179},{"buffer":7}],28:[function(require,module,exports){
7180module.exports = function isBuffer(arg) {
7181 return arg && typeof arg === 'object'
7182 && typeof arg.copy === 'function'
7183 && typeof arg.fill === 'function'
7184 && typeof arg.readUInt8 === 'function';
7185}
7186},{}],29:[function(require,module,exports){
7187(function (process,global){
7188// Copyright Joyent, Inc. and other Node contributors.
7189//
7190// Permission is hereby granted, free of charge, to any person obtaining a
7191// copy of this software and associated documentation files (the
7192// "Software"), to deal in the Software without restriction, including
7193// without limitation the rights to use, copy, modify, merge, publish,
7194// distribute, sublicense, and/or sell copies of the Software, and to permit
7195// persons to whom the Software is furnished to do so, subject to the
7196// following conditions:
7197//
7198// The above copyright notice and this permission notice shall be included
7199// in all copies or substantial portions of the Software.
7200//
7201// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7202// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7203// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7204// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7205// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7206// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7207// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7208
ab78acc6
IC
7209var formatRegExp = /%[sdj%]/g;
7210exports.format = function(f) {
7211 if (!isString(f)) {
7212 var objects = [];
7213 for (var i = 0; i < arguments.length; i++) {
7214 objects.push(inspect(arguments[i]));
7215 }
7216 return objects.join(' ');
7217 }
ebd8d4e8 7218
ab78acc6
IC
7219 var i = 1;
7220 var args = arguments;
7221 var len = args.length;
7222 var str = String(f).replace(formatRegExp, function(x) {
7223 if (x === '%%') return '%';
7224 if (i >= len) return x;
7225 switch (x) {
7226 case '%s': return String(args[i++]);
7227 case '%d': return Number(args[i++]);
7228 case '%j':
7229 try {
7230 return JSON.stringify(args[i++]);
7231 } catch (_) {
7232 return '[Circular]';
7233 }
7234 default:
7235 return x;
7236 }
7237 });
7238 for (var x = args[i]; i < len; x = args[++i]) {
7239 if (isNull(x) || !isObject(x)) {
7240 str += ' ' + x;
7241 } else {
7242 str += ' ' + inspect(x);
7243 }
7244 }
7245 return str;
7246};
ebd8d4e8 7247
ebd8d4e8 7248
ab78acc6
IC
7249// Mark that a method should not be used.
7250// Returns a modified function which warns once by default.
7251// If --no-deprecation is set, then it is a no-op.
7252exports.deprecate = function(fn, msg) {
7253 // Allow for deprecating things in the process of starting up.
7254 if (isUndefined(global.process)) {
7255 return function() {
7256 return exports.deprecate(fn, msg).apply(this, arguments);
7257 };
7258 }
ebd8d4e8 7259
ab78acc6
IC
7260 if (process.noDeprecation === true) {
7261 return fn;
7262 }
ebd8d4e8 7263
ab78acc6
IC
7264 var warned = false;
7265 function deprecated() {
7266 if (!warned) {
7267 if (process.throwDeprecation) {
7268 throw new Error(msg);
7269 } else if (process.traceDeprecation) {
7270 console.trace(msg);
7271 } else {
7272 console.error(msg);
7273 }
7274 warned = true;
7275 }
7276 return fn.apply(this, arguments);
7277 }
ebd8d4e8 7278
ab78acc6
IC
7279 return deprecated;
7280};
ebd8d4e8 7281
ebd8d4e8 7282
ab78acc6
IC
7283var debugs = {};
7284var debugEnviron;
7285exports.debuglog = function(set) {
7286 if (isUndefined(debugEnviron))
7287 debugEnviron = process.env.NODE_DEBUG || '';
7288 set = set.toUpperCase();
7289 if (!debugs[set]) {
7290 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7291 var pid = process.pid;
7292 debugs[set] = function() {
7293 var msg = exports.format.apply(exports, arguments);
7294 console.error('%s %d: %s', set, pid, msg);
7295 };
7296 } else {
7297 debugs[set] = function() {};
ebd8d4e8
IC
7298 }
7299 }
ab78acc6
IC
7300 return debugs[set];
7301};
ebd8d4e8 7302
ebd8d4e8
IC
7303
7304/**
ab78acc6
IC
7305 * Echos the value of a value. Trys to print the value out
7306 * in the best way possible given the different types.
7307 *
7308 * @param {Object} obj The object to print out.
7309 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7310 */
ab78acc6
IC
7311/* legacy: obj, showHidden, depth, colors*/
7312function inspect(obj, opts) {
7313 // default options
7314 var ctx = {
7315 seen: [],
7316 stylize: stylizeNoColor
7317 };
7318 // legacy...
7319 if (arguments.length >= 3) ctx.depth = arguments[2];
7320 if (arguments.length >= 4) ctx.colors = arguments[3];
7321 if (isBoolean(opts)) {
7322 // legacy...
7323 ctx.showHidden = opts;
7324 } else if (opts) {
7325 // got an "options" object
7326 exports._extend(ctx, opts);
ebd8d4e8 7327 }
ab78acc6
IC
7328 // set default options
7329 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7330 if (isUndefined(ctx.depth)) ctx.depth = 2;
7331 if (isUndefined(ctx.colors)) ctx.colors = false;
7332 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7333 if (ctx.colors) ctx.stylize = stylizeWithColor;
7334 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7335}
ab78acc6 7336exports.inspect = inspect;
ebd8d4e8 7337
ebd8d4e8 7338
ab78acc6
IC
7339// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7340inspect.colors = {
7341 'bold' : [1, 22],
7342 'italic' : [3, 23],
7343 'underline' : [4, 24],
7344 'inverse' : [7, 27],
7345 'white' : [37, 39],
7346 'grey' : [90, 39],
7347 'black' : [30, 39],
7348 'blue' : [34, 39],
7349 'cyan' : [36, 39],
7350 'green' : [32, 39],
7351 'magenta' : [35, 39],
7352 'red' : [31, 39],
7353 'yellow' : [33, 39]
7354};
ebd8d4e8 7355
ab78acc6
IC
7356// Don't use 'blue' not visible on cmd.exe
7357inspect.styles = {
7358 'special': 'cyan',
7359 'number': 'yellow',
7360 'boolean': 'yellow',
7361 'undefined': 'grey',
7362 'null': 'bold',
7363 'string': 'green',
7364 'date': 'magenta',
7365 // "name": intentionally not styling
7366 'regexp': 'red'
7367};
ebd8d4e8 7368
ebd8d4e8 7369
ab78acc6
IC
7370function stylizeWithColor(str, styleType) {
7371 var style = inspect.styles[styleType];
ebd8d4e8 7372
ab78acc6
IC
7373 if (style) {
7374 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7375 '\u001b[' + inspect.colors[style][1] + 'm';
7376 } else {
7377 return str;
ebd8d4e8 7378 }
ebd8d4e8
IC
7379}
7380
ebd8d4e8 7381
ab78acc6
IC
7382function stylizeNoColor(str, styleType) {
7383 return str;
ebd8d4e8
IC
7384}
7385
ebd8d4e8 7386
ab78acc6
IC
7387function arrayToHash(array) {
7388 var hash = {};
ebd8d4e8 7389
ab78acc6
IC
7390 array.forEach(function(val, idx) {
7391 hash[val] = true;
7392 });
ebd8d4e8 7393
ab78acc6 7394 return hash;
ebd8d4e8
IC
7395}
7396
ebd8d4e8 7397
ab78acc6
IC
7398function formatValue(ctx, value, recurseTimes) {
7399 // Provide a hook for user-specified inspect functions.
7400 // Check that value is an object with an inspect function on it
7401 if (ctx.customInspect &&
7402 value &&
7403 isFunction(value.inspect) &&
7404 // Filter out the util module, it's inspect function is special
7405 value.inspect !== exports.inspect &&
7406 // Also filter out any prototype objects using the circular check.
7407 !(value.constructor && value.constructor.prototype === value)) {
7408 var ret = value.inspect(recurseTimes, ctx);
7409 if (!isString(ret)) {
7410 ret = formatValue(ctx, ret, recurseTimes);
7411 }
7412 return ret;
ebd8d4e8 7413 }
ebd8d4e8 7414
ab78acc6
IC
7415 // Primitive types cannot have properties
7416 var primitive = formatPrimitive(ctx, value);
7417 if (primitive) {
7418 return primitive;
ebd8d4e8
IC
7419 }
7420
ab78acc6
IC
7421 // Look up the keys of the object.
7422 var keys = Object.keys(value);
7423 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7424
ab78acc6
IC
7425 if (ctx.showHidden) {
7426 keys = Object.getOwnPropertyNames(value);
7427 }
ebd8d4e8 7428
ab78acc6
IC
7429 // IE doesn't make error fields non-enumerable
7430 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7431 if (isError(value)
7432 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7433 return formatError(value);
ebd8d4e8 7434 }
ebd8d4e8 7435
ab78acc6
IC
7436 // Some type of object without properties can be shortcutted.
7437 if (keys.length === 0) {
7438 if (isFunction(value)) {
7439 var name = value.name ? ': ' + value.name : '';
7440 return ctx.stylize('[Function' + name + ']', 'special');
7441 }
7442 if (isRegExp(value)) {
7443 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7444 }
7445 if (isDate(value)) {
7446 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7447 }
7448 if (isError(value)) {
7449 return formatError(value);
7450 }
ebd8d4e8 7451 }
ebd8d4e8 7452
ab78acc6 7453 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7454
ab78acc6
IC
7455 // Make Array say that they are Array
7456 if (isArray(value)) {
7457 array = true;
7458 braces = ['[', ']'];
7459 }
ebd8d4e8 7460
ab78acc6
IC
7461 // Make functions say that they are functions
7462 if (isFunction(value)) {
7463 var n = value.name ? ': ' + value.name : '';
7464 base = ' [Function' + n + ']';
7465 }
ebd8d4e8 7466
ab78acc6
IC
7467 // Make RegExps say that they are RegExps
7468 if (isRegExp(value)) {
7469 base = ' ' + RegExp.prototype.toString.call(value);
7470 }
ebd8d4e8 7471
ab78acc6
IC
7472 // Make dates with properties first say the date
7473 if (isDate(value)) {
7474 base = ' ' + Date.prototype.toUTCString.call(value);
7475 }
ebd8d4e8 7476
ab78acc6
IC
7477 // Make error with message first say the error
7478 if (isError(value)) {
7479 base = ' ' + formatError(value);
7480 }
ebd8d4e8 7481
ab78acc6
IC
7482 if (keys.length === 0 && (!array || value.length == 0)) {
7483 return braces[0] + base + braces[1];
7484 }
ebd8d4e8 7485
ab78acc6
IC
7486 if (recurseTimes < 0) {
7487 if (isRegExp(value)) {
7488 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7489 } else {
7490 return ctx.stylize('[Object]', 'special');
7491 }
7492 }
ebd8d4e8 7493
ab78acc6 7494 ctx.seen.push(value);
ebd8d4e8 7495
ab78acc6
IC
7496 var output;
7497 if (array) {
7498 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7499 } else {
7500 output = keys.map(function(key) {
7501 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7502 });
7503 }
ebd8d4e8 7504
ab78acc6 7505 ctx.seen.pop();
ebd8d4e8 7506
ab78acc6
IC
7507 return reduceToSingleString(output, base, braces);
7508}
ebd8d4e8 7509
ebd8d4e8 7510
ab78acc6
IC
7511function formatPrimitive(ctx, value) {
7512 if (isUndefined(value))
7513 return ctx.stylize('undefined', 'undefined');
7514 if (isString(value)) {
7515 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7516 .replace(/'/g, "\\'")
7517 .replace(/\\"/g, '"') + '\'';
7518 return ctx.stylize(simple, 'string');
7519 }
7520 if (isNumber(value))
7521 return ctx.stylize('' + value, 'number');
7522 if (isBoolean(value))
7523 return ctx.stylize('' + value, 'boolean');
7524 // For some reason typeof null is "object", so special case here.
7525 if (isNull(value))
7526 return ctx.stylize('null', 'null');
7527}
ebd8d4e8 7528
ebd8d4e8 7529
ab78acc6
IC
7530function formatError(value) {
7531 return '[' + Error.prototype.toString.call(value) + ']';
7532}
ebd8d4e8 7533
ebd8d4e8 7534
ab78acc6
IC
7535function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7536 var output = [];
7537 for (var i = 0, l = value.length; i < l; ++i) {
7538 if (hasOwnProperty(value, String(i))) {
7539 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7540 String(i), true));
7541 } else {
7542 output.push('');
7543 }
7544 }
7545 keys.forEach(function(key) {
7546 if (!key.match(/^\d+$/)) {
7547 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7548 key, true));
7549 }
7550 });
7551 return output;
7552}
ebd8d4e8 7553
ebd8d4e8 7554
ab78acc6
IC
7555function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7556 var name, str, desc;
7557 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7558 if (desc.get) {
7559 if (desc.set) {
7560 str = ctx.stylize('[Getter/Setter]', 'special');
7561 } else {
7562 str = ctx.stylize('[Getter]', 'special');
7563 }
7564 } else {
7565 if (desc.set) {
7566 str = ctx.stylize('[Setter]', 'special');
7567 }
7568 }
7569 if (!hasOwnProperty(visibleKeys, key)) {
7570 name = '[' + key + ']';
7571 }
7572 if (!str) {
7573 if (ctx.seen.indexOf(desc.value) < 0) {
7574 if (isNull(recurseTimes)) {
7575 str = formatValue(ctx, desc.value, null);
7576 } else {
7577 str = formatValue(ctx, desc.value, recurseTimes - 1);
7578 }
7579 if (str.indexOf('\n') > -1) {
7580 if (array) {
7581 str = str.split('\n').map(function(line) {
7582 return ' ' + line;
7583 }).join('\n').substr(2);
7584 } else {
7585 str = '\n' + str.split('\n').map(function(line) {
7586 return ' ' + line;
7587 }).join('\n');
7588 }
7589 }
7590 } else {
7591 str = ctx.stylize('[Circular]', 'special');
7592 }
7593 }
7594 if (isUndefined(name)) {
7595 if (array && key.match(/^\d+$/)) {
7596 return str;
7597 }
7598 name = JSON.stringify('' + key);
7599 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7600 name = name.substr(1, name.length - 2);
7601 name = ctx.stylize(name, 'name');
7602 } else {
7603 name = name.replace(/'/g, "\\'")
7604 .replace(/\\"/g, '"')
7605 .replace(/(^"|"$)/g, "'");
7606 name = ctx.stylize(name, 'string');
7607 }
7608 }
ebd8d4e8 7609
ab78acc6
IC
7610 return name + ': ' + str;
7611}
ebd8d4e8 7612
ebd8d4e8 7613
ab78acc6
IC
7614function reduceToSingleString(output, base, braces) {
7615 var numLinesEst = 0;
7616 var length = output.reduce(function(prev, cur) {
7617 numLinesEst++;
7618 if (cur.indexOf('\n') >= 0) numLinesEst++;
7619 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7620 }, 0);
ebd8d4e8 7621
ab78acc6
IC
7622 if (length > 60) {
7623 return braces[0] +
7624 (base === '' ? '' : base + '\n ') +
7625 ' ' +
7626 output.join(',\n ') +
7627 ' ' +
7628 braces[1];
7629 }
ebd8d4e8 7630
ab78acc6
IC
7631 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7632}
ebd8d4e8 7633
ebd8d4e8 7634
ab78acc6
IC
7635// NOTE: These type checking functions intentionally don't use `instanceof`
7636// because it is fragile and can be easily faked with `Object.create()`.
7637function isArray(ar) {
7638 return Array.isArray(ar);
7639}
7640exports.isArray = isArray;
ebd8d4e8 7641
ab78acc6
IC
7642function isBoolean(arg) {
7643 return typeof arg === 'boolean';
7644}
7645exports.isBoolean = isBoolean;
ebd8d4e8 7646
ab78acc6
IC
7647function isNull(arg) {
7648 return arg === null;
7649}
7650exports.isNull = isNull;
ebd8d4e8 7651
ab78acc6
IC
7652function isNullOrUndefined(arg) {
7653 return arg == null;
7654}
7655exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7656
ab78acc6
IC
7657function isNumber(arg) {
7658 return typeof arg === 'number';
7659}
7660exports.isNumber = isNumber;
ebd8d4e8 7661
ab78acc6
IC
7662function isString(arg) {
7663 return typeof arg === 'string';
7664}
7665exports.isString = isString;
ebd8d4e8 7666
ab78acc6
IC
7667function isSymbol(arg) {
7668 return typeof arg === 'symbol';
7669}
7670exports.isSymbol = isSymbol;
ebd8d4e8 7671
ab78acc6
IC
7672function isUndefined(arg) {
7673 return arg === void 0;
7674}
7675exports.isUndefined = isUndefined;
ebd8d4e8 7676
ab78acc6
IC
7677function isRegExp(re) {
7678 return isObject(re) && objectToString(re) === '[object RegExp]';
7679}
7680exports.isRegExp = isRegExp;
ebd8d4e8 7681
ab78acc6
IC
7682function isObject(arg) {
7683 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7684}
ab78acc6 7685exports.isObject = isObject;
ebd8d4e8 7686
ab78acc6
IC
7687function isDate(d) {
7688 return isObject(d) && objectToString(d) === '[object Date]';
7689}
7690exports.isDate = isDate;
ebd8d4e8 7691
ab78acc6
IC
7692function isError(e) {
7693 return isObject(e) &&
7694 (objectToString(e) === '[object Error]' || e instanceof Error);
7695}
7696exports.isError = isError;
ebd8d4e8 7697
ab78acc6
IC
7698function isFunction(arg) {
7699 return typeof arg === 'function';
7700}
7701exports.isFunction = isFunction;
ebd8d4e8 7702
ab78acc6
IC
7703function isPrimitive(arg) {
7704 return arg === null ||
7705 typeof arg === 'boolean' ||
7706 typeof arg === 'number' ||
7707 typeof arg === 'string' ||
7708 typeof arg === 'symbol' || // ES6 symbol
7709 typeof arg === 'undefined';
7710}
7711exports.isPrimitive = isPrimitive;
ebd8d4e8 7712
ab78acc6 7713exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7714
ab78acc6
IC
7715function objectToString(o) {
7716 return Object.prototype.toString.call(o);
7717}
ebd8d4e8 7718
ebd8d4e8 7719
ab78acc6
IC
7720function pad(n) {
7721 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7722}
ebd8d4e8 7723
ebd8d4e8 7724
ab78acc6
IC
7725var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7726 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7727
ab78acc6
IC
7728// 26 Feb 16:19:34
7729function timestamp() {
7730 var d = new Date();
7731 var time = [pad(d.getHours()),
7732 pad(d.getMinutes()),
7733 pad(d.getSeconds())].join(':');
7734 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7735}
7736
ab78acc6
IC
7737
7738// log is just a thin wrapper to console.log that prepends a timestamp
7739exports.log = function() {
7740 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7741};
7742
ab78acc6
IC
7743
7744/**
7745 * Inherit the prototype methods from one constructor into another.
7746 *
7747 * The Function.prototype.inherits from lang.js rewritten as a standalone
7748 * function (not on Function.prototype). NOTE: If this file is to be loaded
7749 * during bootstrapping this function needs to be rewritten using some native
7750 * functions as prototype setup using normal JavaScript does not work as
7751 * expected during bootstrapping (see mirror.js in r114903).
7752 *
7753 * @param {function} ctor Constructor function which needs to inherit the
7754 * prototype.
7755 * @param {function} superCtor Constructor function to inherit prototype from.
7756 */
7757exports.inherits = require('inherits');
7758
7759exports._extend = function(origin, add) {
7760 // Don't do anything if add isn't an object
7761 if (!add || !isObject(add)) return origin;
7762
7763 var keys = Object.keys(add);
7764 var i = keys.length;
7765 while (i--) {
7766 origin[keys[i]] = add[keys[i]];
7767 }
7768 return origin;
7769};
7770
7771function hasOwnProperty(obj, prop) {
7772 return Object.prototype.hasOwnProperty.call(obj, prop);
7773}
7774
7775}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7776},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7777// Base58 encoding/decoding
7778// Originally written by Mike Hearn for BitcoinJ
7779// Copyright (c) 2011 Google Inc
7780// Ported to JavaScript by Stefan Thomas
7781// Merged Buffer refactorings from base58-native by Stephen Pair
7782// Copyright (c) 2013 BitPay Inc
7783
ebd8d4e8 7784var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7785var ALPHABET_MAP = {}
7786for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7787 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7788}
ab78acc6 7789var BASE = 58
ebd8d4e8
IC
7790
7791function encode(buffer) {
ab78acc6
IC
7792 if (buffer.length === 0) return ''
7793
7794 var i, j, digits = [0]
7795 for (i = 0; i < buffer.length; i++) {
7796 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7797
7798 digits[0] += buffer[i]
ebd8d4e8 7799
ab78acc6
IC
7800 var carry = 0
7801 for (j = 0; j < digits.length; ++j) {
7802 digits[j] += carry
ebd8d4e8 7803
ab78acc6
IC
7804 carry = (digits[j] / BASE) | 0
7805 digits[j] %= BASE
7806 }
7807
7808 while (carry) {
7809 digits.push(carry % BASE)
7810
7811 carry = (carry / BASE) | 0
7812 }
ebd8d4e8
IC
7813 }
7814
7815 // deal with leading zeros
ab78acc6 7816 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7817
ab78acc6
IC
7818 // convert digits to a string
7819 var stringOutput = ""
7820 for (var i = digits.length - 1; i >= 0; i--) {
7821 stringOutput = stringOutput + ALPHABET[digits[i]]
7822 }
7823 return stringOutput
ebd8d4e8
IC
7824}
7825
7826function decode(string) {
ab78acc6 7827 if (string.length === 0) return []
ebd8d4e8 7828
ab78acc6
IC
7829 var i, j, bytes = [0]
7830 for (i = 0; i < string.length; i++) {
7831 var c = string[i]
7832 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7833
ab78acc6
IC
7834 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7835 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7836
ab78acc6
IC
7837 var carry = 0
7838 for (j = 0; j < bytes.length; ++j) {
7839 bytes[j] += carry
ebd8d4e8 7840
ab78acc6
IC
7841 carry = bytes[j] >> 8
7842 bytes[j] &= 0xff
7843 }
ebd8d4e8 7844
ab78acc6
IC
7845 while (carry) {
7846 bytes.push(carry & 0xff)
7847
7848 carry >>= 8
7849 }
ebd8d4e8
IC
7850 }
7851
ab78acc6
IC
7852 // deal with leading zeros
7853 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7854
ab78acc6 7855 return bytes.reverse()
ebd8d4e8
IC
7856}
7857
7858module.exports = {
7859 encode: encode,
7860 decode: decode
7861}
7862
ab78acc6 7863},{}],31:[function(require,module,exports){
ebd8d4e8 7864(function (Buffer){
ab78acc6
IC
7865'use strict'
7866
7867var base58 = require('bs58')
7868var createHash = require('create-hash')
7869
7870// SHA256(SHA256(buffer))
7871function sha256x2 (buffer) {
7872 buffer = createHash('sha256').update(buffer).digest()
7873 return createHash('sha256').update(buffer).digest()
7874}
7875
7876// Encode a buffer as a base58-check encoded string
7877function encode (payload) {
7878 var checksum = sha256x2(payload).slice(0, 4)
7879
7880 return base58.encode(Buffer.concat([
7881 payload,
7882 checksum
7883 ]))
7884}
7885
7886// Decode a base58-check encoded string to a buffer
7887function decode (string) {
7888 var buffer = new Buffer(base58.decode(string))
7889
7890 var payload = buffer.slice(0, -4)
7891 var checksum = buffer.slice(-4)
7892 var newChecksum = sha256x2(payload).slice(0, 4)
7893
7894 for (var i = 0; i < newChecksum.length; ++i) {
7895 if (newChecksum[i] === checksum[i]) continue
7896
7897 throw new Error('Invalid checksum')
ebd8d4e8 7898 }
ab78acc6
IC
7899
7900 return payload
ebd8d4e8
IC
7901}
7902
ab78acc6
IC
7903module.exports = {
7904 encode: encode,
7905 decode: decode
ebd8d4e8
IC
7906}
7907
ab78acc6
IC
7908}).call(this,require("buffer").Buffer)
7909},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7910(function (Buffer){
ab78acc6
IC
7911'use strict';
7912var inherits = require('inherits')
7913var md5 = require('./md5')
7914var rmd160 = require('ripemd160')
7915var sha = require('sha.js')
ebd8d4e8 7916
ab78acc6 7917var Transform = require('stream').Transform
ebd8d4e8 7918
ab78acc6
IC
7919function HashNoConstructor(hash) {
7920 Transform.call(this)
ebd8d4e8 7921
ab78acc6
IC
7922 this._hash = hash
7923 this.buffers = []
7924}
ebd8d4e8 7925
ab78acc6 7926inherits(HashNoConstructor, Transform)
ebd8d4e8 7927
ab78acc6
IC
7928HashNoConstructor.prototype._transform = function (data, _, next) {
7929 this.buffers.push(data)
ebd8d4e8 7930
ab78acc6
IC
7931 next()
7932}
ebd8d4e8 7933
ab78acc6
IC
7934HashNoConstructor.prototype._flush = function (next) {
7935 this.push(this.digest())
7936 next()
7937}
7938
7939HashNoConstructor.prototype.update = function (data, enc) {
7940 if (typeof data === 'string') {
7941 data = new Buffer(data, enc)
ebd8d4e8
IC
7942 }
7943
ab78acc6
IC
7944 this.buffers.push(data)
7945 return this
7946}
7947
7948HashNoConstructor.prototype.digest = function (enc) {
7949 var buf = Buffer.concat(this.buffers)
7950 var r = this._hash(buf)
7951 this.buffers = null
7952
7953 return enc ? r.toString(enc) : r
7954}
7955
7956function Hash(hash) {
7957 Transform.call(this)
7958
7959 this._hash = hash
7960}
7961
7962inherits(Hash, Transform)
7963
7964Hash.prototype._transform = function (data, enc, next) {
7965 if (enc) data = new Buffer(data, enc)
7966
7967 this._hash.update(data)
7968
7969 next()
ebd8d4e8
IC
7970}
7971
ab78acc6
IC
7972Hash.prototype._flush = function (next) {
7973 this.push(this._hash.digest())
7974 this._hash = null
7975
7976 next()
7977}
7978
7979Hash.prototype.update = function (data, enc) {
7980 if (typeof data === 'string') {
7981 data = new Buffer(data, enc)
7982 }
7983
7984 this._hash.update(data)
ebd8d4e8
IC
7985 return this
7986}
7987
ab78acc6
IC
7988Hash.prototype.digest = function (enc) {
7989 var outData = this._hash.digest()
7990
7991 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
7992}
7993
ab78acc6
IC
7994module.exports = function createHash (alg) {
7995 if ('md5' === alg) return new HashNoConstructor(md5)
7996 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7997
7998 return new Hash(sha(alg))
7999}
ebd8d4e8 8000
ab78acc6
IC
8001}).call(this,require("buffer").Buffer)
8002},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 8003(function (Buffer){
ab78acc6 8004'use strict';
ebd8d4e8
IC
8005var intSize = 4;
8006var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8007var chrsz = 8;
8008
8009function toArray(buf, bigEndian) {
8010 if ((buf.length % intSize) !== 0) {
8011 var len = buf.length + (intSize - (buf.length % intSize));
8012 buf = Buffer.concat([buf, zeroBuffer], len);
8013 }
8014
8015 var arr = [];
8016 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8017 for (var i = 0; i < buf.length; i += intSize) {
8018 arr.push(fn.call(buf, i));
8019 }
8020 return arr;
8021}
8022
8023function toBuffer(arr, size, bigEndian) {
8024 var buf = new Buffer(size);
8025 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8026 for (var i = 0; i < arr.length; i++) {
8027 fn.call(buf, arr[i], i * 4, true);
8028 }
8029 return buf;
8030}
8031
8032function hash(buf, fn, hashSize, bigEndian) {
8033 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8034 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8035 return toBuffer(arr, hashSize, bigEndian);
8036}
ab78acc6
IC
8037exports.hash = hash;
8038}).call(this,require("buffer").Buffer)
8039},{"buffer":7}],34:[function(require,module,exports){
8040'use strict';
ebd8d4e8
IC
8041/*
8042 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8043 * Digest Algorithm, as defined in RFC 1321.
8044 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8045 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8046 * Distributed under the BSD License
8047 * See http://pajhome.org.uk/crypt/md5 for more info.
8048 */
8049
ab78acc6 8050var helpers = require('./helpers');
ebd8d4e8
IC
8051
8052/*
8053 * Calculate the MD5 of an array of little-endian words, and a bit length
8054 */
8055function core_md5(x, len)
8056{
8057 /* append padding */
8058 x[len >> 5] |= 0x80 << ((len) % 32);
8059 x[(((len + 64) >>> 9) << 4) + 14] = len;
8060
8061 var a = 1732584193;
8062 var b = -271733879;
8063 var c = -1732584194;
8064 var d = 271733878;
8065
8066 for(var i = 0; i < x.length; i += 16)
8067 {
8068 var olda = a;
8069 var oldb = b;
8070 var oldc = c;
8071 var oldd = d;
8072
8073 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8074 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8075 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8076 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8077 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8078 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8079 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8080 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8081 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8082 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8083 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8084 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8085 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8086 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8087 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8088 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8089
8090 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8091 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8092 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8093 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8094 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8095 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8096 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8097 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8098 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8099 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8100 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8101 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8102 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8103 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8104 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8105 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8106
8107 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8108 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8109 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8110 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8111 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8112 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8113 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8114 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8115 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8116 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8117 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8118 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8119 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8120 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8121 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8122 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8123
8124 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8125 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8126 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8127 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8128 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8129 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8130 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8131 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8132 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8133 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8134 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8135 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8136 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8137 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8138 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8139 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8140
8141 a = safe_add(a, olda);
8142 b = safe_add(b, oldb);
8143 c = safe_add(c, oldc);
8144 d = safe_add(d, oldd);
8145 }
8146 return Array(a, b, c, d);
8147
8148}
8149
8150/*
8151 * These functions implement the four basic operations the algorithm uses.
8152 */
8153function md5_cmn(q, a, b, x, s, t)
8154{
8155 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8156}
8157function md5_ff(a, b, c, d, x, s, t)
8158{
8159 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8160}
8161function md5_gg(a, b, c, d, x, s, t)
8162{
8163 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8164}
8165function md5_hh(a, b, c, d, x, s, t)
8166{
8167 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8168}
8169function md5_ii(a, b, c, d, x, s, t)
8170{
8171 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8172}
8173
8174/*
8175 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8176 * to work around bugs in some JS interpreters.
8177 */
8178function safe_add(x, y)
8179{
8180 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8181 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8182 return (msw << 16) | (lsw & 0xFFFF);
8183}
8184
8185/*
8186 * Bitwise rotate a 32-bit number to the left.
8187 */
8188function bit_rol(num, cnt)
8189{
8190 return (num << cnt) | (num >>> (32 - cnt));
8191}
8192
8193module.exports = function md5(buf) {
8194 return helpers.hash(buf, core_md5, 16);
8195};
ab78acc6
IC
8196},{"./helpers":33}],35:[function(require,module,exports){
8197arguments[4][12][0].apply(exports,arguments)
8198},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 8199(function (Buffer){
ebd8d4e8
IC
8200/*
8201CryptoJS v3.1.2
8202code.google.com/p/crypto-js
8203(c) 2009-2013 by Jeff Mott. All rights reserved.
8204code.google.com/p/crypto-js/wiki/License
8205*/
8206/** @preserve
8207(c) 2012 by Cédric Mesnil. All rights reserved.
8208
8209Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8210
8211 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8212 - 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.
8213
8214THIS 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.
8215*/
8216
ab78acc6 8217// constants table
ebd8d4e8 8218var zl = [
ab78acc6
IC
8219 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8220 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8221 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8222 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8223 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8224]
8225
ebd8d4e8 8226var zr = [
ab78acc6
IC
8227 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8228 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8229 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8230 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8231 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8232]
8233
ebd8d4e8 8234var sl = [
ab78acc6
IC
8235 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8236 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8237 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8238 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8239 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8240]
8241
ebd8d4e8 8242var sr = [
ab78acc6
IC
8243 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8244 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8245 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8246 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8247 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8248]
ebd8d4e8 8249
ab78acc6
IC
8250var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8251var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8252
ab78acc6
IC
8253function bytesToWords (bytes) {
8254 var words = []
ebd8d4e8 8255 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8256 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8257 }
ab78acc6
IC
8258 return words
8259}
ebd8d4e8 8260
ab78acc6
IC
8261function wordsToBytes (words) {
8262 var bytes = []
ebd8d4e8 8263 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8264 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8265 }
ab78acc6
IC
8266 return bytes
8267}
ebd8d4e8 8268
ab78acc6
IC
8269function processBlock (H, M, offset) {
8270 // swap endian
ebd8d4e8 8271 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8272 var offset_i = offset + i
8273 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8274
8275 // Swap
8276 M[offset_i] = (
ab78acc6
IC
8277 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8278 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8279 )
ebd8d4e8
IC
8280 }
8281
8282 // Working variables
ab78acc6
IC
8283 var al, bl, cl, dl, el
8284 var ar, br, cr, dr, er
8285
8286 ar = al = H[0]
8287 br = bl = H[1]
8288 cr = cl = H[2]
8289 dr = dl = H[3]
8290 er = el = H[4]
8291
8292 // computation
8293 var t
8294 for (i = 0; i < 80; i += 1) {
8295 t = (al + M[offset + zl[i]]) | 0
8296 if (i < 16) {
8297 t += f1(bl, cl, dl) + hl[0]
8298 } else if (i < 32) {
8299 t += f2(bl, cl, dl) + hl[1]
8300 } else if (i < 48) {
8301 t += f3(bl, cl, dl) + hl[2]
8302 } else if (i < 64) {
8303 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8304 } else {// if (i<80) {
ab78acc6
IC
8305 t += f5(bl, cl, dl) + hl[4]
8306 }
8307 t = t | 0
8308 t = rotl(t, sl[i])
8309 t = (t + el) | 0
8310 al = el
8311 el = dl
8312 dl = rotl(cl, 10)
8313 cl = bl
8314 bl = t
8315
8316 t = (ar + M[offset + zr[i]]) | 0
8317 if (i < 16) {
8318 t += f5(br, cr, dr) + hr[0]
8319 } else if (i < 32) {
8320 t += f4(br, cr, dr) + hr[1]
8321 } else if (i < 48) {
8322 t += f3(br, cr, dr) + hr[2]
8323 } else if (i < 64) {
8324 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8325 } else {// if (i<80) {
ab78acc6 8326 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8327 }
ebd8d4e8 8328
ab78acc6
IC
8329 t = t | 0
8330 t = rotl(t, sr[i])
8331 t = (t + er) | 0
8332 ar = er
8333 er = dr
8334 dr = rotl(cr, 10)
8335 cr = br
8336 br = t
8337 }
8338
8339 // intermediate hash value
8340 t = (H[1] + cl + dr) | 0
8341 H[1] = (H[2] + dl + er) | 0
8342 H[2] = (H[3] + el + ar) | 0
8343 H[3] = (H[4] + al + br) | 0
8344 H[4] = (H[0] + bl + cr) | 0
8345 H[0] = t
ebd8d4e8
IC
8346}
8347
ab78acc6
IC
8348function f1 (x, y, z) {
8349 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8350}
8351
ab78acc6
IC
8352function f2 (x, y, z) {
8353 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8354}
8355
ab78acc6
IC
8356function f3 (x, y, z) {
8357 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8358}
8359
ab78acc6
IC
8360function f4 (x, y, z) {
8361 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8362}
8363
ab78acc6
IC
8364function f5 (x, y, z) {
8365 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8366}
8367
ab78acc6
IC
8368function rotl (x, n) {
8369 return (x << n) | (x >>> (32 - n))
8370}
8371
8372function ripemd160 (message) {
8373 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8374
ab78acc6
IC
8375 if (typeof message === 'string') {
8376 message = new Buffer(message, 'utf8')
8377 }
ebd8d4e8 8378
ab78acc6 8379 var m = bytesToWords(message)
ebd8d4e8 8380
ab78acc6
IC
8381 var nBitsLeft = message.length * 8
8382 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8383
8384 // Add padding
ab78acc6 8385 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8386 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8387 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8388 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8389 )
ebd8d4e8 8390
ab78acc6
IC
8391 for (var i = 0; i < m.length; i += 16) {
8392 processBlock(H, m, i)
ebd8d4e8
IC
8393 }
8394
ab78acc6
IC
8395 // swap endian
8396 for (i = 0; i < 5; i++) {
8397 // shortcut
8398 var H_i = H[i]
ebd8d4e8
IC
8399
8400 // Swap
ab78acc6
IC
8401 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8402 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8403 }
8404
ab78acc6
IC
8405 var digestbytes = wordsToBytes(H)
8406 return new Buffer(digestbytes)
ebd8d4e8
IC
8407}
8408
ab78acc6
IC
8409module.exports = ripemd160
8410
8411}).call(this,require("buffer").Buffer)
8412},{"buffer":7}],37:[function(require,module,exports){
8413(function (Buffer){
8414// prototype class for hash functions
8415function Hash (blockSize, finalSize) {
8416 this._block = new Buffer(blockSize)
8417 this._finalSize = finalSize
8418 this._blockSize = blockSize
8419 this._len = 0
8420 this._s = 0
8421}
ebd8d4e8 8422
ab78acc6
IC
8423Hash.prototype.update = function (data, enc) {
8424 if (typeof data === 'string') {
8425 enc = enc || 'utf8'
8426 data = new Buffer(data, enc)
8427 }
ebd8d4e8 8428
ab78acc6
IC
8429 var l = this._len += data.length
8430 var s = this._s || 0
8431 var f = 0
8432 var buffer = this._block
ebd8d4e8 8433
ab78acc6
IC
8434 while (s < l) {
8435 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8436 var ch = (t - f)
ebd8d4e8 8437
ab78acc6
IC
8438 for (var i = 0; i < ch; i++) {
8439 buffer[(s % this._blockSize) + i] = data[i + f]
8440 }
8441
8442 s += ch
8443 f += ch
ebd8d4e8 8444
ab78acc6
IC
8445 if ((s % this._blockSize) === 0) {
8446 this._update(buffer)
8447 }
ebd8d4e8 8448 }
ab78acc6
IC
8449 this._s = s
8450
8451 return this
8452}
ebd8d4e8 8453
ab78acc6
IC
8454Hash.prototype.digest = function (enc) {
8455 // Suppose the length of the message M, in bits, is l
8456 var l = this._len * 8
8457
8458 // Append the bit 1 to the end of the message
8459 this._block[this._len % this._blockSize] = 0x80
8460
8461 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8462 this._block.fill(0, this._len % this._blockSize + 1)
8463
8464 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8465 this._update(this._block)
8466 this._block.fill(0)
ebd8d4e8
IC
8467 }
8468
ab78acc6
IC
8469 // to this append the block which is equal to the number l written in binary
8470 // TODO: handle case where l is > Math.pow(2, 29)
8471 this._block.writeInt32BE(l, this._blockSize - 4)
8472
8473 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8474
ab78acc6
IC
8475 return enc ? hash.toString(enc) : hash
8476}
ebd8d4e8 8477
ab78acc6
IC
8478Hash.prototype._update = function () {
8479 throw new Error('_update must be implemented by subclass')
8480}
ebd8d4e8 8481
ab78acc6 8482module.exports = Hash
ebd8d4e8 8483
ab78acc6
IC
8484}).call(this,require("buffer").Buffer)
8485},{"buffer":7}],38:[function(require,module,exports){
8486var exports = module.exports = function SHA (algorithm) {
8487 algorithm = algorithm.toLowerCase()
ebd8d4e8 8488
ab78acc6
IC
8489 var Algorithm = exports[algorithm]
8490 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8491
ab78acc6
IC
8492 return new Algorithm()
8493}
8494
8495exports.sha = require('./sha')
8496exports.sha1 = require('./sha1')
8497exports.sha224 = require('./sha224')
8498exports.sha256 = require('./sha256')
8499exports.sha384 = require('./sha384')
8500exports.sha512 = require('./sha512')
8501
8502},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8503(function (Buffer){
8504/*
8505 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8506 * in FIPS PUB 180-1
8507 * This source code is derived from sha1.js of the same repository.
8508 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8509 * operation was added.
8510 */
ebd8d4e8 8511
ab78acc6
IC
8512var inherits = require('inherits')
8513var Hash = require('./hash')
ebd8d4e8 8514
ab78acc6 8515var W = new Array(80)
ebd8d4e8 8516
ab78acc6
IC
8517function Sha () {
8518 this.init()
8519 this._w = W
ebd8d4e8 8520
ab78acc6
IC
8521 Hash.call(this, 64, 56)
8522}
ebd8d4e8 8523
ab78acc6 8524inherits(Sha, Hash)
ebd8d4e8 8525
ab78acc6
IC
8526Sha.prototype.init = function () {
8527 this._a = 0x67452301 | 0
8528 this._b = 0xefcdab89 | 0
8529 this._c = 0x98badcfe | 0
8530 this._d = 0x10325476 | 0
8531 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8532
ab78acc6
IC
8533 return this
8534}
8535
8536/*
8537 * Bitwise rotate a 32-bit number to the left.
8538 */
8539function rol (num, cnt) {
8540 return (num << cnt) | (num >>> (32 - cnt))
8541}
8542
8543Sha.prototype._update = function (M) {
8544 var W = this._w
8545
8546 var a = this._a
8547 var b = this._b
8548 var c = this._c
8549 var d = this._d
8550 var e = this._e
ebd8d4e8 8551
ab78acc6
IC
8552 var j = 0, k
8553
8554 /*
8555 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8556 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8557 */
8558 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8559 function loop (w, f) {
8560 W[j] = w
8561
8562 var t = rol(a, 5) + f + e + w + k
8563
8564 e = d
8565 d = c
8566 c = rol(b, 30)
8567 b = a
8568 a = t
8569 j++
ebd8d4e8
IC
8570 }
8571
ab78acc6
IC
8572 k = 1518500249
8573 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8574 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8575 k = 1859775393
8576 while (j < 40) loop(calcW(), b ^ c ^ d)
8577 k = -1894007588
8578 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8579 k = -899497514
8580 while (j < 80) loop(calcW(), b ^ c ^ d)
8581
8582 this._a = (a + this._a) | 0
8583 this._b = (b + this._b) | 0
8584 this._c = (c + this._c) | 0
8585 this._d = (d + this._d) | 0
8586 this._e = (e + this._e) | 0
ebd8d4e8
IC
8587}
8588
ab78acc6
IC
8589Sha.prototype._hash = function () {
8590 var H = new Buffer(20)
8591
8592 H.writeInt32BE(this._a | 0, 0)
8593 H.writeInt32BE(this._b | 0, 4)
8594 H.writeInt32BE(this._c | 0, 8)
8595 H.writeInt32BE(this._d | 0, 12)
8596 H.writeInt32BE(this._e | 0, 16)
8597
8598 return H
ebd8d4e8
IC
8599}
8600
ab78acc6 8601module.exports = Sha
ebd8d4e8 8602
ebd8d4e8 8603
ab78acc6
IC
8604}).call(this,require("buffer").Buffer)
8605},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8606(function (Buffer){
ebd8d4e8
IC
8607/*
8608 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8609 * in FIPS PUB 180-1
8610 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8611 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8612 * Distributed under the BSD License
8613 * See http://pajhome.org.uk/crypt/md5 for details.
8614 */
ebd8d4e8 8615
ab78acc6
IC
8616var inherits = require('inherits')
8617var Hash = require('./hash')
ebd8d4e8 8618
ab78acc6 8619var W = new Array(80)
ebd8d4e8 8620
ab78acc6
IC
8621function Sha1 () {
8622 this.init()
8623 this._w = W
ebd8d4e8 8624
ab78acc6
IC
8625 Hash.call(this, 64, 56)
8626}
ebd8d4e8 8627
ab78acc6 8628inherits(Sha1, Hash)
ebd8d4e8 8629
ab78acc6
IC
8630Sha1.prototype.init = function () {
8631 this._a = 0x67452301 | 0
8632 this._b = 0xefcdab89 | 0
8633 this._c = 0x98badcfe | 0
8634 this._d = 0x10325476 | 0
8635 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8636
ab78acc6
IC
8637 return this
8638}
ebd8d4e8 8639
ab78acc6
IC
8640/*
8641 * Bitwise rotate a 32-bit number to the left.
8642 */
8643function rol (num, cnt) {
8644 return (num << cnt) | (num >>> (32 - cnt))
8645}
ebd8d4e8 8646
ab78acc6
IC
8647Sha1.prototype._update = function (M) {
8648 var W = this._w
ebd8d4e8 8649
ab78acc6
IC
8650 var a = this._a
8651 var b = this._b
8652 var c = this._c
8653 var d = this._d
8654 var e = this._e
ebd8d4e8 8655
ab78acc6 8656 var j = 0, k
ebd8d4e8 8657
ab78acc6
IC
8658 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8659 function loop (w, f) {
8660 W[j] = w
ebd8d4e8 8661
ab78acc6 8662 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8663
ab78acc6
IC
8664 e = d
8665 d = c
8666 c = rol(b, 30)
8667 b = a
8668 a = t
8669 j++
ebd8d4e8
IC
8670 }
8671
ab78acc6
IC
8672 k = 1518500249
8673 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8674 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8675 k = 1859775393
8676 while (j < 40) loop(calcW(), b ^ c ^ d)
8677 k = -1894007588
8678 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8679 k = -899497514
8680 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8681
ab78acc6
IC
8682 this._a = (a + this._a) | 0
8683 this._b = (b + this._b) | 0
8684 this._c = (c + this._c) | 0
8685 this._d = (d + this._d) | 0
8686 this._e = (e + this._e) | 0
8687}
ebd8d4e8 8688
ab78acc6
IC
8689Sha1.prototype._hash = function () {
8690 var H = new Buffer(20)
ebd8d4e8 8691
ab78acc6
IC
8692 H.writeInt32BE(this._a | 0, 0)
8693 H.writeInt32BE(this._b | 0, 4)
8694 H.writeInt32BE(this._c | 0, 8)
8695 H.writeInt32BE(this._d | 0, 12)
8696 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8697
ab78acc6
IC
8698 return H
8699}
ebd8d4e8 8700
ab78acc6 8701module.exports = Sha1
ebd8d4e8 8702
ab78acc6
IC
8703}).call(this,require("buffer").Buffer)
8704},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8705(function (Buffer){
8706/**
8707 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8708 * in FIPS 180-2
8709 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8710 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8711 *
8712 */
ebd8d4e8 8713
ab78acc6
IC
8714var inherits = require('inherits')
8715var Sha256 = require('./sha256')
8716var Hash = require('./hash')
ebd8d4e8 8717
ab78acc6 8718var W = new Array(64)
ebd8d4e8 8719
ab78acc6
IC
8720function Sha224 () {
8721 this.init()
ebd8d4e8 8722
ab78acc6 8723 this._w = W // new Array(64)
ebd8d4e8 8724
ab78acc6
IC
8725 Hash.call(this, 64, 56)
8726}
ebd8d4e8 8727
ab78acc6 8728inherits(Sha224, Sha256)
ebd8d4e8 8729
ab78acc6
IC
8730Sha224.prototype.init = function () {
8731 this._a = 0xc1059ed8 | 0
8732 this._b = 0x367cd507 | 0
8733 this._c = 0x3070dd17 | 0
8734 this._d = 0xf70e5939 | 0
8735 this._e = 0xffc00b31 | 0
8736 this._f = 0x68581511 | 0
8737 this._g = 0x64f98fa7 | 0
8738 this._h = 0xbefa4fa4 | 0
8739
8740 return this
8741}
8742
8743Sha224.prototype._hash = function () {
8744 var H = new Buffer(28)
8745
8746 H.writeInt32BE(this._a, 0)
8747 H.writeInt32BE(this._b, 4)
8748 H.writeInt32BE(this._c, 8)
8749 H.writeInt32BE(this._d, 12)
8750 H.writeInt32BE(this._e, 16)
8751 H.writeInt32BE(this._f, 20)
8752 H.writeInt32BE(this._g, 24)
8753
8754 return H
ebd8d4e8
IC
8755}
8756
ab78acc6 8757module.exports = Sha224
ebd8d4e8 8758
ab78acc6
IC
8759}).call(this,require("buffer").Buffer)
8760},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8761(function (Buffer){
ebd8d4e8
IC
8762/**
8763 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8764 * in FIPS 180-2
8765 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8766 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8767 *
8768 */
8769
ab78acc6
IC
8770var inherits = require('inherits')
8771var Hash = require('./hash')
8772
8773var K = [
8774 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8775 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8776 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8777 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8778 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8779 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8780 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8781 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8782 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8783 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8784 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8785 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8786 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8787 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8788 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8789 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8790]
8791
8792var W = new Array(64)
8793
8794function Sha256 () {
8795 this.init()
8796
8797 this._w = W // new Array(64)
8798
8799 Hash.call(this, 64, 56)
8800}
8801
8802inherits(Sha256, Hash)
8803
8804Sha256.prototype.init = function () {
8805 this._a = 0x6a09e667 | 0
8806 this._b = 0xbb67ae85 | 0
8807 this._c = 0x3c6ef372 | 0
8808 this._d = 0xa54ff53a | 0
8809 this._e = 0x510e527f | 0
8810 this._f = 0x9b05688c | 0
8811 this._g = 0x1f83d9ab | 0
8812 this._h = 0x5be0cd19 | 0
ebd8d4e8 8813
ab78acc6
IC
8814 return this
8815}
ebd8d4e8 8816
ab78acc6
IC
8817function S (X, n) {
8818 return (X >>> n) | (X << (32 - n))
8819}
ebd8d4e8 8820
ab78acc6
IC
8821function R (X, n) {
8822 return (X >>> n)
8823}
ebd8d4e8 8824
ab78acc6
IC
8825function Ch (x, y, z) {
8826 return ((x & y) ^ ((~x) & z))
8827}
ebd8d4e8 8828
ab78acc6
IC
8829function Maj (x, y, z) {
8830 return ((x & y) ^ (x & z) ^ (y & z))
8831}
ebd8d4e8 8832
ab78acc6
IC
8833function Sigma0256 (x) {
8834 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8835}
ebd8d4e8 8836
ab78acc6
IC
8837function Sigma1256 (x) {
8838 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8839}
ebd8d4e8 8840
ab78acc6
IC
8841function Gamma0256 (x) {
8842 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8843}
ebd8d4e8 8844
ab78acc6
IC
8845function Gamma1256 (x) {
8846 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8847}
ebd8d4e8 8848
ab78acc6
IC
8849Sha256.prototype._update = function (M) {
8850 var W = this._w
ebd8d4e8 8851
ab78acc6
IC
8852 var a = this._a | 0
8853 var b = this._b | 0
8854 var c = this._c | 0
8855 var d = this._d | 0
8856 var e = this._e | 0
8857 var f = this._f | 0
8858 var g = this._g | 0
8859 var h = this._h | 0
ebd8d4e8 8860
ab78acc6 8861 var j = 0
ebd8d4e8 8862
ab78acc6
IC
8863 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8864 function loop (w) {
8865 W[j] = w
ebd8d4e8 8866
ab78acc6
IC
8867 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8868 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8869
ab78acc6
IC
8870 h = g
8871 g = f
8872 f = e
8873 e = d + T1
8874 d = c
8875 c = b
8876 b = a
8877 a = T1 + T2
ebd8d4e8 8878
ab78acc6 8879 j++
ebd8d4e8
IC
8880 }
8881
ab78acc6
IC
8882 while (j < 16) loop(M.readInt32BE(j * 4))
8883 while (j < 64) loop(calcW())
ebd8d4e8 8884
ab78acc6
IC
8885 this._a = (a + this._a) | 0
8886 this._b = (b + this._b) | 0
8887 this._c = (c + this._c) | 0
8888 this._d = (d + this._d) | 0
8889 this._e = (e + this._e) | 0
8890 this._f = (f + this._f) | 0
8891 this._g = (g + this._g) | 0
8892 this._h = (h + this._h) | 0
8893}
ebd8d4e8 8894
ab78acc6
IC
8895Sha256.prototype._hash = function () {
8896 var H = new Buffer(32)
ebd8d4e8 8897
ab78acc6
IC
8898 H.writeInt32BE(this._a, 0)
8899 H.writeInt32BE(this._b, 4)
8900 H.writeInt32BE(this._c, 8)
8901 H.writeInt32BE(this._d, 12)
8902 H.writeInt32BE(this._e, 16)
8903 H.writeInt32BE(this._f, 20)
8904 H.writeInt32BE(this._g, 24)
8905 H.writeInt32BE(this._h, 28)
ebd8d4e8 8906
ab78acc6
IC
8907 return H
8908}
ebd8d4e8 8909
ab78acc6 8910module.exports = Sha256
ebd8d4e8 8911
ab78acc6
IC
8912}).call(this,require("buffer").Buffer)
8913},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8914(function (Buffer){
8915var inherits = require('inherits')
8916var SHA512 = require('./sha512')
8917var Hash = require('./hash')
ebd8d4e8 8918
ab78acc6 8919var W = new Array(160)
ebd8d4e8 8920
ab78acc6
IC
8921function Sha384 () {
8922 this.init()
8923 this._w = W
ebd8d4e8 8924
ab78acc6
IC
8925 Hash.call(this, 128, 112)
8926}
ebd8d4e8 8927
ab78acc6 8928inherits(Sha384, SHA512)
ebd8d4e8 8929
ab78acc6
IC
8930Sha384.prototype.init = function () {
8931 this._a = 0xcbbb9d5d | 0
8932 this._b = 0x629a292a | 0
8933 this._c = 0x9159015a | 0
8934 this._d = 0x152fecd8 | 0
8935 this._e = 0x67332667 | 0
8936 this._f = 0x8eb44a87 | 0
8937 this._g = 0xdb0c2e0d | 0
8938 this._h = 0x47b5481d | 0
ebd8d4e8 8939
ab78acc6
IC
8940 this._al = 0xc1059ed8 | 0
8941 this._bl = 0x367cd507 | 0
8942 this._cl = 0x3070dd17 | 0
8943 this._dl = 0xf70e5939 | 0
8944 this._el = 0xffc00b31 | 0
8945 this._fl = 0x68581511 | 0
8946 this._gl = 0x64f98fa7 | 0
8947 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8948
ab78acc6 8949 return this
ebd8d4e8
IC
8950}
8951
ab78acc6
IC
8952Sha384.prototype._hash = function () {
8953 var H = new Buffer(48)
ebd8d4e8 8954
ab78acc6
IC
8955 function writeInt64BE (h, l, offset) {
8956 H.writeInt32BE(h, offset)
8957 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8958 }
ebd8d4e8 8959
ab78acc6
IC
8960 writeInt64BE(this._a, this._al, 0)
8961 writeInt64BE(this._b, this._bl, 8)
8962 writeInt64BE(this._c, this._cl, 16)
8963 writeInt64BE(this._d, this._dl, 24)
8964 writeInt64BE(this._e, this._el, 32)
8965 writeInt64BE(this._f, this._fl, 40)
8966
8967 return H
ebd8d4e8
IC
8968}
8969
ab78acc6 8970module.exports = Sha384
ebd8d4e8 8971
ab78acc6
IC
8972}).call(this,require("buffer").Buffer)
8973},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8974(function (Buffer){
ab78acc6
IC
8975var inherits = require('inherits')
8976var Hash = require('./hash')
8977
8978var K = [
8979 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8980 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8981 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8982 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8983 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8984 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8985 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8986 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8987 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8988 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8989 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8990 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8991 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8992 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8993 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8994 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8995 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8996 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8997 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8998 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8999 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9000 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9001 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9002 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9003 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9004 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9005 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9006 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9007 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9008 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9009 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9010 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9011 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9012 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9013 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9014 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9015 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9016 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9017 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9018 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9019]
9020
9021var W = new Array(160)
9022
9023function Sha512 () {
9024 this.init()
9025 this._w = W
9026
9027 Hash.call(this, 128, 112)
9028}
9029
9030inherits(Sha512, Hash)
9031
9032Sha512.prototype.init = function () {
9033 this._a = 0x6a09e667 | 0
9034 this._b = 0xbb67ae85 | 0
9035 this._c = 0x3c6ef372 | 0
9036 this._d = 0xa54ff53a | 0
9037 this._e = 0x510e527f | 0
9038 this._f = 0x9b05688c | 0
9039 this._g = 0x1f83d9ab | 0
9040 this._h = 0x5be0cd19 | 0
9041
9042 this._al = 0xf3bcc908 | 0
9043 this._bl = 0x84caa73b | 0
9044 this._cl = 0xfe94f82b | 0
9045 this._dl = 0x5f1d36f1 | 0
9046 this._el = 0xade682d1 | 0
9047 this._fl = 0x2b3e6c1f | 0
9048 this._gl = 0xfb41bd6b | 0
9049 this._hl = 0x137e2179 | 0
ebd8d4e8 9050
ab78acc6 9051 return this
ebd8d4e8
IC
9052}
9053
ab78acc6
IC
9054function S (X, Xl, n) {
9055 return (X >>> n) | (Xl << (32 - n))
9056}
9057
9058function Ch (x, y, z) {
9059 return ((x & y) ^ ((~x) & z))
9060}
9061
9062function Maj (x, y, z) {
9063 return ((x & y) ^ (x & z) ^ (y & z))
9064}
9065
9066Sha512.prototype._update = function (M) {
9067 var W = this._w
9068
9069 var a = this._a | 0
9070 var b = this._b | 0
9071 var c = this._c | 0
9072 var d = this._d | 0
9073 var e = this._e | 0
9074 var f = this._f | 0
9075 var g = this._g | 0
9076 var h = this._h | 0
9077
9078 var al = this._al | 0
9079 var bl = this._bl | 0
9080 var cl = this._cl | 0
9081 var dl = this._dl | 0
9082 var el = this._el | 0
9083 var fl = this._fl | 0
9084 var gl = this._gl | 0
9085 var hl = this._hl | 0
9086
9087 var i = 0, j = 0
9088 var Wi, Wil
9089 function calcW () {
9090 var x = W[j - 15 * 2]
9091 var xl = W[j - 15 * 2 + 1]
9092 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9093 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9094
9095 x = W[j - 2 * 2]
9096 xl = W[j - 2 * 2 + 1]
9097 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9098 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9099
9100 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9101 var Wi7 = W[j - 7 * 2]
9102 var Wi7l = W[j - 7 * 2 + 1]
9103
9104 var Wi16 = W[j - 16 * 2]
9105 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 9106
ab78acc6
IC
9107 Wil = gamma0l + Wi7l
9108 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9109 Wil = Wil + gamma1l
9110 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9111 Wil = Wil + Wi16l
9112 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9113 }
9114
9115 function loop () {
9116 W[j] = Wi
9117 W[j + 1] = Wil
ebd8d4e8 9118
ab78acc6
IC
9119 var maj = Maj(a, b, c)
9120 var majl = Maj(al, bl, cl)
ebd8d4e8 9121
ab78acc6
IC
9122 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9123 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9124 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9125 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 9126
ab78acc6
IC
9127 // t1 = h + sigma1 + ch + K[i] + W[i]
9128 var Ki = K[j]
9129 var Kil = K[j + 1]
ebd8d4e8 9130
ab78acc6
IC
9131 var ch = Ch(e, f, g)
9132 var chl = Ch(el, fl, gl)
ebd8d4e8 9133
ab78acc6
IC
9134 var t1l = hl + sigma1l
9135 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9136 t1l = t1l + chl
9137 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9138 t1l = t1l + Kil
9139 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9140 t1l = t1l + Wil
9141 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 9142
ab78acc6
IC
9143 // t2 = sigma0 + maj
9144 var t2l = sigma0l + majl
9145 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 9146
ab78acc6
IC
9147 h = g
9148 hl = gl
9149 g = f
9150 gl = fl
9151 f = e
9152 fl = el
9153 el = (dl + t1l) | 0
9154 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9155 d = c
9156 dl = cl
9157 c = b
9158 cl = bl
9159 b = a
9160 bl = al
9161 al = (t1l + t2l) | 0
9162 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9163
9164 i++
9165 j += 2
9166 }
9167
9168 while (i < 16) {
9169 Wi = M.readInt32BE(j * 4)
9170 Wil = M.readInt32BE(j * 4 + 4)
9171
9172 loop()
9173 }
9174
9175 while (i < 80) {
9176 calcW()
9177 loop()
9178 }
9179
9180 this._al = (this._al + al) | 0
9181 this._bl = (this._bl + bl) | 0
9182 this._cl = (this._cl + cl) | 0
9183 this._dl = (this._dl + dl) | 0
9184 this._el = (this._el + el) | 0
9185 this._fl = (this._fl + fl) | 0
9186 this._gl = (this._gl + gl) | 0
9187 this._hl = (this._hl + hl) | 0
9188
9189 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9190 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9191 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9192 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9193 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9194 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9195 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9196 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9197}
9198
9199Sha512.prototype._hash = function () {
9200 var H = new Buffer(64)
9201
9202 function writeInt64BE (h, l, offset) {
9203 H.writeInt32BE(h, offset)
9204 H.writeInt32BE(l, offset + 4)
9205 }
9206
9207 writeInt64BE(this._a, this._al, 0)
9208 writeInt64BE(this._b, this._bl, 8)
9209 writeInt64BE(this._c, this._cl, 16)
9210 writeInt64BE(this._d, this._dl, 24)
9211 writeInt64BE(this._e, this._el, 32)
9212 writeInt64BE(this._f, this._fl, 40)
9213 writeInt64BE(this._g, this._gl, 48)
9214 writeInt64BE(this._h, this._hl, 56)
9215
9216 return H
9217}
9218
9219module.exports = Sha512
9220
9221}).call(this,require("buffer").Buffer)
9222},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9223(function (Buffer){
9224'use strict';
9225var createHash = require('create-hash/browser');
9226var inherits = require('inherits')
ebd8d4e8 9227
ab78acc6 9228var Transform = require('stream').Transform
ebd8d4e8 9229
ab78acc6
IC
9230var ZEROS = new Buffer(128)
9231ZEROS.fill(0)
ebd8d4e8 9232
ab78acc6
IC
9233function Hmac(alg, key) {
9234 Transform.call(this)
ebd8d4e8 9235
ab78acc6
IC
9236 if (typeof key === 'string') {
9237 key = new Buffer(key)
9238 }
ebd8d4e8 9239
ab78acc6 9240 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9241
ab78acc6
IC
9242 this._alg = alg
9243 this._key = key
ebd8d4e8 9244
ab78acc6
IC
9245 if (key.length > blocksize) {
9246 key = createHash(alg).update(key).digest()
ebd8d4e8 9247
ab78acc6
IC
9248 } else if (key.length < blocksize) {
9249 key = Buffer.concat([key, ZEROS], blocksize)
9250 }
ebd8d4e8 9251
ab78acc6
IC
9252 var ipad = this._ipad = new Buffer(blocksize)
9253 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9254
ab78acc6
IC
9255 for (var i = 0; i < blocksize; i++) {
9256 ipad[i] = key[i] ^ 0x36
9257 opad[i] = key[i] ^ 0x5C
9258 }
ebd8d4e8 9259
ab78acc6
IC
9260 this._hash = createHash(alg).update(ipad)
9261}
ebd8d4e8 9262
ab78acc6 9263inherits(Hmac, Transform)
ebd8d4e8 9264
ab78acc6
IC
9265Hmac.prototype.update = function (data, enc) {
9266 this._hash.update(data, enc)
ebd8d4e8 9267
ab78acc6
IC
9268 return this
9269}
ebd8d4e8 9270
ab78acc6
IC
9271Hmac.prototype._transform = function (data, _, next) {
9272 this._hash.update(data)
ebd8d4e8 9273
ab78acc6
IC
9274 next()
9275}
ebd8d4e8 9276
ab78acc6
IC
9277Hmac.prototype._flush = function (next) {
9278 this.push(this.digest())
ebd8d4e8 9279
ab78acc6
IC
9280 next()
9281}
ebd8d4e8 9282
ab78acc6
IC
9283Hmac.prototype.digest = function (enc) {
9284 var h = this._hash.digest()
ebd8d4e8 9285
ab78acc6
IC
9286 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9287}
ebd8d4e8 9288
ab78acc6
IC
9289module.exports = function createHmac(alg, key) {
9290 return new Hmac(alg, key)
9291}
ebd8d4e8 9292
ab78acc6
IC
9293}).call(this,require("buffer").Buffer)
9294},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9295arguments[4][12][0].apply(exports,arguments)
9296},{"dup":12}],47:[function(require,module,exports){
9297var assert = require('assert')
9298var BigInteger = require('bigi')
ebd8d4e8 9299
ab78acc6 9300var Point = require('./point')
ebd8d4e8
IC
9301
9302function Curve(p, a, b, Gx, Gy, n, h) {
9303 this.p = p
9304 this.a = a
9305 this.b = b
9306 this.G = Point.fromAffine(this, Gx, Gy)
9307 this.n = n
9308 this.h = h
9309
9310 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9311
9312 // result caching
9313 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9314}
9315
9316Curve.prototype.pointFromX = function(isOdd, x) {
9317 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9318 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9319
9320 var y = beta
9321 if (beta.isEven() ^ !isOdd) {
9322 y = this.p.subtract(y) // -y % p
9323 }
9324
9325 return Point.fromAffine(this, x, y)
9326}
9327
9328Curve.prototype.isInfinity = function(Q) {
9329 if (Q === this.infinity) return true
9330
9331 return Q.z.signum() === 0 && Q.y.signum() !== 0
9332}
9333
9334Curve.prototype.isOnCurve = function(Q) {
9335 if (this.isInfinity(Q)) return true
9336
9337 var x = Q.affineX
9338 var y = Q.affineY
9339 var a = this.a
9340 var b = this.b
9341 var p = this.p
9342
9343 // Check that xQ and yQ are integers in the interval [0, p - 1]
9344 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9345 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9346
9347 // and check that y^2 = x^3 + ax + b (mod p)
9348 var lhs = y.square().mod(p)
9349 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9350 return lhs.equals(rhs)
9351}
9352
9353/**
9354 * Validate an elliptic curve point.
9355 *
9356 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9357 */
9358Curve.prototype.validate = function(Q) {
9359 // Check Q != O
9360 assert(!this.isInfinity(Q), 'Point is at infinity')
9361 assert(this.isOnCurve(Q), 'Point is not on the curve')
9362
9363 // Check nQ = O (where Q is a scalar multiple of G)
9364 var nQ = Q.multiply(this.n)
9365 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9366
9367 return true
9368}
9369
9370module.exports = Curve
9371
ab78acc6 9372},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9373module.exports={
9374 "secp128r1": {
9375 "p": "fffffffdffffffffffffffffffffffff",
9376 "a": "fffffffdfffffffffffffffffffffffc",
9377 "b": "e87579c11079f43dd824993c2cee5ed3",
9378 "n": "fffffffe0000000075a30d1b9038a115",
9379 "h": "01",
9380 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9381 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9382 },
9383 "secp160k1": {
9384 "p": "fffffffffffffffffffffffffffffffeffffac73",
9385 "a": "00",
9386 "b": "07",
9387 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9388 "h": "01",
9389 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9390 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9391 },
9392 "secp160r1": {
9393 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9394 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9395 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9396 "n": "0100000000000000000001f4c8f927aed3ca752257",
9397 "h": "01",
9398 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9399 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9400 },
9401 "secp192k1": {
9402 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9403 "a": "00",
9404 "b": "03",
9405 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9406 "h": "01",
9407 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9408 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9409 },
9410 "secp192r1": {
9411 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9412 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9413 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9414 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9415 "h": "01",
9416 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9417 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9418 },
ebd8d4e8
IC
9419 "secp256k1": {
9420 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9421 "a": "00",
9422 "b": "07",
9423 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9424 "h": "01",
9425 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9426 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9427 },
9428 "secp256r1": {
9429 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9430 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9431 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9432 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9433 "h": "01",
9434 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9435 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9436 }
9437}
9438
ab78acc6
IC
9439},{}],49:[function(require,module,exports){
9440var Point = require('./point')
9441var Curve = require('./curve')
ebd8d4e8 9442
ab78acc6 9443var getCurveByName = require('./names')
ebd8d4e8
IC
9444
9445module.exports = {
9446 Curve: Curve,
9447 Point: Point,
9448 getCurveByName: getCurveByName
9449}
9450
ab78acc6
IC
9451},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9452var BigInteger = require('bigi')
ebd8d4e8 9453
ab78acc6
IC
9454var curves = require('./curves')
9455var Curve = require('./curve')
ebd8d4e8
IC
9456
9457function getCurveByName(name) {
9458 var curve = curves[name]
9459 if (!curve) return null
9460
9461 var p = new BigInteger(curve.p, 16)
9462 var a = new BigInteger(curve.a, 16)
9463 var b = new BigInteger(curve.b, 16)
9464 var n = new BigInteger(curve.n, 16)
9465 var h = new BigInteger(curve.h, 16)
9466 var Gx = new BigInteger(curve.Gx, 16)
9467 var Gy = new BigInteger(curve.Gy, 16)
9468
9469 return new Curve(p, a, b, Gx, Gy, n, h)
9470}
9471
9472module.exports = getCurveByName
9473
ab78acc6 9474},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9475(function (Buffer){
ab78acc6
IC
9476var assert = require('assert')
9477var BigInteger = require('bigi')
ebd8d4e8
IC
9478
9479var THREE = BigInteger.valueOf(3)
9480
9481function Point(curve, x, y, z) {
9482 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9483
9484 this.curve = curve
9485 this.x = x
9486 this.y = y
9487 this.z = z
9488 this._zInv = null
9489
9490 this.compressed = true
9491}
9492
9493Object.defineProperty(Point.prototype, 'zInv', {
9494 get: function() {
9495 if (this._zInv === null) {
9496 this._zInv = this.z.modInverse(this.curve.p)
9497 }
9498
9499 return this._zInv
9500 }
9501})
9502
9503Object.defineProperty(Point.prototype, 'affineX', {
9504 get: function() {
9505 return this.x.multiply(this.zInv).mod(this.curve.p)
9506 }
9507})
9508
9509Object.defineProperty(Point.prototype, 'affineY', {
9510 get: function() {
9511 return this.y.multiply(this.zInv).mod(this.curve.p)
9512 }
9513})
9514
9515Point.fromAffine = function(curve, x, y) {
9516 return new Point(curve, x, y, BigInteger.ONE)
9517}
9518
9519Point.prototype.equals = function(other) {
9520 if (other === this) return true
9521 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9522 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9523
9524 // u = Y2 * Z1 - Y1 * Z2
9525 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9526
9527 if (u.signum() !== 0) return false
9528
9529 // v = X2 * Z1 - X1 * Z2
9530 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9531
9532 return v.signum() === 0
9533}
9534
9535Point.prototype.negate = function() {
9536 var y = this.curve.p.subtract(this.y)
9537
9538 return new Point(this.curve, this.x, y, this.z)
9539}
9540
9541Point.prototype.add = function(b) {
9542 if (this.curve.isInfinity(this)) return b
9543 if (this.curve.isInfinity(b)) return this
9544
9545 var x1 = this.x
9546 var y1 = this.y
9547 var x2 = b.x
9548 var y2 = b.y
9549
9550 // u = Y2 * Z1 - Y1 * Z2
9551 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9552 // v = X2 * Z1 - X1 * Z2
9553 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9554
9555 if (v.signum() === 0) {
9556 if (u.signum() === 0) {
9557 return this.twice() // this == b, so double
9558 }
9559
9560 return this.curve.infinity // this = -b, so infinity
9561 }
9562
9563 var v2 = v.square()
9564 var v3 = v2.multiply(v)
9565 var x1v2 = x1.multiply(v2)
9566 var zu2 = u.square().multiply(this.z)
9567
9568 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9569 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9570 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9571 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)
9572 // z3 = v^3 * z1 * z2
9573 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9574
9575 return new Point(this.curve, x3, y3, z3)
9576}
9577
9578Point.prototype.twice = function() {
9579 if (this.curve.isInfinity(this)) return this
9580 if (this.y.signum() === 0) return this.curve.infinity
9581
9582 var x1 = this.x
9583 var y1 = this.y
9584
9585 var y1z1 = y1.multiply(this.z)
9586 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9587 var a = this.curve.a
9588
9589 // w = 3 * x1^2 + a * z1^2
9590 var w = x1.square().multiply(THREE)
9591
9592 if (a.signum() !== 0) {
9593 w = w.add(this.z.square().multiply(a))
9594 }
9595
9596 w = w.mod(this.curve.p)
9597 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9598 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9599 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9600 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9601 // z3 = 8 * (y1 * z1)^3
9602 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9603
9604 return new Point(this.curve, x3, y3, z3)
9605}
9606
9607// Simple NAF (Non-Adjacent Form) multiplication algorithm
9608// TODO: modularize the multiplication algorithm
9609Point.prototype.multiply = function(k) {
9610 if (this.curve.isInfinity(this)) return this
9611 if (k.signum() === 0) return this.curve.infinity
9612
9613 var e = k
9614 var h = e.multiply(THREE)
9615
9616 var neg = this.negate()
9617 var R = this
9618
9619 for (var i = h.bitLength() - 2; i > 0; --i) {
9620 R = R.twice()
9621
9622 var hBit = h.testBit(i)
9623 var eBit = e.testBit(i)
9624
9625 if (hBit != eBit) {
9626 R = R.add(hBit ? this : neg)
9627 }
9628 }
9629
9630 return R
9631}
9632
9633// Compute this*j + x*k (simultaneous multiplication)
9634Point.prototype.multiplyTwo = function(j, x, k) {
9635 var i
9636
9637 if (j.bitLength() > k.bitLength())
9638 i = j.bitLength() - 1
9639 else
9640 i = k.bitLength() - 1
9641
9642 var R = this.curve.infinity
9643 var both = this.add(x)
9644
9645 while (i >= 0) {
9646 R = R.twice()
9647
9648 var jBit = j.testBit(i)
9649 var kBit = k.testBit(i)
9650
9651 if (jBit) {
9652 if (kBit) {
9653 R = R.add(both)
9654
9655 } else {
9656 R = R.add(this)
9657 }
9658
9659 } else {
9660 if (kBit) {
9661 R = R.add(x)
9662 }
9663 }
9664 --i
9665 }
9666
9667 return R
9668}
9669
9670Point.prototype.getEncoded = function(compressed) {
9671 if (compressed == undefined) compressed = this.compressed
9672 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9673
9674 var x = this.affineX
9675 var y = this.affineY
9676
9677 var buffer
9678
9679 // Determine size of q in bytes
9680 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9681
9682 // 0x02/0x03 | X
9683 if (compressed) {
9684 buffer = new Buffer(1 + byteLength)
9685 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9686
9687 // 0x04 | X | Y
9688 } else {
9689 buffer = new Buffer(1 + byteLength + byteLength)
9690 buffer.writeUInt8(0x04, 0)
9691
9692 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9693 }
9694
9695 x.toBuffer(byteLength).copy(buffer, 1)
9696
9697 return buffer
9698}
9699
9700Point.decodeFrom = function(curve, buffer) {
9701 var type = buffer.readUInt8(0)
9702 var compressed = (type !== 4)
9703
ebd8d4e8 9704 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9705 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9706
9707 var Q
9708 if (compressed) {
9709 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9710 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9711
9712 var isOdd = (type === 0x03)
9713 Q = curve.pointFromX(isOdd, x)
9714
9715 } else {
9716 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9717
9718 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9719 Q = Point.fromAffine(curve, x, y)
9720 }
9721
9722 Q.compressed = compressed
9723 return Q
9724}
9725
9726Point.prototype.toString = function () {
9727 if (this.curve.isInfinity(this)) return '(INFINITY)'
9728
9729 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9730}
9731
9732module.exports = Point
9733
ab78acc6
IC
9734}).call(this,require("buffer").Buffer)
9735},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9736(function (process,global,Buffer){
9737'use strict';
ebd8d4e8 9738
ab78acc6
IC
9739var crypto = global.crypto || global.msCrypto
9740if(crypto && crypto.getRandomValues) {
9741 module.exports = randomBytes;
9742} else {
9743 module.exports = oldBrowser;
9744}
9745function randomBytes(size, cb) {
9746 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9747 /* This will not work in older browsers.
9748 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9749 */
9750
9751 crypto.getRandomValues(bytes);
9752 if (typeof cb === 'function') {
9753 return process.nextTick(function () {
9754 cb(null, bytes);
9755 });
ebd8d4e8 9756 }
ab78acc6
IC
9757 return bytes;
9758}
9759function oldBrowser() {
9760 throw new Error(
9761 'secure random number generation not supported by this browser\n'+
9762 'use chrome, FireFox or Internet Explorer 11'
9763 )
ebd8d4e8
IC
9764}
9765
ab78acc6
IC
9766}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9767},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9768(function (Buffer){
9769'use strict';
ebd8d4e8 9770
ab78acc6
IC
9771function getFunctionName(fn) {
9772 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9773}
9774
9775function getTypeTypeName(type) {
9776 if (nativeTypes.Function(type)) {
9777 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9778 }
ab78acc6
IC
9779 if (nativeTypes.Object(type)) return JSON.stringify(type);
9780
9781 return type;
ebd8d4e8
IC
9782}
9783
ab78acc6
IC
9784function getValueTypeName(value) {
9785 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9786
ab78acc6
IC
9787 return getFunctionName(value.constructor);
9788}
9789
9790function tfErrorString(type, value) {
9791 var typeTypeName = getTypeTypeName(type);
9792 var valueTypeName = getValueTypeName(value);
9793
9794 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9795}
9796
9797function tfPropertyErrorString(type, name, value) {
9798 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9799}
9800
9801var nativeTypes = {
9802 Array: (function (_Array) {
9803 function Array(_x) {
9804 return _Array.apply(this, arguments);
9805 }
9806
9807 Array.toString = function () {
9808 return _Array.toString();
9809 };
9810
9811 return Array;
9812 })(function (value) {
9813 return value !== null && value !== undefined && value.constructor === Array;
9814 }),
9815 Boolean: function Boolean(value) {
9816 return typeof value === 'boolean';
9817 },
9818 Buffer: (function (_Buffer) {
9819 function Buffer(_x2) {
9820 return _Buffer.apply(this, arguments);
9821 }
9822
9823 Buffer.toString = function () {
9824 return _Buffer.toString();
9825 };
9826
9827 return Buffer;
9828 })(function (value) {
9829 return Buffer.isBuffer(value);
9830 }),
9831 Function: function Function(value) {
9832 return typeof value === 'function';
9833 },
9834 Null: function Null(value) {
9835 return value === undefined || value === null;
9836 },
9837 Number: function Number(value) {
9838 return typeof value === 'number';
9839 },
9840 Object: function Object(value) {
9841 return typeof value === 'object';
9842 },
9843 String: function String(value) {
9844 return typeof value === 'string';
9845 },
9846 '': function _() {
9847 return true;
ebd8d4e8 9848 }
ab78acc6
IC
9849};
9850
9851function tJSON(type) {
9852 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9853}
9854
ab78acc6
IC
9855function sJSON(type) {
9856 var json = tJSON(type);
9857 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9858}
9859
ab78acc6
IC
9860var otherTypes = {
9861 arrayOf: function arrayOf(type) {
9862 function arrayOf(value, strict) {
9863 try {
9864 return nativeTypes.Array(value) && value.every(function (x) {
9865 return typeforce(type, x, strict);
9866 });
9867 } catch (e) {
9868 return false;
9869 }
9870 }
9871 arrayOf.toJSON = function () {
9872 return [tJSON(type)];
9873 };
9874
9875 return arrayOf;
9876 },
9877
9878 maybe: function maybe(type) {
9879 function maybe(value, strict) {
9880 return nativeTypes.Null(value) || typeforce(type, value, strict);
9881 }
9882 maybe.toJSON = function () {
9883 return '?' + sJSON(type);
9884 };
9885
9886 return maybe;
9887 },
9888
9889 object: function object(type) {
9890 function object(value, strict) {
9891 typeforce(nativeTypes.Object, value, strict);
9892
9893 var propertyName, propertyType, propertyValue;
9894
9895 try {
9896 for (propertyName in type) {
9897 propertyType = type[propertyName];
9898 propertyValue = value[propertyName];
9899
9900 typeforce(propertyType, propertyValue, strict);
9901 }
9902 } catch (e) {
9903 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9904 }
9905
9906 if (strict) {
9907 for (propertyName in value) {
9908 if (type[propertyName]) continue;
9909
9910 throw new TypeError('Unexpected property "' + propertyName + '"');
9911 }
9912 }
9913
9914 return true;
9915 }
9916 object.toJSON = function () {
9917 return type;
9918 };
9919
9920 return object;
9921 },
9922
9923 oneOf: function oneOf() {
9924 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9925 types[_key] = arguments[_key];
9926 }
9927
9928 function oneOf(value, strict) {
9929 return types.some(function (type) {
9930 try {
9931 return typeforce(type, value, strict);
9932 } catch (e) {
9933 return false;
9934 }
9935 });
9936 }
9937 oneOf.toJSON = function () {
9938 return types.map(sJSON).join('|');
9939 };
9940
9941 return oneOf;
9942 },
9943
9944 quacksLike: function quacksLike(type) {
9945 function quacksLike(value, strict) {
9946 return type === getValueTypeName(value);
9947 }
9948 quacksLike.toJSON = function () {
9949 return type;
9950 };
9951
9952 return quacksLike;
9953 },
9954
9955 tuple: function tuple() {
9956 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9957 types[_key2] = arguments[_key2];
9958 }
9959
9960 function tuple(value, strict) {
9961 return types.every(function (type, i) {
9962 return typeforce(type, value[i], strict);
9963 });
9964 }
9965 tuple.toJSON = function () {
9966 return '(' + types.map(sJSON).join(', ') + ')';
9967 };
9968
9969 return tuple;
9970 },
9971
9972 value: function value(expected) {
9973 function value(actual) {
9974 return actual === expected;
9975 }
9976 value.toJSON = function () {
9977 return expected;
9978 };
9979
9980 return value;
9981 }
9982};
9983
9984function compile(type) {
9985 if (nativeTypes.String(type)) {
9986 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9987
9988 return nativeTypes[type] || otherTypes.quacksLike(type);
9989 } else if (type && nativeTypes.Object(type)) {
9990 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9991
9992 var compiled = {};
9993
9994 for (var propertyName in type) {
9995 compiled[propertyName] = compile(type[propertyName]);
9996 }
9997
9998 return otherTypes.object(compiled);
9999 } else if (nativeTypes.Function(type)) {
10000 return type;
10001 }
10002
10003 return otherTypes.value(type);
ebd8d4e8
IC
10004}
10005
ab78acc6
IC
10006function typeforce(_x3, _x4, _x5) {
10007 var _again = true;
10008
10009 _function: while (_again) {
10010 var type = _x3,
10011 value = _x4,
10012 strict = _x5;
10013 _again = false;
10014
10015 if (nativeTypes.Function(type)) {
10016 if (type(value, strict)) return true;
10017
10018 throw new TypeError(tfErrorString(type, value));
10019 }
10020
10021 // JIT
10022 _x3 = compile(type);
10023 _x4 = value;
10024 _x5 = strict;
10025 _again = true;
10026 continue _function;
10027 }
ebd8d4e8
IC
10028}
10029
ab78acc6
IC
10030// assign all types to typeforce function
10031var typeName;
10032Object.keys(nativeTypes).forEach(function (typeName) {
10033 var nativeType = nativeTypes[typeName];
10034 nativeType.toJSON = function () {
10035 return typeName;
10036 };
10037
10038 typeforce[typeName] = nativeType;
10039});
ebd8d4e8 10040
ab78acc6
IC
10041for (typeName in otherTypes) {
10042 typeforce[typeName] = otherTypes[typeName];
10043}
ebd8d4e8 10044
ab78acc6
IC
10045module.exports = typeforce;
10046module.exports.compile = compile;
10047}).call(this,require("buffer").Buffer)
10048},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 10049(function (Buffer){
ab78acc6
IC
10050var assert = require('assert')
10051var base58check = require('bs58check')
10052var typeForce = require('typeforce')
10053var networks = require('./networks')
10054var scripts = require('./scripts')
ebd8d4e8 10055
ab78acc6 10056function findScriptTypeByVersion (version) {
ebd8d4e8
IC
10057 for (var networkName in networks) {
10058 var network = networks[networkName]
10059
10060 if (version === network.pubKeyHash) return 'pubkeyhash'
10061 if (version === network.scriptHash) return 'scripthash'
10062 }
10063}
10064
ab78acc6
IC
10065function Address (hash, version) {
10066 typeForce('Buffer', hash)
10067
ebd8d4e8
IC
10068 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10069 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10070
10071 this.hash = hash
10072 this.version = version
10073}
10074
ab78acc6 10075Address.fromBase58Check = function (string) {
ebd8d4e8
IC
10076 var payload = base58check.decode(string)
10077 var version = payload.readUInt8(0)
10078 var hash = payload.slice(1)
10079
10080 return new Address(hash, version)
10081}
10082
ab78acc6 10083Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
10084 network = network || networks.bitcoin
10085
ab78acc6
IC
10086 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10087 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 10088
ab78acc6 10089 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
10090}
10091
ebd8d4e8
IC
10092Address.prototype.toBase58Check = function () {
10093 var payload = new Buffer(21)
10094 payload.writeUInt8(this.version, 0)
10095 this.hash.copy(payload, 1)
10096
10097 return base58check.encode(payload)
10098}
10099
ab78acc6 10100Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
10101 var scriptType = findScriptTypeByVersion(this.version)
10102
10103 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10104 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10105
ab78acc6
IC
10106 assert(false, this.toString() + ' has no matching Script')
10107}
10108
10109Address.prototype.toString = Address.prototype.toBase58Check
10110
10111module.exports = Address
10112
10113}).call(this,require("buffer").Buffer)
10114},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10115var bs58check = require('bs58check')
10116
10117function decode () {
10118 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10119
10120 return bs58check.decode.apply(undefined, arguments)
10121}
10122
10123function encode () {
10124 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10125
10126 return bs58check.encode.apply(undefined, arguments)
10127}
10128
10129module.exports = {
10130 decode: decode,
10131 encode: encode
10132}
10133
10134},{"bs58check":31}],56:[function(require,module,exports){
10135(function (Buffer){
10136var assert = require('assert')
10137var bufferutils = require('./bufferutils')
10138var crypto = require('./crypto')
10139
10140var Transaction = require('./transaction')
10141
10142function Block () {
10143 this.version = 1
10144 this.prevHash = null
10145 this.merkleRoot = null
10146 this.timestamp = 0
10147 this.bits = 0
10148 this.nonce = 0
10149}
10150
10151Block.fromBuffer = function (buffer) {
10152 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10153
10154 var offset = 0
10155 function readSlice (n) {
10156 offset += n
10157 return buffer.slice(offset - n, offset)
10158 }
10159
10160 function readUInt32 () {
10161 var i = buffer.readUInt32LE(offset)
10162 offset += 4
10163 return i
10164 }
10165
10166 var block = new Block()
10167 block.version = readUInt32()
10168 block.prevHash = readSlice(32)
10169 block.merkleRoot = readSlice(32)
10170 block.timestamp = readUInt32()
10171 block.bits = readUInt32()
10172 block.nonce = readUInt32()
10173
10174 if (buffer.length === 80) return block
10175
10176 function readVarInt () {
10177 var vi = bufferutils.readVarInt(buffer, offset)
10178 offset += vi.size
10179 return vi.number
10180 }
10181
10182 // FIXME: poor performance
10183 function readTransaction () {
10184 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10185
10186 offset += tx.toBuffer().length
10187 return tx
10188 }
10189
10190 var nTransactions = readVarInt()
10191 block.transactions = []
10192
10193 for (var i = 0; i < nTransactions; ++i) {
10194 var tx = readTransaction()
10195 block.transactions.push(tx)
10196 }
10197
10198 return block
10199}
10200
10201Block.fromHex = function (hex) {
10202 return Block.fromBuffer(new Buffer(hex, 'hex'))
10203}
10204
10205Block.prototype.getHash = function () {
10206 return crypto.hash256(this.toBuffer(true))
10207}
10208
10209Block.prototype.getId = function () {
10210 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
10211}
10212
ab78acc6
IC
10213Block.prototype.getUTCDate = function () {
10214 var date = new Date(0) // epoch
10215 date.setUTCSeconds(this.timestamp)
ebd8d4e8 10216
ab78acc6
IC
10217 return date
10218}
ebd8d4e8 10219
ab78acc6
IC
10220Block.prototype.toBuffer = function (headersOnly) {
10221 var buffer = new Buffer(80)
ebd8d4e8 10222
ab78acc6
IC
10223 var offset = 0
10224 function writeSlice (slice) {
10225 slice.copy(buffer, offset)
10226 offset += slice.length
10227 }
ebd8d4e8 10228
ab78acc6
IC
10229 function writeUInt32 (i) {
10230 buffer.writeUInt32LE(i, offset)
10231 offset += 4
10232 }
ebd8d4e8 10233
ab78acc6
IC
10234 writeUInt32(this.version)
10235 writeSlice(this.prevHash)
10236 writeSlice(this.merkleRoot)
10237 writeUInt32(this.timestamp)
10238 writeUInt32(this.bits)
10239 writeUInt32(this.nonce)
ebd8d4e8 10240
ab78acc6 10241 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10242
ab78acc6
IC
10243 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10244 var txBuffers = this.transactions.map(function (tx) {
10245 return tx.toBuffer()
10246 })
ebd8d4e8 10247
ab78acc6 10248 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10249}
10250
ab78acc6
IC
10251Block.prototype.toHex = function (headersOnly) {
10252 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10253}
10254
ab78acc6
IC
10255module.exports = Block
10256
10257}).call(this,require("buffer").Buffer)
10258},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10259(function (Buffer){
10260var assert = require('assert')
10261var opcodes = require('./opcodes')
ebd8d4e8
IC
10262
10263// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10264function verifuint (value, max) {
ebd8d4e8
IC
10265 assert(typeof value === 'number', 'cannot write a non-number as a number')
10266 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10267 assert(value <= max, 'value is larger than maximum value for type')
10268 assert(Math.floor(value) === value, 'value has a fractional component')
10269}
10270
ab78acc6 10271function pushDataSize (i) {
ebd8d4e8 10272 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10273 : i < 0xff ? 2
10274 : i < 0xffff ? 3
10275 : 5
ebd8d4e8
IC
10276}
10277
ab78acc6 10278function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10279 var opcode = buffer.readUInt8(offset)
10280 var number, size
10281
10282 // ~6 bit
10283 if (opcode < opcodes.OP_PUSHDATA1) {
10284 number = opcode
10285 size = 1
10286
10287 // 8 bit
10288 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10289 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10290 number = buffer.readUInt8(offset + 1)
10291 size = 2
10292
10293 // 16 bit
10294 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10295 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10296 number = buffer.readUInt16LE(offset + 1)
10297 size = 3
10298
10299 // 32 bit
10300 } else {
ab78acc6 10301 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10302 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10303
10304 number = buffer.readUInt32LE(offset + 1)
10305 size = 5
ebd8d4e8
IC
10306 }
10307
10308 return {
10309 opcode: opcode,
10310 number: number,
10311 size: size
10312 }
10313}
10314
ab78acc6 10315function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10316 var a = buffer.readUInt32LE(offset)
10317 var b = buffer.readUInt32LE(offset + 4)
10318 b *= 0x100000000
10319
10320 verifuint(b + a, 0x001fffffffffffff)
10321
10322 return b + a
10323}
10324
ab78acc6 10325function readVarInt (buffer, offset) {
ebd8d4e8
IC
10326 var t = buffer.readUInt8(offset)
10327 var number, size
10328
10329 // 8 bit
10330 if (t < 253) {
10331 number = t
10332 size = 1
10333
10334 // 16 bit
10335 } else if (t < 254) {
10336 number = buffer.readUInt16LE(offset + 1)
10337 size = 3
10338
10339 // 32 bit
10340 } else if (t < 255) {
10341 number = buffer.readUInt32LE(offset + 1)
10342 size = 5
10343
10344 // 64 bit
10345 } else {
10346 number = readUInt64LE(buffer, offset + 1)
10347 size = 9
10348 }
10349
10350 return {
10351 number: number,
10352 size: size
10353 }
10354}
10355
ab78acc6 10356function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10357 var size = pushDataSize(number)
10358
10359 // ~6 bit
10360 if (size === 1) {
10361 buffer.writeUInt8(number, offset)
10362
10363 // 8 bit
10364 } else if (size === 2) {
10365 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10366 buffer.writeUInt8(number, offset + 1)
10367
10368 // 16 bit
10369 } else if (size === 3) {
10370 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10371 buffer.writeUInt16LE(number, offset + 1)
10372
10373 // 32 bit
10374 } else {
10375 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10376 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10377 }
10378
10379 return size
10380}
10381
ab78acc6 10382function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10383 verifuint(value, 0x001fffffffffffff)
10384
10385 buffer.writeInt32LE(value & -1, offset)
10386 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10387}
10388
ab78acc6
IC
10389function varIntSize (i) {
10390 return i < 253 ? 1
10391 : i < 0x10000 ? 3
10392 : i < 0x100000000 ? 5
10393 : 9
ebd8d4e8
IC
10394}
10395
ab78acc6 10396function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10397 var size = varIntSize(number)
10398
10399 // 8 bit
10400 if (size === 1) {
10401 buffer.writeUInt8(number, offset)
10402
10403 // 16 bit
10404 } else if (size === 3) {
10405 buffer.writeUInt8(253, offset)
10406 buffer.writeUInt16LE(number, offset + 1)
10407
10408 // 32 bit
10409 } else if (size === 5) {
10410 buffer.writeUInt8(254, offset)
10411 buffer.writeUInt32LE(number, offset + 1)
10412
10413 // 64 bit
10414 } else {
10415 buffer.writeUInt8(255, offset)
10416 writeUInt64LE(buffer, number, offset + 1)
10417 }
10418
10419 return size
10420}
10421
ab78acc6
IC
10422function varIntBuffer (i) {
10423 var size = varIntSize(i)
10424 var buffer = new Buffer(size)
10425 writeVarInt(buffer, i, 0)
10426
10427 return buffer
10428}
10429
10430function reverse (buffer) {
10431 var buffer2 = new Buffer(buffer)
10432 Array.prototype.reverse.call(buffer2)
10433 return buffer2
10434}
10435
ebd8d4e8
IC
10436module.exports = {
10437 pushDataSize: pushDataSize,
10438 readPushDataInt: readPushDataInt,
10439 readUInt64LE: readUInt64LE,
10440 readVarInt: readVarInt,
ab78acc6
IC
10441 reverse: reverse,
10442 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10443 varIntSize: varIntSize,
10444 writePushDataInt: writePushDataInt,
10445 writeUInt64LE: writeUInt64LE,
10446 writeVarInt: writeVarInt
10447}
10448
ab78acc6
IC
10449}).call(this,require("buffer").Buffer)
10450},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10451var createHash = require('create-hash')
ebd8d4e8 10452
ab78acc6 10453function hash160 (buffer) {
ebd8d4e8
IC
10454 return ripemd160(sha256(buffer))
10455}
10456
ab78acc6 10457function hash256 (buffer) {
ebd8d4e8
IC
10458 return sha256(sha256(buffer))
10459}
10460
ab78acc6
IC
10461function ripemd160 (buffer) {
10462 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10463}
10464
ab78acc6
IC
10465function sha1 (buffer) {
10466 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10467}
10468
ab78acc6
IC
10469function sha256 (buffer) {
10470 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10471}
10472
10473// FIXME: Name not consistent with others
ab78acc6 10474var createHmac = require('create-hmac')
ebd8d4e8 10475
ab78acc6
IC
10476function HmacSHA256 (buffer, secret) {
10477 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10478 return createHmac('sha256', secret).update(buffer).digest()
10479}
ebd8d4e8 10480
ab78acc6
IC
10481function HmacSHA512 (buffer, secret) {
10482 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10483 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10484}
10485
10486module.exports = {
10487 ripemd160: ripemd160,
10488 sha1: sha1,
10489 sha256: sha256,
10490 hash160: hash160,
10491 hash256: hash256,
10492 HmacSHA256: HmacSHA256,
10493 HmacSHA512: HmacSHA512
10494}
10495
ab78acc6 10496},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10497(function (Buffer){
ab78acc6
IC
10498var assert = require('assert')
10499var createHmac = require('create-hmac')
10500var typeForce = require('typeforce')
ebd8d4e8 10501
ab78acc6
IC
10502var BigInteger = require('bigi')
10503var ECSignature = require('./ecsignature')
10504
10505var ZERO = new Buffer([0])
10506var ONE = new Buffer([1])
ebd8d4e8
IC
10507
10508// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10509function deterministicGenerateK (curve, hash, d, checkSig) {
10510 typeForce('Buffer', hash)
10511 typeForce('BigInteger', d)
10512
10513 // FIXME: remove/uncomment for 2.0.0
10514 // typeForce('Function', checkSig)
10515
10516 if (typeof checkSig !== 'function') {
10517 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10518
10519 checkSig = function (k) {
10520 var G = curve.G
10521 var n = curve.n
10522 var e = BigInteger.fromBuffer(hash)
10523
10524 var Q = G.multiply(k)
10525
10526 if (curve.isInfinity(Q))
10527 return false
10528
10529 var r = Q.affineX.mod(n)
10530 if (r.signum() === 0)
10531 return false
10532
10533 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10534 if (s.signum() === 0)
10535 return false
10536
10537 return true
10538 }
10539 }
10540
10541 // sanity check
ebd8d4e8 10542 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10543
10544 var x = d.toBuffer(32)
10545 var k = new Buffer(32)
10546 var v = new Buffer(32)
10547
ab78acc6 10548 // Step A, ignored as hash already provided
ebd8d4e8
IC
10549 // Step B
10550 v.fill(1)
10551
10552 // Step C
10553 k.fill(0)
10554
10555 // Step D
ab78acc6
IC
10556 k = createHmac('sha256', k)
10557 .update(v)
10558 .update(ZERO)
10559 .update(x)
10560 .update(hash)
10561 .digest()
ebd8d4e8
IC
10562
10563 // Step E
ab78acc6 10564 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10565
10566 // Step F
ab78acc6
IC
10567 k = createHmac('sha256', k)
10568 .update(v)
10569 .update(ONE)
10570 .update(x)
10571 .update(hash)
10572 .digest()
ebd8d4e8
IC
10573
10574 // Step G
ab78acc6 10575 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10576
10577 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10578 // Step H2b
ab78acc6 10579 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10580
10581 var T = BigInteger.fromBuffer(v)
10582
ab78acc6
IC
10583 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10584 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10585 k = createHmac('sha256', k)
10586 .update(v)
10587 .update(ZERO)
10588 .digest()
10589
10590 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10591
ab78acc6
IC
10592 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10593 // Step H2b again
10594 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10595 T = BigInteger.fromBuffer(v)
10596 }
10597
10598 return T
10599}
10600
ab78acc6
IC
10601function sign (curve, hash, d) {
10602 var r, s
ebd8d4e8 10603
ab78acc6 10604 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10605 var n = curve.n
10606 var G = curve.G
ebd8d4e8 10607
ab78acc6
IC
10608 deterministicGenerateK(curve, hash, d, function (k) {
10609 var Q = G.multiply(k)
10610
10611 if (curve.isInfinity(Q))
10612 return false
10613
10614 r = Q.affineX.mod(n)
10615 if (r.signum() === 0)
10616 return false
10617
10618 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10619 if (s.signum() === 0)
10620 return false
ebd8d4e8 10621
ab78acc6
IC
10622 return true
10623 })
ebd8d4e8
IC
10624
10625 var N_OVER_TWO = n.shiftRight(1)
10626
10627 // enforce low S values, see bip62: 'low s values in signatures'
10628 if (s.compareTo(N_OVER_TWO) > 0) {
10629 s = n.subtract(s)
10630 }
10631
10632 return new ECSignature(r, s)
10633}
10634
ab78acc6 10635function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10636 var n = curve.n
10637 var G = curve.G
10638
10639 var r = signature.r
10640 var s = signature.s
10641
ab78acc6
IC
10642 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10643 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10644 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10645
ab78acc6 10646 // c = s^-1 mod n
ebd8d4e8
IC
10647 var c = s.modInverse(n)
10648
ab78acc6
IC
10649 // 1.4.4 Compute u1 = es^−1 mod n
10650 // u2 = rs^−1 mod n
ebd8d4e8
IC
10651 var u1 = e.multiply(c).mod(n)
10652 var u2 = r.multiply(c).mod(n)
10653
ab78acc6
IC
10654 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10655 var R = G.multiplyTwo(u1, Q, u2)
10656 var v = R.affineX.mod(n)
ebd8d4e8 10657
ab78acc6
IC
10658 // 1.4.5 (cont.) Enforce R is not at infinity
10659 if (curve.isInfinity(R)) return false
10660
10661 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10662 return v.equals(r)
10663}
10664
ab78acc6
IC
10665function verify (curve, hash, signature, Q) {
10666 // 1.4.2 H = Hash(M), already done by the user
10667 // 1.4.3 e = H
10668 var e = BigInteger.fromBuffer(hash)
10669
10670 return verifyRaw(curve, e, signature, Q)
10671}
10672
ebd8d4e8
IC
10673/**
10674 * Recover a public key from a signature.
10675 *
10676 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10677 * Key Recovery Operation".
10678 *
10679 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10680 */
ab78acc6 10681function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10682 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10683
ab78acc6
IC
10684 var n = curve.n
10685 var G = curve.G
10686
ebd8d4e8
IC
10687 var r = signature.r
10688 var s = signature.s
10689
ab78acc6
IC
10690 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10691 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10692
ebd8d4e8
IC
10693 // A set LSB signifies that the y-coordinate is odd
10694 var isYOdd = i & 1
10695
10696 // The more significant bit specifies whether we should use the
10697 // first or second candidate key.
10698 var isSecondKey = i >> 1
10699
ebd8d4e8
IC
10700 // 1.1 Let x = r + jn
10701 var x = isSecondKey ? r.add(n) : r
10702 var R = curve.pointFromX(isYOdd, x)
10703
10704 // 1.4 Check that nR is at infinity
10705 var nR = R.multiply(n)
10706 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10707
10708 // Compute -e from e
10709 var eNeg = e.negate().mod(n)
10710
10711 // 1.6.1 Compute Q = r^-1 (sR - eG)
10712 // Q = r^-1 (sR + -eG)
10713 var rInv = r.modInverse(n)
10714
10715 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10716 curve.validate(Q)
10717
10718 return Q
10719}
10720
10721/**
10722 * Calculate pubkey extraction parameter.
10723 *
10724 * When extracting a pubkey from a signature, we have to
10725 * distinguish four different cases. Rather than putting this
10726 * burden on the verifier, Bitcoin includes a 2-bit value with the
10727 * signature.
10728 *
10729 * This function simply tries all four cases and returns the value
10730 * that resulted in a successful pubkey recovery.
10731 */
ab78acc6 10732function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10733 for (var i = 0; i < 4; i++) {
10734 var Qprime = recoverPubKey(curve, e, signature, i)
10735
10736 // 1.6.2 Verify Q
10737 if (Qprime.equals(Q)) {
10738 return i
10739 }
10740 }
10741
10742 throw new Error('Unable to find valid recovery factor')
10743}
10744
10745module.exports = {
10746 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10747 deterministicGenerateK: deterministicGenerateK,
10748 recoverPubKey: recoverPubKey,
10749 sign: sign,
10750 verify: verify,
10751 verifyRaw: verifyRaw
10752}
10753
ab78acc6
IC
10754}).call(this,require("buffer").Buffer)
10755},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10756(function (Buffer){
ab78acc6
IC
10757var assert = require('assert')
10758var base58check = require('bs58check')
10759var ecdsa = require('./ecdsa')
10760var networks = require('./networks')
10761var randomBytes = require('randombytes')
10762var typeForce = require('typeforce')
ebd8d4e8 10763
ab78acc6
IC
10764var BigInteger = require('bigi')
10765var ECPubKey = require('./ecpubkey')
ebd8d4e8 10766
ab78acc6
IC
10767var ecurve = require('ecurve')
10768var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10769
ab78acc6 10770function ECKey (d, compressed) {
ebd8d4e8 10771 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10772 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10773
ab78acc6 10774 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10775
10776 this.d = d
10777 this.pub = new ECPubKey(Q, compressed)
10778}
10779
ab78acc6
IC
10780// Constants
10781ECKey.curve = secp256k1
10782
ebd8d4e8 10783// Static constructors
ab78acc6 10784ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10785 var payload = base58check.decode(string)
10786 var compressed = false
10787
10788 // Ignore the version byte
10789 payload = payload.slice(1)
10790
10791 if (payload.length === 33) {
10792 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10793
10794 // Truncate the compression flag
10795 payload = payload.slice(0, -1)
10796 compressed = true
10797 }
10798
10799 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10800
10801 var d = BigInteger.fromBuffer(payload)
10802 return new ECKey(d, compressed)
10803}
10804
ab78acc6
IC
10805ECKey.makeRandom = function (compressed, rng) {
10806 rng = rng || randomBytes
ebd8d4e8
IC
10807
10808 var buffer = rng(32)
ab78acc6
IC
10809 typeForce('Buffer', buffer)
10810 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10811
10812 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10813 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10814
10815 return new ECKey(d, compressed)
10816}
10817
10818// Export functions
ab78acc6 10819ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10820 network = network || networks.bitcoin
10821
10822 var bufferLen = this.pub.compressed ? 34 : 33
10823 var buffer = new Buffer(bufferLen)
10824
10825 buffer.writeUInt8(network.wif, 0)
10826 this.d.toBuffer(32).copy(buffer, 1)
10827
10828 if (this.pub.compressed) {
10829 buffer.writeUInt8(0x01, 33)
10830 }
10831
10832 return base58check.encode(buffer)
10833}
10834
10835// Operations
ab78acc6
IC
10836ECKey.prototype.sign = function (hash) {
10837 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10838}
10839
10840module.exports = ECKey
10841
ab78acc6
IC
10842}).call(this,require("buffer").Buffer)
10843},{"./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 10844(function (Buffer){
ab78acc6
IC
10845var crypto = require('./crypto')
10846var ecdsa = require('./ecdsa')
10847var typeForce = require('typeforce')
10848var networks = require('./networks')
ebd8d4e8 10849
ab78acc6 10850var Address = require('./address')
ebd8d4e8 10851
ab78acc6
IC
10852var ecurve = require('ecurve')
10853var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10854
ab78acc6
IC
10855function ECPubKey (Q, compressed) {
10856 if (compressed === undefined) {
10857 compressed = true
10858 }
ebd8d4e8 10859
ab78acc6
IC
10860 typeForce('Point', Q)
10861 typeForce('Boolean', compressed)
ebd8d4e8
IC
10862
10863 this.compressed = compressed
10864 this.Q = Q
10865}
10866
ab78acc6
IC
10867// Constants
10868ECPubKey.curve = secp256k1
10869
ebd8d4e8 10870// Static constructors
ab78acc6
IC
10871ECPubKey.fromBuffer = function (buffer) {
10872 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10873 return new ECPubKey(Q, Q.compressed)
10874}
10875
ab78acc6 10876ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10877 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10878}
10879
10880// Operations
ab78acc6 10881ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10882 network = network || networks.bitcoin
10883
10884 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10885}
10886
ab78acc6
IC
10887ECPubKey.prototype.verify = function (hash, signature) {
10888 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10889}
10890
10891// Export functions
ab78acc6 10892ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10893 return this.Q.getEncoded(this.compressed)
10894}
10895
ab78acc6 10896ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10897 return this.toBuffer().toString('hex')
10898}
10899
10900module.exports = ECPubKey
10901
ab78acc6
IC
10902}).call(this,require("buffer").Buffer)
10903},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10904(function (Buffer){
ab78acc6
IC
10905var assert = require('assert')
10906var typeForce = require('typeforce')
10907
10908var BigInteger = require('bigi')
10909
10910function ECSignature (r, s) {
10911 typeForce('BigInteger', r)
10912 typeForce('BigInteger', s)
ebd8d4e8 10913
ebd8d4e8
IC
10914 this.r = r
10915 this.s = s
10916}
10917
ab78acc6 10918ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10919 assert.equal(buffer.length, 65, 'Invalid signature length')
10920 var i = buffer.readUInt8(0) - 27
10921
10922 // At most 3 bits
10923 assert.equal(i, i & 7, 'Invalid signature parameter')
10924 var compressed = !!(i & 4)
10925
10926 // Recovery param only
10927 i = i & 3
10928
10929 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10930 var s = BigInteger.fromBuffer(buffer.slice(33))
10931
10932 return {
10933 compressed: compressed,
10934 i: i,
10935 signature: new ECSignature(r, s)
10936 }
10937}
10938
ab78acc6 10939ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10940 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10941 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10942 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10943
10944 var rLen = buffer.readUInt8(3)
10945 assert(rLen > 0, 'R length is zero')
10946
10947 var offset = 4 + rLen
10948 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10949
10950 var sLen = buffer.readUInt8(offset + 1)
10951 assert(sLen > 0, 'S length is zero')
10952
10953 var rB = buffer.slice(4, offset)
10954 var sB = buffer.slice(offset + 2)
10955 offset += 2 + sLen
10956
10957 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10958 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10959 }
10960
10961 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10962 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10963 }
10964
10965 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10966 var r = BigInteger.fromDERInteger(rB)
10967 var s = BigInteger.fromDERInteger(sB)
10968
10969 assert(r.signum() >= 0, 'R value is negative')
10970 assert(s.signum() >= 0, 'S value is negative')
10971
10972 return new ECSignature(r, s)
10973}
10974
ab78acc6
IC
10975// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10976ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
10977 var hashType = buffer.readUInt8(buffer.length - 1)
10978 var hashTypeMod = hashType & ~0x80
10979
ab78acc6 10980 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
10981
10982 return {
10983 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10984 hashType: hashType
10985 }
10986}
10987
ab78acc6
IC
10988ECSignature.prototype.toCompact = function (i, compressed) {
10989 if (compressed) {
10990 i += 4
10991 }
10992
ebd8d4e8
IC
10993 i += 27
10994
10995 var buffer = new Buffer(65)
10996 buffer.writeUInt8(i, 0)
10997
10998 this.r.toBuffer(32).copy(buffer, 1)
10999 this.s.toBuffer(32).copy(buffer, 33)
11000
11001 return buffer
11002}
11003
ab78acc6 11004ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
11005 var rBa = this.r.toDERInteger()
11006 var sBa = this.s.toDERInteger()
11007
11008 var sequence = []
ab78acc6
IC
11009
11010 // INTEGER
11011 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
11012 sequence = sequence.concat(rBa)
11013
ab78acc6
IC
11014 // INTEGER
11015 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
11016 sequence = sequence.concat(sBa)
11017
ab78acc6
IC
11018 // SEQUENCE
11019 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
11020
11021 return new Buffer(sequence)
11022}
11023
ab78acc6
IC
11024ECSignature.prototype.toScriptSignature = function (hashType) {
11025 var hashTypeMod = hashType & ~0x80
11026 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11027
ebd8d4e8
IC
11028 var hashTypeBuffer = new Buffer(1)
11029 hashTypeBuffer.writeUInt8(hashType, 0)
11030
11031 return Buffer.concat([this.toDER(), hashTypeBuffer])
11032}
11033
11034module.exports = ECSignature
11035
ab78acc6
IC
11036}).call(this,require("buffer").Buffer)
11037},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 11038(function (Buffer){
ab78acc6
IC
11039var assert = require('assert')
11040var base58check = require('bs58check')
11041var bcrypto = require('./crypto')
11042var createHmac = require('create-hmac')
11043var typeForce = require('typeforce')
11044var networks = require('./networks')
11045
11046var BigInteger = require('bigi')
11047var ECKey = require('./eckey')
11048var ECPubKey = require('./ecpubkey')
11049
11050var ecurve = require('ecurve')
ebd8d4e8
IC
11051var curve = ecurve.getCurveByName('secp256k1')
11052
ab78acc6 11053function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
11054 for (var name in networks) {
11055 var network = networks[name]
11056
ab78acc6
IC
11057 if (version === network.bip32.private || version === network.bip32.public) {
11058 return network
ebd8d4e8
IC
11059 }
11060 }
11061
ab78acc6 11062 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
11063}
11064
ab78acc6 11065function HDNode (K, chainCode, network) {
ebd8d4e8
IC
11066 network = network || networks.bitcoin
11067
ab78acc6
IC
11068 typeForce('Buffer', chainCode)
11069
11070 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
11071 assert(network.bip32, 'Unknown BIP32 constants for network')
11072
11073 this.chainCode = chainCode
11074 this.depth = 0
11075 this.index = 0
ab78acc6 11076 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
11077 this.network = network
11078
11079 if (K instanceof BigInteger) {
11080 this.privKey = new ECKey(K, true)
11081 this.pubKey = this.privKey.pub
ab78acc6
IC
11082 } else if (K instanceof ECKey) {
11083 assert(K.pub.compressed, 'ECKey must be compressed')
11084 this.privKey = K
11085 this.pubKey = K.pub
11086 } else if (K instanceof ECPubKey) {
11087 assert(K.compressed, 'ECPubKey must be compressed')
11088 this.pubKey = K
ebd8d4e8
IC
11089 } else {
11090 this.pubKey = new ECPubKey(K, true)
11091 }
11092}
11093
11094HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11095HDNode.HIGHEST_BIT = 0x80000000
11096HDNode.LENGTH = 78
11097
ab78acc6
IC
11098HDNode.fromSeedBuffer = function (seed, network) {
11099 typeForce('Buffer', seed)
11100
11101 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11102 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11103
11104 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
11105 var IL = I.slice(0, 32)
11106 var IR = I.slice(32)
11107
11108 // In case IL is 0 or >= n, the master key is invalid
11109 // This is handled by `new ECKey` in the HDNode constructor
11110 var pIL = BigInteger.fromBuffer(IL)
11111
11112 return new HDNode(pIL, IR, network)
11113}
11114
ab78acc6 11115HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
11116 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11117}
11118
ab78acc6
IC
11119HDNode.fromBase58 = function (string, network) {
11120 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
11121}
11122
ab78acc6
IC
11123// FIXME: remove in 2.x.y
11124HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11125 if (!__ignoreDeprecation) {
11126 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11127 }
11128
ebd8d4e8
IC
11129 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11130
11131 // 4 byte: version bytes
11132 var version = buffer.readUInt32BE(0)
ab78acc6
IC
11133
11134 if (network) {
11135 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11136
11137 // auto-detect
11138 } else {
11139 network = findBIP32NetworkByVersion(version)
11140 }
ebd8d4e8
IC
11141
11142 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11143 var depth = buffer.readUInt8(4)
11144
11145 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11146 var parentFingerprint = buffer.readUInt32BE(5)
11147 if (depth === 0) {
11148 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11149 }
11150
11151 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11152 // This is encoded in MSB order. (0x00000000 if master key)
11153 var index = buffer.readUInt32BE(9)
11154 assert(depth > 0 || index === 0, 'Invalid index')
11155
11156 // 32 bytes: the chain code
11157 var chainCode = buffer.slice(13, 45)
ab78acc6 11158 var data, hd
ebd8d4e8
IC
11159
11160 // 33 bytes: private key data (0x00 + k)
ab78acc6 11161 if (version === network.bip32.private) {
ebd8d4e8 11162 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 11163 data = buffer.slice(46, 78)
ebd8d4e8 11164 var d = BigInteger.fromBuffer(data)
ab78acc6 11165 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
11166
11167 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11168 } else {
ab78acc6 11169 data = buffer.slice(45, 78)
ebd8d4e8
IC
11170 var Q = ecurve.Point.decodeFrom(curve, data)
11171 assert.equal(Q.compressed, true, 'Invalid public key')
11172
11173 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11174 // If not, the extended public key is invalid.
11175 curve.validate(Q)
11176
ab78acc6 11177 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
11178 }
11179
11180 hd.depth = depth
11181 hd.index = index
11182 hd.parentFingerprint = parentFingerprint
11183
11184 return hd
11185}
11186
ab78acc6
IC
11187// FIXME: remove in 2.x.y
11188HDNode.fromHex = function (hex, network) {
11189 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
11190}
11191
ab78acc6
IC
11192HDNode.prototype.getIdentifier = function () {
11193 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
11194}
11195
ab78acc6 11196HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
11197 return this.getIdentifier().slice(0, 4)
11198}
11199
ab78acc6 11200HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
11201 return this.pubKey.getAddress(this.network)
11202}
11203
ab78acc6
IC
11204HDNode.prototype.neutered = function () {
11205 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11206 neutered.depth = this.depth
11207 neutered.index = this.index
11208 neutered.parentFingerprint = this.parentFingerprint
11209
11210 return neutered
11211}
11212
11213HDNode.prototype.toBase58 = function (isPrivate) {
11214 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
11215}
11216
ab78acc6
IC
11217// FIXME: remove in 2.x.y
11218HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11219 if (isPrivate === undefined) {
11220 isPrivate = !!this.privKey
11221
11222 // FIXME: remove in 2.x.y
11223 } else {
11224 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11225 }
11226
11227 if (!__ignoreDeprecation) {
11228 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11229 }
ebd8d4e8
IC
11230
11231 // Version
11232 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11233 var buffer = new Buffer(HDNode.LENGTH)
11234
11235 // 4 bytes: version bytes
11236 buffer.writeUInt32BE(version, 0)
11237
11238 // Depth
11239 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11240 buffer.writeUInt8(this.depth, 4)
11241
11242 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11243 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11244
11245 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11246 // This is encoded in Big endian. (0x00000000 if master key)
11247 buffer.writeUInt32BE(this.index, 9)
11248
11249 // 32 bytes: the chain code
11250 this.chainCode.copy(buffer, 13)
11251
11252 // 33 bytes: the public key or private key data
11253 if (isPrivate) {
ab78acc6 11254 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11255 assert(this.privKey, 'Missing private key')
11256
11257 // 0x00 + k for private keys
11258 buffer.writeUInt8(0, 45)
11259 this.privKey.d.toBuffer(32).copy(buffer, 46)
11260 } else {
ebd8d4e8
IC
11261 // X9.62 encoding for public keys
11262 this.pubKey.toBuffer().copy(buffer, 45)
11263 }
11264
11265 return buffer
11266}
11267
ab78acc6
IC
11268// FIXME: remove in 2.x.y
11269HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11270 return this.toBuffer(isPrivate).toString('hex')
11271}
11272
11273// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11274HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11275 var isHardened = index >= HDNode.HIGHEST_BIT
11276 var indexBuffer = new Buffer(4)
11277 indexBuffer.writeUInt32BE(index, 0)
11278
11279 var data
11280
11281 // Hardened child
11282 if (isHardened) {
11283 assert(this.privKey, 'Could not derive hardened child key')
11284
11285 // data = 0x00 || ser256(kpar) || ser32(index)
11286 data = Buffer.concat([
11287 this.privKey.d.toBuffer(33),
11288 indexBuffer
11289 ])
11290
11291 // Normal child
11292 } else {
11293 // data = serP(point(kpar)) || ser32(index)
11294 // = serP(Kpar) || ser32(index)
11295 data = Buffer.concat([
11296 this.pubKey.toBuffer(),
11297 indexBuffer
11298 ])
11299 }
11300
ab78acc6 11301 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11302 var IL = I.slice(0, 32)
11303 var IR = I.slice(32)
11304
11305 var pIL = BigInteger.fromBuffer(IL)
11306
11307 // In case parse256(IL) >= n, proceed with the next value for i
11308 if (pIL.compareTo(curve.n) >= 0) {
11309 return this.derive(index + 1)
11310 }
11311
11312 // Private parent key -> private child key
11313 var hd
11314 if (this.privKey) {
11315 // ki = parse256(IL) + kpar (mod n)
11316 var ki = pIL.add(this.privKey.d).mod(curve.n)
11317
11318 // In case ki == 0, proceed with the next value for i
11319 if (ki.signum() === 0) {
11320 return this.derive(index + 1)
11321 }
11322
11323 hd = new HDNode(ki, IR, this.network)
11324
11325 // Public parent key -> public child key
11326 } else {
11327 // Ki = point(parse256(IL)) + Kpar
11328 // = G*IL + Kpar
11329 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11330
11331 // In case Ki is the point at infinity, proceed with the next value for i
11332 if (curve.isInfinity(Ki)) {
11333 return this.derive(index + 1)
11334 }
11335
11336 hd = new HDNode(Ki, IR, this.network)
11337 }
11338
11339 hd.depth = this.depth + 1
11340 hd.index = index
11341 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11342
11343 return hd
11344}
11345
ab78acc6 11346HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11347 // Only derives hardened private keys by default
11348 return this.derive(index + HDNode.HIGHEST_BIT)
11349}
11350
11351HDNode.prototype.toString = HDNode.prototype.toBase58
11352
11353module.exports = HDNode
11354
ab78acc6
IC
11355}).call(this,require("buffer").Buffer)
11356},{"./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 11357module.exports = {
ab78acc6
IC
11358 Address: require('./address'),
11359 base58check: require('./base58check'),
11360 Block: require('./block'),
11361 bufferutils: require('./bufferutils'),
11362 crypto: require('./crypto'),
11363 ecdsa: require('./ecdsa'),
11364 ECKey: require('./eckey'),
11365 ECPubKey: require('./ecpubkey'),
11366 ECSignature: require('./ecsignature'),
11367 Message: require('./message'),
11368 opcodes: require('./opcodes'),
11369 HDNode: require('./hdnode'),
11370 Script: require('./script'),
11371 scripts: require('./scripts'),
11372 Transaction: require('./transaction'),
11373 TransactionBuilder: require('./transaction_builder'),
11374 networks: require('./networks'),
11375 Wallet: require('./wallet')
11376}
11377
11378},{"./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 11379(function (Buffer){
ab78acc6
IC
11380var bufferutils = require('./bufferutils')
11381var crypto = require('./crypto')
11382var ecdsa = require('./ecdsa')
11383var networks = require('./networks')
11384
11385var BigInteger = require('bigi')
11386var ECPubKey = require('./ecpubkey')
11387var ECSignature = require('./ecsignature')
11388
11389var ecurve = require('ecurve')
ebd8d4e8
IC
11390var ecparams = ecurve.getCurveByName('secp256k1')
11391
ab78acc6 11392function magicHash (message, network) {
ebd8d4e8
IC
11393 var magicPrefix = new Buffer(network.magicPrefix)
11394 var messageBuffer = new Buffer(message)
ab78acc6 11395 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11396
11397 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11398 return crypto.hash256(buffer)
11399}
11400
ab78acc6 11401function sign (privKey, message, network) {
ebd8d4e8
IC
11402 network = network || networks.bitcoin
11403
11404 var hash = magicHash(message, network)
11405 var signature = privKey.sign(hash)
11406 var e = BigInteger.fromBuffer(hash)
11407 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11408
11409 return signature.toCompact(i, privKey.pub.compressed)
11410}
11411
11412// TODO: network could be implied from address
ab78acc6
IC
11413function verify (address, signature, message, network) {
11414 if (!Buffer.isBuffer(signature)) {
11415 signature = new Buffer(signature, 'base64')
ebd8d4e8 11416 }
ab78acc6 11417
ebd8d4e8
IC
11418 network = network || networks.bitcoin
11419
11420 var hash = magicHash(message, network)
ab78acc6 11421 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11422 var e = BigInteger.fromBuffer(hash)
11423 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11424
11425 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11426 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11427}
11428
11429module.exports = {
11430 magicHash: magicHash,
11431 sign: sign,
11432 verify: verify
11433}
11434
ab78acc6
IC
11435}).call(this,require("buffer").Buffer)
11436},{"./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
11437// https://en.bitcoin.it/wiki/List_of_address_prefixes
11438// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11439
11440var networks = {
11441 bitcoin: {
11442 magicPrefix: '\x18Bitcoin Signed Message:\n',
11443 bip32: {
11444 public: 0x0488b21e,
11445 private: 0x0488ade4
11446 },
11447 pubKeyHash: 0x00,
11448 scriptHash: 0x05,
11449 wif: 0x80,
11450 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11451 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11452 estimateFee: estimateFee('bitcoin')
a9385c1b 11453 },
ab78acc6
IC
11454 testnet: {
11455 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11456 bip32: {
ab78acc6
IC
11457 public: 0x043587cf,
11458 private: 0x04358394
a9385c1b 11459 },
ab78acc6
IC
11460 pubKeyHash: 0x6f,
11461 scriptHash: 0xc4,
11462 wif: 0xef,
11463 dustThreshold: 546,
cb325c58 11464 feePerKb: 10000,
ab78acc6 11465 estimateFee: estimateFee('testnet')
a9385c1b 11466 },
ab78acc6
IC
11467 litecoin: {
11468 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11469 bip32: {
ab78acc6
IC
11470 public: 0x019da462,
11471 private: 0x019d9cfe
a9385c1b 11472 },
ab78acc6
IC
11473 pubKeyHash: 0x30,
11474 scriptHash: 0x05,
11475 wif: 0xb0,
11476 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11477 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11478 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11479 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11480 },
11481 dogecoin: {
11482 magicPrefix: '\x19Dogecoin Signed Message:\n',
11483 bip32: {
11484 public: 0x02facafd,
11485 private: 0x02fac398
11486 },
11487 pubKeyHash: 0x1e,
11488 scriptHash: 0x16,
11489 wif: 0x9e,
11490 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11491 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11492 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11493 estimateFee: estimateFee('dogecoin')
11494 },
ab78acc6
IC
11495 viacoin: {
11496 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11497 bip32: {
ab78acc6
IC
11498 public: 0x0488b21e,
11499 private: 0x0488ade4
ebd8d4e8 11500 },
ab78acc6
IC
11501 pubKeyHash: 0x47,
11502 scriptHash: 0x21,
11503 wif: 0xc7,
11504 dustThreshold: 560,
11505 dustSoftThreshold: 100000,
11506 feePerKb: 100000, //
11507 estimateFee: estimateFee('viacoin')
ebd8d4e8 11508 },
ab78acc6
IC
11509 viacointestnet: {
11510 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11511 bip32: {
11512 public: 0x043587cf,
11513 private: 0x04358394
11514 },
ab78acc6 11515 pubKeyHash: 0x7f,
ebd8d4e8 11516 scriptHash: 0xc4,
ab78acc6
IC
11517 wif: 0xff,
11518 dustThreshold: 560,
11519 dustSoftThreshold: 100000,
11520 feePerKb: 100000,
11521 estimateFee: estimateFee('viacointestnet')
11522 },
11523 gamerscoin: {
11524 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11525 bip32: {
11526 public: 0x019da462,
11527 private: 0x019d9cfe
11528 },
11529 pubKeyHash: 0x26,
11530 scriptHash: 0x05,
11531 wif: 0xA6,
11532 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11533 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11534 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11535 estimateFee: estimateFee('gamerscoin')
11536 },
11537 jumbucks: {
11538 magicPrefix: '\x19Jumbucks Signed Message:\n',
11539 bip32: {
11540 public: 0x037a689a,
11541 private: 0x037a6460
11542 },
11543 pubKeyHash: 0x2b,
11544 scriptHash: 0x05,
11545 wif: 0xab,
11546 dustThreshold: 0,
11547 dustSoftThreshold: 10000,
ebd8d4e8 11548 feePerKb: 10000,
ab78acc6
IC
11549 estimateFee: estimateFee('jumbucks')
11550 },
11551 zetacoin: {
11552 magicPrefix: '\x18Zetacoin Signed Message:\n',
11553 bip32: {
11554 public: 0x0488b21e,
11555 private: 0x0488ade4
11556 },
11557 pubKeyHash: 0x50,
11558 scriptHash: 0x09,
11559 wif: 0xe0,
11560 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11561 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11562 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11563 }
11564}
11565
ab78acc6
IC
11566function estimateFee (type) {
11567 return function (tx) {
ebd8d4e8
IC
11568 var network = networks[type]
11569 var baseFee = network.feePerKb
11570 var byteSize = tx.toBuffer().length
11571
11572 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11573 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11574
ab78acc6 11575 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11576 if (e.value < network.dustSoftThreshold) {
11577 fee += baseFee
11578 }
11579 })
11580
11581 return fee
11582 }
11583}
11584
11585module.exports = networks
11586
ab78acc6 11587},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11588module.exports = {
11589 // push value
ab78acc6
IC
11590 OP_FALSE: 0,
11591 OP_0: 0,
11592 OP_PUSHDATA1: 76,
11593 OP_PUSHDATA2: 77,
11594 OP_PUSHDATA4: 78,
11595 OP_1NEGATE: 79,
11596 OP_RESERVED: 80,
11597 OP_1: 81,
11598 OP_TRUE: 81,
11599 OP_2: 82,
11600 OP_3: 83,
11601 OP_4: 84,
11602 OP_5: 85,
11603 OP_6: 86,
11604 OP_7: 87,
11605 OP_8: 88,
11606 OP_9: 89,
11607 OP_10: 90,
11608 OP_11: 91,
11609 OP_12: 92,
11610 OP_13: 93,
11611 OP_14: 94,
11612 OP_15: 95,
11613 OP_16: 96,
ebd8d4e8
IC
11614
11615 // control
ab78acc6
IC
11616 OP_NOP: 97,
11617 OP_VER: 98,
11618 OP_IF: 99,
11619 OP_NOTIF: 100,
11620 OP_VERIF: 101,
11621 OP_VERNOTIF: 102,
11622 OP_ELSE: 103,
11623 OP_ENDIF: 104,
11624 OP_VERIFY: 105,
11625 OP_RETURN: 106,
ebd8d4e8
IC
11626
11627 // stack ops
ab78acc6
IC
11628 OP_TOALTSTACK: 107,
11629 OP_FROMALTSTACK: 108,
11630 OP_2DROP: 109,
11631 OP_2DUP: 110,
11632 OP_3DUP: 111,
11633 OP_2OVER: 112,
11634 OP_2ROT: 113,
11635 OP_2SWAP: 114,
11636 OP_IFDUP: 115,
11637 OP_DEPTH: 116,
11638 OP_DROP: 117,
11639 OP_DUP: 118,
11640 OP_NIP: 119,
11641 OP_OVER: 120,
11642 OP_PICK: 121,
11643 OP_ROLL: 122,
11644 OP_ROT: 123,
11645 OP_SWAP: 124,
11646 OP_TUCK: 125,
ebd8d4e8
IC
11647
11648 // splice ops
ab78acc6
IC
11649 OP_CAT: 126,
11650 OP_SUBSTR: 127,
11651 OP_LEFT: 128,
11652 OP_RIGHT: 129,
11653 OP_SIZE: 130,
ebd8d4e8
IC
11654
11655 // bit logic
ab78acc6
IC
11656 OP_INVERT: 131,
11657 OP_AND: 132,
11658 OP_OR: 133,
11659 OP_XOR: 134,
11660 OP_EQUAL: 135,
11661 OP_EQUALVERIFY: 136,
11662 OP_RESERVED1: 137,
11663 OP_RESERVED2: 138,
ebd8d4e8
IC
11664
11665 // numeric
ab78acc6
IC
11666 OP_1ADD: 139,
11667 OP_1SUB: 140,
11668 OP_2MUL: 141,
11669 OP_2DIV: 142,
11670 OP_NEGATE: 143,
11671 OP_ABS: 144,
11672 OP_NOT: 145,
11673 OP_0NOTEQUAL: 146,
11674
11675 OP_ADD: 147,
11676 OP_SUB: 148,
11677 OP_MUL: 149,
11678 OP_DIV: 150,
11679 OP_MOD: 151,
11680 OP_LSHIFT: 152,
11681 OP_RSHIFT: 153,
11682
11683 OP_BOOLAND: 154,
11684 OP_BOOLOR: 155,
11685 OP_NUMEQUAL: 156,
11686 OP_NUMEQUALVERIFY: 157,
11687 OP_NUMNOTEQUAL: 158,
11688 OP_LESSTHAN: 159,
11689 OP_GREATERTHAN: 160,
11690 OP_LESSTHANOREQUAL: 161,
11691 OP_GREATERTHANOREQUAL: 162,
11692 OP_MIN: 163,
11693 OP_MAX: 164,
11694
11695 OP_WITHIN: 165,
ebd8d4e8
IC
11696
11697 // crypto
ab78acc6
IC
11698 OP_RIPEMD160: 166,
11699 OP_SHA1: 167,
11700 OP_SHA256: 168,
11701 OP_HASH160: 169,
11702 OP_HASH256: 170,
11703 OP_CODESEPARATOR: 171,
11704 OP_CHECKSIG: 172,
11705 OP_CHECKSIGVERIFY: 173,
11706 OP_CHECKMULTISIG: 174,
11707 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11708
11709 // expansion
ab78acc6
IC
11710 OP_NOP1: 176,
11711 OP_NOP2: 177,
11712 OP_NOP3: 178,
11713 OP_NOP4: 179,
11714 OP_NOP5: 180,
11715 OP_NOP6: 181,
11716 OP_NOP7: 182,
11717 OP_NOP8: 183,
11718 OP_NOP9: 184,
11719 OP_NOP10: 185,
ebd8d4e8
IC
11720
11721 // template matching params
ab78acc6
IC
11722 OP_PUBKEYHASH: 253,
11723 OP_PUBKEY: 254,
11724 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11725}
11726
ab78acc6 11727},{}],68:[function(require,module,exports){
ebd8d4e8 11728(function (Buffer){
ab78acc6
IC
11729var assert = require('assert')
11730var bufferutils = require('./bufferutils')
11731var crypto = require('./crypto')
11732var typeForce = require('typeforce')
11733var opcodes = require('./opcodes')
ebd8d4e8 11734
ab78acc6
IC
11735function Script (buffer, chunks) {
11736 typeForce('Buffer', buffer)
11737 typeForce('Array', chunks)
ebd8d4e8
IC
11738
11739 this.buffer = buffer
11740 this.chunks = chunks
11741}
11742
ab78acc6 11743Script.fromASM = function (asm) {
ebd8d4e8 11744 var strChunks = asm.split(' ')
ab78acc6
IC
11745 var chunks = strChunks.map(function (strChunk) {
11746 // opcode
ebd8d4e8
IC
11747 if (strChunk in opcodes) {
11748 return opcodes[strChunk]
11749
ab78acc6 11750 // data chunk
ebd8d4e8
IC
11751 } else {
11752 return new Buffer(strChunk, 'hex')
11753 }
11754 })
11755
11756 return Script.fromChunks(chunks)
11757}
11758
ab78acc6 11759Script.fromBuffer = function (buffer) {
ebd8d4e8 11760 var chunks = []
ebd8d4e8
IC
11761 var i = 0
11762
11763 while (i < buffer.length) {
11764 var opcode = buffer.readUInt8(i)
11765
ab78acc6 11766 // data chunk
ebd8d4e8
IC
11767 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11768 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11769
11770 // did reading a pushDataInt fail? return non-chunked script
11771 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11772 i += d.size
11773
ab78acc6
IC
11774 // attempt to read too much data?
11775 if (i + d.number > buffer.length) return new Script(buffer, [])
11776
ebd8d4e8
IC
11777 var data = buffer.slice(i, i + d.number)
11778 i += d.number
11779
11780 chunks.push(data)
11781
ab78acc6 11782 // opcode
ebd8d4e8
IC
11783 } else {
11784 chunks.push(opcode)
11785
11786 i += 1
11787 }
11788 }
11789
11790 return new Script(buffer, chunks)
11791}
11792
ab78acc6
IC
11793Script.fromChunks = function (chunks) {
11794 typeForce('Array', chunks)
ebd8d4e8 11795
ab78acc6
IC
11796 var bufferSize = chunks.reduce(function (accum, chunk) {
11797 // data chunk
ebd8d4e8
IC
11798 if (Buffer.isBuffer(chunk)) {
11799 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11800 }
11801
ab78acc6 11802 // opcode
ebd8d4e8
IC
11803 return accum + 1
11804 }, 0.0)
11805
11806 var buffer = new Buffer(bufferSize)
11807 var offset = 0
11808
ab78acc6
IC
11809 chunks.forEach(function (chunk) {
11810 // data chunk
ebd8d4e8
IC
11811 if (Buffer.isBuffer(chunk)) {
11812 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11813
11814 chunk.copy(buffer, offset)
11815 offset += chunk.length
11816
ab78acc6 11817 // opcode
ebd8d4e8
IC
11818 } else {
11819 buffer.writeUInt8(chunk, offset)
11820 offset += 1
11821 }
11822 })
11823
11824 assert.equal(offset, buffer.length, 'Could not decode chunks')
11825 return new Script(buffer, chunks)
11826}
11827
ab78acc6 11828Script.fromHex = function (hex) {
ebd8d4e8
IC
11829 return Script.fromBuffer(new Buffer(hex, 'hex'))
11830}
11831
ebd8d4e8
IC
11832Script.EMPTY = Script.fromChunks([])
11833
ab78acc6 11834Script.prototype.getHash = function () {
ebd8d4e8
IC
11835 return crypto.hash160(this.buffer)
11836}
11837
11838// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11839Script.prototype.without = function (needle) {
11840 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11841 return op !== needle
11842 }))
11843}
11844
ebd8d4e8
IC
11845var reverseOps = []
11846for (var op in opcodes) {
11847 var code = opcodes[op]
11848 reverseOps[code] = op
11849}
11850
ab78acc6
IC
11851Script.prototype.toASM = function () {
11852 return this.chunks.map(function (chunk) {
11853 // data chunk
ebd8d4e8
IC
11854 if (Buffer.isBuffer(chunk)) {
11855 return chunk.toString('hex')
11856
ab78acc6 11857 // opcode
ebd8d4e8
IC
11858 } else {
11859 return reverseOps[chunk]
11860 }
11861 }).join(' ')
11862}
11863
ab78acc6 11864Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11865 return this.buffer
11866}
11867
ab78acc6 11868Script.prototype.toHex = function () {
ebd8d4e8
IC
11869 return this.toBuffer().toString('hex')
11870}
11871
11872module.exports = Script
11873
ab78acc6
IC
11874}).call(this,require("buffer").Buffer)
11875},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11876(function (Buffer){
ab78acc6
IC
11877var assert = require('assert')
11878var ops = require('./opcodes')
11879var typeForce = require('typeforce')
ebd8d4e8 11880
ab78acc6 11881var ecurve = require('ecurve')
ebd8d4e8
IC
11882var curve = ecurve.getCurveByName('secp256k1')
11883
ab78acc6
IC
11884var ECSignature = require('./ecsignature')
11885var Script = require('./script')
ebd8d4e8 11886
ab78acc6 11887function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11888 if (!Buffer.isBuffer(buffer)) return false
11889
11890 try {
ebd8d4e8
IC
11891 ecurve.Point.decodeFrom(curve, buffer)
11892 } catch (e) {
ab78acc6
IC
11893 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11894 throw e
ebd8d4e8
IC
11895
11896 return false
11897 }
11898
11899 return true
11900}
11901
ab78acc6 11902function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11903 if (!Buffer.isBuffer(buffer)) return false
11904
11905 try {
11906 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11907 } catch (e) {
11908 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/))) {
11909 throw e
11910 }
ebd8d4e8
IC
11911
11912 return false
11913 }
11914
11915 return true
11916}
11917
ab78acc6
IC
11918function isPubKeyHashInput (script) {
11919 return script.chunks.length === 2 &&
11920 isCanonicalSignature(script.chunks[0]) &&
11921 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11922}
11923
ab78acc6
IC
11924function isPubKeyHashOutput (script) {
11925 return script.chunks.length === 5 &&
11926 script.chunks[0] === ops.OP_DUP &&
11927 script.chunks[1] === ops.OP_HASH160 &&
11928 Buffer.isBuffer(script.chunks[2]) &&
11929 script.chunks[2].length === 20 &&
11930 script.chunks[3] === ops.OP_EQUALVERIFY &&
11931 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11932}
11933
ab78acc6
IC
11934function isPubKeyInput (script) {
11935 return script.chunks.length === 1 &&
11936 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11937}
11938
ab78acc6
IC
11939function isPubKeyOutput (script) {
11940 return script.chunks.length === 2 &&
11941 isCanonicalPubKey(script.chunks[0]) &&
11942 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11943}
11944
ab78acc6
IC
11945function isScriptHashInput (script, allowIncomplete) {
11946 if (script.chunks.length < 2) return false
ebd8d4e8 11947
ab78acc6 11948 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11949 if (!Buffer.isBuffer(lastChunk)) return false
11950
ab78acc6
IC
11951 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11952 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11953
ab78acc6
IC
11954 // is redeemScript a valid script?
11955 if (redeemScript.chunks.length === 0) return false
11956
11957 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11958}
11959
ab78acc6
IC
11960function isScriptHashOutput (script) {
11961 return script.chunks.length === 3 &&
11962 script.chunks[0] === ops.OP_HASH160 &&
11963 Buffer.isBuffer(script.chunks[1]) &&
11964 script.chunks[1].length === 20 &&
11965 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11966}
11967
ab78acc6
IC
11968// allowIncomplete is to account for combining signatures
11969// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11970function isMultisigInput (script, allowIncomplete) {
11971 if (script.chunks.length < 2) return false
11972 if (script.chunks[0] !== ops.OP_0) return false
11973
11974 if (allowIncomplete) {
11975 return script.chunks.slice(1).every(function (chunk) {
11976 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11977 })
11978 }
11979
11980 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
11981}
11982
ab78acc6
IC
11983function isMultisigOutput (script) {
11984 if (script.chunks.length < 4) return false
11985 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 11986
ab78acc6
IC
11987 var mOp = script.chunks[0]
11988 if (mOp === ops.OP_0) return false
11989 if (mOp < ops.OP_1) return false
11990 if (mOp > ops.OP_16) return false
ebd8d4e8 11991
ab78acc6
IC
11992 var nOp = script.chunks[script.chunks.length - 2]
11993 if (nOp === ops.OP_0) return false
11994 if (nOp < ops.OP_1) return false
11995 if (nOp > ops.OP_16) return false
ebd8d4e8 11996
ab78acc6
IC
11997 var m = mOp - (ops.OP_1 - 1)
11998 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
11999 if (n < m) return false
12000
ab78acc6 12001 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
12002 if (n < pubKeys.length) return false
12003
12004 return pubKeys.every(isCanonicalPubKey)
12005}
12006
ab78acc6
IC
12007function isNullDataOutput (script) {
12008 return script.chunks[0] === ops.OP_RETURN
12009}
12010
12011function classifyOutput (script) {
12012 typeForce('Script', script)
12013
12014 if (isPubKeyHashOutput(script)) {
12015 return 'pubkeyhash'
12016 } else if (isScriptHashOutput(script)) {
12017 return 'scripthash'
12018 } else if (isMultisigOutput(script)) {
12019 return 'multisig'
12020 } else if (isPubKeyOutput(script)) {
12021 return 'pubkey'
12022 } else if (isNullDataOutput(script)) {
12023 return 'nulldata'
12024 }
12025
12026 return 'nonstandard'
12027}
12028
12029function classifyInput (script, allowIncomplete) {
12030 typeForce('Script', script)
12031
12032 if (isPubKeyHashInput(script)) {
12033 return 'pubkeyhash'
12034 } else if (isMultisigInput(script, allowIncomplete)) {
12035 return 'multisig'
12036 } else if (isScriptHashInput(script, allowIncomplete)) {
12037 return 'scripthash'
12038 } else if (isPubKeyInput(script)) {
12039 return 'pubkey'
12040 }
12041
12042 return 'nonstandard'
ebd8d4e8
IC
12043}
12044
12045// Standard Script Templates
12046// {pubKey} OP_CHECKSIG
ab78acc6 12047function pubKeyOutput (pubKey) {
ebd8d4e8
IC
12048 return Script.fromChunks([
12049 pubKey.toBuffer(),
ab78acc6 12050 ops.OP_CHECKSIG
ebd8d4e8
IC
12051 ])
12052}
12053
12054// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
12055function pubKeyHashOutput (hash) {
12056 typeForce('Buffer', hash)
ebd8d4e8
IC
12057
12058 return Script.fromChunks([
ab78acc6
IC
12059 ops.OP_DUP,
12060 ops.OP_HASH160,
ebd8d4e8 12061 hash,
ab78acc6
IC
12062 ops.OP_EQUALVERIFY,
12063 ops.OP_CHECKSIG
ebd8d4e8
IC
12064 ])
12065}
12066
12067// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
12068function scriptHashOutput (hash) {
12069 typeForce('Buffer', hash)
ebd8d4e8
IC
12070
12071 return Script.fromChunks([
ab78acc6 12072 ops.OP_HASH160,
ebd8d4e8 12073 hash,
ab78acc6 12074 ops.OP_EQUAL
ebd8d4e8
IC
12075 ])
12076}
12077
12078// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
12079function multisigOutput (m, pubKeys) {
12080 typeForce(['ECPubKey'], pubKeys)
12081
ebd8d4e8
IC
12082 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12083
ab78acc6 12084 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
12085 return pubKey.toBuffer()
12086 })
12087 var n = pubKeys.length
12088
12089 return Script.fromChunks([].concat(
ab78acc6 12090 (ops.OP_1 - 1) + m,
ebd8d4e8 12091 pubKeyBuffers,
ab78acc6
IC
12092 (ops.OP_1 - 1) + n,
12093 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
12094 ))
12095}
12096
12097// {signature}
ab78acc6
IC
12098function pubKeyInput (signature) {
12099 typeForce('Buffer', signature)
ebd8d4e8
IC
12100
12101 return Script.fromChunks([signature])
12102}
12103
12104// {signature} {pubKey}
ab78acc6
IC
12105function pubKeyHashInput (signature, pubKey) {
12106 typeForce('Buffer', signature)
ebd8d4e8
IC
12107
12108 return Script.fromChunks([signature, pubKey.toBuffer()])
12109}
12110
12111// <scriptSig> {serialized scriptPubKey script}
ab78acc6 12112function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
12113 return Script.fromChunks([].concat(
12114 scriptSig.chunks,
12115 scriptPubKey.toBuffer()
12116 ))
12117}
12118
12119// OP_0 [signatures ...]
ab78acc6 12120function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 12121 if (scriptPubKey) {
ab78acc6
IC
12122 assert(isMultisigOutput(scriptPubKey))
12123
12124 var mOp = scriptPubKey.chunks[0]
12125 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12126 var m = mOp - (ops.OP_1 - 1)
12127 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 12128
ab78acc6
IC
12129 assert(signatures.length >= m, 'Not enough signatures provided')
12130 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
12131 }
12132
ab78acc6
IC
12133 return Script.fromChunks([].concat(ops.OP_0, signatures))
12134}
12135
12136function nullDataOutput (data) {
12137 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
12138}
12139
12140module.exports = {
ab78acc6
IC
12141 isCanonicalPubKey: isCanonicalPubKey,
12142 isCanonicalSignature: isCanonicalSignature,
12143 isPubKeyHashInput: isPubKeyHashInput,
12144 isPubKeyHashOutput: isPubKeyHashOutput,
12145 isPubKeyInput: isPubKeyInput,
12146 isPubKeyOutput: isPubKeyOutput,
12147 isScriptHashInput: isScriptHashInput,
12148 isScriptHashOutput: isScriptHashOutput,
12149 isMultisigInput: isMultisigInput,
12150 isMultisigOutput: isMultisigOutput,
12151 isNullDataOutput: isNullDataOutput,
ebd8d4e8 12152 classifyOutput: classifyOutput,
ab78acc6
IC
12153 classifyInput: classifyInput,
12154 pubKeyOutput: pubKeyOutput,
ebd8d4e8 12155 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
12156 scriptHashOutput: scriptHashOutput,
12157 multisigOutput: multisigOutput,
ebd8d4e8 12158 pubKeyInput: pubKeyInput,
ab78acc6 12159 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 12160 scriptHashInput: scriptHashInput,
ab78acc6
IC
12161 multisigInput: multisigInput,
12162 dataOutput: function (data) {
12163 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12164 return nullDataOutput(data)
12165 },
12166 nullDataOutput: nullDataOutput
ebd8d4e8
IC
12167}
12168
ab78acc6
IC
12169}).call(this,require("buffer").Buffer)
12170},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 12171(function (Buffer){
ab78acc6
IC
12172var assert = require('assert')
12173var bufferutils = require('./bufferutils')
12174var crypto = require('./crypto')
12175var typeForce = require('typeforce')
12176var opcodes = require('./opcodes')
12177var scripts = require('./scripts')
12178
12179var Address = require('./address')
12180var ECSignature = require('./ecsignature')
12181var Script = require('./script')
12182
12183function Transaction () {
12184 this.version = 1
12185 this.locktime = 0
12186 this.ins = []
12187 this.outs = []
12188}
ebd8d4e8
IC
12189
12190Transaction.DEFAULT_SEQUENCE = 0xffffffff
12191Transaction.SIGHASH_ALL = 0x01
12192Transaction.SIGHASH_NONE = 0x02
12193Transaction.SIGHASH_SINGLE = 0x03
12194Transaction.SIGHASH_ANYONECANPAY = 0x80
12195
ab78acc6
IC
12196Transaction.fromBuffer = function (buffer, __disableAssert) {
12197 var offset = 0
12198 function readSlice (n) {
12199 offset += n
12200 return buffer.slice(offset - n, offset)
12201 }
12202
12203 function readUInt32 () {
12204 var i = buffer.readUInt32LE(offset)
12205 offset += 4
12206 return i
12207 }
12208
12209 function readUInt64 () {
12210 var i = bufferutils.readUInt64LE(buffer, offset)
12211 offset += 8
12212 return i
12213 }
12214
12215 function readVarInt () {
12216 var vi = bufferutils.readVarInt(buffer, offset)
12217 offset += vi.size
12218 return vi.number
12219 }
12220
12221 function readScript () {
12222 return Script.fromBuffer(readSlice(readVarInt()))
12223 }
12224
12225 function readGenerationScript () {
12226 return new Script(readSlice(readVarInt()), [])
12227 }
12228
12229 var tx = new Transaction()
12230 tx.version = readUInt32()
12231
12232 var vinLen = readVarInt()
12233 for (var i = 0; i < vinLen; ++i) {
12234 var hash = readSlice(32)
12235
12236 if (Transaction.isCoinbaseHash(hash)) {
12237 tx.ins.push({
12238 hash: hash,
12239 index: readUInt32(),
12240 script: readGenerationScript(),
12241 sequence: readUInt32()
12242 })
12243 } else {
12244 tx.ins.push({
12245 hash: hash,
12246 index: readUInt32(),
12247 script: readScript(),
12248 sequence: readUInt32()
12249 })
12250 }
12251 }
12252
12253 var voutLen = readVarInt()
12254 for (i = 0; i < voutLen; ++i) {
12255 tx.outs.push({
12256 value: readUInt64(),
12257 script: readScript()
12258 })
12259 }
12260
12261 tx.locktime = readUInt32()
12262
12263 if (!__disableAssert) {
12264 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12265 }
12266
12267 return tx
12268}
12269
12270Transaction.fromHex = function (hex) {
12271 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12272}
12273
12274Transaction.isCoinbaseHash = function (buffer) {
12275 return Array.prototype.every.call(buffer, function (x) {
12276 return x === 0
12277 })
ebd8d4e8
IC
12278}
12279
12280/**
ab78acc6 12281 * Create a new txIn.
ebd8d4e8
IC
12282 *
12283 * Can be called with any of:
12284 *
12285 * - A transaction and an index
12286 * - A transaction hash and an index
12287 *
12288 * Note that this method does not sign the created input.
12289 */
ab78acc6
IC
12290Transaction.prototype.addInput = function (hash, index, sequence, script) {
12291 if (sequence === undefined || sequence === null) {
12292 sequence = Transaction.DEFAULT_SEQUENCE
12293 }
ebd8d4e8 12294
ab78acc6 12295 script = script || Script.EMPTY
ebd8d4e8 12296
ab78acc6 12297 if (typeof hash === 'string') {
ebd8d4e8 12298 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12299 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12300 } else if (hash instanceof Transaction) {
12301 hash = hash.getHash()
ebd8d4e8
IC
12302 }
12303
ab78acc6
IC
12304 typeForce('Buffer', hash)
12305 typeForce('Number', index)
12306 typeForce('Number', sequence)
12307 typeForce('Script', script)
12308
ebd8d4e8 12309 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12310
ab78acc6 12311 // Add the input and return the input's index
ebd8d4e8
IC
12312 return (this.ins.push({
12313 hash: hash,
12314 index: index,
ab78acc6 12315 script: script,
ebd8d4e8
IC
12316 sequence: sequence
12317 }) - 1)
12318}
12319
12320/**
ab78acc6 12321 * Create a new txOut.
ebd8d4e8
IC
12322 *
12323 * Can be called with:
12324 *
12325 * - A base58 address string and a value
12326 * - An Address object and a value
12327 * - A scriptPubKey Script and a value
12328 */
ab78acc6 12329Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12330 // Attempt to get a valid address if it's a base58 address string
12331 if (typeof scriptPubKey === 'string') {
12332 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12333 }
12334
12335 // Attempt to get a valid script if it's an Address object
12336 if (scriptPubKey instanceof Address) {
ab78acc6 12337 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12338 }
12339
ab78acc6
IC
12340 typeForce('Script', scriptPubKey)
12341 typeForce('Number', value)
12342
12343 // Add the output and return the output's index
ebd8d4e8
IC
12344 return (this.outs.push({
12345 script: scriptPubKey,
ab78acc6 12346 value: value
ebd8d4e8
IC
12347 }) - 1)
12348}
12349
ab78acc6
IC
12350Transaction.prototype.clone = function () {
12351 var newTx = new Transaction()
12352 newTx.version = this.version
12353 newTx.locktime = this.locktime
12354
12355 newTx.ins = this.ins.map(function (txIn) {
12356 return {
12357 hash: txIn.hash,
12358 index: txIn.index,
12359 script: txIn.script,
12360 sequence: txIn.sequence
12361 }
12362 })
12363
12364 newTx.outs = this.outs.map(function (txOut) {
12365 return {
12366 script: txOut.script,
12367 value: txOut.value
12368 }
12369 })
12370
12371 return newTx
12372}
12373
12374/**
12375 * Hash transaction for signing a specific input.
12376 *
12377 * Bitcoin uses a different hash for each signed transaction input. This
12378 * method copies the transaction, makes the necessary changes based on the
12379 * hashType, serializes and finally hashes the result. This hash can then be
12380 * used to sign the transaction input in question.
12381 */
12382Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12383 // FIXME: remove in 2.x.y
12384 if (arguments[0] instanceof Script) {
12385 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12386
12387 // swap the arguments (must be stored in tmp, arguments is special)
12388 var tmp = arguments[0]
12389 inIndex = arguments[1]
12390 prevOutScript = tmp
12391 }
12392
12393 typeForce('Number', inIndex)
12394 typeForce('Script', prevOutScript)
12395 typeForce('Number', hashType)
12396
12397 assert(inIndex >= 0, 'Invalid vin index')
12398 assert(inIndex < this.ins.length, 'Invalid vin index')
12399
12400 var txTmp = this.clone()
12401 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12402
12403 // Blank out other inputs' signatures
12404 txTmp.ins.forEach(function (txIn) {
12405 txIn.script = Script.EMPTY
12406 })
12407 txTmp.ins[inIndex].script = hashScript
12408
12409 var hashTypeModifier = hashType & 0x1f
12410
12411 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12412 assert(false, 'SIGHASH_NONE not yet supported')
12413 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12414 assert(false, 'SIGHASH_SINGLE not yet supported')
12415 }
12416
12417 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12418 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12419 }
12420
12421 var hashTypeBuffer = new Buffer(4)
12422 hashTypeBuffer.writeInt32LE(hashType, 0)
12423
12424 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12425 return crypto.hash256(buffer)
12426}
12427
12428Transaction.prototype.getHash = function () {
12429 return crypto.hash256(this.toBuffer())
12430}
12431
12432Transaction.prototype.getId = function () {
12433 // TxHash is little-endian, we need big-endian
12434 return bufferutils.reverse(this.getHash()).toString('hex')
12435}
12436
ebd8d4e8 12437Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12438 function scriptSize (script) {
12439 var length = script.buffer.length
ebd8d4e8 12440
ab78acc6
IC
12441 return bufferutils.varIntSize(length) + length
12442 }
ebd8d4e8
IC
12443
12444 var buffer = new Buffer(
12445 8 +
12446 bufferutils.varIntSize(this.ins.length) +
12447 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12448 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12449 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12450 )
12451
12452 var offset = 0
ab78acc6 12453 function writeSlice (slice) {
ebd8d4e8
IC
12454 slice.copy(buffer, offset)
12455 offset += slice.length
12456 }
ab78acc6
IC
12457
12458 function writeUInt32 (i) {
ebd8d4e8
IC
12459 buffer.writeUInt32LE(i, offset)
12460 offset += 4
12461 }
ab78acc6
IC
12462
12463 function writeUInt64 (i) {
ebd8d4e8
IC
12464 bufferutils.writeUInt64LE(buffer, i, offset)
12465 offset += 8
12466 }
ab78acc6
IC
12467
12468 function writeVarInt (i) {
ebd8d4e8
IC
12469 var n = bufferutils.writeVarInt(buffer, i, offset)
12470 offset += n
12471 }
12472
12473 writeUInt32(this.version)
12474 writeVarInt(this.ins.length)
12475
ab78acc6
IC
12476 this.ins.forEach(function (txIn) {
12477 writeSlice(txIn.hash)
12478 writeUInt32(txIn.index)
12479 writeVarInt(txIn.script.buffer.length)
12480 writeSlice(txIn.script.buffer)
12481 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12482 })
12483
12484 writeVarInt(this.outs.length)
ab78acc6
IC
12485 this.outs.forEach(function (txOut) {
12486 writeUInt64(txOut.value)
12487 writeVarInt(txOut.script.buffer.length)
12488 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12489 })
12490
12491 writeUInt32(this.locktime)
12492
12493 return buffer
12494}
12495
ab78acc6 12496Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12497 return this.toBuffer().toString('hex')
12498}
12499
ab78acc6
IC
12500Transaction.prototype.setInputScript = function (index, script) {
12501 typeForce('Number', index)
12502 typeForce('Script', script)
12503
12504 this.ins[index].script = script
12505}
12506
12507// FIXME: remove in 2.x.y
12508Transaction.prototype.sign = function (index, privKey, hashType) {
12509 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12510
12511 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12512 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12513
12514 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12515 this.setInputScript(index, scriptSig)
12516}
12517
12518// FIXME: remove in 2.x.y
12519Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12520 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12521
12522 hashType = hashType || Transaction.SIGHASH_ALL
12523
12524 var hash = this.hashForSignature(index, prevOutScript, hashType)
12525 var signature = privKey.sign(hash)
12526
12527 return signature.toScriptSignature(hashType)
12528}
12529
12530// FIXME: remove in 2.x.y
12531Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12532 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12533
12534 var parsed = ECSignature.parseScriptSignature(buffer)
12535 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12536
12537 return pubKey.verify(hash, parsed.signature)
12538}
12539
12540module.exports = Transaction
12541
12542}).call(this,require("buffer").Buffer)
12543},{"./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){
12544(function (Buffer){
12545var assert = require('assert')
12546var ops = require('./opcodes')
12547var scripts = require('./scripts')
12548
12549var ECPubKey = require('./ecpubkey')
12550var ECSignature = require('./ecsignature')
12551var Script = require('./script')
12552var Transaction = require('./transaction')
12553
12554function extractInput (txIn) {
12555 var redeemScript
12556 var scriptSig = txIn.script
12557 var prevOutScript
12558 var prevOutType = scripts.classifyInput(scriptSig, true)
12559 var scriptType
12560
12561 // Re-classify if scriptHash
12562 if (prevOutType === 'scripthash') {
12563 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12564 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12565
12566 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12567 scriptType = scripts.classifyInput(scriptSig, true)
12568 } else {
12569 scriptType = prevOutType
12570 }
12571
12572 // Extract hashType, pubKeys and signatures
12573 var hashType, parsed, pubKeys, signatures
12574
12575 switch (scriptType) {
12576 case 'pubkeyhash': {
12577 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12578 hashType = parsed.hashType
12579 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12580 signatures = [parsed.signature]
12581 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12582
12583 break
12584 }
12585
12586 case 'pubkey': {
12587 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12588 hashType = parsed.hashType
12589 signatures = [parsed.signature]
12590
12591 if (redeemScript) {
12592 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12593 }
12594
12595 break
12596 }
12597
12598 case 'multisig': {
12599 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12600 if (chunk === ops.OP_0) return chunk
12601
12602 var parsed = ECSignature.parseScriptSignature(chunk)
12603 hashType = parsed.hashType
12604
12605 return parsed.signature
12606 })
12607
12608 if (redeemScript) {
12609 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12610 }
12611
12612 break
12613 }
12614 }
12615
12616 return {
12617 hashType: hashType,
12618 prevOutScript: prevOutScript,
12619 prevOutType: prevOutType,
12620 pubKeys: pubKeys,
12621 redeemScript: redeemScript,
12622 scriptType: scriptType,
12623 signatures: signatures
12624 }
12625}
12626
12627function TransactionBuilder () {
12628 this.prevTxMap = {}
12629 this.prevOutScripts = {}
12630 this.prevOutTypes = {}
12631
12632 this.inputs = []
12633 this.tx = new Transaction()
12634}
12635
12636TransactionBuilder.fromTransaction = function (transaction) {
12637 var txb = new TransactionBuilder()
12638
12639 // Copy other transaction fields
12640 txb.tx.version = transaction.version
12641 txb.tx.locktime = transaction.locktime
12642
12643 // Extract/add inputs
12644 transaction.ins.forEach(function (txIn) {
12645 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12646 })
12647
12648 // Extract/add outputs
12649 transaction.outs.forEach(function (txOut) {
12650 txb.addOutput(txOut.script, txOut.value)
12651 })
12652
12653 // Extract/add signatures
12654 txb.inputs = transaction.ins.map(function (txIn) {
12655 // TODO: remove me after testcase added
12656 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12657
12658 // Ignore empty scripts
12659 if (txIn.script.buffer.length === 0) return {}
12660
12661 return extractInput(txIn)
12662 })
12663
12664 return txb
12665}
12666
12667TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12668 var prevOutHash
12669
12670 // txId
12671 if (typeof prevTx === 'string') {
12672 prevOutHash = new Buffer(prevTx, 'hex')
12673
12674 // TxId hex is big-endian, we want little-endian hash
12675 Array.prototype.reverse.call(prevOutHash)
12676
12677 // Transaction
12678 } else if (prevTx instanceof Transaction) {
12679 prevOutHash = prevTx.getHash()
12680 prevOutScript = prevTx.outs[index].script
12681
12682 // txHash
12683 } else {
12684 prevOutHash = prevTx
12685 }
12686
12687 var input = {}
12688 if (prevOutScript) {
12689 var prevOutType = scripts.classifyOutput(prevOutScript)
12690
12691 // if we can, extract pubKey information
12692 switch (prevOutType) {
12693 case 'multisig': {
12694 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12695 break
12696 }
12697
12698 case 'pubkey': {
12699 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12700 break
12701 }
12702 }
12703
12704 if (prevOutType !== 'scripthash') {
12705 input.scriptType = prevOutType
12706 }
12707
12708 input.prevOutScript = prevOutScript
12709 input.prevOutType = prevOutType
12710 }
12711
12712 assert(this.inputs.every(function (input2) {
12713 if (input2.hashType === undefined) return true
12714
12715 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12716 }), 'No, this would invalidate signatures')
12717
12718 var prevOut = prevOutHash.toString('hex') + ':' + index
12719 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12720
12721 var vin = this.tx.addInput(prevOutHash, index, sequence)
12722 this.inputs[vin] = input
12723 this.prevTxMap[prevOut] = vin
12724
12725 return vin
12726}
12727
12728TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12729 assert(this.inputs.every(function (input) {
12730 if (input.hashType === undefined) return true
ebd8d4e8 12731
ab78acc6
IC
12732 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12733 }), 'No, this would invalidate signatures')
ebd8d4e8 12734
ab78acc6
IC
12735 return this.tx.addOutput(scriptPubKey, value)
12736}
ebd8d4e8 12737
ab78acc6
IC
12738TransactionBuilder.prototype.build = function () {
12739 return this.__build(false)
12740}
12741TransactionBuilder.prototype.buildIncomplete = function () {
12742 return this.__build(true)
12743}
ebd8d4e8 12744
ab78acc6
IC
12745var canSignTypes = {
12746 'pubkeyhash': true,
12747 'multisig': true,
12748 'pubkey': true
12749}
ebd8d4e8 12750
ab78acc6
IC
12751TransactionBuilder.prototype.__build = function (allowIncomplete) {
12752 if (!allowIncomplete) {
12753 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12754 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12755 }
12756
ab78acc6 12757 var tx = this.tx.clone()
ebd8d4e8 12758
ab78acc6
IC
12759 // Create script signatures from signature meta-data
12760 this.inputs.forEach(function (input, index) {
12761 var scriptType = input.scriptType
12762 var scriptSig
ebd8d4e8 12763
ab78acc6
IC
12764 if (!allowIncomplete) {
12765 assert(!!scriptType, 'Transaction is not complete')
12766 assert(scriptType in canSignTypes, scriptType + ' not supported')
12767 assert(input.signatures, 'Transaction is missing signatures')
12768 }
ebd8d4e8 12769
ab78acc6
IC
12770 if (input.signatures) {
12771 switch (scriptType) {
12772 case 'pubkeyhash': {
12773 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12774 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12775 break
12776 }
ebd8d4e8 12777
ab78acc6
IC
12778 case 'multisig': {
12779 // Array.prototype.map is sparse-compatible
12780 var msSignatures = input.signatures.map(function (signature) {
12781 return signature && signature.toScriptSignature(input.hashType)
12782 })
ebd8d4e8 12783
ab78acc6
IC
12784 // fill in blanks with OP_0
12785 if (allowIncomplete) {
12786 for (var i = 0; i < msSignatures.length; ++i) {
12787 if (msSignatures[i]) continue
ebd8d4e8 12788
ab78acc6
IC
12789 msSignatures[i] = ops.OP_0
12790 }
12791 } else {
12792 // Array.prototype.filter returns non-sparse array
12793 msSignatures = msSignatures.filter(function (x) { return x })
12794 }
ebd8d4e8 12795
ab78acc6
IC
12796 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12797 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12798 break
12799 }
ebd8d4e8 12800
ab78acc6
IC
12801 case 'pubkey': {
12802 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12803 scriptSig = scripts.pubKeyInput(pkSignature)
12804 break
12805 }
12806 }
ebd8d4e8 12807 }
ebd8d4e8 12808
ab78acc6
IC
12809 // did we build a scriptSig?
12810 if (scriptSig) {
12811 // wrap as scriptHash if necessary
12812 if (input.prevOutType === 'scripthash') {
12813 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12814 }
12815
12816 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12817 }
12818 })
12819
ab78acc6 12820 return tx
ebd8d4e8
IC
12821}
12822
ab78acc6
IC
12823TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12824 assert(index in this.inputs, 'No input at index: ' + index)
12825 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12826
ab78acc6
IC
12827 var input = this.inputs[index]
12828 var canSign = input.hashType &&
12829 input.prevOutScript &&
12830 input.prevOutType &&
12831 input.pubKeys &&
12832 input.scriptType &&
12833 input.signatures
ebd8d4e8 12834
ab78acc6
IC
12835 // are we almost ready to sign?
12836 if (canSign) {
12837 // if redeemScript was provided, enforce consistency
12838 if (redeemScript) {
12839 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12840 }
ebd8d4e8 12841
ab78acc6 12842 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12843
ab78acc6
IC
12844 // no? prepare
12845 } else {
12846 // must be pay-to-scriptHash?
12847 if (redeemScript) {
12848 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12849 if (input.prevOutScript) {
12850 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12851
12852 var scriptHash = input.prevOutScript.chunks[1]
12853 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12854 }
ebd8d4e8 12855
ab78acc6
IC
12856 var scriptType = scripts.classifyOutput(redeemScript)
12857 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12858
ab78acc6
IC
12859 var pubKeys = []
12860 switch (scriptType) {
12861 case 'multisig': {
12862 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12863 break
12864 }
ebd8d4e8 12865
ab78acc6
IC
12866 case 'pubkeyhash': {
12867 var pkh1 = redeemScript.chunks[2]
12868 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12869
ab78acc6
IC
12870 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12871 pubKeys = [privKey.pub]
12872 break
12873 }
ebd8d4e8 12874
ab78acc6
IC
12875 case 'pubkey': {
12876 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12877 break
12878 }
12879 }
ebd8d4e8 12880
ab78acc6
IC
12881 if (!input.prevOutScript) {
12882 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12883 input.prevOutType = 'scripthash'
12884 }
ebd8d4e8 12885
ab78acc6
IC
12886 input.pubKeys = pubKeys
12887 input.redeemScript = redeemScript
12888 input.scriptType = scriptType
ebd8d4e8 12889
ab78acc6
IC
12890 // cannot be pay-to-scriptHash
12891 } else {
12892 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12893
ab78acc6
IC
12894 // can we otherwise sign this?
12895 if (input.scriptType) {
12896 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12897
ab78acc6
IC
12898 // we know nothin' Jon Snow, assume pubKeyHash
12899 } else {
12900 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12901 input.prevOutType = 'pubkeyhash'
12902 input.pubKeys = [privKey.pub]
12903 input.scriptType = input.prevOutType
12904 }
12905 }
ebd8d4e8 12906
ab78acc6
IC
12907 input.hashType = hashType
12908 input.signatures = input.signatures || []
12909 }
12910
12911 var signatureScript = input.redeemScript || input.prevOutScript
12912 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12913
12914 // enforce signature order matches public keys
12915 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12916 // maintain a local copy of unmatched signatures
12917 var unmatched = input.signatures.slice()
12918
12919 input.signatures = input.pubKeys.map(function (pubKey) {
12920 var match
12921
12922 // check for any matching signatures
12923 unmatched.some(function (signature, i) {
12924 if (!pubKey.verify(signatureHash, signature)) return false
12925 match = signature
12926
12927 // remove matched signature from unmatched
12928 unmatched.splice(i, 1)
12929
12930 return true
12931 })
12932
12933 return match || undefined
12934 })
12935 }
12936
12937 // enforce in order signing of public keys
12938 assert(input.pubKeys.some(function (pubKey, i) {
12939 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12940
12941 assert(!input.signatures[i], 'Signature already exists')
12942 var signature = privKey.sign(signatureHash)
12943 input.signatures[i] = signature
12944
12945 return true
12946 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12947}
12948
ab78acc6 12949module.exports = TransactionBuilder
ebd8d4e8 12950
ab78acc6
IC
12951}).call(this,require("buffer").Buffer)
12952},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12953(function (Buffer){
ab78acc6
IC
12954var assert = require('assert')
12955var bufferutils = require('./bufferutils')
12956var typeForce = require('typeforce')
12957var networks = require('./networks')
12958var randomBytes = require('randombytes')
ebd8d4e8 12959
ab78acc6
IC
12960var Address = require('./address')
12961var HDNode = require('./hdnode')
12962var TransactionBuilder = require('./transaction_builder')
12963var Script = require('./script')
ebd8d4e8 12964
ab78acc6
IC
12965function Wallet (seed, network) {
12966 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12967
12968 seed = seed || randomBytes(32)
ebd8d4e8
IC
12969 network = network || networks.bitcoin
12970
12971 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12972 var masterKey = HDNode.fromSeedBuffer(seed, network)
12973
12974 // HD first-level child derivation method should be hardened
12975 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12976 var accountZero = masterKey.deriveHardened(0)
12977 var externalAccount = accountZero.derive(0)
12978 var internalAccount = accountZero.derive(1)
ebd8d4e8 12979
ebd8d4e8
IC
12980 this.addresses = []
12981 this.changeAddresses = []
ab78acc6
IC
12982 this.network = network
12983 this.unspents = []
ebd8d4e8 12984
ab78acc6
IC
12985 // FIXME: remove in 2.0.0
12986 this.unspentMap = {}
ebd8d4e8 12987
ab78acc6
IC
12988 // FIXME: remove in 2.0.0
12989 var me = this
12990 this.newMasterKey = function (seed) {
12991 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12992
12993 seed = seed || randomBytes(32)
12994 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 12995
ab78acc6 12996 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
12997 externalAccount = accountZero.derive(0)
12998 internalAccount = accountZero.derive(1)
12999
13000 me.addresses = []
13001 me.changeAddresses = []
13002
ab78acc6
IC
13003 me.unspents = []
13004 me.unspentMap = {}
ebd8d4e8
IC
13005 }
13006
ab78acc6
IC
13007 this.getMasterKey = function () {
13008 return masterKey
ebd8d4e8 13009 }
ab78acc6
IC
13010 this.getAccountZero = function () {
13011 return accountZero
ebd8d4e8 13012 }
ab78acc6
IC
13013 this.getExternalAccount = function () {
13014 return externalAccount
13015 }
13016 this.getInternalAccount = function () {
13017 return internalAccount
ebd8d4e8 13018 }
ab78acc6 13019}
ebd8d4e8 13020
ab78acc6
IC
13021Wallet.prototype.createTransaction = function (to, value, options) {
13022 // FIXME: remove in 2.0.0
13023 if (typeof options !== 'object') {
13024 if (options !== undefined) {
13025 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 13026
ab78acc6
IC
13027 options = {
13028 fixedFee: arguments[2],
13029 changeAddress: arguments[3]
13030 }
ebd8d4e8 13031 }
ebd8d4e8
IC
13032 }
13033
ab78acc6 13034 options = options || {}
ebd8d4e8 13035
ab78acc6 13036 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 13037
ab78acc6
IC
13038 var changeAddress = options.changeAddress
13039 var fixedFee = options.fixedFee
13040 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 13041
ab78acc6
IC
13042 // filter by minConf, then pending and sort by descending value
13043 var unspents = this.unspents.filter(function (unspent) {
13044 return unspent.confirmations >= minConf
13045 }).filter(function (unspent) {
13046 return !unspent.pending
13047 }).sort(function (o1, o2) {
13048 return o2.value - o1.value
13049 })
ebd8d4e8 13050
ab78acc6
IC
13051 var accum = 0
13052 var addresses = []
13053 var subTotal = value
ebd8d4e8 13054
ab78acc6
IC
13055 var txb = new TransactionBuilder()
13056 txb.addOutput(to, value)
ebd8d4e8 13057
ab78acc6
IC
13058 for (var i = 0; i < unspents.length; ++i) {
13059 var unspent = unspents[i]
13060 addresses.push(unspent.address)
ebd8d4e8 13061
ab78acc6
IC
13062 txb.addInput(unspent.txHash, unspent.index)
13063
13064 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 13065
ab78acc6
IC
13066 accum += unspent.value
13067 subTotal = value + fee
13068
13069 if (accum >= subTotal) {
13070 var change = accum - subTotal
13071
13072 if (change > this.network.dustThreshold) {
13073 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 13074 }
ebd8d4e8 13075
ab78acc6 13076 break
ebd8d4e8
IC
13077 }
13078 }
13079
ab78acc6 13080 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 13081
ab78acc6
IC
13082 return this.signWith(txb, addresses).build()
13083}
ebd8d4e8 13084
ab78acc6
IC
13085// FIXME: remove in 2.0.0
13086Wallet.prototype.processPendingTx = function (tx) {
13087 this.__processTx(tx, true)
13088}
ebd8d4e8 13089
ab78acc6
IC
13090// FIXME: remove in 2.0.0
13091Wallet.prototype.processConfirmedTx = function (tx) {
13092 this.__processTx(tx, false)
13093}
ebd8d4e8 13094
ab78acc6
IC
13095// FIXME: remove in 2.0.0
13096Wallet.prototype.__processTx = function (tx, isPending) {
13097 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 13098
ab78acc6
IC
13099 var txId = tx.getId()
13100 var txHash = tx.getHash()
ebd8d4e8 13101
ab78acc6
IC
13102 tx.outs.forEach(function (txOut, i) {
13103 var address
ebd8d4e8 13104
ab78acc6
IC
13105 try {
13106 address = Address.fromOutputScript(txOut.script, this.network).toString()
13107 } catch (e) {
13108 if (!(e.message.match(/has no matching Address/)))
13109 throw e
13110 }
13111
13112 var myAddresses = this.addresses.concat(this.changeAddresses)
13113 if (myAddresses.indexOf(address) > -1) {
13114 var lookup = txId + ':' + i
13115 if (lookup in this.unspentMap) return
13116
13117 // its unique, add it
13118 var unspent = {
13119 address: address,
13120 confirmations: 0, // no way to determine this without more information
13121 index: i,
13122 txHash: txHash,
13123 txId: txId,
13124 value: txOut.value,
13125 pending: isPending
ebd8d4e8 13126 }
ebd8d4e8 13127
ab78acc6
IC
13128 this.unspentMap[lookup] = unspent
13129 this.unspents.push(unspent)
13130 }
13131 }, this)
ebd8d4e8 13132
ab78acc6
IC
13133 tx.ins.forEach(function (txIn) {
13134 // copy and convert to big-endian hex
13135 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 13136
ab78acc6
IC
13137 var lookup = txInId + ':' + txIn.index
13138 if (!(lookup in this.unspentMap)) return
ebd8d4e8 13139
ab78acc6 13140 var unspent = this.unspentMap[lookup]
ebd8d4e8 13141
ab78acc6
IC
13142 if (isPending) {
13143 unspent.pending = true
13144 unspent.spent = true
13145 } else {
13146 delete this.unspentMap[lookup]
ebd8d4e8 13147
ab78acc6
IC
13148 this.unspents = this.unspents.filter(function (unspent2) {
13149 return unspent !== unspent2
13150 })
13151 }
13152 }, this)
13153}
ebd8d4e8 13154
ab78acc6
IC
13155Wallet.prototype.generateAddress = function () {
13156 var k = this.addresses.length
13157 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 13158
ab78acc6 13159 this.addresses.push(address.toString())
ebd8d4e8 13160
ab78acc6
IC
13161 return this.getReceiveAddress()
13162}
ebd8d4e8 13163
ab78acc6
IC
13164Wallet.prototype.generateChangeAddress = function () {
13165 var k = this.changeAddresses.length
13166 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 13167
ab78acc6 13168 this.changeAddresses.push(address.toString())
ebd8d4e8 13169
ab78acc6
IC
13170 return this.getChangeAddress()
13171}
ebd8d4e8 13172
ab78acc6
IC
13173Wallet.prototype.getAddress = function () {
13174 if (this.addresses.length === 0) {
13175 this.generateAddress()
ebd8d4e8
IC
13176 }
13177
ab78acc6
IC
13178 return this.addresses[this.addresses.length - 1]
13179}
ebd8d4e8 13180
ab78acc6
IC
13181Wallet.prototype.getBalance = function (minConf) {
13182 minConf = minConf || 0
ebd8d4e8 13183
ab78acc6
IC
13184 return this.unspents.filter(function (unspent) {
13185 return unspent.confirmations >= minConf
13186
13187 // FIXME: remove spent filter in 2.0.0
13188 }).filter(function (unspent) {
13189 return !unspent.spent
13190 }).reduce(function (accum, unspent) {
13191 return accum + unspent.value
13192 }, 0)
13193}
ebd8d4e8 13194
ab78acc6
IC
13195Wallet.prototype.getChangeAddress = function () {
13196 if (this.changeAddresses.length === 0) {
13197 this.generateChangeAddress()
ebd8d4e8
IC
13198 }
13199
ab78acc6
IC
13200 return this.changeAddresses[this.changeAddresses.length - 1]
13201}
13202
13203Wallet.prototype.getInternalPrivateKey = function (index) {
13204 return this.getInternalAccount().derive(index).privKey
13205}
13206
13207Wallet.prototype.getPrivateKey = function (index) {
13208 return this.getExternalAccount().derive(index).privKey
13209}
13210
13211Wallet.prototype.getPrivateKeyForAddress = function (address) {
13212 var index
ebd8d4e8 13213
ab78acc6
IC
13214 if ((index = this.addresses.indexOf(address)) > -1) {
13215 return this.getPrivateKey(index)
ebd8d4e8
IC
13216 }
13217
ab78acc6
IC
13218 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13219 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
13220 }
13221
ab78acc6
IC
13222 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13223}
ebd8d4e8 13224
ab78acc6
IC
13225Wallet.prototype.getUnspentOutputs = function (minConf) {
13226 minConf = minConf || 0
ebd8d4e8 13227
ab78acc6
IC
13228 return this.unspents.filter(function (unspent) {
13229 return unspent.confirmations >= minConf
ebd8d4e8 13230
ab78acc6
IC
13231 // FIXME: remove spent filter in 2.0.0
13232 }).filter(function (unspent) {
13233 return !unspent.spent
13234 }).map(function (unspent) {
13235 return {
13236 address: unspent.address,
13237 confirmations: unspent.confirmations,
13238 index: unspent.index,
13239 txId: unspent.txId,
13240 value: unspent.value,
13241
13242 // FIXME: remove in 2.0.0
13243 hash: unspent.txId,
13244 pending: unspent.pending
13245 }
13246 })
13247}
ebd8d4e8 13248
ab78acc6
IC
13249Wallet.prototype.setUnspentOutputs = function (unspents) {
13250 this.unspentMap = {}
13251 this.unspents = unspents.map(function (unspent) {
13252 // FIXME: remove unspent.hash in 2.0.0
13253 var txId = unspent.txId || unspent.hash
13254 var index = unspent.index
ebd8d4e8 13255
ab78acc6
IC
13256 // FIXME: remove in 2.0.0
13257 if (unspent.hash !== undefined) {
13258 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13259 }
ebd8d4e8 13260
ab78acc6
IC
13261 // FIXME: remove in 2.0.0
13262 if (index === undefined) {
13263 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13264 index = unspent.outputIndex
13265 }
ebd8d4e8 13266
ab78acc6
IC
13267 typeForce('String', txId)
13268 typeForce('Number', index)
13269 typeForce('Number', unspent.value)
13270
13271 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13272 assert.doesNotThrow(function () {
13273 Address.fromBase58Check(unspent.address)
13274 }, 'Expected Base58 Address, got ' + unspent.address)
13275 assert(isFinite(index), 'Expected finite index, got ' + index)
13276
13277 // FIXME: remove branch in 2.0.0
13278 if (unspent.confirmations !== undefined) {
13279 typeForce('Number', unspent.confirmations)
ebd8d4e8 13280 }
ebd8d4e8 13281
ab78acc6 13282 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13283
ab78acc6
IC
13284 unspent = {
13285 address: unspent.address,
13286 confirmations: unspent.confirmations || 0,
13287 index: index,
13288 txHash: txHash,
13289 txId: txId,
13290 value: unspent.value,
ebd8d4e8 13291
ab78acc6
IC
13292 // FIXME: remove in 2.0.0
13293 pending: unspent.pending || false
13294 }
13295
13296 // FIXME: remove in 2.0.0
13297 this.unspentMap[txId + ':' + index] = unspent
13298
13299 return unspent
13300 }, this)
13301}
13302
13303Wallet.prototype.signWith = function (tx, addresses) {
13304 addresses.forEach(function (address, i) {
13305 var privKey = this.getPrivateKeyForAddress(address)
13306
13307 tx.sign(i, privKey)
13308 }, this)
13309
13310 return tx
13311}
13312
13313function estimatePaddedFee (tx, network) {
13314 var tmpTx = tx.clone()
13315 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13316
13317 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13318}
13319
ab78acc6
IC
13320// FIXME: 1.0.0 shims, remove in 2.0.0
13321Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13322Wallet.prototype.createTx = Wallet.prototype.createTransaction
13323
ebd8d4e8
IC
13324module.exports = Wallet
13325
ab78acc6
IC
13326}).call(this,require("buffer").Buffer)
13327},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13328});</script>
d5dc92fd
IC
13329 <script>bitcoin.networks.shadow = {
13330 magicPrefix: '\x19ShadowCash Signed Message:\n',
13331 bip32: {
13332 public: 0xEE80286A,
13333 private: 0xEE8031E8
13334 },
13335 pubKeyHash: 0x3f,
13336 scriptHash: 0x7d,
13337 wif: 0xbf,
13338 dustThreshold: 0,
13339 feePerKb: 1000,
13340 estimateFee: function() { return "unused in this app" },
13341};
13342
13343bitcoin.networks.shadowtn = {
13344 magicPrefix: '\x19ShadowCash Signed Message:\n',
13345 bip32: {
13346 public: 0x76C0FDFB,
13347 private: 0x76C1077A
13348 },
13349 pubKeyHash: 0x7f,
13350 scriptHash: 0xc4,
13351 wif: 0xff,
13352 dustThreshold: 0,
13353 feePerKb: 1000,
13354 estimateFee: function() { return "unused in this app" },
13355};
5c434a8a
CM
13356
13357bitcoin.networks.clam = {
13358 bip32: {
13359 public: 0xa8c26d64,
13360 private: 0xa8c17826
13361 },
13362 pubKeyHash: 0x89,
13363 wif: 0x85,
13364};
5493efc3 13365
13366bitcoin.networks.dash = {
13367 bip32: {
13368 public: 0x0488b21e,
13369 private: 0x0488ade4
13370 },
68151a47 13371 pubKeyHash: 0x4c,
5493efc3 13372 scriptHash: 0x10,
13373 wif: 0xcc,
13374};
13375
07ac4350 13376bitcoin.networks.namecoin = {
13377 bip32: {
13378 public: 0x0488b21e,
13379 private: 0x0488ade4
13380 },
13381 pubKeyHash: 0x34,
13382 //scriptHash: 0x10,
13383 wif: 0x80,
13384};
13385
13386bitcoin.networks.peercoin = {
13387 bip32: {
13388 public: 0x0488b21e,
13389 private: 0x0488ade4
13390 },
13391 pubKeyHash: 0x37,
13392 //scriptHash: 0x10,
13393 wif: 0xb7,
13394};
13395
d5dc92fd 13396</script>
ab78acc6 13397 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13398
13399//// base.js
13400
13401/** @fileOverview Javascript cryptography implementation.
13402 *
13403 * Crush to remove comments, shorten variable names and
13404 * generally reduce transmission size.
13405 *
13406 * @author Emily Stark
13407 * @author Mike Hamburg
13408 * @author Dan Boneh
13409 */
13410
13411"use strict";
13412/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13413/*global document, window, escape, unescape, module, require, Uint32Array */
13414
13415/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13416var sjcl = {
13417 /** @namespace Symmetric ciphers. */
13418 cipher: {},
13419
13420 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13421 hash: {},
13422
13423 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13424 keyexchange: {},
13425
13426 /** @namespace Block cipher modes of operation. */
13427 mode: {},
13428
13429 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13430 misc: {},
13431
13432 /**
13433 * @namespace Bit array encoders and decoders.
13434 *
13435 * @description
13436 * The members of this namespace are functions which translate between
13437 * SJCL's bitArrays and other objects (usually strings). Because it
13438 * isn't always clear which direction is encoding and which is decoding,
13439 * the method names are "fromBits" and "toBits".
13440 */
13441 codec: {},
13442
13443 /** @namespace Exceptions. */
13444 exception: {
13445 /** @constructor Ciphertext is corrupt. */
13446 corrupt: function(message) {
13447 this.toString = function() { return "CORRUPT: "+this.message; };
13448 this.message = message;
13449 },
13450
13451 /** @constructor Invalid parameter. */
13452 invalid: function(message) {
13453 this.toString = function() { return "INVALID: "+this.message; };
13454 this.message = message;
13455 },
13456
13457 /** @constructor Bug or missing feature in SJCL. @constructor */
13458 bug: function(message) {
13459 this.toString = function() { return "BUG: "+this.message; };
13460 this.message = message;
13461 },
13462
13463 /** @constructor Something isn't ready. */
13464 notReady: function(message) {
13465 this.toString = function() { return "NOT READY: "+this.message; };
13466 this.message = message;
ebd8d4e8 13467 }
80c4dd2a
IC
13468 }
13469};
13470
13471if(typeof module !== 'undefined' && module.exports){
13472 module.exports = sjcl;
13473}
13474if (typeof define === "function") {
13475 define([], function () {
13476 return sjcl;
13477 });
13478}
13479
13480
13481//// bitArray.js
13482
13483/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13484 *
13485 * @author Emily Stark
13486 * @author Mike Hamburg
13487 * @author Dan Boneh
13488 */
13489
13490/** @namespace Arrays of bits, encoded as arrays of Numbers.
13491 *
13492 * @description
13493 * <p>
13494 * These objects are the currency accepted by SJCL's crypto functions.
13495 * </p>
13496 *
13497 * <p>
13498 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13499 * but many of them can take arguments that are not a multiple of 4 bytes.
13500 * This library encodes arrays of bits (whose size need not be a multiple of 8
13501 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13502 * array of words, 32 bits at a time. Since the words are double-precision
13503 * floating point numbers, they fit some extra data. We use this (in a private,
13504 * possibly-changing manner) to encode the number of bits actually present
13505 * in the last word of the array.
13506 * </p>
13507 *
13508 * <p>
13509 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13510 * to ciphers like AES which want arrays of words.
13511 * </p>
13512 */
13513sjcl.bitArray = {
13514 /**
13515 * Array slices in units of bits.
13516 * @param {bitArray} a The array to slice.
13517 * @param {Number} bstart The offset to the start of the slice, in bits.
13518 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13519 * slice until the end of the array.
13520 * @return {bitArray} The requested slice.
13521 */
13522 bitSlice: function (a, bstart, bend) {
13523 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13524 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13525 },
13526
13527 /**
13528 * Extract a number packed into a bit array.
13529 * @param {bitArray} a The array to slice.
13530 * @param {Number} bstart The offset to the start of the slice, in bits.
13531 * @param {Number} length The length of the number to extract.
13532 * @return {Number} The requested slice.
13533 */
13534 extract: function(a, bstart, blength) {
13535 // FIXME: this Math.floor is not necessary at all, but for some reason
13536 // seems to suppress a bug in the Chromium JIT.
13537 var x, sh = Math.floor((-bstart-blength) & 31);
13538 if ((bstart + blength - 1 ^ bstart) & -32) {
13539 // it crosses a boundary
13540 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13541 } else {
13542 // within a single word
13543 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13544 }
80c4dd2a
IC
13545 return x & ((1<<blength) - 1);
13546 },
13547
13548 /**
13549 * Concatenate two bit arrays.
13550 * @param {bitArray} a1 The first array.
13551 * @param {bitArray} a2 The second array.
13552 * @return {bitArray} The concatenation of a1 and a2.
13553 */
13554 concat: function (a1, a2) {
13555 if (a1.length === 0 || a2.length === 0) {
13556 return a1.concat(a2);
13557 }
13558
13559 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13560 if (shift === 32) {
13561 return a1.concat(a2);
13562 } else {
13563 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13564 }
80c4dd2a
IC
13565 },
13566
13567 /**
13568 * Find the length of an array of bits.
13569 * @param {bitArray} a The array.
13570 * @return {Number} The length of a, in bits.
13571 */
13572 bitLength: function (a) {
13573 var l = a.length, x;
13574 if (l === 0) { return 0; }
13575 x = a[l - 1];
13576 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13577 },
13578
13579 /**
13580 * Truncate an array.
13581 * @param {bitArray} a The array.
13582 * @param {Number} len The length to truncate to, in bits.
13583 * @return {bitArray} A new array, truncated to len bits.
13584 */
13585 clamp: function (a, len) {
13586 if (a.length * 32 < len) { return a; }
13587 a = a.slice(0, Math.ceil(len / 32));
13588 var l = a.length;
13589 len = len & 31;
13590 if (l > 0 && len) {
13591 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13592 }
13593 return a;
13594 },
13595
13596 /**
13597 * Make a partial word for a bit array.
13598 * @param {Number} len The number of bits in the word.
13599 * @param {Number} x The bits.
13600 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13601 * @return {Number} The partial word.
13602 */
13603 partial: function (len, x, _end) {
13604 if (len === 32) { return x; }
13605 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13606 },
13607
13608 /**
13609 * Get the number of bits used by a partial word.
13610 * @param {Number} x The partial word.
13611 * @return {Number} The number of bits used by the partial word.
13612 */
13613 getPartial: function (x) {
13614 return Math.round(x/0x10000000000) || 32;
13615 },
13616
13617 /**
13618 * Compare two arrays for equality in a predictable amount of time.
13619 * @param {bitArray} a The first array.
13620 * @param {bitArray} b The second array.
13621 * @return {boolean} true if a == b; false otherwise.
13622 */
13623 equal: function (a, b) {
13624 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13625 return false;
ebd8d4e8 13626 }
80c4dd2a
IC
13627 var x = 0, i;
13628 for (i=0; i<a.length; i++) {
13629 x |= a[i]^b[i];
ebd8d4e8 13630 }
80c4dd2a
IC
13631 return (x === 0);
13632 },
13633
13634 /** Shift an array right.
13635 * @param {bitArray} a The array to shift.
13636 * @param {Number} shift The number of bits to shift.
13637 * @param {Number} [carry=0] A byte to carry in
13638 * @param {bitArray} [out=[]] An array to prepend to the output.
13639 * @private
13640 */
13641 _shiftRight: function (a, shift, carry, out) {
13642 var i, last2=0, shift2;
13643 if (out === undefined) { out = []; }
13644
13645 for (; shift >= 32; shift -= 32) {
13646 out.push(carry);
13647 carry = 0;
13648 }
13649 if (shift === 0) {
13650 return out.concat(a);
13651 }
13652
13653 for (i=0; i<a.length; i++) {
13654 out.push(carry | a[i]>>>shift);
13655 carry = a[i] << (32-shift);
13656 }
13657 last2 = a.length ? a[a.length-1] : 0;
13658 shift2 = sjcl.bitArray.getPartial(last2);
13659 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13660 return out;
13661 },
13662
13663 /** xor a block of 4 words together.
13664 * @private
13665 */
13666 _xor4: function(x,y) {
13667 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13668 },
13669
13670 /** byteswap a word array inplace.
13671 * (does not handle partial words)
13672 * @param {sjcl.bitArray} a word array
13673 * @return {sjcl.bitArray} byteswapped array
13674 */
13675 byteswapM: function(a) {
13676 var i, v, m = 0xff00;
13677 for (i = 0; i < a.length; ++i) {
13678 v = a[i];
13679 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13680 }
80c4dd2a
IC
13681 return a;
13682 }
13683};
13684
13685
13686//// codecString.js
13687
13688/** @fileOverview Bit array codec implementations.
13689 *
13690 * @author Emily Stark
13691 * @author Mike Hamburg
13692 * @author Dan Boneh
13693 */
13694
13695/** @namespace UTF-8 strings */
13696sjcl.codec.utf8String = {
13697 /** Convert from a bitArray to a UTF-8 string. */
13698 fromBits: function (arr) {
13699 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13700 for (i=0; i<bl/8; i++) {
13701 if ((i&3) === 0) {
13702 tmp = arr[i/4];
13703 }
13704 out += String.fromCharCode(tmp >>> 24);
13705 tmp <<= 8;
ebd8d4e8 13706 }
80c4dd2a
IC
13707 return decodeURIComponent(escape(out));
13708 },
13709
13710 /** Convert from a UTF-8 string to a bitArray. */
13711 toBits: function (str) {
13712 str = unescape(encodeURIComponent(str));
13713 var out = [], i, tmp=0;
13714 for (i=0; i<str.length; i++) {
13715 tmp = tmp << 8 | str.charCodeAt(i);
13716 if ((i&3) === 3) {
13717 out.push(tmp);
13718 tmp = 0;
13719 }
ebd8d4e8 13720 }
80c4dd2a
IC
13721 if (i&3) {
13722 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13723 }
80c4dd2a
IC
13724 return out;
13725 }
13726};
13727
13728
13729//// codecHex.js
13730
13731/** @fileOverview Bit array codec implementations.
13732 *
13733 * @author Emily Stark
13734 * @author Mike Hamburg
13735 * @author Dan Boneh
13736 */
13737
13738/** @namespace Hexadecimal */
13739sjcl.codec.hex = {
13740 /** Convert from a bitArray to a hex string. */
13741 fromBits: function (arr) {
13742 var out = "", i;
13743 for (i=0; i<arr.length; i++) {
13744 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13745 }
80c4dd2a
IC
13746 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13747 },
13748 /** Convert from a hex string to a bitArray. */
13749 toBits: function (str) {
13750 var i, out=[], len;
13751 str = str.replace(/\s|0x/g, "");
13752 len = str.length;
13753 str = str + "00000000";
13754 for (i=0; i<str.length; i+=8) {
13755 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13756 }
80c4dd2a
IC
13757 return sjcl.bitArray.clamp(out, len*4);
13758 }
13759};
13760
13761
13762//// sha512.js
13763
13764/** @fileOverview Javascript SHA-512 implementation.
13765 *
13766 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13767 * SJCL by Stefan Thomas.
13768 *
13769 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13770 * Released with New BSD License
13771 *
13772 * @author Emily Stark
13773 * @author Mike Hamburg
13774 * @author Dan Boneh
13775 * @author Jeff Mott
13776 * @author Stefan Thomas
13777 */
13778
13779/**
13780 * Context for a SHA-512 operation in progress.
13781 * @constructor
13782 * @class Secure Hash Algorithm, 512 bits.
13783 */
13784sjcl.hash.sha512 = function (hash) {
13785 if (!this._key[0]) { this._precompute(); }
13786 if (hash) {
13787 this._h = hash._h.slice(0);
13788 this._buffer = hash._buffer.slice(0);
13789 this._length = hash._length;
13790 } else {
13791 this.reset();
13792 }
13793};
13794
13795/**
13796 * Hash a string or an array of words.
13797 * @static
13798 * @param {bitArray|String} data the data to hash.
13799 * @return {bitArray} The hash value, an array of 16 big-endian words.
13800 */
13801sjcl.hash.sha512.hash = function (data) {
13802 return (new sjcl.hash.sha512()).update(data).finalize();
13803};
13804
13805sjcl.hash.sha512.prototype = {
13806 /**
13807 * The hash's block size, in bits.
13808 * @constant
13809 */
13810 blockSize: 1024,
13811
13812 /**
13813 * Reset the hash state.
13814 * @return this
13815 */
13816 reset:function () {
13817 this._h = this._init.slice(0);
13818 this._buffer = [];
13819 this._length = 0;
13820 return this;
13821 },
13822
13823 /**
13824 * Input several words to the hash.
13825 * @param {bitArray|String} data the data to hash.
13826 * @return this
13827 */
13828 update: function (data) {
13829 if (typeof data === "string") {
13830 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13831 }
80c4dd2a
IC
13832 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13833 ol = this._length,
13834 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13835 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13836 this._block(b.splice(0,32));
ebd8d4e8 13837 }
80c4dd2a
IC
13838 return this;
13839 },
13840
13841 /**
13842 * Complete hashing and output the hash value.
13843 * @return {bitArray} The hash value, an array of 16 big-endian words.
13844 */
13845 finalize:function () {
13846 var i, b = this._buffer, h = this._h;
13847
13848 // Round out and push the buffer
13849 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13850
13851 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13852 for (i = b.length + 4; i & 31; i++) {
13853 b.push(0);
ebd8d4e8 13854 }
80c4dd2a
IC
13855
13856 // append the length
13857 b.push(0);
13858 b.push(0);
13859 b.push(Math.floor(this._length / 0x100000000));
13860 b.push(this._length | 0);
13861
13862 while (b.length) {
13863 this._block(b.splice(0,32));
ebd8d4e8 13864 }
80c4dd2a
IC
13865
13866 this.reset();
13867 return h;
13868 },
13869
13870 /**
13871 * The SHA-512 initialization vector, to be precomputed.
13872 * @private
13873 */
13874 _init:[],
13875
13876 /**
13877 * Least significant 24 bits of SHA512 initialization values.
13878 *
13879 * Javascript only has 53 bits of precision, so we compute the 40 most
13880 * significant bits and add the remaining 24 bits as constants.
13881 *
13882 * @private
13883 */
13884 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13885
13886 /*
13887 _init:
13888 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13889 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13890 */
13891
13892 /**
13893 * The SHA-512 hash key, to be precomputed.
13894 * @private
13895 */
13896 _key:[],
13897
13898 /**
13899 * Least significant 24 bits of SHA512 key values.
13900 * @private
13901 */
13902 _keyr:
13903 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13904 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13905 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13906 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13907 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13908 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13909 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13910 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13911 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13912 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13913
13914 /*
13915 _key:
13916 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13917 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13918 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13919 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13920 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13921 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13922 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13923 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13924 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13925 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13926 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13927 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13928 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13929 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13930 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13931 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13932 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13933 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13934 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13935 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13936 */
13937
13938 /**
13939 * Function to precompute _init and _key.
13940 * @private
13941 */
13942 _precompute: function () {
13943 // XXX: This code is for precomputing the SHA256 constants, change for
13944 // SHA512 and re-enable.
13945 var i = 0, prime = 2, factor;
13946
13947 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13948 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13949
13950 outer: for (; i<80; prime++) {
13951 for (factor=2; factor*factor <= prime; factor++) {
13952 if (prime % factor === 0) {
13953 // not a prime
13954 continue outer;
ebd8d4e8 13955 }
80c4dd2a
IC
13956 }
13957
13958 if (i<8) {
13959 this._init[i*2] = frac(Math.pow(prime, 1/2));
13960 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13961 }
13962 this._key[i*2] = frac(Math.pow(prime, 1/3));
13963 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13964 i++;
ebd8d4e8 13965 }
80c4dd2a
IC
13966 },
13967
13968 /**
13969 * Perform one cycle of SHA-512.
13970 * @param {bitArray} words one block of words.
13971 * @private
13972 */
13973 _block:function (words) {
13974 var i, wrh, wrl,
13975 w = words.slice(0),
13976 h = this._h,
13977 k = this._key,
13978 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13979 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13980 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13981 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13982
13983 // Working variables
13984 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13985 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13986 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13987 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13988
13989 for (i=0; i<80; i++) {
13990 // load up the input word for this round
13991 if (i<16) {
13992 wrh = w[i * 2];
13993 wrl = w[i * 2 + 1];
13994 } else {
13995 // Gamma0
13996 var gamma0xh = w[(i-15) * 2];
13997 var gamma0xl = w[(i-15) * 2 + 1];
13998 var gamma0h =
13999 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14000 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14001 (gamma0xh >>> 7);
14002 var gamma0l =
14003 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14004 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14005 ((gamma0xh << 25) | (gamma0xl >>> 7));
14006
14007 // Gamma1
14008 var gamma1xh = w[(i-2) * 2];
14009 var gamma1xl = w[(i-2) * 2 + 1];
14010 var gamma1h =
14011 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14012 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14013 (gamma1xh >>> 6);
14014 var gamma1l =
14015 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14016 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14017 ((gamma1xh << 26) | (gamma1xl >>> 6));
14018
14019 // Shortcuts
14020 var wr7h = w[(i-7) * 2];
14021 var wr7l = w[(i-7) * 2 + 1];
14022
14023 var wr16h = w[(i-16) * 2];
14024 var wr16l = w[(i-16) * 2 + 1];
14025
14026 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14027 wrl = gamma0l + wr7l;
14028 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14029 wrl += gamma1l;
14030 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14031 wrl += wr16l;
14032 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14033 }
14034
14035 w[i*2] = wrh |= 0;
14036 w[i*2 + 1] = wrl |= 0;
14037
14038 // Ch
14039 var chh = (eh & fh) ^ (~eh & gh);
14040 var chl = (el & fl) ^ (~el & gl);
14041
14042 // Maj
14043 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14044 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14045
14046 // Sigma0
14047 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14048 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14049
14050 // Sigma1
14051 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14052 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14053
14054 // K(round)
14055 var krh = k[i*2];
14056 var krl = k[i*2+1];
14057
14058 // t1 = h + sigma1 + ch + K(round) + W(round)
14059 var t1l = hl + sigma1l;
14060 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14061 t1l += chl;
14062 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14063 t1l += krl;
14064 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14065 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14066 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14067
14068 // t2 = sigma0 + maj
14069 var t2l = sigma0l + majl;
14070 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14071
14072 // Update working variables
14073 hh = gh;
14074 hl = gl;
14075 gh = fh;
14076 gl = fl;
14077 fh = eh;
14078 fl = el;
14079 el = (dl + t1l) | 0;
14080 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14081 dh = ch;
14082 dl = cl;
14083 ch = bh;
14084 cl = bl;
14085 bh = ah;
14086 bl = al;
14087 al = (t1l + t2l) | 0;
14088 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14089 }
14090
14091 // Intermediate hash
14092 h0l = h[1] = (h0l + al) | 0;
14093 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14094 h1l = h[3] = (h1l + bl) | 0;
14095 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14096 h2l = h[5] = (h2l + cl) | 0;
14097 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14098 h3l = h[7] = (h3l + dl) | 0;
14099 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14100 h4l = h[9] = (h4l + el) | 0;
14101 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14102 h5l = h[11] = (h5l + fl) | 0;
14103 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14104 h6l = h[13] = (h6l + gl) | 0;
14105 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14106 h7l = h[15] = (h7l + hl) | 0;
14107 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14108 }
14109};
14110
14111
14112//// hmac.js
14113
14114/** @fileOverview HMAC implementation.
14115 *
14116 * @author Emily Stark
14117 * @author Mike Hamburg
14118 * @author Dan Boneh
14119 */
14120
14121/** HMAC with the specified hash function.
14122 * @constructor
14123 * @param {bitArray} key the key for HMAC.
14124 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14125 */
14126sjcl.misc.hmac = function (key, Hash) {
14127 this._hash = Hash = Hash || sjcl.hash.sha256;
14128 var exKey = [[],[]], i,
14129 bs = Hash.prototype.blockSize / 32;
14130 this._baseHash = [new Hash(), new Hash()];
14131
14132 if (key.length > bs) {
14133 key = Hash.hash(key);
14134 }
14135
14136 for (i=0; i<bs; i++) {
14137 exKey[0][i] = key[i]^0x36363636;
14138 exKey[1][i] = key[i]^0x5C5C5C5C;
14139 }
14140
14141 this._baseHash[0].update(exKey[0]);
14142 this._baseHash[1].update(exKey[1]);
14143 this._resultHash = new Hash(this._baseHash[0]);
14144};
14145
14146/** HMAC with the specified hash function. Also called encrypt since it's a prf.
14147 * @param {bitArray|String} data The data to mac.
14148 */
14149sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14150 if (!this._updated) {
14151 this.update(data);
14152 return this.digest(data);
14153 } else {
14154 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14155 }
14156};
14157
14158sjcl.misc.hmac.prototype.reset = function () {
14159 this._resultHash = new this._hash(this._baseHash[0]);
14160 this._updated = false;
14161};
14162
14163sjcl.misc.hmac.prototype.update = function (data) {
14164 this._updated = true;
14165 this._resultHash.update(data);
14166};
14167
14168sjcl.misc.hmac.prototype.digest = function () {
14169 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14170
14171 this.reset();
14172
14173 return result;
14174};
14175
14176
14177//// pbkdf2.js
14178
14179
14180/** @fileOverview Password-based key-derivation function, version 2.0.
14181 *
14182 * @author Emily Stark
14183 * @author Mike Hamburg
14184 * @author Dan Boneh
14185 */
14186
14187/** Password-Based Key-Derivation Function, version 2.0.
14188 *
14189 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14190 *
14191 * This is the method specified by RSA's PKCS #5 standard.
14192 *
14193 * @param {bitArray|String} password The password.
14194 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14195 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14196 * @param {Number} [length] The length of the derived key. Defaults to the
14197 output size of the hash function.
14198 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14199 * @return {bitArray} the derived key.
14200 */
14201sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14202 count = count || 1000;
14203
14204 if (length < 0 || count < 0) {
14205 throw sjcl.exception.invalid("invalid params to pbkdf2");
14206 }
14207
14208 if (typeof password === "string") {
14209 password = sjcl.codec.utf8String.toBits(password);
14210 }
14211
14212 if (typeof salt === "string") {
14213 salt = sjcl.codec.utf8String.toBits(salt);
14214 }
14215
14216 Prff = Prff || sjcl.misc.hmac;
14217
14218 var prf = new Prff(password),
14219 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14220
14221 for (k = 1; 32 * out.length < (length || 1); k++) {
14222 u = ui = prf.encrypt(b.concat(salt,[k]));
14223
14224 for (i=1; i<count; i++) {
14225 ui = prf.encrypt(ui);
14226 for (j=0; j<ui.length; j++) {
14227 u[j] ^= ui[j];
14228 }
ebd8d4e8 14229 }
80c4dd2a
IC
14230
14231 out = out.concat(u);
14232 }
14233
14234 if (length) { out = b.clamp(out, length); }
14235
14236 return out;
14237};
14238
14239
14240//// sha256.js
14241
14242/** @fileOverview Javascript SHA-256 implementation.
14243 *
14244 * An older version of this implementation is available in the public
14245 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14246 * Stanford University 2008-2010 and BSD-licensed for liability
14247 * reasons.
14248 *
14249 * Special thanks to Aldo Cortesi for pointing out several bugs in
14250 * this code.
14251 *
14252 * @author Emily Stark
14253 * @author Mike Hamburg
14254 * @author Dan Boneh
14255 */
14256
14257/**
14258 * Context for a SHA-256 operation in progress.
14259 * @constructor
14260 * @class Secure Hash Algorithm, 256 bits.
14261 */
14262sjcl.hash.sha256 = function (hash) {
14263 if (!this._key[0]) { this._precompute(); }
14264 if (hash) {
14265 this._h = hash._h.slice(0);
14266 this._buffer = hash._buffer.slice(0);
14267 this._length = hash._length;
14268 } else {
14269 this.reset();
14270 }
14271};
14272
14273/**
14274 * Hash a string or an array of words.
14275 * @static
14276 * @param {bitArray|String} data the data to hash.
14277 * @return {bitArray} The hash value, an array of 16 big-endian words.
14278 */
14279sjcl.hash.sha256.hash = function (data) {
14280 return (new sjcl.hash.sha256()).update(data).finalize();
14281};
14282
14283sjcl.hash.sha256.prototype = {
14284 /**
14285 * The hash's block size, in bits.
14286 * @constant
14287 */
14288 blockSize: 512,
14289
14290 /**
14291 * Reset the hash state.
14292 * @return this
14293 */
14294 reset:function () {
14295 this._h = this._init.slice(0);
14296 this._buffer = [];
14297 this._length = 0;
14298 return this;
14299 },
14300
14301 /**
14302 * Input several words to the hash.
14303 * @param {bitArray|String} data the data to hash.
14304 * @return this
14305 */
14306 update: function (data) {
14307 if (typeof data === "string") {
14308 data = sjcl.codec.utf8String.toBits(data);
14309 }
14310 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14311 ol = this._length,
14312 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14313 for (i = 512+ol & -512; i <= nl; i+= 512) {
14314 this._block(b.splice(0,16));
ebd8d4e8 14315 }
3af2954a 14316 return this;
80c4dd2a
IC
14317 },
14318
14319 /**
14320 * Complete hashing and output the hash value.
14321 * @return {bitArray} The hash value, an array of 8 big-endian words.
14322 */
14323 finalize:function () {
14324 var i, b = this._buffer, h = this._h;
14325
14326 // Round out and push the buffer
14327 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14328
14329 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14330 for (i = b.length + 2; i & 15; i++) {
14331 b.push(0);
14332 }
14333
14334 // append the length
14335 b.push(Math.floor(this._length / 0x100000000));
14336 b.push(this._length | 0);
14337
14338 while (b.length) {
14339 this._block(b.splice(0,16));
14340 }
14341
14342 this.reset();
14343 return h;
14344 },
14345
14346 /**
14347 * The SHA-256 initialization vector, to be precomputed.
14348 * @private
14349 */
14350 _init:[],
14351 /*
14352 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14353 */
14354
14355 /**
14356 * The SHA-256 hash key, to be precomputed.
14357 * @private
14358 */
14359 _key:[],
14360 /*
14361 _key:
14362 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14363 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14364 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14365 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14366 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14367 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14368 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14369 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14370 */
14371
14372
14373 /**
14374 * Function to precompute _init and _key.
14375 * @private
14376 */
14377 _precompute: function () {
14378 var i = 0, prime = 2, factor;
14379
14380 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14381
14382 outer: for (; i<64; prime++) {
14383 for (factor=2; factor*factor <= prime; factor++) {
14384 if (prime % factor === 0) {
14385 // not a prime
14386 continue outer;
ebd8d4e8 14387 }
80c4dd2a
IC
14388 }
14389
14390 if (i<8) {
14391 this._init[i] = frac(Math.pow(prime, 1/2));
14392 }
14393 this._key[i] = frac(Math.pow(prime, 1/3));
14394 i++;
ebd8d4e8 14395 }
80c4dd2a
IC
14396 },
14397
14398 /**
14399 * Perform one cycle of SHA-256.
14400 * @param {bitArray} words one block of words.
14401 * @private
14402 */
14403 _block:function (words) {
14404 var i, tmp, a, b,
14405 w = words.slice(0),
14406 h = this._h,
14407 k = this._key,
14408 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14409 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14410
14411 /* Rationale for placement of |0 :
14412 * If a value can overflow is original 32 bits by a factor of more than a few
14413 * million (2^23 ish), there is a possibility that it might overflow the
14414 * 53-bit mantissa and lose precision.
14415 *
14416 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14417 * propagates around the loop, and on the hash state h[]. I don't believe
14418 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14419 * (for h4 anyway), and better safe than sorry.
14420 *
14421 * The clamps on h[] are necessary for the output to be correct even in the
14422 * common case and for short inputs.
14423 */
14424 for (i=0; i<64; i++) {
14425 // load up the input word for this round
14426 if (i<16) {
14427 tmp = w[i];
14428 } else {
14429 a = w[(i+1 ) & 15];
14430 b = w[(i+14) & 15];
14431 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14432 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14433 w[i&15] + w[(i+9) & 15]) | 0;
14434 }
14435
14436 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14437
14438 // shift register
14439 h7 = h6; h6 = h5; h5 = h4;
14440 h4 = h3 + tmp | 0;
14441 h3 = h2; h2 = h1; h1 = h0;
14442
14443 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14444 }
14445
14446 h[0] = h[0]+h0 | 0;
14447 h[1] = h[1]+h1 | 0;
14448 h[2] = h[2]+h2 | 0;
14449 h[3] = h[3]+h3 | 0;
14450 h[4] = h[4]+h4 | 0;
14451 h[5] = h[5]+h5 | 0;
14452 h[6] = h[6]+h6 | 0;
14453 h[7] = h[7]+h7 | 0;
14454 }
14455};
dc55c6b0 14456</script>
ab78acc6 14457 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14458WORDLISTS["english"] = [
ebd8d4e8
IC
14459"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14460"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14461"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14462"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14463"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14464"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14465"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14466"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14467"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14468"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14469"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14470"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14471"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14472"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14473"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14474"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14475"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14476"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14477"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14478"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14479"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14480"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14481"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14482"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14483"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14484"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14485"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14486"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14487"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14488"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14489"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14490"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14491"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14492"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14493"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14494"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14495"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14496"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14497"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14498"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14499"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14500"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14501"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14502"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14503"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14504"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14505"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14506"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14507"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14508"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14509"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14510"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14511"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14512"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14513"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14514"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14515"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14516"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14517"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14518"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14519"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14520"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14521"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14522"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14523"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14524"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14525"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14526"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14527"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14528"film","filter","final","find","fine","finger","finish","fire","firm","first",
14529"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14530"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14531"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14532"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14533"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14534"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14535"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14536"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14537"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14538"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14539"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14540"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14541"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14542"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14543"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14544"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14545"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14546"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14547"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14548"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14549"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14550"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14551"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14552"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14553"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14554"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14555"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14556"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14557"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14558"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14559"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14560"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14561"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14562"liar","liberty","library","license","life","lift","light","like","limb","limit",
14563"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14564"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14565"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14566"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14567"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14568"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14569"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14570"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14571"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14572"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14573"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14574"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14575"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14576"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14577"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14578"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14579"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14580"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14581"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14582"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14583"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14584"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14585"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14586"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14587"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14588"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14589"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14590"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14591"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14592"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14593"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14594"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14595"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14596"prize","problem","process","produce","profit","program","project","promote","proof","property",
14597"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14598"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14599"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14600"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14601"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14602"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14603"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14604"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14605"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14606"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14607"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14608"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14609"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14610"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14611"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14612"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14613"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14614"scrub","sea","search","season","seat","second","secret","section","security","seed",
14615"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14616"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14617"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14618"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14619"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14620"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14621"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14622"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14623"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14624"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14625"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14626"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14627"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14628"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14629"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14630"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14631"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14632"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14633"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14634"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14635"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14636"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14637"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14638"thank","that","theme","then","theory","there","they","thing","this","thought",
14639"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14640"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14641"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14642"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14643"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14644"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14645"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14646"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14647"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14648"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14649"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14650"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14651"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14652"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14653"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14654"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14655"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14656"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14657"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14658"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14659"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14660"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14661"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14662"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14663"yellow","you","young","youth","zebra","zero","zone","zoo"]
dc55c6b0 14664</script>
ab78acc6 14665 <script>/*
3af2954a
IC
14666 * Copyright (c) 2013 Pavol Rusnak
14667 *
14668 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14669 * this software and associated documentation files (the "Software"), to deal in
14670 * the Software without restriction, including without limitation the rights to
14671 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14672 * of the Software, and to permit persons to whom the Software is furnished to do
14673 * so, subject to the following conditions:
14674 *
14675 * The above copyright notice and this permission notice shall be included in all
14676 * copies or substantial portions of the Software.
14677 *
14678 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14679 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14680 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14681 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14682 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14683 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14684 */
14685
14686/*
14687 * Javascript port from python by Ian Coleman
14688 *
80c4dd2a
IC
14689 * Requires code from sjcl
14690 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
14691 */
14692
14693var Mnemonic = function(language) {
14694
14695 var PBKDF2_ROUNDS = 2048;
14696 var RADIX = 2048;
14697
14698 var self = this;
14699 var wordlist = [];
14700
80c4dd2a
IC
14701 var hmacSHA512 = function(key) {
14702 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14703 this.encrypt = function() {
14704 return hasher.encrypt.apply(hasher, arguments);
14705 };
14706 };
14707
3af2954a
IC
14708 function init() {
14709 wordlist = WORDLISTS[language];
14710 if (wordlist.length != RADIX) {
14711 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14712 throw err;
14713 }
14714 }
14715
14716 self.generate = function(strength) {
14717 strength = strength || 128;
14718 var r = strength % 32;
14719 if (r > 0) {
14720 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14721 }
14722 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14723 if (!hasStrongCrypto) {
14724 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14725 }
14726 var buffer = new Uint8Array(strength / 8);
14727 var data = crypto.getRandomValues(buffer);
14728 return self.toMnemonic(data);
14729 }
14730
80c4dd2a
IC
14731 self.toMnemonic = function(byteArray) {
14732 if (byteArray.length % 4 > 0) {
14733 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
14734 }
14735
14736 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
14737 var data = byteArrayToWordArray(byteArray);
14738 var hash = sjcl.hash.sha256.hash(data);
14739 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
14740
14741 // b is a binary string, eg '00111010101100...'
14742 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14743 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14744 //
14745 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14746 // c = bin(int(h, 16))[2:].zfill(256)
14747 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
14748 var a = byteArrayToBinaryString(byteArray);
14749 var c = zfill(hexStringToBinaryString(h), 256);
14750 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
14751 // b = line1 + line2
14752 var b = a + d;
14753
14754 var result = [];
14755 var blen = b.length / 11;
14756 for (var i=0; i<blen; i++) {
14757 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14758 result.push(wordlist[idx]);
14759 }
14760 return result.join(' ');
14761 }
14762
14763 self.check = function(mnemonic) {
14764 var mnemonic = mnemonic.split(' ')
14765 if (mnemonic.length % 3 > 0) {
14766 return false
14767 }
14768 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14769 var idx = [];
14770 for (var i=0; i<mnemonic.length; i++) {
14771 var word = mnemonic[i];
14772 var wordIndex = wordlist.indexOf(word);
14773 if (wordIndex == -1) {
14774 return false;
14775 }
14776 var binaryIndex = zfill(wordIndex.toString(2), 11);
14777 idx.push(binaryIndex);
14778 }
14779 var b = idx.join('');
14780 var l = b.length;
14781 //d = b[:l / 33 * 32]
14782 //h = b[-l / 33:]
14783 var d = b.substring(0, l / 33 * 32);
14784 var h = b.substring(l - l / 33, l);
14785 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 14786 var nd = binaryStringToWordArray(d);
3af2954a 14787 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
14788 var ndHash = sjcl.hash.sha256.hash(nd);
14789 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14790 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
14791 var nh = ndBstr.substring(0,l/33);
14792 return h == nh;
14793 }
14794
14795 self.toSeed = function(mnemonic, passphrase) {
14796 passphrase = passphrase || '';
7772c641 14797 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
3af2954a
IC
14798 passphrase = self.normalizeString(passphrase)
14799 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
14800 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14801 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14802 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14803 var hashHex = sjcl.codec.hex.fromBits(result);
14804 return hashHex;
3af2954a
IC
14805 }
14806
14807 self.normalizeString = function(str) {
14808 if (typeof str.normalize == "function") {
14809 return str.normalize("NFKD");
14810 }
14811 else {
14812 // TODO decide how to handle this in the future.
14813 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14814 return str;
14815 }
14816 }
14817
80c4dd2a
IC
14818 function byteArrayToWordArray(data) {
14819 var a = [];
14820 for (var i=0; i<data.length/4; i++) {
14821 v = 0;
14822 v += data[i*4 + 0] << 8 * 3;
14823 v += data[i*4 + 1] << 8 * 2;
14824 v += data[i*4 + 2] << 8 * 1;
14825 v += data[i*4 + 3] << 8 * 0;
14826 a.push(v);
14827 }
14828 return a;
14829 }
14830
3af2954a
IC
14831 function byteArrayToBinaryString(data) {
14832 var bin = "";
14833 for (var i=0; i<data.length; i++) {
14834 bin += zfill(data[i].toString(2), 8);
14835 }
14836 return bin;
14837 }
14838
80c4dd2a
IC
14839 function hexStringToBinaryString(hexString) {
14840 binaryString = "";
14841 for (var i=0; i<hexString.length; i++) {
14842 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14843 }
14844 return binaryString;
14845 }
14846
14847 function binaryStringToWordArray(binary) {
14848 var aLen = binary.length / 32;
14849 var a = [];
14850 for (var i=0; i<aLen; i++) {
14851 var valueStr = binary.substring(0,32);
3af2954a 14852 var value = parseInt(valueStr, 2);
80c4dd2a
IC
14853 a.push(value);
14854 binary = binary.slice(32);
3af2954a 14855 }
80c4dd2a 14856 return a;
3af2954a
IC
14857 }
14858
14859 // Pad a numeric string on the left with zero digits until the given width
14860 // is reached.
14861 // Note this differs to the python implementation because it does not
14862 // handle numbers starting with a sign.
14863 function zfill(source, length) {
14864 source = source.toString();
14865 while (source.length < length) {
14866 source = '0' + source;
14867 }
14868 return source;
14869 }
14870
14871 init();
ebd8d4e8 14872
3af2954a 14873}
dc55c6b0 14874</script>
ab78acc6 14875 <script>(function() {
ebd8d4e8
IC
14876
14877 var mnemonic = new Mnemonic("english");
73161a92 14878 var seed = null
ebd8d4e8
IC
14879 var bip32RootKey = null;
14880 var bip32ExtendedKey = null;
ab78acc6 14881 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
14882 var addressRowTemplate = $("#address-row-template");
14883
80c4dd2a
IC
14884 var showIndex = true;
14885 var showAddress = true;
14886 var showPrivKey = true;
14887
ebd8d4e8 14888 var phraseChangeTimeoutEvent = null;
efe41586 14889 var rootKeyChangedTimeoutEvent = null;
ebd8d4e8
IC
14890
14891 var DOM = {};
d6cedc94
IC
14892 DOM.network = $(".network");
14893 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 14894 DOM.phrase = $(".phrase");
721b7284 14895 DOM.passphrase = $(".passphrase");
ebd8d4e8 14896 DOM.generate = $(".generate");
73161a92 14897 DOM.seed = $(".seed");
ebd8d4e8
IC
14898 DOM.rootKey = $(".root-key");
14899 DOM.extendedPrivKey = $(".extended-priv-key");
14900 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
14901 DOM.bip32tab = $("#bip32-tab");
14902 DOM.bip44tab = $("#bip44-tab");
14903 DOM.bip32panel = $("#bip32");
14904 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
14905 DOM.bip32path = $("#bip32-path");
14906 DOM.bip44path = $("#bip44-path");
14907 DOM.bip44purpose = $("#bip44 .purpose");
14908 DOM.bip44coin = $("#bip44 .coin");
14909 DOM.bip44account = $("#bip44 .account");
14910 DOM.bip44change = $("#bip44 .change");
14911 DOM.strength = $(".strength");
1975bfbc 14912 DOM.hardenedAddresses = $(".hardened-addresses");
ebd8d4e8
IC
14913 DOM.addresses = $(".addresses");
14914 DOM.rowsToAdd = $(".rows-to-add");
14915 DOM.more = $(".more");
14916 DOM.feedback = $(".feedback");
14917 DOM.tab = $(".derivation-type a");
14918 DOM.indexToggle = $(".index-toggle");
14919 DOM.addressToggle = $(".address-toggle");
14920 DOM.privateKeyToggle = $(".private-key-toggle");
14921
ebd8d4e8
IC
14922 function init() {
14923 // Events
d6cedc94 14924 DOM.network.on("change", networkChanged);
a19a5498
IC
14925 DOM.phrase.on("input", delayedPhraseChanged);
14926 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
14927 DOM.generate.on("click", generateClicked);
14928 DOM.more.on("click", showMore);
efe41586
IC
14929 DOM.rootKey.on("input", delayedRootKeyChanged);
14930 DOM.bip32path.on("input", calcForDerivationPath);
14931 DOM.bip44purpose.on("input", calcForDerivationPath);
14932 DOM.bip44coin.on("input", calcForDerivationPath);
14933 DOM.bip44account.on("input", calcForDerivationPath);
14934 DOM.bip44change.on("input", calcForDerivationPath);
14935 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
1975bfbc 14936 DOM.hardenedAddresses.on("change", calcForDerivationPath);
ebd8d4e8
IC
14937 DOM.indexToggle.on("click", toggleIndexes);
14938 DOM.addressToggle.on("click", toggleAddresses);
14939 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14940 disableForms();
14941 hidePending();
14942 hideValidationError();
ab78acc6 14943 populateNetworkSelect();
ebd8d4e8
IC
14944 }
14945
14946 // Event handlers
14947
d6cedc94 14948 function networkChanged(e) {
54563907
IC
14949 var networkIndex = e.target.value;
14950 networks[networkIndex].onSelect();
14951 if (seed != null) {
14952 phraseChanged();
14953 }
14954 else {
14955 rootKeyChanged();
14956 }
d6cedc94
IC
14957 }
14958
ebd8d4e8
IC
14959 function delayedPhraseChanged() {
14960 hideValidationError();
14961 showPending();
14962 if (phraseChangeTimeoutEvent != null) {
14963 clearTimeout(phraseChangeTimeoutEvent);
14964 }
14965 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14966 }
14967
14968 function phraseChanged() {
14969 showPending();
14970 hideValidationError();
14971 // Get the mnemonic phrase
14972 var phrase = DOM.phrase.val();
14973 var errorText = findPhraseErrors(phrase);
14974 if (errorText) {
14975 showValidationError(errorText);
14976 return;
14977 }
efe41586
IC
14978 // Calculate and display
14979 var passphrase = DOM.passphrase.val();
14980 calcBip32RootKeyFromSeed(phrase, passphrase);
14981 calcForDerivationPath();
14982 hidePending();
14983 }
14984
14985 function delayedRootKeyChanged() {
14986 // Warn if there is an existing mnemonic or passphrase.
14987 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
14988 if (!confirm("This will clear existing mnemonic and passphrase")) {
14989 DOM.rootKey.val(bip32RootKey);
14990 return
14991 }
14992 }
14993 hideValidationError();
14994 showPending();
14995 // Clear existing mnemonic and passphrase
14996 DOM.phrase.val("");
14997 DOM.passphrase.val("");
14998 seed = null;
14999 if (rootKeyChangedTimeoutEvent != null) {
15000 clearTimeout(rootKeyChangedTimeoutEvent);
15001 }
15002 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
15003 }
15004
15005 function rootKeyChanged() {
15006 showPending();
15007 hideValidationError();
15008 // Validate the root key TODO
15009 var rootKeyBase58 = DOM.rootKey.val();
15010 var errorText = validateRootKey(rootKeyBase58);
15011 if (errorText) {
15012 showValidationError(errorText);
15013 return;
15014 }
15015 // Calculate and display
15016 calcBip32RootKeyFromBase58(rootKeyBase58);
15017 calcForDerivationPath();
15018 hidePending();
15019 }
15020
15021 function calcForDerivationPath() {
15022 showPending();
15023 hideValidationError();
ebd8d4e8 15024 // Get the derivation path
38523d36
IC
15025 var derivationPath = getDerivationPath();
15026 var errorText = findDerivationPathErrors(derivationPath);
ebd8d4e8
IC
15027 if (errorText) {
15028 showValidationError(errorText);
15029 return;
15030 }
efe41586 15031 calcBip32ExtendedKey(derivationPath);
ebd8d4e8
IC
15032 displayBip32Info();
15033 hidePending();
15034 }
15035
15036 function generateClicked() {
15037 clearDisplay();
15038 showPending();
15039 setTimeout(function() {
15040 var phrase = generateRandomPhrase();
15041 if (!phrase) {
15042 return;
15043 }
15044 phraseChanged();
15045 }, 50);
15046 }
15047
ebd8d4e8 15048 function toggleIndexes() {
80c4dd2a 15049 showIndex = !showIndex;
ebd8d4e8
IC
15050 $("td.index span").toggleClass("invisible");
15051 }
15052
15053 function toggleAddresses() {
80c4dd2a 15054 showAddress = !showAddress;
ebd8d4e8
IC
15055 $("td.address span").toggleClass("invisible");
15056 }
15057
15058 function togglePrivateKeys() {
80c4dd2a 15059 showPrivKey = !showPrivKey;
ebd8d4e8
IC
15060 $("td.privkey span").toggleClass("invisible");
15061 }
15062
15063 // Private methods
15064
15065 function generateRandomPhrase() {
15066 if (!hasStrongRandom()) {
15067 var errorText = "This browser does not support strong randomness";
15068 showValidationError(errorText);
15069 return;
15070 }
15071 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
15072 var strength = numWords / 3 * 32;
15073 var words = mnemonic.generate(strength);
15074 DOM.phrase.val(words);
15075 return words;
15076 }
15077
efe41586 15078 function calcBip32RootKeyFromSeed(phrase, passphrase) {
73161a92 15079 seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 15080 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
efe41586
IC
15081 }
15082
15083 function calcBip32RootKeyFromBase58(rootKeyBase58) {
3821c0d3 15084 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
15085 }
15086
15087 function calcBip32ExtendedKey(path) {
ebd8d4e8
IC
15088 bip32ExtendedKey = bip32RootKey;
15089 // Derive the key from the path
15090 var pathBits = path.split("/");
15091 for (var i=0; i<pathBits.length; i++) {
15092 var bit = pathBits[i];
15093 var index = parseInt(bit);
15094 if (isNaN(index)) {
15095 continue;
15096 }
15097 var hardened = bit[bit.length-1] == "'";
15098 if (hardened) {
15099 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15100 }
15101 else {
15102 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15103 }
15104 }
15105 }
15106
15107 function showValidationError(errorText) {
15108 DOM.feedback
15109 .text(errorText)
15110 .show();
15111 }
15112
15113 function hideValidationError() {
15114 DOM.feedback
15115 .text("")
15116 .hide();
15117 }
15118
15119 function findPhraseErrors(phrase) {
15120 // TODO make this right
15121 // Preprocess the words
783981de 15122 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
15123 var parts = phrase.split(" ");
15124 var proper = [];
15125 for (var i=0; i<parts.length; i++) {
15126 var part = parts[i];
15127 if (part.length > 0) {
15128 // TODO check that lowercasing is always valid to do
15129 proper.push(part.toLowerCase());
15130 }
15131 }
ebd8d4e8 15132 var properPhrase = proper.join(' ');
563e401a
IC
15133 // Check each word
15134 for (var i=0; i<proper.length; i++) {
15135 var word = proper[i];
15136 if (WORDLISTS["english"].indexOf(word) == -1) {
15137 console.log("Finding closest match to " + word);
15138 var nearestWord = findNearestWord(word);
15139 return word + " not in wordlist, did you mean " + nearestWord + "?";
15140 }
15141 }
ebd8d4e8
IC
15142 // Check the words are valid
15143 var isValid = mnemonic.check(properPhrase);
15144 if (!isValid) {
15145 return "Invalid mnemonic";
15146 }
15147 return false;
15148 }
15149
efe41586
IC
15150 function validateRootKey(rootKeyBase58) {
15151 try {
15152 bitcoin.HDNode.fromBase58(rootKeyBase58);
15153 }
15154 catch (e) {
15155 return "Invalid root key";
15156 }
15157 return "";
15158 }
15159
38523d36
IC
15160 function getDerivationPath() {
15161 if (DOM.bip44tab.hasClass("active")) {
15162 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
15163 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
15164 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
15165 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
15166 var path = "m/";
15167 path += purpose + "'/";
15168 path += coin + "'/";
15169 path += account + "'/";
15170 path += change;
15171 DOM.bip44path.val(path);
15172 var derivationPath = DOM.bip44path.val();
15173 console.log("Using derivation path from BIP44 tab: " + derivationPath);
15174 return derivationPath;
15175 }
15176 else if (DOM.bip32tab.hasClass("active")) {
15177 var derivationPath = DOM.bip32path.val();
15178 console.log("Using derivation path from BIP32 tab: " + derivationPath);
15179 return derivationPath;
15180 }
15181 else {
15182 console.log("Unknown derivation path");
15183 }
15184 }
15185
ebd8d4e8 15186 function findDerivationPathErrors(path) {
30c9e79d
IC
15187 // TODO is not perfect but is better than nothing
15188 // Inspired by
15189 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
15190 // and
15191 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
15192 var maxDepth = 255; // TODO verify this!!
15193 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
15194 if (path[0] != "m") {
15195 return "First character must be 'm'";
15196 }
15197 if (path.length > 1) {
15198 if (path[1] != "/") {
15199 return "Separator must be '/'";
15200 }
15201 var indexes = path.split("/");
15202 if (indexes.length > maxDepth) {
15203 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15204 }
15205 for (var depth = 1; depth<indexes.length; depth++) {
15206 var index = indexes[depth];
15207 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
15208 if (invalidChars.length > 0) {
15209 return "Invalid characters " + invalidChars + " found at depth " + depth;
15210 }
15211 var indexValue = parseInt(index.replace("'", ""));
15212 if (isNaN(depth)) {
15213 return "Invalid number at depth " + depth;
15214 }
15215 if (indexValue > maxIndexValue) {
15216 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15217 }
15218 }
15219 }
ebd8d4e8
IC
15220 return false;
15221 }
15222
15223 function displayBip32Info() {
15224 // Display the key
73161a92 15225 DOM.seed.val(seed);
ebd8d4e8
IC
15226 var rootKey = bip32RootKey.toBase58();
15227 DOM.rootKey.val(rootKey);
15228 var extendedPrivKey = bip32ExtendedKey.toBase58();
15229 DOM.extendedPrivKey.val(extendedPrivKey);
15230 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15231 DOM.extendedPubKey.val(extendedPubKey);
15232 // Display the addresses and privkeys
15233 clearAddressesList();
15234 displayAddresses(0, 20);
15235 }
15236
15237 function displayAddresses(start, total) {
15238 for (var i=0; i<total; i++) {
80c4dd2a
IC
15239 var index = i + start;
15240 new TableRow(index);
15241 }
15242 }
15243
15244 function TableRow(index) {
15245
1975bfbc
IC
15246 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
15247
80c4dd2a
IC
15248 function init() {
15249 calculateValues();
15250 }
15251
15252 function calculateValues() {
15253 setTimeout(function() {
1975bfbc
IC
15254 var key = "";
15255 if (useHardenedAddresses) {
15256 key = bip32ExtendedKey.deriveHardened(index);
15257 }
15258 else {
15259 key = bip32ExtendedKey.derive(index);
15260 }
80c4dd2a
IC
15261 var address = key.getAddress().toString();
15262 var privkey = key.privKey.toWIF(network);
38523d36 15263 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
15264 if (useHardenedAddresses) {
15265 indexText = indexText + "'";
15266 }
38523d36 15267 addAddressToList(indexText, address, privkey);
80c4dd2a 15268 }, 50)
ebd8d4e8 15269 }
80c4dd2a
IC
15270
15271 init();
15272
ebd8d4e8
IC
15273 }
15274
15275 function showMore() {
15276 var start = DOM.addresses.children().length;
15277 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15278 if (isNaN(rowsToAdd)) {
15279 rowsToAdd = 20;
15280 DOM.rowsToAdd.val("20");
15281 }
15282 if (rowsToAdd > 200) {
15283 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
15284 msg += "Do you want to continue?";
15285 if (!confirm(msg)) {
15286 return;
15287 }
15288 }
ebd8d4e8 15289 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
15290 }
15291
15292 function clearDisplay() {
15293 clearAddressesList();
15294 clearKey();
15295 hideValidationError();
15296 }
15297
15298 function clearAddressesList() {
15299 DOM.addresses.empty();
15300 }
15301
15302 function clearKey() {
15303 DOM.rootKey.val("");
15304 DOM.extendedPrivKey.val("");
15305 DOM.extendedPubKey.val("");
15306 }
15307
38523d36 15308 function addAddressToList(indexText, address, privkey) {
ebd8d4e8 15309 var row = $(addressRowTemplate.html());
80c4dd2a
IC
15310 // Elements
15311 var indexCell = row.find(".index span");
15312 var addressCell = row.find(".address span");
15313 var privkeyCell = row.find(".privkey span");
15314 // Content
ae30fed8 15315 indexCell.text(indexText);
80c4dd2a
IC
15316 addressCell.text(address);
15317 privkeyCell.text(privkey);
15318 // Visibility
15319 if (!showIndex) {
15320 indexCell.addClass("invisible");
15321 }
15322 if (!showAddress) {
15323 addressCell.addClass("invisible");
15324 }
15325 if (!showPrivKey) {
6d628db7 15326 privkeyCell.addClass("invisible");
80c4dd2a 15327 }
ebd8d4e8
IC
15328 DOM.addresses.append(row);
15329 }
15330
15331 function hasStrongRandom() {
15332 return 'crypto' in window && window['crypto'] !== null;
15333 }
15334
15335 function disableForms() {
15336 $("form").on("submit", function(e) {
15337 e.preventDefault();
15338 });
15339 }
15340
ebd8d4e8
IC
15341 function parseIntNoNaN(val, defaultVal) {
15342 var v = parseInt(val);
15343 if (isNaN(v)) {
15344 return defaultVal;
15345 }
15346 return v;
15347 }
15348
15349 function showPending() {
15350 DOM.feedback
15351 .text("Calculating...")
15352 .show();
15353 }
15354
563e401a
IC
15355 function findNearestWord(word) {
15356 var words = WORDLISTS["english"];
15357 var minDistance = 99;
15358 var closestWord = words[0];
15359 for (var i=0; i<words.length; i++) {
15360 var comparedTo = words[i];
15361 var distance = Levenshtein.get(word, comparedTo);
15362 if (distance < minDistance) {
15363 closestWord = comparedTo;
15364 minDistance = distance;
15365 }
15366 }
15367 return closestWord;
15368 }
15369
ebd8d4e8
IC
15370 function hidePending() {
15371 DOM.feedback
15372 .text("")
15373 .hide();
15374 }
15375
ab78acc6
IC
15376 function populateNetworkSelect() {
15377 for (var i=0; i<networks.length; i++) {
15378 var network = networks[i];
15379 var option = $("<option>");
15380 option.attr("value", i);
15381 option.text(network.name);
15382 DOM.phraseNetwork.append(option);
15383 }
15384 }
15385
15386 var networks = [
15387 {
15388 name: "Bitcoin",
15389 onSelect: function() {
15390 network = bitcoin.networks.bitcoin;
15391 DOM.bip44coin.val(0);
ab78acc6
IC
15392 },
15393 },
15394 {
15395 name: "Bitcoin Testnet",
15396 onSelect: function() {
15397 network = bitcoin.networks.testnet;
15398 DOM.bip44coin.val(1);
ab78acc6
IC
15399 },
15400 },
15401 {
15402 name: "Litecoin",
15403 onSelect: function() {
15404 network = bitcoin.networks.litecoin;
15405 DOM.bip44coin.val(2);
15406 },
15407 },
15408 {
15409 name: "Dogecoin",
15410 onSelect: function() {
15411 network = bitcoin.networks.dogecoin;
15412 DOM.bip44coin.val(3);
15413 },
15414 },
d5dc92fd
IC
15415 {
15416 name: "ShadowCash",
15417 onSelect: function() {
15418 network = bitcoin.networks.shadow;
15419 DOM.bip44coin.val(35);
15420 },
15421 },
15422 {
15423 name: "ShadowCash Testnet",
15424 onSelect: function() {
15425 network = bitcoin.networks.shadowtn;
15426 DOM.bip44coin.val(1);
15427 },
15428 },
a3baa26e
IC
15429 {
15430 name: "Viacoin",
15431 onSelect: function() {
15432 network = bitcoin.networks.viacoin;
15433 DOM.bip44coin.val(14);
15434 },
15435 },
15436 {
15437 name: "Viacoin Testnet",
15438 onSelect: function() {
15439 network = bitcoin.networks.viacointestnet;
15440 DOM.bip44coin.val(1);
15441 },
15442 },
15443 {
15444 name: "Jumbucks",
15445 onSelect: function() {
15446 network = bitcoin.networks.jumbucks;
15447 DOM.bip44coin.val(26);
15448 },
15449 },
5c434a8a
CM
15450 {
15451 name: "CLAM",
15452 onSelect: function() {
15453 network = bitcoin.networks.clam;
15454 DOM.bip44coin.val(23);
15455 },
15456 },
5493efc3 15457 {
15458 name: "DASH",
15459 onSelect: function() {
15460 network = bitcoin.networks.dash;
15461 DOM.bip44coin.val(5);
15462 },
15463 },
07ac4350 15464 {
15465 name: "Namecoin",
15466 onSelect: function() {
15467 network = bitcoin.networks.namecoin;
15468 DOM.bip44coin.val(7);
15469 },
15470 },
15471 {
15472 name: "Peercoin",
15473 onSelect: function() {
15474 network = bitcoin.networks.peercoin;
15475 DOM.bip44coin.val(6);
15476 },
15477 },
ab78acc6
IC
15478 ]
15479
ebd8d4e8
IC
15480 init();
15481
15482})();
dc55c6b0 15483</script>
ebd8d4e8
IC
15484 </body>
15485</html>