]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Add CLAM.
[perso/Immae/Projets/Cryptomonnaies/BIP39.git] / bip39-standalone.html
CommitLineData
ebd8d4e8
IC
1<!DOCTYPE html>
2<html>
3 <head lang="en">
4 <meta charset="utf-8" />
5 <title>BIP39 - Mnemonic Code</title>
ab78acc6 6 <style>/*!
ebd8d4e8
IC
7 * Bootstrap v3.2.0 (http://getbootstrap.com)
8 * Copyright 2011-2014 Twitter, Inc.
9 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
10 *//*! normalize.css v3.0.1 | MIT License | git.io/normalize */html{font-family:sans-serif;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background:0 0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0;font-size:2em}mark{color:#000;background:#ff0}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{height:0;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{margin:0;font:inherit;color:inherit}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0}input{line-height:normal}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;-webkit-appearance:textfield}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{padding:.35em .625em .75em;margin:0 2px;border:1px solid silver}legend{padding:0;border:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-spacing:0;border-collapse:collapse}td,th{padding:0}@media print{*{color:#000!important;text-shadow:none!important;background:transparent!important;-webkit-box-shadow:none!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100%!important}p,h2,h3{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.table td,.table th{background-color:#fff!important}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table-bordered th,.table-bordered td{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),url(../fonts/glyphicons-halflings-regular.woff) format('woff'),url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}:before,:after{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}input,button,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#428bca;text-decoration:none}a:hover,a:focus{color:#2a6496;text-decoration:underline}a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.img-responsive,.thumbnail>img,.thumbnail a>img,.carousel-inner>.item>img,.carousel-inner>.item>a>img{display:block;width:100% \9;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{display:inline-block;width:100% \9;max-width:100%;height:auto;padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small,.h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small,h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small,.h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small{font-weight:400;line-height:1;color:#777}h1,.h1,h2,.h2,h3,.h3{margin-top:20px;margin-bottom:10px}h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small,h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small{font-size:65%}h4,.h4,h5,.h5,h6,.h6{margin-top:10px;margin-bottom:10px}h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small,h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small{font-size:75%}h1,.h1{font-size:36px}h2,.h2{font-size:30px}h3,.h3{font-size:24px}h4,.h4{font-size:18px}h5,.h5{font-size:14px}h6,.h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}small,.small{font-size:85%}cite{font-style:normal}mark,.mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#428bca}a.text-primary:hover{color:#3071a9}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#428bca}a.bg-primary:hover{background-color:#3071a9}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ul,ol{margin-top:0;margin-bottom:10px}ul ul,ol ul,ul ol,ol ol{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;margin-left:-5px;list-style:none}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dt,dd{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;overflow:hidden;clear:left;text-align:right;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[title],abbr[data-original-title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}blockquote footer,blockquote small,blockquote .small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote footer:before,blockquote small:before,blockquote .small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #eee;border-left:0}.blockquote-reverse footer:before,blockquote.pull-right footer:before,.blockquote-reverse small:before,blockquote.pull-right small:before,.blockquote-reverse .small:before,blockquote.pull-right .small:before{content:''}.blockquote-reverse footer:after,blockquote.pull-right footer:after,.blockquote-reverse small:after,blockquote.pull-right small:after,.blockquote-reverse .small:after,blockquote.pull-right .small:after{content:'\00A0 \2014'}blockquote:before,blockquote:after{content:""}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,"Courier New",monospace}code{padding:2px 4px;font-size:90%;color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:3px;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.25);box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;-webkit-box-shadow:none;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:13px;line-height:1.42857143;color:#333;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.container-fluid{padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{margin-right:-15px;margin-left:-15px}.col-xs-1,.col-sm-1,.col-md-1,.col-lg-1,.col-xs-2,.col-sm-2,.col-md-2,.col-lg-2,.col-xs-3,.col-sm-3,.col-md-3,.col-lg-3,.col-xs-4,.col-sm-4,.col-md-4,.col-lg-4,.col-xs-5,.col-sm-5,.col-md-5,.col-lg-5,.col-xs-6,.col-sm-6,.col-md-6,.col-lg-6,.col-xs-7,.col-sm-7,.col-md-7,.col-lg-7,.col-xs-8,.col-sm-8,.col-md-8,.col-lg-8,.col-xs-9,.col-sm-9,.col-md-9,.col-lg-9,.col-xs-10,.col-sm-10,.col-md-10,.col-lg-10,.col-xs-11,.col-sm-11,.col-md-11,.col-lg-11,.col-xs-12,.col-sm-12,.col-md-12,.col-lg-12{position:relative;min-height:1px;padding-right:15px;padding-left:15px}.col-xs-1,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.col-xs-10,.col-xs-11,.col-xs-12{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>th,.table>caption+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>td,.table>thead:first-child>tr:first-child>td{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>thead>tr>th,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>tbody>tr>td,.table-condensed>tfoot>tr>td{padding:5px}.table-bordered{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>tbody>tr>td,.table-bordered>tfoot>tr>td{border:1px solid #ddd}.table-bordered>thead>tr>th,.table-bordered>thead>tr>td{border-bottom-width:2px}.table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th{background-color:#f9f9f9}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#f5f5f5}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}.table>thead>tr>td.active,.table>tbody>tr>td.active,.table>tfoot>tr>td.active,.table>thead>tr>th.active,.table>tbody>tr>th.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>tbody>tr.active>td,.table>tfoot>tr.active>td,.table>thead>tr.active>th,.table>tbody>tr.active>th,.table>tfoot>tr.active>th{background-color:#f5f5f5}.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover,.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr.active:hover>th{background-color:#e8e8e8}.table>thead>tr>td.success,.table>tbody>tr>td.success,.table>tfoot>tr>td.success,.table>thead>tr>th.success,.table>tbody>tr>th.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>tbody>tr.success>td,.table>tfoot>tr.success>td,.table>thead>tr.success>th,.table>tbody>tr.success>th,.table>tfoot>tr.success>th{background-color:#dff0d8}.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover,.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr.success:hover>th{background-color:#d0e9c6}.table>thead>tr>td.info,.table>tbody>tr>td.info,.table>tfoot>tr>td.info,.table>thead>tr>th.info,.table>tbody>tr>th.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>tbody>tr.info>td,.table>tfoot>tr.info>td,.table>thead>tr.info>th,.table>tbody>tr.info>th,.table>tfoot>tr.info>th{background-color:#d9edf7}.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover,.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr.info:hover>th{background-color:#c4e3f3}.table>thead>tr>td.warning,.table>tbody>tr>td.warning,.table>tfoot>tr>td.warning,.table>thead>tr>th.warning,.table>tbody>tr>th.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>tbody>tr.warning>td,.table>tfoot>tr.warning>td,.table>thead>tr.warning>th,.table>tbody>tr.warning>th,.table>tfoot>tr.warning>th{background-color:#fcf8e3}.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover,.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr.warning:hover>th{background-color:#faf2cc}.table>thead>tr>td.danger,.table>tbody>tr>td.danger,.table>tfoot>tr>td.danger,.table>thead>tr>th.danger,.table>tbody>tr>th.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>tbody>tr.danger>td,.table>tfoot>tr.danger>td,.table>thead>tr.danger>th,.table>tbody>tr.danger>th,.table>tfoot>tr.danger>th{background-color:#f2dede}.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover,.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr.danger:hover>th{background-color:#ebcccc}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>thead>tr>th,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tfoot>tr>td{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>thead>tr>th:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.table-responsive>.table-bordered>thead>tr>th:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>th,.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>td{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=radio],input[type=checkbox]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=radio]:focus,input[type=checkbox]:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,-webkit-box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#777;opacity:1}.form-control:-ms-input-placeholder{color:#777}.form-control::-webkit-input-placeholder{color:#777}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{cursor:not-allowed;background-color:#eee;opacity:1}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:34px;line-height:1.42857143 \0}input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}.form-group{margin-bottom:15px}.radio,.checkbox{position:relative;display:block;min-height:20px;margin-top:10px;margin-bottom:10px}.radio label,.checkbox label{padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.radio input[type=radio],.radio-inline input[type=radio],.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox]{position:absolute;margin-top:4px \9;margin-left:-20px}.radio+.radio,.checkbox+.checkbox{margin-top:-5px}.radio-inline,.checkbox-inline{display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.radio-inline+.radio-inline,.checkbox-inline+.checkbox-inline{margin-top:0;margin-left:10px}input[type=radio][disabled],input[type=checkbox][disabled],input[type=radio].disabled,input[type=checkbox].disabled,fieldset[disabled] input[type=radio],fieldset[disabled] input[type=checkbox]{cursor:not-allowed}.radio-inline.disabled,.checkbox-inline.disabled,fieldset[disabled] .radio-inline,fieldset[disabled] .checkbox-inline{cursor:not-allowed}.radio.disabled label,.checkbox.disabled label,fieldset[disabled] .radio label,fieldset[disabled] .checkbox label{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm,.form-horizontal .form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}textarea.input-sm,select[multiple].input-sm{height:auto}.input-lg,.form-horizontal .form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-lg{height:46px;line-height:46px}textarea.input-lg,select[multiple].input-lg{height:auto}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:25px;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center}.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .help-block,.has-success .control-label,.has-success .radio,.has-success .checkbox,.has-success .radio-inline,.has-success .checkbox-inline{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .help-block,.has-warning .control-label,.has-warning .radio,.has-warning .checkbox,.has-warning .radio-inline,.has-warning .checkbox-inline{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;background-color:#fcf8e3;border-color:#8a6d3b}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .help-block,.has-error .control-label,.has-error .radio,.has-error .checkbox,.has-error .radio-inline,.has-error .checkbox-inline{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;background-color:#f2dede;border-color:#a94442}.has-error .form-control-feedback{color:#a94442}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn,.form-inline .input-group .form-control{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .radio,.form-inline .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .radio label,.form-inline .checkbox label{padding-left:0}.form-inline .radio input[type=radio],.form-inline .checkbox input[type=checkbox]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .radio,.form-horizontal .checkbox,.form-horizontal .radio-inline,.form-horizontal .checkbox-inline{padding-top:7px;margin-top:0;margin-bottom:0}.form-horizontal .radio,.form-horizontal .checkbox{min-height:27px}.form-horizontal .form-group{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.form-horizontal .control-label{padding-top:7px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{top:0;right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:14.3px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;vertical-align:middle;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-image:none;border:1px solid transparent;border-radius:4px}.btn:focus,.btn:active:focus,.btn.active:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn:hover,.btn:focus{color:#333;text-decoration:none}.btn:active,.btn.active{background-image:none;outline:0;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{pointer-events:none;cursor:not-allowed;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none;opacity:.65}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default:hover,.btn-default:focus,.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default:active,.btn-default.active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default[disabled],fieldset[disabled] .btn-default,.btn-default.disabled:hover,.btn-default[disabled]:hover,fieldset[disabled] .btn-default:hover,.btn-default.disabled:focus,.btn-default[disabled]:focus,fieldset[disabled] .btn-default:focus,.btn-default.disabled:active,.btn-default[disabled]:active,fieldset[disabled] .btn-default:active,.btn-default.disabled.active,.btn-default[disabled].active,fieldset[disabled] .btn-default.active{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#3071a9;border-color:#285e8e}.btn-primary:active,.btn-primary.active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary[disabled],fieldset[disabled] .btn-primary,.btn-primary.disabled:hover,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary:hover,.btn-primary.disabled:focus,.btn-primary[disabled]:focus,fieldset[disabled] .btn-primary:focus,.btn-primary.disabled:active,.btn-primary[disabled]:active,fieldset[disabled] .btn-primary:active,.btn-primary.disabled.active,.btn-primary[disabled].active,fieldset[disabled] .btn-primary.active{background-color:#428bca;border-color:#357ebd}.btn-primary .badge{color:#428bca;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success:active,.btn-success.active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success[disabled],fieldset[disabled] .btn-success,.btn-success.disabled:hover,.btn-success[disabled]:hover,fieldset[disabled] .btn-success:hover,.btn-success.disabled:focus,.btn-success[disabled]:focus,fieldset[disabled] .btn-success:focus,.btn-success.disabled:active,.btn-success[disabled]:active,fieldset[disabled] .btn-success:active,.btn-success.disabled.active,.btn-success[disabled].active,fieldset[disabled] .btn-success.active{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info:active,.btn-info.active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info[disabled],fieldset[disabled] .btn-info,.btn-info.disabled:hover,.btn-info[disabled]:hover,fieldset[disabled] .btn-info:hover,.btn-info.disabled:focus,.btn-info[disabled]:focus,fieldset[disabled] .btn-info:focus,.btn-info.disabled:active,.btn-info[disabled]:active,fieldset[disabled] .btn-info:active,.btn-info.disabled.active,.btn-info[disabled].active,fieldset[disabled] .btn-info.active{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning:active,.btn-warning.active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning[disabled],fieldset[disabled] .btn-warning,.btn-warning.disabled:hover,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning:hover,.btn-warning.disabled:focus,.btn-warning[disabled]:focus,fieldset[disabled] .btn-warning:focus,.btn-warning.disabled:active,.btn-warning[disabled]:active,fieldset[disabled] .btn-warning:active,.btn-warning.disabled.active,.btn-warning[disabled].active,fieldset[disabled] .btn-warning.active{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger:active,.btn-danger.active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger[disabled],fieldset[disabled] .btn-danger,.btn-danger.disabled:hover,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger:hover,.btn-danger.disabled:focus,.btn-danger[disabled]:focus,fieldset[disabled] .btn-danger:focus,.btn-danger.disabled:active,.btn-danger[disabled]:active,fieldset[disabled] .btn-danger:active,.btn-danger.disabled.active,.btn-danger[disabled].active,fieldset[disabled] .btn-danger.active{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{font-weight:400;color:#428bca;cursor:pointer;border-radius:0}.btn-link,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:hover,.btn-link:focus,.btn-link:active{border-color:transparent}.btn-link:hover,.btn-link:focus{color:#2a6496;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,fieldset[disabled] .btn-link:hover,.btn-link[disabled]:focus,fieldset[disabled] .btn-link:focus{color:#777;text-decoration:none}.btn-lg,.btn-group-lg>.btn{padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}.btn-sm,.btn-group-sm>.btn{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs,.btn-group-xs>.btn{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=submit].btn-block,input[type=reset].btn-block,input[type=button].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;-o-transition:height .35s ease;transition:height .35s ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px solid;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:14px;text-align:left;list-style:none;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:hover,.dropdown-menu>li>a:focus{color:#262626;text-decoration:none;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:hover,.dropdown-menu>.active>a:focus{color:#fff;text-decoration:none;background-color:#428bca;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{color:#777}.dropdown-menu>.disabled>a:hover,.dropdown-menu>.disabled>a:focus{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false)}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:4px solid}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:1px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;float:left}.btn-group>.btn:hover,.btn-group-vertical>.btn:hover,.btn-group>.btn:focus,.btn-group-vertical>.btn:focus,.btn-group>.btn:active,.btn-group-vertical>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn.active{z-index:2}.btn-group>.btn:focus,.btn-group-vertical>.btn:focus{outline:0}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child>.btn:last-child,.btn-group>.btn-group:first-child>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:4px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-left-radius:4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn>input[type=radio],[data-toggle=buttons]>.btn>input[type=checkbox]{position:absolute;z-index:-1;filter:alpha(opacity=0);opacity:0}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:46px;padding:10px 16px;font-size:18px;line-height:1.33;border-radius:6px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:46px;line-height:46px}textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn,select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn,select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn{height:auto}.input-group-addon,.input-group-btn,.input-group .form-control{display:table-cell}.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child),.input-group .form-control:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:4px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=radio],.input-group-addon input[type=checkbox]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group-btn:last-child>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:first-child>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:hover,.input-group-btn>.btn:focus,.input-group-btn>.btn:active{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:hover,.nav>li>a:focus{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:hover,.nav>li.disabled>a:focus{color:#777;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:hover,.nav .open>a:focus{background-color:#eee;border-color:#428bca}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:hover,.nav-tabs>li.active>a:focus{color:#555;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a:focus{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:hover,.nav-pills>li.active>a:focus{color:#fff;background-color:#428bca}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:hover,.nav-tabs-justified>.active>a:focus{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:4px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:15px;padding-left:15px;overflow-x:visible;-webkit-overflow-scrolling:touch;border-top:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1)}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;-webkit-box-shadow:none;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:340px}@media (max-width:480px) and (orientation:landscape){.navbar-fixed-top .navbar-collapse,.navbar-fixed-bottom .navbar-collapse{max-height:200px}}.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:-15px;margin-left:-15px}@media (min-width:768px){.container>.navbar-header,.container-fluid>.navbar-header,.container>.navbar-collapse,.container-fluid>.navbar-collapse{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-fixed-top,.navbar-fixed-bottom{position:fixed;right:0;left:0;z-index:1030;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@media (min-width:768px){.navbar-fixed-top,.navbar-fixed-bottom{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;height:50px;padding:15px 15px;font-size:18px;line-height:20px}.navbar-brand:hover,.navbar-brand:focus{text-decoration:none}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-top:8px;margin-right:15px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-nav .open .dropdown-menu>li>a,.navbar-nav .open .dropdown-menu .dropdown-header{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:hover,.navbar-nav .open .dropdown-menu>li>a:focus{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}.navbar-nav.navbar-right:last-child{margin-right:-15px}}@media (min-width:768px){.navbar-left{float:left!important}.navbar-right{float:right!important}}.navbar-form{padding:10px 15px;margin-top:8px;margin-right:-15px;margin-bottom:8px;margin-left:-15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn,.navbar-form .input-group .form-control{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .radio,.navbar-form .checkbox{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .radio label,.navbar-form .checkbox label{padding-left:0}.navbar-form .radio input[type=radio],.navbar-form .checkbox input[type=checkbox]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;-webkit-box-shadow:none;box-shadow:none}.navbar-form.navbar-right:last-child{margin-right:-15px}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:15px;margin-left:15px}.navbar-text.navbar-right:last-child{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:hover,.navbar-default .navbar-brand:focus{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:hover,.navbar-default .navbar-nav>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:hover,.navbar-default .navbar-nav>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:hover,.navbar-default .navbar-nav>.disabled>a:focus{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:hover,.navbar-default .navbar-toggle:focus{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:hover,.navbar-default .navbar-nav>.open>a:focus{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:hover,.navbar-default .btn-link:focus{color:#333}.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:hover,.navbar-default .btn-link[disabled]:focus,fieldset[disabled] .navbar-default .btn-link:focus{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#777}.navbar-inverse .navbar-brand:hover,.navbar-inverse .navbar-brand:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#777}.navbar-inverse .navbar-nav>li>a{color:#777}.navbar-inverse .navbar-nav>li>a:hover,.navbar-inverse .navbar-nav>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:hover,.navbar-inverse .navbar-nav>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:hover,.navbar-inverse .navbar-nav>.disabled>a:focus{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:hover,.navbar-inverse .navbar-toggle:focus{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:hover,.navbar-inverse .navbar-nav>.open>a:focus{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#777}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#777}.navbar-inverse .btn-link:hover,.navbar-inverse .btn-link:focus{color:#fff}.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:hover,.navbar-inverse .btn-link[disabled]:focus,fieldset[disabled] .navbar-inverse .btn-link:focus{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#ccc;content:"/\00a0"}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;margin-left:-1px;line-height:1.42857143;color:#428bca;text-decoration:none;background-color:#fff;border:1px solid #ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:4px;border-bottom-right-radius:4px}.pagination>li>a:hover,.pagination>li>span:hover,.pagination>li>a:focus,.pagination>li>span:focus{color:#2a6496;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>span,.pagination>.active>a:hover,.pagination>.active>span:hover,.pagination>.active>a:focus,.pagination>.active>span:focus{z-index:2;color:#fff;cursor:default;background-color:#428bca;border-color:#428bca}.pagination>.disabled>span,.pagination>.disabled>span:hover,.pagination>.disabled>span:focus,.pagination>.disabled>a,.pagination>.disabled>a:hover,.pagination>.disabled>a:focus{color:#777;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:6px;border-bottom-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:6px;border-bottom-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:3px;border-bottom-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:3px;border-bottom-right-radius:3px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:hover,.pager li>a:focus{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:hover,.pager .disabled>a:focus,.pager .disabled>span{color:#777;cursor:not-allowed;background-color:#fff}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:hover,a.label:focus{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:hover,.label-default[href]:focus{background-color:#5e5e5e}.label-primary{background-color:#428bca}.label-primary[href]:hover,.label-primary[href]:focus{background-color:#3071a9}.label-success{background-color:#5cb85c}.label-success[href]:hover,.label-success[href]:focus{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:hover,.label-info[href]:focus{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:hover,.label-warning[href]:focus{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:hover,.label-danger[href]:focus{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-xs .badge{top:0;padding:1px 5px}a.badge:hover,a.badge:focus{color:#fff;text-decoration:none;cursor:pointer}a.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#428bca;background-color:#fff}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron h1,.jumbotron .h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron{border-radius:6px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron{padding-right:60px;padding-left:60px}.jumbotron h1,.jumbotron .h1{font-size:63px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.thumbnail>img,.thumbnail a>img{margin-right:auto;margin-left:auto}a.thumbnail:hover,a.thumbnail:focus,a.thumbnail.active{border-color:#428bca}.thumbnail .caption{padding:9px;color:#333}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@-o-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#f5f5f5;border-radius:4px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:20px;color:#fff;text-align:center;background-color:#428bca;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-striped .progress-bar,.progress-bar-striped{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);-webkit-background-size:40px 40px;background-size:40px 40px}.progress.active .progress-bar,.progress-bar.active{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar[aria-valuenow="1"],.progress-bar[aria-valuenow="2"]{min-width:30px}.progress-bar[aria-valuenow="0"]{min-width:30px;color:#777;background-color:transparent;background-image:none;-webkit-box-shadow:none;box-shadow:none}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media,.media-body{overflow:hidden;zoom:1}.media,.media .media{margin-top:15px}.media:first-child{margin-top:0}.media-object{display:block}.media-heading{margin:0 0 5px}.media>.pull-left{margin-right:10px}.media>.pull-right{margin-left:10px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:hover,a.list-group-item:focus{color:#555;text-decoration:none;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:hover,.list-group-item.disabled:focus{color:#777;background-color:#eee}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:hover,.list-group-item.active:focus{z-index:2;color:#fff;background-color:#428bca;border-color:#428bca}.list-group-item.active .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>.small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:hover .list-group-item-text,.list-group-item.active:focus .list-group-item-text{color:#e1edf7}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:hover,a.list-group-item-success:focus{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:hover,a.list-group-item-success.active:focus{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:hover,a.list-group-item-info:focus{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:hover,a.list-group-item-info.active:focus{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:hover,a.list-group-item-warning:focus{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:hover,a.list-group-item-warning.active:focus{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:hover,a.list-group-item-danger:focus{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:hover,a.list-group-item-danger.active:focus{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:3px;border-top-right-radius:3px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:16px;color:inherit}.panel-title>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group{margin-bottom:0}.panel>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:3px;border-top-right-radius:3px}.panel>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.table,.panel>.table-responsive>.table,.panel>.panel-collapse>.table{margin-bottom:0}.panel>.table:first-child,.panel>.table-responsive:first-child>.table:first-child{border-top-left-radius:3px;border-top-right-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table:last-child,.panel>.table-responsive:last-child>.table:last-child{border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child th,.panel>.table>tbody:first-child>tr:first-child td{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child{border-left:0}.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child{border-right:0}.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#428bca}.panel-primary>.panel-heading{color:#fff;background-color:#428bca;border-color:#428bca}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#428bca}.panel-primary>.panel-heading .badge{color:#428bca;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#428bca}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive iframe,.embed-responsive embed,.embed-responsive object{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;filter:alpha(opacity=20);opacity:.2}.close:hover,.close:focus{color:#000;text-decoration:none;cursor:pointer;filter:alpha(opacity=50);opacity:.5}button.close{-webkit-appearance:none;padding:0;cursor:pointer;background:0 0;border:0}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out;-webkit-transform:translate3d(0,-25%,0);-o-transform:translate3d(0,-25%,0);transform:translate3d(0,-25%,0)}.modal.in .modal-dialog{-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;outline:0;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}.modal-header{min-height:16.43px;padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-size:12px;line-height:1.4;visibility:visible;filter:alpha(opacity=0);opacity:0}.tooltip.in{filter:alpha(opacity=90);opacity:.9}.tooltip.top{padding:5px 0;margin-top:-3px}.tooltip.right{padding:0 5px;margin-left:3px}.tooltip.bottom{padding:5px 0;margin-top:3px}.tooltip.left{padding:0 5px;margin-left:-3px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;left:5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{right:5px;bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;left:5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;right:5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;white-space:normal;background-color:#fff;-webkit-background-clip:padding-box;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{padding:8px 14px;margin:0;font-size:14px;font-weight:400;line-height:18px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:rgba(0,0,0,.25);border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:rgba(0,0,0,.25);border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25)}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>img,.carousel-inner>.item>a>img{line-height:1}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);filter:alpha(opacity=50);opacity:.5}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.5)),to(rgba(0,0,0,.0001)));background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-webkit-gradient(linear,left top,right top,from(rgba(0,0,0,.0001)),to(rgba(0,0,0,.5)));background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);background-repeat:repeat-x}.carousel-control:hover,.carousel-control:focus{color:#fff;text-decoration:none;filter:alpha(opacity=90);outline:0;opacity:.9}.carousel-control .icon-prev,.carousel-control .icon-next,.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .icon-prev,.carousel-control .glyphicon-chevron-left{left:50%;margin-left:-10px}.carousel-control .icon-next,.carousel-control .glyphicon-chevron-right{right:50%;margin-right:-10px}.carousel-control .icon-prev,.carousel-control .icon-next{width:20px;height:20px;margin-top:-10px;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-prev,.carousel-control .icon-next{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:before,.clearfix:after,.dl-horizontal dd:before,.dl-horizontal dd:after,.container:before,.container:after,.container-fluid:before,.container-fluid:after,.row:before,.row:after,.form-horizontal .form-group:before,.form-horizontal .form-group:after,.btn-toolbar:before,.btn-toolbar:after,.btn-group-vertical>.btn-group:before,.btn-group-vertical>.btn-group:after,.nav:before,.nav:after,.navbar:before,.navbar:after,.navbar-header:before,.navbar-header:after,.navbar-collapse:before,.navbar-collapse:after,.pager:before,.pager:after,.panel-body:before,.panel-body:after,.modal-footer:before,.modal-footer:after{display:table;content:" "}.clearfix:after,.dl-horizontal dd:after,.container:after,.container-fluid:after,.row:after,.form-horizontal .form-group:after,.btn-toolbar:after,.btn-group-vertical>.btn-group:after,.nav:after,.navbar:after,.navbar-header:after,.navbar-collapse:after,.pager:after,.panel-body:after,.modal-footer:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important;visibility:hidden!important}.affix{position:fixed;-webkit-transform:translate3d(0,0,0);-o-transform:translate3d(0,0,0);transform:translate3d(0,0,0)}@-ms-viewport{width:device-width}.visible-xs,.visible-sm,.visible-md,.visible-lg{display:none!important}.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}th.visible-xs,td.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}th.visible-sm,td.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}th.visible-md,td.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}th.visible-lg,td.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}th.visible-print,td.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}</style>
11 <meta content="Mnemonic code for generating deterministic keys" name="description"/>
12 <meta content="width=device-width, initial-scale=1.0" name="viewport" />
13 <meta content="bitcoin mnemonic converter" name="description" />
14 <meta content="DC POS" name="author" />
3af2954a 15
ab78acc6
IC
16 <style>
17 body {
18 padding-bottom: 32px;
19 }
20 .form-control[readonly] {
21 cursor: text;
22 }
23 .feedback-container {
24 position: fixed;
25 top: 0;
26 width: 100%;
27 text-align: center;
28 z-index: 4;
29 }
30 .feedback {
31 display: table;
32 padding: 0.5em 1em;
33 background-color: orange;
34 margin: 0 auto;
35 font-size: 2em;
36 color: #444;
37 border: 2px solid #555;
38 border-top: 0;
39 border-bottom-left-radius: 20px 20px;
40 border-bottom-right-radius: 20px 20px;
41 }
d5dc92fd
IC
42 .no-border {
43 border: 0;
44 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
45 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 }
ab78acc6
IC
47 </style>
48 </head>
49 <body>
50 <div class="container">
3af2954a 51
ab78acc6
IC
52 <h1 class="text-center">Mnemonic Code Converter</h1>
53 <hr>
54 <div class="row">
55 <div class="col-md-12">
56 <h2>Mnemonic</h2>
57 <form class="form-horizontal" role="form">
58 <div class="col-sm-2"></div>
59 <div class="col-sm-10">
60 <p>You can enter an existing BIP39 mnemonic, or generate a new random one. Typing your own twelve words will probably not work how you expect, since the words require a particular structure (the last word is a checksum)</p>
61 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a></p>
62 </div>
63 <div class="form-group">
64 <label for="phrase" class="col-sm-2 control-label">BIP39 Mnemonic</label>
65 <div class="col-sm-10">
66 <textarea id="phrase" class="phrase form-control"></textarea>
67 </div>
68 </div>
69 <div class="form-group">
70 <label for="strength" class="col-sm-2 control-label">Number of words</label>
71 <div class="col-sm-10">
72 <div class="input-group">
73 <input type="number" class="strength form-control" id="strength" value="12">
74 <span class="input-group-btn">
75 <button class="btn generate">Generate Random Mnemonic</button>
76 </span>
77 </div>
78 </div>
79 </div>
80 <div class="form-group">
81 <label for="passphrase" class="col-sm-2 control-label">BIP39 Passphrase (optional)</label>
82 <div class="col-sm-10">
83 <textarea id="passphrase" class="passphrase form-control"></textarea>
84 </div>
85 </div>
86 <div class="form-group">
87 <label for="network-phrase" class="col-sm-2 control-label">Coin</label>
88 <div class="col-sm-10">
89 <select id="network-phrase" class="network form-control">
90 <!-- populated by javascript -->
91 </select>
92 </div>
93 </div>
94 <div class="form-group">
95 <label for="root-key" class="col-sm-2 control-label">BIP32 Root Key</label>
96 <div class="col-sm-10">
97 <textarea id="root-key" class="root-key form-control" readonly="readonly"></textarea>
98 </div>
99 </div>
100 </form>
101 </div>
102 </div>
3af2954a 103
ab78acc6 104 <hr>
3af2954a 105
ab78acc6
IC
106 <div class="row">
107 <div class="col-md-12">
108 <h2>Derivation Path</h2>
109 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 110 <li id="bip44-tab" class="active">
ab78acc6
IC
111 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
112 </li>
113 <li id="bip32-tab">
114 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
115 </li>
116 </ul>
117 <div class="derivation-type tab-content">
d5dc92fd 118 <div id="bip44" class="tab-pane active">
ab78acc6
IC
119 <form class="form-horizontal" role="form">
120 <br>
121 <div class="col-sm-2"></div>
122 <div class="col-sm-10">
123 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a></p>
124 </div>
125 <div class="form-group">
126 <label for="purpose" class="col-sm-2 control-label">
127 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank">Purpose</a>
128 </label>
129 <div class="col-sm-10">
130 <input id="purpose" type="text" class="purpose form-control" value="44">
131 </div>
132 </div>
133 <div class="form-group">
134 <label for="coin" class="col-sm-2 control-label">
135 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank">Coin</a>
136 </label>
137 <div class="col-sm-10">
138 <input id="coin" type="text" class="coin form-control" value="0">
139 </div>
140 </div>
141 <div class="form-group">
142 <label for="account" class="col-sm-2 control-label">
143 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank">Account</a>
144 </label>
145 <div class="col-sm-10">
146 <input id="account" type="text" class="account form-control" value="0">
147 </div>
148 </div>
149 <div class="form-group">
150 <label for="change" class="col-sm-2 control-label">
151 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank">External / Internal</a>
152 </label>
153 <div class="col-sm-10">
154 <input id="change" type="text" class="change form-control" value="0">
155 </div>
156 </div>
157 <div class="form-group">
158 <label for="bip44-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
159 <div class="col-sm-10">
160 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
161 </div>
162 </div>
163 </form>
164 </div>
165 <div id="bip32" class="tab-pane">
166 <form class="form-horizontal" role="form">
167 <br>
168 <div class="col-sm-2"></div>
169 <div class="col-sm-10">
170 <p>For more info see the <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a></p>
171 </div>
172 <div class="form-group">
173 <label for="bip32-path" class="col-sm-2 control-label">BIP32 Derivation Path</label>
174 <div class="col-sm-10">
175 <input id="bip32-path" type="text" class="path form-control" value="m/0">
176 </div>
177 </div>
d5dc92fd
IC
178 <div class="form-group">
179 <label class="col-sm-2 control-label">Hive Wallet</label>
180 <div class="col-sm-10">
181 <p class="form-control no-border">
182 Use path <code>m/0'/0</code>.
183 For more info see the <a href="https://www.hivewallet.com/" target="_blank">Hive Wallet homepage</a>
184 </p>
185 </div>
186 </div>
187 <div class="form-group">
188 <label for="mycelium-path" class="col-sm-2 control-label">Mycelium Wallet</label>
189 <div class="col-sm-10">
190 <p class="form-control no-border">
191 Use path <code>m/44'/0'/0'/0</code>.
192 For more info see the <a href="http://www.mycelium.com/" target="_blank">Mycelium Wallet homepage</a>
193 </p>
194 </div>
195 </div>
ab78acc6
IC
196 </form>
197 </div>
198 </div>
199 <form class="form-horizontal" role="form">
200 <div class="form-group">
201 <label for="extended-priv-key" class="col-sm-2 control-label">BIP32 Extended Key</label>
202 <div class="col-sm-10">
203 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly"></textarea>
204 </div>
205 </div>
206 <div class="form-group">
207 <label for="extended-pub-key" class="col-sm-2 control-label">BIP32 Extended Key (addresses only)</label>
208 <div class="col-sm-10">
209 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly"></textarea>
210 </div>
211 </div>
212 </form>
213 </div>
214 </div>
3af2954a 215
ab78acc6 216 <hr>
3af2954a 217
ab78acc6
IC
218 <div class="row">
219 <div class="col-md-12">
220 <h2>Derived Addresses</h2>
221 <p>Note these addreses are derived from the <strong>BIP32 Extended Key</strong></p>
222 <table class="table table-striped">
223 <thead>
224 <th>
225 <div class="input-group">
ae30fed8 226 Path&nbsp;&nbsp;
ab78acc6
IC
227 <button class="index-toggle">Toggle</button>
228 </div>
229 </th>
230 <th>
231 <div class="input-group">
232 Address&nbsp;&nbsp;
233 <button class="address-toggle">Toggle</button>
234 </div>
235 </th>
236 <th>
237 <div class="input-group">
238 Private Key&nbsp;&nbsp;
239 <button class="private-key-toggle">Toggle</button>
240 </div>
241 </th>
242 </thead>
243 <tbody class="addresses">
244 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
245 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
246 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
247 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
248 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
249 </tbody>
250 </table>
251 </div>
252 </div>
253 <span>Show next </button>
254 <input type="number" class="rows-to-add" value="20">
255 <button class="more">Show</button>
3af2954a 256
ab78acc6 257 <hr>
3af2954a 258
ab78acc6
IC
259 <div class="row">
260 <div class="col-md-12">
261 <h2>More info</h2>
262 <h3>BIP39 <span class="small">Mnemonic code for generating deterministic keys</span></h3>
263 <p>
264 Read more at the
265 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
266 </p>
267 <h3>BIP32 <span class="small">Hierarchical Deterministic Wallets</span></h3>
268 <p>
269 Read more at the
270 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
271 and see the demo at
272 <a href="http://bip32.org/" target="_blank">bip32.org</a>
273 </p>
274 <h3>BIP44 <span class="small">Multi-Account Hierarchy for Deterministic Wallets</span></h3>
275 <p>
276 Read more at the
277 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
278 </p>
279 <h3>Private Keys</h3>
280 <p>
281 Use private keys at
282 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>,
283 but be careful - it can be easy to make mistakes if you
284 don't know what you're doing
285 </p>
286 </div>
287 </div>
3af2954a 288
ab78acc6 289 <hr>
3af2954a 290
ab78acc6
IC
291 <div class="row">
292 <div class="col-md-12">
3af2954a 293
ab78acc6 294 <h2>Offline Usage</h2>
3af2954a 295
ab78acc6
IC
296 <p>
297 You can use this tool without having to be online.
298 </p>
299 <p>
300 In your browser, select file save-as, and save this page
301 as a file.
302 </p>
303 <p>
304 Double-click that file to open it in a browser
305 on any offline computer.
306 </p>
307 <p>
308 Alternatively, download it from
309 <a href="https://github.com/dcpos/bip39">
310 https://github.com/dcpos/bip39
311 </a>
3af2954a 312
ab78acc6
IC
313 </div>
314 </div>
3af2954a 315
ab78acc6 316 <hr>
3af2954a 317
ab78acc6
IC
318 <div class="row">
319 <div class="col-md-12">
3af2954a 320
ab78acc6 321 <h2>This project is 100% open-source code</h2>
3af2954a 322
ab78acc6
IC
323 <p>
324 <span>Get the source code at - </span>
325 <a href="https://github.com/dcpos/bip39" target="_blank">
326 https://github.com/dcpos/bip39
327 </a>
328 </p>
3af2954a 329
ab78acc6 330 <h3>Libraries</h3>
3af2954a 331
ab78acc6
IC
332 <p>
333 <span>BitcoinJS - </span>
334 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
335 https://github.com/bitcoinjs/bitcoinjs-lib
336 </a>
337 </p>
3af2954a 338
ab78acc6
IC
339 <p>
340 <span>jsBIP39 - </span>
341 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
342 https://github.com/iancoleman/jsbip39
343 </a>
344 </p>
3af2954a 345
ab78acc6
IC
346 <p>
347 <span>sjcl - </span>
348 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
349 https://github.com/bitwiseshiftleft/sjcl
350 </a>
351 </p>
3af2954a 352
ab78acc6
IC
353 <p>
354 <span>jQuery - </span>
355 <a href="https://jquery.com/" target="_blank">
356 https://jquery.com/
357 </a>
358 </p>
3af2954a 359
ab78acc6
IC
360 <p>
361 <span>Twitter Bootstrap - </span>
362 <a href="http://getbootstrap.com/" target="_blank">
363 http://getbootstrap.com/
364 </a>
365 </p>
3af2954a 366
ab78acc6
IC
367 </div>
368 </div>
3af2954a 369
ab78acc6 370 </div>
3af2954a 371
ab78acc6
IC
372 <div class="feedback-container">
373 <div class="feedback">Loading...</div>
374 </div>
3af2954a 375
ab78acc6
IC
376 <script type="text/template" id="address-row-template">
377 <tr>
378 <td class="index"><span></span></td>
379 <td class="address"><span></span></td>
380 <td class="privkey"><span></span></td>
381 </tr>
382 </script>
383 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
384!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)
385},_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))
386},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});
387</script>
388 <script>/*!
389 * Bootstrap v3.2.0 (http://getbootstrap.com)
3af2954a
IC
390 * Copyright 2011-2014 Twitter, Inc.
391 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
ab78acc6
IC
392 */
393if("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>
394 <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){
395// (public) Constructor
396function BigInteger(a, b, c) {
397 if (!(this instanceof BigInteger))
398 return new BigInteger(a, b, c)
3af2954a 399
ab78acc6
IC
400 if (a != null) {
401 if ("number" == typeof a) this.fromNumber(a, b, c)
402 else if (b == null && "string" != typeof a) this.fromString(a, 256)
403 else this.fromString(a, b)
404 }
405}
3af2954a 406
ab78acc6 407var proto = BigInteger.prototype
3af2954a 408
ab78acc6
IC
409// duck-typed isBigInteger
410proto.__bigi = require('../package.json').version
411BigInteger.isBigInteger = function (obj, check_ver) {
412 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
413}
3af2954a 414
ab78acc6
IC
415// Bits per digit
416var dbits
3af2954a 417
ab78acc6
IC
418// am: Compute w_j += (x*this_i), propagate carries,
419// c is initial carry, returns final carry.
420// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
421// We need to select the fastest one that works in this environment.
3af2954a 422
ab78acc6
IC
423// am1: use a single mult and divide to get the high bits,
424// max digit bits should be 26 because
425// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
426function am1(i, x, w, j, c, n) {
427 while (--n >= 0) {
428 var v = x * this[i++] + w[j] + c
429 c = Math.floor(v / 0x4000000)
430 w[j++] = v & 0x3ffffff
3af2954a 431 }
ab78acc6
IC
432 return c
433}
434// am2 avoids a big mult-and-extract completely.
435// Max digit bits should be <= 30 because we do bitwise ops
436// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
437function am2(i, x, w, j, c, n) {
438 var xl = x & 0x7fff,
439 xh = x >> 15
440 while (--n >= 0) {
441 var l = this[i] & 0x7fff
442 var h = this[i++] >> 15
443 var m = xh * l + h * xl
444 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
445 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
446 w[j++] = l & 0x3fffffff
447 }
448 return c
449}
450// Alternately, set max digit bits to 28 since some
451// browsers slow down when dealing with 32-bit numbers.
452function am3(i, x, w, j, c, n) {
453 var xl = x & 0x3fff,
454 xh = x >> 14
455 while (--n >= 0) {
456 var l = this[i] & 0x3fff
457 var h = this[i++] >> 14
458 var m = xh * l + h * xl
459 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
460 c = (l >> 28) + (m >> 14) + xh * h
461 w[j++] = l & 0xfffffff
3af2954a 462 }
ab78acc6
IC
463 return c
464}
3af2954a 465
ab78acc6
IC
466// wtf?
467BigInteger.prototype.am = am1
468dbits = 26
3af2954a 469
ab78acc6
IC
470BigInteger.prototype.DB = dbits
471BigInteger.prototype.DM = ((1 << dbits) - 1)
472var DV = BigInteger.prototype.DV = (1 << dbits)
3af2954a 473
ab78acc6
IC
474var BI_FP = 52
475BigInteger.prototype.FV = Math.pow(2, BI_FP)
476BigInteger.prototype.F1 = BI_FP - dbits
477BigInteger.prototype.F2 = 2 * dbits - BI_FP
3af2954a 478
ab78acc6
IC
479// Digit conversions
480var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
481var BI_RC = new Array()
482var rr, vv
483rr = "0".charCodeAt(0)
484for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
485rr = "a".charCodeAt(0)
486for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
487rr = "A".charCodeAt(0)
488for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
3af2954a 489
ab78acc6
IC
490function int2char(n) {
491 return BI_RM.charAt(n)
492}
3af2954a 493
ab78acc6
IC
494function intAt(s, i) {
495 var c = BI_RC[s.charCodeAt(i)]
496 return (c == null) ? -1 : c
497}
3af2954a 498
ab78acc6
IC
499// (protected) copy this to r
500function bnpCopyTo(r) {
501 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
502 r.t = this.t
503 r.s = this.s
504}
3af2954a 505
ab78acc6
IC
506// (protected) set from integer value x, -DV <= x < DV
507function bnpFromInt(x) {
508 this.t = 1
509 this.s = (x < 0) ? -1 : 0
510 if (x > 0) this[0] = x
511 else if (x < -1) this[0] = x + DV
512 else this.t = 0
513}
3af2954a 514
ab78acc6
IC
515// return bigint initialized to value
516function nbv(i) {
517 var r = new BigInteger()
518 r.fromInt(i)
519 return r
520}
3af2954a 521
ab78acc6
IC
522// (protected) set from string and radix
523function bnpFromString(s, b) {
524 var self = this
3af2954a 525
ab78acc6
IC
526 var k
527 if (b == 16) k = 4
528 else if (b == 8) k = 3
529 else if (b == 256) k = 8; // byte array
530 else if (b == 2) k = 1
531 else if (b == 32) k = 5
532 else if (b == 4) k = 2
533 else {
534 self.fromRadix(s, b)
535 return
536 }
537 self.t = 0
538 self.s = 0
539 var i = s.length,
540 mi = false,
541 sh = 0
542 while (--i >= 0) {
543 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
544 if (x < 0) {
545 if (s.charAt(i) == "-") mi = true
546 continue
547 }
548 mi = false
549 if (sh == 0)
550 self[self.t++] = x
551 else if (sh + k > self.DB) {
552 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
553 self[self.t++] = (x >> (self.DB - sh))
554 } else
555 self[self.t - 1] |= x << sh
556 sh += k
557 if (sh >= self.DB) sh -= self.DB
558 }
559 if (k == 8 && (s[0] & 0x80) != 0) {
560 self.s = -1
561 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
562 }
563 self.clamp()
564 if (mi) BigInteger.ZERO.subTo(self, self)
565}
3af2954a 566
ab78acc6
IC
567// (protected) clamp off excess high words
568function bnpClamp() {
569 var c = this.s & this.DM
570 while (this.t > 0 && this[this.t - 1] == c)--this.t
571}
3af2954a 572
ab78acc6
IC
573// (public) return string representation in given radix
574function bnToString(b) {
575 var self = this
576 if (self.s < 0) return "-" + self.negate()
577 .toString(b)
578 var k
579 if (b == 16) k = 4
580 else if (b == 8) k = 3
581 else if (b == 2) k = 1
582 else if (b == 32) k = 5
583 else if (b == 4) k = 2
584 else return self.toRadix(b)
585 var km = (1 << k) - 1,
586 d, m = false,
587 r = "",
588 i = self.t
589 var p = self.DB - (i * self.DB) % k
590 if (i-- > 0) {
591 if (p < self.DB && (d = self[i] >> p) > 0) {
592 m = true
593 r = int2char(d)
594 }
595 while (i >= 0) {
596 if (p < k) {
597 d = (self[i] & ((1 << p) - 1)) << (k - p)
598 d |= self[--i] >> (p += self.DB - k)
599 } else {
600 d = (self[i] >> (p -= k)) & km
601 if (p <= 0) {
602 p += self.DB
603 --i
604 }
605 }
606 if (d > 0) m = true
607 if (m) r += int2char(d)
3af2954a 608 }
3af2954a 609 }
ab78acc6
IC
610 return m ? r : "0"
611}
3af2954a 612
ab78acc6
IC
613// (public) -this
614function bnNegate() {
615 var r = new BigInteger()
616 BigInteger.ZERO.subTo(this, r)
617 return r
618}
3af2954a 619
ab78acc6
IC
620// (public) |this|
621function bnAbs() {
622 return (this.s < 0) ? this.negate() : this
623}
3af2954a 624
ab78acc6
IC
625// (public) return + if this > a, - if this < a, 0 if equal
626function bnCompareTo(a) {
627 var r = this.s - a.s
628 if (r != 0) return r
629 var i = this.t
630 r = i - a.t
631 if (r != 0) return (this.s < 0) ? -r : r
632 while (--i >= 0)
633 if ((r = this[i] - a[i]) != 0) return r
634 return 0
635}
3af2954a 636
ab78acc6
IC
637// returns bit length of the integer x
638function nbits(x) {
639 var r = 1,
640 t
641 if ((t = x >>> 16) != 0) {
642 x = t
643 r += 16
644 }
645 if ((t = x >> 8) != 0) {
646 x = t
647 r += 8
648 }
649 if ((t = x >> 4) != 0) {
650 x = t
651 r += 4
652 }
653 if ((t = x >> 2) != 0) {
654 x = t
655 r += 2
3af2954a 656 }
ab78acc6
IC
657 if ((t = x >> 1) != 0) {
658 x = t
659 r += 1
660 }
661 return r
662}
663
664// (public) return the number of bits in "this"
665function bnBitLength() {
666 if (this.t <= 0) return 0
667 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
668}
3af2954a 669
ab78acc6
IC
670// (public) return the number of bytes in "this"
671function bnByteLength() {
672 return this.bitLength() >> 3
673}
3af2954a 674
ab78acc6
IC
675// (protected) r = this << n*DB
676function bnpDLShiftTo(n, r) {
677 var i
678 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
679 for (i = n - 1; i >= 0; --i) r[i] = 0
680 r.t = this.t + n
681 r.s = this.s
682}
3af2954a 683
ab78acc6
IC
684// (protected) r = this >> n*DB
685function bnpDRShiftTo(n, r) {
686 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
687 r.t = Math.max(this.t - n, 0)
688 r.s = this.s
689}
3af2954a 690
ab78acc6
IC
691// (protected) r = this << n
692function bnpLShiftTo(n, r) {
693 var self = this
694 var bs = n % self.DB
695 var cbs = self.DB - bs
696 var bm = (1 << cbs) - 1
697 var ds = Math.floor(n / self.DB),
698 c = (self.s << bs) & self.DM,
699 i
700 for (i = self.t - 1; i >= 0; --i) {
701 r[i + ds + 1] = (self[i] >> cbs) | c
702 c = (self[i] & bm) << bs
703 }
704 for (i = ds - 1; i >= 0; --i) r[i] = 0
705 r[ds] = c
706 r.t = self.t + ds + 1
707 r.s = self.s
708 r.clamp()
709}
3af2954a 710
ab78acc6
IC
711// (protected) r = this >> n
712function bnpRShiftTo(n, r) {
713 var self = this
714 r.s = self.s
715 var ds = Math.floor(n / self.DB)
716 if (ds >= self.t) {
717 r.t = 0
718 return
3af2954a 719 }
ab78acc6
IC
720 var bs = n % self.DB
721 var cbs = self.DB - bs
722 var bm = (1 << bs) - 1
723 r[0] = self[ds] >> bs
724 for (var i = ds + 1; i < self.t; ++i) {
725 r[i - ds - 1] |= (self[i] & bm) << cbs
726 r[i - ds] = self[i] >> bs
727 }
728 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
729 r.t = self.t - ds
730 r.clamp()
731}
3af2954a 732
ab78acc6
IC
733// (protected) r = this - a
734function bnpSubTo(a, r) {
735 var self = this
736 var i = 0,
737 c = 0,
738 m = Math.min(a.t, self.t)
739 while (i < m) {
740 c += self[i] - a[i]
741 r[i++] = c & self.DM
742 c >>= self.DB
743 }
744 if (a.t < self.t) {
745 c -= a.s
746 while (i < self.t) {
747 c += self[i]
748 r[i++] = c & self.DM
749 c >>= self.DB
750 }
751 c += self.s
752 } else {
753 c += self.s
754 while (i < a.t) {
755 c -= a[i]
756 r[i++] = c & self.DM
757 c >>= self.DB
758 }
759 c -= a.s
760 }
761 r.s = (c < 0) ? -1 : 0
762 if (c < -1) r[i++] = self.DV + c
763 else if (c > 0) r[i++] = c
764 r.t = i
765 r.clamp()
766}
3af2954a 767
ab78acc6
IC
768// (protected) r = this * a, r != this,a (HAC 14.12)
769// "this" should be the larger one if appropriate.
770function bnpMultiplyTo(a, r) {
771 var x = this.abs(),
772 y = a.abs()
773 var i = x.t
774 r.t = i + y.t
775 while (--i >= 0) r[i] = 0
776 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
777 r.s = 0
778 r.clamp()
779 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
780}
3af2954a 781
ab78acc6
IC
782// (protected) r = this^2, r != this (HAC 14.16)
783function bnpSquareTo(r) {
784 var x = this.abs()
785 var i = r.t = 2 * x.t
786 while (--i >= 0) r[i] = 0
787 for (i = 0; i < x.t - 1; ++i) {
788 var c = x.am(i, x[i], r, 2 * i, 0, 1)
789 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
790 r[i + x.t] -= x.DV
791 r[i + x.t + 1] = 1
792 }
793 }
794 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
795 r.s = 0
796 r.clamp()
797}
3af2954a 798
ab78acc6
IC
799// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
800// r != q, this != m. q or r may be null.
801function bnpDivRemTo(m, q, r) {
802 var self = this
803 var pm = m.abs()
804 if (pm.t <= 0) return
805 var pt = self.abs()
806 if (pt.t < pm.t) {
807 if (q != null) q.fromInt(0)
808 if (r != null) self.copyTo(r)
809 return
810 }
811 if (r == null) r = new BigInteger()
812 var y = new BigInteger(),
813 ts = self.s,
814 ms = m.s
815 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
816 if (nsh > 0) {
817 pm.lShiftTo(nsh, y)
818 pt.lShiftTo(nsh, r)
819 } else {
820 pm.copyTo(y)
821 pt.copyTo(r)
822 }
823 var ys = y.t
824 var y0 = y[ys - 1]
825 if (y0 == 0) return
826 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
827 var d1 = self.FV / yt,
828 d2 = (1 << self.F1) / yt,
829 e = 1 << self.F2
830 var i = r.t,
831 j = i - ys,
832 t = (q == null) ? new BigInteger() : q
833 y.dlShiftTo(j, t)
834 if (r.compareTo(t) >= 0) {
835 r[r.t++] = 1
836 r.subTo(t, r)
837 }
838 BigInteger.ONE.dlShiftTo(ys, t)
839 t.subTo(y, y); // "negative" y so we can replace sub with am later
840 while (y.t < ys) y[y.t++] = 0
841 while (--j >= 0) {
842 // Estimate quotient digit
843 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
844 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
845 y.dlShiftTo(j, t)
846 r.subTo(t, r)
847 while (r[i] < --qd) r.subTo(t, r)
3af2954a 848 }
ab78acc6
IC
849 }
850 if (q != null) {
851 r.drShiftTo(ys, q)
852 if (ts != ms) BigInteger.ZERO.subTo(q, q)
853 }
854 r.t = ys
855 r.clamp()
856 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
857 if (ts < 0) BigInteger.ZERO.subTo(r, r)
858}
3af2954a 859
ab78acc6
IC
860// (public) this mod a
861function bnMod(a) {
862 var r = new BigInteger()
863 this.abs()
864 .divRemTo(a, null, r)
865 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
866 return r
867}
3af2954a 868
ab78acc6
IC
869// Modular reduction using "classic" algorithm
870function Classic(m) {
871 this.m = m
872}
3af2954a 873
ab78acc6
IC
874function cConvert(x) {
875 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
876 else return x
877}
878
879function cRevert(x) {
880 return x
881}
3af2954a 882
ab78acc6
IC
883function cReduce(x) {
884 x.divRemTo(this.m, null, x)
885}
3af2954a 886
ab78acc6
IC
887function cMulTo(x, y, r) {
888 x.multiplyTo(y, r)
889 this.reduce(r)
890}
3af2954a 891
ab78acc6
IC
892function cSqrTo(x, r) {
893 x.squareTo(r)
894 this.reduce(r)
895}
3af2954a 896
ab78acc6
IC
897Classic.prototype.convert = cConvert
898Classic.prototype.revert = cRevert
899Classic.prototype.reduce = cReduce
900Classic.prototype.mulTo = cMulTo
901Classic.prototype.sqrTo = cSqrTo
3af2954a 902
ab78acc6
IC
903// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
904// justification:
905// xy == 1 (mod m)
906// xy = 1+km
907// xy(2-xy) = (1+km)(1-km)
908// x[y(2-xy)] = 1-k^2m^2
909// x[y(2-xy)] == 1 (mod m^2)
910// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
911// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
912// JS multiply "overflows" differently from C/C++, so care is needed here.
913function bnpInvDigit() {
914 if (this.t < 1) return 0
915 var x = this[0]
916 if ((x & 1) == 0) return 0
917 var y = x & 3; // y == 1/x mod 2^2
918 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
919 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
920 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
921 // last step - calculate inverse mod DV directly
922 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
923 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
924 // we really want the negative inverse, and -DV < y < DV
925 return (y > 0) ? this.DV - y : -y
926}
3af2954a 927
ab78acc6
IC
928// Montgomery reduction
929function Montgomery(m) {
930 this.m = m
931 this.mp = m.invDigit()
932 this.mpl = this.mp & 0x7fff
933 this.mph = this.mp >> 15
934 this.um = (1 << (m.DB - 15)) - 1
935 this.mt2 = 2 * m.t
936}
3af2954a 937
ab78acc6
IC
938// xR mod m
939function montConvert(x) {
940 var r = new BigInteger()
941 x.abs()
942 .dlShiftTo(this.m.t, r)
943 r.divRemTo(this.m, null, r)
944 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
945 return r
946}
3af2954a 947
ab78acc6
IC
948// x/R mod m
949function montRevert(x) {
950 var r = new BigInteger()
951 x.copyTo(r)
952 this.reduce(r)
953 return r
954}
3af2954a 955
ab78acc6
IC
956// x = x/R mod m (HAC 14.32)
957function montReduce(x) {
958 while (x.t <= this.mt2) // pad x so am has enough room later
959 x[x.t++] = 0
960 for (var i = 0; i < this.m.t; ++i) {
961 // faster way of calculating u0 = x[i]*mp mod DV
962 var j = x[i] & 0x7fff
963 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
964 // use am to combine the multiply-shift-add into one call
965 j = i + this.m.t
966 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
967 // propagate carry
968 while (x[j] >= x.DV) {
969 x[j] -= x.DV
970 x[++j]++
971 }
972 }
973 x.clamp()
974 x.drShiftTo(this.m.t, x)
975 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
976}
3af2954a 977
ab78acc6
IC
978// r = "x^2/R mod m"; x != r
979function montSqrTo(x, r) {
980 x.squareTo(r)
981 this.reduce(r)
982}
3af2954a 983
ab78acc6
IC
984// r = "xy/R mod m"; x,y != r
985function montMulTo(x, y, r) {
986 x.multiplyTo(y, r)
987 this.reduce(r)
988}
3af2954a 989
ab78acc6
IC
990Montgomery.prototype.convert = montConvert
991Montgomery.prototype.revert = montRevert
992Montgomery.prototype.reduce = montReduce
993Montgomery.prototype.mulTo = montMulTo
994Montgomery.prototype.sqrTo = montSqrTo
3af2954a 995
ab78acc6
IC
996// (protected) true iff this is even
997function bnpIsEven() {
998 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
999}
3af2954a 1000
ab78acc6
IC
1001// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
1002function bnpExp(e, z) {
1003 if (e > 0xffffffff || e < 1) return BigInteger.ONE
1004 var r = new BigInteger(),
1005 r2 = new BigInteger(),
1006 g = z.convert(this),
1007 i = nbits(e) - 1
1008 g.copyTo(r)
1009 while (--i >= 0) {
1010 z.sqrTo(r, r2)
1011 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
1012 else {
1013 var t = r
1014 r = r2
1015 r2 = t
3af2954a 1016 }
3af2954a 1017 }
ab78acc6
IC
1018 return z.revert(r)
1019}
3af2954a 1020
ab78acc6
IC
1021// (public) this^e % m, 0 <= e < 2^32
1022function bnModPowInt(e, m) {
1023 var z
1024 if (e < 256 || m.isEven()) z = new Classic(m)
1025 else z = new Montgomery(m)
1026 return this.exp(e, z)
1027}
3af2954a 1028
ab78acc6
IC
1029// protected
1030proto.copyTo = bnpCopyTo
1031proto.fromInt = bnpFromInt
1032proto.fromString = bnpFromString
1033proto.clamp = bnpClamp
1034proto.dlShiftTo = bnpDLShiftTo
1035proto.drShiftTo = bnpDRShiftTo
1036proto.lShiftTo = bnpLShiftTo
1037proto.rShiftTo = bnpRShiftTo
1038proto.subTo = bnpSubTo
1039proto.multiplyTo = bnpMultiplyTo
1040proto.squareTo = bnpSquareTo
1041proto.divRemTo = bnpDivRemTo
1042proto.invDigit = bnpInvDigit
1043proto.isEven = bnpIsEven
1044proto.exp = bnpExp
3af2954a 1045
ab78acc6
IC
1046// public
1047proto.toString = bnToString
1048proto.negate = bnNegate
1049proto.abs = bnAbs
1050proto.compareTo = bnCompareTo
1051proto.bitLength = bnBitLength
1052proto.byteLength = bnByteLength
1053proto.mod = bnMod
1054proto.modPowInt = bnModPowInt
3af2954a 1055
ab78acc6
IC
1056// (public)
1057function bnClone() {
1058 var r = new BigInteger()
1059 this.copyTo(r)
1060 return r
1061}
3af2954a 1062
ab78acc6
IC
1063// (public) return value as integer
1064function bnIntValue() {
1065 if (this.s < 0) {
1066 if (this.t == 1) return this[0] - this.DV
1067 else if (this.t == 0) return -1
1068 } else if (this.t == 1) return this[0]
1069 else if (this.t == 0) return 0
1070 // assumes 16 < DB < 32
1071 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
1072}
3af2954a 1073
ab78acc6
IC
1074// (public) return value as byte
1075function bnByteValue() {
1076 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
1077}
3af2954a 1078
ab78acc6
IC
1079// (public) return value as short (assumes DB>=16)
1080function bnShortValue() {
1081 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
1082}
3af2954a 1083
ab78acc6
IC
1084// (protected) return x s.t. r^x < DV
1085function bnpChunkSize(r) {
1086 return Math.floor(Math.LN2 * this.DB / Math.log(r))
1087}
3af2954a 1088
ab78acc6
IC
1089// (public) 0 if this == 0, 1 if this > 0
1090function bnSigNum() {
1091 if (this.s < 0) return -1
1092 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
1093 else return 1
1094}
3af2954a 1095
ab78acc6
IC
1096// (protected) convert to radix string
1097function bnpToRadix(b) {
1098 if (b == null) b = 10
1099 if (this.signum() == 0 || b < 2 || b > 36) return "0"
1100 var cs = this.chunkSize(b)
1101 var a = Math.pow(b, cs)
1102 var d = nbv(a),
1103 y = new BigInteger(),
1104 z = new BigInteger(),
1105 r = ""
1106 this.divRemTo(d, y, z)
1107 while (y.signum() > 0) {
1108 r = (a + z.intValue())
1109 .toString(b)
1110 .substr(1) + r
1111 y.divRemTo(d, y, z)
1112 }
1113 return z.intValue()
1114 .toString(b) + r
1115}
3af2954a 1116
ab78acc6
IC
1117// (protected) convert from radix string
1118function bnpFromRadix(s, b) {
1119 var self = this
1120 self.fromInt(0)
1121 if (b == null) b = 10
1122 var cs = self.chunkSize(b)
1123 var d = Math.pow(b, cs),
1124 mi = false,
1125 j = 0,
1126 w = 0
1127 for (var i = 0; i < s.length; ++i) {
1128 var x = intAt(s, i)
1129 if (x < 0) {
1130 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
1131 continue
1132 }
1133 w = b * w + x
1134 if (++j >= cs) {
1135 self.dMultiply(d)
1136 self.dAddOffset(w, 0)
1137 j = 0
1138 w = 0
1139 }
1140 }
1141 if (j > 0) {
1142 self.dMultiply(Math.pow(b, j))
1143 self.dAddOffset(w, 0)
1144 }
1145 if (mi) BigInteger.ZERO.subTo(self, self)
1146}
3af2954a 1147
ab78acc6
IC
1148// (protected) alternate constructor
1149function bnpFromNumber(a, b, c) {
1150 var self = this
1151 if ("number" == typeof b) {
1152 // new BigInteger(int,int,RNG)
1153 if (a < 2) self.fromInt(1)
1154 else {
1155 self.fromNumber(a, c)
1156 if (!self.testBit(a - 1)) // force MSB set
1157 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
1158 if (self.isEven()) self.dAddOffset(1, 0); // force odd
1159 while (!self.isProbablePrime(b)) {
1160 self.dAddOffset(2, 0)
1161 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
1162 }
1163 }
1164 } else {
1165 // new BigInteger(int,RNG)
1166 var x = new Array(),
1167 t = a & 7
1168 x.length = (a >> 3) + 1
1169 b.nextBytes(x)
1170 if (t > 0) x[0] &= ((1 << t) - 1)
1171 else x[0] = 0
1172 self.fromString(x, 256)
3af2954a 1173 }
ab78acc6 1174}
3af2954a 1175
ab78acc6
IC
1176// (public) convert to bigendian byte array
1177function bnToByteArray() {
1178 var self = this
1179 var i = self.t,
1180 r = new Array()
1181 r[0] = self.s
1182 var p = self.DB - (i * self.DB) % 8,
1183 d, k = 0
1184 if (i-- > 0) {
1185 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
1186 r[k++] = d | (self.s << (self.DB - p))
1187 while (i >= 0) {
1188 if (p < 8) {
1189 d = (self[i] & ((1 << p) - 1)) << (8 - p)
1190 d |= self[--i] >> (p += self.DB - 8)
1191 } else {
1192 d = (self[i] >> (p -= 8)) & 0xff
1193 if (p <= 0) {
1194 p += self.DB
1195 --i
1196 }
1197 }
1198 if ((d & 0x80) != 0) d |= -256
1199 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
1200 if (k > 0 || d != self.s) r[k++] = d
3af2954a 1201 }
3af2954a 1202 }
ab78acc6
IC
1203 return r
1204}
3af2954a 1205
ab78acc6
IC
1206function bnEquals(a) {
1207 return (this.compareTo(a) == 0)
1208}
3af2954a 1209
ab78acc6
IC
1210function bnMin(a) {
1211 return (this.compareTo(a) < 0) ? this : a
1212}
3af2954a 1213
ab78acc6
IC
1214function bnMax(a) {
1215 return (this.compareTo(a) > 0) ? this : a
1216}
3af2954a 1217
ab78acc6
IC
1218// (protected) r = this op a (bitwise)
1219function bnpBitwiseTo(a, op, r) {
1220 var self = this
1221 var i, f, m = Math.min(a.t, self.t)
1222 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
1223 if (a.t < self.t) {
1224 f = a.s & self.DM
1225 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
1226 r.t = self.t
1227 } else {
1228 f = self.s & self.DM
1229 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
1230 r.t = a.t
3af2954a 1231 }
ab78acc6
IC
1232 r.s = op(self.s, a.s)
1233 r.clamp()
1234}
3af2954a 1235
ab78acc6
IC
1236// (public) this & a
1237function op_and(x, y) {
1238 return x & y
1239}
3af2954a 1240
ab78acc6
IC
1241function bnAnd(a) {
1242 var r = new BigInteger()
1243 this.bitwiseTo(a, op_and, r)
1244 return r
1245}
3af2954a 1246
ab78acc6
IC
1247// (public) this | a
1248function op_or(x, y) {
1249 return x | y
1250}
3af2954a 1251
ab78acc6
IC
1252function bnOr(a) {
1253 var r = new BigInteger()
1254 this.bitwiseTo(a, op_or, r)
1255 return r
1256}
3af2954a 1257
ab78acc6
IC
1258// (public) this ^ a
1259function op_xor(x, y) {
1260 return x ^ y
1261}
3af2954a 1262
ab78acc6
IC
1263function bnXor(a) {
1264 var r = new BigInteger()
1265 this.bitwiseTo(a, op_xor, r)
1266 return r
1267}
3af2954a 1268
ab78acc6
IC
1269// (public) this & ~a
1270function op_andnot(x, y) {
1271 return x & ~y
1272}
3af2954a 1273
ab78acc6
IC
1274function bnAndNot(a) {
1275 var r = new BigInteger()
1276 this.bitwiseTo(a, op_andnot, r)
1277 return r
1278}
3af2954a 1279
ab78acc6
IC
1280// (public) ~this
1281function bnNot() {
1282 var r = new BigInteger()
1283 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
1284 r.t = this.t
1285 r.s = ~this.s
1286 return r
1287}
3af2954a 1288
ab78acc6
IC
1289// (public) this << n
1290function bnShiftLeft(n) {
1291 var r = new BigInteger()
1292 if (n < 0) this.rShiftTo(-n, r)
1293 else this.lShiftTo(n, r)
1294 return r
1295}
3af2954a 1296
ab78acc6
IC
1297// (public) this >> n
1298function bnShiftRight(n) {
1299 var r = new BigInteger()
1300 if (n < 0) this.lShiftTo(-n, r)
1301 else this.rShiftTo(n, r)
1302 return r
1303}
3af2954a 1304
ab78acc6
IC
1305// return index of lowest 1-bit in x, x < 2^31
1306function lbit(x) {
1307 if (x == 0) return -1
1308 var r = 0
1309 if ((x & 0xffff) == 0) {
1310 x >>= 16
1311 r += 16
3af2954a 1312 }
ab78acc6
IC
1313 if ((x & 0xff) == 0) {
1314 x >>= 8
1315 r += 8
1316 }
1317 if ((x & 0xf) == 0) {
1318 x >>= 4
1319 r += 4
1320 }
1321 if ((x & 3) == 0) {
1322 x >>= 2
1323 r += 2
1324 }
1325 if ((x & 1) == 0)++r
1326 return r
1327}
3af2954a 1328
ab78acc6
IC
1329// (public) returns index of lowest 1-bit (or -1 if none)
1330function bnGetLowestSetBit() {
1331 for (var i = 0; i < this.t; ++i)
1332 if (this[i] != 0) return i * this.DB + lbit(this[i])
1333 if (this.s < 0) return this.t * this.DB
1334 return -1
1335}
3af2954a 1336
ab78acc6
IC
1337// return number of 1 bits in x
1338function cbit(x) {
1339 var r = 0
1340 while (x != 0) {
1341 x &= x - 1
1342 ++r
3af2954a 1343 }
ab78acc6
IC
1344 return r
1345}
3af2954a 1346
ab78acc6
IC
1347// (public) return number of set bits
1348function bnBitCount() {
1349 var r = 0,
1350 x = this.s & this.DM
1351 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
1352 return r
1353}
1354
1355// (public) true iff nth bit is set
1356function bnTestBit(n) {
1357 var j = Math.floor(n / this.DB)
1358 if (j >= this.t) return (this.s != 0)
1359 return ((this[j] & (1 << (n % this.DB))) != 0)
1360}
3af2954a 1361
ab78acc6
IC
1362// (protected) this op (1<<n)
1363function bnpChangeBit(n, op) {
1364 var r = BigInteger.ONE.shiftLeft(n)
1365 this.bitwiseTo(r, op, r)
1366 return r
1367}
3af2954a 1368
ab78acc6
IC
1369// (public) this | (1<<n)
1370function bnSetBit(n) {
1371 return this.changeBit(n, op_or)
1372}
3af2954a 1373
ab78acc6
IC
1374// (public) this & ~(1<<n)
1375function bnClearBit(n) {
1376 return this.changeBit(n, op_andnot)
1377}
3af2954a 1378
ab78acc6
IC
1379// (public) this ^ (1<<n)
1380function bnFlipBit(n) {
1381 return this.changeBit(n, op_xor)
1382}
3af2954a 1383
ab78acc6
IC
1384// (protected) r = this + a
1385function bnpAddTo(a, r) {
1386 var self = this
3af2954a 1387
ab78acc6
IC
1388 var i = 0,
1389 c = 0,
1390 m = Math.min(a.t, self.t)
1391 while (i < m) {
1392 c += self[i] + a[i]
1393 r[i++] = c & self.DM
1394 c >>= self.DB
1395 }
1396 if (a.t < self.t) {
1397 c += a.s
1398 while (i < self.t) {
1399 c += self[i]
1400 r[i++] = c & self.DM
1401 c >>= self.DB
1402 }
1403 c += self.s
1404 } else {
1405 c += self.s
1406 while (i < a.t) {
1407 c += a[i]
1408 r[i++] = c & self.DM
1409 c >>= self.DB
1410 }
1411 c += a.s
1412 }
1413 r.s = (c < 0) ? -1 : 0
1414 if (c > 0) r[i++] = c
1415 else if (c < -1) r[i++] = self.DV + c
1416 r.t = i
1417 r.clamp()
1418}
3af2954a 1419
ab78acc6
IC
1420// (public) this + a
1421function bnAdd(a) {
1422 var r = new BigInteger()
1423 this.addTo(a, r)
1424 return r
1425}
3af2954a 1426
ab78acc6
IC
1427// (public) this - a
1428function bnSubtract(a) {
1429 var r = new BigInteger()
1430 this.subTo(a, r)
1431 return r
1432}
3af2954a 1433
ab78acc6
IC
1434// (public) this * a
1435function bnMultiply(a) {
1436 var r = new BigInteger()
1437 this.multiplyTo(a, r)
1438 return r
1439}
3af2954a 1440
ab78acc6
IC
1441// (public) this^2
1442function bnSquare() {
1443 var r = new BigInteger()
1444 this.squareTo(r)
1445 return r
1446}
3af2954a 1447
ab78acc6
IC
1448// (public) this / a
1449function bnDivide(a) {
1450 var r = new BigInteger()
1451 this.divRemTo(a, r, null)
1452 return r
1453}
3af2954a 1454
ab78acc6
IC
1455// (public) this % a
1456function bnRemainder(a) {
1457 var r = new BigInteger()
1458 this.divRemTo(a, null, r)
1459 return r
1460}
3af2954a 1461
ab78acc6
IC
1462// (public) [this/a,this%a]
1463function bnDivideAndRemainder(a) {
1464 var q = new BigInteger(),
1465 r = new BigInteger()
1466 this.divRemTo(a, q, r)
1467 return new Array(q, r)
1468}
3af2954a 1469
ab78acc6
IC
1470// (protected) this *= n, this >= 0, 1 < n < DV
1471function bnpDMultiply(n) {
1472 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
1473 ++this.t
1474 this.clamp()
1475}
3af2954a 1476
ab78acc6
IC
1477// (protected) this += n << w words, this >= 0
1478function bnpDAddOffset(n, w) {
1479 if (n == 0) return
1480 while (this.t <= w) this[this.t++] = 0
1481 this[w] += n
1482 while (this[w] >= this.DV) {
1483 this[w] -= this.DV
1484 if (++w >= this.t) this[this.t++] = 0
1485 ++this[w]
3af2954a 1486 }
ab78acc6 1487}
3af2954a 1488
ab78acc6
IC
1489// A "null" reducer
1490function NullExp() {}
3af2954a 1491
ab78acc6
IC
1492function nNop(x) {
1493 return x
1494}
3af2954a 1495
ab78acc6
IC
1496function nMulTo(x, y, r) {
1497 x.multiplyTo(y, r)
1498}
3af2954a 1499
ab78acc6
IC
1500function nSqrTo(x, r) {
1501 x.squareTo(r)
1502}
3af2954a 1503
ab78acc6
IC
1504NullExp.prototype.convert = nNop
1505NullExp.prototype.revert = nNop
1506NullExp.prototype.mulTo = nMulTo
1507NullExp.prototype.sqrTo = nSqrTo
3af2954a 1508
ab78acc6
IC
1509// (public) this^e
1510function bnPow(e) {
1511 return this.exp(e, new NullExp())
1512}
3af2954a 1513
ab78acc6
IC
1514// (protected) r = lower n words of "this * a", a.t <= n
1515// "this" should be the larger one if appropriate.
1516function bnpMultiplyLowerTo(a, n, r) {
1517 var i = Math.min(this.t + a.t, n)
1518 r.s = 0; // assumes a,this >= 0
1519 r.t = i
1520 while (i > 0) r[--i] = 0
1521 var j
1522 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
1523 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
1524 r.clamp()
1525}
3af2954a 1526
ab78acc6
IC
1527// (protected) r = "this * a" without lower n words, n > 0
1528// "this" should be the larger one if appropriate.
1529function bnpMultiplyUpperTo(a, n, r) {
1530 --n
1531 var i = r.t = this.t + a.t - n
1532 r.s = 0; // assumes a,this >= 0
1533 while (--i >= 0) r[i] = 0
1534 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
1535 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
1536 r.clamp()
1537 r.drShiftTo(1, r)
1538}
3af2954a 1539
ab78acc6
IC
1540// Barrett modular reduction
1541function Barrett(m) {
1542 // setup Barrett
1543 this.r2 = new BigInteger()
1544 this.q3 = new BigInteger()
1545 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
1546 this.mu = this.r2.divide(m)
1547 this.m = m
1548}
3af2954a 1549
ab78acc6
IC
1550function barrettConvert(x) {
1551 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
1552 else if (x.compareTo(this.m) < 0) return x
1553 else {
1554 var r = new BigInteger()
1555 x.copyTo(r)
1556 this.reduce(r)
1557 return r
3af2954a 1558 }
ab78acc6 1559}
3af2954a 1560
ab78acc6
IC
1561function barrettRevert(x) {
1562 return x
1563}
3af2954a 1564
ab78acc6
IC
1565// x = x mod m (HAC 14.42)
1566function barrettReduce(x) {
1567 var self = this
1568 x.drShiftTo(self.m.t - 1, self.r2)
1569 if (x.t > self.m.t + 1) {
1570 x.t = self.m.t + 1
1571 x.clamp()
3af2954a 1572 }
ab78acc6
IC
1573 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
1574 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
1575 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
1576 x.subTo(self.r2, x)
1577 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
1578}
3af2954a 1579
ab78acc6
IC
1580// r = x^2 mod m; x != r
1581function barrettSqrTo(x, r) {
1582 x.squareTo(r)
1583 this.reduce(r)
1584}
3af2954a 1585
ab78acc6
IC
1586// r = x*y mod m; x,y != r
1587function barrettMulTo(x, y, r) {
1588 x.multiplyTo(y, r)
1589 this.reduce(r)
1590}
3af2954a 1591
ab78acc6
IC
1592Barrett.prototype.convert = barrettConvert
1593Barrett.prototype.revert = barrettRevert
1594Barrett.prototype.reduce = barrettReduce
1595Barrett.prototype.mulTo = barrettMulTo
1596Barrett.prototype.sqrTo = barrettSqrTo
3af2954a 1597
ab78acc6
IC
1598// (public) this^e % m (HAC 14.85)
1599function bnModPow(e, m) {
1600 var i = e.bitLength(),
1601 k, r = nbv(1),
1602 z
1603 if (i <= 0) return r
1604 else if (i < 18) k = 1
1605 else if (i < 48) k = 3
1606 else if (i < 144) k = 4
1607 else if (i < 768) k = 5
1608 else k = 6
1609 if (i < 8)
1610 z = new Classic(m)
1611 else if (m.isEven())
1612 z = new Barrett(m)
1613 else
1614 z = new Montgomery(m)
3af2954a 1615
ab78acc6
IC
1616 // precomputation
1617 var g = new Array(),
1618 n = 3,
1619 k1 = k - 1,
1620 km = (1 << k) - 1
1621 g[1] = z.convert(this)
1622 if (k > 1) {
1623 var g2 = new BigInteger()
1624 z.sqrTo(g[1], g2)
1625 while (n <= km) {
1626 g[n] = new BigInteger()
1627 z.mulTo(g2, g[n - 2], g[n])
1628 n += 2
1629 }
1630 }
1631
1632 var j = e.t - 1,
1633 w, is1 = true,
1634 r2 = new BigInteger(),
1635 t
1636 i = nbits(e[j]) - 1
1637 while (j >= 0) {
1638 if (i >= k1) w = (e[j] >> (i - k1)) & km
1639 else {
1640 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
1641 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
1642 }
3af2954a 1643
ab78acc6
IC
1644 n = k
1645 while ((w & 1) == 0) {
1646 w >>= 1
1647 --n
1648 }
1649 if ((i -= n) < 0) {
1650 i += this.DB
1651 --j
1652 }
1653 if (is1) { // ret == 1, don't bother squaring or multiplying it
1654 g[w].copyTo(r)
1655 is1 = false
1656 } else {
1657 while (n > 1) {
1658 z.sqrTo(r, r2)
1659 z.sqrTo(r2, r)
1660 n -= 2
1661 }
1662 if (n > 0) z.sqrTo(r, r2)
1663 else {
1664 t = r
1665 r = r2
1666 r2 = t
1667 }
1668 z.mulTo(r2, g[w], r)
1669 }
3af2954a 1670
ab78acc6
IC
1671 while (j >= 0 && (e[j] & (1 << i)) == 0) {
1672 z.sqrTo(r, r2)
1673 t = r
1674 r = r2
1675 r2 = t
1676 if (--i < 0) {
1677 i = this.DB - 1
1678 --j
3af2954a 1679 }
3af2954a
IC
1680 }
1681 }
ab78acc6
IC
1682 return z.revert(r)
1683}
3af2954a 1684
ab78acc6
IC
1685// (public) gcd(this,a) (HAC 14.54)
1686function bnGCD(a) {
1687 var x = (this.s < 0) ? this.negate() : this.clone()
1688 var y = (a.s < 0) ? a.negate() : a.clone()
1689 if (x.compareTo(y) < 0) {
1690 var t = x
1691 x = y
1692 y = t
1693 }
1694 var i = x.getLowestSetBit(),
1695 g = y.getLowestSetBit()
1696 if (g < 0) return x
1697 if (i < g) g = i
1698 if (g > 0) {
1699 x.rShiftTo(g, x)
1700 y.rShiftTo(g, y)
1701 }
1702 while (x.signum() > 0) {
1703 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
1704 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
1705 if (x.compareTo(y) >= 0) {
1706 x.subTo(y, x)
1707 x.rShiftTo(1, x)
1708 } else {
1709 y.subTo(x, y)
1710 y.rShiftTo(1, y)
1711 }
3af2954a 1712 }
ab78acc6
IC
1713 if (g > 0) y.lShiftTo(g, y)
1714 return y
1715}
3af2954a 1716
ab78acc6
IC
1717// (protected) this % n, n < 2^26
1718function bnpModInt(n) {
1719 if (n <= 0) return 0
1720 var d = this.DV % n,
1721 r = (this.s < 0) ? n - 1 : 0
1722 if (this.t > 0)
1723 if (d == 0) r = this[0] % n
1724 else
1725 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
1726 return r
1727}
3af2954a 1728
ab78acc6
IC
1729// (public) 1/this % m (HAC 14.61)
1730function bnModInverse(m) {
1731 var ac = m.isEven()
1732 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
1733 var u = m.clone(),
1734 v = this.clone()
1735 var a = nbv(1),
1736 b = nbv(0),
1737 c = nbv(0),
1738 d = nbv(1)
1739 while (u.signum() != 0) {
1740 while (u.isEven()) {
1741 u.rShiftTo(1, u)
1742 if (ac) {
1743 if (!a.isEven() || !b.isEven()) {
1744 a.addTo(this, a)
1745 b.subTo(m, b)
1746 }
1747 a.rShiftTo(1, a)
1748 } else if (!b.isEven()) b.subTo(m, b)
1749 b.rShiftTo(1, b)
1750 }
1751 while (v.isEven()) {
1752 v.rShiftTo(1, v)
1753 if (ac) {
1754 if (!c.isEven() || !d.isEven()) {
1755 c.addTo(this, c)
1756 d.subTo(m, d)
1757 }
1758 c.rShiftTo(1, c)
1759 } else if (!d.isEven()) d.subTo(m, d)
1760 d.rShiftTo(1, d)
1761 }
1762 if (u.compareTo(v) >= 0) {
1763 u.subTo(v, u)
1764 if (ac) a.subTo(c, a)
1765 b.subTo(d, b)
1766 } else {
1767 v.subTo(u, v)
1768 if (ac) c.subTo(a, c)
1769 d.subTo(b, d)
1770 }
1771 }
1772 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
1773 if (d.compareTo(m) >= 0) return d.subtract(m)
1774 if (d.signum() < 0) d.addTo(m, d)
1775 else return d
1776 if (d.signum() < 0) return d.add(m)
1777 else return d
1778}
1779
1780var lowprimes = [
1781 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
1782 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
1783 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
1784 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
1785 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
1786 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
1787 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
1788 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
1789 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
1790 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
1791 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
1792]
1793
1794var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
1795
1796// (public) test primality with certainty >= 1-.5^t
1797function bnIsProbablePrime(t) {
1798 var i, x = this.abs()
1799 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
1800 for (i = 0; i < lowprimes.length; ++i)
1801 if (x[0] == lowprimes[i]) return true
1802 return false
3af2954a 1803 }
ab78acc6
IC
1804 if (x.isEven()) return false
1805 i = 1
1806 while (i < lowprimes.length) {
1807 var m = lowprimes[i],
1808 j = i + 1
1809 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
1810 m = x.modInt(m)
1811 while (i < j) if (m % lowprimes[i++] == 0) return false
1812 }
1813 return x.millerRabin(t)
1814}
1815
1816// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
1817function bnpMillerRabin(t) {
1818 var n1 = this.subtract(BigInteger.ONE)
1819 var k = n1.getLowestSetBit()
1820 if (k <= 0) return false
1821 var r = n1.shiftRight(k)
1822 t = (t + 1) >> 1
1823 if (t > lowprimes.length) t = lowprimes.length
1824 var a = new BigInteger(null)
1825 var j, bases = []
1826 for (var i = 0; i < t; ++i) {
1827 for (;;) {
1828 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
1829 if (bases.indexOf(j) == -1) break
1830 }
1831 bases.push(j)
1832 a.fromInt(j)
1833 var y = a.modPow(r, this)
1834 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
1835 var j = 1
1836 while (j++ < k && y.compareTo(n1) != 0) {
1837 y = y.modPowInt(2, this)
1838 if (y.compareTo(BigInteger.ONE) == 0) return false
1839 }
1840 if (y.compareTo(n1) != 0) return false
1841 }
3af2954a 1842 }
ab78acc6
IC
1843 return true
1844}
3af2954a 1845
ab78acc6
IC
1846// protected
1847proto.chunkSize = bnpChunkSize
1848proto.toRadix = bnpToRadix
1849proto.fromRadix = bnpFromRadix
1850proto.fromNumber = bnpFromNumber
1851proto.bitwiseTo = bnpBitwiseTo
1852proto.changeBit = bnpChangeBit
1853proto.addTo = bnpAddTo
1854proto.dMultiply = bnpDMultiply
1855proto.dAddOffset = bnpDAddOffset
1856proto.multiplyLowerTo = bnpMultiplyLowerTo
1857proto.multiplyUpperTo = bnpMultiplyUpperTo
1858proto.modInt = bnpModInt
1859proto.millerRabin = bnpMillerRabin
3af2954a 1860
ab78acc6
IC
1861// public
1862proto.clone = bnClone
1863proto.intValue = bnIntValue
1864proto.byteValue = bnByteValue
1865proto.shortValue = bnShortValue
1866proto.signum = bnSigNum
1867proto.toByteArray = bnToByteArray
1868proto.equals = bnEquals
1869proto.min = bnMin
1870proto.max = bnMax
1871proto.and = bnAnd
1872proto.or = bnOr
1873proto.xor = bnXor
1874proto.andNot = bnAndNot
1875proto.not = bnNot
1876proto.shiftLeft = bnShiftLeft
1877proto.shiftRight = bnShiftRight
1878proto.getLowestSetBit = bnGetLowestSetBit
1879proto.bitCount = bnBitCount
1880proto.testBit = bnTestBit
1881proto.setBit = bnSetBit
1882proto.clearBit = bnClearBit
1883proto.flipBit = bnFlipBit
1884proto.add = bnAdd
1885proto.subtract = bnSubtract
1886proto.multiply = bnMultiply
1887proto.divide = bnDivide
1888proto.remainder = bnRemainder
1889proto.divideAndRemainder = bnDivideAndRemainder
1890proto.modPow = bnModPow
1891proto.modInverse = bnModInverse
1892proto.pow = bnPow
1893proto.gcd = bnGCD
1894proto.isProbablePrime = bnIsProbablePrime
3af2954a 1895
ab78acc6
IC
1896// JSBN-specific extension
1897proto.square = bnSquare
3af2954a 1898
ab78acc6
IC
1899// constants
1900BigInteger.ZERO = nbv(0)
1901BigInteger.ONE = nbv(1)
1902BigInteger.valueOf = nbv
3af2954a 1903
ab78acc6 1904module.exports = BigInteger
3af2954a 1905
ab78acc6
IC
1906},{"../package.json":4}],2:[function(require,module,exports){
1907(function (Buffer){
1908// FIXME: Kind of a weird way to throw exceptions, consider removing
1909var assert = require('assert')
1910var BigInteger = require('./bigi')
3af2954a 1911
ab78acc6
IC
1912/**
1913 * Turns a byte array into a big integer.
1914 *
1915 * This function will interpret a byte array as a big integer in big
1916 * endian notation.
1917 */
1918BigInteger.fromByteArrayUnsigned = function(byteArray) {
1919 // BigInteger expects a DER integer conformant byte array
1920 if (byteArray[0] & 0x80) {
1921 return new BigInteger([0].concat(byteArray))
3af2954a
IC
1922 }
1923
ab78acc6
IC
1924 return new BigInteger(byteArray)
1925}
3af2954a 1926
ab78acc6
IC
1927/**
1928 * Returns a byte array representation of the big integer.
1929 *
1930 * This returns the absolute of the contained value in big endian
1931 * form. A value of zero results in an empty array.
1932 */
1933BigInteger.prototype.toByteArrayUnsigned = function() {
1934 var byteArray = this.toByteArray()
1935 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
1936}
3af2954a 1937
ab78acc6
IC
1938BigInteger.fromDERInteger = function(byteArray) {
1939 return new BigInteger(byteArray)
1940}
3af2954a 1941
ab78acc6
IC
1942/*
1943 * Converts BigInteger to a DER integer representation.
1944 *
1945 * The format for this value uses the most significant bit as a sign
1946 * bit. If the most significant bit is already set and the integer is
1947 * positive, a 0x00 is prepended.
1948 *
1949 * Examples:
1950 *
1951 * 0 => 0x00
1952 * 1 => 0x01
1953 * -1 => 0xff
1954 * 127 => 0x7f
1955 * -127 => 0x81
1956 * 128 => 0x0080
1957 * -128 => 0x80
1958 * 255 => 0x00ff
1959 * -255 => 0xff01
1960 * 16300 => 0x3fac
1961 * -16300 => 0xc054
1962 * 62300 => 0x00f35c
1963 * -62300 => 0xff0ca4
1964*/
1965BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
3af2954a 1966
ab78acc6
IC
1967BigInteger.fromBuffer = function(buffer) {
1968 // BigInteger expects a DER integer conformant byte array
1969 if (buffer[0] & 0x80) {
1970 var byteArray = Array.prototype.slice.call(buffer)
3af2954a 1971
ab78acc6 1972 return new BigInteger([0].concat(byteArray))
3af2954a
IC
1973 }
1974
ab78acc6
IC
1975 return new BigInteger(buffer)
1976}
3af2954a 1977
ab78acc6
IC
1978BigInteger.fromHex = function(hex) {
1979 if (hex === '') return BigInteger.ZERO
3af2954a 1980
ab78acc6
IC
1981 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
1982 assert.equal(hex.length % 2, 0, 'Incomplete hex')
1983 return new BigInteger(hex, 16)
1984}
3af2954a 1985
ab78acc6
IC
1986BigInteger.prototype.toBuffer = function(size) {
1987 var byteArray = this.toByteArrayUnsigned()
1988 var zeros = []
3af2954a 1989
ab78acc6
IC
1990 var padding = size - byteArray.length
1991 while (zeros.length < padding) zeros.push(0)
3af2954a 1992
ab78acc6
IC
1993 return new Buffer(zeros.concat(byteArray))
1994}
3af2954a 1995
ab78acc6
IC
1996BigInteger.prototype.toHex = function(size) {
1997 return this.toBuffer(size).toString('hex')
1998}
3af2954a 1999
ab78acc6
IC
2000}).call(this,require("buffer").Buffer)
2001},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
2002var BigInteger = require('./bigi')
3af2954a 2003
ab78acc6
IC
2004//addons
2005require('./convert')
3af2954a 2006
ab78acc6
IC
2007module.exports = BigInteger
2008},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
2009module.exports={
2010 "name": "bigi",
2011 "version": "1.4.0",
2012 "description": "Big integers.",
2013 "keywords": [
2014 "cryptography",
2015 "math",
2016 "bitcoin",
2017 "arbitrary",
2018 "precision",
2019 "arithmetic",
2020 "big",
2021 "integer",
2022 "int",
2023 "number",
2024 "biginteger",
2025 "bigint",
2026 "bignumber",
2027 "decimal",
2028 "float"
2029 ],
2030 "devDependencies": {
2031 "mocha": "^1.20.1",
2032 "jshint": "^2.5.1",
2033 "coveralls": "^2.10.0",
2034 "istanbul": "^0.2.11"
2035 },
2036 "repository": {
2037 "url": "https://github.com/cryptocoinjs/bigi",
2038 "type": "git"
2039 },
2040 "main": "./lib/index.js",
2041 "scripts": {
2042 "test": "_mocha -- test/*.js",
2043 "jshint": "jshint --config jshint.json lib/*.js ; true",
2044 "unit": "mocha",
2045 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
2046 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
2047 },
2048 "dependencies": {},
2049 "testling": {
2050 "files": "test/*.js",
2051 "harness": "mocha",
2052 "browsers": [
2053 "ie/9..latest",
2054 "firefox/latest",
2055 "chrome/latest",
2056 "safari/6.0..latest",
2057 "iphone/6.0..latest",
2058 "android-browser/4.2..latest"
2059 ]
2060 },
2061 "bugs": {
2062 "url": "https://github.com/cryptocoinjs/bigi/issues"
2063 },
2064 "homepage": "https://github.com/cryptocoinjs/bigi",
2065 "_id": "bigi@1.4.0",
2066 "dist": {
2067 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2068 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2069 },
2070 "_from": "bigi@^1.4.0",
2071 "_npmVersion": "1.4.3",
2072 "_npmUser": {
2073 "name": "jp",
2074 "email": "jprichardson@gmail.com"
2075 },
2076 "maintainers": [
2077 {
2078 "name": "jp",
2079 "email": "jprichardson@gmail.com"
2080 },
2081 {
2082 "name": "midnightlightning",
2083 "email": "boydb@midnightdesign.ws"
2084 },
2085 {
2086 "name": "sidazhang",
2087 "email": "sidazhang89@gmail.com"
2088 },
2089 {
2090 "name": "nadav",
2091 "email": "npm@shesek.info"
3af2954a 2092 }
ab78acc6
IC
2093 ],
2094 "directories": {},
2095 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
2096 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
2097}
3af2954a 2098
ab78acc6
IC
2099},{}],5:[function(require,module,exports){
2100// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
2101//
2102// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
2103//
2104// Originally from narwhal.js (http://narwhaljs.org)
2105// Copyright (c) 2009 Thomas Robinson <280north.com>
2106//
2107// Permission is hereby granted, free of charge, to any person obtaining a copy
2108// of this software and associated documentation files (the 'Software'), to
2109// deal in the Software without restriction, including without limitation the
2110// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
2111// sell copies of the Software, and to permit persons to whom the Software is
2112// furnished to do so, subject to the following conditions:
2113//
2114// The above copyright notice and this permission notice shall be included in
2115// all copies or substantial portions of the Software.
2116//
2117// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
2118// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
2119// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
2120// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
2121// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
2122// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
3af2954a 2123
ab78acc6
IC
2124// when used in node, this will actually load the util module we depend on
2125// versus loading the builtin util module as happens otherwise
2126// this is a bug in node module loading as far as I am concerned
2127var util = require('util/');
3af2954a 2128
ab78acc6
IC
2129var pSlice = Array.prototype.slice;
2130var hasOwn = Object.prototype.hasOwnProperty;
3af2954a 2131
ab78acc6
IC
2132// 1. The assert module provides functions that throw
2133// AssertionError's when particular conditions are not met. The
2134// assert module must conform to the following interface.
3af2954a 2135
ab78acc6 2136var assert = module.exports = ok;
3af2954a 2137
ab78acc6
IC
2138// 2. The AssertionError is defined in assert.
2139// new assert.AssertionError({ message: message,
2140// actual: actual,
2141// expected: expected })
3af2954a 2142
ab78acc6
IC
2143assert.AssertionError = function AssertionError(options) {
2144 this.name = 'AssertionError';
2145 this.actual = options.actual;
2146 this.expected = options.expected;
2147 this.operator = options.operator;
2148 if (options.message) {
2149 this.message = options.message;
2150 this.generatedMessage = false;
2151 } else {
2152 this.message = getMessage(this);
2153 this.generatedMessage = true;
2154 }
2155 var stackStartFunction = options.stackStartFunction || fail;
3af2954a 2156
ab78acc6
IC
2157 if (Error.captureStackTrace) {
2158 Error.captureStackTrace(this, stackStartFunction);
3af2954a 2159 }
ab78acc6
IC
2160 else {
2161 // non v8 browsers so we can have a stacktrace
2162 var err = new Error();
2163 if (err.stack) {
2164 var out = err.stack;
3af2954a 2165
ab78acc6
IC
2166 // try to strip useless frames
2167 var fn_name = stackStartFunction.name;
2168 var idx = out.indexOf('\n' + fn_name);
2169 if (idx >= 0) {
2170 // once we have located the function frame
2171 // we need to strip out everything before it (and its line)
2172 var next_line = out.indexOf('\n', idx + 1);
2173 out = out.substring(next_line + 1);
2174 }
3af2954a 2175
ab78acc6 2176 this.stack = out;
3af2954a 2177 }
3af2954a 2178 }
ab78acc6 2179};
3af2954a 2180
ab78acc6
IC
2181// assert.AssertionError instanceof Error
2182util.inherits(assert.AssertionError, Error);
3af2954a 2183
ab78acc6
IC
2184function replacer(key, value) {
2185 if (util.isUndefined(value)) {
2186 return '' + value;
2187 }
2188 if (util.isNumber(value) && !isFinite(value)) {
2189 return value.toString();
2190 }
2191 if (util.isFunction(value) || util.isRegExp(value)) {
2192 return value.toString();
2193 }
2194 return value;
2195}
3af2954a 2196
ab78acc6
IC
2197function truncate(s, n) {
2198 if (util.isString(s)) {
2199 return s.length < n ? s : s.slice(0, n);
2200 } else {
2201 return s;
2202 }
2203}
3af2954a 2204
ab78acc6
IC
2205function getMessage(self) {
2206 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
2207 self.operator + ' ' +
2208 truncate(JSON.stringify(self.expected, replacer), 128);
2209}
3af2954a 2210
ab78acc6
IC
2211// At present only the three keys mentioned above are used and
2212// understood by the spec. Implementations or sub modules can pass
2213// other keys to the AssertionError's constructor - they will be
2214// ignored.
3af2954a 2215
ab78acc6
IC
2216// 3. All of the following functions must throw an AssertionError
2217// when a corresponding condition is not met, with a message that
2218// may be undefined if not provided. All assertion methods provide
2219// both the actual and expected values to the assertion error for
2220// display purposes.
3af2954a 2221
ab78acc6
IC
2222function fail(actual, expected, message, operator, stackStartFunction) {
2223 throw new assert.AssertionError({
2224 message: message,
2225 actual: actual,
2226 expected: expected,
2227 operator: operator,
2228 stackStartFunction: stackStartFunction
2229 });
2230}
3af2954a 2231
ab78acc6
IC
2232// EXTENSION! allows for well behaved errors defined elsewhere.
2233assert.fail = fail;
ebd8d4e8 2234
ab78acc6
IC
2235// 4. Pure assertion tests whether a value is truthy, as determined
2236// by !!guard.
2237// assert.ok(guard, message_opt);
2238// This statement is equivalent to assert.equal(true, !!guard,
2239// message_opt);. To test strictly for the value true, use
2240// assert.strictEqual(true, guard, message_opt);.
3af2954a 2241
ab78acc6
IC
2242function ok(value, message) {
2243 if (!value) fail(value, true, message, '==', assert.ok);
2244}
2245assert.ok = ok;
3af2954a 2246
ab78acc6
IC
2247// 5. The equality assertion tests shallow, coercive equality with
2248// ==.
2249// assert.equal(actual, expected, message_opt);
3af2954a 2250
ab78acc6
IC
2251assert.equal = function equal(actual, expected, message) {
2252 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
2253};
3af2954a 2254
ab78acc6
IC
2255// 6. The non-equality assertion tests for whether two objects are not equal
2256// with != assert.notEqual(actual, expected, message_opt);
3af2954a 2257
ab78acc6
IC
2258assert.notEqual = function notEqual(actual, expected, message) {
2259 if (actual == expected) {
2260 fail(actual, expected, message, '!=', assert.notEqual);
3af2954a 2261 }
ab78acc6 2262};
3af2954a 2263
ab78acc6
IC
2264// 7. The equivalence assertion tests a deep equality relation.
2265// assert.deepEqual(actual, expected, message_opt);
3af2954a 2266
ab78acc6
IC
2267assert.deepEqual = function deepEqual(actual, expected, message) {
2268 if (!_deepEqual(actual, expected)) {
2269 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
2270 }
2271};
3af2954a 2272
ab78acc6
IC
2273function _deepEqual(actual, expected) {
2274 // 7.1. All identical values are equivalent, as determined by ===.
2275 if (actual === expected) {
2276 return true;
3af2954a 2277
ab78acc6
IC
2278 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
2279 if (actual.length != expected.length) return false;
3af2954a 2280
ab78acc6
IC
2281 for (var i = 0; i < actual.length; i++) {
2282 if (actual[i] !== expected[i]) return false;
3af2954a
IC
2283 }
2284
ab78acc6 2285 return true;
3af2954a 2286
ab78acc6
IC
2287 // 7.2. If the expected value is a Date object, the actual value is
2288 // equivalent if it is also a Date object that refers to the same time.
2289 } else if (util.isDate(actual) && util.isDate(expected)) {
2290 return actual.getTime() === expected.getTime();
3af2954a 2291
ab78acc6
IC
2292 // 7.3 If the expected value is a RegExp object, the actual value is
2293 // equivalent if it is also a RegExp object with the same source and
2294 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
2295 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
2296 return actual.source === expected.source &&
2297 actual.global === expected.global &&
2298 actual.multiline === expected.multiline &&
2299 actual.lastIndex === expected.lastIndex &&
2300 actual.ignoreCase === expected.ignoreCase;
3af2954a 2301
ab78acc6
IC
2302 // 7.4. Other pairs that do not both pass typeof value == 'object',
2303 // equivalence is determined by ==.
2304 } else if (!util.isObject(actual) && !util.isObject(expected)) {
2305 return actual == expected;
3af2954a 2306
ab78acc6
IC
2307 // 7.5 For all other Object pairs, including Array objects, equivalence is
2308 // determined by having the same number of owned properties (as verified
2309 // with Object.prototype.hasOwnProperty.call), the same set of keys
2310 // (although not necessarily the same order), equivalent values for every
2311 // corresponding key, and an identical 'prototype' property. Note: this
2312 // accounts for both named and indexed properties on Arrays.
2313 } else {
2314 return objEquiv(actual, expected);
3af2954a 2315 }
ab78acc6 2316}
3af2954a 2317
ab78acc6
IC
2318function isArguments(object) {
2319 return Object.prototype.toString.call(object) == '[object Arguments]';
2320}
3af2954a 2321
ab78acc6
IC
2322function objEquiv(a, b) {
2323 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
2324 return false;
2325 // an identical 'prototype' property.
2326 if (a.prototype !== b.prototype) return false;
2327 // if one is a primitive, the other must be same
2328 if (util.isPrimitive(a) || util.isPrimitive(b)) {
2329 return a === b;
3af2954a 2330 }
ab78acc6
IC
2331 var aIsArgs = isArguments(a),
2332 bIsArgs = isArguments(b);
2333 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
2334 return false;
2335 if (aIsArgs) {
2336 a = pSlice.call(a);
2337 b = pSlice.call(b);
2338 return _deepEqual(a, b);
3af2954a 2339 }
ab78acc6
IC
2340 var ka = objectKeys(a),
2341 kb = objectKeys(b),
2342 key, i;
2343 // having the same number of owned properties (keys incorporates
2344 // hasOwnProperty)
2345 if (ka.length != kb.length)
2346 return false;
2347 //the same set of keys (although not necessarily the same order),
2348 ka.sort();
2349 kb.sort();
2350 //~~~cheap key test
2351 for (i = ka.length - 1; i >= 0; i--) {
2352 if (ka[i] != kb[i])
2353 return false;
3af2954a 2354 }
ab78acc6
IC
2355 //equivalent values for every corresponding key, and
2356 //~~~possibly expensive deep test
2357 for (i = ka.length - 1; i >= 0; i--) {
2358 key = ka[i];
2359 if (!_deepEqual(a[key], b[key])) return false;
3af2954a 2360 }
ab78acc6
IC
2361 return true;
2362}
2363
2364// 8. The non-equivalence assertion tests for any deep inequality.
2365// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 2366
ab78acc6
IC
2367assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
2368 if (_deepEqual(actual, expected)) {
2369 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 2370 }
ab78acc6 2371};
3af2954a 2372
ab78acc6
IC
2373// 9. The strict equality assertion tests strict equality, as determined by ===.
2374// assert.strictEqual(actual, expected, message_opt);
3af2954a 2375
ab78acc6
IC
2376assert.strictEqual = function strictEqual(actual, expected, message) {
2377 if (actual !== expected) {
2378 fail(actual, expected, message, '===', assert.strictEqual);
3af2954a 2379 }
ab78acc6 2380};
3af2954a 2381
ab78acc6
IC
2382// 10. The strict non-equality assertion tests for strict inequality, as
2383// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 2384
ab78acc6
IC
2385assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
2386 if (actual === expected) {
2387 fail(actual, expected, message, '!==', assert.notStrictEqual);
2388 }
2389};
3af2954a 2390
ab78acc6
IC
2391function expectedException(actual, expected) {
2392 if (!actual || !expected) {
2393 return false;
2394 }
3af2954a 2395
ab78acc6
IC
2396 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
2397 return expected.test(actual);
2398 } else if (actual instanceof expected) {
2399 return true;
2400 } else if (expected.call({}, actual) === true) {
2401 return true;
3af2954a
IC
2402 }
2403
ab78acc6
IC
2404 return false;
2405}
3af2954a 2406
ab78acc6
IC
2407function _throws(shouldThrow, block, expected, message) {
2408 var actual;
3af2954a 2409
ab78acc6
IC
2410 if (util.isString(expected)) {
2411 message = expected;
2412 expected = null;
3af2954a
IC
2413 }
2414
ab78acc6
IC
2415 try {
2416 block();
2417 } catch (e) {
2418 actual = e;
3af2954a
IC
2419 }
2420
ab78acc6
IC
2421 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
2422 (message ? ' ' + message : '.');
3af2954a 2423
ab78acc6
IC
2424 if (shouldThrow && !actual) {
2425 fail(actual, expected, 'Missing expected exception' + message);
3af2954a
IC
2426 }
2427
ab78acc6
IC
2428 if (!shouldThrow && expectedException(actual, expected)) {
2429 fail(actual, expected, 'Got unwanted exception' + message);
3af2954a
IC
2430 }
2431
ab78acc6
IC
2432 if ((shouldThrow && actual && expected &&
2433 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
2434 throw actual;
3af2954a 2435 }
ab78acc6 2436}
3af2954a 2437
ab78acc6
IC
2438// 11. Expected to throw an error:
2439// assert.throws(block, Error_opt, message_opt);
3af2954a 2440
ab78acc6
IC
2441assert.throws = function(block, /*optional*/error, /*optional*/message) {
2442 _throws.apply(this, [true].concat(pSlice.call(arguments)));
2443};
3af2954a 2444
ab78acc6
IC
2445// EXTENSION! This is annoying to write outside this module.
2446assert.doesNotThrow = function(block, /*optional*/message) {
2447 _throws.apply(this, [false].concat(pSlice.call(arguments)));
2448};
3af2954a 2449
ab78acc6 2450assert.ifError = function(err) { if (err) {throw err;}};
3af2954a 2451
ab78acc6
IC
2452var objectKeys = Object.keys || function (obj) {
2453 var keys = [];
2454 for (var key in obj) {
2455 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 2456 }
ab78acc6
IC
2457 return keys;
2458};
3af2954a 2459
ab78acc6 2460},{"util/":29}],6:[function(require,module,exports){
3af2954a 2461
ab78acc6
IC
2462},{}],7:[function(require,module,exports){
2463/*!
2464 * The buffer module from node.js, for the browser.
2465 *
2466 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
2467 * @license MIT
2468 */
3af2954a 2469
ab78acc6
IC
2470var base64 = require('base64-js')
2471var ieee754 = require('ieee754')
2472var isArray = require('is-array')
3af2954a 2473
ab78acc6
IC
2474exports.Buffer = Buffer
2475exports.SlowBuffer = SlowBuffer
2476exports.INSPECT_MAX_BYTES = 50
2477Buffer.poolSize = 8192 // not used by this implementation
3af2954a 2478
ab78acc6 2479var rootParent = {}
3af2954a 2480
ab78acc6
IC
2481/**
2482 * If `Buffer.TYPED_ARRAY_SUPPORT`:
2483 * === true Use Uint8Array implementation (fastest)
2484 * === false Use Object implementation (most compatible, even IE6)
2485 *
2486 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
2487 * Opera 11.6+, iOS 4.2+.
2488 *
2489 * Due to various browser bugs, sometimes the Object implementation will be used even
2490 * when the browser supports typed arrays.
2491 *
2492 * Note:
2493 *
2494 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
2495 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
2496 *
2497 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
2498 * on objects.
2499 *
2500 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
2501 *
2502 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
2503 * incorrect length in some situations.
3af2954a 2504
ab78acc6
IC
2505 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
2506 * get the Object implementation, which is slower but behaves correctly.
2507 */
2508Buffer.TYPED_ARRAY_SUPPORT = (function () {
2509 function Bar () {}
2510 try {
2511 var arr = new Uint8Array(1)
2512 arr.foo = function () { return 42 }
2513 arr.constructor = Bar
2514 return arr.foo() === 42 && // typed array instances can be augmented
2515 arr.constructor === Bar && // constructor can be set
2516 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
2517 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
2518 } catch (e) {
2519 return false
2520 }
2521})()
3af2954a 2522
ab78acc6
IC
2523function kMaxLength () {
2524 return Buffer.TYPED_ARRAY_SUPPORT
2525 ? 0x7fffffff
2526 : 0x3fffffff
2527}
3af2954a 2528
ab78acc6
IC
2529/**
2530 * Class: Buffer
2531 * =============
2532 *
2533 * The Buffer constructor returns instances of `Uint8Array` that are augmented
2534 * with function properties for all the node `Buffer` API functions. We use
2535 * `Uint8Array` so that square bracket notation works as expected -- it returns
2536 * a single octet.
2537 *
2538 * By augmenting the instances, we can avoid modifying the `Uint8Array`
2539 * prototype.
2540 */
2541function Buffer (arg) {
2542 if (!(this instanceof Buffer)) {
2543 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
2544 if (arguments.length > 1) return new Buffer(arg, arguments[1])
2545 return new Buffer(arg)
3af2954a
IC
2546 }
2547
ab78acc6
IC
2548 this.length = 0
2549 this.parent = undefined
3af2954a 2550
ab78acc6
IC
2551 // Common case.
2552 if (typeof arg === 'number') {
2553 return fromNumber(this, arg)
2554 }
3af2954a 2555
ab78acc6
IC
2556 // Slightly less common case.
2557 if (typeof arg === 'string') {
2558 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
2559 }
3af2954a 2560
ab78acc6
IC
2561 // Unusual.
2562 return fromObject(this, arg)
2563}
3af2954a 2564
ab78acc6
IC
2565function fromNumber (that, length) {
2566 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
2567 if (!Buffer.TYPED_ARRAY_SUPPORT) {
2568 for (var i = 0; i < length; i++) {
2569 that[i] = 0
2570 }
3af2954a 2571 }
ab78acc6
IC
2572 return that
2573}
3af2954a 2574
ab78acc6
IC
2575function fromString (that, string, encoding) {
2576 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
3af2954a 2577
ab78acc6
IC
2578 // Assumption: byteLength() return value is always < kMaxLength.
2579 var length = byteLength(string, encoding) | 0
2580 that = allocate(that, length)
3af2954a 2581
ab78acc6
IC
2582 that.write(string, encoding)
2583 return that
2584}
3af2954a 2585
ab78acc6
IC
2586function fromObject (that, object) {
2587 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
3af2954a 2588
ab78acc6 2589 if (isArray(object)) return fromArray(that, object)
3af2954a 2590
ab78acc6
IC
2591 if (object == null) {
2592 throw new TypeError('must start with number, buffer, array or string')
2593 }
3af2954a 2594
ab78acc6
IC
2595 if (typeof ArrayBuffer !== 'undefined') {
2596 if (object.buffer instanceof ArrayBuffer) {
2597 return fromTypedArray(that, object)
2598 }
2599 if (object instanceof ArrayBuffer) {
2600 return fromArrayBuffer(that, object)
2601 }
3af2954a
IC
2602 }
2603
ab78acc6 2604 if (object.length) return fromArrayLike(that, object)
3af2954a 2605
ab78acc6
IC
2606 return fromJsonObject(that, object)
2607}
3af2954a 2608
ab78acc6
IC
2609function fromBuffer (that, buffer) {
2610 var length = checked(buffer.length) | 0
2611 that = allocate(that, length)
2612 buffer.copy(that, 0, 0, length)
2613 return that
2614}
3af2954a 2615
ab78acc6
IC
2616function fromArray (that, array) {
2617 var length = checked(array.length) | 0
2618 that = allocate(that, length)
2619 for (var i = 0; i < length; i += 1) {
2620 that[i] = array[i] & 255
3af2954a 2621 }
ab78acc6
IC
2622 return that
2623}
3af2954a 2624
ab78acc6
IC
2625// Duplicate of fromArray() to keep fromArray() monomorphic.
2626function fromTypedArray (that, array) {
2627 var length = checked(array.length) | 0
2628 that = allocate(that, length)
2629 // Truncating the elements is probably not what people expect from typed
2630 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
2631 // of the old Buffer constructor.
2632 for (var i = 0; i < length; i += 1) {
2633 that[i] = array[i] & 255
3af2954a 2634 }
ab78acc6
IC
2635 return that
2636}
3af2954a 2637
ab78acc6
IC
2638function fromArrayBuffer (that, array) {
2639 if (Buffer.TYPED_ARRAY_SUPPORT) {
2640 // Return an augmented `Uint8Array` instance, for best performance
2641 array.byteLength
2642 that = Buffer._augment(new Uint8Array(array))
2643 } else {
2644 // Fallback: Return an object instance of the Buffer class
2645 that = fromTypedArray(that, new Uint8Array(array))
2646 }
2647 return that
2648}
3af2954a 2649
ab78acc6
IC
2650function fromArrayLike (that, array) {
2651 var length = checked(array.length) | 0
2652 that = allocate(that, length)
2653 for (var i = 0; i < length; i += 1) {
2654 that[i] = array[i] & 255
3af2954a 2655 }
ab78acc6
IC
2656 return that
2657}
3af2954a 2658
ab78acc6
IC
2659// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
2660// Returns a zero-length buffer for inputs that don't conform to the spec.
2661function fromJsonObject (that, object) {
2662 var array
2663 var length = 0
2664
2665 if (object.type === 'Buffer' && isArray(object.data)) {
2666 array = object.data
2667 length = checked(array.length) | 0
3af2954a 2668 }
ab78acc6 2669 that = allocate(that, length)
3af2954a 2670
ab78acc6
IC
2671 for (var i = 0; i < length; i += 1) {
2672 that[i] = array[i] & 255
3af2954a 2673 }
ab78acc6
IC
2674 return that
2675}
3af2954a 2676
ab78acc6
IC
2677function allocate (that, length) {
2678 if (Buffer.TYPED_ARRAY_SUPPORT) {
2679 // Return an augmented `Uint8Array` instance, for best performance
2680 that = Buffer._augment(new Uint8Array(length))
2681 } else {
2682 // Fallback: Return an object instance of the Buffer class
2683 that.length = length
2684 that._isBuffer = true
2685 }
3af2954a 2686
ab78acc6
IC
2687 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
2688 if (fromPool) that.parent = rootParent
3af2954a 2689
ab78acc6
IC
2690 return that
2691}
3af2954a 2692
ab78acc6
IC
2693function checked (length) {
2694 // Note: cannot use `length < kMaxLength` here because that fails when
2695 // length is NaN (which is otherwise coerced to zero.)
2696 if (length >= kMaxLength()) {
2697 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
2698 'size: 0x' + kMaxLength().toString(16) + ' bytes')
3af2954a 2699 }
ab78acc6
IC
2700 return length | 0
2701}
3af2954a 2702
ab78acc6
IC
2703function SlowBuffer (subject, encoding) {
2704 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
3af2954a 2705
ab78acc6
IC
2706 var buf = new Buffer(subject, encoding)
2707 delete buf.parent
2708 return buf
2709}
3af2954a 2710
ab78acc6
IC
2711Buffer.isBuffer = function isBuffer (b) {
2712 return !!(b != null && b._isBuffer)
2713}
3af2954a 2714
ab78acc6
IC
2715Buffer.compare = function compare (a, b) {
2716 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
2717 throw new TypeError('Arguments must be Buffers')
3af2954a
IC
2718 }
2719
ab78acc6 2720 if (a === b) return 0
3af2954a 2721
ab78acc6
IC
2722 var x = a.length
2723 var y = b.length
3af2954a 2724
ab78acc6
IC
2725 var i = 0
2726 var len = Math.min(x, y)
2727 while (i < len) {
2728 if (a[i] !== b[i]) break
3af2954a 2729
ab78acc6
IC
2730 ++i
2731 }
3af2954a 2732
ab78acc6
IC
2733 if (i !== len) {
2734 x = a[i]
2735 y = b[i]
2736 }
3af2954a 2737
ab78acc6
IC
2738 if (x < y) return -1
2739 if (y < x) return 1
2740 return 0
2741}
3af2954a 2742
ab78acc6
IC
2743Buffer.isEncoding = function isEncoding (encoding) {
2744 switch (String(encoding).toLowerCase()) {
2745 case 'hex':
2746 case 'utf8':
2747 case 'utf-8':
2748 case 'ascii':
2749 case 'binary':
2750 case 'base64':
2751 case 'raw':
2752 case 'ucs2':
2753 case 'ucs-2':
2754 case 'utf16le':
2755 case 'utf-16le':
2756 return true
2757 default:
2758 return false
3af2954a 2759 }
ab78acc6 2760}
3af2954a 2761
ab78acc6
IC
2762Buffer.concat = function concat (list, length) {
2763 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
3af2954a 2764
ab78acc6
IC
2765 if (list.length === 0) {
2766 return new Buffer(0)
3af2954a
IC
2767 }
2768
ab78acc6
IC
2769 var i
2770 if (length === undefined) {
2771 length = 0
2772 for (i = 0; i < list.length; i++) {
2773 length += list[i].length
2774 }
3af2954a
IC
2775 }
2776
ab78acc6
IC
2777 var buf = new Buffer(length)
2778 var pos = 0
2779 for (i = 0; i < list.length; i++) {
2780 var item = list[i]
2781 item.copy(buf, pos)
2782 pos += item.length
2783 }
2784 return buf
2785}
3af2954a 2786
ab78acc6
IC
2787function byteLength (string, encoding) {
2788 if (typeof string !== 'string') string = '' + string
2789
2790 var len = string.length
2791 if (len === 0) return 0
2792
2793 // Use a for loop to avoid recursion
2794 var loweredCase = false
2795 for (;;) {
2796 switch (encoding) {
2797 case 'ascii':
2798 case 'binary':
2799 // Deprecated
2800 case 'raw':
2801 case 'raws':
2802 return len
2803 case 'utf8':
2804 case 'utf-8':
2805 return utf8ToBytes(string).length
2806 case 'ucs2':
2807 case 'ucs-2':
2808 case 'utf16le':
2809 case 'utf-16le':
2810 return len * 2
2811 case 'hex':
2812 return len >>> 1
2813 case 'base64':
2814 return base64ToBytes(string).length
2815 default:
2816 if (loweredCase) return utf8ToBytes(string).length // assume utf8
2817 encoding = ('' + encoding).toLowerCase()
2818 loweredCase = true
3af2954a 2819 }
3af2954a 2820 }
ab78acc6
IC
2821}
2822Buffer.byteLength = byteLength
3af2954a 2823
ab78acc6
IC
2824// pre-set for values that may exist in the future
2825Buffer.prototype.length = undefined
2826Buffer.prototype.parent = undefined
3af2954a 2827
ab78acc6
IC
2828function slowToString (encoding, start, end) {
2829 var loweredCase = false
3af2954a 2830
ab78acc6
IC
2831 start = start | 0
2832 end = end === undefined || end === Infinity ? this.length : end | 0
3af2954a 2833
ab78acc6
IC
2834 if (!encoding) encoding = 'utf8'
2835 if (start < 0) start = 0
2836 if (end > this.length) end = this.length
2837 if (end <= start) return ''
3af2954a 2838
ab78acc6
IC
2839 while (true) {
2840 switch (encoding) {
2841 case 'hex':
2842 return hexSlice(this, start, end)
3af2954a 2843
ab78acc6
IC
2844 case 'utf8':
2845 case 'utf-8':
2846 return utf8Slice(this, start, end)
3af2954a 2847
ab78acc6
IC
2848 case 'ascii':
2849 return asciiSlice(this, start, end)
3af2954a 2850
ab78acc6
IC
2851 case 'binary':
2852 return binarySlice(this, start, end)
3af2954a 2853
ab78acc6
IC
2854 case 'base64':
2855 return base64Slice(this, start, end)
3af2954a 2856
ab78acc6
IC
2857 case 'ucs2':
2858 case 'ucs-2':
2859 case 'utf16le':
2860 case 'utf-16le':
2861 return utf16leSlice(this, start, end)
3af2954a 2862
ab78acc6
IC
2863 default:
2864 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
2865 encoding = (encoding + '').toLowerCase()
2866 loweredCase = true
2867 }
3af2954a 2868 }
ab78acc6 2869}
3af2954a 2870
ab78acc6
IC
2871Buffer.prototype.toString = function toString () {
2872 var length = this.length | 0
2873 if (length === 0) return ''
2874 if (arguments.length === 0) return utf8Slice(this, 0, length)
2875 return slowToString.apply(this, arguments)
2876}
3af2954a 2877
ab78acc6
IC
2878Buffer.prototype.equals = function equals (b) {
2879 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2880 if (this === b) return true
2881 return Buffer.compare(this, b) === 0
2882}
3af2954a 2883
ab78acc6
IC
2884Buffer.prototype.inspect = function inspect () {
2885 var str = ''
2886 var max = exports.INSPECT_MAX_BYTES
2887 if (this.length > 0) {
2888 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
2889 if (this.length > max) str += ' ... '
3af2954a 2890 }
ab78acc6
IC
2891 return '<Buffer ' + str + '>'
2892}
3af2954a 2893
ab78acc6
IC
2894Buffer.prototype.compare = function compare (b) {
2895 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
2896 if (this === b) return 0
2897 return Buffer.compare(this, b)
2898}
3af2954a 2899
ab78acc6
IC
2900Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
2901 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
2902 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
2903 byteOffset >>= 0
3af2954a 2904
ab78acc6
IC
2905 if (this.length === 0) return -1
2906 if (byteOffset >= this.length) return -1
3af2954a 2907
ab78acc6
IC
2908 // Negative offsets start from the end of the buffer
2909 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
3af2954a 2910
ab78acc6
IC
2911 if (typeof val === 'string') {
2912 if (val.length === 0) return -1 // special case: looking for empty string always fails
2913 return String.prototype.indexOf.call(this, val, byteOffset)
3af2954a 2914 }
ab78acc6
IC
2915 if (Buffer.isBuffer(val)) {
2916 return arrayIndexOf(this, val, byteOffset)
3af2954a 2917 }
ab78acc6
IC
2918 if (typeof val === 'number') {
2919 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
2920 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
3af2954a 2921 }
ab78acc6 2922 return arrayIndexOf(this, [ val ], byteOffset)
3af2954a
IC
2923 }
2924
ab78acc6
IC
2925 function arrayIndexOf (arr, val, byteOffset) {
2926 var foundIndex = -1
2927 for (var i = 0; byteOffset + i < arr.length; i++) {
2928 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
2929 if (foundIndex === -1) foundIndex = i
2930 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
3af2954a 2931 } else {
ab78acc6 2932 foundIndex = -1
3af2954a 2933 }
3af2954a 2934 }
ab78acc6
IC
2935 return -1
2936 }
3af2954a 2937
ab78acc6
IC
2938 throw new TypeError('val must be string, number or Buffer')
2939}
3af2954a 2940
ab78acc6
IC
2941// `get` is deprecated
2942Buffer.prototype.get = function get (offset) {
2943 console.log('.get() is deprecated. Access using array indexes instead.')
2944 return this.readUInt8(offset)
2945}
3af2954a 2946
ab78acc6
IC
2947// `set` is deprecated
2948Buffer.prototype.set = function set (v, offset) {
2949 console.log('.set() is deprecated. Access using array indexes instead.')
2950 return this.writeUInt8(v, offset)
2951}
3af2954a 2952
ab78acc6
IC
2953function hexWrite (buf, string, offset, length) {
2954 offset = Number(offset) || 0
2955 var remaining = buf.length - offset
2956 if (!length) {
2957 length = remaining
2958 } else {
2959 length = Number(length)
2960 if (length > remaining) {
2961 length = remaining
2962 }
2963 }
3af2954a 2964
ab78acc6
IC
2965 // must be an even number of digits
2966 var strLen = string.length
2967 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
3af2954a 2968
ab78acc6
IC
2969 if (length > strLen / 2) {
2970 length = strLen / 2
2971 }
2972 for (var i = 0; i < length; i++) {
2973 var parsed = parseInt(string.substr(i * 2, 2), 16)
2974 if (isNaN(parsed)) throw new Error('Invalid hex string')
2975 buf[offset + i] = parsed
3af2954a 2976 }
ab78acc6
IC
2977 return i
2978}
2979
2980function utf8Write (buf, string, offset, length) {
2981 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
2982}
3af2954a 2983
ab78acc6
IC
2984function asciiWrite (buf, string, offset, length) {
2985 return blitBuffer(asciiToBytes(string), buf, offset, length)
2986}
3af2954a 2987
ab78acc6
IC
2988function binaryWrite (buf, string, offset, length) {
2989 return asciiWrite(buf, string, offset, length)
2990}
3af2954a 2991
ab78acc6
IC
2992function base64Write (buf, string, offset, length) {
2993 return blitBuffer(base64ToBytes(string), buf, offset, length)
2994}
3af2954a 2995
ab78acc6
IC
2996function ucs2Write (buf, string, offset, length) {
2997 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
2998}
3af2954a 2999
ab78acc6
IC
3000Buffer.prototype.write = function write (string, offset, length, encoding) {
3001 // Buffer#write(string)
3002 if (offset === undefined) {
3003 encoding = 'utf8'
3004 length = this.length
3005 offset = 0
3006 // Buffer#write(string, encoding)
3007 } else if (length === undefined && typeof offset === 'string') {
3008 encoding = offset
3009 length = this.length
3010 offset = 0
3011 // Buffer#write(string, offset[, length][, encoding])
3012 } else if (isFinite(offset)) {
3013 offset = offset | 0
3014 if (isFinite(length)) {
3015 length = length | 0
3016 if (encoding === undefined) encoding = 'utf8'
3017 } else {
3018 encoding = length
3019 length = undefined
3020 }
3021 // legacy write(string, encoding, offset, length) - remove in v0.13
3022 } else {
3023 var swap = encoding
3024 encoding = offset
3025 offset = length | 0
3026 length = swap
3af2954a
IC
3027 }
3028
ab78acc6
IC
3029 var remaining = this.length - offset
3030 if (length === undefined || length > remaining) length = remaining
3af2954a 3031
ab78acc6
IC
3032 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
3033 throw new RangeError('attempt to write outside buffer bounds')
3034 }
3af2954a 3035
ab78acc6 3036 if (!encoding) encoding = 'utf8'
3af2954a 3037
ab78acc6
IC
3038 var loweredCase = false
3039 for (;;) {
3040 switch (encoding) {
3041 case 'hex':
3042 return hexWrite(this, string, offset, length)
ebd8d4e8 3043
ab78acc6
IC
3044 case 'utf8':
3045 case 'utf-8':
3046 return utf8Write(this, string, offset, length)
ebd8d4e8 3047
ab78acc6
IC
3048 case 'ascii':
3049 return asciiWrite(this, string, offset, length)
ebd8d4e8 3050
ab78acc6
IC
3051 case 'binary':
3052 return binaryWrite(this, string, offset, length)
ebd8d4e8 3053
ab78acc6
IC
3054 case 'base64':
3055 // Warning: maxLength not taken into account in base64Write
3056 return base64Write(this, string, offset, length)
ebd8d4e8 3057
ab78acc6
IC
3058 case 'ucs2':
3059 case 'ucs-2':
3060 case 'utf16le':
3061 case 'utf-16le':
3062 return ucs2Write(this, string, offset, length)
ebd8d4e8 3063
ab78acc6
IC
3064 default:
3065 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
3066 encoding = ('' + encoding).toLowerCase()
3067 loweredCase = true
3068 }
3069 }
3070}
212b1b46 3071
ab78acc6
IC
3072Buffer.prototype.toJSON = function toJSON () {
3073 return {
3074 type: 'Buffer',
3075 data: Array.prototype.slice.call(this._arr || this, 0)
3076 }
3077}
212b1b46 3078
ab78acc6
IC
3079function base64Slice (buf, start, end) {
3080 if (start === 0 && end === buf.length) {
3081 return base64.fromByteArray(buf)
3082 } else {
3083 return base64.fromByteArray(buf.slice(start, end))
3af2954a 3084 }
ab78acc6
IC
3085}
3086
3087function utf8Slice (buf, start, end) {
3088 end = Math.min(buf.length, end)
3089 var firstByte
3090 var secondByte
3091 var thirdByte
3092 var fourthByte
3093 var bytesPerSequence
3094 var tempCodePoint
3095 var codePoint
3096 var res = []
3097 var i = start
3098
3099 for (; i < end; i += bytesPerSequence) {
3100 firstByte = buf[i]
3101 codePoint = 0xFFFD
3102
3103 if (firstByte > 0xEF) {
3104 bytesPerSequence = 4
3105 } else if (firstByte > 0xDF) {
3106 bytesPerSequence = 3
3107 } else if (firstByte > 0xBF) {
3108 bytesPerSequence = 2
3109 } else {
3110 bytesPerSequence = 1
3111 }
212b1b46 3112
ab78acc6
IC
3113 if (i + bytesPerSequence <= end) {
3114 switch (bytesPerSequence) {
3115 case 1:
3116 if (firstByte < 0x80) {
3117 codePoint = firstByte
3118 }
3119 break
3120 case 2:
3121 secondByte = buf[i + 1]
3122 if ((secondByte & 0xC0) === 0x80) {
3123 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
3124 if (tempCodePoint > 0x7F) {
3125 codePoint = tempCodePoint
3126 }
3127 }
3128 break
3129 case 3:
3130 secondByte = buf[i + 1]
3131 thirdByte = buf[i + 2]
3132 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
3133 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
3134 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
3135 codePoint = tempCodePoint
3136 }
3137 }
3138 break
3139 case 4:
3140 secondByte = buf[i + 1]
3141 thirdByte = buf[i + 2]
3142 fourthByte = buf[i + 3]
3143 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
3144 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
3145 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
3146 codePoint = tempCodePoint
3147 }
3148 }
3149 }
3150 }
212b1b46 3151
ab78acc6
IC
3152 if (codePoint === 0xFFFD) {
3153 // we generated an invalid codePoint so make sure to only advance by 1 byte
3154 bytesPerSequence = 1
3155 } else if (codePoint > 0xFFFF) {
3156 // encode to utf16 (surrogate pair dance)
3157 codePoint -= 0x10000
3158 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
3159 codePoint = 0xDC00 | codePoint & 0x3FF
3160 }
212b1b46 3161
ab78acc6 3162 res.push(codePoint)
3af2954a 3163 }
212b1b46 3164
ab78acc6
IC
3165 return String.fromCharCode.apply(String, res)
3166}
212b1b46 3167
ab78acc6
IC
3168function asciiSlice (buf, start, end) {
3169 var ret = ''
3170 end = Math.min(buf.length, end)
3171
3172 for (var i = start; i < end; i++) {
3173 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 3174 }
ab78acc6
IC
3175 return ret
3176}
212b1b46 3177
ab78acc6
IC
3178function binarySlice (buf, start, end) {
3179 var ret = ''
3180 end = Math.min(buf.length, end)
212b1b46 3181
ab78acc6
IC
3182 for (var i = start; i < end; i++) {
3183 ret += String.fromCharCode(buf[i])
3184 }
3185 return ret
3186}
212b1b46 3187
ab78acc6
IC
3188function hexSlice (buf, start, end) {
3189 var len = buf.length
212b1b46 3190
ab78acc6
IC
3191 if (!start || start < 0) start = 0
3192 if (!end || end < 0 || end > len) end = len
212b1b46 3193
ab78acc6
IC
3194 var out = ''
3195 for (var i = start; i < end; i++) {
3196 out += toHex(buf[i])
3197 }
3198 return out
3199}
212b1b46 3200
ab78acc6
IC
3201function utf16leSlice (buf, start, end) {
3202 var bytes = buf.slice(start, end)
3203 var res = ''
3204 for (var i = 0; i < bytes.length; i += 2) {
3205 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
3206 }
3207 return res
3208}
212b1b46 3209
ab78acc6
IC
3210Buffer.prototype.slice = function slice (start, end) {
3211 var len = this.length
3212 start = ~~start
3213 end = end === undefined ? len : ~~end
212b1b46 3214
ab78acc6
IC
3215 if (start < 0) {
3216 start += len
3217 if (start < 0) start = 0
3218 } else if (start > len) {
3219 start = len
3220 }
212b1b46 3221
ab78acc6
IC
3222 if (end < 0) {
3223 end += len
3224 if (end < 0) end = 0
3225 } else if (end > len) {
3226 end = len
3227 }
212b1b46 3228
ab78acc6 3229 if (end < start) end = start
212b1b46 3230
ab78acc6
IC
3231 var newBuf
3232 if (Buffer.TYPED_ARRAY_SUPPORT) {
3233 newBuf = Buffer._augment(this.subarray(start, end))
3234 } else {
3235 var sliceLen = end - start
3236 newBuf = new Buffer(sliceLen, undefined)
3237 for (var i = 0; i < sliceLen; i++) {
3238 newBuf[i] = this[i + start]
3af2954a
IC
3239 }
3240 }
212b1b46 3241
ab78acc6 3242 if (newBuf.length) newBuf.parent = this.parent || this
ebd8d4e8 3243
ab78acc6
IC
3244 return newBuf
3245}
ebd8d4e8 3246
ab78acc6
IC
3247/*
3248 * Need to make sure that buffer isn't trying to write out of bounds.
3249 */
3250function checkOffset (offset, ext, length) {
3251 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
3252 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
3253}
ebd8d4e8 3254
ab78acc6
IC
3255Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
3256 offset = offset | 0
3257 byteLength = byteLength | 0
3258 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 3259
ab78acc6
IC
3260 var val = this[offset]
3261 var mul = 1
3262 var i = 0
3263 while (++i < byteLength && (mul *= 0x100)) {
3264 val += this[offset + i] * mul
3265 }
3af2954a 3266
ab78acc6
IC
3267 return val
3268}
3af2954a 3269
ab78acc6
IC
3270Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
3271 offset = offset | 0
3272 byteLength = byteLength | 0
3273 if (!noAssert) {
3274 checkOffset(offset, byteLength, this.length)
3275 }
3af2954a 3276
ab78acc6
IC
3277 var val = this[offset + --byteLength]
3278 var mul = 1
3279 while (byteLength > 0 && (mul *= 0x100)) {
3280 val += this[offset + --byteLength] * mul
3af2954a
IC
3281 }
3282
ab78acc6
IC
3283 return val
3284}
3af2954a 3285
ab78acc6
IC
3286Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
3287 if (!noAssert) checkOffset(offset, 1, this.length)
3288 return this[offset]
3289}
3af2954a 3290
ab78acc6
IC
3291Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
3292 if (!noAssert) checkOffset(offset, 2, this.length)
3293 return this[offset] | (this[offset + 1] << 8)
3294}
3af2954a 3295
ab78acc6
IC
3296Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
3297 if (!noAssert) checkOffset(offset, 2, this.length)
3298 return (this[offset] << 8) | this[offset + 1]
3299}
ebd8d4e8 3300
ab78acc6
IC
3301Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
3302 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 3303
ab78acc6
IC
3304 return ((this[offset]) |
3305 (this[offset + 1] << 8) |
3306 (this[offset + 2] << 16)) +
3307 (this[offset + 3] * 0x1000000)
3308}
3af2954a 3309
ab78acc6
IC
3310Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
3311 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3312
ab78acc6
IC
3313 return (this[offset] * 0x1000000) +
3314 ((this[offset + 1] << 16) |
3315 (this[offset + 2] << 8) |
3316 this[offset + 3])
3317}
ebd8d4e8 3318
ab78acc6
IC
3319Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
3320 offset = offset | 0
3321 byteLength = byteLength | 0
3322 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3323
ab78acc6
IC
3324 var val = this[offset]
3325 var mul = 1
3326 var i = 0
3327 while (++i < byteLength && (mul *= 0x100)) {
3328 val += this[offset + i] * mul
ebd8d4e8 3329 }
ab78acc6 3330 mul *= 0x80
ebd8d4e8 3331
ab78acc6
IC
3332 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3333
3334 return val
ebd8d4e8
IC
3335}
3336
ab78acc6
IC
3337Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
3338 offset = offset | 0
3339 byteLength = byteLength | 0
3340 if (!noAssert) checkOffset(offset, byteLength, this.length)
ebd8d4e8 3341
ab78acc6
IC
3342 var i = byteLength
3343 var mul = 1
3344 var val = this[offset + --i]
3345 while (i > 0 && (mul *= 0x100)) {
3346 val += this[offset + --i] * mul
3347 }
3348 mul *= 0x80
ebd8d4e8 3349
ab78acc6 3350 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
ebd8d4e8 3351
ab78acc6
IC
3352 return val
3353}
ebd8d4e8 3354
ab78acc6
IC
3355Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
3356 if (!noAssert) checkOffset(offset, 1, this.length)
3357 if (!(this[offset] & 0x80)) return (this[offset])
3358 return ((0xff - this[offset] + 1) * -1)
ebd8d4e8 3359}
ab78acc6
IC
3360
3361Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
3362 if (!noAssert) checkOffset(offset, 2, this.length)
3363 var val = this[offset] | (this[offset + 1] << 8)
3364 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8 3365}
ab78acc6
IC
3366
3367Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
3368 if (!noAssert) checkOffset(offset, 2, this.length)
3369 var val = this[offset + 1] | (this[offset] << 8)
3370 return (val & 0x8000) ? val | 0xFFFF0000 : val
ebd8d4e8
IC
3371}
3372
ab78acc6
IC
3373Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
3374 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3375
ab78acc6
IC
3376 return (this[offset]) |
3377 (this[offset + 1] << 8) |
3378 (this[offset + 2] << 16) |
3379 (this[offset + 3] << 24)
ebd8d4e8 3380}
ebd8d4e8 3381
ab78acc6
IC
3382Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
3383 if (!noAssert) checkOffset(offset, 4, this.length)
ebd8d4e8 3384
ab78acc6
IC
3385 return (this[offset] << 24) |
3386 (this[offset + 1] << 16) |
3387 (this[offset + 2] << 8) |
3388 (this[offset + 3])
ebd8d4e8
IC
3389}
3390
ab78acc6
IC
3391Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
3392 if (!noAssert) checkOffset(offset, 4, this.length)
3393 return ieee754.read(this, offset, true, 23, 4)
ebd8d4e8
IC
3394}
3395
ab78acc6
IC
3396Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
3397 if (!noAssert) checkOffset(offset, 4, this.length)
3398 return ieee754.read(this, offset, false, 23, 4)
ebd8d4e8
IC
3399}
3400
ab78acc6
IC
3401Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
3402 if (!noAssert) checkOffset(offset, 8, this.length)
3403 return ieee754.read(this, offset, true, 52, 8)
ebd8d4e8
IC
3404}
3405
ab78acc6
IC
3406Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
3407 if (!noAssert) checkOffset(offset, 8, this.length)
3408 return ieee754.read(this, offset, false, 52, 8)
ebd8d4e8
IC
3409}
3410
ab78acc6
IC
3411function checkInt (buf, value, offset, ext, max, min) {
3412 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
3413 if (value > max || value < min) throw new RangeError('value is out of bounds')
3414 if (offset + ext > buf.length) throw new RangeError('index out of range')
ebd8d4e8
IC
3415}
3416
ab78acc6
IC
3417Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
3418 value = +value
3419 offset = offset | 0
3420 byteLength = byteLength | 0
3421 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3422
ab78acc6
IC
3423 var mul = 1
3424 var i = 0
3425 this[offset] = value & 0xFF
3426 while (++i < byteLength && (mul *= 0x100)) {
3427 this[offset + i] = (value / mul) & 0xFF
3428 }
ebd8d4e8 3429
ab78acc6 3430 return offset + byteLength
ebd8d4e8
IC
3431}
3432
ab78acc6
IC
3433Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
3434 value = +value
3435 offset = offset | 0
3436 byteLength = byteLength | 0
3437 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
ebd8d4e8 3438
ab78acc6
IC
3439 var i = byteLength - 1
3440 var mul = 1
3441 this[offset + i] = value & 0xFF
3442 while (--i >= 0 && (mul *= 0x100)) {
3443 this[offset + i] = (value / mul) & 0xFF
3444 }
ebd8d4e8 3445
ab78acc6 3446 return offset + byteLength
ebd8d4e8
IC
3447}
3448
ab78acc6
IC
3449Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
3450 value = +value
3451 offset = offset | 0
3452 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
3453 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3454 this[offset] = value
3455 return offset + 1
ebd8d4e8
IC
3456}
3457
ab78acc6
IC
3458function objectWriteUInt16 (buf, value, offset, littleEndian) {
3459 if (value < 0) value = 0xffff + value + 1
3460 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
3461 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
3462 (littleEndian ? i : 1 - i) * 8
ebd8d4e8 3463 }
ebd8d4e8
IC
3464}
3465
ab78acc6
IC
3466Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
3467 value = +value
3468 offset = offset | 0
3469 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3470 if (Buffer.TYPED_ARRAY_SUPPORT) {
3471 this[offset] = value
3472 this[offset + 1] = (value >>> 8)
3473 } else {
3474 objectWriteUInt16(this, value, offset, true)
3475 }
3476 return offset + 2
ebd8d4e8
IC
3477}
3478
ab78acc6
IC
3479Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
3480 value = +value
3481 offset = offset | 0
3482 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
3483 if (Buffer.TYPED_ARRAY_SUPPORT) {
3484 this[offset] = (value >>> 8)
3485 this[offset + 1] = value
3486 } else {
3487 objectWriteUInt16(this, value, offset, false)
ebd8d4e8 3488 }
ab78acc6 3489 return offset + 2
ebd8d4e8
IC
3490}
3491
ab78acc6
IC
3492function objectWriteUInt32 (buf, value, offset, littleEndian) {
3493 if (value < 0) value = 0xffffffff + value + 1
3494 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
3495 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
3496 }
ebd8d4e8
IC
3497}
3498
ab78acc6
IC
3499Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
3500 value = +value
3501 offset = offset | 0
3502 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3503 if (Buffer.TYPED_ARRAY_SUPPORT) {
3504 this[offset + 3] = (value >>> 24)
3505 this[offset + 2] = (value >>> 16)
3506 this[offset + 1] = (value >>> 8)
3507 this[offset] = value
3508 } else {
3509 objectWriteUInt32(this, value, offset, true)
ebd8d4e8 3510 }
ab78acc6 3511 return offset + 4
ebd8d4e8
IC
3512}
3513
ab78acc6
IC
3514Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
3515 value = +value
3516 offset = offset | 0
3517 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
3518 if (Buffer.TYPED_ARRAY_SUPPORT) {
3519 this[offset] = (value >>> 24)
3520 this[offset + 1] = (value >>> 16)
3521 this[offset + 2] = (value >>> 8)
3522 this[offset + 3] = value
3523 } else {
3524 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3525 }
ab78acc6
IC
3526 return offset + 4
3527}
3528
3529Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
3530 value = +value
3531 offset = offset | 0
3532 if (!noAssert) {
3533 var limit = Math.pow(2, 8 * byteLength - 1)
3534
3535 checkInt(this, value, offset, byteLength, limit - 1, -limit)
ebd8d4e8 3536 }
ab78acc6
IC
3537
3538 var i = 0
3539 var mul = 1
3540 var sub = value < 0 ? 1 : 0
3541 this[offset] = value & 0xFF
3542 while (++i < byteLength && (mul *= 0x100)) {
3543 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
ebd8d4e8 3544 }
ebd8d4e8 3545
ab78acc6 3546 return offset + byteLength
ebd8d4e8
IC
3547}
3548
ab78acc6
IC
3549Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
3550 value = +value
3551 offset = offset | 0
3552 if (!noAssert) {
3553 var limit = Math.pow(2, 8 * byteLength - 1)
ebd8d4e8 3554
ab78acc6
IC
3555 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3556 }
ebd8d4e8 3557
ab78acc6
IC
3558 var i = byteLength - 1
3559 var mul = 1
3560 var sub = value < 0 ? 1 : 0
3561 this[offset + i] = value & 0xFF
3562 while (--i >= 0 && (mul *= 0x100)) {
3563 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3564 }
3565
3566 return offset + byteLength
ebd8d4e8
IC
3567}
3568
ab78acc6
IC
3569Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
3570 value = +value
3571 offset = offset | 0
3572 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
3573 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
3574 if (value < 0) value = 0xff + value + 1
3575 this[offset] = value
3576 return offset + 1
ebd8d4e8
IC
3577}
3578
ab78acc6
IC
3579Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
3580 value = +value
3581 offset = offset | 0
3582 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3583 if (Buffer.TYPED_ARRAY_SUPPORT) {
3584 this[offset] = value
3585 this[offset + 1] = (value >>> 8)
3586 } else {
3587 objectWriteUInt16(this, value, offset, true)
3588 }
3589 return offset + 2
ebd8d4e8
IC
3590}
3591
ab78acc6
IC
3592Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
3593 value = +value
3594 offset = offset | 0
3595 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
3596 if (Buffer.TYPED_ARRAY_SUPPORT) {
3597 this[offset] = (value >>> 8)
3598 this[offset + 1] = value
3599 } else {
3600 objectWriteUInt16(this, value, offset, false)
3601 }
3602 return offset + 2
ebd8d4e8
IC
3603}
3604
ab78acc6
IC
3605Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
3606 value = +value
3607 offset = offset | 0
3608 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3609 if (Buffer.TYPED_ARRAY_SUPPORT) {
3610 this[offset] = value
3611 this[offset + 1] = (value >>> 8)
3612 this[offset + 2] = (value >>> 16)
3613 this[offset + 3] = (value >>> 24)
3614 } else {
3615 objectWriteUInt32(this, value, offset, true)
3616 }
3617 return offset + 4
3618}
3619
3620Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
3621 value = +value
3622 offset = offset | 0
3623 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
3624 if (value < 0) value = 0xffffffff + value + 1
3625 if (Buffer.TYPED_ARRAY_SUPPORT) {
3626 this[offset] = (value >>> 24)
3627 this[offset + 1] = (value >>> 16)
3628 this[offset + 2] = (value >>> 8)
3629 this[offset + 3] = value
3630 } else {
3631 objectWriteUInt32(this, value, offset, false)
ebd8d4e8 3632 }
ab78acc6 3633 return offset + 4
ebd8d4e8
IC
3634}
3635
ab78acc6
IC
3636function checkIEEE754 (buf, value, offset, ext, max, min) {
3637 if (value > max || value < min) throw new RangeError('value is out of bounds')
3638 if (offset + ext > buf.length) throw new RangeError('index out of range')
3639 if (offset < 0) throw new RangeError('index out of range')
3640}
ebd8d4e8 3641
ab78acc6
IC
3642function writeFloat (buf, value, offset, littleEndian, noAssert) {
3643 if (!noAssert) {
3644 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3645 }
3646 ieee754.write(buf, value, offset, littleEndian, 23, 4)
3647 return offset + 4
3648}
ebd8d4e8 3649
ab78acc6
IC
3650Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
3651 return writeFloat(this, value, offset, true, noAssert)
3652}
ebd8d4e8 3653
ab78acc6
IC
3654Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
3655 return writeFloat(this, value, offset, false, noAssert)
3656}
ebd8d4e8 3657
ab78acc6
IC
3658function writeDouble (buf, value, offset, littleEndian, noAssert) {
3659 if (!noAssert) {
3660 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
ebd8d4e8 3661 }
ab78acc6
IC
3662 ieee754.write(buf, value, offset, littleEndian, 52, 8)
3663 return offset + 8
ebd8d4e8
IC
3664}
3665
ab78acc6
IC
3666Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
3667 return writeDouble(this, value, offset, true, noAssert)
ebd8d4e8
IC
3668}
3669
ab78acc6
IC
3670Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
3671 return writeDouble(this, value, offset, false, noAssert)
3672}
ebd8d4e8 3673
ab78acc6
IC
3674// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
3675Buffer.prototype.copy = function copy (target, targetStart, start, end) {
3676 if (!start) start = 0
3677 if (!end && end !== 0) end = this.length
3678 if (targetStart >= target.length) targetStart = target.length
3679 if (!targetStart) targetStart = 0
3680 if (end > 0 && end < start) end = start
3681
3682 // Copy 0 bytes; we're done
3683 if (end === start) return 0
3684 if (target.length === 0 || this.length === 0) return 0
ebd8d4e8 3685
ab78acc6
IC
3686 // Fatal error conditions
3687 if (targetStart < 0) {
3688 throw new RangeError('targetStart out of bounds')
3689 }
3690 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
3691 if (end < 0) throw new RangeError('sourceEnd out of bounds')
ebd8d4e8 3692
ab78acc6
IC
3693 // Are we oob?
3694 if (end > this.length) end = this.length
3695 if (target.length - targetStart < end - start) {
3696 end = target.length - targetStart + start
3697 }
ebd8d4e8 3698
ab78acc6
IC
3699 var len = end - start
3700 var i
ebd8d4e8 3701
ab78acc6
IC
3702 if (this === target && start < targetStart && targetStart < end) {
3703 // descending copy from end
3704 for (i = len - 1; i >= 0; i--) {
3705 target[i + targetStart] = this[i + start]
3706 }
3707 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
3708 // ascending copy from start
3709 for (i = 0; i < len; i++) {
3710 target[i + targetStart] = this[i + start]
3711 }
3712 } else {
3713 target._set(this.subarray(start, start + len), targetStart)
ebd8d4e8 3714 }
ebd8d4e8 3715
ab78acc6
IC
3716 return len
3717}
ebd8d4e8 3718
ab78acc6
IC
3719// fill(value, start=0, end=buffer.length)
3720Buffer.prototype.fill = function fill (value, start, end) {
3721 if (!value) value = 0
3722 if (!start) start = 0
3723 if (!end) end = this.length
ebd8d4e8 3724
ab78acc6 3725 if (end < start) throw new RangeError('end < start')
ebd8d4e8 3726
ab78acc6
IC
3727 // Fill 0 bytes; we're done
3728 if (end === start) return
3729 if (this.length === 0) return
ebd8d4e8 3730
ab78acc6
IC
3731 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
3732 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
ebd8d4e8 3733
ab78acc6
IC
3734 var i
3735 if (typeof value === 'number') {
3736 for (i = start; i < end; i++) {
3737 this[i] = value
ebd8d4e8 3738 }
ab78acc6
IC
3739 } else {
3740 var bytes = utf8ToBytes(value.toString())
3741 var len = bytes.length
3742 for (i = start; i < end; i++) {
3743 this[i] = bytes[i % len]
ebd8d4e8
IC
3744 }
3745 }
ebd8d4e8 3746
ab78acc6 3747 return this
ebd8d4e8
IC
3748}
3749
ab78acc6
IC
3750/**
3751 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
3752 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
3753 */
3754Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
3755 if (typeof Uint8Array !== 'undefined') {
3756 if (Buffer.TYPED_ARRAY_SUPPORT) {
3757 return (new Buffer(this)).buffer
3758 } else {
3759 var buf = new Uint8Array(this.length)
3760 for (var i = 0, len = buf.length; i < len; i += 1) {
3761 buf[i] = this[i]
ebd8d4e8 3762 }
ab78acc6 3763 return buf.buffer
ebd8d4e8 3764 }
ab78acc6
IC
3765 } else {
3766 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
ebd8d4e8 3767 }
ebd8d4e8
IC
3768}
3769
ab78acc6
IC
3770// HELPER FUNCTIONS
3771// ================
ebd8d4e8 3772
ab78acc6 3773var BP = Buffer.prototype
ebd8d4e8 3774
ab78acc6
IC
3775/**
3776 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
3777 */
3778Buffer._augment = function _augment (arr) {
3779 arr.constructor = Buffer
3780 arr._isBuffer = true
ebd8d4e8 3781
ab78acc6
IC
3782 // save reference to original Uint8Array set method before overwriting
3783 arr._set = arr.set
ebd8d4e8 3784
ab78acc6
IC
3785 // deprecated
3786 arr.get = BP.get
3787 arr.set = BP.set
ebd8d4e8 3788
ab78acc6
IC
3789 arr.write = BP.write
3790 arr.toString = BP.toString
3791 arr.toLocaleString = BP.toString
3792 arr.toJSON = BP.toJSON
3793 arr.equals = BP.equals
3794 arr.compare = BP.compare
3795 arr.indexOf = BP.indexOf
3796 arr.copy = BP.copy
3797 arr.slice = BP.slice
3798 arr.readUIntLE = BP.readUIntLE
3799 arr.readUIntBE = BP.readUIntBE
3800 arr.readUInt8 = BP.readUInt8
3801 arr.readUInt16LE = BP.readUInt16LE
3802 arr.readUInt16BE = BP.readUInt16BE
3803 arr.readUInt32LE = BP.readUInt32LE
3804 arr.readUInt32BE = BP.readUInt32BE
3805 arr.readIntLE = BP.readIntLE
3806 arr.readIntBE = BP.readIntBE
3807 arr.readInt8 = BP.readInt8
3808 arr.readInt16LE = BP.readInt16LE
3809 arr.readInt16BE = BP.readInt16BE
3810 arr.readInt32LE = BP.readInt32LE
3811 arr.readInt32BE = BP.readInt32BE
3812 arr.readFloatLE = BP.readFloatLE
3813 arr.readFloatBE = BP.readFloatBE
3814 arr.readDoubleLE = BP.readDoubleLE
3815 arr.readDoubleBE = BP.readDoubleBE
3816 arr.writeUInt8 = BP.writeUInt8
3817 arr.writeUIntLE = BP.writeUIntLE
3818 arr.writeUIntBE = BP.writeUIntBE
3819 arr.writeUInt16LE = BP.writeUInt16LE
3820 arr.writeUInt16BE = BP.writeUInt16BE
3821 arr.writeUInt32LE = BP.writeUInt32LE
3822 arr.writeUInt32BE = BP.writeUInt32BE
3823 arr.writeIntLE = BP.writeIntLE
3824 arr.writeIntBE = BP.writeIntBE
3825 arr.writeInt8 = BP.writeInt8
3826 arr.writeInt16LE = BP.writeInt16LE
3827 arr.writeInt16BE = BP.writeInt16BE
3828 arr.writeInt32LE = BP.writeInt32LE
3829 arr.writeInt32BE = BP.writeInt32BE
3830 arr.writeFloatLE = BP.writeFloatLE
3831 arr.writeFloatBE = BP.writeFloatBE
3832 arr.writeDoubleLE = BP.writeDoubleLE
3833 arr.writeDoubleBE = BP.writeDoubleBE
3834 arr.fill = BP.fill
3835 arr.inspect = BP.inspect
3836 arr.toArrayBuffer = BP.toArrayBuffer
ebd8d4e8 3837
ab78acc6 3838 return arr
ebd8d4e8
IC
3839}
3840
ab78acc6 3841var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
ebd8d4e8 3842
ab78acc6
IC
3843function base64clean (str) {
3844 // Node strips out invalid characters like \n and \t from the string, base64-js does not
3845 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
3846 // Node converts strings with length < 2 to ''
3847 if (str.length < 2) return ''
3848 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
3849 while (str.length % 4 !== 0) {
3850 str = str + '='
3851 }
3852 return str
ebd8d4e8
IC
3853}
3854
ab78acc6
IC
3855function stringtrim (str) {
3856 if (str.trim) return str.trim()
3857 return str.replace(/^\s+|\s+$/g, '')
ebd8d4e8
IC
3858}
3859
ab78acc6
IC
3860function toHex (n) {
3861 if (n < 16) return '0' + n.toString(16)
3862 return n.toString(16)
ebd8d4e8
IC
3863}
3864
ab78acc6
IC
3865function utf8ToBytes (string, units) {
3866 units = units || Infinity
3867 var codePoint
3868 var length = string.length
3869 var leadSurrogate = null
3870 var bytes = []
ebd8d4e8 3871
ab78acc6
IC
3872 for (var i = 0; i < length; i++) {
3873 codePoint = string.charCodeAt(i)
ebd8d4e8 3874
ab78acc6
IC
3875 // is surrogate component
3876 if (codePoint > 0xD7FF && codePoint < 0xE000) {
3877 // last char was a lead
3878 if (!leadSurrogate) {
3879 // no lead yet
3880 if (codePoint > 0xDBFF) {
3881 // unexpected trail
3882 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3883 continue
ebd8d4e8 3884
ab78acc6
IC
3885 } else if (i + 1 === length) {
3886 // unpaired lead
3887 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3888 continue
3889 }
ebd8d4e8 3890
ab78acc6
IC
3891 // valid lead
3892 leadSurrogate = codePoint
ebd8d4e8 3893
ab78acc6
IC
3894 continue
3895 }
ebd8d4e8 3896
ab78acc6
IC
3897 // 2 leads in a row
3898 if (codePoint < 0xDC00) {
3899 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3900 leadSurrogate = codePoint
3901 continue
3902 }
ebd8d4e8 3903
ab78acc6
IC
3904 // valid surrogate pair
3905 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
3906
3907 } else if (leadSurrogate) {
3908 // valid bmp char, but last char was a lead
3909 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
3910 }
3911
3912 leadSurrogate = null
3913
3914 // encode utf8
3915 if (codePoint < 0x80) {
3916 if ((units -= 1) < 0) break
3917 bytes.push(codePoint)
3918 } else if (codePoint < 0x800) {
3919 if ((units -= 2) < 0) break
3920 bytes.push(
3921 codePoint >> 0x6 | 0xC0,
3922 codePoint & 0x3F | 0x80
3923 )
3924 } else if (codePoint < 0x10000) {
3925 if ((units -= 3) < 0) break
3926 bytes.push(
3927 codePoint >> 0xC | 0xE0,
3928 codePoint >> 0x6 & 0x3F | 0x80,
3929 codePoint & 0x3F | 0x80
3930 )
3931 } else if (codePoint < 0x110000) {
3932 if ((units -= 4) < 0) break
3933 bytes.push(
3934 codePoint >> 0x12 | 0xF0,
3935 codePoint >> 0xC & 0x3F | 0x80,
3936 codePoint >> 0x6 & 0x3F | 0x80,
3937 codePoint & 0x3F | 0x80
3938 )
3939 } else {
3940 throw new Error('Invalid code point')
ebd8d4e8 3941 }
ebd8d4e8 3942 }
ab78acc6
IC
3943
3944 return bytes
3945}
3946
3947function asciiToBytes (str) {
3948 var byteArray = []
3949 for (var i = 0; i < str.length; i++) {
3950 // Node's code seems to be doing this and not & 0x7F..
3951 byteArray.push(str.charCodeAt(i) & 0xFF)
ebd8d4e8 3952 }
ab78acc6 3953 return byteArray
ebd8d4e8
IC
3954}
3955
ab78acc6
IC
3956function utf16leToBytes (str, units) {
3957 var c, hi, lo
3958 var byteArray = []
3959 for (var i = 0; i < str.length; i++) {
3960 if ((units -= 2) < 0) break
ebd8d4e8 3961
ab78acc6
IC
3962 c = str.charCodeAt(i)
3963 hi = c >> 8
3964 lo = c % 256
3965 byteArray.push(lo)
3966 byteArray.push(hi)
3967 }
ebd8d4e8 3968
ab78acc6
IC
3969 return byteArray
3970}
ebd8d4e8 3971
ab78acc6
IC
3972function base64ToBytes (str) {
3973 return base64.toByteArray(base64clean(str))
3974}
ebd8d4e8 3975
ab78acc6
IC
3976function blitBuffer (src, dst, offset, length) {
3977 for (var i = 0; i < length; i++) {
3978 if ((i + offset >= dst.length) || (i >= src.length)) break
3979 dst[i + offset] = src[i]
3980 }
3981 return i
3982}
3983
3984},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
3985var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
3986
3987;(function (exports) {
3988 'use strict';
3989
3990 var Arr = (typeof Uint8Array !== 'undefined')
3991 ? Uint8Array
3992 : Array
ebd8d4e8 3993
ab78acc6
IC
3994 var PLUS = '+'.charCodeAt(0)
3995 var SLASH = '/'.charCodeAt(0)
3996 var NUMBER = '0'.charCodeAt(0)
3997 var LOWER = 'a'.charCodeAt(0)
3998 var UPPER = 'A'.charCodeAt(0)
3999 var PLUS_URL_SAFE = '-'.charCodeAt(0)
4000 var SLASH_URL_SAFE = '_'.charCodeAt(0)
ebd8d4e8 4001
ab78acc6
IC
4002 function decode (elt) {
4003 var code = elt.charCodeAt(0)
4004 if (code === PLUS ||
4005 code === PLUS_URL_SAFE)
4006 return 62 // '+'
4007 if (code === SLASH ||
4008 code === SLASH_URL_SAFE)
4009 return 63 // '/'
4010 if (code < NUMBER)
4011 return -1 //no match
4012 if (code < NUMBER + 10)
4013 return code - NUMBER + 26 + 26
4014 if (code < UPPER + 26)
4015 return code - UPPER
4016 if (code < LOWER + 26)
4017 return code - LOWER + 26
4018 }
ebd8d4e8 4019
ab78acc6
IC
4020 function b64ToByteArray (b64) {
4021 var i, j, l, tmp, placeHolders, arr
ebd8d4e8 4022
ab78acc6
IC
4023 if (b64.length % 4 > 0) {
4024 throw new Error('Invalid string. Length must be a multiple of 4')
4025 }
ebd8d4e8 4026
ab78acc6
IC
4027 // the number of equal signs (place holders)
4028 // if there are two placeholders, than the two characters before it
4029 // represent one byte
4030 // if there is only one, then the three characters before it represent 2 bytes
4031 // this is just a cheap hack to not do indexOf twice
4032 var len = b64.length
4033 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
ebd8d4e8 4034
ab78acc6
IC
4035 // base64 is 4/3 + up to two characters of the original data
4036 arr = new Arr(b64.length * 3 / 4 - placeHolders)
ebd8d4e8 4037
ab78acc6
IC
4038 // if there are placeholders, only get up to the last complete 4 chars
4039 l = placeHolders > 0 ? b64.length - 4 : b64.length
ebd8d4e8 4040
ab78acc6 4041 var L = 0
ebd8d4e8 4042
ab78acc6
IC
4043 function push (v) {
4044 arr[L++] = v
4045 }
ebd8d4e8 4046
ab78acc6
IC
4047 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4048 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
4049 push((tmp & 0xFF0000) >> 16)
4050 push((tmp & 0xFF00) >> 8)
4051 push(tmp & 0xFF)
4052 }
ebd8d4e8 4053
ab78acc6
IC
4054 if (placeHolders === 2) {
4055 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
4056 push(tmp & 0xFF)
4057 } else if (placeHolders === 1) {
4058 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
4059 push((tmp >> 8) & 0xFF)
4060 push(tmp & 0xFF)
4061 }
ebd8d4e8 4062
ab78acc6
IC
4063 return arr
4064 }
ebd8d4e8 4065
ab78acc6
IC
4066 function uint8ToBase64 (uint8) {
4067 var i,
4068 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
4069 output = "",
4070 temp, length
ebd8d4e8 4071
ab78acc6
IC
4072 function encode (num) {
4073 return lookup.charAt(num)
4074 }
ebd8d4e8 4075
ab78acc6
IC
4076 function tripletToBase64 (num) {
4077 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
4078 }
ebd8d4e8 4079
ab78acc6
IC
4080 // go through the array every three bytes, we'll deal with trailing stuff later
4081 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
4082 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4083 output += tripletToBase64(temp)
4084 }
ebd8d4e8 4085
ab78acc6
IC
4086 // pad the end with zeros, but make sure to not forget the extra bytes
4087 switch (extraBytes) {
4088 case 1:
4089 temp = uint8[uint8.length - 1]
4090 output += encode(temp >> 2)
4091 output += encode((temp << 4) & 0x3F)
4092 output += '=='
4093 break
4094 case 2:
4095 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
4096 output += encode(temp >> 10)
4097 output += encode((temp >> 4) & 0x3F)
4098 output += encode((temp << 2) & 0x3F)
4099 output += '='
4100 break
4101 }
ebd8d4e8 4102
ab78acc6
IC
4103 return output
4104 }
ebd8d4e8 4105
ab78acc6
IC
4106 exports.toByteArray = b64ToByteArray
4107 exports.fromByteArray = uint8ToBase64
4108}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
ebd8d4e8 4109
ab78acc6
IC
4110},{}],9:[function(require,module,exports){
4111exports.read = function (buffer, offset, isLE, mLen, nBytes) {
4112 var e, m
4113 var eLen = nBytes * 8 - mLen - 1
4114 var eMax = (1 << eLen) - 1
4115 var eBias = eMax >> 1
4116 var nBits = -7
4117 var i = isLE ? (nBytes - 1) : 0
4118 var d = isLE ? -1 : 1
4119 var s = buffer[offset + i]
4120
4121 i += d
4122
4123 e = s & ((1 << (-nBits)) - 1)
4124 s >>= (-nBits)
4125 nBits += eLen
4126 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
4127
4128 m = e & ((1 << (-nBits)) - 1)
4129 e >>= (-nBits)
4130 nBits += mLen
4131 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 4132
ab78acc6
IC
4133 if (e === 0) {
4134 e = 1 - eBias
4135 } else if (e === eMax) {
4136 return m ? NaN : ((s ? -1 : 1) * Infinity)
4137 } else {
4138 m = m + Math.pow(2, mLen)
4139 e = e - eBias
ebd8d4e8 4140 }
ab78acc6 4141 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
4142}
4143
ab78acc6
IC
4144exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
4145 var e, m, c
4146 var eLen = nBytes * 8 - mLen - 1
4147 var eMax = (1 << eLen) - 1
4148 var eBias = eMax >> 1
4149 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
4150 var i = isLE ? 0 : (nBytes - 1)
4151 var d = isLE ? 1 : -1
4152 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 4153
ab78acc6 4154 value = Math.abs(value)
ebd8d4e8 4155
ab78acc6
IC
4156 if (isNaN(value) || value === Infinity) {
4157 m = isNaN(value) ? 1 : 0
4158 e = eMax
4159 } else {
4160 e = Math.floor(Math.log(value) / Math.LN2)
4161 if (value * (c = Math.pow(2, -e)) < 1) {
4162 e--
4163 c *= 2
ebd8d4e8 4164 }
ab78acc6
IC
4165 if (e + eBias >= 1) {
4166 value += rt / c
4167 } else {
4168 value += rt * Math.pow(2, 1 - eBias)
ebd8d4e8 4169 }
ab78acc6
IC
4170 if (value * c >= 2) {
4171 e++
4172 c /= 2
ebd8d4e8 4173 }
ab78acc6
IC
4174
4175 if (e + eBias >= eMax) {
4176 m = 0
4177 e = eMax
4178 } else if (e + eBias >= 1) {
4179 m = (value * c - 1) * Math.pow(2, mLen)
4180 e = e + eBias
4181 } else {
4182 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
4183 e = 0
ebd8d4e8
IC
4184 }
4185 }
ebd8d4e8 4186
ab78acc6 4187 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 4188
ab78acc6
IC
4189 e = (e << mLen) | m
4190 eLen += mLen
4191 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 4192
ab78acc6
IC
4193 buffer[offset + i - d] |= s * 128
4194}
ebd8d4e8 4195
ab78acc6 4196},{}],10:[function(require,module,exports){
ebd8d4e8 4197
ab78acc6
IC
4198/**
4199 * isArray
4200 */
ebd8d4e8 4201
ab78acc6 4202var isArray = Array.isArray;
ebd8d4e8
IC
4203
4204/**
ab78acc6 4205 * toString
ebd8d4e8 4206 */
ebd8d4e8 4207
ab78acc6 4208var str = Object.prototype.toString;
ebd8d4e8
IC
4209
4210/**
ab78acc6
IC
4211 * Whether or not the given `val`
4212 * is an array.
ebd8d4e8 4213 *
ab78acc6
IC
4214 * example:
4215 *
4216 * isArray([]);
4217 * // > true
4218 * isArray(arguments);
4219 * // > false
4220 * isArray('');
4221 * // > false
4222 *
4223 * @param {mixed} val
4224 * @return {bool}
ebd8d4e8 4225 */
ebd8d4e8 4226
ab78acc6
IC
4227module.exports = isArray || function (val) {
4228 return !! val && '[object Array]' == str.call(val);
4229};
4230
4231},{}],11:[function(require,module,exports){
4232// Copyright Joyent, Inc. and other Node contributors.
4233//
4234// Permission is hereby granted, free of charge, to any person obtaining a
4235// copy of this software and associated documentation files (the
4236// "Software"), to deal in the Software without restriction, including
4237// without limitation the rights to use, copy, modify, merge, publish,
4238// distribute, sublicense, and/or sell copies of the Software, and to permit
4239// persons to whom the Software is furnished to do so, subject to the
4240// following conditions:
4241//
4242// The above copyright notice and this permission notice shall be included
4243// in all copies or substantial portions of the Software.
4244//
4245// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4246// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4247// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4248// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4249// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4250// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4251// USE OR OTHER DEALINGS IN THE SOFTWARE.
4252
4253function EventEmitter() {
4254 this._events = this._events || {};
4255 this._maxListeners = this._maxListeners || undefined;
ebd8d4e8 4256}
ab78acc6 4257module.exports = EventEmitter;
ebd8d4e8 4258
ab78acc6
IC
4259// Backwards-compat with node 0.10.x
4260EventEmitter.EventEmitter = EventEmitter;
ebd8d4e8 4261
ab78acc6
IC
4262EventEmitter.prototype._events = undefined;
4263EventEmitter.prototype._maxListeners = undefined;
4264
4265// By default EventEmitters will print a warning if more than 10 listeners are
4266// added to it. This is a useful default which helps finding memory leaks.
4267EventEmitter.defaultMaxListeners = 10;
4268
4269// Obviously not all Emitters should be limited to 10. This function allows
4270// that to be increased. Set to zero for unlimited.
4271EventEmitter.prototype.setMaxListeners = function(n) {
4272 if (!isNumber(n) || n < 0 || isNaN(n))
4273 throw TypeError('n must be a positive number');
4274 this._maxListeners = n;
4275 return this;
4276};
4277
4278EventEmitter.prototype.emit = function(type) {
4279 var er, handler, len, args, i, listeners;
4280
4281 if (!this._events)
4282 this._events = {};
4283
4284 // If there is no 'error' event listener then throw.
4285 if (type === 'error') {
4286 if (!this._events.error ||
4287 (isObject(this._events.error) && !this._events.error.length)) {
4288 er = arguments[1];
4289 if (er instanceof Error) {
4290 throw er; // Unhandled 'error' event
4291 }
4292 throw TypeError('Uncaught, unspecified "error" event.');
4293 }
4294 }
4295
4296 handler = this._events[type];
4297
4298 if (isUndefined(handler))
4299 return false;
4300
4301 if (isFunction(handler)) {
4302 switch (arguments.length) {
4303 // fast cases
4304 case 1:
4305 handler.call(this);
4306 break;
4307 case 2:
4308 handler.call(this, arguments[1]);
4309 break;
4310 case 3:
4311 handler.call(this, arguments[1], arguments[2]);
4312 break;
4313 // slower
4314 default:
4315 len = arguments.length;
4316 args = new Array(len - 1);
4317 for (i = 1; i < len; i++)
4318 args[i - 1] = arguments[i];
4319 handler.apply(this, args);
4320 }
4321 } else if (isObject(handler)) {
4322 len = arguments.length;
4323 args = new Array(len - 1);
4324 for (i = 1; i < len; i++)
4325 args[i - 1] = arguments[i];
ebd8d4e8 4326
ab78acc6
IC
4327 listeners = handler.slice();
4328 len = listeners.length;
4329 for (i = 0; i < len; i++)
4330 listeners[i].apply(this, args);
ebd8d4e8
IC
4331 }
4332
ab78acc6
IC
4333 return true;
4334};
ebd8d4e8 4335
ab78acc6
IC
4336EventEmitter.prototype.addListener = function(type, listener) {
4337 var m;
ebd8d4e8 4338
ab78acc6
IC
4339 if (!isFunction(listener))
4340 throw TypeError('listener must be a function');
ebd8d4e8 4341
ab78acc6
IC
4342 if (!this._events)
4343 this._events = {};
ebd8d4e8 4344
ab78acc6
IC
4345 // To avoid recursion in the case that type === "newListener"! Before
4346 // adding it to the listeners, first emit "newListener".
4347 if (this._events.newListener)
4348 this.emit('newListener', type,
4349 isFunction(listener.listener) ?
4350 listener.listener : listener);
ebd8d4e8 4351
ab78acc6
IC
4352 if (!this._events[type])
4353 // Optimize the case of one listener. Don't need the extra array object.
4354 this._events[type] = listener;
4355 else if (isObject(this._events[type]))
4356 // If we've already got an array, just append.
4357 this._events[type].push(listener);
4358 else
4359 // Adding the second element, need to change to array.
4360 this._events[type] = [this._events[type], listener];
4361
4362 // Check for listener leak
4363 if (isObject(this._events[type]) && !this._events[type].warned) {
4364 var m;
4365 if (!isUndefined(this._maxListeners)) {
4366 m = this._maxListeners;
4367 } else {
4368 m = EventEmitter.defaultMaxListeners;
4369 }
4370
4371 if (m && m > 0 && this._events[type].length > m) {
4372 this._events[type].warned = true;
4373 console.error('(node) warning: possible EventEmitter memory ' +
4374 'leak detected. %d listeners added. ' +
4375 'Use emitter.setMaxListeners() to increase limit.',
4376 this._events[type].length);
4377 if (typeof console.trace === 'function') {
4378 // not supported in IE 10
4379 console.trace();
4380 }
4381 }
4382 }
ebd8d4e8 4383
ab78acc6
IC
4384 return this;
4385};
ebd8d4e8 4386
ab78acc6 4387EventEmitter.prototype.on = EventEmitter.prototype.addListener;
ebd8d4e8 4388
ab78acc6
IC
4389EventEmitter.prototype.once = function(type, listener) {
4390 if (!isFunction(listener))
4391 throw TypeError('listener must be a function');
ebd8d4e8 4392
ab78acc6 4393 var fired = false;
ebd8d4e8 4394
ab78acc6
IC
4395 function g() {
4396 this.removeListener(type, g);
ebd8d4e8 4397
ab78acc6
IC
4398 if (!fired) {
4399 fired = true;
4400 listener.apply(this, arguments);
4401 }
4402 }
ebd8d4e8 4403
ab78acc6
IC
4404 g.listener = listener;
4405 this.on(type, g);
ebd8d4e8 4406
ab78acc6
IC
4407 return this;
4408};
ebd8d4e8 4409
ab78acc6
IC
4410// emits a 'removeListener' event iff the listener was removed
4411EventEmitter.prototype.removeListener = function(type, listener) {
4412 var list, position, length, i;
ebd8d4e8 4413
ab78acc6
IC
4414 if (!isFunction(listener))
4415 throw TypeError('listener must be a function');
ebd8d4e8 4416
ab78acc6
IC
4417 if (!this._events || !this._events[type])
4418 return this;
ebd8d4e8 4419
ab78acc6
IC
4420 list = this._events[type];
4421 length = list.length;
4422 position = -1;
4423
4424 if (list === listener ||
4425 (isFunction(list.listener) && list.listener === listener)) {
4426 delete this._events[type];
4427 if (this._events.removeListener)
4428 this.emit('removeListener', type, listener);
4429
4430 } else if (isObject(list)) {
4431 for (i = length; i-- > 0;) {
4432 if (list[i] === listener ||
4433 (list[i].listener && list[i].listener === listener)) {
4434 position = i;
4435 break;
ebd8d4e8 4436 }
ab78acc6 4437 }
ebd8d4e8 4438
ab78acc6
IC
4439 if (position < 0)
4440 return this;
4441
4442 if (list.length === 1) {
4443 list.length = 0;
4444 delete this._events[type];
4445 } else {
4446 list.splice(position, 1);
ebd8d4e8 4447 }
ab78acc6
IC
4448
4449 if (this._events.removeListener)
4450 this.emit('removeListener', type, listener);
ebd8d4e8 4451 }
ab78acc6
IC
4452
4453 return this;
ebd8d4e8
IC
4454};
4455
ab78acc6
IC
4456EventEmitter.prototype.removeAllListeners = function(type) {
4457 var key, listeners;
ebd8d4e8 4458
ab78acc6
IC
4459 if (!this._events)
4460 return this;
4461
4462 // not listening for removeListener, no need to emit
4463 if (!this._events.removeListener) {
4464 if (arguments.length === 0)
4465 this._events = {};
4466 else if (this._events[type])
4467 delete this._events[type];
4468 return this;
ebd8d4e8 4469 }
ab78acc6
IC
4470
4471 // emit removeListener for all listeners on all events
4472 if (arguments.length === 0) {
4473 for (key in this._events) {
4474 if (key === 'removeListener') continue;
4475 this.removeAllListeners(key);
4476 }
4477 this.removeAllListeners('removeListener');
4478 this._events = {};
4479 return this;
ebd8d4e8 4480 }
ebd8d4e8 4481
ab78acc6
IC
4482 listeners = this._events[type];
4483
4484 if (isFunction(listeners)) {
4485 this.removeListener(type, listeners);
ebd8d4e8 4486 } else {
ab78acc6
IC
4487 // LIFO order
4488 while (listeners.length)
4489 this.removeListener(type, listeners[listeners.length - 1]);
ebd8d4e8 4490 }
ab78acc6 4491 delete this._events[type];
ebd8d4e8 4492
ab78acc6
IC
4493 return this;
4494};
ebd8d4e8 4495
ab78acc6
IC
4496EventEmitter.prototype.listeners = function(type) {
4497 var ret;
4498 if (!this._events || !this._events[type])
4499 ret = [];
4500 else if (isFunction(this._events[type]))
4501 ret = [this._events[type]];
4502 else
4503 ret = this._events[type].slice();
4504 return ret;
4505};
ebd8d4e8 4506
ab78acc6
IC
4507EventEmitter.listenerCount = function(emitter, type) {
4508 var ret;
4509 if (!emitter._events || !emitter._events[type])
4510 ret = 0;
4511 else if (isFunction(emitter._events[type]))
4512 ret = 1;
4513 else
4514 ret = emitter._events[type].length;
4515 return ret;
4516};
ebd8d4e8 4517
ab78acc6
IC
4518function isFunction(arg) {
4519 return typeof arg === 'function';
ebd8d4e8
IC
4520}
4521
ab78acc6
IC
4522function isNumber(arg) {
4523 return typeof arg === 'number';
4524}
ebd8d4e8 4525
ab78acc6
IC
4526function isObject(arg) {
4527 return typeof arg === 'object' && arg !== null;
4528}
ebd8d4e8 4529
ab78acc6
IC
4530function isUndefined(arg) {
4531 return arg === void 0;
ebd8d4e8 4532}
ebd8d4e8 4533
ab78acc6
IC
4534},{}],12:[function(require,module,exports){
4535if (typeof Object.create === 'function') {
4536 // implementation from standard node.js 'util' module
4537 module.exports = function inherits(ctor, superCtor) {
4538 ctor.super_ = superCtor
4539 ctor.prototype = Object.create(superCtor.prototype, {
4540 constructor: {
4541 value: ctor,
4542 enumerable: false,
4543 writable: true,
4544 configurable: true
4545 }
4546 });
4547 };
4548} else {
4549 // old school shim for old browsers
4550 module.exports = function inherits(ctor, superCtor) {
4551 ctor.super_ = superCtor
4552 var TempCtor = function () {}
4553 TempCtor.prototype = superCtor.prototype
4554 ctor.prototype = new TempCtor()
4555 ctor.prototype.constructor = ctor
4556 }
4557}
ebd8d4e8 4558
ab78acc6
IC
4559},{}],13:[function(require,module,exports){
4560module.exports = Array.isArray || function (arr) {
4561 return Object.prototype.toString.call(arr) == '[object Array]';
ebd8d4e8
IC
4562};
4563
ab78acc6
IC
4564},{}],14:[function(require,module,exports){
4565// shim for using process in browser
ebd8d4e8 4566
ab78acc6
IC
4567var process = module.exports = {};
4568var queue = [];
4569var draining = false;
4570var currentQueue;
4571var queueIndex = -1;
4572
4573function cleanUpNextTick() {
4574 draining = false;
4575 if (currentQueue.length) {
4576 queue = currentQueue.concat(queue);
4577 } else {
4578 queueIndex = -1;
4579 }
4580 if (queue.length) {
4581 drainQueue();
4582 }
4583}
ebd8d4e8 4584
ab78acc6
IC
4585function drainQueue() {
4586 if (draining) {
4587 return;
4588 }
4589 var timeout = setTimeout(cleanUpNextTick);
4590 draining = true;
ebd8d4e8 4591
ab78acc6
IC
4592 var len = queue.length;
4593 while(len) {
4594 currentQueue = queue;
4595 queue = [];
4596 while (++queueIndex < len) {
4597 currentQueue[queueIndex].run();
4598 }
4599 queueIndex = -1;
4600 len = queue.length;
4601 }
4602 currentQueue = null;
4603 draining = false;
4604 clearTimeout(timeout);
4605}
4606
4607process.nextTick = function (fun) {
4608 var args = new Array(arguments.length - 1);
4609 if (arguments.length > 1) {
4610 for (var i = 1; i < arguments.length; i++) {
4611 args[i - 1] = arguments[i];
4612 }
4613 }
4614 queue.push(new Item(fun, args));
4615 if (queue.length === 1 && !draining) {
4616 setTimeout(drainQueue, 0);
4617 }
ebd8d4e8
IC
4618};
4619
ab78acc6
IC
4620// v8 likes predictible objects
4621function Item(fun, array) {
4622 this.fun = fun;
4623 this.array = array;
4624}
4625Item.prototype.run = function () {
4626 this.fun.apply(null, this.array);
4627};
4628process.title = 'browser';
4629process.browser = true;
4630process.env = {};
4631process.argv = [];
4632process.version = ''; // empty string to avoid regexp issues
4633process.versions = {};
ebd8d4e8 4634
ab78acc6
IC
4635function noop() {}
4636
4637process.on = noop;
4638process.addListener = noop;
4639process.once = noop;
4640process.off = noop;
4641process.removeListener = noop;
4642process.removeAllListeners = noop;
4643process.emit = noop;
4644
4645process.binding = function (name) {
4646 throw new Error('process.binding is not supported');
4647};
ebd8d4e8 4648
ab78acc6
IC
4649// TODO(shtylman)
4650process.cwd = function () { return '/' };
4651process.chdir = function (dir) {
4652 throw new Error('process.chdir is not supported');
4653};
4654process.umask = function() { return 0; };
ebd8d4e8 4655
ab78acc6
IC
4656},{}],15:[function(require,module,exports){
4657module.exports = require("./lib/_stream_duplex.js")
ebd8d4e8 4658
ab78acc6
IC
4659},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
4660(function (process){
4661// Copyright Joyent, Inc. and other Node contributors.
4662//
4663// Permission is hereby granted, free of charge, to any person obtaining a
4664// copy of this software and associated documentation files (the
4665// "Software"), to deal in the Software without restriction, including
4666// without limitation the rights to use, copy, modify, merge, publish,
4667// distribute, sublicense, and/or sell copies of the Software, and to permit
4668// persons to whom the Software is furnished to do so, subject to the
4669// following conditions:
4670//
4671// The above copyright notice and this permission notice shall be included
4672// in all copies or substantial portions of the Software.
4673//
4674// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4675// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4676// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4677// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4678// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4679// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4680// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4681
ab78acc6
IC
4682// a duplex stream is just a stream that is both readable and writable.
4683// Since JS doesn't have multiple prototypal inheritance, this class
4684// prototypally inherits from Readable, and then parasitically from
4685// Writable.
ebd8d4e8 4686
ab78acc6 4687module.exports = Duplex;
ebd8d4e8 4688
ab78acc6
IC
4689/*<replacement>*/
4690var objectKeys = Object.keys || function (obj) {
4691 var keys = [];
4692 for (var key in obj) keys.push(key);
4693 return keys;
ebd8d4e8 4694}
ab78acc6 4695/*</replacement>*/
ebd8d4e8 4696
ebd8d4e8 4697
ab78acc6
IC
4698/*<replacement>*/
4699var util = require('core-util-is');
4700util.inherits = require('inherits');
4701/*</replacement>*/
ebd8d4e8 4702
ab78acc6
IC
4703var Readable = require('./_stream_readable');
4704var Writable = require('./_stream_writable');
ebd8d4e8 4705
ab78acc6 4706util.inherits(Duplex, Readable);
ebd8d4e8 4707
ab78acc6
IC
4708forEach(objectKeys(Writable.prototype), function(method) {
4709 if (!Duplex.prototype[method])
4710 Duplex.prototype[method] = Writable.prototype[method];
4711});
ebd8d4e8 4712
ab78acc6
IC
4713function Duplex(options) {
4714 if (!(this instanceof Duplex))
4715 return new Duplex(options);
ebd8d4e8 4716
ab78acc6
IC
4717 Readable.call(this, options);
4718 Writable.call(this, options);
ebd8d4e8 4719
ab78acc6
IC
4720 if (options && options.readable === false)
4721 this.readable = false;
ebd8d4e8 4722
ab78acc6
IC
4723 if (options && options.writable === false)
4724 this.writable = false;
ebd8d4e8 4725
ab78acc6
IC
4726 this.allowHalfOpen = true;
4727 if (options && options.allowHalfOpen === false)
4728 this.allowHalfOpen = false;
ebd8d4e8 4729
ab78acc6 4730 this.once('end', onend);
ebd8d4e8
IC
4731}
4732
ab78acc6
IC
4733// the no-half-open enforcer
4734function onend() {
4735 // if we allow half-open state, or if the writable side ended,
4736 // then we're ok.
4737 if (this.allowHalfOpen || this._writableState.ended)
4738 return;
ebd8d4e8 4739
ab78acc6
IC
4740 // no more data can be written.
4741 // But allow more writes to happen in this tick.
4742 process.nextTick(this.end.bind(this));
4743}
ebd8d4e8 4744
ab78acc6
IC
4745function forEach (xs, f) {
4746 for (var i = 0, l = xs.length; i < l; i++) {
4747 f(xs[i], i);
ebd8d4e8 4748 }
ab78acc6 4749}
ebd8d4e8 4750
ab78acc6
IC
4751}).call(this,require('_process'))
4752},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
4753// Copyright Joyent, Inc. and other Node contributors.
4754//
4755// Permission is hereby granted, free of charge, to any person obtaining a
4756// copy of this software and associated documentation files (the
4757// "Software"), to deal in the Software without restriction, including
4758// without limitation the rights to use, copy, modify, merge, publish,
4759// distribute, sublicense, and/or sell copies of the Software, and to permit
4760// persons to whom the Software is furnished to do so, subject to the
4761// following conditions:
4762//
4763// The above copyright notice and this permission notice shall be included
4764// in all copies or substantial portions of the Software.
4765//
4766// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4767// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4768// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4769// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4770// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4771// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4772// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 4773
ab78acc6
IC
4774// a passthrough stream.
4775// basically just the most minimal sort of Transform stream.
4776// Every written chunk gets output as-is.
ebd8d4e8 4777
ab78acc6 4778module.exports = PassThrough;
ebd8d4e8 4779
ab78acc6 4780var Transform = require('./_stream_transform');
ebd8d4e8 4781
ab78acc6
IC
4782/*<replacement>*/
4783var util = require('core-util-is');
4784util.inherits = require('inherits');
4785/*</replacement>*/
ebd8d4e8 4786
ab78acc6 4787util.inherits(PassThrough, Transform);
ebd8d4e8 4788
ab78acc6
IC
4789function PassThrough(options) {
4790 if (!(this instanceof PassThrough))
4791 return new PassThrough(options);
ebd8d4e8 4792
ab78acc6
IC
4793 Transform.call(this, options);
4794}
ebd8d4e8 4795
ab78acc6
IC
4796PassThrough.prototype._transform = function(chunk, encoding, cb) {
4797 cb(null, chunk);
ebd8d4e8
IC
4798};
4799
ab78acc6
IC
4800},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
4801(function (process){
ebd8d4e8
IC
4802// Copyright Joyent, Inc. and other Node contributors.
4803//
4804// Permission is hereby granted, free of charge, to any person obtaining a
4805// copy of this software and associated documentation files (the
4806// "Software"), to deal in the Software without restriction, including
4807// without limitation the rights to use, copy, modify, merge, publish,
4808// distribute, sublicense, and/or sell copies of the Software, and to permit
4809// persons to whom the Software is furnished to do so, subject to the
4810// following conditions:
4811//
4812// The above copyright notice and this permission notice shall be included
4813// in all copies or substantial portions of the Software.
4814//
4815// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
4816// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
4817// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
4818// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
4819// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
4820// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
4821// USE OR OTHER DEALINGS IN THE SOFTWARE.
4822
ab78acc6 4823module.exports = Readable;
ebd8d4e8 4824
ab78acc6
IC
4825/*<replacement>*/
4826var isArray = require('isarray');
4827/*</replacement>*/
4828
4829
4830/*<replacement>*/
4831var Buffer = require('buffer').Buffer;
4832/*</replacement>*/
4833
4834Readable.ReadableState = ReadableState;
4835
4836var EE = require('events').EventEmitter;
4837
4838/*<replacement>*/
4839if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
4840 return emitter.listeners(type).length;
ebd8d4e8 4841};
ab78acc6
IC
4842/*</replacement>*/
4843
4844var Stream = require('stream');
4845
4846/*<replacement>*/
4847var util = require('core-util-is');
4848util.inherits = require('inherits');
4849/*</replacement>*/
4850
4851var StringDecoder;
4852
4853
4854/*<replacement>*/
4855var debug = require('util');
4856if (debug && debug.debuglog) {
4857 debug = debug.debuglog('stream');
4858} else {
4859 debug = function () {};
4860}
4861/*</replacement>*/
4862
4863
4864util.inherits(Readable, Stream);
4865
4866function ReadableState(options, stream) {
4867 var Duplex = require('./_stream_duplex');
4868
4869 options = options || {};
4870
4871 // the point at which it stops calling _read() to fill the buffer
4872 // Note: 0 is a valid value, means "don't call _read preemptively ever"
4873 var hwm = options.highWaterMark;
4874 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
4875 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
4876
4877 // cast to ints.
4878 this.highWaterMark = ~~this.highWaterMark;
4879
4880 this.buffer = [];
4881 this.length = 0;
4882 this.pipes = null;
4883 this.pipesCount = 0;
4884 this.flowing = null;
4885 this.ended = false;
4886 this.endEmitted = false;
4887 this.reading = false;
ebd8d4e8 4888
ab78acc6
IC
4889 // a flag to be able to tell if the onwrite cb is called immediately,
4890 // or on a later tick. We set this to true at first, because any
4891 // actions that shouldn't happen until "later" should generally also
4892 // not happen before the first write call.
4893 this.sync = true;
ebd8d4e8 4894
ab78acc6
IC
4895 // whenever we return null, then we set a flag to say
4896 // that we're awaiting a 'readable' event emission.
4897 this.needReadable = false;
4898 this.emittedReadable = false;
4899 this.readableListening = false;
ebd8d4e8 4900
ab78acc6
IC
4901
4902 // object stream flag. Used to make read(n) ignore n and to
4903 // make all the buffer merging and length checks go away
4904 this.objectMode = !!options.objectMode;
4905
4906 if (stream instanceof Duplex)
4907 this.objectMode = this.objectMode || !!options.readableObjectMode;
4908
4909 // Crypto is kind of old and crusty. Historically, its default string
4910 // encoding is 'binary' so we have to make this configurable.
4911 // Everything else in the universe uses 'utf8', though.
4912 this.defaultEncoding = options.defaultEncoding || 'utf8';
4913
4914 // when piping, we only care about 'readable' events that happen
4915 // after read()ing all the bytes and not getting any pushback.
4916 this.ranOut = false;
4917
4918 // the number of writers that are awaiting a drain event in .pipe()s
4919 this.awaitDrain = 0;
4920
4921 // if true, a maybeReadMore has been scheduled
4922 this.readingMore = false;
4923
4924 this.decoder = null;
4925 this.encoding = null;
4926 if (options.encoding) {
4927 if (!StringDecoder)
4928 StringDecoder = require('string_decoder/').StringDecoder;
4929 this.decoder = new StringDecoder(options.encoding);
4930 this.encoding = options.encoding;
ebd8d4e8 4931 }
ab78acc6 4932}
ebd8d4e8 4933
ab78acc6
IC
4934function Readable(options) {
4935 var Duplex = require('./_stream_duplex');
4936
4937 if (!(this instanceof Readable))
4938 return new Readable(options);
4939
4940 this._readableState = new ReadableState(options, this);
4941
4942 // legacy
4943 this.readable = true;
4944
4945 Stream.call(this);
4946}
4947
4948// Manually shove something into the read() buffer.
4949// This returns true if the highWaterMark has not been hit yet,
4950// similar to how Writable.write() returns true if you should
4951// write() some more.
4952Readable.prototype.push = function(chunk, encoding) {
4953 var state = this._readableState;
4954
4955 if (util.isString(chunk) && !state.objectMode) {
4956 encoding = encoding || state.defaultEncoding;
4957 if (encoding !== state.encoding) {
4958 chunk = new Buffer(chunk, encoding);
4959 encoding = '';
ebd8d4e8 4960 }
ebd8d4e8
IC
4961 }
4962
ab78acc6 4963 return readableAddChunk(this, state, chunk, encoding, false);
ebd8d4e8
IC
4964};
4965
ab78acc6
IC
4966// Unshift should *always* be something directly out of read()
4967Readable.prototype.unshift = function(chunk) {
4968 var state = this._readableState;
4969 return readableAddChunk(this, state, chunk, '', true);
4970};
ebd8d4e8 4971
ab78acc6
IC
4972function readableAddChunk(stream, state, chunk, encoding, addToFront) {
4973 var er = chunkInvalid(state, chunk);
4974 if (er) {
4975 stream.emit('error', er);
4976 } else if (util.isNullOrUndefined(chunk)) {
4977 state.reading = false;
4978 if (!state.ended)
4979 onEofChunk(stream, state);
4980 } else if (state.objectMode || chunk && chunk.length > 0) {
4981 if (state.ended && !addToFront) {
4982 var e = new Error('stream.push() after EOF');
4983 stream.emit('error', e);
4984 } else if (state.endEmitted && addToFront) {
4985 var e = new Error('stream.unshift() after end event');
4986 stream.emit('error', e);
ebd8d4e8 4987 } else {
ab78acc6
IC
4988 if (state.decoder && !addToFront && !encoding)
4989 chunk = state.decoder.write(chunk);
4990
4991 if (!addToFront)
4992 state.reading = false;
4993
4994 // if we want the data now, just emit it.
4995 if (state.flowing && state.length === 0 && !state.sync) {
4996 stream.emit('data', chunk);
4997 stream.read(0);
4998 } else {
4999 // update the buffer info.
5000 state.length += state.objectMode ? 1 : chunk.length;
5001 if (addToFront)
5002 state.buffer.unshift(chunk);
5003 else
5004 state.buffer.push(chunk);
5005
5006 if (state.needReadable)
5007 emitReadable(stream);
5008 }
5009
5010 maybeReadMore(stream, state);
ebd8d4e8 5011 }
ab78acc6
IC
5012 } else if (!addToFront) {
5013 state.reading = false;
ebd8d4e8 5014 }
ebd8d4e8 5015
ab78acc6
IC
5016 return needMoreData(state);
5017}
ebd8d4e8 5018
ab78acc6
IC
5019
5020
5021// if it's past the high water mark, we can push in some more.
5022// Also, if we have no data yet, we can stand some
5023// more bytes. This is to work around cases where hwm=0,
5024// such as the repl. Also, if the push() triggered a
5025// readable event, and the user called read(largeNumber) such that
5026// needReadable was set, then we ought to push more, so that another
5027// 'readable' event will be triggered.
5028function needMoreData(state) {
5029 return !state.ended &&
5030 (state.needReadable ||
5031 state.length < state.highWaterMark ||
5032 state.length === 0);
5033}
5034
5035// backwards compatibility.
5036Readable.prototype.setEncoding = function(enc) {
5037 if (!StringDecoder)
5038 StringDecoder = require('string_decoder/').StringDecoder;
5039 this._readableState.decoder = new StringDecoder(enc);
5040 this._readableState.encoding = enc;
5041 return this;
5042};
5043
5044// Don't raise the hwm > 128MB
5045var MAX_HWM = 0x800000;
5046function roundUpToNextPowerOf2(n) {
5047 if (n >= MAX_HWM) {
5048 n = MAX_HWM;
5049 } else {
5050 // Get the next highest power of 2
5051 n--;
5052 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
5053 n++;
ebd8d4e8 5054 }
ab78acc6 5055 return n;
ebd8d4e8 5056}
ebd8d4e8 5057
ab78acc6
IC
5058function howMuchToRead(n, state) {
5059 if (state.length === 0 && state.ended)
5060 return 0;
ebd8d4e8 5061
ab78acc6
IC
5062 if (state.objectMode)
5063 return n === 0 ? 0 : 1;
ebd8d4e8 5064
ab78acc6
IC
5065 if (isNaN(n) || util.isNull(n)) {
5066 // only flow one buffer at a time
5067 if (state.flowing && state.buffer.length)
5068 return state.buffer[0].length;
5069 else
5070 return state.length;
5071 }
ebd8d4e8 5072
ab78acc6
IC
5073 if (n <= 0)
5074 return 0;
ebd8d4e8 5075
ab78acc6
IC
5076 // If we're asking for more than the target buffer level,
5077 // then raise the water mark. Bump up to the next highest
5078 // power of 2, to prevent increasing it excessively in tiny
5079 // amounts.
5080 if (n > state.highWaterMark)
5081 state.highWaterMark = roundUpToNextPowerOf2(n);
ebd8d4e8 5082
ab78acc6
IC
5083 // don't have that much. return null, unless we've ended.
5084 if (n > state.length) {
5085 if (!state.ended) {
5086 state.needReadable = true;
5087 return 0;
5088 } else
5089 return state.length;
ebd8d4e8 5090 }
ab78acc6
IC
5091
5092 return n;
ebd8d4e8
IC
5093}
5094
ab78acc6
IC
5095// you can override either this method, or the async _read(n) below.
5096Readable.prototype.read = function(n) {
5097 debug('read', n);
5098 var state = this._readableState;
5099 var nOrig = n;
ebd8d4e8 5100
ab78acc6
IC
5101 if (!util.isNumber(n) || n > 0)
5102 state.emittedReadable = false;
5103
5104 // if we're doing read(0) to trigger a readable event, but we
5105 // already have a bunch of data in the buffer, then just trigger
5106 // the 'readable' event and move on.
5107 if (n === 0 &&
5108 state.needReadable &&
5109 (state.length >= state.highWaterMark || state.ended)) {
5110 debug('read: emitReadable', state.length, state.ended);
5111 if (state.length === 0 && state.ended)
5112 endReadable(this);
5113 else
5114 emitReadable(this);
5115 return null;
5116 }
5117
5118 n = howMuchToRead(n, state);
5119
5120 // if we've ended, and we're now clear, then finish it up.
5121 if (n === 0 && state.ended) {
5122 if (state.length === 0)
5123 endReadable(this);
5124 return null;
5125 }
5126
5127 // All the actual chunk generation logic needs to be
5128 // *below* the call to _read. The reason is that in certain
5129 // synthetic stream cases, such as passthrough streams, _read
5130 // may be a completely synchronous operation which may change
5131 // the state of the read buffer, providing enough data when
5132 // before there was *not* enough.
5133 //
5134 // So, the steps are:
5135 // 1. Figure out what the state of things will be after we do
5136 // a read from the buffer.
5137 //
5138 // 2. If that resulting state will trigger a _read, then call _read.
5139 // Note that this may be asynchronous, or synchronous. Yes, it is
5140 // deeply ugly to write APIs this way, but that still doesn't mean
5141 // that the Readable class should behave improperly, as streams are
5142 // designed to be sync/async agnostic.
5143 // Take note if the _read call is sync or async (ie, if the read call
5144 // has returned yet), so that we know whether or not it's safe to emit
5145 // 'readable' etc.
5146 //
5147 // 3. Actually pull the requested chunks out of the buffer and return.
5148
5149 // if we need a readable event, then we need to do some reading.
5150 var doRead = state.needReadable;
5151 debug('need readable', doRead);
5152
5153 // if we currently have less than the highWaterMark, then also read some
5154 if (state.length === 0 || state.length - n < state.highWaterMark) {
5155 doRead = true;
5156 debug('length less than watermark', doRead);
5157 }
5158
5159 // however, if we've ended, then there's no point, and if we're already
5160 // reading, then it's unnecessary.
5161 if (state.ended || state.reading) {
5162 doRead = false;
5163 debug('reading or ended', doRead);
5164 }
5165
5166 if (doRead) {
5167 debug('do read');
5168 state.reading = true;
5169 state.sync = true;
5170 // if the length is currently zero, then we *need* a readable event.
5171 if (state.length === 0)
5172 state.needReadable = true;
5173 // call internal read method
5174 this._read(state.highWaterMark);
5175 state.sync = false;
5176 }
5177
5178 // If _read pushed data synchronously, then `reading` will be false,
5179 // and we need to re-evaluate how much data we can return to the user.
5180 if (doRead && !state.reading)
5181 n = howMuchToRead(nOrig, state);
5182
5183 var ret;
5184 if (n > 0)
5185 ret = fromList(n, state);
5186 else
5187 ret = null;
ebd8d4e8 5188
ab78acc6
IC
5189 if (util.isNull(ret)) {
5190 state.needReadable = true;
5191 n = 0;
5192 }
ebd8d4e8 5193
ab78acc6 5194 state.length -= n;
ebd8d4e8 5195
ab78acc6
IC
5196 // If we have nothing in the buffer, then we want to know
5197 // as soon as we *do* get something into the buffer.
5198 if (state.length === 0 && !state.ended)
5199 state.needReadable = true;
ebd8d4e8 5200
ab78acc6
IC
5201 // If we tried to read() past the EOF, then emit end on the next tick.
5202 if (nOrig !== n && state.ended && state.length === 0)
5203 endReadable(this);
5204
5205 if (!util.isNull(ret))
5206 this.emit('data', ret);
5207
5208 return ret;
5209};
5210
5211function chunkInvalid(state, chunk) {
5212 var er = null;
5213 if (!util.isBuffer(chunk) &&
5214 !util.isString(chunk) &&
5215 !util.isNullOrUndefined(chunk) &&
5216 !state.objectMode) {
5217 er = new TypeError('Invalid non-string/buffer chunk');
5218 }
5219 return er;
ebd8d4e8
IC
5220}
5221
5222
ab78acc6
IC
5223function onEofChunk(stream, state) {
5224 if (state.decoder && !state.ended) {
5225 var chunk = state.decoder.end();
5226 if (chunk && chunk.length) {
5227 state.buffer.push(chunk);
5228 state.length += state.objectMode ? 1 : chunk.length;
ebd8d4e8 5229 }
ebd8d4e8 5230 }
ab78acc6 5231 state.ended = true;
ebd8d4e8 5232
ab78acc6
IC
5233 // emit 'readable' now to make sure it gets picked up.
5234 emitReadable(stream);
5235}
5236
5237// Don't emit readable right away in sync mode, because this can trigger
5238// another read() call => stack overflow. This way, it might trigger
5239// a nextTick recursion warning, but that's not so bad.
5240function emitReadable(stream) {
5241 var state = stream._readableState;
5242 state.needReadable = false;
5243 if (!state.emittedReadable) {
5244 debug('emitReadable', state.flowing);
5245 state.emittedReadable = true;
5246 if (state.sync)
5247 process.nextTick(function() {
5248 emitReadable_(stream);
5249 });
5250 else
5251 emitReadable_(stream);
ebd8d4e8 5252 }
ab78acc6 5253}
ebd8d4e8 5254
ab78acc6
IC
5255function emitReadable_(stream) {
5256 debug('emit readable');
5257 stream.emit('readable');
5258 flow(stream);
5259}
ebd8d4e8 5260
ab78acc6
IC
5261
5262// at this point, the user has presumably seen the 'readable' event,
5263// and called read() to consume some data. that may have triggered
5264// in turn another _read(n) call, in which case reading = true if
5265// it's in progress.
5266// However, if we're not ended, or reading, and the length < hwm,
5267// then go ahead and try to read some more preemptively.
5268function maybeReadMore(stream, state) {
5269 if (!state.readingMore) {
5270 state.readingMore = true;
5271 process.nextTick(function() {
5272 maybeReadMore_(stream, state);
5273 });
ebd8d4e8 5274 }
ab78acc6 5275}
ebd8d4e8 5276
ab78acc6
IC
5277function maybeReadMore_(stream, state) {
5278 var len = state.length;
5279 while (!state.reading && !state.flowing && !state.ended &&
5280 state.length < state.highWaterMark) {
5281 debug('maybeReadMore read 0');
5282 stream.read(0);
5283 if (len === state.length)
5284 // didn't get any data, stop spinning.
5285 break;
5286 else
5287 len = state.length;
ebd8d4e8 5288 }
ab78acc6
IC
5289 state.readingMore = false;
5290}
ebd8d4e8 5291
ab78acc6
IC
5292// abstract method. to be overridden in specific implementation classes.
5293// call cb(er, data) where data is <= n in length.
5294// for virtual (non-string, non-buffer) streams, "length" is somewhat
5295// arbitrary, and perhaps not very meaningful.
5296Readable.prototype._read = function(n) {
5297 this.emit('error', new Error('not implemented'));
5298};
5299
5300Readable.prototype.pipe = function(dest, pipeOpts) {
5301 var src = this;
5302 var state = this._readableState;
5303
5304 switch (state.pipesCount) {
5305 case 0:
5306 state.pipes = dest;
5307 break;
5308 case 1:
5309 state.pipes = [state.pipes, dest];
5310 break;
5311 default:
5312 state.pipes.push(dest);
5313 break;
ebd8d4e8 5314 }
ab78acc6
IC
5315 state.pipesCount += 1;
5316 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ebd8d4e8 5317
ab78acc6
IC
5318 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
5319 dest !== process.stdout &&
5320 dest !== process.stderr;
ebd8d4e8 5321
ab78acc6
IC
5322 var endFn = doEnd ? onend : cleanup;
5323 if (state.endEmitted)
5324 process.nextTick(endFn);
5325 else
5326 src.once('end', endFn);
5327
5328 dest.on('unpipe', onunpipe);
5329 function onunpipe(readable) {
5330 debug('onunpipe');
5331 if (readable === src) {
5332 cleanup();
5333 }
5334 }
5335
5336 function onend() {
5337 debug('onend');
5338 dest.end();
5339 }
5340
5341 // when the dest drains, it reduces the awaitDrain counter
5342 // on the source. This would be more elegant with a .once()
5343 // handler in flow(), but adding and removing repeatedly is
5344 // too slow.
5345 var ondrain = pipeOnDrain(src);
5346 dest.on('drain', ondrain);
5347
5348 function cleanup() {
5349 debug('cleanup');
5350 // cleanup event handlers once the pipe is broken
5351 dest.removeListener('close', onclose);
5352 dest.removeListener('finish', onfinish);
5353 dest.removeListener('drain', ondrain);
5354 dest.removeListener('error', onerror);
5355 dest.removeListener('unpipe', onunpipe);
5356 src.removeListener('end', onend);
5357 src.removeListener('end', cleanup);
5358 src.removeListener('data', ondata);
5359
5360 // if the reader is waiting for a drain event from this
5361 // specific writer, then it would cause it to never start
5362 // flowing again.
5363 // So, if this is awaiting a drain, then we just call it now.
5364 // If we don't know, then assume that we are waiting for one.
5365 if (state.awaitDrain &&
5366 (!dest._writableState || dest._writableState.needDrain))
5367 ondrain();
5368 }
5369
5370 src.on('data', ondata);
5371 function ondata(chunk) {
5372 debug('ondata');
5373 var ret = dest.write(chunk);
5374 if (false === ret) {
5375 debug('false write response, pause',
5376 src._readableState.awaitDrain);
5377 src._readableState.awaitDrain++;
5378 src.pause();
5379 }
5380 }
5381
5382 // if the dest has an error, then stop piping into it.
5383 // however, don't suppress the throwing behavior for this.
5384 function onerror(er) {
5385 debug('onerror', er);
5386 unpipe();
5387 dest.removeListener('error', onerror);
5388 if (EE.listenerCount(dest, 'error') === 0)
5389 dest.emit('error', er);
5390 }
5391 // This is a brutally ugly hack to make sure that our error handler
5392 // is attached before any userland ones. NEVER DO THIS.
5393 if (!dest._events || !dest._events.error)
5394 dest.on('error', onerror);
5395 else if (isArray(dest._events.error))
5396 dest._events.error.unshift(onerror);
5397 else
5398 dest._events.error = [onerror, dest._events.error];
5399
5400
5401
5402 // Both close and finish should trigger unpipe, but only once.
5403 function onclose() {
5404 dest.removeListener('finish', onfinish);
5405 unpipe();
ebd8d4e8 5406 }
ab78acc6
IC
5407 dest.once('close', onclose);
5408 function onfinish() {
5409 debug('onfinish');
5410 dest.removeListener('close', onclose);
5411 unpipe();
5412 }
5413 dest.once('finish', onfinish);
ebd8d4e8 5414
ab78acc6
IC
5415 function unpipe() {
5416 debug('unpipe');
5417 src.unpipe(dest);
ebd8d4e8
IC
5418 }
5419
ab78acc6
IC
5420 // tell the dest that it's being piped to
5421 dest.emit('pipe', src);
5422
5423 // start the flow if it hasn't been started already.
5424 if (!state.flowing) {
5425 debug('pipe resume');
5426 src.resume();
ebd8d4e8
IC
5427 }
5428
ab78acc6
IC
5429 return dest;
5430};
5431
5432function pipeOnDrain(src) {
5433 return function() {
5434 var state = src._readableState;
5435 debug('pipeOnDrain', state.awaitDrain);
5436 if (state.awaitDrain)
5437 state.awaitDrain--;
5438 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
5439 state.flowing = true;
5440 flow(src);
5441 }
5442 };
5443}
5444
5445
5446Readable.prototype.unpipe = function(dest) {
5447 var state = this._readableState;
5448
5449 // if we're not piping anywhere, then do nothing.
5450 if (state.pipesCount === 0)
5451 return this;
5452
5453 // just one destination. most common case.
5454 if (state.pipesCount === 1) {
5455 // passed in one, but it's not the right one.
5456 if (dest && dest !== state.pipes)
5457 return this;
5458
5459 if (!dest)
5460 dest = state.pipes;
5461
5462 // got a match.
5463 state.pipes = null;
5464 state.pipesCount = 0;
5465 state.flowing = false;
5466 if (dest)
5467 dest.emit('unpipe', this);
5468 return this;
ebd8d4e8
IC
5469 }
5470
ab78acc6
IC
5471 // slow case. multiple pipe destinations.
5472
5473 if (!dest) {
5474 // remove all.
5475 var dests = state.pipes;
5476 var len = state.pipesCount;
5477 state.pipes = null;
5478 state.pipesCount = 0;
5479 state.flowing = false;
5480
5481 for (var i = 0; i < len; i++)
5482 dests[i].emit('unpipe', this);
5483 return this;
ebd8d4e8
IC
5484 }
5485
ab78acc6
IC
5486 // try to find the right one.
5487 var i = indexOf(state.pipes, dest);
5488 if (i === -1)
5489 return this;
5490
5491 state.pipes.splice(i, 1);
5492 state.pipesCount -= 1;
5493 if (state.pipesCount === 1)
5494 state.pipes = state.pipes[0];
5495
5496 dest.emit('unpipe', this);
ebd8d4e8 5497
ab78acc6
IC
5498 return this;
5499};
5500
5501// set up data events if they are asked for
5502// Ensure readable listeners eventually get something
5503Readable.prototype.on = function(ev, fn) {
5504 var res = Stream.prototype.on.call(this, ev, fn);
5505
5506 // If listening to data, and it has not explicitly been paused,
5507 // then call resume to start the flow of data on the next tick.
5508 if (ev === 'data' && false !== this._readableState.flowing) {
5509 this.resume();
5510 }
5511
5512 if (ev === 'readable' && this.readable) {
5513 var state = this._readableState;
5514 if (!state.readableListening) {
5515 state.readableListening = true;
5516 state.emittedReadable = false;
5517 state.needReadable = true;
5518 if (!state.reading) {
5519 var self = this;
5520 process.nextTick(function() {
5521 debug('readable nexttick read 0');
5522 self.read(0);
5523 });
5524 } else if (state.length) {
5525 emitReadable(this, state);
5526 }
ebd8d4e8
IC
5527 }
5528 }
5529
ab78acc6
IC
5530 return res;
5531};
5532Readable.prototype.addListener = Readable.prototype.on;
5533
5534// pause() and resume() are remnants of the legacy readable stream API
5535// If the user uses them, then switch into old mode.
5536Readable.prototype.resume = function() {
5537 var state = this._readableState;
5538 if (!state.flowing) {
5539 debug('resume');
5540 state.flowing = true;
5541 if (!state.reading) {
5542 debug('resume read 0');
5543 this.read(0);
5544 }
5545 resume(this, state);
5546 }
5547 return this;
5548};
ebd8d4e8 5549
ab78acc6
IC
5550function resume(stream, state) {
5551 if (!state.resumeScheduled) {
5552 state.resumeScheduled = true;
5553 process.nextTick(function() {
5554 resume_(stream, state);
ebd8d4e8
IC
5555 });
5556 }
ebd8d4e8
IC
5557}
5558
ab78acc6
IC
5559function resume_(stream, state) {
5560 state.resumeScheduled = false;
5561 stream.emit('resume');
5562 flow(stream);
5563 if (state.flowing && !state.reading)
5564 stream.read(0);
ebd8d4e8
IC
5565}
5566
ab78acc6
IC
5567Readable.prototype.pause = function() {
5568 debug('call pause flowing=%j', this._readableState.flowing);
5569 if (false !== this._readableState.flowing) {
5570 debug('pause');
5571 this._readableState.flowing = false;
5572 this.emit('pause');
5573 }
5574 return this;
5575};
ebd8d4e8 5576
ab78acc6
IC
5577function flow(stream) {
5578 var state = stream._readableState;
5579 debug('flow', state.flowing);
5580 if (state.flowing) {
5581 do {
5582 var chunk = stream.read();
5583 } while (null !== chunk && state.flowing);
5584 }
ebd8d4e8
IC
5585}
5586
ab78acc6
IC
5587// wrap an old-style stream as the async data source.
5588// This is *not* part of the readable stream interface.
5589// It is an ugly unfortunate mess of history.
5590Readable.prototype.wrap = function(stream) {
5591 var state = this._readableState;
5592 var paused = false;
ebd8d4e8 5593
ab78acc6
IC
5594 var self = this;
5595 stream.on('end', function() {
5596 debug('wrapped end');
5597 if (state.decoder && !state.ended) {
5598 var chunk = state.decoder.end();
5599 if (chunk && chunk.length)
5600 self.push(chunk);
ebd8d4e8 5601 }
ab78acc6
IC
5602
5603 self.push(null);
ebd8d4e8 5604 });
ebd8d4e8 5605
ab78acc6
IC
5606 stream.on('data', function(chunk) {
5607 debug('wrapped data');
5608 if (state.decoder)
5609 chunk = state.decoder.write(chunk);
5610 if (!chunk || !state.objectMode && !chunk.length)
5611 return;
ebd8d4e8 5612
ab78acc6
IC
5613 var ret = self.push(chunk);
5614 if (!ret) {
5615 paused = true;
5616 stream.pause();
ebd8d4e8 5617 }
ab78acc6
IC
5618 });
5619
5620 // proxy all the other methods.
5621 // important when wrapping filters and duplexes.
5622 for (var i in stream) {
5623 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
5624 this[i] = function(method) { return function() {
5625 return stream[method].apply(stream, arguments);
5626 }}(i);
ebd8d4e8
IC
5627 }
5628 }
ab78acc6
IC
5629
5630 // proxy certain important events.
5631 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
5632 forEach(events, function(ev) {
5633 stream.on(ev, self.emit.bind(self, ev));
5634 });
5635
5636 // when we try to consume some more bytes, simply unpause the
5637 // underlying stream.
5638 self._read = function(n) {
5639 debug('wrapped _read', n);
5640 if (paused) {
5641 paused = false;
5642 stream.resume();
ebd8d4e8 5643 }
ab78acc6
IC
5644 };
5645
5646 return self;
5647};
5648
5649
5650
5651// exposed for testing purposes only.
5652Readable._fromList = fromList;
5653
5654// Pluck off n bytes from an array of buffers.
5655// Length is the combined lengths of all the buffers in the list.
5656function fromList(n, state) {
5657 var list = state.buffer;
5658 var length = state.length;
5659 var stringMode = !!state.decoder;
5660 var objectMode = !!state.objectMode;
5661 var ret;
5662
5663 // nothing in the list, definitely empty.
5664 if (list.length === 0)
5665 return null;
5666
5667 if (length === 0)
5668 ret = null;
5669 else if (objectMode)
5670 ret = list.shift();
5671 else if (!n || n >= length) {
5672 // read it all, truncate the array.
5673 if (stringMode)
5674 ret = list.join('');
5675 else
5676 ret = Buffer.concat(list, length);
5677 list.length = 0;
5678 } else {
5679 // read just some of it.
5680 if (n < list[0].length) {
5681 // just take a part of the first list item.
5682 // slice is the same for buffers and strings.
5683 var buf = list[0];
5684 ret = buf.slice(0, n);
5685 list[0] = buf.slice(n);
5686 } else if (n === list[0].length) {
5687 // first list is a perfect match
5688 ret = list.shift();
ebd8d4e8 5689 } else {
ab78acc6
IC
5690 // complex case.
5691 // we have enough to cover it, but it spans past the first buffer.
5692 if (stringMode)
5693 ret = '';
5694 else
5695 ret = new Buffer(n);
ebd8d4e8 5696
ab78acc6
IC
5697 var c = 0;
5698 for (var i = 0, l = list.length; i < l && c < n; i++) {
5699 var buf = list[0];
5700 var cpy = Math.min(n - c, buf.length);
ebd8d4e8 5701
ab78acc6
IC
5702 if (stringMode)
5703 ret += buf.slice(0, cpy);
5704 else
5705 buf.copy(ret, c, 0, cpy);
ebd8d4e8 5706
ab78acc6
IC
5707 if (cpy < buf.length)
5708 list[0] = buf.slice(cpy);
5709 else
5710 list.shift();
ebd8d4e8 5711
ab78acc6
IC
5712 c += cpy;
5713 }
5714 }
ebd8d4e8
IC
5715 }
5716
ab78acc6 5717 return ret;
ebd8d4e8
IC
5718}
5719
ab78acc6
IC
5720function endReadable(stream) {
5721 var state = stream._readableState;
ebd8d4e8 5722
ab78acc6
IC
5723 // If we get here before consuming all the bytes, then that is a
5724 // bug in node. Should never happen.
5725 if (state.length > 0)
5726 throw new Error('endReadable called on non-empty stream');
ebd8d4e8 5727
ab78acc6
IC
5728 if (!state.endEmitted) {
5729 state.ended = true;
5730 process.nextTick(function() {
5731 // Check that we didn't get one last unshift.
5732 if (!state.endEmitted && state.length === 0) {
5733 state.endEmitted = true;
5734 stream.readable = false;
5735 stream.emit('end');
5736 }
5737 });
5738 }
ebd8d4e8 5739}
ebd8d4e8 5740
ab78acc6
IC
5741function forEach (xs, f) {
5742 for (var i = 0, l = xs.length; i < l; i++) {
5743 f(xs[i], i);
5744 }
ebd8d4e8 5745}
ebd8d4e8 5746
ab78acc6
IC
5747function indexOf (xs, x) {
5748 for (var i = 0, l = xs.length; i < l; i++) {
5749 if (xs[i] === x) return i;
5750 }
5751 return -1;
ebd8d4e8 5752}
ebd8d4e8 5753
ab78acc6
IC
5754}).call(this,require('_process'))
5755},{"./_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){
5756// Copyright Joyent, Inc. and other Node contributors.
5757//
5758// Permission is hereby granted, free of charge, to any person obtaining a
5759// copy of this software and associated documentation files (the
5760// "Software"), to deal in the Software without restriction, including
5761// without limitation the rights to use, copy, modify, merge, publish,
5762// distribute, sublicense, and/or sell copies of the Software, and to permit
5763// persons to whom the Software is furnished to do so, subject to the
5764// following conditions:
5765//
5766// The above copyright notice and this permission notice shall be included
5767// in all copies or substantial portions of the Software.
5768//
5769// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5770// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5771// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5772// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5773// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5774// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5775// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5776
ebd8d4e8 5777
ab78acc6
IC
5778// a transform stream is a readable/writable stream where you do
5779// something with the data. Sometimes it's called a "filter",
5780// but that's not a great name for it, since that implies a thing where
5781// some bits pass through, and others are simply ignored. (That would
5782// be a valid example of a transform, of course.)
5783//
5784// While the output is causally related to the input, it's not a
5785// necessarily symmetric or synchronous transformation. For example,
5786// a zlib stream might take multiple plain-text writes(), and then
5787// emit a single compressed chunk some time in the future.
5788//
5789// Here's how this works:
5790//
5791// The Transform stream has all the aspects of the readable and writable
5792// stream classes. When you write(chunk), that calls _write(chunk,cb)
5793// internally, and returns false if there's a lot of pending writes
5794// buffered up. When you call read(), that calls _read(n) until
5795// there's enough pending readable data buffered up.
5796//
5797// In a transform stream, the written data is placed in a buffer. When
5798// _read(n) is called, it transforms the queued up data, calling the
5799// buffered _write cb's as it consumes chunks. If consuming a single
5800// written chunk would result in multiple output chunks, then the first
5801// outputted bit calls the readcb, and subsequent chunks just go into
5802// the read buffer, and will cause it to emit 'readable' if necessary.
5803//
5804// This way, back-pressure is actually determined by the reading side,
5805// since _read has to be called to start processing a new chunk. However,
5806// a pathological inflate type of transform can cause excessive buffering
5807// here. For example, imagine a stream where every byte of input is
5808// interpreted as an integer from 0-255, and then results in that many
5809// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
5810// 1kb of data being output. In this case, you could write a very small
5811// amount of input, and end up with a very large amount of output. In
5812// such a pathological inflating mechanism, there'd be no way to tell
5813// the system to stop doing the transform. A single 4MB write could
5814// cause the system to run out of memory.
5815//
5816// However, even in such a pathological case, only a single written chunk
5817// would be consumed, and then the rest would wait (un-transformed) until
5818// the results of the previous transformed chunk were consumed.
ebd8d4e8 5819
ab78acc6 5820module.exports = Transform;
ebd8d4e8 5821
ab78acc6 5822var Duplex = require('./_stream_duplex');
ebd8d4e8 5823
ab78acc6
IC
5824/*<replacement>*/
5825var util = require('core-util-is');
5826util.inherits = require('inherits');
5827/*</replacement>*/
5828
5829util.inherits(Transform, Duplex);
5830
5831
5832function TransformState(options, stream) {
5833 this.afterTransform = function(er, data) {
5834 return afterTransform(stream, er, data);
5835 };
5836
5837 this.needTransform = false;
5838 this.transforming = false;
5839 this.writecb = null;
5840 this.writechunk = null;
ebd8d4e8 5841}
ebd8d4e8 5842
ab78acc6
IC
5843function afterTransform(stream, er, data) {
5844 var ts = stream._transformState;
5845 ts.transforming = false;
5846
5847 var cb = ts.writecb;
5848
5849 if (!cb)
5850 return stream.emit('error', new Error('no writecb in Transform class'));
5851
5852 ts.writechunk = null;
5853 ts.writecb = null;
5854
5855 if (!util.isNullOrUndefined(data))
5856 stream.push(data);
5857
5858 if (cb)
5859 cb(er);
5860
5861 var rs = stream._readableState;
5862 rs.reading = false;
5863 if (rs.needReadable || rs.length < rs.highWaterMark) {
5864 stream._read(rs.highWaterMark);
5865 }
ebd8d4e8 5866}
ebd8d4e8 5867
ab78acc6
IC
5868
5869function Transform(options) {
5870 if (!(this instanceof Transform))
5871 return new Transform(options);
5872
5873 Duplex.call(this, options);
5874
5875 this._transformState = new TransformState(options, this);
5876
5877 // when the writable side finishes, then flush out anything remaining.
5878 var stream = this;
5879
5880 // start out asking for a readable event once data is transformed.
5881 this._readableState.needReadable = true;
5882
5883 // we have implemented the _read method, and done the other things
5884 // that Readable wants before the first _read call, so unset the
5885 // sync guard flag.
5886 this._readableState.sync = false;
5887
5888 this.once('prefinish', function() {
5889 if (util.isFunction(this._flush))
5890 this._flush(function(er) {
5891 done(stream, er);
5892 });
5893 else
5894 done(stream);
5895 });
ebd8d4e8 5896}
ebd8d4e8 5897
ab78acc6
IC
5898Transform.prototype.push = function(chunk, encoding) {
5899 this._transformState.needTransform = false;
5900 return Duplex.prototype.push.call(this, chunk, encoding);
5901};
5902
5903// This is the part where you do stuff!
5904// override this function in implementation classes.
5905// 'chunk' is an input chunk.
5906//
5907// Call `push(newChunk)` to pass along transformed output
5908// to the readable side. You may call 'push' zero or more times.
5909//
5910// Call `cb(err)` when you are done with this chunk. If you pass
5911// an error, then that'll put the hurt on the whole operation. If you
5912// never call cb(), then you'll never get another chunk.
5913Transform.prototype._transform = function(chunk, encoding, cb) {
5914 throw new Error('not implemented');
5915};
5916
5917Transform.prototype._write = function(chunk, encoding, cb) {
5918 var ts = this._transformState;
5919 ts.writecb = cb;
5920 ts.writechunk = chunk;
5921 ts.writeencoding = encoding;
5922 if (!ts.transforming) {
5923 var rs = this._readableState;
5924 if (ts.needTransform ||
5925 rs.needReadable ||
5926 rs.length < rs.highWaterMark)
5927 this._read(rs.highWaterMark);
5928 }
5929};
5930
5931// Doesn't matter what the args are here.
5932// _transform does all the work.
5933// That we got here means that the readable side wants more data.
5934Transform.prototype._read = function(n) {
5935 var ts = this._transformState;
ebd8d4e8 5936
ab78acc6
IC
5937 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
5938 ts.transforming = true;
5939 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
5940 } else {
5941 // mark that we need a transform, so that any data that comes in
5942 // will get processed, now that we've asked for it.
5943 ts.needTransform = true;
5944 }
5945};
ebd8d4e8 5946
ebd8d4e8 5947
ab78acc6
IC
5948function done(stream, er) {
5949 if (er)
5950 return stream.emit('error', er);
ebd8d4e8 5951
ab78acc6
IC
5952 // if there's nothing in the write buffer, then that means
5953 // that nothing more will ever be provided
5954 var ws = stream._writableState;
5955 var ts = stream._transformState;
ebd8d4e8 5956
ab78acc6
IC
5957 if (ws.length)
5958 throw new Error('calling transform done when ws.length != 0');
5959
5960 if (ts.transforming)
5961 throw new Error('calling transform done when still transforming');
5962
5963 return stream.push(null);
ebd8d4e8
IC
5964}
5965
ab78acc6
IC
5966},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
5967(function (process){
5968// Copyright Joyent, Inc. and other Node contributors.
5969//
5970// Permission is hereby granted, free of charge, to any person obtaining a
5971// copy of this software and associated documentation files (the
5972// "Software"), to deal in the Software without restriction, including
5973// without limitation the rights to use, copy, modify, merge, publish,
5974// distribute, sublicense, and/or sell copies of the Software, and to permit
5975// persons to whom the Software is furnished to do so, subject to the
5976// following conditions:
5977//
5978// The above copyright notice and this permission notice shall be included
5979// in all copies or substantial portions of the Software.
5980//
5981// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
5982// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
5983// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
5984// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
5985// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
5986// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
5987// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 5988
ab78acc6
IC
5989// A bit simpler than readable streams.
5990// Implement an async ._write(chunk, cb), and it'll handle all
5991// the drain event emission and buffering.
ebd8d4e8 5992
ab78acc6 5993module.exports = Writable;
ebd8d4e8 5994
ab78acc6
IC
5995/*<replacement>*/
5996var Buffer = require('buffer').Buffer;
5997/*</replacement>*/
ebd8d4e8 5998
ab78acc6 5999Writable.WritableState = WritableState;
ebd8d4e8
IC
6000
6001
ab78acc6
IC
6002/*<replacement>*/
6003var util = require('core-util-is');
6004util.inherits = require('inherits');
6005/*</replacement>*/
ebd8d4e8 6006
ab78acc6 6007var Stream = require('stream');
ebd8d4e8 6008
ab78acc6 6009util.inherits(Writable, Stream);
ebd8d4e8 6010
ab78acc6
IC
6011function WriteReq(chunk, encoding, cb) {
6012 this.chunk = chunk;
6013 this.encoding = encoding;
6014 this.callback = cb;
ebd8d4e8
IC
6015}
6016
ab78acc6
IC
6017function WritableState(options, stream) {
6018 var Duplex = require('./_stream_duplex');
ebd8d4e8 6019
ab78acc6 6020 options = options || {};
ebd8d4e8 6021
ab78acc6
IC
6022 // the point at which write() starts returning false
6023 // Note: 0 is a valid value, means that we always return false if
6024 // the entire buffer is not flushed immediately on write()
6025 var hwm = options.highWaterMark;
6026 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
6027 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
ebd8d4e8 6028
ab78acc6
IC
6029 // object stream flag to indicate whether or not this stream
6030 // contains buffers or objects.
6031 this.objectMode = !!options.objectMode;
ebd8d4e8 6032
ab78acc6
IC
6033 if (stream instanceof Duplex)
6034 this.objectMode = this.objectMode || !!options.writableObjectMode;
ebd8d4e8 6035
ab78acc6
IC
6036 // cast to ints.
6037 this.highWaterMark = ~~this.highWaterMark;
ebd8d4e8 6038
ab78acc6
IC
6039 this.needDrain = false;
6040 // at the start of calling end()
6041 this.ending = false;
6042 // when end() has been called, and returned
6043 this.ended = false;
6044 // when 'finish' is emitted
6045 this.finished = false;
ebd8d4e8 6046
ab78acc6
IC
6047 // should we decode strings into buffers before passing to _write?
6048 // this is here so that some node-core streams can optimize string
6049 // handling at a lower level.
6050 var noDecode = options.decodeStrings === false;
6051 this.decodeStrings = !noDecode;
ebd8d4e8 6052
ab78acc6
IC
6053 // Crypto is kind of old and crusty. Historically, its default string
6054 // encoding is 'binary' so we have to make this configurable.
6055 // Everything else in the universe uses 'utf8', though.
6056 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 6057
ab78acc6
IC
6058 // not an actual buffer we keep track of, but a measurement
6059 // of how much we're waiting to get pushed to some underlying
6060 // socket or file.
6061 this.length = 0;
ebd8d4e8 6062
ab78acc6
IC
6063 // a flag to see when we're in the middle of a write.
6064 this.writing = false;
ebd8d4e8 6065
ab78acc6
IC
6066 // when true all writes will be buffered until .uncork() call
6067 this.corked = 0;
ebd8d4e8 6068
ab78acc6
IC
6069 // a flag to be able to tell if the onwrite cb is called immediately,
6070 // or on a later tick. We set this to true at first, because any
6071 // actions that shouldn't happen until "later" should generally also
6072 // not happen before the first write call.
6073 this.sync = true;
ebd8d4e8 6074
ab78acc6
IC
6075 // a flag to know if we're processing previously buffered items, which
6076 // may call the _write() callback in the same tick, so that we don't
6077 // end up in an overlapped onwrite situation.
6078 this.bufferProcessing = false;
ebd8d4e8 6079
ab78acc6
IC
6080 // the callback that's passed to _write(chunk,cb)
6081 this.onwrite = function(er) {
6082 onwrite(stream, er);
6083 };
ebd8d4e8 6084
ab78acc6
IC
6085 // the callback that the user supplies to write(chunk,encoding,cb)
6086 this.writecb = null;
ebd8d4e8 6087
ab78acc6
IC
6088 // the amount that is being written when _write is called.
6089 this.writelen = 0;
ebd8d4e8 6090
ab78acc6 6091 this.buffer = [];
ebd8d4e8 6092
ab78acc6
IC
6093 // number of pending user-supplied write callbacks
6094 // this must be 0 before 'finish' can be emitted
6095 this.pendingcb = 0;
ebd8d4e8 6096
ab78acc6
IC
6097 // emit prefinish if the only thing we're waiting for is _write cbs
6098 // This is relevant for synchronous Transform streams
6099 this.prefinished = false;
ebd8d4e8 6100
ab78acc6
IC
6101 // True if the error was already emitted and should not be thrown again
6102 this.errorEmitted = false;
ebd8d4e8
IC
6103}
6104
ab78acc6
IC
6105function Writable(options) {
6106 var Duplex = require('./_stream_duplex');
ebd8d4e8 6107
ab78acc6
IC
6108 // Writable ctor is applied to Duplexes, though they're not
6109 // instanceof Writable, they're instanceof Readable.
6110 if (!(this instanceof Writable) && !(this instanceof Duplex))
6111 return new Writable(options);
ebd8d4e8 6112
ab78acc6 6113 this._writableState = new WritableState(options, this);
ebd8d4e8 6114
ab78acc6
IC
6115 // legacy.
6116 this.writable = true;
ebd8d4e8 6117
ab78acc6 6118 Stream.call(this);
ebd8d4e8
IC
6119}
6120
ab78acc6
IC
6121// Otherwise people can pipe Writable streams, which is just wrong.
6122Writable.prototype.pipe = function() {
6123 this.emit('error', new Error('Cannot pipe. Not readable.'));
6124};
ebd8d4e8 6125
ebd8d4e8 6126
ab78acc6
IC
6127function writeAfterEnd(stream, state, cb) {
6128 var er = new Error('write after end');
6129 // TODO: defer error events consistently everywhere, not just the cb
6130 stream.emit('error', er);
6131 process.nextTick(function() {
6132 cb(er);
6133 });
ebd8d4e8
IC
6134}
6135
ab78acc6
IC
6136// If we get something that is not a buffer, string, null, or undefined,
6137// and we're not in objectMode, then that's an error.
6138// Otherwise stream chunks are all considered to be of length=1, and the
6139// watermarks determine how many objects to keep in the buffer, rather than
6140// how many bytes or characters.
6141function validChunk(stream, state, chunk, cb) {
6142 var valid = true;
6143 if (!util.isBuffer(chunk) &&
6144 !util.isString(chunk) &&
6145 !util.isNullOrUndefined(chunk) &&
6146 !state.objectMode) {
6147 var er = new TypeError('Invalid non-string/buffer chunk');
6148 stream.emit('error', er);
6149 process.nextTick(function() {
6150 cb(er);
6151 });
6152 valid = false;
6153 }
6154 return valid;
ebd8d4e8
IC
6155}
6156
ab78acc6
IC
6157Writable.prototype.write = function(chunk, encoding, cb) {
6158 var state = this._writableState;
6159 var ret = false;
ebd8d4e8 6160
ab78acc6
IC
6161 if (util.isFunction(encoding)) {
6162 cb = encoding;
6163 encoding = null;
ebd8d4e8 6164 }
ebd8d4e8 6165
ab78acc6
IC
6166 if (util.isBuffer(chunk))
6167 encoding = 'buffer';
6168 else if (!encoding)
6169 encoding = state.defaultEncoding;
6170
6171 if (!util.isFunction(cb))
6172 cb = function() {};
6173
6174 if (state.ended)
6175 writeAfterEnd(this, state, cb);
6176 else if (validChunk(this, state, chunk, cb)) {
6177 state.pendingcb++;
6178 ret = writeOrBuffer(this, state, chunk, encoding, cb);
ebd8d4e8 6179 }
ebd8d4e8 6180
ab78acc6
IC
6181 return ret;
6182};
6183
6184Writable.prototype.cork = function() {
6185 var state = this._writableState;
6186
6187 state.corked++;
6188};
ebd8d4e8 6189
ab78acc6
IC
6190Writable.prototype.uncork = function() {
6191 var state = this._writableState;
ebd8d4e8 6192
ab78acc6
IC
6193 if (state.corked) {
6194 state.corked--;
ebd8d4e8 6195
ab78acc6
IC
6196 if (!state.writing &&
6197 !state.corked &&
6198 !state.finished &&
6199 !state.bufferProcessing &&
6200 state.buffer.length)
6201 clearBuffer(this, state);
ebd8d4e8 6202 }
ab78acc6 6203};
ebd8d4e8 6204
ab78acc6
IC
6205function decodeChunk(state, chunk, encoding) {
6206 if (!state.objectMode &&
6207 state.decodeStrings !== false &&
6208 util.isString(chunk)) {
6209 chunk = new Buffer(chunk, encoding);
ebd8d4e8 6210 }
ab78acc6 6211 return chunk;
ebd8d4e8
IC
6212}
6213
ab78acc6
IC
6214// if we're already writing something, then just put this
6215// in the queue, and wait our turn. Otherwise, call _write
6216// If we return false, then we need a drain event, so set that flag.
6217function writeOrBuffer(stream, state, chunk, encoding, cb) {
6218 chunk = decodeChunk(state, chunk, encoding);
6219 if (util.isBuffer(chunk))
6220 encoding = 'buffer';
6221 var len = state.objectMode ? 1 : chunk.length;
6222
6223 state.length += len;
6224
6225 var ret = state.length < state.highWaterMark;
6226 // we must ensure that previous needDrain will not be reset to false.
6227 if (!ret)
6228 state.needDrain = true;
6229
6230 if (state.writing || state.corked)
6231 state.buffer.push(new WriteReq(chunk, encoding, cb));
6232 else
6233 doWrite(stream, state, false, len, chunk, encoding, cb);
6234
6235 return ret;
ebd8d4e8
IC
6236}
6237
ab78acc6
IC
6238function doWrite(stream, state, writev, len, chunk, encoding, cb) {
6239 state.writelen = len;
6240 state.writecb = cb;
6241 state.writing = true;
6242 state.sync = true;
6243 if (writev)
6244 stream._writev(chunk, state.onwrite);
6245 else
6246 stream._write(chunk, encoding, state.onwrite);
6247 state.sync = false;
ebd8d4e8
IC
6248}
6249
ab78acc6
IC
6250function onwriteError(stream, state, sync, er, cb) {
6251 if (sync)
6252 process.nextTick(function() {
6253 state.pendingcb--;
6254 cb(er);
6255 });
6256 else {
6257 state.pendingcb--;
6258 cb(er);
6259 }
ebd8d4e8 6260
ab78acc6
IC
6261 stream._writableState.errorEmitted = true;
6262 stream.emit('error', er);
6263}
ebd8d4e8 6264
ab78acc6
IC
6265function onwriteStateUpdate(state) {
6266 state.writing = false;
6267 state.writecb = null;
6268 state.length -= state.writelen;
6269 state.writelen = 0;
6270}
ebd8d4e8 6271
ab78acc6
IC
6272function onwrite(stream, er) {
6273 var state = stream._writableState;
6274 var sync = state.sync;
6275 var cb = state.writecb;
ebd8d4e8 6276
ab78acc6 6277 onwriteStateUpdate(state);
ebd8d4e8 6278
ab78acc6
IC
6279 if (er)
6280 onwriteError(stream, state, sync, er, cb);
6281 else {
6282 // Check if we're actually ready to finish, but don't emit yet
6283 var finished = needFinish(stream, state);
ebd8d4e8 6284
ab78acc6
IC
6285 if (!finished &&
6286 !state.corked &&
6287 !state.bufferProcessing &&
6288 state.buffer.length) {
6289 clearBuffer(stream, state);
6290 }
6291
6292 if (sync) {
6293 process.nextTick(function() {
6294 afterWrite(stream, state, finished, cb);
6295 });
6296 } else {
6297 afterWrite(stream, state, finished, cb);
ebd8d4e8 6298 }
ebd8d4e8
IC
6299 }
6300}
6301
ab78acc6
IC
6302function afterWrite(stream, state, finished, cb) {
6303 if (!finished)
6304 onwriteDrain(stream, state);
6305 state.pendingcb--;
6306 cb();
6307 finishMaybe(stream, state);
6308}
6309
6310// Must force callback to be called on nextTick, so that we don't
6311// emit 'drain' before the write() consumer gets the 'false' return
6312// value, and has a chance to attach a 'drain' listener.
6313function onwriteDrain(stream, state) {
6314 if (state.length === 0 && state.needDrain) {
6315 state.needDrain = false;
6316 stream.emit('drain');
ebd8d4e8
IC
6317 }
6318}
6319
ebd8d4e8 6320
ab78acc6
IC
6321// if there's something in the buffer waiting, then process it
6322function clearBuffer(stream, state) {
6323 state.bufferProcessing = true;
6324
6325 if (stream._writev && state.buffer.length > 1) {
6326 // Fast case, write everything using _writev()
6327 var cbs = [];
6328 for (var c = 0; c < state.buffer.length; c++)
6329 cbs.push(state.buffer[c].callback);
6330
6331 // count the one we are adding, as well.
6332 // TODO(isaacs) clean this up
6333 state.pendingcb++;
6334 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
6335 for (var i = 0; i < cbs.length; i++) {
6336 state.pendingcb--;
6337 cbs[i](err);
6338 }
6339 });
6340
6341 // Clear buffer
6342 state.buffer = [];
6343 } else {
6344 // Slow case, write chunks one-by-one
6345 for (var c = 0; c < state.buffer.length; c++) {
6346 var entry = state.buffer[c];
6347 var chunk = entry.chunk;
6348 var encoding = entry.encoding;
6349 var cb = entry.callback;
6350 var len = state.objectMode ? 1 : chunk.length;
6351
6352 doWrite(stream, state, false, len, chunk, encoding, cb);
6353
6354 // if we didn't call the onwrite immediately, then
6355 // it means that we need to wait until it does.
6356 // also, that means that the chunk and cb are currently
6357 // being processed, so move the buffer counter past them.
6358 if (state.writing) {
6359 c++;
6360 break;
6361 }
ebd8d4e8 6362 }
ab78acc6
IC
6363
6364 if (c < state.buffer.length)
6365 state.buffer = state.buffer.slice(c);
6366 else
6367 state.buffer.length = 0;
ebd8d4e8
IC
6368 }
6369
ab78acc6 6370 state.bufferProcessing = false;
ebd8d4e8
IC
6371}
6372
ab78acc6
IC
6373Writable.prototype._write = function(chunk, encoding, cb) {
6374 cb(new Error('not implemented'));
ebd8d4e8 6375
ab78acc6 6376};
ebd8d4e8 6377
ab78acc6 6378Writable.prototype._writev = null;
ebd8d4e8 6379
ab78acc6
IC
6380Writable.prototype.end = function(chunk, encoding, cb) {
6381 var state = this._writableState;
ebd8d4e8 6382
ab78acc6
IC
6383 if (util.isFunction(chunk)) {
6384 cb = chunk;
6385 chunk = null;
6386 encoding = null;
6387 } else if (util.isFunction(encoding)) {
6388 cb = encoding;
6389 encoding = null;
6390 }
ebd8d4e8 6391
ab78acc6
IC
6392 if (!util.isNullOrUndefined(chunk))
6393 this.write(chunk, encoding);
6394
6395 // .end() fully uncorks
6396 if (state.corked) {
6397 state.corked = 1;
6398 this.uncork();
ebd8d4e8 6399 }
ab78acc6
IC
6400
6401 // ignore unnecessary end() calls.
6402 if (!state.ending && !state.finished)
6403 endWritable(this, state, cb);
6404};
6405
6406
6407function needFinish(stream, state) {
6408 return (state.ending &&
6409 state.length === 0 &&
6410 !state.finished &&
6411 !state.writing);
ebd8d4e8
IC
6412}
6413
ab78acc6
IC
6414function prefinish(stream, state) {
6415 if (!state.prefinished) {
6416 state.prefinished = true;
6417 stream.emit('prefinish');
ebd8d4e8 6418 }
ebd8d4e8
IC
6419}
6420
ab78acc6
IC
6421function finishMaybe(stream, state) {
6422 var need = needFinish(stream, state);
6423 if (need) {
6424 if (state.pendingcb === 0) {
6425 prefinish(stream, state);
6426 state.finished = true;
6427 stream.emit('finish');
6428 } else
6429 prefinish(stream, state);
6430 }
6431 return need;
6432}
ebd8d4e8 6433
ab78acc6
IC
6434function endWritable(stream, state, cb) {
6435 state.ending = true;
6436 finishMaybe(stream, state);
6437 if (cb) {
6438 if (state.finished)
6439 process.nextTick(cb);
6440 else
6441 stream.once('finish', cb);
ebd8d4e8 6442 }
ab78acc6 6443 state.ended = true;
ebd8d4e8
IC
6444}
6445
ab78acc6
IC
6446}).call(this,require('_process'))
6447},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
6448(function (Buffer){
6449// Copyright Joyent, Inc. and other Node contributors.
6450//
6451// Permission is hereby granted, free of charge, to any person obtaining a
6452// copy of this software and associated documentation files (the
6453// "Software"), to deal in the Software without restriction, including
6454// without limitation the rights to use, copy, modify, merge, publish,
6455// distribute, sublicense, and/or sell copies of the Software, and to permit
6456// persons to whom the Software is furnished to do so, subject to the
6457// following conditions:
6458//
6459// The above copyright notice and this permission notice shall be included
6460// in all copies or substantial portions of the Software.
6461//
6462// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6463// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6464// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6465// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6466// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6467// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6468// USE OR OTHER DEALINGS IN THE SOFTWARE.
6469
6470// NOTE: These type checking functions intentionally don't use `instanceof`
6471// because it is fragile and can be easily faked with `Object.create()`.
6472function isArray(ar) {
6473 return Array.isArray(ar);
ebd8d4e8 6474}
ab78acc6 6475exports.isArray = isArray;
ebd8d4e8 6476
ab78acc6
IC
6477function isBoolean(arg) {
6478 return typeof arg === 'boolean';
ebd8d4e8 6479}
ab78acc6 6480exports.isBoolean = isBoolean;
ebd8d4e8 6481
ab78acc6
IC
6482function isNull(arg) {
6483 return arg === null;
6484}
6485exports.isNull = isNull;
ebd8d4e8 6486
ab78acc6
IC
6487function isNullOrUndefined(arg) {
6488 return arg == null;
6489}
6490exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 6491
ab78acc6
IC
6492function isNumber(arg) {
6493 return typeof arg === 'number';
ebd8d4e8 6494}
ab78acc6 6495exports.isNumber = isNumber;
ebd8d4e8 6496
ab78acc6
IC
6497function isString(arg) {
6498 return typeof arg === 'string';
6499}
6500exports.isString = isString;
ebd8d4e8 6501
ab78acc6
IC
6502function isSymbol(arg) {
6503 return typeof arg === 'symbol';
6504}
6505exports.isSymbol = isSymbol;
ebd8d4e8 6506
ab78acc6
IC
6507function isUndefined(arg) {
6508 return arg === void 0;
ebd8d4e8 6509}
ab78acc6 6510exports.isUndefined = isUndefined;
ebd8d4e8 6511
ab78acc6
IC
6512function isRegExp(re) {
6513 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 6514}
ab78acc6 6515exports.isRegExp = isRegExp;
ebd8d4e8 6516
ab78acc6
IC
6517function isObject(arg) {
6518 return typeof arg === 'object' && arg !== null;
ebd8d4e8 6519}
ab78acc6 6520exports.isObject = isObject;
ebd8d4e8 6521
ab78acc6
IC
6522function isDate(d) {
6523 return isObject(d) && objectToString(d) === '[object Date]';
6524}
6525exports.isDate = isDate;
ebd8d4e8 6526
ab78acc6
IC
6527function isError(e) {
6528 return isObject(e) &&
6529 (objectToString(e) === '[object Error]' || e instanceof Error);
6530}
6531exports.isError = isError;
ebd8d4e8 6532
ab78acc6
IC
6533function isFunction(arg) {
6534 return typeof arg === 'function';
6535}
6536exports.isFunction = isFunction;
6537
6538function isPrimitive(arg) {
6539 return arg === null ||
6540 typeof arg === 'boolean' ||
6541 typeof arg === 'number' ||
6542 typeof arg === 'string' ||
6543 typeof arg === 'symbol' || // ES6 symbol
6544 typeof arg === 'undefined';
ebd8d4e8 6545}
ab78acc6 6546exports.isPrimitive = isPrimitive;
ebd8d4e8 6547
ab78acc6
IC
6548function isBuffer(arg) {
6549 return Buffer.isBuffer(arg);
ebd8d4e8 6550}
ab78acc6 6551exports.isBuffer = isBuffer;
ebd8d4e8 6552
ab78acc6
IC
6553function objectToString(o) {
6554 return Object.prototype.toString.call(o);
ebd8d4e8 6555}
ab78acc6
IC
6556}).call(this,require("buffer").Buffer)
6557},{"buffer":7}],22:[function(require,module,exports){
6558module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 6559
ab78acc6
IC
6560},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
6561exports = module.exports = require('./lib/_stream_readable.js');
6562exports.Stream = require('stream');
6563exports.Readable = exports;
6564exports.Writable = require('./lib/_stream_writable.js');
6565exports.Duplex = require('./lib/_stream_duplex.js');
6566exports.Transform = require('./lib/_stream_transform.js');
6567exports.PassThrough = require('./lib/_stream_passthrough.js');
ebd8d4e8 6568
ab78acc6
IC
6569},{"./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){
6570module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 6571
ab78acc6
IC
6572},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
6573module.exports = require("./lib/_stream_writable.js")
6574
6575},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
6576// Copyright Joyent, Inc. and other Node contributors.
6577//
6578// Permission is hereby granted, free of charge, to any person obtaining a
6579// copy of this software and associated documentation files (the
6580// "Software"), to deal in the Software without restriction, including
6581// without limitation the rights to use, copy, modify, merge, publish,
6582// distribute, sublicense, and/or sell copies of the Software, and to permit
6583// persons to whom the Software is furnished to do so, subject to the
6584// following conditions:
6585//
6586// The above copyright notice and this permission notice shall be included
6587// in all copies or substantial portions of the Software.
6588//
6589// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6590// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6591// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6592// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6593// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6594// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6595// USE OR OTHER DEALINGS IN THE SOFTWARE.
6596
6597module.exports = Stream;
6598
6599var EE = require('events').EventEmitter;
6600var inherits = require('inherits');
6601
6602inherits(Stream, EE);
6603Stream.Readable = require('readable-stream/readable.js');
6604Stream.Writable = require('readable-stream/writable.js');
6605Stream.Duplex = require('readable-stream/duplex.js');
6606Stream.Transform = require('readable-stream/transform.js');
6607Stream.PassThrough = require('readable-stream/passthrough.js');
6608
6609// Backwards-compat with node 0.4.x
6610Stream.Stream = Stream;
6611
6612
6613
6614// old-style streams. Note that the pipe method (the only relevant
6615// part of this class) is overridden in the Readable class.
6616
6617function Stream() {
6618 EE.call(this);
ebd8d4e8
IC
6619}
6620
ab78acc6
IC
6621Stream.prototype.pipe = function(dest, options) {
6622 var source = this;
ebd8d4e8 6623
ab78acc6
IC
6624 function ondata(chunk) {
6625 if (dest.writable) {
6626 if (false === dest.write(chunk) && source.pause) {
6627 source.pause();
6628 }
6629 }
6630 }
ebd8d4e8 6631
ab78acc6 6632 source.on('data', ondata);
ebd8d4e8 6633
ab78acc6
IC
6634 function ondrain() {
6635 if (source.readable && source.resume) {
6636 source.resume();
6637 }
6638 }
ebd8d4e8 6639
ab78acc6 6640 dest.on('drain', ondrain);
ebd8d4e8 6641
ab78acc6
IC
6642 // If the 'end' option is not supplied, dest.end() will be called when
6643 // source gets the 'end' or 'close' events. Only dest.end() once.
6644 if (!dest._isStdio && (!options || options.end !== false)) {
6645 source.on('end', onend);
6646 source.on('close', onclose);
ebd8d4e8
IC
6647 }
6648
ab78acc6
IC
6649 var didOnEnd = false;
6650 function onend() {
6651 if (didOnEnd) return;
6652 didOnEnd = true;
ebd8d4e8 6653
ab78acc6
IC
6654 dest.end();
6655 }
ebd8d4e8 6656
ebd8d4e8 6657
ab78acc6
IC
6658 function onclose() {
6659 if (didOnEnd) return;
6660 didOnEnd = true;
ebd8d4e8 6661
ab78acc6 6662 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
6663 }
6664
ab78acc6
IC
6665 // don't leave dangling pipes when there are errors.
6666 function onerror(er) {
6667 cleanup();
6668 if (EE.listenerCount(this, 'error') === 0) {
6669 throw er; // Unhandled stream error in pipe.
6670 }
6671 }
ebd8d4e8 6672
ab78acc6
IC
6673 source.on('error', onerror);
6674 dest.on('error', onerror);
ebd8d4e8 6675
ab78acc6
IC
6676 // remove all the event listeners that were added.
6677 function cleanup() {
6678 source.removeListener('data', ondata);
6679 dest.removeListener('drain', ondrain);
ebd8d4e8 6680
ab78acc6
IC
6681 source.removeListener('end', onend);
6682 source.removeListener('close', onclose);
6683
6684 source.removeListener('error', onerror);
6685 dest.removeListener('error', onerror);
6686
6687 source.removeListener('end', cleanup);
6688 source.removeListener('close', cleanup);
6689
6690 dest.removeListener('close', cleanup);
ebd8d4e8
IC
6691 }
6692
ab78acc6
IC
6693 source.on('end', cleanup);
6694 source.on('close', cleanup);
ebd8d4e8 6695
ab78acc6 6696 dest.on('close', cleanup);
ebd8d4e8 6697
ab78acc6 6698 dest.emit('pipe', source);
ebd8d4e8 6699
ab78acc6
IC
6700 // Allow for unix-like usage: A.pipe(B).pipe(C)
6701 return dest;
6702};
ebd8d4e8 6703
ab78acc6
IC
6704},{"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){
6705// Copyright Joyent, Inc. and other Node contributors.
6706//
6707// Permission is hereby granted, free of charge, to any person obtaining a
6708// copy of this software and associated documentation files (the
6709// "Software"), to deal in the Software without restriction, including
6710// without limitation the rights to use, copy, modify, merge, publish,
6711// distribute, sublicense, and/or sell copies of the Software, and to permit
6712// persons to whom the Software is furnished to do so, subject to the
6713// following conditions:
6714//
6715// The above copyright notice and this permission notice shall be included
6716// in all copies or substantial portions of the Software.
6717//
6718// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6719// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6720// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6721// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6722// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6723// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6724// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6725
ab78acc6 6726var Buffer = require('buffer').Buffer;
ebd8d4e8 6727
ab78acc6
IC
6728var isBufferEncoding = Buffer.isEncoding
6729 || function(encoding) {
6730 switch (encoding && encoding.toLowerCase()) {
6731 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;
6732 default: return false;
6733 }
6734 }
ebd8d4e8 6735
ebd8d4e8 6736
ab78acc6
IC
6737function assertEncoding(encoding) {
6738 if (encoding && !isBufferEncoding(encoding)) {
6739 throw new Error('Unknown encoding: ' + encoding);
ebd8d4e8 6740 }
ebd8d4e8
IC
6741}
6742
ab78acc6
IC
6743// StringDecoder provides an interface for efficiently splitting a series of
6744// buffers into a series of JS strings without breaking apart multi-byte
6745// characters. CESU-8 is handled as part of the UTF-8 encoding.
6746//
6747// @TODO Handling all encodings inside a single object makes it very difficult
6748// to reason about this code, so it should be split up in the future.
6749// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
6750// points as used by CESU-8.
6751var StringDecoder = exports.StringDecoder = function(encoding) {
6752 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
6753 assertEncoding(encoding);
6754 switch (this.encoding) {
6755 case 'utf8':
6756 // CESU-8 represents each of Surrogate Pair by 3-bytes
6757 this.surrogateSize = 3;
6758 break;
6759 case 'ucs2':
6760 case 'utf16le':
6761 // UTF-16 represents each of Surrogate Pair by 2-bytes
6762 this.surrogateSize = 2;
6763 this.detectIncompleteChar = utf16DetectIncompleteChar;
6764 break;
6765 case 'base64':
6766 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
6767 this.surrogateSize = 3;
6768 this.detectIncompleteChar = base64DetectIncompleteChar;
6769 break;
6770 default:
6771 this.write = passThroughWrite;
6772 return;
6773 }
ebd8d4e8 6774
ab78acc6
IC
6775 // Enough space to store all bytes of a single character. UTF-8 needs 4
6776 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
6777 this.charBuffer = new Buffer(6);
6778 // Number of bytes received for the current incomplete multi-byte character.
6779 this.charReceived = 0;
6780 // Number of bytes expected for the current incomplete multi-byte character.
6781 this.charLength = 0;
6782};
ebd8d4e8 6783
ebd8d4e8 6784
ab78acc6
IC
6785// write decodes the given buffer and returns it as JS string that is
6786// guaranteed to not contain any partial multi-byte characters. Any partial
6787// character found at the end of the buffer is buffered up, and will be
6788// returned when calling write again with the remaining bytes.
6789//
6790// Note: Converting a Buffer containing an orphan surrogate to a String
6791// currently works, but converting a String to a Buffer (via `new Buffer`, or
6792// Buffer#write) will replace incomplete surrogates with the unicode
6793// replacement character. See https://codereview.chromium.org/121173009/ .
6794StringDecoder.prototype.write = function(buffer) {
6795 var charStr = '';
6796 // if our last write ended with an incomplete multibyte character
6797 while (this.charLength) {
6798 // determine how many remaining bytes this buffer has to offer for this char
6799 var available = (buffer.length >= this.charLength - this.charReceived) ?
6800 this.charLength - this.charReceived :
6801 buffer.length;
6802
6803 // add the new bytes to the char buffer
6804 buffer.copy(this.charBuffer, this.charReceived, 0, available);
6805 this.charReceived += available;
6806
6807 if (this.charReceived < this.charLength) {
6808 // still not enough chars in this buffer? wait for more ...
6809 return '';
6810 }
6811
6812 // remove bytes belonging to the current character from the buffer
6813 buffer = buffer.slice(available, buffer.length);
6814
6815 // get the character that was split
6816 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
6817
6818 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6819 var charCode = charStr.charCodeAt(charStr.length - 1);
6820 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6821 this.charLength += this.surrogateSize;
6822 charStr = '';
6823 continue;
6824 }
6825 this.charReceived = this.charLength = 0;
ebd8d4e8 6826
ab78acc6
IC
6827 // if there are no more bytes in this buffer, just emit our char
6828 if (buffer.length === 0) {
6829 return charStr;
6830 }
6831 break;
ebd8d4e8 6832 }
ebd8d4e8 6833
ab78acc6
IC
6834 // determine and set charLength / charReceived
6835 this.detectIncompleteChar(buffer);
ebd8d4e8 6836
ab78acc6
IC
6837 var end = buffer.length;
6838 if (this.charLength) {
6839 // buffer the incomplete character bytes we got
6840 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
6841 end -= this.charReceived;
ebd8d4e8
IC
6842 }
6843
ab78acc6 6844 charStr += buffer.toString(this.encoding, 0, end);
ebd8d4e8 6845
ab78acc6
IC
6846 var end = charStr.length - 1;
6847 var charCode = charStr.charCodeAt(end);
6848 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
6849 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
6850 var size = this.surrogateSize;
6851 this.charLength += size;
6852 this.charReceived += size;
6853 this.charBuffer.copy(this.charBuffer, size, 0, size);
6854 buffer.copy(this.charBuffer, 0, 0, size);
6855 return charStr.substring(0, end);
ebd8d4e8
IC
6856 }
6857
ab78acc6
IC
6858 // or just emit the charStr
6859 return charStr;
6860};
ebd8d4e8 6861
ab78acc6
IC
6862// detectIncompleteChar determines if there is an incomplete UTF-8 character at
6863// the end of the given buffer. If so, it sets this.charLength to the byte
6864// length that character, and sets this.charReceived to the number of bytes
6865// that are available for this character.
6866StringDecoder.prototype.detectIncompleteChar = function(buffer) {
6867 // determine how many bytes we have to check at the end of this buffer
6868 var i = (buffer.length >= 3) ? 3 : buffer.length;
ebd8d4e8 6869
ab78acc6
IC
6870 // Figure out if one of the last i bytes of our buffer announces an
6871 // incomplete char.
6872 for (; i > 0; i--) {
6873 var c = buffer[buffer.length - i];
ebd8d4e8 6874
ab78acc6 6875 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 6876
ab78acc6
IC
6877 // 110XXXXX
6878 if (i == 1 && c >> 5 == 0x06) {
6879 this.charLength = 2;
6880 break;
6881 }
ebd8d4e8 6882
ab78acc6
IC
6883 // 1110XXXX
6884 if (i <= 2 && c >> 4 == 0x0E) {
6885 this.charLength = 3;
6886 break;
6887 }
ebd8d4e8 6888
ab78acc6
IC
6889 // 11110XXX
6890 if (i <= 3 && c >> 3 == 0x1E) {
6891 this.charLength = 4;
6892 break;
6893 }
6894 }
6895 this.charReceived = i;
6896};
ebd8d4e8 6897
ab78acc6
IC
6898StringDecoder.prototype.end = function(buffer) {
6899 var res = '';
6900 if (buffer && buffer.length)
6901 res = this.write(buffer);
ebd8d4e8 6902
ab78acc6
IC
6903 if (this.charReceived) {
6904 var cr = this.charReceived;
6905 var buf = this.charBuffer;
6906 var enc = this.encoding;
6907 res += buf.slice(0, cr).toString(enc);
ebd8d4e8
IC
6908 }
6909
ab78acc6
IC
6910 return res;
6911};
ebd8d4e8 6912
ab78acc6
IC
6913function passThroughWrite(buffer) {
6914 return buffer.toString(this.encoding);
ebd8d4e8
IC
6915}
6916
ab78acc6
IC
6917function utf16DetectIncompleteChar(buffer) {
6918 this.charReceived = buffer.length % 2;
6919 this.charLength = this.charReceived ? 2 : 0;
ebd8d4e8
IC
6920}
6921
ab78acc6
IC
6922function base64DetectIncompleteChar(buffer) {
6923 this.charReceived = buffer.length % 3;
6924 this.charLength = this.charReceived ? 3 : 0;
ebd8d4e8
IC
6925}
6926
ab78acc6
IC
6927},{"buffer":7}],28:[function(require,module,exports){
6928module.exports = function isBuffer(arg) {
6929 return arg && typeof arg === 'object'
6930 && typeof arg.copy === 'function'
6931 && typeof arg.fill === 'function'
6932 && typeof arg.readUInt8 === 'function';
6933}
6934},{}],29:[function(require,module,exports){
6935(function (process,global){
6936// Copyright Joyent, Inc. and other Node contributors.
6937//
6938// Permission is hereby granted, free of charge, to any person obtaining a
6939// copy of this software and associated documentation files (the
6940// "Software"), to deal in the Software without restriction, including
6941// without limitation the rights to use, copy, modify, merge, publish,
6942// distribute, sublicense, and/or sell copies of the Software, and to permit
6943// persons to whom the Software is furnished to do so, subject to the
6944// following conditions:
6945//
6946// The above copyright notice and this permission notice shall be included
6947// in all copies or substantial portions of the Software.
6948//
6949// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
6950// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
6951// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
6952// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
6953// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
6954// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
6955// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 6956
ab78acc6
IC
6957var formatRegExp = /%[sdj%]/g;
6958exports.format = function(f) {
6959 if (!isString(f)) {
6960 var objects = [];
6961 for (var i = 0; i < arguments.length; i++) {
6962 objects.push(inspect(arguments[i]));
6963 }
6964 return objects.join(' ');
6965 }
ebd8d4e8 6966
ab78acc6
IC
6967 var i = 1;
6968 var args = arguments;
6969 var len = args.length;
6970 var str = String(f).replace(formatRegExp, function(x) {
6971 if (x === '%%') return '%';
6972 if (i >= len) return x;
6973 switch (x) {
6974 case '%s': return String(args[i++]);
6975 case '%d': return Number(args[i++]);
6976 case '%j':
6977 try {
6978 return JSON.stringify(args[i++]);
6979 } catch (_) {
6980 return '[Circular]';
6981 }
6982 default:
6983 return x;
6984 }
6985 });
6986 for (var x = args[i]; i < len; x = args[++i]) {
6987 if (isNull(x) || !isObject(x)) {
6988 str += ' ' + x;
6989 } else {
6990 str += ' ' + inspect(x);
6991 }
6992 }
6993 return str;
6994};
ebd8d4e8 6995
ebd8d4e8 6996
ab78acc6
IC
6997// Mark that a method should not be used.
6998// Returns a modified function which warns once by default.
6999// If --no-deprecation is set, then it is a no-op.
7000exports.deprecate = function(fn, msg) {
7001 // Allow for deprecating things in the process of starting up.
7002 if (isUndefined(global.process)) {
7003 return function() {
7004 return exports.deprecate(fn, msg).apply(this, arguments);
7005 };
7006 }
ebd8d4e8 7007
ab78acc6
IC
7008 if (process.noDeprecation === true) {
7009 return fn;
7010 }
ebd8d4e8 7011
ab78acc6
IC
7012 var warned = false;
7013 function deprecated() {
7014 if (!warned) {
7015 if (process.throwDeprecation) {
7016 throw new Error(msg);
7017 } else if (process.traceDeprecation) {
7018 console.trace(msg);
7019 } else {
7020 console.error(msg);
7021 }
7022 warned = true;
7023 }
7024 return fn.apply(this, arguments);
7025 }
ebd8d4e8 7026
ab78acc6
IC
7027 return deprecated;
7028};
ebd8d4e8 7029
ebd8d4e8 7030
ab78acc6
IC
7031var debugs = {};
7032var debugEnviron;
7033exports.debuglog = function(set) {
7034 if (isUndefined(debugEnviron))
7035 debugEnviron = process.env.NODE_DEBUG || '';
7036 set = set.toUpperCase();
7037 if (!debugs[set]) {
7038 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
7039 var pid = process.pid;
7040 debugs[set] = function() {
7041 var msg = exports.format.apply(exports, arguments);
7042 console.error('%s %d: %s', set, pid, msg);
7043 };
7044 } else {
7045 debugs[set] = function() {};
ebd8d4e8
IC
7046 }
7047 }
ab78acc6
IC
7048 return debugs[set];
7049};
ebd8d4e8 7050
ebd8d4e8
IC
7051
7052/**
ab78acc6
IC
7053 * Echos the value of a value. Trys to print the value out
7054 * in the best way possible given the different types.
7055 *
7056 * @param {Object} obj The object to print out.
7057 * @param {Object} opts Optional options object that alters the output.
ebd8d4e8 7058 */
ab78acc6
IC
7059/* legacy: obj, showHidden, depth, colors*/
7060function inspect(obj, opts) {
7061 // default options
7062 var ctx = {
7063 seen: [],
7064 stylize: stylizeNoColor
7065 };
7066 // legacy...
7067 if (arguments.length >= 3) ctx.depth = arguments[2];
7068 if (arguments.length >= 4) ctx.colors = arguments[3];
7069 if (isBoolean(opts)) {
7070 // legacy...
7071 ctx.showHidden = opts;
7072 } else if (opts) {
7073 // got an "options" object
7074 exports._extend(ctx, opts);
ebd8d4e8 7075 }
ab78acc6
IC
7076 // set default options
7077 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
7078 if (isUndefined(ctx.depth)) ctx.depth = 2;
7079 if (isUndefined(ctx.colors)) ctx.colors = false;
7080 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
7081 if (ctx.colors) ctx.stylize = stylizeWithColor;
7082 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 7083}
ab78acc6 7084exports.inspect = inspect;
ebd8d4e8 7085
ebd8d4e8 7086
ab78acc6
IC
7087// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
7088inspect.colors = {
7089 'bold' : [1, 22],
7090 'italic' : [3, 23],
7091 'underline' : [4, 24],
7092 'inverse' : [7, 27],
7093 'white' : [37, 39],
7094 'grey' : [90, 39],
7095 'black' : [30, 39],
7096 'blue' : [34, 39],
7097 'cyan' : [36, 39],
7098 'green' : [32, 39],
7099 'magenta' : [35, 39],
7100 'red' : [31, 39],
7101 'yellow' : [33, 39]
7102};
ebd8d4e8 7103
ab78acc6
IC
7104// Don't use 'blue' not visible on cmd.exe
7105inspect.styles = {
7106 'special': 'cyan',
7107 'number': 'yellow',
7108 'boolean': 'yellow',
7109 'undefined': 'grey',
7110 'null': 'bold',
7111 'string': 'green',
7112 'date': 'magenta',
7113 // "name": intentionally not styling
7114 'regexp': 'red'
7115};
ebd8d4e8 7116
ebd8d4e8 7117
ab78acc6
IC
7118function stylizeWithColor(str, styleType) {
7119 var style = inspect.styles[styleType];
ebd8d4e8 7120
ab78acc6
IC
7121 if (style) {
7122 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
7123 '\u001b[' + inspect.colors[style][1] + 'm';
7124 } else {
7125 return str;
ebd8d4e8 7126 }
ebd8d4e8
IC
7127}
7128
ebd8d4e8 7129
ab78acc6
IC
7130function stylizeNoColor(str, styleType) {
7131 return str;
ebd8d4e8
IC
7132}
7133
ebd8d4e8 7134
ab78acc6
IC
7135function arrayToHash(array) {
7136 var hash = {};
ebd8d4e8 7137
ab78acc6
IC
7138 array.forEach(function(val, idx) {
7139 hash[val] = true;
7140 });
ebd8d4e8 7141
ab78acc6 7142 return hash;
ebd8d4e8
IC
7143}
7144
ebd8d4e8 7145
ab78acc6
IC
7146function formatValue(ctx, value, recurseTimes) {
7147 // Provide a hook for user-specified inspect functions.
7148 // Check that value is an object with an inspect function on it
7149 if (ctx.customInspect &&
7150 value &&
7151 isFunction(value.inspect) &&
7152 // Filter out the util module, it's inspect function is special
7153 value.inspect !== exports.inspect &&
7154 // Also filter out any prototype objects using the circular check.
7155 !(value.constructor && value.constructor.prototype === value)) {
7156 var ret = value.inspect(recurseTimes, ctx);
7157 if (!isString(ret)) {
7158 ret = formatValue(ctx, ret, recurseTimes);
7159 }
7160 return ret;
ebd8d4e8 7161 }
ebd8d4e8 7162
ab78acc6
IC
7163 // Primitive types cannot have properties
7164 var primitive = formatPrimitive(ctx, value);
7165 if (primitive) {
7166 return primitive;
ebd8d4e8
IC
7167 }
7168
ab78acc6
IC
7169 // Look up the keys of the object.
7170 var keys = Object.keys(value);
7171 var visibleKeys = arrayToHash(keys);
ebd8d4e8 7172
ab78acc6
IC
7173 if (ctx.showHidden) {
7174 keys = Object.getOwnPropertyNames(value);
7175 }
ebd8d4e8 7176
ab78acc6
IC
7177 // IE doesn't make error fields non-enumerable
7178 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
7179 if (isError(value)
7180 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
7181 return formatError(value);
ebd8d4e8 7182 }
ebd8d4e8 7183
ab78acc6
IC
7184 // Some type of object without properties can be shortcutted.
7185 if (keys.length === 0) {
7186 if (isFunction(value)) {
7187 var name = value.name ? ': ' + value.name : '';
7188 return ctx.stylize('[Function' + name + ']', 'special');
7189 }
7190 if (isRegExp(value)) {
7191 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7192 }
7193 if (isDate(value)) {
7194 return ctx.stylize(Date.prototype.toString.call(value), 'date');
7195 }
7196 if (isError(value)) {
7197 return formatError(value);
7198 }
ebd8d4e8 7199 }
ebd8d4e8 7200
ab78acc6 7201 var base = '', array = false, braces = ['{', '}'];
ebd8d4e8 7202
ab78acc6
IC
7203 // Make Array say that they are Array
7204 if (isArray(value)) {
7205 array = true;
7206 braces = ['[', ']'];
7207 }
ebd8d4e8 7208
ab78acc6
IC
7209 // Make functions say that they are functions
7210 if (isFunction(value)) {
7211 var n = value.name ? ': ' + value.name : '';
7212 base = ' [Function' + n + ']';
7213 }
ebd8d4e8 7214
ab78acc6
IC
7215 // Make RegExps say that they are RegExps
7216 if (isRegExp(value)) {
7217 base = ' ' + RegExp.prototype.toString.call(value);
7218 }
ebd8d4e8 7219
ab78acc6
IC
7220 // Make dates with properties first say the date
7221 if (isDate(value)) {
7222 base = ' ' + Date.prototype.toUTCString.call(value);
7223 }
ebd8d4e8 7224
ab78acc6
IC
7225 // Make error with message first say the error
7226 if (isError(value)) {
7227 base = ' ' + formatError(value);
7228 }
ebd8d4e8 7229
ab78acc6
IC
7230 if (keys.length === 0 && (!array || value.length == 0)) {
7231 return braces[0] + base + braces[1];
7232 }
ebd8d4e8 7233
ab78acc6
IC
7234 if (recurseTimes < 0) {
7235 if (isRegExp(value)) {
7236 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
7237 } else {
7238 return ctx.stylize('[Object]', 'special');
7239 }
7240 }
ebd8d4e8 7241
ab78acc6 7242 ctx.seen.push(value);
ebd8d4e8 7243
ab78acc6
IC
7244 var output;
7245 if (array) {
7246 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
7247 } else {
7248 output = keys.map(function(key) {
7249 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
7250 });
7251 }
ebd8d4e8 7252
ab78acc6 7253 ctx.seen.pop();
ebd8d4e8 7254
ab78acc6
IC
7255 return reduceToSingleString(output, base, braces);
7256}
ebd8d4e8 7257
ebd8d4e8 7258
ab78acc6
IC
7259function formatPrimitive(ctx, value) {
7260 if (isUndefined(value))
7261 return ctx.stylize('undefined', 'undefined');
7262 if (isString(value)) {
7263 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
7264 .replace(/'/g, "\\'")
7265 .replace(/\\"/g, '"') + '\'';
7266 return ctx.stylize(simple, 'string');
7267 }
7268 if (isNumber(value))
7269 return ctx.stylize('' + value, 'number');
7270 if (isBoolean(value))
7271 return ctx.stylize('' + value, 'boolean');
7272 // For some reason typeof null is "object", so special case here.
7273 if (isNull(value))
7274 return ctx.stylize('null', 'null');
7275}
ebd8d4e8 7276
ebd8d4e8 7277
ab78acc6
IC
7278function formatError(value) {
7279 return '[' + Error.prototype.toString.call(value) + ']';
7280}
ebd8d4e8 7281
ebd8d4e8 7282
ab78acc6
IC
7283function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
7284 var output = [];
7285 for (var i = 0, l = value.length; i < l; ++i) {
7286 if (hasOwnProperty(value, String(i))) {
7287 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7288 String(i), true));
7289 } else {
7290 output.push('');
7291 }
7292 }
7293 keys.forEach(function(key) {
7294 if (!key.match(/^\d+$/)) {
7295 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
7296 key, true));
7297 }
7298 });
7299 return output;
7300}
ebd8d4e8 7301
ebd8d4e8 7302
ab78acc6
IC
7303function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
7304 var name, str, desc;
7305 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
7306 if (desc.get) {
7307 if (desc.set) {
7308 str = ctx.stylize('[Getter/Setter]', 'special');
7309 } else {
7310 str = ctx.stylize('[Getter]', 'special');
7311 }
7312 } else {
7313 if (desc.set) {
7314 str = ctx.stylize('[Setter]', 'special');
7315 }
7316 }
7317 if (!hasOwnProperty(visibleKeys, key)) {
7318 name = '[' + key + ']';
7319 }
7320 if (!str) {
7321 if (ctx.seen.indexOf(desc.value) < 0) {
7322 if (isNull(recurseTimes)) {
7323 str = formatValue(ctx, desc.value, null);
7324 } else {
7325 str = formatValue(ctx, desc.value, recurseTimes - 1);
7326 }
7327 if (str.indexOf('\n') > -1) {
7328 if (array) {
7329 str = str.split('\n').map(function(line) {
7330 return ' ' + line;
7331 }).join('\n').substr(2);
7332 } else {
7333 str = '\n' + str.split('\n').map(function(line) {
7334 return ' ' + line;
7335 }).join('\n');
7336 }
7337 }
7338 } else {
7339 str = ctx.stylize('[Circular]', 'special');
7340 }
7341 }
7342 if (isUndefined(name)) {
7343 if (array && key.match(/^\d+$/)) {
7344 return str;
7345 }
7346 name = JSON.stringify('' + key);
7347 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
7348 name = name.substr(1, name.length - 2);
7349 name = ctx.stylize(name, 'name');
7350 } else {
7351 name = name.replace(/'/g, "\\'")
7352 .replace(/\\"/g, '"')
7353 .replace(/(^"|"$)/g, "'");
7354 name = ctx.stylize(name, 'string');
7355 }
7356 }
ebd8d4e8 7357
ab78acc6
IC
7358 return name + ': ' + str;
7359}
ebd8d4e8 7360
ebd8d4e8 7361
ab78acc6
IC
7362function reduceToSingleString(output, base, braces) {
7363 var numLinesEst = 0;
7364 var length = output.reduce(function(prev, cur) {
7365 numLinesEst++;
7366 if (cur.indexOf('\n') >= 0) numLinesEst++;
7367 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
7368 }, 0);
ebd8d4e8 7369
ab78acc6
IC
7370 if (length > 60) {
7371 return braces[0] +
7372 (base === '' ? '' : base + '\n ') +
7373 ' ' +
7374 output.join(',\n ') +
7375 ' ' +
7376 braces[1];
7377 }
ebd8d4e8 7378
ab78acc6
IC
7379 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
7380}
ebd8d4e8 7381
ebd8d4e8 7382
ab78acc6
IC
7383// NOTE: These type checking functions intentionally don't use `instanceof`
7384// because it is fragile and can be easily faked with `Object.create()`.
7385function isArray(ar) {
7386 return Array.isArray(ar);
7387}
7388exports.isArray = isArray;
ebd8d4e8 7389
ab78acc6
IC
7390function isBoolean(arg) {
7391 return typeof arg === 'boolean';
7392}
7393exports.isBoolean = isBoolean;
ebd8d4e8 7394
ab78acc6
IC
7395function isNull(arg) {
7396 return arg === null;
7397}
7398exports.isNull = isNull;
ebd8d4e8 7399
ab78acc6
IC
7400function isNullOrUndefined(arg) {
7401 return arg == null;
7402}
7403exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 7404
ab78acc6
IC
7405function isNumber(arg) {
7406 return typeof arg === 'number';
7407}
7408exports.isNumber = isNumber;
ebd8d4e8 7409
ab78acc6
IC
7410function isString(arg) {
7411 return typeof arg === 'string';
7412}
7413exports.isString = isString;
ebd8d4e8 7414
ab78acc6
IC
7415function isSymbol(arg) {
7416 return typeof arg === 'symbol';
7417}
7418exports.isSymbol = isSymbol;
ebd8d4e8 7419
ab78acc6
IC
7420function isUndefined(arg) {
7421 return arg === void 0;
7422}
7423exports.isUndefined = isUndefined;
ebd8d4e8 7424
ab78acc6
IC
7425function isRegExp(re) {
7426 return isObject(re) && objectToString(re) === '[object RegExp]';
7427}
7428exports.isRegExp = isRegExp;
ebd8d4e8 7429
ab78acc6
IC
7430function isObject(arg) {
7431 return typeof arg === 'object' && arg !== null;
ebd8d4e8 7432}
ab78acc6 7433exports.isObject = isObject;
ebd8d4e8 7434
ab78acc6
IC
7435function isDate(d) {
7436 return isObject(d) && objectToString(d) === '[object Date]';
7437}
7438exports.isDate = isDate;
ebd8d4e8 7439
ab78acc6
IC
7440function isError(e) {
7441 return isObject(e) &&
7442 (objectToString(e) === '[object Error]' || e instanceof Error);
7443}
7444exports.isError = isError;
ebd8d4e8 7445
ab78acc6
IC
7446function isFunction(arg) {
7447 return typeof arg === 'function';
7448}
7449exports.isFunction = isFunction;
ebd8d4e8 7450
ab78acc6
IC
7451function isPrimitive(arg) {
7452 return arg === null ||
7453 typeof arg === 'boolean' ||
7454 typeof arg === 'number' ||
7455 typeof arg === 'string' ||
7456 typeof arg === 'symbol' || // ES6 symbol
7457 typeof arg === 'undefined';
7458}
7459exports.isPrimitive = isPrimitive;
ebd8d4e8 7460
ab78acc6 7461exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 7462
ab78acc6
IC
7463function objectToString(o) {
7464 return Object.prototype.toString.call(o);
7465}
ebd8d4e8 7466
ebd8d4e8 7467
ab78acc6
IC
7468function pad(n) {
7469 return n < 10 ? '0' + n.toString(10) : n.toString(10);
7470}
ebd8d4e8 7471
ebd8d4e8 7472
ab78acc6
IC
7473var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
7474 'Oct', 'Nov', 'Dec'];
ebd8d4e8 7475
ab78acc6
IC
7476// 26 Feb 16:19:34
7477function timestamp() {
7478 var d = new Date();
7479 var time = [pad(d.getHours()),
7480 pad(d.getMinutes()),
7481 pad(d.getSeconds())].join(':');
7482 return [d.getDate(), months[d.getMonth()], time].join(' ');
ebd8d4e8
IC
7483}
7484
ab78acc6
IC
7485
7486// log is just a thin wrapper to console.log that prepends a timestamp
7487exports.log = function() {
7488 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ebd8d4e8
IC
7489};
7490
ab78acc6
IC
7491
7492/**
7493 * Inherit the prototype methods from one constructor into another.
7494 *
7495 * The Function.prototype.inherits from lang.js rewritten as a standalone
7496 * function (not on Function.prototype). NOTE: If this file is to be loaded
7497 * during bootstrapping this function needs to be rewritten using some native
7498 * functions as prototype setup using normal JavaScript does not work as
7499 * expected during bootstrapping (see mirror.js in r114903).
7500 *
7501 * @param {function} ctor Constructor function which needs to inherit the
7502 * prototype.
7503 * @param {function} superCtor Constructor function to inherit prototype from.
7504 */
7505exports.inherits = require('inherits');
7506
7507exports._extend = function(origin, add) {
7508 // Don't do anything if add isn't an object
7509 if (!add || !isObject(add)) return origin;
7510
7511 var keys = Object.keys(add);
7512 var i = keys.length;
7513 while (i--) {
7514 origin[keys[i]] = add[keys[i]];
7515 }
7516 return origin;
7517};
7518
7519function hasOwnProperty(obj, prop) {
7520 return Object.prototype.hasOwnProperty.call(obj, prop);
7521}
7522
7523}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7524},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
ebd8d4e8
IC
7525// Base58 encoding/decoding
7526// Originally written by Mike Hearn for BitcoinJ
7527// Copyright (c) 2011 Google Inc
7528// Ported to JavaScript by Stefan Thomas
7529// Merged Buffer refactorings from base58-native by Stephen Pair
7530// Copyright (c) 2013 BitPay Inc
7531
ebd8d4e8 7532var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
ebd8d4e8
IC
7533var ALPHABET_MAP = {}
7534for(var i = 0; i < ALPHABET.length; i++) {
ab78acc6 7535 ALPHABET_MAP[ALPHABET.charAt(i)] = i
ebd8d4e8 7536}
ab78acc6 7537var BASE = 58
ebd8d4e8
IC
7538
7539function encode(buffer) {
ab78acc6
IC
7540 if (buffer.length === 0) return ''
7541
7542 var i, j, digits = [0]
7543 for (i = 0; i < buffer.length; i++) {
7544 for (j = 0; j < digits.length; j++) digits[j] <<= 8
7545
7546 digits[0] += buffer[i]
ebd8d4e8 7547
ab78acc6
IC
7548 var carry = 0
7549 for (j = 0; j < digits.length; ++j) {
7550 digits[j] += carry
ebd8d4e8 7551
ab78acc6
IC
7552 carry = (digits[j] / BASE) | 0
7553 digits[j] %= BASE
7554 }
7555
7556 while (carry) {
7557 digits.push(carry % BASE)
7558
7559 carry = (carry / BASE) | 0
7560 }
ebd8d4e8
IC
7561 }
7562
7563 // deal with leading zeros
ab78acc6 7564 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
ebd8d4e8 7565
ab78acc6
IC
7566 // convert digits to a string
7567 var stringOutput = ""
7568 for (var i = digits.length - 1; i >= 0; i--) {
7569 stringOutput = stringOutput + ALPHABET[digits[i]]
7570 }
7571 return stringOutput
ebd8d4e8
IC
7572}
7573
7574function decode(string) {
ab78acc6 7575 if (string.length === 0) return []
ebd8d4e8 7576
ab78acc6
IC
7577 var i, j, bytes = [0]
7578 for (i = 0; i < string.length; i++) {
7579 var c = string[i]
7580 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
ebd8d4e8 7581
ab78acc6
IC
7582 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
7583 bytes[0] += ALPHABET_MAP[c]
ebd8d4e8 7584
ab78acc6
IC
7585 var carry = 0
7586 for (j = 0; j < bytes.length; ++j) {
7587 bytes[j] += carry
ebd8d4e8 7588
ab78acc6
IC
7589 carry = bytes[j] >> 8
7590 bytes[j] &= 0xff
7591 }
ebd8d4e8 7592
ab78acc6
IC
7593 while (carry) {
7594 bytes.push(carry & 0xff)
7595
7596 carry >>= 8
7597 }
ebd8d4e8
IC
7598 }
7599
ab78acc6
IC
7600 // deal with leading zeros
7601 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
ebd8d4e8 7602
ab78acc6 7603 return bytes.reverse()
ebd8d4e8
IC
7604}
7605
7606module.exports = {
7607 encode: encode,
7608 decode: decode
7609}
7610
ab78acc6 7611},{}],31:[function(require,module,exports){
ebd8d4e8 7612(function (Buffer){
ab78acc6
IC
7613'use strict'
7614
7615var base58 = require('bs58')
7616var createHash = require('create-hash')
7617
7618// SHA256(SHA256(buffer))
7619function sha256x2 (buffer) {
7620 buffer = createHash('sha256').update(buffer).digest()
7621 return createHash('sha256').update(buffer).digest()
7622}
7623
7624// Encode a buffer as a base58-check encoded string
7625function encode (payload) {
7626 var checksum = sha256x2(payload).slice(0, 4)
7627
7628 return base58.encode(Buffer.concat([
7629 payload,
7630 checksum
7631 ]))
7632}
7633
7634// Decode a base58-check encoded string to a buffer
7635function decode (string) {
7636 var buffer = new Buffer(base58.decode(string))
7637
7638 var payload = buffer.slice(0, -4)
7639 var checksum = buffer.slice(-4)
7640 var newChecksum = sha256x2(payload).slice(0, 4)
7641
7642 for (var i = 0; i < newChecksum.length; ++i) {
7643 if (newChecksum[i] === checksum[i]) continue
7644
7645 throw new Error('Invalid checksum')
ebd8d4e8 7646 }
ab78acc6
IC
7647
7648 return payload
ebd8d4e8
IC
7649}
7650
ab78acc6
IC
7651module.exports = {
7652 encode: encode,
7653 decode: decode
ebd8d4e8
IC
7654}
7655
ab78acc6
IC
7656}).call(this,require("buffer").Buffer)
7657},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
ebd8d4e8 7658(function (Buffer){
ab78acc6
IC
7659'use strict';
7660var inherits = require('inherits')
7661var md5 = require('./md5')
7662var rmd160 = require('ripemd160')
7663var sha = require('sha.js')
ebd8d4e8 7664
ab78acc6 7665var Transform = require('stream').Transform
ebd8d4e8 7666
ab78acc6
IC
7667function HashNoConstructor(hash) {
7668 Transform.call(this)
ebd8d4e8 7669
ab78acc6
IC
7670 this._hash = hash
7671 this.buffers = []
7672}
ebd8d4e8 7673
ab78acc6 7674inherits(HashNoConstructor, Transform)
ebd8d4e8 7675
ab78acc6
IC
7676HashNoConstructor.prototype._transform = function (data, _, next) {
7677 this.buffers.push(data)
ebd8d4e8 7678
ab78acc6
IC
7679 next()
7680}
ebd8d4e8 7681
ab78acc6
IC
7682HashNoConstructor.prototype._flush = function (next) {
7683 this.push(this.digest())
7684 next()
7685}
7686
7687HashNoConstructor.prototype.update = function (data, enc) {
7688 if (typeof data === 'string') {
7689 data = new Buffer(data, enc)
ebd8d4e8
IC
7690 }
7691
ab78acc6
IC
7692 this.buffers.push(data)
7693 return this
7694}
7695
7696HashNoConstructor.prototype.digest = function (enc) {
7697 var buf = Buffer.concat(this.buffers)
7698 var r = this._hash(buf)
7699 this.buffers = null
7700
7701 return enc ? r.toString(enc) : r
7702}
7703
7704function Hash(hash) {
7705 Transform.call(this)
7706
7707 this._hash = hash
7708}
7709
7710inherits(Hash, Transform)
7711
7712Hash.prototype._transform = function (data, enc, next) {
7713 if (enc) data = new Buffer(data, enc)
7714
7715 this._hash.update(data)
7716
7717 next()
ebd8d4e8
IC
7718}
7719
ab78acc6
IC
7720Hash.prototype._flush = function (next) {
7721 this.push(this._hash.digest())
7722 this._hash = null
7723
7724 next()
7725}
7726
7727Hash.prototype.update = function (data, enc) {
7728 if (typeof data === 'string') {
7729 data = new Buffer(data, enc)
7730 }
7731
7732 this._hash.update(data)
ebd8d4e8
IC
7733 return this
7734}
7735
ab78acc6
IC
7736Hash.prototype.digest = function (enc) {
7737 var outData = this._hash.digest()
7738
7739 return enc ? outData.toString(enc) : outData
ebd8d4e8
IC
7740}
7741
ab78acc6
IC
7742module.exports = function createHash (alg) {
7743 if ('md5' === alg) return new HashNoConstructor(md5)
7744 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
7745
7746 return new Hash(sha(alg))
7747}
ebd8d4e8 7748
ab78acc6
IC
7749}).call(this,require("buffer").Buffer)
7750},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
ebd8d4e8 7751(function (Buffer){
ab78acc6 7752'use strict';
ebd8d4e8
IC
7753var intSize = 4;
7754var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
7755var chrsz = 8;
7756
7757function toArray(buf, bigEndian) {
7758 if ((buf.length % intSize) !== 0) {
7759 var len = buf.length + (intSize - (buf.length % intSize));
7760 buf = Buffer.concat([buf, zeroBuffer], len);
7761 }
7762
7763 var arr = [];
7764 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
7765 for (var i = 0; i < buf.length; i += intSize) {
7766 arr.push(fn.call(buf, i));
7767 }
7768 return arr;
7769}
7770
7771function toBuffer(arr, size, bigEndian) {
7772 var buf = new Buffer(size);
7773 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
7774 for (var i = 0; i < arr.length; i++) {
7775 fn.call(buf, arr[i], i * 4, true);
7776 }
7777 return buf;
7778}
7779
7780function hash(buf, fn, hashSize, bigEndian) {
7781 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
7782 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
7783 return toBuffer(arr, hashSize, bigEndian);
7784}
ab78acc6
IC
7785exports.hash = hash;
7786}).call(this,require("buffer").Buffer)
7787},{"buffer":7}],34:[function(require,module,exports){
7788'use strict';
ebd8d4e8
IC
7789/*
7790 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
7791 * Digest Algorithm, as defined in RFC 1321.
7792 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
7793 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
7794 * Distributed under the BSD License
7795 * See http://pajhome.org.uk/crypt/md5 for more info.
7796 */
7797
ab78acc6 7798var helpers = require('./helpers');
ebd8d4e8
IC
7799
7800/*
7801 * Calculate the MD5 of an array of little-endian words, and a bit length
7802 */
7803function core_md5(x, len)
7804{
7805 /* append padding */
7806 x[len >> 5] |= 0x80 << ((len) % 32);
7807 x[(((len + 64) >>> 9) << 4) + 14] = len;
7808
7809 var a = 1732584193;
7810 var b = -271733879;
7811 var c = -1732584194;
7812 var d = 271733878;
7813
7814 for(var i = 0; i < x.length; i += 16)
7815 {
7816 var olda = a;
7817 var oldb = b;
7818 var oldc = c;
7819 var oldd = d;
7820
7821 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
7822 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
7823 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
7824 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
7825 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
7826 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
7827 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
7828 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
7829 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
7830 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
7831 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
7832 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
7833 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
7834 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
7835 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
7836 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
7837
7838 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
7839 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
7840 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
7841 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
7842 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
7843 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
7844 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
7845 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
7846 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
7847 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
7848 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
7849 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
7850 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
7851 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
7852 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
7853 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
7854
7855 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
7856 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
7857 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
7858 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
7859 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
7860 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
7861 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
7862 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
7863 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
7864 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
7865 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
7866 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
7867 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
7868 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
7869 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
7870 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
7871
7872 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
7873 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
7874 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
7875 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
7876 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
7877 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
7878 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
7879 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
7880 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
7881 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
7882 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
7883 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
7884 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
7885 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
7886 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
7887 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
7888
7889 a = safe_add(a, olda);
7890 b = safe_add(b, oldb);
7891 c = safe_add(c, oldc);
7892 d = safe_add(d, oldd);
7893 }
7894 return Array(a, b, c, d);
7895
7896}
7897
7898/*
7899 * These functions implement the four basic operations the algorithm uses.
7900 */
7901function md5_cmn(q, a, b, x, s, t)
7902{
7903 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
7904}
7905function md5_ff(a, b, c, d, x, s, t)
7906{
7907 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
7908}
7909function md5_gg(a, b, c, d, x, s, t)
7910{
7911 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
7912}
7913function md5_hh(a, b, c, d, x, s, t)
7914{
7915 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
7916}
7917function md5_ii(a, b, c, d, x, s, t)
7918{
7919 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
7920}
7921
7922/*
7923 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
7924 * to work around bugs in some JS interpreters.
7925 */
7926function safe_add(x, y)
7927{
7928 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
7929 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
7930 return (msw << 16) | (lsw & 0xFFFF);
7931}
7932
7933/*
7934 * Bitwise rotate a 32-bit number to the left.
7935 */
7936function bit_rol(num, cnt)
7937{
7938 return (num << cnt) | (num >>> (32 - cnt));
7939}
7940
7941module.exports = function md5(buf) {
7942 return helpers.hash(buf, core_md5, 16);
7943};
ab78acc6
IC
7944},{"./helpers":33}],35:[function(require,module,exports){
7945arguments[4][12][0].apply(exports,arguments)
7946},{"dup":12}],36:[function(require,module,exports){
ebd8d4e8 7947(function (Buffer){
ebd8d4e8
IC
7948/*
7949CryptoJS v3.1.2
7950code.google.com/p/crypto-js
7951(c) 2009-2013 by Jeff Mott. All rights reserved.
7952code.google.com/p/crypto-js/wiki/License
7953*/
7954/** @preserve
7955(c) 2012 by Cédric Mesnil. All rights reserved.
7956
7957Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
7958
7959 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
7960 - 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.
7961
7962THIS 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.
7963*/
7964
ab78acc6 7965// constants table
ebd8d4e8 7966var zl = [
ab78acc6
IC
7967 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
7968 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
7969 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
7970 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
7971 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
7972]
7973
ebd8d4e8 7974var zr = [
ab78acc6
IC
7975 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
7976 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
7977 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
7978 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
7979 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
7980]
7981
ebd8d4e8 7982var sl = [
ab78acc6
IC
7983 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
7984 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
7985 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
7986 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
7987 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
7988]
7989
ebd8d4e8 7990var sr = [
ab78acc6
IC
7991 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
7992 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
7993 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
7994 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
7995 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
7996]
ebd8d4e8 7997
ab78acc6
IC
7998var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
7999var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
ebd8d4e8 8000
ab78acc6
IC
8001function bytesToWords (bytes) {
8002 var words = []
ebd8d4e8 8003 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
ab78acc6 8004 words[b >>> 5] |= bytes[i] << (24 - b % 32)
ebd8d4e8 8005 }
ab78acc6
IC
8006 return words
8007}
ebd8d4e8 8008
ab78acc6
IC
8009function wordsToBytes (words) {
8010 var bytes = []
ebd8d4e8 8011 for (var b = 0; b < words.length * 32; b += 8) {
ab78acc6 8012 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
ebd8d4e8 8013 }
ab78acc6
IC
8014 return bytes
8015}
ebd8d4e8 8016
ab78acc6
IC
8017function processBlock (H, M, offset) {
8018 // swap endian
ebd8d4e8 8019 for (var i = 0; i < 16; i++) {
ab78acc6
IC
8020 var offset_i = offset + i
8021 var M_offset_i = M[offset_i]
ebd8d4e8
IC
8022
8023 // Swap
8024 M[offset_i] = (
ab78acc6
IC
8025 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
8026 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
8027 )
ebd8d4e8
IC
8028 }
8029
8030 // Working variables
ab78acc6
IC
8031 var al, bl, cl, dl, el
8032 var ar, br, cr, dr, er
8033
8034 ar = al = H[0]
8035 br = bl = H[1]
8036 cr = cl = H[2]
8037 dr = dl = H[3]
8038 er = el = H[4]
8039
8040 // computation
8041 var t
8042 for (i = 0; i < 80; i += 1) {
8043 t = (al + M[offset + zl[i]]) | 0
8044 if (i < 16) {
8045 t += f1(bl, cl, dl) + hl[0]
8046 } else if (i < 32) {
8047 t += f2(bl, cl, dl) + hl[1]
8048 } else if (i < 48) {
8049 t += f3(bl, cl, dl) + hl[2]
8050 } else if (i < 64) {
8051 t += f4(bl, cl, dl) + hl[3]
ebd8d4e8 8052 } else {// if (i<80) {
ab78acc6
IC
8053 t += f5(bl, cl, dl) + hl[4]
8054 }
8055 t = t | 0
8056 t = rotl(t, sl[i])
8057 t = (t + el) | 0
8058 al = el
8059 el = dl
8060 dl = rotl(cl, 10)
8061 cl = bl
8062 bl = t
8063
8064 t = (ar + M[offset + zr[i]]) | 0
8065 if (i < 16) {
8066 t += f5(br, cr, dr) + hr[0]
8067 } else if (i < 32) {
8068 t += f4(br, cr, dr) + hr[1]
8069 } else if (i < 48) {
8070 t += f3(br, cr, dr) + hr[2]
8071 } else if (i < 64) {
8072 t += f2(br, cr, dr) + hr[3]
ebd8d4e8 8073 } else {// if (i<80) {
ab78acc6 8074 t += f1(br, cr, dr) + hr[4]
ebd8d4e8 8075 }
ebd8d4e8 8076
ab78acc6
IC
8077 t = t | 0
8078 t = rotl(t, sr[i])
8079 t = (t + er) | 0
8080 ar = er
8081 er = dr
8082 dr = rotl(cr, 10)
8083 cr = br
8084 br = t
8085 }
8086
8087 // intermediate hash value
8088 t = (H[1] + cl + dr) | 0
8089 H[1] = (H[2] + dl + er) | 0
8090 H[2] = (H[3] + el + ar) | 0
8091 H[3] = (H[4] + al + br) | 0
8092 H[4] = (H[0] + bl + cr) | 0
8093 H[0] = t
ebd8d4e8
IC
8094}
8095
ab78acc6
IC
8096function f1 (x, y, z) {
8097 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
8098}
8099
ab78acc6
IC
8100function f2 (x, y, z) {
8101 return (((x) & (y)) | ((~x) & (z)))
ebd8d4e8
IC
8102}
8103
ab78acc6
IC
8104function f3 (x, y, z) {
8105 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
8106}
8107
ab78acc6
IC
8108function f4 (x, y, z) {
8109 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
8110}
8111
ab78acc6
IC
8112function f5 (x, y, z) {
8113 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
8114}
8115
ab78acc6
IC
8116function rotl (x, n) {
8117 return (x << n) | (x >>> (32 - n))
8118}
8119
8120function ripemd160 (message) {
8121 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 8122
ab78acc6
IC
8123 if (typeof message === 'string') {
8124 message = new Buffer(message, 'utf8')
8125 }
ebd8d4e8 8126
ab78acc6 8127 var m = bytesToWords(message)
ebd8d4e8 8128
ab78acc6
IC
8129 var nBitsLeft = message.length * 8
8130 var nBitsTotal = message.length * 8
ebd8d4e8
IC
8131
8132 // Add padding
ab78acc6 8133 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
ebd8d4e8 8134 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
ab78acc6
IC
8135 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
8136 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
8137 )
ebd8d4e8 8138
ab78acc6
IC
8139 for (var i = 0; i < m.length; i += 16) {
8140 processBlock(H, m, i)
ebd8d4e8
IC
8141 }
8142
ab78acc6
IC
8143 // swap endian
8144 for (i = 0; i < 5; i++) {
8145 // shortcut
8146 var H_i = H[i]
ebd8d4e8
IC
8147
8148 // Swap
ab78acc6
IC
8149 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
8150 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
8151 }
8152
ab78acc6
IC
8153 var digestbytes = wordsToBytes(H)
8154 return new Buffer(digestbytes)
ebd8d4e8
IC
8155}
8156
ab78acc6
IC
8157module.exports = ripemd160
8158
8159}).call(this,require("buffer").Buffer)
8160},{"buffer":7}],37:[function(require,module,exports){
8161(function (Buffer){
8162// prototype class for hash functions
8163function Hash (blockSize, finalSize) {
8164 this._block = new Buffer(blockSize)
8165 this._finalSize = finalSize
8166 this._blockSize = blockSize
8167 this._len = 0
8168 this._s = 0
8169}
ebd8d4e8 8170
ab78acc6
IC
8171Hash.prototype.update = function (data, enc) {
8172 if (typeof data === 'string') {
8173 enc = enc || 'utf8'
8174 data = new Buffer(data, enc)
8175 }
ebd8d4e8 8176
ab78acc6
IC
8177 var l = this._len += data.length
8178 var s = this._s || 0
8179 var f = 0
8180 var buffer = this._block
ebd8d4e8 8181
ab78acc6
IC
8182 while (s < l) {
8183 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
8184 var ch = (t - f)
ebd8d4e8 8185
ab78acc6
IC
8186 for (var i = 0; i < ch; i++) {
8187 buffer[(s % this._blockSize) + i] = data[i + f]
8188 }
8189
8190 s += ch
8191 f += ch
ebd8d4e8 8192
ab78acc6
IC
8193 if ((s % this._blockSize) === 0) {
8194 this._update(buffer)
8195 }
ebd8d4e8 8196 }
ab78acc6
IC
8197 this._s = s
8198
8199 return this
8200}
ebd8d4e8 8201
ab78acc6
IC
8202Hash.prototype.digest = function (enc) {
8203 // Suppose the length of the message M, in bits, is l
8204 var l = this._len * 8
8205
8206 // Append the bit 1 to the end of the message
8207 this._block[this._len % this._blockSize] = 0x80
8208
8209 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
8210 this._block.fill(0, this._len % this._blockSize + 1)
8211
8212 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
8213 this._update(this._block)
8214 this._block.fill(0)
ebd8d4e8
IC
8215 }
8216
ab78acc6
IC
8217 // to this append the block which is equal to the number l written in binary
8218 // TODO: handle case where l is > Math.pow(2, 29)
8219 this._block.writeInt32BE(l, this._blockSize - 4)
8220
8221 var hash = this._update(this._block) || this._hash()
ebd8d4e8 8222
ab78acc6
IC
8223 return enc ? hash.toString(enc) : hash
8224}
ebd8d4e8 8225
ab78acc6
IC
8226Hash.prototype._update = function () {
8227 throw new Error('_update must be implemented by subclass')
8228}
ebd8d4e8 8229
ab78acc6 8230module.exports = Hash
ebd8d4e8 8231
ab78acc6
IC
8232}).call(this,require("buffer").Buffer)
8233},{"buffer":7}],38:[function(require,module,exports){
8234var exports = module.exports = function SHA (algorithm) {
8235 algorithm = algorithm.toLowerCase()
ebd8d4e8 8236
ab78acc6
IC
8237 var Algorithm = exports[algorithm]
8238 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
ebd8d4e8 8239
ab78acc6
IC
8240 return new Algorithm()
8241}
8242
8243exports.sha = require('./sha')
8244exports.sha1 = require('./sha1')
8245exports.sha224 = require('./sha224')
8246exports.sha256 = require('./sha256')
8247exports.sha384 = require('./sha384')
8248exports.sha512 = require('./sha512')
8249
8250},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
8251(function (Buffer){
8252/*
8253 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
8254 * in FIPS PUB 180-1
8255 * This source code is derived from sha1.js of the same repository.
8256 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
8257 * operation was added.
8258 */
ebd8d4e8 8259
ab78acc6
IC
8260var inherits = require('inherits')
8261var Hash = require('./hash')
ebd8d4e8 8262
ab78acc6 8263var W = new Array(80)
ebd8d4e8 8264
ab78acc6
IC
8265function Sha () {
8266 this.init()
8267 this._w = W
ebd8d4e8 8268
ab78acc6
IC
8269 Hash.call(this, 64, 56)
8270}
ebd8d4e8 8271
ab78acc6 8272inherits(Sha, Hash)
ebd8d4e8 8273
ab78acc6
IC
8274Sha.prototype.init = function () {
8275 this._a = 0x67452301 | 0
8276 this._b = 0xefcdab89 | 0
8277 this._c = 0x98badcfe | 0
8278 this._d = 0x10325476 | 0
8279 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8280
ab78acc6
IC
8281 return this
8282}
8283
8284/*
8285 * Bitwise rotate a 32-bit number to the left.
8286 */
8287function rol (num, cnt) {
8288 return (num << cnt) | (num >>> (32 - cnt))
8289}
8290
8291Sha.prototype._update = function (M) {
8292 var W = this._w
8293
8294 var a = this._a
8295 var b = this._b
8296 var c = this._c
8297 var d = this._d
8298 var e = this._e
ebd8d4e8 8299
ab78acc6
IC
8300 var j = 0, k
8301
8302 /*
8303 * SHA-1 has a bitwise rotate left operation. But, SHA is not
8304 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8305 */
8306 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
8307 function loop (w, f) {
8308 W[j] = w
8309
8310 var t = rol(a, 5) + f + e + w + k
8311
8312 e = d
8313 d = c
8314 c = rol(b, 30)
8315 b = a
8316 a = t
8317 j++
ebd8d4e8
IC
8318 }
8319
ab78acc6
IC
8320 k = 1518500249
8321 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8322 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8323 k = 1859775393
8324 while (j < 40) loop(calcW(), b ^ c ^ d)
8325 k = -1894007588
8326 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8327 k = -899497514
8328 while (j < 80) loop(calcW(), b ^ c ^ d)
8329
8330 this._a = (a + this._a) | 0
8331 this._b = (b + this._b) | 0
8332 this._c = (c + this._c) | 0
8333 this._d = (d + this._d) | 0
8334 this._e = (e + this._e) | 0
ebd8d4e8
IC
8335}
8336
ab78acc6
IC
8337Sha.prototype._hash = function () {
8338 var H = new Buffer(20)
8339
8340 H.writeInt32BE(this._a | 0, 0)
8341 H.writeInt32BE(this._b | 0, 4)
8342 H.writeInt32BE(this._c | 0, 8)
8343 H.writeInt32BE(this._d | 0, 12)
8344 H.writeInt32BE(this._e | 0, 16)
8345
8346 return H
ebd8d4e8
IC
8347}
8348
ab78acc6 8349module.exports = Sha
ebd8d4e8 8350
ebd8d4e8 8351
ab78acc6
IC
8352}).call(this,require("buffer").Buffer)
8353},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
8354(function (Buffer){
ebd8d4e8
IC
8355/*
8356 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
8357 * in FIPS PUB 180-1
8358 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
8359 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8360 * Distributed under the BSD License
8361 * See http://pajhome.org.uk/crypt/md5 for details.
8362 */
ebd8d4e8 8363
ab78acc6
IC
8364var inherits = require('inherits')
8365var Hash = require('./hash')
ebd8d4e8 8366
ab78acc6 8367var W = new Array(80)
ebd8d4e8 8368
ab78acc6
IC
8369function Sha1 () {
8370 this.init()
8371 this._w = W
ebd8d4e8 8372
ab78acc6
IC
8373 Hash.call(this, 64, 56)
8374}
ebd8d4e8 8375
ab78acc6 8376inherits(Sha1, Hash)
ebd8d4e8 8377
ab78acc6
IC
8378Sha1.prototype.init = function () {
8379 this._a = 0x67452301 | 0
8380 this._b = 0xefcdab89 | 0
8381 this._c = 0x98badcfe | 0
8382 this._d = 0x10325476 | 0
8383 this._e = 0xc3d2e1f0 | 0
ebd8d4e8 8384
ab78acc6
IC
8385 return this
8386}
ebd8d4e8 8387
ab78acc6
IC
8388/*
8389 * Bitwise rotate a 32-bit number to the left.
8390 */
8391function rol (num, cnt) {
8392 return (num << cnt) | (num >>> (32 - cnt))
8393}
ebd8d4e8 8394
ab78acc6
IC
8395Sha1.prototype._update = function (M) {
8396 var W = this._w
ebd8d4e8 8397
ab78acc6
IC
8398 var a = this._a
8399 var b = this._b
8400 var c = this._c
8401 var d = this._d
8402 var e = this._e
ebd8d4e8 8403
ab78acc6 8404 var j = 0, k
ebd8d4e8 8405
ab78acc6
IC
8406 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
8407 function loop (w, f) {
8408 W[j] = w
ebd8d4e8 8409
ab78acc6 8410 var t = rol(a, 5) + f + e + w + k
ebd8d4e8 8411
ab78acc6
IC
8412 e = d
8413 d = c
8414 c = rol(b, 30)
8415 b = a
8416 a = t
8417 j++
ebd8d4e8
IC
8418 }
8419
ab78acc6
IC
8420 k = 1518500249
8421 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
8422 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
8423 k = 1859775393
8424 while (j < 40) loop(calcW(), b ^ c ^ d)
8425 k = -1894007588
8426 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
8427 k = -899497514
8428 while (j < 80) loop(calcW(), b ^ c ^ d)
ebd8d4e8 8429
ab78acc6
IC
8430 this._a = (a + this._a) | 0
8431 this._b = (b + this._b) | 0
8432 this._c = (c + this._c) | 0
8433 this._d = (d + this._d) | 0
8434 this._e = (e + this._e) | 0
8435}
ebd8d4e8 8436
ab78acc6
IC
8437Sha1.prototype._hash = function () {
8438 var H = new Buffer(20)
ebd8d4e8 8439
ab78acc6
IC
8440 H.writeInt32BE(this._a | 0, 0)
8441 H.writeInt32BE(this._b | 0, 4)
8442 H.writeInt32BE(this._c | 0, 8)
8443 H.writeInt32BE(this._d | 0, 12)
8444 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 8445
ab78acc6
IC
8446 return H
8447}
ebd8d4e8 8448
ab78acc6 8449module.exports = Sha1
ebd8d4e8 8450
ab78acc6
IC
8451}).call(this,require("buffer").Buffer)
8452},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
8453(function (Buffer){
8454/**
8455 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8456 * in FIPS 180-2
8457 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8458 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8459 *
8460 */
ebd8d4e8 8461
ab78acc6
IC
8462var inherits = require('inherits')
8463var Sha256 = require('./sha256')
8464var Hash = require('./hash')
ebd8d4e8 8465
ab78acc6 8466var W = new Array(64)
ebd8d4e8 8467
ab78acc6
IC
8468function Sha224 () {
8469 this.init()
ebd8d4e8 8470
ab78acc6 8471 this._w = W // new Array(64)
ebd8d4e8 8472
ab78acc6
IC
8473 Hash.call(this, 64, 56)
8474}
ebd8d4e8 8475
ab78acc6 8476inherits(Sha224, Sha256)
ebd8d4e8 8477
ab78acc6
IC
8478Sha224.prototype.init = function () {
8479 this._a = 0xc1059ed8 | 0
8480 this._b = 0x367cd507 | 0
8481 this._c = 0x3070dd17 | 0
8482 this._d = 0xf70e5939 | 0
8483 this._e = 0xffc00b31 | 0
8484 this._f = 0x68581511 | 0
8485 this._g = 0x64f98fa7 | 0
8486 this._h = 0xbefa4fa4 | 0
8487
8488 return this
8489}
8490
8491Sha224.prototype._hash = function () {
8492 var H = new Buffer(28)
8493
8494 H.writeInt32BE(this._a, 0)
8495 H.writeInt32BE(this._b, 4)
8496 H.writeInt32BE(this._c, 8)
8497 H.writeInt32BE(this._d, 12)
8498 H.writeInt32BE(this._e, 16)
8499 H.writeInt32BE(this._f, 20)
8500 H.writeInt32BE(this._g, 24)
8501
8502 return H
ebd8d4e8
IC
8503}
8504
ab78acc6 8505module.exports = Sha224
ebd8d4e8 8506
ab78acc6
IC
8507}).call(this,require("buffer").Buffer)
8508},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
8509(function (Buffer){
ebd8d4e8
IC
8510/**
8511 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
8512 * in FIPS 180-2
8513 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
8514 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
8515 *
8516 */
8517
ab78acc6
IC
8518var inherits = require('inherits')
8519var Hash = require('./hash')
8520
8521var K = [
8522 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
8523 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
8524 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
8525 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
8526 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
8527 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
8528 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
8529 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
8530 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
8531 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
8532 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
8533 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
8534 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
8535 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
8536 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
8537 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
8538]
8539
8540var W = new Array(64)
8541
8542function Sha256 () {
8543 this.init()
8544
8545 this._w = W // new Array(64)
8546
8547 Hash.call(this, 64, 56)
8548}
8549
8550inherits(Sha256, Hash)
8551
8552Sha256.prototype.init = function () {
8553 this._a = 0x6a09e667 | 0
8554 this._b = 0xbb67ae85 | 0
8555 this._c = 0x3c6ef372 | 0
8556 this._d = 0xa54ff53a | 0
8557 this._e = 0x510e527f | 0
8558 this._f = 0x9b05688c | 0
8559 this._g = 0x1f83d9ab | 0
8560 this._h = 0x5be0cd19 | 0
ebd8d4e8 8561
ab78acc6
IC
8562 return this
8563}
ebd8d4e8 8564
ab78acc6
IC
8565function S (X, n) {
8566 return (X >>> n) | (X << (32 - n))
8567}
ebd8d4e8 8568
ab78acc6
IC
8569function R (X, n) {
8570 return (X >>> n)
8571}
ebd8d4e8 8572
ab78acc6
IC
8573function Ch (x, y, z) {
8574 return ((x & y) ^ ((~x) & z))
8575}
ebd8d4e8 8576
ab78acc6
IC
8577function Maj (x, y, z) {
8578 return ((x & y) ^ (x & z) ^ (y & z))
8579}
ebd8d4e8 8580
ab78acc6
IC
8581function Sigma0256 (x) {
8582 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
8583}
ebd8d4e8 8584
ab78acc6
IC
8585function Sigma1256 (x) {
8586 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
8587}
ebd8d4e8 8588
ab78acc6
IC
8589function Gamma0256 (x) {
8590 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
8591}
ebd8d4e8 8592
ab78acc6
IC
8593function Gamma1256 (x) {
8594 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
8595}
ebd8d4e8 8596
ab78acc6
IC
8597Sha256.prototype._update = function (M) {
8598 var W = this._w
ebd8d4e8 8599
ab78acc6
IC
8600 var a = this._a | 0
8601 var b = this._b | 0
8602 var c = this._c | 0
8603 var d = this._d | 0
8604 var e = this._e | 0
8605 var f = this._f | 0
8606 var g = this._g | 0
8607 var h = this._h | 0
ebd8d4e8 8608
ab78acc6 8609 var j = 0
ebd8d4e8 8610
ab78acc6
IC
8611 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
8612 function loop (w) {
8613 W[j] = w
ebd8d4e8 8614
ab78acc6
IC
8615 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
8616 var T2 = Sigma0256(a) + Maj(a, b, c)
ebd8d4e8 8617
ab78acc6
IC
8618 h = g
8619 g = f
8620 f = e
8621 e = d + T1
8622 d = c
8623 c = b
8624 b = a
8625 a = T1 + T2
ebd8d4e8 8626
ab78acc6 8627 j++
ebd8d4e8
IC
8628 }
8629
ab78acc6
IC
8630 while (j < 16) loop(M.readInt32BE(j * 4))
8631 while (j < 64) loop(calcW())
ebd8d4e8 8632
ab78acc6
IC
8633 this._a = (a + this._a) | 0
8634 this._b = (b + this._b) | 0
8635 this._c = (c + this._c) | 0
8636 this._d = (d + this._d) | 0
8637 this._e = (e + this._e) | 0
8638 this._f = (f + this._f) | 0
8639 this._g = (g + this._g) | 0
8640 this._h = (h + this._h) | 0
8641}
ebd8d4e8 8642
ab78acc6
IC
8643Sha256.prototype._hash = function () {
8644 var H = new Buffer(32)
ebd8d4e8 8645
ab78acc6
IC
8646 H.writeInt32BE(this._a, 0)
8647 H.writeInt32BE(this._b, 4)
8648 H.writeInt32BE(this._c, 8)
8649 H.writeInt32BE(this._d, 12)
8650 H.writeInt32BE(this._e, 16)
8651 H.writeInt32BE(this._f, 20)
8652 H.writeInt32BE(this._g, 24)
8653 H.writeInt32BE(this._h, 28)
ebd8d4e8 8654
ab78acc6
IC
8655 return H
8656}
ebd8d4e8 8657
ab78acc6 8658module.exports = Sha256
ebd8d4e8 8659
ab78acc6
IC
8660}).call(this,require("buffer").Buffer)
8661},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
8662(function (Buffer){
8663var inherits = require('inherits')
8664var SHA512 = require('./sha512')
8665var Hash = require('./hash')
ebd8d4e8 8666
ab78acc6 8667var W = new Array(160)
ebd8d4e8 8668
ab78acc6
IC
8669function Sha384 () {
8670 this.init()
8671 this._w = W
ebd8d4e8 8672
ab78acc6
IC
8673 Hash.call(this, 128, 112)
8674}
ebd8d4e8 8675
ab78acc6 8676inherits(Sha384, SHA512)
ebd8d4e8 8677
ab78acc6
IC
8678Sha384.prototype.init = function () {
8679 this._a = 0xcbbb9d5d | 0
8680 this._b = 0x629a292a | 0
8681 this._c = 0x9159015a | 0
8682 this._d = 0x152fecd8 | 0
8683 this._e = 0x67332667 | 0
8684 this._f = 0x8eb44a87 | 0
8685 this._g = 0xdb0c2e0d | 0
8686 this._h = 0x47b5481d | 0
ebd8d4e8 8687
ab78acc6
IC
8688 this._al = 0xc1059ed8 | 0
8689 this._bl = 0x367cd507 | 0
8690 this._cl = 0x3070dd17 | 0
8691 this._dl = 0xf70e5939 | 0
8692 this._el = 0xffc00b31 | 0
8693 this._fl = 0x68581511 | 0
8694 this._gl = 0x64f98fa7 | 0
8695 this._hl = 0xbefa4fa4 | 0
ebd8d4e8 8696
ab78acc6 8697 return this
ebd8d4e8
IC
8698}
8699
ab78acc6
IC
8700Sha384.prototype._hash = function () {
8701 var H = new Buffer(48)
ebd8d4e8 8702
ab78acc6
IC
8703 function writeInt64BE (h, l, offset) {
8704 H.writeInt32BE(h, offset)
8705 H.writeInt32BE(l, offset + 4)
ebd8d4e8 8706 }
ebd8d4e8 8707
ab78acc6
IC
8708 writeInt64BE(this._a, this._al, 0)
8709 writeInt64BE(this._b, this._bl, 8)
8710 writeInt64BE(this._c, this._cl, 16)
8711 writeInt64BE(this._d, this._dl, 24)
8712 writeInt64BE(this._e, this._el, 32)
8713 writeInt64BE(this._f, this._fl, 40)
8714
8715 return H
ebd8d4e8
IC
8716}
8717
ab78acc6 8718module.exports = Sha384
ebd8d4e8 8719
ab78acc6
IC
8720}).call(this,require("buffer").Buffer)
8721},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
ebd8d4e8 8722(function (Buffer){
ab78acc6
IC
8723var inherits = require('inherits')
8724var Hash = require('./hash')
8725
8726var K = [
8727 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
8728 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
8729 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
8730 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
8731 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
8732 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
8733 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
8734 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
8735 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
8736 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
8737 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
8738 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
8739 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
8740 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
8741 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
8742 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
8743 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
8744 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
8745 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
8746 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
8747 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
8748 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
8749 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
8750 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
8751 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
8752 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
8753 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
8754 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
8755 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
8756 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
8757 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
8758 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
8759 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
8760 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
8761 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
8762 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
8763 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
8764 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
8765 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
8766 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
8767]
8768
8769var W = new Array(160)
8770
8771function Sha512 () {
8772 this.init()
8773 this._w = W
8774
8775 Hash.call(this, 128, 112)
8776}
8777
8778inherits(Sha512, Hash)
8779
8780Sha512.prototype.init = function () {
8781 this._a = 0x6a09e667 | 0
8782 this._b = 0xbb67ae85 | 0
8783 this._c = 0x3c6ef372 | 0
8784 this._d = 0xa54ff53a | 0
8785 this._e = 0x510e527f | 0
8786 this._f = 0x9b05688c | 0
8787 this._g = 0x1f83d9ab | 0
8788 this._h = 0x5be0cd19 | 0
8789
8790 this._al = 0xf3bcc908 | 0
8791 this._bl = 0x84caa73b | 0
8792 this._cl = 0xfe94f82b | 0
8793 this._dl = 0x5f1d36f1 | 0
8794 this._el = 0xade682d1 | 0
8795 this._fl = 0x2b3e6c1f | 0
8796 this._gl = 0xfb41bd6b | 0
8797 this._hl = 0x137e2179 | 0
ebd8d4e8 8798
ab78acc6 8799 return this
ebd8d4e8
IC
8800}
8801
ab78acc6
IC
8802function S (X, Xl, n) {
8803 return (X >>> n) | (Xl << (32 - n))
8804}
8805
8806function Ch (x, y, z) {
8807 return ((x & y) ^ ((~x) & z))
8808}
8809
8810function Maj (x, y, z) {
8811 return ((x & y) ^ (x & z) ^ (y & z))
8812}
8813
8814Sha512.prototype._update = function (M) {
8815 var W = this._w
8816
8817 var a = this._a | 0
8818 var b = this._b | 0
8819 var c = this._c | 0
8820 var d = this._d | 0
8821 var e = this._e | 0
8822 var f = this._f | 0
8823 var g = this._g | 0
8824 var h = this._h | 0
8825
8826 var al = this._al | 0
8827 var bl = this._bl | 0
8828 var cl = this._cl | 0
8829 var dl = this._dl | 0
8830 var el = this._el | 0
8831 var fl = this._fl | 0
8832 var gl = this._gl | 0
8833 var hl = this._hl | 0
8834
8835 var i = 0, j = 0
8836 var Wi, Wil
8837 function calcW () {
8838 var x = W[j - 15 * 2]
8839 var xl = W[j - 15 * 2 + 1]
8840 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
8841 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
8842
8843 x = W[j - 2 * 2]
8844 xl = W[j - 2 * 2 + 1]
8845 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
8846 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
8847
8848 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
8849 var Wi7 = W[j - 7 * 2]
8850 var Wi7l = W[j - 7 * 2 + 1]
8851
8852 var Wi16 = W[j - 16 * 2]
8853 var Wi16l = W[j - 16 * 2 + 1]
ebd8d4e8 8854
ab78acc6
IC
8855 Wil = gamma0l + Wi7l
8856 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
8857 Wil = Wil + gamma1l
8858 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
8859 Wil = Wil + Wi16l
8860 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
8861 }
8862
8863 function loop () {
8864 W[j] = Wi
8865 W[j + 1] = Wil
ebd8d4e8 8866
ab78acc6
IC
8867 var maj = Maj(a, b, c)
8868 var majl = Maj(al, bl, cl)
ebd8d4e8 8869
ab78acc6
IC
8870 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
8871 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
8872 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
8873 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
ebd8d4e8 8874
ab78acc6
IC
8875 // t1 = h + sigma1 + ch + K[i] + W[i]
8876 var Ki = K[j]
8877 var Kil = K[j + 1]
ebd8d4e8 8878
ab78acc6
IC
8879 var ch = Ch(e, f, g)
8880 var chl = Ch(el, fl, gl)
ebd8d4e8 8881
ab78acc6
IC
8882 var t1l = hl + sigma1l
8883 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
8884 t1l = t1l + chl
8885 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
8886 t1l = t1l + Kil
8887 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
8888 t1l = t1l + Wil
8889 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
ebd8d4e8 8890
ab78acc6
IC
8891 // t2 = sigma0 + maj
8892 var t2l = sigma0l + majl
8893 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
ebd8d4e8 8894
ab78acc6
IC
8895 h = g
8896 hl = gl
8897 g = f
8898 gl = fl
8899 f = e
8900 fl = el
8901 el = (dl + t1l) | 0
8902 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8903 d = c
8904 dl = cl
8905 c = b
8906 cl = bl
8907 b = a
8908 bl = al
8909 al = (t1l + t2l) | 0
8910 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
8911
8912 i++
8913 j += 2
8914 }
8915
8916 while (i < 16) {
8917 Wi = M.readInt32BE(j * 4)
8918 Wil = M.readInt32BE(j * 4 + 4)
8919
8920 loop()
8921 }
8922
8923 while (i < 80) {
8924 calcW()
8925 loop()
8926 }
8927
8928 this._al = (this._al + al) | 0
8929 this._bl = (this._bl + bl) | 0
8930 this._cl = (this._cl + cl) | 0
8931 this._dl = (this._dl + dl) | 0
8932 this._el = (this._el + el) | 0
8933 this._fl = (this._fl + fl) | 0
8934 this._gl = (this._gl + gl) | 0
8935 this._hl = (this._hl + hl) | 0
8936
8937 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
8938 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
8939 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
8940 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
8941 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
8942 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
8943 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
8944 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
8945}
8946
8947Sha512.prototype._hash = function () {
8948 var H = new Buffer(64)
8949
8950 function writeInt64BE (h, l, offset) {
8951 H.writeInt32BE(h, offset)
8952 H.writeInt32BE(l, offset + 4)
8953 }
8954
8955 writeInt64BE(this._a, this._al, 0)
8956 writeInt64BE(this._b, this._bl, 8)
8957 writeInt64BE(this._c, this._cl, 16)
8958 writeInt64BE(this._d, this._dl, 24)
8959 writeInt64BE(this._e, this._el, 32)
8960 writeInt64BE(this._f, this._fl, 40)
8961 writeInt64BE(this._g, this._gl, 48)
8962 writeInt64BE(this._h, this._hl, 56)
8963
8964 return H
8965}
8966
8967module.exports = Sha512
8968
8969}).call(this,require("buffer").Buffer)
8970},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
8971(function (Buffer){
8972'use strict';
8973var createHash = require('create-hash/browser');
8974var inherits = require('inherits')
ebd8d4e8 8975
ab78acc6 8976var Transform = require('stream').Transform
ebd8d4e8 8977
ab78acc6
IC
8978var ZEROS = new Buffer(128)
8979ZEROS.fill(0)
ebd8d4e8 8980
ab78acc6
IC
8981function Hmac(alg, key) {
8982 Transform.call(this)
ebd8d4e8 8983
ab78acc6
IC
8984 if (typeof key === 'string') {
8985 key = new Buffer(key)
8986 }
ebd8d4e8 8987
ab78acc6 8988 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
ebd8d4e8 8989
ab78acc6
IC
8990 this._alg = alg
8991 this._key = key
ebd8d4e8 8992
ab78acc6
IC
8993 if (key.length > blocksize) {
8994 key = createHash(alg).update(key).digest()
ebd8d4e8 8995
ab78acc6
IC
8996 } else if (key.length < blocksize) {
8997 key = Buffer.concat([key, ZEROS], blocksize)
8998 }
ebd8d4e8 8999
ab78acc6
IC
9000 var ipad = this._ipad = new Buffer(blocksize)
9001 var opad = this._opad = new Buffer(blocksize)
ebd8d4e8 9002
ab78acc6
IC
9003 for (var i = 0; i < blocksize; i++) {
9004 ipad[i] = key[i] ^ 0x36
9005 opad[i] = key[i] ^ 0x5C
9006 }
ebd8d4e8 9007
ab78acc6
IC
9008 this._hash = createHash(alg).update(ipad)
9009}
ebd8d4e8 9010
ab78acc6 9011inherits(Hmac, Transform)
ebd8d4e8 9012
ab78acc6
IC
9013Hmac.prototype.update = function (data, enc) {
9014 this._hash.update(data, enc)
ebd8d4e8 9015
ab78acc6
IC
9016 return this
9017}
ebd8d4e8 9018
ab78acc6
IC
9019Hmac.prototype._transform = function (data, _, next) {
9020 this._hash.update(data)
ebd8d4e8 9021
ab78acc6
IC
9022 next()
9023}
ebd8d4e8 9024
ab78acc6
IC
9025Hmac.prototype._flush = function (next) {
9026 this.push(this.digest())
ebd8d4e8 9027
ab78acc6
IC
9028 next()
9029}
ebd8d4e8 9030
ab78acc6
IC
9031Hmac.prototype.digest = function (enc) {
9032 var h = this._hash.digest()
ebd8d4e8 9033
ab78acc6
IC
9034 return createHash(this._alg).update(this._opad).update(h).digest(enc)
9035}
ebd8d4e8 9036
ab78acc6
IC
9037module.exports = function createHmac(alg, key) {
9038 return new Hmac(alg, key)
9039}
ebd8d4e8 9040
ab78acc6
IC
9041}).call(this,require("buffer").Buffer)
9042},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
9043arguments[4][12][0].apply(exports,arguments)
9044},{"dup":12}],47:[function(require,module,exports){
9045var assert = require('assert')
9046var BigInteger = require('bigi')
ebd8d4e8 9047
ab78acc6 9048var Point = require('./point')
ebd8d4e8
IC
9049
9050function Curve(p, a, b, Gx, Gy, n, h) {
9051 this.p = p
9052 this.a = a
9053 this.b = b
9054 this.G = Point.fromAffine(this, Gx, Gy)
9055 this.n = n
9056 this.h = h
9057
9058 this.infinity = new Point(this, null, null, BigInteger.ZERO)
9059
9060 // result caching
9061 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
9062}
9063
9064Curve.prototype.pointFromX = function(isOdd, x) {
9065 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
ab78acc6 9066 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
ebd8d4e8
IC
9067
9068 var y = beta
9069 if (beta.isEven() ^ !isOdd) {
9070 y = this.p.subtract(y) // -y % p
9071 }
9072
9073 return Point.fromAffine(this, x, y)
9074}
9075
9076Curve.prototype.isInfinity = function(Q) {
9077 if (Q === this.infinity) return true
9078
9079 return Q.z.signum() === 0 && Q.y.signum() !== 0
9080}
9081
9082Curve.prototype.isOnCurve = function(Q) {
9083 if (this.isInfinity(Q)) return true
9084
9085 var x = Q.affineX
9086 var y = Q.affineY
9087 var a = this.a
9088 var b = this.b
9089 var p = this.p
9090
9091 // Check that xQ and yQ are integers in the interval [0, p - 1]
9092 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
9093 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
9094
9095 // and check that y^2 = x^3 + ax + b (mod p)
9096 var lhs = y.square().mod(p)
9097 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
9098 return lhs.equals(rhs)
9099}
9100
9101/**
9102 * Validate an elliptic curve point.
9103 *
9104 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
9105 */
9106Curve.prototype.validate = function(Q) {
9107 // Check Q != O
9108 assert(!this.isInfinity(Q), 'Point is at infinity')
9109 assert(this.isOnCurve(Q), 'Point is not on the curve')
9110
9111 // Check nQ = O (where Q is a scalar multiple of G)
9112 var nQ = Q.multiply(this.n)
9113 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
9114
9115 return true
9116}
9117
9118module.exports = Curve
9119
ab78acc6 9120},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
ebd8d4e8
IC
9121module.exports={
9122 "secp128r1": {
9123 "p": "fffffffdffffffffffffffffffffffff",
9124 "a": "fffffffdfffffffffffffffffffffffc",
9125 "b": "e87579c11079f43dd824993c2cee5ed3",
9126 "n": "fffffffe0000000075a30d1b9038a115",
9127 "h": "01",
9128 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
9129 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
9130 },
9131 "secp160k1": {
9132 "p": "fffffffffffffffffffffffffffffffeffffac73",
9133 "a": "00",
9134 "b": "07",
9135 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
9136 "h": "01",
9137 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
9138 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
9139 },
9140 "secp160r1": {
9141 "p": "ffffffffffffffffffffffffffffffff7fffffff",
9142 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
9143 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
9144 "n": "0100000000000000000001f4c8f927aed3ca752257",
9145 "h": "01",
9146 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
9147 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
9148 },
9149 "secp192k1": {
9150 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
9151 "a": "00",
9152 "b": "03",
9153 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
9154 "h": "01",
9155 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
9156 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
9157 },
9158 "secp192r1": {
9159 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
9160 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
9161 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
9162 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
9163 "h": "01",
9164 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
9165 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
9166 },
ebd8d4e8
IC
9167 "secp256k1": {
9168 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
9169 "a": "00",
9170 "b": "07",
9171 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
9172 "h": "01",
9173 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
9174 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
9175 },
9176 "secp256r1": {
9177 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
9178 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
9179 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
9180 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
9181 "h": "01",
9182 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
9183 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
9184 }
9185}
9186
ab78acc6
IC
9187},{}],49:[function(require,module,exports){
9188var Point = require('./point')
9189var Curve = require('./curve')
ebd8d4e8 9190
ab78acc6 9191var getCurveByName = require('./names')
ebd8d4e8
IC
9192
9193module.exports = {
9194 Curve: Curve,
9195 Point: Point,
9196 getCurveByName: getCurveByName
9197}
9198
ab78acc6
IC
9199},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
9200var BigInteger = require('bigi')
ebd8d4e8 9201
ab78acc6
IC
9202var curves = require('./curves')
9203var Curve = require('./curve')
ebd8d4e8
IC
9204
9205function getCurveByName(name) {
9206 var curve = curves[name]
9207 if (!curve) return null
9208
9209 var p = new BigInteger(curve.p, 16)
9210 var a = new BigInteger(curve.a, 16)
9211 var b = new BigInteger(curve.b, 16)
9212 var n = new BigInteger(curve.n, 16)
9213 var h = new BigInteger(curve.h, 16)
9214 var Gx = new BigInteger(curve.Gx, 16)
9215 var Gy = new BigInteger(curve.Gy, 16)
9216
9217 return new Curve(p, a, b, Gx, Gy, n, h)
9218}
9219
9220module.exports = getCurveByName
9221
ab78acc6 9222},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
ebd8d4e8 9223(function (Buffer){
ab78acc6
IC
9224var assert = require('assert')
9225var BigInteger = require('bigi')
ebd8d4e8
IC
9226
9227var THREE = BigInteger.valueOf(3)
9228
9229function Point(curve, x, y, z) {
9230 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
9231
9232 this.curve = curve
9233 this.x = x
9234 this.y = y
9235 this.z = z
9236 this._zInv = null
9237
9238 this.compressed = true
9239}
9240
9241Object.defineProperty(Point.prototype, 'zInv', {
9242 get: function() {
9243 if (this._zInv === null) {
9244 this._zInv = this.z.modInverse(this.curve.p)
9245 }
9246
9247 return this._zInv
9248 }
9249})
9250
9251Object.defineProperty(Point.prototype, 'affineX', {
9252 get: function() {
9253 return this.x.multiply(this.zInv).mod(this.curve.p)
9254 }
9255})
9256
9257Object.defineProperty(Point.prototype, 'affineY', {
9258 get: function() {
9259 return this.y.multiply(this.zInv).mod(this.curve.p)
9260 }
9261})
9262
9263Point.fromAffine = function(curve, x, y) {
9264 return new Point(curve, x, y, BigInteger.ONE)
9265}
9266
9267Point.prototype.equals = function(other) {
9268 if (other === this) return true
9269 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
9270 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
9271
9272 // u = Y2 * Z1 - Y1 * Z2
9273 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
9274
9275 if (u.signum() !== 0) return false
9276
9277 // v = X2 * Z1 - X1 * Z2
9278 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
9279
9280 return v.signum() === 0
9281}
9282
9283Point.prototype.negate = function() {
9284 var y = this.curve.p.subtract(this.y)
9285
9286 return new Point(this.curve, this.x, y, this.z)
9287}
9288
9289Point.prototype.add = function(b) {
9290 if (this.curve.isInfinity(this)) return b
9291 if (this.curve.isInfinity(b)) return this
9292
9293 var x1 = this.x
9294 var y1 = this.y
9295 var x2 = b.x
9296 var y2 = b.y
9297
9298 // u = Y2 * Z1 - Y1 * Z2
9299 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
9300 // v = X2 * Z1 - X1 * Z2
9301 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
9302
9303 if (v.signum() === 0) {
9304 if (u.signum() === 0) {
9305 return this.twice() // this == b, so double
9306 }
9307
9308 return this.curve.infinity // this = -b, so infinity
9309 }
9310
9311 var v2 = v.square()
9312 var v3 = v2.multiply(v)
9313 var x1v2 = x1.multiply(v2)
9314 var zu2 = u.square().multiply(this.z)
9315
9316 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
9317 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
9318 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
9319 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)
9320 // z3 = v^3 * z1 * z2
9321 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
9322
9323 return new Point(this.curve, x3, y3, z3)
9324}
9325
9326Point.prototype.twice = function() {
9327 if (this.curve.isInfinity(this)) return this
9328 if (this.y.signum() === 0) return this.curve.infinity
9329
9330 var x1 = this.x
9331 var y1 = this.y
9332
9333 var y1z1 = y1.multiply(this.z)
9334 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
9335 var a = this.curve.a
9336
9337 // w = 3 * x1^2 + a * z1^2
9338 var w = x1.square().multiply(THREE)
9339
9340 if (a.signum() !== 0) {
9341 w = w.add(this.z.square().multiply(a))
9342 }
9343
9344 w = w.mod(this.curve.p)
9345 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
9346 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
9347 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
9348 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
9349 // z3 = 8 * (y1 * z1)^3
9350 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
9351
9352 return new Point(this.curve, x3, y3, z3)
9353}
9354
9355// Simple NAF (Non-Adjacent Form) multiplication algorithm
9356// TODO: modularize the multiplication algorithm
9357Point.prototype.multiply = function(k) {
9358 if (this.curve.isInfinity(this)) return this
9359 if (k.signum() === 0) return this.curve.infinity
9360
9361 var e = k
9362 var h = e.multiply(THREE)
9363
9364 var neg = this.negate()
9365 var R = this
9366
9367 for (var i = h.bitLength() - 2; i > 0; --i) {
9368 R = R.twice()
9369
9370 var hBit = h.testBit(i)
9371 var eBit = e.testBit(i)
9372
9373 if (hBit != eBit) {
9374 R = R.add(hBit ? this : neg)
9375 }
9376 }
9377
9378 return R
9379}
9380
9381// Compute this*j + x*k (simultaneous multiplication)
9382Point.prototype.multiplyTwo = function(j, x, k) {
9383 var i
9384
9385 if (j.bitLength() > k.bitLength())
9386 i = j.bitLength() - 1
9387 else
9388 i = k.bitLength() - 1
9389
9390 var R = this.curve.infinity
9391 var both = this.add(x)
9392
9393 while (i >= 0) {
9394 R = R.twice()
9395
9396 var jBit = j.testBit(i)
9397 var kBit = k.testBit(i)
9398
9399 if (jBit) {
9400 if (kBit) {
9401 R = R.add(both)
9402
9403 } else {
9404 R = R.add(this)
9405 }
9406
9407 } else {
9408 if (kBit) {
9409 R = R.add(x)
9410 }
9411 }
9412 --i
9413 }
9414
9415 return R
9416}
9417
9418Point.prototype.getEncoded = function(compressed) {
9419 if (compressed == undefined) compressed = this.compressed
9420 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
9421
9422 var x = this.affineX
9423 var y = this.affineY
9424
9425 var buffer
9426
9427 // Determine size of q in bytes
9428 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
9429
9430 // 0x02/0x03 | X
9431 if (compressed) {
9432 buffer = new Buffer(1 + byteLength)
9433 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
9434
9435 // 0x04 | X | Y
9436 } else {
9437 buffer = new Buffer(1 + byteLength + byteLength)
9438 buffer.writeUInt8(0x04, 0)
9439
9440 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
9441 }
9442
9443 x.toBuffer(byteLength).copy(buffer, 1)
9444
9445 return buffer
9446}
9447
9448Point.decodeFrom = function(curve, buffer) {
9449 var type = buffer.readUInt8(0)
9450 var compressed = (type !== 4)
9451
ebd8d4e8 9452 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
ab78acc6 9453 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
ebd8d4e8
IC
9454
9455 var Q
9456 if (compressed) {
9457 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
9458 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
9459
9460 var isOdd = (type === 0x03)
9461 Q = curve.pointFromX(isOdd, x)
9462
9463 } else {
9464 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
9465
9466 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
9467 Q = Point.fromAffine(curve, x, y)
9468 }
9469
9470 Q.compressed = compressed
9471 return Q
9472}
9473
9474Point.prototype.toString = function () {
9475 if (this.curve.isInfinity(this)) return '(INFINITY)'
9476
9477 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
9478}
9479
9480module.exports = Point
9481
ab78acc6
IC
9482}).call(this,require("buffer").Buffer)
9483},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
9484(function (process,global,Buffer){
9485'use strict';
ebd8d4e8 9486
ab78acc6
IC
9487var crypto = global.crypto || global.msCrypto
9488if(crypto && crypto.getRandomValues) {
9489 module.exports = randomBytes;
9490} else {
9491 module.exports = oldBrowser;
9492}
9493function randomBytes(size, cb) {
9494 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
9495 /* This will not work in older browsers.
9496 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
9497 */
9498
9499 crypto.getRandomValues(bytes);
9500 if (typeof cb === 'function') {
9501 return process.nextTick(function () {
9502 cb(null, bytes);
9503 });
ebd8d4e8 9504 }
ab78acc6
IC
9505 return bytes;
9506}
9507function oldBrowser() {
9508 throw new Error(
9509 'secure random number generation not supported by this browser\n'+
9510 'use chrome, FireFox or Internet Explorer 11'
9511 )
ebd8d4e8
IC
9512}
9513
ab78acc6
IC
9514}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
9515},{"_process":14,"buffer":7}],53:[function(require,module,exports){
9516(function (Buffer){
9517'use strict';
ebd8d4e8 9518
ab78acc6
IC
9519function getFunctionName(fn) {
9520 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
9521}
9522
9523function getTypeTypeName(type) {
9524 if (nativeTypes.Function(type)) {
9525 type = type.toJSON ? type.toJSON() : getFunctionName(type);
ebd8d4e8 9526 }
ab78acc6
IC
9527 if (nativeTypes.Object(type)) return JSON.stringify(type);
9528
9529 return type;
ebd8d4e8
IC
9530}
9531
ab78acc6
IC
9532function getValueTypeName(value) {
9533 if (nativeTypes.Null(value)) return '';
ebd8d4e8 9534
ab78acc6
IC
9535 return getFunctionName(value.constructor);
9536}
9537
9538function tfErrorString(type, value) {
9539 var typeTypeName = getTypeTypeName(type);
9540 var valueTypeName = getValueTypeName(value);
9541
9542 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
9543}
9544
9545function tfPropertyErrorString(type, name, value) {
9546 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
9547}
9548
9549var nativeTypes = {
9550 Array: (function (_Array) {
9551 function Array(_x) {
9552 return _Array.apply(this, arguments);
9553 }
9554
9555 Array.toString = function () {
9556 return _Array.toString();
9557 };
9558
9559 return Array;
9560 })(function (value) {
9561 return value !== null && value !== undefined && value.constructor === Array;
9562 }),
9563 Boolean: function Boolean(value) {
9564 return typeof value === 'boolean';
9565 },
9566 Buffer: (function (_Buffer) {
9567 function Buffer(_x2) {
9568 return _Buffer.apply(this, arguments);
9569 }
9570
9571 Buffer.toString = function () {
9572 return _Buffer.toString();
9573 };
9574
9575 return Buffer;
9576 })(function (value) {
9577 return Buffer.isBuffer(value);
9578 }),
9579 Function: function Function(value) {
9580 return typeof value === 'function';
9581 },
9582 Null: function Null(value) {
9583 return value === undefined || value === null;
9584 },
9585 Number: function Number(value) {
9586 return typeof value === 'number';
9587 },
9588 Object: function Object(value) {
9589 return typeof value === 'object';
9590 },
9591 String: function String(value) {
9592 return typeof value === 'string';
9593 },
9594 '': function _() {
9595 return true;
ebd8d4e8 9596 }
ab78acc6
IC
9597};
9598
9599function tJSON(type) {
9600 return type && type.toJSON ? type.toJSON() : type;
ebd8d4e8
IC
9601}
9602
ab78acc6
IC
9603function sJSON(type) {
9604 var json = tJSON(type);
9605 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
ebd8d4e8
IC
9606}
9607
ab78acc6
IC
9608var otherTypes = {
9609 arrayOf: function arrayOf(type) {
9610 function arrayOf(value, strict) {
9611 try {
9612 return nativeTypes.Array(value) && value.every(function (x) {
9613 return typeforce(type, x, strict);
9614 });
9615 } catch (e) {
9616 return false;
9617 }
9618 }
9619 arrayOf.toJSON = function () {
9620 return [tJSON(type)];
9621 };
9622
9623 return arrayOf;
9624 },
9625
9626 maybe: function maybe(type) {
9627 function maybe(value, strict) {
9628 return nativeTypes.Null(value) || typeforce(type, value, strict);
9629 }
9630 maybe.toJSON = function () {
9631 return '?' + sJSON(type);
9632 };
9633
9634 return maybe;
9635 },
9636
9637 object: function object(type) {
9638 function object(value, strict) {
9639 typeforce(nativeTypes.Object, value, strict);
9640
9641 var propertyName, propertyType, propertyValue;
9642
9643 try {
9644 for (propertyName in type) {
9645 propertyType = type[propertyName];
9646 propertyValue = value[propertyName];
9647
9648 typeforce(propertyType, propertyValue, strict);
9649 }
9650 } catch (e) {
9651 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
9652 }
9653
9654 if (strict) {
9655 for (propertyName in value) {
9656 if (type[propertyName]) continue;
9657
9658 throw new TypeError('Unexpected property "' + propertyName + '"');
9659 }
9660 }
9661
9662 return true;
9663 }
9664 object.toJSON = function () {
9665 return type;
9666 };
9667
9668 return object;
9669 },
9670
9671 oneOf: function oneOf() {
9672 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
9673 types[_key] = arguments[_key];
9674 }
9675
9676 function oneOf(value, strict) {
9677 return types.some(function (type) {
9678 try {
9679 return typeforce(type, value, strict);
9680 } catch (e) {
9681 return false;
9682 }
9683 });
9684 }
9685 oneOf.toJSON = function () {
9686 return types.map(sJSON).join('|');
9687 };
9688
9689 return oneOf;
9690 },
9691
9692 quacksLike: function quacksLike(type) {
9693 function quacksLike(value, strict) {
9694 return type === getValueTypeName(value);
9695 }
9696 quacksLike.toJSON = function () {
9697 return type;
9698 };
9699
9700 return quacksLike;
9701 },
9702
9703 tuple: function tuple() {
9704 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
9705 types[_key2] = arguments[_key2];
9706 }
9707
9708 function tuple(value, strict) {
9709 return types.every(function (type, i) {
9710 return typeforce(type, value[i], strict);
9711 });
9712 }
9713 tuple.toJSON = function () {
9714 return '(' + types.map(sJSON).join(', ') + ')';
9715 };
9716
9717 return tuple;
9718 },
9719
9720 value: function value(expected) {
9721 function value(actual) {
9722 return actual === expected;
9723 }
9724 value.toJSON = function () {
9725 return expected;
9726 };
9727
9728 return value;
9729 }
9730};
9731
9732function compile(type) {
9733 if (nativeTypes.String(type)) {
9734 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
9735
9736 return nativeTypes[type] || otherTypes.quacksLike(type);
9737 } else if (type && nativeTypes.Object(type)) {
9738 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
9739
9740 var compiled = {};
9741
9742 for (var propertyName in type) {
9743 compiled[propertyName] = compile(type[propertyName]);
9744 }
9745
9746 return otherTypes.object(compiled);
9747 } else if (nativeTypes.Function(type)) {
9748 return type;
9749 }
9750
9751 return otherTypes.value(type);
ebd8d4e8
IC
9752}
9753
ab78acc6
IC
9754function typeforce(_x3, _x4, _x5) {
9755 var _again = true;
9756
9757 _function: while (_again) {
9758 var type = _x3,
9759 value = _x4,
9760 strict = _x5;
9761 _again = false;
9762
9763 if (nativeTypes.Function(type)) {
9764 if (type(value, strict)) return true;
9765
9766 throw new TypeError(tfErrorString(type, value));
9767 }
9768
9769 // JIT
9770 _x3 = compile(type);
9771 _x4 = value;
9772 _x5 = strict;
9773 _again = true;
9774 continue _function;
9775 }
ebd8d4e8
IC
9776}
9777
ab78acc6
IC
9778// assign all types to typeforce function
9779var typeName;
9780Object.keys(nativeTypes).forEach(function (typeName) {
9781 var nativeType = nativeTypes[typeName];
9782 nativeType.toJSON = function () {
9783 return typeName;
9784 };
9785
9786 typeforce[typeName] = nativeType;
9787});
ebd8d4e8 9788
ab78acc6
IC
9789for (typeName in otherTypes) {
9790 typeforce[typeName] = otherTypes[typeName];
9791}
ebd8d4e8 9792
ab78acc6
IC
9793module.exports = typeforce;
9794module.exports.compile = compile;
9795}).call(this,require("buffer").Buffer)
9796},{"buffer":7}],54:[function(require,module,exports){
ebd8d4e8 9797(function (Buffer){
ab78acc6
IC
9798var assert = require('assert')
9799var base58check = require('bs58check')
9800var typeForce = require('typeforce')
9801var networks = require('./networks')
9802var scripts = require('./scripts')
ebd8d4e8 9803
ab78acc6 9804function findScriptTypeByVersion (version) {
ebd8d4e8
IC
9805 for (var networkName in networks) {
9806 var network = networks[networkName]
9807
9808 if (version === network.pubKeyHash) return 'pubkeyhash'
9809 if (version === network.scriptHash) return 'scripthash'
9810 }
9811}
9812
ab78acc6
IC
9813function Address (hash, version) {
9814 typeForce('Buffer', hash)
9815
ebd8d4e8
IC
9816 assert.strictEqual(hash.length, 20, 'Invalid hash length')
9817 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
9818
9819 this.hash = hash
9820 this.version = version
9821}
9822
ab78acc6 9823Address.fromBase58Check = function (string) {
ebd8d4e8
IC
9824 var payload = base58check.decode(string)
9825 var version = payload.readUInt8(0)
9826 var hash = payload.slice(1)
9827
9828 return new Address(hash, version)
9829}
9830
ab78acc6 9831Address.fromOutputScript = function (script, network) {
ebd8d4e8
IC
9832 network = network || networks.bitcoin
9833
ab78acc6
IC
9834 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
9835 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
ebd8d4e8 9836
ab78acc6 9837 assert(false, script.toASM() + ' has no matching Address')
ebd8d4e8
IC
9838}
9839
ebd8d4e8
IC
9840Address.prototype.toBase58Check = function () {
9841 var payload = new Buffer(21)
9842 payload.writeUInt8(this.version, 0)
9843 this.hash.copy(payload, 1)
9844
9845 return base58check.encode(payload)
9846}
9847
ab78acc6 9848Address.prototype.toOutputScript = function () {
ebd8d4e8
IC
9849 var scriptType = findScriptTypeByVersion(this.version)
9850
9851 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
9852 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
9853
ab78acc6
IC
9854 assert(false, this.toString() + ' has no matching Script')
9855}
9856
9857Address.prototype.toString = Address.prototype.toBase58Check
9858
9859module.exports = Address
9860
9861}).call(this,require("buffer").Buffer)
9862},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
9863var bs58check = require('bs58check')
9864
9865function decode () {
9866 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9867
9868 return bs58check.decode.apply(undefined, arguments)
9869}
9870
9871function encode () {
9872 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
9873
9874 return bs58check.encode.apply(undefined, arguments)
9875}
9876
9877module.exports = {
9878 decode: decode,
9879 encode: encode
9880}
9881
9882},{"bs58check":31}],56:[function(require,module,exports){
9883(function (Buffer){
9884var assert = require('assert')
9885var bufferutils = require('./bufferutils')
9886var crypto = require('./crypto')
9887
9888var Transaction = require('./transaction')
9889
9890function Block () {
9891 this.version = 1
9892 this.prevHash = null
9893 this.merkleRoot = null
9894 this.timestamp = 0
9895 this.bits = 0
9896 this.nonce = 0
9897}
9898
9899Block.fromBuffer = function (buffer) {
9900 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
9901
9902 var offset = 0
9903 function readSlice (n) {
9904 offset += n
9905 return buffer.slice(offset - n, offset)
9906 }
9907
9908 function readUInt32 () {
9909 var i = buffer.readUInt32LE(offset)
9910 offset += 4
9911 return i
9912 }
9913
9914 var block = new Block()
9915 block.version = readUInt32()
9916 block.prevHash = readSlice(32)
9917 block.merkleRoot = readSlice(32)
9918 block.timestamp = readUInt32()
9919 block.bits = readUInt32()
9920 block.nonce = readUInt32()
9921
9922 if (buffer.length === 80) return block
9923
9924 function readVarInt () {
9925 var vi = bufferutils.readVarInt(buffer, offset)
9926 offset += vi.size
9927 return vi.number
9928 }
9929
9930 // FIXME: poor performance
9931 function readTransaction () {
9932 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
9933
9934 offset += tx.toBuffer().length
9935 return tx
9936 }
9937
9938 var nTransactions = readVarInt()
9939 block.transactions = []
9940
9941 for (var i = 0; i < nTransactions; ++i) {
9942 var tx = readTransaction()
9943 block.transactions.push(tx)
9944 }
9945
9946 return block
9947}
9948
9949Block.fromHex = function (hex) {
9950 return Block.fromBuffer(new Buffer(hex, 'hex'))
9951}
9952
9953Block.prototype.getHash = function () {
9954 return crypto.hash256(this.toBuffer(true))
9955}
9956
9957Block.prototype.getId = function () {
9958 return bufferutils.reverse(this.getHash()).toString('hex')
ebd8d4e8
IC
9959}
9960
ab78acc6
IC
9961Block.prototype.getUTCDate = function () {
9962 var date = new Date(0) // epoch
9963 date.setUTCSeconds(this.timestamp)
ebd8d4e8 9964
ab78acc6
IC
9965 return date
9966}
ebd8d4e8 9967
ab78acc6
IC
9968Block.prototype.toBuffer = function (headersOnly) {
9969 var buffer = new Buffer(80)
ebd8d4e8 9970
ab78acc6
IC
9971 var offset = 0
9972 function writeSlice (slice) {
9973 slice.copy(buffer, offset)
9974 offset += slice.length
9975 }
ebd8d4e8 9976
ab78acc6
IC
9977 function writeUInt32 (i) {
9978 buffer.writeUInt32LE(i, offset)
9979 offset += 4
9980 }
ebd8d4e8 9981
ab78acc6
IC
9982 writeUInt32(this.version)
9983 writeSlice(this.prevHash)
9984 writeSlice(this.merkleRoot)
9985 writeUInt32(this.timestamp)
9986 writeUInt32(this.bits)
9987 writeUInt32(this.nonce)
ebd8d4e8 9988
ab78acc6 9989 if (headersOnly || !this.transactions) return buffer
ebd8d4e8 9990
ab78acc6
IC
9991 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
9992 var txBuffers = this.transactions.map(function (tx) {
9993 return tx.toBuffer()
9994 })
ebd8d4e8 9995
ab78acc6 9996 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
ebd8d4e8
IC
9997}
9998
ab78acc6
IC
9999Block.prototype.toHex = function (headersOnly) {
10000 return this.toBuffer(headersOnly).toString('hex')
ebd8d4e8
IC
10001}
10002
ab78acc6
IC
10003module.exports = Block
10004
10005}).call(this,require("buffer").Buffer)
10006},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
10007(function (Buffer){
10008var assert = require('assert')
10009var opcodes = require('./opcodes')
ebd8d4e8
IC
10010
10011// https://github.com/feross/buffer/blob/master/index.js#L1127
ab78acc6 10012function verifuint (value, max) {
ebd8d4e8
IC
10013 assert(typeof value === 'number', 'cannot write a non-number as a number')
10014 assert(value >= 0, 'specified a negative value for writing an unsigned value')
10015 assert(value <= max, 'value is larger than maximum value for type')
10016 assert(Math.floor(value) === value, 'value has a fractional component')
10017}
10018
ab78acc6 10019function pushDataSize (i) {
ebd8d4e8 10020 return i < opcodes.OP_PUSHDATA1 ? 1
ab78acc6
IC
10021 : i < 0xff ? 2
10022 : i < 0xffff ? 3
10023 : 5
ebd8d4e8
IC
10024}
10025
ab78acc6 10026function readPushDataInt (buffer, offset) {
ebd8d4e8
IC
10027 var opcode = buffer.readUInt8(offset)
10028 var number, size
10029
10030 // ~6 bit
10031 if (opcode < opcodes.OP_PUSHDATA1) {
10032 number = opcode
10033 size = 1
10034
10035 // 8 bit
10036 } else if (opcode === opcodes.OP_PUSHDATA1) {
ab78acc6 10037 if (offset + 2 > buffer.length) return null
ebd8d4e8
IC
10038 number = buffer.readUInt8(offset + 1)
10039 size = 2
10040
10041 // 16 bit
10042 } else if (opcode === opcodes.OP_PUSHDATA2) {
ab78acc6 10043 if (offset + 3 > buffer.length) return null
ebd8d4e8
IC
10044 number = buffer.readUInt16LE(offset + 1)
10045 size = 3
10046
10047 // 32 bit
10048 } else {
ab78acc6 10049 if (offset + 5 > buffer.length) return null
ebd8d4e8
IC
10050 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
10051
10052 number = buffer.readUInt32LE(offset + 1)
10053 size = 5
ebd8d4e8
IC
10054 }
10055
10056 return {
10057 opcode: opcode,
10058 number: number,
10059 size: size
10060 }
10061}
10062
ab78acc6 10063function readUInt64LE (buffer, offset) {
ebd8d4e8
IC
10064 var a = buffer.readUInt32LE(offset)
10065 var b = buffer.readUInt32LE(offset + 4)
10066 b *= 0x100000000
10067
10068 verifuint(b + a, 0x001fffffffffffff)
10069
10070 return b + a
10071}
10072
ab78acc6 10073function readVarInt (buffer, offset) {
ebd8d4e8
IC
10074 var t = buffer.readUInt8(offset)
10075 var number, size
10076
10077 // 8 bit
10078 if (t < 253) {
10079 number = t
10080 size = 1
10081
10082 // 16 bit
10083 } else if (t < 254) {
10084 number = buffer.readUInt16LE(offset + 1)
10085 size = 3
10086
10087 // 32 bit
10088 } else if (t < 255) {
10089 number = buffer.readUInt32LE(offset + 1)
10090 size = 5
10091
10092 // 64 bit
10093 } else {
10094 number = readUInt64LE(buffer, offset + 1)
10095 size = 9
10096 }
10097
10098 return {
10099 number: number,
10100 size: size
10101 }
10102}
10103
ab78acc6 10104function writePushDataInt (buffer, number, offset) {
ebd8d4e8
IC
10105 var size = pushDataSize(number)
10106
10107 // ~6 bit
10108 if (size === 1) {
10109 buffer.writeUInt8(number, offset)
10110
10111 // 8 bit
10112 } else if (size === 2) {
10113 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
10114 buffer.writeUInt8(number, offset + 1)
10115
10116 // 16 bit
10117 } else if (size === 3) {
10118 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
10119 buffer.writeUInt16LE(number, offset + 1)
10120
10121 // 32 bit
10122 } else {
10123 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
10124 buffer.writeUInt32LE(number, offset + 1)
ebd8d4e8
IC
10125 }
10126
10127 return size
10128}
10129
ab78acc6 10130function writeUInt64LE (buffer, value, offset) {
ebd8d4e8
IC
10131 verifuint(value, 0x001fffffffffffff)
10132
10133 buffer.writeInt32LE(value & -1, offset)
10134 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
10135}
10136
ab78acc6
IC
10137function varIntSize (i) {
10138 return i < 253 ? 1
10139 : i < 0x10000 ? 3
10140 : i < 0x100000000 ? 5
10141 : 9
ebd8d4e8
IC
10142}
10143
ab78acc6 10144function writeVarInt (buffer, number, offset) {
ebd8d4e8
IC
10145 var size = varIntSize(number)
10146
10147 // 8 bit
10148 if (size === 1) {
10149 buffer.writeUInt8(number, offset)
10150
10151 // 16 bit
10152 } else if (size === 3) {
10153 buffer.writeUInt8(253, offset)
10154 buffer.writeUInt16LE(number, offset + 1)
10155
10156 // 32 bit
10157 } else if (size === 5) {
10158 buffer.writeUInt8(254, offset)
10159 buffer.writeUInt32LE(number, offset + 1)
10160
10161 // 64 bit
10162 } else {
10163 buffer.writeUInt8(255, offset)
10164 writeUInt64LE(buffer, number, offset + 1)
10165 }
10166
10167 return size
10168}
10169
ab78acc6
IC
10170function varIntBuffer (i) {
10171 var size = varIntSize(i)
10172 var buffer = new Buffer(size)
10173 writeVarInt(buffer, i, 0)
10174
10175 return buffer
10176}
10177
10178function reverse (buffer) {
10179 var buffer2 = new Buffer(buffer)
10180 Array.prototype.reverse.call(buffer2)
10181 return buffer2
10182}
10183
ebd8d4e8
IC
10184module.exports = {
10185 pushDataSize: pushDataSize,
10186 readPushDataInt: readPushDataInt,
10187 readUInt64LE: readUInt64LE,
10188 readVarInt: readVarInt,
ab78acc6
IC
10189 reverse: reverse,
10190 varIntBuffer: varIntBuffer,
ebd8d4e8
IC
10191 varIntSize: varIntSize,
10192 writePushDataInt: writePushDataInt,
10193 writeUInt64LE: writeUInt64LE,
10194 writeVarInt: writeVarInt
10195}
10196
ab78acc6
IC
10197}).call(this,require("buffer").Buffer)
10198},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
10199var createHash = require('create-hash')
ebd8d4e8 10200
ab78acc6 10201function hash160 (buffer) {
ebd8d4e8
IC
10202 return ripemd160(sha256(buffer))
10203}
10204
ab78acc6 10205function hash256 (buffer) {
ebd8d4e8
IC
10206 return sha256(sha256(buffer))
10207}
10208
ab78acc6
IC
10209function ripemd160 (buffer) {
10210 return createHash('rmd160').update(buffer).digest()
ebd8d4e8
IC
10211}
10212
ab78acc6
IC
10213function sha1 (buffer) {
10214 return createHash('sha1').update(buffer).digest()
ebd8d4e8
IC
10215}
10216
ab78acc6
IC
10217function sha256 (buffer) {
10218 return createHash('sha256').update(buffer).digest()
ebd8d4e8
IC
10219}
10220
10221// FIXME: Name not consistent with others
ab78acc6 10222var createHmac = require('create-hmac')
ebd8d4e8 10223
ab78acc6
IC
10224function HmacSHA256 (buffer, secret) {
10225 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10226 return createHmac('sha256', secret).update(buffer).digest()
10227}
ebd8d4e8 10228
ab78acc6
IC
10229function HmacSHA512 (buffer, secret) {
10230 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
10231 return createHmac('sha512', secret).update(buffer).digest()
ebd8d4e8
IC
10232}
10233
10234module.exports = {
10235 ripemd160: ripemd160,
10236 sha1: sha1,
10237 sha256: sha256,
10238 hash160: hash160,
10239 hash256: hash256,
10240 HmacSHA256: HmacSHA256,
10241 HmacSHA512: HmacSHA512
10242}
10243
ab78acc6 10244},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
ebd8d4e8 10245(function (Buffer){
ab78acc6
IC
10246var assert = require('assert')
10247var createHmac = require('create-hmac')
10248var typeForce = require('typeforce')
ebd8d4e8 10249
ab78acc6
IC
10250var BigInteger = require('bigi')
10251var ECSignature = require('./ecsignature')
10252
10253var ZERO = new Buffer([0])
10254var ONE = new Buffer([1])
ebd8d4e8
IC
10255
10256// https://tools.ietf.org/html/rfc6979#section-3.2
ab78acc6
IC
10257function deterministicGenerateK (curve, hash, d, checkSig) {
10258 typeForce('Buffer', hash)
10259 typeForce('BigInteger', d)
10260
10261 // FIXME: remove/uncomment for 2.0.0
10262 // typeForce('Function', checkSig)
10263
10264 if (typeof checkSig !== 'function') {
10265 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
10266
10267 checkSig = function (k) {
10268 var G = curve.G
10269 var n = curve.n
10270 var e = BigInteger.fromBuffer(hash)
10271
10272 var Q = G.multiply(k)
10273
10274 if (curve.isInfinity(Q))
10275 return false
10276
10277 var r = Q.affineX.mod(n)
10278 if (r.signum() === 0)
10279 return false
10280
10281 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10282 if (s.signum() === 0)
10283 return false
10284
10285 return true
10286 }
10287 }
10288
10289 // sanity check
ebd8d4e8 10290 assert.equal(hash.length, 32, 'Hash must be 256 bit')
ebd8d4e8
IC
10291
10292 var x = d.toBuffer(32)
10293 var k = new Buffer(32)
10294 var v = new Buffer(32)
10295
ab78acc6 10296 // Step A, ignored as hash already provided
ebd8d4e8
IC
10297 // Step B
10298 v.fill(1)
10299
10300 // Step C
10301 k.fill(0)
10302
10303 // Step D
ab78acc6
IC
10304 k = createHmac('sha256', k)
10305 .update(v)
10306 .update(ZERO)
10307 .update(x)
10308 .update(hash)
10309 .digest()
ebd8d4e8
IC
10310
10311 // Step E
ab78acc6 10312 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10313
10314 // Step F
ab78acc6
IC
10315 k = createHmac('sha256', k)
10316 .update(v)
10317 .update(ONE)
10318 .update(x)
10319 .update(hash)
10320 .digest()
ebd8d4e8
IC
10321
10322 // Step G
ab78acc6 10323 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10324
10325 // Step H1/H2a, ignored as tlen === qlen (256 bit)
10326 // Step H2b
ab78acc6 10327 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10328
10329 var T = BigInteger.fromBuffer(v)
10330
ab78acc6
IC
10331 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
10332 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
10333 k = createHmac('sha256', k)
10334 .update(v)
10335 .update(ZERO)
10336 .digest()
10337
10338 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8 10339
ab78acc6
IC
10340 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
10341 // Step H2b again
10342 v = createHmac('sha256', k).update(v).digest()
ebd8d4e8
IC
10343 T = BigInteger.fromBuffer(v)
10344 }
10345
10346 return T
10347}
10348
ab78acc6
IC
10349function sign (curve, hash, d) {
10350 var r, s
ebd8d4e8 10351
ab78acc6 10352 var e = BigInteger.fromBuffer(hash)
ebd8d4e8
IC
10353 var n = curve.n
10354 var G = curve.G
ebd8d4e8 10355
ab78acc6
IC
10356 deterministicGenerateK(curve, hash, d, function (k) {
10357 var Q = G.multiply(k)
10358
10359 if (curve.isInfinity(Q))
10360 return false
10361
10362 r = Q.affineX.mod(n)
10363 if (r.signum() === 0)
10364 return false
10365
10366 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
10367 if (s.signum() === 0)
10368 return false
ebd8d4e8 10369
ab78acc6
IC
10370 return true
10371 })
ebd8d4e8
IC
10372
10373 var N_OVER_TWO = n.shiftRight(1)
10374
10375 // enforce low S values, see bip62: 'low s values in signatures'
10376 if (s.compareTo(N_OVER_TWO) > 0) {
10377 s = n.subtract(s)
10378 }
10379
10380 return new ECSignature(r, s)
10381}
10382
ab78acc6 10383function verifyRaw (curve, e, signature, Q) {
ebd8d4e8
IC
10384 var n = curve.n
10385 var G = curve.G
10386
10387 var r = signature.r
10388 var s = signature.s
10389
ab78acc6
IC
10390 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
10391 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
10392 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
ebd8d4e8 10393
ab78acc6 10394 // c = s^-1 mod n
ebd8d4e8
IC
10395 var c = s.modInverse(n)
10396
ab78acc6
IC
10397 // 1.4.4 Compute u1 = es^−1 mod n
10398 // u2 = rs^−1 mod n
ebd8d4e8
IC
10399 var u1 = e.multiply(c).mod(n)
10400 var u2 = r.multiply(c).mod(n)
10401
ab78acc6
IC
10402 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
10403 var R = G.multiplyTwo(u1, Q, u2)
10404 var v = R.affineX.mod(n)
ebd8d4e8 10405
ab78acc6
IC
10406 // 1.4.5 (cont.) Enforce R is not at infinity
10407 if (curve.isInfinity(R)) return false
10408
10409 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
ebd8d4e8
IC
10410 return v.equals(r)
10411}
10412
ab78acc6
IC
10413function verify (curve, hash, signature, Q) {
10414 // 1.4.2 H = Hash(M), already done by the user
10415 // 1.4.3 e = H
10416 var e = BigInteger.fromBuffer(hash)
10417
10418 return verifyRaw(curve, e, signature, Q)
10419}
10420
ebd8d4e8
IC
10421/**
10422 * Recover a public key from a signature.
10423 *
10424 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
10425 * Key Recovery Operation".
10426 *
10427 * http://www.secg.org/download/aid-780/sec1-v2.pdf
10428 */
ab78acc6 10429function recoverPubKey (curve, e, signature, i) {
ebd8d4e8
IC
10430 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
10431
ab78acc6
IC
10432 var n = curve.n
10433 var G = curve.G
10434
ebd8d4e8
IC
10435 var r = signature.r
10436 var s = signature.s
10437
ab78acc6
IC
10438 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
10439 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
10440
ebd8d4e8
IC
10441 // A set LSB signifies that the y-coordinate is odd
10442 var isYOdd = i & 1
10443
10444 // The more significant bit specifies whether we should use the
10445 // first or second candidate key.
10446 var isSecondKey = i >> 1
10447
ebd8d4e8
IC
10448 // 1.1 Let x = r + jn
10449 var x = isSecondKey ? r.add(n) : r
10450 var R = curve.pointFromX(isYOdd, x)
10451
10452 // 1.4 Check that nR is at infinity
10453 var nR = R.multiply(n)
10454 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
10455
10456 // Compute -e from e
10457 var eNeg = e.negate().mod(n)
10458
10459 // 1.6.1 Compute Q = r^-1 (sR - eG)
10460 // Q = r^-1 (sR + -eG)
10461 var rInv = r.modInverse(n)
10462
10463 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
10464 curve.validate(Q)
10465
10466 return Q
10467}
10468
10469/**
10470 * Calculate pubkey extraction parameter.
10471 *
10472 * When extracting a pubkey from a signature, we have to
10473 * distinguish four different cases. Rather than putting this
10474 * burden on the verifier, Bitcoin includes a 2-bit value with the
10475 * signature.
10476 *
10477 * This function simply tries all four cases and returns the value
10478 * that resulted in a successful pubkey recovery.
10479 */
ab78acc6 10480function calcPubKeyRecoveryParam (curve, e, signature, Q) {
ebd8d4e8
IC
10481 for (var i = 0; i < 4; i++) {
10482 var Qprime = recoverPubKey(curve, e, signature, i)
10483
10484 // 1.6.2 Verify Q
10485 if (Qprime.equals(Q)) {
10486 return i
10487 }
10488 }
10489
10490 throw new Error('Unable to find valid recovery factor')
10491}
10492
10493module.exports = {
10494 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
10495 deterministicGenerateK: deterministicGenerateK,
10496 recoverPubKey: recoverPubKey,
10497 sign: sign,
10498 verify: verify,
10499 verifyRaw: verifyRaw
10500}
10501
ab78acc6
IC
10502}).call(this,require("buffer").Buffer)
10503},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
ebd8d4e8 10504(function (Buffer){
ab78acc6
IC
10505var assert = require('assert')
10506var base58check = require('bs58check')
10507var ecdsa = require('./ecdsa')
10508var networks = require('./networks')
10509var randomBytes = require('randombytes')
10510var typeForce = require('typeforce')
ebd8d4e8 10511
ab78acc6
IC
10512var BigInteger = require('bigi')
10513var ECPubKey = require('./ecpubkey')
ebd8d4e8 10514
ab78acc6
IC
10515var ecurve = require('ecurve')
10516var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10517
ab78acc6 10518function ECKey (d, compressed) {
ebd8d4e8 10519 assert(d.signum() > 0, 'Private key must be greater than 0')
ab78acc6 10520 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
ebd8d4e8 10521
ab78acc6 10522 var Q = ECKey.curve.G.multiply(d)
ebd8d4e8
IC
10523
10524 this.d = d
10525 this.pub = new ECPubKey(Q, compressed)
10526}
10527
ab78acc6
IC
10528// Constants
10529ECKey.curve = secp256k1
10530
ebd8d4e8 10531// Static constructors
ab78acc6 10532ECKey.fromWIF = function (string) {
ebd8d4e8
IC
10533 var payload = base58check.decode(string)
10534 var compressed = false
10535
10536 // Ignore the version byte
10537 payload = payload.slice(1)
10538
10539 if (payload.length === 33) {
10540 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
10541
10542 // Truncate the compression flag
10543 payload = payload.slice(0, -1)
10544 compressed = true
10545 }
10546
10547 assert.equal(payload.length, 32, 'Invalid WIF payload length')
10548
10549 var d = BigInteger.fromBuffer(payload)
10550 return new ECKey(d, compressed)
10551}
10552
ab78acc6
IC
10553ECKey.makeRandom = function (compressed, rng) {
10554 rng = rng || randomBytes
ebd8d4e8
IC
10555
10556 var buffer = rng(32)
ab78acc6
IC
10557 typeForce('Buffer', buffer)
10558 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
ebd8d4e8
IC
10559
10560 var d = BigInteger.fromBuffer(buffer)
ab78acc6 10561 d = d.mod(ECKey.curve.n)
ebd8d4e8
IC
10562
10563 return new ECKey(d, compressed)
10564}
10565
10566// Export functions
ab78acc6 10567ECKey.prototype.toWIF = function (network) {
ebd8d4e8
IC
10568 network = network || networks.bitcoin
10569
10570 var bufferLen = this.pub.compressed ? 34 : 33
10571 var buffer = new Buffer(bufferLen)
10572
10573 buffer.writeUInt8(network.wif, 0)
10574 this.d.toBuffer(32).copy(buffer, 1)
10575
10576 if (this.pub.compressed) {
10577 buffer.writeUInt8(0x01, 33)
10578 }
10579
10580 return base58check.encode(buffer)
10581}
10582
10583// Operations
ab78acc6
IC
10584ECKey.prototype.sign = function (hash) {
10585 return ecdsa.sign(ECKey.curve, hash, this.d)
ebd8d4e8
IC
10586}
10587
10588module.exports = ECKey
10589
ab78acc6
IC
10590}).call(this,require("buffer").Buffer)
10591},{"./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 10592(function (Buffer){
ab78acc6
IC
10593var crypto = require('./crypto')
10594var ecdsa = require('./ecdsa')
10595var typeForce = require('typeforce')
10596var networks = require('./networks')
ebd8d4e8 10597
ab78acc6 10598var Address = require('./address')
ebd8d4e8 10599
ab78acc6
IC
10600var ecurve = require('ecurve')
10601var secp256k1 = ecurve.getCurveByName('secp256k1')
ebd8d4e8 10602
ab78acc6
IC
10603function ECPubKey (Q, compressed) {
10604 if (compressed === undefined) {
10605 compressed = true
10606 }
ebd8d4e8 10607
ab78acc6
IC
10608 typeForce('Point', Q)
10609 typeForce('Boolean', compressed)
ebd8d4e8
IC
10610
10611 this.compressed = compressed
10612 this.Q = Q
10613}
10614
ab78acc6
IC
10615// Constants
10616ECPubKey.curve = secp256k1
10617
ebd8d4e8 10618// Static constructors
ab78acc6
IC
10619ECPubKey.fromBuffer = function (buffer) {
10620 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
ebd8d4e8
IC
10621 return new ECPubKey(Q, Q.compressed)
10622}
10623
ab78acc6 10624ECPubKey.fromHex = function (hex) {
ebd8d4e8
IC
10625 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
10626}
10627
10628// Operations
ab78acc6 10629ECPubKey.prototype.getAddress = function (network) {
ebd8d4e8
IC
10630 network = network || networks.bitcoin
10631
10632 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
10633}
10634
ab78acc6
IC
10635ECPubKey.prototype.verify = function (hash, signature) {
10636 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
ebd8d4e8
IC
10637}
10638
10639// Export functions
ab78acc6 10640ECPubKey.prototype.toBuffer = function () {
ebd8d4e8
IC
10641 return this.Q.getEncoded(this.compressed)
10642}
10643
ab78acc6 10644ECPubKey.prototype.toHex = function () {
ebd8d4e8
IC
10645 return this.toBuffer().toString('hex')
10646}
10647
10648module.exports = ECPubKey
10649
ab78acc6
IC
10650}).call(this,require("buffer").Buffer)
10651},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
ebd8d4e8 10652(function (Buffer){
ab78acc6
IC
10653var assert = require('assert')
10654var typeForce = require('typeforce')
10655
10656var BigInteger = require('bigi')
10657
10658function ECSignature (r, s) {
10659 typeForce('BigInteger', r)
10660 typeForce('BigInteger', s)
ebd8d4e8 10661
ebd8d4e8
IC
10662 this.r = r
10663 this.s = s
10664}
10665
ab78acc6 10666ECSignature.parseCompact = function (buffer) {
ebd8d4e8
IC
10667 assert.equal(buffer.length, 65, 'Invalid signature length')
10668 var i = buffer.readUInt8(0) - 27
10669
10670 // At most 3 bits
10671 assert.equal(i, i & 7, 'Invalid signature parameter')
10672 var compressed = !!(i & 4)
10673
10674 // Recovery param only
10675 i = i & 3
10676
10677 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
10678 var s = BigInteger.fromBuffer(buffer.slice(33))
10679
10680 return {
10681 compressed: compressed,
10682 i: i,
10683 signature: new ECSignature(r, s)
10684 }
10685}
10686
ab78acc6 10687ECSignature.fromDER = function (buffer) {
ebd8d4e8
IC
10688 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
10689 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
10690 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
10691
10692 var rLen = buffer.readUInt8(3)
10693 assert(rLen > 0, 'R length is zero')
10694
10695 var offset = 4 + rLen
10696 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
10697
10698 var sLen = buffer.readUInt8(offset + 1)
10699 assert(sLen > 0, 'S length is zero')
10700
10701 var rB = buffer.slice(4, offset)
10702 var sB = buffer.slice(offset + 2)
10703 offset += 2 + sLen
10704
10705 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
10706 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
10707 }
10708
10709 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
10710 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
10711 }
10712
10713 assert.equal(offset, buffer.length, 'Invalid DER encoding')
10714 var r = BigInteger.fromDERInteger(rB)
10715 var s = BigInteger.fromDERInteger(sB)
10716
10717 assert(r.signum() >= 0, 'R value is negative')
10718 assert(s.signum() >= 0, 'S value is negative')
10719
10720 return new ECSignature(r, s)
10721}
10722
ab78acc6
IC
10723// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
10724ECSignature.parseScriptSignature = function (buffer) {
ebd8d4e8
IC
10725 var hashType = buffer.readUInt8(buffer.length - 1)
10726 var hashTypeMod = hashType & ~0x80
10727
ab78acc6 10728 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
ebd8d4e8
IC
10729
10730 return {
10731 signature: ECSignature.fromDER(buffer.slice(0, -1)),
10732 hashType: hashType
10733 }
10734}
10735
ab78acc6
IC
10736ECSignature.prototype.toCompact = function (i, compressed) {
10737 if (compressed) {
10738 i += 4
10739 }
10740
ebd8d4e8
IC
10741 i += 27
10742
10743 var buffer = new Buffer(65)
10744 buffer.writeUInt8(i, 0)
10745
10746 this.r.toBuffer(32).copy(buffer, 1)
10747 this.s.toBuffer(32).copy(buffer, 33)
10748
10749 return buffer
10750}
10751
ab78acc6 10752ECSignature.prototype.toDER = function () {
ebd8d4e8
IC
10753 var rBa = this.r.toDERInteger()
10754 var sBa = this.s.toDERInteger()
10755
10756 var sequence = []
ab78acc6
IC
10757
10758 // INTEGER
10759 sequence.push(0x02, rBa.length)
ebd8d4e8
IC
10760 sequence = sequence.concat(rBa)
10761
ab78acc6
IC
10762 // INTEGER
10763 sequence.push(0x02, sBa.length)
ebd8d4e8
IC
10764 sequence = sequence.concat(sBa)
10765
ab78acc6
IC
10766 // SEQUENCE
10767 sequence.unshift(0x30, sequence.length)
ebd8d4e8
IC
10768
10769 return new Buffer(sequence)
10770}
10771
ab78acc6
IC
10772ECSignature.prototype.toScriptSignature = function (hashType) {
10773 var hashTypeMod = hashType & ~0x80
10774 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
10775
ebd8d4e8
IC
10776 var hashTypeBuffer = new Buffer(1)
10777 hashTypeBuffer.writeUInt8(hashType, 0)
10778
10779 return Buffer.concat([this.toDER(), hashTypeBuffer])
10780}
10781
10782module.exports = ECSignature
10783
ab78acc6
IC
10784}).call(this,require("buffer").Buffer)
10785},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
ebd8d4e8 10786(function (Buffer){
ab78acc6
IC
10787var assert = require('assert')
10788var base58check = require('bs58check')
10789var bcrypto = require('./crypto')
10790var createHmac = require('create-hmac')
10791var typeForce = require('typeforce')
10792var networks = require('./networks')
10793
10794var BigInteger = require('bigi')
10795var ECKey = require('./eckey')
10796var ECPubKey = require('./ecpubkey')
10797
10798var ecurve = require('ecurve')
ebd8d4e8
IC
10799var curve = ecurve.getCurveByName('secp256k1')
10800
ab78acc6 10801function findBIP32NetworkByVersion (version) {
ebd8d4e8
IC
10802 for (var name in networks) {
10803 var network = networks[name]
10804
ab78acc6
IC
10805 if (version === network.bip32.private || version === network.bip32.public) {
10806 return network
ebd8d4e8
IC
10807 }
10808 }
10809
ab78acc6 10810 assert(false, 'Could not find network for ' + version.toString(16))
ebd8d4e8
IC
10811}
10812
ab78acc6 10813function HDNode (K, chainCode, network) {
ebd8d4e8
IC
10814 network = network || networks.bitcoin
10815
ab78acc6
IC
10816 typeForce('Buffer', chainCode)
10817
10818 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
ebd8d4e8
IC
10819 assert(network.bip32, 'Unknown BIP32 constants for network')
10820
10821 this.chainCode = chainCode
10822 this.depth = 0
10823 this.index = 0
ab78acc6 10824 this.parentFingerprint = 0x00000000
ebd8d4e8
IC
10825 this.network = network
10826
10827 if (K instanceof BigInteger) {
10828 this.privKey = new ECKey(K, true)
10829 this.pubKey = this.privKey.pub
ab78acc6
IC
10830 } else if (K instanceof ECKey) {
10831 assert(K.pub.compressed, 'ECKey must be compressed')
10832 this.privKey = K
10833 this.pubKey = K.pub
10834 } else if (K instanceof ECPubKey) {
10835 assert(K.compressed, 'ECPubKey must be compressed')
10836 this.pubKey = K
ebd8d4e8
IC
10837 } else {
10838 this.pubKey = new ECPubKey(K, true)
10839 }
10840}
10841
10842HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
10843HDNode.HIGHEST_BIT = 0x80000000
10844HDNode.LENGTH = 78
10845
ab78acc6
IC
10846HDNode.fromSeedBuffer = function (seed, network) {
10847 typeForce('Buffer', seed)
10848
10849 assert(seed.length >= 16, 'Seed should be at least 128 bits')
10850 assert(seed.length <= 64, 'Seed should be at most 512 bits')
10851
10852 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
ebd8d4e8
IC
10853 var IL = I.slice(0, 32)
10854 var IR = I.slice(32)
10855
10856 // In case IL is 0 or >= n, the master key is invalid
10857 // This is handled by `new ECKey` in the HDNode constructor
10858 var pIL = BigInteger.fromBuffer(IL)
10859
10860 return new HDNode(pIL, IR, network)
10861}
10862
ab78acc6 10863HDNode.fromSeedHex = function (hex, network) {
ebd8d4e8
IC
10864 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
10865}
10866
ab78acc6
IC
10867HDNode.fromBase58 = function (string, network) {
10868 return HDNode.fromBuffer(base58check.decode(string), network, true)
ebd8d4e8
IC
10869}
10870
ab78acc6
IC
10871// FIXME: remove in 2.x.y
10872HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
10873 if (!__ignoreDeprecation) {
10874 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
10875 }
10876
ebd8d4e8
IC
10877 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
10878
10879 // 4 byte: version bytes
10880 var version = buffer.readUInt32BE(0)
ab78acc6
IC
10881
10882 if (network) {
10883 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
10884
10885 // auto-detect
10886 } else {
10887 network = findBIP32NetworkByVersion(version)
10888 }
ebd8d4e8
IC
10889
10890 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
10891 var depth = buffer.readUInt8(4)
10892
10893 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
10894 var parentFingerprint = buffer.readUInt32BE(5)
10895 if (depth === 0) {
10896 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
10897 }
10898
10899 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10900 // This is encoded in MSB order. (0x00000000 if master key)
10901 var index = buffer.readUInt32BE(9)
10902 assert(depth > 0 || index === 0, 'Invalid index')
10903
10904 // 32 bytes: the chain code
10905 var chainCode = buffer.slice(13, 45)
ab78acc6 10906 var data, hd
ebd8d4e8
IC
10907
10908 // 33 bytes: private key data (0x00 + k)
ab78acc6 10909 if (version === network.bip32.private) {
ebd8d4e8 10910 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
ab78acc6 10911 data = buffer.slice(46, 78)
ebd8d4e8 10912 var d = BigInteger.fromBuffer(data)
ab78acc6 10913 hd = new HDNode(d, chainCode, network)
ebd8d4e8
IC
10914
10915 // 33 bytes: public key data (0x02 + X or 0x03 + X)
10916 } else {
ab78acc6 10917 data = buffer.slice(45, 78)
ebd8d4e8
IC
10918 var Q = ecurve.Point.decodeFrom(curve, data)
10919 assert.equal(Q.compressed, true, 'Invalid public key')
10920
10921 // Verify that the X coordinate in the public point corresponds to a point on the curve.
10922 // If not, the extended public key is invalid.
10923 curve.validate(Q)
10924
ab78acc6 10925 hd = new HDNode(Q, chainCode, network)
ebd8d4e8
IC
10926 }
10927
10928 hd.depth = depth
10929 hd.index = index
10930 hd.parentFingerprint = parentFingerprint
10931
10932 return hd
10933}
10934
ab78acc6
IC
10935// FIXME: remove in 2.x.y
10936HDNode.fromHex = function (hex, network) {
10937 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
ebd8d4e8
IC
10938}
10939
ab78acc6
IC
10940HDNode.prototype.getIdentifier = function () {
10941 return bcrypto.hash160(this.pubKey.toBuffer())
ebd8d4e8
IC
10942}
10943
ab78acc6 10944HDNode.prototype.getFingerprint = function () {
ebd8d4e8
IC
10945 return this.getIdentifier().slice(0, 4)
10946}
10947
ab78acc6 10948HDNode.prototype.getAddress = function () {
ebd8d4e8
IC
10949 return this.pubKey.getAddress(this.network)
10950}
10951
ab78acc6
IC
10952HDNode.prototype.neutered = function () {
10953 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
10954 neutered.depth = this.depth
10955 neutered.index = this.index
10956 neutered.parentFingerprint = this.parentFingerprint
10957
10958 return neutered
10959}
10960
10961HDNode.prototype.toBase58 = function (isPrivate) {
10962 return base58check.encode(this.toBuffer(isPrivate, true))
ebd8d4e8
IC
10963}
10964
ab78acc6
IC
10965// FIXME: remove in 2.x.y
10966HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
10967 if (isPrivate === undefined) {
10968 isPrivate = !!this.privKey
10969
10970 // FIXME: remove in 2.x.y
10971 } else {
10972 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
10973 }
10974
10975 if (!__ignoreDeprecation) {
10976 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
10977 }
ebd8d4e8
IC
10978
10979 // Version
10980 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
10981 var buffer = new Buffer(HDNode.LENGTH)
10982
10983 // 4 bytes: version bytes
10984 buffer.writeUInt32BE(version, 0)
10985
10986 // Depth
10987 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
10988 buffer.writeUInt8(this.depth, 4)
10989
10990 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
ab78acc6 10991 buffer.writeUInt32BE(this.parentFingerprint, 5)
ebd8d4e8
IC
10992
10993 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
10994 // This is encoded in Big endian. (0x00000000 if master key)
10995 buffer.writeUInt32BE(this.index, 9)
10996
10997 // 32 bytes: the chain code
10998 this.chainCode.copy(buffer, 13)
10999
11000 // 33 bytes: the public key or private key data
11001 if (isPrivate) {
ab78acc6 11002 // FIXME: remove in 2.x.y
ebd8d4e8
IC
11003 assert(this.privKey, 'Missing private key')
11004
11005 // 0x00 + k for private keys
11006 buffer.writeUInt8(0, 45)
11007 this.privKey.d.toBuffer(32).copy(buffer, 46)
11008 } else {
ebd8d4e8
IC
11009 // X9.62 encoding for public keys
11010 this.pubKey.toBuffer().copy(buffer, 45)
11011 }
11012
11013 return buffer
11014}
11015
ab78acc6
IC
11016// FIXME: remove in 2.x.y
11017HDNode.prototype.toHex = function (isPrivate) {
ebd8d4e8
IC
11018 return this.toBuffer(isPrivate).toString('hex')
11019}
11020
11021// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
ab78acc6 11022HDNode.prototype.derive = function (index) {
ebd8d4e8
IC
11023 var isHardened = index >= HDNode.HIGHEST_BIT
11024 var indexBuffer = new Buffer(4)
11025 indexBuffer.writeUInt32BE(index, 0)
11026
11027 var data
11028
11029 // Hardened child
11030 if (isHardened) {
11031 assert(this.privKey, 'Could not derive hardened child key')
11032
11033 // data = 0x00 || ser256(kpar) || ser32(index)
11034 data = Buffer.concat([
11035 this.privKey.d.toBuffer(33),
11036 indexBuffer
11037 ])
11038
11039 // Normal child
11040 } else {
11041 // data = serP(point(kpar)) || ser32(index)
11042 // = serP(Kpar) || ser32(index)
11043 data = Buffer.concat([
11044 this.pubKey.toBuffer(),
11045 indexBuffer
11046 ])
11047 }
11048
ab78acc6 11049 var I = createHmac('sha512', this.chainCode).update(data).digest()
ebd8d4e8
IC
11050 var IL = I.slice(0, 32)
11051 var IR = I.slice(32)
11052
11053 var pIL = BigInteger.fromBuffer(IL)
11054
11055 // In case parse256(IL) >= n, proceed with the next value for i
11056 if (pIL.compareTo(curve.n) >= 0) {
11057 return this.derive(index + 1)
11058 }
11059
11060 // Private parent key -> private child key
11061 var hd
11062 if (this.privKey) {
11063 // ki = parse256(IL) + kpar (mod n)
11064 var ki = pIL.add(this.privKey.d).mod(curve.n)
11065
11066 // In case ki == 0, proceed with the next value for i
11067 if (ki.signum() === 0) {
11068 return this.derive(index + 1)
11069 }
11070
11071 hd = new HDNode(ki, IR, this.network)
11072
11073 // Public parent key -> public child key
11074 } else {
11075 // Ki = point(parse256(IL)) + Kpar
11076 // = G*IL + Kpar
11077 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
11078
11079 // In case Ki is the point at infinity, proceed with the next value for i
11080 if (curve.isInfinity(Ki)) {
11081 return this.derive(index + 1)
11082 }
11083
11084 hd = new HDNode(Ki, IR, this.network)
11085 }
11086
11087 hd.depth = this.depth + 1
11088 hd.index = index
11089 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
11090
11091 return hd
11092}
11093
ab78acc6 11094HDNode.prototype.deriveHardened = function (index) {
ebd8d4e8
IC
11095 // Only derives hardened private keys by default
11096 return this.derive(index + HDNode.HIGHEST_BIT)
11097}
11098
11099HDNode.prototype.toString = HDNode.prototype.toBase58
11100
11101module.exports = HDNode
11102
ab78acc6
IC
11103}).call(this,require("buffer").Buffer)
11104},{"./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 11105module.exports = {
ab78acc6
IC
11106 Address: require('./address'),
11107 base58check: require('./base58check'),
11108 Block: require('./block'),
11109 bufferutils: require('./bufferutils'),
11110 crypto: require('./crypto'),
11111 ecdsa: require('./ecdsa'),
11112 ECKey: require('./eckey'),
11113 ECPubKey: require('./ecpubkey'),
11114 ECSignature: require('./ecsignature'),
11115 Message: require('./message'),
11116 opcodes: require('./opcodes'),
11117 HDNode: require('./hdnode'),
11118 Script: require('./script'),
11119 scripts: require('./scripts'),
11120 Transaction: require('./transaction'),
11121 TransactionBuilder: require('./transaction_builder'),
11122 networks: require('./networks'),
11123 Wallet: require('./wallet')
11124}
11125
11126},{"./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 11127(function (Buffer){
ab78acc6
IC
11128var bufferutils = require('./bufferutils')
11129var crypto = require('./crypto')
11130var ecdsa = require('./ecdsa')
11131var networks = require('./networks')
11132
11133var BigInteger = require('bigi')
11134var ECPubKey = require('./ecpubkey')
11135var ECSignature = require('./ecsignature')
11136
11137var ecurve = require('ecurve')
ebd8d4e8
IC
11138var ecparams = ecurve.getCurveByName('secp256k1')
11139
ab78acc6 11140function magicHash (message, network) {
ebd8d4e8
IC
11141 var magicPrefix = new Buffer(network.magicPrefix)
11142 var messageBuffer = new Buffer(message)
ab78acc6 11143 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
ebd8d4e8
IC
11144
11145 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
11146 return crypto.hash256(buffer)
11147}
11148
ab78acc6 11149function sign (privKey, message, network) {
ebd8d4e8
IC
11150 network = network || networks.bitcoin
11151
11152 var hash = magicHash(message, network)
11153 var signature = privKey.sign(hash)
11154 var e = BigInteger.fromBuffer(hash)
11155 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
11156
11157 return signature.toCompact(i, privKey.pub.compressed)
11158}
11159
11160// TODO: network could be implied from address
ab78acc6
IC
11161function verify (address, signature, message, network) {
11162 if (!Buffer.isBuffer(signature)) {
11163 signature = new Buffer(signature, 'base64')
ebd8d4e8 11164 }
ab78acc6 11165
ebd8d4e8
IC
11166 network = network || networks.bitcoin
11167
11168 var hash = magicHash(message, network)
ab78acc6 11169 var parsed = ECSignature.parseCompact(signature)
ebd8d4e8
IC
11170 var e = BigInteger.fromBuffer(hash)
11171 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
11172
11173 var pubKey = new ECPubKey(Q, parsed.compressed)
ab78acc6 11174 return pubKey.getAddress(network).toString() === address.toString()
ebd8d4e8
IC
11175}
11176
11177module.exports = {
11178 magicHash: magicHash,
11179 sign: sign,
11180 verify: verify
11181}
11182
ab78acc6
IC
11183}).call(this,require("buffer").Buffer)
11184},{"./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
11185// https://en.bitcoin.it/wiki/List_of_address_prefixes
11186// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
11187
11188var networks = {
11189 bitcoin: {
11190 magicPrefix: '\x18Bitcoin Signed Message:\n',
11191 bip32: {
11192 public: 0x0488b21e,
11193 private: 0x0488ade4
11194 },
11195 pubKeyHash: 0x00,
11196 scriptHash: 0x05,
11197 wif: 0x80,
11198 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
11199 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
11200 estimateFee: estimateFee('bitcoin')
a9385c1b 11201 },
ab78acc6
IC
11202 testnet: {
11203 magicPrefix: '\x18Bitcoin Signed Message:\n',
a9385c1b 11204 bip32: {
ab78acc6
IC
11205 public: 0x043587cf,
11206 private: 0x04358394
a9385c1b 11207 },
ab78acc6
IC
11208 pubKeyHash: 0x6f,
11209 scriptHash: 0xc4,
11210 wif: 0xef,
11211 dustThreshold: 546,
cb325c58 11212 feePerKb: 10000,
ab78acc6 11213 estimateFee: estimateFee('testnet')
a9385c1b 11214 },
ab78acc6
IC
11215 litecoin: {
11216 magicPrefix: '\x19Litecoin Signed Message:\n',
a9385c1b 11217 bip32: {
ab78acc6
IC
11218 public: 0x019da462,
11219 private: 0x019d9cfe
a9385c1b 11220 },
ab78acc6
IC
11221 pubKeyHash: 0x30,
11222 scriptHash: 0x05,
11223 wif: 0xb0,
11224 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
11225 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
11226 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
11227 estimateFee: estimateFee('litecoin')
ebd8d4e8
IC
11228 },
11229 dogecoin: {
11230 magicPrefix: '\x19Dogecoin Signed Message:\n',
11231 bip32: {
11232 public: 0x02facafd,
11233 private: 0x02fac398
11234 },
11235 pubKeyHash: 0x1e,
11236 scriptHash: 0x16,
11237 wif: 0x9e,
11238 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
11239 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
11240 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
11241 estimateFee: estimateFee('dogecoin')
11242 },
ab78acc6
IC
11243 viacoin: {
11244 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8 11245 bip32: {
ab78acc6
IC
11246 public: 0x0488b21e,
11247 private: 0x0488ade4
ebd8d4e8 11248 },
ab78acc6
IC
11249 pubKeyHash: 0x47,
11250 scriptHash: 0x21,
11251 wif: 0xc7,
11252 dustThreshold: 560,
11253 dustSoftThreshold: 100000,
11254 feePerKb: 100000, //
11255 estimateFee: estimateFee('viacoin')
ebd8d4e8 11256 },
ab78acc6
IC
11257 viacointestnet: {
11258 magicPrefix: '\x18Viacoin Signed Message:\n',
ebd8d4e8
IC
11259 bip32: {
11260 public: 0x043587cf,
11261 private: 0x04358394
11262 },
ab78acc6 11263 pubKeyHash: 0x7f,
ebd8d4e8 11264 scriptHash: 0xc4,
ab78acc6
IC
11265 wif: 0xff,
11266 dustThreshold: 560,
11267 dustSoftThreshold: 100000,
11268 feePerKb: 100000,
11269 estimateFee: estimateFee('viacointestnet')
11270 },
11271 gamerscoin: {
11272 magicPrefix: '\x19Gamerscoin Signed Message:\n',
11273 bip32: {
11274 public: 0x019da462,
11275 private: 0x019d9cfe
11276 },
11277 pubKeyHash: 0x26,
11278 scriptHash: 0x05,
11279 wif: 0xA6,
11280 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
11281 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
11282 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
11283 estimateFee: estimateFee('gamerscoin')
11284 },
11285 jumbucks: {
11286 magicPrefix: '\x19Jumbucks Signed Message:\n',
11287 bip32: {
11288 public: 0x037a689a,
11289 private: 0x037a6460
11290 },
11291 pubKeyHash: 0x2b,
11292 scriptHash: 0x05,
11293 wif: 0xab,
11294 dustThreshold: 0,
11295 dustSoftThreshold: 10000,
ebd8d4e8 11296 feePerKb: 10000,
ab78acc6
IC
11297 estimateFee: estimateFee('jumbucks')
11298 },
11299 zetacoin: {
11300 magicPrefix: '\x18Zetacoin Signed Message:\n',
11301 bip32: {
11302 public: 0x0488b21e,
11303 private: 0x0488ade4
11304 },
11305 pubKeyHash: 0x50,
11306 scriptHash: 0x09,
11307 wif: 0xe0,
11308 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
11309 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
11310 estimateFee: estimateFee('zetacoin')
ebd8d4e8
IC
11311 }
11312}
11313
ab78acc6
IC
11314function estimateFee (type) {
11315 return function (tx) {
ebd8d4e8
IC
11316 var network = networks[type]
11317 var baseFee = network.feePerKb
11318 var byteSize = tx.toBuffer().length
11319
11320 var fee = baseFee * Math.ceil(byteSize / 1000)
ab78acc6 11321 if (network.dustSoftThreshold === undefined) return fee
ebd8d4e8 11322
ab78acc6 11323 tx.outs.forEach(function (e) {
ebd8d4e8
IC
11324 if (e.value < network.dustSoftThreshold) {
11325 fee += baseFee
11326 }
11327 })
11328
11329 return fee
11330 }
11331}
11332
11333module.exports = networks
11334
ab78acc6 11335},{}],67:[function(require,module,exports){
ebd8d4e8
IC
11336module.exports = {
11337 // push value
ab78acc6
IC
11338 OP_FALSE: 0,
11339 OP_0: 0,
11340 OP_PUSHDATA1: 76,
11341 OP_PUSHDATA2: 77,
11342 OP_PUSHDATA4: 78,
11343 OP_1NEGATE: 79,
11344 OP_RESERVED: 80,
11345 OP_1: 81,
11346 OP_TRUE: 81,
11347 OP_2: 82,
11348 OP_3: 83,
11349 OP_4: 84,
11350 OP_5: 85,
11351 OP_6: 86,
11352 OP_7: 87,
11353 OP_8: 88,
11354 OP_9: 89,
11355 OP_10: 90,
11356 OP_11: 91,
11357 OP_12: 92,
11358 OP_13: 93,
11359 OP_14: 94,
11360 OP_15: 95,
11361 OP_16: 96,
ebd8d4e8
IC
11362
11363 // control
ab78acc6
IC
11364 OP_NOP: 97,
11365 OP_VER: 98,
11366 OP_IF: 99,
11367 OP_NOTIF: 100,
11368 OP_VERIF: 101,
11369 OP_VERNOTIF: 102,
11370 OP_ELSE: 103,
11371 OP_ENDIF: 104,
11372 OP_VERIFY: 105,
11373 OP_RETURN: 106,
ebd8d4e8
IC
11374
11375 // stack ops
ab78acc6
IC
11376 OP_TOALTSTACK: 107,
11377 OP_FROMALTSTACK: 108,
11378 OP_2DROP: 109,
11379 OP_2DUP: 110,
11380 OP_3DUP: 111,
11381 OP_2OVER: 112,
11382 OP_2ROT: 113,
11383 OP_2SWAP: 114,
11384 OP_IFDUP: 115,
11385 OP_DEPTH: 116,
11386 OP_DROP: 117,
11387 OP_DUP: 118,
11388 OP_NIP: 119,
11389 OP_OVER: 120,
11390 OP_PICK: 121,
11391 OP_ROLL: 122,
11392 OP_ROT: 123,
11393 OP_SWAP: 124,
11394 OP_TUCK: 125,
ebd8d4e8
IC
11395
11396 // splice ops
ab78acc6
IC
11397 OP_CAT: 126,
11398 OP_SUBSTR: 127,
11399 OP_LEFT: 128,
11400 OP_RIGHT: 129,
11401 OP_SIZE: 130,
ebd8d4e8
IC
11402
11403 // bit logic
ab78acc6
IC
11404 OP_INVERT: 131,
11405 OP_AND: 132,
11406 OP_OR: 133,
11407 OP_XOR: 134,
11408 OP_EQUAL: 135,
11409 OP_EQUALVERIFY: 136,
11410 OP_RESERVED1: 137,
11411 OP_RESERVED2: 138,
ebd8d4e8
IC
11412
11413 // numeric
ab78acc6
IC
11414 OP_1ADD: 139,
11415 OP_1SUB: 140,
11416 OP_2MUL: 141,
11417 OP_2DIV: 142,
11418 OP_NEGATE: 143,
11419 OP_ABS: 144,
11420 OP_NOT: 145,
11421 OP_0NOTEQUAL: 146,
11422
11423 OP_ADD: 147,
11424 OP_SUB: 148,
11425 OP_MUL: 149,
11426 OP_DIV: 150,
11427 OP_MOD: 151,
11428 OP_LSHIFT: 152,
11429 OP_RSHIFT: 153,
11430
11431 OP_BOOLAND: 154,
11432 OP_BOOLOR: 155,
11433 OP_NUMEQUAL: 156,
11434 OP_NUMEQUALVERIFY: 157,
11435 OP_NUMNOTEQUAL: 158,
11436 OP_LESSTHAN: 159,
11437 OP_GREATERTHAN: 160,
11438 OP_LESSTHANOREQUAL: 161,
11439 OP_GREATERTHANOREQUAL: 162,
11440 OP_MIN: 163,
11441 OP_MAX: 164,
11442
11443 OP_WITHIN: 165,
ebd8d4e8
IC
11444
11445 // crypto
ab78acc6
IC
11446 OP_RIPEMD160: 166,
11447 OP_SHA1: 167,
11448 OP_SHA256: 168,
11449 OP_HASH160: 169,
11450 OP_HASH256: 170,
11451 OP_CODESEPARATOR: 171,
11452 OP_CHECKSIG: 172,
11453 OP_CHECKSIGVERIFY: 173,
11454 OP_CHECKMULTISIG: 174,
11455 OP_CHECKMULTISIGVERIFY: 175,
ebd8d4e8
IC
11456
11457 // expansion
ab78acc6
IC
11458 OP_NOP1: 176,
11459 OP_NOP2: 177,
11460 OP_NOP3: 178,
11461 OP_NOP4: 179,
11462 OP_NOP5: 180,
11463 OP_NOP6: 181,
11464 OP_NOP7: 182,
11465 OP_NOP8: 183,
11466 OP_NOP9: 184,
11467 OP_NOP10: 185,
ebd8d4e8
IC
11468
11469 // template matching params
ab78acc6
IC
11470 OP_PUBKEYHASH: 253,
11471 OP_PUBKEY: 254,
11472 OP_INVALIDOPCODE: 255
ebd8d4e8
IC
11473}
11474
ab78acc6 11475},{}],68:[function(require,module,exports){
ebd8d4e8 11476(function (Buffer){
ab78acc6
IC
11477var assert = require('assert')
11478var bufferutils = require('./bufferutils')
11479var crypto = require('./crypto')
11480var typeForce = require('typeforce')
11481var opcodes = require('./opcodes')
ebd8d4e8 11482
ab78acc6
IC
11483function Script (buffer, chunks) {
11484 typeForce('Buffer', buffer)
11485 typeForce('Array', chunks)
ebd8d4e8
IC
11486
11487 this.buffer = buffer
11488 this.chunks = chunks
11489}
11490
ab78acc6 11491Script.fromASM = function (asm) {
ebd8d4e8 11492 var strChunks = asm.split(' ')
ab78acc6
IC
11493 var chunks = strChunks.map(function (strChunk) {
11494 // opcode
ebd8d4e8
IC
11495 if (strChunk in opcodes) {
11496 return opcodes[strChunk]
11497
ab78acc6 11498 // data chunk
ebd8d4e8
IC
11499 } else {
11500 return new Buffer(strChunk, 'hex')
11501 }
11502 })
11503
11504 return Script.fromChunks(chunks)
11505}
11506
ab78acc6 11507Script.fromBuffer = function (buffer) {
ebd8d4e8 11508 var chunks = []
ebd8d4e8
IC
11509 var i = 0
11510
11511 while (i < buffer.length) {
11512 var opcode = buffer.readUInt8(i)
11513
ab78acc6 11514 // data chunk
ebd8d4e8
IC
11515 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
11516 var d = bufferutils.readPushDataInt(buffer, i)
ab78acc6
IC
11517
11518 // did reading a pushDataInt fail? return non-chunked script
11519 if (d === null) return new Script(buffer, [])
ebd8d4e8
IC
11520 i += d.size
11521
ab78acc6
IC
11522 // attempt to read too much data?
11523 if (i + d.number > buffer.length) return new Script(buffer, [])
11524
ebd8d4e8
IC
11525 var data = buffer.slice(i, i + d.number)
11526 i += d.number
11527
11528 chunks.push(data)
11529
ab78acc6 11530 // opcode
ebd8d4e8
IC
11531 } else {
11532 chunks.push(opcode)
11533
11534 i += 1
11535 }
11536 }
11537
11538 return new Script(buffer, chunks)
11539}
11540
ab78acc6
IC
11541Script.fromChunks = function (chunks) {
11542 typeForce('Array', chunks)
ebd8d4e8 11543
ab78acc6
IC
11544 var bufferSize = chunks.reduce(function (accum, chunk) {
11545 // data chunk
ebd8d4e8
IC
11546 if (Buffer.isBuffer(chunk)) {
11547 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
11548 }
11549
ab78acc6 11550 // opcode
ebd8d4e8
IC
11551 return accum + 1
11552 }, 0.0)
11553
11554 var buffer = new Buffer(bufferSize)
11555 var offset = 0
11556
ab78acc6
IC
11557 chunks.forEach(function (chunk) {
11558 // data chunk
ebd8d4e8
IC
11559 if (Buffer.isBuffer(chunk)) {
11560 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
11561
11562 chunk.copy(buffer, offset)
11563 offset += chunk.length
11564
ab78acc6 11565 // opcode
ebd8d4e8
IC
11566 } else {
11567 buffer.writeUInt8(chunk, offset)
11568 offset += 1
11569 }
11570 })
11571
11572 assert.equal(offset, buffer.length, 'Could not decode chunks')
11573 return new Script(buffer, chunks)
11574}
11575
ab78acc6 11576Script.fromHex = function (hex) {
ebd8d4e8
IC
11577 return Script.fromBuffer(new Buffer(hex, 'hex'))
11578}
11579
ebd8d4e8
IC
11580Script.EMPTY = Script.fromChunks([])
11581
ab78acc6 11582Script.prototype.getHash = function () {
ebd8d4e8
IC
11583 return crypto.hash160(this.buffer)
11584}
11585
11586// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
ab78acc6
IC
11587Script.prototype.without = function (needle) {
11588 return Script.fromChunks(this.chunks.filter(function (op) {
ebd8d4e8
IC
11589 return op !== needle
11590 }))
11591}
11592
ebd8d4e8
IC
11593var reverseOps = []
11594for (var op in opcodes) {
11595 var code = opcodes[op]
11596 reverseOps[code] = op
11597}
11598
ab78acc6
IC
11599Script.prototype.toASM = function () {
11600 return this.chunks.map(function (chunk) {
11601 // data chunk
ebd8d4e8
IC
11602 if (Buffer.isBuffer(chunk)) {
11603 return chunk.toString('hex')
11604
ab78acc6 11605 // opcode
ebd8d4e8
IC
11606 } else {
11607 return reverseOps[chunk]
11608 }
11609 }).join(' ')
11610}
11611
ab78acc6 11612Script.prototype.toBuffer = function () {
ebd8d4e8
IC
11613 return this.buffer
11614}
11615
ab78acc6 11616Script.prototype.toHex = function () {
ebd8d4e8
IC
11617 return this.toBuffer().toString('hex')
11618}
11619
11620module.exports = Script
11621
ab78acc6
IC
11622}).call(this,require("buffer").Buffer)
11623},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
ebd8d4e8 11624(function (Buffer){
ab78acc6
IC
11625var assert = require('assert')
11626var ops = require('./opcodes')
11627var typeForce = require('typeforce')
ebd8d4e8 11628
ab78acc6 11629var ecurve = require('ecurve')
ebd8d4e8
IC
11630var curve = ecurve.getCurveByName('secp256k1')
11631
ab78acc6
IC
11632var ECSignature = require('./ecsignature')
11633var Script = require('./script')
ebd8d4e8 11634
ab78acc6 11635function isCanonicalPubKey (buffer) {
ebd8d4e8
IC
11636 if (!Buffer.isBuffer(buffer)) return false
11637
11638 try {
ebd8d4e8
IC
11639 ecurve.Point.decodeFrom(curve, buffer)
11640 } catch (e) {
ab78acc6
IC
11641 if (!(e.message.match(/Invalid sequence (length|tag)/)))
11642 throw e
ebd8d4e8
IC
11643
11644 return false
11645 }
11646
11647 return true
11648}
11649
ab78acc6 11650function isCanonicalSignature (buffer) {
ebd8d4e8
IC
11651 if (!Buffer.isBuffer(buffer)) return false
11652
11653 try {
11654 ECSignature.parseScriptSignature(buffer)
ab78acc6
IC
11655 } catch (e) {
11656 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/))) {
11657 throw e
11658 }
ebd8d4e8
IC
11659
11660 return false
11661 }
11662
11663 return true
11664}
11665
ab78acc6
IC
11666function isPubKeyHashInput (script) {
11667 return script.chunks.length === 2 &&
11668 isCanonicalSignature(script.chunks[0]) &&
11669 isCanonicalPubKey(script.chunks[1])
ebd8d4e8
IC
11670}
11671
ab78acc6
IC
11672function isPubKeyHashOutput (script) {
11673 return script.chunks.length === 5 &&
11674 script.chunks[0] === ops.OP_DUP &&
11675 script.chunks[1] === ops.OP_HASH160 &&
11676 Buffer.isBuffer(script.chunks[2]) &&
11677 script.chunks[2].length === 20 &&
11678 script.chunks[3] === ops.OP_EQUALVERIFY &&
11679 script.chunks[4] === ops.OP_CHECKSIG
ebd8d4e8
IC
11680}
11681
ab78acc6
IC
11682function isPubKeyInput (script) {
11683 return script.chunks.length === 1 &&
11684 isCanonicalSignature(script.chunks[0])
ebd8d4e8
IC
11685}
11686
ab78acc6
IC
11687function isPubKeyOutput (script) {
11688 return script.chunks.length === 2 &&
11689 isCanonicalPubKey(script.chunks[0]) &&
11690 script.chunks[1] === ops.OP_CHECKSIG
ebd8d4e8
IC
11691}
11692
ab78acc6
IC
11693function isScriptHashInput (script, allowIncomplete) {
11694 if (script.chunks.length < 2) return false
ebd8d4e8 11695
ab78acc6 11696 var lastChunk = script.chunks[script.chunks.length - 1]
ebd8d4e8
IC
11697 if (!Buffer.isBuffer(lastChunk)) return false
11698
ab78acc6
IC
11699 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
11700 var redeemScript = Script.fromBuffer(lastChunk)
ebd8d4e8 11701
ab78acc6
IC
11702 // is redeemScript a valid script?
11703 if (redeemScript.chunks.length === 0) return false
11704
11705 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
ebd8d4e8
IC
11706}
11707
ab78acc6
IC
11708function isScriptHashOutput (script) {
11709 return script.chunks.length === 3 &&
11710 script.chunks[0] === ops.OP_HASH160 &&
11711 Buffer.isBuffer(script.chunks[1]) &&
11712 script.chunks[1].length === 20 &&
11713 script.chunks[2] === ops.OP_EQUAL
ebd8d4e8
IC
11714}
11715
ab78acc6
IC
11716// allowIncomplete is to account for combining signatures
11717// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
11718function isMultisigInput (script, allowIncomplete) {
11719 if (script.chunks.length < 2) return false
11720 if (script.chunks[0] !== ops.OP_0) return false
11721
11722 if (allowIncomplete) {
11723 return script.chunks.slice(1).every(function (chunk) {
11724 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
11725 })
11726 }
11727
11728 return script.chunks.slice(1).every(isCanonicalSignature)
ebd8d4e8
IC
11729}
11730
ab78acc6
IC
11731function isMultisigOutput (script) {
11732 if (script.chunks.length < 4) return false
11733 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
ebd8d4e8 11734
ab78acc6
IC
11735 var mOp = script.chunks[0]
11736 if (mOp === ops.OP_0) return false
11737 if (mOp < ops.OP_1) return false
11738 if (mOp > ops.OP_16) return false
ebd8d4e8 11739
ab78acc6
IC
11740 var nOp = script.chunks[script.chunks.length - 2]
11741 if (nOp === ops.OP_0) return false
11742 if (nOp < ops.OP_1) return false
11743 if (nOp > ops.OP_16) return false
ebd8d4e8 11744
ab78acc6
IC
11745 var m = mOp - (ops.OP_1 - 1)
11746 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8
IC
11747 if (n < m) return false
11748
ab78acc6 11749 var pubKeys = script.chunks.slice(1, -2)
ebd8d4e8
IC
11750 if (n < pubKeys.length) return false
11751
11752 return pubKeys.every(isCanonicalPubKey)
11753}
11754
ab78acc6
IC
11755function isNullDataOutput (script) {
11756 return script.chunks[0] === ops.OP_RETURN
11757}
11758
11759function classifyOutput (script) {
11760 typeForce('Script', script)
11761
11762 if (isPubKeyHashOutput(script)) {
11763 return 'pubkeyhash'
11764 } else if (isScriptHashOutput(script)) {
11765 return 'scripthash'
11766 } else if (isMultisigOutput(script)) {
11767 return 'multisig'
11768 } else if (isPubKeyOutput(script)) {
11769 return 'pubkey'
11770 } else if (isNullDataOutput(script)) {
11771 return 'nulldata'
11772 }
11773
11774 return 'nonstandard'
11775}
11776
11777function classifyInput (script, allowIncomplete) {
11778 typeForce('Script', script)
11779
11780 if (isPubKeyHashInput(script)) {
11781 return 'pubkeyhash'
11782 } else if (isMultisigInput(script, allowIncomplete)) {
11783 return 'multisig'
11784 } else if (isScriptHashInput(script, allowIncomplete)) {
11785 return 'scripthash'
11786 } else if (isPubKeyInput(script)) {
11787 return 'pubkey'
11788 }
11789
11790 return 'nonstandard'
ebd8d4e8
IC
11791}
11792
11793// Standard Script Templates
11794// {pubKey} OP_CHECKSIG
ab78acc6 11795function pubKeyOutput (pubKey) {
ebd8d4e8
IC
11796 return Script.fromChunks([
11797 pubKey.toBuffer(),
ab78acc6 11798 ops.OP_CHECKSIG
ebd8d4e8
IC
11799 ])
11800}
11801
11802// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
ab78acc6
IC
11803function pubKeyHashOutput (hash) {
11804 typeForce('Buffer', hash)
ebd8d4e8
IC
11805
11806 return Script.fromChunks([
ab78acc6
IC
11807 ops.OP_DUP,
11808 ops.OP_HASH160,
ebd8d4e8 11809 hash,
ab78acc6
IC
11810 ops.OP_EQUALVERIFY,
11811 ops.OP_CHECKSIG
ebd8d4e8
IC
11812 ])
11813}
11814
11815// OP_HASH160 {scriptHash} OP_EQUAL
ab78acc6
IC
11816function scriptHashOutput (hash) {
11817 typeForce('Buffer', hash)
ebd8d4e8
IC
11818
11819 return Script.fromChunks([
ab78acc6 11820 ops.OP_HASH160,
ebd8d4e8 11821 hash,
ab78acc6 11822 ops.OP_EQUAL
ebd8d4e8
IC
11823 ])
11824}
11825
11826// m [pubKeys ...] n OP_CHECKMULTISIG
ab78acc6
IC
11827function multisigOutput (m, pubKeys) {
11828 typeForce(['ECPubKey'], pubKeys)
11829
ebd8d4e8
IC
11830 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
11831
ab78acc6 11832 var pubKeyBuffers = pubKeys.map(function (pubKey) {
ebd8d4e8
IC
11833 return pubKey.toBuffer()
11834 })
11835 var n = pubKeys.length
11836
11837 return Script.fromChunks([].concat(
ab78acc6 11838 (ops.OP_1 - 1) + m,
ebd8d4e8 11839 pubKeyBuffers,
ab78acc6
IC
11840 (ops.OP_1 - 1) + n,
11841 ops.OP_CHECKMULTISIG
ebd8d4e8
IC
11842 ))
11843}
11844
11845// {signature}
ab78acc6
IC
11846function pubKeyInput (signature) {
11847 typeForce('Buffer', signature)
ebd8d4e8
IC
11848
11849 return Script.fromChunks([signature])
11850}
11851
11852// {signature} {pubKey}
ab78acc6
IC
11853function pubKeyHashInput (signature, pubKey) {
11854 typeForce('Buffer', signature)
ebd8d4e8
IC
11855
11856 return Script.fromChunks([signature, pubKey.toBuffer()])
11857}
11858
11859// <scriptSig> {serialized scriptPubKey script}
ab78acc6 11860function scriptHashInput (scriptSig, scriptPubKey) {
ebd8d4e8
IC
11861 return Script.fromChunks([].concat(
11862 scriptSig.chunks,
11863 scriptPubKey.toBuffer()
11864 ))
11865}
11866
11867// OP_0 [signatures ...]
ab78acc6 11868function multisigInput (signatures, scriptPubKey) {
ebd8d4e8 11869 if (scriptPubKey) {
ab78acc6
IC
11870 assert(isMultisigOutput(scriptPubKey))
11871
11872 var mOp = scriptPubKey.chunks[0]
11873 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
11874 var m = mOp - (ops.OP_1 - 1)
11875 var n = nOp - (ops.OP_1 - 1)
ebd8d4e8 11876
ab78acc6
IC
11877 assert(signatures.length >= m, 'Not enough signatures provided')
11878 assert(signatures.length <= n, 'Too many signatures provided')
ebd8d4e8
IC
11879 }
11880
ab78acc6
IC
11881 return Script.fromChunks([].concat(ops.OP_0, signatures))
11882}
11883
11884function nullDataOutput (data) {
11885 return Script.fromChunks([ops.OP_RETURN, data])
ebd8d4e8
IC
11886}
11887
11888module.exports = {
ab78acc6
IC
11889 isCanonicalPubKey: isCanonicalPubKey,
11890 isCanonicalSignature: isCanonicalSignature,
11891 isPubKeyHashInput: isPubKeyHashInput,
11892 isPubKeyHashOutput: isPubKeyHashOutput,
11893 isPubKeyInput: isPubKeyInput,
11894 isPubKeyOutput: isPubKeyOutput,
11895 isScriptHashInput: isScriptHashInput,
11896 isScriptHashOutput: isScriptHashOutput,
11897 isMultisigInput: isMultisigInput,
11898 isMultisigOutput: isMultisigOutput,
11899 isNullDataOutput: isNullDataOutput,
ebd8d4e8 11900 classifyOutput: classifyOutput,
ab78acc6
IC
11901 classifyInput: classifyInput,
11902 pubKeyOutput: pubKeyOutput,
ebd8d4e8 11903 pubKeyHashOutput: pubKeyHashOutput,
ab78acc6
IC
11904 scriptHashOutput: scriptHashOutput,
11905 multisigOutput: multisigOutput,
ebd8d4e8 11906 pubKeyInput: pubKeyInput,
ab78acc6 11907 pubKeyHashInput: pubKeyHashInput,
ebd8d4e8 11908 scriptHashInput: scriptHashInput,
ab78acc6
IC
11909 multisigInput: multisigInput,
11910 dataOutput: function (data) {
11911 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
11912 return nullDataOutput(data)
11913 },
11914 nullDataOutput: nullDataOutput
ebd8d4e8
IC
11915}
11916
ab78acc6
IC
11917}).call(this,require("buffer").Buffer)
11918},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
ebd8d4e8 11919(function (Buffer){
ab78acc6
IC
11920var assert = require('assert')
11921var bufferutils = require('./bufferutils')
11922var crypto = require('./crypto')
11923var typeForce = require('typeforce')
11924var opcodes = require('./opcodes')
11925var scripts = require('./scripts')
11926
11927var Address = require('./address')
11928var ECSignature = require('./ecsignature')
11929var Script = require('./script')
11930
11931function Transaction () {
11932 this.version = 1
11933 this.locktime = 0
11934 this.ins = []
11935 this.outs = []
11936}
ebd8d4e8
IC
11937
11938Transaction.DEFAULT_SEQUENCE = 0xffffffff
11939Transaction.SIGHASH_ALL = 0x01
11940Transaction.SIGHASH_NONE = 0x02
11941Transaction.SIGHASH_SINGLE = 0x03
11942Transaction.SIGHASH_ANYONECANPAY = 0x80
11943
ab78acc6
IC
11944Transaction.fromBuffer = function (buffer, __disableAssert) {
11945 var offset = 0
11946 function readSlice (n) {
11947 offset += n
11948 return buffer.slice(offset - n, offset)
11949 }
11950
11951 function readUInt32 () {
11952 var i = buffer.readUInt32LE(offset)
11953 offset += 4
11954 return i
11955 }
11956
11957 function readUInt64 () {
11958 var i = bufferutils.readUInt64LE(buffer, offset)
11959 offset += 8
11960 return i
11961 }
11962
11963 function readVarInt () {
11964 var vi = bufferutils.readVarInt(buffer, offset)
11965 offset += vi.size
11966 return vi.number
11967 }
11968
11969 function readScript () {
11970 return Script.fromBuffer(readSlice(readVarInt()))
11971 }
11972
11973 function readGenerationScript () {
11974 return new Script(readSlice(readVarInt()), [])
11975 }
11976
11977 var tx = new Transaction()
11978 tx.version = readUInt32()
11979
11980 var vinLen = readVarInt()
11981 for (var i = 0; i < vinLen; ++i) {
11982 var hash = readSlice(32)
11983
11984 if (Transaction.isCoinbaseHash(hash)) {
11985 tx.ins.push({
11986 hash: hash,
11987 index: readUInt32(),
11988 script: readGenerationScript(),
11989 sequence: readUInt32()
11990 })
11991 } else {
11992 tx.ins.push({
11993 hash: hash,
11994 index: readUInt32(),
11995 script: readScript(),
11996 sequence: readUInt32()
11997 })
11998 }
11999 }
12000
12001 var voutLen = readVarInt()
12002 for (i = 0; i < voutLen; ++i) {
12003 tx.outs.push({
12004 value: readUInt64(),
12005 script: readScript()
12006 })
12007 }
12008
12009 tx.locktime = readUInt32()
12010
12011 if (!__disableAssert) {
12012 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
12013 }
12014
12015 return tx
12016}
12017
12018Transaction.fromHex = function (hex) {
12019 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
12020}
12021
12022Transaction.isCoinbaseHash = function (buffer) {
12023 return Array.prototype.every.call(buffer, function (x) {
12024 return x === 0
12025 })
ebd8d4e8
IC
12026}
12027
12028/**
ab78acc6 12029 * Create a new txIn.
ebd8d4e8
IC
12030 *
12031 * Can be called with any of:
12032 *
12033 * - A transaction and an index
12034 * - A transaction hash and an index
12035 *
12036 * Note that this method does not sign the created input.
12037 */
ab78acc6
IC
12038Transaction.prototype.addInput = function (hash, index, sequence, script) {
12039 if (sequence === undefined || sequence === null) {
12040 sequence = Transaction.DEFAULT_SEQUENCE
12041 }
ebd8d4e8 12042
ab78acc6 12043 script = script || Script.EMPTY
ebd8d4e8 12044
ab78acc6 12045 if (typeof hash === 'string') {
ebd8d4e8 12046 // TxId hex is big-endian, we need little-endian
ab78acc6
IC
12047 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
12048 } else if (hash instanceof Transaction) {
12049 hash = hash.getHash()
ebd8d4e8
IC
12050 }
12051
ab78acc6
IC
12052 typeForce('Buffer', hash)
12053 typeForce('Number', index)
12054 typeForce('Number', sequence)
12055 typeForce('Script', script)
12056
ebd8d4e8 12057 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
ebd8d4e8 12058
ab78acc6 12059 // Add the input and return the input's index
ebd8d4e8
IC
12060 return (this.ins.push({
12061 hash: hash,
12062 index: index,
ab78acc6 12063 script: script,
ebd8d4e8
IC
12064 sequence: sequence
12065 }) - 1)
12066}
12067
12068/**
ab78acc6 12069 * Create a new txOut.
ebd8d4e8
IC
12070 *
12071 * Can be called with:
12072 *
12073 * - A base58 address string and a value
12074 * - An Address object and a value
12075 * - A scriptPubKey Script and a value
12076 */
ab78acc6 12077Transaction.prototype.addOutput = function (scriptPubKey, value) {
ebd8d4e8
IC
12078 // Attempt to get a valid address if it's a base58 address string
12079 if (typeof scriptPubKey === 'string') {
12080 scriptPubKey = Address.fromBase58Check(scriptPubKey)
12081 }
12082
12083 // Attempt to get a valid script if it's an Address object
12084 if (scriptPubKey instanceof Address) {
ab78acc6 12085 scriptPubKey = scriptPubKey.toOutputScript()
ebd8d4e8
IC
12086 }
12087
ab78acc6
IC
12088 typeForce('Script', scriptPubKey)
12089 typeForce('Number', value)
12090
12091 // Add the output and return the output's index
ebd8d4e8
IC
12092 return (this.outs.push({
12093 script: scriptPubKey,
ab78acc6 12094 value: value
ebd8d4e8
IC
12095 }) - 1)
12096}
12097
ab78acc6
IC
12098Transaction.prototype.clone = function () {
12099 var newTx = new Transaction()
12100 newTx.version = this.version
12101 newTx.locktime = this.locktime
12102
12103 newTx.ins = this.ins.map(function (txIn) {
12104 return {
12105 hash: txIn.hash,
12106 index: txIn.index,
12107 script: txIn.script,
12108 sequence: txIn.sequence
12109 }
12110 })
12111
12112 newTx.outs = this.outs.map(function (txOut) {
12113 return {
12114 script: txOut.script,
12115 value: txOut.value
12116 }
12117 })
12118
12119 return newTx
12120}
12121
12122/**
12123 * Hash transaction for signing a specific input.
12124 *
12125 * Bitcoin uses a different hash for each signed transaction input. This
12126 * method copies the transaction, makes the necessary changes based on the
12127 * hashType, serializes and finally hashes the result. This hash can then be
12128 * used to sign the transaction input in question.
12129 */
12130Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
12131 // FIXME: remove in 2.x.y
12132 if (arguments[0] instanceof Script) {
12133 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
12134
12135 // swap the arguments (must be stored in tmp, arguments is special)
12136 var tmp = arguments[0]
12137 inIndex = arguments[1]
12138 prevOutScript = tmp
12139 }
12140
12141 typeForce('Number', inIndex)
12142 typeForce('Script', prevOutScript)
12143 typeForce('Number', hashType)
12144
12145 assert(inIndex >= 0, 'Invalid vin index')
12146 assert(inIndex < this.ins.length, 'Invalid vin index')
12147
12148 var txTmp = this.clone()
12149 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
12150
12151 // Blank out other inputs' signatures
12152 txTmp.ins.forEach(function (txIn) {
12153 txIn.script = Script.EMPTY
12154 })
12155 txTmp.ins[inIndex].script = hashScript
12156
12157 var hashTypeModifier = hashType & 0x1f
12158
12159 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
12160 assert(false, 'SIGHASH_NONE not yet supported')
12161 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
12162 assert(false, 'SIGHASH_SINGLE not yet supported')
12163 }
12164
12165 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
12166 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
12167 }
12168
12169 var hashTypeBuffer = new Buffer(4)
12170 hashTypeBuffer.writeInt32LE(hashType, 0)
12171
12172 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
12173 return crypto.hash256(buffer)
12174}
12175
12176Transaction.prototype.getHash = function () {
12177 return crypto.hash256(this.toBuffer())
12178}
12179
12180Transaction.prototype.getId = function () {
12181 // TxHash is little-endian, we need big-endian
12182 return bufferutils.reverse(this.getHash()).toString('hex')
12183}
12184
ebd8d4e8 12185Transaction.prototype.toBuffer = function () {
ab78acc6
IC
12186 function scriptSize (script) {
12187 var length = script.buffer.length
ebd8d4e8 12188
ab78acc6
IC
12189 return bufferutils.varIntSize(length) + length
12190 }
ebd8d4e8
IC
12191
12192 var buffer = new Buffer(
12193 8 +
12194 bufferutils.varIntSize(this.ins.length) +
12195 bufferutils.varIntSize(this.outs.length) +
ab78acc6
IC
12196 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
12197 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
ebd8d4e8
IC
12198 )
12199
12200 var offset = 0
ab78acc6 12201 function writeSlice (slice) {
ebd8d4e8
IC
12202 slice.copy(buffer, offset)
12203 offset += slice.length
12204 }
ab78acc6
IC
12205
12206 function writeUInt32 (i) {
ebd8d4e8
IC
12207 buffer.writeUInt32LE(i, offset)
12208 offset += 4
12209 }
ab78acc6
IC
12210
12211 function writeUInt64 (i) {
ebd8d4e8
IC
12212 bufferutils.writeUInt64LE(buffer, i, offset)
12213 offset += 8
12214 }
ab78acc6
IC
12215
12216 function writeVarInt (i) {
ebd8d4e8
IC
12217 var n = bufferutils.writeVarInt(buffer, i, offset)
12218 offset += n
12219 }
12220
12221 writeUInt32(this.version)
12222 writeVarInt(this.ins.length)
12223
ab78acc6
IC
12224 this.ins.forEach(function (txIn) {
12225 writeSlice(txIn.hash)
12226 writeUInt32(txIn.index)
12227 writeVarInt(txIn.script.buffer.length)
12228 writeSlice(txIn.script.buffer)
12229 writeUInt32(txIn.sequence)
ebd8d4e8
IC
12230 })
12231
12232 writeVarInt(this.outs.length)
ab78acc6
IC
12233 this.outs.forEach(function (txOut) {
12234 writeUInt64(txOut.value)
12235 writeVarInt(txOut.script.buffer.length)
12236 writeSlice(txOut.script.buffer)
ebd8d4e8
IC
12237 })
12238
12239 writeUInt32(this.locktime)
12240
12241 return buffer
12242}
12243
ab78acc6 12244Transaction.prototype.toHex = function () {
ebd8d4e8
IC
12245 return this.toBuffer().toString('hex')
12246}
12247
ab78acc6
IC
12248Transaction.prototype.setInputScript = function (index, script) {
12249 typeForce('Number', index)
12250 typeForce('Script', script)
12251
12252 this.ins[index].script = script
12253}
12254
12255// FIXME: remove in 2.x.y
12256Transaction.prototype.sign = function (index, privKey, hashType) {
12257 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
12258
12259 var prevOutScript = privKey.pub.getAddress().toOutputScript()
12260 var signature = this.signInput(index, prevOutScript, privKey, hashType)
12261
12262 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
12263 this.setInputScript(index, scriptSig)
12264}
12265
12266// FIXME: remove in 2.x.y
12267Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
12268 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
12269
12270 hashType = hashType || Transaction.SIGHASH_ALL
12271
12272 var hash = this.hashForSignature(index, prevOutScript, hashType)
12273 var signature = privKey.sign(hash)
12274
12275 return signature.toScriptSignature(hashType)
12276}
12277
12278// FIXME: remove in 2.x.y
12279Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
12280 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
12281
12282 var parsed = ECSignature.parseScriptSignature(buffer)
12283 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
12284
12285 return pubKey.verify(hash, parsed.signature)
12286}
12287
12288module.exports = Transaction
12289
12290}).call(this,require("buffer").Buffer)
12291},{"./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){
12292(function (Buffer){
12293var assert = require('assert')
12294var ops = require('./opcodes')
12295var scripts = require('./scripts')
12296
12297var ECPubKey = require('./ecpubkey')
12298var ECSignature = require('./ecsignature')
12299var Script = require('./script')
12300var Transaction = require('./transaction')
12301
12302function extractInput (txIn) {
12303 var redeemScript
12304 var scriptSig = txIn.script
12305 var prevOutScript
12306 var prevOutType = scripts.classifyInput(scriptSig, true)
12307 var scriptType
12308
12309 // Re-classify if scriptHash
12310 if (prevOutType === 'scripthash') {
12311 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
12312 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12313
12314 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
12315 scriptType = scripts.classifyInput(scriptSig, true)
12316 } else {
12317 scriptType = prevOutType
12318 }
12319
12320 // Extract hashType, pubKeys and signatures
12321 var hashType, parsed, pubKeys, signatures
12322
12323 switch (scriptType) {
12324 case 'pubkeyhash': {
12325 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12326 hashType = parsed.hashType
12327 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
12328 signatures = [parsed.signature]
12329 prevOutScript = pubKeys[0].getAddress().toOutputScript()
12330
12331 break
12332 }
12333
12334 case 'pubkey': {
12335 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
12336 hashType = parsed.hashType
12337 signatures = [parsed.signature]
12338
12339 if (redeemScript) {
12340 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
12341 }
12342
12343 break
12344 }
12345
12346 case 'multisig': {
12347 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
12348 if (chunk === ops.OP_0) return chunk
12349
12350 var parsed = ECSignature.parseScriptSignature(chunk)
12351 hashType = parsed.hashType
12352
12353 return parsed.signature
12354 })
12355
12356 if (redeemScript) {
12357 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12358 }
12359
12360 break
12361 }
12362 }
12363
12364 return {
12365 hashType: hashType,
12366 prevOutScript: prevOutScript,
12367 prevOutType: prevOutType,
12368 pubKeys: pubKeys,
12369 redeemScript: redeemScript,
12370 scriptType: scriptType,
12371 signatures: signatures
12372 }
12373}
12374
12375function TransactionBuilder () {
12376 this.prevTxMap = {}
12377 this.prevOutScripts = {}
12378 this.prevOutTypes = {}
12379
12380 this.inputs = []
12381 this.tx = new Transaction()
12382}
12383
12384TransactionBuilder.fromTransaction = function (transaction) {
12385 var txb = new TransactionBuilder()
12386
12387 // Copy other transaction fields
12388 txb.tx.version = transaction.version
12389 txb.tx.locktime = transaction.locktime
12390
12391 // Extract/add inputs
12392 transaction.ins.forEach(function (txIn) {
12393 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
12394 })
12395
12396 // Extract/add outputs
12397 transaction.outs.forEach(function (txOut) {
12398 txb.addOutput(txOut.script, txOut.value)
12399 })
12400
12401 // Extract/add signatures
12402 txb.inputs = transaction.ins.map(function (txIn) {
12403 // TODO: remove me after testcase added
12404 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
12405
12406 // Ignore empty scripts
12407 if (txIn.script.buffer.length === 0) return {}
12408
12409 return extractInput(txIn)
12410 })
12411
12412 return txb
12413}
12414
12415TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
12416 var prevOutHash
12417
12418 // txId
12419 if (typeof prevTx === 'string') {
12420 prevOutHash = new Buffer(prevTx, 'hex')
12421
12422 // TxId hex is big-endian, we want little-endian hash
12423 Array.prototype.reverse.call(prevOutHash)
12424
12425 // Transaction
12426 } else if (prevTx instanceof Transaction) {
12427 prevOutHash = prevTx.getHash()
12428 prevOutScript = prevTx.outs[index].script
12429
12430 // txHash
12431 } else {
12432 prevOutHash = prevTx
12433 }
12434
12435 var input = {}
12436 if (prevOutScript) {
12437 var prevOutType = scripts.classifyOutput(prevOutScript)
12438
12439 // if we can, extract pubKey information
12440 switch (prevOutType) {
12441 case 'multisig': {
12442 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12443 break
12444 }
12445
12446 case 'pubkey': {
12447 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12448 break
12449 }
12450 }
12451
12452 if (prevOutType !== 'scripthash') {
12453 input.scriptType = prevOutType
12454 }
12455
12456 input.prevOutScript = prevOutScript
12457 input.prevOutType = prevOutType
12458 }
12459
12460 assert(this.inputs.every(function (input2) {
12461 if (input2.hashType === undefined) return true
12462
12463 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
12464 }), 'No, this would invalidate signatures')
12465
12466 var prevOut = prevOutHash.toString('hex') + ':' + index
12467 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
12468
12469 var vin = this.tx.addInput(prevOutHash, index, sequence)
12470 this.inputs[vin] = input
12471 this.prevTxMap[prevOut] = vin
12472
12473 return vin
12474}
12475
12476TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
12477 assert(this.inputs.every(function (input) {
12478 if (input.hashType === undefined) return true
ebd8d4e8 12479
ab78acc6
IC
12480 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
12481 }), 'No, this would invalidate signatures')
ebd8d4e8 12482
ab78acc6
IC
12483 return this.tx.addOutput(scriptPubKey, value)
12484}
ebd8d4e8 12485
ab78acc6
IC
12486TransactionBuilder.prototype.build = function () {
12487 return this.__build(false)
12488}
12489TransactionBuilder.prototype.buildIncomplete = function () {
12490 return this.__build(true)
12491}
ebd8d4e8 12492
ab78acc6
IC
12493var canSignTypes = {
12494 'pubkeyhash': true,
12495 'multisig': true,
12496 'pubkey': true
12497}
ebd8d4e8 12498
ab78acc6
IC
12499TransactionBuilder.prototype.__build = function (allowIncomplete) {
12500 if (!allowIncomplete) {
12501 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
12502 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
ebd8d4e8
IC
12503 }
12504
ab78acc6 12505 var tx = this.tx.clone()
ebd8d4e8 12506
ab78acc6
IC
12507 // Create script signatures from signature meta-data
12508 this.inputs.forEach(function (input, index) {
12509 var scriptType = input.scriptType
12510 var scriptSig
ebd8d4e8 12511
ab78acc6
IC
12512 if (!allowIncomplete) {
12513 assert(!!scriptType, 'Transaction is not complete')
12514 assert(scriptType in canSignTypes, scriptType + ' not supported')
12515 assert(input.signatures, 'Transaction is missing signatures')
12516 }
ebd8d4e8 12517
ab78acc6
IC
12518 if (input.signatures) {
12519 switch (scriptType) {
12520 case 'pubkeyhash': {
12521 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
12522 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
12523 break
12524 }
ebd8d4e8 12525
ab78acc6
IC
12526 case 'multisig': {
12527 // Array.prototype.map is sparse-compatible
12528 var msSignatures = input.signatures.map(function (signature) {
12529 return signature && signature.toScriptSignature(input.hashType)
12530 })
ebd8d4e8 12531
ab78acc6
IC
12532 // fill in blanks with OP_0
12533 if (allowIncomplete) {
12534 for (var i = 0; i < msSignatures.length; ++i) {
12535 if (msSignatures[i]) continue
ebd8d4e8 12536
ab78acc6
IC
12537 msSignatures[i] = ops.OP_0
12538 }
12539 } else {
12540 // Array.prototype.filter returns non-sparse array
12541 msSignatures = msSignatures.filter(function (x) { return x })
12542 }
ebd8d4e8 12543
ab78acc6
IC
12544 var redeemScript = allowIncomplete ? undefined : input.redeemScript
12545 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
12546 break
12547 }
ebd8d4e8 12548
ab78acc6
IC
12549 case 'pubkey': {
12550 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
12551 scriptSig = scripts.pubKeyInput(pkSignature)
12552 break
12553 }
12554 }
ebd8d4e8 12555 }
ebd8d4e8 12556
ab78acc6
IC
12557 // did we build a scriptSig?
12558 if (scriptSig) {
12559 // wrap as scriptHash if necessary
12560 if (input.prevOutType === 'scripthash') {
12561 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
12562 }
12563
12564 tx.setInputScript(index, scriptSig)
ebd8d4e8
IC
12565 }
12566 })
12567
ab78acc6 12568 return tx
ebd8d4e8
IC
12569}
12570
ab78acc6
IC
12571TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
12572 assert(index in this.inputs, 'No input at index: ' + index)
12573 hashType = hashType || Transaction.SIGHASH_ALL
ebd8d4e8 12574
ab78acc6
IC
12575 var input = this.inputs[index]
12576 var canSign = input.hashType &&
12577 input.prevOutScript &&
12578 input.prevOutType &&
12579 input.pubKeys &&
12580 input.scriptType &&
12581 input.signatures
ebd8d4e8 12582
ab78acc6
IC
12583 // are we almost ready to sign?
12584 if (canSign) {
12585 // if redeemScript was provided, enforce consistency
12586 if (redeemScript) {
12587 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
12588 }
ebd8d4e8 12589
ab78acc6 12590 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
ebd8d4e8 12591
ab78acc6
IC
12592 // no? prepare
12593 } else {
12594 // must be pay-to-scriptHash?
12595 if (redeemScript) {
12596 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
12597 if (input.prevOutScript) {
12598 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
12599
12600 var scriptHash = input.prevOutScript.chunks[1]
12601 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
12602 }
ebd8d4e8 12603
ab78acc6
IC
12604 var scriptType = scripts.classifyOutput(redeemScript)
12605 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
ebd8d4e8 12606
ab78acc6
IC
12607 var pubKeys = []
12608 switch (scriptType) {
12609 case 'multisig': {
12610 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
12611 break
12612 }
ebd8d4e8 12613
ab78acc6
IC
12614 case 'pubkeyhash': {
12615 var pkh1 = redeemScript.chunks[2]
12616 var pkh2 = privKey.pub.getAddress().hash
ebd8d4e8 12617
ab78acc6
IC
12618 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
12619 pubKeys = [privKey.pub]
12620 break
12621 }
ebd8d4e8 12622
ab78acc6
IC
12623 case 'pubkey': {
12624 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
12625 break
12626 }
12627 }
ebd8d4e8 12628
ab78acc6
IC
12629 if (!input.prevOutScript) {
12630 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
12631 input.prevOutType = 'scripthash'
12632 }
ebd8d4e8 12633
ab78acc6
IC
12634 input.pubKeys = pubKeys
12635 input.redeemScript = redeemScript
12636 input.scriptType = scriptType
ebd8d4e8 12637
ab78acc6
IC
12638 // cannot be pay-to-scriptHash
12639 } else {
12640 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
ebd8d4e8 12641
ab78acc6
IC
12642 // can we otherwise sign this?
12643 if (input.scriptType) {
12644 assert(input.pubKeys, input.scriptType + ' not supported')
ebd8d4e8 12645
ab78acc6
IC
12646 // we know nothin' Jon Snow, assume pubKeyHash
12647 } else {
12648 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
12649 input.prevOutType = 'pubkeyhash'
12650 input.pubKeys = [privKey.pub]
12651 input.scriptType = input.prevOutType
12652 }
12653 }
ebd8d4e8 12654
ab78acc6
IC
12655 input.hashType = hashType
12656 input.signatures = input.signatures || []
12657 }
12658
12659 var signatureScript = input.redeemScript || input.prevOutScript
12660 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
12661
12662 // enforce signature order matches public keys
12663 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
12664 // maintain a local copy of unmatched signatures
12665 var unmatched = input.signatures.slice()
12666
12667 input.signatures = input.pubKeys.map(function (pubKey) {
12668 var match
12669
12670 // check for any matching signatures
12671 unmatched.some(function (signature, i) {
12672 if (!pubKey.verify(signatureHash, signature)) return false
12673 match = signature
12674
12675 // remove matched signature from unmatched
12676 unmatched.splice(i, 1)
12677
12678 return true
12679 })
12680
12681 return match || undefined
12682 })
12683 }
12684
12685 // enforce in order signing of public keys
12686 assert(input.pubKeys.some(function (pubKey, i) {
12687 if (!privKey.pub.Q.equals(pubKey.Q)) return false
12688
12689 assert(!input.signatures[i], 'Signature already exists')
12690 var signature = privKey.sign(signatureHash)
12691 input.signatures[i] = signature
12692
12693 return true
12694 }, this), 'privateKey cannot sign for this input')
ebd8d4e8
IC
12695}
12696
ab78acc6 12697module.exports = TransactionBuilder
ebd8d4e8 12698
ab78acc6
IC
12699}).call(this,require("buffer").Buffer)
12700},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
ebd8d4e8 12701(function (Buffer){
ab78acc6
IC
12702var assert = require('assert')
12703var bufferutils = require('./bufferutils')
12704var typeForce = require('typeforce')
12705var networks = require('./networks')
12706var randomBytes = require('randombytes')
ebd8d4e8 12707
ab78acc6
IC
12708var Address = require('./address')
12709var HDNode = require('./hdnode')
12710var TransactionBuilder = require('./transaction_builder')
12711var Script = require('./script')
ebd8d4e8 12712
ab78acc6
IC
12713function Wallet (seed, network) {
12714 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
12715
12716 seed = seed || randomBytes(32)
ebd8d4e8
IC
12717 network = network || networks.bitcoin
12718
12719 // Stored in a closure to make accidental serialization less likely
ab78acc6
IC
12720 var masterKey = HDNode.fromSeedBuffer(seed, network)
12721
12722 // HD first-level child derivation method should be hardened
12723 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
12724 var accountZero = masterKey.deriveHardened(0)
12725 var externalAccount = accountZero.derive(0)
12726 var internalAccount = accountZero.derive(1)
ebd8d4e8 12727
ebd8d4e8
IC
12728 this.addresses = []
12729 this.changeAddresses = []
ab78acc6
IC
12730 this.network = network
12731 this.unspents = []
ebd8d4e8 12732
ab78acc6
IC
12733 // FIXME: remove in 2.0.0
12734 this.unspentMap = {}
ebd8d4e8 12735
ab78acc6
IC
12736 // FIXME: remove in 2.0.0
12737 var me = this
12738 this.newMasterKey = function (seed) {
12739 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
12740
12741 seed = seed || randomBytes(32)
12742 masterKey = HDNode.fromSeedBuffer(seed, network)
ebd8d4e8 12743
ab78acc6 12744 accountZero = masterKey.deriveHardened(0)
ebd8d4e8
IC
12745 externalAccount = accountZero.derive(0)
12746 internalAccount = accountZero.derive(1)
12747
12748 me.addresses = []
12749 me.changeAddresses = []
12750
ab78acc6
IC
12751 me.unspents = []
12752 me.unspentMap = {}
ebd8d4e8
IC
12753 }
12754
ab78acc6
IC
12755 this.getMasterKey = function () {
12756 return masterKey
ebd8d4e8 12757 }
ab78acc6
IC
12758 this.getAccountZero = function () {
12759 return accountZero
ebd8d4e8 12760 }
ab78acc6
IC
12761 this.getExternalAccount = function () {
12762 return externalAccount
12763 }
12764 this.getInternalAccount = function () {
12765 return internalAccount
ebd8d4e8 12766 }
ab78acc6 12767}
ebd8d4e8 12768
ab78acc6
IC
12769Wallet.prototype.createTransaction = function (to, value, options) {
12770 // FIXME: remove in 2.0.0
12771 if (typeof options !== 'object') {
12772 if (options !== undefined) {
12773 console.warn('Non options object parameters are deprecated, use options object instead')
ebd8d4e8 12774
ab78acc6
IC
12775 options = {
12776 fixedFee: arguments[2],
12777 changeAddress: arguments[3]
12778 }
ebd8d4e8 12779 }
ebd8d4e8
IC
12780 }
12781
ab78acc6 12782 options = options || {}
ebd8d4e8 12783
ab78acc6 12784 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
ebd8d4e8 12785
ab78acc6
IC
12786 var changeAddress = options.changeAddress
12787 var fixedFee = options.fixedFee
12788 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
ebd8d4e8 12789
ab78acc6
IC
12790 // filter by minConf, then pending and sort by descending value
12791 var unspents = this.unspents.filter(function (unspent) {
12792 return unspent.confirmations >= minConf
12793 }).filter(function (unspent) {
12794 return !unspent.pending
12795 }).sort(function (o1, o2) {
12796 return o2.value - o1.value
12797 })
ebd8d4e8 12798
ab78acc6
IC
12799 var accum = 0
12800 var addresses = []
12801 var subTotal = value
ebd8d4e8 12802
ab78acc6
IC
12803 var txb = new TransactionBuilder()
12804 txb.addOutput(to, value)
ebd8d4e8 12805
ab78acc6
IC
12806 for (var i = 0; i < unspents.length; ++i) {
12807 var unspent = unspents[i]
12808 addresses.push(unspent.address)
ebd8d4e8 12809
ab78acc6
IC
12810 txb.addInput(unspent.txHash, unspent.index)
12811
12812 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
ebd8d4e8 12813
ab78acc6
IC
12814 accum += unspent.value
12815 subTotal = value + fee
12816
12817 if (accum >= subTotal) {
12818 var change = accum - subTotal
12819
12820 if (change > this.network.dustThreshold) {
12821 txb.addOutput(changeAddress || this.getChangeAddress(), change)
ebd8d4e8 12822 }
ebd8d4e8 12823
ab78acc6 12824 break
ebd8d4e8
IC
12825 }
12826 }
12827
ab78acc6 12828 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
ebd8d4e8 12829
ab78acc6
IC
12830 return this.signWith(txb, addresses).build()
12831}
ebd8d4e8 12832
ab78acc6
IC
12833// FIXME: remove in 2.0.0
12834Wallet.prototype.processPendingTx = function (tx) {
12835 this.__processTx(tx, true)
12836}
ebd8d4e8 12837
ab78acc6
IC
12838// FIXME: remove in 2.0.0
12839Wallet.prototype.processConfirmedTx = function (tx) {
12840 this.__processTx(tx, false)
12841}
ebd8d4e8 12842
ab78acc6
IC
12843// FIXME: remove in 2.0.0
12844Wallet.prototype.__processTx = function (tx, isPending) {
12845 console.warn('processTransaction is considered harmful, see issue #260 for more information')
ebd8d4e8 12846
ab78acc6
IC
12847 var txId = tx.getId()
12848 var txHash = tx.getHash()
ebd8d4e8 12849
ab78acc6
IC
12850 tx.outs.forEach(function (txOut, i) {
12851 var address
ebd8d4e8 12852
ab78acc6
IC
12853 try {
12854 address = Address.fromOutputScript(txOut.script, this.network).toString()
12855 } catch (e) {
12856 if (!(e.message.match(/has no matching Address/)))
12857 throw e
12858 }
12859
12860 var myAddresses = this.addresses.concat(this.changeAddresses)
12861 if (myAddresses.indexOf(address) > -1) {
12862 var lookup = txId + ':' + i
12863 if (lookup in this.unspentMap) return
12864
12865 // its unique, add it
12866 var unspent = {
12867 address: address,
12868 confirmations: 0, // no way to determine this without more information
12869 index: i,
12870 txHash: txHash,
12871 txId: txId,
12872 value: txOut.value,
12873 pending: isPending
ebd8d4e8 12874 }
ebd8d4e8 12875
ab78acc6
IC
12876 this.unspentMap[lookup] = unspent
12877 this.unspents.push(unspent)
12878 }
12879 }, this)
ebd8d4e8 12880
ab78acc6
IC
12881 tx.ins.forEach(function (txIn) {
12882 // copy and convert to big-endian hex
12883 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
ebd8d4e8 12884
ab78acc6
IC
12885 var lookup = txInId + ':' + txIn.index
12886 if (!(lookup in this.unspentMap)) return
ebd8d4e8 12887
ab78acc6 12888 var unspent = this.unspentMap[lookup]
ebd8d4e8 12889
ab78acc6
IC
12890 if (isPending) {
12891 unspent.pending = true
12892 unspent.spent = true
12893 } else {
12894 delete this.unspentMap[lookup]
ebd8d4e8 12895
ab78acc6
IC
12896 this.unspents = this.unspents.filter(function (unspent2) {
12897 return unspent !== unspent2
12898 })
12899 }
12900 }, this)
12901}
ebd8d4e8 12902
ab78acc6
IC
12903Wallet.prototype.generateAddress = function () {
12904 var k = this.addresses.length
12905 var address = this.getExternalAccount().derive(k).getAddress()
ebd8d4e8 12906
ab78acc6 12907 this.addresses.push(address.toString())
ebd8d4e8 12908
ab78acc6
IC
12909 return this.getReceiveAddress()
12910}
ebd8d4e8 12911
ab78acc6
IC
12912Wallet.prototype.generateChangeAddress = function () {
12913 var k = this.changeAddresses.length
12914 var address = this.getInternalAccount().derive(k).getAddress()
ebd8d4e8 12915
ab78acc6 12916 this.changeAddresses.push(address.toString())
ebd8d4e8 12917
ab78acc6
IC
12918 return this.getChangeAddress()
12919}
ebd8d4e8 12920
ab78acc6
IC
12921Wallet.prototype.getAddress = function () {
12922 if (this.addresses.length === 0) {
12923 this.generateAddress()
ebd8d4e8
IC
12924 }
12925
ab78acc6
IC
12926 return this.addresses[this.addresses.length - 1]
12927}
ebd8d4e8 12928
ab78acc6
IC
12929Wallet.prototype.getBalance = function (minConf) {
12930 minConf = minConf || 0
ebd8d4e8 12931
ab78acc6
IC
12932 return this.unspents.filter(function (unspent) {
12933 return unspent.confirmations >= minConf
12934
12935 // FIXME: remove spent filter in 2.0.0
12936 }).filter(function (unspent) {
12937 return !unspent.spent
12938 }).reduce(function (accum, unspent) {
12939 return accum + unspent.value
12940 }, 0)
12941}
ebd8d4e8 12942
ab78acc6
IC
12943Wallet.prototype.getChangeAddress = function () {
12944 if (this.changeAddresses.length === 0) {
12945 this.generateChangeAddress()
ebd8d4e8
IC
12946 }
12947
ab78acc6
IC
12948 return this.changeAddresses[this.changeAddresses.length - 1]
12949}
12950
12951Wallet.prototype.getInternalPrivateKey = function (index) {
12952 return this.getInternalAccount().derive(index).privKey
12953}
12954
12955Wallet.prototype.getPrivateKey = function (index) {
12956 return this.getExternalAccount().derive(index).privKey
12957}
12958
12959Wallet.prototype.getPrivateKeyForAddress = function (address) {
12960 var index
ebd8d4e8 12961
ab78acc6
IC
12962 if ((index = this.addresses.indexOf(address)) > -1) {
12963 return this.getPrivateKey(index)
ebd8d4e8
IC
12964 }
12965
ab78acc6
IC
12966 if ((index = this.changeAddresses.indexOf(address)) > -1) {
12967 return this.getInternalPrivateKey(index)
ebd8d4e8
IC
12968 }
12969
ab78acc6
IC
12970 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
12971}
ebd8d4e8 12972
ab78acc6
IC
12973Wallet.prototype.getUnspentOutputs = function (minConf) {
12974 minConf = minConf || 0
ebd8d4e8 12975
ab78acc6
IC
12976 return this.unspents.filter(function (unspent) {
12977 return unspent.confirmations >= minConf
ebd8d4e8 12978
ab78acc6
IC
12979 // FIXME: remove spent filter in 2.0.0
12980 }).filter(function (unspent) {
12981 return !unspent.spent
12982 }).map(function (unspent) {
12983 return {
12984 address: unspent.address,
12985 confirmations: unspent.confirmations,
12986 index: unspent.index,
12987 txId: unspent.txId,
12988 value: unspent.value,
12989
12990 // FIXME: remove in 2.0.0
12991 hash: unspent.txId,
12992 pending: unspent.pending
12993 }
12994 })
12995}
ebd8d4e8 12996
ab78acc6
IC
12997Wallet.prototype.setUnspentOutputs = function (unspents) {
12998 this.unspentMap = {}
12999 this.unspents = unspents.map(function (unspent) {
13000 // FIXME: remove unspent.hash in 2.0.0
13001 var txId = unspent.txId || unspent.hash
13002 var index = unspent.index
ebd8d4e8 13003
ab78acc6
IC
13004 // FIXME: remove in 2.0.0
13005 if (unspent.hash !== undefined) {
13006 console.warn('unspent.hash is deprecated, use unspent.txId instead')
13007 }
ebd8d4e8 13008
ab78acc6
IC
13009 // FIXME: remove in 2.0.0
13010 if (index === undefined) {
13011 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
13012 index = unspent.outputIndex
13013 }
ebd8d4e8 13014
ab78acc6
IC
13015 typeForce('String', txId)
13016 typeForce('Number', index)
13017 typeForce('Number', unspent.value)
13018
13019 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
13020 assert.doesNotThrow(function () {
13021 Address.fromBase58Check(unspent.address)
13022 }, 'Expected Base58 Address, got ' + unspent.address)
13023 assert(isFinite(index), 'Expected finite index, got ' + index)
13024
13025 // FIXME: remove branch in 2.0.0
13026 if (unspent.confirmations !== undefined) {
13027 typeForce('Number', unspent.confirmations)
ebd8d4e8 13028 }
ebd8d4e8 13029
ab78acc6 13030 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
ebd8d4e8 13031
ab78acc6
IC
13032 unspent = {
13033 address: unspent.address,
13034 confirmations: unspent.confirmations || 0,
13035 index: index,
13036 txHash: txHash,
13037 txId: txId,
13038 value: unspent.value,
ebd8d4e8 13039
ab78acc6
IC
13040 // FIXME: remove in 2.0.0
13041 pending: unspent.pending || false
13042 }
13043
13044 // FIXME: remove in 2.0.0
13045 this.unspentMap[txId + ':' + index] = unspent
13046
13047 return unspent
13048 }, this)
13049}
13050
13051Wallet.prototype.signWith = function (tx, addresses) {
13052 addresses.forEach(function (address, i) {
13053 var privKey = this.getPrivateKeyForAddress(address)
13054
13055 tx.sign(i, privKey)
13056 }, this)
13057
13058 return tx
13059}
13060
13061function estimatePaddedFee (tx, network) {
13062 var tmpTx = tx.clone()
13063 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
13064
13065 return network.estimateFee(tmpTx)
ebd8d4e8
IC
13066}
13067
ab78acc6
IC
13068// FIXME: 1.0.0 shims, remove in 2.0.0
13069Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
13070Wallet.prototype.createTx = Wallet.prototype.createTransaction
13071
ebd8d4e8
IC
13072module.exports = Wallet
13073
ab78acc6
IC
13074}).call(this,require("buffer").Buffer)
13075},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
13076});</script>
d5dc92fd
IC
13077 <script>bitcoin.networks.shadow = {
13078 magicPrefix: '\x19ShadowCash Signed Message:\n',
13079 bip32: {
13080 public: 0xEE80286A,
13081 private: 0xEE8031E8
13082 },
13083 pubKeyHash: 0x3f,
13084 scriptHash: 0x7d,
13085 wif: 0xbf,
13086 dustThreshold: 0,
13087 feePerKb: 1000,
13088 estimateFee: function() { return "unused in this app" },
13089};
13090
13091bitcoin.networks.shadowtn = {
13092 magicPrefix: '\x19ShadowCash Signed Message:\n',
13093 bip32: {
13094 public: 0x76C0FDFB,
13095 private: 0x76C1077A
13096 },
13097 pubKeyHash: 0x7f,
13098 scriptHash: 0xc4,
13099 wif: 0xff,
13100 dustThreshold: 0,
13101 feePerKb: 1000,
13102 estimateFee: function() { return "unused in this app" },
13103};
5c434a8a
CM
13104
13105bitcoin.networks.clam = {
13106 bip32: {
13107 public: 0xa8c26d64,
13108 private: 0xa8c17826
13109 },
13110 pubKeyHash: 0x89,
13111 wif: 0x85,
13112};
d5dc92fd 13113</script>
ab78acc6 13114 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
13115
13116//// base.js
13117
13118/** @fileOverview Javascript cryptography implementation.
13119 *
13120 * Crush to remove comments, shorten variable names and
13121 * generally reduce transmission size.
13122 *
13123 * @author Emily Stark
13124 * @author Mike Hamburg
13125 * @author Dan Boneh
13126 */
13127
13128"use strict";
13129/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
13130/*global document, window, escape, unescape, module, require, Uint32Array */
13131
13132/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
13133var sjcl = {
13134 /** @namespace Symmetric ciphers. */
13135 cipher: {},
13136
13137 /** @namespace Hash functions. Right now only SHA256 is implemented. */
13138 hash: {},
13139
13140 /** @namespace Key exchange functions. Right now only SRP is implemented. */
13141 keyexchange: {},
13142
13143 /** @namespace Block cipher modes of operation. */
13144 mode: {},
13145
13146 /** @namespace Miscellaneous. HMAC and PBKDF2. */
13147 misc: {},
13148
13149 /**
13150 * @namespace Bit array encoders and decoders.
13151 *
13152 * @description
13153 * The members of this namespace are functions which translate between
13154 * SJCL's bitArrays and other objects (usually strings). Because it
13155 * isn't always clear which direction is encoding and which is decoding,
13156 * the method names are "fromBits" and "toBits".
13157 */
13158 codec: {},
13159
13160 /** @namespace Exceptions. */
13161 exception: {
13162 /** @constructor Ciphertext is corrupt. */
13163 corrupt: function(message) {
13164 this.toString = function() { return "CORRUPT: "+this.message; };
13165 this.message = message;
13166 },
13167
13168 /** @constructor Invalid parameter. */
13169 invalid: function(message) {
13170 this.toString = function() { return "INVALID: "+this.message; };
13171 this.message = message;
13172 },
13173
13174 /** @constructor Bug or missing feature in SJCL. @constructor */
13175 bug: function(message) {
13176 this.toString = function() { return "BUG: "+this.message; };
13177 this.message = message;
13178 },
13179
13180 /** @constructor Something isn't ready. */
13181 notReady: function(message) {
13182 this.toString = function() { return "NOT READY: "+this.message; };
13183 this.message = message;
ebd8d4e8 13184 }
80c4dd2a
IC
13185 }
13186};
13187
13188if(typeof module !== 'undefined' && module.exports){
13189 module.exports = sjcl;
13190}
13191if (typeof define === "function") {
13192 define([], function () {
13193 return sjcl;
13194 });
13195}
13196
13197
13198//// bitArray.js
13199
13200/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
13201 *
13202 * @author Emily Stark
13203 * @author Mike Hamburg
13204 * @author Dan Boneh
13205 */
13206
13207/** @namespace Arrays of bits, encoded as arrays of Numbers.
13208 *
13209 * @description
13210 * <p>
13211 * These objects are the currency accepted by SJCL's crypto functions.
13212 * </p>
13213 *
13214 * <p>
13215 * Most of our crypto primitives operate on arrays of 4-byte words internally,
13216 * but many of them can take arguments that are not a multiple of 4 bytes.
13217 * This library encodes arrays of bits (whose size need not be a multiple of 8
13218 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
13219 * array of words, 32 bits at a time. Since the words are double-precision
13220 * floating point numbers, they fit some extra data. We use this (in a private,
13221 * possibly-changing manner) to encode the number of bits actually present
13222 * in the last word of the array.
13223 * </p>
13224 *
13225 * <p>
13226 * Because bitwise ops clear this out-of-band data, these arrays can be passed
13227 * to ciphers like AES which want arrays of words.
13228 * </p>
13229 */
13230sjcl.bitArray = {
13231 /**
13232 * Array slices in units of bits.
13233 * @param {bitArray} a The array to slice.
13234 * @param {Number} bstart The offset to the start of the slice, in bits.
13235 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
13236 * slice until the end of the array.
13237 * @return {bitArray} The requested slice.
13238 */
13239 bitSlice: function (a, bstart, bend) {
13240 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
13241 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
13242 },
13243
13244 /**
13245 * Extract a number packed into a bit array.
13246 * @param {bitArray} a The array to slice.
13247 * @param {Number} bstart The offset to the start of the slice, in bits.
13248 * @param {Number} length The length of the number to extract.
13249 * @return {Number} The requested slice.
13250 */
13251 extract: function(a, bstart, blength) {
13252 // FIXME: this Math.floor is not necessary at all, but for some reason
13253 // seems to suppress a bug in the Chromium JIT.
13254 var x, sh = Math.floor((-bstart-blength) & 31);
13255 if ((bstart + blength - 1 ^ bstart) & -32) {
13256 // it crosses a boundary
13257 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
13258 } else {
13259 // within a single word
13260 x = a[bstart/32|0] >>> sh;
ebd8d4e8 13261 }
80c4dd2a
IC
13262 return x & ((1<<blength) - 1);
13263 },
13264
13265 /**
13266 * Concatenate two bit arrays.
13267 * @param {bitArray} a1 The first array.
13268 * @param {bitArray} a2 The second array.
13269 * @return {bitArray} The concatenation of a1 and a2.
13270 */
13271 concat: function (a1, a2) {
13272 if (a1.length === 0 || a2.length === 0) {
13273 return a1.concat(a2);
13274 }
13275
13276 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
13277 if (shift === 32) {
13278 return a1.concat(a2);
13279 } else {
13280 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 13281 }
80c4dd2a
IC
13282 },
13283
13284 /**
13285 * Find the length of an array of bits.
13286 * @param {bitArray} a The array.
13287 * @return {Number} The length of a, in bits.
13288 */
13289 bitLength: function (a) {
13290 var l = a.length, x;
13291 if (l === 0) { return 0; }
13292 x = a[l - 1];
13293 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
13294 },
13295
13296 /**
13297 * Truncate an array.
13298 * @param {bitArray} a The array.
13299 * @param {Number} len The length to truncate to, in bits.
13300 * @return {bitArray} A new array, truncated to len bits.
13301 */
13302 clamp: function (a, len) {
13303 if (a.length * 32 < len) { return a; }
13304 a = a.slice(0, Math.ceil(len / 32));
13305 var l = a.length;
13306 len = len & 31;
13307 if (l > 0 && len) {
13308 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
13309 }
13310 return a;
13311 },
13312
13313 /**
13314 * Make a partial word for a bit array.
13315 * @param {Number} len The number of bits in the word.
13316 * @param {Number} x The bits.
13317 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
13318 * @return {Number} The partial word.
13319 */
13320 partial: function (len, x, _end) {
13321 if (len === 32) { return x; }
13322 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
13323 },
13324
13325 /**
13326 * Get the number of bits used by a partial word.
13327 * @param {Number} x The partial word.
13328 * @return {Number} The number of bits used by the partial word.
13329 */
13330 getPartial: function (x) {
13331 return Math.round(x/0x10000000000) || 32;
13332 },
13333
13334 /**
13335 * Compare two arrays for equality in a predictable amount of time.
13336 * @param {bitArray} a The first array.
13337 * @param {bitArray} b The second array.
13338 * @return {boolean} true if a == b; false otherwise.
13339 */
13340 equal: function (a, b) {
13341 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
13342 return false;
ebd8d4e8 13343 }
80c4dd2a
IC
13344 var x = 0, i;
13345 for (i=0; i<a.length; i++) {
13346 x |= a[i]^b[i];
ebd8d4e8 13347 }
80c4dd2a
IC
13348 return (x === 0);
13349 },
13350
13351 /** Shift an array right.
13352 * @param {bitArray} a The array to shift.
13353 * @param {Number} shift The number of bits to shift.
13354 * @param {Number} [carry=0] A byte to carry in
13355 * @param {bitArray} [out=[]] An array to prepend to the output.
13356 * @private
13357 */
13358 _shiftRight: function (a, shift, carry, out) {
13359 var i, last2=0, shift2;
13360 if (out === undefined) { out = []; }
13361
13362 for (; shift >= 32; shift -= 32) {
13363 out.push(carry);
13364 carry = 0;
13365 }
13366 if (shift === 0) {
13367 return out.concat(a);
13368 }
13369
13370 for (i=0; i<a.length; i++) {
13371 out.push(carry | a[i]>>>shift);
13372 carry = a[i] << (32-shift);
13373 }
13374 last2 = a.length ? a[a.length-1] : 0;
13375 shift2 = sjcl.bitArray.getPartial(last2);
13376 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
13377 return out;
13378 },
13379
13380 /** xor a block of 4 words together.
13381 * @private
13382 */
13383 _xor4: function(x,y) {
13384 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
13385 },
13386
13387 /** byteswap a word array inplace.
13388 * (does not handle partial words)
13389 * @param {sjcl.bitArray} a word array
13390 * @return {sjcl.bitArray} byteswapped array
13391 */
13392 byteswapM: function(a) {
13393 var i, v, m = 0xff00;
13394 for (i = 0; i < a.length; ++i) {
13395 v = a[i];
13396 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 13397 }
80c4dd2a
IC
13398 return a;
13399 }
13400};
13401
13402
13403//// codecString.js
13404
13405/** @fileOverview Bit array codec implementations.
13406 *
13407 * @author Emily Stark
13408 * @author Mike Hamburg
13409 * @author Dan Boneh
13410 */
13411
13412/** @namespace UTF-8 strings */
13413sjcl.codec.utf8String = {
13414 /** Convert from a bitArray to a UTF-8 string. */
13415 fromBits: function (arr) {
13416 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
13417 for (i=0; i<bl/8; i++) {
13418 if ((i&3) === 0) {
13419 tmp = arr[i/4];
13420 }
13421 out += String.fromCharCode(tmp >>> 24);
13422 tmp <<= 8;
ebd8d4e8 13423 }
80c4dd2a
IC
13424 return decodeURIComponent(escape(out));
13425 },
13426
13427 /** Convert from a UTF-8 string to a bitArray. */
13428 toBits: function (str) {
13429 str = unescape(encodeURIComponent(str));
13430 var out = [], i, tmp=0;
13431 for (i=0; i<str.length; i++) {
13432 tmp = tmp << 8 | str.charCodeAt(i);
13433 if ((i&3) === 3) {
13434 out.push(tmp);
13435 tmp = 0;
13436 }
ebd8d4e8 13437 }
80c4dd2a
IC
13438 if (i&3) {
13439 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 13440 }
80c4dd2a
IC
13441 return out;
13442 }
13443};
13444
13445
13446//// codecHex.js
13447
13448/** @fileOverview Bit array codec implementations.
13449 *
13450 * @author Emily Stark
13451 * @author Mike Hamburg
13452 * @author Dan Boneh
13453 */
13454
13455/** @namespace Hexadecimal */
13456sjcl.codec.hex = {
13457 /** Convert from a bitArray to a hex string. */
13458 fromBits: function (arr) {
13459 var out = "", i;
13460 for (i=0; i<arr.length; i++) {
13461 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 13462 }
80c4dd2a
IC
13463 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
13464 },
13465 /** Convert from a hex string to a bitArray. */
13466 toBits: function (str) {
13467 var i, out=[], len;
13468 str = str.replace(/\s|0x/g, "");
13469 len = str.length;
13470 str = str + "00000000";
13471 for (i=0; i<str.length; i+=8) {
13472 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 13473 }
80c4dd2a
IC
13474 return sjcl.bitArray.clamp(out, len*4);
13475 }
13476};
13477
13478
13479//// sha512.js
13480
13481/** @fileOverview Javascript SHA-512 implementation.
13482 *
13483 * This implementation was written for CryptoJS by Jeff Mott and adapted for
13484 * SJCL by Stefan Thomas.
13485 *
13486 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
13487 * Released with New BSD License
13488 *
13489 * @author Emily Stark
13490 * @author Mike Hamburg
13491 * @author Dan Boneh
13492 * @author Jeff Mott
13493 * @author Stefan Thomas
13494 */
13495
13496/**
13497 * Context for a SHA-512 operation in progress.
13498 * @constructor
13499 * @class Secure Hash Algorithm, 512 bits.
13500 */
13501sjcl.hash.sha512 = function (hash) {
13502 if (!this._key[0]) { this._precompute(); }
13503 if (hash) {
13504 this._h = hash._h.slice(0);
13505 this._buffer = hash._buffer.slice(0);
13506 this._length = hash._length;
13507 } else {
13508 this.reset();
13509 }
13510};
13511
13512/**
13513 * Hash a string or an array of words.
13514 * @static
13515 * @param {bitArray|String} data the data to hash.
13516 * @return {bitArray} The hash value, an array of 16 big-endian words.
13517 */
13518sjcl.hash.sha512.hash = function (data) {
13519 return (new sjcl.hash.sha512()).update(data).finalize();
13520};
13521
13522sjcl.hash.sha512.prototype = {
13523 /**
13524 * The hash's block size, in bits.
13525 * @constant
13526 */
13527 blockSize: 1024,
13528
13529 /**
13530 * Reset the hash state.
13531 * @return this
13532 */
13533 reset:function () {
13534 this._h = this._init.slice(0);
13535 this._buffer = [];
13536 this._length = 0;
13537 return this;
13538 },
13539
13540 /**
13541 * Input several words to the hash.
13542 * @param {bitArray|String} data the data to hash.
13543 * @return this
13544 */
13545 update: function (data) {
13546 if (typeof data === "string") {
13547 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 13548 }
80c4dd2a
IC
13549 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
13550 ol = this._length,
13551 nl = this._length = ol + sjcl.bitArray.bitLength(data);
13552 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
13553 this._block(b.splice(0,32));
ebd8d4e8 13554 }
80c4dd2a
IC
13555 return this;
13556 },
13557
13558 /**
13559 * Complete hashing and output the hash value.
13560 * @return {bitArray} The hash value, an array of 16 big-endian words.
13561 */
13562 finalize:function () {
13563 var i, b = this._buffer, h = this._h;
13564
13565 // Round out and push the buffer
13566 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
13567
13568 // Round out the buffer to a multiple of 32 words, less the 4 length words.
13569 for (i = b.length + 4; i & 31; i++) {
13570 b.push(0);
ebd8d4e8 13571 }
80c4dd2a
IC
13572
13573 // append the length
13574 b.push(0);
13575 b.push(0);
13576 b.push(Math.floor(this._length / 0x100000000));
13577 b.push(this._length | 0);
13578
13579 while (b.length) {
13580 this._block(b.splice(0,32));
ebd8d4e8 13581 }
80c4dd2a
IC
13582
13583 this.reset();
13584 return h;
13585 },
13586
13587 /**
13588 * The SHA-512 initialization vector, to be precomputed.
13589 * @private
13590 */
13591 _init:[],
13592
13593 /**
13594 * Least significant 24 bits of SHA512 initialization values.
13595 *
13596 * Javascript only has 53 bits of precision, so we compute the 40 most
13597 * significant bits and add the remaining 24 bits as constants.
13598 *
13599 * @private
13600 */
13601 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
13602
13603 /*
13604 _init:
13605 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
13606 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
13607 */
13608
13609 /**
13610 * The SHA-512 hash key, to be precomputed.
13611 * @private
13612 */
13613 _key:[],
13614
13615 /**
13616 * Least significant 24 bits of SHA512 key values.
13617 * @private
13618 */
13619 _keyr:
13620 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
13621 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
13622 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
13623 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
13624 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
13625 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
13626 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
13627 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
13628 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
13629 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
13630
13631 /*
13632 _key:
13633 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
13634 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
13635 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
13636 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
13637 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
13638 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
13639 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
13640 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
13641 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
13642 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
13643 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
13644 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
13645 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
13646 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
13647 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
13648 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
13649 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
13650 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
13651 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
13652 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
13653 */
13654
13655 /**
13656 * Function to precompute _init and _key.
13657 * @private
13658 */
13659 _precompute: function () {
13660 // XXX: This code is for precomputing the SHA256 constants, change for
13661 // SHA512 and re-enable.
13662 var i = 0, prime = 2, factor;
13663
13664 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
13665 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
13666
13667 outer: for (; i<80; prime++) {
13668 for (factor=2; factor*factor <= prime; factor++) {
13669 if (prime % factor === 0) {
13670 // not a prime
13671 continue outer;
ebd8d4e8 13672 }
80c4dd2a
IC
13673 }
13674
13675 if (i<8) {
13676 this._init[i*2] = frac(Math.pow(prime, 1/2));
13677 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
13678 }
13679 this._key[i*2] = frac(Math.pow(prime, 1/3));
13680 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
13681 i++;
ebd8d4e8 13682 }
80c4dd2a
IC
13683 },
13684
13685 /**
13686 * Perform one cycle of SHA-512.
13687 * @param {bitArray} words one block of words.
13688 * @private
13689 */
13690 _block:function (words) {
13691 var i, wrh, wrl,
13692 w = words.slice(0),
13693 h = this._h,
13694 k = this._key,
13695 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
13696 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
13697 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
13698 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
13699
13700 // Working variables
13701 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
13702 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
13703 eh = h4h, el = h4l, fh = h5h, fl = h5l,
13704 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
13705
13706 for (i=0; i<80; i++) {
13707 // load up the input word for this round
13708 if (i<16) {
13709 wrh = w[i * 2];
13710 wrl = w[i * 2 + 1];
13711 } else {
13712 // Gamma0
13713 var gamma0xh = w[(i-15) * 2];
13714 var gamma0xl = w[(i-15) * 2 + 1];
13715 var gamma0h =
13716 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
13717 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
13718 (gamma0xh >>> 7);
13719 var gamma0l =
13720 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
13721 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
13722 ((gamma0xh << 25) | (gamma0xl >>> 7));
13723
13724 // Gamma1
13725 var gamma1xh = w[(i-2) * 2];
13726 var gamma1xl = w[(i-2) * 2 + 1];
13727 var gamma1h =
13728 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
13729 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
13730 (gamma1xh >>> 6);
13731 var gamma1l =
13732 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
13733 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
13734 ((gamma1xh << 26) | (gamma1xl >>> 6));
13735
13736 // Shortcuts
13737 var wr7h = w[(i-7) * 2];
13738 var wr7l = w[(i-7) * 2 + 1];
13739
13740 var wr16h = w[(i-16) * 2];
13741 var wr16l = w[(i-16) * 2 + 1];
13742
13743 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
13744 wrl = gamma0l + wr7l;
13745 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
13746 wrl += gamma1l;
13747 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
13748 wrl += wr16l;
13749 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
13750 }
13751
13752 w[i*2] = wrh |= 0;
13753 w[i*2 + 1] = wrl |= 0;
13754
13755 // Ch
13756 var chh = (eh & fh) ^ (~eh & gh);
13757 var chl = (el & fl) ^ (~el & gl);
13758
13759 // Maj
13760 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
13761 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
13762
13763 // Sigma0
13764 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
13765 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
13766
13767 // Sigma1
13768 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
13769 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
13770
13771 // K(round)
13772 var krh = k[i*2];
13773 var krl = k[i*2+1];
13774
13775 // t1 = h + sigma1 + ch + K(round) + W(round)
13776 var t1l = hl + sigma1l;
13777 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
13778 t1l += chl;
13779 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
13780 t1l += krl;
13781 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
13782 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
13783 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
13784
13785 // t2 = sigma0 + maj
13786 var t2l = sigma0l + majl;
13787 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
13788
13789 // Update working variables
13790 hh = gh;
13791 hl = gl;
13792 gh = fh;
13793 gl = fl;
13794 fh = eh;
13795 fl = el;
13796 el = (dl + t1l) | 0;
13797 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13798 dh = ch;
13799 dl = cl;
13800 ch = bh;
13801 cl = bl;
13802 bh = ah;
13803 bl = al;
13804 al = (t1l + t2l) | 0;
13805 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
13806 }
13807
13808 // Intermediate hash
13809 h0l = h[1] = (h0l + al) | 0;
13810 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
13811 h1l = h[3] = (h1l + bl) | 0;
13812 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
13813 h2l = h[5] = (h2l + cl) | 0;
13814 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
13815 h3l = h[7] = (h3l + dl) | 0;
13816 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
13817 h4l = h[9] = (h4l + el) | 0;
13818 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
13819 h5l = h[11] = (h5l + fl) | 0;
13820 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
13821 h6l = h[13] = (h6l + gl) | 0;
13822 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
13823 h7l = h[15] = (h7l + hl) | 0;
13824 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
13825 }
13826};
13827
13828
13829//// hmac.js
13830
13831/** @fileOverview HMAC implementation.
13832 *
13833 * @author Emily Stark
13834 * @author Mike Hamburg
13835 * @author Dan Boneh
13836 */
13837
13838/** HMAC with the specified hash function.
13839 * @constructor
13840 * @param {bitArray} key the key for HMAC.
13841 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
13842 */
13843sjcl.misc.hmac = function (key, Hash) {
13844 this._hash = Hash = Hash || sjcl.hash.sha256;
13845 var exKey = [[],[]], i,
13846 bs = Hash.prototype.blockSize / 32;
13847 this._baseHash = [new Hash(), new Hash()];
13848
13849 if (key.length > bs) {
13850 key = Hash.hash(key);
13851 }
13852
13853 for (i=0; i<bs; i++) {
13854 exKey[0][i] = key[i]^0x36363636;
13855 exKey[1][i] = key[i]^0x5C5C5C5C;
13856 }
13857
13858 this._baseHash[0].update(exKey[0]);
13859 this._baseHash[1].update(exKey[1]);
13860 this._resultHash = new Hash(this._baseHash[0]);
13861};
13862
13863/** HMAC with the specified hash function. Also called encrypt since it's a prf.
13864 * @param {bitArray|String} data The data to mac.
13865 */
13866sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
13867 if (!this._updated) {
13868 this.update(data);
13869 return this.digest(data);
13870 } else {
13871 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
13872 }
13873};
13874
13875sjcl.misc.hmac.prototype.reset = function () {
13876 this._resultHash = new this._hash(this._baseHash[0]);
13877 this._updated = false;
13878};
13879
13880sjcl.misc.hmac.prototype.update = function (data) {
13881 this._updated = true;
13882 this._resultHash.update(data);
13883};
13884
13885sjcl.misc.hmac.prototype.digest = function () {
13886 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
13887
13888 this.reset();
13889
13890 return result;
13891};
13892
13893
13894//// pbkdf2.js
13895
13896
13897/** @fileOverview Password-based key-derivation function, version 2.0.
13898 *
13899 * @author Emily Stark
13900 * @author Mike Hamburg
13901 * @author Dan Boneh
13902 */
13903
13904/** Password-Based Key-Derivation Function, version 2.0.
13905 *
13906 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
13907 *
13908 * This is the method specified by RSA's PKCS #5 standard.
13909 *
13910 * @param {bitArray|String} password The password.
13911 * @param {bitArray|String} salt The salt. Should have lots of entropy.
13912 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
13913 * @param {Number} [length] The length of the derived key. Defaults to the
13914 output size of the hash function.
13915 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
13916 * @return {bitArray} the derived key.
13917 */
13918sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
13919 count = count || 1000;
13920
13921 if (length < 0 || count < 0) {
13922 throw sjcl.exception.invalid("invalid params to pbkdf2");
13923 }
13924
13925 if (typeof password === "string") {
13926 password = sjcl.codec.utf8String.toBits(password);
13927 }
13928
13929 if (typeof salt === "string") {
13930 salt = sjcl.codec.utf8String.toBits(salt);
13931 }
13932
13933 Prff = Prff || sjcl.misc.hmac;
13934
13935 var prf = new Prff(password),
13936 u, ui, i, j, k, out = [], b = sjcl.bitArray;
13937
13938 for (k = 1; 32 * out.length < (length || 1); k++) {
13939 u = ui = prf.encrypt(b.concat(salt,[k]));
13940
13941 for (i=1; i<count; i++) {
13942 ui = prf.encrypt(ui);
13943 for (j=0; j<ui.length; j++) {
13944 u[j] ^= ui[j];
13945 }
ebd8d4e8 13946 }
80c4dd2a
IC
13947
13948 out = out.concat(u);
13949 }
13950
13951 if (length) { out = b.clamp(out, length); }
13952
13953 return out;
13954};
13955
13956
13957//// sha256.js
13958
13959/** @fileOverview Javascript SHA-256 implementation.
13960 *
13961 * An older version of this implementation is available in the public
13962 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
13963 * Stanford University 2008-2010 and BSD-licensed for liability
13964 * reasons.
13965 *
13966 * Special thanks to Aldo Cortesi for pointing out several bugs in
13967 * this code.
13968 *
13969 * @author Emily Stark
13970 * @author Mike Hamburg
13971 * @author Dan Boneh
13972 */
13973
13974/**
13975 * Context for a SHA-256 operation in progress.
13976 * @constructor
13977 * @class Secure Hash Algorithm, 256 bits.
13978 */
13979sjcl.hash.sha256 = function (hash) {
13980 if (!this._key[0]) { this._precompute(); }
13981 if (hash) {
13982 this._h = hash._h.slice(0);
13983 this._buffer = hash._buffer.slice(0);
13984 this._length = hash._length;
13985 } else {
13986 this.reset();
13987 }
13988};
13989
13990/**
13991 * Hash a string or an array of words.
13992 * @static
13993 * @param {bitArray|String} data the data to hash.
13994 * @return {bitArray} The hash value, an array of 16 big-endian words.
13995 */
13996sjcl.hash.sha256.hash = function (data) {
13997 return (new sjcl.hash.sha256()).update(data).finalize();
13998};
13999
14000sjcl.hash.sha256.prototype = {
14001 /**
14002 * The hash's block size, in bits.
14003 * @constant
14004 */
14005 blockSize: 512,
14006
14007 /**
14008 * Reset the hash state.
14009 * @return this
14010 */
14011 reset:function () {
14012 this._h = this._init.slice(0);
14013 this._buffer = [];
14014 this._length = 0;
14015 return this;
14016 },
14017
14018 /**
14019 * Input several words to the hash.
14020 * @param {bitArray|String} data the data to hash.
14021 * @return this
14022 */
14023 update: function (data) {
14024 if (typeof data === "string") {
14025 data = sjcl.codec.utf8String.toBits(data);
14026 }
14027 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
14028 ol = this._length,
14029 nl = this._length = ol + sjcl.bitArray.bitLength(data);
14030 for (i = 512+ol & -512; i <= nl; i+= 512) {
14031 this._block(b.splice(0,16));
ebd8d4e8 14032 }
3af2954a 14033 return this;
80c4dd2a
IC
14034 },
14035
14036 /**
14037 * Complete hashing and output the hash value.
14038 * @return {bitArray} The hash value, an array of 8 big-endian words.
14039 */
14040 finalize:function () {
14041 var i, b = this._buffer, h = this._h;
14042
14043 // Round out and push the buffer
14044 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
14045
14046 // Round out the buffer to a multiple of 16 words, less the 2 length words.
14047 for (i = b.length + 2; i & 15; i++) {
14048 b.push(0);
14049 }
14050
14051 // append the length
14052 b.push(Math.floor(this._length / 0x100000000));
14053 b.push(this._length | 0);
14054
14055 while (b.length) {
14056 this._block(b.splice(0,16));
14057 }
14058
14059 this.reset();
14060 return h;
14061 },
14062
14063 /**
14064 * The SHA-256 initialization vector, to be precomputed.
14065 * @private
14066 */
14067 _init:[],
14068 /*
14069 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
14070 */
14071
14072 /**
14073 * The SHA-256 hash key, to be precomputed.
14074 * @private
14075 */
14076 _key:[],
14077 /*
14078 _key:
14079 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
14080 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
14081 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
14082 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
14083 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
14084 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
14085 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
14086 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
14087 */
14088
14089
14090 /**
14091 * Function to precompute _init and _key.
14092 * @private
14093 */
14094 _precompute: function () {
14095 var i = 0, prime = 2, factor;
14096
14097 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
14098
14099 outer: for (; i<64; prime++) {
14100 for (factor=2; factor*factor <= prime; factor++) {
14101 if (prime % factor === 0) {
14102 // not a prime
14103 continue outer;
ebd8d4e8 14104 }
80c4dd2a
IC
14105 }
14106
14107 if (i<8) {
14108 this._init[i] = frac(Math.pow(prime, 1/2));
14109 }
14110 this._key[i] = frac(Math.pow(prime, 1/3));
14111 i++;
ebd8d4e8 14112 }
80c4dd2a
IC
14113 },
14114
14115 /**
14116 * Perform one cycle of SHA-256.
14117 * @param {bitArray} words one block of words.
14118 * @private
14119 */
14120 _block:function (words) {
14121 var i, tmp, a, b,
14122 w = words.slice(0),
14123 h = this._h,
14124 k = this._key,
14125 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
14126 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
14127
14128 /* Rationale for placement of |0 :
14129 * If a value can overflow is original 32 bits by a factor of more than a few
14130 * million (2^23 ish), there is a possibility that it might overflow the
14131 * 53-bit mantissa and lose precision.
14132 *
14133 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
14134 * propagates around the loop, and on the hash state h[]. I don't believe
14135 * that the clamps on h4 and on h0 are strictly necessary, but it's close
14136 * (for h4 anyway), and better safe than sorry.
14137 *
14138 * The clamps on h[] are necessary for the output to be correct even in the
14139 * common case and for short inputs.
14140 */
14141 for (i=0; i<64; i++) {
14142 // load up the input word for this round
14143 if (i<16) {
14144 tmp = w[i];
14145 } else {
14146 a = w[(i+1 ) & 15];
14147 b = w[(i+14) & 15];
14148 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
14149 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
14150 w[i&15] + w[(i+9) & 15]) | 0;
14151 }
14152
14153 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
14154
14155 // shift register
14156 h7 = h6; h6 = h5; h5 = h4;
14157 h4 = h3 + tmp | 0;
14158 h3 = h2; h2 = h1; h1 = h0;
14159
14160 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
14161 }
14162
14163 h[0] = h[0]+h0 | 0;
14164 h[1] = h[1]+h1 | 0;
14165 h[2] = h[2]+h2 | 0;
14166 h[3] = h[3]+h3 | 0;
14167 h[4] = h[4]+h4 | 0;
14168 h[5] = h[5]+h5 | 0;
14169 h[6] = h[6]+h6 | 0;
14170 h[7] = h[7]+h7 | 0;
14171 }
14172};
dc55c6b0 14173</script>
ab78acc6 14174 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 14175WORDLISTS["english"] = [
ebd8d4e8
IC
14176"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
14177"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
14178"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
14179"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
14180"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
14181"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
14182"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
14183"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
14184"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
14185"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
14186"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
14187"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
14188"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
14189"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
14190"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
14191"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
14192"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
14193"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
14194"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
14195"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
14196"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
14197"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
14198"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
14199"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
14200"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
14201"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
14202"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
14203"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
14204"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
14205"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
14206"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
14207"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
14208"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
14209"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
14210"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
14211"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
14212"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
14213"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
14214"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
14215"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
14216"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
14217"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
14218"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
14219"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
14220"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
14221"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
14222"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
14223"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
14224"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
14225"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
14226"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
14227"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
14228"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
14229"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
14230"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
14231"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
14232"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
14233"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
14234"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
14235"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
14236"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
14237"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
14238"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
14239"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
14240"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
14241"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
14242"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
14243"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
14244"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
14245"film","filter","final","find","fine","finger","finish","fire","firm","first",
14246"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
14247"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
14248"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
14249"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
14250"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
14251"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
14252"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
14253"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
14254"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
14255"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
14256"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
14257"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
14258"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
14259"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
14260"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
14261"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
14262"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
14263"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
14264"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
14265"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
14266"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
14267"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
14268"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
14269"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
14270"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
14271"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
14272"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
14273"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
14274"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
14275"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
14276"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
14277"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
14278"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
14279"liar","liberty","library","license","life","lift","light","like","limb","limit",
14280"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
14281"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
14282"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
14283"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
14284"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
14285"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
14286"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
14287"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
14288"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
14289"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
14290"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
14291"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
14292"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
14293"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
14294"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
14295"network","neutral","never","news","next","nice","night","noble","noise","nominee",
14296"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
14297"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
14298"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
14299"oil","okay","old","olive","olympic","omit","once","one","onion","online",
14300"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
14301"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
14302"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
14303"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
14304"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
14305"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
14306"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
14307"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
14308"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
14309"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
14310"pole","police","pond","pony","pool","popular","portion","position","possible","post",
14311"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
14312"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
14313"prize","problem","process","produce","profit","program","project","promote","proof","property",
14314"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
14315"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
14316"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
14317"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
14318"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
14319"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
14320"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
14321"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
14322"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
14323"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
14324"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
14325"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
14326"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
14327"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
14328"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
14329"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
14330"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
14331"scrub","sea","search","season","seat","second","secret","section","security","seed",
14332"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
14333"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
14334"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
14335"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
14336"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
14337"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
14338"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
14339"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
14340"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
14341"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
14342"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
14343"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
14344"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
14345"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
14346"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
14347"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
14348"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
14349"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
14350"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
14351"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
14352"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
14353"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
14354"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
14355"thank","that","theme","then","theory","there","they","thing","this","thought",
14356"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
14357"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
14358"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
14359"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
14360"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
14361"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
14362"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
14363"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
14364"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
14365"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
14366"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
14367"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
14368"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
14369"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
14370"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
14371"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
14372"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
14373"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
14374"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
14375"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
14376"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
14377"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
14378"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
14379"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
14380"yellow","you","young","youth","zebra","zero","zone","zoo"]
dc55c6b0 14381</script>
ab78acc6 14382 <script>/*
3af2954a
IC
14383 * Copyright (c) 2013 Pavol Rusnak
14384 *
14385 * Permission is hereby granted, free of charge, to any person obtaining a copy of
14386 * this software and associated documentation files (the "Software"), to deal in
14387 * the Software without restriction, including without limitation the rights to
14388 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
14389 * of the Software, and to permit persons to whom the Software is furnished to do
14390 * so, subject to the following conditions:
14391 *
14392 * The above copyright notice and this permission notice shall be included in all
14393 * copies or substantial portions of the Software.
14394 *
14395 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14396 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14397 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14398 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
14399 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
14400 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
14401 */
14402
14403/*
14404 * Javascript port from python by Ian Coleman
14405 *
80c4dd2a
IC
14406 * Requires code from sjcl
14407 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
14408 */
14409
14410var Mnemonic = function(language) {
14411
14412 var PBKDF2_ROUNDS = 2048;
14413 var RADIX = 2048;
14414
14415 var self = this;
14416 var wordlist = [];
14417
80c4dd2a
IC
14418 var hmacSHA512 = function(key) {
14419 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
14420 this.encrypt = function() {
14421 return hasher.encrypt.apply(hasher, arguments);
14422 };
14423 };
14424
3af2954a
IC
14425 function init() {
14426 wordlist = WORDLISTS[language];
14427 if (wordlist.length != RADIX) {
14428 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
14429 throw err;
14430 }
14431 }
14432
14433 self.generate = function(strength) {
14434 strength = strength || 128;
14435 var r = strength % 32;
14436 if (r > 0) {
14437 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
14438 }
14439 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
14440 if (!hasStrongCrypto) {
14441 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
14442 }
14443 var buffer = new Uint8Array(strength / 8);
14444 var data = crypto.getRandomValues(buffer);
14445 return self.toMnemonic(data);
14446 }
14447
80c4dd2a
IC
14448 self.toMnemonic = function(byteArray) {
14449 if (byteArray.length % 4 > 0) {
14450 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
14451 }
14452
14453 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
14454 var data = byteArrayToWordArray(byteArray);
14455 var hash = sjcl.hash.sha256.hash(data);
14456 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
14457
14458 // b is a binary string, eg '00111010101100...'
14459 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
14460 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
14461 //
14462 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
14463 // c = bin(int(h, 16))[2:].zfill(256)
14464 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
14465 var a = byteArrayToBinaryString(byteArray);
14466 var c = zfill(hexStringToBinaryString(h), 256);
14467 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
14468 // b = line1 + line2
14469 var b = a + d;
14470
14471 var result = [];
14472 var blen = b.length / 11;
14473 for (var i=0; i<blen; i++) {
14474 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
14475 result.push(wordlist[idx]);
14476 }
14477 return result.join(' ');
14478 }
14479
14480 self.check = function(mnemonic) {
14481 var mnemonic = mnemonic.split(' ')
14482 if (mnemonic.length % 3 > 0) {
14483 return false
14484 }
14485 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
14486 var idx = [];
14487 for (var i=0; i<mnemonic.length; i++) {
14488 var word = mnemonic[i];
14489 var wordIndex = wordlist.indexOf(word);
14490 if (wordIndex == -1) {
14491 return false;
14492 }
14493 var binaryIndex = zfill(wordIndex.toString(2), 11);
14494 idx.push(binaryIndex);
14495 }
14496 var b = idx.join('');
14497 var l = b.length;
14498 //d = b[:l / 33 * 32]
14499 //h = b[-l / 33:]
14500 var d = b.substring(0, l / 33 * 32);
14501 var h = b.substring(l - l / 33, l);
14502 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 14503 var nd = binaryStringToWordArray(d);
3af2954a 14504 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
14505 var ndHash = sjcl.hash.sha256.hash(nd);
14506 var ndHex = sjcl.codec.hex.fromBits(ndHash);
14507 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
14508 var nh = ndBstr.substring(0,l/33);
14509 return h == nh;
14510 }
14511
14512 self.toSeed = function(mnemonic, passphrase) {
14513 passphrase = passphrase || '';
14514 mnemonic = self.normalizeString(mnemonic)
14515 passphrase = self.normalizeString(passphrase)
14516 passphrase = "mnemonic" + passphrase;
80c4dd2a
IC
14517 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonic);
14518 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
14519 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
14520 var hashHex = sjcl.codec.hex.fromBits(result);
14521 return hashHex;
3af2954a
IC
14522 }
14523
14524 self.normalizeString = function(str) {
14525 if (typeof str.normalize == "function") {
14526 return str.normalize("NFKD");
14527 }
14528 else {
14529 // TODO decide how to handle this in the future.
14530 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
14531 return str;
14532 }
14533 }
14534
80c4dd2a
IC
14535 function byteArrayToWordArray(data) {
14536 var a = [];
14537 for (var i=0; i<data.length/4; i++) {
14538 v = 0;
14539 v += data[i*4 + 0] << 8 * 3;
14540 v += data[i*4 + 1] << 8 * 2;
14541 v += data[i*4 + 2] << 8 * 1;
14542 v += data[i*4 + 3] << 8 * 0;
14543 a.push(v);
14544 }
14545 return a;
14546 }
14547
3af2954a
IC
14548 function byteArrayToBinaryString(data) {
14549 var bin = "";
14550 for (var i=0; i<data.length; i++) {
14551 bin += zfill(data[i].toString(2), 8);
14552 }
14553 return bin;
14554 }
14555
80c4dd2a
IC
14556 function hexStringToBinaryString(hexString) {
14557 binaryString = "";
14558 for (var i=0; i<hexString.length; i++) {
14559 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
14560 }
14561 return binaryString;
14562 }
14563
14564 function binaryStringToWordArray(binary) {
14565 var aLen = binary.length / 32;
14566 var a = [];
14567 for (var i=0; i<aLen; i++) {
14568 var valueStr = binary.substring(0,32);
3af2954a 14569 var value = parseInt(valueStr, 2);
80c4dd2a
IC
14570 a.push(value);
14571 binary = binary.slice(32);
3af2954a 14572 }
80c4dd2a 14573 return a;
3af2954a
IC
14574 }
14575
14576 // Pad a numeric string on the left with zero digits until the given width
14577 // is reached.
14578 // Note this differs to the python implementation because it does not
14579 // handle numbers starting with a sign.
14580 function zfill(source, length) {
14581 source = source.toString();
14582 while (source.length < length) {
14583 source = '0' + source;
14584 }
14585 return source;
14586 }
14587
14588 init();
ebd8d4e8 14589
3af2954a 14590}
dc55c6b0 14591</script>
ab78acc6 14592 <script>(function() {
ebd8d4e8
IC
14593
14594 var mnemonic = new Mnemonic("english");
14595 var bip32RootKey = null;
14596 var bip32ExtendedKey = null;
ab78acc6 14597 var network = bitcoin.networks.bitcoin;
ebd8d4e8
IC
14598 var addressRowTemplate = $("#address-row-template");
14599
80c4dd2a
IC
14600 var showIndex = true;
14601 var showAddress = true;
14602 var showPrivKey = true;
14603
ebd8d4e8
IC
14604 var phraseChangeTimeoutEvent = null;
14605
14606 var DOM = {};
d6cedc94
IC
14607 DOM.network = $(".network");
14608 DOM.phraseNetwork = $("#network-phrase");
ebd8d4e8 14609 DOM.phrase = $(".phrase");
721b7284 14610 DOM.passphrase = $(".passphrase");
ebd8d4e8
IC
14611 DOM.generate = $(".generate");
14612 DOM.rootKey = $(".root-key");
14613 DOM.extendedPrivKey = $(".extended-priv-key");
14614 DOM.extendedPubKey = $(".extended-pub-key");
d6cedc94
IC
14615 DOM.bip32tab = $("#bip32-tab");
14616 DOM.bip44tab = $("#bip44-tab");
14617 DOM.bip32panel = $("#bip32");
14618 DOM.bip44panel = $("#bip44");
ebd8d4e8
IC
14619 DOM.bip32path = $("#bip32-path");
14620 DOM.bip44path = $("#bip44-path");
14621 DOM.bip44purpose = $("#bip44 .purpose");
14622 DOM.bip44coin = $("#bip44 .coin");
14623 DOM.bip44account = $("#bip44 .account");
14624 DOM.bip44change = $("#bip44 .change");
14625 DOM.strength = $(".strength");
14626 DOM.addresses = $(".addresses");
14627 DOM.rowsToAdd = $(".rows-to-add");
14628 DOM.more = $(".more");
14629 DOM.feedback = $(".feedback");
14630 DOM.tab = $(".derivation-type a");
14631 DOM.indexToggle = $(".index-toggle");
14632 DOM.addressToggle = $(".address-toggle");
14633 DOM.privateKeyToggle = $(".private-key-toggle");
14634
dc55c6b0 14635 var derivationPath = $(".tab-pane.active .path").val();
ebd8d4e8
IC
14636
14637 function init() {
14638 // Events
d6cedc94 14639 DOM.network.on("change", networkChanged);
a19a5498
IC
14640 DOM.phrase.on("input", delayedPhraseChanged);
14641 DOM.passphrase.on("input", delayedPhraseChanged);
ebd8d4e8
IC
14642 DOM.generate.on("click", generateClicked);
14643 DOM.more.on("click", showMore);
a19a5498
IC
14644 DOM.bip32path.on("input", bip32Changed);
14645 DOM.bip44purpose.on("input", bip44Changed);
14646 DOM.bip44coin.on("input", bip44Changed);
14647 DOM.bip44account.on("input", bip44Changed);
14648 DOM.bip44change.on("input", bip44Changed);
ebd8d4e8
IC
14649 DOM.tab.on("click", tabClicked);
14650 DOM.indexToggle.on("click", toggleIndexes);
14651 DOM.addressToggle.on("click", toggleAddresses);
14652 DOM.privateKeyToggle.on("click", togglePrivateKeys);
14653 disableForms();
14654 hidePending();
14655 hideValidationError();
ab78acc6 14656 populateNetworkSelect();
ebd8d4e8
IC
14657 }
14658
14659 // Event handlers
14660
d6cedc94 14661 function networkChanged(e) {
ab78acc6
IC
14662 var network = e.target.value;
14663 networks[network].onSelect();
dc55c6b0 14664 setBip44DerivationPath();
d6cedc94
IC
14665 delayedPhraseChanged();
14666 }
14667
ebd8d4e8
IC
14668 function delayedPhraseChanged() {
14669 hideValidationError();
14670 showPending();
14671 if (phraseChangeTimeoutEvent != null) {
14672 clearTimeout(phraseChangeTimeoutEvent);
14673 }
14674 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
14675 }
14676
14677 function phraseChanged() {
14678 showPending();
14679 hideValidationError();
14680 // Get the mnemonic phrase
14681 var phrase = DOM.phrase.val();
721b7284 14682 var passphrase = DOM.passphrase.val();
ebd8d4e8
IC
14683 var errorText = findPhraseErrors(phrase);
14684 if (errorText) {
14685 showValidationError(errorText);
14686 return;
14687 }
14688 // Get the derivation path
14689 var errorText = findDerivationPathErrors();
14690 if (errorText) {
14691 showValidationError(errorText);
14692 return;
14693 }
14694 // Calculate and display
721b7284 14695 calcBip32Seed(phrase, passphrase, derivationPath);
ebd8d4e8
IC
14696 displayBip32Info();
14697 hidePending();
14698 }
14699
14700 function generateClicked() {
14701 clearDisplay();
14702 showPending();
14703 setTimeout(function() {
14704 var phrase = generateRandomPhrase();
14705 if (!phrase) {
14706 return;
14707 }
14708 phraseChanged();
14709 }, 50);
14710 }
14711
14712 function tabClicked(e) {
14713 var activePath = $(e.target.getAttribute("href") + " .path");
14714 derivationPath = activePath.val();
14715 derivationChanged();
14716 }
14717
14718 function derivationChanged() {
59780293 14719 delayedPhraseChanged();
ebd8d4e8
IC
14720 }
14721
14722 function bip32Changed() {
14723 derivationPath = DOM.bip32path.val();
14724 derivationChanged();
14725 }
14726
14727 function bip44Changed() {
14728 setBip44DerivationPath();
14729 derivationPath = DOM.bip44path.val();
14730 derivationChanged();
14731 }
14732
14733 function toggleIndexes() {
80c4dd2a 14734 showIndex = !showIndex;
ebd8d4e8
IC
14735 $("td.index span").toggleClass("invisible");
14736 }
14737
14738 function toggleAddresses() {
80c4dd2a 14739 showAddress = !showAddress;
ebd8d4e8
IC
14740 $("td.address span").toggleClass("invisible");
14741 }
14742
14743 function togglePrivateKeys() {
80c4dd2a 14744 showPrivKey = !showPrivKey;
ebd8d4e8
IC
14745 $("td.privkey span").toggleClass("invisible");
14746 }
14747
14748 // Private methods
14749
14750 function generateRandomPhrase() {
14751 if (!hasStrongRandom()) {
14752 var errorText = "This browser does not support strong randomness";
14753 showValidationError(errorText);
14754 return;
14755 }
14756 var numWords = parseInt(DOM.strength.val());
14757 // Check strength is an integer
14758 if (isNaN(numWords)) {
14759 DOM.strength.val("12");
14760 numWords = 12;
14761 }
14762 // Check strength is a multiple of 32, if not round it down
14763 if (numWords % 3 != 0) {
14764 numWords = Math.floor(numWords / 3) * 3;
14765 DOM.strength.val(numWords);
14766 }
14767 // Check strength is at least 32
14768 if (numWords == 0) {
14769 numWords = 3;
14770 DOM.strength.val(numWords);
14771 }
14772 var strength = numWords / 3 * 32;
14773 var words = mnemonic.generate(strength);
14774 DOM.phrase.val(words);
14775 return words;
14776 }
14777
721b7284
IC
14778 function calcBip32Seed(phrase, passphrase, path) {
14779 var seed = mnemonic.toSeed(phrase, passphrase);
ab78acc6 14780 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
ebd8d4e8
IC
14781 bip32ExtendedKey = bip32RootKey;
14782 // Derive the key from the path
14783 var pathBits = path.split("/");
14784 for (var i=0; i<pathBits.length; i++) {
14785 var bit = pathBits[i];
14786 var index = parseInt(bit);
14787 if (isNaN(index)) {
14788 continue;
14789 }
14790 var hardened = bit[bit.length-1] == "'";
14791 if (hardened) {
14792 bip32ExtendedKey = bip32ExtendedKey.deriveHardened(index);
14793 }
14794 else {
14795 bip32ExtendedKey = bip32ExtendedKey.derive(index);
14796 }
14797 }
14798 }
14799
14800 function showValidationError(errorText) {
14801 DOM.feedback
14802 .text(errorText)
14803 .show();
14804 }
14805
14806 function hideValidationError() {
14807 DOM.feedback
14808 .text("")
14809 .hide();
14810 }
14811
14812 function findPhraseErrors(phrase) {
14813 // TODO make this right
14814 // Preprocess the words
783981de 14815 phrase = mnemonic.normalizeString(phrase);
ebd8d4e8
IC
14816 var parts = phrase.split(" ");
14817 var proper = [];
14818 for (var i=0; i<parts.length; i++) {
14819 var part = parts[i];
14820 if (part.length > 0) {
14821 // TODO check that lowercasing is always valid to do
14822 proper.push(part.toLowerCase());
14823 }
14824 }
14825 // TODO some levenstein on the words
14826 var properPhrase = proper.join(' ');
14827 // Check the words are valid
14828 var isValid = mnemonic.check(properPhrase);
14829 if (!isValid) {
14830 return "Invalid mnemonic";
14831 }
14832 return false;
14833 }
14834
14835 function findDerivationPathErrors(path) {
14836 // TODO
14837 return false;
14838 }
14839
14840 function displayBip32Info() {
14841 // Display the key
14842 var rootKey = bip32RootKey.toBase58();
14843 DOM.rootKey.val(rootKey);
14844 var extendedPrivKey = bip32ExtendedKey.toBase58();
14845 DOM.extendedPrivKey.val(extendedPrivKey);
14846 var extendedPubKey = bip32ExtendedKey.toBase58(false);
14847 DOM.extendedPubKey.val(extendedPubKey);
14848 // Display the addresses and privkeys
14849 clearAddressesList();
14850 displayAddresses(0, 20);
14851 }
14852
14853 function displayAddresses(start, total) {
14854 for (var i=0; i<total; i++) {
80c4dd2a
IC
14855 var index = i + start;
14856 new TableRow(index);
14857 }
14858 }
14859
14860 function TableRow(index) {
14861
14862 function init() {
14863 calculateValues();
14864 }
14865
14866 function calculateValues() {
14867 setTimeout(function() {
14868 var key = bip32ExtendedKey.derive(index);
14869 var address = key.getAddress().toString();
14870 var privkey = key.privKey.toWIF(network);
14871 addAddressToList(index, address, privkey);
14872 }, 50)
ebd8d4e8 14873 }
80c4dd2a
IC
14874
14875 init();
14876
ebd8d4e8
IC
14877 }
14878
14879 function showMore() {
14880 var start = DOM.addresses.children().length;
14881 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
14882 if (isNaN(rowsToAdd)) {
14883 rowsToAdd = 20;
14884 DOM.rowsToAdd.val("20");
14885 }
14886 if (rowsToAdd > 200) {
14887 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
14888 msg += "Do you want to continue?";
14889 if (!confirm(msg)) {
14890 return;
14891 }
14892 }
ebd8d4e8 14893 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
14894 }
14895
14896 function clearDisplay() {
14897 clearAddressesList();
14898 clearKey();
14899 hideValidationError();
14900 }
14901
14902 function clearAddressesList() {
14903 DOM.addresses.empty();
14904 }
14905
14906 function clearKey() {
14907 DOM.rootKey.val("");
14908 DOM.extendedPrivKey.val("");
14909 DOM.extendedPubKey.val("");
14910 }
14911
14912 function addAddressToList(index, address, privkey) {
14913 var row = $(addressRowTemplate.html());
80c4dd2a
IC
14914 // Elements
14915 var indexCell = row.find(".index span");
14916 var addressCell = row.find(".address span");
14917 var privkeyCell = row.find(".privkey span");
14918 // Content
ae30fed8
IC
14919 var indexText = derivationPath + "/" + index;
14920 indexCell.text(indexText);
80c4dd2a
IC
14921 addressCell.text(address);
14922 privkeyCell.text(privkey);
14923 // Visibility
14924 if (!showIndex) {
14925 indexCell.addClass("invisible");
14926 }
14927 if (!showAddress) {
14928 addressCell.addClass("invisible");
14929 }
14930 if (!showPrivKey) {
14931 privkeCell.addClass("invisible");
14932 }
ebd8d4e8
IC
14933 DOM.addresses.append(row);
14934 }
14935
14936 function hasStrongRandom() {
14937 return 'crypto' in window && window['crypto'] !== null;
14938 }
14939
14940 function disableForms() {
14941 $("form").on("submit", function(e) {
14942 e.preventDefault();
14943 });
14944 }
14945
14946 function setBip44DerivationPath() {
14947 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
14948 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
14949 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
14950 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
14951 var path = "m/";
14952 path += purpose + "'/";
14953 path += coin + "'/";
14954 path += account + "'/";
14955 path += change;
14956 DOM.bip44path.val(path);
14957 }
14958
14959 function parseIntNoNaN(val, defaultVal) {
14960 var v = parseInt(val);
14961 if (isNaN(v)) {
14962 return defaultVal;
14963 }
14964 return v;
14965 }
14966
14967 function showPending() {
14968 DOM.feedback
14969 .text("Calculating...")
14970 .show();
14971 }
14972
14973 function hidePending() {
14974 DOM.feedback
14975 .text("")
14976 .hide();
14977 }
14978
ab78acc6
IC
14979 function populateNetworkSelect() {
14980 for (var i=0; i<networks.length; i++) {
14981 var network = networks[i];
14982 var option = $("<option>");
14983 option.attr("value", i);
14984 option.text(network.name);
14985 DOM.phraseNetwork.append(option);
14986 }
14987 }
14988
14989 var networks = [
14990 {
14991 name: "Bitcoin",
14992 onSelect: function() {
14993 network = bitcoin.networks.bitcoin;
14994 DOM.bip44coin.val(0);
ab78acc6
IC
14995 },
14996 },
14997 {
14998 name: "Bitcoin Testnet",
14999 onSelect: function() {
15000 network = bitcoin.networks.testnet;
15001 DOM.bip44coin.val(1);
ab78acc6
IC
15002 },
15003 },
15004 {
15005 name: "Litecoin",
15006 onSelect: function() {
15007 network = bitcoin.networks.litecoin;
15008 DOM.bip44coin.val(2);
15009 },
15010 },
15011 {
15012 name: "Dogecoin",
15013 onSelect: function() {
15014 network = bitcoin.networks.dogecoin;
15015 DOM.bip44coin.val(3);
15016 },
15017 },
d5dc92fd
IC
15018 {
15019 name: "ShadowCash",
15020 onSelect: function() {
15021 network = bitcoin.networks.shadow;
15022 DOM.bip44coin.val(35);
15023 },
15024 },
15025 {
15026 name: "ShadowCash Testnet",
15027 onSelect: function() {
15028 network = bitcoin.networks.shadowtn;
15029 DOM.bip44coin.val(1);
15030 },
15031 },
a3baa26e
IC
15032 {
15033 name: "Viacoin",
15034 onSelect: function() {
15035 network = bitcoin.networks.viacoin;
15036 DOM.bip44coin.val(14);
15037 },
15038 },
15039 {
15040 name: "Viacoin Testnet",
15041 onSelect: function() {
15042 network = bitcoin.networks.viacointestnet;
15043 DOM.bip44coin.val(1);
15044 },
15045 },
15046 {
15047 name: "Jumbucks",
15048 onSelect: function() {
15049 network = bitcoin.networks.jumbucks;
15050 DOM.bip44coin.val(26);
15051 },
15052 },
5c434a8a
CM
15053 {
15054 name: "CLAM",
15055 onSelect: function() {
15056 network = bitcoin.networks.clam;
15057 DOM.bip44coin.val(23);
15058 },
15059 },
ab78acc6
IC
15060 ]
15061
ebd8d4e8
IC
15062 init();
15063
15064})();
dc55c6b0 15065</script>
ebd8d4e8
IC
15066 </body>
15067</html>