]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Generate button moved for simpler user experience
[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 }
b0818b31
IC
47 .strength {
48 /* override mobile width from bootstrap */
49 width: auto!important;
50 display: inline-block;
51 }
ab78acc6
IC
52 </style>
53 </head>
54 <body>
55 <div class="container">
3af2954a 56
ab78acc6
IC
57 <h1 class="text-center">Mnemonic Code Converter</h1>
58 <hr>
59 <div class="row">
60 <div class="col-md-12">
61 <h2>Mnemonic</h2>
62 <form class="form-horizontal" role="form">
63 <div class="col-sm-2"></div>
64 <div class="col-sm-10">
65 <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>
66 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
67 </div>
68 <div class="form-group">
b0818b31 69 <label class="col-sm-2 control-label"></label>
ab78acc6 70 <div class="col-sm-10">
b0818b31
IC
71 <div class="form-inline">
72 <div class="input-group-inline">
73 <button class="btn generate">Generate</button>
74 <span>a random</span>
75 <select id="strength" class="strength form-control">
76 <option value="3">3</option>
77 <option value="6">6</option>
78 <option value="9">9</option>
79 <option value="12">12</option>
80 <option value="15" selected>15</option>
81 <option value="18">18</option>
82 <option value="21">21</option>
83 <option value="24">24</option>
84 </select>
85 word mnemonic, or enter your own below.
86 </div>
87 </div>
ab78acc6
IC
88 </div>
89 </div>
90 <div class="form-group">
b0818b31 91 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
ab78acc6 92 <div class="col-sm-10">
b0818b31 93 <textarea id="phrase" class="phrase form-control"></textarea>
ab78acc6
IC
94 </div>
95 </div>
96 <div class="form-group">
97 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
98 <div class="col-sm-10">
99 <textarea id="passphrase" class="passphrase form-control"></textarea>
100 </div>
101 </div>
73161a92
IC
102 <div class="form-group">
103 <label for="seed" class="col-sm-2 control-label">BIP39 Seed</label>
104 <div class="col-sm-10">
105 <textarea id="seed" class="seed form-control" readonly="readonly"></textarea>
106 </div>
107 </div>
ab78acc6
IC
108 <div class="form-group">
109 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
110 <div class="col-sm-10">
111 <select id="network-phrase" class="network form-control">
112 <!-- populated by javascript -->
113 </select>
114 </div>
115 </div>
116 <div class="form-group">
117 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
118 <div class="col-sm-10">
efe41586 119 <textarea id="root-key" class="root-key form-control"></textarea>
ab78acc6
IC
120 </div>
121 </div>
122 </form>
123 </div>
124 </div>
3af2954a 125
ab78acc6 126 <hr>
3af2954a 127
ab78acc6
IC
128 <div class="row">
129 <div class="col-md-12">
130 <h2>Derivation Path</h2>
131 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 132 <li id="bip44-tab" class="active">
ab78acc6
IC
133 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
134 </li>
135 <li id="bip32-tab">
136 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
137 </li>
138 </ul>
139 <div class="derivation-type tab-content">
d5dc92fd 140 <div id="bip44" class="tab-pane active">
ab78acc6
IC
141 <form class="form-horizontal" role="form">
142 <br>
143 <div class="col-sm-2"></div>
144 <div class="col-sm-10">
145 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
146 </div>
147 <div class="form-group">
148 <label for="purpose" class="col-sm-2 control-label">
149 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
150 </label>
151 <div class="col-sm-10">
152 <input id="purpose" type="text" class="purpose form-control" value="44">
153 </div>
154 </div>
155 <div class="form-group">
156 <label for="coin" class="col-sm-2 control-label">
157 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
158 </label>
159 <div class="col-sm-10">
160 <input id="coin" type="text" class="coin form-control" value="0">
161 </div>
162 </div>
163 <div class="form-group">
164 <label for="account" class="col-sm-2 control-label">
165 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
166 </label>
167 <div class="col-sm-10">
168 <input id="account" type="text" class="account form-control" value="0">
169 </div>
170 </div>
171 <div class="form-group">
172 <label for="change" class="col-sm-2 control-label">
173 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
174 </label>
175 <div class="col-sm-10">
176 <input id="change" type="text" class="change form-control" value="0">
177 </div>
178 </div>
179 <div class="form-group">
180 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
181 <div class="col-sm-10">
182 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
183 </div>
184 </div>
185 </form>
186 </div>
187 <div id="bip32" class="tab-pane">
188 <form class="form-horizontal" role="form">
189 <br>
190 <div class="col-sm-2"></div>
191 <div class="col-sm-10">
192 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
193 </div>
194 <div class="form-group">
195 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
196 <div class="col-sm-10">
197 <input id="bip32-path" type="text" class="path form-control" value="m/0">
198 </div>
199 </div>
1975bfbc
IC
200 <div class="form-group">
201 <div class="col-sm-2"></div>
202 <label class="col-sm-10">
203 <input class="hardened-addresses" type="checkbox">
204 Use hardened addresses
205 </label>
206 </div>
d5dc92fd
IC
207 <div class="form-group">
208 <label class="col-sm-2 control-label">Hive Wallet</label>
209 <div class="col-sm-10">
210 <p class="form-control no-border">
211 Use path <code>m/0'/0</code>.
212 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
213 </p>
214 </div>
215 </div>
216 <div class="form-group">
217 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
218 <div class="col-sm-10">
219 <p class="form-control no-border">
220 Use path <code>m/44'/0'/0'/0</code>.
221 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
222 </p>
223 </div>
224 </div>
1975bfbc
IC
225 <div class="form-group">
226 <label for="core-path" class="col-sm-2 control-label">Bitcoin Core</label>
227 <div class="col-sm-10">
228 <p class="form-control no-border">
229 Use path <code>m/0'/0'</code> with hardened addresses.
230 For more info see the <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
231 </p>
232 </div>
233 </div>
aa51da11
IC
234 <div class="form-group">
235 <label class="col-sm-2 control-label">Block Explorers</label>
236 <div class="col-sm-10">
237 <p class="form-control no-border">
238 Use path <code>m/44'/0'/0'</code>.
239 Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xpriv</code> key.
240 </p>
241 </div>
242 </div>
ab78acc6
IC
243 </form>
244 </div>
245 </div>
246 <form class="form-horizontal" role="form">
247 <div class="form-group">
248 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
249 <div class="col-sm-10">
250 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
251 </div>
252 </div>
253 <div class="form-group">
254 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
255 <div class="col-sm-10">
256 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
257 </div>
258 </div>
259 </form>
260 </div>
261 </div>
3af2954a 262
ab78acc6 263 <hr>
3af2954a 264
ab78acc6
IC
265 <div class="row">
266 <div class="col-md-12">
267 <h2>Derived Addresses</h2>
268 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
269 <table class="table table-striped">
270 <thead>
271 <th>
272 <div class="input-group">
ae30fed8 273 Path&nbsp;&nbsp;
ab78acc6
IC
274 <button class="index-toggle">Toggle</button>
275 </div>
276 </th>
277 <th>
278 <div class="input-group">
279 Address&nbsp;&nbsp;
280 <button class="address-toggle">Toggle</button>
281 </div>
282 </th>
283 <th>
284 <div class="input-group">
285 Private Key&nbsp;&nbsp;
286 <button class="private-key-toggle">Toggle</button>
287 </div>
288 </th>
289 </thead>
290 <tbody class="addresses">
291 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
292 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
293 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
294 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
295 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
296 </tbody>
297 </table>
298 </div>
299 </div>
300 <span>Show next </button>
301 <input type="number" class="rows-to-add" value="20">
302 <button class="more">Show</button>
3af2954a 303
ab78acc6 304 <hr>
3af2954a 305
ab78acc6
IC
306 <div class="row">
307 <div class="col-md-12">
308 <h2>More info</h2>
309 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
310 <p>
311 Read more at the
312 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
313 </p>
314 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
315 <p>
316 Read more at the
317 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
318 and see the demo at
319 <a href="http://bip32.org/" target="_blank">bip32.org</a>
320 </p>
321 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
322 <p>
323 Read more at the
324 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
325 </p>
326 <h3>Private Keys</h3>
327 <p>
328 Use private keys at
329 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
330 but be careful - it can be easy to make mistakes if you
331 don't know what you're doing
332 </p>
333 </div>
334 </div>
3af2954a 335
ab78acc6 336 <hr>
3af2954a 337
ab78acc6
IC
338 <div class="row">
339 <div class="col-md-12">
3af2954a 340
ab78acc6 341 <h2>Offline Usage</h2>
3af2954a 342
ab78acc6
IC
343 <p>
344 You can use this tool without having to be online.
345 </p>
346 <p>
347 In your browser, select file save-as, and save this page
348 as a file.
349 </p>
350 <p>
351 Double-click that file to open it in a browser
352 on any offline computer.
353 </p>
354 <p>
355 Alternatively, download it from
356 <a href="https://github.com/dcpos/bip39">
357 https://github.com/dcpos/bip39
358 </a>
3af2954a 359
ab78acc6
IC
360 </div>
361 </div>
3af2954a 362
ab78acc6 363 <hr>
3af2954a 364
ab78acc6
IC
365 <div class="row">
366 <div class="col-md-12">
3af2954a 367
ab78acc6 368 <h2>This project is 100% open-source code</h2>
3af2954a 369
ab78acc6
IC
370 <p>
371 <span>Get the source code at - </span>
372 <a href="https://github.com/dcpos/bip39" target="_blank">
373 https://github.com/dcpos/bip39
374 </a>
375 </p>
3af2954a 376
ab78acc6 377 <h3>Libraries</h3>
3af2954a 378
ab78acc6
IC
379 <p>
380 <span>BitcoinJS - </span>
381 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
382 https://github.com/bitcoinjs/bitcoinjs-lib
383 </a>
384 </p>
3af2954a 385
ab78acc6
IC
386 <p>
387 <span>jsBIP39 - </span>
388 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
389 https://github.com/iancoleman/jsbip39
390 </a>
391 </p>
3af2954a 392
ab78acc6
IC
393 <p>
394 <span>sjcl - </span>
395 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
396 https://github.com/bitwiseshiftleft/sjcl
397 </a>
398 </p>
3af2954a 399
ab78acc6
IC
400 <p>
401 <span>jQuery - </span>
402 <a href="https://jquery.com/" target="_blank">
403 https://jquery.com/
404 </a>
405 </p>
3af2954a 406
ab78acc6
IC
407 <p>
408 <span>Twitter Bootstrap - </span>
409 <a href="http://getbootstrap.com/" target="_blank">
410 http://getbootstrap.com/
411 </a>
412 </p>
3af2954a 413
ab78acc6
IC
414 </div>
415 </div>
3af2954a 416
ab78acc6 417 </div>
3af2954a 418
ab78acc6
IC
419 <div class="feedback-container">
420 <div class="feedback">Loading...</div>
421 </div>
3af2954a 422
ab78acc6
IC
423 <script type="text/template" id="address-row-template">
424 <tr>
425 <td class="index"><span></span></td>
426 <td class="address"><span></span></td>
427 <td class="privkey"><span></span></td>
428 </tr>
429 </script>
430 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
431!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)
432},_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))
433},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});
434</script>
435 <script>/*!
436 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
437 * Copyright 2011-2014 Twitter, Inc.
438 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
439 */
440if("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
441 <script>(function() {
442 'use strict';
443
444 /**
445 * Extend an Object with another Object's properties.
446 *
447 * The source objects are specified as additional arguments.
448 *
449 * @param dst Object the object to extend.
450 *
451 * @return Object the final object.
452 */
453 var _extend = function(dst) {
454 var sources = Array.prototype.slice.call(arguments, 1);
455 for (var i=0; i<sources.length; ++i) {
456 var src = sources[i];
457 for (var p in src) {
458 if (src.hasOwnProperty(p)) dst[p] = src[p];
459 }
460 }
461 return dst;
462 };
463
464
465 /**
466 * Defer execution of given function.
467 * @param {Function} func
468 */
469 var _defer = function(func) {
470 if (typeof setImmediate === 'function') {
471 return setImmediate(func);
472 } else {
473 return setTimeout(func, 0);
474 }
475 };
476
477 /**
478 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
479 */
480 var Levenshtein = {
481 /**
482 * Calculate levenshtein distance of the two strings.
483 *
484 * @param str1 String the first string.
485 * @param str2 String the second string.
486 * @return Integer the levenshtein distance (0 and above).
487 */
488 get: function(str1, str2) {
489 // base cases
490 if (str1 === str2) return 0;
491 if (str1.length === 0) return str2.length;
492 if (str2.length === 0) return str1.length;
493
494 // two rows
495 var prevRow = new Array(str2.length + 1),
496 curCol, nextCol, i, j, tmp;
497
498 // initialise previous row
499 for (i=0; i<prevRow.length; ++i) {
500 prevRow[i] = i;
501 }
502
503 // calculate current row distance from previous row
504 for (i=0; i<str1.length; ++i) {
505 nextCol = i + 1;
506
507 for (j=0; j<str2.length; ++j) {
508 curCol = nextCol;
509
510 // substution
511 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
512 // insertion
513 tmp = curCol + 1;
514 if (nextCol > tmp) {
515 nextCol = tmp;
516 }
517 // deletion
518 tmp = prevRow[j + 1] + 1;
519 if (nextCol > tmp) {
520 nextCol = tmp;
521 }
522
523 // copy current col value into previous (in preparation for next iteration)
524 prevRow[j] = curCol;
525 }
526
527 // copy last col value into previous (in preparation for next iteration)
528 prevRow[j] = nextCol;
529 }
530
531 return nextCol;
532 },
533
534 /**
535 * Asynchronously calculate levenshtein distance of the two strings.
536 *
537 * @param str1 String the first string.
538 * @param str2 String the second string.
539 * @param cb Function callback function with signature: function(Error err, int distance)
540 * @param [options] Object additional options.
541 * @param [options.progress] Function progress callback with signature: function(percentComplete)
542 */
543 getAsync: function(str1, str2, cb, options) {
544 options = _extend({}, {
545 progress: null
546 }, options);
547
548 // base cases
549 if (str1 === str2) return cb(null, 0);
550 if (str1.length === 0) return cb(null, str2.length);
551 if (str2.length === 0) return cb(null, str1.length);
552
553 // two rows
554 var prevRow = new Array(str2.length + 1),
555 curCol, nextCol,
556 i, j, tmp,
557 startTime, currentTime;
558
559 // initialise previous row
560 for (i=0; i<prevRow.length; ++i) {
561 prevRow[i] = i;
562 }
563
564 nextCol = 1;
565 i = 0;
566 j = -1;
567
568 var __calculate = function() {
569 // reset timer
570 startTime = new Date().valueOf();
571 currentTime = startTime;
572
573 // keep going until one second has elapsed
574 while (currentTime - startTime < 1000) {
575 // reached end of current row?
576 if (str2.length <= (++j)) {
577 // copy current into previous (in preparation for next iteration)
578 prevRow[j] = nextCol;
579
580 // if already done all chars
581 if (str1.length <= (++i)) {
582 return cb(null, nextCol);
583 }
584 // else if we have more left to do
585 else {
586 nextCol = i + 1;
587 j = 0;
588 }
589 }
590
591 // calculation
592 curCol = nextCol;
593
594 // substution
595 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
596 // insertion
597 tmp = curCol + 1;
598 if (nextCol > tmp) {
599 nextCol = tmp;
600 }
601 // deletion
602 tmp = prevRow[j + 1] + 1;
603 if (nextCol > tmp) {
604 nextCol = tmp;
605 }
606
607 // copy current into previous (in preparation for next iteration)
608 prevRow[j] = curCol;
609
610 // get current time
611 currentTime = new Date().valueOf();
612 }
613
614 // send a progress update?
615 if (null !== options.progress) {
616 try {
617 options.progress.call(null, (i * 100.0/ str1.length));
618 } catch (err) {
619 return cb('Progress callback: ' + err.toString());
620 }
621 }
622
623 // next iteration
624 _defer(__calculate);
625 };
626
627 __calculate();
628 }
629
630 };
631
632 // amd
633 if (typeof define !== "undefined" && define !== null && define.amd) {
634 define(function() {
635 return Levenshtein;
636 });
637 }
638 // commonjs
639 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
640 module.exports = Levenshtein;
641 }
642 // web worker
643 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
644 self.Levenshtein = Levenshtein;
645 }
646 // browser main thread
647 else if (typeof window !== "undefined" && window !== null) {
648 window.Levenshtein = Levenshtein;
649 }
650}());
651
652</script>
ab78acc6
IC
653 <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){
654// (public) Constructor
655function BigInteger(a, b, c) {
656 if (!(this instanceof BigInteger))
657 return new BigInteger(a, b, c)
3af2954a 658
ab78acc6
IC
659 if (a != null) {
660 if ("number" == typeof a) this.fromNumber(a, b, c)
661 else if (b == null && "string" != typeof a) this.fromString(a, 256)
662 else this.fromString(a, b)
663 }
664}
3af2954a 665
ab78acc6 666var proto = BigInteger.prototype
3af2954a 667
ab78acc6
IC
668// duck-typed isBigInteger
669proto.__bigi = require('../package.json').version
670BigInteger.isBigInteger = function (obj, check_ver) {
671 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
672}
3af2954a 673
ab78acc6
IC
674// Bits per digit
675var dbits
3af2954a 676
ab78acc6
IC
677// am: Compute w_j += (x*this_i), propagate carries,
678// c is initial carry, returns final carry.
679// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
680// We need to select the fastest one that works in this environment.
3af2954a 681
ab78acc6
IC
682// am1: use a single mult and divide to get the high bits,
683// max digit bits should be 26 because
684// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
685function am1(i, x, w, j, c, n) {
686 while (--n >= 0) {
687 var v = x * this[i++] + w[j] + c
688 c = Math.floor(v / 0x4000000)
689 w[j++] = v & 0x3ffffff
3af2954a 690 }
ab78acc6
IC
691 return c
692}
693// am2 avoids a big mult-and-extract completely.
694// Max digit bits should be <= 30 because we do bitwise ops
695// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
696function am2(i, x, w, j, c, n) {
697 var xl = x & 0x7fff,
698 xh = x >> 15
699 while (--n >= 0) {
700 var l = this[i] & 0x7fff
701 var h = this[i++] >> 15
702 var m = xh * l + h * xl
703 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
704 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
705 w[j++] = l & 0x3fffffff
706 }
707 return c
708}
709// Alternately, set max digit bits to 28 since some
710// browsers slow down when dealing with 32-bit numbers.
711function am3(i, x, w, j, c, n) {
712 var xl = x & 0x3fff,
713 xh = x >> 14
714 while (--n >= 0) {
715 var l = this[i] & 0x3fff
716 var h = this[i++] >> 14
717 var m = xh * l + h * xl
718 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
719 c = (l >> 28) + (m >> 14) + xh * h
720 w[j++] = l & 0xfffffff
3af2954a 721 }
ab78acc6
IC
722 return c
723}
3af2954a 724
ab78acc6
IC
725// wtf?
726BigInteger.prototype.am = am1
727dbits = 26
3af2954a 728
ab78acc6
IC
729BigInteger.prototype.DB = dbits
730BigInteger.prototype.DM = ((1 << dbits) - 1)
731var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 732
ab78acc6
IC
733var BI_FP = 52
734BigInteger.prototype.FV = Math.pow(2, BI_FP)
735BigInteger.prototype.F1 = BI_FP - dbits
736BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 737
ab78acc6
IC
738// Digit conversions
739var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
740var BI_RC = new Array()
741var rr, vv
742rr = "0".charCodeAt(0)
743for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
744rr = "a".charCodeAt(0)
745for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
746rr = "A".charCodeAt(0)
747for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 748
ab78acc6
IC
749function int2char(n) {
750 return BI_RM.charAt(n)
751}
3af2954a 752
ab78acc6
IC
753function intAt(s, i) {
754 var c = BI_RC[s.charCodeAt(i)]
755 return (c == null) ? -1 : c
756}
3af2954a 757
ab78acc6
IC
758// (protected) copy this to r
759function bnpCopyTo(r) {
760 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
761 r.t = this.t
762 r.s = this.s
763}
3af2954a 764
ab78acc6
IC
765// (protected) set from integer value x, -DV <= x < DV
766function bnpFromInt(x) {
767 this.t = 1
768 this.s = (x < 0) ? -1 : 0
769 if (x > 0) this[0] = x
770 else if (x < -1) this[0] = x + DV
771 else this.t = 0
772}
3af2954a 773
ab78acc6
IC
774// return bigint initialized to value
775function nbv(i) {
776 var r = new BigInteger()
777 r.fromInt(i)
778 return r
779}
3af2954a 780
ab78acc6
IC
781// (protected) set from string and radix
782function bnpFromString(s, b) {
783 var self = this
3af2954a 784
ab78acc6
IC
785 var k
786 if (b == 16) k = 4
787 else if (b == 8) k = 3
788 else if (b == 256) k = 8; // byte array
789 else if (b == 2) k = 1
790 else if (b == 32) k = 5
791 else if (b == 4) k = 2
792 else {
793 self.fromRadix(s, b)
794 return
795 }
796 self.t = 0
797 self.s = 0
798 var i = s.length,
799 mi = false,
800 sh = 0
801 while (--i >= 0) {
802 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
803 if (x < 0) {
804 if (s.charAt(i) == "-") mi = true
805 continue
806 }
807 mi = false
808 if (sh == 0)
809 self[self.t++] = x
810 else if (sh + k > self.DB) {
811 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
812 self[self.t++] = (x >> (self.DB - sh))
813 } else
814 self[self.t - 1] |= x << sh
815 sh += k
816 if (sh >= self.DB) sh -= self.DB
817 }
818 if (k == 8 && (s[0] & 0x80) != 0) {
819 self.s = -1
820 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
821 }
822 self.clamp()
823 if (mi) BigInteger.ZERO.subTo(self, self)
824}
3af2954a 825
ab78acc6
IC
826// (protected) clamp off excess high words
827function bnpClamp() {
828 var c = this.s & this.DM
829 while (this.t > 0 && this[this.t - 1] == c)--this.t
830}
3af2954a 831
ab78acc6
IC
832// (public) return string representation in given radix
833function bnToString(b) {
834 var self = this
835 if (self.s < 0) return "-" + self.negate()
836 .toString(b)
837 var k
838 if (b == 16) k = 4
839 else if (b == 8) k = 3
840 else if (b == 2) k = 1
841 else if (b == 32) k = 5
842 else if (b == 4) k = 2
843 else return self.toRadix(b)
844 var km = (1 << k) - 1,
845 d, m = false,
846 r = "",
847 i = self.t
848 var p = self.DB - (i * self.DB) % k
849 if (i-- > 0) {
850 if (p < self.DB && (d = self[i] >> p) > 0) {
851 m = true
852 r = int2char(d)
853 }
854 while (i >= 0) {
855 if (p < k) {
856 d = (self[i] & ((1 << p) - 1)) << (k - p)
857 d |= self[--i] >> (p += self.DB - k)
858 } else {
859 d = (self[i] >> (p -= k)) & km
860 if (p <= 0) {
861 p += self.DB
862 --i
863 }
864 }
865 if (d > 0) m = true
866 if (m) r += int2char(d)
3af2954a 867 }
3af2954a 868 }
ab78acc6
IC
869 return m ? r : "0"
870}
3af2954a 871
ab78acc6
IC
872// (public) -this
873function bnNegate() {
874 var r = new BigInteger()
875 BigInteger.ZERO.subTo(this, r)
876 return r
877}
3af2954a 878
ab78acc6
IC
879// (public) |this|
880function bnAbs() {
881 return (this.s < 0) ? this.negate() : this
882}
3af2954a 883
ab78acc6
IC
884// (public) return + if this > a, - if this < a, 0 if equal
885function bnCompareTo(a) {
886 var r = this.s - a.s
887 if (r != 0) return r
888 var i = this.t
889 r = i - a.t
890 if (r != 0) return (this.s < 0) ? -r : r
891 while (--i >= 0)
892 if ((r = this[i] - a[i]) != 0) return r
893 return 0
894}
3af2954a 895
ab78acc6
IC
896// returns bit length of the integer x
897function nbits(x) {
898 var r = 1,
899 t
900 if ((t = x >>> 16) != 0) {
901 x = t
902 r += 16
903 }
904 if ((t = x >> 8) != 0) {
905 x = t
906 r += 8
907 }
908 if ((t = x >> 4) != 0) {
909 x = t
910 r += 4
911 }
912 if ((t = x >> 2) != 0) {
913 x = t
914 r += 2
3af2954a 915 }
ab78acc6
IC
916 if ((t = x >> 1) != 0) {
917 x = t
918 r += 1
919 }
920 return r
921}
922
923// (public) return the number of bits in "this"
924function bnBitLength() {
925 if (this.t <= 0) return 0
926 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
927}
3af2954a 928
ab78acc6
IC
929// (public) return the number of bytes in "this"
930function bnByteLength() {
931 return this.bitLength() >> 3
932}
3af2954a 933
ab78acc6
IC
934// (protected) r = this << n*DB
935function bnpDLShiftTo(n, r) {
936 var i
937 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
938 for (i = n - 1; i >= 0; --i) r[i] = 0
939 r.t = this.t + n
940 r.s = this.s
941}
3af2954a 942
ab78acc6
IC
943// (protected) r = this >> n*DB
944function bnpDRShiftTo(n, r) {
945 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
946 r.t = Math.max(this.t - n, 0)
947 r.s = this.s
948}
3af2954a 949
ab78acc6
IC
950// (protected) r = this << n
951function bnpLShiftTo(n, r) {
952 var self = this
953 var bs = n % self.DB
954 var cbs = self.DB - bs
955 var bm = (1 << cbs) - 1
956 var ds = Math.floor(n / self.DB),
957 c = (self.s << bs) & self.DM,
958 i
959 for (i = self.t - 1; i >= 0; --i) {
960 r[i + ds + 1] = (self[i] >> cbs) | c
961 c = (self[i] & bm) << bs
962 }
963 for (i = ds - 1; i >= 0; --i) r[i] = 0
964 r[ds] = c
965 r.t = self.t + ds + 1
966 r.s = self.s
967 r.clamp()
968}
3af2954a 969
ab78acc6
IC
970// (protected) r = this >> n
971function bnpRShiftTo(n, r) {
972 var self = this
973 r.s = self.s
974 var ds = Math.floor(n / self.DB)
975 if (ds >= self.t) {
976 r.t = 0
977 return
3af2954a 978 }
ab78acc6
IC
979 var bs = n % self.DB
980 var cbs = self.DB - bs
981 var bm = (1 << bs) - 1
982 r[0] = self[ds] >> bs
983 for (var i = ds + 1; i < self.t; ++i) {
984 r[i - ds - 1] |= (self[i] & bm) << cbs
985 r[i - ds] = self[i] >> bs
986 }
987 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
988 r.t = self.t - ds
989 r.clamp()
990}
3af2954a 991
ab78acc6
IC
992// (protected) r = this - a
993function bnpSubTo(a, r) {
994 var self = this
995 var i = 0,
996 c = 0,
997 m = Math.min(a.t, self.t)
998 while (i < m) {
999 c += self[i] - a[i]
1000 r[i++] = c & self.DM
1001 c >>= self.DB
1002 }
1003 if (a.t < self.t) {
1004 c -= a.s
1005 while (i < self.t) {
1006 c += self[i]
1007 r[i++] = c & self.DM
1008 c >>= self.DB
1009 }
1010 c += self.s
1011 } else {
1012 c += self.s
1013 while (i < a.t) {
1014 c -= a[i]
1015 r[i++] = c & self.DM
1016 c >>= self.DB
1017 }
1018 c -= a.s
1019 }
1020 r.s = (c < 0) ? -1 : 0
1021 if (c < -1) r[i++] = self.DV + c
1022 else if (c > 0) r[i++] = c
1023 r.t = i
1024 r.clamp()
1025}
3af2954a 1026
ab78acc6
IC
1027// (protected) r = this * a, r != this,a (HAC 14.12)
1028// "this" should be the larger one if appropriate.
1029function bnpMultiplyTo(a, r) {
1030 var x = this.abs(),
1031 y = a.abs()
1032 var i = x.t
1033 r.t = i + y.t
1034 while (--i >= 0) r[i] = 0
1035 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
1036 r.s = 0
1037 r.clamp()
1038 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
1039}
3af2954a 1040
ab78acc6
IC
1041// (protected) r = this^2, r != this (HAC 14.16)
1042function bnpSquareTo(r) {
1043 var x = this.abs()
1044 var i = r.t = 2 * x.t
1045 while (--i >= 0) r[i] = 0
1046 for (i = 0; i < x.t - 1; ++i) {
1047 var c = x.am(i, x[i], r, 2 * i, 0, 1)
1048 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
1049 r[i + x.t] -= x.DV
1050 r[i + x.t + 1] = 1
1051 }
1052 }
1053 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
1054 r.s = 0
1055 r.clamp()
1056}
3af2954a 1057
ab78acc6
IC
1058// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
1059// r != q, this != m. q or r may be null.
1060function bnpDivRemTo(m, q, r) {
1061 var self = this
1062 var pm = m.abs()
1063 if (pm.t <= 0) return
1064 var pt = self.abs()
1065 if (pt.t < pm.t) {
1066 if (q != null) q.fromInt(0)
1067 if (r != null) self.copyTo(r)
1068 return
1069 }
1070 if (r == null) r = new BigInteger()
1071 var y = new BigInteger(),
1072 ts = self.s,
1073 ms = m.s
1074 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
1075 if (nsh > 0) {
1076 pm.lShiftTo(nsh, y)
1077 pt.lShiftTo(nsh, r)
1078 } else {
1079 pm.copyTo(y)
1080 pt.copyTo(r)
1081 }
1082 var ys = y.t
1083 var y0 = y[ys - 1]
1084 if (y0 == 0) return
1085 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
1086 var d1 = self.FV / yt,
1087 d2 = (1 << self.F1) / yt,
1088 e = 1 << self.F2
1089 var i = r.t,
1090 j = i - ys,
1091 t = (q == null) ? new BigInteger() : q
1092 y.dlShiftTo(j, t)
1093 if (r.compareTo(t) >= 0) {
1094 r[r.t++] = 1
1095 r.subTo(t, r)
1096 }
1097 BigInteger.ONE.dlShiftTo(ys, t)
1098 t.subTo(y, y); // "negative" y so we can replace sub with am later
1099 while (y.t < ys) y[y.t++] = 0
1100 while (--j >= 0) {
1101 // Estimate quotient digit
1102 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
1103 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
1104 y.dlShiftTo(j, t)
1105 r.subTo(t, r)
1106 while (r[i] < --qd) r.subTo(t, r)
3af2954a 1107 }
ab78acc6
IC
1108 }
1109 if (q != null) {
1110 r.drShiftTo(ys, q)
1111 if (ts != ms) BigInteger.ZERO.subTo(q, q)
1112 }
1113 r.t = ys
1114 r.clamp()
1115 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
1116 if (ts < 0) BigInteger.ZERO.subTo(r, r)
1117}
3af2954a 1118
ab78acc6
IC
1119// (public) this mod a
1120function bnMod(a) {
1121 var r = new BigInteger()
1122 this.abs()
1123 .divRemTo(a, null, r)
1124 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
1125 return r
1126}
3af2954a 1127
ab78acc6
IC
1128// Modular reduction using "classic" algorithm
1129function Classic(m) {
1130 this.m = m
1131}
3af2954a 1132
ab78acc6
IC
1133function cConvert(x) {
1134 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
1135 else return x
1136}
1137
1138function cRevert(x) {
1139 return x
1140}
3af2954a 1141
ab78acc6
IC
1142function cReduce(x) {
1143 x.divRemTo(this.m, null, x)
1144}
3af2954a 1145
ab78acc6
IC
1146function cMulTo(x, y, r) {
1147 x.multiplyTo(y, r)
1148 this.reduce(r)
1149}
3af2954a 1150
ab78acc6
IC
1151function cSqrTo(x, r) {
1152 x.squareTo(r)
1153 this.reduce(r)
1154}
3af2954a 1155
ab78acc6
IC
1156Classic.prototype.convert = cConvert
1157Classic.prototype.revert = cRevert
1158Classic.prototype.reduce = cReduce
1159Classic.prototype.mulTo = cMulTo
1160Classic.prototype.sqrTo = cSqrTo
3af2954a 1161
ab78acc6
IC
1162// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
1163// justification:
1164// xy == 1 (mod m)
1165// xy = 1+km
1166// xy(2-xy) = (1+km)(1-km)
1167// x[y(2-xy)] = 1-k^2m^2
1168// x[y(2-xy)] == 1 (mod m^2)
1169// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
1170// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
1171// JS multiply "overflows" differently from C/C++, so care is needed here.
1172function bnpInvDigit() {
1173 if (this.t < 1) return 0
1174 var x = this[0]
1175 if ((x & 1) == 0) return 0
1176 var y = x & 3; // y == 1/x mod 2^2
1177 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
1178 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
1179 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
1180 // last step - calculate inverse mod DV directly
1181 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
1182 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
1183 // we really want the negative inverse, and -DV < y < DV
1184 return (y > 0) ? this.DV - y : -y
1185}
3af2954a 1186
ab78acc6
IC
1187// Montgomery reduction
1188function Montgomery(m) {
1189 this.m = m
1190 this.mp = m.invDigit()
1191 this.mpl = this.mp & 0x7fff
1192 this.mph = this.mp >> 15
1193 this.um = (1 << (m.DB - 15)) - 1
1194 this.mt2 = 2 * m.t
1195}
3af2954a 1196
ab78acc6
IC
1197// xR mod m
1198function montConvert(x) {
1199 var r = new BigInteger()
1200 x.abs()
1201 .dlShiftTo(this.m.t, r)
1202 r.divRemTo(this.m, null, r)
1203 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
1204 return r
1205}
3af2954a 1206
ab78acc6
IC
1207// x/R mod m
1208function montRevert(x) {
1209 var r = new BigInteger()
1210 x.copyTo(r)
1211 this.reduce(r)
1212 return r
1213}
3af2954a 1214
ab78acc6
IC
1215// x = x/R mod m (HAC 14.32)
1216function montReduce(x) {
1217 while (x.t <= this.mt2) // pad x so am has enough room later
1218 x[x.t++] = 0
1219 for (var i = 0; i < this.m.t; ++i) {
1220 // faster way of calculating u0 = x[i]*mp mod DV
1221 var j = x[i] & 0x7fff
1222 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
1223 // use am to combine the multiply-shift-add into one call
1224 j = i + this.m.t
1225 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
1226 // propagate carry
1227 while (x[j] >= x.DV) {
1228 x[j] -= x.DV
1229 x[++j]++
1230 }
1231 }
1232 x.clamp()
1233 x.drShiftTo(this.m.t, x)
1234 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
1235}
3af2954a 1236
ab78acc6
IC
1237// r = "x^2/R mod m"; x != r
1238function montSqrTo(x, r) {
1239 x.squareTo(r)
1240 this.reduce(r)
1241}
3af2954a 1242
ab78acc6
IC
1243// r = "xy/R mod m"; x,y != r
1244function montMulTo(x, y, r) {
1245 x.multiplyTo(y, r)
1246 this.reduce(r)
1247}
3af2954a 1248
ab78acc6
IC
1249Montgomery.prototype.convert = montConvert
1250Montgomery.prototype.revert = montRevert
1251Montgomery.prototype.reduce = montReduce
1252Montgomery.prototype.mulTo = montMulTo
1253Montgomery.prototype.sqrTo = montSqrTo
3af2954a 1254
ab78acc6
IC
1255// (protected) true iff this is even
1256function bnpIsEven() {
1257 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
1258}
3af2954a 1259
ab78acc6
IC
1260// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1261function bnpExp(e, z) {
1262 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1263 var r = new BigInteger(),
1264 r2 = new BigInteger(),
1265 g = z.convert(this),
1266 i = nbits(e) - 1
1267 g.copyTo(r)
1268 while (--i >= 0) {
1269 z.sqrTo(r, r2)
1270 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1271 else {
1272 var t = r
1273 r = r2
1274 r2 = t
3af2954a 1275 }
3af2954a 1276 }
ab78acc6
IC
1277 return z.revert(r)
1278}
3af2954a 1279
ab78acc6
IC
1280// (public) this^e % m, 0 <= e < 2^32
1281function bnModPowInt(e, m) {
1282 var z
1283 if (e < 256 || m.isEven()) z = new Classic(m)
1284 else z = new Montgomery(m)
1285 return this.exp(e, z)
1286}
3af2954a 1287
ab78acc6
IC
1288// protected
1289proto.copyTo = bnpCopyTo
1290proto.fromInt = bnpFromInt
1291proto.fromString = bnpFromString
1292proto.clamp = bnpClamp
1293proto.dlShiftTo = bnpDLShiftTo
1294proto.drShiftTo = bnpDRShiftTo
1295proto.lShiftTo = bnpLShiftTo
1296proto.rShiftTo = bnpRShiftTo
1297proto.subTo = bnpSubTo
1298proto.multiplyTo = bnpMultiplyTo
1299proto.squareTo = bnpSquareTo
1300proto.divRemTo = bnpDivRemTo
1301proto.invDigit = bnpInvDigit
1302proto.isEven = bnpIsEven
1303proto.exp = bnpExp
3af2954a 1304
ab78acc6
IC
1305// public
1306proto.toString = bnToString
1307proto.negate = bnNegate
1308proto.abs = bnAbs
1309proto.compareTo = bnCompareTo
1310proto.bitLength = bnBitLength
1311proto.byteLength = bnByteLength
1312proto.mod = bnMod
1313proto.modPowInt = bnModPowInt
3af2954a 1314
ab78acc6
IC
1315// (public)
1316function bnClone() {
1317 var r = new BigInteger()
1318 this.copyTo(r)
1319 return r
1320}
3af2954a 1321
ab78acc6
IC
1322// (public) return value as integer
1323function bnIntValue() {
1324 if (this.s < 0) {
1325 if (this.t == 1) return this[0] - this.DV
1326 else if (this.t == 0) return -1
1327 } else if (this.t == 1) return this[0]
1328 else if (this.t == 0) return 0
1329 // assumes 16 < DB < 32
1330 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1331}
3af2954a 1332
ab78acc6
IC
1333// (public) return value as byte
1334function bnByteValue() {
1335 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1336}
3af2954a 1337
ab78acc6
IC
1338// (public) return value as short (assumes DB>=16)
1339function bnShortValue() {
1340 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1341}
3af2954a 1342
ab78acc6
IC
1343// (protected) return x s.t. r^x < DV
1344function bnpChunkSize(r) {
1345 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1346}
3af2954a 1347
ab78acc6
IC
1348// (public) 0 if this == 0, 1 if this > 0
1349function bnSigNum() {
1350 if (this.s < 0) return -1
1351 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1352 else return 1
1353}
3af2954a 1354
ab78acc6
IC
1355// (protected) convert to radix string
1356function bnpToRadix(b) {
1357 if (b == null) b = 10
1358 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1359 var cs = this.chunkSize(b)
1360 var a = Math.pow(b, cs)
1361 var d = nbv(a),
1362 y = new BigInteger(),
1363 z = new BigInteger(),
1364 r = ""
1365 this.divRemTo(d, y, z)
1366 while (y.signum() > 0) {
1367 r = (a + z.intValue())
1368 .toString(b)
1369 .substr(1) + r
1370 y.divRemTo(d, y, z)
1371 }
1372 return z.intValue()
1373 .toString(b) + r
1374}
3af2954a 1375
ab78acc6
IC
1376// (protected) convert from radix string
1377function bnpFromRadix(s, b) {
1378 var self = this
1379 self.fromInt(0)
1380 if (b == null) b = 10
1381 var cs = self.chunkSize(b)
1382 var d = Math.pow(b, cs),
1383 mi = false,
1384 j = 0,
1385 w = 0
1386 for (var i = 0; i < s.length; ++i) {
1387 var x = intAt(s, i)
1388 if (x < 0) {
1389 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1390 continue
1391 }
1392 w = b * w + x
1393 if (++j >= cs) {
1394 self.dMultiply(d)
1395 self.dAddOffset(w, 0)
1396 j = 0
1397 w = 0
1398 }
1399 }
1400 if (j > 0) {
1401 self.dMultiply(Math.pow(b, j))
1402 self.dAddOffset(w, 0)
1403 }
1404 if (mi) BigInteger.ZERO.subTo(self, self)
1405}
3af2954a 1406
ab78acc6
IC
1407// (protected) alternate constructor
1408function bnpFromNumber(a, b, c) {
1409 var self = this
1410 if ("number" == typeof b) {
1411 // new BigInteger(int,int,RNG)
1412 if (a < 2) self.fromInt(1)
1413 else {
1414 self.fromNumber(a, c)
1415 if (!self.testBit(a - 1)) // force MSB set
1416 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1417 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1418 while (!self.isProbablePrime(b)) {
1419 self.dAddOffset(2, 0)
1420 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1421 }
1422 }
1423 } else {
1424 // new BigInteger(int,RNG)
1425 var x = new Array(),
1426 t = a & 7
1427 x.length = (a >> 3) + 1
1428 b.nextBytes(x)
1429 if (t > 0) x[0] &= ((1 << t) - 1)
1430 else x[0] = 0
1431 self.fromString(x, 256)
3af2954a 1432 }
ab78acc6 1433}
3af2954a 1434
ab78acc6
IC
1435// (public) convert to bigendian byte array
1436function bnToByteArray() {
1437 var self = this
1438 var i = self.t,
1439 r = new Array()
1440 r[0] = self.s
1441 var p = self.DB - (i * self.DB) % 8,
1442 d, k = 0
1443 if (i-- > 0) {
1444 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1445 r[k++] = d | (self.s << (self.DB - p))
1446 while (i >= 0) {
1447 if (p < 8) {
1448 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1449 d |= self[--i] >> (p += self.DB - 8)
1450 } else {
1451 d = (self[i] >> (p -= 8)) & 0xff
1452 if (p <= 0) {
1453 p += self.DB
1454 --i
1455 }
1456 }
1457 if ((d & 0x80) != 0) d |= -256
1458 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1459 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1460 }
3af2954a 1461 }
ab78acc6
IC
1462 return r
1463}
3af2954a 1464
ab78acc6
IC
1465function bnEquals(a) {
1466 return (this.compareTo(a) == 0)
1467}
3af2954a 1468
ab78acc6
IC
1469function bnMin(a) {
1470 return (this.compareTo(a) < 0) ? this : a
1471}
3af2954a 1472
ab78acc6
IC
1473function bnMax(a) {
1474 return (this.compareTo(a) > 0) ? this : a
1475}
3af2954a 1476
ab78acc6
IC
1477// (protected) r = this op a (bitwise)
1478function bnpBitwiseTo(a, op, r) {
1479 var self = this
1480 var i, f, m = Math.min(a.t, self.t)
1481 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1482 if (a.t < self.t) {
1483 f = a.s & self.DM
1484 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1485 r.t = self.t
1486 } else {
1487 f = self.s & self.DM
1488 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1489 r.t = a.t
3af2954a 1490 }
ab78acc6
IC
1491 r.s = op(self.s, a.s)
1492 r.clamp()
1493}
3af2954a 1494
ab78acc6
IC
1495// (public) this & a
1496function op_and(x, y) {
1497 return x & y
1498}
3af2954a 1499
ab78acc6
IC
1500function bnAnd(a) {
1501 var r = new BigInteger()
1502 this.bitwiseTo(a, op_and, r)
1503 return r
1504}
3af2954a 1505
ab78acc6
IC
1506// (public) this | a
1507function op_or(x, y) {
1508 return x | y
1509}
3af2954a 1510
ab78acc6
IC
1511function bnOr(a) {
1512 var r = new BigInteger()
1513 this.bitwiseTo(a, op_or, r)
1514 return r
1515}
3af2954a 1516
ab78acc6
IC
1517// (public) this ^ a
1518function op_xor(x, y) {
1519 return x ^ y
1520}
3af2954a 1521
ab78acc6
IC
1522function bnXor(a) {
1523 var r = new BigInteger()
1524 this.bitwiseTo(a, op_xor, r)
1525 return r
1526}
3af2954a 1527
ab78acc6
IC
1528// (public) this & ~a
1529function op_andnot(x, y) {
1530 return x & ~y
1531}
3af2954a 1532
ab78acc6
IC
1533function bnAndNot(a) {
1534 var r = new BigInteger()
1535 this.bitwiseTo(a, op_andnot, r)
1536 return r
1537}
3af2954a 1538
ab78acc6
IC
1539// (public) ~this
1540function bnNot() {
1541 var r = new BigInteger()
1542 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1543 r.t = this.t
1544 r.s = ~this.s
1545 return r
1546}
3af2954a 1547
ab78acc6
IC
1548// (public) this << n
1549function bnShiftLeft(n) {
1550 var r = new BigInteger()
1551 if (n < 0) this.rShiftTo(-n, r)
1552 else this.lShiftTo(n, r)
1553 return r
1554}
3af2954a 1555
ab78acc6
IC
1556// (public) this >> n
1557function bnShiftRight(n) {
1558 var r = new BigInteger()
1559 if (n < 0) this.lShiftTo(-n, r)
1560 else this.rShiftTo(n, r)
1561 return r
1562}
3af2954a 1563
ab78acc6
IC
1564// return index of lowest 1-bit in x, x < 2^31
1565function lbit(x) {
1566 if (x == 0) return -1
1567 var r = 0
1568 if ((x & 0xffff) == 0) {
1569 x >>= 16
1570 r += 16
3af2954a 1571 }
ab78acc6
IC
1572 if ((x & 0xff) == 0) {
1573 x >>= 8
1574 r += 8
1575 }
1576 if ((x & 0xf) == 0) {
1577 x >>= 4
1578 r += 4
1579 }
1580 if ((x & 3) == 0) {
1581 x >>= 2
1582 r += 2
1583 }
1584 if ((x & 1) == 0)++r
1585 return r
1586}
3af2954a 1587
ab78acc6
IC
1588// (public) returns index of lowest 1-bit (or -1 if none)
1589function bnGetLowestSetBit() {
1590 for (var i = 0; i < this.t; ++i)
1591 if (this[i] != 0) return i * this.DB + lbit(this[i])
1592 if (this.s < 0) return this.t * this.DB
1593 return -1
1594}
3af2954a 1595
ab78acc6
IC
1596// return number of 1 bits in x
1597function cbit(x) {
1598 var r = 0
1599 while (x != 0) {
1600 x &= x - 1
1601 ++r
3af2954a 1602 }
ab78acc6
IC
1603 return r
1604}
3af2954a 1605
ab78acc6
IC
1606// (public) return number of set bits
1607function bnBitCount() {
1608 var r = 0,
1609 x = this.s & this.DM
1610 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1611 return r
1612}
1613
1614// (public) true iff nth bit is set
1615function bnTestBit(n) {
1616 var j = Math.floor(n / this.DB)
1617 if (j >= this.t) return (this.s != 0)
1618 return ((this[j] & (1 << (n % this.DB))) != 0)
1619}
3af2954a 1620
ab78acc6
IC
1621// (protected) this op (1<<n)
1622function bnpChangeBit(n, op) {
1623 var r = BigInteger.ONE.shiftLeft(n)
1624 this.bitwiseTo(r, op, r)
1625 return r
1626}
3af2954a 1627
ab78acc6
IC
1628// (public) this | (1<<n)
1629function bnSetBit(n) {
1630 return this.changeBit(n, op_or)
1631}
3af2954a 1632
ab78acc6
IC
1633// (public) this & ~(1<<n)
1634function bnClearBit(n) {
1635 return this.changeBit(n, op_andnot)
1636}
3af2954a 1637
ab78acc6
IC
1638// (public) this ^ (1<<n)
1639function bnFlipBit(n) {
1640 return this.changeBit(n, op_xor)
1641}
3af2954a 1642
ab78acc6
IC
1643// (protected) r = this + a
1644function bnpAddTo(a, r) {
1645 var self = this
3af2954a 1646
ab78acc6
IC
1647 var i = 0,
1648 c = 0,
1649 m = Math.min(a.t, self.t)
1650 while (i < m) {
1651 c += self[i] + a[i]
1652 r[i++] = c & self.DM
1653 c >>= self.DB
1654 }
1655 if (a.t < self.t) {
1656 c += a.s
1657 while (i < self.t) {
1658 c += self[i]
1659 r[i++] = c & self.DM
1660 c >>= self.DB
1661 }
1662 c += self.s
1663 } else {
1664 c += self.s
1665 while (i < a.t) {
1666 c += a[i]
1667 r[i++] = c & self.DM
1668 c >>= self.DB
1669 }
1670 c += a.s
1671 }
1672 r.s = (c < 0) ? -1 : 0
1673 if (c > 0) r[i++] = c
1674 else if (c < -1) r[i++] = self.DV + c
1675 r.t = i
1676 r.clamp()
1677}
3af2954a 1678
ab78acc6
IC
1679// (public) this + a
1680function bnAdd(a) {
1681 var r = new BigInteger()
1682 this.addTo(a, r)
1683 return r
1684}
3af2954a 1685
ab78acc6
IC
1686// (public) this - a
1687function bnSubtract(a) {
1688 var r = new BigInteger()
1689 this.subTo(a, r)
1690 return r
1691}
3af2954a 1692
ab78acc6
IC
1693// (public) this * a
1694function bnMultiply(a) {
1695 var r = new BigInteger()
1696 this.multiplyTo(a, r)
1697 return r
1698}
3af2954a 1699
ab78acc6
IC
1700// (public) this^2
1701function bnSquare() {
1702 var r = new BigInteger()
1703 this.squareTo(r)
1704 return r
1705}
3af2954a 1706
ab78acc6
IC
1707// (public) this / a
1708function bnDivide(a) {
1709 var r = new BigInteger()
1710 this.divRemTo(a, r, null)
1711 return r
1712}
3af2954a 1713
ab78acc6
IC
1714// (public) this % a
1715function bnRemainder(a) {
1716 var r = new BigInteger()
1717 this.divRemTo(a, null, r)
1718 return r
1719}
3af2954a 1720
ab78acc6
IC
1721// (public) [this/a,this%a]
1722function bnDivideAndRemainder(a) {
1723 var q = new BigInteger(),
1724 r = new BigInteger()
1725 this.divRemTo(a, q, r)
1726 return new Array(q, r)
1727}
3af2954a 1728
ab78acc6
IC
1729// (protected) this *= n, this >= 0, 1 < n < DV
1730function bnpDMultiply(n) {
1731 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1732 ++this.t
1733 this.clamp()
1734}
3af2954a 1735
ab78acc6
IC
1736// (protected) this += n << w words, this >= 0
1737function bnpDAddOffset(n, w) {
1738 if (n == 0) return
1739 while (this.t <= w) this[this.t++] = 0
1740 this[w] += n
1741 while (this[w] >= this.DV) {
1742 this[w] -= this.DV
1743 if (++w >= this.t) this[this.t++] = 0
1744 ++this[w]
3af2954a 1745 }
ab78acc6 1746}
3af2954a 1747
ab78acc6
IC
1748// A "null" reducer
1749function NullExp() {}
3af2954a 1750
ab78acc6
IC
1751function nNop(x) {
1752 return x
1753}
3af2954a 1754
ab78acc6
IC
1755function nMulTo(x, y, r) {
1756 x.multiplyTo(y, r)
1757}
3af2954a 1758
ab78acc6
IC
1759function nSqrTo(x, r) {
1760 x.squareTo(r)
1761}
3af2954a 1762
ab78acc6
IC
1763NullExp.prototype.convert = nNop
1764NullExp.prototype.revert = nNop
1765NullExp.prototype.mulTo = nMulTo
1766NullExp.prototype.sqrTo = nSqrTo
3af2954a 1767
ab78acc6
IC
1768// (public) this^e
1769function bnPow(e) {
1770 return this.exp(e, new NullExp())
1771}
3af2954a 1772
ab78acc6
IC
1773// (protected) r = lower n words of "this * a", a.t <= n
1774// "this" should be the larger one if appropriate.
1775function bnpMultiplyLowerTo(a, n, r) {
1776 var i = Math.min(this.t + a.t, n)
1777 r.s = 0; // assumes a,this >= 0
1778 r.t = i
1779 while (i > 0) r[--i] = 0
1780 var j
1781 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1782 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1783 r.clamp()
1784}
3af2954a 1785
ab78acc6
IC
1786// (protected) r = "this * a" without lower n words, n > 0
1787// "this" should be the larger one if appropriate.
1788function bnpMultiplyUpperTo(a, n, r) {
1789 --n
1790 var i = r.t = this.t + a.t - n
1791 r.s = 0; // assumes a,this >= 0
1792 while (--i >= 0) r[i] = 0
1793 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1794 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1795 r.clamp()
1796 r.drShiftTo(1, r)
1797}
3af2954a 1798
ab78acc6
IC
1799// Barrett modular reduction
1800function Barrett(m) {
1801 // setup Barrett
1802 this.r2 = new BigInteger()
1803 this.q3 = new BigInteger()
1804 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1805 this.mu = this.r2.divide(m)
1806 this.m = m
1807}
3af2954a 1808
ab78acc6
IC
1809function barrettConvert(x) {
1810 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1811 else if (x.compareTo(this.m) < 0) return x
1812 else {
1813 var r = new BigInteger()
1814 x.copyTo(r)
1815 this.reduce(r)
1816 return r
3af2954a 1817 }
ab78acc6 1818}
3af2954a 1819
ab78acc6
IC
1820function barrettRevert(x) {
1821 return x
1822}
3af2954a 1823
ab78acc6
IC
1824// x = x mod m (HAC 14.42)
1825function barrettReduce(x) {
1826 var self = this
1827 x.drShiftTo(self.m.t - 1, self.r2)
1828 if (x.t > self.m.t + 1) {
1829 x.t = self.m.t + 1
1830 x.clamp()
3af2954a 1831 }
ab78acc6
IC
1832 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1833 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1834 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1835 x.subTo(self.r2, x)
1836 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1837}
3af2954a 1838
ab78acc6
IC
1839// r = x^2 mod m; x != r
1840function barrettSqrTo(x, r) {
1841 x.squareTo(r)
1842 this.reduce(r)
1843}
3af2954a 1844
ab78acc6
IC
1845// r = x*y mod m; x,y != r
1846function barrettMulTo(x, y, r) {
1847 x.multiplyTo(y, r)
1848 this.reduce(r)
1849}
3af2954a 1850
ab78acc6
IC
1851Barrett.prototype.convert = barrettConvert
1852Barrett.prototype.revert = barrettRevert
1853Barrett.prototype.reduce = barrettReduce
1854Barrett.prototype.mulTo = barrettMulTo
1855Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1856
ab78acc6
IC
1857// (public) this^e % m (HAC 14.85)
1858function bnModPow(e, m) {
1859 var i = e.bitLength(),
1860 k, r = nbv(1),
1861 z
1862 if (i <= 0) return r
1863 else if (i < 18) k = 1
1864 else if (i < 48) k = 3
1865 else if (i < 144) k = 4
1866 else if (i < 768) k = 5
1867 else k = 6
1868 if (i < 8)
1869 z = new Classic(m)
1870 else if (m.isEven())
1871 z = new Barrett(m)
1872 else
1873 z = new Montgomery(m)
3af2954a 1874
ab78acc6
IC
1875 // precomputation
1876 var g = new Array(),
1877 n = 3,
1878 k1 = k - 1,
1879 km = (1 << k) - 1
1880 g[1] = z.convert(this)
1881 if (k > 1) {
1882 var g2 = new BigInteger()
1883 z.sqrTo(g[1], g2)
1884 while (n <= km) {
1885 g[n] = new BigInteger()
1886 z.mulTo(g2, g[n - 2], g[n])
1887 n += 2
1888 }
1889 }
1890
1891 var j = e.t - 1,
1892 w, is1 = true,
1893 r2 = new BigInteger(),
1894 t
1895 i = nbits(e[j]) - 1
1896 while (j >= 0) {
1897 if (i >= k1) w = (e[j] >> (i - k1)) & km
1898 else {
1899 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1900 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1901 }
3af2954a 1902
ab78acc6
IC
1903 n = k
1904 while ((w & 1) == 0) {
1905 w >>= 1
1906 --n
1907 }
1908 if ((i -= n) < 0) {
1909 i += this.DB
1910 --j
1911 }
1912 if (is1) { // ret == 1, don't bother squaring or multiplying it
1913 g[w].copyTo(r)
1914 is1 = false
1915 } else {
1916 while (n > 1) {
1917 z.sqrTo(r, r2)
1918 z.sqrTo(r2, r)
1919 n -= 2
1920 }
1921 if (n > 0) z.sqrTo(r, r2)
1922 else {
1923 t = r
1924 r = r2
1925 r2 = t
1926 }
1927 z.mulTo(r2, g[w], r)
1928 }
3af2954a 1929
ab78acc6
IC
1930 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1931 z.sqrTo(r, r2)
1932 t = r
1933 r = r2
1934 r2 = t
1935 if (--i < 0) {
1936 i = this.DB - 1
1937 --j
3af2954a 1938 }
3af2954a
IC
1939 }
1940 }
ab78acc6
IC
1941 return z.revert(r)
1942}
3af2954a 1943
ab78acc6
IC
1944// (public) gcd(this,a) (HAC 14.54)
1945function bnGCD(a) {
1946 var x = (this.s < 0) ? this.negate() : this.clone()
1947 var y = (a.s < 0) ? a.negate() : a.clone()
1948 if (x.compareTo(y) < 0) {
1949 var t = x
1950 x = y
1951 y = t
1952 }
1953 var i = x.getLowestSetBit(),
1954 g = y.getLowestSetBit()
1955 if (g < 0) return x
1956 if (i < g) g = i
1957 if (g > 0) {
1958 x.rShiftTo(g, x)
1959 y.rShiftTo(g, y)
1960 }
1961 while (x.signum() > 0) {
1962 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1963 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1964 if (x.compareTo(y) >= 0) {
1965 x.subTo(y, x)
1966 x.rShiftTo(1, x)
1967 } else {
1968 y.subTo(x, y)
1969 y.rShiftTo(1, y)
1970 }
3af2954a 1971 }
ab78acc6
IC
1972 if (g > 0) y.lShiftTo(g, y)
1973 return y
1974}
3af2954a 1975
ab78acc6
IC
1976// (protected) this % n, n < 2^26
1977function bnpModInt(n) {
1978 if (n <= 0) return 0
1979 var d = this.DV % n,
1980 r = (this.s < 0) ? n - 1 : 0
1981 if (this.t > 0)
1982 if (d == 0) r = this[0] % n
1983 else
1984 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1985 return r
1986}
3af2954a 1987
ab78acc6
IC
1988// (public) 1/this % m (HAC 14.61)
1989function bnModInverse(m) {
1990 var ac = m.isEven()
1991 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1992 var u = m.clone(),
1993 v = this.clone()
1994 var a = nbv(1),
1995 b = nbv(0),
1996 c = nbv(0),
1997 d = nbv(1)
1998 while (u.signum() != 0) {
1999 while (u.isEven()) {
2000 u.rShiftTo(1, u)
2001 if (ac) {
2002 if (!a.isEven() || !b.isEven()) {
2003 a.addTo(this, a)
2004 b.subTo(m, b)
2005 }
2006 a.rShiftTo(1, a)
2007 } else if (!b.isEven()) b.subTo(m, b)
2008 b.rShiftTo(1, b)
2009 }
2010 while (v.isEven()) {
2011 v.rShiftTo(1, v)
2012 if (ac) {
2013 if (!c.isEven() || !d.isEven()) {
2014 c.addTo(this, c)
2015 d.subTo(m, d)
2016 }
2017 c.rShiftTo(1, c)
2018 } else if (!d.isEven()) d.subTo(m, d)
2019 d.rShiftTo(1, d)
2020 }
2021 if (u.compareTo(v) >= 0) {
2022 u.subTo(v, u)
2023 if (ac) a.subTo(c, a)
2024 b.subTo(d, b)
2025 } else {
2026 v.subTo(u, v)
2027 if (ac) c.subTo(a, c)
2028 d.subTo(b, d)
2029 }
2030 }
2031 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
2032 if (d.compareTo(m) >= 0) return d.subtract(m)
2033 if (d.signum() < 0) d.addTo(m, d)
2034 else return d
2035 if (d.signum() < 0) return d.add(m)
2036 else return d
2037}
2038
2039var lowprimes = [
2040 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
2041 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
2042 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
2043 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
2044 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
2045 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
2046 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
2047 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
2048 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
2049 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
2050 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
2051]
2052
2053var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
2054
2055// (public) test primality with certainty >= 1-.5^t
2056function bnIsProbablePrime(t) {
2057 var i, x = this.abs()
2058 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
2059 for (i = 0; i < lowprimes.length; ++i)
2060 if (x[0] == lowprimes[i]) return true
2061 return false
3af2954a 2062 }
ab78acc6
IC
2063 if (x.isEven()) return false
2064 i = 1
2065 while (i < lowprimes.length) {
2066 var m = lowprimes[i],
2067 j = i + 1
2068 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
2069 m = x.modInt(m)
2070 while (i < j) if (m % lowprimes[i++] == 0) return false
2071 }
2072 return x.millerRabin(t)
2073}
2074
2075// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
2076function bnpMillerRabin(t) {
2077 var n1 = this.subtract(BigInteger.ONE)
2078 var k = n1.getLowestSetBit()
2079 if (k <= 0) return false
2080 var r = n1.shiftRight(k)
2081 t = (t + 1) >> 1
2082 if (t > lowprimes.length) t = lowprimes.length
2083 var a = new BigInteger(null)
2084 var j, bases = []
2085 for (var i = 0; i < t; ++i) {
2086 for (;;) {
2087 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
2088 if (bases.indexOf(j) == -1) break
2089 }
2090 bases.push(j)
2091 a.fromInt(j)
2092 var y = a.modPow(r, this)
2093 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
2094 var j = 1
2095 while (j++ < k && y.compareTo(n1) != 0) {
2096 y = y.modPowInt(2, this)
2097 if (y.compareTo(BigInteger.ONE) == 0) return false
2098 }
2099 if (y.compareTo(n1) != 0) return false
2100 }
3af2954a 2101 }
ab78acc6
IC
2102 return true
2103}
3af2954a 2104
ab78acc6
IC
2105// protected
2106proto.chunkSize = bnpChunkSize
2107proto.toRadix = bnpToRadix
2108proto.fromRadix = bnpFromRadix
2109proto.fromNumber = bnpFromNumber
2110proto.bitwiseTo = bnpBitwiseTo
2111proto.changeBit = bnpChangeBit
2112proto.addTo = bnpAddTo
2113proto.dMultiply = bnpDMultiply
2114proto.dAddOffset = bnpDAddOffset
2115proto.multiplyLowerTo = bnpMultiplyLowerTo
2116proto.multiplyUpperTo = bnpMultiplyUpperTo
2117proto.modInt = bnpModInt
2118proto.millerRabin = bnpMillerRabin
3af2954a 2119
ab78acc6
IC
2120// public
2121proto.clone = bnClone
2122proto.intValue = bnIntValue
2123proto.byteValue = bnByteValue
2124proto.shortValue = bnShortValue
2125proto.signum = bnSigNum
2126proto.toByteArray = bnToByteArray
2127proto.equals = bnEquals
2128proto.min = bnMin
2129proto.max = bnMax
2130proto.and = bnAnd
2131proto.or = bnOr
2132proto.xor = bnXor
2133proto.andNot = bnAndNot
2134proto.not = bnNot
2135proto.shiftLeft = bnShiftLeft
2136proto.shiftRight = bnShiftRight
2137proto.getLowestSetBit = bnGetLowestSetBit
2138proto.bitCount = bnBitCount
2139proto.testBit = bnTestBit
2140proto.setBit = bnSetBit
2141proto.clearBit = bnClearBit
2142proto.flipBit = bnFlipBit
2143proto.add = bnAdd
2144proto.subtract = bnSubtract
2145proto.multiply = bnMultiply
2146proto.divide = bnDivide
2147proto.remainder = bnRemainder
2148proto.divideAndRemainder = bnDivideAndRemainder
2149proto.modPow = bnModPow
2150proto.modInverse = bnModInverse
2151proto.pow = bnPow
2152proto.gcd = bnGCD
2153proto.isProbablePrime = bnIsProbablePrime
3af2954a 2154
ab78acc6
IC
2155// JSBN-specific extension
2156proto.square = bnSquare
3af2954a 2157
ab78acc6
IC
2158// constants
2159BigInteger.ZERO = nbv(0)
2160BigInteger.ONE = nbv(1)
2161BigInteger.valueOf = nbv
3af2954a 2162
ab78acc6 2163module.exports = BigInteger
3af2954a 2164
ab78acc6
IC
2165},{"../package.json":4}],2:[function(require,module,exports){
2166(function (Buffer){
2167// FIXME: Kind of a weird way to throw exceptions, consider removing
2168var assert = require('assert')
2169var BigInteger = require('./bigi')
3af2954a 2170
ab78acc6
IC
2171/**
2172 * Turns a byte array into a big integer.
2173 *
2174 * This function will interpret a byte array as a big integer in big
2175 * endian notation.
2176 */
2177BigInteger.fromByteArrayUnsigned = function(byteArray) {
2178 // BigInteger expects a DER integer conformant byte array
2179 if (byteArray[0] & 0x80) {
2180 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2181 }
2182
ab78acc6
IC
2183 return new BigInteger(byteArray)
2184}
3af2954a 2185
ab78acc6
IC
2186/**
2187 * Returns a byte array representation of the big integer.
2188 *
2189 * This returns the absolute of the contained value in big endian
2190 * form. A value of zero results in an empty array.
2191 */
2192BigInteger.prototype.toByteArrayUnsigned = function() {
2193 var byteArray = this.toByteArray()
2194 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
2195}
3af2954a 2196
ab78acc6
IC
2197BigInteger.fromDERInteger = function(byteArray) {
2198 return new BigInteger(byteArray)
2199}
3af2954a 2200
ab78acc6
IC
2201/*
2202 * Converts BigInteger to a DER integer representation.
2203 *
2204 * The format for this value uses the most significant bit as a sign
2205 * bit. If the most significant bit is already set and the integer is
2206 * positive, a 0x00 is prepended.
2207 *
2208 * Examples:
2209 *
2210 * 0 => 0x00
2211 * 1 => 0x01
2212 * -1 => 0xff
2213 * 127 => 0x7f
2214 * -127 => 0x81
2215 * 128 => 0x0080
2216 * -128 => 0x80
2217 * 255 => 0x00ff
2218 * -255 => 0xff01
2219 * 16300 => 0x3fac
2220 * -16300 => 0xc054
2221 * 62300 => 0x00f35c
2222 * -62300 => 0xff0ca4
2223*/
2224BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 2225
ab78acc6
IC
2226BigInteger.fromBuffer = function(buffer) {
2227 // BigInteger expects a DER integer conformant byte array
2228 if (buffer[0] & 0x80) {
2229 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 2230
ab78acc6 2231 return new BigInteger([0].concat(byteArray))
3af2954a
IC
2232 }
2233
ab78acc6
IC
2234 return new BigInteger(buffer)
2235}
3af2954a 2236
ab78acc6
IC
2237BigInteger.fromHex = function(hex) {
2238 if (hex === '') return BigInteger.ZERO
3af2954a 2239
ab78acc6
IC
2240 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
2241 assert.equal(hex.length % 2, 0, 'Incomplete hex')
2242 return new BigInteger(hex, 16)
2243}
3af2954a 2244
ab78acc6
IC
2245BigInteger.prototype.toBuffer = function(size) {
2246 var byteArray = this.toByteArrayUnsigned()
2247 var zeros = []
3af2954a 2248
ab78acc6
IC
2249 var padding = size - byteArray.length
2250 while (zeros.length < padding) zeros.push(0)
3af2954a 2251
ab78acc6
IC
2252 return new Buffer(zeros.concat(byteArray))
2253}
3af2954a 2254
ab78acc6
IC
2255BigInteger.prototype.toHex = function(size) {
2256 return this.toBuffer(size).toString('hex')
2257}
3af2954a 2258
ab78acc6
IC
2259}).call(this,require("buffer").Buffer)
2260},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2261var BigInteger = require('./bigi')
3af2954a 2262
ab78acc6
IC
2263//addons
2264require('./convert')
3af2954a 2265
ab78acc6
IC
2266module.exports = BigInteger
2267},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2268module.exports={
2269 "name": "bigi",
2270 "version": "1.4.0",
2271 "description": "Big integers.",
2272 "keywords": [
2273 "cryptography",
2274 "math",
2275 "bitcoin",
2276 "arbitrary",
2277 "precision",
2278 "arithmetic",
2279 "big",
2280 "integer",
2281 "int",
2282 "number",
2283 "biginteger",
2284 "bigint",
2285 "bignumber",
2286 "decimal",
2287 "float"
2288 ],
2289 "devDependencies": {
2290 "mocha": "^1.20.1",
2291 "jshint": "^2.5.1",
2292 "coveralls": "^2.10.0",
2293 "istanbul": "^0.2.11"
2294 },
2295 "repository": {
2296 "url": "https://github.com/cryptocoinjs/bigi",
2297 "type": "git"
2298 },
2299 "main": "./lib/index.js",
2300 "scripts": {
2301 "test": "_mocha -- test/*.js",
2302 "jshint": "jshint --config jshint.json lib/*.js ; true",
2303 "unit": "mocha",
2304 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2305 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2306 },
2307 "dependencies": {},
2308 "testling": {
2309 "files": "test/*.js",
2310 "harness": "mocha",
2311 "browsers": [
2312 "ie/9..latest",
2313 "firefox/latest",
2314 "chrome/latest",
2315 "safari/6.0..latest",
2316 "iphone/6.0..latest",
2317 "android-browser/4.2..latest"
2318 ]
2319 },
2320 "bugs": {
2321 "url": "https://github.com/cryptocoinjs/bigi/issues"
2322 },
2323 "homepage": "https://github.com/cryptocoinjs/bigi",
2324 "_id": "bigi@1.4.0",
2325 "dist": {
2326 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2327 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2328 },
2329 "_from": "bigi@^1.4.0",
2330 "_npmVersion": "1.4.3",
2331 "_npmUser": {
2332 "name": "jp",
2333 "email": "jprichardson@gmail.com"
2334 },
2335 "maintainers": [
2336 {
2337 "name": "jp",
2338 "email": "jprichardson@gmail.com"
2339 },
2340 {
2341 "name": "midnightlightning",
2342 "email": "boydb@midnightdesign.ws"
2343 },
2344 {
2345 "name": "sidazhang",
2346 "email": "sidazhang89@gmail.com"
2347 },
2348 {
2349 "name": "nadav",
2350 "email": "npm@shesek.info"
3af2954a 2351 }
ab78acc6
IC
2352 ],
2353 "directories": {},
2354 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2355 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2356}
3af2954a 2357
ab78acc6
IC
2358},{}],5:[function(require,module,exports){
2359// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2360//
2361// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2362//
2363// Originally from narwhal.js (http://narwhaljs.org)
2364// Copyright (c) 2009 Thomas Robinson <280north.com>
2365//
2366// Permission is hereby granted, free of charge, to any person obtaining a copy
2367// of this software and associated documentation files (the 'Software'), to
2368// deal in the Software without restriction, including without limitation the
2369// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2370// sell copies of the Software, and to permit persons to whom the Software is
2371// furnished to do so, subject to the following conditions:
2372//
2373// The above copyright notice and this permission notice shall be included in
2374// all copies or substantial portions of the Software.
2375//
2376// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2377// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2378// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2379// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2380// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2381// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2382
ab78acc6
IC
2383// when used in node, this will actually load the util module we depend on
2384// versus loading the builtin util module as happens otherwise
2385// this is a bug in node module loading as far as I am concerned
2386var util = require('util/');
3af2954a 2387
ab78acc6
IC
2388var pSlice = Array.prototype.slice;
2389var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2390
ab78acc6
IC
2391// 1. The assert module provides functions that throw
2392// AssertionError's when particular conditions are not met. The
2393// assert module must conform to the following interface.
3af2954a 2394
ab78acc6 2395var assert = module.exports = ok;
3af2954a 2396
ab78acc6
IC
2397// 2. The AssertionError is defined in assert.
2398// new assert.AssertionError({ message: message,
2399// actual: actual,
2400// expected: expected })
3af2954a 2401
ab78acc6
IC
2402assert.AssertionError = function AssertionError(options) {
2403 this.name = 'AssertionError';
2404 this.actual = options.actual;
2405 this.expected = options.expected;
2406 this.operator = options.operator;
2407 if (options.message) {
2408 this.message = options.message;
2409 this.generatedMessage = false;
2410 } else {
2411 this.message = getMessage(this);
2412 this.generatedMessage = true;
2413 }
2414 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2415
ab78acc6
IC
2416 if (Error.captureStackTrace) {
2417 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2418 }
ab78acc6
IC
2419 else {
2420 // non v8 browsers so we can have a stacktrace
2421 var err = new Error();
2422 if (err.stack) {
2423 var out = err.stack;
3af2954a 2424
ab78acc6
IC
2425 // try to strip useless frames
2426 var fn_name = stackStartFunction.name;
2427 var idx = out.indexOf('\n' + fn_name);
2428 if (idx >= 0) {
2429 // once we have located the function frame
2430 // we need to strip out everything before it (and its line)
2431 var next_line = out.indexOf('\n', idx + 1);
2432 out = out.substring(next_line + 1);
2433 }
3af2954a 2434
ab78acc6 2435 this.stack = out;
3af2954a 2436 }
3af2954a 2437 }
ab78acc6 2438};
3af2954a 2439
ab78acc6
IC
2440// assert.AssertionError instanceof Error
2441util.inherits(assert.AssertionError, Error);
3af2954a 2442
ab78acc6
IC
2443function replacer(key, value) {
2444 if (util.isUndefined(value)) {
2445 return '' + value;
2446 }
2447 if (util.isNumber(value) && !isFinite(value)) {
2448 return value.toString();
2449 }
2450 if (util.isFunction(value) || util.isRegExp(value)) {
2451 return value.toString();
2452 }
2453 return value;
2454}
3af2954a 2455
ab78acc6
IC
2456function truncate(s, n) {
2457 if (util.isString(s)) {
2458 return s.length < n ? s : s.slice(0, n);
2459 } else {
2460 return s;
2461 }
2462}
3af2954a 2463
ab78acc6
IC
2464function getMessage(self) {
2465 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2466 self.operator + ' ' +
2467 truncate(JSON.stringify(self.expected, replacer), 128);
2468}
3af2954a 2469
ab78acc6
IC
2470// At present only the three keys mentioned above are used and
2471// understood by the spec. Implementations or sub modules can pass
2472// other keys to the AssertionError's constructor - they will be
2473// ignored.
3af2954a 2474
ab78acc6
IC
2475// 3. All of the following functions must throw an AssertionError
2476// when a corresponding condition is not met, with a message that
2477// may be undefined if not provided. All assertion methods provide
2478// both the actual and expected values to the assertion error for
2479// display purposes.
3af2954a 2480
ab78acc6
IC
2481function fail(actual, expected, message, operator, stackStartFunction) {
2482 throw new assert.AssertionError({
2483 message: message,
2484 actual: actual,
2485 expected: expected,
2486 operator: operator,
2487 stackStartFunction: stackStartFunction
2488 });
2489}
3af2954a 2490
ab78acc6
IC
2491// EXTENSION! allows for well behaved errors defined elsewhere.
2492assert.fail = fail;
ebd8d4e8 2493
ab78acc6
IC
2494// 4. Pure assertion tests whether a value is truthy, as determined
2495// by !!guard.
2496// assert.ok(guard, message_opt);
2497// This statement is equivalent to assert.equal(true, !!guard,
2498// message_opt);. To test strictly for the value true, use
2499// assert.strictEqual(true, guard, message_opt);.
3af2954a 2500
ab78acc6
IC
2501function ok(value, message) {
2502 if (!value) fail(value, true, message, '==', assert.ok);
2503}
2504assert.ok = ok;
3af2954a 2505
ab78acc6
IC
2506// 5. The equality assertion tests shallow, coercive equality with
2507// ==.
2508// assert.equal(actual, expected, message_opt);
3af2954a 2509
ab78acc6
IC
2510assert.equal = function equal(actual, expected, message) {
2511 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2512};
3af2954a 2513
ab78acc6
IC
2514// 6. The non-equality assertion tests for whether two objects are not equal
2515// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2516
ab78acc6
IC
2517assert.notEqual = function notEqual(actual, expected, message) {
2518 if (actual == expected) {
2519 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2520 }
ab78acc6 2521};
3af2954a 2522
ab78acc6
IC
2523// 7. The equivalence assertion tests a deep equality relation.
2524// assert.deepEqual(actual, expected, message_opt);
3af2954a 2525
ab78acc6
IC
2526assert.deepEqual = function deepEqual(actual, expected, message) {
2527 if (!_deepEqual(actual, expected)) {
2528 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2529 }
2530};
3af2954a 2531
ab78acc6
IC
2532function _deepEqual(actual, expected) {
2533 // 7.1. All identical values are equivalent, as determined by ===.
2534 if (actual === expected) {
2535 return true;
3af2954a 2536
ab78acc6
IC
2537 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2538 if (actual.length != expected.length) return false;
3af2954a 2539
ab78acc6
IC
2540 for (var i = 0; i < actual.length; i++) {
2541 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2542 }
2543
ab78acc6 2544 return true;
3af2954a 2545
ab78acc6
IC
2546 // 7.2. If the expected value is a Date object, the actual value is
2547 // equivalent if it is also a Date object that refers to the same time.
2548 } else if (util.isDate(actual) && util.isDate(expected)) {
2549 return actual.getTime() === expected.getTime();
3af2954a 2550
ab78acc6
IC
2551 // 7.3 If the expected value is a RegExp object, the actual value is
2552 // equivalent if it is also a RegExp object with the same source and
2553 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2554 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2555 return actual.source === expected.source &&
2556 actual.global === expected.global &&
2557 actual.multiline === expected.multiline &&
2558 actual.lastIndex === expected.lastIndex &&
2559 actual.ignoreCase === expected.ignoreCase;
3af2954a 2560
ab78acc6
IC
2561 // 7.4. Other pairs that do not both pass typeof value == 'object',
2562 // equivalence is determined by ==.
2563 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2564 return actual == expected;
3af2954a 2565
ab78acc6
IC
2566 // 7.5 For all other Object pairs, including Array objects, equivalence is
2567 // determined by having the same number of owned properties (as verified
2568 // with Object.prototype.hasOwnProperty.call), the same set of keys
2569 // (although not necessarily the same order), equivalent values for every
2570 // corresponding key, and an identical 'prototype' property. Note: this
2571 // accounts for both named and indexed properties on Arrays.
2572 } else {
2573 return objEquiv(actual, expected);
3af2954a 2574 }
ab78acc6 2575}
3af2954a 2576
ab78acc6
IC
2577function isArguments(object) {
2578 return Object.prototype.toString.call(object) == '[object Arguments]';
2579}
3af2954a 2580
ab78acc6
IC
2581function objEquiv(a, b) {
2582 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2583 return false;
2584 // an identical 'prototype' property.
2585 if (a.prototype !== b.prototype) return false;
2586 // if one is a primitive, the other must be same
2587 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2588 return a === b;
3af2954a 2589 }
ab78acc6
IC
2590 var aIsArgs = isArguments(a),
2591 bIsArgs = isArguments(b);
2592 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2593 return false;
2594 if (aIsArgs) {
2595 a = pSlice.call(a);
2596 b = pSlice.call(b);
2597 return _deepEqual(a, b);
3af2954a 2598 }
ab78acc6
IC
2599 var ka = objectKeys(a),
2600 kb = objectKeys(b),
2601 key, i;
2602 // having the same number of owned properties (keys incorporates
2603 // hasOwnProperty)
2604 if (ka.length != kb.length)
2605 return false;
2606 //the same set of keys (although not necessarily the same order),
2607 ka.sort();
2608 kb.sort();
2609 //~~~cheap key test
2610 for (i = ka.length - 1; i >= 0; i--) {
2611 if (ka[i] != kb[i])
2612 return false;
3af2954a 2613 }
ab78acc6
IC
2614 //equivalent values for every corresponding key, and
2615 //~~~possibly expensive deep test
2616 for (i = ka.length - 1; i >= 0; i--) {
2617 key = ka[i];
2618 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2619 }
ab78acc6
IC
2620 return true;
2621}
2622
2623// 8. The non-equivalence assertion tests for any deep inequality.
2624// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2625
ab78acc6
IC
2626assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2627 if (_deepEqual(actual, expected)) {
2628 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2629 }
ab78acc6 2630};
3af2954a 2631
ab78acc6
IC
2632// 9. The strict equality assertion tests strict equality, as determined by ===.
2633// assert.strictEqual(actual, expected, message_opt);
3af2954a 2634
ab78acc6
IC
2635assert.strictEqual = function strictEqual(actual, expected, message) {
2636 if (actual !== expected) {
2637 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2638 }
ab78acc6 2639};
3af2954a 2640
ab78acc6
IC
2641// 10. The strict non-equality assertion tests for strict inequality, as
2642// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2643
ab78acc6
IC
2644assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2645 if (actual === expected) {
2646 fail(actual, expected, message, '!==', assert.notStrictEqual);
2647 }
2648};
3af2954a 2649
ab78acc6
IC
2650function expectedException(actual, expected) {
2651 if (!actual || !expected) {
2652 return false;
2653 }
3af2954a 2654
ab78acc6
IC
2655 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2656 return expected.test(actual);
2657 } else if (actual instanceof expected) {
2658 return true;
2659 } else if (expected.call({}, actual) === true) {
2660 return true;
3af2954a
IC
2661 }
2662
ab78acc6
IC
2663 return false;
2664}
3af2954a 2665
ab78acc6
IC
2666function _throws(shouldThrow, block, expected, message) {
2667 var actual;
3af2954a 2668
ab78acc6
IC
2669 if (util.isString(expected)) {
2670 message = expected;
2671 expected = null;
3af2954a
IC
2672 }
2673
ab78acc6
IC
2674 try {
2675 block();
2676 } catch (e) {
2677 actual = e;
3af2954a
IC
2678 }
2679
ab78acc6
IC
2680 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2681 (message ? ' ' + message : '.');
3af2954a 2682
ab78acc6
IC
2683 if (shouldThrow && !actual) {
2684 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2685 }
2686
ab78acc6
IC
2687 if (!shouldThrow && expectedException(actual, expected)) {
2688 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2689 }
2690
ab78acc6
IC
2691 if ((shouldThrow && actual && expected &&
2692 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2693 throw actual;
3af2954a 2694 }
ab78acc6 2695}
3af2954a 2696
ab78acc6
IC
2697// 11. Expected to throw an error:
2698// assert.throws(block, Error_opt, message_opt);
3af2954a 2699
ab78acc6
IC
2700assert.throws = function(block, /*optional*/error, /*optional*/message) {
2701 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2702};
3af2954a 2703
ab78acc6
IC
2704// EXTENSION! This is annoying to write outside this module.
2705assert.doesNotThrow = function(block, /*optional*/message) {
2706 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2707};
3af2954a 2708
ab78acc6 2709assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2710
ab78acc6
IC
2711var objectKeys = Object.keys || function (obj) {
2712 var keys = [];
2713 for (var key in obj) {
2714 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2715 }
ab78acc6
IC
2716 return keys;
2717};
3af2954a 2718
ab78acc6 2719},{"util/":29}],6:[function(require,module,exports){
3af2954a 2720
ab78acc6
IC
2721},{}],7:[function(require,module,exports){
2722/*!
2723 * The buffer module from node.js, for the browser.
2724 *
2725 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2726 * @license MIT
2727 */
3af2954a 2728
ab78acc6
IC
2729var base64 = require('base64-js')
2730var ieee754 = require('ieee754')
2731var isArray = require('is-array')
3af2954a 2732
ab78acc6
IC
2733exports.Buffer = Buffer
2734exports.SlowBuffer = SlowBuffer
2735exports.INSPECT_MAX_BYTES = 50
2736Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2737
ab78acc6 2738var rootParent = {}
3af2954a 2739
ab78acc6
IC
2740/**
2741 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2742 * === true Use Uint8Array implementation (fastest)
2743 * === false Use Object implementation (most compatible, even IE6)
2744 *
2745 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2746 * Opera 11.6+, iOS 4.2+.
2747 *
2748 * Due to various browser bugs, sometimes the Object implementation will be used even
2749 * when the browser supports typed arrays.
2750 *
2751 * Note:
2752 *
2753 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2754 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2755 *
2756 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2757 * on objects.
2758 *
2759 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2760 *
2761 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2762 * incorrect length in some situations.
3af2954a 2763
ab78acc6
IC
2764 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2765 * get the Object implementation, which is slower but behaves correctly.
2766 */
2767Buffer.TYPED_ARRAY_SUPPORT = (function () {
2768 function Bar () {}
2769 try {
2770 var arr = new Uint8Array(1)
2771 arr.foo = function () { return 42 }
2772 arr.constructor = Bar
2773 return arr.foo() === 42 && // typed array instances can be augmented
2774 arr.constructor === Bar && // constructor can be set
2775 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2776 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2777 } catch (e) {
2778 return false
2779 }
2780})()
3af2954a 2781
ab78acc6
IC
2782function kMaxLength () {
2783 return Buffer.TYPED_ARRAY_SUPPORT
2784 ? 0x7fffffff
2785 : 0x3fffffff
2786}
3af2954a 2787
ab78acc6
IC
2788/**
2789 * Class: Buffer
2790 * =============
2791 *
2792 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2793 * with function properties for all the node `Buffer` API functions. We use
2794 * `Uint8Array` so that square bracket notation works as expected -- it returns
2795 * a single octet.
2796 *
2797 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2798 * prototype.
2799 */
2800function Buffer (arg) {
2801 if (!(this instanceof Buffer)) {
2802 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2803 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2804 return new Buffer(arg)
3af2954a
IC
2805 }
2806
ab78acc6
IC
2807 this.length = 0
2808 this.parent = undefined
3af2954a 2809
ab78acc6
IC
2810 // Common case.
2811 if (typeof arg === 'number') {
2812 return fromNumber(this, arg)
2813 }
3af2954a 2814
ab78acc6
IC
2815 // Slightly less common case.
2816 if (typeof arg === 'string') {
2817 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2818 }
3af2954a 2819
ab78acc6
IC
2820 // Unusual.
2821 return fromObject(this, arg)
2822}
3af2954a 2823
ab78acc6
IC
2824function fromNumber (that, length) {
2825 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2826 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2827 for (var i = 0; i < length; i++) {
2828 that[i] = 0
2829 }
3af2954a 2830 }
ab78acc6
IC
2831 return that
2832}
3af2954a 2833
ab78acc6
IC
2834function fromString (that, string, encoding) {
2835 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2836
ab78acc6
IC
2837 // Assumption: byteLength() return value is always < kMaxLength.
2838 var length = byteLength(string, encoding) | 0
2839 that = allocate(that, length)
3af2954a 2840
ab78acc6
IC
2841 that.write(string, encoding)
2842 return that
2843}
3af2954a 2844
ab78acc6
IC
2845function fromObject (that, object) {
2846 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2847
ab78acc6 2848 if (isArray(object)) return fromArray(that, object)
3af2954a 2849
ab78acc6
IC
2850 if (object == null) {
2851 throw new TypeError('must start with number, buffer, array or string')
2852 }
3af2954a 2853
ab78acc6
IC
2854 if (typeof ArrayBuffer !== 'undefined') {
2855 if (object.buffer instanceof ArrayBuffer) {
2856 return fromTypedArray(that, object)
2857 }
2858 if (object instanceof ArrayBuffer) {
2859 return fromArrayBuffer(that, object)
2860 }
3af2954a
IC
2861 }
2862
ab78acc6 2863 if (object.length) return fromArrayLike(that, object)
3af2954a 2864
ab78acc6
IC
2865 return fromJsonObject(that, object)
2866}
3af2954a 2867
ab78acc6
IC
2868function fromBuffer (that, buffer) {
2869 var length = checked(buffer.length) | 0
2870 that = allocate(that, length)
2871 buffer.copy(that, 0, 0, length)
2872 return that
2873}
3af2954a 2874
ab78acc6
IC
2875function fromArray (that, array) {
2876 var length = checked(array.length) | 0
2877 that = allocate(that, length)
2878 for (var i = 0; i < length; i += 1) {
2879 that[i] = array[i] & 255
3af2954a 2880 }
ab78acc6
IC
2881 return that
2882}
3af2954a 2883
ab78acc6
IC
2884// Duplicate of fromArray() to keep fromArray() monomorphic.
2885function fromTypedArray (that, array) {
2886 var length = checked(array.length) | 0
2887 that = allocate(that, length)
2888 // Truncating the elements is probably not what people expect from typed
2889 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2890 // of the old Buffer constructor.
2891 for (var i = 0; i < length; i += 1) {
2892 that[i] = array[i] & 255
3af2954a 2893 }
ab78acc6
IC
2894 return that
2895}
3af2954a 2896
ab78acc6
IC
2897function fromArrayBuffer (that, array) {
2898 if (Buffer.TYPED_ARRAY_SUPPORT) {
2899 // Return an augmented `Uint8Array` instance, for best performance
2900 array.byteLength
2901 that = Buffer._augment(new Uint8Array(array))
2902 } else {
2903 // Fallback: Return an object instance of the Buffer class
2904 that = fromTypedArray(that, new Uint8Array(array))
2905 }
2906 return that
2907}
3af2954a 2908
ab78acc6
IC
2909function fromArrayLike (that, array) {
2910 var length = checked(array.length) | 0
2911 that = allocate(that, length)
2912 for (var i = 0; i < length; i += 1) {
2913 that[i] = array[i] & 255
3af2954a 2914 }
ab78acc6
IC
2915 return that
2916}
3af2954a 2917
ab78acc6
IC
2918// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2919// Returns a zero-length buffer for inputs that don't conform to the spec.
2920function fromJsonObject (that, object) {
2921 var array
2922 var length = 0
2923
2924 if (object.type === 'Buffer' && isArray(object.data)) {
2925 array = object.data
2926 length = checked(array.length) | 0
3af2954a 2927 }
ab78acc6 2928 that = allocate(that, length)
3af2954a 2929
ab78acc6
IC
2930 for (var i = 0; i < length; i += 1) {
2931 that[i] = array[i] & 255
3af2954a 2932 }
ab78acc6
IC
2933 return that
2934}
3af2954a 2935
ab78acc6
IC
2936function allocate (that, length) {
2937 if (Buffer.TYPED_ARRAY_SUPPORT) {
2938 // Return an augmented `Uint8Array` instance, for best performance
2939 that = Buffer._augment(new Uint8Array(length))
2940 } else {
2941 // Fallback: Return an object instance of the Buffer class
2942 that.length = length
2943 that._isBuffer = true
2944 }
3af2954a 2945
ab78acc6
IC
2946 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2947 if (fromPool) that.parent = rootParent
3af2954a 2948
ab78acc6
IC
2949 return that
2950}
3af2954a 2951
ab78acc6
IC
2952function checked (length) {
2953 // Note: cannot use `length < kMaxLength` here because that fails when
2954 // length is NaN (which is otherwise coerced to zero.)
2955 if (length >= kMaxLength()) {
2956 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2957 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2958 }
ab78acc6
IC
2959 return length | 0
2960}
3af2954a 2961
ab78acc6
IC
2962function SlowBuffer (subject, encoding) {
2963 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2964
ab78acc6
IC
2965 var buf = new Buffer(subject, encoding)
2966 delete buf.parent
2967 return buf
2968}
3af2954a 2969
ab78acc6
IC
2970Buffer.isBuffer = function isBuffer (b) {
2971 return !!(b != null && b._isBuffer)
2972}
3af2954a 2973
ab78acc6
IC
2974Buffer.compare = function compare (a, b) {
2975 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2976 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2977 }
2978
ab78acc6 2979 if (a === b) return 0
3af2954a 2980
ab78acc6
IC
2981 var x = a.length
2982 var y = b.length
3af2954a 2983
ab78acc6
IC
2984 var i = 0
2985 var len = Math.min(x, y)
2986 while (i < len) {
2987 if (a[i] !== b[i]) break
3af2954a 2988
ab78acc6
IC
2989 ++i
2990 }
3af2954a 2991
ab78acc6
IC
2992 if (i !== len) {
2993 x = a[i]
2994 y = b[i]
2995 }
3af2954a 2996
ab78acc6
IC
2997 if (x < y) return -1
2998 if (y < x) return 1
2999 return 0
3000}
3af2954a 3001
ab78acc6
IC
3002Buffer.isEncoding = function isEncoding (encoding) {
3003 switch (String(encoding).toLowerCase()) {
3004 case 'hex':
3005 case 'utf8':
3006 case 'utf-8':
3007 case 'ascii':
3008 case 'binary':
3009 case 'base64':
3010 case 'raw':
3011 case 'ucs2':
3012 case 'ucs-2':
3013 case 'utf16le':
3014 case 'utf-16le':
3015 return true
3016 default:
3017 return false
3af2954a 3018 }
ab78acc6 3019}
3af2954a 3020
ab78acc6
IC
3021Buffer.concat = function concat (list, length) {
3022 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 3023
ab78acc6
IC
3024 if (list.length === 0) {
3025 return new Buffer(0)
3af2954a
IC
3026 }
3027
ab78acc6
IC
3028 var i
3029 if (length === undefined) {
3030 length = 0
3031 for (i = 0; i < list.length; i++) {
3032 length += list[i].length
3033 }
3af2954a
IC
3034 }
3035
ab78acc6
IC
3036 var buf = new Buffer(length)
3037 var pos = 0
3038 for (i = 0; i < list.length; i++) {
3039 var item = list[i]
3040 item.copy(buf, pos)
3041 pos += item.length
3042 }
3043 return buf
3044}
3af2954a 3045
ab78acc6
IC
3046function byteLength (string, encoding) {
3047 if (typeof string !== 'string') string = '' + string
3048
3049 var len = string.length
3050 if (len === 0) return 0
3051
3052 // Use a for loop to avoid recursion
3053 var loweredCase = false
3054 for (;;) {
3055 switch (encoding) {
3056 case 'ascii':
3057 case 'binary':
3058 // Deprecated
3059 case 'raw':
3060 case 'raws':
3061 return len
3062 case 'utf8':
3063 case 'utf-8':
3064 return utf8ToBytes(string).length
3065 case 'ucs2':
3066 case 'ucs-2':
3067 case 'utf16le':
3068 case 'utf-16le':
3069 return len * 2
3070 case 'hex':
3071 return len >>> 1
3072 case 'base64':
3073 return base64ToBytes(string).length
3074 default:
3075 if (loweredCase) return utf8ToBytes(string).length // assume utf8
3076 encoding = ('' + encoding).toLowerCase()
3077 loweredCase = true
3af2954a 3078 }
3af2954a 3079 }
ab78acc6
IC
3080}
3081Buffer.byteLength = byteLength
3af2954a 3082
ab78acc6
IC
3083// pre-set for values that may exist in the future
3084Buffer.prototype.length = undefined
3085Buffer.prototype.parent = undefined
3af2954a 3086
ab78acc6
IC
3087function slowToString (encoding, start, end) {
3088 var loweredCase = false
3af2954a 3089
ab78acc6
IC
3090 start = start | 0
3091 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 3092
ab78acc6
IC
3093 if (!encoding) encoding = 'utf8'
3094 if (start < 0) start = 0
3095 if (end > this.length) end = this.length
3096 if (end <= start) return ''
3af2954a 3097
ab78acc6
IC
3098 while (true) {
3099 switch (encoding) {
3100 case 'hex':
3101 return hexSlice(this, start, end)
3af2954a 3102
ab78acc6
IC
3103 case 'utf8':
3104 case 'utf-8':
3105 return utf8Slice(this, start, end)
3af2954a 3106
ab78acc6
IC
3107 case 'ascii':
3108 return asciiSlice(this, start, end)
3af2954a 3109
ab78acc6
IC
3110 case 'binary':
3111 return binarySlice(this, start, end)
3af2954a 3112
ab78acc6
IC
3113 case 'base64':
3114 return base64Slice(this, start, end)
3af2954a 3115
ab78acc6
IC
3116 case 'ucs2':
3117 case 'ucs-2':
3118 case 'utf16le':
3119 case 'utf-16le':
3120 return utf16leSlice(this, start, end)
3af2954a 3121
ab78acc6
IC
3122 default:
3123 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3124 encoding = (encoding + '').toLowerCase()
3125 loweredCase = true
3126 }
3af2954a 3127 }
ab78acc6 3128}
3af2954a 3129
ab78acc6
IC
3130Buffer.prototype.toString = function toString () {
3131 var length = this.length | 0
3132 if (length === 0) return ''
3133 if (arguments.length === 0) return utf8Slice(this, 0, length)
3134 return slowToString.apply(this, arguments)
3135}
3af2954a 3136
ab78acc6
IC
3137Buffer.prototype.equals = function equals (b) {
3138 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3139 if (this === b) return true
3140 return Buffer.compare(this, b) === 0
3141}
3af2954a 3142
ab78acc6
IC
3143Buffer.prototype.inspect = function inspect () {
3144 var str = ''
3145 var max = exports.INSPECT_MAX_BYTES
3146 if (this.length > 0) {
3147 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
3148 if (this.length > max) str += ' ... '
3af2954a 3149 }
ab78acc6
IC
3150 return '<Buffer ' + str + '>'
3151}
3af2954a 3152
ab78acc6
IC
3153Buffer.prototype.compare = function compare (b) {
3154 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
3155 if (this === b) return 0
3156 return Buffer.compare(this, b)
3157}
3af2954a 3158
ab78acc6
IC
3159Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
3160 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
3161 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
3162 byteOffset >>= 0
3af2954a 3163
ab78acc6
IC
3164 if (this.length === 0) return -1
3165 if (byteOffset >= this.length) return -1
3af2954a 3166
ab78acc6
IC
3167 // Negative offsets start from the end of the buffer
3168 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 3169
ab78acc6
IC
3170 if (typeof val === 'string') {
3171 if (val.length === 0) return -1 // special case: looking for empty string always fails
3172 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3173 }
ab78acc6
IC
3174 if (Buffer.isBuffer(val)) {
3175 return arrayIndexOf(this, val, byteOffset)
3af2954a 3176 }
ab78acc6
IC
3177 if (typeof val === 'number') {
3178 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
3179 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 3180 }
ab78acc6 3181 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
3182 }
3183
ab78acc6
IC
3184 function arrayIndexOf (arr, val, byteOffset) {
3185 var foundIndex = -1
3186 for (var i = 0; byteOffset + i < arr.length; i++) {
3187 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
3188 if (foundIndex === -1) foundIndex = i
3189 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 3190 } else {
ab78acc6 3191 foundIndex = -1
3af2954a 3192 }
3af2954a 3193 }
ab78acc6
IC
3194 return -1
3195 }
3af2954a 3196
ab78acc6
IC
3197 throw new TypeError('val must be string, number or Buffer')
3198}
3af2954a 3199
ab78acc6
IC
3200// `get` is deprecated
3201Buffer.prototype.get = function get (offset) {
3202 console.log('.get() is deprecated. Access using array indexes instead.')
3203 return this.readUInt8(offset)
3204}
3af2954a 3205
ab78acc6
IC
3206// `set` is deprecated
3207Buffer.prototype.set = function set (v, offset) {
3208 console.log('.set() is deprecated. Access using array indexes instead.')
3209 return this.writeUInt8(v, offset)
3210}
3af2954a 3211
ab78acc6
IC
3212function hexWrite (buf, string, offset, length) {
3213 offset = Number(offset) || 0
3214 var remaining = buf.length - offset
3215 if (!length) {
3216 length = remaining
3217 } else {
3218 length = Number(length)
3219 if (length > remaining) {
3220 length = remaining
3221 }
3222 }
3af2954a 3223
ab78acc6
IC
3224 // must be an even number of digits
3225 var strLen = string.length
3226 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 3227
ab78acc6
IC
3228 if (length > strLen / 2) {
3229 length = strLen / 2
3230 }
3231 for (var i = 0; i < length; i++) {
3232 var parsed = parseInt(string.substr(i * 2, 2), 16)
3233 if (isNaN(parsed)) throw new Error('Invalid hex string')
3234 buf[offset + i] = parsed
3af2954a 3235 }
ab78acc6
IC
3236 return i
3237}
3238
3239function utf8Write (buf, string, offset, length) {
3240 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
3241}
3af2954a 3242
ab78acc6
IC
3243function asciiWrite (buf, string, offset, length) {
3244 return blitBuffer(asciiToBytes(string), buf, offset, length)
3245}
3af2954a 3246
ab78acc6
IC
3247function binaryWrite (buf, string, offset, length) {
3248 return asciiWrite(buf, string, offset, length)
3249}
3af2954a 3250
ab78acc6
IC
3251function base64Write (buf, string, offset, length) {
3252 return blitBuffer(base64ToBytes(string), buf, offset, length)
3253}
3af2954a 3254
ab78acc6
IC
3255function ucs2Write (buf, string, offset, length) {
3256 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
3257}
3af2954a 3258
ab78acc6
IC
3259Buffer.prototype.write = function write (string, offset, length, encoding) {
3260 // Buffer#write(string)
3261 if (offset === undefined) {
3262 encoding = 'utf8'
3263 length = this.length
3264 offset = 0
3265 // Buffer#write(string, encoding)
3266 } else if (length === undefined && typeof offset === 'string') {
3267 encoding = offset
3268 length = this.length
3269 offset = 0
3270 // Buffer#write(string, offset[, length][, encoding])
3271 } else if (isFinite(offset)) {
3272 offset = offset | 0
3273 if (isFinite(length)) {
3274 length = length | 0
3275 if (encoding === undefined) encoding = 'utf8'
3276 } else {
3277 encoding = length
3278 length = undefined
3279 }
3280 // legacy write(string, encoding, offset, length) - remove in v0.13
3281 } else {
3282 var swap = encoding
3283 encoding = offset
3284 offset = length | 0
3285 length = swap
3af2954a
IC
3286 }
3287
ab78acc6
IC
3288 var remaining = this.length - offset
3289 if (length === undefined || length > remaining) length = remaining
3af2954a 3290
ab78acc6
IC
3291 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3292 throw new RangeError('attempt to write outside buffer bounds')
3293 }
3af2954a 3294
ab78acc6 3295 if (!encoding) encoding = 'utf8'
3af2954a 3296
ab78acc6
IC
3297 var loweredCase = false
3298 for (;;) {
3299 switch (encoding) {
3300 case 'hex':
3301 return hexWrite(this, string, offset, length)
ebd8d4e8 3302
ab78acc6
IC
3303 case 'utf8':
3304 case 'utf-8':
3305 return utf8Write(this, string, offset, length)
ebd8d4e8 3306
ab78acc6
IC
3307 case 'ascii':
3308 return asciiWrite(this, string, offset, length)
ebd8d4e8 3309
ab78acc6
IC
3310 case 'binary':
3311 return binaryWrite(this, string, offset, length)
ebd8d4e8 3312
ab78acc6
IC
3313 case 'base64':
3314 // Warning: maxLength not taken into account in base64Write
3315 return base64Write(this, string, offset, length)
ebd8d4e8 3316
ab78acc6
IC
3317 case 'ucs2':
3318 case 'ucs-2':
3319 case 'utf16le':
3320 case 'utf-16le':
3321 return ucs2Write(this, string, offset, length)
ebd8d4e8 3322
ab78acc6
IC
3323 default:
3324 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3325 encoding = ('' + encoding).toLowerCase()
3326 loweredCase = true
3327 }
3328 }
3329}
212b1b46 3330
ab78acc6
IC
3331Buffer.prototype.toJSON = function toJSON () {
3332 return {
3333 type: 'Buffer',
3334 data: Array.prototype.slice.call(this._arr || this, 0)
3335 }
3336}
212b1b46 3337
ab78acc6
IC
3338function base64Slice (buf, start, end) {
3339 if (start === 0 && end === buf.length) {
3340 return base64.fromByteArray(buf)
3341 } else {
3342 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3343 }
ab78acc6
IC
3344}
3345
3346function utf8Slice (buf, start, end) {
3347 end = Math.min(buf.length, end)
3348 var firstByte
3349 var secondByte
3350 var thirdByte
3351 var fourthByte
3352 var bytesPerSequence
3353 var tempCodePoint
3354 var codePoint
3355 var res = []
3356 var i = start
3357
3358 for (; i < end; i += bytesPerSequence) {
3359 firstByte = buf[i]
3360 codePoint = 0xFFFD
3361
3362 if (firstByte > 0xEF) {
3363 bytesPerSequence = 4
3364 } else if (firstByte > 0xDF) {
3365 bytesPerSequence = 3
3366 } else if (firstByte > 0xBF) {
3367 bytesPerSequence = 2
3368 } else {
3369 bytesPerSequence = 1
3370 }
212b1b46 3371
ab78acc6
IC
3372 if (i + bytesPerSequence <= end) {
3373 switch (bytesPerSequence) {
3374 case 1:
3375 if (firstByte < 0x80) {
3376 codePoint = firstByte
3377 }
3378 break
3379 case 2:
3380 secondByte = buf[i + 1]
3381 if ((secondByte & 0xC0) === 0x80) {
3382 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3383 if (tempCodePoint > 0x7F) {
3384 codePoint = tempCodePoint
3385 }
3386 }
3387 break
3388 case 3:
3389 secondByte = buf[i + 1]
3390 thirdByte = buf[i + 2]
3391 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3392 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3393 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3394 codePoint = tempCodePoint
3395 }
3396 }
3397 break
3398 case 4:
3399 secondByte = buf[i + 1]
3400 thirdByte = buf[i + 2]
3401 fourthByte = buf[i + 3]
3402 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3403 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3404 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3405 codePoint = tempCodePoint
3406 }
3407 }
3408 }
3409 }
212b1b46 3410
ab78acc6
IC
3411 if (codePoint === 0xFFFD) {
3412 // we generated an invalid codePoint so make sure to only advance by 1 byte
3413 bytesPerSequence = 1
3414 } else if (codePoint > 0xFFFF) {
3415 // encode to utf16 (surrogate pair dance)
3416 codePoint -= 0x10000
3417 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3418 codePoint = 0xDC00 | codePoint & 0x3FF
3419 }
212b1b46 3420
ab78acc6 3421 res.push(codePoint)
3af2954a 3422 }
212b1b46 3423
ab78acc6
IC
3424 return String.fromCharCode.apply(String, res)
3425}
212b1b46 3426
ab78acc6
IC
3427function asciiSlice (buf, start, end) {
3428 var ret = ''
3429 end = Math.min(buf.length, end)
3430
3431 for (var i = start; i < end; i++) {
3432 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3433 }
ab78acc6
IC
3434 return ret
3435}
212b1b46 3436
ab78acc6
IC
3437function binarySlice (buf, start, end) {
3438 var ret = ''
3439 end = Math.min(buf.length, end)
212b1b46 3440
ab78acc6
IC
3441 for (var i = start; i < end; i++) {
3442 ret += String.fromCharCode(buf[i])
3443 }
3444 return ret
3445}
212b1b46 3446
ab78acc6
IC
3447function hexSlice (buf, start, end) {
3448 var len = buf.length
212b1b46 3449
ab78acc6
IC
3450 if (!start || start < 0) start = 0
3451 if (!end || end < 0 || end > len) end = len
212b1b46 3452
ab78acc6
IC
3453 var out = ''
3454 for (var i = start; i < end; i++) {
3455 out += toHex(buf[i])
3456 }
3457 return out
3458}
212b1b46 3459
ab78acc6
IC
3460function utf16leSlice (buf, start, end) {
3461 var bytes = buf.slice(start, end)
3462 var res = ''
3463 for (var i = 0; i < bytes.length; i += 2) {
3464 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3465 }
3466 return res
3467}
212b1b46 3468
ab78acc6
IC
3469Buffer.prototype.slice = function slice (start, end) {
3470 var len = this.length
3471 start = ~~start
3472 end = end === undefined ? len : ~~end
212b1b46 3473
ab78acc6
IC
3474 if (start < 0) {
3475 start += len
3476 if (start < 0) start = 0
3477 } else if (start > len) {
3478 start = len
3479 }
212b1b46 3480
ab78acc6
IC
3481 if (end < 0) {
3482 end += len
3483 if (end < 0) end = 0
3484 } else if (end > len) {
3485 end = len
3486 }
212b1b46 3487
ab78acc6 3488 if (end < start) end = start
212b1b46 3489
ab78acc6
IC
3490 var newBuf
3491 if (Buffer.TYPED_ARRAY_SUPPORT) {
3492 newBuf = Buffer._augment(this.subarray(start, end))
3493 } else {
3494 var sliceLen = end - start
3495 newBuf = new Buffer(sliceLen, undefined)
3496 for (var i = 0; i < sliceLen; i++) {
3497 newBuf[i] = this[i + start]
3af2954a
IC
3498 }
3499 }
212b1b46 3500
ab78acc6 3501 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3502
ab78acc6
IC
3503 return newBuf
3504}
ebd8d4e8 3505
ab78acc6
IC
3506/*
3507 * Need to make sure that buffer isn't trying to write out of bounds.
3508 */
3509function checkOffset (offset, ext, length) {
3510 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3511 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3512}
ebd8d4e8 3513
ab78acc6
IC
3514Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3515 offset = offset | 0
3516 byteLength = byteLength | 0
3517 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3518
ab78acc6
IC
3519 var val = this[offset]
3520 var mul = 1
3521 var i = 0
3522 while (++i < byteLength && (mul *= 0x100)) {
3523 val += this[offset + i] * mul
3524 }
3af2954a 3525
ab78acc6
IC
3526 return val
3527}
3af2954a 3528
ab78acc6
IC
3529Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3530 offset = offset | 0
3531 byteLength = byteLength | 0
3532 if (!noAssert) {
3533 checkOffset(offset, byteLength, this.length)
3534 }
3af2954a 3535
ab78acc6
IC
3536 var val = this[offset + --byteLength]
3537 var mul = 1
3538 while (byteLength > 0 && (mul *= 0x100)) {
3539 val += this[offset + --byteLength] * mul
3af2954a
IC
3540 }
3541
ab78acc6
IC
3542 return val
3543}
3af2954a 3544
ab78acc6
IC
3545Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3546 if (!noAssert) checkOffset(offset, 1, this.length)
3547 return this[offset]
3548}
3af2954a 3549
ab78acc6
IC
3550Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3551 if (!noAssert) checkOffset(offset, 2, this.length)
3552 return this[offset] | (this[offset + 1] << 8)
3553}
3af2954a 3554
ab78acc6
IC
3555Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3556 if (!noAssert) checkOffset(offset, 2, this.length)
3557 return (this[offset] << 8) | this[offset + 1]
3558}
ebd8d4e8 3559
ab78acc6
IC
3560Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3561 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3562
ab78acc6
IC
3563 return ((this[offset]) |
3564 (this[offset + 1] << 8) |
3565 (this[offset + 2] << 16)) +
3566 (this[offset + 3] * 0x1000000)
3567}
3af2954a 3568
ab78acc6
IC
3569Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3570 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3571
ab78acc6
IC
3572 return (this[offset] * 0x1000000) +
3573 ((this[offset + 1] << 16) |
3574 (this[offset + 2] << 8) |
3575 this[offset + 3])
3576}
ebd8d4e8 3577
ab78acc6
IC
3578Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3579 offset = offset | 0
3580 byteLength = byteLength | 0
3581 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3582
ab78acc6
IC
3583 var val = this[offset]
3584 var mul = 1
3585 var i = 0
3586 while (++i < byteLength && (mul *= 0x100)) {
3587 val += this[offset + i] * mul
ebd8d4e8 3588 }
ab78acc6 3589 mul *= 0x80
ebd8d4e8 3590
ab78acc6
IC
3591 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3592
3593 return val
ebd8d4e8
IC
3594}
3595
ab78acc6
IC
3596Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3597 offset = offset | 0
3598 byteLength = byteLength | 0
3599 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3600
ab78acc6
IC
3601 var i = byteLength
3602 var mul = 1
3603 var val = this[offset + --i]
3604 while (i > 0 && (mul *= 0x100)) {
3605 val += this[offset + --i] * mul
3606 }
3607 mul *= 0x80
ebd8d4e8 3608
ab78acc6 3609 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3610
ab78acc6
IC
3611 return val
3612}
ebd8d4e8 3613
ab78acc6
IC
3614Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3615 if (!noAssert) checkOffset(offset, 1, this.length)
3616 if (!(this[offset] & 0x80)) return (this[offset])
3617 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3618}
ab78acc6
IC
3619
3620Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3621 if (!noAssert) checkOffset(offset, 2, this.length)
3622 var val = this[offset] | (this[offset + 1] << 8)
3623 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3624}
ab78acc6
IC
3625
3626Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3627 if (!noAssert) checkOffset(offset, 2, this.length)
3628 var val = this[offset + 1] | (this[offset] << 8)
3629 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3630}
3631
ab78acc6
IC
3632Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3633 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3634
ab78acc6
IC
3635 return (this[offset]) |
3636 (this[offset + 1] << 8) |
3637 (this[offset + 2] << 16) |
3638 (this[offset + 3] << 24)
ebd8d4e8 3639}
ebd8d4e8 3640
ab78acc6
IC
3641Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3642 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3643
ab78acc6
IC
3644 return (this[offset] << 24) |
3645 (this[offset + 1] << 16) |
3646 (this[offset + 2] << 8) |
3647 (this[offset + 3])
ebd8d4e8
IC
3648}
3649
ab78acc6
IC
3650Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3651 if (!noAssert) checkOffset(offset, 4, this.length)
3652 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3653}
3654
ab78acc6
IC
3655Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3656 if (!noAssert) checkOffset(offset, 4, this.length)
3657 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3658}
3659
ab78acc6
IC
3660Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3661 if (!noAssert) checkOffset(offset, 8, this.length)
3662 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3663}
3664
ab78acc6
IC
3665Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3666 if (!noAssert) checkOffset(offset, 8, this.length)
3667 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3668}
3669
ab78acc6
IC
3670function checkInt (buf, value, offset, ext, max, min) {
3671 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3672 if (value > max || value < min) throw new RangeError('value is out of bounds')
3673 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3674}
3675
ab78acc6
IC
3676Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3677 value = +value
3678 offset = offset | 0
3679 byteLength = byteLength | 0
3680 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3681
ab78acc6
IC
3682 var mul = 1
3683 var i = 0
3684 this[offset] = value & 0xFF
3685 while (++i < byteLength && (mul *= 0x100)) {
3686 this[offset + i] = (value / mul) & 0xFF
3687 }
ebd8d4e8 3688
ab78acc6 3689 return offset + byteLength
ebd8d4e8
IC
3690}
3691
ab78acc6
IC
3692Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3693 value = +value
3694 offset = offset | 0
3695 byteLength = byteLength | 0
3696 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3697
ab78acc6
IC
3698 var i = byteLength - 1
3699 var mul = 1
3700 this[offset + i] = value & 0xFF
3701 while (--i >= 0 && (mul *= 0x100)) {
3702 this[offset + i] = (value / mul) & 0xFF
3703 }
ebd8d4e8 3704
ab78acc6 3705 return offset + byteLength
ebd8d4e8
IC
3706}
3707
ab78acc6
IC
3708Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3709 value = +value
3710 offset = offset | 0
3711 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3712 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3713 this[offset] = value
3714 return offset + 1
ebd8d4e8
IC
3715}
3716
ab78acc6
IC
3717function objectWriteUInt16 (buf, value, offset, littleEndian) {
3718 if (value < 0) value = 0xffff + value + 1
3719 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3720 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3721 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3722 }
ebd8d4e8
IC
3723}
3724
ab78acc6
IC
3725Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3726 value = +value
3727 offset = offset | 0
3728 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3729 if (Buffer.TYPED_ARRAY_SUPPORT) {
3730 this[offset] = value
3731 this[offset + 1] = (value >>> 8)
3732 } else {
3733 objectWriteUInt16(this, value, offset, true)
3734 }
3735 return offset + 2
ebd8d4e8
IC
3736}
3737
ab78acc6
IC
3738Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3739 value = +value
3740 offset = offset | 0
3741 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3742 if (Buffer.TYPED_ARRAY_SUPPORT) {
3743 this[offset] = (value >>> 8)
3744 this[offset + 1] = value
3745 } else {
3746 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3747 }
ab78acc6 3748 return offset + 2
ebd8d4e8
IC
3749}
3750
ab78acc6
IC
3751function objectWriteUInt32 (buf, value, offset, littleEndian) {
3752 if (value < 0) value = 0xffffffff + value + 1
3753 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3754 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3755 }
ebd8d4e8
IC
3756}
3757
ab78acc6
IC
3758Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3759 value = +value
3760 offset = offset | 0
3761 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3762 if (Buffer.TYPED_ARRAY_SUPPORT) {
3763 this[offset + 3] = (value >>> 24)
3764 this[offset + 2] = (value >>> 16)
3765 this[offset + 1] = (value >>> 8)
3766 this[offset] = value
3767 } else {
3768 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3769 }
ab78acc6 3770 return offset + 4
ebd8d4e8
IC
3771}
3772
ab78acc6
IC
3773Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3774 value = +value
3775 offset = offset | 0
3776 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3777 if (Buffer.TYPED_ARRAY_SUPPORT) {
3778 this[offset] = (value >>> 24)
3779 this[offset + 1] = (value >>> 16)
3780 this[offset + 2] = (value >>> 8)
3781 this[offset + 3] = value
3782 } else {
3783 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3784 }
ab78acc6
IC
3785 return offset + 4
3786}
3787
3788Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3789 value = +value
3790 offset = offset | 0
3791 if (!noAssert) {
3792 var limit = Math.pow(2, 8 * byteLength - 1)
3793
3794 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3795 }
ab78acc6
IC
3796
3797 var i = 0
3798 var mul = 1
3799 var sub = value < 0 ? 1 : 0
3800 this[offset] = value & 0xFF
3801 while (++i < byteLength && (mul *= 0x100)) {
3802 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3803 }
ebd8d4e8 3804
ab78acc6 3805 return offset + byteLength
ebd8d4e8
IC
3806}
3807
ab78acc6
IC
3808Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3809 value = +value
3810 offset = offset | 0
3811 if (!noAssert) {
3812 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3813
ab78acc6
IC
3814 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3815 }
ebd8d4e8 3816
ab78acc6
IC
3817 var i = byteLength - 1
3818 var mul = 1
3819 var sub = value < 0 ? 1 : 0
3820 this[offset + i] = value & 0xFF
3821 while (--i >= 0 && (mul *= 0x100)) {
3822 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3823 }
3824
3825 return offset + byteLength
ebd8d4e8
IC
3826}
3827
ab78acc6
IC
3828Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3829 value = +value
3830 offset = offset | 0
3831 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3832 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3833 if (value < 0) value = 0xff + value + 1
3834 this[offset] = value
3835 return offset + 1
ebd8d4e8
IC
3836}
3837
ab78acc6
IC
3838Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3839 value = +value
3840 offset = offset | 0
3841 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3842 if (Buffer.TYPED_ARRAY_SUPPORT) {
3843 this[offset] = value
3844 this[offset + 1] = (value >>> 8)
3845 } else {
3846 objectWriteUInt16(this, value, offset, true)
3847 }
3848 return offset + 2
ebd8d4e8
IC
3849}
3850
ab78acc6
IC
3851Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3852 value = +value
3853 offset = offset | 0
3854 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3855 if (Buffer.TYPED_ARRAY_SUPPORT) {
3856 this[offset] = (value >>> 8)
3857 this[offset + 1] = value
3858 } else {
3859 objectWriteUInt16(this, value, offset, false)
3860 }
3861 return offset + 2
ebd8d4e8
IC
3862}
3863
ab78acc6
IC
3864Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3865 value = +value
3866 offset = offset | 0
3867 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3868 if (Buffer.TYPED_ARRAY_SUPPORT) {
3869 this[offset] = value
3870 this[offset + 1] = (value >>> 8)
3871 this[offset + 2] = (value >>> 16)
3872 this[offset + 3] = (value >>> 24)
3873 } else {
3874 objectWriteUInt32(this, value, offset, true)
3875 }
3876 return offset + 4
3877}
3878
3879Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3880 value = +value
3881 offset = offset | 0
3882 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3883 if (value < 0) value = 0xffffffff + value + 1
3884 if (Buffer.TYPED_ARRAY_SUPPORT) {
3885 this[offset] = (value >>> 24)
3886 this[offset + 1] = (value >>> 16)
3887 this[offset + 2] = (value >>> 8)
3888 this[offset + 3] = value
3889 } else {
3890 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3891 }
ab78acc6 3892 return offset + 4
ebd8d4e8
IC
3893}
3894
ab78acc6
IC
3895function checkIEEE754 (buf, value, offset, ext, max, min) {
3896 if (value > max || value < min) throw new RangeError('value is out of bounds')
3897 if (offset + ext > buf.length) throw new RangeError('index out of range')
3898 if (offset < 0) throw new RangeError('index out of range')
3899}
ebd8d4e8 3900
ab78acc6
IC
3901function writeFloat (buf, value, offset, littleEndian, noAssert) {
3902 if (!noAssert) {
3903 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3904 }
3905 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3906 return offset + 4
3907}
ebd8d4e8 3908
ab78acc6
IC
3909Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3910 return writeFloat(this, value, offset, true, noAssert)
3911}
ebd8d4e8 3912
ab78acc6
IC
3913Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3914 return writeFloat(this, value, offset, false, noAssert)
3915}
ebd8d4e8 3916
ab78acc6
IC
3917function writeDouble (buf, value, offset, littleEndian, noAssert) {
3918 if (!noAssert) {
3919 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3920 }
ab78acc6
IC
3921 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3922 return offset + 8
ebd8d4e8
IC
3923}
3924
ab78acc6
IC
3925Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3926 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3927}
3928
ab78acc6
IC
3929Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3930 return writeDouble(this, value, offset, false, noAssert)
3931}
ebd8d4e8 3932
ab78acc6
IC
3933// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3934Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3935 if (!start) start = 0
3936 if (!end && end !== 0) end = this.length
3937 if (targetStart >= target.length) targetStart = target.length
3938 if (!targetStart) targetStart = 0
3939 if (end > 0 && end < start) end = start
3940
3941 // Copy 0 bytes; we're done
3942 if (end === start) return 0
3943 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3944
ab78acc6
IC
3945 // Fatal error conditions
3946 if (targetStart < 0) {
3947 throw new RangeError('targetStart out of bounds')
3948 }
3949 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3950 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3951
ab78acc6
IC
3952 // Are we oob?
3953 if (end > this.length) end = this.length
3954 if (target.length - targetStart < end - start) {
3955 end = target.length - targetStart + start
3956 }
ebd8d4e8 3957
ab78acc6
IC
3958 var len = end - start
3959 var i
ebd8d4e8 3960
ab78acc6
IC
3961 if (this === target && start < targetStart && targetStart < end) {
3962 // descending copy from end
3963 for (i = len - 1; i >= 0; i--) {
3964 target[i + targetStart] = this[i + start]
3965 }
3966 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3967 // ascending copy from start
3968 for (i = 0; i < len; i++) {
3969 target[i + targetStart] = this[i + start]
3970 }
3971 } else {
3972 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3973 }
ebd8d4e8 3974
ab78acc6
IC
3975 return len
3976}
ebd8d4e8 3977
ab78acc6
IC
3978// fill(value, start=0, end=buffer.length)
3979Buffer.prototype.fill = function fill (value, start, end) {
3980 if (!value) value = 0
3981 if (!start) start = 0
3982 if (!end) end = this.length
ebd8d4e8 3983
ab78acc6 3984 if (end < start) throw new RangeError('end < start')
ebd8d4e8 3985
ab78acc6
IC
3986 // Fill 0 bytes; we're done
3987 if (end === start) return
3988 if (this.length === 0) return
ebd8d4e8 3989
ab78acc6
IC
3990 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3991 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 3992
ab78acc6
IC
3993 var i
3994 if (typeof value === 'number') {
3995 for (i = start; i < end; i++) {
3996 this[i] = value
ebd8d4e8 3997 }
ab78acc6
IC
3998 } else {
3999 var bytes = utf8ToBytes(value.toString())
4000 var len = bytes.length
4001 for (i = start; i < end; i++) {
4002 this[i] = bytes[i % len]
ebd8d4e8
IC
4003 }
4004 }
ebd8d4e8 4005
ab78acc6 4006 return this
ebd8d4e8
IC
4007}
4008
ab78acc6
IC
4009/**
4010 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
4011 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
4012 */
4013Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
4014 if (typeof Uint8Array !== 'undefined') {
4015 if (Buffer.TYPED_ARRAY_SUPPORT) {
4016 return (new Buffer(this)).buffer
4017 } else {
4018 var buf = new Uint8Array(this.length)
4019 for (var i = 0, len = buf.length; i < len; i += 1) {
4020 buf[i] = this[i]
ebd8d4e8 4021 }
ab78acc6 4022 return buf.buffer
ebd8d4e8 4023 }
ab78acc6
IC
4024 } else {
4025 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 4026 }
ebd8d4e8
IC
4027}
4028
ab78acc6
IC
4029// HELPER FUNCTIONS
4030// ================
ebd8d4e8 4031
ab78acc6 4032var BP = Buffer.prototype
ebd8d4e8 4033
ab78acc6
IC
4034/**
4035 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
4036 */
4037Buffer._augment = function _augment (arr) {
4038 arr.constructor = Buffer
4039 arr._isBuffer = true
ebd8d4e8 4040
ab78acc6
IC
4041 // save reference to original Uint8Array set method before overwriting
4042 arr._set = arr.set
ebd8d4e8 4043
ab78acc6
IC
4044 // deprecated
4045 arr.get = BP.get
4046 arr.set = BP.set
ebd8d4e8 4047
ab78acc6
IC
4048 arr.write = BP.write
4049 arr.toString = BP.toString
4050 arr.toLocaleString = BP.toString
4051 arr.toJSON = BP.toJSON
4052 arr.equals = BP.equals
4053 arr.compare = BP.compare
4054 arr.indexOf = BP.indexOf
4055 arr.copy = BP.copy
4056 arr.slice = BP.slice
4057 arr.readUIntLE = BP.readUIntLE
4058 arr.readUIntBE = BP.readUIntBE
4059 arr.readUInt8 = BP.readUInt8
4060 arr.readUInt16LE = BP.readUInt16LE
4061 arr.readUInt16BE = BP.readUInt16BE
4062 arr.readUInt32LE = BP.readUInt32LE
4063 arr.readUInt32BE = BP.readUInt32BE
4064 arr.readIntLE = BP.readIntLE
4065 arr.readIntBE = BP.readIntBE
4066 arr.readInt8 = BP.readInt8
4067 arr.readInt16LE = BP.readInt16LE
4068 arr.readInt16BE = BP.readInt16BE
4069 arr.readInt32LE = BP.readInt32LE
4070 arr.readInt32BE = BP.readInt32BE
4071 arr.readFloatLE = BP.readFloatLE
4072 arr.readFloatBE = BP.readFloatBE
4073 arr.readDoubleLE = BP.readDoubleLE
4074 arr.readDoubleBE = BP.readDoubleBE
4075 arr.writeUInt8 = BP.writeUInt8
4076 arr.writeUIntLE = BP.writeUIntLE
4077 arr.writeUIntBE = BP.writeUIntBE
4078 arr.writeUInt16LE = BP.writeUInt16LE
4079 arr.writeUInt16BE = BP.writeUInt16BE
4080 arr.writeUInt32LE = BP.writeUInt32LE
4081 arr.writeUInt32BE = BP.writeUInt32BE
4082 arr.writeIntLE = BP.writeIntLE
4083 arr.writeIntBE = BP.writeIntBE
4084 arr.writeInt8 = BP.writeInt8
4085 arr.writeInt16LE = BP.writeInt16LE
4086 arr.writeInt16BE = BP.writeInt16BE
4087 arr.writeInt32LE = BP.writeInt32LE
4088 arr.writeInt32BE = BP.writeInt32BE
4089 arr.writeFloatLE = BP.writeFloatLE
4090 arr.writeFloatBE = BP.writeFloatBE
4091 arr.writeDoubleLE = BP.writeDoubleLE
4092 arr.writeDoubleBE = BP.writeDoubleBE
4093 arr.fill = BP.fill
4094 arr.inspect = BP.inspect
4095 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 4096
ab78acc6 4097 return arr
ebd8d4e8
IC
4098}
4099
ab78acc6 4100var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 4101
ab78acc6
IC
4102function base64clean (str) {
4103 // Node strips out invalid characters like \n and \t from the string, base64-js does not
4104 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
4105 // Node converts strings with length < 2 to ''
4106 if (str.length < 2) return ''
4107 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
4108 while (str.length % 4 !== 0) {
4109 str = str + '='
4110 }
4111 return str
ebd8d4e8
IC
4112}
4113
ab78acc6
IC
4114function stringtrim (str) {
4115 if (str.trim) return str.trim()
4116 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
4117}
4118
ab78acc6
IC
4119function toHex (n) {
4120 if (n < 16) return '0' + n.toString(16)
4121 return n.toString(16)
ebd8d4e8
IC
4122}
4123
ab78acc6
IC
4124function utf8ToBytes (string, units) {
4125 units = units || Infinity
4126 var codePoint
4127 var length = string.length
4128 var leadSurrogate = null
4129 var bytes = []
ebd8d4e8 4130
ab78acc6
IC
4131 for (var i = 0; i < length; i++) {
4132 codePoint = string.charCodeAt(i)
ebd8d4e8 4133
ab78acc6
IC
4134 // is surrogate component
4135 if (codePoint > 0xD7FF && codePoint < 0xE000) {
4136 // last char was a lead
4137 if (!leadSurrogate) {
4138 // no lead yet
4139 if (codePoint > 0xDBFF) {
4140 // unexpected trail
4141 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4142 continue
ebd8d4e8 4143
ab78acc6
IC
4144 } else if (i + 1 === length) {
4145 // unpaired lead
4146 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4147 continue
4148 }
ebd8d4e8 4149
ab78acc6
IC
4150 // valid lead
4151 leadSurrogate = codePoint
ebd8d4e8 4152
ab78acc6
IC
4153 continue
4154 }
ebd8d4e8 4155
ab78acc6
IC
4156 // 2 leads in a row
4157 if (codePoint < 0xDC00) {
4158 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4159 leadSurrogate = codePoint
4160 continue
4161 }
ebd8d4e8 4162
ab78acc6
IC
4163 // valid surrogate pair
4164 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
4165
4166 } else if (leadSurrogate) {
4167 // valid bmp char, but last char was a lead
4168 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
4169 }
4170
4171 leadSurrogate = null
4172
4173 // encode utf8
4174 if (codePoint < 0x80) {
4175 if ((units -= 1) < 0) break
4176 bytes.push(codePoint)
4177 } else if (codePoint < 0x800) {
4178 if ((units -= 2) < 0) break
4179 bytes.push(
4180 codePoint >> 0x6 | 0xC0,
4181 codePoint & 0x3F | 0x80
4182 )
4183 } else if (codePoint < 0x10000) {
4184 if ((units -= 3) < 0) break
4185 bytes.push(
4186 codePoint >> 0xC | 0xE0,
4187 codePoint >> 0x6 & 0x3F | 0x80,
4188 codePoint & 0x3F | 0x80
4189 )
4190 } else if (codePoint < 0x110000) {
4191 if ((units -= 4) < 0) break
4192 bytes.push(
4193 codePoint >> 0x12 | 0xF0,
4194 codePoint >> 0xC & 0x3F | 0x80,
4195 codePoint >> 0x6 & 0x3F | 0x80,
4196 codePoint & 0x3F | 0x80
4197 )
4198 } else {
4199 throw new Error('Invalid code point')
ebd8d4e8 4200 }
ebd8d4e8 4201 }
ab78acc6
IC
4202
4203 return bytes
4204}
4205
4206function asciiToBytes (str) {
4207 var byteArray = []
4208 for (var i = 0; i < str.length; i++) {
4209 // Node's code seems to be doing this and not & 0x7F..
4210 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 4211 }
ab78acc6 4212 return byteArray
ebd8d4e8
IC
4213}
4214
ab78acc6
IC
4215function utf16leToBytes (str, units) {
4216 var c, hi, lo
4217 var byteArray = []
4218 for (var i = 0; i < str.length; i++) {
4219 if ((units -= 2) < 0) break
ebd8d4e8 4220
ab78acc6
IC
4221 c = str.charCodeAt(i)
4222 hi = c >> 8
4223 lo = c % 256
4224 byteArray.push(lo)
4225 byteArray.push(hi)
4226 }
ebd8d4e8 4227
ab78acc6
IC
4228 return byteArray
4229}
ebd8d4e8 4230
ab78acc6
IC
4231function base64ToBytes (str) {
4232 return base64.toByteArray(base64clean(str))
4233}
ebd8d4e8 4234
ab78acc6
IC
4235function blitBuffer (src, dst, offset, length) {
4236 for (var i = 0; i < length; i++) {
4237 if ((i + offset >= dst.length) || (i >= src.length)) break
4238 dst[i + offset] = src[i]
4239 }
4240 return i
4241}
4242
4243},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
4244var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
4245
4246;(function (exports) {
4247 'use strict';
4248
4249 var Arr = (typeof Uint8Array !== 'undefined')
4250 ? Uint8Array
4251 : Array
ebd8d4e8 4252
ab78acc6
IC
4253 var PLUS = '+'.charCodeAt(0)
4254 var SLASH = '/'.charCodeAt(0)
4255 var NUMBER = '0'.charCodeAt(0)
4256 var LOWER = 'a'.charCodeAt(0)
4257 var UPPER = 'A'.charCodeAt(0)
4258 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4259 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4260
ab78acc6
IC
4261 function decode (elt) {
4262 var code = elt.charCodeAt(0)
4263 if (code === PLUS ||
4264 code === PLUS_URL_SAFE)
4265 return 62 // '+'
4266 if (code === SLASH ||
4267 code === SLASH_URL_SAFE)
4268 return 63 // '/'
4269 if (code < NUMBER)
4270 return -1 //no match
4271 if (code < NUMBER + 10)
4272 return code - NUMBER + 26 + 26
4273 if (code < UPPER + 26)
4274 return code - UPPER
4275 if (code < LOWER + 26)
4276 return code - LOWER + 26
4277 }
ebd8d4e8 4278
ab78acc6
IC
4279 function b64ToByteArray (b64) {
4280 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4281
ab78acc6
IC
4282 if (b64.length % 4 > 0) {
4283 throw new Error('Invalid string. Length must be a multiple of 4')
4284 }
ebd8d4e8 4285
ab78acc6
IC
4286 // the number of equal signs (place holders)
4287 // if there are two placeholders, than the two characters before it
4288 // represent one byte
4289 // if there is only one, then the three characters before it represent 2 bytes
4290 // this is just a cheap hack to not do indexOf twice
4291 var len = b64.length
4292 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4293
ab78acc6
IC
4294 // base64 is 4/3 + up to two characters of the original data
4295 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4296
ab78acc6
IC
4297 // if there are placeholders, only get up to the last complete 4 chars
4298 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4299
ab78acc6 4300 var L = 0
ebd8d4e8 4301
ab78acc6
IC
4302 function push (v) {
4303 arr[L++] = v
4304 }
ebd8d4e8 4305
ab78acc6
IC
4306 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4307 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4308 push((tmp & 0xFF0000) >> 16)
4309 push((tmp & 0xFF00) >> 8)
4310 push(tmp & 0xFF)
4311 }
ebd8d4e8 4312
ab78acc6
IC
4313 if (placeHolders === 2) {
4314 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4315 push(tmp & 0xFF)
4316 } else if (placeHolders === 1) {
4317 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4318 push((tmp >> 8) & 0xFF)
4319 push(tmp & 0xFF)
4320 }
ebd8d4e8 4321
ab78acc6
IC
4322 return arr
4323 }
ebd8d4e8 4324
ab78acc6
IC
4325 function uint8ToBase64 (uint8) {
4326 var i,
4327 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4328 output = "",
4329 temp, length
ebd8d4e8 4330
ab78acc6
IC
4331 function encode (num) {
4332 return lookup.charAt(num)
4333 }
ebd8d4e8 4334
ab78acc6
IC
4335 function tripletToBase64 (num) {
4336 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4337 }
ebd8d4e8 4338
ab78acc6
IC
4339 // go through the array every three bytes, we'll deal with trailing stuff later
4340 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4341 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4342 output += tripletToBase64(temp)
4343 }
ebd8d4e8 4344
ab78acc6
IC
4345 // pad the end with zeros, but make sure to not forget the extra bytes
4346 switch (extraBytes) {
4347 case 1:
4348 temp = uint8[uint8.length - 1]
4349 output += encode(temp >> 2)
4350 output += encode((temp << 4) & 0x3F)
4351 output += '=='
4352 break
4353 case 2:
4354 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4355 output += encode(temp >> 10)
4356 output += encode((temp >> 4) & 0x3F)
4357 output += encode((temp << 2) & 0x3F)
4358 output += '='
4359 break
4360 }
ebd8d4e8 4361
ab78acc6
IC
4362 return output
4363 }
ebd8d4e8 4364
ab78acc6
IC
4365 exports.toByteArray = b64ToByteArray
4366 exports.fromByteArray = uint8ToBase64
4367}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4368
ab78acc6
IC
4369},{}],9:[function(require,module,exports){
4370exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4371 var e, m
4372 var eLen = nBytes * 8 - mLen - 1
4373 var eMax = (1 << eLen) - 1
4374 var eBias = eMax >> 1
4375 var nBits = -7
4376 var i = isLE ? (nBytes - 1) : 0
4377 var d = isLE ? -1 : 1
4378 var s = buffer[offset + i]
4379
4380 i += d
4381
4382 e = s & ((1 << (-nBits)) - 1)
4383 s >>= (-nBits)
4384 nBits += eLen
4385 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4386
4387 m = e & ((1 << (-nBits)) - 1)
4388 e >>= (-nBits)
4389 nBits += mLen
4390 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4391
ab78acc6
IC
4392 if (e === 0) {
4393 e = 1 - eBias
4394 } else if (e === eMax) {
4395 return m ? NaN : ((s ? -1 : 1) * Infinity)
4396 } else {
4397 m = m + Math.pow(2, mLen)
4398 e = e - eBias
ebd8d4e8 4399 }
ab78acc6 4400 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4401}
4402
ab78acc6
IC
4403exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4404 var e, m, c
4405 var eLen = nBytes * 8 - mLen - 1
4406 var eMax = (1 << eLen) - 1
4407 var eBias = eMax >> 1
4408 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4409 var i = isLE ? 0 : (nBytes - 1)
4410 var d = isLE ? 1 : -1
4411 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4412
ab78acc6 4413 value = Math.abs(value)
ebd8d4e8 4414
ab78acc6
IC
4415 if (isNaN(value) || value === Infinity) {
4416 m = isNaN(value) ? 1 : 0
4417 e = eMax
4418 } else {
4419 e = Math.floor(Math.log(value) / Math.LN2)
4420 if (value * (c = Math.pow(2, -e)) < 1) {
4421 e--
4422 c *= 2
ebd8d4e8 4423 }
ab78acc6
IC
4424 if (e + eBias >= 1) {
4425 value += rt / c
4426 } else {
4427 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4428 }
ab78acc6
IC
4429 if (value * c >= 2) {
4430 e++
4431 c /= 2
ebd8d4e8 4432 }
ab78acc6
IC
4433
4434 if (e + eBias >= eMax) {
4435 m = 0
4436 e = eMax
4437 } else if (e + eBias >= 1) {
4438 m = (value * c - 1) * Math.pow(2, mLen)
4439 e = e + eBias
4440 } else {
4441 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4442 e = 0
ebd8d4e8
IC
4443 }
4444 }
ebd8d4e8 4445
ab78acc6 4446 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4447
ab78acc6
IC
4448 e = (e << mLen) | m
4449 eLen += mLen
4450 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4451
ab78acc6
IC
4452 buffer[offset + i - d] |= s * 128
4453}
ebd8d4e8 4454
ab78acc6 4455},{}],10:[function(require,module,exports){
ebd8d4e8 4456
ab78acc6
IC
4457/**
4458 * isArray
4459 */
ebd8d4e8 4460
ab78acc6 4461var isArray = Array.isArray;
ebd8d4e8
IC
4462
4463/**
ab78acc6 4464 * toString
ebd8d4e8 4465 */
ebd8d4e8 4466
ab78acc6 4467var str = Object.prototype.toString;
ebd8d4e8
IC
4468
4469/**
ab78acc6
IC
4470 * Whether or not the given `val`
4471 * is an array.
ebd8d4e8 4472 *
ab78acc6
IC
4473 * example:
4474 *
4475 * isArray([]);
4476 * // > true
4477 * isArray(arguments);
4478 * // > false
4479 * isArray('');
4480 * // > false
4481 *
4482 * @param {mixed} val
4483 * @return {bool}
ebd8d4e8 4484 */
ebd8d4e8 4485
ab78acc6
IC
4486module.exports = isArray || function (val) {
4487 return !! val && '[object Array]' == str.call(val);
4488};
4489
4490},{}],11:[function(require,module,exports){
4491// Copyright Joyent, Inc. and other Node contributors.
4492//
4493// Permission is hereby granted, free of charge, to any person obtaining a
4494// copy of this software and associated documentation files (the
4495// "Software"), to deal in the Software without restriction, including
4496// without limitation the rights to use, copy, modify, merge, publish,
4497// distribute, sublicense, and/or sell copies of the Software, and to permit
4498// persons to whom the Software is furnished to do so, subject to the
4499// following conditions:
4500//
4501// The above copyright notice and this permission notice shall be included
4502// in all copies or substantial portions of the Software.
4503//
4504// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4505// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4506// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4507// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4508// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4509// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4510// USE OR OTHER DEALINGS IN THE SOFTWARE.
4511
4512function EventEmitter() {
4513 this._events = this._events || {};
4514 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4515}
ab78acc6 4516module.exports = EventEmitter;
ebd8d4e8 4517
ab78acc6
IC
4518// Backwards-compat with node 0.10.x
4519EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4520
ab78acc6
IC
4521EventEmitter.prototype._events = undefined;
4522EventEmitter.prototype._maxListeners = undefined;
4523
4524// By default EventEmitters will print a warning if more than 10 listeners are
4525// added to it. This is a useful default which helps finding memory leaks.
4526EventEmitter.defaultMaxListeners = 10;
4527
4528// Obviously not all Emitters should be limited to 10. This function allows
4529// that to be increased. Set to zero for unlimited.
4530EventEmitter.prototype.setMaxListeners = function(n) {
4531 if (!isNumber(n) || n < 0 || isNaN(n))
4532 throw TypeError('n must be a positive number');
4533 this._maxListeners = n;
4534 return this;
4535};
4536
4537EventEmitter.prototype.emit = function(type) {
4538 var er, handler, len, args, i, listeners;
4539
4540 if (!this._events)
4541 this._events = {};
4542
4543 // If there is no 'error' event listener then throw.
4544 if (type === 'error') {
4545 if (!this._events.error ||
4546 (isObject(this._events.error) && !this._events.error.length)) {
4547 er = arguments[1];
4548 if (er instanceof Error) {
4549 throw er; // Unhandled 'error' event
4550 }
4551 throw TypeError('Uncaught, unspecified "error" event.');
4552 }
4553 }
4554
4555 handler = this._events[type];
4556
4557 if (isUndefined(handler))
4558 return false;
4559
4560 if (isFunction(handler)) {
4561 switch (arguments.length) {
4562 // fast cases
4563 case 1:
4564 handler.call(this);
4565 break;
4566 case 2:
4567 handler.call(this, arguments[1]);
4568 break;
4569 case 3:
4570 handler.call(this, arguments[1], arguments[2]);
4571 break;
4572 // slower
4573 default:
4574 len = arguments.length;
4575 args = new Array(len - 1);
4576 for (i = 1; i < len; i++)
4577 args[i - 1] = arguments[i];
4578 handler.apply(this, args);
4579 }
4580 } else if (isObject(handler)) {
4581 len = arguments.length;
4582 args = new Array(len - 1);
4583 for (i = 1; i < len; i++)
4584 args[i - 1] = arguments[i];
ebd8d4e8 4585
ab78acc6
IC
4586 listeners = handler.slice();
4587 len = listeners.length;
4588 for (i = 0; i < len; i++)
4589 listeners[i].apply(this, args);
ebd8d4e8
IC
4590 }
4591
ab78acc6
IC
4592 return true;
4593};
ebd8d4e8 4594
ab78acc6
IC
4595EventEmitter.prototype.addListener = function(type, listener) {
4596 var m;
ebd8d4e8 4597
ab78acc6
IC
4598 if (!isFunction(listener))
4599 throw TypeError('listener must be a function');
ebd8d4e8 4600
ab78acc6
IC
4601 if (!this._events)
4602 this._events = {};
ebd8d4e8 4603
ab78acc6
IC
4604 // To avoid recursion in the case that type === "newListener"! Before
4605 // adding it to the listeners, first emit "newListener".
4606 if (this._events.newListener)
4607 this.emit('newListener', type,
4608 isFunction(listener.listener) ?
4609 listener.listener : listener);
ebd8d4e8 4610
ab78acc6
IC
4611 if (!this._events[type])
4612 // Optimize the case of one listener. Don't need the extra array object.
4613 this._events[type] = listener;
4614 else if (isObject(this._events[type]))
4615 // If we've already got an array, just append.
4616 this._events[type].push(listener);
4617 else
4618 // Adding the second element, need to change to array.
4619 this._events[type] = [this._events[type], listener];
4620
4621 // Check for listener leak
4622 if (isObject(this._events[type]) && !this._events[type].warned) {
4623 var m;
4624 if (!isUndefined(this._maxListeners)) {
4625 m = this._maxListeners;
4626 } else {
4627 m = EventEmitter.defaultMaxListeners;
4628 }
4629
4630 if (m && m > 0 && this._events[type].length > m) {
4631 this._events[type].warned = true;
4632 console.error('(node) warning: possible EventEmitter memory ' +
4633 'leak detected. %d listeners added. ' +
4634 'Use emitter.setMaxListeners() to increase limit.',
4635 this._events[type].length);
4636 if (typeof console.trace === 'function') {
4637 // not supported in IE 10
4638 console.trace();
4639 }
4640 }
4641 }
ebd8d4e8 4642
ab78acc6
IC
4643 return this;
4644};
ebd8d4e8 4645
ab78acc6 4646EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4647
ab78acc6
IC
4648EventEmitter.prototype.once = function(type, listener) {
4649 if (!isFunction(listener))
4650 throw TypeError('listener must be a function');
ebd8d4e8 4651
ab78acc6 4652 var fired = false;
ebd8d4e8 4653
ab78acc6
IC
4654 function g() {
4655 this.removeListener(type, g);
ebd8d4e8 4656
ab78acc6
IC
4657 if (!fired) {
4658 fired = true;
4659 listener.apply(this, arguments);
4660 }
4661 }
ebd8d4e8 4662
ab78acc6
IC
4663 g.listener = listener;
4664 this.on(type, g);
ebd8d4e8 4665
ab78acc6
IC
4666 return this;
4667};
ebd8d4e8 4668
ab78acc6
IC
4669// emits a 'removeListener' event iff the listener was removed
4670EventEmitter.prototype.removeListener = function(type, listener) {
4671 var list, position, length, i;
ebd8d4e8 4672
ab78acc6
IC
4673 if (!isFunction(listener))
4674 throw TypeError('listener must be a function');
ebd8d4e8 4675
ab78acc6
IC
4676 if (!this._events || !this._events[type])
4677 return this;
ebd8d4e8 4678
ab78acc6
IC
4679 list = this._events[type];
4680 length = list.length;
4681 position = -1;
4682
4683 if (list === listener ||
4684 (isFunction(list.listener) && list.listener === listener)) {
4685 delete this._events[type];
4686 if (this._events.removeListener)
4687 this.emit('removeListener', type, listener);
4688
4689 } else if (isObject(list)) {
4690 for (i = length; i-- > 0;) {
4691 if (list[i] === listener ||
4692 (list[i].listener && list[i].listener === listener)) {
4693 position = i;
4694 break;
ebd8d4e8 4695 }
ab78acc6 4696 }
ebd8d4e8 4697
ab78acc6
IC
4698 if (position < 0)
4699 return this;
4700
4701 if (list.length === 1) {
4702 list.length = 0;
4703 delete this._events[type];
4704 } else {
4705 list.splice(position, 1);
ebd8d4e8 4706 }
ab78acc6
IC
4707
4708 if (this._events.removeListener)
4709 this.emit('removeListener', type, listener);
ebd8d4e8 4710 }
ab78acc6
IC
4711
4712 return this;
ebd8d4e8
IC
4713};
4714
ab78acc6
IC
4715EventEmitter.prototype.removeAllListeners = function(type) {
4716 var key, listeners;
ebd8d4e8 4717
ab78acc6
IC
4718 if (!this._events)
4719 return this;
4720
4721 // not listening for removeListener, no need to emit
4722 if (!this._events.removeListener) {
4723 if (arguments.length === 0)
4724 this._events = {};
4725 else if (this._events[type])
4726 delete this._events[type];
4727 return this;
ebd8d4e8 4728 }
ab78acc6
IC
4729
4730 // emit removeListener for all listeners on all events
4731 if (arguments.length === 0) {
4732 for (key in this._events) {
4733 if (key === 'removeListener') continue;
4734 this.removeAllListeners(key);
4735 }
4736 this.removeAllListeners('removeListener');
4737 this._events = {};
4738 return this;
ebd8d4e8 4739 }
ebd8d4e8 4740
ab78acc6
IC
4741 listeners = this._events[type];
4742
4743 if (isFunction(listeners)) {
4744 this.removeListener(type, listeners);
ebd8d4e8 4745 } else {
ab78acc6
IC
4746 // LIFO order
4747 while (listeners.length)
4748 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4749 }
ab78acc6 4750 delete this._events[type];
ebd8d4e8 4751
ab78acc6
IC
4752 return this;
4753};
ebd8d4e8 4754
ab78acc6
IC
4755EventEmitter.prototype.listeners = function(type) {
4756 var ret;
4757 if (!this._events || !this._events[type])
4758 ret = [];
4759 else if (isFunction(this._events[type]))
4760 ret = [this._events[type]];
4761 else
4762 ret = this._events[type].slice();
4763 return ret;
4764};
ebd8d4e8 4765
ab78acc6
IC
4766EventEmitter.listenerCount = function(emitter, type) {
4767 var ret;
4768 if (!emitter._events || !emitter._events[type])
4769 ret = 0;
4770 else if (isFunction(emitter._events[type]))
4771 ret = 1;
4772 else
4773 ret = emitter._events[type].length;
4774 return ret;
4775};
ebd8d4e8 4776
ab78acc6
IC
4777function isFunction(arg) {
4778 return typeof arg === 'function';
ebd8d4e8
IC
4779}
4780
ab78acc6
IC
4781function isNumber(arg) {
4782 return typeof arg === 'number';
4783}
ebd8d4e8 4784
ab78acc6
IC
4785function isObject(arg) {
4786 return typeof arg === 'object' && arg !== null;
4787}
ebd8d4e8 4788
ab78acc6
IC
4789function isUndefined(arg) {
4790 return arg === void 0;
ebd8d4e8 4791}
ebd8d4e8 4792
ab78acc6
IC
4793},{}],12:[function(require,module,exports){
4794if (typeof Object.create === 'function') {
4795 // implementation from standard node.js 'util' module
4796 module.exports = function inherits(ctor, superCtor) {
4797 ctor.super_ = superCtor
4798 ctor.prototype = Object.create(superCtor.prototype, {
4799 constructor: {
4800 value: ctor,
4801 enumerable: false,
4802 writable: true,
4803 configurable: true
4804 }
4805 });
4806 };
4807} else {
4808 // old school shim for old browsers
4809 module.exports = function inherits(ctor, superCtor) {
4810 ctor.super_ = superCtor
4811 var TempCtor = function () {}
4812 TempCtor.prototype = superCtor.prototype
4813 ctor.prototype = new TempCtor()
4814 ctor.prototype.constructor = ctor
4815 }
4816}
ebd8d4e8 4817
ab78acc6
IC
4818},{}],13:[function(require,module,exports){
4819module.exports = Array.isArray || function (arr) {
4820 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4821};
4822
ab78acc6
IC
4823},{}],14:[function(require,module,exports){
4824// shim for using process in browser
ebd8d4e8 4825
ab78acc6
IC
4826var process = module.exports = {};
4827var queue = [];
4828var draining = false;
4829var currentQueue;
4830var queueIndex = -1;
4831
4832function cleanUpNextTick() {
4833 draining = false;
4834 if (currentQueue.length) {
4835 queue = currentQueue.concat(queue);
4836 } else {
4837 queueIndex = -1;
4838 }
4839 if (queue.length) {
4840 drainQueue();
4841 }
4842}
ebd8d4e8 4843
ab78acc6
IC
4844function drainQueue() {
4845 if (draining) {
4846 return;
4847 }
4848 var timeout = setTimeout(cleanUpNextTick);
4849 draining = true;
ebd8d4e8 4850
ab78acc6
IC
4851 var len = queue.length;
4852 while(len) {
4853 currentQueue = queue;
4854 queue = [];
4855 while (++queueIndex < len) {
4856 currentQueue[queueIndex].run();
4857 }
4858 queueIndex = -1;
4859 len = queue.length;
4860 }
4861 currentQueue = null;
4862 draining = false;
4863 clearTimeout(timeout);
4864}
4865
4866process.nextTick = function (fun) {
4867 var args = new Array(arguments.length - 1);
4868 if (arguments.length > 1) {
4869 for (var i = 1; i < arguments.length; i++) {
4870 args[i - 1] = arguments[i];
4871 }
4872 }
4873 queue.push(new Item(fun, args));
4874 if (queue.length === 1 && !draining) {
4875 setTimeout(drainQueue, 0);
4876 }
ebd8d4e8
IC
4877};
4878
ab78acc6
IC
4879// v8 likes predictible objects
4880function Item(fun, array) {
4881 this.fun = fun;
4882 this.array = array;
4883}
4884Item.prototype.run = function () {
4885 this.fun.apply(null, this.array);
4886};
4887process.title = 'browser';
4888process.browser = true;
4889process.env = {};
4890process.argv = [];
4891process.version = ''; // empty string to avoid regexp issues
4892process.versions = {};
ebd8d4e8 4893
ab78acc6
IC
4894function noop() {}
4895
4896process.on = noop;
4897process.addListener = noop;
4898process.once = noop;
4899process.off = noop;
4900process.removeListener = noop;
4901process.removeAllListeners = noop;
4902process.emit = noop;
4903
4904process.binding = function (name) {
4905 throw new Error('process.binding is not supported');
4906};
ebd8d4e8 4907
ab78acc6
IC
4908// TODO(shtylman)
4909process.cwd = function () { return '/' };
4910process.chdir = function (dir) {
4911 throw new Error('process.chdir is not supported');
4912};
4913process.umask = function() { return 0; };
ebd8d4e8 4914
ab78acc6
IC
4915},{}],15:[function(require,module,exports){
4916module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4917
ab78acc6
IC
4918},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4919(function (process){
4920// Copyright Joyent, Inc. and other Node contributors.
4921//
4922// Permission is hereby granted, free of charge, to any person obtaining a
4923// copy of this software and associated documentation files (the
4924// "Software"), to deal in the Software without restriction, including
4925// without limitation the rights to use, copy, modify, merge, publish,
4926// distribute, sublicense, and/or sell copies of the Software, and to permit
4927// persons to whom the Software is furnished to do so, subject to the
4928// following conditions:
4929//
4930// The above copyright notice and this permission notice shall be included
4931// in all copies or substantial portions of the Software.
4932//
4933// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4934// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4935// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4936// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4937// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4938// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4939// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4940
ab78acc6
IC
4941// a duplex stream is just a stream that is both readable and writable.
4942// Since JS doesn't have multiple prototypal inheritance, this class
4943// prototypally inherits from Readable, and then parasitically from
4944// Writable.
ebd8d4e8 4945
ab78acc6 4946module.exports = Duplex;
ebd8d4e8 4947
ab78acc6
IC
4948/*<replacement>*/
4949var objectKeys = Object.keys || function (obj) {
4950 var keys = [];
4951 for (var key in obj) keys.push(key);
4952 return keys;
ebd8d4e8 4953}
ab78acc6 4954/*</replacement>*/
ebd8d4e8 4955
ebd8d4e8 4956
ab78acc6
IC
4957/*<replacement>*/
4958var util = require('core-util-is');
4959util.inherits = require('inherits');
4960/*</replacement>*/
ebd8d4e8 4961
ab78acc6
IC
4962var Readable = require('./_stream_readable');
4963var Writable = require('./_stream_writable');
ebd8d4e8 4964
ab78acc6 4965util.inherits(Duplex, Readable);
ebd8d4e8 4966
ab78acc6
IC
4967forEach(objectKeys(Writable.prototype), function(method) {
4968 if (!Duplex.prototype[method])
4969 Duplex.prototype[method] = Writable.prototype[method];
4970});
ebd8d4e8 4971
ab78acc6
IC
4972function Duplex(options) {
4973 if (!(this instanceof Duplex))
4974 return new Duplex(options);
ebd8d4e8 4975
ab78acc6
IC
4976 Readable.call(this, options);
4977 Writable.call(this, options);
ebd8d4e8 4978
ab78acc6
IC
4979 if (options && options.readable === false)
4980 this.readable = false;
ebd8d4e8 4981
ab78acc6
IC
4982 if (options && options.writable === false)
4983 this.writable = false;
ebd8d4e8 4984
ab78acc6
IC
4985 this.allowHalfOpen = true;
4986 if (options && options.allowHalfOpen === false)
4987 this.allowHalfOpen = false;
ebd8d4e8 4988
ab78acc6 4989 this.once('end', onend);
ebd8d4e8
IC
4990}
4991
ab78acc6
IC
4992// the no-half-open enforcer
4993function onend() {
4994 // if we allow half-open state, or if the writable side ended,
4995 // then we're ok.
4996 if (this.allowHalfOpen || this._writableState.ended)
4997 return;
ebd8d4e8 4998
ab78acc6
IC
4999 // no more data can be written.
5000 // But allow more writes to happen in this tick.
5001 process.nextTick(this.end.bind(this));
5002}
ebd8d4e8 5003
ab78acc6
IC
5004function forEach (xs, f) {
5005 for (var i = 0, l = xs.length; i < l; i++) {
5006 f(xs[i], i);
ebd8d4e8 5007 }
ab78acc6 5008}
ebd8d4e8 5009
ab78acc6
IC
5010}).call(this,require('_process'))
5011},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
5012// Copyright Joyent, Inc. and other Node contributors.
5013//
5014// Permission is hereby granted, free of charge, to any person obtaining a
5015// copy of this software and associated documentation files (the
5016// "Software"), to deal in the Software without restriction, including
5017// without limitation the rights to use, copy, modify, merge, publish,
5018// distribute, sublicense, and/or sell copies of the Software, and to permit
5019// persons to whom the Software is furnished to do so, subject to the
5020// following conditions:
5021//
5022// The above copyright notice and this permission notice shall be included
5023// in all copies or substantial portions of the Software.
5024//
5025// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5026// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5027// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5028// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5029// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5030// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5031// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5032
ab78acc6
IC
5033// a passthrough stream.
5034// basically just the most minimal sort of Transform stream.
5035// Every written chunk gets output as-is.
ebd8d4e8 5036
ab78acc6 5037module.exports = PassThrough;
ebd8d4e8 5038
ab78acc6 5039var Transform = require('./_stream_transform');
ebd8d4e8 5040
ab78acc6
IC
5041/*<replacement>*/
5042var util = require('core-util-is');
5043util.inherits = require('inherits');
5044/*</replacement>*/
ebd8d4e8 5045
ab78acc6 5046util.inherits(PassThrough, Transform);
ebd8d4e8 5047
ab78acc6
IC
5048function PassThrough(options) {
5049 if (!(this instanceof PassThrough))
5050 return new PassThrough(options);
ebd8d4e8 5051
ab78acc6
IC
5052 Transform.call(this, options);
5053}
ebd8d4e8 5054
ab78acc6
IC
5055PassThrough.prototype._transform = function(chunk, encoding, cb) {
5056 cb(null, chunk);
ebd8d4e8
IC
5057};
5058
ab78acc6
IC
5059},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
5060(function (process){
ebd8d4e8
IC
5061// Copyright Joyent, Inc. and other Node contributors.
5062//
5063// Permission is hereby granted, free of charge, to any person obtaining a
5064// copy of this software and associated documentation files (the
5065// "Software"), to deal in the Software without restriction, including
5066// without limitation the rights to use, copy, modify, merge, publish,
5067// distribute, sublicense, and/or sell copies of the Software, and to permit
5068// persons to whom the Software is furnished to do so, subject to the
5069// following conditions:
5070//
5071// The above copyright notice and this permission notice shall be included
5072// in all copies or substantial portions of the Software.
5073//
5074// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5075// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5076// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5077// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5078// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5079// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5080// USE OR OTHER DEALINGS IN THE SOFTWARE.
5081
ab78acc6 5082module.exports = Readable;
ebd8d4e8 5083
ab78acc6
IC
5084/*<replacement>*/
5085var isArray = require('isarray');
5086/*</replacement>*/
5087
5088
5089/*<replacement>*/
5090var Buffer = require('buffer').Buffer;
5091/*</replacement>*/
5092
5093Readable.ReadableState = ReadableState;
5094
5095var EE = require('events').EventEmitter;
5096
5097/*<replacement>*/
5098if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
5099 return emitter.listeners(type).length;
ebd8d4e8 5100};
ab78acc6
IC
5101/*</replacement>*/
5102
5103var Stream = require('stream');
5104
5105/*<replacement>*/
5106var util = require('core-util-is');
5107util.inherits = require('inherits');
5108/*</replacement>*/
5109
5110var StringDecoder;
5111
5112
5113/*<replacement>*/
5114var debug = require('util');
5115if (debug && debug.debuglog) {
5116 debug = debug.debuglog('stream');
5117} else {
5118 debug = function () {};
5119}
5120/*</replacement>*/
5121
5122
5123util.inherits(Readable, Stream);
5124
5125function ReadableState(options, stream) {
5126 var Duplex = require('./_stream_duplex');
5127
5128 options = options || {};
5129
5130 // the point at which it stops calling _read() to fill the buffer
5131 // Note: 0 is a valid value, means "don't call _read preemptively ever"
5132 var hwm = options.highWaterMark;
5133 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
5134 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
5135
5136 // cast to ints.
5137 this.highWaterMark = ~~this.highWaterMark;
5138
5139 this.buffer = [];
5140 this.length = 0;
5141 this.pipes = null;
5142 this.pipesCount = 0;
5143 this.flowing = null;
5144 this.ended = false;
5145 this.endEmitted = false;
5146 this.reading = false;
ebd8d4e8 5147
ab78acc6
IC
5148 // a flag to be able to tell if the onwrite cb is called immediately,
5149 // or on a later tick. We set this to true at first, because any
5150 // actions that shouldn't happen until "later" should generally also
5151 // not happen before the first write call.
5152 this.sync = true;
ebd8d4e8 5153
ab78acc6
IC
5154 // whenever we return null, then we set a flag to say
5155 // that we're awaiting a 'readable' event emission.
5156 this.needReadable = false;
5157 this.emittedReadable = false;
5158 this.readableListening = false;
ebd8d4e8 5159
ab78acc6
IC
5160
5161 // object stream flag. Used to make read(n) ignore n and to
5162 // make all the buffer merging and length checks go away
5163 this.objectMode = !!options.objectMode;
5164
5165 if (stream instanceof Duplex)
5166 this.objectMode = this.objectMode || !!options.readableObjectMode;
5167
5168 // Crypto is kind of old and crusty. Historically, its default string
5169 // encoding is 'binary' so we have to make this configurable.
5170 // Everything else in the universe uses 'utf8', though.
5171 this.defaultEncoding = options.defaultEncoding || 'utf8';
5172
5173 // when piping, we only care about 'readable' events that happen
5174 // after read()ing all the bytes and not getting any pushback.
5175 this.ranOut = false;
5176
5177 // the number of writers that are awaiting a drain event in .pipe()s
5178 this.awaitDrain = 0;
5179
5180 // if true, a maybeReadMore has been scheduled
5181 this.readingMore = false;
5182
5183 this.decoder = null;
5184 this.encoding = null;
5185 if (options.encoding) {
5186 if (!StringDecoder)
5187 StringDecoder = require('string_decoder/').StringDecoder;
5188 this.decoder = new StringDecoder(options.encoding);
5189 this.encoding = options.encoding;
ebd8d4e8 5190 }
ab78acc6 5191}
ebd8d4e8 5192
ab78acc6
IC
5193function Readable(options) {
5194 var Duplex = require('./_stream_duplex');
5195
5196 if (!(this instanceof Readable))
5197 return new Readable(options);
5198
5199 this._readableState = new ReadableState(options, this);
5200
5201 // legacy
5202 this.readable = true;
5203
5204 Stream.call(this);
5205}
5206
5207// Manually shove something into the read() buffer.
5208// This returns true if the highWaterMark has not been hit yet,
5209// similar to how Writable.write() returns true if you should
5210// write() some more.
5211Readable.prototype.push = function(chunk, encoding) {
5212 var state = this._readableState;
5213
5214 if (util.isString(chunk) && !state.objectMode) {
5215 encoding = encoding || state.defaultEncoding;
5216 if (encoding !== state.encoding) {
5217 chunk = new Buffer(chunk, encoding);
5218 encoding = '';
ebd8d4e8 5219 }
ebd8d4e8
IC
5220 }
5221
ab78acc6 5222 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
5223};
5224
ab78acc6
IC
5225// Unshift should *always* be something directly out of read()
5226Readable.prototype.unshift = function(chunk) {
5227 var state = this._readableState;
5228 return readableAddChunk(this, state, chunk, '', true);
5229};
ebd8d4e8 5230
ab78acc6
IC
5231function readableAddChunk(stream, state, chunk, encoding, addToFront) {
5232 var er = chunkInvalid(state, chunk);
5233 if (er) {
5234 stream.emit('error', er);
5235 } else if (util.isNullOrUndefined(chunk)) {
5236 state.reading = false;
5237 if (!state.ended)
5238 onEofChunk(stream, state);
5239 } else if (state.objectMode || chunk && chunk.length > 0) {
5240 if (state.ended && !addToFront) {
5241 var e = new Error('stream.push() after EOF');
5242 stream.emit('error', e);
5243 } else if (state.endEmitted && addToFront) {
5244 var e = new Error('stream.unshift() after end event');
5245 stream.emit('error', e);
ebd8d4e8 5246 } else {
ab78acc6
IC
5247 if (state.decoder && !addToFront && !encoding)
5248 chunk = state.decoder.write(chunk);
5249
5250 if (!addToFront)
5251 state.reading = false;
5252
5253 // if we want the data now, just emit it.
5254 if (state.flowing && state.length === 0 && !state.sync) {
5255 stream.emit('data', chunk);
5256 stream.read(0);
5257 } else {
5258 // update the buffer info.
5259 state.length += state.objectMode ? 1 : chunk.length;
5260 if (addToFront)
5261 state.buffer.unshift(chunk);
5262 else
5263 state.buffer.push(chunk);
5264
5265 if (state.needReadable)
5266 emitReadable(stream);
5267 }
5268
5269 maybeReadMore(stream, state);
ebd8d4e8 5270 }
ab78acc6
IC
5271 } else if (!addToFront) {
5272 state.reading = false;
ebd8d4e8 5273 }
ebd8d4e8 5274
ab78acc6
IC
5275 return needMoreData(state);
5276}
ebd8d4e8 5277
ab78acc6
IC
5278
5279
5280// if it's past the high water mark, we can push in some more.
5281// Also, if we have no data yet, we can stand some
5282// more bytes. This is to work around cases where hwm=0,
5283// such as the repl. Also, if the push() triggered a
5284// readable event, and the user called read(largeNumber) such that
5285// needReadable was set, then we ought to push more, so that another
5286// 'readable' event will be triggered.
5287function needMoreData(state) {
5288 return !state.ended &&
5289 (state.needReadable ||
5290 state.length < state.highWaterMark ||
5291 state.length === 0);
5292}
5293
5294// backwards compatibility.
5295Readable.prototype.setEncoding = function(enc) {
5296 if (!StringDecoder)
5297 StringDecoder = require('string_decoder/').StringDecoder;
5298 this._readableState.decoder = new StringDecoder(enc);
5299 this._readableState.encoding = enc;
5300 return this;
5301};
5302
5303// Don't raise the hwm > 128MB
5304var MAX_HWM = 0x800000;
5305function roundUpToNextPowerOf2(n) {
5306 if (n >= MAX_HWM) {
5307 n = MAX_HWM;
5308 } else {
5309 // Get the next highest power of 2
5310 n--;
5311 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5312 n++;
ebd8d4e8 5313 }
ab78acc6 5314 return n;
ebd8d4e8 5315}
ebd8d4e8 5316
ab78acc6
IC
5317function howMuchToRead(n, state) {
5318 if (state.length === 0 && state.ended)
5319 return 0;
ebd8d4e8 5320
ab78acc6
IC
5321 if (state.objectMode)
5322 return n === 0 ? 0 : 1;
ebd8d4e8 5323
ab78acc6
IC
5324 if (isNaN(n) || util.isNull(n)) {
5325 // only flow one buffer at a time
5326 if (state.flowing && state.buffer.length)
5327 return state.buffer[0].length;
5328 else
5329 return state.length;
5330 }
ebd8d4e8 5331
ab78acc6
IC
5332 if (n <= 0)
5333 return 0;
ebd8d4e8 5334
ab78acc6
IC
5335 // If we're asking for more than the target buffer level,
5336 // then raise the water mark. Bump up to the next highest
5337 // power of 2, to prevent increasing it excessively in tiny
5338 // amounts.
5339 if (n > state.highWaterMark)
5340 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5341
ab78acc6
IC
5342 // don't have that much. return null, unless we've ended.
5343 if (n > state.length) {
5344 if (!state.ended) {
5345 state.needReadable = true;
5346 return 0;
5347 } else
5348 return state.length;
ebd8d4e8 5349 }
ab78acc6
IC
5350
5351 return n;
ebd8d4e8
IC
5352}
5353
ab78acc6
IC
5354// you can override either this method, or the async _read(n) below.
5355Readable.prototype.read = function(n) {
5356 debug('read', n);
5357 var state = this._readableState;
5358 var nOrig = n;
ebd8d4e8 5359
ab78acc6
IC
5360 if (!util.isNumber(n) || n > 0)
5361 state.emittedReadable = false;
5362
5363 // if we're doing read(0) to trigger a readable event, but we
5364 // already have a bunch of data in the buffer, then just trigger
5365 // the 'readable' event and move on.
5366 if (n === 0 &&
5367 state.needReadable &&
5368 (state.length >= state.highWaterMark || state.ended)) {
5369 debug('read: emitReadable', state.length, state.ended);
5370 if (state.length === 0 && state.ended)
5371 endReadable(this);
5372 else
5373 emitReadable(this);
5374 return null;
5375 }
5376
5377 n = howMuchToRead(n, state);
5378
5379 // if we've ended, and we're now clear, then finish it up.
5380 if (n === 0 && state.ended) {
5381 if (state.length === 0)
5382 endReadable(this);
5383 return null;
5384 }
5385
5386 // All the actual chunk generation logic needs to be
5387 // *below* the call to _read. The reason is that in certain
5388 // synthetic stream cases, such as passthrough streams, _read
5389 // may be a completely synchronous operation which may change
5390 // the state of the read buffer, providing enough data when
5391 // before there was *not* enough.
5392 //
5393 // So, the steps are:
5394 // 1. Figure out what the state of things will be after we do
5395 // a read from the buffer.
5396 //
5397 // 2. If that resulting state will trigger a _read, then call _read.
5398 // Note that this may be asynchronous, or synchronous. Yes, it is
5399 // deeply ugly to write APIs this way, but that still doesn't mean
5400 // that the Readable class should behave improperly, as streams are
5401 // designed to be sync/async agnostic.
5402 // Take note if the _read call is sync or async (ie, if the read call
5403 // has returned yet), so that we know whether or not it's safe to emit
5404 // 'readable' etc.
5405 //
5406 // 3. Actually pull the requested chunks out of the buffer and return.
5407
5408 // if we need a readable event, then we need to do some reading.
5409 var doRead = state.needReadable;
5410 debug('need readable', doRead);
5411
5412 // if we currently have less than the highWaterMark, then also read some
5413 if (state.length === 0 || state.length - n < state.highWaterMark) {
5414 doRead = true;
5415 debug('length less than watermark', doRead);
5416 }
5417
5418 // however, if we've ended, then there's no point, and if we're already
5419 // reading, then it's unnecessary.
5420 if (state.ended || state.reading) {
5421 doRead = false;
5422 debug('reading or ended', doRead);
5423 }
5424
5425 if (doRead) {
5426 debug('do read');
5427 state.reading = true;
5428 state.sync = true;
5429 // if the length is currently zero, then we *need* a readable event.
5430 if (state.length === 0)
5431 state.needReadable = true;
5432 // call internal read method
5433 this._read(state.highWaterMark);
5434 state.sync = false;
5435 }
5436
5437 // If _read pushed data synchronously, then `reading` will be false,
5438 // and we need to re-evaluate how much data we can return to the user.
5439 if (doRead && !state.reading)
5440 n = howMuchToRead(nOrig, state);
5441
5442 var ret;
5443 if (n > 0)
5444 ret = fromList(n, state);
5445 else
5446 ret = null;
ebd8d4e8 5447
ab78acc6
IC
5448 if (util.isNull(ret)) {
5449 state.needReadable = true;
5450 n = 0;
5451 }
ebd8d4e8 5452
ab78acc6 5453 state.length -= n;
ebd8d4e8 5454
ab78acc6
IC
5455 // If we have nothing in the buffer, then we want to know
5456 // as soon as we *do* get something into the buffer.
5457 if (state.length === 0 && !state.ended)
5458 state.needReadable = true;
ebd8d4e8 5459
ab78acc6
IC
5460 // If we tried to read() past the EOF, then emit end on the next tick.
5461 if (nOrig !== n && state.ended && state.length === 0)
5462 endReadable(this);
5463
5464 if (!util.isNull(ret))
5465 this.emit('data', ret);
5466
5467 return ret;
5468};
5469
5470function chunkInvalid(state, chunk) {
5471 var er = null;
5472 if (!util.isBuffer(chunk) &&
5473 !util.isString(chunk) &&
5474 !util.isNullOrUndefined(chunk) &&
5475 !state.objectMode) {
5476 er = new TypeError('Invalid non-string/buffer chunk');
5477 }
5478 return er;
ebd8d4e8
IC
5479}
5480
5481
ab78acc6
IC
5482function onEofChunk(stream, state) {
5483 if (state.decoder && !state.ended) {
5484 var chunk = state.decoder.end();
5485 if (chunk && chunk.length) {
5486 state.buffer.push(chunk);
5487 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5488 }
ebd8d4e8 5489 }
ab78acc6 5490 state.ended = true;
ebd8d4e8 5491
ab78acc6
IC
5492 // emit 'readable' now to make sure it gets picked up.
5493 emitReadable(stream);
5494}
5495
5496// Don't emit readable right away in sync mode, because this can trigger
5497// another read() call => stack overflow. This way, it might trigger
5498// a nextTick recursion warning, but that's not so bad.
5499function emitReadable(stream) {
5500 var state = stream._readableState;
5501 state.needReadable = false;
5502 if (!state.emittedReadable) {
5503 debug('emitReadable', state.flowing);
5504 state.emittedReadable = true;
5505 if (state.sync)
5506 process.nextTick(function() {
5507 emitReadable_(stream);
5508 });
5509 else
5510 emitReadable_(stream);
ebd8d4e8 5511 }
ab78acc6 5512}
ebd8d4e8 5513
ab78acc6
IC
5514function emitReadable_(stream) {
5515 debug('emit readable');
5516 stream.emit('readable');
5517 flow(stream);
5518}
ebd8d4e8 5519
ab78acc6
IC
5520
5521// at this point, the user has presumably seen the 'readable' event,
5522// and called read() to consume some data. that may have triggered
5523// in turn another _read(n) call, in which case reading = true if
5524// it's in progress.
5525// However, if we're not ended, or reading, and the length < hwm,
5526// then go ahead and try to read some more preemptively.
5527function maybeReadMore(stream, state) {
5528 if (!state.readingMore) {
5529 state.readingMore = true;
5530 process.nextTick(function() {
5531 maybeReadMore_(stream, state);
5532 });
ebd8d4e8 5533 }
ab78acc6 5534}
ebd8d4e8 5535
ab78acc6
IC
5536function maybeReadMore_(stream, state) {
5537 var len = state.length;
5538 while (!state.reading && !state.flowing && !state.ended &&
5539 state.length < state.highWaterMark) {
5540 debug('maybeReadMore read 0');
5541 stream.read(0);
5542 if (len === state.length)
5543 // didn't get any data, stop spinning.
5544 break;
5545 else
5546 len = state.length;
ebd8d4e8 5547 }
ab78acc6
IC
5548 state.readingMore = false;
5549}
ebd8d4e8 5550
ab78acc6
IC
5551// abstract method. to be overridden in specific implementation classes.
5552// call cb(er, data) where data is <= n in length.
5553// for virtual (non-string, non-buffer) streams, "length" is somewhat
5554// arbitrary, and perhaps not very meaningful.
5555Readable.prototype._read = function(n) {
5556 this.emit('error', new Error('not implemented'));
5557};
5558
5559Readable.prototype.pipe = function(dest, pipeOpts) {
5560 var src = this;
5561 var state = this._readableState;
5562
5563 switch (state.pipesCount) {
5564 case 0:
5565 state.pipes = dest;
5566 break;
5567 case 1:
5568 state.pipes = [state.pipes, dest];
5569 break;
5570 default:
5571 state.pipes.push(dest);
5572 break;
ebd8d4e8 5573 }
ab78acc6
IC
5574 state.pipesCount += 1;
5575 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5576
ab78acc6
IC
5577 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5578 dest !== process.stdout &&
5579 dest !== process.stderr;
ebd8d4e8 5580
ab78acc6
IC
5581 var endFn = doEnd ? onend : cleanup;
5582 if (state.endEmitted)
5583 process.nextTick(endFn);
5584 else
5585 src.once('end', endFn);
5586
5587 dest.on('unpipe', onunpipe);
5588 function onunpipe(readable) {
5589 debug('onunpipe');
5590 if (readable === src) {
5591 cleanup();
5592 }
5593 }
5594
5595 function onend() {
5596 debug('onend');
5597 dest.end();
5598 }
5599
5600 // when the dest drains, it reduces the awaitDrain counter
5601 // on the source. This would be more elegant with a .once()
5602 // handler in flow(), but adding and removing repeatedly is
5603 // too slow.
5604 var ondrain = pipeOnDrain(src);
5605 dest.on('drain', ondrain);
5606
5607 function cleanup() {
5608 debug('cleanup');
5609 // cleanup event handlers once the pipe is broken
5610 dest.removeListener('close', onclose);
5611 dest.removeListener('finish', onfinish);
5612 dest.removeListener('drain', ondrain);
5613 dest.removeListener('error', onerror);
5614 dest.removeListener('unpipe', onunpipe);
5615 src.removeListener('end', onend);
5616 src.removeListener('end', cleanup);
5617 src.removeListener('data', ondata);
5618
5619 // if the reader is waiting for a drain event from this
5620 // specific writer, then it would cause it to never start
5621 // flowing again.
5622 // So, if this is awaiting a drain, then we just call it now.
5623 // If we don't know, then assume that we are waiting for one.
5624 if (state.awaitDrain &&
5625 (!dest._writableState || dest._writableState.needDrain))
5626 ondrain();
5627 }
5628
5629 src.on('data', ondata);
5630 function ondata(chunk) {
5631 debug('ondata');
5632 var ret = dest.write(chunk);
5633 if (false === ret) {
5634 debug('false write response, pause',
5635 src._readableState.awaitDrain);
5636 src._readableState.awaitDrain++;
5637 src.pause();
5638 }
5639 }
5640
5641 // if the dest has an error, then stop piping into it.
5642 // however, don't suppress the throwing behavior for this.
5643 function onerror(er) {
5644 debug('onerror', er);
5645 unpipe();
5646 dest.removeListener('error', onerror);
5647 if (EE.listenerCount(dest, 'error') === 0)
5648 dest.emit('error', er);
5649 }
5650 // This is a brutally ugly hack to make sure that our error handler
5651 // is attached before any userland ones. NEVER DO THIS.
5652 if (!dest._events || !dest._events.error)
5653 dest.on('error', onerror);
5654 else if (isArray(dest._events.error))
5655 dest._events.error.unshift(onerror);
5656 else
5657 dest._events.error = [onerror, dest._events.error];
5658
5659
5660
5661 // Both close and finish should trigger unpipe, but only once.
5662 function onclose() {
5663 dest.removeListener('finish', onfinish);
5664 unpipe();
ebd8d4e8 5665 }
ab78acc6
IC
5666 dest.once('close', onclose);
5667 function onfinish() {
5668 debug('onfinish');
5669 dest.removeListener('close', onclose);
5670 unpipe();
5671 }
5672 dest.once('finish', onfinish);
ebd8d4e8 5673
ab78acc6
IC
5674 function unpipe() {
5675 debug('unpipe');
5676 src.unpipe(dest);
ebd8d4e8
IC
5677 }
5678
ab78acc6
IC
5679 // tell the dest that it's being piped to
5680 dest.emit('pipe', src);
5681
5682 // start the flow if it hasn't been started already.
5683 if (!state.flowing) {
5684 debug('pipe resume');
5685 src.resume();
ebd8d4e8
IC
5686 }
5687
ab78acc6
IC
5688 return dest;
5689};
5690
5691function pipeOnDrain(src) {
5692 return function() {
5693 var state = src._readableState;
5694 debug('pipeOnDrain', state.awaitDrain);
5695 if (state.awaitDrain)
5696 state.awaitDrain--;
5697 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5698 state.flowing = true;
5699 flow(src);
5700 }
5701 };
5702}
5703
5704
5705Readable.prototype.unpipe = function(dest) {
5706 var state = this._readableState;
5707
5708 // if we're not piping anywhere, then do nothing.
5709 if (state.pipesCount === 0)
5710 return this;
5711
5712 // just one destination. most common case.
5713 if (state.pipesCount === 1) {
5714 // passed in one, but it's not the right one.
5715 if (dest && dest !== state.pipes)
5716 return this;
5717
5718 if (!dest)
5719 dest = state.pipes;
5720
5721 // got a match.
5722 state.pipes = null;
5723 state.pipesCount = 0;
5724 state.flowing = false;
5725 if (dest)
5726 dest.emit('unpipe', this);
5727 return this;
ebd8d4e8
IC
5728 }
5729
ab78acc6
IC
5730 // slow case. multiple pipe destinations.
5731
5732 if (!dest) {
5733 // remove all.
5734 var dests = state.pipes;
5735 var len = state.pipesCount;
5736 state.pipes = null;
5737 state.pipesCount = 0;
5738 state.flowing = false;
5739
5740 for (var i = 0; i < len; i++)
5741 dests[i].emit('unpipe', this);
5742 return this;
ebd8d4e8
IC
5743 }
5744
ab78acc6
IC
5745 // try to find the right one.
5746 var i = indexOf(state.pipes, dest);
5747 if (i === -1)
5748 return this;
5749
5750 state.pipes.splice(i, 1);
5751 state.pipesCount -= 1;
5752 if (state.pipesCount === 1)
5753 state.pipes = state.pipes[0];
5754
5755 dest.emit('unpipe', this);
ebd8d4e8 5756
ab78acc6
IC
5757 return this;
5758};
5759
5760// set up data events if they are asked for
5761// Ensure readable listeners eventually get something
5762Readable.prototype.on = function(ev, fn) {
5763 var res = Stream.prototype.on.call(this, ev, fn);
5764
5765 // If listening to data, and it has not explicitly been paused,
5766 // then call resume to start the flow of data on the next tick.
5767 if (ev === 'data' && false !== this._readableState.flowing) {
5768 this.resume();
5769 }
5770
5771 if (ev === 'readable' && this.readable) {
5772 var state = this._readableState;
5773 if (!state.readableListening) {
5774 state.readableListening = true;
5775 state.emittedReadable = false;
5776 state.needReadable = true;
5777 if (!state.reading) {
5778 var self = this;
5779 process.nextTick(function() {
5780 debug('readable nexttick read 0');
5781 self.read(0);
5782 });
5783 } else if (state.length) {
5784 emitReadable(this, state);
5785 }
ebd8d4e8
IC
5786 }
5787 }
5788
ab78acc6
IC
5789 return res;
5790};
5791Readable.prototype.addListener = Readable.prototype.on;
5792
5793// pause() and resume() are remnants of the legacy readable stream API
5794// If the user uses them, then switch into old mode.
5795Readable.prototype.resume = function() {
5796 var state = this._readableState;
5797 if (!state.flowing) {
5798 debug('resume');
5799 state.flowing = true;
5800 if (!state.reading) {
5801 debug('resume read 0');
5802 this.read(0);
5803 }
5804 resume(this, state);
5805 }
5806 return this;
5807};
ebd8d4e8 5808
ab78acc6
IC
5809function resume(stream, state) {
5810 if (!state.resumeScheduled) {
5811 state.resumeScheduled = true;
5812 process.nextTick(function() {
5813 resume_(stream, state);
ebd8d4e8
IC
5814 });
5815 }
ebd8d4e8
IC
5816}
5817
ab78acc6
IC
5818function resume_(stream, state) {
5819 state.resumeScheduled = false;
5820 stream.emit('resume');
5821 flow(stream);
5822 if (state.flowing && !state.reading)
5823 stream.read(0);
ebd8d4e8
IC
5824}
5825
ab78acc6
IC
5826Readable.prototype.pause = function() {
5827 debug('call pause flowing=%j', this._readableState.flowing);
5828 if (false !== this._readableState.flowing) {
5829 debug('pause');
5830 this._readableState.flowing = false;
5831 this.emit('pause');
5832 }
5833 return this;
5834};
ebd8d4e8 5835
ab78acc6
IC
5836function flow(stream) {
5837 var state = stream._readableState;
5838 debug('flow', state.flowing);
5839 if (state.flowing) {
5840 do {
5841 var chunk = stream.read();
5842 } while (null !== chunk && state.flowing);
5843 }
ebd8d4e8
IC
5844}
5845
ab78acc6
IC
5846// wrap an old-style stream as the async data source.
5847// This is *not* part of the readable stream interface.
5848// It is an ugly unfortunate mess of history.
5849Readable.prototype.wrap = function(stream) {
5850 var state = this._readableState;
5851 var paused = false;
ebd8d4e8 5852
ab78acc6
IC
5853 var self = this;
5854 stream.on('end', function() {
5855 debug('wrapped end');
5856 if (state.decoder && !state.ended) {
5857 var chunk = state.decoder.end();
5858 if (chunk && chunk.length)
5859 self.push(chunk);
ebd8d4e8 5860 }
ab78acc6
IC
5861
5862 self.push(null);
ebd8d4e8 5863 });
ebd8d4e8 5864
ab78acc6
IC
5865 stream.on('data', function(chunk) {
5866 debug('wrapped data');
5867 if (state.decoder)
5868 chunk = state.decoder.write(chunk);
5869 if (!chunk || !state.objectMode && !chunk.length)
5870 return;
ebd8d4e8 5871
ab78acc6
IC
5872 var ret = self.push(chunk);
5873 if (!ret) {
5874 paused = true;
5875 stream.pause();
ebd8d4e8 5876 }
ab78acc6
IC
5877 });
5878
5879 // proxy all the other methods.
5880 // important when wrapping filters and duplexes.
5881 for (var i in stream) {
5882 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5883 this[i] = function(method) { return function() {
5884 return stream[method].apply(stream, arguments);
5885 }}(i);
ebd8d4e8
IC
5886 }
5887 }
ab78acc6
IC
5888
5889 // proxy certain important events.
5890 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5891 forEach(events, function(ev) {
5892 stream.on(ev, self.emit.bind(self, ev));
5893 });
5894
5895 // when we try to consume some more bytes, simply unpause the
5896 // underlying stream.
5897 self._read = function(n) {
5898 debug('wrapped _read', n);
5899 if (paused) {
5900 paused = false;
5901 stream.resume();
ebd8d4e8 5902 }
ab78acc6
IC
5903 };
5904
5905 return self;
5906};
5907
5908
5909
5910// exposed for testing purposes only.
5911Readable._fromList = fromList;
5912
5913// Pluck off n bytes from an array of buffers.
5914// Length is the combined lengths of all the buffers in the list.
5915function fromList(n, state) {
5916 var list = state.buffer;
5917 var length = state.length;
5918 var stringMode = !!state.decoder;
5919 var objectMode = !!state.objectMode;
5920 var ret;
5921
5922 // nothing in the list, definitely empty.
5923 if (list.length === 0)
5924 return null;
5925
5926 if (length === 0)
5927 ret = null;
5928 else if (objectMode)
5929 ret = list.shift();
5930 else if (!n || n >= length) {
5931 // read it all, truncate the array.
5932 if (stringMode)
5933 ret = list.join('');
5934 else
5935 ret = Buffer.concat(list, length);
5936 list.length = 0;
5937 } else {
5938 // read just some of it.
5939 if (n < list[0].length) {
5940 // just take a part of the first list item.
5941 // slice is the same for buffers and strings.
5942 var buf = list[0];
5943 ret = buf.slice(0, n);
5944 list[0] = buf.slice(n);
5945 } else if (n === list[0].length) {
5946 // first list is a perfect match
5947 ret = list.shift();
ebd8d4e8 5948 } else {
ab78acc6
IC
5949 // complex case.
5950 // we have enough to cover it, but it spans past the first buffer.
5951 if (stringMode)
5952 ret = '';
5953 else
5954 ret = new Buffer(n);
ebd8d4e8 5955
ab78acc6
IC
5956 var c = 0;
5957 for (var i = 0, l = list.length; i < l && c < n; i++) {
5958 var buf = list[0];
5959 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5960
ab78acc6
IC
5961 if (stringMode)
5962 ret += buf.slice(0, cpy);
5963 else
5964 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5965
ab78acc6
IC
5966 if (cpy < buf.length)
5967 list[0] = buf.slice(cpy);
5968 else
5969 list.shift();
ebd8d4e8 5970
ab78acc6
IC
5971 c += cpy;
5972 }
5973 }
ebd8d4e8
IC
5974 }
5975
ab78acc6 5976 return ret;
ebd8d4e8
IC
5977}
5978
ab78acc6
IC
5979function endReadable(stream) {
5980 var state = stream._readableState;
ebd8d4e8 5981
ab78acc6
IC
5982 // If we get here before consuming all the bytes, then that is a
5983 // bug in node. Should never happen.
5984 if (state.length > 0)
5985 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 5986
ab78acc6
IC
5987 if (!state.endEmitted) {
5988 state.ended = true;
5989 process.nextTick(function() {
5990 // Check that we didn't get one last unshift.
5991 if (!state.endEmitted && state.length === 0) {
5992 state.endEmitted = true;
5993 stream.readable = false;
5994 stream.emit('end');
5995 }
5996 });
5997 }
ebd8d4e8 5998}
ebd8d4e8 5999
ab78acc6
IC
6000function forEach (xs, f) {
6001 for (var i = 0, l = xs.length; i < l; i++) {
6002 f(xs[i], i);
6003 }
ebd8d4e8 6004}
ebd8d4e8 6005
ab78acc6
IC
6006function indexOf (xs, x) {
6007 for (var i = 0, l = xs.length; i < l; i++) {
6008 if (xs[i] === x) return i;
6009 }
6010 return -1;
ebd8d4e8 6011}
ebd8d4e8 6012
ab78acc6
IC
6013}).call(this,require('_process'))
6014},{"./_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){
6015// Copyright Joyent, Inc. and other Node contributors.
6016//
6017// Permission is hereby granted, free of charge, to any person obtaining a
6018// copy of this software and associated documentation files (the
6019// "Software"), to deal in the Software without restriction, including
6020// without limitation the rights to use, copy, modify, merge, publish,
6021// distribute, sublicense, and/or sell copies of the Software, and to permit
6022// persons to whom the Software is furnished to do so, subject to the
6023// following conditions:
6024//
6025// The above copyright notice and this permission notice shall be included
6026// in all copies or substantial portions of the Software.
6027//
6028// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6029// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6030// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6031// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6032// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6033// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6034// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6035
ebd8d4e8 6036
ab78acc6
IC
6037// a transform stream is a readable/writable stream where you do
6038// something with the data. Sometimes it's called a "filter",
6039// but that's not a great name for it, since that implies a thing where
6040// some bits pass through, and others are simply ignored. (That would
6041// be a valid example of a transform, of course.)
6042//
6043// While the output is causally related to the input, it's not a
6044// necessarily symmetric or synchronous transformation. For example,
6045// a zlib stream might take multiple plain-text writes(), and then
6046// emit a single compressed chunk some time in the future.
6047//
6048// Here's how this works:
6049//
6050// The Transform stream has all the aspects of the readable and writable
6051// stream classes. When you write(chunk), that calls _write(chunk,cb)
6052// internally, and returns false if there's a lot of pending writes
6053// buffered up. When you call read(), that calls _read(n) until
6054// there's enough pending readable data buffered up.
6055//
6056// In a transform stream, the written data is placed in a buffer. When
6057// _read(n) is called, it transforms the queued up data, calling the
6058// buffered _write cb's as it consumes chunks. If consuming a single
6059// written chunk would result in multiple output chunks, then the first
6060// outputted bit calls the readcb, and subsequent chunks just go into
6061// the read buffer, and will cause it to emit 'readable' if necessary.
6062//
6063// This way, back-pressure is actually determined by the reading side,
6064// since _read has to be called to start processing a new chunk. However,
6065// a pathological inflate type of transform can cause excessive buffering
6066// here. For example, imagine a stream where every byte of input is
6067// interpreted as an integer from 0-255, and then results in that many
6068// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
6069// 1kb of data being output. In this case, you could write a very small
6070// amount of input, and end up with a very large amount of output. In
6071// such a pathological inflating mechanism, there'd be no way to tell
6072// the system to stop doing the transform. A single 4MB write could
6073// cause the system to run out of memory.
6074//
6075// However, even in such a pathological case, only a single written chunk
6076// would be consumed, and then the rest would wait (un-transformed) until
6077// the results of the previous transformed chunk were consumed.
ebd8d4e8 6078
ab78acc6 6079module.exports = Transform;
ebd8d4e8 6080
ab78acc6 6081var Duplex = require('./_stream_duplex');
ebd8d4e8 6082
ab78acc6
IC
6083/*<replacement>*/
6084var util = require('core-util-is');
6085util.inherits = require('inherits');
6086/*</replacement>*/
6087
6088util.inherits(Transform, Duplex);
6089
6090
6091function TransformState(options, stream) {
6092 this.afterTransform = function(er, data) {
6093 return afterTransform(stream, er, data);
6094 };
6095
6096 this.needTransform = false;
6097 this.transforming = false;
6098 this.writecb = null;
6099 this.writechunk = null;
ebd8d4e8 6100}
ebd8d4e8 6101
ab78acc6
IC
6102function afterTransform(stream, er, data) {
6103 var ts = stream._transformState;
6104 ts.transforming = false;
6105
6106 var cb = ts.writecb;
6107
6108 if (!cb)
6109 return stream.emit('error', new Error('no writecb in Transform class'));
6110
6111 ts.writechunk = null;
6112 ts.writecb = null;
6113
6114 if (!util.isNullOrUndefined(data))
6115 stream.push(data);
6116
6117 if (cb)
6118 cb(er);
6119
6120 var rs = stream._readableState;
6121 rs.reading = false;
6122 if (rs.needReadable || rs.length < rs.highWaterMark) {
6123 stream._read(rs.highWaterMark);
6124 }
ebd8d4e8 6125}
ebd8d4e8 6126
ab78acc6
IC
6127
6128function Transform(options) {
6129 if (!(this instanceof Transform))
6130 return new Transform(options);
6131
6132 Duplex.call(this, options);
6133
6134 this._transformState = new TransformState(options, this);
6135
6136 // when the writable side finishes, then flush out anything remaining.
6137 var stream = this;
6138
6139 // start out asking for a readable event once data is transformed.
6140 this._readableState.needReadable = true;
6141
6142 // we have implemented the _read method, and done the other things
6143 // that Readable wants before the first _read call, so unset the
6144 // sync guard flag.
6145 this._readableState.sync = false;
6146
6147 this.once('prefinish', function() {
6148 if (util.isFunction(this._flush))
6149 this._flush(function(er) {
6150 done(stream, er);
6151 });
6152 else
6153 done(stream);
6154 });
ebd8d4e8 6155}
ebd8d4e8 6156
ab78acc6
IC
6157Transform.prototype.push = function(chunk, encoding) {
6158 this._transformState.needTransform = false;
6159 return Duplex.prototype.push.call(this, chunk, encoding);
6160};
6161
6162// This is the part where you do stuff!
6163// override this function in implementation classes.
6164// 'chunk' is an input chunk.
6165//
6166// Call `push(newChunk)` to pass along transformed output
6167// to the readable side. You may call 'push' zero or more times.
6168//
6169// Call `cb(err)` when you are done with this chunk. If you pass
6170// an error, then that'll put the hurt on the whole operation. If you
6171// never call cb(), then you'll never get another chunk.
6172Transform.prototype._transform = function(chunk, encoding, cb) {
6173 throw new Error('not implemented');
6174};
6175
6176Transform.prototype._write = function(chunk, encoding, cb) {
6177 var ts = this._transformState;
6178 ts.writecb = cb;
6179 ts.writechunk = chunk;
6180 ts.writeencoding = encoding;
6181 if (!ts.transforming) {
6182 var rs = this._readableState;
6183 if (ts.needTransform ||
6184 rs.needReadable ||
6185 rs.length < rs.highWaterMark)
6186 this._read(rs.highWaterMark);
6187 }
6188};
6189
6190// Doesn't matter what the args are here.
6191// _transform does all the work.
6192// That we got here means that the readable side wants more data.
6193Transform.prototype._read = function(n) {
6194 var ts = this._transformState;
ebd8d4e8 6195
ab78acc6
IC
6196 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
6197 ts.transforming = true;
6198 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
6199 } else {
6200 // mark that we need a transform, so that any data that comes in
6201 // will get processed, now that we've asked for it.
6202 ts.needTransform = true;
6203 }
6204};
ebd8d4e8 6205
ebd8d4e8 6206
ab78acc6
IC
6207function done(stream, er) {
6208 if (er)
6209 return stream.emit('error', er);
ebd8d4e8 6210
ab78acc6
IC
6211 // if there's nothing in the write buffer, then that means
6212 // that nothing more will ever be provided
6213 var ws = stream._writableState;
6214 var ts = stream._transformState;
ebd8d4e8 6215
ab78acc6
IC
6216 if (ws.length)
6217 throw new Error('calling transform done when ws.length != 0');
6218
6219 if (ts.transforming)
6220 throw new Error('calling transform done when still transforming');
6221
6222 return stream.push(null);
ebd8d4e8
IC
6223}
6224
ab78acc6
IC
6225},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
6226(function (process){
6227// Copyright Joyent, Inc. and other Node contributors.
6228//
6229// Permission is hereby granted, free of charge, to any person obtaining a
6230// copy of this software and associated documentation files (the
6231// "Software"), to deal in the Software without restriction, including
6232// without limitation the rights to use, copy, modify, merge, publish,
6233// distribute, sublicense, and/or sell copies of the Software, and to permit
6234// persons to whom the Software is furnished to do so, subject to the
6235// following conditions:
6236//
6237// The above copyright notice and this permission notice shall be included
6238// in all copies or substantial portions of the Software.
6239//
6240// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6241// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6242// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6243// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6244// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6245// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6246// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6247
ab78acc6
IC
6248// A bit simpler than readable streams.
6249// Implement an async ._write(chunk, cb), and it'll handle all
6250// the drain event emission and buffering.
ebd8d4e8 6251
ab78acc6 6252module.exports = Writable;
ebd8d4e8 6253
ab78acc6
IC
6254/*<replacement>*/
6255var Buffer = require('buffer').Buffer;
6256/*</replacement>*/
ebd8d4e8 6257
ab78acc6 6258Writable.WritableState = WritableState;
ebd8d4e8
IC
6259
6260
ab78acc6
IC
6261/*<replacement>*/
6262var util = require('core-util-is');
6263util.inherits = require('inherits');
6264/*</replacement>*/
ebd8d4e8 6265
ab78acc6 6266var Stream = require('stream');
ebd8d4e8 6267
ab78acc6 6268util.inherits(Writable, Stream);
ebd8d4e8 6269
ab78acc6
IC
6270function WriteReq(chunk, encoding, cb) {
6271 this.chunk = chunk;
6272 this.encoding = encoding;
6273 this.callback = cb;
ebd8d4e8
IC
6274}
6275
ab78acc6
IC
6276function WritableState(options, stream) {
6277 var Duplex = require('./_stream_duplex');
ebd8d4e8 6278
ab78acc6 6279 options = options || {};
ebd8d4e8 6280
ab78acc6
IC
6281 // the point at which write() starts returning false
6282 // Note: 0 is a valid value, means that we always return false if
6283 // the entire buffer is not flushed immediately on write()
6284 var hwm = options.highWaterMark;
6285 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6286 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6287
ab78acc6
IC
6288 // object stream flag to indicate whether or not this stream
6289 // contains buffers or objects.
6290 this.objectMode = !!options.objectMode;
ebd8d4e8 6291
ab78acc6
IC
6292 if (stream instanceof Duplex)
6293 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6294
ab78acc6
IC
6295 // cast to ints.
6296 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6297
ab78acc6
IC
6298 this.needDrain = false;
6299 // at the start of calling end()
6300 this.ending = false;
6301 // when end() has been called, and returned
6302 this.ended = false;
6303 // when 'finish' is emitted
6304 this.finished = false;
ebd8d4e8 6305
ab78acc6
IC
6306 // should we decode strings into buffers before passing to _write?
6307 // this is here so that some node-core streams can optimize string
6308 // handling at a lower level.
6309 var noDecode = options.decodeStrings === false;
6310 this.decodeStrings = !noDecode;
ebd8d4e8 6311
ab78acc6
IC
6312 // Crypto is kind of old and crusty. Historically, its default string
6313 // encoding is 'binary' so we have to make this configurable.
6314 // Everything else in the universe uses 'utf8', though.
6315 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6316
ab78acc6
IC
6317 // not an actual buffer we keep track of, but a measurement
6318 // of how much we're waiting to get pushed to some underlying
6319 // socket or file.
6320 this.length = 0;
ebd8d4e8 6321
ab78acc6
IC
6322 // a flag to see when we're in the middle of a write.
6323 this.writing = false;
ebd8d4e8 6324
ab78acc6
IC
6325 // when true all writes will be buffered until .uncork() call
6326 this.corked = 0;
ebd8d4e8 6327
ab78acc6
IC
6328 // a flag to be able to tell if the onwrite cb is called immediately,
6329 // or on a later tick. We set this to true at first, because any
6330 // actions that shouldn't happen until "later" should generally also
6331 // not happen before the first write call.
6332 this.sync = true;
ebd8d4e8 6333
ab78acc6
IC
6334 // a flag to know if we're processing previously buffered items, which
6335 // may call the _write() callback in the same tick, so that we don't
6336 // end up in an overlapped onwrite situation.
6337 this.bufferProcessing = false;
ebd8d4e8 6338
ab78acc6
IC
6339 // the callback that's passed to _write(chunk,cb)
6340 this.onwrite = function(er) {
6341 onwrite(stream, er);
6342 };
ebd8d4e8 6343
ab78acc6
IC
6344 // the callback that the user supplies to write(chunk,encoding,cb)
6345 this.writecb = null;
ebd8d4e8 6346
ab78acc6
IC
6347 // the amount that is being written when _write is called.
6348 this.writelen = 0;
ebd8d4e8 6349
ab78acc6 6350 this.buffer = [];
ebd8d4e8 6351
ab78acc6
IC
6352 // number of pending user-supplied write callbacks
6353 // this must be 0 before 'finish' can be emitted
6354 this.pendingcb = 0;
ebd8d4e8 6355
ab78acc6
IC
6356 // emit prefinish if the only thing we're waiting for is _write cbs
6357 // This is relevant for synchronous Transform streams
6358 this.prefinished = false;
ebd8d4e8 6359
ab78acc6
IC
6360 // True if the error was already emitted and should not be thrown again
6361 this.errorEmitted = false;
ebd8d4e8
IC
6362}
6363
ab78acc6
IC
6364function Writable(options) {
6365 var Duplex = require('./_stream_duplex');
ebd8d4e8 6366
ab78acc6
IC
6367 // Writable ctor is applied to Duplexes, though they're not
6368 // instanceof Writable, they're instanceof Readable.
6369 if (!(this instanceof Writable) && !(this instanceof Duplex))
6370 return new Writable(options);
ebd8d4e8 6371
ab78acc6 6372 this._writableState = new WritableState(options, this);
ebd8d4e8 6373
ab78acc6
IC
6374 // legacy.
6375 this.writable = true;
ebd8d4e8 6376
ab78acc6 6377 Stream.call(this);
ebd8d4e8
IC
6378}
6379
ab78acc6
IC
6380// Otherwise people can pipe Writable streams, which is just wrong.
6381Writable.prototype.pipe = function() {
6382 this.emit('error', new Error('Cannot pipe. Not readable.'));
6383};
ebd8d4e8 6384
ebd8d4e8 6385
ab78acc6
IC
6386function writeAfterEnd(stream, state, cb) {
6387 var er = new Error('write after end');
6388 // TODO: defer error events consistently everywhere, not just the cb
6389 stream.emit('error', er);
6390 process.nextTick(function() {
6391 cb(er);
6392 });
ebd8d4e8
IC
6393}
6394
ab78acc6
IC
6395// If we get something that is not a buffer, string, null, or undefined,
6396// and we're not in objectMode, then that's an error.
6397// Otherwise stream chunks are all considered to be of length=1, and the
6398// watermarks determine how many objects to keep in the buffer, rather than
6399// how many bytes or characters.
6400function validChunk(stream, state, chunk, cb) {
6401 var valid = true;
6402 if (!util.isBuffer(chunk) &&
6403 !util.isString(chunk) &&
6404 !util.isNullOrUndefined(chunk) &&
6405 !state.objectMode) {
6406 var er = new TypeError('Invalid non-string/buffer chunk');
6407 stream.emit('error', er);
6408 process.nextTick(function() {
6409 cb(er);
6410 });
6411 valid = false;
6412 }
6413 return valid;
ebd8d4e8
IC
6414}
6415
ab78acc6
IC
6416Writable.prototype.write = function(chunk, encoding, cb) {
6417 var state = this._writableState;
6418 var ret = false;
ebd8d4e8 6419
ab78acc6
IC
6420 if (util.isFunction(encoding)) {
6421 cb = encoding;
6422 encoding = null;
ebd8d4e8 6423 }
ebd8d4e8 6424
ab78acc6
IC
6425 if (util.isBuffer(chunk))
6426 encoding = 'buffer';
6427 else if (!encoding)
6428 encoding = state.defaultEncoding;
6429
6430 if (!util.isFunction(cb))
6431 cb = function() {};
6432
6433 if (state.ended)
6434 writeAfterEnd(this, state, cb);
6435 else if (validChunk(this, state, chunk, cb)) {
6436 state.pendingcb++;
6437 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6438 }
ebd8d4e8 6439
ab78acc6
IC
6440 return ret;
6441};
6442
6443Writable.prototype.cork = function() {
6444 var state = this._writableState;
6445
6446 state.corked++;
6447};
ebd8d4e8 6448
ab78acc6
IC
6449Writable.prototype.uncork = function() {
6450 var state = this._writableState;
ebd8d4e8 6451
ab78acc6
IC
6452 if (state.corked) {
6453 state.corked--;
ebd8d4e8 6454
ab78acc6
IC
6455 if (!state.writing &&
6456 !state.corked &&
6457 !state.finished &&
6458 !state.bufferProcessing &&
6459 state.buffer.length)
6460 clearBuffer(this, state);
ebd8d4e8 6461 }
ab78acc6 6462};
ebd8d4e8 6463
ab78acc6
IC
6464function decodeChunk(state, chunk, encoding) {
6465 if (!state.objectMode &&
6466 state.decodeStrings !== false &&
6467 util.isString(chunk)) {
6468 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6469 }
ab78acc6 6470 return chunk;
ebd8d4e8
IC
6471}
6472
ab78acc6
IC
6473// if we're already writing something, then just put this
6474// in the queue, and wait our turn. Otherwise, call _write
6475// If we return false, then we need a drain event, so set that flag.
6476function writeOrBuffer(stream, state, chunk, encoding, cb) {
6477 chunk = decodeChunk(state, chunk, encoding);
6478 if (util.isBuffer(chunk))
6479 encoding = 'buffer';
6480 var len = state.objectMode ? 1 : chunk.length;
6481
6482 state.length += len;
6483
6484 var ret = state.length < state.highWaterMark;
6485 // we must ensure that previous needDrain will not be reset to false.
6486 if (!ret)
6487 state.needDrain = true;
6488
6489 if (state.writing || state.corked)
6490 state.buffer.push(new WriteReq(chunk, encoding, cb));
6491 else
6492 doWrite(stream, state, false, len, chunk, encoding, cb);
6493
6494 return ret;
ebd8d4e8
IC
6495}
6496
ab78acc6
IC
6497function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6498 state.writelen = len;
6499 state.writecb = cb;
6500 state.writing = true;
6501 state.sync = true;
6502 if (writev)
6503 stream._writev(chunk, state.onwrite);
6504 else
6505 stream._write(chunk, encoding, state.onwrite);
6506 state.sync = false;
ebd8d4e8
IC
6507}
6508
ab78acc6
IC
6509function onwriteError(stream, state, sync, er, cb) {
6510 if (sync)
6511 process.nextTick(function() {
6512 state.pendingcb--;
6513 cb(er);
6514 });
6515 else {
6516 state.pendingcb--;
6517 cb(er);
6518 }
ebd8d4e8 6519
ab78acc6
IC
6520 stream._writableState.errorEmitted = true;
6521 stream.emit('error', er);
6522}
ebd8d4e8 6523
ab78acc6
IC
6524function onwriteStateUpdate(state) {
6525 state.writing = false;
6526 state.writecb = null;
6527 state.length -= state.writelen;
6528 state.writelen = 0;
6529}
ebd8d4e8 6530
ab78acc6
IC
6531function onwrite(stream, er) {
6532 var state = stream._writableState;
6533 var sync = state.sync;
6534 var cb = state.writecb;
ebd8d4e8 6535
ab78acc6 6536 onwriteStateUpdate(state);
ebd8d4e8 6537
ab78acc6
IC
6538 if (er)
6539 onwriteError(stream, state, sync, er, cb);
6540 else {
6541 // Check if we're actually ready to finish, but don't emit yet
6542 var finished = needFinish(stream, state);
ebd8d4e8 6543
ab78acc6
IC
6544 if (!finished &&
6545 !state.corked &&
6546 !state.bufferProcessing &&
6547 state.buffer.length) {
6548 clearBuffer(stream, state);
6549 }
6550
6551 if (sync) {
6552 process.nextTick(function() {
6553 afterWrite(stream, state, finished, cb);
6554 });
6555 } else {
6556 afterWrite(stream, state, finished, cb);
ebd8d4e8 6557 }
ebd8d4e8
IC
6558 }
6559}
6560
ab78acc6
IC
6561function afterWrite(stream, state, finished, cb) {
6562 if (!finished)
6563 onwriteDrain(stream, state);
6564 state.pendingcb--;
6565 cb();
6566 finishMaybe(stream, state);
6567}
6568
6569// Must force callback to be called on nextTick, so that we don't
6570// emit 'drain' before the write() consumer gets the 'false' return
6571// value, and has a chance to attach a 'drain' listener.
6572function onwriteDrain(stream, state) {
6573 if (state.length === 0 && state.needDrain) {
6574 state.needDrain = false;
6575 stream.emit('drain');
ebd8d4e8
IC
6576 }
6577}
6578
ebd8d4e8 6579
ab78acc6
IC
6580// if there's something in the buffer waiting, then process it
6581function clearBuffer(stream, state) {
6582 state.bufferProcessing = true;
6583
6584 if (stream._writev && state.buffer.length > 1) {
6585 // Fast case, write everything using _writev()
6586 var cbs = [];
6587 for (var c = 0; c < state.buffer.length; c++)
6588 cbs.push(state.buffer[c].callback);
6589
6590 // count the one we are adding, as well.
6591 // TODO(isaacs) clean this up
6592 state.pendingcb++;
6593 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6594 for (var i = 0; i < cbs.length; i++) {
6595 state.pendingcb--;
6596 cbs[i](err);
6597 }
6598 });
6599
6600 // Clear buffer
6601 state.buffer = [];
6602 } else {
6603 // Slow case, write chunks one-by-one
6604 for (var c = 0; c < state.buffer.length; c++) {
6605 var entry = state.buffer[c];
6606 var chunk = entry.chunk;
6607 var encoding = entry.encoding;
6608 var cb = entry.callback;
6609 var len = state.objectMode ? 1 : chunk.length;
6610
6611 doWrite(stream, state, false, len, chunk, encoding, cb);
6612
6613 // if we didn't call the onwrite immediately, then
6614 // it means that we need to wait until it does.
6615 // also, that means that the chunk and cb are currently
6616 // being processed, so move the buffer counter past them.
6617 if (state.writing) {
6618 c++;
6619 break;
6620 }
ebd8d4e8 6621 }
ab78acc6
IC
6622
6623 if (c < state.buffer.length)
6624 state.buffer = state.buffer.slice(c);
6625 else
6626 state.buffer.length = 0;
ebd8d4e8
IC
6627 }
6628
ab78acc6 6629 state.bufferProcessing = false;
ebd8d4e8
IC
6630}
6631
ab78acc6
IC
6632Writable.prototype._write = function(chunk, encoding, cb) {
6633 cb(new Error('not implemented'));
ebd8d4e8 6634
ab78acc6 6635};
ebd8d4e8 6636
ab78acc6 6637Writable.prototype._writev = null;
ebd8d4e8 6638
ab78acc6
IC
6639Writable.prototype.end = function(chunk, encoding, cb) {
6640 var state = this._writableState;
ebd8d4e8 6641
ab78acc6
IC
6642 if (util.isFunction(chunk)) {
6643 cb = chunk;
6644 chunk = null;
6645 encoding = null;
6646 } else if (util.isFunction(encoding)) {
6647 cb = encoding;
6648 encoding = null;
6649 }
ebd8d4e8 6650
ab78acc6
IC
6651 if (!util.isNullOrUndefined(chunk))
6652 this.write(chunk, encoding);
6653
6654 // .end() fully uncorks
6655 if (state.corked) {
6656 state.corked = 1;
6657 this.uncork();
ebd8d4e8 6658 }
ab78acc6
IC
6659
6660 // ignore unnecessary end() calls.
6661 if (!state.ending && !state.finished)
6662 endWritable(this, state, cb);
6663};
6664
6665
6666function needFinish(stream, state) {
6667 return (state.ending &&
6668 state.length === 0 &&
6669 !state.finished &&
6670 !state.writing);
ebd8d4e8
IC
6671}
6672
ab78acc6
IC
6673function prefinish(stream, state) {
6674 if (!state.prefinished) {
6675 state.prefinished = true;
6676 stream.emit('prefinish');
ebd8d4e8 6677 }
ebd8d4e8
IC
6678}
6679
ab78acc6
IC
6680function finishMaybe(stream, state) {
6681 var need = needFinish(stream, state);
6682 if (need) {
6683 if (state.pendingcb === 0) {
6684 prefinish(stream, state);
6685 state.finished = true;
6686 stream.emit('finish');
6687 } else
6688 prefinish(stream, state);
6689 }
6690 return need;
6691}
ebd8d4e8 6692
ab78acc6
IC
6693function endWritable(stream, state, cb) {
6694 state.ending = true;
6695 finishMaybe(stream, state);
6696 if (cb) {
6697 if (state.finished)
6698 process.nextTick(cb);
6699 else
6700 stream.once('finish', cb);
ebd8d4e8 6701 }
ab78acc6 6702 state.ended = true;
ebd8d4e8
IC
6703}
6704
ab78acc6
IC
6705}).call(this,require('_process'))
6706},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6707(function (Buffer){
6708// Copyright Joyent, Inc. and other Node contributors.
6709//
6710// Permission is hereby granted, free of charge, to any person obtaining a
6711// copy of this software and associated documentation files (the
6712// "Software"), to deal in the Software without restriction, including
6713// without limitation the rights to use, copy, modify, merge, publish,
6714// distribute, sublicense, and/or sell copies of the Software, and to permit
6715// persons to whom the Software is furnished to do so, subject to the
6716// following conditions:
6717//
6718// The above copyright notice and this permission notice shall be included
6719// in all copies or substantial portions of the Software.
6720//
6721// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6722// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6723// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6724// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6725// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6726// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6727// USE OR OTHER DEALINGS IN THE SOFTWARE.
6728
6729// NOTE: These type checking functions intentionally don't use `instanceof`
6730// because it is fragile and can be easily faked with `Object.create()`.
6731function isArray(ar) {
6732 return Array.isArray(ar);
ebd8d4e8 6733}
ab78acc6 6734exports.isArray = isArray;
ebd8d4e8 6735
ab78acc6
IC
6736function isBoolean(arg) {
6737 return typeof arg === 'boolean';
ebd8d4e8 6738}
ab78acc6 6739exports.isBoolean = isBoolean;
ebd8d4e8 6740
ab78acc6
IC
6741function isNull(arg) {
6742 return arg === null;
6743}
6744exports.isNull = isNull;
ebd8d4e8 6745
ab78acc6
IC
6746function isNullOrUndefined(arg) {
6747 return arg == null;
6748}
6749exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6750
ab78acc6
IC
6751function isNumber(arg) {
6752 return typeof arg === 'number';
ebd8d4e8 6753}
ab78acc6 6754exports.isNumber = isNumber;
ebd8d4e8 6755
ab78acc6
IC
6756function isString(arg) {
6757 return typeof arg === 'string';
6758}
6759exports.isString = isString;
ebd8d4e8 6760
ab78acc6
IC
6761function isSymbol(arg) {
6762 return typeof arg === 'symbol';
6763}
6764exports.isSymbol = isSymbol;
ebd8d4e8 6765
ab78acc6
IC
6766function isUndefined(arg) {
6767 return arg === void 0;
ebd8d4e8 6768}
ab78acc6 6769exports.isUndefined = isUndefined;
ebd8d4e8 6770
ab78acc6
IC
6771function isRegExp(re) {
6772 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6773}
ab78acc6 6774exports.isRegExp = isRegExp;
ebd8d4e8 6775
ab78acc6
IC
6776function isObject(arg) {
6777 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6778}
ab78acc6 6779exports.isObject = isObject;
ebd8d4e8 6780
ab78acc6
IC
6781function isDate(d) {
6782 return isObject(d) && objectToString(d) === '[object Date]';
6783}
6784exports.isDate = isDate;
ebd8d4e8 6785
ab78acc6
IC
6786function isError(e) {
6787 return isObject(e) &&
6788 (objectToString(e) === '[object Error]' || e instanceof Error);
6789}
6790exports.isError = isError;
ebd8d4e8 6791
ab78acc6
IC
6792function isFunction(arg) {
6793 return typeof arg === 'function';
6794}
6795exports.isFunction = isFunction;
6796
6797function isPrimitive(arg) {
6798 return arg === null ||
6799 typeof arg === 'boolean' ||
6800 typeof arg === 'number' ||
6801 typeof arg === 'string' ||
6802 typeof arg === 'symbol' || // ES6 symbol
6803 typeof arg === 'undefined';
ebd8d4e8 6804}
ab78acc6 6805exports.isPrimitive = isPrimitive;
ebd8d4e8 6806
ab78acc6
IC
6807function isBuffer(arg) {
6808 return Buffer.isBuffer(arg);
ebd8d4e8 6809}
ab78acc6 6810exports.isBuffer = isBuffer;
ebd8d4e8 6811
ab78acc6
IC
6812function objectToString(o) {
6813 return Object.prototype.toString.call(o);
ebd8d4e8 6814}
ab78acc6
IC
6815}).call(this,require("buffer").Buffer)
6816},{"buffer":7}],22:[function(require,module,exports){
6817module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6818
ab78acc6
IC
6819},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6820exports = module.exports = require('./lib/_stream_readable.js');
6821exports.Stream = require('stream');
6822exports.Readable = exports;
6823exports.Writable = require('./lib/_stream_writable.js');
6824exports.Duplex = require('./lib/_stream_duplex.js');
6825exports.Transform = require('./lib/_stream_transform.js');
6826exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6827
ab78acc6
IC
6828},{"./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){
6829module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6830
ab78acc6
IC
6831},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6832module.exports = require("./lib/_stream_writable.js")
6833
6834},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6835// Copyright Joyent, Inc. and other Node contributors.
6836//
6837// Permission is hereby granted, free of charge, to any person obtaining a
6838// copy of this software and associated documentation files (the
6839// "Software"), to deal in the Software without restriction, including
6840// without limitation the rights to use, copy, modify, merge, publish,
6841// distribute, sublicense, and/or sell copies of the Software, and to permit
6842// persons to whom the Software is furnished to do so, subject to the
6843// following conditions:
6844//
6845// The above copyright notice and this permission notice shall be included
6846// in all copies or substantial portions of the Software.
6847//
6848// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6849// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6850// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6851// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6852// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6853// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6854// USE OR OTHER DEALINGS IN THE SOFTWARE.
6855
6856module.exports = Stream;
6857
6858var EE = require('events').EventEmitter;
6859var inherits = require('inherits');
6860
6861inherits(Stream, EE);
6862Stream.Readable = require('readable-stream/readable.js');
6863Stream.Writable = require('readable-stream/writable.js');
6864Stream.Duplex = require('readable-stream/duplex.js');
6865Stream.Transform = require('readable-stream/transform.js');
6866Stream.PassThrough = require('readable-stream/passthrough.js');
6867
6868// Backwards-compat with node 0.4.x
6869Stream.Stream = Stream;
6870
6871
6872
6873// old-style streams. Note that the pipe method (the only relevant
6874// part of this class) is overridden in the Readable class.
6875
6876function Stream() {
6877 EE.call(this);
ebd8d4e8
IC
6878}
6879
ab78acc6
IC
6880Stream.prototype.pipe = function(dest, options) {
6881 var source = this;
ebd8d4e8 6882
ab78acc6
IC
6883 function ondata(chunk) {
6884 if (dest.writable) {
6885 if (false === dest.write(chunk) && source.pause) {
6886 source.pause();
6887 }
6888 }
6889 }
ebd8d4e8 6890
ab78acc6 6891 source.on('data', ondata);
ebd8d4e8 6892
ab78acc6
IC
6893 function ondrain() {
6894 if (source.readable && source.resume) {
6895 source.resume();
6896 }
6897 }
ebd8d4e8 6898
ab78acc6 6899 dest.on('drain', ondrain);
ebd8d4e8 6900
ab78acc6
IC
6901 // If the 'end' option is not supplied, dest.end() will be called when
6902 // source gets the 'end' or 'close' events. Only dest.end() once.
6903 if (!dest._isStdio && (!options || options.end !== false)) {
6904 source.on('end', onend);
6905 source.on('close', onclose);
ebd8d4e8
IC
6906 }
6907
ab78acc6
IC
6908 var didOnEnd = false;
6909 function onend() {
6910 if (didOnEnd) return;
6911 didOnEnd = true;
ebd8d4e8 6912
ab78acc6
IC
6913 dest.end();
6914 }
ebd8d4e8 6915
ebd8d4e8 6916
ab78acc6
IC
6917 function onclose() {
6918 if (didOnEnd) return;
6919 didOnEnd = true;
ebd8d4e8 6920
ab78acc6 6921 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6922 }
6923
ab78acc6
IC
6924 // don't leave dangling pipes when there are errors.
6925 function onerror(er) {
6926 cleanup();
6927 if (EE.listenerCount(this, 'error') === 0) {
6928 throw er; // Unhandled stream error in pipe.
6929 }
6930 }
ebd8d4e8 6931
ab78acc6
IC
6932 source.on('error', onerror);
6933 dest.on('error', onerror);
ebd8d4e8 6934
ab78acc6
IC
6935 // remove all the event listeners that were added.
6936 function cleanup() {
6937 source.removeListener('data', ondata);
6938 dest.removeListener('drain', ondrain);
ebd8d4e8 6939
ab78acc6
IC
6940 source.removeListener('end', onend);
6941 source.removeListener('close', onclose);
6942
6943 source.removeListener('error', onerror);
6944 dest.removeListener('error', onerror);
6945
6946 source.removeListener('end', cleanup);
6947 source.removeListener('close', cleanup);
6948
6949 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6950 }
6951
ab78acc6
IC
6952 source.on('end', cleanup);
6953 source.on('close', cleanup);
ebd8d4e8 6954
ab78acc6 6955 dest.on('close', cleanup);
ebd8d4e8 6956
ab78acc6 6957 dest.emit('pipe', source);
ebd8d4e8 6958
ab78acc6
IC
6959 // Allow for unix-like usage: A.pipe(B).pipe(C)
6960 return dest;
6961};
ebd8d4e8 6962
ab78acc6
IC
6963},{"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){
6964// Copyright Joyent, Inc. and other Node contributors.
6965//
6966// Permission is hereby granted, free of charge, to any person obtaining a
6967// copy of this software and associated documentation files (the
6968// "Software"), to deal in the Software without restriction, including
6969// without limitation the rights to use, copy, modify, merge, publish,
6970// distribute, sublicense, and/or sell copies of the Software, and to permit
6971// persons to whom the Software is furnished to do so, subject to the
6972// following conditions:
6973//
6974// The above copyright notice and this permission notice shall be included
6975// in all copies or substantial portions of the Software.
6976//
6977// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6978// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6979// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6980// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6981// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6982// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6983// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6984
ab78acc6 6985var Buffer = require('buffer').Buffer;
ebd8d4e8 6986
ab78acc6
IC
6987var isBufferEncoding = Buffer.isEncoding
6988 || function(encoding) {
6989 switch (encoding && encoding.toLowerCase()) {
6990 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;
6991 default: return false;
6992 }
6993 }
ebd8d4e8 6994
ebd8d4e8 6995
ab78acc6
IC
6996function assertEncoding(encoding) {
6997 if (encoding && !isBufferEncoding(encoding)) {
6998 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 6999 }
ebd8d4e8
IC
7000}
7001
ab78acc6
IC
7002// StringDecoder provides an interface for efficiently splitting a series of
7003// buffers into a series of JS strings without breaking apart multi-byte
7004// characters. CESU-8 is handled as part of the UTF-8 encoding.
7005//
7006// @TODO Handling all encodings inside a single object makes it very difficult
7007// to reason about this code, so it should be split up in the future.
7008// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
7009// points as used by CESU-8.
7010var StringDecoder = exports.StringDecoder = function(encoding) {
7011 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
7012 assertEncoding(encoding);
7013 switch (this.encoding) {
7014 case 'utf8':
7015 // CESU-8 represents each of Surrogate Pair by 3-bytes
7016 this.surrogateSize = 3;
7017 break;
7018 case 'ucs2':
7019 case 'utf16le':
7020 // UTF-16 represents each of Surrogate Pair by 2-bytes
7021 this.surrogateSize = 2;
7022 this.detectIncompleteChar = utf16DetectIncompleteChar;
7023 break;
7024 case 'base64':
7025 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
7026 this.surrogateSize = 3;
7027 this.detectIncompleteChar = base64DetectIncompleteChar;
7028 break;
7029 default:
7030 this.write = passThroughWrite;
7031 return;
7032 }
ebd8d4e8 7033
ab78acc6
IC
7034 // Enough space to store all bytes of a single character. UTF-8 needs 4
7035 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
7036 this.charBuffer = new Buffer(6);
7037 // Number of bytes received for the current incomplete multi-byte character.
7038 this.charReceived = 0;
7039 // Number of bytes expected for the current incomplete multi-byte character.
7040 this.charLength = 0;
7041};
ebd8d4e8 7042
ebd8d4e8 7043
ab78acc6
IC
7044// write decodes the given buffer and returns it as JS string that is
7045// guaranteed to not contain any partial multi-byte characters. Any partial
7046// character found at the end of the buffer is buffered up, and will be
7047// returned when calling write again with the remaining bytes.
7048//
7049// Note: Converting a Buffer containing an orphan surrogate to a String
7050// currently works, but converting a String to a Buffer (via `new Buffer`, or
7051// Buffer#write) will replace incomplete surrogates with the unicode
7052// replacement character. See https://codereview.chromium.org/121173009/ .
7053StringDecoder.prototype.write = function(buffer) {
7054 var charStr = '';
7055 // if our last write ended with an incomplete multibyte character
7056 while (this.charLength) {
7057 // determine how many remaining bytes this buffer has to offer for this char
7058 var available = (buffer.length >= this.charLength - this.charReceived) ?
7059 this.charLength - this.charReceived :
7060 buffer.length;
7061
7062 // add the new bytes to the char buffer
7063 buffer.copy(this.charBuffer, this.charReceived, 0, available);
7064 this.charReceived += available;
7065
7066 if (this.charReceived < this.charLength) {
7067 // still not enough chars in this buffer? wait for more ...
7068 return '';
7069 }
7070
7071 // remove bytes belonging to the current character from the buffer
7072 buffer = buffer.slice(available, buffer.length);
7073
7074 // get the character that was split
7075 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
7076
7077 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7078 var charCode = charStr.charCodeAt(charStr.length - 1);
7079 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7080 this.charLength += this.surrogateSize;
7081 charStr = '';
7082 continue;
7083 }
7084 this.charReceived = this.charLength = 0;
ebd8d4e8 7085
ab78acc6
IC
7086 // if there are no more bytes in this buffer, just emit our char
7087 if (buffer.length === 0) {
7088 return charStr;
7089 }
7090 break;
ebd8d4e8 7091 }
ebd8d4e8 7092
ab78acc6
IC
7093 // determine and set charLength / charReceived
7094 this.detectIncompleteChar(buffer);
ebd8d4e8 7095
ab78acc6
IC
7096 var end = buffer.length;
7097 if (this.charLength) {
7098 // buffer the incomplete character bytes we got
7099 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
7100 end -= this.charReceived;
ebd8d4e8
IC
7101 }
7102
ab78acc6 7103 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 7104
ab78acc6
IC
7105 var end = charStr.length - 1;
7106 var charCode = charStr.charCodeAt(end);
7107 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
7108 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
7109 var size = this.surrogateSize;
7110 this.charLength += size;
7111 this.charReceived += size;
7112 this.charBuffer.copy(this.charBuffer, size, 0, size);
7113 buffer.copy(this.charBuffer, 0, 0, size);
7114 return charStr.substring(0, end);
ebd8d4e8
IC
7115 }
7116
ab78acc6
IC
7117 // or just emit the charStr
7118 return charStr;
7119};
ebd8d4e8 7120
ab78acc6
IC
7121// detectIncompleteChar determines if there is an incomplete UTF-8 character at
7122// the end of the given buffer. If so, it sets this.charLength to the byte
7123// length that character, and sets this.charReceived to the number of bytes
7124// that are available for this character.
7125StringDecoder.prototype.detectIncompleteChar = function(buffer) {
7126 // determine how many bytes we have to check at the end of this buffer
7127 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 7128
ab78acc6
IC
7129 // Figure out if one of the last i bytes of our buffer announces an
7130 // incomplete char.
7131 for (; i > 0; i--) {
7132 var c = buffer[buffer.length - i];
ebd8d4e8 7133
ab78acc6 7134 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 7135
ab78acc6
IC
7136 // 110XXXXX
7137 if (i == 1 && c >> 5 == 0x06) {
7138 this.charLength = 2;
7139 break;
7140 }
ebd8d4e8 7141
ab78acc6
IC
7142 // 1110XXXX
7143 if (i <= 2 && c >> 4 == 0x0E) {
7144 this.charLength = 3;
7145 break;
7146 }
ebd8d4e8 7147
ab78acc6
IC
7148 // 11110XXX
7149 if (i <= 3 && c >> 3 == 0x1E) {
7150 this.charLength = 4;
7151 break;
7152 }
7153 }
7154 this.charReceived = i;
7155};
ebd8d4e8 7156
ab78acc6
IC
7157StringDecoder.prototype.end = function(buffer) {
7158 var res = '';
7159 if (buffer && buffer.length)
7160 res = this.write(buffer);
ebd8d4e8 7161
ab78acc6
IC
7162 if (this.charReceived) {
7163 var cr = this.charReceived;
7164 var buf = this.charBuffer;
7165 var enc = this.encoding;
7166 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
7167 }
7168
ab78acc6
IC
7169 return res;
7170};
ebd8d4e8 7171
ab78acc6
IC
7172function passThroughWrite(buffer) {
7173 return buffer.toString(this.encoding);
ebd8d4e8
IC
7174}
7175
ab78acc6
IC
7176function utf16DetectIncompleteChar(buffer) {
7177 this.charReceived = buffer.length % 2;
7178 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
7179}
7180
ab78acc6
IC
7181function base64DetectIncompleteChar(buffer) {
7182 this.charReceived = buffer.length % 3;
7183 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
7184}
7185
ab78acc6
IC
7186},{"buffer":7}],28:[function(require,module,exports){
7187module.exports = function isBuffer(arg) {
7188 return arg && typeof arg === 'object'
7189 && typeof arg.copy === 'function'
7190 && typeof arg.fill === 'function'
7191 && typeof arg.readUInt8 === 'function';
7192}
7193},{}],29:[function(require,module,exports){
7194(function (process,global){
7195// Copyright Joyent, Inc. and other Node contributors.
7196//
7197// Permission is hereby granted, free of charge, to any person obtaining a
7198// copy of this software and associated documentation files (the
7199// "Software"), to deal in the Software without restriction, including
7200// without limitation the rights to use, copy, modify, merge, publish,
7201// distribute, sublicense, and/or sell copies of the Software, and to permit
7202// persons to whom the Software is furnished to do so, subject to the
7203// following conditions:
7204//
7205// The above copyright notice and this permission notice shall be included
7206// in all copies or substantial portions of the Software.
7207//
7208// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
7209// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
7210// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
7211// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
7212// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
7213// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
7214// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 7215
ab78acc6
IC
7216var formatRegExp = /%[sdj%]/g;
7217exports.format = function(f) {
7218 if (!isString(f)) {
7219 var objects = [];
7220 for (var i = 0; i < arguments.length; i++) {
7221 objects.push(inspect(arguments[i]));
7222 }
7223 return objects.join(' ');
7224 }
ebd8d4e8 7225
ab78acc6
IC
7226 var i = 1;
7227 var args = arguments;
7228 var len = args.length;
7229 var str = String(f).replace(formatRegExp, function(x) {
7230 if (x === '%%') return '%';
7231 if (i >= len) return x;
7232 switch (x) {
7233 case '%s': return String(args[i++]);
7234 case '%d': return Number(args[i++]);
7235 case '%j':
7236 try {
7237 return JSON.stringify(args[i++]);
7238 } catch (_) {
7239 return '[Circular]';
7240 }
7241 default:
7242 return x;
7243 }
7244 });
7245 for (var x = args[i]; i < len; x = args[++i]) {
7246 if (isNull(x) || !isObject(x)) {
7247 str += ' ' + x;
7248 } else {
7249 str += ' ' + inspect(x);
7250 }
7251 }
7252 return str;
7253};
ebd8d4e8 7254
ebd8d4e8 7255
ab78acc6
IC
7256// Mark that a method should not be used.
7257// Returns a modified function which warns once by default.
7258// If --no-deprecation is set, then it is a no-op.
7259exports.deprecate = function(fn, msg) {
7260 // Allow for deprecating things in the process of starting up.
7261 if (isUndefined(global.process)) {
7262 return function() {
7263 return exports.deprecate(fn, msg).apply(this, arguments);
7264 };
7265 }
ebd8d4e8 7266
ab78acc6
IC
7267 if (process.noDeprecation === true) {
7268 return fn;
7269 }
ebd8d4e8 7270
ab78acc6
IC
7271 var warned = false;
7272 function deprecated() {
7273 if (!warned) {
7274 if (process.throwDeprecation) {
7275 throw new Error(msg);
7276 } else if (process.traceDeprecation) {
7277 console.trace(msg);
7278 } else {
7279 console.error(msg);
7280 }
7281 warned = true;
7282 }
7283 return fn.apply(this, arguments);
7284 }
ebd8d4e8 7285
ab78acc6
IC
7286 return deprecated;
7287};
ebd8d4e8 7288
ebd8d4e8 7289
ab78acc6
IC
7290var debugs = {};
7291var debugEnviron;
7292exports.debuglog = function(set) {
7293 if (isUndefined(debugEnviron))
7294 debugEnviron = process.env.NODE_DEBUG || '';
7295 set = set.toUpperCase();
7296 if (!debugs[set]) {
7297 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7298 var pid = process.pid;
7299 debugs[set] = function() {
7300 var msg = exports.format.apply(exports, arguments);
7301 console.error('%s %d: %s', set, pid, msg);
7302 };
7303 } else {
7304 debugs[set] = function() {};
ebd8d4e8
IC
7305 }
7306 }
ab78acc6
IC
7307 return debugs[set];
7308};
ebd8d4e8 7309
ebd8d4e8
IC
7310
7311/**
ab78acc6
IC
7312 * Echos the value of a value. Trys to print the value out
7313 * in the best way possible given the different types.
7314 *
7315 * @param {Object} obj The object to print out.
7316 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7317 */
ab78acc6
IC
7318/* legacy: obj, showHidden, depth, colors*/
7319function inspect(obj, opts) {
7320 // default options
7321 var ctx = {
7322 seen: [],
7323 stylize: stylizeNoColor
7324 };
7325 // legacy...
7326 if (arguments.length >= 3) ctx.depth = arguments[2];
7327 if (arguments.length >= 4) ctx.colors = arguments[3];
7328 if (isBoolean(opts)) {
7329 // legacy...
7330 ctx.showHidden = opts;
7331 } else if (opts) {
7332 // got an "options" object
7333 exports._extend(ctx, opts);
ebd8d4e8 7334 }
ab78acc6
IC
7335 // set default options
7336 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7337 if (isUndefined(ctx.depth)) ctx.depth = 2;
7338 if (isUndefined(ctx.colors)) ctx.colors = false;
7339 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7340 if (ctx.colors) ctx.stylize = stylizeWithColor;
7341 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7342}
ab78acc6 7343exports.inspect = inspect;
ebd8d4e8 7344
ebd8d4e8 7345
ab78acc6
IC
7346// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7347inspect.colors = {
7348 'bold' : [1, 22],
7349 'italic' : [3, 23],
7350 'underline' : [4, 24],
7351 'inverse' : [7, 27],
7352 'white' : [37, 39],
7353 'grey' : [90, 39],
7354 'black' : [30, 39],
7355 'blue' : [34, 39],
7356 'cyan' : [36, 39],
7357 'green' : [32, 39],
7358 'magenta' : [35, 39],
7359 'red' : [31, 39],
7360 'yellow' : [33, 39]
7361};
ebd8d4e8 7362
ab78acc6
IC
7363// Don't use 'blue' not visible on cmd.exe
7364inspect.styles = {
7365 'special': 'cyan',
7366 'number': 'yellow',
7367 'boolean': 'yellow',
7368 'undefined': 'grey',
7369 'null': 'bold',
7370 'string': 'green',
7371 'date': 'magenta',
7372 // "name": intentionally not styling
7373 'regexp': 'red'
7374};
ebd8d4e8 7375
ebd8d4e8 7376
ab78acc6
IC
7377function stylizeWithColor(str, styleType) {
7378 var style = inspect.styles[styleType];
ebd8d4e8 7379
ab78acc6
IC
7380 if (style) {
7381 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7382 '\u001b[' + inspect.colors[style][1] + 'm';
7383 } else {
7384 return str;
ebd8d4e8 7385 }
ebd8d4e8
IC
7386}
7387
ebd8d4e8 7388
ab78acc6
IC
7389function stylizeNoColor(str, styleType) {
7390 return str;
ebd8d4e8
IC
7391}
7392
ebd8d4e8 7393
ab78acc6
IC
7394function arrayToHash(array) {
7395 var hash = {};
ebd8d4e8 7396
ab78acc6
IC
7397 array.forEach(function(val, idx) {
7398 hash[val] = true;
7399 });
ebd8d4e8 7400
ab78acc6 7401 return hash;
ebd8d4e8
IC
7402}
7403
ebd8d4e8 7404
ab78acc6
IC
7405function formatValue(ctx, value, recurseTimes) {
7406 // Provide a hook for user-specified inspect functions.
7407 // Check that value is an object with an inspect function on it
7408 if (ctx.customInspect &&
7409 value &&
7410 isFunction(value.inspect) &&
7411 // Filter out the util module, it's inspect function is special
7412 value.inspect !== exports.inspect &&
7413 // Also filter out any prototype objects using the circular check.
7414 !(value.constructor && value.constructor.prototype === value)) {
7415 var ret = value.inspect(recurseTimes, ctx);
7416 if (!isString(ret)) {
7417 ret = formatValue(ctx, ret, recurseTimes);
7418 }
7419 return ret;
ebd8d4e8 7420 }
ebd8d4e8 7421
ab78acc6
IC
7422 // Primitive types cannot have properties
7423 var primitive = formatPrimitive(ctx, value);
7424 if (primitive) {
7425 return primitive;
ebd8d4e8
IC
7426 }
7427
ab78acc6
IC
7428 // Look up the keys of the object.
7429 var keys = Object.keys(value);
7430 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7431
ab78acc6
IC
7432 if (ctx.showHidden) {
7433 keys = Object.getOwnPropertyNames(value);
7434 }
ebd8d4e8 7435
ab78acc6
IC
7436 // IE doesn't make error fields non-enumerable
7437 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7438 if (isError(value)
7439 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7440 return formatError(value);
ebd8d4e8 7441 }
ebd8d4e8 7442
ab78acc6
IC
7443 // Some type of object without properties can be shortcutted.
7444 if (keys.length === 0) {
7445 if (isFunction(value)) {
7446 var name = value.name ? ': ' + value.name : '';
7447 return ctx.stylize('[Function' + name + ']', 'special');
7448 }
7449 if (isRegExp(value)) {
7450 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7451 }
7452 if (isDate(value)) {
7453 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7454 }
7455 if (isError(value)) {
7456 return formatError(value);
7457 }
ebd8d4e8 7458 }
ebd8d4e8 7459
ab78acc6 7460 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7461
ab78acc6
IC
7462 // Make Array say that they are Array
7463 if (isArray(value)) {
7464 array = true;
7465 braces = ['[', ']'];
7466 }
ebd8d4e8 7467
ab78acc6
IC
7468 // Make functions say that they are functions
7469 if (isFunction(value)) {
7470 var n = value.name ? ': ' + value.name : '';
7471 base = ' [Function' + n + ']';
7472 }
ebd8d4e8 7473
ab78acc6
IC
7474 // Make RegExps say that they are RegExps
7475 if (isRegExp(value)) {
7476 base = ' ' + RegExp.prototype.toString.call(value);
7477 }
ebd8d4e8 7478
ab78acc6
IC
7479 // Make dates with properties first say the date
7480 if (isDate(value)) {
7481 base = ' ' + Date.prototype.toUTCString.call(value);
7482 }
ebd8d4e8 7483
ab78acc6
IC
7484 // Make error with message first say the error
7485 if (isError(value)) {
7486 base = ' ' + formatError(value);
7487 }
ebd8d4e8 7488
ab78acc6
IC
7489 if (keys.length === 0 && (!array || value.length == 0)) {
7490 return braces[0] + base + braces[1];
7491 }
ebd8d4e8 7492
ab78acc6
IC
7493 if (recurseTimes < 0) {
7494 if (isRegExp(value)) {
7495 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7496 } else {
7497 return ctx.stylize('[Object]', 'special');
7498 }
7499 }
ebd8d4e8 7500
ab78acc6 7501 ctx.seen.push(value);
ebd8d4e8 7502
ab78acc6
IC
7503 var output;
7504 if (array) {
7505 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7506 } else {
7507 output = keys.map(function(key) {
7508 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7509 });
7510 }
ebd8d4e8 7511
ab78acc6 7512 ctx.seen.pop();
ebd8d4e8 7513
ab78acc6
IC
7514 return reduceToSingleString(output, base, braces);
7515}
ebd8d4e8 7516
ebd8d4e8 7517
ab78acc6
IC
7518function formatPrimitive(ctx, value) {
7519 if (isUndefined(value))
7520 return ctx.stylize('undefined', 'undefined');
7521 if (isString(value)) {
7522 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7523 .replace(/'/g, "\\'")
7524 .replace(/\\"/g, '"') + '\'';
7525 return ctx.stylize(simple, 'string');
7526 }
7527 if (isNumber(value))
7528 return ctx.stylize('' + value, 'number');
7529 if (isBoolean(value))
7530 return ctx.stylize('' + value, 'boolean');
7531 // For some reason typeof null is "object", so special case here.
7532 if (isNull(value))
7533 return ctx.stylize('null', 'null');
7534}
ebd8d4e8 7535
ebd8d4e8 7536
ab78acc6
IC
7537function formatError(value) {
7538 return '[' + Error.prototype.toString.call(value) + ']';
7539}
ebd8d4e8 7540
ebd8d4e8 7541
ab78acc6
IC
7542function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7543 var output = [];
7544 for (var i = 0, l = value.length; i < l; ++i) {
7545 if (hasOwnProperty(value, String(i))) {
7546 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7547 String(i), true));
7548 } else {
7549 output.push('');
7550 }
7551 }
7552 keys.forEach(function(key) {
7553 if (!key.match(/^\d+$/)) {
7554 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7555 key, true));
7556 }
7557 });
7558 return output;
7559}
ebd8d4e8 7560
ebd8d4e8 7561
ab78acc6
IC
7562function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7563 var name, str, desc;
7564 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7565 if (desc.get) {
7566 if (desc.set) {
7567 str = ctx.stylize('[Getter/Setter]', 'special');
7568 } else {
7569 str = ctx.stylize('[Getter]', 'special');
7570 }
7571 } else {
7572 if (desc.set) {
7573 str = ctx.stylize('[Setter]', 'special');
7574 }
7575 }
7576 if (!hasOwnProperty(visibleKeys, key)) {
7577 name = '[' + key + ']';
7578 }
7579 if (!str) {
7580 if (ctx.seen.indexOf(desc.value) < 0) {
7581 if (isNull(recurseTimes)) {
7582 str = formatValue(ctx, desc.value, null);
7583 } else {
7584 str = formatValue(ctx, desc.value, recurseTimes - 1);
7585 }
7586 if (str.indexOf('\n') > -1) {
7587 if (array) {
7588 str = str.split('\n').map(function(line) {
7589 return ' ' + line;
7590 }).join('\n').substr(2);
7591 } else {
7592 str = '\n' + str.split('\n').map(function(line) {
7593 return ' ' + line;
7594 }).join('\n');
7595 }
7596 }
7597 } else {
7598 str = ctx.stylize('[Circular]', 'special');
7599 }
7600 }
7601 if (isUndefined(name)) {
7602 if (array && key.match(/^\d+$/)) {
7603 return str;
7604 }
7605 name = JSON.stringify('' + key);
7606 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7607 name = name.substr(1, name.length - 2);
7608 name = ctx.stylize(name, 'name');
7609 } else {
7610 name = name.replace(/'/g, "\\'")
7611 .replace(/\\"/g, '"')
7612 .replace(/(^"|"$)/g, "'");
7613 name = ctx.stylize(name, 'string');
7614 }
7615 }
ebd8d4e8 7616
ab78acc6
IC
7617 return name + ': ' + str;
7618}
ebd8d4e8 7619
ebd8d4e8 7620
ab78acc6
IC
7621function reduceToSingleString(output, base, braces) {
7622 var numLinesEst = 0;
7623 var length = output.reduce(function(prev, cur) {
7624 numLinesEst++;
7625 if (cur.indexOf('\n') >= 0) numLinesEst++;
7626 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7627 }, 0);
ebd8d4e8 7628
ab78acc6
IC
7629 if (length > 60) {
7630 return braces[0] +
7631 (base === '' ? '' : base + '\n ') +
7632 ' ' +
7633 output.join(',\n ') +
7634 ' ' +
7635 braces[1];
7636 }
ebd8d4e8 7637
ab78acc6
IC
7638 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7639}
ebd8d4e8 7640
ebd8d4e8 7641
ab78acc6
IC
7642// NOTE: These type checking functions intentionally don't use `instanceof`
7643// because it is fragile and can be easily faked with `Object.create()`.
7644function isArray(ar) {
7645 return Array.isArray(ar);
7646}
7647exports.isArray = isArray;
ebd8d4e8 7648
ab78acc6
IC
7649function isBoolean(arg) {
7650 return typeof arg === 'boolean';
7651}
7652exports.isBoolean = isBoolean;
ebd8d4e8 7653
ab78acc6
IC
7654function isNull(arg) {
7655 return arg === null;
7656}
7657exports.isNull = isNull;
ebd8d4e8 7658
ab78acc6
IC
7659function isNullOrUndefined(arg) {
7660 return arg == null;
7661}
7662exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7663
ab78acc6
IC
7664function isNumber(arg) {
7665 return typeof arg === 'number';
7666}
7667exports.isNumber = isNumber;
ebd8d4e8 7668
ab78acc6
IC
7669function isString(arg) {
7670 return typeof arg === 'string';
7671}
7672exports.isString = isString;
ebd8d4e8 7673
ab78acc6
IC
7674function isSymbol(arg) {
7675 return typeof arg === 'symbol';
7676}
7677exports.isSymbol = isSymbol;
ebd8d4e8 7678
ab78acc6
IC
7679function isUndefined(arg) {
7680 return arg === void 0;
7681}
7682exports.isUndefined = isUndefined;
ebd8d4e8 7683
ab78acc6
IC
7684function isRegExp(re) {
7685 return isObject(re) && objectToString(re) === '[object RegExp]';
7686}
7687exports.isRegExp = isRegExp;
ebd8d4e8 7688
ab78acc6
IC
7689function isObject(arg) {
7690 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7691}
ab78acc6 7692exports.isObject = isObject;
ebd8d4e8 7693
ab78acc6
IC
7694function isDate(d) {
7695 return isObject(d) && objectToString(d) === '[object Date]';
7696}
7697exports.isDate = isDate;
ebd8d4e8 7698
ab78acc6
IC
7699function isError(e) {
7700 return isObject(e) &&
7701 (objectToString(e) === '[object Error]' || e instanceof Error);
7702}
7703exports.isError = isError;
ebd8d4e8 7704
ab78acc6
IC
7705function isFunction(arg) {
7706 return typeof arg === 'function';
7707}
7708exports.isFunction = isFunction;
ebd8d4e8 7709
ab78acc6
IC
7710function isPrimitive(arg) {
7711 return arg === null ||
7712 typeof arg === 'boolean' ||
7713 typeof arg === 'number' ||
7714 typeof arg === 'string' ||
7715 typeof arg === 'symbol' || // ES6 symbol
7716 typeof arg === 'undefined';
7717}
7718exports.isPrimitive = isPrimitive;
ebd8d4e8 7719
ab78acc6 7720exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7721
ab78acc6
IC
7722function objectToString(o) {
7723 return Object.prototype.toString.call(o);
7724}
ebd8d4e8 7725
ebd8d4e8 7726
ab78acc6
IC
7727function pad(n) {
7728 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7729}
ebd8d4e8 7730
ebd8d4e8 7731
ab78acc6
IC
7732var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7733 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7734
ab78acc6
IC
7735// 26 Feb 16:19:34
7736function timestamp() {
7737 var d = new Date();
7738 var time = [pad(d.getHours()),
7739 pad(d.getMinutes()),
7740 pad(d.getSeconds())].join(':');
7741 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7742}
7743
ab78acc6
IC
7744
7745// log is just a thin wrapper to console.log that prepends a timestamp
7746exports.log = function() {
7747 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7748};
7749
ab78acc6
IC
7750
7751/**
7752 * Inherit the prototype methods from one constructor into another.
7753 *
7754 * The Function.prototype.inherits from lang.js rewritten as a standalone
7755 * function (not on Function.prototype). NOTE: If this file is to be loaded
7756 * during bootstrapping this function needs to be rewritten using some native
7757 * functions as prototype setup using normal JavaScript does not work as
7758 * expected during bootstrapping (see mirror.js in r114903).
7759 *
7760 * @param {function} ctor Constructor function which needs to inherit the
7761 * prototype.
7762 * @param {function} superCtor Constructor function to inherit prototype from.
7763 */
7764exports.inherits = require('inherits');
7765
7766exports._extend = function(origin, add) {
7767 // Don't do anything if add isn't an object
7768 if (!add || !isObject(add)) return origin;
7769
7770 var keys = Object.keys(add);
7771 var i = keys.length;
7772 while (i--) {
7773 origin[keys[i]] = add[keys[i]];
7774 }
7775 return origin;
7776};
7777
7778function hasOwnProperty(obj, prop) {
7779 return Object.prototype.hasOwnProperty.call(obj, prop);
7780}
7781
7782}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7783},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7784// Base58 encoding/decoding
7785// Originally written by Mike Hearn for BitcoinJ
7786// Copyright (c) 2011 Google Inc
7787// Ported to JavaScript by Stefan Thomas
7788// Merged Buffer refactorings from base58-native by Stephen Pair
7789// Copyright (c) 2013 BitPay Inc
7790
ebd8d4e8 7791var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7792var ALPHABET_MAP = {}
7793for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7794 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7795}
ab78acc6 7796var BASE = 58
ebd8d4e8
IC
7797
7798function encode(buffer) {
ab78acc6
IC
7799 if (buffer.length === 0) return ''
7800
7801 var i, j, digits = [0]
7802 for (i = 0; i < buffer.length; i++) {
7803 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7804
7805 digits[0] += buffer[i]
ebd8d4e8 7806
ab78acc6
IC
7807 var carry = 0
7808 for (j = 0; j < digits.length; ++j) {
7809 digits[j] += carry
ebd8d4e8 7810
ab78acc6
IC
7811 carry = (digits[j] / BASE) | 0
7812 digits[j] %= BASE
7813 }
7814
7815 while (carry) {
7816 digits.push(carry % BASE)
7817
7818 carry = (carry / BASE) | 0
7819 }
ebd8d4e8
IC
7820 }
7821
7822 // deal with leading zeros
ab78acc6 7823 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7824
ab78acc6
IC
7825 // convert digits to a string
7826 var stringOutput = ""
7827 for (var i = digits.length - 1; i >= 0; i--) {
7828 stringOutput = stringOutput + ALPHABET[digits[i]]
7829 }
7830 return stringOutput
ebd8d4e8
IC
7831}
7832
7833function decode(string) {
ab78acc6 7834 if (string.length === 0) return []
ebd8d4e8 7835
ab78acc6
IC
7836 var i, j, bytes = [0]
7837 for (i = 0; i < string.length; i++) {
7838 var c = string[i]
7839 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7840
ab78acc6
IC
7841 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7842 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7843
ab78acc6
IC
7844 var carry = 0
7845 for (j = 0; j < bytes.length; ++j) {
7846 bytes[j] += carry
ebd8d4e8 7847
ab78acc6
IC
7848 carry = bytes[j] >> 8
7849 bytes[j] &= 0xff
7850 }
ebd8d4e8 7851
ab78acc6
IC
7852 while (carry) {
7853 bytes.push(carry & 0xff)
7854
7855 carry >>= 8
7856 }
ebd8d4e8
IC
7857 }
7858
ab78acc6
IC
7859 // deal with leading zeros
7860 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7861
ab78acc6 7862 return bytes.reverse()
ebd8d4e8
IC
7863}
7864
7865module.exports = {
7866 encode: encode,
7867 decode: decode
7868}
7869
ab78acc6 7870},{}],31:[function(require,module,exports){
ebd8d4e8 7871(function (Buffer){
ab78acc6
IC
7872'use strict'
7873
7874var base58 = require('bs58')
7875var createHash = require('create-hash')
7876
7877// SHA256(SHA256(buffer))
7878function sha256x2 (buffer) {
7879 buffer = createHash('sha256').update(buffer).digest()
7880 return createHash('sha256').update(buffer).digest()
7881}
7882
7883// Encode a buffer as a base58-check encoded string
7884function encode (payload) {
7885 var checksum = sha256x2(payload).slice(0, 4)
7886
7887 return base58.encode(Buffer.concat([
7888 payload,
7889 checksum
7890 ]))
7891}
7892
7893// Decode a base58-check encoded string to a buffer
7894function decode (string) {
7895 var buffer = new Buffer(base58.decode(string))
7896
7897 var payload = buffer.slice(0, -4)
7898 var checksum = buffer.slice(-4)
7899 var newChecksum = sha256x2(payload).slice(0, 4)
7900
7901 for (var i = 0; i < newChecksum.length; ++i) {
7902 if (newChecksum[i] === checksum[i]) continue
7903
7904 throw new Error('Invalid checksum')
ebd8d4e8 7905 }
ab78acc6
IC
7906
7907 return payload
ebd8d4e8
IC
7908}
7909
ab78acc6
IC
7910module.exports = {
7911 encode: encode,
7912 decode: decode
ebd8d4e8
IC
7913}
7914
ab78acc6
IC
7915}).call(this,require("buffer").Buffer)
7916},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7917(function (Buffer){
ab78acc6
IC
7918'use strict';
7919var inherits = require('inherits')
7920var md5 = require('./md5')
7921var rmd160 = require('ripemd160')
7922var sha = require('sha.js')
ebd8d4e8 7923
ab78acc6 7924var Transform = require('stream').Transform
ebd8d4e8 7925
ab78acc6
IC
7926function HashNoConstructor(hash) {
7927 Transform.call(this)
ebd8d4e8 7928
ab78acc6
IC
7929 this._hash = hash
7930 this.buffers = []
7931}
ebd8d4e8 7932
ab78acc6 7933inherits(HashNoConstructor, Transform)
ebd8d4e8 7934
ab78acc6
IC
7935HashNoConstructor.prototype._transform = function (data, _, next) {
7936 this.buffers.push(data)
ebd8d4e8 7937
ab78acc6
IC
7938 next()
7939}
ebd8d4e8 7940
ab78acc6
IC
7941HashNoConstructor.prototype._flush = function (next) {
7942 this.push(this.digest())
7943 next()
7944}
7945
7946HashNoConstructor.prototype.update = function (data, enc) {
7947 if (typeof data === 'string') {
7948 data = new Buffer(data, enc)
ebd8d4e8
IC
7949 }
7950
ab78acc6
IC
7951 this.buffers.push(data)
7952 return this
7953}
7954
7955HashNoConstructor.prototype.digest = function (enc) {
7956 var buf = Buffer.concat(this.buffers)
7957 var r = this._hash(buf)
7958 this.buffers = null
7959
7960 return enc ? r.toString(enc) : r
7961}
7962
7963function Hash(hash) {
7964 Transform.call(this)
7965
7966 this._hash = hash
7967}
7968
7969inherits(Hash, Transform)
7970
7971Hash.prototype._transform = function (data, enc, next) {
7972 if (enc) data = new Buffer(data, enc)
7973
7974 this._hash.update(data)
7975
7976 next()
ebd8d4e8
IC
7977}
7978
ab78acc6
IC
7979Hash.prototype._flush = function (next) {
7980 this.push(this._hash.digest())
7981 this._hash = null
7982
7983 next()
7984}
7985
7986Hash.prototype.update = function (data, enc) {
7987 if (typeof data === 'string') {
7988 data = new Buffer(data, enc)
7989 }
7990
7991 this._hash.update(data)
ebd8d4e8
IC
7992 return this
7993}
7994
ab78acc6
IC
7995Hash.prototype.digest = function (enc) {
7996 var outData = this._hash.digest()
7997
7998 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
7999}
8000
ab78acc6
IC
8001module.exports = function createHash (alg) {
8002 if ('md5' === alg) return new HashNoConstructor(md5)
8003 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
8004
8005 return new Hash(sha(alg))
8006}
ebd8d4e8 8007
ab78acc6
IC
8008}).call(this,require("buffer").Buffer)
8009},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 8010(function (Buffer){
ab78acc6 8011'use strict';
ebd8d4e8
IC
8012var intSize = 4;
8013var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
8014var chrsz = 8;
8015
8016function toArray(buf, bigEndian) {
8017 if ((buf.length % intSize) !== 0) {
8018 var len = buf.length + (intSize - (buf.length % intSize));
8019 buf = Buffer.concat([buf, zeroBuffer], len);
8020 }
8021
8022 var arr = [];
8023 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
8024 for (var i = 0; i < buf.length; i += intSize) {
8025 arr.push(fn.call(buf, i));
8026 }
8027 return arr;
8028}
8029
8030function toBuffer(arr, size, bigEndian) {
8031 var buf = new Buffer(size);
8032 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
8033 for (var i = 0; i < arr.length; i++) {
8034 fn.call(buf, arr[i], i * 4, true);
8035 }
8036 return buf;
8037}
8038
8039function hash(buf, fn, hashSize, bigEndian) {
8040 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
8041 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
8042 return toBuffer(arr, hashSize, bigEndian);
8043}
ab78acc6
IC
8044exports.hash = hash;
8045}).call(this,require("buffer").Buffer)
8046},{"buffer":7}],34:[function(require,module,exports){
8047'use strict';
ebd8d4e8
IC
8048/*
8049 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
8050 * Digest Algorithm, as defined in RFC 1321.
8051 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
8052 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8053 * Distributed under the BSD License
8054 * See http://pajhome.org.uk/crypt/md5 for more info.
8055 */
8056
ab78acc6 8057var helpers = require('./helpers');
ebd8d4e8
IC
8058
8059/*
8060 * Calculate the MD5 of an array of little-endian words, and a bit length
8061 */
8062function core_md5(x, len)
8063{
8064 /* append padding */
8065 x[len >> 5] |= 0x80 << ((len) % 32);
8066 x[(((len + 64) >>> 9) << 4) + 14] = len;
8067
8068 var a = 1732584193;
8069 var b = -271733879;
8070 var c = -1732584194;
8071 var d = 271733878;
8072
8073 for(var i = 0; i < x.length; i += 16)
8074 {
8075 var olda = a;
8076 var oldb = b;
8077 var oldc = c;
8078 var oldd = d;
8079
8080 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
8081 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
8082 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
8083 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
8084 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
8085 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
8086 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
8087 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
8088 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
8089 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
8090 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
8091 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
8092 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
8093 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
8094 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
8095 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
8096
8097 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
8098 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
8099 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
8100 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
8101 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
8102 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
8103 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
8104 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
8105 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
8106 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
8107 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
8108 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
8109 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
8110 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
8111 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
8112 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
8113
8114 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
8115 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
8116 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
8117 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
8118 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
8119 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
8120 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
8121 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
8122 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
8123 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
8124 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
8125 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
8126 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
8127 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
8128 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
8129 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
8130
8131 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
8132 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
8133 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
8134 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
8135 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
8136 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
8137 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
8138 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
8139 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
8140 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
8141 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
8142 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
8143 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
8144 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
8145 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
8146 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
8147
8148 a = safe_add(a, olda);
8149 b = safe_add(b, oldb);
8150 c = safe_add(c, oldc);
8151 d = safe_add(d, oldd);
8152 }
8153 return Array(a, b, c, d);
8154
8155}
8156
8157/*
8158 * These functions implement the four basic operations the algorithm uses.
8159 */
8160function md5_cmn(q, a, b, x, s, t)
8161{
8162 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
8163}
8164function md5_ff(a, b, c, d, x, s, t)
8165{
8166 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
8167}
8168function md5_gg(a, b, c, d, x, s, t)
8169{
8170 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
8171}
8172function md5_hh(a, b, c, d, x, s, t)
8173{
8174 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
8175}
8176function md5_ii(a, b, c, d, x, s, t)
8177{
8178 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
8179}
8180
8181/*
8182 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
8183 * to work around bugs in some JS interpreters.
8184 */
8185function safe_add(x, y)
8186{
8187 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
8188 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
8189 return (msw << 16) | (lsw & 0xFFFF);
8190}
8191
8192/*
8193 * Bitwise rotate a 32-bit number to the left.
8194 */
8195function bit_rol(num, cnt)
8196{
8197 return (num << cnt) | (num >>> (32 - cnt));
8198}
8199
8200module.exports = function md5(buf) {
8201 return helpers.hash(buf, core_md5, 16);
8202};
ab78acc6
IC
8203},{"./helpers":33}],35:[function(require,module,exports){
8204arguments[4][12][0].apply(exports,arguments)
8205},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 8206(function (Buffer){
ebd8d4e8
IC
8207/*
8208CryptoJS v3.1.2
8209code.google.com/p/crypto-js
8210(c) 2009-2013 by Jeff Mott. All rights reserved.
8211code.google.com/p/crypto-js/wiki/License
8212*/
8213/** @preserve
8214(c) 2012 by Cédric Mesnil. All rights reserved.
8215
8216Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
8217
8218 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
8219 - 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.
8220
8221THIS 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.
8222*/
8223
ab78acc6 8224// constants table
ebd8d4e8 8225var zl = [
ab78acc6
IC
8226 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
8227 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
8228 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
8229 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
8230 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
8231]
8232
ebd8d4e8 8233var zr = [
ab78acc6
IC
8234 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
8235 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
8236 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
8237 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
8238 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
8239]
8240
ebd8d4e8 8241var sl = [
ab78acc6
IC
8242 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
8243 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
8244 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
8245 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
8246 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
8247]
8248
ebd8d4e8 8249var sr = [
ab78acc6
IC
8250 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
8251 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
8252 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
8253 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8254 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
8255]
ebd8d4e8 8256
ab78acc6
IC
8257var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
8258var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8259
ab78acc6
IC
8260function bytesToWords (bytes) {
8261 var words = []
ebd8d4e8 8262 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8263 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8264 }
ab78acc6
IC
8265 return words
8266}
ebd8d4e8 8267
ab78acc6
IC
8268function wordsToBytes (words) {
8269 var bytes = []
ebd8d4e8 8270 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8271 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8272 }
ab78acc6
IC
8273 return bytes
8274}
ebd8d4e8 8275
ab78acc6
IC
8276function processBlock (H, M, offset) {
8277 // swap endian
ebd8d4e8 8278 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8279 var offset_i = offset + i
8280 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8281
8282 // Swap
8283 M[offset_i] = (
ab78acc6
IC
8284 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8285 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8286 )
ebd8d4e8
IC
8287 }
8288
8289 // Working variables
ab78acc6
IC
8290 var al, bl, cl, dl, el
8291 var ar, br, cr, dr, er
8292
8293 ar = al = H[0]
8294 br = bl = H[1]
8295 cr = cl = H[2]
8296 dr = dl = H[3]
8297 er = el = H[4]
8298
8299 // computation
8300 var t
8301 for (i = 0; i < 80; i += 1) {
8302 t = (al + M[offset + zl[i]]) | 0
8303 if (i < 16) {
8304 t += f1(bl, cl, dl) + hl[0]
8305 } else if (i < 32) {
8306 t += f2(bl, cl, dl) + hl[1]
8307 } else if (i < 48) {
8308 t += f3(bl, cl, dl) + hl[2]
8309 } else if (i < 64) {
8310 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8311 } else {// if (i<80) {
ab78acc6
IC
8312 t += f5(bl, cl, dl) + hl[4]
8313 }
8314 t = t | 0
8315 t = rotl(t, sl[i])
8316 t = (t + el) | 0
8317 al = el
8318 el = dl
8319 dl = rotl(cl, 10)
8320 cl = bl
8321 bl = t
8322
8323 t = (ar + M[offset + zr[i]]) | 0
8324 if (i < 16) {
8325 t += f5(br, cr, dr) + hr[0]
8326 } else if (i < 32) {
8327 t += f4(br, cr, dr) + hr[1]
8328 } else if (i < 48) {
8329 t += f3(br, cr, dr) + hr[2]
8330 } else if (i < 64) {
8331 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8332 } else {// if (i<80) {
ab78acc6 8333 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8334 }
ebd8d4e8 8335
ab78acc6
IC
8336 t = t | 0
8337 t = rotl(t, sr[i])
8338 t = (t + er) | 0
8339 ar = er
8340 er = dr
8341 dr = rotl(cr, 10)
8342 cr = br
8343 br = t
8344 }
8345
8346 // intermediate hash value
8347 t = (H[1] + cl + dr) | 0
8348 H[1] = (H[2] + dl + er) | 0
8349 H[2] = (H[3] + el + ar) | 0
8350 H[3] = (H[4] + al + br) | 0
8351 H[4] = (H[0] + bl + cr) | 0
8352 H[0] = t
ebd8d4e8
IC
8353}
8354
ab78acc6
IC
8355function f1 (x, y, z) {
8356 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8357}
8358
ab78acc6
IC
8359function f2 (x, y, z) {
8360 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8361}
8362
ab78acc6
IC
8363function f3 (x, y, z) {
8364 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8365}
8366
ab78acc6
IC
8367function f4 (x, y, z) {
8368 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8369}
8370
ab78acc6
IC
8371function f5 (x, y, z) {
8372 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8373}
8374
ab78acc6
IC
8375function rotl (x, n) {
8376 return (x << n) | (x >>> (32 - n))
8377}
8378
8379function ripemd160 (message) {
8380 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8381
ab78acc6
IC
8382 if (typeof message === 'string') {
8383 message = new Buffer(message, 'utf8')
8384 }
ebd8d4e8 8385
ab78acc6 8386 var m = bytesToWords(message)
ebd8d4e8 8387
ab78acc6
IC
8388 var nBitsLeft = message.length * 8
8389 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8390
8391 // Add padding
ab78acc6 8392 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8393 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8394 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8395 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8396 )
ebd8d4e8 8397
ab78acc6
IC
8398 for (var i = 0; i < m.length; i += 16) {
8399 processBlock(H, m, i)
ebd8d4e8
IC
8400 }
8401
ab78acc6
IC
8402 // swap endian
8403 for (i = 0; i < 5; i++) {
8404 // shortcut
8405 var H_i = H[i]
ebd8d4e8
IC
8406
8407 // Swap
ab78acc6
IC
8408 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8409 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8410 }
8411
ab78acc6
IC
8412 var digestbytes = wordsToBytes(H)
8413 return new Buffer(digestbytes)
ebd8d4e8
IC
8414}
8415
ab78acc6
IC
8416module.exports = ripemd160
8417
8418}).call(this,require("buffer").Buffer)
8419},{"buffer":7}],37:[function(require,module,exports){
8420(function (Buffer){
8421// prototype class for hash functions
8422function Hash (blockSize, finalSize) {
8423 this._block = new Buffer(blockSize)
8424 this._finalSize = finalSize
8425 this._blockSize = blockSize
8426 this._len = 0
8427 this._s = 0
8428}
ebd8d4e8 8429
ab78acc6
IC
8430Hash.prototype.update = function (data, enc) {
8431 if (typeof data === 'string') {
8432 enc = enc || 'utf8'
8433 data = new Buffer(data, enc)
8434 }
ebd8d4e8 8435
ab78acc6
IC
8436 var l = this._len += data.length
8437 var s = this._s || 0
8438 var f = 0
8439 var buffer = this._block
ebd8d4e8 8440
ab78acc6
IC
8441 while (s < l) {
8442 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8443 var ch = (t - f)
ebd8d4e8 8444
ab78acc6
IC
8445 for (var i = 0; i < ch; i++) {
8446 buffer[(s % this._blockSize) + i] = data[i + f]
8447 }
8448
8449 s += ch
8450 f += ch
ebd8d4e8 8451
ab78acc6
IC
8452 if ((s % this._blockSize) === 0) {
8453 this._update(buffer)
8454 }
ebd8d4e8 8455 }
ab78acc6
IC
8456 this._s = s
8457
8458 return this
8459}
ebd8d4e8 8460
ab78acc6
IC
8461Hash.prototype.digest = function (enc) {
8462 // Suppose the length of the message M, in bits, is l
8463 var l = this._len * 8
8464
8465 // Append the bit 1 to the end of the message
8466 this._block[this._len % this._blockSize] = 0x80
8467
8468 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8469 this._block.fill(0, this._len % this._blockSize + 1)
8470
8471 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8472 this._update(this._block)
8473 this._block.fill(0)
ebd8d4e8
IC
8474 }
8475
ab78acc6
IC
8476 // to this append the block which is equal to the number l written in binary
8477 // TODO: handle case where l is > Math.pow(2, 29)
8478 this._block.writeInt32BE(l, this._blockSize - 4)
8479
8480 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8481
ab78acc6
IC
8482 return enc ? hash.toString(enc) : hash
8483}
ebd8d4e8 8484
ab78acc6
IC
8485Hash.prototype._update = function () {
8486 throw new Error('_update must be implemented by subclass')
8487}
ebd8d4e8 8488
ab78acc6 8489module.exports = Hash
ebd8d4e8 8490
ab78acc6
IC
8491}).call(this,require("buffer").Buffer)
8492},{"buffer":7}],38:[function(require,module,exports){
8493var exports = module.exports = function SHA (algorithm) {
8494 algorithm = algorithm.toLowerCase()
ebd8d4e8 8495
ab78acc6
IC
8496 var Algorithm = exports[algorithm]
8497 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8498
ab78acc6
IC
8499 return new Algorithm()
8500}
8501
8502exports.sha = require('./sha')
8503exports.sha1 = require('./sha1')
8504exports.sha224 = require('./sha224')
8505exports.sha256 = require('./sha256')
8506exports.sha384 = require('./sha384')
8507exports.sha512 = require('./sha512')
8508
8509},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8510(function (Buffer){
8511/*
8512 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8513 * in FIPS PUB 180-1
8514 * This source code is derived from sha1.js of the same repository.
8515 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8516 * operation was added.
8517 */
ebd8d4e8 8518
ab78acc6
IC
8519var inherits = require('inherits')
8520var Hash = require('./hash')
ebd8d4e8 8521
ab78acc6 8522var W = new Array(80)
ebd8d4e8 8523
ab78acc6
IC
8524function Sha () {
8525 this.init()
8526 this._w = W
ebd8d4e8 8527
ab78acc6
IC
8528 Hash.call(this, 64, 56)
8529}
ebd8d4e8 8530
ab78acc6 8531inherits(Sha, Hash)
ebd8d4e8 8532
ab78acc6
IC
8533Sha.prototype.init = function () {
8534 this._a = 0x67452301 | 0
8535 this._b = 0xefcdab89 | 0
8536 this._c = 0x98badcfe | 0
8537 this._d = 0x10325476 | 0
8538 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8539
ab78acc6
IC
8540 return this
8541}
8542
8543/*
8544 * Bitwise rotate a 32-bit number to the left.
8545 */
8546function rol (num, cnt) {
8547 return (num << cnt) | (num >>> (32 - cnt))
8548}
8549
8550Sha.prototype._update = function (M) {
8551 var W = this._w
8552
8553 var a = this._a
8554 var b = this._b
8555 var c = this._c
8556 var d = this._d
8557 var e = this._e
ebd8d4e8 8558
ab78acc6
IC
8559 var j = 0, k
8560
8561 /*
8562 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8563 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8564 */
8565 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8566 function loop (w, f) {
8567 W[j] = w
8568
8569 var t = rol(a, 5) + f + e + w + k
8570
8571 e = d
8572 d = c
8573 c = rol(b, 30)
8574 b = a
8575 a = t
8576 j++
ebd8d4e8
IC
8577 }
8578
ab78acc6
IC
8579 k = 1518500249
8580 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8581 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8582 k = 1859775393
8583 while (j < 40) loop(calcW(), b ^ c ^ d)
8584 k = -1894007588
8585 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8586 k = -899497514
8587 while (j < 80) loop(calcW(), b ^ c ^ d)
8588
8589 this._a = (a + this._a) | 0
8590 this._b = (b + this._b) | 0
8591 this._c = (c + this._c) | 0
8592 this._d = (d + this._d) | 0
8593 this._e = (e + this._e) | 0
ebd8d4e8
IC
8594}
8595
ab78acc6
IC
8596Sha.prototype._hash = function () {
8597 var H = new Buffer(20)
8598
8599 H.writeInt32BE(this._a | 0, 0)
8600 H.writeInt32BE(this._b | 0, 4)
8601 H.writeInt32BE(this._c | 0, 8)
8602 H.writeInt32BE(this._d | 0, 12)
8603 H.writeInt32BE(this._e | 0, 16)
8604
8605 return H
ebd8d4e8
IC
8606}
8607
ab78acc6 8608module.exports = Sha
ebd8d4e8 8609
ebd8d4e8 8610
ab78acc6
IC
8611}).call(this,require("buffer").Buffer)
8612},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8613(function (Buffer){
ebd8d4e8
IC
8614/*
8615 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8616 * in FIPS PUB 180-1
8617 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8618 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8619 * Distributed under the BSD License
8620 * See http://pajhome.org.uk/crypt/md5 for details.
8621 */
ebd8d4e8 8622
ab78acc6
IC
8623var inherits = require('inherits')
8624var Hash = require('./hash')
ebd8d4e8 8625
ab78acc6 8626var W = new Array(80)
ebd8d4e8 8627
ab78acc6
IC
8628function Sha1 () {
8629 this.init()
8630 this._w = W
ebd8d4e8 8631
ab78acc6
IC
8632 Hash.call(this, 64, 56)
8633}
ebd8d4e8 8634
ab78acc6 8635inherits(Sha1, Hash)
ebd8d4e8 8636
ab78acc6
IC
8637Sha1.prototype.init = function () {
8638 this._a = 0x67452301 | 0
8639 this._b = 0xefcdab89 | 0
8640 this._c = 0x98badcfe | 0
8641 this._d = 0x10325476 | 0
8642 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8643
ab78acc6
IC
8644 return this
8645}
ebd8d4e8 8646
ab78acc6
IC
8647/*
8648 * Bitwise rotate a 32-bit number to the left.
8649 */
8650function rol (num, cnt) {
8651 return (num << cnt) | (num >>> (32 - cnt))
8652}
ebd8d4e8 8653
ab78acc6
IC
8654Sha1.prototype._update = function (M) {
8655 var W = this._w
ebd8d4e8 8656
ab78acc6
IC
8657 var a = this._a
8658 var b = this._b
8659 var c = this._c
8660 var d = this._d
8661 var e = this._e
ebd8d4e8 8662
ab78acc6 8663 var j = 0, k
ebd8d4e8 8664
ab78acc6
IC
8665 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8666 function loop (w, f) {
8667 W[j] = w
ebd8d4e8 8668
ab78acc6 8669 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8670
ab78acc6
IC
8671 e = d
8672 d = c
8673 c = rol(b, 30)
8674 b = a
8675 a = t
8676 j++
ebd8d4e8
IC
8677 }
8678
ab78acc6
IC
8679 k = 1518500249
8680 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8681 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8682 k = 1859775393
8683 while (j < 40) loop(calcW(), b ^ c ^ d)
8684 k = -1894007588
8685 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8686 k = -899497514
8687 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8688
ab78acc6
IC
8689 this._a = (a + this._a) | 0
8690 this._b = (b + this._b) | 0
8691 this._c = (c + this._c) | 0
8692 this._d = (d + this._d) | 0
8693 this._e = (e + this._e) | 0
8694}
ebd8d4e8 8695
ab78acc6
IC
8696Sha1.prototype._hash = function () {
8697 var H = new Buffer(20)
ebd8d4e8 8698
ab78acc6
IC
8699 H.writeInt32BE(this._a | 0, 0)
8700 H.writeInt32BE(this._b | 0, 4)
8701 H.writeInt32BE(this._c | 0, 8)
8702 H.writeInt32BE(this._d | 0, 12)
8703 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8704
ab78acc6
IC
8705 return H
8706}
ebd8d4e8 8707
ab78acc6 8708module.exports = Sha1
ebd8d4e8 8709
ab78acc6
IC
8710}).call(this,require("buffer").Buffer)
8711},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8712(function (Buffer){
8713/**
8714 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8715 * in FIPS 180-2
8716 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8717 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8718 *
8719 */
ebd8d4e8 8720
ab78acc6
IC
8721var inherits = require('inherits')
8722var Sha256 = require('./sha256')
8723var Hash = require('./hash')
ebd8d4e8 8724
ab78acc6 8725var W = new Array(64)
ebd8d4e8 8726
ab78acc6
IC
8727function Sha224 () {
8728 this.init()
ebd8d4e8 8729
ab78acc6 8730 this._w = W // new Array(64)
ebd8d4e8 8731
ab78acc6
IC
8732 Hash.call(this, 64, 56)
8733}
ebd8d4e8 8734
ab78acc6 8735inherits(Sha224, Sha256)
ebd8d4e8 8736
ab78acc6
IC
8737Sha224.prototype.init = function () {
8738 this._a = 0xc1059ed8 | 0
8739 this._b = 0x367cd507 | 0
8740 this._c = 0x3070dd17 | 0
8741 this._d = 0xf70e5939 | 0
8742 this._e = 0xffc00b31 | 0
8743 this._f = 0x68581511 | 0
8744 this._g = 0x64f98fa7 | 0
8745 this._h = 0xbefa4fa4 | 0
8746
8747 return this
8748}
8749
8750Sha224.prototype._hash = function () {
8751 var H = new Buffer(28)
8752
8753 H.writeInt32BE(this._a, 0)
8754 H.writeInt32BE(this._b, 4)
8755 H.writeInt32BE(this._c, 8)
8756 H.writeInt32BE(this._d, 12)
8757 H.writeInt32BE(this._e, 16)
8758 H.writeInt32BE(this._f, 20)
8759 H.writeInt32BE(this._g, 24)
8760
8761 return H
ebd8d4e8
IC
8762}
8763
ab78acc6 8764module.exports = Sha224
ebd8d4e8 8765
ab78acc6
IC
8766}).call(this,require("buffer").Buffer)
8767},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8768(function (Buffer){
ebd8d4e8
IC
8769/**
8770 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8771 * in FIPS 180-2
8772 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8773 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8774 *
8775 */
8776
ab78acc6
IC
8777var inherits = require('inherits')
8778var Hash = require('./hash')
8779
8780var K = [
8781 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8782 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8783 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8784 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8785 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8786 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8787 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8788 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8789 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8790 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8791 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8792 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8793 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8794 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8795 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8796 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8797]
8798
8799var W = new Array(64)
8800
8801function Sha256 () {
8802 this.init()
8803
8804 this._w = W // new Array(64)
8805
8806 Hash.call(this, 64, 56)
8807}
8808
8809inherits(Sha256, Hash)
8810
8811Sha256.prototype.init = function () {
8812 this._a = 0x6a09e667 | 0
8813 this._b = 0xbb67ae85 | 0
8814 this._c = 0x3c6ef372 | 0
8815 this._d = 0xa54ff53a | 0
8816 this._e = 0x510e527f | 0
8817 this._f = 0x9b05688c | 0
8818 this._g = 0x1f83d9ab | 0
8819 this._h = 0x5be0cd19 | 0
ebd8d4e8 8820
ab78acc6
IC
8821 return this
8822}
ebd8d4e8 8823
ab78acc6
IC
8824function S (X, n) {
8825 return (X >>> n) | (X << (32 - n))
8826}
ebd8d4e8 8827
ab78acc6
IC
8828function R (X, n) {
8829 return (X >>> n)
8830}
ebd8d4e8 8831
ab78acc6
IC
8832function Ch (x, y, z) {
8833 return ((x & y) ^ ((~x) & z))
8834}
ebd8d4e8 8835
ab78acc6
IC
8836function Maj (x, y, z) {
8837 return ((x & y) ^ (x & z) ^ (y & z))
8838}
ebd8d4e8 8839
ab78acc6
IC
8840function Sigma0256 (x) {
8841 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8842}
ebd8d4e8 8843
ab78acc6
IC
8844function Sigma1256 (x) {
8845 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8846}
ebd8d4e8 8847
ab78acc6
IC
8848function Gamma0256 (x) {
8849 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8850}
ebd8d4e8 8851
ab78acc6
IC
8852function Gamma1256 (x) {
8853 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8854}
ebd8d4e8 8855
ab78acc6
IC
8856Sha256.prototype._update = function (M) {
8857 var W = this._w
ebd8d4e8 8858
ab78acc6
IC
8859 var a = this._a | 0
8860 var b = this._b | 0
8861 var c = this._c | 0
8862 var d = this._d | 0
8863 var e = this._e | 0
8864 var f = this._f | 0
8865 var g = this._g | 0
8866 var h = this._h | 0
ebd8d4e8 8867
ab78acc6 8868 var j = 0
ebd8d4e8 8869
ab78acc6
IC
8870 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8871 function loop (w) {
8872 W[j] = w
ebd8d4e8 8873
ab78acc6
IC
8874 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8875 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8876
ab78acc6
IC
8877 h = g
8878 g = f
8879 f = e
8880 e = d + T1
8881 d = c
8882 c = b
8883 b = a
8884 a = T1 + T2
ebd8d4e8 8885
ab78acc6 8886 j++
ebd8d4e8
IC
8887 }
8888
ab78acc6
IC
8889 while (j < 16) loop(M.readInt32BE(j * 4))
8890 while (j < 64) loop(calcW())
ebd8d4e8 8891
ab78acc6
IC
8892 this._a = (a + this._a) | 0
8893 this._b = (b + this._b) | 0
8894 this._c = (c + this._c) | 0
8895 this._d = (d + this._d) | 0
8896 this._e = (e + this._e) | 0
8897 this._f = (f + this._f) | 0
8898 this._g = (g + this._g) | 0
8899 this._h = (h + this._h) | 0
8900}
ebd8d4e8 8901
ab78acc6
IC
8902Sha256.prototype._hash = function () {
8903 var H = new Buffer(32)
ebd8d4e8 8904
ab78acc6
IC
8905 H.writeInt32BE(this._a, 0)
8906 H.writeInt32BE(this._b, 4)
8907 H.writeInt32BE(this._c, 8)
8908 H.writeInt32BE(this._d, 12)
8909 H.writeInt32BE(this._e, 16)
8910 H.writeInt32BE(this._f, 20)
8911 H.writeInt32BE(this._g, 24)
8912 H.writeInt32BE(this._h, 28)
ebd8d4e8 8913
ab78acc6
IC
8914 return H
8915}
ebd8d4e8 8916
ab78acc6 8917module.exports = Sha256
ebd8d4e8 8918
ab78acc6
IC
8919}).call(this,require("buffer").Buffer)
8920},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8921(function (Buffer){
8922var inherits = require('inherits')
8923var SHA512 = require('./sha512')
8924var Hash = require('./hash')
ebd8d4e8 8925
ab78acc6 8926var W = new Array(160)
ebd8d4e8 8927
ab78acc6
IC
8928function Sha384 () {
8929 this.init()
8930 this._w = W
ebd8d4e8 8931
ab78acc6
IC
8932 Hash.call(this, 128, 112)
8933}
ebd8d4e8 8934
ab78acc6 8935inherits(Sha384, SHA512)
ebd8d4e8 8936
ab78acc6
IC
8937Sha384.prototype.init = function () {
8938 this._a = 0xcbbb9d5d | 0
8939 this._b = 0x629a292a | 0
8940 this._c = 0x9159015a | 0
8941 this._d = 0x152fecd8 | 0
8942 this._e = 0x67332667 | 0
8943 this._f = 0x8eb44a87 | 0
8944 this._g = 0xdb0c2e0d | 0
8945 this._h = 0x47b5481d | 0
ebd8d4e8 8946
ab78acc6
IC
8947 this._al = 0xc1059ed8 | 0
8948 this._bl = 0x367cd507 | 0
8949 this._cl = 0x3070dd17 | 0
8950 this._dl = 0xf70e5939 | 0
8951 this._el = 0xffc00b31 | 0
8952 this._fl = 0x68581511 | 0
8953 this._gl = 0x64f98fa7 | 0
8954 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8955
ab78acc6 8956 return this
ebd8d4e8
IC
8957}
8958
ab78acc6
IC
8959Sha384.prototype._hash = function () {
8960 var H = new Buffer(48)
ebd8d4e8 8961
ab78acc6
IC
8962 function writeInt64BE (h, l, offset) {
8963 H.writeInt32BE(h, offset)
8964 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8965 }
ebd8d4e8 8966
ab78acc6
IC
8967 writeInt64BE(this._a, this._al, 0)
8968 writeInt64BE(this._b, this._bl, 8)
8969 writeInt64BE(this._c, this._cl, 16)
8970 writeInt64BE(this._d, this._dl, 24)
8971 writeInt64BE(this._e, this._el, 32)
8972 writeInt64BE(this._f, this._fl, 40)
8973
8974 return H
ebd8d4e8
IC
8975}
8976
ab78acc6 8977module.exports = Sha384
ebd8d4e8 8978
ab78acc6
IC
8979}).call(this,require("buffer").Buffer)
8980},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8981(function (Buffer){
ab78acc6
IC
8982var inherits = require('inherits')
8983var Hash = require('./hash')
8984
8985var K = [
8986 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8987 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8988 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8989 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8990 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8991 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8992 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8993 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8994 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8995 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8996 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8997 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8998 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8999 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
9000 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
9001 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
9002 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
9003 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
9004 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
9005 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
9006 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
9007 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
9008 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
9009 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
9010 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
9011 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
9012 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
9013 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
9014 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
9015 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
9016 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
9017 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
9018 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
9019 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
9020 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
9021 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
9022 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
9023 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
9024 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
9025 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
9026]
9027
9028var W = new Array(160)
9029
9030function Sha512 () {
9031 this.init()
9032 this._w = W
9033
9034 Hash.call(this, 128, 112)
9035}
9036
9037inherits(Sha512, Hash)
9038
9039Sha512.prototype.init = function () {
9040 this._a = 0x6a09e667 | 0
9041 this._b = 0xbb67ae85 | 0
9042 this._c = 0x3c6ef372 | 0
9043 this._d = 0xa54ff53a | 0
9044 this._e = 0x510e527f | 0
9045 this._f = 0x9b05688c | 0
9046 this._g = 0x1f83d9ab | 0
9047 this._h = 0x5be0cd19 | 0
9048
9049 this._al = 0xf3bcc908 | 0
9050 this._bl = 0x84caa73b | 0
9051 this._cl = 0xfe94f82b | 0
9052 this._dl = 0x5f1d36f1 | 0
9053 this._el = 0xade682d1 | 0
9054 this._fl = 0x2b3e6c1f | 0
9055 this._gl = 0xfb41bd6b | 0
9056 this._hl = 0x137e2179 | 0
ebd8d4e8 9057
ab78acc6 9058 return this
ebd8d4e8
IC
9059}
9060
ab78acc6
IC
9061function S (X, Xl, n) {
9062 return (X >>> n) | (Xl << (32 - n))
9063}
9064
9065function Ch (x, y, z) {
9066 return ((x & y) ^ ((~x) & z))
9067}
9068
9069function Maj (x, y, z) {
9070 return ((x & y) ^ (x & z) ^ (y & z))
9071}
9072
9073Sha512.prototype._update = function (M) {
9074 var W = this._w
9075
9076 var a = this._a | 0
9077 var b = this._b | 0
9078 var c = this._c | 0
9079 var d = this._d | 0
9080 var e = this._e | 0
9081 var f = this._f | 0
9082 var g = this._g | 0
9083 var h = this._h | 0
9084
9085 var al = this._al | 0
9086 var bl = this._bl | 0
9087 var cl = this._cl | 0
9088 var dl = this._dl | 0
9089 var el = this._el | 0
9090 var fl = this._fl | 0
9091 var gl = this._gl | 0
9092 var hl = this._hl | 0
9093
9094 var i = 0, j = 0
9095 var Wi, Wil
9096 function calcW () {
9097 var x = W[j - 15 * 2]
9098 var xl = W[j - 15 * 2 + 1]
9099 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
9100 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
9101
9102 x = W[j - 2 * 2]
9103 xl = W[j - 2 * 2 + 1]
9104 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
9105 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
9106
9107 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
9108 var Wi7 = W[j - 7 * 2]
9109 var Wi7l = W[j - 7 * 2 + 1]
9110
9111 var Wi16 = W[j - 16 * 2]
9112 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 9113
ab78acc6
IC
9114 Wil = gamma0l + Wi7l
9115 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
9116 Wil = Wil + gamma1l
9117 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
9118 Wil = Wil + Wi16l
9119 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
9120 }
9121
9122 function loop () {
9123 W[j] = Wi
9124 W[j + 1] = Wil
ebd8d4e8 9125
ab78acc6
IC
9126 var maj = Maj(a, b, c)
9127 var majl = Maj(al, bl, cl)
ebd8d4e8 9128
ab78acc6
IC
9129 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
9130 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
9131 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
9132 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 9133
ab78acc6
IC
9134 // t1 = h + sigma1 + ch + K[i] + W[i]
9135 var Ki = K[j]
9136 var Kil = K[j + 1]
ebd8d4e8 9137
ab78acc6
IC
9138 var ch = Ch(e, f, g)
9139 var chl = Ch(el, fl, gl)
ebd8d4e8 9140
ab78acc6
IC
9141 var t1l = hl + sigma1l
9142 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
9143 t1l = t1l + chl
9144 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
9145 t1l = t1l + Kil
9146 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
9147 t1l = t1l + Wil
9148 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 9149
ab78acc6
IC
9150 // t2 = sigma0 + maj
9151 var t2l = sigma0l + majl
9152 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 9153
ab78acc6
IC
9154 h = g
9155 hl = gl
9156 g = f
9157 gl = fl
9158 f = e
9159 fl = el
9160 el = (dl + t1l) | 0
9161 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9162 d = c
9163 dl = cl
9164 c = b
9165 cl = bl
9166 b = a
9167 bl = al
9168 al = (t1l + t2l) | 0
9169 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
9170
9171 i++
9172 j += 2
9173 }
9174
9175 while (i < 16) {
9176 Wi = M.readInt32BE(j * 4)
9177 Wil = M.readInt32BE(j * 4 + 4)
9178
9179 loop()
9180 }
9181
9182 while (i < 80) {
9183 calcW()
9184 loop()
9185 }
9186
9187 this._al = (this._al + al) | 0
9188 this._bl = (this._bl + bl) | 0
9189 this._cl = (this._cl + cl) | 0
9190 this._dl = (this._dl + dl) | 0
9191 this._el = (this._el + el) | 0
9192 this._fl = (this._fl + fl) | 0
9193 this._gl = (this._gl + gl) | 0
9194 this._hl = (this._hl + hl) | 0
9195
9196 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
9197 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
9198 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
9199 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
9200 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
9201 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
9202 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
9203 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
9204}
9205
9206Sha512.prototype._hash = function () {
9207 var H = new Buffer(64)
9208
9209 function writeInt64BE (h, l, offset) {
9210 H.writeInt32BE(h, offset)
9211 H.writeInt32BE(l, offset + 4)
9212 }
9213
9214 writeInt64BE(this._a, this._al, 0)
9215 writeInt64BE(this._b, this._bl, 8)
9216 writeInt64BE(this._c, this._cl, 16)
9217 writeInt64BE(this._d, this._dl, 24)
9218 writeInt64BE(this._e, this._el, 32)
9219 writeInt64BE(this._f, this._fl, 40)
9220 writeInt64BE(this._g, this._gl, 48)
9221 writeInt64BE(this._h, this._hl, 56)
9222
9223 return H
9224}
9225
9226module.exports = Sha512
9227
9228}).call(this,require("buffer").Buffer)
9229},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
9230(function (Buffer){
9231'use strict';
9232var createHash = require('create-hash/browser');
9233var inherits = require('inherits')
ebd8d4e8 9234
ab78acc6 9235var Transform = require('stream').Transform
ebd8d4e8 9236
ab78acc6
IC
9237var ZEROS = new Buffer(128)
9238ZEROS.fill(0)
ebd8d4e8 9239
ab78acc6
IC
9240function Hmac(alg, key) {
9241 Transform.call(this)
ebd8d4e8 9242
ab78acc6
IC
9243 if (typeof key === 'string') {
9244 key = new Buffer(key)
9245 }
ebd8d4e8 9246
ab78acc6 9247 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 9248
ab78acc6
IC
9249 this._alg = alg
9250 this._key = key
ebd8d4e8 9251
ab78acc6
IC
9252 if (key.length > blocksize) {
9253 key = createHash(alg).update(key).digest()
ebd8d4e8 9254
ab78acc6
IC
9255 } else if (key.length < blocksize) {
9256 key = Buffer.concat([key, ZEROS], blocksize)
9257 }
ebd8d4e8 9258
ab78acc6
IC
9259 var ipad = this._ipad = new Buffer(blocksize)
9260 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9261
ab78acc6
IC
9262 for (var i = 0; i < blocksize; i++) {
9263 ipad[i] = key[i] ^ 0x36
9264 opad[i] = key[i] ^ 0x5C
9265 }
ebd8d4e8 9266
ab78acc6
IC
9267 this._hash = createHash(alg).update(ipad)
9268}
ebd8d4e8 9269
ab78acc6 9270inherits(Hmac, Transform)
ebd8d4e8 9271
ab78acc6
IC
9272Hmac.prototype.update = function (data, enc) {
9273 this._hash.update(data, enc)
ebd8d4e8 9274
ab78acc6
IC
9275 return this
9276}
ebd8d4e8 9277
ab78acc6
IC
9278Hmac.prototype._transform = function (data, _, next) {
9279 this._hash.update(data)
ebd8d4e8 9280
ab78acc6
IC
9281 next()
9282}
ebd8d4e8 9283
ab78acc6
IC
9284Hmac.prototype._flush = function (next) {
9285 this.push(this.digest())
ebd8d4e8 9286
ab78acc6
IC
9287 next()
9288}
ebd8d4e8 9289
ab78acc6
IC
9290Hmac.prototype.digest = function (enc) {
9291 var h = this._hash.digest()
ebd8d4e8 9292
ab78acc6
IC
9293 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9294}
ebd8d4e8 9295
ab78acc6
IC
9296module.exports = function createHmac(alg, key) {
9297 return new Hmac(alg, key)
9298}
ebd8d4e8 9299
ab78acc6
IC
9300}).call(this,require("buffer").Buffer)
9301},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9302arguments[4][12][0].apply(exports,arguments)
9303},{"dup":12}],47:[function(require,module,exports){
9304var assert = require('assert')
9305var BigInteger = require('bigi')
ebd8d4e8 9306
ab78acc6 9307var Point = require('./point')
ebd8d4e8
IC
9308
9309function Curve(p, a, b, Gx, Gy, n, h) {
9310 this.p = p
9311 this.a = a
9312 this.b = b
9313 this.G = Point.fromAffine(this, Gx, Gy)
9314 this.n = n
9315 this.h = h
9316
9317 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9318
9319 // result caching
9320 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9321}
9322
9323Curve.prototype.pointFromX = function(isOdd, x) {
9324 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9325 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9326
9327 var y = beta
9328 if (beta.isEven() ^ !isOdd) {
9329 y = this.p.subtract(y) // -y % p
9330 }
9331
9332 return Point.fromAffine(this, x, y)
9333}
9334
9335Curve.prototype.isInfinity = function(Q) {
9336 if (Q === this.infinity) return true
9337
9338 return Q.z.signum() === 0 && Q.y.signum() !== 0
9339}
9340
9341Curve.prototype.isOnCurve = function(Q) {
9342 if (this.isInfinity(Q)) return true
9343
9344 var x = Q.affineX
9345 var y = Q.affineY
9346 var a = this.a
9347 var b = this.b
9348 var p = this.p
9349
9350 // Check that xQ and yQ are integers in the interval [0, p - 1]
9351 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9352 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9353
9354 // and check that y^2 = x^3 + ax + b (mod p)
9355 var lhs = y.square().mod(p)
9356 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9357 return lhs.equals(rhs)
9358}
9359
9360/**
9361 * Validate an elliptic curve point.
9362 *
9363 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9364 */
9365Curve.prototype.validate = function(Q) {
9366 // Check Q != O
9367 assert(!this.isInfinity(Q), 'Point is at infinity')
9368 assert(this.isOnCurve(Q), 'Point is not on the curve')
9369
9370 // Check nQ = O (where Q is a scalar multiple of G)
9371 var nQ = Q.multiply(this.n)
9372 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9373
9374 return true
9375}
9376
9377module.exports = Curve
9378
ab78acc6 9379},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9380module.exports={
9381 "secp128r1": {
9382 "p": "fffffffdffffffffffffffffffffffff",
9383 "a": "fffffffdfffffffffffffffffffffffc",
9384 "b": "e87579c11079f43dd824993c2cee5ed3",
9385 "n": "fffffffe0000000075a30d1b9038a115",
9386 "h": "01",
9387 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9388 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9389 },
9390 "secp160k1": {
9391 "p": "fffffffffffffffffffffffffffffffeffffac73",
9392 "a": "00",
9393 "b": "07",
9394 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9395 "h": "01",
9396 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9397 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9398 },
9399 "secp160r1": {
9400 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9401 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9402 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9403 "n": "0100000000000000000001f4c8f927aed3ca752257",
9404 "h": "01",
9405 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9406 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9407 },
9408 "secp192k1": {
9409 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9410 "a": "00",
9411 "b": "03",
9412 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9413 "h": "01",
9414 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9415 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9416 },
9417 "secp192r1": {
9418 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9419 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9420 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9421 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9422 "h": "01",
9423 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9424 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9425 },
ebd8d4e8
IC
9426 "secp256k1": {
9427 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9428 "a": "00",
9429 "b": "07",
9430 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9431 "h": "01",
9432 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9433 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9434 },
9435 "secp256r1": {
9436 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9437 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9438 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9439 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9440 "h": "01",
9441 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9442 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9443 }
9444}
9445
ab78acc6
IC
9446},{}],49:[function(require,module,exports){
9447var Point = require('./point')
9448var Curve = require('./curve')
ebd8d4e8 9449
ab78acc6 9450var getCurveByName = require('./names')
ebd8d4e8
IC
9451
9452module.exports = {
9453 Curve: Curve,
9454 Point: Point,
9455 getCurveByName: getCurveByName
9456}
9457
ab78acc6
IC
9458},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9459var BigInteger = require('bigi')
ebd8d4e8 9460
ab78acc6
IC
9461var curves = require('./curves')
9462var Curve = require('./curve')
ebd8d4e8
IC
9463
9464function getCurveByName(name) {
9465 var curve = curves[name]
9466 if (!curve) return null
9467
9468 var p = new BigInteger(curve.p, 16)
9469 var a = new BigInteger(curve.a, 16)
9470 var b = new BigInteger(curve.b, 16)
9471 var n = new BigInteger(curve.n, 16)
9472 var h = new BigInteger(curve.h, 16)
9473 var Gx = new BigInteger(curve.Gx, 16)
9474 var Gy = new BigInteger(curve.Gy, 16)
9475
9476 return new Curve(p, a, b, Gx, Gy, n, h)
9477}
9478
9479module.exports = getCurveByName
9480
ab78acc6 9481},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9482(function (Buffer){
ab78acc6
IC
9483var assert = require('assert')
9484var BigInteger = require('bigi')
ebd8d4e8
IC
9485
9486var THREE = BigInteger.valueOf(3)
9487
9488function Point(curve, x, y, z) {
9489 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9490
9491 this.curve = curve
9492 this.x = x
9493 this.y = y
9494 this.z = z
9495 this._zInv = null
9496
9497 this.compressed = true
9498}
9499
9500Object.defineProperty(Point.prototype, 'zInv', {
9501 get: function() {
9502 if (this._zInv === null) {
9503 this._zInv = this.z.modInverse(this.curve.p)
9504 }
9505
9506 return this._zInv
9507 }
9508})
9509
9510Object.defineProperty(Point.prototype, 'affineX', {
9511 get: function() {
9512 return this.x.multiply(this.zInv).mod(this.curve.p)
9513 }
9514})
9515
9516Object.defineProperty(Point.prototype, 'affineY', {
9517 get: function() {
9518 return this.y.multiply(this.zInv).mod(this.curve.p)
9519 }
9520})
9521
9522Point.fromAffine = function(curve, x, y) {
9523 return new Point(curve, x, y, BigInteger.ONE)
9524}
9525
9526Point.prototype.equals = function(other) {
9527 if (other === this) return true
9528 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9529 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9530
9531 // u = Y2 * Z1 - Y1 * Z2
9532 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9533
9534 if (u.signum() !== 0) return false
9535
9536 // v = X2 * Z1 - X1 * Z2
9537 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9538
9539 return v.signum() === 0
9540}
9541
9542Point.prototype.negate = function() {
9543 var y = this.curve.p.subtract(this.y)
9544
9545 return new Point(this.curve, this.x, y, this.z)
9546}
9547
9548Point.prototype.add = function(b) {
9549 if (this.curve.isInfinity(this)) return b
9550 if (this.curve.isInfinity(b)) return this
9551
9552 var x1 = this.x
9553 var y1 = this.y
9554 var x2 = b.x
9555 var y2 = b.y
9556
9557 // u = Y2 * Z1 - Y1 * Z2
9558 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9559 // v = X2 * Z1 - X1 * Z2
9560 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9561
9562 if (v.signum() === 0) {
9563 if (u.signum() === 0) {
9564 return this.twice() // this == b, so double
9565 }
9566
9567 return this.curve.infinity // this = -b, so infinity
9568 }
9569
9570 var v2 = v.square()
9571 var v3 = v2.multiply(v)
9572 var x1v2 = x1.multiply(v2)
9573 var zu2 = u.square().multiply(this.z)
9574
9575 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9576 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9577 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9578 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)
9579 // z3 = v^3 * z1 * z2
9580 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9581
9582 return new Point(this.curve, x3, y3, z3)
9583}
9584
9585Point.prototype.twice = function() {
9586 if (this.curve.isInfinity(this)) return this
9587 if (this.y.signum() === 0) return this.curve.infinity
9588
9589 var x1 = this.x
9590 var y1 = this.y
9591
9592 var y1z1 = y1.multiply(this.z)
9593 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9594 var a = this.curve.a
9595
9596 // w = 3 * x1^2 + a * z1^2
9597 var w = x1.square().multiply(THREE)
9598
9599 if (a.signum() !== 0) {
9600 w = w.add(this.z.square().multiply(a))
9601 }
9602
9603 w = w.mod(this.curve.p)
9604 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9605 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9606 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9607 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9608 // z3 = 8 * (y1 * z1)^3
9609 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9610
9611 return new Point(this.curve, x3, y3, z3)
9612}
9613
9614// Simple NAF (Non-Adjacent Form) multiplication algorithm
9615// TODO: modularize the multiplication algorithm
9616Point.prototype.multiply = function(k) {
9617 if (this.curve.isInfinity(this)) return this
9618 if (k.signum() === 0) return this.curve.infinity
9619
9620 var e = k
9621 var h = e.multiply(THREE)
9622
9623 var neg = this.negate()
9624 var R = this
9625
9626 for (var i = h.bitLength() - 2; i > 0; --i) {
9627 R = R.twice()
9628
9629 var hBit = h.testBit(i)
9630 var eBit = e.testBit(i)
9631
9632 if (hBit != eBit) {
9633 R = R.add(hBit ? this : neg)
9634 }
9635 }
9636
9637 return R
9638}
9639
9640// Compute this*j + x*k (simultaneous multiplication)
9641Point.prototype.multiplyTwo = function(j, x, k) {
9642 var i
9643
9644 if (j.bitLength() > k.bitLength())
9645 i = j.bitLength() - 1
9646 else
9647 i = k.bitLength() - 1
9648
9649 var R = this.curve.infinity
9650 var both = this.add(x)
9651
9652 while (i >= 0) {
9653 R = R.twice()
9654
9655 var jBit = j.testBit(i)
9656 var kBit = k.testBit(i)
9657
9658 if (jBit) {
9659 if (kBit) {
9660 R = R.add(both)
9661
9662 } else {
9663 R = R.add(this)
9664 }
9665
9666 } else {
9667 if (kBit) {
9668 R = R.add(x)
9669 }
9670 }
9671 --i
9672 }
9673
9674 return R
9675}
9676
9677Point.prototype.getEncoded = function(compressed) {
9678 if (compressed == undefined) compressed = this.compressed
9679 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9680
9681 var x = this.affineX
9682 var y = this.affineY
9683
9684 var buffer
9685
9686 // Determine size of q in bytes
9687 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9688
9689 // 0x02/0x03 | X
9690 if (compressed) {
9691 buffer = new Buffer(1 + byteLength)
9692 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9693
9694 // 0x04 | X | Y
9695 } else {
9696 buffer = new Buffer(1 + byteLength + byteLength)
9697 buffer.writeUInt8(0x04, 0)
9698
9699 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9700 }
9701
9702 x.toBuffer(byteLength).copy(buffer, 1)
9703
9704 return buffer
9705}
9706
9707Point.decodeFrom = function(curve, buffer) {
9708 var type = buffer.readUInt8(0)
9709 var compressed = (type !== 4)
9710
ebd8d4e8 9711 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9712 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9713
9714 var Q
9715 if (compressed) {
9716 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9717 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9718
9719 var isOdd = (type === 0x03)
9720 Q = curve.pointFromX(isOdd, x)
9721
9722 } else {
9723 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9724
9725 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9726 Q = Point.fromAffine(curve, x, y)
9727 }
9728
9729 Q.compressed = compressed
9730 return Q
9731}
9732
9733Point.prototype.toString = function () {
9734 if (this.curve.isInfinity(this)) return '(INFINITY)'
9735
9736 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9737}
9738
9739module.exports = Point
9740
ab78acc6
IC
9741}).call(this,require("buffer").Buffer)
9742},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9743(function (process,global,Buffer){
9744'use strict';
ebd8d4e8 9745
ab78acc6
IC
9746var crypto = global.crypto || global.msCrypto
9747if(crypto && crypto.getRandomValues) {
9748 module.exports = randomBytes;
9749} else {
9750 module.exports = oldBrowser;
9751}
9752function randomBytes(size, cb) {
9753 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9754 /* This will not work in older browsers.
9755 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9756 */
9757
9758 crypto.getRandomValues(bytes);
9759 if (typeof cb === 'function') {
9760 return process.nextTick(function () {
9761 cb(null, bytes);
9762 });
ebd8d4e8 9763 }
ab78acc6
IC
9764 return bytes;
9765}
9766function oldBrowser() {
9767 throw new Error(
9768 'secure random number generation not supported by this browser\n'+
9769 'use chrome, FireFox or Internet Explorer 11'
9770 )
ebd8d4e8
IC
9771}
9772
ab78acc6
IC
9773}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9774},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9775(function (Buffer){
9776'use strict';
ebd8d4e8 9777
ab78acc6
IC
9778function getFunctionName(fn) {
9779 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9780}
9781
9782function getTypeTypeName(type) {
9783 if (nativeTypes.Function(type)) {
9784 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9785 }
ab78acc6
IC
9786 if (nativeTypes.Object(type)) return JSON.stringify(type);
9787
9788 return type;
ebd8d4e8
IC
9789}
9790
ab78acc6
IC
9791function getValueTypeName(value) {
9792 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9793
ab78acc6
IC
9794 return getFunctionName(value.constructor);
9795}
9796
9797function tfErrorString(type, value) {
9798 var typeTypeName = getTypeTypeName(type);
9799 var valueTypeName = getValueTypeName(value);
9800
9801 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9802}
9803
9804function tfPropertyErrorString(type, name, value) {
9805 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9806}
9807
9808var nativeTypes = {
9809 Array: (function (_Array) {
9810 function Array(_x) {
9811 return _Array.apply(this, arguments);
9812 }
9813
9814 Array.toString = function () {
9815 return _Array.toString();
9816 };
9817
9818 return Array;
9819 })(function (value) {
9820 return value !== null && value !== undefined && value.constructor === Array;
9821 }),
9822 Boolean: function Boolean(value) {
9823 return typeof value === 'boolean';
9824 },
9825 Buffer: (function (_Buffer) {
9826 function Buffer(_x2) {
9827 return _Buffer.apply(this, arguments);
9828 }
9829
9830 Buffer.toString = function () {
9831 return _Buffer.toString();
9832 };
9833
9834 return Buffer;
9835 })(function (value) {
9836 return Buffer.isBuffer(value);
9837 }),
9838 Function: function Function(value) {
9839 return typeof value === 'function';
9840 },
9841 Null: function Null(value) {
9842 return value === undefined || value === null;
9843 },
9844 Number: function Number(value) {
9845 return typeof value === 'number';
9846 },
9847 Object: function Object(value) {
9848 return typeof value === 'object';
9849 },
9850 String: function String(value) {
9851 return typeof value === 'string';
9852 },
9853 '': function _() {
9854 return true;
ebd8d4e8 9855 }
ab78acc6
IC
9856};
9857
9858function tJSON(type) {
9859 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9860}
9861
ab78acc6
IC
9862function sJSON(type) {
9863 var json = tJSON(type);
9864 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9865}
9866
ab78acc6
IC
9867var otherTypes = {
9868 arrayOf: function arrayOf(type) {
9869 function arrayOf(value, strict) {
9870 try {
9871 return nativeTypes.Array(value) && value.every(function (x) {
9872 return typeforce(type, x, strict);
9873 });
9874 } catch (e) {
9875 return false;
9876 }
9877 }
9878 arrayOf.toJSON = function () {
9879 return [tJSON(type)];
9880 };
9881
9882 return arrayOf;
9883 },
9884
9885 maybe: function maybe(type) {
9886 function maybe(value, strict) {
9887 return nativeTypes.Null(value) || typeforce(type, value, strict);
9888 }
9889 maybe.toJSON = function () {
9890 return '?' + sJSON(type);
9891 };
9892
9893 return maybe;
9894 },
9895
9896 object: function object(type) {
9897 function object(value, strict) {
9898 typeforce(nativeTypes.Object, value, strict);
9899
9900 var propertyName, propertyType, propertyValue;
9901
9902 try {
9903 for (propertyName in type) {
9904 propertyType = type[propertyName];
9905 propertyValue = value[propertyName];
9906
9907 typeforce(propertyType, propertyValue, strict);
9908 }
9909 } catch (e) {
9910 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9911 }
9912
9913 if (strict) {
9914 for (propertyName in value) {
9915 if (type[propertyName]) continue;
9916
9917 throw new TypeError('Unexpected property "' + propertyName + '"');
9918 }
9919 }
9920
9921 return true;
9922 }
9923 object.toJSON = function () {
9924 return type;
9925 };
9926
9927 return object;
9928 },
9929
9930 oneOf: function oneOf() {
9931 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9932 types[_key] = arguments[_key];
9933 }
9934
9935 function oneOf(value, strict) {
9936 return types.some(function (type) {
9937 try {
9938 return typeforce(type, value, strict);
9939 } catch (e) {
9940 return false;
9941 }
9942 });
9943 }
9944 oneOf.toJSON = function () {
9945 return types.map(sJSON).join('|');
9946 };
9947
9948 return oneOf;
9949 },
9950
9951 quacksLike: function quacksLike(type) {
9952 function quacksLike(value, strict) {
9953 return type === getValueTypeName(value);
9954 }
9955 quacksLike.toJSON = function () {
9956 return type;
9957 };
9958
9959 return quacksLike;
9960 },
9961
9962 tuple: function tuple() {
9963 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9964 types[_key2] = arguments[_key2];
9965 }
9966
9967 function tuple(value, strict) {
9968 return types.every(function (type, i) {
9969 return typeforce(type, value[i], strict);
9970 });
9971 }
9972 tuple.toJSON = function () {
9973 return '(' + types.map(sJSON).join(', ') + ')';
9974 };
9975
9976 return tuple;
9977 },
9978
9979 value: function value(expected) {
9980 function value(actual) {
9981 return actual === expected;
9982 }
9983 value.toJSON = function () {
9984 return expected;
9985 };
9986
9987 return value;
9988 }
9989};
9990
9991function compile(type) {
9992 if (nativeTypes.String(type)) {
9993 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9994
9995 return nativeTypes[type] || otherTypes.quacksLike(type);
9996 } else if (type && nativeTypes.Object(type)) {
9997 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9998
9999 var compiled = {};
10000
10001 for (var propertyName in type) {
10002 compiled[propertyName] = compile(type[propertyName]);
10003 }
10004
10005 return otherTypes.object(compiled);
10006 } else if (nativeTypes.Function(type)) {
10007 return type;
10008 }
10009
10010 return otherTypes.value(type);
ebd8d4e8
IC
10011}
10012
ab78acc6
IC
10013function typeforce(_x3, _x4, _x5) {
10014 var _again = true;
10015
10016 _function: while (_again) {
10017 var type = _x3,
10018 value = _x4,
10019 strict = _x5;
10020 _again = false;
10021
10022 if (nativeTypes.Function(type)) {
10023 if (type(value, strict)) return true;
10024
10025 throw new TypeError(tfErrorString(type, value));
10026 }
10027
10028 // JIT
10029 _x3 = compile(type);
10030 _x4 = value;
10031 _x5 = strict;
10032 _again = true;
10033 continue _function;
10034 }
ebd8d4e8
IC
10035}
10036
ab78acc6
IC
10037// assign all types to typeforce function
10038var typeName;
10039Object.keys(nativeTypes).forEach(function (typeName) {
10040 var nativeType = nativeTypes[typeName];
10041 nativeType.toJSON = function () {
10042 return typeName;
10043 };
10044
10045 typeforce[typeName] = nativeType;
10046});
ebd8d4e8 10047
ab78acc6
IC
10048for (typeName in otherTypes) {
10049 typeforce[typeName] = otherTypes[typeName];
10050}
ebd8d4e8 10051
ab78acc6
IC
10052module.exports = typeforce;
10053module.exports.compile = compile;
10054}).call(this,require("buffer").Buffer)
10055},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 10056(function (Buffer){
ab78acc6
IC
10057var assert = require('assert')
10058var base58check = require('bs58check')
10059var typeForce = require('typeforce')
10060var networks = require('./networks')
10061var scripts = require('./scripts')
ebd8d4e8 10062
ab78acc6 10063function findScriptTypeByVersion (version) {
ebd8d4e8
IC
10064 for (var networkName in networks) {
10065 var network = networks[networkName]
10066
10067 if (version === network.pubKeyHash) return 'pubkeyhash'
10068 if (version === network.scriptHash) return 'scripthash'
10069 }
10070}
10071
ab78acc6
IC
10072function Address (hash, version) {
10073 typeForce('Buffer', hash)
10074
ebd8d4e8
IC
10075 assert.strictEqual(hash.length, 20, 'Invalid hash length')
10076 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
10077
10078 this.hash = hash
10079 this.version = version
10080}
10081
ab78acc6 10082Address.fromBase58Check = function (string) {
ebd8d4e8
IC
10083 var payload = base58check.decode(string)
10084 var version = payload.readUInt8(0)
10085 var hash = payload.slice(1)
10086
10087 return new Address(hash, version)
10088}
10089
ab78acc6 10090Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
10091 network = network || networks.bitcoin
10092
ab78acc6
IC
10093 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
10094 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 10095
ab78acc6 10096 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
10097}
10098
ebd8d4e8
IC
10099Address.prototype.toBase58Check = function () {
10100 var payload = new Buffer(21)
10101 payload.writeUInt8(this.version, 0)
10102 this.hash.copy(payload, 1)
10103
10104 return base58check.encode(payload)
10105}
10106
ab78acc6 10107Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
10108 var scriptType = findScriptTypeByVersion(this.version)
10109
10110 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
10111 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
10112
ab78acc6
IC
10113 assert(false, this.toString() + ' has no matching Script')
10114}
10115
10116Address.prototype.toString = Address.prototype.toBase58Check
10117
10118module.exports = Address
10119
10120}).call(this,require("buffer").Buffer)
10121},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
10122var bs58check = require('bs58check')
10123
10124function decode () {
10125 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10126
10127 return bs58check.decode.apply(undefined, arguments)
10128}
10129
10130function encode () {
10131 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
10132
10133 return bs58check.encode.apply(undefined, arguments)
10134}
10135
10136module.exports = {
10137 decode: decode,
10138 encode: encode
10139}
10140
10141},{"bs58check":31}],56:[function(require,module,exports){
10142(function (Buffer){
10143var assert = require('assert')
10144var bufferutils = require('./bufferutils')
10145var crypto = require('./crypto')
10146
10147var Transaction = require('./transaction')
10148
10149function Block () {
10150 this.version = 1
10151 this.prevHash = null
10152 this.merkleRoot = null
10153 this.timestamp = 0
10154 this.bits = 0
10155 this.nonce = 0
10156}
10157
10158Block.fromBuffer = function (buffer) {
10159 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
10160
10161 var offset = 0
10162 function readSlice (n) {
10163 offset += n
10164 return buffer.slice(offset - n, offset)
10165 }
10166
10167 function readUInt32 () {
10168 var i = buffer.readUInt32LE(offset)
10169 offset += 4
10170 return i
10171 }
10172
10173 var block = new Block()
10174 block.version = readUInt32()
10175 block.prevHash = readSlice(32)
10176 block.merkleRoot = readSlice(32)
10177 block.timestamp = readUInt32()
10178 block.bits = readUInt32()
10179 block.nonce = readUInt32()
10180
10181 if (buffer.length === 80) return block
10182
10183 function readVarInt () {
10184 var vi = bufferutils.readVarInt(buffer, offset)
10185 offset += vi.size
10186 return vi.number
10187 }
10188
10189 // FIXME: poor performance
10190 function readTransaction () {
10191 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
10192
10193 offset += tx.toBuffer().length
10194 return tx
10195 }
10196
10197 var nTransactions = readVarInt()
10198 block.transactions = []
10199
10200 for (var i = 0; i < nTransactions; ++i) {
10201 var tx = readTransaction()
10202 block.transactions.push(tx)
10203 }
10204
10205 return block
10206}
10207
10208Block.fromHex = function (hex) {
10209 return Block.fromBuffer(new Buffer(hex, 'hex'))
10210}
10211
10212Block.prototype.getHash = function () {
10213 return crypto.hash256(this.toBuffer(true))
10214}
10215
10216Block.prototype.getId = function () {
10217 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
10218}
10219
ab78acc6
IC
10220Block.prototype.getUTCDate = function () {
10221 var date = new Date(0) // epoch
10222 date.setUTCSeconds(this.timestamp)
ebd8d4e8 10223
ab78acc6
IC
10224 return date
10225}
ebd8d4e8 10226
ab78acc6
IC
10227Block.prototype.toBuffer = function (headersOnly) {
10228 var buffer = new Buffer(80)
ebd8d4e8 10229
ab78acc6
IC
10230 var offset = 0
10231 function writeSlice (slice) {
10232 slice.copy(buffer, offset)
10233 offset += slice.length
10234 }
ebd8d4e8 10235
ab78acc6
IC
10236 function writeUInt32 (i) {
10237 buffer.writeUInt32LE(i, offset)
10238 offset += 4
10239 }
ebd8d4e8 10240
ab78acc6
IC
10241 writeUInt32(this.version)
10242 writeSlice(this.prevHash)
10243 writeSlice(this.merkleRoot)
10244 writeUInt32(this.timestamp)
10245 writeUInt32(this.bits)
10246 writeUInt32(this.nonce)
ebd8d4e8 10247
ab78acc6 10248 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 10249
ab78acc6
IC
10250 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
10251 var txBuffers = this.transactions.map(function (tx) {
10252 return tx.toBuffer()
10253 })
ebd8d4e8 10254
ab78acc6 10255 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
10256}
10257
ab78acc6
IC
10258Block.prototype.toHex = function (headersOnly) {
10259 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10260}
10261
ab78acc6
IC
10262module.exports = Block
10263
10264}).call(this,require("buffer").Buffer)
10265},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10266(function (Buffer){
10267var assert = require('assert')
10268var opcodes = require('./opcodes')
ebd8d4e8
IC
10269
10270// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10271function verifuint (value, max) {
ebd8d4e8
IC
10272 assert(typeof value === 'number', 'cannot write a non-number as a number')
10273 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10274 assert(value <= max, 'value is larger than maximum value for type')
10275 assert(Math.floor(value) === value, 'value has a fractional component')
10276}
10277
ab78acc6 10278function pushDataSize (i) {
ebd8d4e8 10279 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10280 : i < 0xff ? 2
10281 : i < 0xffff ? 3
10282 : 5
ebd8d4e8
IC
10283}
10284
ab78acc6 10285function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10286 var opcode = buffer.readUInt8(offset)
10287 var number, size
10288
10289 // ~6 bit
10290 if (opcode < opcodes.OP_PUSHDATA1) {
10291 number = opcode
10292 size = 1
10293
10294 // 8 bit
10295 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10296 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10297 number = buffer.readUInt8(offset + 1)
10298 size = 2
10299
10300 // 16 bit
10301 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10302 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10303 number = buffer.readUInt16LE(offset + 1)
10304 size = 3
10305
10306 // 32 bit
10307 } else {
ab78acc6 10308 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10309 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10310
10311 number = buffer.readUInt32LE(offset + 1)
10312 size = 5
ebd8d4e8
IC
10313 }
10314
10315 return {
10316 opcode: opcode,
10317 number: number,
10318 size: size
10319 }
10320}
10321
ab78acc6 10322function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10323 var a = buffer.readUInt32LE(offset)
10324 var b = buffer.readUInt32LE(offset + 4)
10325 b *= 0x100000000
10326
10327 verifuint(b + a, 0x001fffffffffffff)
10328
10329 return b + a
10330}
10331
ab78acc6 10332function readVarInt (buffer, offset) {
ebd8d4e8
IC
10333 var t = buffer.readUInt8(offset)
10334 var number, size
10335
10336 // 8 bit
10337 if (t < 253) {
10338 number = t
10339 size = 1
10340
10341 // 16 bit
10342 } else if (t < 254) {
10343 number = buffer.readUInt16LE(offset + 1)
10344 size = 3
10345
10346 // 32 bit
10347 } else if (t < 255) {
10348 number = buffer.readUInt32LE(offset + 1)
10349 size = 5
10350
10351 // 64 bit
10352 } else {
10353 number = readUInt64LE(buffer, offset + 1)
10354 size = 9
10355 }
10356
10357 return {
10358 number: number,
10359 size: size
10360 }
10361}
10362
ab78acc6 10363function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10364 var size = pushDataSize(number)
10365
10366 // ~6 bit
10367 if (size === 1) {
10368 buffer.writeUInt8(number, offset)
10369
10370 // 8 bit
10371 } else if (size === 2) {
10372 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10373 buffer.writeUInt8(number, offset + 1)
10374
10375 // 16 bit
10376 } else if (size === 3) {
10377 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10378 buffer.writeUInt16LE(number, offset + 1)
10379
10380 // 32 bit
10381 } else {
10382 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10383 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10384 }
10385
10386 return size
10387}
10388
ab78acc6 10389function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10390 verifuint(value, 0x001fffffffffffff)
10391
10392 buffer.writeInt32LE(value & -1, offset)
10393 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10394}
10395
ab78acc6
IC
10396function varIntSize (i) {
10397 return i < 253 ? 1
10398 : i < 0x10000 ? 3
10399 : i < 0x100000000 ? 5
10400 : 9
ebd8d4e8
IC
10401}
10402
ab78acc6 10403function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10404 var size = varIntSize(number)
10405
10406 // 8 bit
10407 if (size === 1) {
10408 buffer.writeUInt8(number, offset)
10409
10410 // 16 bit
10411 } else if (size === 3) {
10412 buffer.writeUInt8(253, offset)
10413 buffer.writeUInt16LE(number, offset + 1)
10414
10415 // 32 bit
10416 } else if (size === 5) {
10417 buffer.writeUInt8(254, offset)
10418 buffer.writeUInt32LE(number, offset + 1)
10419
10420 // 64 bit
10421 } else {
10422 buffer.writeUInt8(255, offset)
10423 writeUInt64LE(buffer, number, offset + 1)
10424 }
10425
10426 return size
10427}
10428
ab78acc6
IC
10429function varIntBuffer (i) {
10430 var size = varIntSize(i)
10431 var buffer = new Buffer(size)
10432 writeVarInt(buffer, i, 0)
10433
10434 return buffer
10435}
10436
10437function reverse (buffer) {
10438 var buffer2 = new Buffer(buffer)
10439 Array.prototype.reverse.call(buffer2)
10440 return buffer2
10441}
10442
ebd8d4e8
IC
10443module.exports = {
10444 pushDataSize: pushDataSize,
10445 readPushDataInt: readPushDataInt,
10446 readUInt64LE: readUInt64LE,
10447 readVarInt: readVarInt,
ab78acc6
IC
10448 reverse: reverse,
10449 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10450 varIntSize: varIntSize,
10451 writePushDataInt: writePushDataInt,
10452 writeUInt64LE: writeUInt64LE,
10453 writeVarInt: writeVarInt
10454}
10455
ab78acc6
IC
10456}).call(this,require("buffer").Buffer)
10457},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10458var createHash = require('create-hash')
ebd8d4e8 10459
ab78acc6 10460function hash160 (buffer) {
ebd8d4e8
IC
10461 return ripemd160(sha256(buffer))
10462}
10463
ab78acc6 10464function hash256 (buffer) {
ebd8d4e8
IC
10465 return sha256(sha256(buffer))
10466}
10467
ab78acc6
IC
10468function ripemd160 (buffer) {
10469 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10470}
10471
ab78acc6
IC
10472function sha1 (buffer) {
10473 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10474}
10475
ab78acc6
IC
10476function sha256 (buffer) {
10477 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10478}
10479
10480// FIXME: Name not consistent with others
ab78acc6 10481var createHmac = require('create-hmac')
ebd8d4e8 10482
ab78acc6
IC
10483function HmacSHA256 (buffer, secret) {
10484 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10485 return createHmac('sha256', secret).update(buffer).digest()
10486}
ebd8d4e8 10487
ab78acc6
IC
10488function HmacSHA512 (buffer, secret) {
10489 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10490 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10491}
10492
10493module.exports = {
10494 ripemd160: ripemd160,
10495 sha1: sha1,
10496 sha256: sha256,
10497 hash160: hash160,
10498 hash256: hash256,
10499 HmacSHA256: HmacSHA256,
10500 HmacSHA512: HmacSHA512
10501}
10502
ab78acc6 10503},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10504(function (Buffer){
ab78acc6
IC
10505var assert = require('assert')
10506var createHmac = require('create-hmac')
10507var typeForce = require('typeforce')
ebd8d4e8 10508
ab78acc6
IC
10509var BigInteger = require('bigi')
10510var ECSignature = require('./ecsignature')
10511
10512var ZERO = new Buffer([0])
10513var ONE = new Buffer([1])
ebd8d4e8
IC
10514
10515// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10516function deterministicGenerateK (curve, hash, d, checkSig) {
10517 typeForce('Buffer', hash)
10518 typeForce('BigInteger', d)
10519
10520 // FIXME: remove/uncomment for 2.0.0
10521 // typeForce('Function', checkSig)
10522
10523 if (typeof checkSig !== 'function') {
10524 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10525
10526 checkSig = function (k) {
10527 var G = curve.G
10528 var n = curve.n
10529 var e = BigInteger.fromBuffer(hash)
10530
10531 var Q = G.multiply(k)
10532
10533 if (curve.isInfinity(Q))
10534 return false
10535
10536 var r = Q.affineX.mod(n)
10537 if (r.signum() === 0)
10538 return false
10539
10540 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10541 if (s.signum() === 0)
10542 return false
10543
10544 return true
10545 }
10546 }
10547
10548 // sanity check
ebd8d4e8 10549 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10550
10551 var x = d.toBuffer(32)
10552 var k = new Buffer(32)
10553 var v = new Buffer(32)
10554
ab78acc6 10555 // Step A, ignored as hash already provided
ebd8d4e8
IC
10556 // Step B
10557 v.fill(1)
10558
10559 // Step C
10560 k.fill(0)
10561
10562 // Step D
ab78acc6
IC
10563 k = createHmac('sha256', k)
10564 .update(v)
10565 .update(ZERO)
10566 .update(x)
10567 .update(hash)
10568 .digest()
ebd8d4e8
IC
10569
10570 // Step E
ab78acc6 10571 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10572
10573 // Step F
ab78acc6
IC
10574 k = createHmac('sha256', k)
10575 .update(v)
10576 .update(ONE)
10577 .update(x)
10578 .update(hash)
10579 .digest()
ebd8d4e8
IC
10580
10581 // Step G
ab78acc6 10582 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10583
10584 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10585 // Step H2b
ab78acc6 10586 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10587
10588 var T = BigInteger.fromBuffer(v)
10589
ab78acc6
IC
10590 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10591 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10592 k = createHmac('sha256', k)
10593 .update(v)
10594 .update(ZERO)
10595 .digest()
10596
10597 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10598
ab78acc6
IC
10599 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10600 // Step H2b again
10601 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10602 T = BigInteger.fromBuffer(v)
10603 }
10604
10605 return T
10606}
10607
ab78acc6
IC
10608function sign (curve, hash, d) {
10609 var r, s
ebd8d4e8 10610
ab78acc6 10611 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10612 var n = curve.n
10613 var G = curve.G
ebd8d4e8 10614
ab78acc6
IC
10615 deterministicGenerateK(curve, hash, d, function (k) {
10616 var Q = G.multiply(k)
10617
10618 if (curve.isInfinity(Q))
10619 return false
10620
10621 r = Q.affineX.mod(n)
10622 if (r.signum() === 0)
10623 return false
10624
10625 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10626 if (s.signum() === 0)
10627 return false
ebd8d4e8 10628
ab78acc6
IC
10629 return true
10630 })
ebd8d4e8
IC
10631
10632 var N_OVER_TWO = n.shiftRight(1)
10633
10634 // enforce low S values, see bip62: 'low s values in signatures'
10635 if (s.compareTo(N_OVER_TWO) > 0) {
10636 s = n.subtract(s)
10637 }
10638
10639 return new ECSignature(r, s)
10640}
10641
ab78acc6 10642function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10643 var n = curve.n
10644 var G = curve.G
10645
10646 var r = signature.r
10647 var s = signature.s
10648
ab78acc6
IC
10649 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10650 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10651 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10652
ab78acc6 10653 // c = s^-1 mod n
ebd8d4e8
IC
10654 var c = s.modInverse(n)
10655
ab78acc6
IC
10656 // 1.4.4 Compute u1 = es^−1 mod n
10657 // u2 = rs^−1 mod n
ebd8d4e8
IC
10658 var u1 = e.multiply(c).mod(n)
10659 var u2 = r.multiply(c).mod(n)
10660
ab78acc6
IC
10661 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10662 var R = G.multiplyTwo(u1, Q, u2)
10663 var v = R.affineX.mod(n)
ebd8d4e8 10664
ab78acc6
IC
10665 // 1.4.5 (cont.) Enforce R is not at infinity
10666 if (curve.isInfinity(R)) return false
10667
10668 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10669 return v.equals(r)
10670}
10671
ab78acc6
IC
10672function verify (curve, hash, signature, Q) {
10673 // 1.4.2 H = Hash(M), already done by the user
10674 // 1.4.3 e = H
10675 var e = BigInteger.fromBuffer(hash)
10676
10677 return verifyRaw(curve, e, signature, Q)
10678}
10679
ebd8d4e8
IC
10680/**
10681 * Recover a public key from a signature.
10682 *
10683 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10684 * Key Recovery Operation".
10685 *
10686 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10687 */
ab78acc6 10688function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10689 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10690
ab78acc6
IC
10691 var n = curve.n
10692 var G = curve.G
10693
ebd8d4e8
IC
10694 var r = signature.r
10695 var s = signature.s
10696
ab78acc6
IC
10697 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10698 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10699
ebd8d4e8
IC
10700 // A set LSB signifies that the y-coordinate is odd
10701 var isYOdd = i & 1
10702
10703 // The more significant bit specifies whether we should use the
10704 // first or second candidate key.
10705 var isSecondKey = i >> 1
10706
ebd8d4e8
IC
10707 // 1.1 Let x = r + jn
10708 var x = isSecondKey ? r.add(n) : r
10709 var R = curve.pointFromX(isYOdd, x)
10710
10711 // 1.4 Check that nR is at infinity
10712 var nR = R.multiply(n)
10713 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10714
10715 // Compute -e from e
10716 var eNeg = e.negate().mod(n)
10717
10718 // 1.6.1 Compute Q = r^-1 (sR - eG)
10719 // Q = r^-1 (sR + -eG)
10720 var rInv = r.modInverse(n)
10721
10722 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10723 curve.validate(Q)
10724
10725 return Q
10726}
10727
10728/**
10729 * Calculate pubkey extraction parameter.
10730 *
10731 * When extracting a pubkey from a signature, we have to
10732 * distinguish four different cases. Rather than putting this
10733 * burden on the verifier, Bitcoin includes a 2-bit value with the
10734 * signature.
10735 *
10736 * This function simply tries all four cases and returns the value
10737 * that resulted in a successful pubkey recovery.
10738 */
ab78acc6 10739function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10740 for (var i = 0; i < 4; i++) {
10741 var Qprime = recoverPubKey(curve, e, signature, i)
10742
10743 // 1.6.2 Verify Q
10744 if (Qprime.equals(Q)) {
10745 return i
10746 }
10747 }
10748
10749 throw new Error('Unable to find valid recovery factor')
10750}
10751
10752module.exports = {
10753 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10754 deterministicGenerateK: deterministicGenerateK,
10755 recoverPubKey: recoverPubKey,
10756 sign: sign,
10757 verify: verify,
10758 verifyRaw: verifyRaw
10759}
10760
ab78acc6
IC
10761}).call(this,require("buffer").Buffer)
10762},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10763(function (Buffer){
ab78acc6
IC
10764var assert = require('assert')
10765var base58check = require('bs58check')
10766var ecdsa = require('./ecdsa')
10767var networks = require('./networks')
10768var randomBytes = require('randombytes')
10769var typeForce = require('typeforce')
ebd8d4e8 10770
ab78acc6
IC
10771var BigInteger = require('bigi')
10772var ECPubKey = require('./ecpubkey')
ebd8d4e8 10773
ab78acc6
IC
10774var ecurve = require('ecurve')
10775var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10776
ab78acc6 10777function ECKey (d, compressed) {
ebd8d4e8 10778 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10779 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10780
ab78acc6 10781 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10782
10783 this.d = d
10784 this.pub = new ECPubKey(Q, compressed)
10785}
10786
ab78acc6
IC
10787// Constants
10788ECKey.curve = secp256k1
10789
ebd8d4e8 10790// Static constructors
ab78acc6 10791ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10792 var payload = base58check.decode(string)
10793 var compressed = false
10794
10795 // Ignore the version byte
10796 payload = payload.slice(1)
10797
10798 if (payload.length === 33) {
10799 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10800
10801 // Truncate the compression flag
10802 payload = payload.slice(0, -1)
10803 compressed = true
10804 }
10805
10806 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10807
10808 var d = BigInteger.fromBuffer(payload)
10809 return new ECKey(d, compressed)
10810}
10811
ab78acc6
IC
10812ECKey.makeRandom = function (compressed, rng) {
10813 rng = rng || randomBytes
ebd8d4e8
IC
10814
10815 var buffer = rng(32)
ab78acc6
IC
10816 typeForce('Buffer', buffer)
10817 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10818
10819 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10820 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10821
10822 return new ECKey(d, compressed)
10823}
10824
10825// Export functions
ab78acc6 10826ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10827 network = network || networks.bitcoin
10828
10829 var bufferLen = this.pub.compressed ? 34 : 33
10830 var buffer = new Buffer(bufferLen)
10831
10832 buffer.writeUInt8(network.wif, 0)
10833 this.d.toBuffer(32).copy(buffer, 1)
10834
10835 if (this.pub.compressed) {
10836 buffer.writeUInt8(0x01, 33)
10837 }
10838
10839 return base58check.encode(buffer)
10840}
10841
10842// Operations
ab78acc6
IC
10843ECKey.prototype.sign = function (hash) {
10844 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10845}
10846
10847module.exports = ECKey
10848
ab78acc6
IC
10849}).call(this,require("buffer").Buffer)
10850},{"./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 10851(function (Buffer){
ab78acc6
IC
10852var crypto = require('./crypto')
10853var ecdsa = require('./ecdsa')
10854var typeForce = require('typeforce')
10855var networks = require('./networks')
ebd8d4e8 10856
ab78acc6 10857var Address = require('./address')
ebd8d4e8 10858
ab78acc6
IC
10859var ecurve = require('ecurve')
10860var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10861
ab78acc6
IC
10862function ECPubKey (Q, compressed) {
10863 if (compressed === undefined) {
10864 compressed = true
10865 }
ebd8d4e8 10866
ab78acc6
IC
10867 typeForce('Point', Q)
10868 typeForce('Boolean', compressed)
ebd8d4e8
IC
10869
10870 this.compressed = compressed
10871 this.Q = Q
10872}
10873
ab78acc6
IC
10874// Constants
10875ECPubKey.curve = secp256k1
10876
ebd8d4e8 10877// Static constructors
ab78acc6
IC
10878ECPubKey.fromBuffer = function (buffer) {
10879 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10880 return new ECPubKey(Q, Q.compressed)
10881}
10882
ab78acc6 10883ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10884 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10885}
10886
10887// Operations
ab78acc6 10888ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10889 network = network || networks.bitcoin
10890
10891 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10892}
10893
ab78acc6
IC
10894ECPubKey.prototype.verify = function (hash, signature) {
10895 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10896}
10897
10898// Export functions
ab78acc6 10899ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10900 return this.Q.getEncoded(this.compressed)
10901}
10902
ab78acc6 10903ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10904 return this.toBuffer().toString('hex')
10905}
10906
10907module.exports = ECPubKey
10908
ab78acc6
IC
10909}).call(this,require("buffer").Buffer)
10910},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10911(function (Buffer){
ab78acc6
IC
10912var assert = require('assert')
10913var typeForce = require('typeforce')
10914
10915var BigInteger = require('bigi')
10916
10917function ECSignature (r, s) {
10918 typeForce('BigInteger', r)
10919 typeForce('BigInteger', s)
ebd8d4e8 10920
ebd8d4e8
IC
10921 this.r = r
10922 this.s = s
10923}
10924
ab78acc6 10925ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10926 assert.equal(buffer.length, 65, 'Invalid signature length')
10927 var i = buffer.readUInt8(0) - 27
10928
10929 // At most 3 bits
10930 assert.equal(i, i & 7, 'Invalid signature parameter')
10931 var compressed = !!(i & 4)
10932
10933 // Recovery param only
10934 i = i & 3
10935
10936 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10937 var s = BigInteger.fromBuffer(buffer.slice(33))
10938
10939 return {
10940 compressed: compressed,
10941 i: i,
10942 signature: new ECSignature(r, s)
10943 }
10944}
10945
ab78acc6 10946ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10947 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10948 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10949 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10950
10951 var rLen = buffer.readUInt8(3)
10952 assert(rLen > 0, 'R length is zero')
10953
10954 var offset = 4 + rLen
10955 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10956
10957 var sLen = buffer.readUInt8(offset + 1)
10958 assert(sLen > 0, 'S length is zero')
10959
10960 var rB = buffer.slice(4, offset)
10961 var sB = buffer.slice(offset + 2)
10962 offset += 2 + sLen
10963
10964 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10965 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10966 }
10967
10968 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10969 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10970 }
10971
10972 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10973 var r = BigInteger.fromDERInteger(rB)
10974 var s = BigInteger.fromDERInteger(sB)
10975
10976 assert(r.signum() >= 0, 'R value is negative')
10977 assert(s.signum() >= 0, 'S value is negative')
10978
10979 return new ECSignature(r, s)
10980}
10981
ab78acc6
IC
10982// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10983ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
10984 var hashType = buffer.readUInt8(buffer.length - 1)
10985 var hashTypeMod = hashType & ~0x80
10986
ab78acc6 10987 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
10988
10989 return {
10990 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10991 hashType: hashType
10992 }
10993}
10994
ab78acc6
IC
10995ECSignature.prototype.toCompact = function (i, compressed) {
10996 if (compressed) {
10997 i += 4
10998 }
10999
ebd8d4e8
IC
11000 i += 27
11001
11002 var buffer = new Buffer(65)
11003 buffer.writeUInt8(i, 0)
11004
11005 this.r.toBuffer(32).copy(buffer, 1)
11006 this.s.toBuffer(32).copy(buffer, 33)
11007
11008 return buffer
11009}
11010
ab78acc6 11011ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
11012 var rBa = this.r.toDERInteger()
11013 var sBa = this.s.toDERInteger()
11014
11015 var sequence = []
ab78acc6
IC
11016
11017 // INTEGER
11018 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
11019 sequence = sequence.concat(rBa)
11020
ab78acc6
IC
11021 // INTEGER
11022 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
11023 sequence = sequence.concat(sBa)
11024
ab78acc6
IC
11025 // SEQUENCE
11026 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
11027
11028 return new Buffer(sequence)
11029}
11030
ab78acc6
IC
11031ECSignature.prototype.toScriptSignature = function (hashType) {
11032 var hashTypeMod = hashType & ~0x80
11033 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
11034
ebd8d4e8
IC
11035 var hashTypeBuffer = new Buffer(1)
11036 hashTypeBuffer.writeUInt8(hashType, 0)
11037
11038 return Buffer.concat([this.toDER(), hashTypeBuffer])
11039}
11040
11041module.exports = ECSignature
11042
ab78acc6
IC
11043}).call(this,require("buffer").Buffer)
11044},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 11045(function (Buffer){
ab78acc6
IC
11046var assert = require('assert')
11047var base58check = require('bs58check')
11048var bcrypto = require('./crypto')
11049var createHmac = require('create-hmac')
11050var typeForce = require('typeforce')
11051var networks = require('./networks')
11052
11053var BigInteger = require('bigi')
11054var ECKey = require('./eckey')
11055var ECPubKey = require('./ecpubkey')
11056
11057var ecurve = require('ecurve')
ebd8d4e8
IC
11058var curve = ecurve.getCurveByName('secp256k1')
11059
ab78acc6 11060function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
11061 for (var name in networks) {
11062 var network = networks[name]
11063
ab78acc6
IC
11064 if (version === network.bip32.private || version === network.bip32.public) {
11065 return network
ebd8d4e8
IC
11066 }
11067 }
11068
ab78acc6 11069 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
11070}
11071
ab78acc6 11072function HDNode (K, chainCode, network) {
ebd8d4e8
IC
11073 network = network || networks.bitcoin
11074
ab78acc6
IC
11075 typeForce('Buffer', chainCode)
11076
11077 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
11078 assert(network.bip32, 'Unknown BIP32 constants for network')
11079
11080 this.chainCode = chainCode
11081 this.depth = 0
11082 this.index = 0
ab78acc6 11083 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
11084 this.network = network
11085
11086 if (K instanceof BigInteger) {
11087 this.privKey = new ECKey(K, true)
11088 this.pubKey = this.privKey.pub
ab78acc6
IC
11089 } else if (K instanceof ECKey) {
11090 assert(K.pub.compressed, 'ECKey must be compressed')
11091 this.privKey = K
11092 this.pubKey = K.pub
11093 } else if (K instanceof ECPubKey) {
11094 assert(K.compressed, 'ECPubKey must be compressed')
11095 this.pubKey = K
ebd8d4e8
IC
11096 } else {
11097 this.pubKey = new ECPubKey(K, true)
11098 }
11099}
11100
11101HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
11102HDNode.HIGHEST_BIT = 0x80000000
11103HDNode.LENGTH = 78
11104
ab78acc6
IC
11105HDNode.fromSeedBuffer = function (seed, network) {
11106 typeForce('Buffer', seed)
11107
11108 assert(seed.length >= 16, 'Seed should be at least 128 bits')
11109 assert(seed.length <= 64, 'Seed should be at most 512 bits')
11110
11111 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
11112 var IL = I.slice(0, 32)
11113 var IR = I.slice(32)
11114
11115 // In case IL is 0 or >= n, the master key is invalid
11116 // This is handled by `new ECKey` in the HDNode constructor
11117 var pIL = BigInteger.fromBuffer(IL)
11118
11119 return new HDNode(pIL, IR, network)
11120}
11121
ab78acc6 11122HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
11123 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
11124}
11125
ab78acc6
IC
11126HDNode.fromBase58 = function (string, network) {
11127 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
11128}
11129
ab78acc6
IC
11130// FIXME: remove in 2.x.y
11131HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
11132 if (!__ignoreDeprecation) {
11133 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
11134 }
11135
ebd8d4e8
IC
11136 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
11137
11138 // 4 byte: version bytes
11139 var version = buffer.readUInt32BE(0)
ab78acc6
IC
11140
11141 if (network) {
11142 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
11143
11144 // auto-detect
11145 } else {
11146 network = findBIP32NetworkByVersion(version)
11147 }
ebd8d4e8
IC
11148
11149 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
11150 var depth = buffer.readUInt8(4)
11151
11152 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
11153 var parentFingerprint = buffer.readUInt32BE(5)
11154 if (depth === 0) {
11155 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
11156 }
11157
11158 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11159 // This is encoded in MSB order. (0x00000000 if master key)
11160 var index = buffer.readUInt32BE(9)
11161 assert(depth > 0 || index === 0, 'Invalid index')
11162
11163 // 32 bytes: the chain code
11164 var chainCode = buffer.slice(13, 45)
ab78acc6 11165 var data, hd
ebd8d4e8
IC
11166
11167 // 33 bytes: private key data (0x00 + k)
ab78acc6 11168 if (version === network.bip32.private) {
ebd8d4e8 11169 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 11170 data = buffer.slice(46, 78)
ebd8d4e8 11171 var d = BigInteger.fromBuffer(data)
ab78acc6 11172 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
11173
11174 // 33 bytes: public key data (0x02 + X or 0x03 + X)
11175 } else {
ab78acc6 11176 data = buffer.slice(45, 78)
ebd8d4e8
IC
11177 var Q = ecurve.Point.decodeFrom(curve, data)
11178 assert.equal(Q.compressed, true, 'Invalid public key')
11179
11180 // Verify that the X coordinate in the public point corresponds to a point on the curve.
11181 // If not, the extended public key is invalid.
11182 curve.validate(Q)
11183
ab78acc6 11184 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
11185 }
11186
11187 hd.depth = depth
11188 hd.index = index
11189 hd.parentFingerprint = parentFingerprint
11190
11191 return hd
11192}
11193
ab78acc6
IC
11194// FIXME: remove in 2.x.y
11195HDNode.fromHex = function (hex, network) {
11196 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
11197}
11198
ab78acc6
IC
11199HDNode.prototype.getIdentifier = function () {
11200 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
11201}
11202
ab78acc6 11203HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
11204 return this.getIdentifier().slice(0, 4)
11205}
11206
ab78acc6 11207HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
11208 return this.pubKey.getAddress(this.network)
11209}
11210
ab78acc6
IC
11211HDNode.prototype.neutered = function () {
11212 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
11213 neutered.depth = this.depth
11214 neutered.index = this.index
11215 neutered.parentFingerprint = this.parentFingerprint
11216
11217 return neutered
11218}
11219
11220HDNode.prototype.toBase58 = function (isPrivate) {
11221 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
11222}
11223
ab78acc6
IC
11224// FIXME: remove in 2.x.y
11225HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
11226 if (isPrivate === undefined) {
11227 isPrivate = !!this.privKey
11228
11229 // FIXME: remove in 2.x.y
11230 } else {
11231 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
11232 }
11233
11234 if (!__ignoreDeprecation) {
11235 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
11236 }
ebd8d4e8
IC
11237
11238 // Version
11239 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
11240 var buffer = new Buffer(HDNode.LENGTH)
11241
11242 // 4 bytes: version bytes
11243 buffer.writeUInt32BE(version, 0)
11244
11245 // Depth
11246 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
11247 buffer.writeUInt8(this.depth, 4)
11248
11249 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 11250 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
11251
11252 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
11253 // This is encoded in Big endian. (0x00000000 if master key)
11254 buffer.writeUInt32BE(this.index, 9)
11255
11256 // 32 bytes: the chain code
11257 this.chainCode.copy(buffer, 13)
11258
11259 // 33 bytes: the public key or private key data
11260 if (isPrivate) {
ab78acc6 11261 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11262 assert(this.privKey, 'Missing private key')
11263
11264 // 0x00 + k for private keys
11265 buffer.writeUInt8(0, 45)
11266 this.privKey.d.toBuffer(32).copy(buffer, 46)
11267 } else {
ebd8d4e8
IC
11268 // X9.62 encoding for public keys
11269 this.pubKey.toBuffer().copy(buffer, 45)
11270 }
11271
11272 return buffer
11273}
11274
ab78acc6
IC
11275// FIXME: remove in 2.x.y
11276HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11277 return this.toBuffer(isPrivate).toString('hex')
11278}
11279
11280// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11281HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11282 var isHardened = index >= HDNode.HIGHEST_BIT
11283 var indexBuffer = new Buffer(4)
11284 indexBuffer.writeUInt32BE(index, 0)
11285
11286 var data
11287
11288 // Hardened child
11289 if (isHardened) {
11290 assert(this.privKey, 'Could not derive hardened child key')
11291
11292 // data = 0x00 || ser256(kpar) || ser32(index)
11293 data = Buffer.concat([
11294 this.privKey.d.toBuffer(33),
11295 indexBuffer
11296 ])
11297
11298 // Normal child
11299 } else {
11300 // data = serP(point(kpar)) || ser32(index)
11301 // = serP(Kpar) || ser32(index)
11302 data = Buffer.concat([
11303 this.pubKey.toBuffer(),
11304 indexBuffer
11305 ])
11306 }
11307
ab78acc6 11308 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11309 var IL = I.slice(0, 32)
11310 var IR = I.slice(32)
11311
11312 var pIL = BigInteger.fromBuffer(IL)
11313
11314 // In case parse256(IL) >= n, proceed with the next value for i
11315 if (pIL.compareTo(curve.n) >= 0) {
11316 return this.derive(index + 1)
11317 }
11318
11319 // Private parent key -> private child key
11320 var hd
11321 if (this.privKey) {
11322 // ki = parse256(IL) + kpar (mod n)
11323 var ki = pIL.add(this.privKey.d).mod(curve.n)
11324
11325 // In case ki == 0, proceed with the next value for i
11326 if (ki.signum() === 0) {
11327 return this.derive(index + 1)
11328 }
11329
11330 hd = new HDNode(ki, IR, this.network)
11331
11332 // Public parent key -> public child key
11333 } else {
11334 // Ki = point(parse256(IL)) + Kpar
11335 // = G*IL + Kpar
11336 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11337
11338 // In case Ki is the point at infinity, proceed with the next value for i
11339 if (curve.isInfinity(Ki)) {
11340 return this.derive(index + 1)
11341 }
11342
11343 hd = new HDNode(Ki, IR, this.network)
11344 }
11345
11346 hd.depth = this.depth + 1
11347 hd.index = index
11348 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11349
11350 return hd
11351}
11352
ab78acc6 11353HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11354 // Only derives hardened private keys by default
11355 return this.derive(index + HDNode.HIGHEST_BIT)
11356}
11357
11358HDNode.prototype.toString = HDNode.prototype.toBase58
11359
11360module.exports = HDNode
11361
ab78acc6
IC
11362}).call(this,require("buffer").Buffer)
11363},{"./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 11364module.exports = {
ab78acc6
IC
11365 Address: require('./address'),
11366 base58check: require('./base58check'),
11367 Block: require('./block'),
11368 bufferutils: require('./bufferutils'),
11369 crypto: require('./crypto'),
11370 ecdsa: require('./ecdsa'),
11371 ECKey: require('./eckey'),
11372 ECPubKey: require('./ecpubkey'),
11373 ECSignature: require('./ecsignature'),
11374 Message: require('./message'),
11375 opcodes: require('./opcodes'),
11376 HDNode: require('./hdnode'),
11377 Script: require('./script'),
11378 scripts: require('./scripts'),
11379 Transaction: require('./transaction'),
11380 TransactionBuilder: require('./transaction_builder'),
11381 networks: require('./networks'),
11382 Wallet: require('./wallet')
11383}
11384
11385},{"./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 11386(function (Buffer){
ab78acc6
IC
11387var bufferutils = require('./bufferutils')
11388var crypto = require('./crypto')
11389var ecdsa = require('./ecdsa')
11390var networks = require('./networks')
11391
11392var BigInteger = require('bigi')
11393var ECPubKey = require('./ecpubkey')
11394var ECSignature = require('./ecsignature')
11395
11396var ecurve = require('ecurve')
ebd8d4e8
IC
11397var ecparams = ecurve.getCurveByName('secp256k1')
11398
ab78acc6 11399function magicHash (message, network) {
ebd8d4e8
IC
11400 var magicPrefix = new Buffer(network.magicPrefix)
11401 var messageBuffer = new Buffer(message)
ab78acc6 11402 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11403
11404 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11405 return crypto.hash256(buffer)
11406}
11407
ab78acc6 11408function sign (privKey, message, network) {
ebd8d4e8
IC
11409 network = network || networks.bitcoin
11410
11411 var hash = magicHash(message, network)
11412 var signature = privKey.sign(hash)
11413 var e = BigInteger.fromBuffer(hash)
11414 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11415
11416 return signature.toCompact(i, privKey.pub.compressed)
11417}
11418
11419// TODO: network could be implied from address
ab78acc6
IC
11420function verify (address, signature, message, network) {
11421 if (!Buffer.isBuffer(signature)) {
11422 signature = new Buffer(signature, 'base64')
ebd8d4e8 11423 }
ab78acc6 11424
ebd8d4e8
IC
11425 network = network || networks.bitcoin
11426
11427 var hash = magicHash(message, network)
ab78acc6 11428 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11429 var e = BigInteger.fromBuffer(hash)
11430 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11431
11432 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11433 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11434}
11435
11436module.exports = {
11437 magicHash: magicHash,
11438 sign: sign,
11439 verify: verify
11440}
11441
ab78acc6
IC
11442}).call(this,require("buffer").Buffer)
11443},{"./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
11444// https://en.bitcoin.it/wiki/List_of_address_prefixes
11445// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11446
11447var networks = {
11448 bitcoin: {
11449 magicPrefix: '\x18Bitcoin Signed Message:\n',
11450 bip32: {
11451 public: 0x0488b21e,
11452 private: 0x0488ade4
11453 },
11454 pubKeyHash: 0x00,
11455 scriptHash: 0x05,
11456 wif: 0x80,
11457 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11458 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11459 estimateFee: estimateFee('bitcoin')
a9385c1b 11460 },
ab78acc6
IC
11461 testnet: {
11462 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11463 bip32: {
ab78acc6
IC
11464 public: 0x043587cf,
11465 private: 0x04358394
a9385c1b 11466 },
ab78acc6
IC
11467 pubKeyHash: 0x6f,
11468 scriptHash: 0xc4,
11469 wif: 0xef,
11470 dustThreshold: 546,
cb325c58 11471 feePerKb: 10000,
ab78acc6 11472 estimateFee: estimateFee('testnet')
a9385c1b 11473 },
ab78acc6
IC
11474 litecoin: {
11475 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11476 bip32: {
ab78acc6
IC
11477 public: 0x019da462,
11478 private: 0x019d9cfe
a9385c1b 11479 },
ab78acc6
IC
11480 pubKeyHash: 0x30,
11481 scriptHash: 0x05,
11482 wif: 0xb0,
11483 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11484 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11485 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11486 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11487 },
11488 dogecoin: {
11489 magicPrefix: '\x19Dogecoin Signed Message:\n',
11490 bip32: {
11491 public: 0x02facafd,
11492 private: 0x02fac398
11493 },
11494 pubKeyHash: 0x1e,
11495 scriptHash: 0x16,
11496 wif: 0x9e,
11497 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11498 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11499 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11500 estimateFee: estimateFee('dogecoin')
11501 },
ab78acc6
IC
11502 viacoin: {
11503 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11504 bip32: {
ab78acc6
IC
11505 public: 0x0488b21e,
11506 private: 0x0488ade4
ebd8d4e8 11507 },
ab78acc6
IC
11508 pubKeyHash: 0x47,
11509 scriptHash: 0x21,
11510 wif: 0xc7,
11511 dustThreshold: 560,
11512 dustSoftThreshold: 100000,
11513 feePerKb: 100000, //
11514 estimateFee: estimateFee('viacoin')
ebd8d4e8 11515 },
ab78acc6
IC
11516 viacointestnet: {
11517 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11518 bip32: {
11519 public: 0x043587cf,
11520 private: 0x04358394
11521 },
ab78acc6 11522 pubKeyHash: 0x7f,
ebd8d4e8 11523 scriptHash: 0xc4,
ab78acc6
IC
11524 wif: 0xff,
11525 dustThreshold: 560,
11526 dustSoftThreshold: 100000,
11527 feePerKb: 100000,
11528 estimateFee: estimateFee('viacointestnet')
11529 },
11530 gamerscoin: {
11531 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11532 bip32: {
11533 public: 0x019da462,
11534 private: 0x019d9cfe
11535 },
11536 pubKeyHash: 0x26,
11537 scriptHash: 0x05,
11538 wif: 0xA6,
11539 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11540 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11541 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11542 estimateFee: estimateFee('gamerscoin')
11543 },
11544 jumbucks: {
11545 magicPrefix: '\x19Jumbucks Signed Message:\n',
11546 bip32: {
11547 public: 0x037a689a,
11548 private: 0x037a6460
11549 },
11550 pubKeyHash: 0x2b,
11551 scriptHash: 0x05,
11552 wif: 0xab,
11553 dustThreshold: 0,
11554 dustSoftThreshold: 10000,
ebd8d4e8 11555 feePerKb: 10000,
ab78acc6
IC
11556 estimateFee: estimateFee('jumbucks')
11557 },
11558 zetacoin: {
11559 magicPrefix: '\x18Zetacoin Signed Message:\n',
11560 bip32: {
11561 public: 0x0488b21e,
11562 private: 0x0488ade4
11563 },
11564 pubKeyHash: 0x50,
11565 scriptHash: 0x09,
11566 wif: 0xe0,
11567 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11568 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11569 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11570 }
11571}
11572
ab78acc6
IC
11573function estimateFee (type) {
11574 return function (tx) {
ebd8d4e8
IC
11575 var network = networks[type]
11576 var baseFee = network.feePerKb
11577 var byteSize = tx.toBuffer().length
11578
11579 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11580 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11581
ab78acc6 11582 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11583 if (e.value < network.dustSoftThreshold) {
11584 fee += baseFee
11585 }
11586 })
11587
11588 return fee
11589 }
11590}
11591
11592module.exports = networks
11593
ab78acc6 11594},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11595module.exports = {
11596 // push value
ab78acc6
IC
11597 OP_FALSE: 0,
11598 OP_0: 0,
11599 OP_PUSHDATA1: 76,
11600 OP_PUSHDATA2: 77,
11601 OP_PUSHDATA4: 78,
11602 OP_1NEGATE: 79,
11603 OP_RESERVED: 80,
11604 OP_1: 81,
11605 OP_TRUE: 81,
11606 OP_2: 82,
11607 OP_3: 83,
11608 OP_4: 84,
11609 OP_5: 85,
11610 OP_6: 86,
11611 OP_7: 87,
11612 OP_8: 88,
11613 OP_9: 89,
11614 OP_10: 90,
11615 OP_11: 91,
11616 OP_12: 92,
11617 OP_13: 93,
11618 OP_14: 94,
11619 OP_15: 95,
11620 OP_16: 96,
ebd8d4e8
IC
11621
11622 // control
ab78acc6
IC
11623 OP_NOP: 97,
11624 OP_VER: 98,
11625 OP_IF: 99,
11626 OP_NOTIF: 100,
11627 OP_VERIF: 101,
11628 OP_VERNOTIF: 102,
11629 OP_ELSE: 103,
11630 OP_ENDIF: 104,
11631 OP_VERIFY: 105,
11632 OP_RETURN: 106,
ebd8d4e8
IC
11633
11634 // stack ops
ab78acc6
IC
11635 OP_TOALTSTACK: 107,
11636 OP_FROMALTSTACK: 108,
11637 OP_2DROP: 109,
11638 OP_2DUP: 110,
11639 OP_3DUP: 111,
11640 OP_2OVER: 112,
11641 OP_2ROT: 113,
11642 OP_2SWAP: 114,
11643 OP_IFDUP: 115,
11644 OP_DEPTH: 116,
11645 OP_DROP: 117,
11646 OP_DUP: 118,
11647 OP_NIP: 119,
11648 OP_OVER: 120,
11649 OP_PICK: 121,
11650 OP_ROLL: 122,
11651 OP_ROT: 123,
11652 OP_SWAP: 124,
11653 OP_TUCK: 125,
ebd8d4e8
IC
11654
11655 // splice ops
ab78acc6
IC
11656 OP_CAT: 126,
11657 OP_SUBSTR: 127,
11658 OP_LEFT: 128,
11659 OP_RIGHT: 129,
11660 OP_SIZE: 130,
ebd8d4e8
IC
11661
11662 // bit logic
ab78acc6
IC
11663 OP_INVERT: 131,
11664 OP_AND: 132,
11665 OP_OR: 133,
11666 OP_XOR: 134,
11667 OP_EQUAL: 135,
11668 OP_EQUALVERIFY: 136,
11669 OP_RESERVED1: 137,
11670 OP_RESERVED2: 138,
ebd8d4e8
IC
11671
11672 // numeric
ab78acc6
IC
11673 OP_1ADD: 139,
11674 OP_1SUB: 140,
11675 OP_2MUL: 141,
11676 OP_2DIV: 142,
11677 OP_NEGATE: 143,
11678 OP_ABS: 144,
11679 OP_NOT: 145,
11680 OP_0NOTEQUAL: 146,
11681
11682 OP_ADD: 147,
11683 OP_SUB: 148,
11684 OP_MUL: 149,
11685 OP_DIV: 150,
11686 OP_MOD: 151,
11687 OP_LSHIFT: 152,
11688 OP_RSHIFT: 153,
11689
11690 OP_BOOLAND: 154,
11691 OP_BOOLOR: 155,
11692 OP_NUMEQUAL: 156,
11693 OP_NUMEQUALVERIFY: 157,
11694 OP_NUMNOTEQUAL: 158,
11695 OP_LESSTHAN: 159,
11696 OP_GREATERTHAN: 160,
11697 OP_LESSTHANOREQUAL: 161,
11698 OP_GREATERTHANOREQUAL: 162,
11699 OP_MIN: 163,
11700 OP_MAX: 164,
11701
11702 OP_WITHIN: 165,
ebd8d4e8
IC
11703
11704 // crypto
ab78acc6
IC
11705 OP_RIPEMD160: 166,
11706 OP_SHA1: 167,
11707 OP_SHA256: 168,
11708 OP_HASH160: 169,
11709 OP_HASH256: 170,
11710 OP_CODESEPARATOR: 171,
11711 OP_CHECKSIG: 172,
11712 OP_CHECKSIGVERIFY: 173,
11713 OP_CHECKMULTISIG: 174,
11714 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11715
11716 // expansion
ab78acc6
IC
11717 OP_NOP1: 176,
11718 OP_NOP2: 177,
11719 OP_NOP3: 178,
11720 OP_NOP4: 179,
11721 OP_NOP5: 180,
11722 OP_NOP6: 181,
11723 OP_NOP7: 182,
11724 OP_NOP8: 183,
11725 OP_NOP9: 184,
11726 OP_NOP10: 185,
ebd8d4e8
IC
11727
11728 // template matching params
ab78acc6
IC
11729 OP_PUBKEYHASH: 253,
11730 OP_PUBKEY: 254,
11731 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11732}
11733
ab78acc6 11734},{}],68:[function(require,module,exports){
ebd8d4e8 11735(function (Buffer){
ab78acc6
IC
11736var assert = require('assert')
11737var bufferutils = require('./bufferutils')
11738var crypto = require('./crypto')
11739var typeForce = require('typeforce')
11740var opcodes = require('./opcodes')
ebd8d4e8 11741
ab78acc6
IC
11742function Script (buffer, chunks) {
11743 typeForce('Buffer', buffer)
11744 typeForce('Array', chunks)
ebd8d4e8
IC
11745
11746 this.buffer = buffer
11747 this.chunks = chunks
11748}
11749
ab78acc6 11750Script.fromASM = function (asm) {
ebd8d4e8 11751 var strChunks = asm.split(' ')
ab78acc6
IC
11752 var chunks = strChunks.map(function (strChunk) {
11753 // opcode
ebd8d4e8
IC
11754 if (strChunk in opcodes) {
11755 return opcodes[strChunk]
11756
ab78acc6 11757 // data chunk
ebd8d4e8
IC
11758 } else {
11759 return new Buffer(strChunk, 'hex')
11760 }
11761 })
11762
11763 return Script.fromChunks(chunks)
11764}
11765
ab78acc6 11766Script.fromBuffer = function (buffer) {
ebd8d4e8 11767 var chunks = []
ebd8d4e8
IC
11768 var i = 0
11769
11770 while (i < buffer.length) {
11771 var opcode = buffer.readUInt8(i)
11772
ab78acc6 11773 // data chunk
ebd8d4e8
IC
11774 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11775 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11776
11777 // did reading a pushDataInt fail? return non-chunked script
11778 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11779 i += d.size
11780
ab78acc6
IC
11781 // attempt to read too much data?
11782 if (i + d.number > buffer.length) return new Script(buffer, [])
11783
ebd8d4e8
IC
11784 var data = buffer.slice(i, i + d.number)
11785 i += d.number
11786
11787 chunks.push(data)
11788
ab78acc6 11789 // opcode
ebd8d4e8
IC
11790 } else {
11791 chunks.push(opcode)
11792
11793 i += 1
11794 }
11795 }
11796
11797 return new Script(buffer, chunks)
11798}
11799
ab78acc6
IC
11800Script.fromChunks = function (chunks) {
11801 typeForce('Array', chunks)
ebd8d4e8 11802
ab78acc6
IC
11803 var bufferSize = chunks.reduce(function (accum, chunk) {
11804 // data chunk
ebd8d4e8
IC
11805 if (Buffer.isBuffer(chunk)) {
11806 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11807 }
11808
ab78acc6 11809 // opcode
ebd8d4e8
IC
11810 return accum + 1
11811 }, 0.0)
11812
11813 var buffer = new Buffer(bufferSize)
11814 var offset = 0
11815
ab78acc6
IC
11816 chunks.forEach(function (chunk) {
11817 // data chunk
ebd8d4e8
IC
11818 if (Buffer.isBuffer(chunk)) {
11819 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11820
11821 chunk.copy(buffer, offset)
11822 offset += chunk.length
11823
ab78acc6 11824 // opcode
ebd8d4e8
IC
11825 } else {
11826 buffer.writeUInt8(chunk, offset)
11827 offset += 1
11828 }
11829 })
11830
11831 assert.equal(offset, buffer.length, 'Could not decode chunks')
11832 return new Script(buffer, chunks)
11833}
11834
ab78acc6 11835Script.fromHex = function (hex) {
ebd8d4e8
IC
11836 return Script.fromBuffer(new Buffer(hex, 'hex'))
11837}
11838
ebd8d4e8
IC
11839Script.EMPTY = Script.fromChunks([])
11840
ab78acc6 11841Script.prototype.getHash = function () {
ebd8d4e8
IC
11842 return crypto.hash160(this.buffer)
11843}
11844
11845// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11846Script.prototype.without = function (needle) {
11847 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11848 return op !== needle
11849 }))
11850}
11851
ebd8d4e8
IC
11852var reverseOps = []
11853for (var op in opcodes) {
11854 var code = opcodes[op]
11855 reverseOps[code] = op
11856}
11857
ab78acc6
IC
11858Script.prototype.toASM = function () {
11859 return this.chunks.map(function (chunk) {
11860 // data chunk
ebd8d4e8
IC
11861 if (Buffer.isBuffer(chunk)) {
11862 return chunk.toString('hex')
11863
ab78acc6 11864 // opcode
ebd8d4e8
IC
11865 } else {
11866 return reverseOps[chunk]
11867 }
11868 }).join(' ')
11869}
11870
ab78acc6 11871Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11872 return this.buffer
11873}
11874
ab78acc6 11875Script.prototype.toHex = function () {
ebd8d4e8
IC
11876 return this.toBuffer().toString('hex')
11877}
11878
11879module.exports = Script
11880
ab78acc6
IC
11881}).call(this,require("buffer").Buffer)
11882},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11883(function (Buffer){
ab78acc6
IC
11884var assert = require('assert')
11885var ops = require('./opcodes')
11886var typeForce = require('typeforce')
ebd8d4e8 11887
ab78acc6 11888var ecurve = require('ecurve')
ebd8d4e8
IC
11889var curve = ecurve.getCurveByName('secp256k1')
11890
ab78acc6
IC
11891var ECSignature = require('./ecsignature')
11892var Script = require('./script')
ebd8d4e8 11893
ab78acc6 11894function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11895 if (!Buffer.isBuffer(buffer)) return false
11896
11897 try {
ebd8d4e8
IC
11898 ecurve.Point.decodeFrom(curve, buffer)
11899 } catch (e) {
ab78acc6
IC
11900 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11901 throw e
ebd8d4e8
IC
11902
11903 return false
11904 }
11905
11906 return true
11907}
11908
ab78acc6 11909function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11910 if (!Buffer.isBuffer(buffer)) return false
11911
11912 try {
11913 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11914 } catch (e) {
11915 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/))) {
11916 throw e
11917 }
ebd8d4e8
IC
11918
11919 return false
11920 }
11921
11922 return true
11923}
11924
ab78acc6
IC
11925function isPubKeyHashInput (script) {
11926 return script.chunks.length === 2 &&
11927 isCanonicalSignature(script.chunks[0]) &&
11928 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11929}
11930
ab78acc6
IC
11931function isPubKeyHashOutput (script) {
11932 return script.chunks.length === 5 &&
11933 script.chunks[0] === ops.OP_DUP &&
11934 script.chunks[1] === ops.OP_HASH160 &&
11935 Buffer.isBuffer(script.chunks[2]) &&
11936 script.chunks[2].length === 20 &&
11937 script.chunks[3] === ops.OP_EQUALVERIFY &&
11938 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11939}
11940
ab78acc6
IC
11941function isPubKeyInput (script) {
11942 return script.chunks.length === 1 &&
11943 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11944}
11945
ab78acc6
IC
11946function isPubKeyOutput (script) {
11947 return script.chunks.length === 2 &&
11948 isCanonicalPubKey(script.chunks[0]) &&
11949 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11950}
11951
ab78acc6
IC
11952function isScriptHashInput (script, allowIncomplete) {
11953 if (script.chunks.length < 2) return false
ebd8d4e8 11954
ab78acc6 11955 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11956 if (!Buffer.isBuffer(lastChunk)) return false
11957
ab78acc6
IC
11958 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11959 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11960
ab78acc6
IC
11961 // is redeemScript a valid script?
11962 if (redeemScript.chunks.length === 0) return false
11963
11964 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11965}
11966
ab78acc6
IC
11967function isScriptHashOutput (script) {
11968 return script.chunks.length === 3 &&
11969 script.chunks[0] === ops.OP_HASH160 &&
11970 Buffer.isBuffer(script.chunks[1]) &&
11971 script.chunks[1].length === 20 &&
11972 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11973}
11974
ab78acc6
IC
11975// allowIncomplete is to account for combining signatures
11976// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11977function isMultisigInput (script, allowIncomplete) {
11978 if (script.chunks.length < 2) return false
11979 if (script.chunks[0] !== ops.OP_0) return false
11980
11981 if (allowIncomplete) {
11982 return script.chunks.slice(1).every(function (chunk) {
11983 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11984 })
11985 }
11986
11987 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
11988}
11989
ab78acc6
IC
11990function isMultisigOutput (script) {
11991 if (script.chunks.length < 4) return false
11992 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 11993
ab78acc6
IC
11994 var mOp = script.chunks[0]
11995 if (mOp === ops.OP_0) return false
11996 if (mOp < ops.OP_1) return false
11997 if (mOp > ops.OP_16) return false
ebd8d4e8 11998
ab78acc6
IC
11999 var nOp = script.chunks[script.chunks.length - 2]
12000 if (nOp === ops.OP_0) return false
12001 if (nOp < ops.OP_1) return false
12002 if (nOp > ops.OP_16) return false
ebd8d4e8 12003
ab78acc6
IC
12004 var m = mOp - (ops.OP_1 - 1)
12005 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
12006 if (n < m) return false
12007
ab78acc6 12008 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
12009 if (n < pubKeys.length) return false
12010
12011 return pubKeys.every(isCanonicalPubKey)
12012}
12013
ab78acc6
IC
12014function isNullDataOutput (script) {
12015 return script.chunks[0] === ops.OP_RETURN
12016}
12017
12018function classifyOutput (script) {
12019 typeForce('Script', script)
12020
12021 if (isPubKeyHashOutput(script)) {
12022 return 'pubkeyhash'
12023 } else if (isScriptHashOutput(script)) {
12024 return 'scripthash'
12025 } else if (isMultisigOutput(script)) {
12026 return 'multisig'
12027 } else if (isPubKeyOutput(script)) {
12028 return 'pubkey'
12029 } else if (isNullDataOutput(script)) {
12030 return 'nulldata'
12031 }
12032
12033 return 'nonstandard'
12034}
12035
12036function classifyInput (script, allowIncomplete) {
12037 typeForce('Script', script)
12038
12039 if (isPubKeyHashInput(script)) {
12040 return 'pubkeyhash'
12041 } else if (isMultisigInput(script, allowIncomplete)) {
12042 return 'multisig'
12043 } else if (isScriptHashInput(script, allowIncomplete)) {
12044 return 'scripthash'
12045 } else if (isPubKeyInput(script)) {
12046 return 'pubkey'
12047 }
12048
12049 return 'nonstandard'
ebd8d4e8
IC
12050}
12051
12052// Standard Script Templates
12053// {pubKey} OP_CHECKSIG
ab78acc6 12054function pubKeyOutput (pubKey) {
ebd8d4e8
IC
12055 return Script.fromChunks([
12056 pubKey.toBuffer(),
ab78acc6 12057 ops.OP_CHECKSIG
ebd8d4e8
IC
12058 ])
12059}
12060
12061// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
12062function pubKeyHashOutput (hash) {
12063 typeForce('Buffer', hash)
ebd8d4e8
IC
12064
12065 return Script.fromChunks([
ab78acc6
IC
12066 ops.OP_DUP,
12067 ops.OP_HASH160,
ebd8d4e8 12068 hash,
ab78acc6
IC
12069 ops.OP_EQUALVERIFY,
12070 ops.OP_CHECKSIG
ebd8d4e8
IC
12071 ])
12072}
12073
12074// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
12075function scriptHashOutput (hash) {
12076 typeForce('Buffer', hash)
ebd8d4e8
IC
12077
12078 return Script.fromChunks([
ab78acc6 12079 ops.OP_HASH160,
ebd8d4e8 12080 hash,
ab78acc6 12081 ops.OP_EQUAL
ebd8d4e8
IC
12082 ])
12083}
12084
12085// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
12086function multisigOutput (m, pubKeys) {
12087 typeForce(['ECPubKey'], pubKeys)
12088
ebd8d4e8
IC
12089 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
12090
ab78acc6 12091 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
12092 return pubKey.toBuffer()
12093 })
12094 var n = pubKeys.length
12095
12096 return Script.fromChunks([].concat(
ab78acc6 12097 (ops.OP_1 - 1) + m,
ebd8d4e8 12098 pubKeyBuffers,
ab78acc6
IC
12099 (ops.OP_1 - 1) + n,
12100 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
12101 ))
12102}
12103
12104// {signature}
ab78acc6
IC
12105function pubKeyInput (signature) {
12106 typeForce('Buffer', signature)
ebd8d4e8
IC
12107
12108 return Script.fromChunks([signature])
12109}
12110
12111// {signature} {pubKey}
ab78acc6
IC
12112function pubKeyHashInput (signature, pubKey) {
12113 typeForce('Buffer', signature)
ebd8d4e8
IC
12114
12115 return Script.fromChunks([signature, pubKey.toBuffer()])
12116}
12117
12118// <scriptSig> {serialized scriptPubKey script}
ab78acc6 12119function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
12120 return Script.fromChunks([].concat(
12121 scriptSig.chunks,
12122 scriptPubKey.toBuffer()
12123 ))
12124}
12125
12126// OP_0 [signatures ...]
ab78acc6 12127function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 12128 if (scriptPubKey) {
ab78acc6
IC
12129 assert(isMultisigOutput(scriptPubKey))
12130
12131 var mOp = scriptPubKey.chunks[0]
12132 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
12133 var m = mOp - (ops.OP_1 - 1)
12134 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 12135
ab78acc6
IC
12136 assert(signatures.length >= m, 'Not enough signatures provided')
12137 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
12138 }
12139
ab78acc6
IC
12140 return Script.fromChunks([].concat(ops.OP_0, signatures))
12141}
12142
12143function nullDataOutput (data) {
12144 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
12145}
12146
12147module.exports = {
ab78acc6
IC
12148 isCanonicalPubKey: isCanonicalPubKey,
12149 isCanonicalSignature: isCanonicalSignature,
12150 isPubKeyHashInput: isPubKeyHashInput,
12151 isPubKeyHashOutput: isPubKeyHashOutput,
12152 isPubKeyInput: isPubKeyInput,
12153 isPubKeyOutput: isPubKeyOutput,
12154 isScriptHashInput: isScriptHashInput,
12155 isScriptHashOutput: isScriptHashOutput,
12156 isMultisigInput: isMultisigInput,
12157 isMultisigOutput: isMultisigOutput,
12158 isNullDataOutput: isNullDataOutput,
ebd8d4e8 12159 classifyOutput: classifyOutput,
ab78acc6
IC
12160 classifyInput: classifyInput,
12161 pubKeyOutput: pubKeyOutput,
ebd8d4e8 12162 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
12163 scriptHashOutput: scriptHashOutput,
12164 multisigOutput: multisigOutput,
ebd8d4e8 12165 pubKeyInput: pubKeyInput,
ab78acc6 12166 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 12167 scriptHashInput: scriptHashInput,
ab78acc6
IC
12168 multisigInput: multisigInput,
12169 dataOutput: function (data) {
12170 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
12171 return nullDataOutput(data)
12172 },
12173 nullDataOutput: nullDataOutput
ebd8d4e8
IC
12174}
12175
ab78acc6
IC
12176}).call(this,require("buffer").Buffer)
12177},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 12178(function (Buffer){
ab78acc6
IC
12179var assert = require('assert')
12180var bufferutils = require('./bufferutils')
12181var crypto = require('./crypto')
12182var typeForce = require('typeforce')
12183var opcodes = require('./opcodes')
12184var scripts = require('./scripts')
12185
12186var Address = require('./address')
12187var ECSignature = require('./ecsignature')
12188var Script = require('./script')
12189
12190function Transaction () {
12191 this.version = 1
12192 this.locktime = 0
12193 this.ins = []
12194 this.outs = []
12195}
ebd8d4e8
IC
12196
12197Transaction.DEFAULT_SEQUENCE = 0xffffffff
12198Transaction.SIGHASH_ALL = 0x01
12199Transaction.SIGHASH_NONE = 0x02
12200Transaction.SIGHASH_SINGLE = 0x03
12201Transaction.SIGHASH_ANYONECANPAY = 0x80
12202
ab78acc6
IC
12203Transaction.fromBuffer = function (buffer, __disableAssert) {
12204 var offset = 0
12205 function readSlice (n) {
12206 offset += n
12207 return buffer.slice(offset - n, offset)
12208 }
12209
12210 function readUInt32 () {
12211 var i = buffer.readUInt32LE(offset)
12212 offset += 4
12213 return i
12214 }
12215
12216 function readUInt64 () {
12217 var i = bufferutils.readUInt64LE(buffer, offset)
12218 offset += 8
12219 return i
12220 }
12221
12222 function readVarInt () {
12223 var vi = bufferutils.readVarInt(buffer, offset)
12224 offset += vi.size
12225 return vi.number
12226 }
12227
12228 function readScript () {
12229 return Script.fromBuffer(readSlice(readVarInt()))
12230 }
12231
12232 function readGenerationScript () {
12233 return new Script(readSlice(readVarInt()), [])
12234 }
12235
12236 var tx = new Transaction()
12237 tx.version = readUInt32()
12238
12239 var vinLen = readVarInt()
12240 for (var i = 0; i < vinLen; ++i) {
12241 var hash = readSlice(32)
12242
12243 if (Transaction.isCoinbaseHash(hash)) {
12244 tx.ins.push({
12245 hash: hash,
12246 index: readUInt32(),
12247 script: readGenerationScript(),
12248 sequence: readUInt32()
12249 })
12250 } else {
12251 tx.ins.push({
12252 hash: hash,
12253 index: readUInt32(),
12254 script: readScript(),
12255 sequence: readUInt32()
12256 })
12257 }
12258 }
12259
12260 var voutLen = readVarInt()
12261 for (i = 0; i < voutLen; ++i) {
12262 tx.outs.push({
12263 value: readUInt64(),
12264 script: readScript()
12265 })
12266 }
12267
12268 tx.locktime = readUInt32()
12269
12270 if (!__disableAssert) {
12271 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12272 }
12273
12274 return tx
12275}
12276
12277Transaction.fromHex = function (hex) {
12278 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12279}
12280
12281Transaction.isCoinbaseHash = function (buffer) {
12282 return Array.prototype.every.call(buffer, function (x) {
12283 return x === 0
12284 })
ebd8d4e8
IC
12285}
12286
12287/**
ab78acc6 12288 * Create a new txIn.
ebd8d4e8
IC
12289 *
12290 * Can be called with any of:
12291 *
12292 * - A transaction and an index
12293 * - A transaction hash and an index
12294 *
12295 * Note that this method does not sign the created input.
12296 */
ab78acc6
IC
12297Transaction.prototype.addInput = function (hash, index, sequence, script) {
12298 if (sequence === undefined || sequence === null) {
12299 sequence = Transaction.DEFAULT_SEQUENCE
12300 }
ebd8d4e8 12301
ab78acc6 12302 script = script || Script.EMPTY
ebd8d4e8 12303
ab78acc6 12304 if (typeof hash === 'string') {
ebd8d4e8 12305 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12306 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12307 } else if (hash instanceof Transaction) {
12308 hash = hash.getHash()
ebd8d4e8
IC
12309 }
12310
ab78acc6
IC
12311 typeForce('Buffer', hash)
12312 typeForce('Number', index)
12313 typeForce('Number', sequence)
12314 typeForce('Script', script)
12315
ebd8d4e8 12316 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12317
ab78acc6 12318 // Add the input and return the input's index
ebd8d4e8
IC
12319 return (this.ins.push({
12320 hash: hash,
12321 index: index,
ab78acc6 12322 script: script,
ebd8d4e8
IC
12323 sequence: sequence
12324 }) - 1)
12325}
12326
12327/**
ab78acc6 12328 * Create a new txOut.
ebd8d4e8
IC
12329 *
12330 * Can be called with:
12331 *
12332 * - A base58 address string and a value
12333 * - An Address object and a value
12334 * - A scriptPubKey Script and a value
12335 */
ab78acc6 12336Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12337 // Attempt to get a valid address if it's a base58 address string
12338 if (typeof scriptPubKey === 'string') {
12339 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12340 }
12341
12342 // Attempt to get a valid script if it's an Address object
12343 if (scriptPubKey instanceof Address) {
ab78acc6 12344 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12345 }
12346
ab78acc6
IC
12347 typeForce('Script', scriptPubKey)
12348 typeForce('Number', value)
12349
12350 // Add the output and return the output's index
ebd8d4e8
IC
12351 return (this.outs.push({
12352 script: scriptPubKey,
ab78acc6 12353 value: value
ebd8d4e8
IC
12354 }) - 1)
12355}
12356
ab78acc6
IC
12357Transaction.prototype.clone = function () {
12358 var newTx = new Transaction()
12359 newTx.version = this.version
12360 newTx.locktime = this.locktime
12361
12362 newTx.ins = this.ins.map(function (txIn) {
12363 return {
12364 hash: txIn.hash,
12365 index: txIn.index,
12366 script: txIn.script,
12367 sequence: txIn.sequence
12368 }
12369 })
12370
12371 newTx.outs = this.outs.map(function (txOut) {
12372 return {
12373 script: txOut.script,
12374 value: txOut.value
12375 }
12376 })
12377
12378 return newTx
12379}
12380
12381/**
12382 * Hash transaction for signing a specific input.
12383 *
12384 * Bitcoin uses a different hash for each signed transaction input. This
12385 * method copies the transaction, makes the necessary changes based on the
12386 * hashType, serializes and finally hashes the result. This hash can then be
12387 * used to sign the transaction input in question.
12388 */
12389Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12390 // FIXME: remove in 2.x.y
12391 if (arguments[0] instanceof Script) {
12392 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12393
12394 // swap the arguments (must be stored in tmp, arguments is special)
12395 var tmp = arguments[0]
12396 inIndex = arguments[1]
12397 prevOutScript = tmp
12398 }
12399
12400 typeForce('Number', inIndex)
12401 typeForce('Script', prevOutScript)
12402 typeForce('Number', hashType)
12403
12404 assert(inIndex >= 0, 'Invalid vin index')
12405 assert(inIndex < this.ins.length, 'Invalid vin index')
12406
12407 var txTmp = this.clone()
12408 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12409
12410 // Blank out other inputs' signatures
12411 txTmp.ins.forEach(function (txIn) {
12412 txIn.script = Script.EMPTY
12413 })
12414 txTmp.ins[inIndex].script = hashScript
12415
12416 var hashTypeModifier = hashType & 0x1f
12417
12418 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12419 assert(false, 'SIGHASH_NONE not yet supported')
12420 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12421 assert(false, 'SIGHASH_SINGLE not yet supported')
12422 }
12423
12424 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12425 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12426 }
12427
12428 var hashTypeBuffer = new Buffer(4)
12429 hashTypeBuffer.writeInt32LE(hashType, 0)
12430
12431 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12432 return crypto.hash256(buffer)
12433}
12434
12435Transaction.prototype.getHash = function () {
12436 return crypto.hash256(this.toBuffer())
12437}
12438
12439Transaction.prototype.getId = function () {
12440 // TxHash is little-endian, we need big-endian
12441 return bufferutils.reverse(this.getHash()).toString('hex')
12442}
12443
ebd8d4e8 12444Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12445 function scriptSize (script) {
12446 var length = script.buffer.length
ebd8d4e8 12447
ab78acc6
IC
12448 return bufferutils.varIntSize(length) + length
12449 }
ebd8d4e8
IC
12450
12451 var buffer = new Buffer(
12452 8 +
12453 bufferutils.varIntSize(this.ins.length) +
12454 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12455 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12456 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12457 )
12458
12459 var offset = 0
ab78acc6 12460 function writeSlice (slice) {
ebd8d4e8
IC
12461 slice.copy(buffer, offset)
12462 offset += slice.length
12463 }
ab78acc6
IC
12464
12465 function writeUInt32 (i) {
ebd8d4e8
IC
12466 buffer.writeUInt32LE(i, offset)
12467 offset += 4
12468 }
ab78acc6
IC
12469
12470 function writeUInt64 (i) {
ebd8d4e8
IC
12471 bufferutils.writeUInt64LE(buffer, i, offset)
12472 offset += 8
12473 }
ab78acc6
IC
12474
12475 function writeVarInt (i) {
ebd8d4e8
IC
12476 var n = bufferutils.writeVarInt(buffer, i, offset)
12477 offset += n
12478 }
12479
12480 writeUInt32(this.version)
12481 writeVarInt(this.ins.length)
12482
ab78acc6
IC
12483 this.ins.forEach(function (txIn) {
12484 writeSlice(txIn.hash)
12485 writeUInt32(txIn.index)
12486 writeVarInt(txIn.script.buffer.length)
12487 writeSlice(txIn.script.buffer)
12488 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12489 })
12490
12491 writeVarInt(this.outs.length)
ab78acc6
IC
12492 this.outs.forEach(function (txOut) {
12493 writeUInt64(txOut.value)
12494 writeVarInt(txOut.script.buffer.length)
12495 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12496 })
12497
12498 writeUInt32(this.locktime)
12499
12500 return buffer
12501}
12502
ab78acc6 12503Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12504 return this.toBuffer().toString('hex')
12505}
12506
ab78acc6
IC
12507Transaction.prototype.setInputScript = function (index, script) {
12508 typeForce('Number', index)
12509 typeForce('Script', script)
12510
12511 this.ins[index].script = script
12512}
12513
12514// FIXME: remove in 2.x.y
12515Transaction.prototype.sign = function (index, privKey, hashType) {
12516 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12517
12518 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12519 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12520
12521 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12522 this.setInputScript(index, scriptSig)
12523}
12524
12525// FIXME: remove in 2.x.y
12526Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12527 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12528
12529 hashType = hashType || Transaction.SIGHASH_ALL
12530
12531 var hash = this.hashForSignature(index, prevOutScript, hashType)
12532 var signature = privKey.sign(hash)
12533
12534 return signature.toScriptSignature(hashType)
12535}
12536
12537// FIXME: remove in 2.x.y
12538Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12539 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12540
12541 var parsed = ECSignature.parseScriptSignature(buffer)
12542 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12543
12544 return pubKey.verify(hash, parsed.signature)
12545}
12546
12547module.exports = Transaction
12548
12549}).call(this,require("buffer").Buffer)
12550},{"./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){
12551(function (Buffer){
12552var assert = require('assert')
12553var ops = require('./opcodes')
12554var scripts = require('./scripts')
12555
12556var ECPubKey = require('./ecpubkey')
12557var ECSignature = require('./ecsignature')
12558var Script = require('./script')
12559var Transaction = require('./transaction')
12560
12561function extractInput (txIn) {
12562 var redeemScript
12563 var scriptSig = txIn.script
12564 var prevOutScript
12565 var prevOutType = scripts.classifyInput(scriptSig, true)
12566 var scriptType
12567
12568 // Re-classify if scriptHash
12569 if (prevOutType === 'scripthash') {
12570 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12571 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12572
12573 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12574 scriptType = scripts.classifyInput(scriptSig, true)
12575 } else {
12576 scriptType = prevOutType
12577 }
12578
12579 // Extract hashType, pubKeys and signatures
12580 var hashType, parsed, pubKeys, signatures
12581
12582 switch (scriptType) {
12583 case 'pubkeyhash': {
12584 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12585 hashType = parsed.hashType
12586 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12587 signatures = [parsed.signature]
12588 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12589
12590 break
12591 }
12592
12593 case 'pubkey': {
12594 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12595 hashType = parsed.hashType
12596 signatures = [parsed.signature]
12597
12598 if (redeemScript) {
12599 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12600 }
12601
12602 break
12603 }
12604
12605 case 'multisig': {
12606 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12607 if (chunk === ops.OP_0) return chunk
12608
12609 var parsed = ECSignature.parseScriptSignature(chunk)
12610 hashType = parsed.hashType
12611
12612 return parsed.signature
12613 })
12614
12615 if (redeemScript) {
12616 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12617 }
12618
12619 break
12620 }
12621 }
12622
12623 return {
12624 hashType: hashType,
12625 prevOutScript: prevOutScript,
12626 prevOutType: prevOutType,
12627 pubKeys: pubKeys,
12628 redeemScript: redeemScript,
12629 scriptType: scriptType,
12630 signatures: signatures
12631 }
12632}
12633
12634function TransactionBuilder () {
12635 this.prevTxMap = {}
12636 this.prevOutScripts = {}
12637 this.prevOutTypes = {}
12638
12639 this.inputs = []
12640 this.tx = new Transaction()
12641}
12642
12643TransactionBuilder.fromTransaction = function (transaction) {
12644 var txb = new TransactionBuilder()
12645
12646 // Copy other transaction fields
12647 txb.tx.version = transaction.version
12648 txb.tx.locktime = transaction.locktime
12649
12650 // Extract/add inputs
12651 transaction.ins.forEach(function (txIn) {
12652 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12653 })
12654
12655 // Extract/add outputs
12656 transaction.outs.forEach(function (txOut) {
12657 txb.addOutput(txOut.script, txOut.value)
12658 })
12659
12660 // Extract/add signatures
12661 txb.inputs = transaction.ins.map(function (txIn) {
12662 // TODO: remove me after testcase added
12663 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12664
12665 // Ignore empty scripts
12666 if (txIn.script.buffer.length === 0) return {}
12667
12668 return extractInput(txIn)
12669 })
12670
12671 return txb
12672}
12673
12674TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12675 var prevOutHash
12676
12677 // txId
12678 if (typeof prevTx === 'string') {
12679 prevOutHash = new Buffer(prevTx, 'hex')
12680
12681 // TxId hex is big-endian, we want little-endian hash
12682 Array.prototype.reverse.call(prevOutHash)
12683
12684 // Transaction
12685 } else if (prevTx instanceof Transaction) {
12686 prevOutHash = prevTx.getHash()
12687 prevOutScript = prevTx.outs[index].script
12688
12689 // txHash
12690 } else {
12691 prevOutHash = prevTx
12692 }
12693
12694 var input = {}
12695 if (prevOutScript) {
12696 var prevOutType = scripts.classifyOutput(prevOutScript)
12697
12698 // if we can, extract pubKey information
12699 switch (prevOutType) {
12700 case 'multisig': {
12701 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12702 break
12703 }
12704
12705 case 'pubkey': {
12706 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12707 break
12708 }
12709 }
12710
12711 if (prevOutType !== 'scripthash') {
12712 input.scriptType = prevOutType
12713 }
12714
12715 input.prevOutScript = prevOutScript
12716 input.prevOutType = prevOutType
12717 }
12718
12719 assert(this.inputs.every(function (input2) {
12720 if (input2.hashType === undefined) return true
12721
12722 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12723 }), 'No, this would invalidate signatures')
12724
12725 var prevOut = prevOutHash.toString('hex') + ':' + index
12726 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12727
12728 var vin = this.tx.addInput(prevOutHash, index, sequence)
12729 this.inputs[vin] = input
12730 this.prevTxMap[prevOut] = vin
12731
12732 return vin
12733}
12734
12735TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12736 assert(this.inputs.every(function (input) {
12737 if (input.hashType === undefined) return true
ebd8d4e8 12738
ab78acc6
IC
12739 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12740 }), 'No, this would invalidate signatures')
ebd8d4e8 12741
ab78acc6
IC
12742 return this.tx.addOutput(scriptPubKey, value)
12743}
ebd8d4e8 12744
ab78acc6
IC
12745TransactionBuilder.prototype.build = function () {
12746 return this.__build(false)
12747}
12748TransactionBuilder.prototype.buildIncomplete = function () {
12749 return this.__build(true)
12750}
ebd8d4e8 12751
ab78acc6
IC
12752var canSignTypes = {
12753 'pubkeyhash': true,
12754 'multisig': true,
12755 'pubkey': true
12756}
ebd8d4e8 12757
ab78acc6
IC
12758TransactionBuilder.prototype.__build = function (allowIncomplete) {
12759 if (!allowIncomplete) {
12760 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12761 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12762 }
12763
ab78acc6 12764 var tx = this.tx.clone()
ebd8d4e8 12765
ab78acc6
IC
12766 // Create script signatures from signature meta-data
12767 this.inputs.forEach(function (input, index) {
12768 var scriptType = input.scriptType
12769 var scriptSig
ebd8d4e8 12770
ab78acc6
IC
12771 if (!allowIncomplete) {
12772 assert(!!scriptType, 'Transaction is not complete')
12773 assert(scriptType in canSignTypes, scriptType + ' not supported')
12774 assert(input.signatures, 'Transaction is missing signatures')
12775 }
ebd8d4e8 12776
ab78acc6
IC
12777 if (input.signatures) {
12778 switch (scriptType) {
12779 case 'pubkeyhash': {
12780 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12781 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12782 break
12783 }
ebd8d4e8 12784
ab78acc6
IC
12785 case 'multisig': {
12786 // Array.prototype.map is sparse-compatible
12787 var msSignatures = input.signatures.map(function (signature) {
12788 return signature && signature.toScriptSignature(input.hashType)
12789 })
ebd8d4e8 12790
ab78acc6
IC
12791 // fill in blanks with OP_0
12792 if (allowIncomplete) {
12793 for (var i = 0; i < msSignatures.length; ++i) {
12794 if (msSignatures[i]) continue
ebd8d4e8 12795
ab78acc6
IC
12796 msSignatures[i] = ops.OP_0
12797 }
12798 } else {
12799 // Array.prototype.filter returns non-sparse array
12800 msSignatures = msSignatures.filter(function (x) { return x })
12801 }
ebd8d4e8 12802
ab78acc6
IC
12803 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12804 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12805 break
12806 }
ebd8d4e8 12807
ab78acc6
IC
12808 case 'pubkey': {
12809 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12810 scriptSig = scripts.pubKeyInput(pkSignature)
12811 break
12812 }
12813 }
ebd8d4e8 12814 }
ebd8d4e8 12815
ab78acc6
IC
12816 // did we build a scriptSig?
12817 if (scriptSig) {
12818 // wrap as scriptHash if necessary
12819 if (input.prevOutType === 'scripthash') {
12820 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12821 }
12822
12823 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12824 }
12825 })
12826
ab78acc6 12827 return tx
ebd8d4e8
IC
12828}
12829
ab78acc6
IC
12830TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12831 assert(index in this.inputs, 'No input at index: ' + index)
12832 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12833
ab78acc6
IC
12834 var input = this.inputs[index]
12835 var canSign = input.hashType &&
12836 input.prevOutScript &&
12837 input.prevOutType &&
12838 input.pubKeys &&
12839 input.scriptType &&
12840 input.signatures
ebd8d4e8 12841
ab78acc6
IC
12842 // are we almost ready to sign?
12843 if (canSign) {
12844 // if redeemScript was provided, enforce consistency
12845 if (redeemScript) {
12846 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12847 }
ebd8d4e8 12848
ab78acc6 12849 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12850
ab78acc6
IC
12851 // no? prepare
12852 } else {
12853 // must be pay-to-scriptHash?
12854 if (redeemScript) {
12855 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12856 if (input.prevOutScript) {
12857 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12858
12859 var scriptHash = input.prevOutScript.chunks[1]
12860 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12861 }
ebd8d4e8 12862
ab78acc6
IC
12863 var scriptType = scripts.classifyOutput(redeemScript)
12864 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12865
ab78acc6
IC
12866 var pubKeys = []
12867 switch (scriptType) {
12868 case 'multisig': {
12869 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12870 break
12871 }
ebd8d4e8 12872
ab78acc6
IC
12873 case 'pubkeyhash': {
12874 var pkh1 = redeemScript.chunks[2]
12875 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12876
ab78acc6
IC
12877 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12878 pubKeys = [privKey.pub]
12879 break
12880 }
ebd8d4e8 12881
ab78acc6
IC
12882 case 'pubkey': {
12883 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12884 break
12885 }
12886 }
ebd8d4e8 12887
ab78acc6
IC
12888 if (!input.prevOutScript) {
12889 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12890 input.prevOutType = 'scripthash'
12891 }
ebd8d4e8 12892
ab78acc6
IC
12893 input.pubKeys = pubKeys
12894 input.redeemScript = redeemScript
12895 input.scriptType = scriptType
ebd8d4e8 12896
ab78acc6
IC
12897 // cannot be pay-to-scriptHash
12898 } else {
12899 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12900
ab78acc6
IC
12901 // can we otherwise sign this?
12902 if (input.scriptType) {
12903 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12904
ab78acc6
IC
12905 // we know nothin' Jon Snow, assume pubKeyHash
12906 } else {
12907 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12908 input.prevOutType = 'pubkeyhash'
12909 input.pubKeys = [privKey.pub]
12910 input.scriptType = input.prevOutType
12911 }
12912 }
ebd8d4e8 12913
ab78acc6
IC
12914 input.hashType = hashType
12915 input.signatures = input.signatures || []
12916 }
12917
12918 var signatureScript = input.redeemScript || input.prevOutScript
12919 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12920
12921 // enforce signature order matches public keys
12922 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12923 // maintain a local copy of unmatched signatures
12924 var unmatched = input.signatures.slice()
12925
12926 input.signatures = input.pubKeys.map(function (pubKey) {
12927 var match
12928
12929 // check for any matching signatures
12930 unmatched.some(function (signature, i) {
12931 if (!pubKey.verify(signatureHash, signature)) return false
12932 match = signature
12933
12934 // remove matched signature from unmatched
12935 unmatched.splice(i, 1)
12936
12937 return true
12938 })
12939
12940 return match || undefined
12941 })
12942 }
12943
12944 // enforce in order signing of public keys
12945 assert(input.pubKeys.some(function (pubKey, i) {
12946 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12947
12948 assert(!input.signatures[i], 'Signature already exists')
12949 var signature = privKey.sign(signatureHash)
12950 input.signatures[i] = signature
12951
12952 return true
12953 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12954}
12955
ab78acc6 12956module.exports = TransactionBuilder
ebd8d4e8 12957
ab78acc6
IC
12958}).call(this,require("buffer").Buffer)
12959},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12960(function (Buffer){
ab78acc6
IC
12961var assert = require('assert')
12962var bufferutils = require('./bufferutils')
12963var typeForce = require('typeforce')
12964var networks = require('./networks')
12965var randomBytes = require('randombytes')
ebd8d4e8 12966
ab78acc6
IC
12967var Address = require('./address')
12968var HDNode = require('./hdnode')
12969var TransactionBuilder = require('./transaction_builder')
12970var Script = require('./script')
ebd8d4e8 12971
ab78acc6
IC
12972function Wallet (seed, network) {
12973 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12974
12975 seed = seed || randomBytes(32)
ebd8d4e8
IC
12976 network = network || networks.bitcoin
12977
12978 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12979 var masterKey = HDNode.fromSeedBuffer(seed, network)
12980
12981 // HD first-level child derivation method should be hardened
12982 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12983 var accountZero = masterKey.deriveHardened(0)
12984 var externalAccount = accountZero.derive(0)
12985 var internalAccount = accountZero.derive(1)
ebd8d4e8 12986
ebd8d4e8
IC
12987 this.addresses = []
12988 this.changeAddresses = []
ab78acc6
IC
12989 this.network = network
12990 this.unspents = []
ebd8d4e8 12991
ab78acc6
IC
12992 // FIXME: remove in 2.0.0
12993 this.unspentMap = {}
ebd8d4e8 12994
ab78acc6
IC
12995 // FIXME: remove in 2.0.0
12996 var me = this
12997 this.newMasterKey = function (seed) {
12998 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12999
13000 seed = seed || randomBytes(32)
13001 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 13002
ab78acc6 13003 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
13004 externalAccount = accountZero.derive(0)
13005 internalAccount = accountZero.derive(1)
13006
13007 me.addresses = []
13008 me.changeAddresses = []
13009
ab78acc6
IC
13010 me.unspents = []
13011 me.unspentMap = {}
ebd8d4e8
IC
13012 }
13013
ab78acc6
IC
13014 this.getMasterKey = function () {
13015 return masterKey
ebd8d4e8 13016 }
ab78acc6
IC
13017 this.getAccountZero = function () {
13018 return accountZero
ebd8d4e8 13019 }
ab78acc6
IC
13020 this.getExternalAccount = function () {
13021 return externalAccount
13022 }
13023 this.getInternalAccount = function () {
13024 return internalAccount
ebd8d4e8 13025 }
ab78acc6 13026}
ebd8d4e8 13027
ab78acc6
IC
13028Wallet.prototype.createTransaction = function (to, value, options) {
13029 // FIXME: remove in 2.0.0
13030 if (typeof options !== 'object') {
13031 if (options !== undefined) {
13032 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 13033
ab78acc6
IC
13034 options = {
13035 fixedFee: arguments[2],
13036 changeAddress: arguments[3]
13037 }
ebd8d4e8 13038 }
ebd8d4e8
IC
13039 }
13040
ab78acc6 13041 options = options || {}
ebd8d4e8 13042
ab78acc6 13043 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 13044
ab78acc6
IC
13045 var changeAddress = options.changeAddress
13046 var fixedFee = options.fixedFee
13047 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 13048
ab78acc6
IC
13049 // filter by minConf, then pending and sort by descending value
13050 var unspents = this.unspents.filter(function (unspent) {
13051 return unspent.confirmations >= minConf
13052 }).filter(function (unspent) {
13053 return !unspent.pending
13054 }).sort(function (o1, o2) {
13055 return o2.value - o1.value
13056 })
ebd8d4e8 13057
ab78acc6
IC
13058 var accum = 0
13059 var addresses = []
13060 var subTotal = value
ebd8d4e8 13061
ab78acc6
IC
13062 var txb = new TransactionBuilder()
13063 txb.addOutput(to, value)
ebd8d4e8 13064
ab78acc6
IC
13065 for (var i = 0; i < unspents.length; ++i) {
13066 var unspent = unspents[i]
13067 addresses.push(unspent.address)
ebd8d4e8 13068
ab78acc6
IC
13069 txb.addInput(unspent.txHash, unspent.index)
13070
13071 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 13072
ab78acc6
IC
13073 accum += unspent.value
13074 subTotal = value + fee
13075
13076 if (accum >= subTotal) {
13077 var change = accum - subTotal
13078
13079 if (change > this.network.dustThreshold) {
13080 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 13081 }
ebd8d4e8 13082
ab78acc6 13083 break
ebd8d4e8
IC
13084 }
13085 }
13086
ab78acc6 13087 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 13088
ab78acc6
IC
13089 return this.signWith(txb, addresses).build()
13090}
ebd8d4e8 13091
ab78acc6
IC
13092// FIXME: remove in 2.0.0
13093Wallet.prototype.processPendingTx = function (tx) {
13094 this.__processTx(tx, true)
13095}
ebd8d4e8 13096
ab78acc6
IC
13097// FIXME: remove in 2.0.0
13098Wallet.prototype.processConfirmedTx = function (tx) {
13099 this.__processTx(tx, false)
13100}
ebd8d4e8 13101
ab78acc6
IC
13102// FIXME: remove in 2.0.0
13103Wallet.prototype.__processTx = function (tx, isPending) {
13104 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 13105
ab78acc6
IC
13106 var txId = tx.getId()
13107 var txHash = tx.getHash()
ebd8d4e8 13108
ab78acc6
IC
13109 tx.outs.forEach(function (txOut, i) {
13110 var address
ebd8d4e8 13111
ab78acc6
IC
13112 try {
13113 address = Address.fromOutputScript(txOut.script, this.network).toString()
13114 } catch (e) {
13115 if (!(e.message.match(/has no matching Address/)))
13116 throw e
13117 }
13118
13119 var myAddresses = this.addresses.concat(this.changeAddresses)
13120 if (myAddresses.indexOf(address) > -1) {
13121 var lookup = txId + ':' + i
13122 if (lookup in this.unspentMap) return
13123
13124 // its unique, add it
13125 var unspent = {
13126 address: address,
13127 confirmations: 0, // no way to determine this without more information
13128 index: i,
13129 txHash: txHash,
13130 txId: txId,
13131 value: txOut.value,
13132 pending: isPending
ebd8d4e8 13133 }
ebd8d4e8 13134
ab78acc6
IC
13135 this.unspentMap[lookup] = unspent
13136 this.unspents.push(unspent)
13137 }
13138 }, this)
ebd8d4e8 13139
ab78acc6
IC
13140 tx.ins.forEach(function (txIn) {
13141 // copy and convert to big-endian hex
13142 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 13143
ab78acc6
IC
13144 var lookup = txInId + ':' + txIn.index
13145 if (!(lookup in this.unspentMap)) return
ebd8d4e8 13146
ab78acc6 13147 var unspent = this.unspentMap[lookup]
ebd8d4e8 13148
ab78acc6
IC
13149 if (isPending) {
13150 unspent.pending = true
13151 unspent.spent = true
13152 } else {
13153 delete this.unspentMap[lookup]
ebd8d4e8 13154
ab78acc6
IC
13155 this.unspents = this.unspents.filter(function (unspent2) {
13156 return unspent !== unspent2
13157 })
13158 }
13159 }, this)
13160}
ebd8d4e8 13161
ab78acc6
IC
13162Wallet.prototype.generateAddress = function () {
13163 var k = this.addresses.length
13164 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 13165
ab78acc6 13166 this.addresses.push(address.toString())
ebd8d4e8 13167
ab78acc6
IC
13168 return this.getReceiveAddress()
13169}
ebd8d4e8 13170
ab78acc6
IC
13171Wallet.prototype.generateChangeAddress = function () {
13172 var k = this.changeAddresses.length
13173 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 13174
ab78acc6 13175 this.changeAddresses.push(address.toString())
ebd8d4e8 13176
ab78acc6
IC
13177 return this.getChangeAddress()
13178}
ebd8d4e8 13179
ab78acc6
IC
13180Wallet.prototype.getAddress = function () {
13181 if (this.addresses.length === 0) {
13182 this.generateAddress()
ebd8d4e8
IC
13183 }
13184
ab78acc6
IC
13185 return this.addresses[this.addresses.length - 1]
13186}
ebd8d4e8 13187
ab78acc6
IC
13188Wallet.prototype.getBalance = function (minConf) {
13189 minConf = minConf || 0
ebd8d4e8 13190
ab78acc6
IC
13191 return this.unspents.filter(function (unspent) {
13192 return unspent.confirmations >= minConf
13193
13194 // FIXME: remove spent filter in 2.0.0
13195 }).filter(function (unspent) {
13196 return !unspent.spent
13197 }).reduce(function (accum, unspent) {
13198 return accum + unspent.value
13199 }, 0)
13200}
ebd8d4e8 13201
ab78acc6
IC
13202Wallet.prototype.getChangeAddress = function () {
13203 if (this.changeAddresses.length === 0) {
13204 this.generateChangeAddress()
ebd8d4e8
IC
13205 }
13206
ab78acc6
IC
13207 return this.changeAddresses[this.changeAddresses.length - 1]
13208}
13209
13210Wallet.prototype.getInternalPrivateKey = function (index) {
13211 return this.getInternalAccount().derive(index).privKey
13212}
13213
13214Wallet.prototype.getPrivateKey = function (index) {
13215 return this.getExternalAccount().derive(index).privKey
13216}
13217
13218Wallet.prototype.getPrivateKeyForAddress = function (address) {
13219 var index
ebd8d4e8 13220
ab78acc6
IC
13221 if ((index = this.addresses.indexOf(address)) > -1) {
13222 return this.getPrivateKey(index)
ebd8d4e8
IC
13223 }
13224
ab78acc6
IC
13225 if ((index = this.changeAddresses.indexOf(address)) > -1) {
13226 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
13227 }
13228
ab78acc6
IC
13229 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
13230}
ebd8d4e8 13231
ab78acc6
IC
13232Wallet.prototype.getUnspentOutputs = function (minConf) {
13233 minConf = minConf || 0
ebd8d4e8 13234
ab78acc6
IC
13235 return this.unspents.filter(function (unspent) {
13236 return unspent.confirmations >= minConf
ebd8d4e8 13237
ab78acc6
IC
13238 // FIXME: remove spent filter in 2.0.0
13239 }).filter(function (unspent) {
13240 return !unspent.spent
13241 }).map(function (unspent) {
13242 return {
13243 address: unspent.address,
13244 confirmations: unspent.confirmations,
13245 index: unspent.index,
13246 txId: unspent.txId,
13247 value: unspent.value,
13248
13249 // FIXME: remove in 2.0.0
13250 hash: unspent.txId,
13251 pending: unspent.pending
13252 }
13253 })
13254}
ebd8d4e8 13255
ab78acc6
IC
13256Wallet.prototype.setUnspentOutputs = function (unspents) {
13257 this.unspentMap = {}
13258 this.unspents = unspents.map(function (unspent) {
13259 // FIXME: remove unspent.hash in 2.0.0
13260 var txId = unspent.txId || unspent.hash
13261 var index = unspent.index
ebd8d4e8 13262
ab78acc6
IC
13263 // FIXME: remove in 2.0.0
13264 if (unspent.hash !== undefined) {
13265 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13266 }
ebd8d4e8 13267
ab78acc6
IC
13268 // FIXME: remove in 2.0.0
13269 if (index === undefined) {
13270 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13271 index = unspent.outputIndex
13272 }
ebd8d4e8 13273
ab78acc6
IC
13274 typeForce('String', txId)
13275 typeForce('Number', index)
13276 typeForce('Number', unspent.value)
13277
13278 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13279 assert.doesNotThrow(function () {
13280 Address.fromBase58Check(unspent.address)
13281 }, 'Expected Base58 Address, got ' + unspent.address)
13282 assert(isFinite(index), 'Expected finite index, got ' + index)
13283
13284 // FIXME: remove branch in 2.0.0
13285 if (unspent.confirmations !== undefined) {
13286 typeForce('Number', unspent.confirmations)
ebd8d4e8 13287 }
ebd8d4e8 13288
ab78acc6 13289 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13290
ab78acc6
IC
13291 unspent = {
13292 address: unspent.address,
13293 confirmations: unspent.confirmations || 0,
13294 index: index,
13295 txHash: txHash,
13296 txId: txId,
13297 value: unspent.value,
ebd8d4e8 13298
ab78acc6
IC
13299 // FIXME: remove in 2.0.0
13300 pending: unspent.pending || false
13301 }
13302
13303 // FIXME: remove in 2.0.0
13304 this.unspentMap[txId + ':' + index] = unspent
13305
13306 return unspent
13307 }, this)
13308}
13309
13310Wallet.prototype.signWith = function (tx, addresses) {
13311 addresses.forEach(function (address, i) {
13312 var privKey = this.getPrivateKeyForAddress(address)
13313
13314 tx.sign(i, privKey)
13315 }, this)
13316
13317 return tx
13318}
13319
13320function estimatePaddedFee (tx, network) {
13321 var tmpTx = tx.clone()
13322 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13323
13324 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13325}
13326
ab78acc6
IC
13327// FIXME: 1.0.0 shims, remove in 2.0.0
13328Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13329Wallet.prototype.createTx = Wallet.prototype.createTransaction
13330
ebd8d4e8
IC
13331module.exports = Wallet
13332
ab78acc6
IC
13333}).call(this,require("buffer").Buffer)
13334},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13335});</script>
d5dc92fd
IC
13336 <script>bitcoin.networks.shadow = {
13337 magicPrefix: '\x19ShadowCash Signed Message:\n',
13338 bip32: {
13339 public: 0xEE80286A,
13340 private: 0xEE8031E8
13341 },
13342 pubKeyHash: 0x3f,
13343 scriptHash: 0x7d,
13344 wif: 0xbf,
13345 dustThreshold: 0,
13346 feePerKb: 1000,
13347 estimateFee: function() { return "unused in this app" },
13348};
13349
13350bitcoin.networks.shadowtn = {
13351 magicPrefix: '\x19ShadowCash Signed Message:\n',
13352 bip32: {
13353 public: 0x76C0FDFB,
13354 private: 0x76C1077A
13355 },
13356 pubKeyHash: 0x7f,
13357 scriptHash: 0xc4,
13358 wif: 0xff,
13359 dustThreshold: 0,
13360 feePerKb: 1000,
13361 estimateFee: function() { return "unused in this app" },
13362};
5c434a8a
CM
13363
13364bitcoin.networks.clam = {
13365 bip32: {
13366 public: 0xa8c26d64,
13367 private: 0xa8c17826
13368 },
13369 pubKeyHash: 0x89,
13370 wif: 0x85,
13371};
5493efc3 13372
13373bitcoin.networks.dash = {
13374 bip32: {
13375 public: 0x0488b21e,
13376 private: 0x0488ade4
13377 },
68151a47 13378 pubKeyHash: 0x4c,
5493efc3 13379 scriptHash: 0x10,
13380 wif: 0xcc,
13381};
13382
07ac4350 13383bitcoin.networks.namecoin = {
13384 bip32: {
13385 public: 0x0488b21e,
13386 private: 0x0488ade4
13387 },
13388 pubKeyHash: 0x34,
13389 //scriptHash: 0x10,
13390 wif: 0x80,
13391};
13392
13393bitcoin.networks.peercoin = {
13394 bip32: {
13395 public: 0x0488b21e,
13396 private: 0x0488ade4
13397 },
13398 pubKeyHash: 0x37,
13399 //scriptHash: 0x10,
13400 wif: 0xb7,
13401};
13402
d5dc92fd 13403</script>
ab78acc6 13404 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13405
13406//// base.js
13407
13408/** @fileOverview Javascript cryptography implementation.
13409 *
13410 * Crush to remove comments, shorten variable names and
13411 * generally reduce transmission size.
13412 *
13413 * @author Emily Stark
13414 * @author Mike Hamburg
13415 * @author Dan Boneh
13416 */
13417
13418"use strict";
13419/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13420/*global document, window, escape, unescape, module, require, Uint32Array */
13421
13422/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13423var sjcl = {
13424 /** @namespace Symmetric ciphers. */
13425 cipher: {},
13426
13427 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13428 hash: {},
13429
13430 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13431 keyexchange: {},
13432
13433 /** @namespace Block cipher modes of operation. */
13434 mode: {},
13435
13436 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13437 misc: {},
13438
13439 /**
13440 * @namespace Bit array encoders and decoders.
13441 *
13442 * @description
13443 * The members of this namespace are functions which translate between
13444 * SJCL's bitArrays and other objects (usually strings). Because it
13445 * isn't always clear which direction is encoding and which is decoding,
13446 * the method names are "fromBits" and "toBits".
13447 */
13448 codec: {},
13449
13450 /** @namespace Exceptions. */
13451 exception: {
13452 /** @constructor Ciphertext is corrupt. */
13453 corrupt: function(message) {
13454 this.toString = function() { return "CORRUPT: "+this.message; };
13455 this.message = message;
13456 },
13457
13458 /** @constructor Invalid parameter. */
13459 invalid: function(message) {
13460 this.toString = function() { return "INVALID: "+this.message; };
13461 this.message = message;
13462 },
13463
13464 /** @constructor Bug or missing feature in SJCL. @constructor */
13465 bug: function(message) {
13466 this.toString = function() { return "BUG: "+this.message; };
13467 this.message = message;
13468 },
13469
13470 /** @constructor Something isn't ready. */
13471 notReady: function(message) {
13472 this.toString = function() { return "NOT READY: "+this.message; };
13473 this.message = message;
ebd8d4e8 13474 }
80c4dd2a
IC
13475 }
13476};
13477
13478if(typeof module !== 'undefined' && module.exports){
13479 module.exports = sjcl;
13480}
13481if (typeof define === "function") {
13482 define([], function () {
13483 return sjcl;
13484 });
13485}
13486
13487
13488//// bitArray.js
13489
13490/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13491 *
13492 * @author Emily Stark
13493 * @author Mike Hamburg
13494 * @author Dan Boneh
13495 */
13496
13497/** @namespace Arrays of bits, encoded as arrays of Numbers.
13498 *
13499 * @description
13500 * <p>
13501 * These objects are the currency accepted by SJCL's crypto functions.
13502 * </p>
13503 *
13504 * <p>
13505 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13506 * but many of them can take arguments that are not a multiple of 4 bytes.
13507 * This library encodes arrays of bits (whose size need not be a multiple of 8
13508 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13509 * array of words, 32 bits at a time. Since the words are double-precision
13510 * floating point numbers, they fit some extra data. We use this (in a private,
13511 * possibly-changing manner) to encode the number of bits actually present
13512 * in the last word of the array.
13513 * </p>
13514 *
13515 * <p>
13516 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13517 * to ciphers like AES which want arrays of words.
13518 * </p>
13519 */
13520sjcl.bitArray = {
13521 /**
13522 * Array slices in units of bits.
13523 * @param {bitArray} a The array to slice.
13524 * @param {Number} bstart The offset to the start of the slice, in bits.
13525 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13526 * slice until the end of the array.
13527 * @return {bitArray} The requested slice.
13528 */
13529 bitSlice: function (a, bstart, bend) {
13530 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13531 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13532 },
13533
13534 /**
13535 * Extract a number packed into a bit array.
13536 * @param {bitArray} a The array to slice.
13537 * @param {Number} bstart The offset to the start of the slice, in bits.
13538 * @param {Number} length The length of the number to extract.
13539 * @return {Number} The requested slice.
13540 */
13541 extract: function(a, bstart, blength) {
13542 // FIXME: this Math.floor is not necessary at all, but for some reason
13543 // seems to suppress a bug in the Chromium JIT.
13544 var x, sh = Math.floor((-bstart-blength) & 31);
13545 if ((bstart + blength - 1 ^ bstart) & -32) {
13546 // it crosses a boundary
13547 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13548 } else {
13549 // within a single word
13550 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13551 }
80c4dd2a
IC
13552 return x & ((1<<blength) - 1);
13553 },
13554
13555 /**
13556 * Concatenate two bit arrays.
13557 * @param {bitArray} a1 The first array.
13558 * @param {bitArray} a2 The second array.
13559 * @return {bitArray} The concatenation of a1 and a2.
13560 */
13561 concat: function (a1, a2) {
13562 if (a1.length === 0 || a2.length === 0) {
13563 return a1.concat(a2);
13564 }
13565
13566 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13567 if (shift === 32) {
13568 return a1.concat(a2);
13569 } else {
13570 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13571 }
80c4dd2a
IC
13572 },
13573
13574 /**
13575 * Find the length of an array of bits.
13576 * @param {bitArray} a The array.
13577 * @return {Number} The length of a, in bits.
13578 */
13579 bitLength: function (a) {
13580 var l = a.length, x;
13581 if (l === 0) { return 0; }
13582 x = a[l - 1];
13583 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13584 },
13585
13586 /**
13587 * Truncate an array.
13588 * @param {bitArray} a The array.
13589 * @param {Number} len The length to truncate to, in bits.
13590 * @return {bitArray} A new array, truncated to len bits.
13591 */
13592 clamp: function (a, len) {
13593 if (a.length * 32 < len) { return a; }
13594 a = a.slice(0, Math.ceil(len / 32));
13595 var l = a.length;
13596 len = len & 31;
13597 if (l > 0 && len) {
13598 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13599 }
13600 return a;
13601 },
13602
13603 /**
13604 * Make a partial word for a bit array.
13605 * @param {Number} len The number of bits in the word.
13606 * @param {Number} x The bits.
13607 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13608 * @return {Number} The partial word.
13609 */
13610 partial: function (len, x, _end) {
13611 if (len === 32) { return x; }
13612 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13613 },
13614
13615 /**
13616 * Get the number of bits used by a partial word.
13617 * @param {Number} x The partial word.
13618 * @return {Number} The number of bits used by the partial word.
13619 */
13620 getPartial: function (x) {
13621 return Math.round(x/0x10000000000) || 32;
13622 },
13623
13624 /**
13625 * Compare two arrays for equality in a predictable amount of time.
13626 * @param {bitArray} a The first array.
13627 * @param {bitArray} b The second array.
13628 * @return {boolean} true if a == b; false otherwise.
13629 */
13630 equal: function (a, b) {
13631 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13632 return false;
ebd8d4e8 13633 }
80c4dd2a
IC
13634 var x = 0, i;
13635 for (i=0; i<a.length; i++) {
13636 x |= a[i]^b[i];
ebd8d4e8 13637 }
80c4dd2a
IC
13638 return (x === 0);
13639 },
13640
13641 /** Shift an array right.
13642 * @param {bitArray} a The array to shift.
13643 * @param {Number} shift The number of bits to shift.
13644 * @param {Number} [carry=0] A byte to carry in
13645 * @param {bitArray} [out=[]] An array to prepend to the output.
13646 * @private
13647 */
13648 _shiftRight: function (a, shift, carry, out) {
13649 var i, last2=0, shift2;
13650 if (out === undefined) { out = []; }
13651
13652 for (; shift >= 32; shift -= 32) {
13653 out.push(carry);
13654 carry = 0;
13655 }
13656 if (shift === 0) {
13657 return out.concat(a);
13658 }
13659
13660 for (i=0; i<a.length; i++) {
13661 out.push(carry | a[i]>>>shift);
13662 carry = a[i] << (32-shift);
13663 }
13664 last2 = a.length ? a[a.length-1] : 0;
13665 shift2 = sjcl.bitArray.getPartial(last2);
13666 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13667 return out;
13668 },
13669
13670 /** xor a block of 4 words together.
13671 * @private
13672 */
13673 _xor4: function(x,y) {
13674 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13675 },
13676
13677 /** byteswap a word array inplace.
13678 * (does not handle partial words)
13679 * @param {sjcl.bitArray} a word array
13680 * @return {sjcl.bitArray} byteswapped array
13681 */
13682 byteswapM: function(a) {
13683 var i, v, m = 0xff00;
13684 for (i = 0; i < a.length; ++i) {
13685 v = a[i];
13686 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13687 }
80c4dd2a
IC
13688 return a;
13689 }
13690};
13691
13692
13693//// codecString.js
13694
13695/** @fileOverview Bit array codec implementations.
13696 *
13697 * @author Emily Stark
13698 * @author Mike Hamburg
13699 * @author Dan Boneh
13700 */
13701
13702/** @namespace UTF-8 strings */
13703sjcl.codec.utf8String = {
13704 /** Convert from a bitArray to a UTF-8 string. */
13705 fromBits: function (arr) {
13706 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13707 for (i=0; i<bl/8; i++) {
13708 if ((i&3) === 0) {
13709 tmp = arr[i/4];
13710 }
13711 out += String.fromCharCode(tmp >>> 24);
13712 tmp <<= 8;
ebd8d4e8 13713 }
80c4dd2a
IC
13714 return decodeURIComponent(escape(out));
13715 },
13716
13717 /** Convert from a UTF-8 string to a bitArray. */
13718 toBits: function (str) {
13719 str = unescape(encodeURIComponent(str));
13720 var out = [], i, tmp=0;
13721 for (i=0; i<str.length; i++) {
13722 tmp = tmp << 8 | str.charCodeAt(i);
13723 if ((i&3) === 3) {
13724 out.push(tmp);
13725 tmp = 0;
13726 }
ebd8d4e8 13727 }
80c4dd2a
IC
13728 if (i&3) {
13729 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13730 }
80c4dd2a
IC
13731 return out;
13732 }
13733};
13734
13735
13736//// codecHex.js
13737
13738/** @fileOverview Bit array codec implementations.
13739 *
13740 * @author Emily Stark
13741 * @author Mike Hamburg
13742 * @author Dan Boneh
13743 */
13744
13745/** @namespace Hexadecimal */
13746sjcl.codec.hex = {
13747 /** Convert from a bitArray to a hex string. */
13748 fromBits: function (arr) {
13749 var out = "", i;
13750 for (i=0; i<arr.length; i++) {
13751 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13752 }
80c4dd2a
IC
13753 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13754 },
13755 /** Convert from a hex string to a bitArray. */
13756 toBits: function (str) {
13757 var i, out=[], len;
13758 str = str.replace(/\s|0x/g, "");
13759 len = str.length;
13760 str = str + "00000000";
13761 for (i=0; i<str.length; i+=8) {
13762 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13763 }
80c4dd2a
IC
13764 return sjcl.bitArray.clamp(out, len*4);
13765 }
13766};
13767
13768
13769//// sha512.js
13770
13771/** @fileOverview Javascript SHA-512 implementation.
13772 *
13773 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13774 * SJCL by Stefan Thomas.
13775 *
13776 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13777 * Released with New BSD License
13778 *
13779 * @author Emily Stark
13780 * @author Mike Hamburg
13781 * @author Dan Boneh
13782 * @author Jeff Mott
13783 * @author Stefan Thomas
13784 */
13785
13786/**
13787 * Context for a SHA-512 operation in progress.
13788 * @constructor
13789 * @class Secure Hash Algorithm, 512 bits.
13790 */
13791sjcl.hash.sha512 = function (hash) {
13792 if (!this._key[0]) { this._precompute(); }
13793 if (hash) {
13794 this._h = hash._h.slice(0);
13795 this._buffer = hash._buffer.slice(0);
13796 this._length = hash._length;
13797 } else {
13798 this.reset();
13799 }
13800};
13801
13802/**
13803 * Hash a string or an array of words.
13804 * @static
13805 * @param {bitArray|String} data the data to hash.
13806 * @return {bitArray} The hash value, an array of 16 big-endian words.
13807 */
13808sjcl.hash.sha512.hash = function (data) {
13809 return (new sjcl.hash.sha512()).update(data).finalize();
13810};
13811
13812sjcl.hash.sha512.prototype = {
13813 /**
13814 * The hash's block size, in bits.
13815 * @constant
13816 */
13817 blockSize: 1024,
13818
13819 /**
13820 * Reset the hash state.
13821 * @return this
13822 */
13823 reset:function () {
13824 this._h = this._init.slice(0);
13825 this._buffer = [];
13826 this._length = 0;
13827 return this;
13828 },
13829
13830 /**
13831 * Input several words to the hash.
13832 * @param {bitArray|String} data the data to hash.
13833 * @return this
13834 */
13835 update: function (data) {
13836 if (typeof data === "string") {
13837 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13838 }
80c4dd2a
IC
13839 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13840 ol = this._length,
13841 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13842 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13843 this._block(b.splice(0,32));
ebd8d4e8 13844 }
80c4dd2a
IC
13845 return this;
13846 },
13847
13848 /**
13849 * Complete hashing and output the hash value.
13850 * @return {bitArray} The hash value, an array of 16 big-endian words.
13851 */
13852 finalize:function () {
13853 var i, b = this._buffer, h = this._h;
13854
13855 // Round out and push the buffer
13856 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13857
13858 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13859 for (i = b.length + 4; i & 31; i++) {
13860 b.push(0);
ebd8d4e8 13861 }
80c4dd2a
IC
13862
13863 // append the length
13864 b.push(0);
13865 b.push(0);
13866 b.push(Math.floor(this._length / 0x100000000));
13867 b.push(this._length | 0);
13868
13869 while (b.length) {
13870 this._block(b.splice(0,32));
ebd8d4e8 13871 }
80c4dd2a
IC
13872
13873 this.reset();
13874 return h;
13875 },
13876
13877 /**
13878 * The SHA-512 initialization vector, to be precomputed.
13879 * @private
13880 */
13881 _init:[],
13882
13883 /**
13884 * Least significant 24 bits of SHA512 initialization values.
13885 *
13886 * Javascript only has 53 bits of precision, so we compute the 40 most
13887 * significant bits and add the remaining 24 bits as constants.
13888 *
13889 * @private
13890 */
13891 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13892
13893 /*
13894 _init:
13895 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13896 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13897 */
13898
13899 /**
13900 * The SHA-512 hash key, to be precomputed.
13901 * @private
13902 */
13903 _key:[],
13904
13905 /**
13906 * Least significant 24 bits of SHA512 key values.
13907 * @private
13908 */
13909 _keyr:
13910 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13911 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13912 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13913 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13914 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13915 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13916 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13917 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13918 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13919 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13920
13921 /*
13922 _key:
13923 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13924 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13925 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13926 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13927 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13928 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13929 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13930 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13931 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13932 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13933 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13934 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13935 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13936 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13937 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13938 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13939 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13940 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13941 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13942 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13943 */
13944
13945 /**
13946 * Function to precompute _init and _key.
13947 * @private
13948 */
13949 _precompute: function () {
13950 // XXX: This code is for precomputing the SHA256 constants, change for
13951 // SHA512 and re-enable.
13952 var i = 0, prime = 2, factor;
13953
13954 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13955 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13956
13957 outer: for (; i<80; prime++) {
13958 for (factor=2; factor*factor <= prime; factor++) {
13959 if (prime % factor === 0) {
13960 // not a prime
13961 continue outer;
ebd8d4e8 13962 }
80c4dd2a
IC
13963 }
13964
13965 if (i<8) {
13966 this._init[i*2] = frac(Math.pow(prime, 1/2));
13967 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13968 }
13969 this._key[i*2] = frac(Math.pow(prime, 1/3));
13970 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13971 i++;
ebd8d4e8 13972 }
80c4dd2a
IC
13973 },
13974
13975 /**
13976 * Perform one cycle of SHA-512.
13977 * @param {bitArray} words one block of words.
13978 * @private
13979 */
13980 _block:function (words) {
13981 var i, wrh, wrl,
13982 w = words.slice(0),
13983 h = this._h,
13984 k = this._key,
13985 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13986 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13987 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13988 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13989
13990 // Working variables
13991 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13992 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13993 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13994 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13995
13996 for (i=0; i<80; i++) {
13997 // load up the input word for this round
13998 if (i<16) {
13999 wrh = w[i * 2];
14000 wrl = w[i * 2 + 1];
14001 } else {
14002 // Gamma0
14003 var gamma0xh = w[(i-15) * 2];
14004 var gamma0xl = w[(i-15) * 2 + 1];
14005 var gamma0h =
14006 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
14007 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
14008 (gamma0xh >>> 7);
14009 var gamma0l =
14010 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
14011 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
14012 ((gamma0xh << 25) | (gamma0xl >>> 7));
14013
14014 // Gamma1
14015 var gamma1xh = w[(i-2) * 2];
14016 var gamma1xl = w[(i-2) * 2 + 1];
14017 var gamma1h =
14018 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
14019 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
14020 (gamma1xh >>> 6);
14021 var gamma1l =
14022 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
14023 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
14024 ((gamma1xh << 26) | (gamma1xl >>> 6));
14025
14026 // Shortcuts
14027 var wr7h = w[(i-7) * 2];
14028 var wr7l = w[(i-7) * 2 + 1];
14029
14030 var wr16h = w[(i-16) * 2];
14031 var wr16l = w[(i-16) * 2 + 1];
14032
14033 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
14034 wrl = gamma0l + wr7l;
14035 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
14036 wrl += gamma1l;
14037 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
14038 wrl += wr16l;
14039 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
14040 }
14041
14042 w[i*2] = wrh |= 0;
14043 w[i*2 + 1] = wrl |= 0;
14044
14045 // Ch
14046 var chh = (eh & fh) ^ (~eh & gh);
14047 var chl = (el & fl) ^ (~el & gl);
14048
14049 // Maj
14050 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
14051 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
14052
14053 // Sigma0
14054 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
14055 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
14056
14057 // Sigma1
14058 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
14059 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
14060
14061 // K(round)
14062 var krh = k[i*2];
14063 var krl = k[i*2+1];
14064
14065 // t1 = h + sigma1 + ch + K(round) + W(round)
14066 var t1l = hl + sigma1l;
14067 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
14068 t1l += chl;
14069 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
14070 t1l += krl;
14071 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
14072 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
14073 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
14074
14075 // t2 = sigma0 + maj
14076 var t2l = sigma0l + majl;
14077 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
14078
14079 // Update working variables
14080 hh = gh;
14081 hl = gl;
14082 gh = fh;
14083 gl = fl;
14084 fh = eh;
14085 fl = el;
14086 el = (dl + t1l) | 0;
14087 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14088 dh = ch;
14089 dl = cl;
14090 ch = bh;
14091 cl = bl;
14092 bh = ah;
14093 bl = al;
14094 al = (t1l + t2l) | 0;
14095 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
14096 }
14097
14098 // Intermediate hash
14099 h0l = h[1] = (h0l + al) | 0;
14100 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
14101 h1l = h[3] = (h1l + bl) | 0;
14102 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
14103 h2l = h[5] = (h2l + cl) | 0;
14104 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
14105 h3l = h[7] = (h3l + dl) | 0;
14106 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
14107 h4l = h[9] = (h4l + el) | 0;
14108 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
14109 h5l = h[11] = (h5l + fl) | 0;
14110 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
14111 h6l = h[13] = (h6l + gl) | 0;
14112 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
14113 h7l = h[15] = (h7l + hl) | 0;
14114 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
14115 }
14116};
14117
14118
14119//// hmac.js
14120
14121/** @fileOverview HMAC implementation.
14122 *
14123 * @author Emily Stark
14124 * @author Mike Hamburg
14125 * @author Dan Boneh
14126 */
14127
14128/** HMAC with the specified hash function.
14129 * @constructor
14130 * @param {bitArray} key the key for HMAC.
14131 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
14132 */
14133sjcl.misc.hmac = function (key, Hash) {
14134 this._hash = Hash = Hash || sjcl.hash.sha256;
14135 var exKey = [[],[]], i,
14136 bs = Hash.prototype.blockSize / 32;
14137 this._baseHash = [new Hash(), new Hash()];
14138
14139 if (key.length > bs) {
14140 key = Hash.hash(key);
14141 }
14142
14143 for (i=0; i<bs; i++) {
14144 exKey[0][i] = key[i]^0x36363636;
14145 exKey[1][i] = key[i]^0x5C5C5C5C;
14146 }
14147
14148 this._baseHash[0].update(exKey[0]);
14149 this._baseHash[1].update(exKey[1]);
14150 this._resultHash = new Hash(this._baseHash[0]);
14151};
14152
14153/** HMAC with the specified hash function. Also called encrypt since it's a prf.
14154 * @param {bitArray|String} data The data to mac.
14155 */
14156sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
14157 if (!this._updated) {
14158 this.update(data);
14159 return this.digest(data);
14160 } else {
14161 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
14162 }
14163};
14164
14165sjcl.misc.hmac.prototype.reset = function () {
14166 this._resultHash = new this._hash(this._baseHash[0]);
14167 this._updated = false;
14168};
14169
14170sjcl.misc.hmac.prototype.update = function (data) {
14171 this._updated = true;
14172 this._resultHash.update(data);
14173};
14174
14175sjcl.misc.hmac.prototype.digest = function () {
14176 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
14177
14178 this.reset();
14179
14180 return result;
14181};
14182
14183
14184//// pbkdf2.js
14185
14186
14187/** @fileOverview Password-based key-derivation function, version 2.0.
14188 *
14189 * @author Emily Stark
14190 * @author Mike Hamburg
14191 * @author Dan Boneh
14192 */
14193
14194/** Password-Based Key-Derivation Function, version 2.0.
14195 *
14196 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
14197 *
14198 * This is the method specified by RSA's PKCS #5 standard.
14199 *
14200 * @param {bitArray|String} password The password.
14201 * @param {bitArray|String} salt The salt. Should have lots of entropy.
14202 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
14203 * @param {Number} [length] The length of the derived key. Defaults to the
14204 output size of the hash function.
14205 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
14206 * @return {bitArray} the derived key.
14207 */
14208sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
14209 count = count || 1000;
14210
14211 if (length < 0 || count < 0) {
14212 throw sjcl.exception.invalid("invalid params to pbkdf2");
14213 }
14214
14215 if (typeof password === "string") {
14216 password = sjcl.codec.utf8String.toBits(password);
14217 }
14218
14219 if (typeof salt === "string") {
14220 salt = sjcl.codec.utf8String.toBits(salt);
14221 }
14222
14223 Prff = Prff || sjcl.misc.hmac;
14224
14225 var prf = new Prff(password),
14226 u, ui, i, j, k, out = [], b = sjcl.bitArray;
14227
14228 for (k = 1; 32 * out.length < (length || 1); k++) {
14229 u = ui = prf.encrypt(b.concat(salt,[k]));
14230
14231 for (i=1; i<count; i++) {
14232 ui = prf.encrypt(ui);
14233 for (j=0; j<ui.length; j++) {
14234 u[j] ^= ui[j];
14235 }
ebd8d4e8 14236 }
80c4dd2a
IC
14237
14238 out = out.concat(u);
14239 }
14240
14241 if (length) { out = b.clamp(out, length); }
14242
14243 return out;
14244};
14245
14246
14247//// sha256.js
14248
14249/** @fileOverview Javascript SHA-256 implementation.
14250 *
14251 * An older version of this implementation is available in the public
14252 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
14253 * Stanford University 2008-2010 and BSD-licensed for liability
14254 * reasons.
14255 *
14256 * Special thanks to Aldo Cortesi for pointing out several bugs in
14257 * this code.
14258 *
14259 * @author Emily Stark
14260 * @author Mike Hamburg
14261 * @author Dan Boneh
14262 */
14263
14264/**
14265 * Context for a SHA-256 operation in progress.
14266 * @constructor
14267 * @class Secure Hash Algorithm, 256 bits.
14268 */
14269sjcl.hash.sha256 = function (hash) {
14270 if (!this._key[0]) { this._precompute(); }
14271 if (hash) {
14272 this._h = hash._h.slice(0);
14273 this._buffer = hash._buffer.slice(0);
14274 this._length = hash._length;
14275 } else {
14276 this.reset();
14277 }
14278};
14279
14280/**
14281 * Hash a string or an array of words.
14282 * @static
14283 * @param {bitArray|String} data the data to hash.
14284 * @return {bitArray} The hash value, an array of 16 big-endian words.
14285 */
14286sjcl.hash.sha256.hash = function (data) {
14287 return (new sjcl.hash.sha256()).update(data).finalize();
14288};
14289
14290sjcl.hash.sha256.prototype = {
14291 /**
14292 * The hash's block size, in bits.
14293 * @constant
14294 */
14295 blockSize: 512,
14296
14297 /**
14298 * Reset the hash state.
14299 * @return this
14300 */
14301 reset:function () {
14302 this._h = this._init.slice(0);
14303 this._buffer = [];
14304 this._length = 0;
14305 return this;
14306 },
14307
14308 /**
14309 * Input several words to the hash.
14310 * @param {bitArray|String} data the data to hash.
14311 * @return this
14312 */
14313 update: function (data) {
14314 if (typeof data === "string") {
14315 data = sjcl.codec.utf8String.toBits(data);
14316 }
14317 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14318 ol = this._length,
14319 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14320 for (i = 512+ol & -512; i <= nl; i+= 512) {
14321 this._block(b.splice(0,16));
ebd8d4e8 14322 }
3af2954a 14323 return this;
80c4dd2a
IC
14324 },
14325
14326 /**
14327 * Complete hashing and output the hash value.
14328 * @return {bitArray} The hash value, an array of 8 big-endian words.
14329 */
14330 finalize:function () {
14331 var i, b = this._buffer, h = this._h;
14332
14333 // Round out and push the buffer
14334 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14335
14336 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14337 for (i = b.length + 2; i & 15; i++) {
14338 b.push(0);
14339 }
14340
14341 // append the length
14342 b.push(Math.floor(this._length / 0x100000000));
14343 b.push(this._length | 0);
14344
14345 while (b.length) {
14346 this._block(b.splice(0,16));
14347 }
14348
14349 this.reset();
14350 return h;
14351 },
14352
14353 /**
14354 * The SHA-256 initialization vector, to be precomputed.
14355 * @private
14356 */
14357 _init:[],
14358 /*
14359 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14360 */
14361
14362 /**
14363 * The SHA-256 hash key, to be precomputed.
14364 * @private
14365 */
14366 _key:[],
14367 /*
14368 _key:
14369 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14370 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14371 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14372 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14373 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14374 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14375 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14376 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14377 */
14378
14379
14380 /**
14381 * Function to precompute _init and _key.
14382 * @private
14383 */
14384 _precompute: function () {
14385 var i = 0, prime = 2, factor;
14386
14387 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14388
14389 outer: for (; i<64; prime++) {
14390 for (factor=2; factor*factor <= prime; factor++) {
14391 if (prime % factor === 0) {
14392 // not a prime
14393 continue outer;
ebd8d4e8 14394 }
80c4dd2a
IC
14395 }
14396
14397 if (i<8) {
14398 this._init[i] = frac(Math.pow(prime, 1/2));
14399 }
14400 this._key[i] = frac(Math.pow(prime, 1/3));
14401 i++;
ebd8d4e8 14402 }
80c4dd2a
IC
14403 },
14404
14405 /**
14406 * Perform one cycle of SHA-256.
14407 * @param {bitArray} words one block of words.
14408 * @private
14409 */
14410 _block:function (words) {
14411 var i, tmp, a, b,
14412 w = words.slice(0),
14413 h = this._h,
14414 k = this._key,
14415 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14416 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14417
14418 /* Rationale for placement of |0 :
14419 * If a value can overflow is original 32 bits by a factor of more than a few
14420 * million (2^23 ish), there is a possibility that it might overflow the
14421 * 53-bit mantissa and lose precision.
14422 *
14423 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14424 * propagates around the loop, and on the hash state h[]. I don't believe
14425 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14426 * (for h4 anyway), and better safe than sorry.
14427 *
14428 * The clamps on h[] are necessary for the output to be correct even in the
14429 * common case and for short inputs.
14430 */
14431 for (i=0; i<64; i++) {
14432 // load up the input word for this round
14433 if (i<16) {
14434 tmp = w[i];
14435 } else {
14436 a = w[(i+1 ) & 15];
14437 b = w[(i+14) & 15];
14438 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14439 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14440 w[i&15] + w[(i+9) & 15]) | 0;
14441 }
14442
14443 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14444
14445 // shift register
14446 h7 = h6; h6 = h5; h5 = h4;
14447 h4 = h3 + tmp | 0;
14448 h3 = h2; h2 = h1; h1 = h0;
14449
14450 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14451 }
14452
14453 h[0] = h[0]+h0 | 0;
14454 h[1] = h[1]+h1 | 0;
14455 h[2] = h[2]+h2 | 0;
14456 h[3] = h[3]+h3 | 0;
14457 h[4] = h[4]+h4 | 0;
14458 h[5] = h[5]+h5 | 0;
14459 h[6] = h[6]+h6 | 0;
14460 h[7] = h[7]+h7 | 0;
14461 }
14462};
dc55c6b0 14463</script>
ab78acc6 14464 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14465WORDLISTS["english"] = [
ebd8d4e8
IC
14466"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14467"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14468"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14469"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14470"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14471"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14472"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14473"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14474"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14475"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14476"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14477"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14478"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14479"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14480"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14481"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14482"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14483"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14484"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14485"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14486"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14487"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14488"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14489"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14490"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14491"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14492"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14493"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14494"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14495"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14496"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14497"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14498"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14499"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14500"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14501"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14502"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14503"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14504"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14505"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14506"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14507"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14508"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14509"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14510"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14511"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14512"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14513"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14514"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14515"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14516"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14517"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14518"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14519"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14520"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14521"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14522"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14523"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14524"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14525"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14526"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14527"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14528"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14529"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14530"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14531"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14532"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14533"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14534"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14535"film","filter","final","find","fine","finger","finish","fire","firm","first",
14536"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14537"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14538"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14539"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14540"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14541"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14542"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14543"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14544"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14545"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14546"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14547"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14548"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14549"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14550"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14551"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14552"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14553"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14554"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14555"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14556"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14557"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14558"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14559"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14560"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14561"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14562"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14563"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14564"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14565"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14566"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14567"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14568"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14569"liar","liberty","library","license","life","lift","light","like","limb","limit",
14570"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14571"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14572"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14573"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14574"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14575"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14576"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14577"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14578"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14579"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14580"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14581"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14582"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14583"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14584"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14585"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14586"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14587"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14588"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14589"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14590"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14591"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14592"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14593"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14594"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14595"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14596"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14597"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14598"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14599"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14600"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14601"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14602"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14603"prize","problem","process","produce","profit","program","project","promote","proof","property",
14604"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14605"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14606"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14607"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14608"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14609"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14610"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14611"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14612"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14613"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14614"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14615"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14616"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14617"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14618"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14619"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14620"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14621"scrub","sea","search","season","seat","second","secret","section","security","seed",
14622"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14623"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14624"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14625"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14626"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14627"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14628"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14629"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14630"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14631"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14632"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14633"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14634"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14635"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14636"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14637"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14638"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14639"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14640"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14641"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14642"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14643"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14644"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14645"thank","that","theme","then","theory","there","they","thing","this","thought",
14646"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14647"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14648"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14649"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14650"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14651"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14652"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14653"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14654"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14655"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14656"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14657"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14658"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14659"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14660"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14661"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14662"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14663"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14664"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14665"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14666"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14667"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14668"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14669"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14670"yellow","you","young","youth","zebra","zero","zone","zoo"]
dc55c6b0 14671</script>
ab78acc6 14672 <script>/*
3af2954a
IC
14673 * Copyright (c) 2013 Pavol Rusnak
14674 *
14675 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14676 * this software and associated documentation files (the "Software"), to deal in
14677 * the Software without restriction, including without limitation the rights to
14678 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14679 * of the Software, and to permit persons to whom the Software is furnished to do
14680 * so, subject to the following conditions:
14681 *
14682 * The above copyright notice and this permission notice shall be included in all
14683 * copies or substantial portions of the Software.
14684 *
14685 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14686 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14687 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14688 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14689 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14690 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14691 */
14692
14693/*
14694 * Javascript port from python by Ian Coleman
14695 *
80c4dd2a
IC
14696 * Requires code from sjcl
14697 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
14698 */
14699
14700var Mnemonic = function(language) {
14701
14702 var PBKDF2_ROUNDS = 2048;
14703 var RADIX = 2048;
14704
14705 var self = this;
14706 var wordlist = [];
14707
80c4dd2a
IC
14708 var hmacSHA512 = function(key) {
14709 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14710 this.encrypt = function() {
14711 return hasher.encrypt.apply(hasher, arguments);
14712 };
14713 };
14714
3af2954a
IC
14715 function init() {
14716 wordlist = WORDLISTS[language];
14717 if (wordlist.length != RADIX) {
14718 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14719 throw err;
14720 }
14721 }
14722
14723 self.generate = function(strength) {
14724 strength = strength || 128;
14725 var r = strength % 32;
14726 if (r > 0) {
14727 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14728 }
14729 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14730 if (!hasStrongCrypto) {
14731 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14732 }
14733 var buffer = new Uint8Array(strength / 8);
14734 var data = crypto.getRandomValues(buffer);
14735 return self.toMnemonic(data);
14736 }
14737
80c4dd2a
IC
14738 self.toMnemonic = function(byteArray) {
14739 if (byteArray.length % 4 > 0) {
14740 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
14741 }
14742
14743 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
14744 var data = byteArrayToWordArray(byteArray);
14745 var hash = sjcl.hash.sha256.hash(data);
14746 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
14747
14748 // b is a binary string, eg '00111010101100...'
14749 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14750 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14751 //
14752 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14753 // c = bin(int(h, 16))[2:].zfill(256)
14754 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
14755 var a = byteArrayToBinaryString(byteArray);
14756 var c = zfill(hexStringToBinaryString(h), 256);
14757 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
14758 // b = line1 + line2
14759 var b = a + d;
14760
14761 var result = [];
14762 var blen = b.length / 11;
14763 for (var i=0; i<blen; i++) {
14764 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14765 result.push(wordlist[idx]);
14766 }
14767 return result.join(' ');
14768 }
14769
14770 self.check = function(mnemonic) {
14771 var mnemonic = mnemonic.split(' ')
14772 if (mnemonic.length % 3 > 0) {
14773 return false
14774 }
14775 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14776 var idx = [];
14777 for (var i=0; i<mnemonic.length; i++) {
14778 var word = mnemonic[i];
14779 var wordIndex = wordlist.indexOf(word);
14780 if (wordIndex == -1) {
14781 return false;
14782 }
14783 var binaryIndex = zfill(wordIndex.toString(2), 11);
14784 idx.push(binaryIndex);
14785 }
14786 var b = idx.join('');
14787 var l = b.length;
14788 //d = b[:l / 33 * 32]
14789 //h = b[-l / 33:]
14790 var d = b.substring(0, l / 33 * 32);
14791 var h = b.substring(l - l / 33, l);
14792 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 14793 var nd = binaryStringToWordArray(d);
3af2954a 14794 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
14795 var ndHash = sjcl.hash.sha256.hash(nd);
14796 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14797 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
14798 var nh = ndBstr.substring(0,l/33);
14799 return h == nh;
14800 }
14801
14802 self.toSeed = function(mnemonic, passphrase) {
14803 passphrase = passphrase || '';
7772c641 14804 mnemonic = self.normalizeString(mnemonic).split(' ').filter(function(x) { return x.length; }).join(' ');
3af2954a
IC
14805 passphrase = self.normalizeString(passphrase)
14806 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
14807 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14808 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14809 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14810 var hashHex = sjcl.codec.hex.fromBits(result);
14811 return hashHex;
3af2954a
IC
14812 }
14813
14814 self.normalizeString = function(str) {
14815 if (typeof str.normalize == "function") {
14816 return str.normalize("NFKD");
14817 }
14818 else {
14819 // TODO decide how to handle this in the future.
14820 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14821 return str;
14822 }
14823 }
14824
80c4dd2a
IC
14825 function byteArrayToWordArray(data) {
14826 var a = [];
14827 for (var i=0; i<data.length/4; i++) {
14828 v = 0;
14829 v += data[i*4 + 0] << 8 * 3;
14830 v += data[i*4 + 1] << 8 * 2;
14831 v += data[i*4 + 2] << 8 * 1;
14832 v += data[i*4 + 3] << 8 * 0;
14833 a.push(v);
14834 }
14835 return a;
14836 }
14837
3af2954a
IC
14838 function byteArrayToBinaryString(data) {
14839 var bin = "";
14840 for (var i=0; i<data.length; i++) {
14841 bin += zfill(data[i].toString(2), 8);
14842 }
14843 return bin;
14844 }
14845
80c4dd2a
IC
14846 function hexStringToBinaryString(hexString) {
14847 binaryString = "";
14848 for (var i=0; i<hexString.length; i++) {
14849 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14850 }
14851 return binaryString;
14852 }
14853
14854 function binaryStringToWordArray(binary) {
14855 var aLen = binary.length / 32;
14856 var a = [];
14857 for (var i=0; i<aLen; i++) {
14858 var valueStr = binary.substring(0,32);
3af2954a 14859 var value = parseInt(valueStr, 2);
80c4dd2a
IC
14860 a.push(value);
14861 binary = binary.slice(32);
3af2954a 14862 }
80c4dd2a 14863 return a;
3af2954a
IC
14864 }
14865
14866 // Pad a numeric string on the left with zero digits until the given width
14867 // is reached.
14868 // Note this differs to the python implementation because it does not
14869 // handle numbers starting with a sign.
14870 function zfill(source, length) {
14871 source = source.toString();
14872 while (source.length < length) {
14873 source = '0' + source;
14874 }
14875 return source;
14876 }
14877
14878 init();
ebd8d4e8 14879
3af2954a 14880}
dc55c6b0 14881</script>
ab78acc6 14882 <script>(function() {
ebd8d4e8
IC
14883
14884 var mnemonic = new Mnemonic("english");
73161a92 14885 var seed = null
ebd8d4e8
IC
14886 var bip32RootKey = null;
14887 var bip32ExtendedKey = null;
ab78acc6 14888 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
14889 var addressRowTemplate = $("#address-row-template");
14890
80c4dd2a
IC
14891 var showIndex = true;
14892 var showAddress = true;
14893 var showPrivKey = true;
14894
ebd8d4e8 14895 var phraseChangeTimeoutEvent = null;
efe41586 14896 var rootKeyChangedTimeoutEvent = null;
ebd8d4e8
IC
14897
14898 var DOM = {};
d6cedc94
IC
14899 DOM.network = $(".network");
14900 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 14901 DOM.phrase = $(".phrase");
721b7284 14902 DOM.passphrase = $(".passphrase");
ebd8d4e8 14903 DOM.generate = $(".generate");
73161a92 14904 DOM.seed = $(".seed");
ebd8d4e8
IC
14905 DOM.rootKey = $(".root-key");
14906 DOM.extendedPrivKey = $(".extended-priv-key");
14907 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
14908 DOM.bip32tab = $("#bip32-tab");
14909 DOM.bip44tab = $("#bip44-tab");
14910 DOM.bip32panel = $("#bip32");
14911 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
14912 DOM.bip32path = $("#bip32-path");
14913 DOM.bip44path = $("#bip44-path");
14914 DOM.bip44purpose = $("#bip44 .purpose");
14915 DOM.bip44coin = $("#bip44 .coin");
14916 DOM.bip44account = $("#bip44 .account");
14917 DOM.bip44change = $("#bip44 .change");
14918 DOM.strength = $(".strength");
1975bfbc 14919 DOM.hardenedAddresses = $(".hardened-addresses");
ebd8d4e8
IC
14920 DOM.addresses = $(".addresses");
14921 DOM.rowsToAdd = $(".rows-to-add");
14922 DOM.more = $(".more");
14923 DOM.feedback = $(".feedback");
14924 DOM.tab = $(".derivation-type a");
14925 DOM.indexToggle = $(".index-toggle");
14926 DOM.addressToggle = $(".address-toggle");
14927 DOM.privateKeyToggle = $(".private-key-toggle");
14928
ebd8d4e8
IC
14929 function init() {
14930 // Events
d6cedc94 14931 DOM.network.on("change", networkChanged);
a19a5498
IC
14932 DOM.phrase.on("input", delayedPhraseChanged);
14933 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
14934 DOM.generate.on("click", generateClicked);
14935 DOM.more.on("click", showMore);
efe41586
IC
14936 DOM.rootKey.on("input", delayedRootKeyChanged);
14937 DOM.bip32path.on("input", calcForDerivationPath);
14938 DOM.bip44purpose.on("input", calcForDerivationPath);
14939 DOM.bip44coin.on("input", calcForDerivationPath);
14940 DOM.bip44account.on("input", calcForDerivationPath);
14941 DOM.bip44change.on("input", calcForDerivationPath);
14942 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
1975bfbc 14943 DOM.hardenedAddresses.on("change", calcForDerivationPath);
ebd8d4e8
IC
14944 DOM.indexToggle.on("click", toggleIndexes);
14945 DOM.addressToggle.on("click", toggleAddresses);
14946 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14947 disableForms();
14948 hidePending();
14949 hideValidationError();
ab78acc6 14950 populateNetworkSelect();
ebd8d4e8
IC
14951 }
14952
14953 // Event handlers
14954
d6cedc94 14955 function networkChanged(e) {
54563907
IC
14956 var networkIndex = e.target.value;
14957 networks[networkIndex].onSelect();
14958 if (seed != null) {
14959 phraseChanged();
14960 }
14961 else {
14962 rootKeyChanged();
14963 }
d6cedc94
IC
14964 }
14965
ebd8d4e8
IC
14966 function delayedPhraseChanged() {
14967 hideValidationError();
14968 showPending();
14969 if (phraseChangeTimeoutEvent != null) {
14970 clearTimeout(phraseChangeTimeoutEvent);
14971 }
14972 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14973 }
14974
14975 function phraseChanged() {
14976 showPending();
14977 hideValidationError();
14978 // Get the mnemonic phrase
14979 var phrase = DOM.phrase.val();
14980 var errorText = findPhraseErrors(phrase);
14981 if (errorText) {
14982 showValidationError(errorText);
14983 return;
14984 }
efe41586
IC
14985 // Calculate and display
14986 var passphrase = DOM.passphrase.val();
14987 calcBip32RootKeyFromSeed(phrase, passphrase);
14988 calcForDerivationPath();
14989 hidePending();
14990 }
14991
14992 function delayedRootKeyChanged() {
14993 // Warn if there is an existing mnemonic or passphrase.
14994 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
14995 if (!confirm("This will clear existing mnemonic and passphrase")) {
14996 DOM.rootKey.val(bip32RootKey);
14997 return
14998 }
14999 }
15000 hideValidationError();
15001 showPending();
15002 // Clear existing mnemonic and passphrase
15003 DOM.phrase.val("");
15004 DOM.passphrase.val("");
15005 seed = null;
15006 if (rootKeyChangedTimeoutEvent != null) {
15007 clearTimeout(rootKeyChangedTimeoutEvent);
15008 }
15009 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
15010 }
15011
15012 function rootKeyChanged() {
15013 showPending();
15014 hideValidationError();
15015 // Validate the root key TODO
15016 var rootKeyBase58 = DOM.rootKey.val();
15017 var errorText = validateRootKey(rootKeyBase58);
15018 if (errorText) {
15019 showValidationError(errorText);
15020 return;
15021 }
15022 // Calculate and display
15023 calcBip32RootKeyFromBase58(rootKeyBase58);
15024 calcForDerivationPath();
15025 hidePending();
15026 }
15027
15028 function calcForDerivationPath() {
15029 showPending();
15030 hideValidationError();
ebd8d4e8 15031 // Get the derivation path
38523d36
IC
15032 var derivationPath = getDerivationPath();
15033 var errorText = findDerivationPathErrors(derivationPath);
ebd8d4e8
IC
15034 if (errorText) {
15035 showValidationError(errorText);
15036 return;
15037 }
efe41586 15038 calcBip32ExtendedKey(derivationPath);
ebd8d4e8
IC
15039 displayBip32Info();
15040 hidePending();
15041 }
15042
15043 function generateClicked() {
15044 clearDisplay();
15045 showPending();
15046 setTimeout(function() {
15047 var phrase = generateRandomPhrase();
15048 if (!phrase) {
15049 return;
15050 }
15051 phraseChanged();
15052 }, 50);
15053 }
15054
ebd8d4e8 15055 function toggleIndexes() {
80c4dd2a 15056 showIndex = !showIndex;
ebd8d4e8
IC
15057 $("td.index span").toggleClass("invisible");
15058 }
15059
15060 function toggleAddresses() {
80c4dd2a 15061 showAddress = !showAddress;
ebd8d4e8
IC
15062 $("td.address span").toggleClass("invisible");
15063 }
15064
15065 function togglePrivateKeys() {
80c4dd2a 15066 showPrivKey = !showPrivKey;
ebd8d4e8
IC
15067 $("td.privkey span").toggleClass("invisible");
15068 }
15069
15070 // Private methods
15071
15072 function generateRandomPhrase() {
15073 if (!hasStrongRandom()) {
15074 var errorText = "This browser does not support strong randomness";
15075 showValidationError(errorText);
15076 return;
15077 }
15078 var numWords = parseInt(DOM.strength.val());
ebd8d4e8
IC
15079 var strength = numWords / 3 * 32;
15080 var words = mnemonic.generate(strength);
15081 DOM.phrase.val(words);
15082 return words;
15083 }
15084
efe41586 15085 function calcBip32RootKeyFromSeed(phrase, passphrase) {
73161a92 15086 seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 15087 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
efe41586
IC
15088 }
15089
15090 function calcBip32RootKeyFromBase58(rootKeyBase58) {
3821c0d3 15091 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
15092 }
15093
15094 function calcBip32ExtendedKey(path) {
ebd8d4e8
IC
15095 bip32ExtendedKey = bip32RootKey;
15096 // Derive the key from the path
15097 var pathBits = path.split("/");
15098 for (var i=0; i<pathBits.length; i++) {
15099 var bit = pathBits[i];
15100 var index = parseInt(bit);
15101 if (isNaN(index)) {
15102 continue;
15103 }
15104 var hardened = bit[bit.length-1] == "'";
15105 if (hardened) {
15106 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
15107 }
15108 else {
15109 bip32ExtendedKey = bip32ExtendedKey.derive(index);
15110 }
15111 }
15112 }
15113
15114 function showValidationError(errorText) {
15115 DOM.feedback
15116 .text(errorText)
15117 .show();
15118 }
15119
15120 function hideValidationError() {
15121 DOM.feedback
15122 .text("")
15123 .hide();
15124 }
15125
15126 function findPhraseErrors(phrase) {
15127 // TODO make this right
15128 // Preprocess the words
783981de 15129 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
15130 var parts = phrase.split(" ");
15131 var proper = [];
15132 for (var i=0; i<parts.length; i++) {
15133 var part = parts[i];
15134 if (part.length > 0) {
15135 // TODO check that lowercasing is always valid to do
15136 proper.push(part.toLowerCase());
15137 }
15138 }
ebd8d4e8 15139 var properPhrase = proper.join(' ');
563e401a
IC
15140 // Check each word
15141 for (var i=0; i<proper.length; i++) {
15142 var word = proper[i];
15143 if (WORDLISTS["english"].indexOf(word) == -1) {
15144 console.log("Finding closest match to " + word);
15145 var nearestWord = findNearestWord(word);
15146 return word + " not in wordlist, did you mean " + nearestWord + "?";
15147 }
15148 }
ebd8d4e8
IC
15149 // Check the words are valid
15150 var isValid = mnemonic.check(properPhrase);
15151 if (!isValid) {
15152 return "Invalid mnemonic";
15153 }
15154 return false;
15155 }
15156
efe41586
IC
15157 function validateRootKey(rootKeyBase58) {
15158 try {
15159 bitcoin.HDNode.fromBase58(rootKeyBase58);
15160 }
15161 catch (e) {
15162 return "Invalid root key";
15163 }
15164 return "";
15165 }
15166
38523d36
IC
15167 function getDerivationPath() {
15168 if (DOM.bip44tab.hasClass("active")) {
15169 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
15170 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
15171 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
15172 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
15173 var path = "m/";
15174 path += purpose + "'/";
15175 path += coin + "'/";
15176 path += account + "'/";
15177 path += change;
15178 DOM.bip44path.val(path);
15179 var derivationPath = DOM.bip44path.val();
15180 console.log("Using derivation path from BIP44 tab: " + derivationPath);
15181 return derivationPath;
15182 }
15183 else if (DOM.bip32tab.hasClass("active")) {
15184 var derivationPath = DOM.bip32path.val();
15185 console.log("Using derivation path from BIP32 tab: " + derivationPath);
15186 return derivationPath;
15187 }
15188 else {
15189 console.log("Unknown derivation path");
15190 }
15191 }
15192
ebd8d4e8 15193 function findDerivationPathErrors(path) {
30c9e79d
IC
15194 // TODO is not perfect but is better than nothing
15195 // Inspired by
15196 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
15197 // and
15198 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
15199 var maxDepth = 255; // TODO verify this!!
15200 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
15201 if (path[0] != "m") {
15202 return "First character must be 'm'";
15203 }
15204 if (path.length > 1) {
15205 if (path[1] != "/") {
15206 return "Separator must be '/'";
15207 }
15208 var indexes = path.split("/");
15209 if (indexes.length > maxDepth) {
15210 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
15211 }
15212 for (var depth = 1; depth<indexes.length; depth++) {
15213 var index = indexes[depth];
15214 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
15215 if (invalidChars.length > 0) {
15216 return "Invalid characters " + invalidChars + " found at depth " + depth;
15217 }
15218 var indexValue = parseInt(index.replace("'", ""));
15219 if (isNaN(depth)) {
15220 return "Invalid number at depth " + depth;
15221 }
15222 if (indexValue > maxIndexValue) {
15223 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
15224 }
15225 }
15226 }
ebd8d4e8
IC
15227 return false;
15228 }
15229
15230 function displayBip32Info() {
15231 // Display the key
73161a92 15232 DOM.seed.val(seed);
ebd8d4e8
IC
15233 var rootKey = bip32RootKey.toBase58();
15234 DOM.rootKey.val(rootKey);
15235 var extendedPrivKey = bip32ExtendedKey.toBase58();
15236 DOM.extendedPrivKey.val(extendedPrivKey);
15237 var extendedPubKey = bip32ExtendedKey.toBase58(false);
15238 DOM.extendedPubKey.val(extendedPubKey);
15239 // Display the addresses and privkeys
15240 clearAddressesList();
15241 displayAddresses(0, 20);
15242 }
15243
15244 function displayAddresses(start, total) {
15245 for (var i=0; i<total; i++) {
80c4dd2a
IC
15246 var index = i + start;
15247 new TableRow(index);
15248 }
15249 }
15250
15251 function TableRow(index) {
15252
1975bfbc
IC
15253 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
15254
80c4dd2a
IC
15255 function init() {
15256 calculateValues();
15257 }
15258
15259 function calculateValues() {
15260 setTimeout(function() {
1975bfbc
IC
15261 var key = "";
15262 if (useHardenedAddresses) {
15263 key = bip32ExtendedKey.deriveHardened(index);
15264 }
15265 else {
15266 key = bip32ExtendedKey.derive(index);
15267 }
80c4dd2a
IC
15268 var address = key.getAddress().toString();
15269 var privkey = key.privKey.toWIF(network);
38523d36 15270 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
15271 if (useHardenedAddresses) {
15272 indexText = indexText + "'";
15273 }
38523d36 15274 addAddressToList(indexText, address, privkey);
80c4dd2a 15275 }, 50)
ebd8d4e8 15276 }
80c4dd2a
IC
15277
15278 init();
15279
ebd8d4e8
IC
15280 }
15281
15282 function showMore() {
15283 var start = DOM.addresses.children().length;
15284 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
15285 if (isNaN(rowsToAdd)) {
15286 rowsToAdd = 20;
15287 DOM.rowsToAdd.val("20");
15288 }
15289 if (rowsToAdd > 200) {
15290 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
15291 msg += "Do you want to continue?";
15292 if (!confirm(msg)) {
15293 return;
15294 }
15295 }
ebd8d4e8 15296 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
15297 }
15298
15299 function clearDisplay() {
15300 clearAddressesList();
15301 clearKey();
15302 hideValidationError();
15303 }
15304
15305 function clearAddressesList() {
15306 DOM.addresses.empty();
15307 }
15308
15309 function clearKey() {
15310 DOM.rootKey.val("");
15311 DOM.extendedPrivKey.val("");
15312 DOM.extendedPubKey.val("");
15313 }
15314
38523d36 15315 function addAddressToList(indexText, address, privkey) {
ebd8d4e8 15316 var row = $(addressRowTemplate.html());
80c4dd2a
IC
15317 // Elements
15318 var indexCell = row.find(".index span");
15319 var addressCell = row.find(".address span");
15320 var privkeyCell = row.find(".privkey span");
15321 // Content
ae30fed8 15322 indexCell.text(indexText);
80c4dd2a
IC
15323 addressCell.text(address);
15324 privkeyCell.text(privkey);
15325 // Visibility
15326 if (!showIndex) {
15327 indexCell.addClass("invisible");
15328 }
15329 if (!showAddress) {
15330 addressCell.addClass("invisible");
15331 }
15332 if (!showPrivKey) {
6d628db7 15333 privkeyCell.addClass("invisible");
80c4dd2a 15334 }
ebd8d4e8
IC
15335 DOM.addresses.append(row);
15336 }
15337
15338 function hasStrongRandom() {
15339 return 'crypto' in window && window['crypto'] !== null;
15340 }
15341
15342 function disableForms() {
15343 $("form").on("submit", function(e) {
15344 e.preventDefault();
15345 });
15346 }
15347
ebd8d4e8
IC
15348 function parseIntNoNaN(val, defaultVal) {
15349 var v = parseInt(val);
15350 if (isNaN(v)) {
15351 return defaultVal;
15352 }
15353 return v;
15354 }
15355
15356 function showPending() {
15357 DOM.feedback
15358 .text("Calculating...")
15359 .show();
15360 }
15361
563e401a
IC
15362 function findNearestWord(word) {
15363 var words = WORDLISTS["english"];
15364 var minDistance = 99;
15365 var closestWord = words[0];
15366 for (var i=0; i<words.length; i++) {
15367 var comparedTo = words[i];
15368 var distance = Levenshtein.get(word, comparedTo);
15369 if (distance < minDistance) {
15370 closestWord = comparedTo;
15371 minDistance = distance;
15372 }
15373 }
15374 return closestWord;
15375 }
15376
ebd8d4e8
IC
15377 function hidePending() {
15378 DOM.feedback
15379 .text("")
15380 .hide();
15381 }
15382
ab78acc6
IC
15383 function populateNetworkSelect() {
15384 for (var i=0; i<networks.length; i++) {
15385 var network = networks[i];
15386 var option = $("<option>");
15387 option.attr("value", i);
15388 option.text(network.name);
15389 DOM.phraseNetwork.append(option);
15390 }
15391 }
15392
15393 var networks = [
15394 {
15395 name: "Bitcoin",
15396 onSelect: function() {
15397 network = bitcoin.networks.bitcoin;
15398 DOM.bip44coin.val(0);
ab78acc6
IC
15399 },
15400 },
15401 {
15402 name: "Bitcoin Testnet",
15403 onSelect: function() {
15404 network = bitcoin.networks.testnet;
15405 DOM.bip44coin.val(1);
ab78acc6
IC
15406 },
15407 },
15408 {
15409 name: "Litecoin",
15410 onSelect: function() {
15411 network = bitcoin.networks.litecoin;
15412 DOM.bip44coin.val(2);
15413 },
15414 },
15415 {
15416 name: "Dogecoin",
15417 onSelect: function() {
15418 network = bitcoin.networks.dogecoin;
15419 DOM.bip44coin.val(3);
15420 },
15421 },
d5dc92fd
IC
15422 {
15423 name: "ShadowCash",
15424 onSelect: function() {
15425 network = bitcoin.networks.shadow;
15426 DOM.bip44coin.val(35);
15427 },
15428 },
15429 {
15430 name: "ShadowCash Testnet",
15431 onSelect: function() {
15432 network = bitcoin.networks.shadowtn;
15433 DOM.bip44coin.val(1);
15434 },
15435 },
a3baa26e
IC
15436 {
15437 name: "Viacoin",
15438 onSelect: function() {
15439 network = bitcoin.networks.viacoin;
15440 DOM.bip44coin.val(14);
15441 },
15442 },
15443 {
15444 name: "Viacoin Testnet",
15445 onSelect: function() {
15446 network = bitcoin.networks.viacointestnet;
15447 DOM.bip44coin.val(1);
15448 },
15449 },
15450 {
15451 name: "Jumbucks",
15452 onSelect: function() {
15453 network = bitcoin.networks.jumbucks;
15454 DOM.bip44coin.val(26);
15455 },
15456 },
5c434a8a
CM
15457 {
15458 name: "CLAM",
15459 onSelect: function() {
15460 network = bitcoin.networks.clam;
15461 DOM.bip44coin.val(23);
15462 },
15463 },
5493efc3 15464 {
15465 name: "DASH",
15466 onSelect: function() {
15467 network = bitcoin.networks.dash;
15468 DOM.bip44coin.val(5);
15469 },
15470 },
07ac4350 15471 {
15472 name: "Namecoin",
15473 onSelect: function() {
15474 network = bitcoin.networks.namecoin;
15475 DOM.bip44coin.val(7);
15476 },
15477 },
15478 {
15479 name: "Peercoin",
15480 onSelect: function() {
15481 network = bitcoin.networks.peercoin;
15482 DOM.bip44coin.val(6);
15483 },
15484 },
ab78acc6
IC
15485 ]
15486
ebd8d4e8
IC
15487 init();
15488
15489})();
dc55c6b0 15490</script>
ebd8d4e8
IC
15491 </body>
15492</html>