]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Merge pull request #103 from Zwilla/patch-3
[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" />
b630f83d 14 <meta content="Ian Coleman" name="author" />
18f16009 15 <link type="image/x-icon" rel="icon" href="data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQEAYAAABPYyMiAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAAF0lEQVRIx2NgGAWjYBSMglEwCkbBSAcACBAAAeaR9cIAAAAASUVORK5CYII=" />
3af2954a 16
ab78acc6
IC
17 <style>
18 body {
19 padding-bottom: 32px;
20 }
21 .form-control[readonly] {
22 cursor: text;
23 }
24 .feedback-container {
25 position: fixed;
26 top: 0;
27 width: 100%;
28 text-align: center;
29 z-index: 4;
30 }
31 .feedback {
32 display: table;
33 padding: 0.5em 1em;
34 background-color: orange;
35 margin: 0 auto;
36 font-size: 2em;
37 color: #444;
38 border: 2px solid #555;
39 border-top: 0;
40 border-bottom-left-radius: 20px 20px;
41 border-bottom-right-radius: 20px 20px;
42 }
d5dc92fd
IC
43 .no-border {
44 border: 0;
45 box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
46 -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.0);
47 }
0515eeec
IC
48 .phrase {
49 word-break: keep-all;
50 }
2a6dd137 51 .generate-container .strength {
b0818b31
IC
52 /* override mobile width from bootstrap */
53 width: auto!important;
54 display: inline-block;
55 }
ea87f1d3 56 .languages a {
0515eeec
IC
57 padding-left: 10px;
58 }
ea87f1d3
IC
59 .languages a:nth-of-type(1) {
60 margin-left: -12px;
61 padding-left: 0;
62 }
d737abf6
IC
63 .monospace {
64 font-family: monospace;
65 }
2a6dd137
IC
66 .entropy-container .filtered,
67 .entropy-container .binary {
68 word-wrap: break-word;
69 }
70 .entropy-container li {
71 padding-bottom: 5px;
72 }
73 .card-suit {
74 font-size: 19px;
75 line-height: 0;
76 }
77 .card-suit.club {
78 color: #009F00;
79 }
80 .card-suit.diamond {
81 color: #3D5DC4;
82 }
83 .card-suit.heart {
84 color: #F00;
85 }
86 .card-suit.spade {
87 color: #000;
88 }
e00964cc
IC
89 .qr-container {
90 position: fixed;
91 top: 0;
92 right: 0;
93 text-align: center;
94 background-color: #FFF;
95 border: 1px solid #CCC;
96 }
97 .qr-image {
98 margin: 5px;
99 }
52da415f
IC
100 .qr-hint,
101 .qr-warning {
e00964cc 102 padding: 2px;
52da415f
IC
103 max-width: 150px;
104 }
105 .more-info {
106 cursor: help;
107 border-bottom: 1px dashed #000;
108 text-decoration: none;
e00964cc 109 }
920eb591
IC
110 .version {
111 position: absolute;
112 top: 5px;
113 right: 5px;
114 }
ab78acc6
IC
115 </style>
116 </head>
117 <body>
118 <div class="container">
3af2954a 119
ab78acc6 120 <h1 class="text-center">Mnemonic Code Converter</h1>
0a8d06d0 121 <p class="version">v0.2.5</p>
ab78acc6
IC
122 <hr>
123 <div class="row">
124 <div class="col-md-12">
125 <h2>Mnemonic</h2>
126 <form class="form-horizontal" role="form">
ab78acc6 127 <div class="form-group">
c6624d51
IC
128 <div class="col-sm-2"></div>
129 <div class="col-sm-10">
ea87f1d3
IC
130 <p data-translate>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>
131 <p data-translate-html>
132 For more info see the
133 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki" target="_blank">BIP39 spec</a>.
134 </p>
c6624d51
IC
135 </div>
136 </div>
137 <div class="form-group generate-container">
b0818b31 138 <label class="col-sm-2 control-label"></label>
ab78acc6 139 <div class="col-sm-10">
b0818b31
IC
140 <div class="form-inline">
141 <div class="input-group-inline">
ea87f1d3 142 <span data-translate>Generate a random mnemonic, or enter your own below</span>:
b0818b31 143 <button class="btn generate">Generate</button>
b0818b31
IC
144 <select id="strength" class="strength form-control">
145 <option value="3">3</option>
146 <option value="6">6</option>
147 <option value="9">9</option>
148 <option value="12">12</option>
149 <option value="15" selected>15</option>
150 <option value="18">18</option>
151 <option value="21">21</option>
152 <option value="24">24</option>
153 </select>
ea87f1d3 154 <span data-translate>words</span>
b0818b31
IC
155 </div>
156 </div>
ab78acc6 157 </div>
0515eeec 158 </div>
c6624d51 159 <div class="entropy-container hidden">
2a6dd137 160 <div class="form-group text-danger">
ea87f1d3 161 <label class="col-sm-2 control-label" data-translate>Warning</label>
2a6dd137 162 <div class="col-sm-10 form-control-static">
ea87f1d3
IC
163 <span data-translate>Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.</span>
164 <a href="#entropy-notes" data-translate>Read more</a>
18abe53b
IC
165 </div>
166 </div>
2a6dd137 167 <div class="form-group">
ea87f1d3 168 <label for="entropy" class="col-sm-2 control-label" data-translate>Entropy</label>
2a6dd137 169 <div class="col-sm-7">
ea87f1d3 170 <textarea id="entropy" rows="2" class="entropy form-control" placeholder="Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards" data-translate-placeholder></textarea>
95f04905 171 <div class="row">
f1e5d484
IC
172 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Based on estimates from zxcvbn using Filtered Entropy">Time To Crack</span></label>
173 <div class="crack-time col-sm-3 form-control-static"></div>
ea87f1d3 174 <label class="col-sm-3 control-label" data-translate>Event Count</label>
95f04905
IC
175 <div class="event-count col-sm-3 form-control-static"></div>
176 </div>
177 <div class="row">
ea87f1d3 178 <label class="col-sm-3 control-label" data-translate>Entropy Type</label>
95f04905 179 <div class="type col-sm-3 form-control-static"></div>
ea87f1d3 180 <label class="col-sm-3 control-label" data-translate>Bits Per Event</label>
95f04905
IC
181 <div class="bits-per-event col-sm-3 form-control-static"></div>
182 </div>
183 <div class="row">
f1e5d484 184 <label class="col-sm-3 control-label" data-translate>Raw Entropy Words</label>
95f04905 185 <div class="word-count col-sm-3 form-control-static"></div>
52da415f 186 <label class="col-sm-3 control-label" data-translate><span class="more-info" data-translate-title title="Total bits of entropy may be less than indicated if any entropy event uses a weak source.">Total Bits</span></label>
95f04905
IC
187 <div class="bits col-sm-3 form-control-static"></div>
188 </div>
ea87f1d3 189 <label class="col-sm-3 control-label" data-translate>Filtered Entropy</label>
2a6dd137 190 <div class="filtered col-sm-9 form-control-static"></div>
ea87f1d3 191 <label class="col-sm-3 control-label" data-translate>Raw Binary</label>
2a6dd137 192 <div class="binary col-sm-9 form-control-static"></div>
ea87f1d3 193 <label class="col-sm-3 control-label" data-translate>Mnemonic Length</label>
2a6dd137 194 <div class="col-sm-9">
18abe53b 195 <select class="mnemonic-length form-control">
5ed50bd9 196 <option value="raw" selected data-translate>Use Raw Entropy (3 words per 32 bits)</option>
ea87f1d3 197 <option value="12">12 <span data-translate>Words</span></option>
5ed50bd9 198 <option value="15">15 <span data-translate>Words</option>
ea87f1d3
IC
199 <option value="18">18 <span data-translate>Words</span></option>
200 <option value="21">21 <span data-translate>Words</span></option>
201 <option value="24">24 <span data-translate>Words</span></option>
18abe53b 202 </select>
c6624d51 203 </div>
18abe53b 204 </div>
2a6dd137 205 <div class="col-sm-3">
ea87f1d3 206 <p data-translate>Valid entropy values include:</p>
2a6dd137 207 <ul>
ea87f1d3
IC
208 <li><strong data-translate>Binary</strong> [0-1]<br>101010011</li>
209 <li><strong data-translate>Base 6</strong> [0-5]<br>123434014</li>
210 <li><strong data-translate>Dice</strong> [1-6]<br>62535634</li>
211 <li><strong data-translate>Base 10</strong> [0-9]<br>90834528</li>
212 <li><strong data-translate>Hex</strong> [0-9A-F]<br>4187a8bfd9</li>
213 <li><strong data-translate>Card</strong> [A2-9TJQK][CDHS]<br>ahqs9dtc</li>
2a6dd137
IC
214 </ul>
215 </div>
c6624d51
IC
216 </div>
217 </div>
218 <div class="form-group">
219 <div class="col-sm-2"></div>
220 <div class="col-sm-10 checkbox">
221 <label>
222 <input type="checkbox" class="use-entropy">
ea87f1d3 223 <span data-translate>Supply my own source of entropy</span>
c6624d51
IC
224 </label>
225 </div>
226 </div>
227 <div class="form-group">
ea87f1d3 228 <label class="col-sm-2 control-label" data-translate>Mnemonic Language</label>
0515eeec 229 <div class="col-sm-10 languages">
ea87f1d3
IC
230 <div class="form-control no-border">
231 <a href="#english">English</a>
232 <a href="#japanese" title="Japanese">日本語</a>
233 <a href="#spanish" title="Spanish">Español</a>
234 <a href="#chinese_simplified" title="Chinese (Simplified)">中文(简体)</a>
235 <a href="#chinese_traditional" title="Chinese (Traditional)">中文(繁體)</a>
236 <a href="#french" title="French">Français</a>
237 <a href="#italian" title="Italian">Italiano</a>
238 </div>
0515eeec 239 </div>
ab78acc6
IC
240 </div>
241 <div class="form-group">
ea87f1d3 242 <label for="phrase" class="col-sm-2 control-label" data-translate>BIP39 Mnemonic</label>
ab78acc6 243 <div class="col-sm-10">
e00964cc 244 <textarea id="phrase" class="phrase form-control" data-show-qr></textarea>
ab78acc6
IC
245 </div>
246 </div>
247 <div class="form-group">
ea87f1d3 248 <label for="passphrase" class="col-sm-2 control-label" data-translate>BIP39 Passphrase (optional)</label>
ab78acc6
IC
249 <div class="col-sm-10">
250 <textarea id="passphrase" class="passphrase form-control"></textarea>
251 </div>
252 </div>
73161a92 253 <div class="form-group">
ea87f1d3 254 <label for="seed" class="col-sm-2 control-label" data-translate>BIP39 Seed</label>
73161a92 255 <div class="col-sm-10">
e00964cc 256 <textarea id="seed" class="seed form-control" readonly="readonly" data-show-qr></textarea>
73161a92
IC
257 </div>
258 </div>
ab78acc6 259 <div class="form-group">
ea87f1d3 260 <label for="network-phrase" class="col-sm-2 control-label" data-translate>Coin</label>
ab78acc6
IC
261 <div class="col-sm-10">
262 <select id="network-phrase" class="network form-control">
263 <!-- populated by javascript -->
264 </select>
265 </div>
266 </div>
267 <div class="form-group">
ea87f1d3 268 <label for="root-key" class="col-sm-2 control-label" data-translate>BIP32 Root Key</label>
ab78acc6 269 <div class="col-sm-10">
e00964cc 270 <textarea id="root-key" class="root-key form-control" data-show-qr></textarea>
ab78acc6
IC
271 </div>
272 </div>
8d18f379
IC
273 <div class="form-group litecoin-ltub-container hidden">
274 <label for="litecoin-use-ltub" class="col-sm-2 control-label" data-translate>Prefixes</label>
275 <div class="col-sm-10 checkbox">
276 <label>
277 <input type="checkbox" id="litecoin-use-ltub" class="litecoin-use-ltub">
278 Use <code>Ltpv / Ltub</code> instead of <code>xprv / xpub</code>
279 </label>
280 </div>
281 </div>
ab78acc6
IC
282 </form>
283 </div>
284 </div>
3af2954a 285
ab78acc6 286 <hr>
3af2954a 287
ab78acc6
IC
288 <div class="row">
289 <div class="col-md-12">
290 <h2>Derivation Path</h2>
291 <ul class="derivation-type nav nav-tabs" role="tablist">
9987f0c1
IC
292 <li id="bip32-tab">
293 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
294 </li>
d5dc92fd 295 <li id="bip44-tab" class="active">
ab78acc6
IC
296 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
297 </li>
9987f0c1
IC
298 <li id="bip49-tab">
299 <a href="#bip49" role="tab" data-toggle="tab">BIP49</a>
ab78acc6
IC
300 </li>
301 </ul>
302 <div class="derivation-type tab-content">
d5dc92fd 303 <div id="bip44" class="tab-pane active">
ab78acc6
IC
304 <form class="form-horizontal" role="form">
305 <br>
306 <div class="col-sm-2"></div>
307 <div class="col-sm-10">
ea87f1d3
IC
308 <p data-translate-html>
309 For more info see the
310 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
311 </p>
ab78acc6
IC
312 </div>
313 <div class="form-group">
314 <label for="purpose" class="col-sm-2 control-label">
ea87f1d3 315 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
ab78acc6
IC
316 </label>
317 <div class="col-sm-10">
9987f0c1 318 <input id="purpose" type="text" class="purpose form-control" value="44" readonly>
ab78acc6
IC
319 </div>
320 </div>
321 <div class="form-group">
322 <label for="coin" class="col-sm-2 control-label">
ea87f1d3 323 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
ab78acc6
IC
324 </label>
325 <div class="col-sm-10">
9987f0c1 326 <input id="coin" type="text" class="coin form-control" value="0" readonly>
ab78acc6
IC
327 </div>
328 </div>
329 <div class="form-group">
330 <label for="account" class="col-sm-2 control-label">
ea87f1d3 331 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
ab78acc6
IC
332 </label>
333 <div class="col-sm-10">
334 <input id="account" type="text" class="account form-control" value="0">
335 </div>
336 </div>
337 <div class="form-group">
338 <label for="change" class="col-sm-2 control-label">
ea87f1d3 339 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
ab78acc6
IC
340 </label>
341 <div class="col-sm-10">
342 <input id="change" type="text" class="change form-control" value="0">
343 </div>
344 </div>
20083ab9
IC
345 <div class="form-group">
346 <label class="col-sm-2 control-label">
347 </label>
348 <div class="col-sm-10">
f3bfd2a5 349 <p data-translate>The account extended keys can be used for importing to most BIP44 compatible wallets, such as mycelium or electrum.</p>
20083ab9
IC
350 </div>
351 </div>
352 <div class="form-group">
353 <label for="account-xprv" class="col-sm-2 control-label">
354 <span data-translate>Account Extended Private Key</span>
355 </label>
356 <div class="col-sm-10">
357 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
358 </div>
359 </div>
360 <div class="form-group">
361 <label for="account-xpub" class="col-sm-2 control-label">
362 <span data-translate>Account Extended Public Key</span>
363 </label>
364 <div class="col-sm-10">
365 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
366 </div>
367 </div>
368 <div class="form-group">
369 <label class="col-sm-2 control-label">
370 </label>
371 <div class="col-sm-10">
372 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
373 </div>
374 </div>
ab78acc6 375 <div class="form-group">
ea87f1d3 376 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
377 <div class="col-sm-10">
378 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
379 </div>
380 </div>
381 </form>
382 </div>
383 <div id="bip32" class="tab-pane">
384 <form class="form-horizontal" role="form">
385 <br>
386 <div class="col-sm-2"></div>
387 <div class="col-sm-10">
ea87f1d3
IC
388 <p data-translate>
389 For more info see the
390 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
391 </p>
ab78acc6 392 </div>
56530adc
IC
393 <div class="form-group">
394 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
395 <div class="col-sm-10">
396 <select id="bip32-client" class="client form-control">
397 <option value="custom">Custom derivation path</option>
398 <!-- populated by javascript -->
399 </select>
400 </div>
401 </div>
ab78acc6 402 <div class="form-group">
ea87f1d3 403 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
404 <div class="col-sm-10">
405 <input id="bip32-path" type="text" class="path form-control" value="m/0">
406 </div>
407 </div>
1975bfbc
IC
408 <div class="form-group">
409 <div class="col-sm-2"></div>
410 <label class="col-sm-10">
411 <input class="hardened-addresses" type="checkbox">
ea87f1d3 412 <span data-translate>Use hardened addresses</span>
1975bfbc
IC
413 </label>
414 </div>
0a8d06d0
IC
415 <div class="form-group">
416 <div class="col-sm-2"></div>
417 <label class="col-sm-10">
418 <input class="p2wpkh-nested-in-p2sh" type="checkbox">
419 <span data-translate>Use SegWit addresses (ie P2WPKH Nested In P2SH)</span>
420 </label>
421 </div>
1975bfbc 422 <div class="form-group">
ea87f1d3 423 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
1975bfbc 424 <div class="col-sm-10">
ea87f1d3 425 <p class="form-control no-border" data-translate-html>
1975bfbc 426 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 427 </p>
ea87f1d3
IC
428 <p class="form-control no-border" data-translate-html>
429 For more info see the
430 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
431 </p>
432 </div>
433 </div>
56530adc
IC
434 <div class="form-group">
435 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
436 <div class="col-sm-10">
437 <p class="form-control no-border">
438 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
439 </p>
440 <p class="form-control no-border">
441 <span data-translate>For more info see</span>
442 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
443 </p>
444 </div>
445 </div>
aa51da11 446 <div class="form-group">
ea87f1d3 447 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
aa51da11
IC
448 <div class="col-sm-10">
449 <p class="form-control no-border">
ea87f1d3
IC
450 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
451 <span data-translate-html>Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.</span>
c866242d
IC
452 </p>
453 <p class="form-control no-border">
ea87f1d3
IC
454 <span data-translate>Can be used with</span>:
455 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
456 </p>
457 </div>
458 </div>
ab78acc6
IC
459 </form>
460 </div>
9987f0c1
IC
461 <div id="bip49" class="tab-pane">
462 <form class="form-horizontal" role="form">
463 <br>
464 <div class="unavailable hidden">
465 <div class="form-group">
466 <div class="col-sm-2"></div>
467 <div class="col-sm-10">
468 <p data-translate>BIP49 is unavailable for this coin.</p>
469 </div>
470 </div>
471 </div>
472 <div class="available">
473 <div class="col-sm-2"></div>
474 <div class="col-sm-10">
475 <p data-translate-html>
476 For more info see the
477 <a href="https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki" target="_blank">BIP49 spec</a>.
478 </p>
479 </div>
480 <div class="form-group">
481 <label for="purpose" class="col-sm-2 control-label">
482 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
483 </label>
484 <div class="col-sm-10">
485 <input id="purpose" type="text" class="purpose form-control" value="49" readonly>
486 </div>
487 </div>
488 <div class="form-group">
489 <label for="coin" class="col-sm-2 control-label">
490 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
491 </label>
492 <div class="col-sm-10">
493 <input id="coin" type="text" class="coin form-control" value="0" readonly>
494 </div>
495 </div>
496 <div class="form-group">
497 <label for="account" class="col-sm-2 control-label">
498 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
499 </label>
500 <div class="col-sm-10">
501 <input id="account" type="text" class="account form-control" value="0">
502 </div>
503 </div>
504 <div class="form-group">
505 <label for="change" class="col-sm-2 control-label">
506 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
507 </label>
508 <div class="col-sm-10">
509 <input id="change" type="text" class="change form-control" value="0">
510 </div>
511 </div>
512 <div class="form-group">
513 <label class="col-sm-2 control-label">
514 </label>
515 <div class="col-sm-10">
516 <p data-translate>The account extended keys can be used for importing to most BIP49 compatible wallets.</p>
517 </div>
518 </div>
519 <div class="form-group">
520 <label for="account-xprv" class="col-sm-2 control-label">
521 <span data-translate>Account Extended Private Key</span>
522 </label>
523 <div class="col-sm-10">
524 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
525 </div>
526 </div>
527 <div class="form-group">
528 <label for="account-xpub" class="col-sm-2 control-label">
529 <span data-translate>Account Extended Public Key</span>
530 </label>
531 <div class="col-sm-10">
532 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
533 </div>
534 </div>
535 <div class="form-group">
536 <label class="col-sm-2 control-label">
537 </label>
538 <div class="col-sm-10">
539 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
540 </div>
541 </div>
542 <div class="form-group">
543 <label for="bip49-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
544 <div class="col-sm-10">
545 <input id="bip49-path" type="text" class="path form-control" value="m/49'/0'/0'/0" readonly="readonly">
546 </div>
547 </div>
548 </div>
549 </form>
550 </div>
ab78acc6
IC
551 </div>
552 <form class="form-horizontal" role="form">
553 <div class="form-group">
20083ab9 554 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
ab78acc6 555 <div class="col-sm-10">
e00964cc 556 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
557 </div>
558 </div>
559 <div class="form-group">
20083ab9 560 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
ab78acc6 561 <div class="col-sm-10">
e00964cc 562 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
563 </div>
564 </div>
565 </form>
566 </div>
567 </div>
3af2954a 568
ab78acc6 569 <hr>
3af2954a 570
ab78acc6
IC
571 <div class="row">
572 <div class="col-md-12">
573 <h2>Derived Addresses</h2>
ea87f1d3 574 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
ab78acc6
IC
575 <table class="table table-striped">
576 <thead>
577 <th>
578 <div class="input-group">
ea87f1d3
IC
579 <span data-translate>Path</span>&nbsp;&nbsp;
580 <button class="index-toggle" data-translate>Toggle</button>
ab78acc6
IC
581 </div>
582 </th>
583 <th>
584 <div class="input-group">
ea87f1d3
IC
585 <span data-translate>Address</span>&nbsp;&nbsp;
586 <button class="address-toggle" data-translate>Toggle</button>
ab78acc6
IC
587 </div>
588 </th>
1b12b2f5
IC
589 <th>
590 <div class="input-group">
ea87f1d3
IC
591 <span data-translate>Public Key</span>&nbsp;&nbsp;
592 <button class="public-key-toggle" data-translate>Toggle</button>
1b12b2f5
IC
593 </div>
594 </th>
ab78acc6
IC
595 <th>
596 <div class="input-group">
ea87f1d3
IC
597 <span data-translate>Private Key</span>&nbsp;&nbsp;
598 <button class="private-key-toggle" data-translate>Toggle</button>
ab78acc6
IC
599 </div>
600 </th>
601 </thead>
d737abf6 602 <tbody class="addresses monospace">
c866242d
IC
603 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
604 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
605 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
606 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
607 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
608 </tbody>
609 </table>
610 </div>
611 </div>
ea87f1d3 612 <span data-translate>Show more rows</span>:
ab78acc6 613 <input type="number" class="rows-to-add" value="20">
ea87f1d3 614 <button class="more" data-translate>Show</button>
3af2954a 615
ab78acc6 616 <hr>
3af2954a 617
ab78acc6
IC
618 <div class="row">
619 <div class="col-md-12">
ea87f1d3
IC
620 <h2 data-translate>More info</h2>
621 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
622 <p data-translate-html>
ab78acc6
IC
623 Read more at the
624 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
625 </p>
ea87f1d3
IC
626 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
627 <p data-translate-html>
ab78acc6
IC
628 Read more at the
629 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3
IC
630 </p>
631 <p data-translate-html>
632 See the demo at
ab78acc6
IC
633 <a href="http://bip32.org/" target="_blank">bip32.org</a>
634 </p>
ea87f1d3
IC
635 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
636 <p data-translate-html>
ab78acc6
IC
637 Read more at the
638 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
639 </p>
ea87f1d3 640 <h3 data-translate>Private Keys</h3>
ab78acc6 641 <p>
ea87f1d3
IC
642 <span data-translate-html>
643 Use private keys at
644 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
645 </span>
646 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 647 </p>
ea87f1d3 648 <h3 id="entropy-notes" data-translate>Entropy</h3>
c6624d51 649 <p>
ea87f1d3
IC
650 <span data-translate-html>
651 Entropy values must be sourced from a
652 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
653 </span>
654 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
655 <span data-translate-html>
656 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
657 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
658 random enough for the needs of this tool.
659 </span>
c6624d51 660 </p>
434caecd
IC
661 <p>
662 <strong><span data-translate>Do not store entropy.</span></strong>
663 </p>
664 <p>
665 <span data-translate>Storing entropy (such as keeping a deck of cards in a specific shuffled order) is unreliable compared to storing a mnemonic.</span>
666 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
667 <span data-translate-html><a href="https://en.wikipedia.org/wiki/Steganography#Physical" target="_blank">Steganography</a> may be beneficial when storing the mnemonic.</span>
668 </p>
c6624d51 669 <p>
ea87f1d3
IC
670 <span data-translate-html>
671 The random mnemonic generator on this page uses a
672 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
673 </span>
674 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
675 <span data-translate>If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.</span>
676 <span data-translate>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
677 </p>
678 <p>
ea87f1d3 679 <a href="https://bitcointalk.org/index.php?topic=311000.msg3345309#msg3345309" target="_blank" data-translate>You are not a good source of entropy.</a>
c6624d51 680 </p>
52da415f
IC
681 <h3 data-translate>License</h3>
682 <p>
683 <span data-translate-html>Please refer to <a href="https://github.com/iancoleman/bip39/blob/master/LICENSE" target="_blank">the software license</a> for more detail.
684 </span>
685 </p>
686 <p data-translate>The software is provided "as is", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement. In no event shall the authors or copyright holders be liable for any claim, damages or other liability, whether in an action of contract, tort or otherwise, arising from, out of or in connection with the software or the use or other dealings in the software.</p>
ab78acc6
IC
687 </div>
688 </div>
3af2954a 689
ab78acc6 690 <hr>
3af2954a 691
ab78acc6
IC
692 <div class="row">
693 <div class="col-md-12">
3af2954a 694
ea87f1d3 695 <h2 data-translate>Offline Usage</h2>
3af2954a 696
ea87f1d3 697 <p data-translate>
ab78acc6
IC
698 You can use this tool without having to be online.
699 </p>
ea87f1d3 700 <p data-translate>
ab78acc6
IC
701 In your browser, select file save-as, and save this page
702 as a file.
703 </p>
ea87f1d3 704 <p data-translate>
ab78acc6
IC
705 Double-click that file to open it in a browser
706 on any offline computer.
707 </p>
708 <p>
ea87f1d3
IC
709 <span data-translate>Alternatively, download the file from the repository</span>
710 -
711 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
712 </p>
3af2954a 713
ab78acc6
IC
714 </div>
715 </div>
3af2954a 716
ab78acc6 717 <hr>
3af2954a 718
ab78acc6
IC
719 <div class="row">
720 <div class="col-md-12">
3af2954a 721
ea87f1d3 722 <h2 data-translate>This project is 100% open-source code</h2>
3af2954a 723
ab78acc6 724 <p>
ea87f1d3
IC
725 <span data-translate>Get the source code from the repository</span>
726 -
b630f83d
IC
727 <a href="https://github.com/iancoleman/bip39" target="_blank">
728 https://github.com/iancoleman/bip39
ab78acc6
IC
729 </a>
730 </p>
3af2954a 731
ea87f1d3 732 <h3 data-translate>Libraries</h3>
3af2954a 733
ab78acc6
IC
734 <p>
735 <span>BitcoinJS - </span>
736 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
737 https://github.com/bitcoinjs/bitcoinjs-lib
738 </a>
739 </p>
3af2954a 740
ab78acc6
IC
741 <p>
742 <span>jsBIP39 - </span>
743 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
744 https://github.com/iancoleman/jsbip39
745 </a>
746 </p>
3af2954a 747
ab78acc6
IC
748 <p>
749 <span>sjcl - </span>
750 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
751 https://github.com/bitwiseshiftleft/sjcl
752 </a>
753 </p>
3af2954a 754
ab78acc6
IC
755 <p>
756 <span>jQuery - </span>
757 <a href="https://jquery.com/" target="_blank">
758 https://jquery.com/
759 </a>
760 </p>
3af2954a 761
ab78acc6
IC
762 <p>
763 <span>Twitter Bootstrap - </span>
764 <a href="http://getbootstrap.com/" target="_blank">
765 http://getbootstrap.com/
766 </a>
767 </p>
3af2954a 768
ab78acc6
IC
769 </div>
770 </div>
3af2954a 771
ab78acc6 772 </div>
3af2954a 773
e00964cc 774 <div class="qr-container hidden">
52da415f
IC
775 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
776 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
777 <div class="qr-hider hidden">
778 <div class="qr-image"></div>
779 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
780 </div>
e00964cc
IC
781 </div>
782
ab78acc6
IC
783 <div class="feedback-container">
784 <div class="feedback">Loading...</div>
785 </div>
3af2954a 786
ab78acc6
IC
787 <script type="text/template" id="address-row-template">
788 <tr>
789 <td class="index"><span></span></td>
e00964cc
IC
790 <td class="address"><span data-show-qr></span></td>
791 <td class="pubkey"><span data-show-qr></span></td>
792 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
793 </tr>
794 </script>
8b095871
IC
795 <script>// From
796// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
797// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
798// but is not required in any modern browsers.
799// For more information, see
800// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
801
802//----------------------------------------------------------------------
803//
804// ECMAScript 2015 Polyfills
805//
806//----------------------------------------------------------------------
563e401a 807
8b095871
IC
808(function (global) {
809 "use strict";
810
811 // Set this to always override native implementations, for testing
812 // the polyfill in browsers with partial/full ES2015 support.
813 var OVERRIDE_NATIVE_FOR_TESTING = false;
814
815 var undefined = (void 0); // Paranoia
816
817 // Helpers
818
819 function strict(o) {
820 return o === global ? undefined : o;
821 }
822
823 function hook(o, p, f) {
824 var op = o[p];
825 console.assert(typeof op === 'function', 'Hooking a non-function');
826 o[p] = function() {
827 var o = strict(this);
828 var r = f.apply(o, arguments);
829 return r !== undefined ? r : op.apply(o, arguments);
830 };
831 }
832
833 function isSymbol(s) {
834 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
835 }
836
837 function getPropertyDescriptor(target, name) {
838 var desc = Object.getOwnPropertyDescriptor(target, name);
839 var proto = Object.getPrototypeOf(target);
840 while (!desc && proto) {
841 desc = Object.getOwnPropertyDescriptor(proto, name);
842 proto = Object.getPrototypeOf(proto);
563e401a 843 }
8b095871
IC
844 return desc;
845 }
563e401a 846
8b095871
IC
847 var enqueue = (function(nativePromise, nativeSetImmediate) {
848 if (nativePromise)
849 return function(job) { nativePromise.resolve().then(function() { job(); }); };
850 if (nativeSetImmediate)
851 return function(job) { nativeSetImmediate(job); };
852 return function(job) { setTimeout(job, 0); };
853 }(global['Promise'], global['setImmediate']));
563e401a 854
8b095871
IC
855 function define(o, p, v, override) {
856 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
857 return;
858
859 if (typeof v === 'function') {
860 // Sanity check that functions are appropriately named (where possible)
861 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
862 Object.defineProperty(o, p, {
863 value: v,
864 configurable: true,
865 enumerable: false,
866 writable: true
867 });
563e401a 868 } else {
8b095871
IC
869 Object.defineProperty(o, p, {
870 value: v,
871 configurable: false,
872 enumerable: false,
873 writable: false
874 });
563e401a 875 }
8b095871 876 }
563e401a 877
8b095871
IC
878 function set_internal(o, p, v) {
879 Object.defineProperty(o, p, {
880 value: v,
881 configurable: false,
882 enumerable: false,
883 writable: true
884 });
885 }
563e401a 886
8b095871
IC
887 // Snapshot intrinsic functions
888 var $isNaN = global.isNaN,
889 $parseInt = global.parseInt,
890 $parseFloat = global.parseFloat;
891
892 var E = Math.E,
893 LOG10E = Math.LOG10E,
894 LOG2E = Math.LOG2E,
895 abs = Math.abs,
896 ceil = Math.ceil,
897 exp = Math.exp,
898 floor = Math.floor,
899 log = Math.log,
900 max = Math.max,
901 min = Math.min,
902 pow = Math.pow,
903 random = Math.random,
904 sqrt = Math.sqrt;
905
906 var orig_match = String.prototype.match,
907 orig_replace = String.prototype.replace,
908 orig_search = String.prototype.search,
909 orig_split = String.prototype.split;
910
911 // These are used for implementing the polyfills, but not exported.
912
913 // Inspired by https://gist.github.com/1638059
914 /** @constructor */
915 function EphemeronTable() {
916 var secretKey = ObjectCreate(null);
917
918 function conceal(o) {
919 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
920 Object.defineProperty(o, 'valueOf', {
921 value: (function(secretKey) {
922 return function (k) {
923 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
924 };
925 }(secretKey)),
926 configurable: true,
927 writeable: true,
928 enumerable: false
929 });
930 return secrets;
931 }
563e401a 932
8b095871
IC
933 function reveal(o) {
934 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
935 return v === o ? null : v;
936 }
937
938 return {
939 clear: function() {
940 secretKey = ObjectCreate(null);
941 },
942 remove: function(key) {
943 var secrets = reveal(key);
944 if (secrets && HasOwnProperty(secrets, 'value')) {
945 delete secrets.value;
946 return true;
947 }
948 return false;
949 },
950 get: function(key, defaultValue) {
951 var secrets = reveal(key);
952 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
953 },
954 has: function(key) {
955 var secrets = reveal(key);
956 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
957 },
958 set: function(key, value) {
959 var secrets = reveal(key) || conceal(key);
960 secrets.value = value;
563e401a 961 }
8b095871
IC
962 };
963 }
563e401a 964
8b095871 965 var empty = Object.create(null);
563e401a 966
8b095871
IC
967 //----------------------------------------------------------------------
968 //
969 // ECMAScript 2015
970 // http://www.ecma-international.org/ecma-262/6.0/
971 //
972 //----------------------------------------------------------------------
563e401a 973
8b095871
IC
974 // ---------------------------------------
975 // 19.4 Symbol Objects
976 // ---------------------------------------
563e401a 977
8b095871
IC
978 // NOTE: Symbols are defined here - out of spec order - since we need the
979 // properties and prototype to be populated for other polyfills.
563e401a 980
8b095871 981 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 982
8b095871
IC
983 var symbolForKey;
984 (function() {
985 var secret = Object.create(null);
986 var symbolMap = {};
987 symbolForKey = function(k) {
988 return symbolMap[k];
989 };
563e401a 990
8b095871 991 var GlobalSymbolRegistry = [];
563e401a 992
8b095871
IC
993 function unique(bits) {
994 return Array(bits + 1).join('x').replace(/x/g, function() {
995 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
996 });
997 }
563e401a 998
8b095871
IC
999 // 19.4.1 The Symbol Constructor
1000 // 19.4.1.1 Symbol ( description=undefined )
1001 function Symbol(description) {
1002 if (!(this instanceof Symbol)) return new Symbol(description, secret);
1003 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 1004
8b095871
IC
1005 var descString = description === undefined ? undefined : String(description);
1006
1007 set_internal(this, '[[SymbolData]]', unique(128));
1008 set_internal(this, '[[Description]]', descString);
1009
1010 symbolMap[this] = this;
1011 return this;
1012 }
1013
1014 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
1015 global.Symbol = Symbol;
1016
1017 // 19.4.2 Properties of the Symbol Constructor
1018
1019 // 19.4.2.1 Symbol.for (key)
1020 define(Symbol, 'for', function for_(key) {
1021 var stringKey = String(key);
1022 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1023 var e = GlobalSymbolRegistry[i];
1024 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 1025 }
8b095871
IC
1026 var newSymbol = Symbol(key);
1027 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
1028 return newSymbol;
1029 });
563e401a 1030
8b095871
IC
1031 // 19.4.2.2 Symbol.hasInstance
1032 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 1033
8b095871
IC
1034 // 19.4.2.4 Symbol.iterator
1035 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 1036
8b095871
IC
1037 // 19.4.2.5 Symbol.keyFor (sym)
1038 define(Symbol, 'keyFor', function keyFor(sym) {
1039 if (!(sym instanceof Symbol)) throw TypeError();
1040 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
1041 var e = GlobalSymbolRegistry[i];
1042 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
1043 }
1044 return undefined;
1045 });
563e401a 1046
8b095871
IC
1047 // 19.4.2.6 Symbol.match
1048 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 1049
8b095871 1050 // 19.4.2.7 Symbol.prototype
563e401a 1051
8b095871
IC
1052 // 19.4.2.8 Symbol.replace
1053 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 1054
8b095871
IC
1055 // 19.4.2.9 Symbol.search
1056 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 1057
8b095871 1058 // 19.4.2.10 Symbol.species
563e401a 1059
8b095871
IC
1060 // 19.4.2.11 Symbol.search
1061 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 1062
8b095871 1063 // 19.4.2.12 Symbol.toPrimitive
563e401a 1064
8b095871
IC
1065 // 19.4.2.13 Symbol.toStringTag
1066 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
1067
1068 // 19.4.2.14 Symbol.unscopables
1069
1070 // 19.4.3 Properties of the Symbol Prototype Object
1071 // 19.4.3.1 Symbol.prototype.constructor
1072
1073 // 19.4.3.2 Symbol.prototype.toString ( )
1074 Object.defineProperty(Symbol.prototype, 'toString', {
1075 value: function toString() {
1076 var s = strict(this);
1077 var desc = s['[[Description]]'];
1078 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
1079 },
1080 configurable: true, writeable: true, enumerable: false });
1081
1082 // 19.4.3.3 Symbol.prototype.valueOf ( )
1083 Object.defineProperty(Symbol.prototype, 'valueOf', {
1084 value: function valueOf() {
1085 // To prevent automatic string conversion:
1086 throw TypeError();
1087
1088 // Spec has approximately the following:
1089 //var s = strict(this);
1090 //if (Type(s) === 'symbol') return s;
1091 //if (Type(s) !== 'object') throw TypeError();
1092 //if (!('[[SymbolData]]' in s)) throw TypeError();
1093 //return s['[[SymbolData]]'];
1094 },
1095 configurable: true, writeable: true, enumerable: false });
1096
1097 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1098 // (Done later to polyfill partial implementations)
1099
1100 // 19.4.4 Properties of Symbol Instances
1101 }());
1102
1103 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
1104
1105 // Defined here so that other prototypes can reference it
1106 // 25.1.2 The %IteratorPrototype% Object
1107 var $IteratorPrototype$ = {};
1108
1109 //----------------------------------------
1110 // 6 ECMAScript Data Types and Values
1111 //----------------------------------------
1112
1113 // 6.1 ECMAScript Language Types
1114
1115 // "Type(x)" is used as shorthand for "the type of x"...
1116 function Type(v) {
1117 switch (typeof v) {
1118 case 'undefined': return 'undefined';
1119 case 'boolean': return 'boolean';
1120 case 'number': return 'number';
1121 case 'string': return 'string';
1122 case 'symbol': return 'symbol';
1123 default:
1124 if (v === null) return 'null';
1125 if (v instanceof global.Symbol) return 'symbol';
1126 return 'object';
563e401a 1127 }
8b095871 1128 }
563e401a 1129
8b095871
IC
1130 // 6.1.5.1 Well-Known Symbols
1131 var $$iterator = global.Symbol.iterator,
1132 $$match = global.Symbol.match,
1133 $$replace = global.Symbol.replace,
1134 $$search = global.Symbol.search,
1135 $$split = global.Symbol.split,
1136 $$toStringTag = global.Symbol.toStringTag;
563e401a 1137
8b095871
IC
1138 //----------------------------------------
1139 // 7 Abstract Operations
1140 //----------------------------------------
1141
1142 //----------------------------------------
1143 // 7.1 Type Conversion
1144 //----------------------------------------
1145
1146 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1147 // just use valueOf()
1148
1149 // 7.1.2 ToBoolean ( argument )
1150 // just use Boolean()
1151
1152 // 7.1.3 ToNumber ( argument )
1153 // just use Number()
1154
1155 // 7.1.4 ToInteger ( argument )
1156 function ToInteger(n) {
1157 n = Number(n);
1158 if ($isNaN(n)) return 0;
1159 if (n === 0 || n === Infinity || n === -Infinity) return n;
1160 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1161 }
8b095871
IC
1162
1163 // 7.1.5 ToInt32 ( argument )
1164 function ToInt32(v) { return v >> 0; }
1165
1166 // 7.1.6 ToUint32 ( argument )
1167 function ToUint32(v) { return v >>> 0; }
1168
1169 // 7.1.7 ToInt16 ( argument )
1170 function ToInt16(v) { return (v << 16) >> 16; }
1171
1172 // 7.1.8 ToUint16 ( argument )
1173 function ToUint16(v) { return v & 0xFFFF; }
1174
1175 // 7.1.9 ToInt8 ( argument )
1176 function ToInt8(v) { return (v << 24) >> 24; }
1177
1178 // 7.1.10 ToUint8 ( argument )
1179 function ToUint8(v) { return v & 0xFF; }
1180
1181 // 7.1.11 ToUint8Clamp ( argument )
1182 function ToUint8Clamp(argument) {
1183 var number = Number(argument);
1184 if ($isNaN(number)) return 0;
1185 if (number <= 0) return 0;
1186 if (number >= 255) return 255;
1187 var f = floor(number);
1188 if ((f + 0.5) < number) return f + 1;
1189 if (number < (f + 0.5)) return f;
1190 if (f % 2) return f + 1;
1191 return f;
563e401a 1192 }
8b095871
IC
1193
1194 // 7.1.12 ToString ( argument )
1195 // just use String()
1196
1197 // 7.1.13 ToObject ( argument )
1198 function ToObject(v) {
1199 if (v === null || v === undefined) throw TypeError();
1200 return Object(v);
563e401a 1201 }
563e401a 1202
8b095871
IC
1203 // 7.1.14 ToPropertyKey ( argument )
1204 function ToPropertyKey(v) {
1205 return String(v);
1206 }
3af2954a 1207
8b095871
IC
1208 // 7.1.15 ToLength ( argument )
1209 function ToLength(v) {
1210 var len = ToInteger(v);
1211 if (len <= 0) return 0;
1212 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1213 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1214 }
3af2954a 1215
8b095871 1216 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1217
8b095871
IC
1218 //----------------------------------------
1219 // 7.2 Testing and Comparison Operations
1220 //----------------------------------------
3af2954a 1221
8b095871
IC
1222 // 7.2.1 RequireObjectCoercible ( argument )
1223 // 7.2.2 IsArray ( argument )
3af2954a 1224
8b095871
IC
1225 // 7.2.3 IsCallable ( argument )
1226 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1227
8b095871
IC
1228 // 7.2.4 IsConstructor ( argument )
1229 function IsConstructor(o) {
1230 // Hacks for Safari 7 TypedArray XXXConstructor objects
1231 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1232 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1233 // TODO: Can this be improved on?
1234 return typeof o === 'function';
3af2954a 1235 }
8b095871
IC
1236
1237 // 7.2.5 IsExtensible (O)
1238 // 7.2.6 IsInteger ( argument )
1239
1240 // 7.2.7 IsPropertyKey ( argument )
1241 function IsPropertyKey(argument) {
1242 if (Type(argument) === 'string') return true;
1243 if (Type(argument) === 'symbol') return true;
1244 return false;
3af2954a
IC
1245 }
1246
8b095871
IC
1247 // 7.2.8 IsRegExp ( argument )
1248 // 7.2.5 IsConstructor ( argument )
3af2954a 1249
8b095871
IC
1250 // 7.2.9 SameValue(x, y)
1251 function SameValue(x, y) {
1252 if (typeof x !== typeof y) return false;
1253 switch (typeof x) {
1254 case 'undefined':
1255 return true;
1256 case 'number':
1257 if (x !== x && y !== y) return true;
1258 if (x === 0 && y === 0) return 1/x === 1/y;
1259 return x === y;
1260 case 'boolean':
1261 case 'string':
1262 case 'object':
1263 default:
1264 return x === y;
1265 }
1266 }
3af2954a 1267
8b095871
IC
1268 // 7.2.10 SameValueZero(x, y)
1269 function SameValueZero(x, y) {
1270 if (typeof x !== typeof y) return false;
1271 switch (typeof x) {
1272 case 'undefined':
1273 return true;
1274 case 'number':
1275 if (x !== x && y !== y) return true;
1276 return x === y;
1277 case 'boolean':
1278 case 'string':
1279 case 'object':
1280 default:
1281 return x === y;
1282 }
1283 }
3af2954a 1284
8b095871
IC
1285 //----------------------------------------
1286 // 7.3 Operations on Objects
1287 //----------------------------------------
3af2954a 1288
8b095871
IC
1289 // 7.3.1 Get (O, P)
1290 // - just use o.p or o[p]
3af2954a 1291
8b095871
IC
1292 // 7.3.2 GetV (V, P)
1293 function GetV(v, p) {
1294 var o = ToObject(v);
1295 return o[p];
1296 }
3af2954a 1297
8b095871
IC
1298 // 7.3.3 Set (O, P, V, Throw)
1299 // - just use o.p = v or o[p] = v
3af2954a 1300
3af2954a 1301
3af2954a 1302
3af2954a 1303
8b095871
IC
1304 // 7.3.9 GetMethod (O, P)
1305 function GetMethod(o, p) {
1306 var func = GetV(o, p);
1307 if (func === undefined || func === null) return undefined;
1308 if (!IsCallable(func)) throw TypeError();
1309 return func;
ab78acc6 1310 }
8b095871
IC
1311
1312 // 7.3.10 HasProperty (O, P)
1313 function HasProperty(o, p) {
1314 while (o) {
1315 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1316 if (Type(o) !== 'object') return false;
1317 o = Object.getPrototypeOf(o);
ab78acc6 1318 }
8b095871 1319 return false;
ab78acc6 1320 }
8b095871
IC
1321
1322 // 7.3.11 HasOwnProperty (O, P)
1323 function HasOwnProperty(o, p) {
1324 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1325 }
3af2954a 1326
8b095871
IC
1327 //----------------------------------------
1328 // 7.4 Operations on Iterator Objects
1329 //----------------------------------------
3af2954a 1330
8b095871
IC
1331 // 7.4.1 GetIterator ( obj, method )
1332 function GetIterator(obj, method) {
1333 if (arguments.length < 2)
1334 method = GetMethod(obj, $$iterator);
1335 var iterator = method.call(obj);
1336 if (Type(iterator) !== 'object') throw TypeError();
1337 return iterator;
3af2954a
IC
1338 }
1339
8b095871
IC
1340 // 7.4.2 IteratorNext ( iterator, value )
1341 function IteratorNext(iterator, value) {
1342 if (arguments.length < 2)
1343 var result = iterator.next();
1344 else
1345 result = iterator.next(value);
1346 if (Type(result) !== 'object') throw TypeError();
1347 return result;
1348 }
3af2954a 1349
8b095871
IC
1350 // 7.4.3 IteratorComplete ( iterResult )
1351 function IteratorComplete(iterResult) {
1352 console.assert(Type(iterResult) === 'object');
1353 return Boolean(iterResult.done);
1354 }
3af2954a 1355
8b095871
IC
1356 // 7.4.4 IteratorValue ( iterResult )
1357 function IteratorValue(iterResult) {
1358 console.assert(Type(iterResult) === 'object');
1359 return iterResult.value;
1360 }
1361
1362 // 7.4.5 IteratorStep ( iterator )
1363 function IteratorStep( iterator, value ) {
1364 var result = IteratorNext(iterator, value);
1365 var done = result['done'];
1366 if (Boolean(done) === true) return false;
1367 return result;
1368 }
1369
1370 // 7.4.6 IteratorClose( iterator, completion )
1371 function IteratorClose( iterator, completion ) {
1372 console.assert(Type(iterator) === 'object');
1373 var _return = GetMethod(iterator, 'return');
1374 if (_return === undefined) return completion;
1375 try {
1376 var innerResult = _return[iterator]();
1377 } catch (result) {
1378 // TODO: If completion.[[type]] is throw, return completion
1379 return result;
1380 }
1381 if (Type(innerResult) !== 'object') throw TypeError();
1382 return completion;
1383 }
1384
1385 // 7.4.7 CreateIterResultObject (value, done)
1386 function CreateIterResultObject(value, done) {
1387 console.assert(Type(done) === 'boolean');
1388 var obj = {};
1389 obj["value"] = value;
1390 obj["done"] = done;
1391 return obj;
1392 }
1393
1394 // 7.4.8 CreateListIterator (list)
1395 // 7.4.8.1 ListIterator next( )
1396 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1397 // 7.4.9.1 CompoundIterator next( )
1398
1399 //----------------------------------------
1400 // 8 Executable Code and Execution Contexts
1401 //----------------------------------------
1402
1403 //----------------------------------------
1404 // 8.4 Jobs and Job Queues
1405 //----------------------------------------
1406
1407 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1408 function EnqueueJob(queueName, job, args) {
1409 var fn = function() { job.apply(undefined, args); };
1410 enqueue(fn);
1411 }
1412
1413 // 8.4.2 NextJob result
1414 function NextJob(result) {
1415 // no-op
1416 }
1417
1418 //----------------------------------------
1419 // 9 Ordinary and Exotic Objects Behaviors
1420 //----------------------------------------
1421
1422 // 9.1.11 [[Enumerate]] ()
1423 function Enumerate(obj) {
1424 var e = [];
1425 if (Object(obj) !== obj) return e;
1426 var visited = new Set;
1427 while (obj !== null) {
1428 Object.getOwnPropertyNames(obj).forEach(function(name) {
1429 if (!visited.has(name)) {
1430 var desc = Object.getOwnPropertyDescriptor(obj, name);
1431 if (desc) {
1432 visited.add(name);
1433 if (desc.enumerable) e.push(name);
1434 }
1435 }
1436 });
1437 obj = Object.getPrototypeOf(obj);
1438 }
1439 return e[$$iterator]();
1440 }
1441
1442 // 9.1.12 [[OwnPropertyKeys]] ( )
1443 function OwnPropertyKeys(o) {
1444 return Object.getOwnPropertyNames(o);
1445 }
1446
1447 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1448 function ObjectCreate(proto, internalSlotsList) {
1449 return Object.create(proto, internalSlotsList);
1450 }
1451
1452 // ---------------------------------------
1453 // 19 Fundamental Objects
1454 // ---------------------------------------
1455
1456 // ---------------------------------------
1457 // 19.1 Object Objects
1458 // ---------------------------------------
1459
1460 // 19.1.1 The Object Constructor
1461 // 19.1.1.1 Object ( [ value ] )
1462 // 19.1.2 Properties of the Object Constructor
1463 // 19.1.2.1 Object.assign ( target, ...sources )
1464 define(
1465 Object, 'assign',
1466 function assign(target, /*...*/sources) {
1467 var to = ToObject(target);
1468 if (arguments.length < 2) return to;
1469
1470 var sourcesIndex = 1;
1471 while (sourcesIndex < arguments.length) {
1472 var nextSource = arguments[sourcesIndex++];
1473 if (nextSource === undefined || nextSource === null) {
1474 var keys = [];
1475 } else {
1476 var from = ToObject(nextSource);
1477 keys = OwnPropertyKeys(from);
1478 }
1479 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1480 var nextKey = keys[keysIndex];
1481 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1482 if (desc !== undefined && desc.enumerable) {
1483 var propValue = from[nextKey];
1484 to[nextKey] = propValue;
1485 }
1486 }
1487 }
1488 return to;
1489 });
1490
1491 // 19.1.2.2 Object.create ( O [ , Properties ] )
1492 // 19.1.2.3 Object.defineProperties ( O, Properties )
1493 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1494 // 19.1.2.5 Object.freeze ( O )
1495 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1496
1497 (function() {
1498 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1499 $getOwnPropertyNames = Object.getOwnPropertyNames,
1500 $keys = Object.keys,
1501 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1502
1503 function isStringKey(k) { return !symbolForKey(k); }
1504
1505 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1506 define(
1507 Object, 'getOwnPropertyNames',
1508 function getOwnPropertyNames(o) {
1509 if (Object.prototype.toString.call(o) === '[object Window]') {
1510 // Workaround for cross-realm calling by IE itself.
1511 // https://github.com/inexorabletash/polyfill/issues/96
1512 try {
1513 return $getOwnPropertyNames(o).filter(isStringKey);
1514 } catch (_) {
1515 return $window_names.slice();
1516 }
1517 }
1518 return $getOwnPropertyNames(o).filter(isStringKey);
1519 }, !nativeSymbols);
1520
1521 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1522 define(
1523 Object, 'getOwnPropertySymbols',
1524 function getOwnPropertySymbols(o) {
1525 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1526 }, !nativeSymbols);
1527
1528 // 19.1.2.14 Object.keys ( O )
1529 define(
1530 Object, 'keys',
1531 function keys(o) {
1532 return $keys(o).filter(isStringKey);
1533 }, !nativeSymbols);
1534 }());
1535
1536 // 19.1.2.9 Object.getPrototypeOf ( O )
1537 // 19.1.2.10 Object.is ( value1, value2 )
1538 define(
1539 Object, 'is',
1540 function is(value1, value2) {
1541 return SameValue(value1, value2);
1542 });
1543
1544 // 19.1.2.11 Object.isExtensible ( O )
1545 // 19.1.2.12 Object.isFrozen ( O )
1546 // 19.1.2.13 Object.isSealed ( O )
1547
1548 // 19.1.2.14 Object.keys ( O )
1549 // see above
1550
1551 // 19.1.2.15 Object.preventExtensions ( O )
1552 // 19.1.2.16 Object.prototype
1553 // 19.1.2.17 Object.seal ( O )
1554
1555 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1556 define(
1557 Object, 'setPrototypeOf',
1558 function setPrototypeOf(o, proto) {
1559 if (Type(o) !== 'object') throw TypeError();
1560 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1561 o.__proto__ = proto;
1562 return o;
1563 }
1564 );
1565
1566 // 19.1.3 Properties of the Object Prototype Object
1567 // 19.1.3.1 Object.prototype.constructor
1568 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1569 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1570 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1571 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1572 // 19.1.3.6 Object.prototype.toString ( )
1573 hook(Object.prototype, 'toString',
1574 function() {
1575 var o = strict(this);
1576 if (o === Object(o) && $$toStringTag in o) {
1577 return '[object ' + o[$$toStringTag] + ']';
1578 }
1579 return undefined;
1580 });
1581
1582 // 19.1.3.7 Object.prototype.valueOf ( )
1583 // 19.1.4 Properties of Object Instances
1584
1585 // ---------------------------------------
1586 // 19.2 Function Objects
1587 // ---------------------------------------
1588
1589 // 19.2.1 The Function Constructor
1590 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1591 // 19.2.2 Properties of the Function Constructor
1592 // 19.2.2.1 Function.length
1593 // 19.2.2.2 Function.prototype
1594 // 19.2.3 Properties of the Function Prototype Object
1595 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1596 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1597 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1598 // 19.2.3.4 Function.prototype.constructor
1599 // 19.2.3.5 Function.prototype.toString ( )
1600 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1601 // 19.2.4 Function Instances
1602 // 19.2.4.1 length
1603 // 19.2.4.2 name
1604 // 19.2.4.3 prototype
1605
1606 // (No polyfillable changes from ES5)
1607
1608 // ---------------------------------------
1609 // 19.3 Boolean Objects
1610 // ---------------------------------------
1611
1612 // 19.3.1 The Boolean Constructor
1613 // 19.3.1.1 Boolean ( value )
1614 // 19.3.2 Properties of the Boolean Constructor
1615 // 19.3.2.1 Boolean.prototype
1616 // 19.3.3 Properties of the Boolean Prototype Object
1617 // 19.3.3.1 Boolean.prototype.constructor
1618 // 19.3.3.2 Boolean.prototype.toString ( )
1619 // 19.3.3.3 Boolean.prototype.valueOf ( )
1620 // 19.3.4 Properties of Boolean Instances
1621
1622 // (No polyfillable changes from ES5)
1623
1624 // ---------------------------------------
1625 // 19.4 Symbol Objects
1626 // ---------------------------------------
1627
1628 // Moved earlier in this script, so that other polyfills can depend on them.
1629
1630 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1631 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1632
1633 // ---------------------------------------
1634 // 19.5 Error Objects
1635 // ---------------------------------------
1636
1637 // 19.5.1 The Error Constructor
1638 // 19.5.1.1 Error ( message )
1639 // 19.5.1.2 new Error( ...argumentsList )
1640 // 19.5.2 Properties of the Error Constructor
1641 // 19.5.2.1 Error.prototype
1642 // 19.5.3 Properties of the Error Prototype Object
1643 // 19.5.3.1 Error.prototype.constructor
1644 // 19.5.3.2 Error.prototype.message
1645 // 19.5.3.3 Error.prototype.name
1646 // 19.5.3.4 Error.prototype.toString ( )
1647 // 19.5.4 Properties of Error Instances
1648 // 19.5.5 Native Error Types Used in This Standard
1649 // 19.5.5.1 EvalError
1650 // 19.5.5.2 RangeError
1651 // 19.5.5.3 ReferenceError
1652 // 19.5.5.4 SyntaxError
1653 // 19.5.5.5 TypeError
1654 // 19.5.5.6 URIError
1655 // 19.5.6 NativeError Object Structure
1656 // 19.5.6.1 NativeError Constructors
1657 // 19.5.6.1.1 NativeError ( message )
1658 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1659 // 19.5.6.2 Properties of the NativeError Constructors
1660 // 19.5.6.2.1 NativeError.prototype
1661 // 19.5.6.3 Properties of the NativeError Prototype Objects
1662 // 19.5.6.4 Properties of NativeError Instances
1663
1664 // (No polyfillable changes from ES5)
1665
1666 // ---------------------------------------
1667 // 20 Numbers and Dates
1668 // ---------------------------------------
1669
1670 // ---------------------------------------
1671 // 20.1 Number Objects
1672 // ---------------------------------------
1673
1674 // 20.1.1 The Number Constructor
1675 // 20.1.1.1 Number ( [ value ] )
1676 // 20.1.1.2 new Number ( ...argumentsList )
1677 // 20.1.2 Properties of the Number Constructor
1678
1679 // 20.1.2.1 Number.EPSILON
1680 define(
1681 Number, 'EPSILON',
1682 (function () {
1683 var next, result;
1684 for (next = 1; 1 + next !== 1; next = next / 2)
1685 result = next;
1686 return result;
1687 }()));
1688
1689 // 20.1.2.2 Number.isFinite ( number )
1690 define(
1691 Number, 'isFinite',
1692 function isFinite(number) {
1693 if (Type(number) !== 'number') return false;
1694 if (number !== number || number === +Infinity || number === -Infinity) return false;
1695 return true;
1696 });
1697
1698 // 20.1.2.3 Number.isInteger ( number )
1699 define(
1700 Number, 'isInteger',
1701 function isInteger(number) {
1702 if (Type(number) !== 'number') return false;
1703 if (number !== number || number === +Infinity || number === -Infinity) return false;
1704 var integer = ToInteger(number);
1705 if (integer !== number) return false;
1706 return true;
1707 });
1708
1709 // 20.1.2.4 Number.isNaN ( number )
1710 define(
1711 Number, 'isNaN',
1712 function isNaN(number) {
1713 if (Type(number) !== 'number') return false;
1714 if (number !== number) return true;
1715 return false;
1716 });
1717
1718 // 20.1.2.5 Number.isSafeInteger ( number )
1719 define(
1720 Number, 'isSafeInteger',
1721 function isSafeInteger(number) {
1722 if (Type(number) !== 'number') return false;
1723 if (number !== number || number === +Infinity || number === -Infinity) return false;
1724 var integer = ToInteger(number);
1725 if (integer !== number) return false;
1726 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1727 return true;
1728 return false;
1729 });
1730
1731 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1732 define(
1733 Number, 'MAX_SAFE_INTEGER',
1734 9007199254740991); // 2^53-1
1735
1736 // 20.1.2.7 Number.MAX_VALUE
1737
1738 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1739 define(
1740 Number, 'MIN_SAFE_INTEGER',
1741 -9007199254740991); // -2^53+1
1742
1743 // 20.1.2.9 Number.MIN_VALUE
1744 // 20.1.2.10 Number.NaN
1745 // 20.1.2.11 Number.NEGATIVE_INFINITY
1746
1747 // 20.1.2.12 Number.parseFloat ( string )
1748 define(Number, 'parseFloat', $parseFloat);
1749
1750 // 20.1.2.13 Number.parseInt ( string, radix )
1751 define(Number, 'parseInt', $parseInt);
1752
1753 // 20.1.2.14 Number.POSITIVE_INFINITY
1754 // 20.1.2.15 Number.prototype
1755
1756 // 20.1.3 Properties of the Number Prototype Object
1757 // 20.1.3.1 Number.prototype.constructor
1758 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1759 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1760 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1761 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1762 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1763 // 20.1.3.7 Number.prototype.valueOf ( )
1764 // 20.1.4 Properties of Number Instances
1765
1766 // ---------------------------------------
1767 // 20.2 The Math Object
1768 // ---------------------------------------
1769
1770 // 20.2.1 Value Properties of the Math Object
1771 // 20.2.1.1 Math.E
1772 // 20.2.1.2 Math.LN10
1773 // 20.2.1.3 Math.LN2
1774 // 20.2.1.4 Math.LOG10E
1775 // 20.2.1.5 Math.LOG2E
1776 // 20.2.1.6 Math.PI
1777 // 20.2.1.7 Math.SQRT1_2
1778 // 20.2.1.8 Math.SQRT2
1779
1780 // 20.2.1.9 Math [ @@toStringTag ]
1781 define(Math, $$toStringTag, 'Math');
1782
1783 // 20.2.2 Function Properties of the Math Object
1784 // 20.2.2.1 Math.abs ( x )
1785 // 20.2.2.2 Math.acos ( x )
1786
1787 // 20.2.2.3 Math.acosh(x)
1788 define(
1789 Math, 'acosh',
1790 function acosh(x) {
1791 x = Number(x);
1792 return log(x + sqrt(x * x - 1));
1793 });
1794
1795 // 20.2.2.4 Math.asin ( x )
1796
1797 // 20.2.2.5 Math.asinh( x )
1798 define(
1799 Math, 'asinh',
1800 function asinh(x) {
1801 x = Number(x);
1802 if (SameValue(x, -0)) {
1803 return x;
1804 }
1805 var s = sqrt(x * x + 1);
1806 return (s === -x) ? log(0) : log(x + s);
1807 });
1808
1809 // 20.2.2.6 Math.atan ( x )
1810
1811 // 20.2.2.7 Math.atanh( x )
1812 define(
1813 Math, 'atanh',
1814 function atanh(x) {
1815 x = Number(x);
1816 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1817 });
1818
1819 // 20.2.2.8 Math.atan2 ( y, x )
1820
1821 // 20.2.2.9 Math.cbrt ( x )
1822 define(
1823 Math, 'cbrt',
1824 function cbrt(x) {
1825 x = Number(x);
1826 if ($isNaN(x/x)) {
1827 return x;
1828 }
1829 var r = pow(abs(x), 1/3);
1830 var t = x/r/r;
1831 return r + (r * (t-r) / (2*r + t));
1832 });
1833
1834 // 20.2.2.10 Math.ceil ( x )
1835
1836 // 20.2.2.11 Math.clz32 ( x )
1837 define(
1838 Math, 'clz32',
1839 function clz32(x) {
1840 function clz8(x) {
1841 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1842 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1843 }
1844 x = ToUint32(x);
1845 return x & 0xff000000 ? clz8(x >> 24) :
1846 x & 0xff0000 ? clz8(x >> 16) + 8 :
1847 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1848 });
1849
1850
1851
1852 // 20.2.2.12 Math.cos ( x )
1853
1854 // 20.2.2.13 Math.cosh ( x )
1855 define(
1856 Math, 'cosh',
1857 function cosh(x) {
1858 x = Number(x);
1859 return (pow(E, x) + pow(E, -x)) / 2;
1860 });
1861
1862 // 20.2.2.14 Math.exp ( x )
1863
1864 // 20.2.2.15 Math.expm1 ( x )
1865 define(
1866 Math, 'expm1',
1867 function expm1(x) {
1868 x = Number(x);
1869 // from: http://www.johndcook.com/cpp_log1p.html
1870 if (SameValue(x, -0)) {
1871 return -0;
1872 } else if (abs(x) < 1e-5) {
1873 return x + 0.5 * x * x; // two terms of Taylor expansion
1874 } else {
1875 return exp(x) - 1;
1876 }
1877 });
1878
1879 // 20.2.2.16 Math.floor ( x )
1880
1881 // 20.2.2.17 Math.fround ( x )
1882 define(
1883 Math, 'fround',
1884 function fround(x) {
1885 if ($isNaN(x)) {
1886 return NaN;
1887 }
1888 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1889 return x;
1890 }
1891 return (new Float32Array([x]))[0];
1892 });
1893
1894 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1895 define(
1896 Math, 'hypot',
1897 function hypot() {
1898 var values = [];
1899 var m = 0, sawNaN = false;
1900 for (var i = 0; i < arguments.length; ++i) {
1901 var n = abs(Number(arguments[i]));
1902 if (n === Infinity) return n;
1903 if (n !== n) sawNaN = true;
1904 if (n > m) m = n;
1905 values[i] = n;
1906 }
1907 if (sawNaN) return NaN;
1908 if (m === 0) return +0;
1909 var sum = +0;
1910 for (i = 0; i < values.length; ++i) {
1911 var r = values[i] / m;
1912 sum = sum + r * r;
1913 }
1914 return m * sqrt(sum);
1915 });
1916
1917 // 20.2.2.19 Math.imul ( x, y )
1918 define(
1919 Math, 'imul',
1920 function imul(x, y) {
1921 var a = ToUint32(x);
1922 var b = ToUint32(y);
1923 // (slow but accurate)
1924 var ah = (a >>> 16) & 0xffff;
1925 var al = a & 0xffff;
1926 var bh = (b >>> 16) & 0xffff;
1927 var bl = b & 0xffff;
1928 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1929 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1930 );
1931
1932 // 20.2.2.20 Math.log ( x )
1933
1934 // 20.2.2.21 Math.log1p ( x )
1935 define(
1936 Math, 'log1p',
1937 function log1p(x) {
1938 x = Number(x);
1939 // from: http://www.johndcook.com/cpp_expm1.html
1940 if (x < -1) {
1941 return NaN;
1942 } else if (SameValue(x, -0)) {
1943 return -0;
1944 } else if (abs(x) > 1e-4) {
1945 return log(1 + x);
1946 } else {
1947 return (-0.5 * x + 1) * x;
1948 }
1949 });
1950
1951 // 20.2.2.22 Math.log10 ( x )
1952 define(
1953 Math, 'log10',
1954 function log10(x) {
1955 x = Number(x);
1956 return log(x) * LOG10E;
1957 });
1958
1959 // 20.2.2.23 Math.log2 ( x )
1960 define(
1961 Math, 'log2',
1962 function log2(x) {
1963 x = Number(x);
1964 return log(x) * LOG2E;
1965 });
1966
1967 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1968 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1969 // 20.2.2.26 Math.pow ( x, y )
1970 // 20.2.2.27 Math.random ( )
1971 // 20.2.2.28 Math.round ( x )
1972
1973 // 20.2.2.29 Math.sign(x)
1974 define(
1975 Math, 'sign',
1976 function sign(x) {
1977 x = Number(x);
1978 return x < 0 ? -1 : x > 0 ? 1 : x;
1979 });
1980
1981 // 20.2.2.30 Math.sin ( x )
1982
1983 // 20.2.2.31 Math.sinh( x )
1984 define(
1985 Math, 'sinh',
1986 function sinh(x) {
1987 x = Number(x);
1988 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1989 });
1990
1991 // 20.2.2.32 Math.sqrt ( x )
1992 // 20.2.2.33 Math.tan ( x )
1993
1994 // 20.2.2.34 Math.tanh ( x )
1995 define(
1996 Math, 'tanh',
1997 function tanh(x) {
1998 x = Number(x);
1999 var n = pow(E, 2 * x) - 1,
2000 d = pow(E, 2 * x) + 1;
2001 if (SameValue(x, -0))
2002 return x;
2003 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
2004 });
2005
2006 // 20.2.2.35 Math.trunc ( x )
2007 define(
2008 Math, 'trunc',
2009 function trunc(x) {
2010 x = Number(x);
2011 return $isNaN(x) ? NaN :
2012 x < 0 ? ceil(x) : floor(x);
2013 });
2014
2015 // ---------------------------------------
2016 // 20.3 Date Objects
2017 // ---------------------------------------
2018
2019 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
2020 // 20.3.1.1 Time Values and Time Range
2021 // 20.3.1.2 Day Number and Time within Day
2022 // 20.3.1.3 Year Number
2023 // 20.3.1.4 Month Number
2024 // 20.3.1.5 Date Number
2025 // 20.3.1.6 Week Day
2026 // 20.3.1.7 Local Time Zone Adjustment
2027 // 20.3.1.8 Daylight Saving Time Adjustment
2028 // 20.3.1.9 Local Time
2029 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
2030 // 20.3.1.11 MakeTime (hour, min, sec, ms)
2031 // 20.3.1.12 MakeDay (year, month, date)
2032 // 20.3.1.13 MakeDate (day, time)
2033 // 20.3.1.14 TimeClip (time)
2034 // 20.3.1.15 Date Time String Format
2035 // 20.3.1.15.1 Extended years
2036 // 20.3.2 The Date Constructor
2037 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2038 // 20.3.2.2 Date ( value )
2039 // 20.3.2.3 Date ( )
2040 // 20.3.3 Properties of the Date Constructor
2041 // 20.3.3.1 Date.now ( )
2042 // 20.3.3.2 Date.parse (string)
2043 // 20.3.3.3 Date.prototype
2044 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
2045 // 20.3.4 Properties of the Date Prototype Object
2046 // 20.3.4.1 Date.prototype.constructor
2047 // 20.3.4.2 Date.prototype.getDate ( )
2048 // 20.3.4.3 Date.prototype.getDay ( )
2049 // 20.3.4.4 Date.prototype.getFullYear ( )
2050 // 20.3.4.5 Date.prototype.getHours ( )
2051 // 20.3.4.6 Date.prototype.getMilliseconds ( )
2052 // 20.3.4.7 Date.prototype.getMinutes ( )
2053 // 20.3.4.8 Date.prototype.getMonth ( )
2054 // 20.3.4.9 Date.prototype.getSeconds ( )
2055 // 20.3.4.10 Date.prototype.getTime ( )
2056 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
2057 // 20.3.4.12 Date.prototype.getUTCDate ( )
2058 // 20.3.4.13 Date.prototype.getUTCDay ( )
2059 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
2060 // 20.3.4.15 Date.prototype.getUTCHours ( )
2061 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
2062 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
2063 // 20.3.4.18 Date.prototype.getUTCMonth ( )
2064 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
2065 // 20.3.4.20 Date.prototype.setDate ( date )
2066 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
2067 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
2068 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
2069 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
2070 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
2071 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
2072 // 20.3.4.27 Date.prototype.setTime ( time )
2073 // 20.3.4.28 Date.prototype.setUTCDate ( date )
2074 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
2075 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
2076 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
2077 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
2078 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
2079 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
2080 // 20.3.4.35 Date.prototype.toDateString ( )
2081 // 20.3.4.36 Date.prototype.toISOString ( )
2082 // 20.3.4.37 Date.prototype.toJSON ( key )
2083 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
2084 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2085 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
2086 // 20.3.4.41 Date.prototype.toString ( )
2087 // 20.3.4.42 Date.prototype.toTimeString ( )
2088 // 20.3.4.43 Date.prototype.toUTCString ( )
2089 // 20.3.4.44 Date.prototype.valueOf ( )
2090 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
2091 // 20.3.5 Properties of Date Instances
2092
2093 // (No polyfillable changes from ES5)
2094
2095 // ---------------------------------------
2096 // 21 Text Processing
2097 // ---------------------------------------
2098
2099 var string_regexp_dispatch = (function() {
2100 var faux = {}, secret = Symbol();
2101 faux[Symbol.match] = function() { return secret; };
2102 return ("").match(faux) === secret;
2103 }());
2104
2105 // 21.1 String Objects
2106 // 21.1.1 The String Constructor
2107 // 21.1.1.1 String ( value )
2108 // 21.1.2 Properties of the String Constructor
2109 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2110
2111 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2112 define(
2113 String, 'fromCodePoint',
2114 function fromCodePoint(/*...codePoints*/) {
2115 var codePoints = arguments,
2116 length = codePoints.length,
2117 elements = [],
2118 nextIndex = 0;
2119 while (nextIndex < length) {
2120 var next = codePoints[nextIndex];
2121 var nextCP = Number(next);
2122 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2123 nextCP < 0 || nextCP > 0x10FFFF) {
2124 throw RangeError('Invalid code point ' + nextCP);
2125 }
2126 if (nextCP < 0x10000) {
2127 elements.push(String.fromCharCode(nextCP));
2128 } else {
2129 nextCP -= 0x10000;
2130 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2131 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2132 }
2133 nextIndex += 1;
2134 }
2135 return elements.join('');
2136 });
2137
2138 // 21.1.2.3 String.prototype
2139
2140 // 21.1.2.4 String.raw ( template , ...substitutions )
2141 define(
2142 String, 'raw',
2143 function raw(template /*, ...substitutions*/) {
2144 var substitutions = [].slice.call(arguments, 1);
2145
2146 var cooked = Object(template);
2147 var rawValue = cooked['raw'];
2148 var raw = Object(rawValue);
2149 var len = raw['length'];
2150 var literalSegments = ToLength(len);
2151 if (literalSegments <= 0) return '';
2152 var stringElements = [];
2153 var nextIndex = 0;
2154 while (true) {
2155 var next = raw[nextIndex];
2156 var nextSeg = String(next);
2157 stringElements.push(nextSeg);
2158 if (nextIndex + 1 === literalSegments)
2159 return stringElements.join('');
2160 next = substitutions[nextIndex];
2161 var nextSub = String(next);
2162 stringElements.push(nextSub);
2163 nextIndex = nextIndex + 1;
2164 }
2165 });
2166
2167 // See https://githib.com/inexorabletash/uate for a more useful version.
2168
2169 // 21.1.3 Properties of the String Prototype Object
2170 // 21.1.3.1 String.prototype.charAt ( pos )
2171 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2172
2173 // 21.1.3.3 String.prototype.codePointAt ( pos )
2174 define(
2175 String.prototype, 'codePointAt',
2176 function codePointAt(pos) {
2177 var o = strict(this);
2178 var s = String(o);
2179 var position = ToInteger(pos);
2180 var size = s.length;
2181 if (position < 0 || position >= size) return undefined;
2182 var first = s.charCodeAt(position);
2183 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2184 var second = s.charCodeAt(position + 1);
2185 if (second < 0xDC00 || second > 0xDFFF) return first;
2186 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2187 });
2188
2189 // 21.1.3.4 String.prototype.concat ( ...args )
2190 // 21.1.3.5 String.prototype.constructor
2191
2192 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2193 define(
2194 String.prototype, 'endsWith',
2195 function endsWith(searchString) {
2196 var endPosition = arguments[1];
2197
2198 var o = strict(this);
2199 var s = String(o);
2200 var searchStr = String(searchString);
2201 var len = s.length;
2202 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2203 var end = min(max(pos, 0), len);
2204 var searchLength = searchStr.length;
2205 var start = end - searchLength;
2206 if (start < 0) return false;
2207 if (s.substring(start, start + searchLength) === searchStr) return true;
2208 return false;
2209 });
2210
2211 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2212 define(
2213 String.prototype, 'includes',
2214 function includes(searchString) {
2215 var position = arguments[1];
2216
2217 var o = strict(this);
2218 var s = String(o);
2219 var searchStr = String(searchString);
2220 var pos = ToInteger(position);
2221 var len = s.length;
2222 var start = min(max(pos, 0), len);
2223 return s.indexOf(searchStr, start) !== -1;
2224 });
2225
2226 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2227 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2228 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2229 // 21.1.3.11 String.prototype.match ( regexp )
2230 define(
2231 String.prototype, 'match',
2232 function match(regexp) {
2233 var o = strict(this);
2234 var s = String(o);
2235 if (HasProperty(regexp, $$match)) var rx = regexp;
2236 else rx = new RegExp(regexp);
2237 return rx[$$match](s);
2238 }, !string_regexp_dispatch);
2239
2240 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2241
2242 // Not practical due to table sizes; if needed, pull in:
2243 // https://github.com/walling/unorm/
2244
2245 // 21.1.3.13 String.prototype.repeat ( count )
2246 define(
2247 String.prototype, 'repeat',
2248 function repeat(count) {
2249 var o = strict(this);
2250 var s = String(o);
2251 var n = ToInteger(count);
2252 if (n < 0) throw RangeError();
2253 if (n === Infinity) throw RangeError();
2254 var t = new Array(n + 1).join(s);
2255 return t;
2256 });
2257
2258 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2259 define(
2260 String.prototype, 'replace',
2261 function replace(searchValue, replaceValue) {
2262 var o = strict(this);
2263 if (HasProperty(searchValue, $$replace))
2264 return searchValue[$$replace](o, replaceValue);
2265 return orig_replace.call(o, searchValue, replaceValue);
2266 }, !string_regexp_dispatch);
2267
2268 // 21.1.3.15 String.prototype.search ( regexp )
2269 define(
2270 String.prototype, 'search',
2271 function search(regexp) {
2272 var o = strict(this);
2273 var string = String(o);
2274 if (HasProperty(regexp, $$search)) var rx = regexp;
2275 else rx = new RegExp(regexp);
2276 return rx[$$search](string);
2277 }, !string_regexp_dispatch);
2278
2279 // 21.1.3.16 String.prototype.slice ( start, end )
2280 // 21.1.3.17 String.prototype.split ( separator, limit )
2281 define(
2282 String.prototype, 'split',
2283 function split(separator, limit) {
2284 var o = strict(this);
2285 if (HasProperty(separator, $$split))
2286 return separator[$$split](o, limit);
2287 return orig_split.call(o, separator, limit);
2288 }, !string_regexp_dispatch);
2289
2290 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2291 define(
2292 String.prototype, 'startsWith',
2293 function startsWith(searchString) {
2294 var position = arguments[1];
2295
2296 var o = strict(this);
2297 var s = String(o);
2298 var searchStr = String(searchString);
2299 var pos = ToInteger(position);
2300 var len = s.length;
2301 var start = min(max(pos, 0), len);
2302 var searchLength = searchStr.length;
2303 if (searchLength + start > len) return false;
2304 if (s.substring(start, start + searchLength) === searchStr) return true;
2305 return false;
2306 });
2307
2308 // 21.1.3.19 String.prototype.substring ( start, end )
2309 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2310 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2311 // 21.1.3.22 String.prototype.toLowerCase ( )
2312 // 21.1.3.23 String.prototype.toString ( )
2313 // 21.1.3.24 String.prototype.toUpperCase ( )
2314 // 21.1.3.25 String.prototype.trim ( )
2315 // 21.1.3.26 String.prototype.valueOf ( )
2316
2317 // 21.1.3.27 String.prototype [ @@iterator ]( )
2318 define(
2319 String.prototype, $$iterator,
2320 function entries() {
2321 return CreateStringIterator(this, 'value');
2322 });
2323
2324 // 21.1.4 Properties of String Instances
2325 // 21.1.4.1 length
2326
2327 // 21.1.5 String Iterator Objects
2328 /** @constructor */
2329 function StringIterator() {}
2330
2331 // 21.1.5.1 CreateStringIterator Abstract Operation
2332 function CreateStringIterator(string, kind) {
2333 var s = String(string);
2334 var iterator = new StringIterator;
2335 set_internal(iterator, '[[IteratedString]]', s);
2336 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2337 set_internal(iterator, '[[StringIterationKind]]', kind);
2338 return iterator;
2339 }
2340
2341 // 21.1.5.2 The %StringIteratorPrototype% Object
2342 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2343 StringIterator.prototype = $StringIteratorPrototype$;
2344
2345 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2346 define(
2347 $StringIteratorPrototype$, 'next',
2348 function next() {
2349 var o = ToObject(this);
2350 var s = String(o['[[IteratedString]]']),
2351 index = o['[[StringIteratorNextIndex]]'],
2352 len = s.length;
2353 if (index >= len) {
2354 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2355 return CreateIterResultObject(undefined, true);
2356 }
2357 var cp = s.codePointAt(index);
2358 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2359 return CreateIterResultObject(String.fromCodePoint(cp), false);
2360 });
2361
2362 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2363 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2364
2365 // 21.1.5.3 Properties of String Iterator Instances
2366
2367 // ---------------------------------------
2368 // 21.2 RegExp (Regular Expression) Objects
2369 // ---------------------------------------
2370
2371 // 21.2.1 Patterns
2372 // 21.2.2 Pattern Semantics
2373 // 21.2.2.1 Notation
2374 // 21.2.2.2 Pattern
2375 // 21.2.2.3 Disjunction
2376 // 21.2.2.4 Alternative
2377 // 21.2.2.5 Term
2378 // 21.2.2.6 Assertion
2379 // 21.2.2.7 Quantifier
2380 // 21.2.2.8 Atom
2381 // 21.2.2.9 AtomEscape
2382 // 21.2.2.10 CharacterEscape
2383 // 21.2.2.11 DecimalEscape
2384 // 21.2.2.12 CharacterClassEscape
2385 // 21.2.2.13 CharacterClass
2386 // 21.2.2.14 ClassRanges
2387 // 21.2.2.15 NonemptyClassRanges
2388 // 21.2.2.16 NonemptyClassRangesNoDash
2389 // 21.2.2.17 ClassAtom
2390 // 21.2.2.18 ClassAtomNoDash
2391 // 21.2.2.19 ClassEscape
2392 // 21.2.3 The RegExp Constructor
2393 // 21.2.3.1 RegExp ( pattern, flags )
2394 // 21.2.3.2 new RegExp( ...argumentsList )
2395 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2396 // 21.2.4 Properties of the RegExp Constructor
2397 // 21.2.4.1 RegExp.prototype
2398 // 21.2.5 Properties of the RegExp Prototype Object
2399 // 21.2.5.1 RegExp.prototype.constructor
2400 // 21.2.5.2 RegExp.prototype.exec ( string )
2401
2402 // 21.2.5.3 get RegExp.prototype.flags
2403 if (!('flags' in RegExp.prototype)) {
2404 Object.defineProperty(
2405 RegExp.prototype, 'flags', {
2406 get: function() {
2407 var s = String(this);
2408 return s.substring(s.lastIndexOf('/') + 1);
2409 }
2410 });
2411 }
2412
2413 // 21.2.5.4 get RegExp.prototype.global
2414 // 21.2.5.5 get RegExp.prototype.ignoreCase
2415
2416 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2417 define(RegExp.prototype, $$match, function(string) {
2418 var o = strict(this);
2419 return orig_match.call(string, o);
2420 });
2421
2422 // 21.2.5.7 get RegExp.prototype.multiline
2423
2424 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2425 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2426 var o = strict(this);
2427 return orig_replace.call(string, o, replaceValue);
2428 });
2429
2430 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2431 define(RegExp.prototype, $$search, function(string) {
2432 var o = strict(this);
2433 return orig_search.call(string, o);
2434 });
2435
2436 // 21.2.5.10 get RegExp.prototype.source
2437
2438 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2439 define(RegExp.prototype, $$split, function(string, limit) {
2440 var o = strict(this);
2441 return orig_split.call(string, o, limit);
2442 });
2443
2444 // 21.2.5.12 get RegExp.prototype.sticky
2445 // 21.2.5.13 RegExp.prototype.test( S )
2446 // 21.2.5.14 RegExp.prototype.toString ( )
2447 // 21.2.5.15 get RegExp.prototype.unicode
2448
2449 // 21.2.6 Properties of RegExp Instances
2450 // 21.2.6.1 lastIndex
2451
2452 // (No polyfillable changes from ES5)
2453
2454 // ---------------------------------------
2455 // 22 Indexed Collections
2456 // ---------------------------------------
2457
2458 // ---------------------------------------
2459 // 22.1 Array Objects
2460 // ---------------------------------------
2461
2462 // 22.1.1 The Array Constructor
2463 // 22.1.1.1 Array ( )
2464 // 22.1.1.2 Array (len)
2465 // 22.1.1.3 Array (...items )
2466
2467 // 22.1.2 Properties of the Array Constructor
2468
2469 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2470 define(
2471 Array, 'from',
2472 function from(items) {
2473 var mapfn = arguments[1];
2474 var thisArg = arguments[2];
2475
2476 var c = strict(this);
2477 if (mapfn === undefined) {
2478 var mapping = false;
2479 } else {
2480 if (!IsCallable(mapfn)) throw TypeError();
2481 var t = thisArg;
2482 mapping = true;
2483 }
2484 var usingIterator = GetMethod(items, $$iterator);
2485 if (usingIterator !== undefined) {
2486 if (IsConstructor(c)) {
2487 var a = new c();
2488 } else {
2489 a = new Array(0);
2490 }
2491 var iterator = GetIterator(items, usingIterator);
2492 var k = 0;
2493 while (true) {
2494 var next = IteratorStep(iterator);
2495 if (next === false) {
2496 a.length = k;
2497 return a;
2498 }
2499 var nextValue = IteratorValue(next);
2500 if (mapping)
2501 var mappedValue = mapfn.call(t, nextValue);
2502 else
2503 mappedValue = nextValue;
2504 a[k] = mappedValue;
2505 k += 1;
2506 }
2507 }
2508 var arrayLike = ToObject(items);
2509 var lenValue = arrayLike.length;
2510 var len = ToLength(lenValue);
2511 if (IsConstructor(c)) {
2512 a = new c(len);
2513 } else {
2514 a = new Array(len);
2515 }
2516 k = 0;
2517 while (k < len) {
2518 var kValue = arrayLike[k];
2519 if (mapping)
2520 mappedValue = mapfn.call(t, kValue, k);
2521 else
2522 mappedValue = kValue;
2523 a[k] = mappedValue;
2524 k += 1;
2525 }
2526 a.length = len;
2527 return a;
2528 });
2529
2530 // 22.1.2.2 Array.isArray ( arg )
2531
2532 // 22.1.2.3 Array.of ( ...items )
2533 define(
2534 Array, 'of',
2535 function of() {
2536 var items = arguments;
2537
2538 var lenValue = items.length;
2539 var len = ToUint32(lenValue);
2540 var c = strict(this), a;
2541 if (IsConstructor(c)) {
2542 a = new c(len);
2543 a = ToObject(a);
2544 } else {
2545 a = new Array(len);
2546 }
2547 var k = 0;
2548 while (k < len) {
2549 a[k] = items[k];
2550 k += 1;
2551 }
2552 a.length = len;
2553 return a;
2554 });
2555
2556 // 22.1.2.4 Array.prototype
2557 // 22.1.2.5 get Array [ @@species ]
2558 // 22.1.3 Properties of the Array Prototype Object
2559 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2560 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2561 // 22.1.3.2 Array.prototype.constructor
2562 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2563 define(
2564 Array.prototype, 'copyWithin',
2565 function copyWithin(target, start/*, end*/) {
2566 var end = arguments[2];
2567
2568 var o = ToObject(this);
2569 var lenVal = o.length;
2570 var len = ToLength(lenVal);
2571 len = max(len, 0);
2572 var relativeTarget = ToInteger(target);
2573 var to;
2574 if (relativeTarget < 0)
2575 to = max(len + relativeTarget, 0);
2576 else
2577 to = min(relativeTarget, len);
2578 var relativeStart = ToInteger(start);
2579 var from;
2580 if (relativeStart < 0)
2581 from = max(len + relativeStart, 0);
2582 else
2583 from = min(relativeStart, len);
2584 var relativeEnd;
2585 if (end === undefined)
2586 relativeEnd = len;
2587 else
2588 relativeEnd = ToInteger(end);
2589 var final;
2590 if (relativeEnd < 0)
2591 final = max(len + relativeEnd, 0);
2592 else
2593 final = min(relativeEnd, len);
2594 var count = min(final - from, len - to);
2595 var direction;
2596 if (from < to && to < from + count) {
2597 direction = -1;
2598 from = from + count - 1;
2599 to = to + count - 1;
2600 } else {
2601 direction = 1;
2602 }
2603 while (count > 0) {
2604 var fromKey = String(from);
2605 var toKey = String(to);
2606 var fromPresent = HasProperty(o, fromKey);
2607 if (fromPresent) {
2608 var fromVal = o[fromKey];
2609 o[toKey] = fromVal;
2610 } else {
2611 delete o[toKey];
2612 }
2613 from = from + direction;
2614 to = to + direction;
2615 count = count - 1;
2616 }
2617 return o;
2618 });
2619
2620 // 22.1.3.4 Array.prototype.entries ( )
2621 var nativeArrayIteratorMethods =
2622 ('entries' in Array.prototype && 'next' in [].entries());
2623
2624 define(
2625 Array.prototype, 'entries',
2626 function entries() {
2627 return CreateArrayIterator(this, 'key+value');
2628 }, !nativeArrayIteratorMethods);
2629
2630 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2631
2632 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2633 define(
2634 Array.prototype, 'fill',
2635 function fill(value/*, start, end*/) {
2636 var start = arguments[1],
2637 end = arguments[2];
2638
2639 var o = ToObject(this);
2640 var lenVal = o.length;
2641 var len = ToLength(lenVal);
2642 len = max(len, 0);
2643 var relativeStart = ToInteger(start);
2644 var k;
2645 if (relativeStart < 0)
2646 k = max((len + relativeStart), 0);
2647 else
2648 k = min(relativeStart, len);
2649 var relativeEnd;
2650 if (end === undefined)
2651 relativeEnd = len;
2652 else
2653 relativeEnd = ToInteger(end);
2654 var final;
2655 if (relativeEnd < 0)
2656 final = max((len + relativeEnd), 0);
2657 else
2658 final = min(relativeEnd, len);
2659 while (k < final) {
2660 var pk = String(k);
2661 o[pk] = value;
2662 k += 1;
2663 }
2664 return o;
2665 });
2666
2667 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2668
2669 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2670 define(
2671 Array.prototype, 'find',
2672 function find(predicate) {
2673 var o = ToObject(this);
2674 var lenValue = o.length;
2675 var len = ToInteger(lenValue);
2676 if (!IsCallable(predicate)) throw TypeError();
2677 var t = arguments.length > 1 ? arguments[1] : undefined;
2678 var k = 0;
2679 while (k < len) {
2680 var pk = String(k);
2681 var kPresent = HasProperty(o, pk);
2682 if (kPresent) {
2683 var kValue = o[pk];
2684 var testResult = predicate.call(t, kValue, k, o);
2685 if (Boolean(testResult)) {
2686 return kValue;
2687 }
2688 }
2689 ++k;
2690 }
2691 return undefined;
2692 });
2693
2694 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2695 define(
2696 Array.prototype, 'findIndex',
2697 function findIndex(predicate) {
2698 var o = ToObject(this);
2699 var lenValue = o.length;
2700 var len = ToLength(lenValue);
2701 if (!IsCallable(predicate)) throw TypeError();
2702 var t = arguments.length > 1 ? arguments[1] : undefined;
2703 var k = 0;
2704 while (k < len) {
2705 var pk = String(k);
2706 var kPresent = HasProperty(o, pk);
2707 if (kPresent) {
2708 var kValue = o[pk];
2709 var testResult = predicate.call(t, kValue, k, o);
2710 if (Boolean(testResult)) {
2711 return k;
2712 }
2713 }
2714 ++k;
2715 }
2716 return -1;
2717 });
2718
2719 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2720 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2721 // 22.1.3.12 Array.prototype.join (separator)
2722
2723 // 22.1.3.13 Array.prototype.keys ( )
2724 define(
2725 Array.prototype, 'keys',
2726 function keys() {
2727 return CreateArrayIterator(this, 'key');
2728 }, !nativeArrayIteratorMethods);
2729
2730 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2731 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2732 // 22.1.3.16 Array.prototype.pop ( )
2733 // 22.1.3.17 Array.prototype.push ( ...items )
2734 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2735 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2736 // 22.1.3.20 Array.prototype.reverse ( )
2737 // 22.1.3.21 Array.prototype.shift ( )
2738 // 22.1.3.22 Array.prototype.slice (start, end)
2739 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2740 // 22.1.3.24 Array.prototype.sort (comparefn)
2741 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2742 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2743 // 22.1.3.27 Array.prototype.toString ( )
2744 // 22.1.3.28 Array.prototype.unshift ( ...items )
2745
2746 // 22.1.3.29 Array.prototype.values ( )
2747 define(
2748 Array.prototype, 'values',
2749 function values() {
2750 return CreateArrayIterator(this, 'value');
2751 }, !nativeArrayIteratorMethods);
2752
2753 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2754 define(
2755 Array.prototype, $$iterator,
2756 Array.prototype.values
2757 );
2758
2759 // 22.1.3.31 Array.prototype [ @@unscopables ]
2760 // 22.1.4 Properties of Array Instances
2761 // 22.1.4.1 length
2762
2763 // 22.1.5 Array Iterator Objects
2764 function ArrayIterator() {}
2765
2766 // 22.1.5.1 CreateArrayIterator Abstract Operation
2767 function CreateArrayIterator(array, kind) {
2768 var o = ToObject(array);
2769 var iterator = new ArrayIterator;
2770 set_internal(iterator, '[[IteratedObject]]', o);
2771 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2772 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2773 return iterator;
2774 }
2775
2776 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2777 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2778 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2779
2780 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2781 define(
2782 $ArrayIteratorPrototype$, 'next',
2783 function next() {
2784 var o = strict(this);
2785 if (Type(o) !== 'object') throw TypeError();
2786 var a = o['[[IteratedObject]]'],
2787 index = o['[[ArrayIteratorNextIndex]]'],
2788 itemKind = o['[[ArrayIterationKind]]'],
2789 lenValue = a.length,
2790 len = ToUint32(lenValue),
2791 elementKey,
2792 elementValue;
2793 if (itemKind.indexOf('sparse') !== -1) {
2794 var found = false;
2795 while (!found && index < len) {
2796 elementKey = String(index);
2797 found = HasProperty(a, elementKey);
2798 if (!found) {
2799 index += 1;
2800 }
2801 }
2802 }
2803 if (index >= len) {
2804 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2805 return CreateIterResultObject(undefined, true);
2806 }
2807 elementKey = index;
2808 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2809 if (itemKind.indexOf('value') !== -1)
2810 elementValue = a[elementKey];
2811 if (itemKind.indexOf('key+value') !== -1)
2812 return CreateIterResultObject([elementKey, elementValue], false);
2813 if (itemKind.indexOf('key') !== -1)
2814 return CreateIterResultObject(elementKey, false);
2815 if (itemKind === 'value')
2816 return CreateIterResultObject(elementValue, false);
2817 throw Error('Internal error');
2818 });
2819
2820 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2821 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2822
2823 // 22.1.5.3 Properties of Array Iterator Instances
2824
2825
2826 // ---------------------------------------
2827 // 22.2 TypedArray Objects
2828 // ---------------------------------------
2829
2830 // See typedarray.js for TypedArray polyfill
2831
2832 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2833 'Int16Array', 'Uint16Array',
2834 'Int32Array', 'Uint32Array',
2835 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2836 if (!($TypedArrayName$ in global))
2837 return;
2838 var $TypedArray$ = global[$TypedArrayName$];
2839
2840 // 22.2.1 The %TypedArray% Intrinsic Object
2841 // 22.2.1.1 %TypedArray% ( length )
2842 // 22.2.1.2 %TypedArray% ( typedArray )
2843 // 22.2.1.3 %TypedArray% ( object )
2844 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2845 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2846 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2847
2848 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2849 define(
2850 $TypedArray$, 'from',
2851 function from(source) {
2852 var mapfn = arguments[1];
2853 var thisArg = arguments[2];
2854
2855 var c = strict(this);
2856 if (!IsConstructor(c)) throw TypeError();
2857 if (mapfn === undefined) {
2858 var mapping = false;
2859 } else {
2860 if (IsCallable(mapfn)) throw TypeError();
2861 var t = thisArg;
2862 mapping = true;
2863 }
2864 var usingIterator = GetMethod(source, $$iterator);
2865 if (usingIterator !== undefined) {
2866 var iterator = GetIterator(source, usingIterator);
2867 var values = [];
2868 var next = true;
2869 while (next !== false) {
2870 next = IteratorStep(iterator);
2871 if (next !== false) {
2872 var nextValue = IteratorValue(next);
2873 values.push(nextValue);
2874 }
2875 }
2876 var len = values.length;
2877 var newObj = new c(len);
2878 var k = 0;
2879 while (k < len) {
2880 var kValue = values.shift();
2881 if (mapping) {
2882 var mappedValue = mapfn.call(t, kValue);
2883 } else {
2884 mappedValue = kValue;
2885 }
2886 newObj[k] = mappedValue;
2887 ++k;
2888 }
2889 console.assert(values.length === 0);
2890 return newObj;
2891 }
2892 var arrayLike = ToObject(source);
2893 var lenValue = arrayLike.length;
2894 len = ToLength(lenValue);
2895 newObj = new c(len);
2896 k = 0;
2897 while (k < len) {
2898 kValue = arrayLike[k];
2899 if (mapping) {
2900 mappedValue = mapfn.call(t, kValue, k);
2901 } else {
2902 mappedValue = kValue;
2903 }
2904 newObj[k] = mappedValue;
2905 ++k;
2906 }
2907 return newObj;
2908 });
2909
2910 // 22.2.2.2 %TypedArray%.of ( ...items )
2911 define(
2912 $TypedArray$, 'of',
2913 function of() {
2914 var items = arguments;
2915
2916 var len = items.length;
2917 var c = strict(this);
2918 var newObj = new c(len);
2919 var k = 0;
2920 while (k < len) {
2921 newObj[k] = items[k];
2922 ++k;
2923 }
2924 return newObj;
2925 });
2926
2927 // 22.2.2.3 %TypedArray%.prototype
2928 // 22.2.2.4 get %TypedArray% [ @@species ]
2929 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2930 // 22.2.3.1 get %TypedArray%.prototype.buffer
2931 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2932 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2933 // 22.2.3.4 %TypedArray%.prototype.constructor
2934
2935 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2936 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2937
2938 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2939 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2940
2941 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2942 define($TypedArray$.prototype, 'every', Array.prototype.every);
2943
2944 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2945 define(
2946 $TypedArray$.prototype, 'fill',
2947 //Array.prototype.fill // Doesn't work in Safari 7
2948 function fill(value/*, start, end*/) {
2949 var start = arguments[1],
2950 end = arguments[2];
2951
2952 var o = ToObject(this);
2953 var lenVal = o.length;
2954 var len = ToLength(lenVal);
2955 len = max(len, 0);
2956 var relativeStart = ToInteger(start);
2957 var k;
2958 if (relativeStart < 0) k = max((len + relativeStart), 0);
2959 else k = min(relativeStart, len);
2960 var relativeEnd;
2961 if (end === undefined) relativeEnd = len;
2962 else relativeEnd = ToInteger(end);
2963 var final;
2964 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2965 else final = min(relativeEnd, len);
2966 while (k < final) {
2967 var pk = String(k);
2968 o[pk] = value;
2969 k += 1;
2970 }
2971 return o;
2972 });
2973
2974 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2975 define(
2976 $TypedArray$.prototype, 'filter',
2977 function filter(callbackfn) {
2978 var thisArg = arguments[1];
2979
2980 var o = ToObject(this);
2981 var lenVal = o.length;
2982 var len = ToLength(lenVal);
2983 if (!IsCallable(callbackfn)) throw TypeError();
2984 var t = thisArg;
2985 var c = o.constructor;
2986 var kept = [];
2987 var k = 0;
2988 var captured = 0;
2989 while (k < len) {
2990 var kValue = o[k];
2991 var selected = callbackfn.call(t, kValue, k, o);
2992 if (selected) {
2993 kept.push(kValue);
2994 ++captured;
2995 }
2996 ++k;
2997 }
2998 var a = new c(captured);
2999 var n = 0;
3000 for (var i = 0; i < kept.length; ++i) {
3001 var e = kept[i];
3002 a[n] = e;
3003 ++n;
3004 }
3005 return a;
3006 });
3007
3008 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
3009 define($TypedArray$.prototype, 'find', Array.prototype.find);
3010
3011 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
3012 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
3013
3014 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
3015 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
3016
3017 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
3018 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
3019
3020 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
3021 define($TypedArray$.prototype, 'join', Array.prototype.join);
3022
3023 // 22.2.3.15 %TypedArray%.prototype.keys ( )
3024 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
3025
3026 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
3027 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
3028
3029 // 22.2.3.17 get %TypedArray%.prototype.length
3030
3031 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
3032 define(
3033 $TypedArray$.prototype, 'map',
3034 function map(callbackfn) {
3035 var thisArg = arguments[1];
3036
3037 var o = ToObject(this);
3038 var lenValue = o.length;
3039 var len = ToLength(lenValue);
3040 if (!IsCallable(callbackfn)) throw TypeError();
3041 var t = thisArg;
3042 var a = undefined;
3043 var c = o.constructor;
3044 if (IsConstructor(c))
3045 a = new c(len);
3046 if (a === undefined)
3047 a = new Array(len);
3048 var k = 0;
3049 while (k < len) {
3050 var kPresent = HasProperty(o, k);
3051 if (kPresent) {
3052 var kValue = o[k];
3053 var mappedValue = callbackfn.call(t, kValue, k, o);
3054 a[k] = mappedValue;
3055 }
3056 ++k;
3057 }
3058 return a;
3059 });
3060
3061 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
3062 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
3063
3064 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
3065 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
3066
3067 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
3068 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
3069
3070 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
3071 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
3072 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
3073
3074 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
3075 define(
3076 $TypedArray$.prototype, 'slice',
3077 function slice(start, end) {
3078 var o = ToObject(this);
3079 var lenVal = o.length;
3080 var len = ToLength(lenVal);
3081 var relativeStart = ToInteger(start);
3082 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
3083 var relativeEnd = (end === undefined) ? len : ToInteger(end);
3084 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
3085 var count = final - k;
3086 var c = o.constructor;
3087 if (IsConstructor(c)) {
3088 var a = new c(count);
3089 } else {
3090 throw TypeError();
3091 }
3092 var n = 0;
3093 while (k < final) {
3094 var kValue = o[k];
3095 a[n] = kValue;
3096 ++k;
3097 ++n;
3098 }
3099 return a;
3100 });
3101
3102 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
3103 define($TypedArray$.prototype, 'some', Array.prototype.some);
3104
3105 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
3106 define(
3107 $TypedArray$.prototype, 'sort',
3108 function sort() {
3109 var comparefn = arguments[0];
3110
3111 function sortCompare(x, y) {
3112 console.assert(Type(x) === 'number' && Type(y) === 'number');
3113 if (x !== x && y !== y) return +0;
3114 if (x !== x) return 1;
3115 if (y !== y) return -1;
3116 if (comparefn !== undefined) {
3117 return comparefn(x, y);
3118 }
3119 if (x < y) return -1;
3120 if (x > y) return 1;
3121 return +0;
3122 }
3123 return Array.prototype.sort.call(this, sortCompare);
3124 });
3125
3126 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3127 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3128 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3129
3130 // 22.2.3.29 %TypedArray%.prototype.values ( )
3131 define($TypedArray$.prototype, 'values', Array.prototype.values);
3132
3133 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3134 define(
3135 $TypedArray$.prototype, $$iterator,
3136 $TypedArray$.prototype.values
3137 );
3138
3139 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3140 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3141
3142 // 22.2.4 The TypedArray Constructors
3143 // 22.2.4.1TypedArray( ... argumentsList)
3144 // 22.2.5 Properties of the TypedArray Constructors
3145 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3146 // 22.2.5.2 TypedArray.prototype
3147 // 22.2.6 Properties of TypedArray Prototype Objects
3148 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3149 // 22.2.6.2 TypedArray.prototype.constructor
3150 // 22.2.7 Properties of TypedArray Instances
3151 });
3152
3153 // ---------------------------------------
3154 // 23 Keyed Collection
3155 // ---------------------------------------
3156
3157 // ---------------------------------------
3158 // 23.1 Map Objects
3159 // ---------------------------------------
3160
3161 (function() {
3162 // 23.1.1 The Map Constructor
3163
3164 // 23.1.1.1 Map ( [ iterable ] )
3165 /** @constructor */
3166 function Map(/*iterable*/) {
3167 var map = strict(this);
3168 var iterable = arguments[0];
3169
3170 if (Type(map) !== 'object') throw TypeError();
3171 if ('[[MapData]]' in map) throw TypeError();
3172
3173 if (iterable !== undefined) {
3174 var adder = map['set'];
3175 if (!IsCallable(adder)) throw TypeError();
3176 var iter = GetIterator(ToObject(iterable));
3177 }
3178 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3179 if (iter === undefined) return map;
3180 while (true) {
3181 var next = IteratorStep(iter);
3182 if (next === false)
3183 return map;
3184 var nextItem = IteratorValue(next);
3185 if (Type(nextItem) !== 'object') throw TypeError();
3186 var k = nextItem[0];
3187 var v = nextItem[1];
3188 adder.call(map, k, v);
3189 }
3190
3191 return map;
3192 }
3193
3194 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3195 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3196 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3197 (new global.Map([['a', 1]]).size !== 1))
3198 global.Map = Map;
3199
3200
3201 function MapDataIndexOf(mapData, key) {
3202 var i;
3203 if (key === key) return mapData.keys.indexOf(key);
3204 // Slow case for NaN
3205 for (i = 0; i < mapData.keys.length; i += 1)
3206 if (SameValueZero(mapData.keys[i], key)) return i;
3207 return -1;
3208 }
3209
3210 // 23.1.1.2 new Map ( ... argumentsList )
3211 // 23.1.2 Properties of the Map Constructor
3212 // 23.1.2.1 Map.prototype
3213 var $MapPrototype$ = {};
3214 Map.prototype = $MapPrototype$;
3215
3216 // 23.1.2.2 get Map [ @@species ]
3217
3218 // 23.1.3 Properties of the Map Prototype Object
3219 // 23.1.3.1 Map.prototype.clear ()
3220 define(
3221 Map.prototype, 'clear',
3222 function clear() {
3223 var m = strict(this);
3224 if (Type(m) !== 'object') throw TypeError();
3225 if (!('[[MapData]]' in m)) throw TypeError();
3226 if (m['[[MapData]]'] === undefined) throw TypeError();
3227 var entries = m['[[MapData]]'];
3228 entries.keys.length = 0;
3229 entries.values.length = 0;
3230 return undefined;
3231 });
3232
3233 // 23.1.3.2 Map.prototype.constructor
3234
3235 // 23.1.3.3 Map.prototype.delete ( key )
3236 define(
3237 Map.prototype, 'delete',
3238 function delete_(key) {
3239 var m = strict(this);
3240 if (Type(m) !== 'object') throw TypeError();
3241 if (!('[[MapData]]' in m)) throw TypeError();
3242 if (m['[[MapData]]'] === undefined) throw TypeError();
3243 var entries = m['[[MapData]]'];
3244 var i = MapDataIndexOf(entries, key);
3245 if (i < 0) return false;
3246 entries.keys[i] = empty;
3247 entries.values[i] = empty;
3248 return true;
3249 });
3250
3251 // 23.1.3.4 Map.prototype.entries ( )
3252 define(
3253 Map.prototype, 'entries',
3254 function entries() {
3255 var m = strict(this);
3256 if (Type(m) !== 'object') throw TypeError();
3257 return CreateMapIterator(m, 'key+value');
3258 });
3259
3260 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3261 define(
3262 Map.prototype, 'forEach',
3263 function forEach(callbackfn /*, thisArg*/) {
3264 var thisArg = arguments[1];
3265
3266 var m = strict(this);
3267 if (Type(m) !== 'object') throw TypeError();
3268 if (!('[[MapData]]' in m)) throw TypeError();
3269 if (m['[[MapData]]'] === undefined) throw TypeError();
3270 var entries = m['[[MapData]]'];
3271
3272 if (!IsCallable(callbackfn)) {
3273 throw TypeError('First argument to forEach is not callable.');
3274 }
3275 for (var i = 0; i < entries.keys.length; ++i) {
3276 if (entries.keys[i] !== empty) {
3277 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3278 }
3279 }
3280 return undefined;
3281 });
3282
3283 // 23.1.3.6 Map.prototype.get ( key )
3284 define(
3285 Map.prototype, 'get',
3286 function get(key) {
3287 var m = strict(this);
3288 if (Type(m) !== 'object') throw TypeError();
3289 if (!('[[MapData]]' in m)) throw TypeError();
3290 if (m['[[MapData]]'] === undefined) throw TypeError();
3291 var entries = m['[[MapData]]'];
3292 var i = MapDataIndexOf(entries, key);
3293 if (i >= 0) return entries.values[i];
3294 return undefined;
3295 });
3296
3297 // 23.1.3.7 Map.prototype.has ( key )
3298 define(
3299 Map.prototype, 'has',
3300 function has(key) {
3301 var m = strict(this);
3302 if (Type(m) !== 'object') throw TypeError();
3303 if (!('[[MapData]]' in m)) throw TypeError();
3304 if (m['[[MapData]]'] === undefined) throw TypeError();
3305 var entries = m['[[MapData]]'];
3306 if (MapDataIndexOf(entries, key) >= 0) return true;
3307 return false;
3308 });
3309
3310 // 23.1.3.8 Map.prototype.keys ( )
3311 define(
3312 Map.prototype, 'keys',
3313 function keys() {
3314 var m = strict(this);
3315 if (Type(m) !== 'object') throw TypeError();
3316 return CreateMapIterator(m, 'key');
3317 });
3318
3319 // 23.1.3.9 Map.prototype.set ( key , value )
3320 define(
3321 Map.prototype, 'set',
3322 function set(key, value) {
3323 var m = strict(this);
3324 if (Type(m) !== 'object') throw TypeError();
3325 if (!('[[MapData]]' in m)) throw TypeError();
3326 if (m['[[MapData]]'] === undefined) throw TypeError();
3327 var entries = m['[[MapData]]'];
3328 var i = MapDataIndexOf(entries, key);
3329 if (i < 0) i = entries.keys.length;
3330 if (SameValue(key, -0)) key = 0;
3331 entries.keys[i] = key;
3332 entries.values[i] = value;
3333 return m;
3334 });
3335
3336 // 23.1.3.10 get Map.prototype.size
3337 Object.defineProperty(
3338 Map.prototype, 'size', {
3339 get: function() {
3340 var m = strict(this);
3341 if (Type(m) !== 'object') throw TypeError();
3342 if (!('[[MapData]]' in m)) throw TypeError();
3343 if (m['[[MapData]]'] === undefined) throw TypeError();
3344 var entries = m['[[MapData]]'];
3345 var count = 0;
3346 for (var i = 0; i < entries.keys.length; ++i) {
3347 if (entries.keys[i] !== empty)
3348 count = count + 1;
3349 }
3350 return count;
3351 }
3352 });
3353
3354 // 23.1.3.11 Map.prototype.values ( )
3355 define(
3356 Map.prototype, 'values',
3357 function values() {
3358 var m = strict(this);
3359 if (Type(m) !== 'object') throw TypeError();
3360 return CreateMapIterator(m, 'value');
3361 });
3362
3363 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3364 define(
3365 Map.prototype, $$iterator,
3366 function() {
3367 var m = strict(this);
3368 if (Type(m) !== 'object') throw TypeError();
3369 return CreateMapIterator(m, 'key+value');
3370 });
3371
3372 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3373 define(global.Map.prototype, $$toStringTag, 'Map');
3374
3375 // 23.1.4 Properties of Map Instances
3376 // 23.1.5 Map Iterator Objects
3377
3378 /** @constructor */
3379 function MapIterator() {}
3380
3381 // 23.1.5.1 CreateMapIterator Abstract Operation
3382 function CreateMapIterator(map, kind) {
3383 if (Type(map) !== 'object') throw TypeError();
3384 if (!('[[MapData]]' in map)) throw TypeError();
3385 if (map['[[MapData]]'] === undefined) throw TypeError();
3386 var iterator = new MapIterator;
3387 set_internal(iterator, '[[Map]]', map);
3388 set_internal(iterator, '[[MapNextIndex]]', 0);
3389 set_internal(iterator, '[[MapIterationKind]]', kind);
3390 return iterator;
3391 }
3392
3393 // 23.1.5.2 The %MapIteratorPrototype% Object
3394 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3395 MapIterator.prototype = $MapIteratorPrototype$;
3396
3397 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3398 define(
3399 $MapIteratorPrototype$, 'next',
3400 function next() {
3401 var o = strict(this);
3402 if (Type(o) !== 'object') throw TypeError();
3403 var m = o['[[Map]]'],
3404 index = o['[[MapNextIndex]]'],
3405 itemKind = o['[[MapIterationKind]]'],
3406 entries = m['[[MapData]]'];
3407 while (index < entries.keys.length) {
3408 var e = {key: entries.keys[index], value: entries.values[index]};
3409 index = index += 1;
3410 set_internal(o, '[[MapNextIndex]]', index);
3411 if (e.key !== empty) {
3412 if (itemKind === 'key') {
3413 return CreateIterResultObject(e.key, false);
3414 } else if (itemKind === 'value') {
3415 return CreateIterResultObject(e.value, false);
3416 } else {
3417 return CreateIterResultObject([e.key, e.value], false);
3418 }
3419 }
3420 }
3421 return CreateIterResultObject(undefined, true);
3422 });
3423
3424 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3425 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3426
3427 // 23.1.5.3 Properties of Map Iterator Instances
3428 }());
3429
3430 // ---------------------------------------
3431 // 23.2 Set Objects
3432 // ---------------------------------------
3433
3434 (function() {
3435 // 23.2.1 The Set Constructor
3436 // 23.2.1.1 Set ( [ iterable ] )
3437
3438 /** @constructor */
3439 function Set(/*iterable*/) {
3440 var set = strict(this);
3441 var iterable = arguments[0];
3442
3443 if (Type(set) !== 'object') throw TypeError();
3444 if ('[[SetData]]' in set) throw TypeError();
3445
3446 if (iterable !== undefined) {
3447 var adder = set['add'];
3448 if (!IsCallable(adder)) throw TypeError();
3449 var iter = GetIterator(ToObject(iterable));
3450 }
3451 set_internal(set, '[[SetData]]', []);
3452 if (iter === undefined) return set;
3453 while (true) {
3454 var next = IteratorStep(iter);
3455 if (next === false)
3456 return set;
3457 var nextValue = IteratorValue(next);
3458 adder.call(set, nextValue);
3459 }
3460
3461 return set;
3462 }
3463
3464 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3465 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3466 (new global.Set([1]).size !== 1))
3467 global.Set = Set;
3468
3469 function SetDataIndexOf(setData, key) {
3470 var i;
3471 if (key === key)
3472 return setData.indexOf(key);
3473 // Slow case for NaN
3474 for (i = 0; i < setData.length; i += 1)
3475 if (SameValueZero(setData[i], key)) return i;
3476 return -1;
3477 }
3478
3479 // 23.2.1.2 new Set ( ...argumentsList )
3480 // 23.2.2 Properties of the Set Constructor
3481
3482 // 23.2.2.1 Set.prototype
3483 var $SetPrototype$ = {};
3484 Set.prototype = $SetPrototype$;
3485
3486 // 23.2.2.2 get Set [ @@species ]
3487 // 23.2.3 Properties of the Set Prototype Object
3488
3489 // 23.2.3.1 Set.prototype.add (value )
3490 define(
3491 Set.prototype, 'add',
3492 function add(value) {
3493 var s = strict(this);
3494 if (Type(s) !== 'object') throw TypeError();
3495 if (!('[[SetData]]' in s)) throw TypeError();
3496 if (s['[[SetData]]'] === undefined) throw TypeError();
3497 if (SameValue(value, -0)) value = 0;
3498 var entries = s['[[SetData]]'];
3499 var i = SetDataIndexOf(entries, value);
3500 if (i < 0) i = s['[[SetData]]'].length;
3501 s['[[SetData]]'][i] = value;
3502
3503 return s;
3504 });
3505
3506 // 23.2.3.2 Set.prototype.clear ()
3507 define(
3508 Set.prototype, 'clear',
3509 function clear() {
3510 var s = strict(this);
3511 if (Type(s) !== 'object') throw TypeError();
3512 if (!('[[SetData]]' in s)) throw TypeError();
3513 if (s['[[SetData]]'] === undefined) throw TypeError();
3514 var entries = s['[[SetData]]'];
3515 entries.length = 0;
3516 return undefined;
3517 });
3518
3519 // 23.2.3.3 Set.prototype.constructor
3520 // 23.2.3.4 Set.prototype.delete ( value )
3521 define(
3522 Set.prototype, 'delete',
3523 function delete_(value) {
3524 var s = strict(this);
3525 if (Type(s) !== 'object') throw TypeError();
3526 if (!('[[SetData]]' in s)) throw TypeError();
3527 if (s['[[SetData]]'] === undefined) throw TypeError();
3528 var entries = s['[[SetData]]'];
3529 var i = SetDataIndexOf(entries, value);
3530 if (i < 0) return false;
3531 entries[i] = empty;
3532 return true;
3533 });
3534
3535 // 23.2.3.5 Set.prototype.entries ( )
3536 define(
3537 Set.prototype, 'entries',
3538 function entries() {
3539 var s = strict(this);
3540 if (Type(s) !== 'object') throw TypeError();
3541 return CreateSetIterator(s, 'key+value');
3542 });
3543
3544 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3545 define(
3546 Set.prototype, 'forEach',
3547 function forEach(callbackfn/*, thisArg*/) {
3548 var thisArg = arguments[1];
3549
3550 var s = strict(this);
3551 if (Type(s) !== 'object') throw TypeError();
3552 if (!('[[SetData]]' in s)) throw TypeError();
3553 if (s['[[SetData]]'] === undefined) throw TypeError();
3554 var entries = s['[[SetData]]'];
3555
3556 if (!IsCallable(callbackfn)) {
3557 throw TypeError('First argument to forEach is not callable.');
3558 }
3559 for (var i = 0; i < entries.length; ++i) {
3560 if (entries[i] !== empty) {
3561 callbackfn.call(thisArg, entries[i], entries[i], s);
3562 }
3563 }
3564 });
3565
3566 // 23.2.3.7 Set.prototype.has ( value )
3567 define(
3568 Set.prototype, 'has',
3569 function has(key) {
3570 var s = strict(this);
3571 if (Type(s) !== 'object') throw TypeError();
3572 if (!('[[SetData]]' in s)) throw TypeError();
3573 if (s['[[SetData]]'] === undefined) throw TypeError();
3574 var entries = s['[[SetData]]'];
3575 return SetDataIndexOf(entries, key) !== -1;
3576 });
3577
3578 // 23.2.3.8 Set.prototype.keys ( )
3579 // See Set.prototype.values
3580
3581 // 23.2.3.9 get Set.prototype.size
3582 Object.defineProperty(
3583 Set.prototype, 'size', {
3584 get: function() {
3585 var s = strict(this);
3586 if (Type(s) !== 'object') throw TypeError();
3587 if (!('[[SetData]]' in s)) throw TypeError();
3588 if (s['[[SetData]]'] === undefined) throw TypeError();
3589 var entries = s['[[SetData]]'];
3590 var count = 0;
3591 for (var i = 0; i < entries.length; ++i) {
3592 if (entries[i] !== empty)
3593 count = count + 1;
3594 }
3595 return count;
3596 }
3597 });
3598
3599 // 23.2.3.10 Set.prototype.values ( )
3600 define(
3601 Set.prototype, 'values',
3602 function values() {
3603 var s = strict(this);
3604 if (Type(s) !== 'object') throw TypeError();
3605 return CreateSetIterator(s, 'value');
3606 });
3607 // NOTE: function name is still 'values':
3608 Set.prototype.keys = Set.prototype.values;
3609
3610 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3611 define(
3612 Set.prototype, $$iterator,
3613 function() {
3614 var s = strict(this);
3615 if (Type(s) !== 'object') throw TypeError();
3616 return CreateSetIterator(s);
3617 });
3618
3619 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3620 define(global.Set.prototype, $$toStringTag, 'Set');
3621
3622 // 23.2.4 Properties of Set Instances
3623 // 23.2.5 Set Iterator Objects
3624 /** @constructor */
3625 function SetIterator() {}
3626
3627 // 23.2.5.1 CreateSetIterator Abstract Operation
3628 function CreateSetIterator(set, kind) {
3629 if (Type(set) !== 'object') throw TypeError();
3630 if (!('[[SetData]]' in set)) throw TypeError();
3631 if (set['[[SetData]]'] === undefined) throw TypeError();
3632 var iterator = new SetIterator;
3633 set_internal(iterator, '[[IteratedSet]]', set);
3634 set_internal(iterator, '[[SetNextIndex]]', 0);
3635 set_internal(iterator, '[[SetIterationKind]]', kind);
3636 return iterator;
3637 }
3638
3639 // 23.2.5.2 The %SetIteratorPrototype% Object
3640 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3641 SetIterator.prototype = $SetIteratorPrototype$;
3642
3643 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3644 define(
3645 $SetIteratorPrototype$, 'next',
3646 function next() {
3647 var o = strict(this);
3648 if (Type(o) !== 'object') throw TypeError();
3649 var s = o['[[IteratedSet]]'],
3650 index = o['[[SetNextIndex]]'],
3651 itemKind = o['[[SetIterationKind]]'],
3652 entries = s['[[SetData]]'];
3653 while (index < entries.length) {
3654 var e = entries[index];
3655 index = index += 1;
3656 set_internal(o, '[[SetNextIndex]]', index);
3657 if (e !== empty) {
3658 if (itemKind === 'key+value')
3659 return CreateIterResultObject([e, e], false);
3660 return CreateIterResultObject(e, false);
3661 }
3662 }
3663 return CreateIterResultObject(undefined, true);
3664 });
3665
3666 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3667 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3668
3669 // 23.2.5.3 Properties of Set Iterator Instances
3670
3671 }());
3672
3673 // ---------------------------------------
3674 // 23.3 WeakMap Objects
3675 // ---------------------------------------
3676
3677 (function() {
3678 // 23.3.1 The WeakMap Constructor
3679 // 23.3.1.1 WeakMap ( [ iterable ] )
3680 /** @constructor */
3681 function WeakMap(/*iterable*/) {
3682 var map = strict(this);
3683 var iterable = arguments[0];
3684
3685 if (Type(map) !== 'object') throw TypeError();
3686 if ('[[WeakMapData]]' in map) throw TypeError();
3687
3688 if (iterable !== undefined) {
3689 var adder = map['set'];
3690 if (!IsCallable(adder)) throw TypeError();
3691 var iter = GetIterator(ToObject(iterable));
3692 }
3693 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3694 if (iter === undefined) return map;
3695 while (true) {
3696 var next = IteratorStep(iter);
3697 if (next === false)
3698 return map;
3699 var nextValue = IteratorValue(next);
3700 if (Type(nextValue) !== 'object') throw TypeError();
3701 var k = nextValue[0];
3702 var v = nextValue[1];
3703 adder.call(map, k, v);
3704 }
3705
3706 return map;
3707 }
3708
3709 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3710 global.WeakMap = WeakMap;
3711
3712 // 23.3.2 Properties of the WeakMap Constructor
3713 // 23.3.2.1 WeakMap.prototype
3714 var $WeakMapPrototype$ = {};
3715 WeakMap.prototype = $WeakMapPrototype$;
3716
3717
3718
3719 // 23.3.2.2 WeakMap[ @@create ] ( )
3720 // 23.3.3 Properties of the WeakMap Prototype Object
3721
3722 // 23.3.3.1 WeakMap.prototype.constructor
3723
3724 // 23.3.3.2 WeakMap.prototype.delete ( key )
3725 define(
3726 WeakMap.prototype, 'delete',
3727 function delete_(key) {
3728 var M = strict(this);
3729 if (Type(M) !== 'object') throw TypeError();
3730 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3731 if (Type(key) !== 'object') throw TypeError('Expected object');
3732 return M['[[WeakMapData]]'].remove(key);
3733 });
3734
3735 // 23.3.3.3 WeakMap.prototype.get ( key )
3736 define(
3737 WeakMap.prototype, 'get',
3738 function get(key, defaultValue) {
3739 var M = strict(this);
3740 if (Type(M) !== 'object') throw TypeError();
3741 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3742 if (Type(key) !== 'object') throw TypeError('Expected object');
3743 return M['[[WeakMapData]]'].get(key, defaultValue);
3744 });
3745
3746 // 23.3.3.4 WeakMap.prototype.has ( key )
3747 define(
3748 WeakMap.prototype, 'has',
3749 function has(key) {
3750 var M = strict(this);
3751 if (Type(M) !== 'object') throw TypeError();
3752 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3753 if (Type(key) !== 'object') throw TypeError('Expected object');
3754 return M['[[WeakMapData]]'].has(key);
3755 });
3756
3757 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3758 define(
3759 WeakMap.prototype, 'set',
3760 function set(key, value) {
3761 var M = strict(this);
3762 if (Type(M) !== 'object') throw TypeError();
3763 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3764 if (Type(key) !== 'object') throw TypeError('Expected object');
3765 M['[[WeakMapData]]'].set(key, value);
3766 return M;
3767 });
3768
3769 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3770 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3771
3772 // 23.3.4 Properties of WeakMap Instances
3773
3774 // Polyfills for incomplete native implementations:
3775 (function() {
3776 var wm = new global.WeakMap();
3777 var orig = global.WeakMap.prototype.set;
3778 define(global.WeakMap.prototype, 'set', function set() {
3779 orig.apply(this, arguments);
3780 return this;
3781 }, wm.set({}, 0) !== wm);
3782 }());
3783 }());
3784
3785 // ---------------------------------------
3786 // 23.4 WeakSet Objects
3787 // ---------------------------------------
3788
3789 (function() {
3790 // 23.4.1 The WeakSet Constructor
3791 // 23.4.1.1 WeakSet ( [ iterable ] )
3792 /** @constructor */
3793 function WeakSet(/*iterable*/) {
3794 var set = strict(this);
3795 var iterable = arguments[0];
3796
3797 if (Type(set) !== 'object') throw TypeError();
3798 if ('[[WeakSetData]]' in set) throw TypeError();
3799
3800 if (iterable !== undefined) {
3801 var adder = set['add'];
3802 if (!IsCallable(adder)) throw TypeError();
3803 var iter = GetIterator(ToObject(iterable));
3804 }
3805 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3806 if (iter === undefined) return set;
3807 while (true) {
3808 var next = IteratorStep(iter);
3809 if (next === false)
3810 return set;
3811 var nextValue = IteratorValue(next);
3812 adder.call(set, nextValue);
3813 }
3814
3815 return set;
3816 }
3817
3818 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3819 global.WeakSet = WeakSet;
3820
3821 // 23.4.2 Properties of the WeakSet Constructor
3822 // 23.4.2.1 WeakSet.prototype
3823 var $WeakSetPrototype$ = {};
3824 WeakSet.prototype = $WeakSetPrototype$;
3825
3826 // 23.4.3 Properties of the WeakSet Prototype Object
3827 // 23.4.3.1 WeakSet.prototype.add (value )
3828 define(
3829 WeakSet.prototype, 'add',
3830 function add(value) {
3831 var S = strict(this);
3832 if (Type(S) !== 'object') throw TypeError();
3833 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3834 if (Type(value) !== 'object') throw TypeError('Expected object');
3835 S['[[WeakSetData]]'].set(value, true);
3836 return S;
3837 });
3838
3839 // 23.4.3.2 WeakSet.prototype.constructor
3840 // 23.4.3.3 WeakSet.prototype.delete ( value )
3841 define(
3842 WeakSet.prototype, 'delete',
3843 function delete_(value) {
3844 var S = strict(this);
3845 if (Type(S) !== 'object') throw TypeError();
3846 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3847 if (Type(value) !== 'object') throw TypeError('Expected object');
3848 return S['[[WeakSetData]]'].remove(value);
3849 });
3850
3851 // 23.4.3.4 WeakSet.prototype.has ( value )
3852 define(
3853 WeakSet.prototype, 'has',
3854 function has(key) {
3855 var S = strict(this);
3856 if (Type(S) !== 'object') throw TypeError();
3857 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3858 if (Type(key) !== 'object') throw TypeError('Expected object');
3859 return S['[[WeakSetData]]'].has(key);
3860 });
3861
3862 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3863 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3864
3865 // 23.4.4 Properties of WeakSet Instances
3866
3867 // Polyfills for incomplete native implementations:
3868 (function() {
3869 var ws = new global.WeakSet();
3870 var orig = global.WeakSet.prototype.add;
3871 define(global.WeakSet.prototype, 'add', function add() {
3872 orig.apply(this, arguments);
3873 return this;
3874 }, ws.add({}) !== ws);
3875 }());
3876 }());
3877
3878 // ---------------------------------------
3879 // 24 Structured Data
3880 // ---------------------------------------
3881
3882 // ---------------------------------------
3883 // 24.1 ArrayBuffer Objects
3884 // ---------------------------------------
3885
3886 // See typedarray.js for TypedArray polyfill
3887
3888 (function() {
3889 if (!('ArrayBuffer' in global))
3890 return;
3891
3892 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3893 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3894 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3895 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3896 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3897 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3898 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3899 // 24.1.2 The ArrayBuffer Constructor
3900 // 24.1.2.1 ArrayBuffer( length )
3901 // 24.1.3 Properties of the ArrayBuffer Constructor
3902
3903 // 24.1.3.1 ArrayBuffer.isView ( arg )
3904 define(
3905 ArrayBuffer, 'isView',
3906 function isView(arg) {
3907 if (Type(arg) !== 'object') return false;
3908 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3909 return false;
3910 });
3911
3912 // 24.1.3.2 ArrayBuffer.prototype
3913 // 24.1.3.3 get ArrayBuffer [ @@species ]
3914 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3915 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3916 // 24.1.4.2 ArrayBuffer.prototype.constructor
3917 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3918
3919 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3920 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3921
3922 // 24.1.5 Properties of the ArrayBuffer Instances
3923 }());
3924
3925 // ---------------------------------------
3926 // 24.2 DataView Objects
3927 // ---------------------------------------
3928
3929 // See typedarray.js for TypedArray polyfill
3930
3931 (function() {
3932 if (!('DataView' in global))
3933 return;
3934
3935 // 24.2.1 Abstract Operations For DataView Objects
3936 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3937 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3938 // 24.2.2 The DataView Constructor
3939 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3940 // 24.2.3 Properties of the DataView Constructor
3941 // 24.2.3.1 DataView.prototype
3942 // 24.2.4 Properties of the DataView Prototype Object
3943 // 24.2.4.1 get DataView.prototype.buffer
3944 // 24.2.4.2 get DataView.prototype.byteLength
3945 // 24.2.4.3 get DataView.prototype.byteOffset
3946 // 24.2.4.4 DataView.prototype.constructor
3947 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3948 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3949 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3950 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3951 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3952 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3953 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3954 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3955 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3956 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3957 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3958 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3959 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3960 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3961 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3962 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3963
3964 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3965 define(DataView.prototype, $$toStringTag, 'DataView');
3966
3967 // 24.2.5 Properties of DataView Instances
3968 }());
3969
3970 // ---------------------------------------
3971 // 24.3 The JSON Object
3972 // ---------------------------------------
3973
3974 // 24.3.1 JSON.parse ( text [ , reviver ] )
3975 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3976 // 24.3.3 JSON [ @@toStringTag ]
3977 define(JSON, $$toStringTag, 'JSON');
3978
3979 // ---------------------------------------
3980 // 25.1 Iteration
3981 // ---------------------------------------
3982
3983 // 25.1.1 Common Iteration Interfaces
3984 // 25.1.1.1 The Iterable Interface
3985 // 25.1.1.2 The Iterator Interface
3986 // 25.1.1.3 The IteratorResult Interface
3987
3988 // 25.1.2 The %IteratorPrototype% Object
3989 // Defined earlier, so other prototypes can reference it.
3990 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3991 define($IteratorPrototype$, $$iterator, function() {
3992 return this;
3993 });
3994
3995
3996 // ---------------------------------------
3997 // 25.4 Promise Objects
3998 // ---------------------------------------
3999
4000 (function() {
4001 // 25.4 Promise Objects
4002
4003 // 25.4.1 Promise Abstract Operations
4004
4005 // 25.4.1.1 PromiseCapability Records
4006 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
4007
4008 function IfAbruptRejectPromise(value, capability) {
4009 var rejectResult = capability['[[Reject]]'].call(undefined, value);
4010 return capability['[[Promise]]'];
4011 }
4012
4013 // 25.4.1.2 PromiseReaction Records
4014
4015 // 25.4.1.3 CreateResolvingFunctions ( promise )
4016
4017 function CreateResolvingFunctions(promise) {
4018 var alreadyResolved = {'[[value]]': false};
4019 var resolve = PromiseResolveFunction();
4020 set_internal(resolve, '[[Promise]]', promise);
4021 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
4022 var reject = PromiseRejectFunction();
4023 set_internal(reject, '[[Promise]]', promise);
4024 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
4025 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
4026 }
4027
4028 // 25.4.1.3.1 Promise Reject Functions
4029
4030 function PromiseRejectFunction() {
4031 var F = function(reason) {
4032 console.assert(Type(F['[[Promise]]']) === 'object');
4033 var promise = F['[[Promise]]'];
4034 var alreadyResolved = F['[[AlreadyResolved]]'];
4035 if (alreadyResolved['[[value]]']) return undefined;
4036 set_internal(alreadyResolved, '[[value]]', true);
4037 return RejectPromise(promise, reason);
4038 };
4039 return F;
4040 }
4041
4042 // 25.4.1.3.2 Promise Resolve Functions
4043
4044 function PromiseResolveFunction() {
4045 var F = function(resolution) {
4046 console.assert(Type(F['[[Promise]]']) === 'object');
4047 var promise = F['[[Promise]]'];
4048 var alreadyResolved = F['[[AlreadyResolved]]'];
4049 if (alreadyResolved['[[value]]']) return undefined;
4050 set_internal(alreadyResolved, '[[value]]', true);
4051
4052 if (SameValue(resolution, promise)) {
4053 var selfResolutionError = TypeError();
4054 return RejectPromise(promise, selfResolutionError);
4055 }
4056 if (Type(resolution) !== 'object')
4057 return FulfillPromise(promise, resolution);
4058 try {
4059 var then = resolution['then'];
4060 } catch(then) {
4061 return RejectPromise(promise, then);
4062 }
4063 if (!IsCallable(then))
4064 return FulfillPromise(promise, resolution);
4065 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
4066 return undefined;
4067 };
4068 return F;
4069 }
4070
4071 // 25.4.1.4 FulfillPromise ( promise, value )
4072
4073 function FulfillPromise(promise, value) {
4074 console.assert(promise['[[PromiseState]]'] === 'pending');
4075 var reactions = promise['[[PromiseFulfillReactions]]'];
4076 set_internal(promise, '[[PromiseResult]]', value);
4077 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4078 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4079 set_internal(promise, '[[PromiseState]]', 'fulfilled');
4080 return TriggerPromiseReactions(reactions, value);
4081 }
4082
4083 // 25.4.1.5 NewPromiseCapability ( C )
4084
4085 function NewPromiseCapability(c) {
4086 // To keep Promise hermetic, this doesn't look much like the spec.
4087 return CreatePromiseCapabilityRecord(undefined, c);
4088 }
4089
4090 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
4091
4092 function CreatePromiseCapabilityRecord(promise, constructor) {
4093 // To keep Promise hermetic, this doesn't look much like the spec.
4094 console.assert(IsConstructor(constructor));
4095 var promiseCapability = {};
4096 set_internal(promiseCapability, '[[Promise]]', promise);
4097 set_internal(promiseCapability, '[[Resolve]]', undefined);
4098 set_internal(promiseCapability, '[[Reject]]', undefined);
4099 var executor = GetCapabilitiesExecutor();
4100 set_internal(executor, '[[Capability]]', promiseCapability);
4101
4102 // NOTE: Differs from spec; object is constructed here
4103 var constructorResult = promise = new constructor(executor);
4104 set_internal(promiseCapability, '[[Promise]]', promise);
4105
4106 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
4107 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
4108 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4109 return promiseCapability;
4110 }
4111
4112 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4113
4114 function GetCapabilitiesExecutor() {
4115 var F = function(resolve, reject) {
4116 console.assert(F['[[Capability]]']);
4117 var promiseCapability = F['[[Capability]]'];
4118 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4119 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4120 set_internal(promiseCapability, '[[Resolve]]', resolve);
4121 set_internal(promiseCapability, '[[Reject]]', reject);
4122 return undefined;
4123 };
4124 return F;
4125 }
4126
4127 // 25.4.1.6 IsPromise ( x )
4128
4129 function IsPromise(x) {
4130 if (Type(x) !== 'object') return false;
4131 if (!('[[PromiseState]]' in x)) return false;
4132 if (x['[[PromiseState]]'] === undefined) return false;
4133 return true;
4134 }
4135
4136 // 25.4.1.7 RejectPromise ( promise, reason )
4137
4138 function RejectPromise(promise, reason) {
4139 console.assert(promise['[[PromiseState]]'] === 'pending');
4140 var reactions = promise['[[PromiseRejectReactions]]'];
4141 set_internal(promise, '[[PromiseResult]]', reason);
4142 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4143 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4144 set_internal(promise, '[[PromiseState]]', 'rejected');
4145 return TriggerPromiseReactions(reactions, reason);
4146 }
4147
4148 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4149
4150 function TriggerPromiseReactions(reactions, argument) {
4151 for (var i = 0, len = reactions.length; i < len; ++i)
4152 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4153 return undefined;
4154 }
4155
4156 // 25.4.2 Promise Jobs
4157
4158 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4159
4160 function PromiseReactionJob(reaction, argument) {
4161 var promiseCapability = reaction['[[Capabilities]]'];
4162 var handler = reaction['[[Handler]]'];
4163 var handlerResult, status;
4164 try {
4165 if (handler === 'Identity') handlerResult = argument;
4166 else if (handler === 'Thrower') throw argument;
4167 else handlerResult = handler.call(undefined, argument);
4168 } catch (handlerResult) {
4169 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4170 NextJob(status); return;
4171 }
4172 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4173 NextJob(status);
4174 }
4175
4176 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4177
4178 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4179 // SPEC BUG: promise vs. promiseToResolve
4180 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4181 try {
4182 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4183 resolvingFunctions['[[Reject]]']);
4184 } catch (thenCallResult) {
4185 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4186 NextJob(status); return;
4187 }
4188 NextJob(thenCallResult);
4189 }
4190
4191 // 25.4.3 The Promise Constructor
4192
4193 // 25.4.3.1 Promise ( executor )
4194
4195 function Promise(executor) {
4196 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4197 Object.defineProperty(this, '[[PromiseState]]', config);
4198 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4199 Object.defineProperty(this, '[[PromiseResult]]', config);
4200 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4201 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4202
4203 var promise = this;
4204 if (Type(promise) !== 'object') throw new TypeError();
4205 if (!('[[PromiseState]]' in promise)) throw TypeError();
4206 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4207 if (!IsCallable(executor)) throw TypeError();
4208
4209 set_internal(promise, '[[PromiseConstructor]]', Promise);
4210
4211 return InitializePromise(promise, executor);
4212 }
4213
4214 // 25.4.3.1.1 InitializePromise ( promise, executor )
4215
4216 function InitializePromise(promise, executor) {
4217 console.assert('[[PromiseState]]' in promise);
4218 console.assert(IsCallable(executor));
4219 set_internal(promise, '[[PromiseState]]', 'pending');
4220 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4221 set_internal(promise, '[[PromiseRejectReactions]]', []);
4222 var resolvingFunctions = CreateResolvingFunctions(promise);
4223 try {
4224 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4225 resolvingFunctions['[[Reject]]']);
4226 } catch (completion) {
4227 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4228 }
4229 return promise;
4230 }
4231
4232 // 25.4.4 Properties of the Promise Constructor
4233 // 25.4.4.1 Promise.all ( iterable )
4234
4235 define(Promise, 'all', function all(iterable) {
4236 var c = strict(this);
4237 var promiseCapability = NewPromiseCapability(c);
4238 try {
4239 var iterator = GetIterator(iterable);
4240 } catch (value) {
4241 promiseCapability['[[Reject]]'].call(undefined, value);
4242 return promiseCapability['[[Promise]]'];
4243 }
4244 var values = [];
4245 var remainingElementsCount = { value: 1 };
4246 var index = 0;
4247 while (true) {
4248 try {
4249 var next = IteratorStep(iterator);
4250 } catch (value) {
4251 promiseCapability['[[Reject]]'].call(undefined, value);
4252 return promiseCapability['[[Promise]]'];
4253 }
4254 if (!next) {
4255 remainingElementsCount.value -= 1;
4256 if (remainingElementsCount.value === 0) {
4257 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4258
4259
4260 }
4261 return promiseCapability['[[Promise]]'];
4262 }
4263 try {
4264 var nextValue = IteratorValue(next);
4265 } catch (value) {
4266 promiseCapability['[[Reject]]'].call(undefined, value);
4267 return promiseCapability['[[Promise]]'];
4268 }
4269 try {
4270 var nextPromise = c.resolve(nextValue);
4271 } catch (value) {
4272 promiseCapability['[[Reject]]'].call(undefined, value);
4273 return promiseCapability['[[Promise]]'];
4274 }
4275 var resolveElement = PromiseAllResolveElementFunction();
4276 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4277 set_internal(resolveElement, '[[Index]]', index);
4278 set_internal(resolveElement, '[[Values]]', values);
4279 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4280 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4281 remainingElementsCount.value += 1;
4282 try {
4283 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4284 } catch (value) {
4285 promiseCapability['[[Reject]]'].call(undefined, value);
4286 return promiseCapability['[[Promise]]'];
4287 }
4288 index += 1;
4289 }
4290 });
4291
4292 // 25.4.4.1.1 Promise.all Resolve Element Functions
4293
4294 function PromiseAllResolveElementFunction() {
4295 var F = function(x) {
4296 var alreadyCalled = F['[[AlreadyCalled]]'];
4297 if (alreadyCalled.value) return undefined;
4298 alreadyCalled.value = true;
4299 var index = F['[[Index]]'];
4300 var values = F['[[Values]]'];
4301 var promiseCapability = F['[[Capabilities]]'];
4302 var remainingElementsCount = F['[[RemainingElements]]'];
4303 try {
4304 values[index] = x;
4305 } catch (result) {
4306 promiseCapability['[[Reject]]'].call(undefined, result);
4307 return promiseCapability['[[Promise]]'];
4308 }
4309 remainingElementsCount.value -= 1;
4310 if (remainingElementsCount.value === 0)
4311 return promiseCapability['[[Resolve]]'].call(undefined, values);
4312 return undefined;
4313 };
4314 return F;
4315 }
4316
4317 // 25.4.4.2 Promise.prototype
4318
4319 Promise.prototype = {};
4320
4321 // 25.4.4.3 Promise.race ( iterable )
4322
4323 define(Promise, 'race', function race(iterable) {
4324 var c = strict(this);
4325 var promiseCapability = NewPromiseCapability(c);
4326 try {
4327 var iterator = GetIterator(iterable);
4328 } catch (value) {
4329 promiseCapability['[[Reject]]'].call(undefined, value);
4330 return promiseCapability['[[Promise]]'];
4331 }
4332 while (true) {
4333 try {
4334 var next = IteratorStep(iterator);
4335 } catch (value) {
4336 promiseCapability['[[Reject]]'].call(undefined, value);
4337 return promiseCapability['[[Promise]]'];
4338 }
4339 if (!next) return promiseCapability['[[Promise]]'];
4340 try {
4341 var nextValue = IteratorValue(next);
4342 } catch (value) {
4343 promiseCapability['[[Reject]]'].call(undefined, value);
4344 return promiseCapability['[[Promise]]'];
4345 }
4346 try {
4347 var nextPromise = c.resolve(nextValue);
4348 } catch (value) {
4349 promiseCapability['[[Reject]]'].call(undefined, value);
4350 return promiseCapability['[[Promise]]'];
4351 }
4352 try {
4353 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4354 } catch (value) {
4355 promiseCapability['[[Reject]]'].call(undefined, value);
4356 return promiseCapability['[[Promise]]'];
4357 }
4358 }
4359 });
4360
4361 // 25.4.4.4 Promise.reject ( r )
4362
4363 define(Promise, 'reject', function reject(r) {
4364 var c = strict(this);
4365 var promiseCapability = NewPromiseCapability(c);
4366 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4367 return promiseCapability['[[Promise]]'];
4368 });
4369
4370 // 25.4.4.5 Promise.resolve ( x )
4371
4372 define(Promise, 'resolve', function resolve(x) {
4373 var c = strict(this);
4374 if (IsPromise(x)) {
4375 var constructor = x['[[PromiseConstructor]]'];
4376 if (SameValue(constructor, c)) return x;
4377 }
4378 var promiseCapability = NewPromiseCapability(c);
4379 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4380 return promiseCapability['[[Promise]]'];
4381 });
4382
4383 // 25.4.4.6 Promise [ @@create ] ( )
4384 // 25.4.4.6.1 AllocatePromise ( constructor )
4385 // 25.4.5 Properties of the Promise Prototype Object
4386 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4387
4388 define(Promise.prototype, 'catch', function catch_(onRejected) {
4389 var promise = this;
4390 return promise.then(undefined, onRejected);
4391 });
4392
4393 // 25.4.5.2 Promise.prototype.constructor
4394
4395 Promise.prototype.constructor = Promise;
4396
4397 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4398
4399 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4400 var promise = this;
4401 if (!IsPromise(promise)) throw TypeError();
4402 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4403 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4404 var c = promise.constructor;
4405 var promiseCapability = NewPromiseCapability(c);
4406 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4407 '[[Handler]]': onFulfilled };
4408 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4409 '[[Handler]]': onRejected };
4410 if (promise['[[PromiseState]]'] === 'pending') {
4411 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4412 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4413 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4414 var value = promise['[[PromiseResult]]'];
4415 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4416 } else if (promise['[[PromiseState]]'] === 'rejected') {
4417 var reason = promise['[[PromiseResult]]'];
4418 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4419 }
4420 return promiseCapability['[[Promise]]'];
4421 });
4422
4423 // 25.4.6 Properties of Promise Instances
4424
4425 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4426 global.Promise = Promise;
4427
4428 // Patch early Promise.cast vs. Promise.resolve implementations
4429 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4430 }());
4431
4432 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4433 define(Promise.prototype, $$toStringTag, 'Promise');
4434
4435 // ---------------------------------------
4436 // 26 Reflection
4437 // ---------------------------------------
4438
4439 (function() {
4440 // 26.1 The Reflect Object
4441 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4442 global.Reflect = {};
4443
4444 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4445 define(
4446 Reflect, 'apply',
4447 function apply(target, thisArgument, argumentsList) {
4448 if (!IsCallable(target)) throw TypeError();
4449 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4450 });
4451
4452 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4453 define(
4454 Reflect, 'construct',
4455 function construct(target, argumentsList) {
4456 return __cons(target, argumentsList);
4457 });
4458
4459 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4460 define(
4461 Reflect, 'defineProperty',
4462 function defineProperty(target, propertyKey, attributes) {
4463 try {
4464 Object.defineProperty(target, propertyKey, attributes);
4465 return true;
4466 } catch (_) {
4467 return false;
4468 }
4469 });
4470
4471 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4472 define(
4473 Reflect, 'deleteProperty',
4474 function deleteProperty(target,name) {
4475 try {
4476 delete target[name];
4477 return !HasOwnProperty(target, name);
4478 } catch (_) {
4479 return false;
4480 }
4481 });
4482
4483 // 26.1.5 Reflect.enumerate ( target )
4484 define(
4485 Reflect, 'enumerate',
4486 function enumerate(target) {
4487 target = ToObject(target);
4488 var iterator = Enumerate(target);
4489 return iterator;
4490 });
4491
4492 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4493 define(
4494 Reflect, 'get',
4495 function get(target, name, receiver) {
4496 target = ToObject(target);
4497 name = String(name);
4498 receiver = (receiver === undefined) ? target : ToObject(receiver);
4499 var desc = getPropertyDescriptor(target, name);
4500 if (desc && 'get' in desc)
4501 return Function.prototype.call.call(desc['get'], receiver);
4502 return target[name];
4503 });
4504
4505 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4506 define(
4507 Reflect, 'getOwnPropertyDescriptor',
4508 Object.getOwnPropertyDescriptor);
4509
4510 // 26.1.8 Reflect.getPrototypeOf ( target )
4511 define(
4512 Reflect, 'getPrototypeOf',
4513 Object.getPrototypeOf);
4514
4515 // 26.1.9 Reflect.has ( target, propertyKey )
4516 define(
4517 Reflect, 'has',
4518 function has(target,name) {
4519 return String(name) in ToObject(target);
4520 });
4521
4522 // 26.1.10 Reflect.isExtensible (target)
4523 define(
4524 Reflect, 'isExtensible',
4525 Object.isExtensible);
4526
4527 // 26.1.11 Reflect.ownKeys ( target )
4528 define(
4529 Reflect, 'ownKeys',
4530 function ownKeys(target) {
4531 var obj = ToObject(target);
4532 return Object.getOwnPropertyNames(obj);
4533 });
4534
4535 // 26.1.12 Reflect.preventExtensions ( target )
4536 define(
4537 Reflect, 'preventExtensions',
4538 function preventExtensions(target) {
4539 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4540 });
4541
4542 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4543 define(
4544 Reflect, 'set',
4545 function set(target, name, value, receiver) {
4546 target = ToObject(target);
4547 name = String(name);
4548 receiver = (receiver === undefined) ? target : ToObject(receiver);
4549 var desc = getPropertyDescriptor(target, name);
4550 try {
4551 if (desc && 'set' in desc)
4552 Function.prototype.call.call(desc['set'], receiver, value);
4553 else
4554 target[name] = value;
4555 return true;
4556 } catch (_) {
4557 return false;
4558 }
4559 });
4560
4561 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4562 define(
4563 Reflect, 'setPrototypeOf',
4564 function setPrototypeOf(target, proto) {
4565 try {
4566 target.__proto__ = proto;
4567 return Reflect.getPrototypeOf(target) === proto;
4568 } catch(_) {
4569 return false;
4570 }
4571 });
4572
4573 }());
4574
4575 // ---------------------------------------
4576 // 26.2 Proxy Objects
4577 // ---------------------------------------
4578
4579 // Not polyfillable.
4580
4581}(self));
4582
4583// This helper is defined outside the main scope so that the use of
4584// 'eval' does not taint the scope for minifiers.
4585function __cons(t, a) {
4586 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4587}
6e0f24b1 4588</script>
8a1f452d 4589 <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.foo = 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){
4590'use strict'
4591
4592exports.byteLength = byteLength
4593exports.toByteArray = toByteArray
4594exports.fromByteArray = fromByteArray
4595
4596var lookup = []
4597var revLookup = []
4598var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4599
4600var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4601for (var i = 0, len = code.length; i < len; ++i) {
4602 lookup[i] = code[i]
4603 revLookup[code.charCodeAt(i)] = i
4604}
4605
4606revLookup['-'.charCodeAt(0)] = 62
4607revLookup['_'.charCodeAt(0)] = 63
4608
4609function placeHoldersCount (b64) {
4610 var len = b64.length
4611 if (len % 4 > 0) {
4612 throw new Error('Invalid string. Length must be a multiple of 4')
4613 }
4614
4615 // the number of equal signs (place holders)
4616 // if there are two placeholders, than the two characters before it
4617 // represent one byte
4618 // if there is only one, then the three characters before it represent 2 bytes
4619 // this is just a cheap hack to not do indexOf twice
4620 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4621}
4622
4623function byteLength (b64) {
4624 // base64 is 4/3 + up to two characters of the original data
4625 return b64.length * 3 / 4 - placeHoldersCount(b64)
4626}
4627
4628function toByteArray (b64) {
4629 var i, j, l, tmp, placeHolders, arr
4630 var len = b64.length
4631 placeHolders = placeHoldersCount(b64)
4632
4633 arr = new Arr(len * 3 / 4 - placeHolders)
4634
4635 // if there are placeholders, only get up to the last complete 4 chars
4636 l = placeHolders > 0 ? len - 4 : len
4637
4638 var L = 0
4639
4640 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4641 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4642 arr[L++] = (tmp >> 16) & 0xFF
4643 arr[L++] = (tmp >> 8) & 0xFF
4644 arr[L++] = tmp & 0xFF
4645 }
4646
4647 if (placeHolders === 2) {
4648 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4649 arr[L++] = tmp & 0xFF
4650 } else if (placeHolders === 1) {
4651 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4652 arr[L++] = (tmp >> 8) & 0xFF
4653 arr[L++] = tmp & 0xFF
4654 }
4655
4656 return arr
4657}
4658
4659function tripletToBase64 (num) {
4660 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4661}
4662
4663function encodeChunk (uint8, start, end) {
4664 var tmp
4665 var output = []
4666 for (var i = start; i < end; i += 3) {
4667 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4668 output.push(tripletToBase64(tmp))
4669 }
4670 return output.join('')
4671}
4672
4673function fromByteArray (uint8) {
4674 var tmp
4675 var len = uint8.length
4676 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4677 var output = ''
4678 var parts = []
4679 var maxChunkLength = 16383 // must be multiple of 3
4680
4681 // go through the array every three bytes, we'll deal with trailing stuff later
4682 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4683 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4684 }
4685
4686 // pad the end with zeros, but make sure to not forget the extra bytes
4687 if (extraBytes === 1) {
4688 tmp = uint8[len - 1]
4689 output += lookup[tmp >> 2]
4690 output += lookup[(tmp << 4) & 0x3F]
4691 output += '=='
4692 } else if (extraBytes === 2) {
4693 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4694 output += lookup[tmp >> 10]
4695 output += lookup[(tmp >> 4) & 0x3F]
4696 output += lookup[(tmp << 2) & 0x3F]
4697 output += '='
4698 }
4699
4700 parts.push(output)
4701
4702 return parts.join('')
4703}
4704
4705},{}],2:[function(require,module,exports){
4706/*!
4707 * The buffer module from node.js, for the browser.
4708 *
4709 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4710 * @license MIT
4711 */
4712/* eslint-disable no-proto */
4713
4714'use strict'
4715
4716var base64 = require('base64-js')
4717var ieee754 = require('ieee754')
4718
4719exports.Buffer = Buffer
4720exports.SlowBuffer = SlowBuffer
4721exports.INSPECT_MAX_BYTES = 50
4722
4723var K_MAX_LENGTH = 0x7fffffff
4724exports.kMaxLength = K_MAX_LENGTH
4725
4726/**
4727 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4728 * === true Use Uint8Array implementation (fastest)
4729 * === false Print warning and recommend using `buffer` v4.x which has an Object
4730 * implementation (most compatible, even IE6)
4731 *
4732 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4733 * Opera 11.6+, iOS 4.2+.
4734 *
4735 * We report that the browser does not support typed arrays if the are not subclassable
4736 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4737 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4738 * for __proto__ and has a buggy typed array implementation.
4739 */
4740Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4741
4742if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4743 typeof console.error === 'function') {
4744 console.error(
4745 'This browser lacks typed array (Uint8Array) support which is required by ' +
4746 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4747 )
4748}
4749
4750function typedArraySupport () {
4751 // Can typed array instances can be augmented?
4752 try {
4753 var arr = new Uint8Array(1)
4754 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4755 return arr.foo() === 42
4756 } catch (e) {
4757 return false
4758 }
4759}
4760
4761function createBuffer (length) {
4762 if (length > K_MAX_LENGTH) {
4763 throw new RangeError('Invalid typed array length')
4764 }
4765 // Return an augmented `Uint8Array` instance
4766 var buf = new Uint8Array(length)
4767 buf.__proto__ = Buffer.prototype
4768 return buf
4769}
4770
4771/**
4772 * The Buffer constructor returns instances of `Uint8Array` that have their
4773 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4774 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4775 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4776 * returns a single octet.
4777 *
4778 * The `Uint8Array` prototype remains unmodified.
4779 */
4780
4781function Buffer (arg, encodingOrOffset, length) {
4782 // Common case.
4783 if (typeof arg === 'number') {
4784 if (typeof encodingOrOffset === 'string') {
4785 throw new Error(
4786 'If encoding is specified then the first argument must be a string'
4787 )
4788 }
4789 return allocUnsafe(arg)
4790 }
4791 return from(arg, encodingOrOffset, length)
4792}
4793
4794// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4795if (typeof Symbol !== 'undefined' && Symbol.species &&
4796 Buffer[Symbol.species] === Buffer) {
4797 Object.defineProperty(Buffer, Symbol.species, {
4798 value: null,
4799 configurable: true,
4800 enumerable: false,
4801 writable: false
4802 })
4803}
4804
4805Buffer.poolSize = 8192 // not used by this implementation
4806
4807function from (value, encodingOrOffset, length) {
4808 if (typeof value === 'number') {
4809 throw new TypeError('"value" argument must not be a number')
4810 }
4811
4812 if (value instanceof ArrayBuffer) {
4813 return fromArrayBuffer(value, encodingOrOffset, length)
4814 }
4815
4816 if (typeof value === 'string') {
4817 return fromString(value, encodingOrOffset)
4818 }
4819
4820 return fromObject(value)
4821}
4822
4823/**
4824 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4825 * if value is a number.
4826 * Buffer.from(str[, encoding])
4827 * Buffer.from(array)
4828 * Buffer.from(buffer)
4829 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4830 **/
4831Buffer.from = function (value, encodingOrOffset, length) {
4832 return from(value, encodingOrOffset, length)
4833}
4834
4835// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4836// https://github.com/feross/buffer/pull/148
4837Buffer.prototype.__proto__ = Uint8Array.prototype
4838Buffer.__proto__ = Uint8Array
4839
4840function assertSize (size) {
4841 if (typeof size !== 'number') {
4842 throw new TypeError('"size" argument must be a number')
4843 } else if (size < 0) {
4844 throw new RangeError('"size" argument must not be negative')
4845 }
4846}
4847
4848function alloc (size, fill, encoding) {
4849 assertSize(size)
4850 if (size <= 0) {
4851 return createBuffer(size)
4852 }
4853 if (fill !== undefined) {
4854 // Only pay attention to encoding if it's a string. This
4855 // prevents accidentally sending in a number that would
4856 // be interpretted as a start offset.
4857 return typeof encoding === 'string'
4858 ? createBuffer(size).fill(fill, encoding)
4859 : createBuffer(size).fill(fill)
4860 }
4861 return createBuffer(size)
4862}
4863
4864/**
4865 * Creates a new filled Buffer instance.
4866 * alloc(size[, fill[, encoding]])
4867 **/
4868Buffer.alloc = function (size, fill, encoding) {
4869 return alloc(size, fill, encoding)
4870}
4871
4872function allocUnsafe (size) {
4873 assertSize(size)
4874 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4875}
4876
4877/**
4878 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4879 * */
4880Buffer.allocUnsafe = function (size) {
4881 return allocUnsafe(size)
4882}
4883/**
4884 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4885 */
4886Buffer.allocUnsafeSlow = function (size) {
4887 return allocUnsafe(size)
4888}
4889
4890function fromString (string, encoding) {
4891 if (typeof encoding !== 'string' || encoding === '') {
4892 encoding = 'utf8'
4893 }
4894
4895 if (!Buffer.isEncoding(encoding)) {
4896 throw new TypeError('"encoding" must be a valid string encoding')
4897 }
4898
4899 var length = byteLength(string, encoding) | 0
4900 var buf = createBuffer(length)
4901
4902 var actual = buf.write(string, encoding)
4903
4904 if (actual !== length) {
4905 // Writing a hex string, for example, that contains invalid characters will
4906 // cause everything after the first invalid character to be ignored. (e.g.
4907 // 'abxxcd' will be treated as 'ab')
4908 buf = buf.slice(0, actual)
4909 }
4910
4911 return buf
4912}
4913
4914function fromArrayLike (array) {
4915 var length = array.length < 0 ? 0 : checked(array.length) | 0
4916 var buf = createBuffer(length)
4917 for (var i = 0; i < length; i += 1) {
4918 buf[i] = array[i] & 255
4919 }
4920 return buf
4921}
4922
4923function fromArrayBuffer (array, byteOffset, length) {
4924 if (byteOffset < 0 || array.byteLength < byteOffset) {
4925 throw new RangeError('\'offset\' is out of bounds')
4926 }
4927
4928 if (array.byteLength < byteOffset + (length || 0)) {
4929 throw new RangeError('\'length\' is out of bounds')
4930 }
4931
4932 var buf
4933 if (byteOffset === undefined && length === undefined) {
4934 buf = new Uint8Array(array)
4935 } else if (length === undefined) {
4936 buf = new Uint8Array(array, byteOffset)
4937 } else {
4938 buf = new Uint8Array(array, byteOffset, length)
4939 }
4940
4941 // Return an augmented `Uint8Array` instance
4942 buf.__proto__ = Buffer.prototype
4943 return buf
4944}
4945
4946function fromObject (obj) {
4947 if (Buffer.isBuffer(obj)) {
4948 var len = checked(obj.length) | 0
4949 var buf = createBuffer(len)
4950
4951 if (buf.length === 0) {
4952 return buf
4953 }
4954
4955 obj.copy(buf, 0, 0, len)
4956 return buf
4957 }
4958
4959 if (obj) {
4960 if (isArrayBufferView(obj) || 'length' in obj) {
4961 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
4962 return createBuffer(0)
4963 }
4964 return fromArrayLike(obj)
4965 }
4966
4967 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
4968 return fromArrayLike(obj.data)
4969 }
4970 }
4971
4972 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
4973}
4974
4975function checked (length) {
4976 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
4977 // length is NaN (which is otherwise coerced to zero.)
4978 if (length >= K_MAX_LENGTH) {
4979 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
4980 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
4981 }
4982 return length | 0
4983}
4984
4985function SlowBuffer (length) {
4986 if (+length != length) { // eslint-disable-line eqeqeq
4987 length = 0
4988 }
4989 return Buffer.alloc(+length)
4990}
4991
4992Buffer.isBuffer = function isBuffer (b) {
4993 return b != null && b._isBuffer === true
4994}
4995
4996Buffer.compare = function compare (a, b) {
4997 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
4998 throw new TypeError('Arguments must be Buffers')
4999 }
5000
5001 if (a === b) return 0
5002
5003 var x = a.length
5004 var y = b.length
5005
5006 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
5007 if (a[i] !== b[i]) {
5008 x = a[i]
5009 y = b[i]
5010 break
5011 }
5012 }
5013
5014 if (x < y) return -1
5015 if (y < x) return 1
5016 return 0
5017}
5018
5019Buffer.isEncoding = function isEncoding (encoding) {
5020 switch (String(encoding).toLowerCase()) {
5021 case 'hex':
5022 case 'utf8':
5023 case 'utf-8':
5024 case 'ascii':
5025 case 'latin1':
5026 case 'binary':
5027 case 'base64':
5028 case 'ucs2':
5029 case 'ucs-2':
5030 case 'utf16le':
5031 case 'utf-16le':
5032 return true
5033 default:
5034 return false
5035 }
5036}
5037
5038Buffer.concat = function concat (list, length) {
5039 if (!Array.isArray(list)) {
5040 throw new TypeError('"list" argument must be an Array of Buffers')
5041 }
5042
5043 if (list.length === 0) {
5044 return Buffer.alloc(0)
5045 }
5046
5047 var i
5048 if (length === undefined) {
5049 length = 0
5050 for (i = 0; i < list.length; ++i) {
5051 length += list[i].length
5052 }
5053 }
5054
5055 var buffer = Buffer.allocUnsafe(length)
5056 var pos = 0
5057 for (i = 0; i < list.length; ++i) {
5058 var buf = list[i]
5059 if (!Buffer.isBuffer(buf)) {
5060 throw new TypeError('"list" argument must be an Array of Buffers')
5061 }
5062 buf.copy(buffer, pos)
5063 pos += buf.length
5064 }
5065 return buffer
5066}
5067
5068function byteLength (string, encoding) {
5069 if (Buffer.isBuffer(string)) {
5070 return string.length
5071 }
5072 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
5073 return string.byteLength
5074 }
5075 if (typeof string !== 'string') {
5076 string = '' + string
5077 }
5078
5079 var len = string.length
5080 if (len === 0) return 0
5081
5082 // Use a for loop to avoid recursion
5083 var loweredCase = false
5084 for (;;) {
5085 switch (encoding) {
5086 case 'ascii':
5087 case 'latin1':
5088 case 'binary':
5089 return len
5090 case 'utf8':
5091 case 'utf-8':
5092 case undefined:
5093 return utf8ToBytes(string).length
5094 case 'ucs2':
5095 case 'ucs-2':
5096 case 'utf16le':
5097 case 'utf-16le':
5098 return len * 2
5099 case 'hex':
5100 return len >>> 1
5101 case 'base64':
5102 return base64ToBytes(string).length
5103 default:
5104 if (loweredCase) return utf8ToBytes(string).length // assume utf8
5105 encoding = ('' + encoding).toLowerCase()
5106 loweredCase = true
5107 }
5108 }
5109}
5110Buffer.byteLength = byteLength
5111
5112function slowToString (encoding, start, end) {
5113 var loweredCase = false
5114
5115 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5116 // property of a typed array.
5117
5118 // This behaves neither like String nor Uint8Array in that we set start/end
5119 // to their upper/lower bounds if the value passed is out of range.
5120 // undefined is handled specially as per ECMA-262 6th Edition,
5121 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5122 if (start === undefined || start < 0) {
5123 start = 0
5124 }
5125 // Return early if start > this.length. Done here to prevent potential uint32
5126 // coercion fail below.
5127 if (start > this.length) {
5128 return ''
5129 }
5130
5131 if (end === undefined || end > this.length) {
5132 end = this.length
5133 }
5134
5135 if (end <= 0) {
5136 return ''
5137 }
5138
5139 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5140 end >>>= 0
5141 start >>>= 0
5142
5143 if (end <= start) {
5144 return ''
5145 }
5146
5147 if (!encoding) encoding = 'utf8'
5148
5149 while (true) {
5150 switch (encoding) {
5151 case 'hex':
5152 return hexSlice(this, start, end)
5153
5154 case 'utf8':
5155 case 'utf-8':
5156 return utf8Slice(this, start, end)
5157
5158 case 'ascii':
5159 return asciiSlice(this, start, end)
5160
5161 case 'latin1':
5162 case 'binary':
5163 return latin1Slice(this, start, end)
5164
5165 case 'base64':
5166 return base64Slice(this, start, end)
5167
5168 case 'ucs2':
5169 case 'ucs-2':
5170 case 'utf16le':
5171 case 'utf-16le':
5172 return utf16leSlice(this, start, end)
5173
5174 default:
5175 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5176 encoding = (encoding + '').toLowerCase()
5177 loweredCase = true
5178 }
5179 }
5180}
5181
5182// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5183// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5184// reliably in a browserify context because there could be multiple different
5185// copies of the 'buffer' package in use. This method works even for Buffer
5186// instances that were created from another copy of the `buffer` package.
5187// See: https://github.com/feross/buffer/issues/154
5188Buffer.prototype._isBuffer = true
5189
5190function swap (b, n, m) {
5191 var i = b[n]
5192 b[n] = b[m]
5193 b[m] = i
5194}
5195
5196Buffer.prototype.swap16 = function swap16 () {
5197 var len = this.length
5198 if (len % 2 !== 0) {
5199 throw new RangeError('Buffer size must be a multiple of 16-bits')
5200 }
5201 for (var i = 0; i < len; i += 2) {
5202 swap(this, i, i + 1)
5203 }
5204 return this
5205}
5206
5207Buffer.prototype.swap32 = function swap32 () {
5208 var len = this.length
5209 if (len % 4 !== 0) {
5210 throw new RangeError('Buffer size must be a multiple of 32-bits')
5211 }
5212 for (var i = 0; i < len; i += 4) {
5213 swap(this, i, i + 3)
5214 swap(this, i + 1, i + 2)
5215 }
5216 return this
5217}
5218
5219Buffer.prototype.swap64 = function swap64 () {
5220 var len = this.length
5221 if (len % 8 !== 0) {
5222 throw new RangeError('Buffer size must be a multiple of 64-bits')
5223 }
5224 for (var i = 0; i < len; i += 8) {
5225 swap(this, i, i + 7)
5226 swap(this, i + 1, i + 6)
5227 swap(this, i + 2, i + 5)
5228 swap(this, i + 3, i + 4)
5229 }
5230 return this
5231}
5232
5233Buffer.prototype.toString = function toString () {
5234 var length = this.length
5235 if (length === 0) return ''
5236 if (arguments.length === 0) return utf8Slice(this, 0, length)
5237 return slowToString.apply(this, arguments)
5238}
5239
5240Buffer.prototype.equals = function equals (b) {
5241 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5242 if (this === b) return true
5243 return Buffer.compare(this, b) === 0
5244}
5245
5246Buffer.prototype.inspect = function inspect () {
5247 var str = ''
5248 var max = exports.INSPECT_MAX_BYTES
5249 if (this.length > 0) {
5250 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5251 if (this.length > max) str += ' ... '
5252 }
5253 return '<Buffer ' + str + '>'
5254}
5255
5256Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5257 if (!Buffer.isBuffer(target)) {
5258 throw new TypeError('Argument must be a Buffer')
5259 }
5260
5261 if (start === undefined) {
5262 start = 0
5263 }
5264 if (end === undefined) {
5265 end = target ? target.length : 0
5266 }
5267 if (thisStart === undefined) {
5268 thisStart = 0
5269 }
5270 if (thisEnd === undefined) {
5271 thisEnd = this.length
5272 }
5273
5274 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5275 throw new RangeError('out of range index')
5276 }
5277
5278 if (thisStart >= thisEnd && start >= end) {
5279 return 0
5280 }
5281 if (thisStart >= thisEnd) {
5282 return -1
5283 }
5284 if (start >= end) {
5285 return 1
5286 }
5287
5288 start >>>= 0
5289 end >>>= 0
5290 thisStart >>>= 0
5291 thisEnd >>>= 0
5292
5293 if (this === target) return 0
5294
5295 var x = thisEnd - thisStart
5296 var y = end - start
5297 var len = Math.min(x, y)
5298
5299 var thisCopy = this.slice(thisStart, thisEnd)
5300 var targetCopy = target.slice(start, end)
5301
5302 for (var i = 0; i < len; ++i) {
5303 if (thisCopy[i] !== targetCopy[i]) {
5304 x = thisCopy[i]
5305 y = targetCopy[i]
5306 break
5307 }
5308 }
5309
5310 if (x < y) return -1
5311 if (y < x) return 1
5312 return 0
5313}
5314
5315// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5316// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5317//
5318// Arguments:
5319// - buffer - a Buffer to search
5320// - val - a string, Buffer, or number
5321// - byteOffset - an index into `buffer`; will be clamped to an int32
5322// - encoding - an optional encoding, relevant is val is a string
5323// - dir - true for indexOf, false for lastIndexOf
5324function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5325 // Empty buffer means no match
5326 if (buffer.length === 0) return -1
5327
5328 // Normalize byteOffset
5329 if (typeof byteOffset === 'string') {
5330 encoding = byteOffset
5331 byteOffset = 0
5332 } else if (byteOffset > 0x7fffffff) {
5333 byteOffset = 0x7fffffff
5334 } else if (byteOffset < -0x80000000) {
5335 byteOffset = -0x80000000
5336 }
5337 byteOffset = +byteOffset // Coerce to Number.
5338 if (numberIsNaN(byteOffset)) {
5339 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5340 byteOffset = dir ? 0 : (buffer.length - 1)
5341 }
5342
5343 // Normalize byteOffset: negative offsets start from the end of the buffer
5344 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5345 if (byteOffset >= buffer.length) {
5346 if (dir) return -1
5347 else byteOffset = buffer.length - 1
5348 } else if (byteOffset < 0) {
5349 if (dir) byteOffset = 0
5350 else return -1
5351 }
5352
5353 // Normalize val
5354 if (typeof val === 'string') {
5355 val = Buffer.from(val, encoding)
5356 }
5357
5358 // Finally, search either indexOf (if dir is true) or lastIndexOf
5359 if (Buffer.isBuffer(val)) {
5360 // Special case: looking for empty string/buffer always fails
5361 if (val.length === 0) {
5362 return -1
5363 }
5364 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5365 } else if (typeof val === 'number') {
5366 val = val & 0xFF // Search for a byte value [0-255]
5367 if (typeof Uint8Array.prototype.indexOf === 'function') {
5368 if (dir) {
5369 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5370 } else {
5371 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5372 }
5373 }
5374 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5375 }
5376
5377 throw new TypeError('val must be string, number or Buffer')
5378}
5379
5380function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5381 var indexSize = 1
5382 var arrLength = arr.length
5383 var valLength = val.length
5384
5385 if (encoding !== undefined) {
5386 encoding = String(encoding).toLowerCase()
5387 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5388 encoding === 'utf16le' || encoding === 'utf-16le') {
5389 if (arr.length < 2 || val.length < 2) {
5390 return -1
5391 }
5392 indexSize = 2
5393 arrLength /= 2
5394 valLength /= 2
5395 byteOffset /= 2
5396 }
5397 }
5398
5399 function read (buf, i) {
5400 if (indexSize === 1) {
5401 return buf[i]
5402 } else {
5403 return buf.readUInt16BE(i * indexSize)
5404 }
5405 }
5406
5407 var i
5408 if (dir) {
5409 var foundIndex = -1
5410 for (i = byteOffset; i < arrLength; i++) {
5411 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5412 if (foundIndex === -1) foundIndex = i
5413 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5414 } else {
5415 if (foundIndex !== -1) i -= i - foundIndex
5416 foundIndex = -1
5417 }
5418 }
5419 } else {
5420 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5421 for (i = byteOffset; i >= 0; i--) {
5422 var found = true
5423 for (var j = 0; j < valLength; j++) {
5424 if (read(arr, i + j) !== read(val, j)) {
5425 found = false
5426 break
5427 }
5428 }
5429 if (found) return i
5430 }
5431 }
5432
5433 return -1
5434}
5435
5436Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5437 return this.indexOf(val, byteOffset, encoding) !== -1
5438}
5439
5440Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5441 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5442}
5443
5444Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5445 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5446}
5447
5448function hexWrite (buf, string, offset, length) {
5449 offset = Number(offset) || 0
5450 var remaining = buf.length - offset
5451 if (!length) {
5452 length = remaining
5453 } else {
5454 length = Number(length)
5455 if (length > remaining) {
5456 length = remaining
5457 }
5458 }
5459
5460 // must be an even number of digits
5461 var strLen = string.length
5462 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5463
5464 if (length > strLen / 2) {
5465 length = strLen / 2
5466 }
5467 for (var i = 0; i < length; ++i) {
5468 var parsed = parseInt(string.substr(i * 2, 2), 16)
5469 if (numberIsNaN(parsed)) return i
5470 buf[offset + i] = parsed
5471 }
5472 return i
5473}
5474
5475function utf8Write (buf, string, offset, length) {
5476 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5477}
5478
5479function asciiWrite (buf, string, offset, length) {
5480 return blitBuffer(asciiToBytes(string), buf, offset, length)
5481}
5482
5483function latin1Write (buf, string, offset, length) {
5484 return asciiWrite(buf, string, offset, length)
5485}
5486
5487function base64Write (buf, string, offset, length) {
5488 return blitBuffer(base64ToBytes(string), buf, offset, length)
5489}
5490
5491function ucs2Write (buf, string, offset, length) {
5492 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5493}
5494
5495Buffer.prototype.write = function write (string, offset, length, encoding) {
5496 // Buffer#write(string)
5497 if (offset === undefined) {
5498 encoding = 'utf8'
5499 length = this.length
5500 offset = 0
5501 // Buffer#write(string, encoding)
5502 } else if (length === undefined && typeof offset === 'string') {
5503 encoding = offset
5504 length = this.length
5505 offset = 0
5506 // Buffer#write(string, offset[, length][, encoding])
5507 } else if (isFinite(offset)) {
5508 offset = offset >>> 0
5509 if (isFinite(length)) {
5510 length = length >>> 0
5511 if (encoding === undefined) encoding = 'utf8'
5512 } else {
5513 encoding = length
5514 length = undefined
5515 }
5516 } else {
5517 throw new Error(
5518 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5519 )
5520 }
5521
5522 var remaining = this.length - offset
5523 if (length === undefined || length > remaining) length = remaining
5524
5525 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5526 throw new RangeError('Attempt to write outside buffer bounds')
5527 }
5528
5529 if (!encoding) encoding = 'utf8'
5530
5531 var loweredCase = false
5532 for (;;) {
5533 switch (encoding) {
5534 case 'hex':
5535 return hexWrite(this, string, offset, length)
5536
5537 case 'utf8':
5538 case 'utf-8':
5539 return utf8Write(this, string, offset, length)
5540
5541 case 'ascii':
5542 return asciiWrite(this, string, offset, length)
5543
5544 case 'latin1':
5545 case 'binary':
5546 return latin1Write(this, string, offset, length)
5547
5548 case 'base64':
5549 // Warning: maxLength not taken into account in base64Write
5550 return base64Write(this, string, offset, length)
5551
5552 case 'ucs2':
5553 case 'ucs-2':
5554 case 'utf16le':
5555 case 'utf-16le':
5556 return ucs2Write(this, string, offset, length)
5557
5558 default:
5559 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5560 encoding = ('' + encoding).toLowerCase()
5561 loweredCase = true
5562 }
5563 }
5564}
5565
5566Buffer.prototype.toJSON = function toJSON () {
5567 return {
5568 type: 'Buffer',
5569 data: Array.prototype.slice.call(this._arr || this, 0)
5570 }
5571}
5572
5573function base64Slice (buf, start, end) {
5574 if (start === 0 && end === buf.length) {
5575 return base64.fromByteArray(buf)
5576 } else {
5577 return base64.fromByteArray(buf.slice(start, end))
5578 }
5579}
5580
5581function utf8Slice (buf, start, end) {
5582 end = Math.min(buf.length, end)
5583 var res = []
5584
5585 var i = start
5586 while (i < end) {
5587 var firstByte = buf[i]
5588 var codePoint = null
5589 var bytesPerSequence = (firstByte > 0xEF) ? 4
5590 : (firstByte > 0xDF) ? 3
5591 : (firstByte > 0xBF) ? 2
5592 : 1
5593
5594 if (i + bytesPerSequence <= end) {
5595 var secondByte, thirdByte, fourthByte, tempCodePoint
5596
5597 switch (bytesPerSequence) {
5598 case 1:
5599 if (firstByte < 0x80) {
5600 codePoint = firstByte
5601 }
5602 break
5603 case 2:
5604 secondByte = buf[i + 1]
5605 if ((secondByte & 0xC0) === 0x80) {
5606 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5607 if (tempCodePoint > 0x7F) {
5608 codePoint = tempCodePoint
5609 }
5610 }
5611 break
5612 case 3:
5613 secondByte = buf[i + 1]
5614 thirdByte = buf[i + 2]
5615 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5616 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5617 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5618 codePoint = tempCodePoint
5619 }
5620 }
5621 break
5622 case 4:
5623 secondByte = buf[i + 1]
5624 thirdByte = buf[i + 2]
5625 fourthByte = buf[i + 3]
5626 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5627 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5628 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5629 codePoint = tempCodePoint
5630 }
5631 }
5632 }
5633 }
5634
5635 if (codePoint === null) {
5636 // we did not generate a valid codePoint so insert a
5637 // replacement char (U+FFFD) and advance only 1 byte
5638 codePoint = 0xFFFD
5639 bytesPerSequence = 1
5640 } else if (codePoint > 0xFFFF) {
5641 // encode to utf16 (surrogate pair dance)
5642 codePoint -= 0x10000
5643 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5644 codePoint = 0xDC00 | codePoint & 0x3FF
5645 }
5646
5647 res.push(codePoint)
5648 i += bytesPerSequence
5649 }
5650
5651 return decodeCodePointsArray(res)
5652}
5653
5654// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5655// the lowest limit is Chrome, with 0x10000 args.
5656// We go 1 magnitude less, for safety
5657var MAX_ARGUMENTS_LENGTH = 0x1000
5658
5659function decodeCodePointsArray (codePoints) {
5660 var len = codePoints.length
5661 if (len <= MAX_ARGUMENTS_LENGTH) {
5662 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5663 }
5664
5665 // Decode in chunks to avoid "call stack size exceeded".
5666 var res = ''
5667 var i = 0
5668 while (i < len) {
5669 res += String.fromCharCode.apply(
5670 String,
5671 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5672 )
5673 }
5674 return res
5675}
5676
5677function asciiSlice (buf, start, end) {
5678 var ret = ''
5679 end = Math.min(buf.length, end)
5680
5681 for (var i = start; i < end; ++i) {
5682 ret += String.fromCharCode(buf[i] & 0x7F)
5683 }
5684 return ret
5685}
5686
5687function latin1Slice (buf, start, end) {
5688 var ret = ''
5689 end = Math.min(buf.length, end)
5690
5691 for (var i = start; i < end; ++i) {
5692 ret += String.fromCharCode(buf[i])
5693 }
5694 return ret
5695}
5696
5697function hexSlice (buf, start, end) {
5698 var len = buf.length
5699
5700 if (!start || start < 0) start = 0
5701 if (!end || end < 0 || end > len) end = len
5702
5703 var out = ''
5704 for (var i = start; i < end; ++i) {
5705 out += toHex(buf[i])
5706 }
5707 return out
5708}
5709
5710function utf16leSlice (buf, start, end) {
5711 var bytes = buf.slice(start, end)
5712 var res = ''
5713 for (var i = 0; i < bytes.length; i += 2) {
5714 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5715 }
5716 return res
5717}
5718
5719Buffer.prototype.slice = function slice (start, end) {
5720 var len = this.length
5721 start = ~~start
5722 end = end === undefined ? len : ~~end
5723
5724 if (start < 0) {
5725 start += len
5726 if (start < 0) start = 0
5727 } else if (start > len) {
5728 start = len
5729 }
5730
5731 if (end < 0) {
5732 end += len
5733 if (end < 0) end = 0
5734 } else if (end > len) {
5735 end = len
5736 }
5737
5738 if (end < start) end = start
5739
5740 var newBuf = this.subarray(start, end)
5741 // Return an augmented `Uint8Array` instance
5742 newBuf.__proto__ = Buffer.prototype
5743 return newBuf
5744}
5745
5746/*
5747 * Need to make sure that buffer isn't trying to write out of bounds.
5748 */
5749function checkOffset (offset, ext, length) {
5750 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5751 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5752}
5753
5754Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5755 offset = offset >>> 0
5756 byteLength = byteLength >>> 0
5757 if (!noAssert) checkOffset(offset, byteLength, this.length)
5758
5759 var val = this[offset]
5760 var mul = 1
5761 var i = 0
5762 while (++i < byteLength && (mul *= 0x100)) {
5763 val += this[offset + i] * mul
5764 }
5765
5766 return val
5767}
5768
5769Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5770 offset = offset >>> 0
5771 byteLength = byteLength >>> 0
5772 if (!noAssert) {
5773 checkOffset(offset, byteLength, this.length)
5774 }
5775
5776 var val = this[offset + --byteLength]
5777 var mul = 1
5778 while (byteLength > 0 && (mul *= 0x100)) {
5779 val += this[offset + --byteLength] * mul
5780 }
5781
5782 return val
5783}
5784
5785Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5786 offset = offset >>> 0
5787 if (!noAssert) checkOffset(offset, 1, this.length)
5788 return this[offset]
5789}
5790
5791Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5792 offset = offset >>> 0
5793 if (!noAssert) checkOffset(offset, 2, this.length)
5794 return this[offset] | (this[offset + 1] << 8)
5795}
5796
5797Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5798 offset = offset >>> 0
5799 if (!noAssert) checkOffset(offset, 2, this.length)
5800 return (this[offset] << 8) | this[offset + 1]
5801}
5802
5803Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5804 offset = offset >>> 0
5805 if (!noAssert) checkOffset(offset, 4, this.length)
5806
5807 return ((this[offset]) |
5808 (this[offset + 1] << 8) |
5809 (this[offset + 2] << 16)) +
5810 (this[offset + 3] * 0x1000000)
5811}
5812
5813Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5814 offset = offset >>> 0
5815 if (!noAssert) checkOffset(offset, 4, this.length)
5816
5817 return (this[offset] * 0x1000000) +
5818 ((this[offset + 1] << 16) |
5819 (this[offset + 2] << 8) |
5820 this[offset + 3])
5821}
5822
5823Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5824 offset = offset >>> 0
5825 byteLength = byteLength >>> 0
5826 if (!noAssert) checkOffset(offset, byteLength, this.length)
5827
5828 var val = this[offset]
5829 var mul = 1
5830 var i = 0
5831 while (++i < byteLength && (mul *= 0x100)) {
5832 val += this[offset + i] * mul
5833 }
5834 mul *= 0x80
5835
5836 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5837
5838 return val
5839}
5840
5841Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5842 offset = offset >>> 0
5843 byteLength = byteLength >>> 0
5844 if (!noAssert) checkOffset(offset, byteLength, this.length)
5845
5846 var i = byteLength
5847 var mul = 1
5848 var val = this[offset + --i]
5849 while (i > 0 && (mul *= 0x100)) {
5850 val += this[offset + --i] * mul
5851 }
5852 mul *= 0x80
5853
5854 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5855
5856 return val
5857}
5858
5859Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5860 offset = offset >>> 0
5861 if (!noAssert) checkOffset(offset, 1, this.length)
5862 if (!(this[offset] & 0x80)) return (this[offset])
5863 return ((0xff - this[offset] + 1) * -1)
5864}
5865
5866Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5867 offset = offset >>> 0
5868 if (!noAssert) checkOffset(offset, 2, this.length)
5869 var val = this[offset] | (this[offset + 1] << 8)
5870 return (val & 0x8000) ? val | 0xFFFF0000 : val
5871}
5872
5873Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5874 offset = offset >>> 0
5875 if (!noAssert) checkOffset(offset, 2, this.length)
5876 var val = this[offset + 1] | (this[offset] << 8)
5877 return (val & 0x8000) ? val | 0xFFFF0000 : val
5878}
5879
5880Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5881 offset = offset >>> 0
5882 if (!noAssert) checkOffset(offset, 4, this.length)
5883
5884 return (this[offset]) |
5885 (this[offset + 1] << 8) |
5886 (this[offset + 2] << 16) |
5887 (this[offset + 3] << 24)
5888}
5889
5890Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5891 offset = offset >>> 0
5892 if (!noAssert) checkOffset(offset, 4, this.length)
5893
5894 return (this[offset] << 24) |
5895 (this[offset + 1] << 16) |
5896 (this[offset + 2] << 8) |
5897 (this[offset + 3])
5898}
5899
5900Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5901 offset = offset >>> 0
5902 if (!noAssert) checkOffset(offset, 4, this.length)
5903 return ieee754.read(this, offset, true, 23, 4)
5904}
5905
5906Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5907 offset = offset >>> 0
5908 if (!noAssert) checkOffset(offset, 4, this.length)
5909 return ieee754.read(this, offset, false, 23, 4)
5910}
5911
5912Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5913 offset = offset >>> 0
5914 if (!noAssert) checkOffset(offset, 8, this.length)
5915 return ieee754.read(this, offset, true, 52, 8)
5916}
5917
5918Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5919 offset = offset >>> 0
5920 if (!noAssert) checkOffset(offset, 8, this.length)
5921 return ieee754.read(this, offset, false, 52, 8)
5922}
5923
5924function checkInt (buf, value, offset, ext, max, min) {
5925 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5926 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
5927 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5928}
5929
5930Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
5931 value = +value
5932 offset = offset >>> 0
5933 byteLength = byteLength >>> 0
5934 if (!noAssert) {
5935 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5936 checkInt(this, value, offset, byteLength, maxBytes, 0)
5937 }
5938
5939 var mul = 1
5940 var i = 0
5941 this[offset] = value & 0xFF
5942 while (++i < byteLength && (mul *= 0x100)) {
5943 this[offset + i] = (value / mul) & 0xFF
5944 }
5945
5946 return offset + byteLength
5947}
5948
5949Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
5950 value = +value
5951 offset = offset >>> 0
5952 byteLength = byteLength >>> 0
5953 if (!noAssert) {
5954 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5955 checkInt(this, value, offset, byteLength, maxBytes, 0)
5956 }
5957
5958 var i = byteLength - 1
5959 var mul = 1
5960 this[offset + i] = value & 0xFF
5961 while (--i >= 0 && (mul *= 0x100)) {
5962 this[offset + i] = (value / mul) & 0xFF
5963 }
5964
5965 return offset + byteLength
5966}
5967
5968Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
5969 value = +value
5970 offset = offset >>> 0
5971 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
5972 this[offset] = (value & 0xff)
5973 return offset + 1
5974}
5975
5976Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
5977 value = +value
5978 offset = offset >>> 0
5979 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5980 this[offset] = (value & 0xff)
5981 this[offset + 1] = (value >>> 8)
5982 return offset + 2
5983}
5984
5985Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
5986 value = +value
5987 offset = offset >>> 0
5988 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5989 this[offset] = (value >>> 8)
5990 this[offset + 1] = (value & 0xff)
5991 return offset + 2
5992}
5993
5994Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
5995 value = +value
5996 offset = offset >>> 0
5997 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
5998 this[offset + 3] = (value >>> 24)
5999 this[offset + 2] = (value >>> 16)
6000 this[offset + 1] = (value >>> 8)
6001 this[offset] = (value & 0xff)
6002 return offset + 4
6003}
6004
6005Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
6006 value = +value
6007 offset = offset >>> 0
6008 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
6009 this[offset] = (value >>> 24)
6010 this[offset + 1] = (value >>> 16)
6011 this[offset + 2] = (value >>> 8)
6012 this[offset + 3] = (value & 0xff)
6013 return offset + 4
6014}
6015
6016Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
6017 value = +value
6018 offset = offset >>> 0
6019 if (!noAssert) {
6020 var limit = Math.pow(2, (8 * byteLength) - 1)
6021
6022 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6023 }
6024
6025 var i = 0
6026 var mul = 1
6027 var sub = 0
6028 this[offset] = value & 0xFF
6029 while (++i < byteLength && (mul *= 0x100)) {
6030 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
6031 sub = 1
6032 }
6033 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6034 }
6035
6036 return offset + byteLength
6037}
6038
6039Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
6040 value = +value
6041 offset = offset >>> 0
6042 if (!noAssert) {
6043 var limit = Math.pow(2, (8 * byteLength) - 1)
6044
6045 checkInt(this, value, offset, byteLength, limit - 1, -limit)
6046 }
6047
6048 var i = byteLength - 1
6049 var mul = 1
6050 var sub = 0
6051 this[offset + i] = value & 0xFF
6052 while (--i >= 0 && (mul *= 0x100)) {
6053 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
6054 sub = 1
6055 }
6056 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
6057 }
6058
6059 return offset + byteLength
6060}
6061
6062Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
6063 value = +value
6064 offset = offset >>> 0
6065 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
6066 if (value < 0) value = 0xff + value + 1
6067 this[offset] = (value & 0xff)
6068 return offset + 1
6069}
6070
6071Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
6072 value = +value
6073 offset = offset >>> 0
6074 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6075 this[offset] = (value & 0xff)
6076 this[offset + 1] = (value >>> 8)
6077 return offset + 2
6078}
6079
6080Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
6081 value = +value
6082 offset = offset >>> 0
6083 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
6084 this[offset] = (value >>> 8)
6085 this[offset + 1] = (value & 0xff)
6086 return offset + 2
6087}
6088
6089Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
6090 value = +value
6091 offset = offset >>> 0
6092 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6093 this[offset] = (value & 0xff)
6094 this[offset + 1] = (value >>> 8)
6095 this[offset + 2] = (value >>> 16)
6096 this[offset + 3] = (value >>> 24)
6097 return offset + 4
6098}
6099
6100Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
6101 value = +value
6102 offset = offset >>> 0
6103 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
6104 if (value < 0) value = 0xffffffff + value + 1
6105 this[offset] = (value >>> 24)
6106 this[offset + 1] = (value >>> 16)
6107 this[offset + 2] = (value >>> 8)
6108 this[offset + 3] = (value & 0xff)
6109 return offset + 4
6110}
6111
6112function checkIEEE754 (buf, value, offset, ext, max, min) {
6113 if (offset + ext > buf.length) throw new RangeError('Index out of range')
6114 if (offset < 0) throw new RangeError('Index out of range')
6115}
6116
6117function writeFloat (buf, value, offset, littleEndian, noAssert) {
6118 value = +value
6119 offset = offset >>> 0
6120 if (!noAssert) {
6121 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6122 }
6123 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6124 return offset + 4
6125}
6126
6127Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6128 return writeFloat(this, value, offset, true, noAssert)
6129}
6130
6131Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6132 return writeFloat(this, value, offset, false, noAssert)
6133}
6134
6135function writeDouble (buf, value, offset, littleEndian, noAssert) {
6136 value = +value
6137 offset = offset >>> 0
6138 if (!noAssert) {
6139 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6140 }
6141 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6142 return offset + 8
6143}
6144
6145Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6146 return writeDouble(this, value, offset, true, noAssert)
6147}
6148
6149Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6150 return writeDouble(this, value, offset, false, noAssert)
6151}
6152
6153// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6154Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6155 if (!start) start = 0
6156 if (!end && end !== 0) end = this.length
6157 if (targetStart >= target.length) targetStart = target.length
6158 if (!targetStart) targetStart = 0
6159 if (end > 0 && end < start) end = start
6160
6161 // Copy 0 bytes; we're done
6162 if (end === start) return 0
6163 if (target.length === 0 || this.length === 0) return 0
6164
6165 // Fatal error conditions
6166 if (targetStart < 0) {
6167 throw new RangeError('targetStart out of bounds')
6168 }
6169 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6170 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6171
6172 // Are we oob?
6173 if (end > this.length) end = this.length
6174 if (target.length - targetStart < end - start) {
6175 end = target.length - targetStart + start
6176 }
6177
6178 var len = end - start
6179 var i
6180
6181 if (this === target && start < targetStart && targetStart < end) {
6182 // descending copy from end
6183 for (i = len - 1; i >= 0; --i) {
6184 target[i + targetStart] = this[i + start]
6185 }
6186 } else if (len < 1000) {
6187 // ascending copy from start
6188 for (i = 0; i < len; ++i) {
6189 target[i + targetStart] = this[i + start]
6190 }
6191 } else {
6192 Uint8Array.prototype.set.call(
6193 target,
6194 this.subarray(start, start + len),
6195 targetStart
6196 )
6197 }
6198
6199 return len
6200}
6201
6202// Usage:
6203// buffer.fill(number[, offset[, end]])
6204// buffer.fill(buffer[, offset[, end]])
6205// buffer.fill(string[, offset[, end]][, encoding])
6206Buffer.prototype.fill = function fill (val, start, end, encoding) {
6207 // Handle string cases:
6208 if (typeof val === 'string') {
6209 if (typeof start === 'string') {
6210 encoding = start
6211 start = 0
6212 end = this.length
6213 } else if (typeof end === 'string') {
6214 encoding = end
6215 end = this.length
6216 }
6217 if (val.length === 1) {
6218 var code = val.charCodeAt(0)
6219 if (code < 256) {
6220 val = code
6221 }
6222 }
6223 if (encoding !== undefined && typeof encoding !== 'string') {
6224 throw new TypeError('encoding must be a string')
6225 }
6226 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6227 throw new TypeError('Unknown encoding: ' + encoding)
6228 }
6229 } else if (typeof val === 'number') {
6230 val = val & 255
6231 }
6232
6233 // Invalid ranges are not set to a default, so can range check early.
6234 if (start < 0 || this.length < start || this.length < end) {
6235 throw new RangeError('Out of range index')
6236 }
6237
6238 if (end <= start) {
6239 return this
6240 }
6241
6242 start = start >>> 0
6243 end = end === undefined ? this.length : end >>> 0
6244
6245 if (!val) val = 0
6246
6247 var i
6248 if (typeof val === 'number') {
6249 for (i = start; i < end; ++i) {
6250 this[i] = val
6251 }
6252 } else {
6253 var bytes = Buffer.isBuffer(val)
6254 ? val
6255 : new Buffer(val, encoding)
6256 var len = bytes.length
6257 for (i = 0; i < end - start; ++i) {
6258 this[i + start] = bytes[i % len]
6259 }
6260 }
6261
6262 return this
6263}
6264
6265// HELPER FUNCTIONS
6266// ================
6267
6268var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6269
6270function base64clean (str) {
6271 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6272 str = str.trim().replace(INVALID_BASE64_RE, '')
6273 // Node converts strings with length < 2 to ''
6274 if (str.length < 2) return ''
6275 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6276 while (str.length % 4 !== 0) {
6277 str = str + '='
6278 }
6279 return str
6280}
6281
6282function toHex (n) {
6283 if (n < 16) return '0' + n.toString(16)
6284 return n.toString(16)
6285}
6286
6287function utf8ToBytes (string, units) {
6288 units = units || Infinity
6289 var codePoint
6290 var length = string.length
6291 var leadSurrogate = null
6292 var bytes = []
6293
6294 for (var i = 0; i < length; ++i) {
6295 codePoint = string.charCodeAt(i)
6296
6297 // is surrogate component
6298 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6299 // last char was a lead
6300 if (!leadSurrogate) {
6301 // no lead yet
6302 if (codePoint > 0xDBFF) {
6303 // unexpected trail
6304 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6305 continue
6306 } else if (i + 1 === length) {
6307 // unpaired lead
6308 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6309 continue
6310 }
6311
6312 // valid lead
6313 leadSurrogate = codePoint
6314
6315 continue
6316 }
6317
6318 // 2 leads in a row
6319 if (codePoint < 0xDC00) {
6320 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6321 leadSurrogate = codePoint
6322 continue
6323 }
6324
6325 // valid surrogate pair
6326 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6327 } else if (leadSurrogate) {
6328 // valid bmp char, but last char was a lead
6329 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6330 }
6331
6332 leadSurrogate = null
6333
6334 // encode utf8
6335 if (codePoint < 0x80) {
6336 if ((units -= 1) < 0) break
6337 bytes.push(codePoint)
6338 } else if (codePoint < 0x800) {
6339 if ((units -= 2) < 0) break
6340 bytes.push(
6341 codePoint >> 0x6 | 0xC0,
6342 codePoint & 0x3F | 0x80
6343 )
6344 } else if (codePoint < 0x10000) {
6345 if ((units -= 3) < 0) break
6346 bytes.push(
6347 codePoint >> 0xC | 0xE0,
6348 codePoint >> 0x6 & 0x3F | 0x80,
6349 codePoint & 0x3F | 0x80
6350 )
6351 } else if (codePoint < 0x110000) {
6352 if ((units -= 4) < 0) break
6353 bytes.push(
6354 codePoint >> 0x12 | 0xF0,
6355 codePoint >> 0xC & 0x3F | 0x80,
6356 codePoint >> 0x6 & 0x3F | 0x80,
6357 codePoint & 0x3F | 0x80
6358 )
6359 } else {
6360 throw new Error('Invalid code point')
6361 }
6362 }
6363
6364 return bytes
6365}
6366
6367function asciiToBytes (str) {
6368 var byteArray = []
6369 for (var i = 0; i < str.length; ++i) {
6370 // Node's code seems to be doing this and not & 0x7F..
6371 byteArray.push(str.charCodeAt(i) & 0xFF)
6372 }
6373 return byteArray
6374}
6375
6376function utf16leToBytes (str, units) {
6377 var c, hi, lo
6378 var byteArray = []
6379 for (var i = 0; i < str.length; ++i) {
6380 if ((units -= 2) < 0) break
6381
6382 c = str.charCodeAt(i)
6383 hi = c >> 8
6384 lo = c % 256
6385 byteArray.push(lo)
6386 byteArray.push(hi)
6387 }
6388
6389 return byteArray
6390}
6391
6392function base64ToBytes (str) {
6393 return base64.toByteArray(base64clean(str))
6394}
6395
6396function blitBuffer (src, dst, offset, length) {
6397 for (var i = 0; i < length; ++i) {
6398 if ((i + offset >= dst.length) || (i >= src.length)) break
6399 dst[i + offset] = src[i]
6400 }
6401 return i
6402}
6403
6404// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6405function isArrayBufferView (obj) {
6406 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6407}
6408
6409function numberIsNaN (obj) {
6410 return obj !== obj // eslint-disable-line no-self-compare
6411}
6412
6413},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6414exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6415 var e, m
6416 var eLen = nBytes * 8 - mLen - 1
6417 var eMax = (1 << eLen) - 1
6418 var eBias = eMax >> 1
6419 var nBits = -7
6420 var i = isLE ? (nBytes - 1) : 0
6421 var d = isLE ? -1 : 1
6422 var s = buffer[offset + i]
6423
6424 i += d
6425
6426 e = s & ((1 << (-nBits)) - 1)
6427 s >>= (-nBits)
6428 nBits += eLen
6429 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6430
6431 m = e & ((1 << (-nBits)) - 1)
6432 e >>= (-nBits)
6433 nBits += mLen
6434 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6435
6436 if (e === 0) {
6437 e = 1 - eBias
6438 } else if (e === eMax) {
6439 return m ? NaN : ((s ? -1 : 1) * Infinity)
6440 } else {
6441 m = m + Math.pow(2, mLen)
6442 e = e - eBias
6443 }
6444 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6445}
6446
6447exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6448 var e, m, c
6449 var eLen = nBytes * 8 - mLen - 1
6450 var eMax = (1 << eLen) - 1
6451 var eBias = eMax >> 1
6452 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6453 var i = isLE ? 0 : (nBytes - 1)
6454 var d = isLE ? 1 : -1
6455 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6456
6457 value = Math.abs(value)
6458
6459 if (isNaN(value) || value === Infinity) {
6460 m = isNaN(value) ? 1 : 0
6461 e = eMax
6462 } else {
6463 e = Math.floor(Math.log(value) / Math.LN2)
6464 if (value * (c = Math.pow(2, -e)) < 1) {
6465 e--
6466 c *= 2
6467 }
6468 if (e + eBias >= 1) {
6469 value += rt / c
6470 } else {
6471 value += rt * Math.pow(2, 1 - eBias)
6472 }
6473 if (value * c >= 2) {
6474 e++
6475 c /= 2
6476 }
6477
6478 if (e + eBias >= eMax) {
6479 m = 0
6480 e = eMax
6481 } else if (e + eBias >= 1) {
6482 m = (value * c - 1) * Math.pow(2, mLen)
6483 e = e + eBias
6484 } else {
6485 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6486 e = 0
6487 }
6488 }
6489
6490 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6491
6492 e = (e << mLen) | m
6493 eLen += mLen
6494 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6495
6496 buffer[offset + i - d] |= s * 128
6497}
6498
6499},{}],4:[function(require,module,exports){
6500window.basex = require('base-x')
6501},{"base-x":5}],5:[function(require,module,exports){
6502// base-x encoding
6503// Forked from https://github.com/cryptocoinjs/bs58
6504// Originally written by Mike Hearn for BitcoinJ
6505// Copyright (c) 2011 Google Inc
6506// Ported to JavaScript by Stefan Thomas
6507// Merged Buffer refactorings from base58-native by Stephen Pair
6508// Copyright (c) 2013 BitPay Inc
6509
6510var Buffer = require('safe-buffer').Buffer
6511
6512module.exports = function base (ALPHABET) {
6513 var ALPHABET_MAP = {}
6514 var BASE = ALPHABET.length
6515 var LEADER = ALPHABET.charAt(0)
6516
6517 // pre-compute lookup table
6518 for (var z = 0; z < ALPHABET.length; z++) {
6519 var x = ALPHABET.charAt(z)
6520
6521 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6522 ALPHABET_MAP[x] = z
6523 }
6524
6525 function encode (source) {
6526 if (source.length === 0) return ''
6527
6528 var digits = [0]
6529 for (var i = 0; i < source.length; ++i) {
6530 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6531 carry += digits[j] << 8
6532 digits[j] = carry % BASE
6533 carry = (carry / BASE) | 0
6534 }
6535
6536 while (carry > 0) {
6537 digits.push(carry % BASE)
6538 carry = (carry / BASE) | 0
6539 }
6540 }
6541
6542 var string = ''
6543
6544 // deal with leading zeros
6545 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6546 // convert digits to a string
6547 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6548
6549 return string
6550 }
6551
6552 function decodeUnsafe (string) {
6553 if (string.length === 0) return Buffer.allocUnsafe(0)
6554
6555 var bytes = [0]
6556 for (var i = 0; i < string.length; i++) {
6557 var value = ALPHABET_MAP[string[i]]
6558 if (value === undefined) return
6559
6560 for (var j = 0, carry = value; j < bytes.length; ++j) {
6561 carry += bytes[j] * BASE
6562 bytes[j] = carry & 0xff
6563 carry >>= 8
6564 }
6565
6566 while (carry > 0) {
6567 bytes.push(carry & 0xff)
6568 carry >>= 8
6569 }
6570 }
6571
6572 // deal with leading zeros
6573 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6574 bytes.push(0)
6575 }
6576
6577 return Buffer.from(bytes.reverse())
6578 }
6579
6580 function decode (string) {
6581 var buffer = decodeUnsafe(string)
6582 if (buffer) return buffer
6583
6584 throw new Error('Non-base' + BASE + ' character')
6585 }
6586
6587 return {
6588 encode: encode,
6589 decodeUnsafe: decodeUnsafe,
6590 decode: decode
6591 }
6592}
6593
6594},{"safe-buffer":6}],6:[function(require,module,exports){
6595module.exports = require('buffer')
6596
6597},{"buffer":2}]},{},[4])(4)
6598});</script>
6e0f24b1
IC
6599 <script>(function (root) {
6600 "use strict";
6601
6602/***** unorm.js *****/
6603
6604/*
6605 * UnicodeNormalizer 1.0.0
6606 * Copyright (c) 2008 Matsuza
6607 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6608 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6609 * $Rev: 13309 $
6610 */
6611
6612 var DEFAULT_FEATURE = [null, 0, {}];
6613 var CACHE_THRESHOLD = 10;
6614 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6615 var NCount = VCount * TCount; // 588
6616 var SCount = LCount * NCount; // 11172
6617
6618 var UChar = function(cp, feature){
6619 this.codepoint = cp;
6620 this.feature = feature;
6621 };
6622
6623 // Strategies
6624 var cache = {};
6625 var cacheCounter = [];
6626 for (var i = 0; i <= 0xFF; ++i){
6627 cacheCounter[i] = 0;
6628 }
6629
6630 function fromCache(next, cp, needFeature){
6631 var ret = cache[cp];
6632 if(!ret){
6633 ret = next(cp, needFeature);
6634 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6635 cache[cp] = ret;
6636 }
6637 }
6638 return ret;
6639 }
6640
6641 function fromData(next, cp, needFeature){
6642 var hash = cp & 0xFF00;
6643 var dunit = UChar.udata[hash] || {};
6644 var f = dunit[cp];
6645 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6646 }
6647 function fromCpOnly(next, cp, needFeature){
6648 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6649 }
6650 function fromRuleBasedJamo(next, cp, needFeature){
6651 var j;
6652 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6653 return next(cp, needFeature);
6654 }
6655 if(LBase <= cp && cp < LBase + LCount){
6656 var c = {};
6657 var base = (cp - LBase) * VCount;
6658 for (j = 0; j < VCount; ++j){
6659 c[VBase + j] = SBase + TCount * (j + base);
6660 }
6661 return new UChar(cp, [,,c]);
6662 }
6663
6664 var SIndex = cp - SBase;
6665 var TIndex = SIndex % TCount;
6666 var feature = [];
6667 if(TIndex !== 0){
6668 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6669 } else {
6670 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6671 feature[2] = {};
6672 for (j = 1; j < TCount; ++j){
6673 feature[2][TBase + j] = cp + j;
6674 }
6675 }
6676 return new UChar(cp, feature);
6677 }
6678 function fromCpFilter(next, cp, needFeature){
6679 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6680 }
6681
6682 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6683
6684 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6685 return function (cp, needFeature) {
6686 return strategy(next, cp, needFeature);
6687 };
6688 }, null);
6689
6690 UChar.isHighSurrogate = function(cp){
6691 return cp >= 0xD800 && cp <= 0xDBFF;
6692 };
6693 UChar.isLowSurrogate = function(cp){
6694 return cp >= 0xDC00 && cp <= 0xDFFF;
6695 };
6696
6697 UChar.prototype.prepFeature = function(){
6698 if(!this.feature){
6699 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6700 }
6701 };
6702
6703 UChar.prototype.toString = function(){
6704 if(this.codepoint < 0x10000){
6705 return String.fromCharCode(this.codepoint);
6706 } else {
6707 var x = this.codepoint - 0x10000;
6708 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6709 }
6710 };
6711
6712 UChar.prototype.getDecomp = function(){
6713 this.prepFeature();
6714 return this.feature[0] || null;
6715 };
6716
6717 UChar.prototype.isCompatibility = function(){
6718 this.prepFeature();
6719 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6720 };
6721 UChar.prototype.isExclude = function(){
6722 this.prepFeature();
6723 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6724 };
6725 UChar.prototype.getCanonicalClass = function(){
6726 this.prepFeature();
6727 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6728 };
6729 UChar.prototype.getComposite = function(following){
6730 this.prepFeature();
6731 if(!this.feature[2]){
6732 return null;
6733 }
6734 var cp = this.feature[2][following.codepoint];
6735 return cp ? UChar.fromCharCode(cp) : null;
6736 };
6737
6738 var UCharIterator = function(str){
6739 this.str = str;
6740 this.cursor = 0;
6741 };
6742 UCharIterator.prototype.next = function(){
6743 if(!!this.str && this.cursor < this.str.length){
6744 var cp = this.str.charCodeAt(this.cursor++);
6745 var d;
6746 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6747 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6748 ++this.cursor;
6749 }
6750 return UChar.fromCharCode(cp);
6751 } else {
6752 this.str = null;
6753 return null;
6754 }
6755 };
6756
6757 var RecursDecompIterator = function(it, cano){
6758 this.it = it;
6759 this.canonical = cano;
6760 this.resBuf = [];
6761 };
6762
6763 RecursDecompIterator.prototype.next = function(){
6764 function recursiveDecomp(cano, uchar){
6765 var decomp = uchar.getDecomp();
6766 if(!!decomp && !(cano && uchar.isCompatibility())){
6767 var ret = [];
6768 for(var i = 0; i < decomp.length; ++i){
6769 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6770 ret = ret.concat(a);
6771 }
6772 return ret;
6773 } else {
6774 return [uchar];
6775 }
6776 }
6777 if(this.resBuf.length === 0){
6778 var uchar = this.it.next();
6779 if(!uchar){
6780 return null;
6781 }
6782 this.resBuf = recursiveDecomp(this.canonical, uchar);
6783 }
6784 return this.resBuf.shift();
6785 };
6786
6787 var DecompIterator = function(it){
6788 this.it = it;
6789 this.resBuf = [];
6790 };
6791
6792 DecompIterator.prototype.next = function(){
6793 var cc;
6794 if(this.resBuf.length === 0){
6795 do{
6796 var uchar = this.it.next();
6797 if(!uchar){
6798 break;
6799 }
6800 cc = uchar.getCanonicalClass();
6801 var inspt = this.resBuf.length;
6802 if(cc !== 0){
6803 for(; inspt > 0; --inspt){
6804 var uchar2 = this.resBuf[inspt - 1];
6805 var cc2 = uchar2.getCanonicalClass();
6806 if(cc2 <= cc){
6807 break;
6808 }
6809 }
6810 }
6811 this.resBuf.splice(inspt, 0, uchar);
6812 } while(cc !== 0);
6813 }
6814 return this.resBuf.shift();
6815 };
6816
6817 var CompIterator = function(it){
6818 this.it = it;
6819 this.procBuf = [];
6820 this.resBuf = [];
6821 this.lastClass = null;
6822 };
6823
6824 CompIterator.prototype.next = function(){
6825 while(this.resBuf.length === 0){
6826 var uchar = this.it.next();
6827 if(!uchar){
6828 this.resBuf = this.procBuf;
6829 this.procBuf = [];
6830 break;
6831 }
6832 if(this.procBuf.length === 0){
6833 this.lastClass = uchar.getCanonicalClass();
6834 this.procBuf.push(uchar);
6835 } else {
6836 var starter = this.procBuf[0];
6837 var composite = starter.getComposite(uchar);
6838 var cc = uchar.getCanonicalClass();
6839 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6840 this.procBuf[0] = composite;
6841 } else {
6842 if(cc === 0){
6843 this.resBuf = this.procBuf;
6844 this.procBuf = [];
6845 }
6846 this.lastClass = cc;
6847 this.procBuf.push(uchar);
6848 }
6849 }
6850 }
6851 return this.resBuf.shift();
6852 };
6853
6854 var createIterator = function(mode, str){
6855 switch(mode){
6856 case "NFD":
6857 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6858 case "NFKD":
6859 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6860 case "NFC":
6861 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6862 case "NFKC":
6863 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6864 }
6865 throw mode + " is invalid";
6866 };
6867 var normalize = function(mode, str){
6868 var it = createIterator(mode, str);
6869 var ret = "";
6870 var uchar;
6871 while(!!(uchar = it.next())){
6872 ret += uchar.toString();
6873 }
6874 return ret;
6875 };
6876
6877 /* API functions */
6878 function nfd(str){
6879 return normalize("NFD", str);
6880 }
6881
6882 function nfkd(str){
6883 return normalize("NFKD", str);
6884 }
6885
6886 function nfc(str){
6887 return normalize("NFC", str);
6888 }
6889
6890 function nfkc(str){
6891 return normalize("NFKC", str);
6892 }
6893
6894/* Unicode data */
6895UChar.udata={
68960:{60:[,,{824:8814}],61:[,,{824:8800}],62:[,,{824:8815}],65:[,,{768:192,769:193,770:194,771:195,772:256,774:258,775:550,776:196,777:7842,778:197,780:461,783:512,785:514,803:7840,805:7680,808:260}],66:[,,{775:7682,803:7684,817:7686}],67:[,,{769:262,770:264,775:266,780:268,807:199}],68:[,,{775:7690,780:270,803:7692,807:7696,813:7698,817:7694}],69:[,,{768:200,769:201,770:202,771:7868,772:274,774:276,775:278,776:203,777:7866,780:282,783:516,785:518,803:7864,807:552,808:280,813:7704,816:7706}],70:[,,{775:7710}],71:[,,{769:500,770:284,772:7712,774:286,775:288,780:486,807:290}],72:[,,{770:292,775:7714,776:7718,780:542,803:7716,807:7720,814:7722}],73:[,,{768:204,769:205,770:206,771:296,772:298,774:300,775:304,776:207,777:7880,780:463,783:520,785:522,803:7882,808:302,816:7724}],74:[,,{770:308}],75:[,,{769:7728,780:488,803:7730,807:310,817:7732}],76:[,,{769:313,780:317,803:7734,807:315,813:7740,817:7738}],77:[,,{769:7742,775:7744,803:7746}],78:[,,{768:504,769:323,771:209,775:7748,780:327,803:7750,807:325,813:7754,817:7752}],79:[,,{768:210,769:211,770:212,771:213,772:332,774:334,775:558,776:214,777:7886,779:336,780:465,783:524,785:526,795:416,803:7884,808:490}],80:[,,{769:7764,775:7766}],82:[,,{769:340,775:7768,780:344,783:528,785:530,803:7770,807:342,817:7774}],83:[,,{769:346,770:348,775:7776,780:352,803:7778,806:536,807:350}],84:[,,{775:7786,780:356,803:7788,806:538,807:354,813:7792,817:7790}],85:[,,{768:217,769:218,770:219,771:360,772:362,774:364,776:220,777:7910,778:366,779:368,780:467,783:532,785:534,795:431,803:7908,804:7794,808:370,813:7798,816:7796}],86:[,,{771:7804,803:7806}],87:[,,{768:7808,769:7810,770:372,775:7814,776:7812,803:7816}],88:[,,{775:7818,776:7820}],89:[,,{768:7922,769:221,770:374,771:7928,772:562,775:7822,776:376,777:7926,803:7924}],90:[,,{769:377,770:7824,775:379,780:381,803:7826,817:7828}],97:[,,{768:224,769:225,770:226,771:227,772:257,774:259,775:551,776:228,777:7843,778:229,780:462,783:513,785:515,803:7841,805:7681,808:261}],98:[,,{775:7683,803:7685,817:7687}],99:[,,{769:263,770:265,775:267,780:269,807:231}],100:[,,{775:7691,780:271,803:7693,807:7697,813:7699,817:7695}],101:[,,{768:232,769:233,770:234,771:7869,772:275,774:277,775:279,776:235,777:7867,780:283,783:517,785:519,803:7865,807:553,808:281,813:7705,816:7707}],102:[,,{775:7711}],103:[,,{769:501,770:285,772:7713,774:287,775:289,780:487,807:291}],104:[,,{770:293,775:7715,776:7719,780:543,803:7717,807:7721,814:7723,817:7830}],105:[,,{768:236,769:237,770:238,771:297,772:299,774:301,776:239,777:7881,780:464,783:521,785:523,803:7883,808:303,816:7725}],106:[,,{770:309,780:496}],107:[,,{769:7729,780:489,803:7731,807:311,817:7733}],108:[,,{769:314,780:318,803:7735,807:316,813:7741,817:7739}],109:[,,{769:7743,775:7745,803:7747}],110:[,,{768:505,769:324,771:241,775:7749,780:328,803:7751,807:326,813:7755,817:7753}],111:[,,{768:242,769:243,770:244,771:245,772:333,774:335,775:559,776:246,777:7887,779:337,780:466,783:525,785:527,795:417,803:7885,808:491}],112:[,,{769:7765,775:7767}],114:[,,{769:341,775:7769,780:345,783:529,785:531,803:7771,807:343,817:7775}],115:[,,{769:347,770:349,775:7777,780:353,803:7779,806:537,807:351}],116:[,,{775:7787,776:7831,780:357,803:7789,806:539,807:355,813:7793,817:7791}],117:[,,{768:249,769:250,770:251,771:361,772:363,774:365,776:252,777:7911,778:367,779:369,780:468,783:533,785:535,795:432,803:7909,804:7795,808:371,813:7799,816:7797}],118:[,,{771:7805,803:7807}],119:[,,{768:7809,769:7811,770:373,775:7815,776:7813,778:7832,803:7817}],120:[,,{775:7819,776:7821}],121:[,,{768:7923,769:253,770:375,771:7929,772:563,775:7823,776:255,777:7927,778:7833,803:7925}],122:[,,{769:378,770:7825,775:380,780:382,803:7827,817:7829}],160:[[32],256],168:[[32,776],256,{768:8173,769:901,834:8129}],170:[[97],256],175:[[32,772],256],178:[[50],256],179:[[51],256],180:[[32,769],256],181:[[956],256],184:[[32,807],256],185:[[49],256],186:[[111],256],188:[[49,8260,52],256],189:[[49,8260,50],256],190:[[51,8260,52],256],192:[[65,768]],193:[[65,769]],194:[[65,770],,{768:7846,769:7844,771:7850,777:7848}],195:[[65,771]],196:[[65,776],,{772:478}],197:[[65,778],,{769:506}],198:[,,{769:508,772:482}],199:[[67,807],,{769:7688}],200:[[69,768]],201:[[69,769]],202:[[69,770],,{768:7872,769:7870,771:7876,777:7874}],203:[[69,776]],204:[[73,768]],205:[[73,769]],206:[[73,770]],207:[[73,776],,{769:7726}],209:[[78,771]],210:[[79,768]],211:[[79,769]],212:[[79,770],,{768:7890,769:7888,771:7894,777:7892}],213:[[79,771],,{769:7756,772:556,776:7758}],214:[[79,776],,{772:554}],216:[,,{769:510}],217:[[85,768]],218:[[85,769]],219:[[85,770]],220:[[85,776],,{768:475,769:471,772:469,780:473}],221:[[89,769]],224:[[97,768]],225:[[97,769]],226:[[97,770],,{768:7847,769:7845,771:7851,777:7849}],227:[[97,771]],228:[[97,776],,{772:479}],229:[[97,778],,{769:507}],230:[,,{769:509,772:483}],231:[[99,807],,{769:7689}],232:[[101,768]],233:[[101,769]],234:[[101,770],,{768:7873,769:7871,771:7877,777:7875}],235:[[101,776]],236:[[105,768]],237:[[105,769]],238:[[105,770]],239:[[105,776],,{769:7727}],241:[[110,771]],242:[[111,768]],243:[[111,769]],244:[[111,770],,{768:7891,769:7889,771:7895,777:7893}],245:[[111,771],,{769:7757,772:557,776:7759}],246:[[111,776],,{772:555}],248:[,,{769:511}],249:[[117,768]],250:[[117,769]],251:[[117,770]],252:[[117,776],,{768:476,769:472,772:470,780:474}],253:[[121,769]],255:[[121,776]]},
6897256:{256:[[65,772]],257:[[97,772]],258:[[65,774],,{768:7856,769:7854,771:7860,777:7858}],259:[[97,774],,{768:7857,769:7855,771:7861,777:7859}],260:[[65,808]],261:[[97,808]],262:[[67,769]],263:[[99,769]],264:[[67,770]],265:[[99,770]],266:[[67,775]],267:[[99,775]],268:[[67,780]],269:[[99,780]],270:[[68,780]],271:[[100,780]],274:[[69,772],,{768:7700,769:7702}],275:[[101,772],,{768:7701,769:7703}],276:[[69,774]],277:[[101,774]],278:[[69,775]],279:[[101,775]],280:[[69,808]],281:[[101,808]],282:[[69,780]],283:[[101,780]],284:[[71,770]],285:[[103,770]],286:[[71,774]],287:[[103,774]],288:[[71,775]],289:[[103,775]],290:[[71,807]],291:[[103,807]],292:[[72,770]],293:[[104,770]],296:[[73,771]],297:[[105,771]],298:[[73,772]],299:[[105,772]],300:[[73,774]],301:[[105,774]],302:[[73,808]],303:[[105,808]],304:[[73,775]],306:[[73,74],256],307:[[105,106],256],308:[[74,770]],309:[[106,770]],310:[[75,807]],311:[[107,807]],313:[[76,769]],314:[[108,769]],315:[[76,807]],316:[[108,807]],317:[[76,780]],318:[[108,780]],319:[[76,183],256],320:[[108,183],256],323:[[78,769]],324:[[110,769]],325:[[78,807]],326:[[110,807]],327:[[78,780]],328:[[110,780]],329:[[700,110],256],332:[[79,772],,{768:7760,769:7762}],333:[[111,772],,{768:7761,769:7763}],334:[[79,774]],335:[[111,774]],336:[[79,779]],337:[[111,779]],340:[[82,769]],341:[[114,769]],342:[[82,807]],343:[[114,807]],344:[[82,780]],345:[[114,780]],346:[[83,769],,{775:7780}],347:[[115,769],,{775:7781}],348:[[83,770]],349:[[115,770]],350:[[83,807]],351:[[115,807]],352:[[83,780],,{775:7782}],353:[[115,780],,{775:7783}],354:[[84,807]],355:[[116,807]],356:[[84,780]],357:[[116,780]],360:[[85,771],,{769:7800}],361:[[117,771],,{769:7801}],362:[[85,772],,{776:7802}],363:[[117,772],,{776:7803}],364:[[85,774]],365:[[117,774]],366:[[85,778]],367:[[117,778]],368:[[85,779]],369:[[117,779]],370:[[85,808]],371:[[117,808]],372:[[87,770]],373:[[119,770]],374:[[89,770]],375:[[121,770]],376:[[89,776]],377:[[90,769]],378:[[122,769]],379:[[90,775]],380:[[122,775]],381:[[90,780]],382:[[122,780]],383:[[115],256,{775:7835}],416:[[79,795],,{768:7900,769:7898,771:7904,777:7902,803:7906}],417:[[111,795],,{768:7901,769:7899,771:7905,777:7903,803:7907}],431:[[85,795],,{768:7914,769:7912,771:7918,777:7916,803:7920}],432:[[117,795],,{768:7915,769:7913,771:7919,777:7917,803:7921}],439:[,,{780:494}],452:[[68,381],256],453:[[68,382],256],454:[[100,382],256],455:[[76,74],256],456:[[76,106],256],457:[[108,106],256],458:[[78,74],256],459:[[78,106],256],460:[[110,106],256],461:[[65,780]],462:[[97,780]],463:[[73,780]],464:[[105,780]],465:[[79,780]],466:[[111,780]],467:[[85,780]],468:[[117,780]],469:[[220,772]],470:[[252,772]],471:[[220,769]],472:[[252,769]],473:[[220,780]],474:[[252,780]],475:[[220,768]],476:[[252,768]],478:[[196,772]],479:[[228,772]],480:[[550,772]],481:[[551,772]],482:[[198,772]],483:[[230,772]],486:[[71,780]],487:[[103,780]],488:[[75,780]],489:[[107,780]],490:[[79,808],,{772:492}],491:[[111,808],,{772:493}],492:[[490,772]],493:[[491,772]],494:[[439,780]],495:[[658,780]],496:[[106,780]],497:[[68,90],256],498:[[68,122],256],499:[[100,122],256],500:[[71,769]],501:[[103,769]],504:[[78,768]],505:[[110,768]],506:[[197,769]],507:[[229,769]],508:[[198,769]],509:[[230,769]],510:[[216,769]],511:[[248,769]],66045:[,220]},
6898512:{512:[[65,783]],513:[[97,783]],514:[[65,785]],515:[[97,785]],516:[[69,783]],517:[[101,783]],518:[[69,785]],519:[[101,785]],520:[[73,783]],521:[[105,783]],522:[[73,785]],523:[[105,785]],524:[[79,783]],525:[[111,783]],526:[[79,785]],527:[[111,785]],528:[[82,783]],529:[[114,783]],530:[[82,785]],531:[[114,785]],532:[[85,783]],533:[[117,783]],534:[[85,785]],535:[[117,785]],536:[[83,806]],537:[[115,806]],538:[[84,806]],539:[[116,806]],542:[[72,780]],543:[[104,780]],550:[[65,775],,{772:480}],551:[[97,775],,{772:481}],552:[[69,807],,{774:7708}],553:[[101,807],,{774:7709}],554:[[214,772]],555:[[246,772]],556:[[213,772]],557:[[245,772]],558:[[79,775],,{772:560}],559:[[111,775],,{772:561}],560:[[558,772]],561:[[559,772]],562:[[89,772]],563:[[121,772]],658:[,,{780:495}],688:[[104],256],689:[[614],256],690:[[106],256],691:[[114],256],692:[[633],256],693:[[635],256],694:[[641],256],695:[[119],256],696:[[121],256],728:[[32,774],256],729:[[32,775],256],730:[[32,778],256],731:[[32,808],256],732:[[32,771],256],733:[[32,779],256],736:[[611],256],737:[[108],256],738:[[115],256],739:[[120],256],740:[[661],256],66272:[,220]},
6899768:{768:[,230],769:[,230],770:[,230],771:[,230],772:[,230],773:[,230],774:[,230],775:[,230],776:[,230,{769:836}],777:[,230],778:[,230],779:[,230],780:[,230],781:[,230],782:[,230],783:[,230],784:[,230],785:[,230],786:[,230],787:[,230],788:[,230],789:[,232],790:[,220],791:[,220],792:[,220],793:[,220],794:[,232],795:[,216],796:[,220],797:[,220],798:[,220],799:[,220],800:[,220],801:[,202],802:[,202],803:[,220],804:[,220],805:[,220],806:[,220],807:[,202],808:[,202],809:[,220],810:[,220],811:[,220],812:[,220],813:[,220],814:[,220],815:[,220],816:[,220],817:[,220],818:[,220],819:[,220],820:[,1],821:[,1],822:[,1],823:[,1],824:[,1],825:[,220],826:[,220],827:[,220],828:[,220],829:[,230],830:[,230],831:[,230],832:[[768],230],833:[[769],230],834:[,230],835:[[787],230],836:[[776,769],230],837:[,240],838:[,230],839:[,220],840:[,220],841:[,220],842:[,230],843:[,230],844:[,230],845:[,220],846:[,220],848:[,230],849:[,230],850:[,230],851:[,220],852:[,220],853:[,220],854:[,220],855:[,230],856:[,232],857:[,220],858:[,220],859:[,230],860:[,233],861:[,234],862:[,234],863:[,233],864:[,234],865:[,234],866:[,233],867:[,230],868:[,230],869:[,230],870:[,230],871:[,230],872:[,230],873:[,230],874:[,230],875:[,230],876:[,230],877:[,230],878:[,230],879:[,230],884:[[697]],890:[[32,837],256],894:[[59]],900:[[32,769],256],901:[[168,769]],902:[[913,769]],903:[[183]],904:[[917,769]],905:[[919,769]],906:[[921,769]],908:[[927,769]],910:[[933,769]],911:[[937,769]],912:[[970,769]],913:[,,{768:8122,769:902,772:8121,774:8120,787:7944,788:7945,837:8124}],917:[,,{768:8136,769:904,787:7960,788:7961}],919:[,,{768:8138,769:905,787:7976,788:7977,837:8140}],921:[,,{768:8154,769:906,772:8153,774:8152,776:938,787:7992,788:7993}],927:[,,{768:8184,769:908,787:8008,788:8009}],929:[,,{788:8172}],933:[,,{768:8170,769:910,772:8169,774:8168,776:939,788:8025}],937:[,,{768:8186,769:911,787:8040,788:8041,837:8188}],938:[[921,776]],939:[[933,776]],940:[[945,769],,{837:8116}],941:[[949,769]],942:[[951,769],,{837:8132}],943:[[953,769]],944:[[971,769]],945:[,,{768:8048,769:940,772:8113,774:8112,787:7936,788:7937,834:8118,837:8115}],949:[,,{768:8050,769:941,787:7952,788:7953}],951:[,,{768:8052,769:942,787:7968,788:7969,834:8134,837:8131}],953:[,,{768:8054,769:943,772:8145,774:8144,776:970,787:7984,788:7985,834:8150}],959:[,,{768:8056,769:972,787:8000,788:8001}],961:[,,{787:8164,788:8165}],965:[,,{768:8058,769:973,772:8161,774:8160,776:971,787:8016,788:8017,834:8166}],969:[,,{768:8060,769:974,787:8032,788:8033,834:8182,837:8179}],970:[[953,776],,{768:8146,769:912,834:8151}],971:[[965,776],,{768:8162,769:944,834:8167}],972:[[959,769]],973:[[965,769]],974:[[969,769],,{837:8180}],976:[[946],256],977:[[952],256],978:[[933],256,{769:979,776:980}],979:[[978,769]],980:[[978,776]],981:[[966],256],982:[[960],256],1008:[[954],256],1009:[[961],256],1010:[[962],256],1012:[[920],256],1013:[[949],256],1017:[[931],256],66422:[,230],66423:[,230],66424:[,230],66425:[,230],66426:[,230]},
69001024:{1024:[[1045,768]],1025:[[1045,776]],1027:[[1043,769]],1030:[,,{776:1031}],1031:[[1030,776]],1036:[[1050,769]],1037:[[1048,768]],1038:[[1059,774]],1040:[,,{774:1232,776:1234}],1043:[,,{769:1027}],1045:[,,{768:1024,774:1238,776:1025}],1046:[,,{774:1217,776:1244}],1047:[,,{776:1246}],1048:[,,{768:1037,772:1250,774:1049,776:1252}],1049:[[1048,774]],1050:[,,{769:1036}],1054:[,,{776:1254}],1059:[,,{772:1262,774:1038,776:1264,779:1266}],1063:[,,{776:1268}],1067:[,,{776:1272}],1069:[,,{776:1260}],1072:[,,{774:1233,776:1235}],1075:[,,{769:1107}],1077:[,,{768:1104,774:1239,776:1105}],1078:[,,{774:1218,776:1245}],1079:[,,{776:1247}],1080:[,,{768:1117,772:1251,774:1081,776:1253}],1081:[[1080,774]],1082:[,,{769:1116}],1086:[,,{776:1255}],1091:[,,{772:1263,774:1118,776:1265,779:1267}],1095:[,,{776:1269}],1099:[,,{776:1273}],1101:[,,{776:1261}],1104:[[1077,768]],1105:[[1077,776]],1107:[[1075,769]],1110:[,,{776:1111}],1111:[[1110,776]],1116:[[1082,769]],1117:[[1080,768]],1118:[[1091,774]],1140:[,,{783:1142}],1141:[,,{783:1143}],1142:[[1140,783]],1143:[[1141,783]],1155:[,230],1156:[,230],1157:[,230],1158:[,230],1159:[,230],1217:[[1046,774]],1218:[[1078,774]],1232:[[1040,774]],1233:[[1072,774]],1234:[[1040,776]],1235:[[1072,776]],1238:[[1045,774]],1239:[[1077,774]],1240:[,,{776:1242}],1241:[,,{776:1243}],1242:[[1240,776]],1243:[[1241,776]],1244:[[1046,776]],1245:[[1078,776]],1246:[[1047,776]],1247:[[1079,776]],1250:[[1048,772]],1251:[[1080,772]],1252:[[1048,776]],1253:[[1080,776]],1254:[[1054,776]],1255:[[1086,776]],1256:[,,{776:1258}],1257:[,,{776:1259}],1258:[[1256,776]],1259:[[1257,776]],1260:[[1069,776]],1261:[[1101,776]],1262:[[1059,772]],1263:[[1091,772]],1264:[[1059,776]],1265:[[1091,776]],1266:[[1059,779]],1267:[[1091,779]],1268:[[1063,776]],1269:[[1095,776]],1272:[[1067,776]],1273:[[1099,776]]},
69011280:{1415:[[1381,1410],256],1425:[,220],1426:[,230],1427:[,230],1428:[,230],1429:[,230],1430:[,220],1431:[,230],1432:[,230],1433:[,230],1434:[,222],1435:[,220],1436:[,230],1437:[,230],1438:[,230],1439:[,230],1440:[,230],1441:[,230],1442:[,220],1443:[,220],1444:[,220],1445:[,220],1446:[,220],1447:[,220],1448:[,230],1449:[,230],1450:[,220],1451:[,230],1452:[,230],1453:[,222],1454:[,228],1455:[,230],1456:[,10],1457:[,11],1458:[,12],1459:[,13],1460:[,14],1461:[,15],1462:[,16],1463:[,17],1464:[,18],1465:[,19],1466:[,19],1467:[,20],1468:[,21],1469:[,22],1471:[,23],1473:[,24],1474:[,25],1476:[,230],1477:[,220],1479:[,18]},
69021536:{1552:[,230],1553:[,230],1554:[,230],1555:[,230],1556:[,230],1557:[,230],1558:[,230],1559:[,230],1560:[,30],1561:[,31],1562:[,32],1570:[[1575,1619]],1571:[[1575,1620]],1572:[[1608,1620]],1573:[[1575,1621]],1574:[[1610,1620]],1575:[,,{1619:1570,1620:1571,1621:1573}],1608:[,,{1620:1572}],1610:[,,{1620:1574}],1611:[,27],1612:[,28],1613:[,29],1614:[,30],1615:[,31],1616:[,32],1617:[,33],1618:[,34],1619:[,230],1620:[,230],1621:[,220],1622:[,220],1623:[,230],1624:[,230],1625:[,230],1626:[,230],1627:[,230],1628:[,220],1629:[,230],1630:[,230],1631:[,220],1648:[,35],1653:[[1575,1652],256],1654:[[1608,1652],256],1655:[[1735,1652],256],1656:[[1610,1652],256],1728:[[1749,1620]],1729:[,,{1620:1730}],1730:[[1729,1620]],1746:[,,{1620:1747}],1747:[[1746,1620]],1749:[,,{1620:1728}],1750:[,230],1751:[,230],1752:[,230],1753:[,230],1754:[,230],1755:[,230],1756:[,230],1759:[,230],1760:[,230],1761:[,230],1762:[,230],1763:[,220],1764:[,230],1767:[,230],1768:[,230],1770:[,220],1771:[,230],1772:[,230],1773:[,220]},
69031792:{1809:[,36],1840:[,230],1841:[,220],1842:[,230],1843:[,230],1844:[,220],1845:[,230],1846:[,230],1847:[,220],1848:[,220],1849:[,220],1850:[,230],1851:[,220],1852:[,220],1853:[,230],1854:[,220],1855:[,230],1856:[,230],1857:[,230],1858:[,220],1859:[,230],1860:[,220],1861:[,230],1862:[,220],1863:[,230],1864:[,220],1865:[,230],1866:[,230],2027:[,230],2028:[,230],2029:[,230],2030:[,230],2031:[,230],2032:[,230],2033:[,230],2034:[,220],2035:[,230]},
69042048:{2070:[,230],2071:[,230],2072:[,230],2073:[,230],2075:[,230],2076:[,230],2077:[,230],2078:[,230],2079:[,230],2080:[,230],2081:[,230],2082:[,230],2083:[,230],2085:[,230],2086:[,230],2087:[,230],2089:[,230],2090:[,230],2091:[,230],2092:[,230],2093:[,230],2137:[,220],2138:[,220],2139:[,220],2276:[,230],2277:[,230],2278:[,220],2279:[,230],2280:[,230],2281:[,220],2282:[,230],2283:[,230],2284:[,230],2285:[,220],2286:[,220],2287:[,220],2288:[,27],2289:[,28],2290:[,29],2291:[,230],2292:[,230],2293:[,230],2294:[,220],2295:[,230],2296:[,230],2297:[,220],2298:[,220],2299:[,230],2300:[,230],2301:[,230],2302:[,230],2303:[,230]},
69052304:{2344:[,,{2364:2345}],2345:[[2344,2364]],2352:[,,{2364:2353}],2353:[[2352,2364]],2355:[,,{2364:2356}],2356:[[2355,2364]],2364:[,7],2381:[,9],2385:[,230],2386:[,220],2387:[,230],2388:[,230],2392:[[2325,2364],512],2393:[[2326,2364],512],2394:[[2327,2364],512],2395:[[2332,2364],512],2396:[[2337,2364],512],2397:[[2338,2364],512],2398:[[2347,2364],512],2399:[[2351,2364],512],2492:[,7],2503:[,,{2494:2507,2519:2508}],2507:[[2503,2494]],2508:[[2503,2519]],2509:[,9],2524:[[2465,2492],512],2525:[[2466,2492],512],2527:[[2479,2492],512]},
69062560:{2611:[[2610,2620],512],2614:[[2616,2620],512],2620:[,7],2637:[,9],2649:[[2582,2620],512],2650:[[2583,2620],512],2651:[[2588,2620],512],2654:[[2603,2620],512],2748:[,7],2765:[,9],68109:[,220],68111:[,230],68152:[,230],68153:[,1],68154:[,220],68159:[,9],68325:[,230],68326:[,220]},
69072816:{2876:[,7],2887:[,,{2878:2891,2902:2888,2903:2892}],2888:[[2887,2902]],2891:[[2887,2878]],2892:[[2887,2903]],2893:[,9],2908:[[2849,2876],512],2909:[[2850,2876],512],2962:[,,{3031:2964}],2964:[[2962,3031]],3014:[,,{3006:3018,3031:3020}],3015:[,,{3006:3019}],3018:[[3014,3006]],3019:[[3015,3006]],3020:[[3014,3031]],3021:[,9]},
69083072:{3142:[,,{3158:3144}],3144:[[3142,3158]],3149:[,9],3157:[,84],3158:[,91],3260:[,7],3263:[,,{3285:3264}],3264:[[3263,3285]],3270:[,,{3266:3274,3285:3271,3286:3272}],3271:[[3270,3285]],3272:[[3270,3286]],3274:[[3270,3266],,{3285:3275}],3275:[[3274,3285]],3277:[,9]},
69093328:{3398:[,,{3390:3402,3415:3404}],3399:[,,{3390:3403}],3402:[[3398,3390]],3403:[[3399,3390]],3404:[[3398,3415]],3405:[,9],3530:[,9],3545:[,,{3530:3546,3535:3548,3551:3550}],3546:[[3545,3530]],3548:[[3545,3535],,{3530:3549}],3549:[[3548,3530]],3550:[[3545,3551]]},
69103584:{3635:[[3661,3634],256],3640:[,103],3641:[,103],3642:[,9],3656:[,107],3657:[,107],3658:[,107],3659:[,107],3763:[[3789,3762],256],3768:[,118],3769:[,118],3784:[,122],3785:[,122],3786:[,122],3787:[,122],3804:[[3755,3737],256],3805:[[3755,3745],256]},
69113840:{3852:[[3851],256],3864:[,220],3865:[,220],3893:[,220],3895:[,220],3897:[,216],3907:[[3906,4023],512],3917:[[3916,4023],512],3922:[[3921,4023],512],3927:[[3926,4023],512],3932:[[3931,4023],512],3945:[[3904,4021],512],3953:[,129],3954:[,130],3955:[[3953,3954],512],3956:[,132],3957:[[3953,3956],512],3958:[[4018,3968],512],3959:[[4018,3969],256],3960:[[4019,3968],512],3961:[[4019,3969],256],3962:[,130],3963:[,130],3964:[,130],3965:[,130],3968:[,130],3969:[[3953,3968],512],3970:[,230],3971:[,230],3972:[,9],3974:[,230],3975:[,230],3987:[[3986,4023],512],3997:[[3996,4023],512],4002:[[4001,4023],512],4007:[[4006,4023],512],4012:[[4011,4023],512],4025:[[3984,4021],512],4038:[,220]},
69124096:{4133:[,,{4142:4134}],4134:[[4133,4142]],4151:[,7],4153:[,9],4154:[,9],4237:[,220],4348:[[4316],256],69702:[,9],69759:[,9],69785:[,,{69818:69786}],69786:[[69785,69818]],69787:[,,{69818:69788}],69788:[[69787,69818]],69797:[,,{69818:69803}],69803:[[69797,69818]],69817:[,9],69818:[,7]},
69134352:{69888:[,230],69889:[,230],69890:[,230],69934:[[69937,69927]],69935:[[69938,69927]],69937:[,,{69927:69934}],69938:[,,{69927:69935}],69939:[,9],69940:[,9],70003:[,7],70080:[,9]},
69144608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
69154864:{4957:[,230],4958:[,230],4959:[,230],70460:[,7],70471:[,,{70462:70475,70487:70476}],70475:[[70471,70462]],70476:[[70471,70487]],70477:[,9],70502:[,230],70503:[,230],70504:[,230],70505:[,230],70506:[,230],70507:[,230],70508:[,230],70512:[,230],70513:[,230],70514:[,230],70515:[,230],70516:[,230]},
69165120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
69175376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
69185632:{71231:[,9],71350:[,9],71351:[,7]},
69195888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
69206144:{6313:[,228]},
69216400:{6457:[,222],6458:[,230],6459:[,220]},
69226656:{6679:[,230],6680:[,220],6752:[,9],6773:[,230],6774:[,230],6775:[,230],6776:[,230],6777:[,230],6778:[,230],6779:[,230],6780:[,230],6783:[,220],6832:[,230],6833:[,230],6834:[,230],6835:[,230],6836:[,230],6837:[,220],6838:[,220],6839:[,220],6840:[,220],6841:[,220],6842:[,220],6843:[,230],6844:[,230],6845:[,220]},
69236912:{6917:[,,{6965:6918}],6918:[[6917,6965]],6919:[,,{6965:6920}],6920:[[6919,6965]],6921:[,,{6965:6922}],6922:[[6921,6965]],6923:[,,{6965:6924}],6924:[[6923,6965]],6925:[,,{6965:6926}],6926:[[6925,6965]],6929:[,,{6965:6930}],6930:[[6929,6965]],6964:[,7],6970:[,,{6965:6971}],6971:[[6970,6965]],6972:[,,{6965:6973}],6973:[[6972,6965]],6974:[,,{6965:6976}],6975:[,,{6965:6977}],6976:[[6974,6965]],6977:[[6975,6965]],6978:[,,{6965:6979}],6979:[[6978,6965]],6980:[,9],7019:[,230],7020:[,220],7021:[,230],7022:[,230],7023:[,230],7024:[,230],7025:[,230],7026:[,230],7027:[,230],7082:[,9],7083:[,9],7142:[,7],7154:[,9],7155:[,9]},
69247168:{7223:[,7],7376:[,230],7377:[,230],7378:[,230],7380:[,1],7381:[,220],7382:[,220],7383:[,220],7384:[,220],7385:[,220],7386:[,230],7387:[,230],7388:[,220],7389:[,220],7390:[,220],7391:[,220],7392:[,230],7394:[,1],7395:[,1],7396:[,1],7397:[,1],7398:[,1],7399:[,1],7400:[,1],7405:[,220],7412:[,230],7416:[,230],7417:[,230]},
69257424:{7468:[[65],256],7469:[[198],256],7470:[[66],256],7472:[[68],256],7473:[[69],256],7474:[[398],256],7475:[[71],256],7476:[[72],256],7477:[[73],256],7478:[[74],256],7479:[[75],256],7480:[[76],256],7481:[[77],256],7482:[[78],256],7484:[[79],256],7485:[[546],256],7486:[[80],256],7487:[[82],256],7488:[[84],256],7489:[[85],256],7490:[[87],256],7491:[[97],256],7492:[[592],256],7493:[[593],256],7494:[[7426],256],7495:[[98],256],7496:[[100],256],7497:[[101],256],7498:[[601],256],7499:[[603],256],7500:[[604],256],7501:[[103],256],7503:[[107],256],7504:[[109],256],7505:[[331],256],7506:[[111],256],7507:[[596],256],7508:[[7446],256],7509:[[7447],256],7510:[[112],256],7511:[[116],256],7512:[[117],256],7513:[[7453],256],7514:[[623],256],7515:[[118],256],7516:[[7461],256],7517:[[946],256],7518:[[947],256],7519:[[948],256],7520:[[966],256],7521:[[967],256],7522:[[105],256],7523:[[114],256],7524:[[117],256],7525:[[118],256],7526:[[946],256],7527:[[947],256],7528:[[961],256],7529:[[966],256],7530:[[967],256],7544:[[1085],256],7579:[[594],256],7580:[[99],256],7581:[[597],256],7582:[[240],256],7583:[[604],256],7584:[[102],256],7585:[[607],256],7586:[[609],256],7587:[[613],256],7588:[[616],256],7589:[[617],256],7590:[[618],256],7591:[[7547],256],7592:[[669],256],7593:[[621],256],7594:[[7557],256],7595:[[671],256],7596:[[625],256],7597:[[624],256],7598:[[626],256],7599:[[627],256],7600:[[628],256],7601:[[629],256],7602:[[632],256],7603:[[642],256],7604:[[643],256],7605:[[427],256],7606:[[649],256],7607:[[650],256],7608:[[7452],256],7609:[[651],256],7610:[[652],256],7611:[[122],256],7612:[[656],256],7613:[[657],256],7614:[[658],256],7615:[[952],256],7616:[,230],7617:[,230],7618:[,220],7619:[,230],7620:[,230],7621:[,230],7622:[,230],7623:[,230],7624:[,230],7625:[,230],7626:[,220],7627:[,230],7628:[,230],7629:[,234],7630:[,214],7631:[,220],7632:[,202],7633:[,230],7634:[,230],7635:[,230],7636:[,230],7637:[,230],7638:[,230],7639:[,230],7640:[,230],7641:[,230],7642:[,230],7643:[,230],7644:[,230],7645:[,230],7646:[,230],7647:[,230],7648:[,230],7649:[,230],7650:[,230],7651:[,230],7652:[,230],7653:[,230],7654:[,230],7655:[,230],7656:[,230],7657:[,230],7658:[,230],7659:[,230],7660:[,230],7661:[,230],7662:[,230],7663:[,230],7664:[,230],7665:[,230],7666:[,230],7667:[,230],7668:[,230],7669:[,230],7676:[,233],7677:[,220],7678:[,230],7679:[,220]},
69267680:{7680:[[65,805]],7681:[[97,805]],7682:[[66,775]],7683:[[98,775]],7684:[[66,803]],7685:[[98,803]],7686:[[66,817]],7687:[[98,817]],7688:[[199,769]],7689:[[231,769]],7690:[[68,775]],7691:[[100,775]],7692:[[68,803]],7693:[[100,803]],7694:[[68,817]],7695:[[100,817]],7696:[[68,807]],7697:[[100,807]],7698:[[68,813]],7699:[[100,813]],7700:[[274,768]],7701:[[275,768]],7702:[[274,769]],7703:[[275,769]],7704:[[69,813]],7705:[[101,813]],7706:[[69,816]],7707:[[101,816]],7708:[[552,774]],7709:[[553,774]],7710:[[70,775]],7711:[[102,775]],7712:[[71,772]],7713:[[103,772]],7714:[[72,775]],7715:[[104,775]],7716:[[72,803]],7717:[[104,803]],7718:[[72,776]],7719:[[104,776]],7720:[[72,807]],7721:[[104,807]],7722:[[72,814]],7723:[[104,814]],7724:[[73,816]],7725:[[105,816]],7726:[[207,769]],7727:[[239,769]],7728:[[75,769]],7729:[[107,769]],7730:[[75,803]],7731:[[107,803]],7732:[[75,817]],7733:[[107,817]],7734:[[76,803],,{772:7736}],7735:[[108,803],,{772:7737}],7736:[[7734,772]],7737:[[7735,772]],7738:[[76,817]],7739:[[108,817]],7740:[[76,813]],7741:[[108,813]],7742:[[77,769]],7743:[[109,769]],7744:[[77,775]],7745:[[109,775]],7746:[[77,803]],7747:[[109,803]],7748:[[78,775]],7749:[[110,775]],7750:[[78,803]],7751:[[110,803]],7752:[[78,817]],7753:[[110,817]],7754:[[78,813]],7755:[[110,813]],7756:[[213,769]],7757:[[245,769]],7758:[[213,776]],7759:[[245,776]],7760:[[332,768]],7761:[[333,768]],7762:[[332,769]],7763:[[333,769]],7764:[[80,769]],7765:[[112,769]],7766:[[80,775]],7767:[[112,775]],7768:[[82,775]],7769:[[114,775]],7770:[[82,803],,{772:7772}],7771:[[114,803],,{772:7773}],7772:[[7770,772]],7773:[[7771,772]],7774:[[82,817]],7775:[[114,817]],7776:[[83,775]],7777:[[115,775]],7778:[[83,803],,{775:7784}],7779:[[115,803],,{775:7785}],7780:[[346,775]],7781:[[347,775]],7782:[[352,775]],7783:[[353,775]],7784:[[7778,775]],7785:[[7779,775]],7786:[[84,775]],7787:[[116,775]],7788:[[84,803]],7789:[[116,803]],7790:[[84,817]],7791:[[116,817]],7792:[[84,813]],7793:[[116,813]],7794:[[85,804]],7795:[[117,804]],7796:[[85,816]],7797:[[117,816]],7798:[[85,813]],7799:[[117,813]],7800:[[360,769]],7801:[[361,769]],7802:[[362,776]],7803:[[363,776]],7804:[[86,771]],7805:[[118,771]],7806:[[86,803]],7807:[[118,803]],7808:[[87,768]],7809:[[119,768]],7810:[[87,769]],7811:[[119,769]],7812:[[87,776]],7813:[[119,776]],7814:[[87,775]],7815:[[119,775]],7816:[[87,803]],7817:[[119,803]],7818:[[88,775]],7819:[[120,775]],7820:[[88,776]],7821:[[120,776]],7822:[[89,775]],7823:[[121,775]],7824:[[90,770]],7825:[[122,770]],7826:[[90,803]],7827:[[122,803]],7828:[[90,817]],7829:[[122,817]],7830:[[104,817]],7831:[[116,776]],7832:[[119,778]],7833:[[121,778]],7834:[[97,702],256],7835:[[383,775]],7840:[[65,803],,{770:7852,774:7862}],7841:[[97,803],,{770:7853,774:7863}],7842:[[65,777]],7843:[[97,777]],7844:[[194,769]],7845:[[226,769]],7846:[[194,768]],7847:[[226,768]],7848:[[194,777]],7849:[[226,777]],7850:[[194,771]],7851:[[226,771]],7852:[[7840,770]],7853:[[7841,770]],7854:[[258,769]],7855:[[259,769]],7856:[[258,768]],7857:[[259,768]],7858:[[258,777]],7859:[[259,777]],7860:[[258,771]],7861:[[259,771]],7862:[[7840,774]],7863:[[7841,774]],7864:[[69,803],,{770:7878}],7865:[[101,803],,{770:7879}],7866:[[69,777]],7867:[[101,777]],7868:[[69,771]],7869:[[101,771]],7870:[[202,769]],7871:[[234,769]],7872:[[202,768]],7873:[[234,768]],7874:[[202,777]],7875:[[234,777]],7876:[[202,771]],7877:[[234,771]],7878:[[7864,770]],7879:[[7865,770]],7880:[[73,777]],7881:[[105,777]],7882:[[73,803]],7883:[[105,803]],7884:[[79,803],,{770:7896}],7885:[[111,803],,{770:7897}],7886:[[79,777]],7887:[[111,777]],7888:[[212,769]],7889:[[244,769]],7890:[[212,768]],7891:[[244,768]],7892:[[212,777]],7893:[[244,777]],7894:[[212,771]],7895:[[244,771]],7896:[[7884,770]],7897:[[7885,770]],7898:[[416,769]],7899:[[417,769]],7900:[[416,768]],7901:[[417,768]],7902:[[416,777]],7903:[[417,777]],7904:[[416,771]],7905:[[417,771]],7906:[[416,803]],7907:[[417,803]],7908:[[85,803]],7909:[[117,803]],7910:[[85,777]],7911:[[117,777]],7912:[[431,769]],7913:[[432,769]],7914:[[431,768]],7915:[[432,768]],7916:[[431,777]],7917:[[432,777]],7918:[[431,771]],7919:[[432,771]],7920:[[431,803]],7921:[[432,803]],7922:[[89,768]],7923:[[121,768]],7924:[[89,803]],7925:[[121,803]],7926:[[89,777]],7927:[[121,777]],7928:[[89,771]],7929:[[121,771]]},
69277936:{7936:[[945,787],,{768:7938,769:7940,834:7942,837:8064}],7937:[[945,788],,{768:7939,769:7941,834:7943,837:8065}],7938:[[7936,768],,{837:8066}],7939:[[7937,768],,{837:8067}],7940:[[7936,769],,{837:8068}],7941:[[7937,769],,{837:8069}],7942:[[7936,834],,{837:8070}],7943:[[7937,834],,{837:8071}],7944:[[913,787],,{768:7946,769:7948,834:7950,837:8072}],7945:[[913,788],,{768:7947,769:7949,834:7951,837:8073}],7946:[[7944,768],,{837:8074}],7947:[[7945,768],,{837:8075}],7948:[[7944,769],,{837:8076}],7949:[[7945,769],,{837:8077}],7950:[[7944,834],,{837:8078}],7951:[[7945,834],,{837:8079}],7952:[[949,787],,{768:7954,769:7956}],7953:[[949,788],,{768:7955,769:7957}],7954:[[7952,768]],7955:[[7953,768]],7956:[[7952,769]],7957:[[7953,769]],7960:[[917,787],,{768:7962,769:7964}],7961:[[917,788],,{768:7963,769:7965}],7962:[[7960,768]],7963:[[7961,768]],7964:[[7960,769]],7965:[[7961,769]],7968:[[951,787],,{768:7970,769:7972,834:7974,837:8080}],7969:[[951,788],,{768:7971,769:7973,834:7975,837:8081}],7970:[[7968,768],,{837:8082}],7971:[[7969,768],,{837:8083}],7972:[[7968,769],,{837:8084}],7973:[[7969,769],,{837:8085}],7974:[[7968,834],,{837:8086}],7975:[[7969,834],,{837:8087}],7976:[[919,787],,{768:7978,769:7980,834:7982,837:8088}],7977:[[919,788],,{768:7979,769:7981,834:7983,837:8089}],7978:[[7976,768],,{837:8090}],7979:[[7977,768],,{837:8091}],7980:[[7976,769],,{837:8092}],7981:[[7977,769],,{837:8093}],7982:[[7976,834],,{837:8094}],7983:[[7977,834],,{837:8095}],7984:[[953,787],,{768:7986,769:7988,834:7990}],7985:[[953,788],,{768:7987,769:7989,834:7991}],7986:[[7984,768]],7987:[[7985,768]],7988:[[7984,769]],7989:[[7985,769]],7990:[[7984,834]],7991:[[7985,834]],7992:[[921,787],,{768:7994,769:7996,834:7998}],7993:[[921,788],,{768:7995,769:7997,834:7999}],7994:[[7992,768]],7995:[[7993,768]],7996:[[7992,769]],7997:[[7993,769]],7998:[[7992,834]],7999:[[7993,834]],8000:[[959,787],,{768:8002,769:8004}],8001:[[959,788],,{768:8003,769:8005}],8002:[[8000,768]],8003:[[8001,768]],8004:[[8000,769]],8005:[[8001,769]],8008:[[927,787],,{768:8010,769:8012}],8009:[[927,788],,{768:8011,769:8013}],8010:[[8008,768]],8011:[[8009,768]],8012:[[8008,769]],8013:[[8009,769]],8016:[[965,787],,{768:8018,769:8020,834:8022}],8017:[[965,788],,{768:8019,769:8021,834:8023}],8018:[[8016,768]],8019:[[8017,768]],8020:[[8016,769]],8021:[[8017,769]],8022:[[8016,834]],8023:[[8017,834]],8025:[[933,788],,{768:8027,769:8029,834:8031}],8027:[[8025,768]],8029:[[8025,769]],8031:[[8025,834]],8032:[[969,787],,{768:8034,769:8036,834:8038,837:8096}],8033:[[969,788],,{768:8035,769:8037,834:8039,837:8097}],8034:[[8032,768],,{837:8098}],8035:[[8033,768],,{837:8099}],8036:[[8032,769],,{837:8100}],8037:[[8033,769],,{837:8101}],8038:[[8032,834],,{837:8102}],8039:[[8033,834],,{837:8103}],8040:[[937,787],,{768:8042,769:8044,834:8046,837:8104}],8041:[[937,788],,{768:8043,769:8045,834:8047,837:8105}],8042:[[8040,768],,{837:8106}],8043:[[8041,768],,{837:8107}],8044:[[8040,769],,{837:8108}],8045:[[8041,769],,{837:8109}],8046:[[8040,834],,{837:8110}],8047:[[8041,834],,{837:8111}],8048:[[945,768],,{837:8114}],8049:[[940]],8050:[[949,768]],8051:[[941]],8052:[[951,768],,{837:8130}],8053:[[942]],8054:[[953,768]],8055:[[943]],8056:[[959,768]],8057:[[972]],8058:[[965,768]],8059:[[973]],8060:[[969,768],,{837:8178}],8061:[[974]],8064:[[7936,837]],8065:[[7937,837]],8066:[[7938,837]],8067:[[7939,837]],8068:[[7940,837]],8069:[[7941,837]],8070:[[7942,837]],8071:[[7943,837]],8072:[[7944,837]],8073:[[7945,837]],8074:[[7946,837]],8075:[[7947,837]],8076:[[7948,837]],8077:[[7949,837]],8078:[[7950,837]],8079:[[7951,837]],8080:[[7968,837]],8081:[[7969,837]],8082:[[7970,837]],8083:[[7971,837]],8084:[[7972,837]],8085:[[7973,837]],8086:[[7974,837]],8087:[[7975,837]],8088:[[7976,837]],8089:[[7977,837]],8090:[[7978,837]],8091:[[7979,837]],8092:[[7980,837]],8093:[[7981,837]],8094:[[7982,837]],8095:[[7983,837]],8096:[[8032,837]],8097:[[8033,837]],8098:[[8034,837]],8099:[[8035,837]],8100:[[8036,837]],8101:[[8037,837]],8102:[[8038,837]],8103:[[8039,837]],8104:[[8040,837]],8105:[[8041,837]],8106:[[8042,837]],8107:[[8043,837]],8108:[[8044,837]],8109:[[8045,837]],8110:[[8046,837]],8111:[[8047,837]],8112:[[945,774]],8113:[[945,772]],8114:[[8048,837]],8115:[[945,837]],8116:[[940,837]],8118:[[945,834],,{837:8119}],8119:[[8118,837]],8120:[[913,774]],8121:[[913,772]],8122:[[913,768]],8123:[[902]],8124:[[913,837]],8125:[[32,787],256],8126:[[953]],8127:[[32,787],256,{768:8141,769:8142,834:8143}],8128:[[32,834],256],8129:[[168,834]],8130:[[8052,837]],8131:[[951,837]],8132:[[942,837]],8134:[[951,834],,{837:8135}],8135:[[8134,837]],8136:[[917,768]],8137:[[904]],8138:[[919,768]],8139:[[905]],8140:[[919,837]],8141:[[8127,768]],8142:[[8127,769]],8143:[[8127,834]],8144:[[953,774]],8145:[[953,772]],8146:[[970,768]],8147:[[912]],8150:[[953,834]],8151:[[970,834]],8152:[[921,774]],8153:[[921,772]],8154:[[921,768]],8155:[[906]],8157:[[8190,768]],8158:[[8190,769]],8159:[[8190,834]],8160:[[965,774]],8161:[[965,772]],8162:[[971,768]],8163:[[944]],8164:[[961,787]],8165:[[961,788]],8166:[[965,834]],8167:[[971,834]],8168:[[933,774]],8169:[[933,772]],8170:[[933,768]],8171:[[910]],8172:[[929,788]],8173:[[168,768]],8174:[[901]],8175:[[96]],8178:[[8060,837]],8179:[[969,837]],8180:[[974,837]],8182:[[969,834],,{837:8183}],8183:[[8182,837]],8184:[[927,768]],8185:[[908]],8186:[[937,768]],8187:[[911]],8188:[[937,837]],8189:[[180]],8190:[[32,788],256,{768:8157,769:8158,834:8159}]},
69288192:{8192:[[8194]],8193:[[8195]],8194:[[32],256],8195:[[32],256],8196:[[32],256],8197:[[32],256],8198:[[32],256],8199:[[32],256],8200:[[32],256],8201:[[32],256],8202:[[32],256],8209:[[8208],256],8215:[[32,819],256],8228:[[46],256],8229:[[46,46],256],8230:[[46,46,46],256],8239:[[32],256],8243:[[8242,8242],256],8244:[[8242,8242,8242],256],8246:[[8245,8245],256],8247:[[8245,8245,8245],256],8252:[[33,33],256],8254:[[32,773],256],8263:[[63,63],256],8264:[[63,33],256],8265:[[33,63],256],8279:[[8242,8242,8242,8242],256],8287:[[32],256],8304:[[48],256],8305:[[105],256],8308:[[52],256],8309:[[53],256],8310:[[54],256],8311:[[55],256],8312:[[56],256],8313:[[57],256],8314:[[43],256],8315:[[8722],256],8316:[[61],256],8317:[[40],256],8318:[[41],256],8319:[[110],256],8320:[[48],256],8321:[[49],256],8322:[[50],256],8323:[[51],256],8324:[[52],256],8325:[[53],256],8326:[[54],256],8327:[[55],256],8328:[[56],256],8329:[[57],256],8330:[[43],256],8331:[[8722],256],8332:[[61],256],8333:[[40],256],8334:[[41],256],8336:[[97],256],8337:[[101],256],8338:[[111],256],8339:[[120],256],8340:[[601],256],8341:[[104],256],8342:[[107],256],8343:[[108],256],8344:[[109],256],8345:[[110],256],8346:[[112],256],8347:[[115],256],8348:[[116],256],8360:[[82,115],256],8400:[,230],8401:[,230],8402:[,1],8403:[,1],8404:[,230],8405:[,230],8406:[,230],8407:[,230],8408:[,1],8409:[,1],8410:[,1],8411:[,230],8412:[,230],8417:[,230],8421:[,1],8422:[,1],8423:[,230],8424:[,220],8425:[,230],8426:[,1],8427:[,1],8428:[,220],8429:[,220],8430:[,220],8431:[,220],8432:[,230]},
69298448:{8448:[[97,47,99],256],8449:[[97,47,115],256],8450:[[67],256],8451:[[176,67],256],8453:[[99,47,111],256],8454:[[99,47,117],256],8455:[[400],256],8457:[[176,70],256],8458:[[103],256],8459:[[72],256],8460:[[72],256],8461:[[72],256],8462:[[104],256],8463:[[295],256],8464:[[73],256],8465:[[73],256],8466:[[76],256],8467:[[108],256],8469:[[78],256],8470:[[78,111],256],8473:[[80],256],8474:[[81],256],8475:[[82],256],8476:[[82],256],8477:[[82],256],8480:[[83,77],256],8481:[[84,69,76],256],8482:[[84,77],256],8484:[[90],256],8486:[[937]],8488:[[90],256],8490:[[75]],8491:[[197]],8492:[[66],256],8493:[[67],256],8495:[[101],256],8496:[[69],256],8497:[[70],256],8499:[[77],256],8500:[[111],256],8501:[[1488],256],8502:[[1489],256],8503:[[1490],256],8504:[[1491],256],8505:[[105],256],8507:[[70,65,88],256],8508:[[960],256],8509:[[947],256],8510:[[915],256],8511:[[928],256],8512:[[8721],256],8517:[[68],256],8518:[[100],256],8519:[[101],256],8520:[[105],256],8521:[[106],256],8528:[[49,8260,55],256],8529:[[49,8260,57],256],8530:[[49,8260,49,48],256],8531:[[49,8260,51],256],8532:[[50,8260,51],256],8533:[[49,8260,53],256],8534:[[50,8260,53],256],8535:[[51,8260,53],256],8536:[[52,8260,53],256],8537:[[49,8260,54],256],8538:[[53,8260,54],256],8539:[[49,8260,56],256],8540:[[51,8260,56],256],8541:[[53,8260,56],256],8542:[[55,8260,56],256],8543:[[49,8260],256],8544:[[73],256],8545:[[73,73],256],8546:[[73,73,73],256],8547:[[73,86],256],8548:[[86],256],8549:[[86,73],256],8550:[[86,73,73],256],8551:[[86,73,73,73],256],8552:[[73,88],256],8553:[[88],256],8554:[[88,73],256],8555:[[88,73,73],256],8556:[[76],256],8557:[[67],256],8558:[[68],256],8559:[[77],256],8560:[[105],256],8561:[[105,105],256],8562:[[105,105,105],256],8563:[[105,118],256],8564:[[118],256],8565:[[118,105],256],8566:[[118,105,105],256],8567:[[118,105,105,105],256],8568:[[105,120],256],8569:[[120],256],8570:[[120,105],256],8571:[[120,105,105],256],8572:[[108],256],8573:[[99],256],8574:[[100],256],8575:[[109],256],8585:[[48,8260,51],256],8592:[,,{824:8602}],8594:[,,{824:8603}],8596:[,,{824:8622}],8602:[[8592,824]],8603:[[8594,824]],8622:[[8596,824]],8653:[[8656,824]],8654:[[8660,824]],8655:[[8658,824]],8656:[,,{824:8653}],8658:[,,{824:8655}],8660:[,,{824:8654}]},
69308704:{8707:[,,{824:8708}],8708:[[8707,824]],8712:[,,{824:8713}],8713:[[8712,824]],8715:[,,{824:8716}],8716:[[8715,824]],8739:[,,{824:8740}],8740:[[8739,824]],8741:[,,{824:8742}],8742:[[8741,824]],8748:[[8747,8747],256],8749:[[8747,8747,8747],256],8751:[[8750,8750],256],8752:[[8750,8750,8750],256],8764:[,,{824:8769}],8769:[[8764,824]],8771:[,,{824:8772}],8772:[[8771,824]],8773:[,,{824:8775}],8775:[[8773,824]],8776:[,,{824:8777}],8777:[[8776,824]],8781:[,,{824:8813}],8800:[[61,824]],8801:[,,{824:8802}],8802:[[8801,824]],8804:[,,{824:8816}],8805:[,,{824:8817}],8813:[[8781,824]],8814:[[60,824]],8815:[[62,824]],8816:[[8804,824]],8817:[[8805,824]],8818:[,,{824:8820}],8819:[,,{824:8821}],8820:[[8818,824]],8821:[[8819,824]],8822:[,,{824:8824}],8823:[,,{824:8825}],8824:[[8822,824]],8825:[[8823,824]],8826:[,,{824:8832}],8827:[,,{824:8833}],8828:[,,{824:8928}],8829:[,,{824:8929}],8832:[[8826,824]],8833:[[8827,824]],8834:[,,{824:8836}],8835:[,,{824:8837}],8836:[[8834,824]],8837:[[8835,824]],8838:[,,{824:8840}],8839:[,,{824:8841}],8840:[[8838,824]],8841:[[8839,824]],8849:[,,{824:8930}],8850:[,,{824:8931}],8866:[,,{824:8876}],8872:[,,{824:8877}],8873:[,,{824:8878}],8875:[,,{824:8879}],8876:[[8866,824]],8877:[[8872,824]],8878:[[8873,824]],8879:[[8875,824]],8882:[,,{824:8938}],8883:[,,{824:8939}],8884:[,,{824:8940}],8885:[,,{824:8941}],8928:[[8828,824]],8929:[[8829,824]],8930:[[8849,824]],8931:[[8850,824]],8938:[[8882,824]],8939:[[8883,824]],8940:[[8884,824]],8941:[[8885,824]]},
69318960:{9001:[[12296]],9002:[[12297]]},
69329216:{9312:[[49],256],9313:[[50],256],9314:[[51],256],9315:[[52],256],9316:[[53],256],9317:[[54],256],9318:[[55],256],9319:[[56],256],9320:[[57],256],9321:[[49,48],256],9322:[[49,49],256],9323:[[49,50],256],9324:[[49,51],256],9325:[[49,52],256],9326:[[49,53],256],9327:[[49,54],256],9328:[[49,55],256],9329:[[49,56],256],9330:[[49,57],256],9331:[[50,48],256],9332:[[40,49,41],256],9333:[[40,50,41],256],9334:[[40,51,41],256],9335:[[40,52,41],256],9336:[[40,53,41],256],9337:[[40,54,41],256],9338:[[40,55,41],256],9339:[[40,56,41],256],9340:[[40,57,41],256],9341:[[40,49,48,41],256],9342:[[40,49,49,41],256],9343:[[40,49,50,41],256],9344:[[40,49,51,41],256],9345:[[40,49,52,41],256],9346:[[40,49,53,41],256],9347:[[40,49,54,41],256],9348:[[40,49,55,41],256],9349:[[40,49,56,41],256],9350:[[40,49,57,41],256],9351:[[40,50,48,41],256],9352:[[49,46],256],9353:[[50,46],256],9354:[[51,46],256],9355:[[52,46],256],9356:[[53,46],256],9357:[[54,46],256],9358:[[55,46],256],9359:[[56,46],256],9360:[[57,46],256],9361:[[49,48,46],256],9362:[[49,49,46],256],9363:[[49,50,46],256],9364:[[49,51,46],256],9365:[[49,52,46],256],9366:[[49,53,46],256],9367:[[49,54,46],256],9368:[[49,55,46],256],9369:[[49,56,46],256],9370:[[49,57,46],256],9371:[[50,48,46],256],9372:[[40,97,41],256],9373:[[40,98,41],256],9374:[[40,99,41],256],9375:[[40,100,41],256],9376:[[40,101,41],256],9377:[[40,102,41],256],9378:[[40,103,41],256],9379:[[40,104,41],256],9380:[[40,105,41],256],9381:[[40,106,41],256],9382:[[40,107,41],256],9383:[[40,108,41],256],9384:[[40,109,41],256],9385:[[40,110,41],256],9386:[[40,111,41],256],9387:[[40,112,41],256],9388:[[40,113,41],256],9389:[[40,114,41],256],9390:[[40,115,41],256],9391:[[40,116,41],256],9392:[[40,117,41],256],9393:[[40,118,41],256],9394:[[40,119,41],256],9395:[[40,120,41],256],9396:[[40,121,41],256],9397:[[40,122,41],256],9398:[[65],256],9399:[[66],256],9400:[[67],256],9401:[[68],256],9402:[[69],256],9403:[[70],256],9404:[[71],256],9405:[[72],256],9406:[[73],256],9407:[[74],256],9408:[[75],256],9409:[[76],256],9410:[[77],256],9411:[[78],256],9412:[[79],256],9413:[[80],256],9414:[[81],256],9415:[[82],256],9416:[[83],256],9417:[[84],256],9418:[[85],256],9419:[[86],256],9420:[[87],256],9421:[[88],256],9422:[[89],256],9423:[[90],256],9424:[[97],256],9425:[[98],256],9426:[[99],256],9427:[[100],256],9428:[[101],256],9429:[[102],256],9430:[[103],256],9431:[[104],256],9432:[[105],256],9433:[[106],256],9434:[[107],256],9435:[[108],256],9436:[[109],256],9437:[[110],256],9438:[[111],256],9439:[[112],256],9440:[[113],256],9441:[[114],256],9442:[[115],256],9443:[[116],256],9444:[[117],256],9445:[[118],256],9446:[[119],256],9447:[[120],256],9448:[[121],256],9449:[[122],256],9450:[[48],256]},
693310752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
693411264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
693511520:{11631:[[11617],256],11647:[,9],11744:[,230],11745:[,230],11746:[,230],11747:[,230],11748:[,230],11749:[,230],11750:[,230],11751:[,230],11752:[,230],11753:[,230],11754:[,230],11755:[,230],11756:[,230],11757:[,230],11758:[,230],11759:[,230],11760:[,230],11761:[,230],11762:[,230],11763:[,230],11764:[,230],11765:[,230],11766:[,230],11767:[,230],11768:[,230],11769:[,230],11770:[,230],11771:[,230],11772:[,230],11773:[,230],11774:[,230],11775:[,230]},
693611776:{11935:[[27597],256],12019:[[40863],256]},
693712032:{12032:[[19968],256],12033:[[20008],256],12034:[[20022],256],12035:[[20031],256],12036:[[20057],256],12037:[[20101],256],12038:[[20108],256],12039:[[20128],256],12040:[[20154],256],12041:[[20799],256],12042:[[20837],256],12043:[[20843],256],12044:[[20866],256],12045:[[20886],256],12046:[[20907],256],12047:[[20960],256],12048:[[20981],256],12049:[[20992],256],12050:[[21147],256],12051:[[21241],256],12052:[[21269],256],12053:[[21274],256],12054:[[21304],256],12055:[[21313],256],12056:[[21340],256],12057:[[21353],256],12058:[[21378],256],12059:[[21430],256],12060:[[21448],256],12061:[[21475],256],12062:[[22231],256],12063:[[22303],256],12064:[[22763],256],12065:[[22786],256],12066:[[22794],256],12067:[[22805],256],12068:[[22823],256],12069:[[22899],256],12070:[[23376],256],12071:[[23424],256],12072:[[23544],256],12073:[[23567],256],12074:[[23586],256],12075:[[23608],256],12076:[[23662],256],12077:[[23665],256],12078:[[24027],256],12079:[[24037],256],12080:[[24049],256],12081:[[24062],256],12082:[[24178],256],12083:[[24186],256],12084:[[24191],256],12085:[[24308],256],12086:[[24318],256],12087:[[24331],256],12088:[[24339],256],12089:[[24400],256],12090:[[24417],256],12091:[[24435],256],12092:[[24515],256],12093:[[25096],256],12094:[[25142],256],12095:[[25163],256],12096:[[25903],256],12097:[[25908],256],12098:[[25991],256],12099:[[26007],256],12100:[[26020],256],12101:[[26041],256],12102:[[26080],256],12103:[[26085],256],12104:[[26352],256],12105:[[26376],256],12106:[[26408],256],12107:[[27424],256],12108:[[27490],256],12109:[[27513],256],12110:[[27571],256],12111:[[27595],256],12112:[[27604],256],12113:[[27611],256],12114:[[27663],256],12115:[[27668],256],12116:[[27700],256],12117:[[28779],256],12118:[[29226],256],12119:[[29238],256],12120:[[29243],256],12121:[[29247],256],12122:[[29255],256],12123:[[29273],256],12124:[[29275],256],12125:[[29356],256],12126:[[29572],256],12127:[[29577],256],12128:[[29916],256],12129:[[29926],256],12130:[[29976],256],12131:[[29983],256],12132:[[29992],256],12133:[[30000],256],12134:[[30091],256],12135:[[30098],256],12136:[[30326],256],12137:[[30333],256],12138:[[30382],256],12139:[[30399],256],12140:[[30446],256],12141:[[30683],256],12142:[[30690],256],12143:[[30707],256],12144:[[31034],256],12145:[[31160],256],12146:[[31166],256],12147:[[31348],256],12148:[[31435],256],12149:[[31481],256],12150:[[31859],256],12151:[[31992],256],12152:[[32566],256],12153:[[32593],256],12154:[[32650],256],12155:[[32701],256],12156:[[32769],256],12157:[[32780],256],12158:[[32786],256],12159:[[32819],256],12160:[[32895],256],12161:[[32905],256],12162:[[33251],256],12163:[[33258],256],12164:[[33267],256],12165:[[33276],256],12166:[[33292],256],12167:[[33307],256],12168:[[33311],256],12169:[[33390],256],12170:[[33394],256],12171:[[33400],256],12172:[[34381],256],12173:[[34411],256],12174:[[34880],256],12175:[[34892],256],12176:[[34915],256],12177:[[35198],256],12178:[[35211],256],12179:[[35282],256],12180:[[35328],256],12181:[[35895],256],12182:[[35910],256],12183:[[35925],256],12184:[[35960],256],12185:[[35997],256],12186:[[36196],256],12187:[[36208],256],12188:[[36275],256],12189:[[36523],256],12190:[[36554],256],12191:[[36763],256],12192:[[36784],256],12193:[[36789],256],12194:[[37009],256],12195:[[37193],256],12196:[[37318],256],12197:[[37324],256],12198:[[37329],256],12199:[[38263],256],12200:[[38272],256],12201:[[38428],256],12202:[[38582],256],12203:[[38585],256],12204:[[38632],256],12205:[[38737],256],12206:[[38750],256],12207:[[38754],256],12208:[[38761],256],12209:[[38859],256],12210:[[38893],256],12211:[[38899],256],12212:[[38913],256],12213:[[39080],256],12214:[[39131],256],12215:[[39135],256],12216:[[39318],256],12217:[[39321],256],12218:[[39340],256],12219:[[39592],256],12220:[[39640],256],12221:[[39647],256],12222:[[39717],256],12223:[[39727],256],12224:[[39730],256],12225:[[39740],256],12226:[[39770],256],12227:[[40165],256],12228:[[40565],256],12229:[[40575],256],12230:[[40613],256],12231:[[40635],256],12232:[[40643],256],12233:[[40653],256],12234:[[40657],256],12235:[[40697],256],12236:[[40701],256],12237:[[40718],256],12238:[[40723],256],12239:[[40736],256],12240:[[40763],256],12241:[[40778],256],12242:[[40786],256],12243:[[40845],256],12244:[[40860],256],12245:[[40864],256]},
693812288:{12288:[[32],256],12330:[,218],12331:[,228],12332:[,232],12333:[,222],12334:[,224],12335:[,224],12342:[[12306],256],12344:[[21313],256],12345:[[21316],256],12346:[[21317],256],12358:[,,{12441:12436}],12363:[,,{12441:12364}],12364:[[12363,12441]],12365:[,,{12441:12366}],12366:[[12365,12441]],12367:[,,{12441:12368}],12368:[[12367,12441]],12369:[,,{12441:12370}],12370:[[12369,12441]],12371:[,,{12441:12372}],12372:[[12371,12441]],12373:[,,{12441:12374}],12374:[[12373,12441]],12375:[,,{12441:12376}],12376:[[12375,12441]],12377:[,,{12441:12378}],12378:[[12377,12441]],12379:[,,{12441:12380}],12380:[[12379,12441]],12381:[,,{12441:12382}],12382:[[12381,12441]],12383:[,,{12441:12384}],12384:[[12383,12441]],12385:[,,{12441:12386}],12386:[[12385,12441]],12388:[,,{12441:12389}],12389:[[12388,12441]],12390:[,,{12441:12391}],12391:[[12390,12441]],12392:[,,{12441:12393}],12393:[[12392,12441]],12399:[,,{12441:12400,12442:12401}],12400:[[12399,12441]],12401:[[12399,12442]],12402:[,,{12441:12403,12442:12404}],12403:[[12402,12441]],12404:[[12402,12442]],12405:[,,{12441:12406,12442:12407}],12406:[[12405,12441]],12407:[[12405,12442]],12408:[,,{12441:12409,12442:12410}],12409:[[12408,12441]],12410:[[12408,12442]],12411:[,,{12441:12412,12442:12413}],12412:[[12411,12441]],12413:[[12411,12442]],12436:[[12358,12441]],12441:[,8],12442:[,8],12443:[[32,12441],256],12444:[[32,12442],256],12445:[,,{12441:12446}],12446:[[12445,12441]],12447:[[12424,12426],256],12454:[,,{12441:12532}],12459:[,,{12441:12460}],12460:[[12459,12441]],12461:[,,{12441:12462}],12462:[[12461,12441]],12463:[,,{12441:12464}],12464:[[12463,12441]],12465:[,,{12441:12466}],12466:[[12465,12441]],12467:[,,{12441:12468}],12468:[[12467,12441]],12469:[,,{12441:12470}],12470:[[12469,12441]],12471:[,,{12441:12472}],12472:[[12471,12441]],12473:[,,{12441:12474}],12474:[[12473,12441]],12475:[,,{12441:12476}],12476:[[12475,12441]],12477:[,,{12441:12478}],12478:[[12477,12441]],12479:[,,{12441:12480}],12480:[[12479,12441]],12481:[,,{12441:12482}],12482:[[12481,12441]],12484:[,,{12441:12485}],12485:[[12484,12441]],12486:[,,{12441:12487}],12487:[[12486,12441]],12488:[,,{12441:12489}],12489:[[12488,12441]],12495:[,,{12441:12496,12442:12497}],12496:[[12495,12441]],12497:[[12495,12442]],12498:[,,{12441:12499,12442:12500}],12499:[[12498,12441]],12500:[[12498,12442]],12501:[,,{12441:12502,12442:12503}],12502:[[12501,12441]],12503:[[12501,12442]],12504:[,,{12441:12505,12442:12506}],12505:[[12504,12441]],12506:[[12504,12442]],12507:[,,{12441:12508,12442:12509}],12508:[[12507,12441]],12509:[[12507,12442]],12527:[,,{12441:12535}],12528:[,,{12441:12536}],12529:[,,{12441:12537}],12530:[,,{12441:12538}],12532:[[12454,12441]],12535:[[12527,12441]],12536:[[12528,12441]],12537:[[12529,12441]],12538:[[12530,12441]],12541:[,,{12441:12542}],12542:[[12541,12441]],12543:[[12467,12488],256]},
693912544:{12593:[[4352],256],12594:[[4353],256],12595:[[4522],256],12596:[[4354],256],12597:[[4524],256],12598:[[4525],256],12599:[[4355],256],12600:[[4356],256],12601:[[4357],256],12602:[[4528],256],12603:[[4529],256],12604:[[4530],256],12605:[[4531],256],12606:[[4532],256],12607:[[4533],256],12608:[[4378],256],12609:[[4358],256],12610:[[4359],256],12611:[[4360],256],12612:[[4385],256],12613:[[4361],256],12614:[[4362],256],12615:[[4363],256],12616:[[4364],256],12617:[[4365],256],12618:[[4366],256],12619:[[4367],256],12620:[[4368],256],12621:[[4369],256],12622:[[4370],256],12623:[[4449],256],12624:[[4450],256],12625:[[4451],256],12626:[[4452],256],12627:[[4453],256],12628:[[4454],256],12629:[[4455],256],12630:[[4456],256],12631:[[4457],256],12632:[[4458],256],12633:[[4459],256],12634:[[4460],256],12635:[[4461],256],12636:[[4462],256],12637:[[4463],256],12638:[[4464],256],12639:[[4465],256],12640:[[4466],256],12641:[[4467],256],12642:[[4468],256],12643:[[4469],256],12644:[[4448],256],12645:[[4372],256],12646:[[4373],256],12647:[[4551],256],12648:[[4552],256],12649:[[4556],256],12650:[[4558],256],12651:[[4563],256],12652:[[4567],256],12653:[[4569],256],12654:[[4380],256],12655:[[4573],256],12656:[[4575],256],12657:[[4381],256],12658:[[4382],256],12659:[[4384],256],12660:[[4386],256],12661:[[4387],256],12662:[[4391],256],12663:[[4393],256],12664:[[4395],256],12665:[[4396],256],12666:[[4397],256],12667:[[4398],256],12668:[[4399],256],12669:[[4402],256],12670:[[4406],256],12671:[[4416],256],12672:[[4423],256],12673:[[4428],256],12674:[[4593],256],12675:[[4594],256],12676:[[4439],256],12677:[[4440],256],12678:[[4441],256],12679:[[4484],256],12680:[[4485],256],12681:[[4488],256],12682:[[4497],256],12683:[[4498],256],12684:[[4500],256],12685:[[4510],256],12686:[[4513],256],12690:[[19968],256],12691:[[20108],256],12692:[[19977],256],12693:[[22235],256],12694:[[19978],256],12695:[[20013],256],12696:[[19979],256],12697:[[30002],256],12698:[[20057],256],12699:[[19993],256],12700:[[19969],256],12701:[[22825],256],12702:[[22320],256],12703:[[20154],256]},
694012800:{12800:[[40,4352,41],256],12801:[[40,4354,41],256],12802:[[40,4355,41],256],12803:[[40,4357,41],256],12804:[[40,4358,41],256],12805:[[40,4359,41],256],12806:[[40,4361,41],256],12807:[[40,4363,41],256],12808:[[40,4364,41],256],12809:[[40,4366,41],256],12810:[[40,4367,41],256],12811:[[40,4368,41],256],12812:[[40,4369,41],256],12813:[[40,4370,41],256],12814:[[40,4352,4449,41],256],12815:[[40,4354,4449,41],256],12816:[[40,4355,4449,41],256],12817:[[40,4357,4449,41],256],12818:[[40,4358,4449,41],256],12819:[[40,4359,4449,41],256],12820:[[40,4361,4449,41],256],12821:[[40,4363,4449,41],256],12822:[[40,4364,4449,41],256],12823:[[40,4366,4449,41],256],12824:[[40,4367,4449,41],256],12825:[[40,4368,4449,41],256],12826:[[40,4369,4449,41],256],12827:[[40,4370,4449,41],256],12828:[[40,4364,4462,41],256],12829:[[40,4363,4457,4364,4453,4523,41],256],12830:[[40,4363,4457,4370,4462,41],256],12832:[[40,19968,41],256],12833:[[40,20108,41],256],12834:[[40,19977,41],256],12835:[[40,22235,41],256],12836:[[40,20116,41],256],12837:[[40,20845,41],256],12838:[[40,19971,41],256],12839:[[40,20843,41],256],12840:[[40,20061,41],256],12841:[[40,21313,41],256],12842:[[40,26376,41],256],12843:[[40,28779,41],256],12844:[[40,27700,41],256],12845:[[40,26408,41],256],12846:[[40,37329,41],256],12847:[[40,22303,41],256],12848:[[40,26085,41],256],12849:[[40,26666,41],256],12850:[[40,26377,41],256],12851:[[40,31038,41],256],12852:[[40,21517,41],256],12853:[[40,29305,41],256],12854:[[40,36001,41],256],12855:[[40,31069,41],256],12856:[[40,21172,41],256],12857:[[40,20195,41],256],12858:[[40,21628,41],256],12859:[[40,23398,41],256],12860:[[40,30435,41],256],12861:[[40,20225,41],256],12862:[[40,36039,41],256],12863:[[40,21332,41],256],12864:[[40,31085,41],256],12865:[[40,20241,41],256],12866:[[40,33258,41],256],12867:[[40,33267,41],256],12868:[[21839],256],12869:[[24188],256],12870:[[25991],256],12871:[[31631],256],12880:[[80,84,69],256],12881:[[50,49],256],12882:[[50,50],256],12883:[[50,51],256],12884:[[50,52],256],12885:[[50,53],256],12886:[[50,54],256],12887:[[50,55],256],12888:[[50,56],256],12889:[[50,57],256],12890:[[51,48],256],12891:[[51,49],256],12892:[[51,50],256],12893:[[51,51],256],12894:[[51,52],256],12895:[[51,53],256],12896:[[4352],256],12897:[[4354],256],12898:[[4355],256],12899:[[4357],256],12900:[[4358],256],12901:[[4359],256],12902:[[4361],256],12903:[[4363],256],12904:[[4364],256],12905:[[4366],256],12906:[[4367],256],12907:[[4368],256],12908:[[4369],256],12909:[[4370],256],12910:[[4352,4449],256],12911:[[4354,4449],256],12912:[[4355,4449],256],12913:[[4357,4449],256],12914:[[4358,4449],256],12915:[[4359,4449],256],12916:[[4361,4449],256],12917:[[4363,4449],256],12918:[[4364,4449],256],12919:[[4366,4449],256],12920:[[4367,4449],256],12921:[[4368,4449],256],12922:[[4369,4449],256],12923:[[4370,4449],256],12924:[[4366,4449,4535,4352,4457],256],12925:[[4364,4462,4363,4468],256],12926:[[4363,4462],256],12928:[[19968],256],12929:[[20108],256],12930:[[19977],256],12931:[[22235],256],12932:[[20116],256],12933:[[20845],256],12934:[[19971],256],12935:[[20843],256],12936:[[20061],256],12937:[[21313],256],12938:[[26376],256],12939:[[28779],256],12940:[[27700],256],12941:[[26408],256],12942:[[37329],256],12943:[[22303],256],12944:[[26085],256],12945:[[26666],256],12946:[[26377],256],12947:[[31038],256],12948:[[21517],256],12949:[[29305],256],12950:[[36001],256],12951:[[31069],256],12952:[[21172],256],12953:[[31192],256],12954:[[30007],256],12955:[[22899],256],12956:[[36969],256],12957:[[20778],256],12958:[[21360],256],12959:[[27880],256],12960:[[38917],256],12961:[[20241],256],12962:[[20889],256],12963:[[27491],256],12964:[[19978],256],12965:[[20013],256],12966:[[19979],256],12967:[[24038],256],12968:[[21491],256],12969:[[21307],256],12970:[[23447],256],12971:[[23398],256],12972:[[30435],256],12973:[[20225],256],12974:[[36039],256],12975:[[21332],256],12976:[[22812],256],12977:[[51,54],256],12978:[[51,55],256],12979:[[51,56],256],12980:[[51,57],256],12981:[[52,48],256],12982:[[52,49],256],12983:[[52,50],256],12984:[[52,51],256],12985:[[52,52],256],12986:[[52,53],256],12987:[[52,54],256],12988:[[52,55],256],12989:[[52,56],256],12990:[[52,57],256],12991:[[53,48],256],12992:[[49,26376],256],12993:[[50,26376],256],12994:[[51,26376],256],12995:[[52,26376],256],12996:[[53,26376],256],12997:[[54,26376],256],12998:[[55,26376],256],12999:[[56,26376],256],13000:[[57,26376],256],13001:[[49,48,26376],256],13002:[[49,49,26376],256],13003:[[49,50,26376],256],13004:[[72,103],256],13005:[[101,114,103],256],13006:[[101,86],256],13007:[[76,84,68],256],13008:[[12450],256],13009:[[12452],256],13010:[[12454],256],13011:[[12456],256],13012:[[12458],256],13013:[[12459],256],13014:[[12461],256],13015:[[12463],256],13016:[[12465],256],13017:[[12467],256],13018:[[12469],256],13019:[[12471],256],13020:[[12473],256],13021:[[12475],256],13022:[[12477],256],13023:[[12479],256],13024:[[12481],256],13025:[[12484],256],13026:[[12486],256],13027:[[12488],256],13028:[[12490],256],13029:[[12491],256],13030:[[12492],256],13031:[[12493],256],13032:[[12494],256],13033:[[12495],256],13034:[[12498],256],13035:[[12501],256],13036:[[12504],256],13037:[[12507],256],13038:[[12510],256],13039:[[12511],256],13040:[[12512],256],13041:[[12513],256],13042:[[12514],256],13043:[[12516],256],13044:[[12518],256],13045:[[12520],256],13046:[[12521],256],13047:[[12522],256],13048:[[12523],256],13049:[[12524],256],13050:[[12525],256],13051:[[12527],256],13052:[[12528],256],13053:[[12529],256],13054:[[12530],256]},
694113056:{13056:[[12450,12497,12540,12488],256],13057:[[12450,12523,12501,12449],256],13058:[[12450,12531,12506,12450],256],13059:[[12450,12540,12523],256],13060:[[12452,12491,12531,12464],256],13061:[[12452,12531,12481],256],13062:[[12454,12457,12531],256],13063:[[12456,12473,12463,12540,12489],256],13064:[[12456,12540,12459,12540],256],13065:[[12458,12531,12473],256],13066:[[12458,12540,12512],256],13067:[[12459,12452,12522],256],13068:[[12459,12521,12483,12488],256],13069:[[12459,12525,12522,12540],256],13070:[[12460,12525,12531],256],13071:[[12460,12531,12510],256],13072:[[12462,12460],256],13073:[[12462,12491,12540],256],13074:[[12461,12517,12522,12540],256],13075:[[12462,12523,12480,12540],256],13076:[[12461,12525],256],13077:[[12461,12525,12464,12521,12512],256],13078:[[12461,12525,12513,12540,12488,12523],256],13079:[[12461,12525,12527,12483,12488],256],13080:[[12464,12521,12512],256],13081:[[12464,12521,12512,12488,12531],256],13082:[[12463,12523,12476,12452,12525],256],13083:[[12463,12525,12540,12493],256],13084:[[12465,12540,12473],256],13085:[[12467,12523,12490],256],13086:[[12467,12540,12509],256],13087:[[12469,12452,12463,12523],256],13088:[[12469,12531,12481,12540,12512],256],13089:[[12471,12522,12531,12464],256],13090:[[12475,12531,12481],256],13091:[[12475,12531,12488],256],13092:[[12480,12540,12473],256],13093:[[12487,12471],256],13094:[[12489,12523],256],13095:[[12488,12531],256],13096:[[12490,12494],256],13097:[[12494,12483,12488],256],13098:[[12495,12452,12484],256],13099:[[12497,12540,12475,12531,12488],256],13100:[[12497,12540,12484],256],13101:[[12496,12540,12524,12523],256],13102:[[12500,12450,12473,12488,12523],256],13103:[[12500,12463,12523],256],13104:[[12500,12467],256],13105:[[12499,12523],256],13106:[[12501,12449,12521,12483,12489],256],13107:[[12501,12451,12540,12488],256],13108:[[12502,12483,12471,12455,12523],256],13109:[[12501,12521,12531],256],13110:[[12504,12463,12479,12540,12523],256],13111:[[12506,12477],256],13112:[[12506,12491,12498],256],13113:[[12504,12523,12484],256],13114:[[12506,12531,12473],256],13115:[[12506,12540,12472],256],13116:[[12505,12540,12479],256],13117:[[12509,12452,12531,12488],256],13118:[[12508,12523,12488],256],13119:[[12507,12531],256],13120:[[12509,12531,12489],256],13121:[[12507,12540,12523],256],13122:[[12507,12540,12531],256],13123:[[12510,12452,12463,12525],256],13124:[[12510,12452,12523],256],13125:[[12510,12483,12495],256],13126:[[12510,12523,12463],256],13127:[[12510,12531,12471,12519,12531],256],13128:[[12511,12463,12525,12531],256],13129:[[12511,12522],256],13130:[[12511,12522,12496,12540,12523],256],13131:[[12513,12460],256],13132:[[12513,12460,12488,12531],256],13133:[[12513,12540,12488,12523],256],13134:[[12516,12540,12489],256],13135:[[12516,12540,12523],256],13136:[[12518,12450,12531],256],13137:[[12522,12483,12488,12523],256],13138:[[12522,12521],256],13139:[[12523,12500,12540],256],13140:[[12523,12540,12502,12523],256],13141:[[12524,12512],256],13142:[[12524,12531,12488,12466,12531],256],13143:[[12527,12483,12488],256],13144:[[48,28857],256],13145:[[49,28857],256],13146:[[50,28857],256],13147:[[51,28857],256],13148:[[52,28857],256],13149:[[53,28857],256],13150:[[54,28857],256],13151:[[55,28857],256],13152:[[56,28857],256],13153:[[57,28857],256],13154:[[49,48,28857],256],13155:[[49,49,28857],256],13156:[[49,50,28857],256],13157:[[49,51,28857],256],13158:[[49,52,28857],256],13159:[[49,53,28857],256],13160:[[49,54,28857],256],13161:[[49,55,28857],256],13162:[[49,56,28857],256],13163:[[49,57,28857],256],13164:[[50,48,28857],256],13165:[[50,49,28857],256],13166:[[50,50,28857],256],13167:[[50,51,28857],256],13168:[[50,52,28857],256],13169:[[104,80,97],256],13170:[[100,97],256],13171:[[65,85],256],13172:[[98,97,114],256],13173:[[111,86],256],13174:[[112,99],256],13175:[[100,109],256],13176:[[100,109,178],256],13177:[[100,109,179],256],13178:[[73,85],256],13179:[[24179,25104],256],13180:[[26157,21644],256],13181:[[22823,27491],256],13182:[[26126,27835],256],13183:[[26666,24335,20250,31038],256],13184:[[112,65],256],13185:[[110,65],256],13186:[[956,65],256],13187:[[109,65],256],13188:[[107,65],256],13189:[[75,66],256],13190:[[77,66],256],13191:[[71,66],256],13192:[[99,97,108],256],13193:[[107,99,97,108],256],13194:[[112,70],256],13195:[[110,70],256],13196:[[956,70],256],13197:[[956,103],256],13198:[[109,103],256],13199:[[107,103],256],13200:[[72,122],256],13201:[[107,72,122],256],13202:[[77,72,122],256],13203:[[71,72,122],256],13204:[[84,72,122],256],13205:[[956,8467],256],13206:[[109,8467],256],13207:[[100,8467],256],13208:[[107,8467],256],13209:[[102,109],256],13210:[[110,109],256],13211:[[956,109],256],13212:[[109,109],256],13213:[[99,109],256],13214:[[107,109],256],13215:[[109,109,178],256],13216:[[99,109,178],256],13217:[[109,178],256],13218:[[107,109,178],256],13219:[[109,109,179],256],13220:[[99,109,179],256],13221:[[109,179],256],13222:[[107,109,179],256],13223:[[109,8725,115],256],13224:[[109,8725,115,178],256],13225:[[80,97],256],13226:[[107,80,97],256],13227:[[77,80,97],256],13228:[[71,80,97],256],13229:[[114,97,100],256],13230:[[114,97,100,8725,115],256],13231:[[114,97,100,8725,115,178],256],13232:[[112,115],256],13233:[[110,115],256],13234:[[956,115],256],13235:[[109,115],256],13236:[[112,86],256],13237:[[110,86],256],13238:[[956,86],256],13239:[[109,86],256],13240:[[107,86],256],13241:[[77,86],256],13242:[[112,87],256],13243:[[110,87],256],13244:[[956,87],256],13245:[[109,87],256],13246:[[107,87],256],13247:[[77,87],256],13248:[[107,937],256],13249:[[77,937],256],13250:[[97,46,109,46],256],13251:[[66,113],256],13252:[[99,99],256],13253:[[99,100],256],13254:[[67,8725,107,103],256],13255:[[67,111,46],256],13256:[[100,66],256],13257:[[71,121],256],13258:[[104,97],256],13259:[[72,80],256],13260:[[105,110],256],13261:[[75,75],256],13262:[[75,77],256],13263:[[107,116],256],13264:[[108,109],256],13265:[[108,110],256],13266:[[108,111,103],256],13267:[[108,120],256],13268:[[109,98],256],13269:[[109,105,108],256],13270:[[109,111,108],256],13271:[[80,72],256],13272:[[112,46,109,46],256],13273:[[80,80,77],256],13274:[[80,82],256],13275:[[115,114],256],13276:[[83,118],256],13277:[[87,98],256],13278:[[86,8725,109],256],13279:[[65,8725,109],256],13280:[[49,26085],256],13281:[[50,26085],256],13282:[[51,26085],256],13283:[[52,26085],256],13284:[[53,26085],256],13285:[[54,26085],256],13286:[[55,26085],256],13287:[[56,26085],256],13288:[[57,26085],256],13289:[[49,48,26085],256],13290:[[49,49,26085],256],13291:[[49,50,26085],256],13292:[[49,51,26085],256],13293:[[49,52,26085],256],13294:[[49,53,26085],256],13295:[[49,54,26085],256],13296:[[49,55,26085],256],13297:[[49,56,26085],256],13298:[[49,57,26085],256],13299:[[50,48,26085],256],13300:[[50,49,26085],256],13301:[[50,50,26085],256],13302:[[50,51,26085],256],13303:[[50,52,26085],256],13304:[[50,53,26085],256],13305:[[50,54,26085],256],13306:[[50,55,26085],256],13307:[[50,56,26085],256],13308:[[50,57,26085],256],13309:[[51,48,26085],256],13310:[[51,49,26085],256],13311:[[103,97,108],256]},
694227136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
694327392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
694442496:{42607:[,230],42612:[,230],42613:[,230],42614:[,230],42615:[,230],42616:[,230],42617:[,230],42618:[,230],42619:[,230],42620:[,230],42621:[,230],42652:[[1098],256],42653:[[1100],256],42655:[,230],42736:[,230],42737:[,230]},
694542752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
694643008:{43014:[,9],43204:[,9],43232:[,230],43233:[,230],43234:[,230],43235:[,230],43236:[,230],43237:[,230],43238:[,230],43239:[,230],43240:[,230],43241:[,230],43242:[,230],43243:[,230],43244:[,230],43245:[,230],43246:[,230],43247:[,230],43248:[,230],43249:[,230]},
694743264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
694843520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
694943776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
695048128:{113822:[,1]},
695153504:{119134:[[119127,119141],512],119135:[[119128,119141],512],119136:[[119135,119150],512],119137:[[119135,119151],512],119138:[[119135,119152],512],119139:[[119135,119153],512],119140:[[119135,119154],512],119141:[,216],119142:[,216],119143:[,1],119144:[,1],119145:[,1],119149:[,226],119150:[,216],119151:[,216],119152:[,216],119153:[,216],119154:[,216],119163:[,220],119164:[,220],119165:[,220],119166:[,220],119167:[,220],119168:[,220],119169:[,220],119170:[,220],119173:[,230],119174:[,230],119175:[,230],119176:[,230],119177:[,230],119178:[,220],119179:[,220],119210:[,230],119211:[,230],119212:[,230],119213:[,230],119227:[[119225,119141],512],119228:[[119226,119141],512],119229:[[119227,119150],512],119230:[[119228,119150],512],119231:[[119227,119151],512],119232:[[119228,119151],512]},
695253760:{119362:[,230],119363:[,230],119364:[,230]},
695354272:{119808:[[65],256],119809:[[66],256],119810:[[67],256],119811:[[68],256],119812:[[69],256],119813:[[70],256],119814:[[71],256],119815:[[72],256],119816:[[73],256],119817:[[74],256],119818:[[75],256],119819:[[76],256],119820:[[77],256],119821:[[78],256],119822:[[79],256],119823:[[80],256],119824:[[81],256],119825:[[82],256],119826:[[83],256],119827:[[84],256],119828:[[85],256],119829:[[86],256],119830:[[87],256],119831:[[88],256],119832:[[89],256],119833:[[90],256],119834:[[97],256],119835:[[98],256],119836:[[99],256],119837:[[100],256],119838:[[101],256],119839:[[102],256],119840:[[103],256],119841:[[104],256],119842:[[105],256],119843:[[106],256],119844:[[107],256],119845:[[108],256],119846:[[109],256],119847:[[110],256],119848:[[111],256],119849:[[112],256],119850:[[113],256],119851:[[114],256],119852:[[115],256],119853:[[116],256],119854:[[117],256],119855:[[118],256],119856:[[119],256],119857:[[120],256],119858:[[121],256],119859:[[122],256],119860:[[65],256],119861:[[66],256],119862:[[67],256],119863:[[68],256],119864:[[69],256],119865:[[70],256],119866:[[71],256],119867:[[72],256],119868:[[73],256],119869:[[74],256],119870:[[75],256],119871:[[76],256],119872:[[77],256],119873:[[78],256],119874:[[79],256],119875:[[80],256],119876:[[81],256],119877:[[82],256],119878:[[83],256],119879:[[84],256],119880:[[85],256],119881:[[86],256],119882:[[87],256],119883:[[88],256],119884:[[89],256],119885:[[90],256],119886:[[97],256],119887:[[98],256],119888:[[99],256],119889:[[100],256],119890:[[101],256],119891:[[102],256],119892:[[103],256],119894:[[105],256],119895:[[106],256],119896:[[107],256],119897:[[108],256],119898:[[109],256],119899:[[110],256],119900:[[111],256],119901:[[112],256],119902:[[113],256],119903:[[114],256],119904:[[115],256],119905:[[116],256],119906:[[117],256],119907:[[118],256],119908:[[119],256],119909:[[120],256],119910:[[121],256],119911:[[122],256],119912:[[65],256],119913:[[66],256],119914:[[67],256],119915:[[68],256],119916:[[69],256],119917:[[70],256],119918:[[71],256],119919:[[72],256],119920:[[73],256],119921:[[74],256],119922:[[75],256],119923:[[76],256],119924:[[77],256],119925:[[78],256],119926:[[79],256],119927:[[80],256],119928:[[81],256],119929:[[82],256],119930:[[83],256],119931:[[84],256],119932:[[85],256],119933:[[86],256],119934:[[87],256],119935:[[88],256],119936:[[89],256],119937:[[90],256],119938:[[97],256],119939:[[98],256],119940:[[99],256],119941:[[100],256],119942:[[101],256],119943:[[102],256],119944:[[103],256],119945:[[104],256],119946:[[105],256],119947:[[106],256],119948:[[107],256],119949:[[108],256],119950:[[109],256],119951:[[110],256],119952:[[111],256],119953:[[112],256],119954:[[113],256],119955:[[114],256],119956:[[115],256],119957:[[116],256],119958:[[117],256],119959:[[118],256],119960:[[119],256],119961:[[120],256],119962:[[121],256],119963:[[122],256],119964:[[65],256],119966:[[67],256],119967:[[68],256],119970:[[71],256],119973:[[74],256],119974:[[75],256],119977:[[78],256],119978:[[79],256],119979:[[80],256],119980:[[81],256],119982:[[83],256],119983:[[84],256],119984:[[85],256],119985:[[86],256],119986:[[87],256],119987:[[88],256],119988:[[89],256],119989:[[90],256],119990:[[97],256],119991:[[98],256],119992:[[99],256],119993:[[100],256],119995:[[102],256],119997:[[104],256],119998:[[105],256],119999:[[106],256],120000:[[107],256],120001:[[108],256],120002:[[109],256],120003:[[110],256],120005:[[112],256],120006:[[113],256],120007:[[114],256],120008:[[115],256],120009:[[116],256],120010:[[117],256],120011:[[118],256],120012:[[119],256],120013:[[120],256],120014:[[121],256],120015:[[122],256],120016:[[65],256],120017:[[66],256],120018:[[67],256],120019:[[68],256],120020:[[69],256],120021:[[70],256],120022:[[71],256],120023:[[72],256],120024:[[73],256],120025:[[74],256],120026:[[75],256],120027:[[76],256],120028:[[77],256],120029:[[78],256],120030:[[79],256],120031:[[80],256],120032:[[81],256],120033:[[82],256],120034:[[83],256],120035:[[84],256],120036:[[85],256],120037:[[86],256],120038:[[87],256],120039:[[88],256],120040:[[89],256],120041:[[90],256],120042:[[97],256],120043:[[98],256],120044:[[99],256],120045:[[100],256],120046:[[101],256],120047:[[102],256],120048:[[103],256],120049:[[104],256],120050:[[105],256],120051:[[106],256],120052:[[107],256],120053:[[108],256],120054:[[109],256],120055:[[110],256],120056:[[111],256],120057:[[112],256],120058:[[113],256],120059:[[114],256],120060:[[115],256],120061:[[116],256],120062:[[117],256],120063:[[118],256]},
695454528:{120064:[[119],256],120065:[[120],256],120066:[[121],256],120067:[[122],256],120068:[[65],256],120069:[[66],256],120071:[[68],256],120072:[[69],256],120073:[[70],256],120074:[[71],256],120077:[[74],256],120078:[[75],256],120079:[[76],256],120080:[[77],256],120081:[[78],256],120082:[[79],256],120083:[[80],256],120084:[[81],256],120086:[[83],256],120087:[[84],256],120088:[[85],256],120089:[[86],256],120090:[[87],256],120091:[[88],256],120092:[[89],256],120094:[[97],256],120095:[[98],256],120096:[[99],256],120097:[[100],256],120098:[[101],256],120099:[[102],256],120100:[[103],256],120101:[[104],256],120102:[[105],256],120103:[[106],256],120104:[[107],256],120105:[[108],256],120106:[[109],256],120107:[[110],256],120108:[[111],256],120109:[[112],256],120110:[[113],256],120111:[[114],256],120112:[[115],256],120113:[[116],256],120114:[[117],256],120115:[[118],256],120116:[[119],256],120117:[[120],256],120118:[[121],256],120119:[[122],256],120120:[[65],256],120121:[[66],256],120123:[[68],256],120124:[[69],256],120125:[[70],256],120126:[[71],256],120128:[[73],256],120129:[[74],256],120130:[[75],256],120131:[[76],256],120132:[[77],256],120134:[[79],256],120138:[[83],256],120139:[[84],256],120140:[[85],256],120141:[[86],256],120142:[[87],256],120143:[[88],256],120144:[[89],256],120146:[[97],256],120147:[[98],256],120148:[[99],256],120149:[[100],256],120150:[[101],256],120151:[[102],256],120152:[[103],256],120153:[[104],256],120154:[[105],256],120155:[[106],256],120156:[[107],256],120157:[[108],256],120158:[[109],256],120159:[[110],256],120160:[[111],256],120161:[[112],256],120162:[[113],256],120163:[[114],256],120164:[[115],256],120165:[[116],256],120166:[[117],256],120167:[[118],256],120168:[[119],256],120169:[[120],256],120170:[[121],256],120171:[[122],256],120172:[[65],256],120173:[[66],256],120174:[[67],256],120175:[[68],256],120176:[[69],256],120177:[[70],256],120178:[[71],256],120179:[[72],256],120180:[[73],256],120181:[[74],256],120182:[[75],256],120183:[[76],256],120184:[[77],256],120185:[[78],256],120186:[[79],256],120187:[[80],256],120188:[[81],256],120189:[[82],256],120190:[[83],256],120191:[[84],256],120192:[[85],256],120193:[[86],256],120194:[[87],256],120195:[[88],256],120196:[[89],256],120197:[[90],256],120198:[[97],256],120199:[[98],256],120200:[[99],256],120201:[[100],256],120202:[[101],256],120203:[[102],256],120204:[[103],256],120205:[[104],256],120206:[[105],256],120207:[[106],256],120208:[[107],256],120209:[[108],256],120210:[[109],256],120211:[[110],256],120212:[[111],256],120213:[[112],256],120214:[[113],256],120215:[[114],256],120216:[[115],256],120217:[[116],256],120218:[[117],256],120219:[[118],256],120220:[[119],256],120221:[[120],256],120222:[[121],256],120223:[[122],256],120224:[[65],256],120225:[[66],256],120226:[[67],256],120227:[[68],256],120228:[[69],256],120229:[[70],256],120230:[[71],256],120231:[[72],256],120232:[[73],256],120233:[[74],256],120234:[[75],256],120235:[[76],256],120236:[[77],256],120237:[[78],256],120238:[[79],256],120239:[[80],256],120240:[[81],256],120241:[[82],256],120242:[[83],256],120243:[[84],256],120244:[[85],256],120245:[[86],256],120246:[[87],256],120247:[[88],256],120248:[[89],256],120249:[[90],256],120250:[[97],256],120251:[[98],256],120252:[[99],256],120253:[[100],256],120254:[[101],256],120255:[[102],256],120256:[[103],256],120257:[[104],256],120258:[[105],256],120259:[[106],256],120260:[[107],256],120261:[[108],256],120262:[[109],256],120263:[[110],256],120264:[[111],256],120265:[[112],256],120266:[[113],256],120267:[[114],256],120268:[[115],256],120269:[[116],256],120270:[[117],256],120271:[[118],256],120272:[[119],256],120273:[[120],256],120274:[[121],256],120275:[[122],256],120276:[[65],256],120277:[[66],256],120278:[[67],256],120279:[[68],256],120280:[[69],256],120281:[[70],256],120282:[[71],256],120283:[[72],256],120284:[[73],256],120285:[[74],256],120286:[[75],256],120287:[[76],256],120288:[[77],256],120289:[[78],256],120290:[[79],256],120291:[[80],256],120292:[[81],256],120293:[[82],256],120294:[[83],256],120295:[[84],256],120296:[[85],256],120297:[[86],256],120298:[[87],256],120299:[[88],256],120300:[[89],256],120301:[[90],256],120302:[[97],256],120303:[[98],256],120304:[[99],256],120305:[[100],256],120306:[[101],256],120307:[[102],256],120308:[[103],256],120309:[[104],256],120310:[[105],256],120311:[[106],256],120312:[[107],256],120313:[[108],256],120314:[[109],256],120315:[[110],256],120316:[[111],256],120317:[[112],256],120318:[[113],256],120319:[[114],256]},
695554784:{120320:[[115],256],120321:[[116],256],120322:[[117],256],120323:[[118],256],120324:[[119],256],120325:[[120],256],120326:[[121],256],120327:[[122],256],120328:[[65],256],120329:[[66],256],120330:[[67],256],120331:[[68],256],120332:[[69],256],120333:[[70],256],120334:[[71],256],120335:[[72],256],120336:[[73],256],120337:[[74],256],120338:[[75],256],120339:[[76],256],120340:[[77],256],120341:[[78],256],120342:[[79],256],120343:[[80],256],120344:[[81],256],120345:[[82],256],120346:[[83],256],120347:[[84],256],120348:[[85],256],120349:[[86],256],120350:[[87],256],120351:[[88],256],120352:[[89],256],120353:[[90],256],120354:[[97],256],120355:[[98],256],120356:[[99],256],120357:[[100],256],120358:[[101],256],120359:[[102],256],120360:[[103],256],120361:[[104],256],120362:[[105],256],120363:[[106],256],120364:[[107],256],120365:[[108],256],120366:[[109],256],120367:[[110],256],120368:[[111],256],120369:[[112],256],120370:[[113],256],120371:[[114],256],120372:[[115],256],120373:[[116],256],120374:[[117],256],120375:[[118],256],120376:[[119],256],120377:[[120],256],120378:[[121],256],120379:[[122],256],120380:[[65],256],120381:[[66],256],120382:[[67],256],120383:[[68],256],120384:[[69],256],120385:[[70],256],120386:[[71],256],120387:[[72],256],120388:[[73],256],120389:[[74],256],120390:[[75],256],120391:[[76],256],120392:[[77],256],120393:[[78],256],120394:[[79],256],120395:[[80],256],120396:[[81],256],120397:[[82],256],120398:[[83],256],120399:[[84],256],120400:[[85],256],120401:[[86],256],120402:[[87],256],120403:[[88],256],120404:[[89],256],120405:[[90],256],120406:[[97],256],120407:[[98],256],120408:[[99],256],120409:[[100],256],120410:[[101],256],120411:[[102],256],120412:[[103],256],120413:[[104],256],120414:[[105],256],120415:[[106],256],120416:[[107],256],120417:[[108],256],120418:[[109],256],120419:[[110],256],120420:[[111],256],120421:[[112],256],120422:[[113],256],120423:[[114],256],120424:[[115],256],120425:[[116],256],120426:[[117],256],120427:[[118],256],120428:[[119],256],120429:[[120],256],120430:[[121],256],120431:[[122],256],120432:[[65],256],120433:[[66],256],120434:[[67],256],120435:[[68],256],120436:[[69],256],120437:[[70],256],120438:[[71],256],120439:[[72],256],120440:[[73],256],120441:[[74],256],120442:[[75],256],120443:[[76],256],120444:[[77],256],120445:[[78],256],120446:[[79],256],120447:[[80],256],120448:[[81],256],120449:[[82],256],120450:[[83],256],120451:[[84],256],120452:[[85],256],120453:[[86],256],120454:[[87],256],120455:[[88],256],120456:[[89],256],120457:[[90],256],120458:[[97],256],120459:[[98],256],120460:[[99],256],120461:[[100],256],120462:[[101],256],120463:[[102],256],120464:[[103],256],120465:[[104],256],120466:[[105],256],120467:[[106],256],120468:[[107],256],120469:[[108],256],120470:[[109],256],120471:[[110],256],120472:[[111],256],120473:[[112],256],120474:[[113],256],120475:[[114],256],120476:[[115],256],120477:[[116],256],120478:[[117],256],120479:[[118],256],120480:[[119],256],120481:[[120],256],120482:[[121],256],120483:[[122],256],120484:[[305],256],120485:[[567],256],120488:[[913],256],120489:[[914],256],120490:[[915],256],120491:[[916],256],120492:[[917],256],120493:[[918],256],120494:[[919],256],120495:[[920],256],120496:[[921],256],120497:[[922],256],120498:[[923],256],120499:[[924],256],120500:[[925],256],120501:[[926],256],120502:[[927],256],120503:[[928],256],120504:[[929],256],120505:[[1012],256],120506:[[931],256],120507:[[932],256],120508:[[933],256],120509:[[934],256],120510:[[935],256],120511:[[936],256],120512:[[937],256],120513:[[8711],256],120514:[[945],256],120515:[[946],256],120516:[[947],256],120517:[[948],256],120518:[[949],256],120519:[[950],256],120520:[[951],256],120521:[[952],256],120522:[[953],256],120523:[[954],256],120524:[[955],256],120525:[[956],256],120526:[[957],256],120527:[[958],256],120528:[[959],256],120529:[[960],256],120530:[[961],256],120531:[[962],256],120532:[[963],256],120533:[[964],256],120534:[[965],256],120535:[[966],256],120536:[[967],256],120537:[[968],256],120538:[[969],256],120539:[[8706],256],120540:[[1013],256],120541:[[977],256],120542:[[1008],256],120543:[[981],256],120544:[[1009],256],120545:[[982],256],120546:[[913],256],120547:[[914],256],120548:[[915],256],120549:[[916],256],120550:[[917],256],120551:[[918],256],120552:[[919],256],120553:[[920],256],120554:[[921],256],120555:[[922],256],120556:[[923],256],120557:[[924],256],120558:[[925],256],120559:[[926],256],120560:[[927],256],120561:[[928],256],120562:[[929],256],120563:[[1012],256],120564:[[931],256],120565:[[932],256],120566:[[933],256],120567:[[934],256],120568:[[935],256],120569:[[936],256],120570:[[937],256],120571:[[8711],256],120572:[[945],256],120573:[[946],256],120574:[[947],256],120575:[[948],256]},
695655040:{120576:[[949],256],120577:[[950],256],120578:[[951],256],120579:[[952],256],120580:[[953],256],120581:[[954],256],120582:[[955],256],120583:[[956],256],120584:[[957],256],120585:[[958],256],120586:[[959],256],120587:[[960],256],120588:[[961],256],120589:[[962],256],120590:[[963],256],120591:[[964],256],120592:[[965],256],120593:[[966],256],120594:[[967],256],120595:[[968],256],120596:[[969],256],120597:[[8706],256],120598:[[1013],256],120599:[[977],256],120600:[[1008],256],120601:[[981],256],120602:[[1009],256],120603:[[982],256],120604:[[913],256],120605:[[914],256],120606:[[915],256],120607:[[916],256],120608:[[917],256],120609:[[918],256],120610:[[919],256],120611:[[920],256],120612:[[921],256],120613:[[922],256],120614:[[923],256],120615:[[924],256],120616:[[925],256],120617:[[926],256],120618:[[927],256],120619:[[928],256],120620:[[929],256],120621:[[1012],256],120622:[[931],256],120623:[[932],256],120624:[[933],256],120625:[[934],256],120626:[[935],256],120627:[[936],256],120628:[[937],256],120629:[[8711],256],120630:[[945],256],120631:[[946],256],120632:[[947],256],120633:[[948],256],120634:[[949],256],120635:[[950],256],120636:[[951],256],120637:[[952],256],120638:[[953],256],120639:[[954],256],120640:[[955],256],120641:[[956],256],120642:[[957],256],120643:[[958],256],120644:[[959],256],120645:[[960],256],120646:[[961],256],120647:[[962],256],120648:[[963],256],120649:[[964],256],120650:[[965],256],120651:[[966],256],120652:[[967],256],120653:[[968],256],120654:[[969],256],120655:[[8706],256],120656:[[1013],256],120657:[[977],256],120658:[[1008],256],120659:[[981],256],120660:[[1009],256],120661:[[982],256],120662:[[913],256],120663:[[914],256],120664:[[915],256],120665:[[916],256],120666:[[917],256],120667:[[918],256],120668:[[919],256],120669:[[920],256],120670:[[921],256],120671:[[922],256],120672:[[923],256],120673:[[924],256],120674:[[925],256],120675:[[926],256],120676:[[927],256],120677:[[928],256],120678:[[929],256],120679:[[1012],256],120680:[[931],256],120681:[[932],256],120682:[[933],256],120683:[[934],256],120684:[[935],256],120685:[[936],256],120686:[[937],256],120687:[[8711],256],120688:[[945],256],120689:[[946],256],120690:[[947],256],120691:[[948],256],120692:[[949],256],120693:[[950],256],120694:[[951],256],120695:[[952],256],120696:[[953],256],120697:[[954],256],120698:[[955],256],120699:[[956],256],120700:[[957],256],120701:[[958],256],120702:[[959],256],120703:[[960],256],120704:[[961],256],120705:[[962],256],120706:[[963],256],120707:[[964],256],120708:[[965],256],120709:[[966],256],120710:[[967],256],120711:[[968],256],120712:[[969],256],120713:[[8706],256],120714:[[1013],256],120715:[[977],256],120716:[[1008],256],120717:[[981],256],120718:[[1009],256],120719:[[982],256],120720:[[913],256],120721:[[914],256],120722:[[915],256],120723:[[916],256],120724:[[917],256],120725:[[918],256],120726:[[919],256],120727:[[920],256],120728:[[921],256],120729:[[922],256],120730:[[923],256],120731:[[924],256],120732:[[925],256],120733:[[926],256],120734:[[927],256],120735:[[928],256],120736:[[929],256],120737:[[1012],256],120738:[[931],256],120739:[[932],256],120740:[[933],256],120741:[[934],256],120742:[[935],256],120743:[[936],256],120744:[[937],256],120745:[[8711],256],120746:[[945],256],120747:[[946],256],120748:[[947],256],120749:[[948],256],120750:[[949],256],120751:[[950],256],120752:[[951],256],120753:[[952],256],120754:[[953],256],120755:[[954],256],120756:[[955],256],120757:[[956],256],120758:[[957],256],120759:[[958],256],120760:[[959],256],120761:[[960],256],120762:[[961],256],120763:[[962],256],120764:[[963],256],120765:[[964],256],120766:[[965],256],120767:[[966],256],120768:[[967],256],120769:[[968],256],120770:[[969],256],120771:[[8706],256],120772:[[1013],256],120773:[[977],256],120774:[[1008],256],120775:[[981],256],120776:[[1009],256],120777:[[982],256],120778:[[988],256],120779:[[989],256],120782:[[48],256],120783:[[49],256],120784:[[50],256],120785:[[51],256],120786:[[52],256],120787:[[53],256],120788:[[54],256],120789:[[55],256],120790:[[56],256],120791:[[57],256],120792:[[48],256],120793:[[49],256],120794:[[50],256],120795:[[51],256],120796:[[52],256],120797:[[53],256],120798:[[54],256],120799:[[55],256],120800:[[56],256],120801:[[57],256],120802:[[48],256],120803:[[49],256],120804:[[50],256],120805:[[51],256],120806:[[52],256],120807:[[53],256],120808:[[54],256],120809:[[55],256],120810:[[56],256],120811:[[57],256],120812:[[48],256],120813:[[49],256],120814:[[50],256],120815:[[51],256],120816:[[52],256],120817:[[53],256],120818:[[54],256],120819:[[55],256],120820:[[56],256],120821:[[57],256],120822:[[48],256],120823:[[49],256],120824:[[50],256],120825:[[51],256],120826:[[52],256],120827:[[53],256],120828:[[54],256],120829:[[55],256],120830:[[56],256],120831:[[57],256]},
695759392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
695860928:{126464:[[1575],256],126465:[[1576],256],126466:[[1580],256],126467:[[1583],256],126469:[[1608],256],126470:[[1586],256],126471:[[1581],256],126472:[[1591],256],126473:[[1610],256],126474:[[1603],256],126475:[[1604],256],126476:[[1605],256],126477:[[1606],256],126478:[[1587],256],126479:[[1593],256],126480:[[1601],256],126481:[[1589],256],126482:[[1602],256],126483:[[1585],256],126484:[[1588],256],126485:[[1578],256],126486:[[1579],256],126487:[[1582],256],126488:[[1584],256],126489:[[1590],256],126490:[[1592],256],126491:[[1594],256],126492:[[1646],256],126493:[[1722],256],126494:[[1697],256],126495:[[1647],256],126497:[[1576],256],126498:[[1580],256],126500:[[1607],256],126503:[[1581],256],126505:[[1610],256],126506:[[1603],256],126507:[[1604],256],126508:[[1605],256],126509:[[1606],256],126510:[[1587],256],126511:[[1593],256],126512:[[1601],256],126513:[[1589],256],126514:[[1602],256],126516:[[1588],256],126517:[[1578],256],126518:[[1579],256],126519:[[1582],256],126521:[[1590],256],126523:[[1594],256],126530:[[1580],256],126535:[[1581],256],126537:[[1610],256],126539:[[1604],256],126541:[[1606],256],126542:[[1587],256],126543:[[1593],256],126545:[[1589],256],126546:[[1602],256],126548:[[1588],256],126551:[[1582],256],126553:[[1590],256],126555:[[1594],256],126557:[[1722],256],126559:[[1647],256],126561:[[1576],256],126562:[[1580],256],126564:[[1607],256],126567:[[1581],256],126568:[[1591],256],126569:[[1610],256],126570:[[1603],256],126572:[[1605],256],126573:[[1606],256],126574:[[1587],256],126575:[[1593],256],126576:[[1601],256],126577:[[1589],256],126578:[[1602],256],126580:[[1588],256],126581:[[1578],256],126582:[[1579],256],126583:[[1582],256],126585:[[1590],256],126586:[[1592],256],126587:[[1594],256],126588:[[1646],256],126590:[[1697],256],126592:[[1575],256],126593:[[1576],256],126594:[[1580],256],126595:[[1583],256],126596:[[1607],256],126597:[[1608],256],126598:[[1586],256],126599:[[1581],256],126600:[[1591],256],126601:[[1610],256],126603:[[1604],256],126604:[[1605],256],126605:[[1606],256],126606:[[1587],256],126607:[[1593],256],126608:[[1601],256],126609:[[1589],256],126610:[[1602],256],126611:[[1585],256],126612:[[1588],256],126613:[[1578],256],126614:[[1579],256],126615:[[1582],256],126616:[[1584],256],126617:[[1590],256],126618:[[1592],256],126619:[[1594],256],126625:[[1576],256],126626:[[1580],256],126627:[[1583],256],126629:[[1608],256],126630:[[1586],256],126631:[[1581],256],126632:[[1591],256],126633:[[1610],256],126635:[[1604],256],126636:[[1605],256],126637:[[1606],256],126638:[[1587],256],126639:[[1593],256],126640:[[1601],256],126641:[[1589],256],126642:[[1602],256],126643:[[1585],256],126644:[[1588],256],126645:[[1578],256],126646:[[1579],256],126647:[[1582],256],126648:[[1584],256],126649:[[1590],256],126650:[[1592],256],126651:[[1594],256]},
695961696:{127232:[[48,46],256],127233:[[48,44],256],127234:[[49,44],256],127235:[[50,44],256],127236:[[51,44],256],127237:[[52,44],256],127238:[[53,44],256],127239:[[54,44],256],127240:[[55,44],256],127241:[[56,44],256],127242:[[57,44],256],127248:[[40,65,41],256],127249:[[40,66,41],256],127250:[[40,67,41],256],127251:[[40,68,41],256],127252:[[40,69,41],256],127253:[[40,70,41],256],127254:[[40,71,41],256],127255:[[40,72,41],256],127256:[[40,73,41],256],127257:[[40,74,41],256],127258:[[40,75,41],256],127259:[[40,76,41],256],127260:[[40,77,41],256],127261:[[40,78,41],256],127262:[[40,79,41],256],127263:[[40,80,41],256],127264:[[40,81,41],256],127265:[[40,82,41],256],127266:[[40,83,41],256],127267:[[40,84,41],256],127268:[[40,85,41],256],127269:[[40,86,41],256],127270:[[40,87,41],256],127271:[[40,88,41],256],127272:[[40,89,41],256],127273:[[40,90,41],256],127274:[[12308,83,12309],256],127275:[[67],256],127276:[[82],256],127277:[[67,68],256],127278:[[87,90],256],127280:[[65],256],127281:[[66],256],127282:[[67],256],127283:[[68],256],127284:[[69],256],127285:[[70],256],127286:[[71],256],127287:[[72],256],127288:[[73],256],127289:[[74],256],127290:[[75],256],127291:[[76],256],127292:[[77],256],127293:[[78],256],127294:[[79],256],127295:[[80],256],127296:[[81],256],127297:[[82],256],127298:[[83],256],127299:[[84],256],127300:[[85],256],127301:[[86],256],127302:[[87],256],127303:[[88],256],127304:[[89],256],127305:[[90],256],127306:[[72,86],256],127307:[[77,86],256],127308:[[83,68],256],127309:[[83,83],256],127310:[[80,80,86],256],127311:[[87,67],256],127338:[[77,67],256],127339:[[77,68],256],127376:[[68,74],256]},
696061952:{127488:[[12411,12363],256],127489:[[12467,12467],256],127490:[[12469],256],127504:[[25163],256],127505:[[23383],256],127506:[[21452],256],127507:[[12487],256],127508:[[20108],256],127509:[[22810],256],127510:[[35299],256],127511:[[22825],256],127512:[[20132],256],127513:[[26144],256],127514:[[28961],256],127515:[[26009],256],127516:[[21069],256],127517:[[24460],256],127518:[[20877],256],127519:[[26032],256],127520:[[21021],256],127521:[[32066],256],127522:[[29983],256],127523:[[36009],256],127524:[[22768],256],127525:[[21561],256],127526:[[28436],256],127527:[[25237],256],127528:[[25429],256],127529:[[19968],256],127530:[[19977],256],127531:[[36938],256],127532:[[24038],256],127533:[[20013],256],127534:[[21491],256],127535:[[25351],256],127536:[[36208],256],127537:[[25171],256],127538:[[31105],256],127539:[[31354],256],127540:[[21512],256],127541:[[28288],256],127542:[[26377],256],127543:[[26376],256],127544:[[30003],256],127545:[[21106],256],127546:[[21942],256],127552:[[12308,26412,12309],256],127553:[[12308,19977,12309],256],127554:[[12308,20108,12309],256],127555:[[12308,23433,12309],256],127556:[[12308,28857,12309],256],127557:[[12308,25171,12309],256],127558:[[12308,30423,12309],256],127559:[[12308,21213,12309],256],127560:[[12308,25943,12309],256],127568:[[24471],256],127569:[[21487],256]},
696163488:{194560:[[20029]],194561:[[20024]],194562:[[20033]],194563:[[131362]],194564:[[20320]],194565:[[20398]],194566:[[20411]],194567:[[20482]],194568:[[20602]],194569:[[20633]],194570:[[20711]],194571:[[20687]],194572:[[13470]],194573:[[132666]],194574:[[20813]],194575:[[20820]],194576:[[20836]],194577:[[20855]],194578:[[132380]],194579:[[13497]],194580:[[20839]],194581:[[20877]],194582:[[132427]],194583:[[20887]],194584:[[20900]],194585:[[20172]],194586:[[20908]],194587:[[20917]],194588:[[168415]],194589:[[20981]],194590:[[20995]],194591:[[13535]],194592:[[21051]],194593:[[21062]],194594:[[21106]],194595:[[21111]],194596:[[13589]],194597:[[21191]],194598:[[21193]],194599:[[21220]],194600:[[21242]],194601:[[21253]],194602:[[21254]],194603:[[21271]],194604:[[21321]],194605:[[21329]],194606:[[21338]],194607:[[21363]],194608:[[21373]],194609:[[21375]],194610:[[21375]],194611:[[21375]],194612:[[133676]],194613:[[28784]],194614:[[21450]],194615:[[21471]],194616:[[133987]],194617:[[21483]],194618:[[21489]],194619:[[21510]],194620:[[21662]],194621:[[21560]],194622:[[21576]],194623:[[21608]],194624:[[21666]],194625:[[21750]],194626:[[21776]],194627:[[21843]],194628:[[21859]],194629:[[21892]],194630:[[21892]],194631:[[21913]],194632:[[21931]],194633:[[21939]],194634:[[21954]],194635:[[22294]],194636:[[22022]],194637:[[22295]],194638:[[22097]],194639:[[22132]],194640:[[20999]],194641:[[22766]],194642:[[22478]],194643:[[22516]],194644:[[22541]],194645:[[22411]],194646:[[22578]],194647:[[22577]],194648:[[22700]],194649:[[136420]],194650:[[22770]],194651:[[22775]],194652:[[22790]],194653:[[22810]],194654:[[22818]],194655:[[22882]],194656:[[136872]],194657:[[136938]],194658:[[23020]],194659:[[23067]],194660:[[23079]],194661:[[23000]],194662:[[23142]],194663:[[14062]],194664:[[14076]],194665:[[23304]],194666:[[23358]],194667:[[23358]],194668:[[137672]],194669:[[23491]],194670:[[23512]],194671:[[23527]],194672:[[23539]],194673:[[138008]],194674:[[23551]],194675:[[23558]],194676:[[24403]],194677:[[23586]],194678:[[14209]],194679:[[23648]],194680:[[23662]],194681:[[23744]],194682:[[23693]],194683:[[138724]],194684:[[23875]],194685:[[138726]],194686:[[23918]],194687:[[23915]],194688:[[23932]],194689:[[24033]],194690:[[24034]],194691:[[14383]],194692:[[24061]],194693:[[24104]],194694:[[24125]],194695:[[24169]],194696:[[14434]],194697:[[139651]],194698:[[14460]],194699:[[24240]],194700:[[24243]],194701:[[24246]],194702:[[24266]],194703:[[172946]],194704:[[24318]],194705:[[140081]],194706:[[140081]],194707:[[33281]],194708:[[24354]],194709:[[24354]],194710:[[14535]],194711:[[144056]],194712:[[156122]],194713:[[24418]],194714:[[24427]],194715:[[14563]],194716:[[24474]],194717:[[24525]],194718:[[24535]],194719:[[24569]],194720:[[24705]],194721:[[14650]],194722:[[14620]],194723:[[24724]],194724:[[141012]],194725:[[24775]],194726:[[24904]],194727:[[24908]],194728:[[24910]],194729:[[24908]],194730:[[24954]],194731:[[24974]],194732:[[25010]],194733:[[24996]],194734:[[25007]],194735:[[25054]],194736:[[25074]],194737:[[25078]],194738:[[25104]],194739:[[25115]],194740:[[25181]],194741:[[25265]],194742:[[25300]],194743:[[25424]],194744:[[142092]],194745:[[25405]],194746:[[25340]],194747:[[25448]],194748:[[25475]],194749:[[25572]],194750:[[142321]],194751:[[25634]],194752:[[25541]],194753:[[25513]],194754:[[14894]],194755:[[25705]],194756:[[25726]],194757:[[25757]],194758:[[25719]],194759:[[14956]],194760:[[25935]],194761:[[25964]],194762:[[143370]],194763:[[26083]],194764:[[26360]],194765:[[26185]],194766:[[15129]],194767:[[26257]],194768:[[15112]],194769:[[15076]],194770:[[20882]],194771:[[20885]],194772:[[26368]],194773:[[26268]],194774:[[32941]],194775:[[17369]],194776:[[26391]],194777:[[26395]],194778:[[26401]],194779:[[26462]],194780:[[26451]],194781:[[144323]],194782:[[15177]],194783:[[26618]],194784:[[26501]],194785:[[26706]],194786:[[26757]],194787:[[144493]],194788:[[26766]],194789:[[26655]],194790:[[26900]],194791:[[15261]],194792:[[26946]],194793:[[27043]],194794:[[27114]],194795:[[27304]],194796:[[145059]],194797:[[27355]],194798:[[15384]],194799:[[27425]],194800:[[145575]],194801:[[27476]],194802:[[15438]],194803:[[27506]],194804:[[27551]],194805:[[27578]],194806:[[27579]],194807:[[146061]],194808:[[138507]],194809:[[146170]],194810:[[27726]],194811:[[146620]],194812:[[27839]],194813:[[27853]],194814:[[27751]],194815:[[27926]]},
696263744:{63744:[[35912]],63745:[[26356]],63746:[[36554]],63747:[[36040]],63748:[[28369]],63749:[[20018]],63750:[[21477]],63751:[[40860]],63752:[[40860]],63753:[[22865]],63754:[[37329]],63755:[[21895]],63756:[[22856]],63757:[[25078]],63758:[[30313]],63759:[[32645]],63760:[[34367]],63761:[[34746]],63762:[[35064]],63763:[[37007]],63764:[[27138]],63765:[[27931]],63766:[[28889]],63767:[[29662]],63768:[[33853]],63769:[[37226]],63770:[[39409]],63771:[[20098]],63772:[[21365]],63773:[[27396]],63774:[[29211]],63775:[[34349]],63776:[[40478]],63777:[[23888]],63778:[[28651]],63779:[[34253]],63780:[[35172]],63781:[[25289]],63782:[[33240]],63783:[[34847]],63784:[[24266]],63785:[[26391]],63786:[[28010]],63787:[[29436]],63788:[[37070]],63789:[[20358]],63790:[[20919]],63791:[[21214]],63792:[[25796]],63793:[[27347]],63794:[[29200]],63795:[[30439]],63796:[[32769]],63797:[[34310]],63798:[[34396]],63799:[[36335]],63800:[[38706]],63801:[[39791]],63802:[[40442]],63803:[[30860]],63804:[[31103]],63805:[[32160]],63806:[[33737]],63807:[[37636]],63808:[[40575]],63809:[[35542]],63810:[[22751]],63811:[[24324]],63812:[[31840]],63813:[[32894]],63814:[[29282]],63815:[[30922]],63816:[[36034]],63817:[[38647]],63818:[[22744]],63819:[[23650]],63820:[[27155]],63821:[[28122]],63822:[[28431]],63823:[[32047]],63824:[[32311]],63825:[[38475]],63826:[[21202]],63827:[[32907]],63828:[[20956]],63829:[[20940]],63830:[[31260]],63831:[[32190]],63832:[[33777]],63833:[[38517]],63834:[[35712]],63835:[[25295]],63836:[[27138]],63837:[[35582]],63838:[[20025]],63839:[[23527]],63840:[[24594]],63841:[[29575]],63842:[[30064]],63843:[[21271]],63844:[[30971]],63845:[[20415]],63846:[[24489]],63847:[[19981]],63848:[[27852]],63849:[[25976]],63850:[[32034]],63851:[[21443]],63852:[[22622]],63853:[[30465]],63854:[[33865]],63855:[[35498]],63856:[[27578]],63857:[[36784]],63858:[[27784]],63859:[[25342]],63860:[[33509]],63861:[[25504]],63862:[[30053]],63863:[[20142]],63864:[[20841]],63865:[[20937]],63866:[[26753]],63867:[[31975]],63868:[[33391]],63869:[[35538]],63870:[[37327]],63871:[[21237]],63872:[[21570]],63873:[[22899]],63874:[[24300]],63875:[[26053]],63876:[[28670]],63877:[[31018]],63878:[[38317]],63879:[[39530]],63880:[[40599]],63881:[[40654]],63882:[[21147]],63883:[[26310]],63884:[[27511]],63885:[[36706]],63886:[[24180]],63887:[[24976]],63888:[[25088]],63889:[[25754]],63890:[[28451]],63891:[[29001]],63892:[[29833]],63893:[[31178]],63894:[[32244]],63895:[[32879]],63896:[[36646]],63897:[[34030]],63898:[[36899]],63899:[[37706]],63900:[[21015]],63901:[[21155]],63902:[[21693]],63903:[[28872]],63904:[[35010]],63905:[[35498]],63906:[[24265]],63907:[[24565]],63908:[[25467]],63909:[[27566]],63910:[[31806]],63911:[[29557]],63912:[[20196]],63913:[[22265]],63914:[[23527]],63915:[[23994]],63916:[[24604]],63917:[[29618]],63918:[[29801]],63919:[[32666]],63920:[[32838]],63921:[[37428]],63922:[[38646]],63923:[[38728]],63924:[[38936]],63925:[[20363]],63926:[[31150]],63927:[[37300]],63928:[[38584]],63929:[[24801]],63930:[[20102]],63931:[[20698]],63932:[[23534]],63933:[[23615]],63934:[[26009]],63935:[[27138]],63936:[[29134]],63937:[[30274]],63938:[[34044]],63939:[[36988]],63940:[[40845]],63941:[[26248]],63942:[[38446]],63943:[[21129]],63944:[[26491]],63945:[[26611]],63946:[[27969]],63947:[[28316]],63948:[[29705]],63949:[[30041]],63950:[[30827]],63951:[[32016]],63952:[[39006]],63953:[[20845]],63954:[[25134]],63955:[[38520]],63956:[[20523]],63957:[[23833]],63958:[[28138]],63959:[[36650]],63960:[[24459]],63961:[[24900]],63962:[[26647]],63963:[[29575]],63964:[[38534]],63965:[[21033]],63966:[[21519]],63967:[[23653]],63968:[[26131]],63969:[[26446]],63970:[[26792]],63971:[[27877]],63972:[[29702]],63973:[[30178]],63974:[[32633]],63975:[[35023]],63976:[[35041]],63977:[[37324]],63978:[[38626]],63979:[[21311]],63980:[[28346]],63981:[[21533]],63982:[[29136]],63983:[[29848]],63984:[[34298]],63985:[[38563]],63986:[[40023]],63987:[[40607]],63988:[[26519]],63989:[[28107]],63990:[[33256]],63991:[[31435]],63992:[[31520]],63993:[[31890]],63994:[[29376]],63995:[[28825]],63996:[[35672]],63997:[[20160]],63998:[[33590]],63999:[[21050]],194816:[[27966]],194817:[[28023]],194818:[[27969]],194819:[[28009]],194820:[[28024]],194821:[[28037]],194822:[[146718]],194823:[[27956]],194824:[[28207]],194825:[[28270]],194826:[[15667]],194827:[[28363]],194828:[[28359]],194829:[[147153]],194830:[[28153]],194831:[[28526]],194832:[[147294]],194833:[[147342]],194834:[[28614]],194835:[[28729]],194836:[[28702]],194837:[[28699]],194838:[[15766]],194839:[[28746]],194840:[[28797]],194841:[[28791]],194842:[[28845]],194843:[[132389]],194844:[[28997]],194845:[[148067]],194846:[[29084]],194847:[[148395]],194848:[[29224]],194849:[[29237]],194850:[[29264]],194851:[[149000]],194852:[[29312]],194853:[[29333]],194854:[[149301]],194855:[[149524]],194856:[[29562]],194857:[[29579]],194858:[[16044]],194859:[[29605]],194860:[[16056]],194861:[[16056]],194862:[[29767]],194863:[[29788]],194864:[[29809]],194865:[[29829]],194866:[[29898]],194867:[[16155]],194868:[[29988]],194869:[[150582]],194870:[[30014]],194871:[[150674]],194872:[[30064]],194873:[[139679]],194874:[[30224]],194875:[[151457]],194876:[[151480]],194877:[[151620]],194878:[[16380]],194879:[[16392]],194880:[[30452]],194881:[[151795]],194882:[[151794]],194883:[[151833]],194884:[[151859]],194885:[[30494]],194886:[[30495]],194887:[[30495]],194888:[[30538]],194889:[[16441]],194890:[[30603]],194891:[[16454]],194892:[[16534]],194893:[[152605]],194894:[[30798]],194895:[[30860]],194896:[[30924]],194897:[[16611]],194898:[[153126]],194899:[[31062]],194900:[[153242]],194901:[[153285]],194902:[[31119]],194903:[[31211]],194904:[[16687]],194905:[[31296]],194906:[[31306]],194907:[[31311]],194908:[[153980]],194909:[[154279]],194910:[[154279]],194911:[[31470]],194912:[[16898]],194913:[[154539]],194914:[[31686]],194915:[[31689]],194916:[[16935]],194917:[[154752]],194918:[[31954]],194919:[[17056]],194920:[[31976]],194921:[[31971]],194922:[[32000]],194923:[[155526]],194924:[[32099]],194925:[[17153]],194926:[[32199]],194927:[[32258]],194928:[[32325]],194929:[[17204]],194930:[[156200]],194931:[[156231]],194932:[[17241]],194933:[[156377]],194934:[[32634]],194935:[[156478]],194936:[[32661]],194937:[[32762]],194938:[[32773]],194939:[[156890]],194940:[[156963]],194941:[[32864]],194942:[[157096]],194943:[[32880]],194944:[[144223]],194945:[[17365]],194946:[[32946]],194947:[[33027]],194948:[[17419]],194949:[[33086]],194950:[[23221]],194951:[[157607]],194952:[[157621]],194953:[[144275]],194954:[[144284]],194955:[[33281]],194956:[[33284]],194957:[[36766]],194958:[[17515]],194959:[[33425]],194960:[[33419]],194961:[[33437]],194962:[[21171]],194963:[[33457]],194964:[[33459]],194965:[[33469]],194966:[[33510]],194967:[[158524]],194968:[[33509]],194969:[[33565]],194970:[[33635]],194971:[[33709]],194972:[[33571]],194973:[[33725]],194974:[[33767]],194975:[[33879]],194976:[[33619]],194977:[[33738]],194978:[[33740]],194979:[[33756]],194980:[[158774]],194981:[[159083]],194982:[[158933]],194983:[[17707]],194984:[[34033]],194985:[[34035]],194986:[[34070]],194987:[[160714]],194988:[[34148]],194989:[[159532]],194990:[[17757]],194991:[[17761]],194992:[[159665]],194993:[[159954]],194994:[[17771]],194995:[[34384]],194996:[[34396]],194997:[[34407]],194998:[[34409]],194999:[[34473]],195000:[[34440]],195001:[[34574]],195002:[[34530]],195003:[[34681]],195004:[[34600]],195005:[[34667]],195006:[[34694]],195007:[[17879]],195008:[[34785]],195009:[[34817]],195010:[[17913]],195011:[[34912]],195012:[[34915]],195013:[[161383]],195014:[[35031]],195015:[[35038]],195016:[[17973]],195017:[[35066]],195018:[[13499]],195019:[[161966]],195020:[[162150]],195021:[[18110]],195022:[[18119]],195023:[[35488]],195024:[[35565]],195025:[[35722]],195026:[[35925]],195027:[[162984]],195028:[[36011]],195029:[[36033]],195030:[[36123]],195031:[[36215]],195032:[[163631]],195033:[[133124]],195034:[[36299]],195035:[[36284]],195036:[[36336]],195037:[[133342]],195038:[[36564]],195039:[[36664]],195040:[[165330]],195041:[[165357]],195042:[[37012]],195043:[[37105]],195044:[[37137]],195045:[[165678]],195046:[[37147]],195047:[[37432]],195048:[[37591]],195049:[[37592]],195050:[[37500]],195051:[[37881]],195052:[[37909]],195053:[[166906]],195054:[[38283]],195055:[[18837]],195056:[[38327]],195057:[[167287]],195058:[[18918]],195059:[[38595]],195060:[[23986]],195061:[[38691]],195062:[[168261]],195063:[[168474]],195064:[[19054]],195065:[[19062]],195066:[[38880]],195067:[[168970]],195068:[[19122]],195069:[[169110]],195070:[[38923]],195071:[[38923]]},
696364000:{64000:[[20999]],64001:[[24230]],64002:[[25299]],64003:[[31958]],64004:[[23429]],64005:[[27934]],64006:[[26292]],64007:[[36667]],64008:[[34892]],64009:[[38477]],64010:[[35211]],64011:[[24275]],64012:[[20800]],64013:[[21952]],64016:[[22618]],64018:[[26228]],64021:[[20958]],64022:[[29482]],64023:[[30410]],64024:[[31036]],64025:[[31070]],64026:[[31077]],64027:[[31119]],64028:[[38742]],64029:[[31934]],64030:[[32701]],64032:[[34322]],64034:[[35576]],64037:[[36920]],64038:[[37117]],64042:[[39151]],64043:[[39164]],64044:[[39208]],64045:[[40372]],64046:[[37086]],64047:[[38583]],64048:[[20398]],64049:[[20711]],64050:[[20813]],64051:[[21193]],64052:[[21220]],64053:[[21329]],64054:[[21917]],64055:[[22022]],64056:[[22120]],64057:[[22592]],64058:[[22696]],64059:[[23652]],64060:[[23662]],64061:[[24724]],64062:[[24936]],64063:[[24974]],64064:[[25074]],64065:[[25935]],64066:[[26082]],64067:[[26257]],64068:[[26757]],64069:[[28023]],64070:[[28186]],64071:[[28450]],64072:[[29038]],64073:[[29227]],64074:[[29730]],64075:[[30865]],64076:[[31038]],64077:[[31049]],64078:[[31048]],64079:[[31056]],64080:[[31062]],64081:[[31069]],64082:[[31117]],64083:[[31118]],64084:[[31296]],64085:[[31361]],64086:[[31680]],64087:[[32244]],64088:[[32265]],64089:[[32321]],64090:[[32626]],64091:[[32773]],64092:[[33261]],64093:[[33401]],64094:[[33401]],64095:[[33879]],64096:[[35088]],64097:[[35222]],64098:[[35585]],64099:[[35641]],64100:[[36051]],64101:[[36104]],64102:[[36790]],64103:[[36920]],64104:[[38627]],64105:[[38911]],64106:[[38971]],64107:[[24693]],64108:[[148206]],64109:[[33304]],64112:[[20006]],64113:[[20917]],64114:[[20840]],64115:[[20352]],64116:[[20805]],64117:[[20864]],64118:[[21191]],64119:[[21242]],64120:[[21917]],64121:[[21845]],64122:[[21913]],64123:[[21986]],64124:[[22618]],64125:[[22707]],64126:[[22852]],64127:[[22868]],64128:[[23138]],64129:[[23336]],64130:[[24274]],64131:[[24281]],64132:[[24425]],64133:[[24493]],64134:[[24792]],64135:[[24910]],64136:[[24840]],64137:[[24974]],64138:[[24928]],64139:[[25074]],64140:[[25140]],64141:[[25540]],64142:[[25628]],64143:[[25682]],64144:[[25942]],64145:[[26228]],64146:[[26391]],64147:[[26395]],64148:[[26454]],64149:[[27513]],64150:[[27578]],64151:[[27969]],64152:[[28379]],64153:[[28363]],64154:[[28450]],64155:[[28702]],64156:[[29038]],64157:[[30631]],64158:[[29237]],64159:[[29359]],64160:[[29482]],64161:[[29809]],64162:[[29958]],64163:[[30011]],64164:[[30237]],64165:[[30239]],64166:[[30410]],64167:[[30427]],64168:[[30452]],64169:[[30538]],64170:[[30528]],64171:[[30924]],64172:[[31409]],64173:[[31680]],64174:[[31867]],64175:[[32091]],64176:[[32244]],64177:[[32574]],64178:[[32773]],64179:[[33618]],64180:[[33775]],64181:[[34681]],64182:[[35137]],64183:[[35206]],64184:[[35222]],64185:[[35519]],64186:[[35576]],64187:[[35531]],64188:[[35585]],64189:[[35582]],64190:[[35565]],64191:[[35641]],64192:[[35722]],64193:[[36104]],64194:[[36664]],64195:[[36978]],64196:[[37273]],64197:[[37494]],64198:[[38524]],64199:[[38627]],64200:[[38742]],64201:[[38875]],64202:[[38911]],64203:[[38923]],64204:[[38971]],64205:[[39698]],64206:[[40860]],64207:[[141386]],64208:[[141380]],64209:[[144341]],64210:[[15261]],64211:[[16408]],64212:[[16441]],64213:[[152137]],64214:[[154832]],64215:[[163539]],64216:[[40771]],64217:[[40846]],195072:[[38953]],195073:[[169398]],195074:[[39138]],195075:[[19251]],195076:[[39209]],195077:[[39335]],195078:[[39362]],195079:[[39422]],195080:[[19406]],195081:[[170800]],195082:[[39698]],195083:[[40000]],195084:[[40189]],195085:[[19662]],195086:[[19693]],195087:[[40295]],195088:[[172238]],195089:[[19704]],195090:[[172293]],195091:[[172558]],195092:[[172689]],195093:[[40635]],195094:[[19798]],195095:[[40697]],195096:[[40702]],195097:[[40709]],195098:[[40719]],195099:[[40726]],195100:[[40763]],195101:[[173568]]},
696464256:{64256:[[102,102],256],64257:[[102,105],256],64258:[[102,108],256],64259:[[102,102,105],256],64260:[[102,102,108],256],64261:[[383,116],256],64262:[[115,116],256],64275:[[1396,1398],256],64276:[[1396,1381],256],64277:[[1396,1387],256],64278:[[1406,1398],256],64279:[[1396,1389],256],64285:[[1497,1460],512],64286:[,26],64287:[[1522,1463],512],64288:[[1506],256],64289:[[1488],256],64290:[[1491],256],64291:[[1492],256],64292:[[1499],256],64293:[[1500],256],64294:[[1501],256],64295:[[1512],256],64296:[[1514],256],64297:[[43],256],64298:[[1513,1473],512],64299:[[1513,1474],512],64300:[[64329,1473],512],64301:[[64329,1474],512],64302:[[1488,1463],512],64303:[[1488,1464],512],64304:[[1488,1468],512],64305:[[1489,1468],512],64306:[[1490,1468],512],64307:[[1491,1468],512],64308:[[1492,1468],512],64309:[[1493,1468],512],64310:[[1494,1468],512],64312:[[1496,1468],512],64313:[[1497,1468],512],64314:[[1498,1468],512],64315:[[1499,1468],512],64316:[[1500,1468],512],64318:[[1502,1468],512],64320:[[1504,1468],512],64321:[[1505,1468],512],64323:[[1507,1468],512],64324:[[1508,1468],512],64326:[[1510,1468],512],64327:[[1511,1468],512],64328:[[1512,1468],512],64329:[[1513,1468],512],64330:[[1514,1468],512],64331:[[1493,1465],512],64332:[[1489,1471],512],64333:[[1499,1471],512],64334:[[1508,1471],512],64335:[[1488,1500],256],64336:[[1649],256],64337:[[1649],256],64338:[[1659],256],64339:[[1659],256],64340:[[1659],256],64341:[[1659],256],64342:[[1662],256],64343:[[1662],256],64344:[[1662],256],64345:[[1662],256],64346:[[1664],256],64347:[[1664],256],64348:[[1664],256],64349:[[1664],256],64350:[[1658],256],64351:[[1658],256],64352:[[1658],256],64353:[[1658],256],64354:[[1663],256],64355:[[1663],256],64356:[[1663],256],64357:[[1663],256],64358:[[1657],256],64359:[[1657],256],64360:[[1657],256],64361:[[1657],256],64362:[[1700],256],64363:[[1700],256],64364:[[1700],256],64365:[[1700],256],64366:[[1702],256],64367:[[1702],256],64368:[[1702],256],64369:[[1702],256],64370:[[1668],256],64371:[[1668],256],64372:[[1668],256],64373:[[1668],256],64374:[[1667],256],64375:[[1667],256],64376:[[1667],256],64377:[[1667],256],64378:[[1670],256],64379:[[1670],256],64380:[[1670],256],64381:[[1670],256],64382:[[1671],256],64383:[[1671],256],64384:[[1671],256],64385:[[1671],256],64386:[[1677],256],64387:[[1677],256],64388:[[1676],256],64389:[[1676],256],64390:[[1678],256],64391:[[1678],256],64392:[[1672],256],64393:[[1672],256],64394:[[1688],256],64395:[[1688],256],64396:[[1681],256],64397:[[1681],256],64398:[[1705],256],64399:[[1705],256],64400:[[1705],256],64401:[[1705],256],64402:[[1711],256],64403:[[1711],256],64404:[[1711],256],64405:[[1711],256],64406:[[1715],256],64407:[[1715],256],64408:[[1715],256],64409:[[1715],256],64410:[[1713],256],64411:[[1713],256],64412:[[1713],256],64413:[[1713],256],64414:[[1722],256],64415:[[1722],256],64416:[[1723],256],64417:[[1723],256],64418:[[1723],256],64419:[[1723],256],64420:[[1728],256],64421:[[1728],256],64422:[[1729],256],64423:[[1729],256],64424:[[1729],256],64425:[[1729],256],64426:[[1726],256],64427:[[1726],256],64428:[[1726],256],64429:[[1726],256],64430:[[1746],256],64431:[[1746],256],64432:[[1747],256],64433:[[1747],256],64467:[[1709],256],64468:[[1709],256],64469:[[1709],256],64470:[[1709],256],64471:[[1735],256],64472:[[1735],256],64473:[[1734],256],64474:[[1734],256],64475:[[1736],256],64476:[[1736],256],64477:[[1655],256],64478:[[1739],256],64479:[[1739],256],64480:[[1733],256],64481:[[1733],256],64482:[[1737],256],64483:[[1737],256],64484:[[1744],256],64485:[[1744],256],64486:[[1744],256],64487:[[1744],256],64488:[[1609],256],64489:[[1609],256],64490:[[1574,1575],256],64491:[[1574,1575],256],64492:[[1574,1749],256],64493:[[1574,1749],256],64494:[[1574,1608],256],64495:[[1574,1608],256],64496:[[1574,1735],256],64497:[[1574,1735],256],64498:[[1574,1734],256],64499:[[1574,1734],256],64500:[[1574,1736],256],64501:[[1574,1736],256],64502:[[1574,1744],256],64503:[[1574,1744],256],64504:[[1574,1744],256],64505:[[1574,1609],256],64506:[[1574,1609],256],64507:[[1574,1609],256],64508:[[1740],256],64509:[[1740],256],64510:[[1740],256],64511:[[1740],256]},
696564512:{64512:[[1574,1580],256],64513:[[1574,1581],256],64514:[[1574,1605],256],64515:[[1574,1609],256],64516:[[1574,1610],256],64517:[[1576,1580],256],64518:[[1576,1581],256],64519:[[1576,1582],256],64520:[[1576,1605],256],64521:[[1576,1609],256],64522:[[1576,1610],256],64523:[[1578,1580],256],64524:[[1578,1581],256],64525:[[1578,1582],256],64526:[[1578,1605],256],64527:[[1578,1609],256],64528:[[1578,1610],256],64529:[[1579,1580],256],64530:[[1579,1605],256],64531:[[1579,1609],256],64532:[[1579,1610],256],64533:[[1580,1581],256],64534:[[1580,1605],256],64535:[[1581,1580],256],64536:[[1581,1605],256],64537:[[1582,1580],256],64538:[[1582,1581],256],64539:[[1582,1605],256],64540:[[1587,1580],256],64541:[[1587,1581],256],64542:[[1587,1582],256],64543:[[1587,1605],256],64544:[[1589,1581],256],64545:[[1589,1605],256],64546:[[1590,1580],256],64547:[[1590,1581],256],64548:[[1590,1582],256],64549:[[1590,1605],256],64550:[[1591,1581],256],64551:[[1591,1605],256],64552:[[1592,1605],256],64553:[[1593,1580],256],64554:[[1593,1605],256],64555:[[1594,1580],256],64556:[[1594,1605],256],64557:[[1601,1580],256],64558:[[1601,1581],256],64559:[[1601,1582],256],64560:[[1601,1605],256],64561:[[1601,1609],256],64562:[[1601,1610],256],64563:[[1602,1581],256],64564:[[1602,1605],256],64565:[[1602,1609],256],64566:[[1602,1610],256],64567:[[1603,1575],256],64568:[[1603,1580],256],64569:[[1603,1581],256],64570:[[1603,1582],256],64571:[[1603,1604],256],64572:[[1603,1605],256],64573:[[1603,1609],256],64574:[[1603,1610],256],64575:[[1604,1580],256],64576:[[1604,1581],256],64577:[[1604,1582],256],64578:[[1604,1605],256],64579:[[1604,1609],256],64580:[[1604,1610],256],64581:[[1605,1580],256],64582:[[1605,1581],256],64583:[[1605,1582],256],64584:[[1605,1605],256],64585:[[1605,1609],256],64586:[[1605,1610],256],64587:[[1606,1580],256],64588:[[1606,1581],256],64589:[[1606,1582],256],64590:[[1606,1605],256],64591:[[1606,1609],256],64592:[[1606,1610],256],64593:[[1607,1580],256],64594:[[1607,1605],256],64595:[[1607,1609],256],64596:[[1607,1610],256],64597:[[1610,1580],256],64598:[[1610,1581],256],64599:[[1610,1582],256],64600:[[1610,1605],256],64601:[[1610,1609],256],64602:[[1610,1610],256],64603:[[1584,1648],256],64604:[[1585,1648],256],64605:[[1609,1648],256],64606:[[32,1612,1617],256],64607:[[32,1613,1617],256],64608:[[32,1614,1617],256],64609:[[32,1615,1617],256],64610:[[32,1616,1617],256],64611:[[32,1617,1648],256],64612:[[1574,1585],256],64613:[[1574,1586],256],64614:[[1574,1605],256],64615:[[1574,1606],256],64616:[[1574,1609],256],64617:[[1574,1610],256],64618:[[1576,1585],256],64619:[[1576,1586],256],64620:[[1576,1605],256],64621:[[1576,1606],256],64622:[[1576,1609],256],64623:[[1576,1610],256],64624:[[1578,1585],256],64625:[[1578,1586],256],64626:[[1578,1605],256],64627:[[1578,1606],256],64628:[[1578,1609],256],64629:[[1578,1610],256],64630:[[1579,1585],256],64631:[[1579,1586],256],64632:[[1579,1605],256],64633:[[1579,1606],256],64634:[[1579,1609],256],64635:[[1579,1610],256],64636:[[1601,1609],256],64637:[[1601,1610],256],64638:[[1602,1609],256],64639:[[1602,1610],256],64640:[[1603,1575],256],64641:[[1603,1604],256],64642:[[1603,1605],256],64643:[[1603,1609],256],64644:[[1603,1610],256],64645:[[1604,1605],256],64646:[[1604,1609],256],64647:[[1604,1610],256],64648:[[1605,1575],256],64649:[[1605,1605],256],64650:[[1606,1585],256],64651:[[1606,1586],256],64652:[[1606,1605],256],64653:[[1606,1606],256],64654:[[1606,1609],256],64655:[[1606,1610],256],64656:[[1609,1648],256],64657:[[1610,1585],256],64658:[[1610,1586],256],64659:[[1610,1605],256],64660:[[1610,1606],256],64661:[[1610,1609],256],64662:[[1610,1610],256],64663:[[1574,1580],256],64664:[[1574,1581],256],64665:[[1574,1582],256],64666:[[1574,1605],256],64667:[[1574,1607],256],64668:[[1576,1580],256],64669:[[1576,1581],256],64670:[[1576,1582],256],64671:[[1576,1605],256],64672:[[1576,1607],256],64673:[[1578,1580],256],64674:[[1578,1581],256],64675:[[1578,1582],256],64676:[[1578,1605],256],64677:[[1578,1607],256],64678:[[1579,1605],256],64679:[[1580,1581],256],64680:[[1580,1605],256],64681:[[1581,1580],256],64682:[[1581,1605],256],64683:[[1582,1580],256],64684:[[1582,1605],256],64685:[[1587,1580],256],64686:[[1587,1581],256],64687:[[1587,1582],256],64688:[[1587,1605],256],64689:[[1589,1581],256],64690:[[1589,1582],256],64691:[[1589,1605],256],64692:[[1590,1580],256],64693:[[1590,1581],256],64694:[[1590,1582],256],64695:[[1590,1605],256],64696:[[1591,1581],256],64697:[[1592,1605],256],64698:[[1593,1580],256],64699:[[1593,1605],256],64700:[[1594,1580],256],64701:[[1594,1605],256],64702:[[1601,1580],256],64703:[[1601,1581],256],64704:[[1601,1582],256],64705:[[1601,1605],256],64706:[[1602,1581],256],64707:[[1602,1605],256],64708:[[1603,1580],256],64709:[[1603,1581],256],64710:[[1603,1582],256],64711:[[1603,1604],256],64712:[[1603,1605],256],64713:[[1604,1580],256],64714:[[1604,1581],256],64715:[[1604,1582],256],64716:[[1604,1605],256],64717:[[1604,1607],256],64718:[[1605,1580],256],64719:[[1605,1581],256],64720:[[1605,1582],256],64721:[[1605,1605],256],64722:[[1606,1580],256],64723:[[1606,1581],256],64724:[[1606,1582],256],64725:[[1606,1605],256],64726:[[1606,1607],256],64727:[[1607,1580],256],64728:[[1607,1605],256],64729:[[1607,1648],256],64730:[[1610,1580],256],64731:[[1610,1581],256],64732:[[1610,1582],256],64733:[[1610,1605],256],64734:[[1610,1607],256],64735:[[1574,1605],256],64736:[[1574,1607],256],64737:[[1576,1605],256],64738:[[1576,1607],256],64739:[[1578,1605],256],64740:[[1578,1607],256],64741:[[1579,1605],256],64742:[[1579,1607],256],64743:[[1587,1605],256],64744:[[1587,1607],256],64745:[[1588,1605],256],64746:[[1588,1607],256],64747:[[1603,1604],256],64748:[[1603,1605],256],64749:[[1604,1605],256],64750:[[1606,1605],256],64751:[[1606,1607],256],64752:[[1610,1605],256],64753:[[1610,1607],256],64754:[[1600,1614,1617],256],64755:[[1600,1615,1617],256],64756:[[1600,1616,1617],256],64757:[[1591,1609],256],64758:[[1591,1610],256],64759:[[1593,1609],256],64760:[[1593,1610],256],64761:[[1594,1609],256],64762:[[1594,1610],256],64763:[[1587,1609],256],64764:[[1587,1610],256],64765:[[1588,1609],256],64766:[[1588,1610],256],64767:[[1581,1609],256]},
696664768:{64768:[[1581,1610],256],64769:[[1580,1609],256],64770:[[1580,1610],256],64771:[[1582,1609],256],64772:[[1582,1610],256],64773:[[1589,1609],256],64774:[[1589,1610],256],64775:[[1590,1609],256],64776:[[1590,1610],256],64777:[[1588,1580],256],64778:[[1588,1581],256],64779:[[1588,1582],256],64780:[[1588,1605],256],64781:[[1588,1585],256],64782:[[1587,1585],256],64783:[[1589,1585],256],64784:[[1590,1585],256],64785:[[1591,1609],256],64786:[[1591,1610],256],64787:[[1593,1609],256],64788:[[1593,1610],256],64789:[[1594,1609],256],64790:[[1594,1610],256],64791:[[1587,1609],256],64792:[[1587,1610],256],64793:[[1588,1609],256],64794:[[1588,1610],256],64795:[[1581,1609],256],64796:[[1581,1610],256],64797:[[1580,1609],256],64798:[[1580,1610],256],64799:[[1582,1609],256],64800:[[1582,1610],256],64801:[[1589,1609],256],64802:[[1589,1610],256],64803:[[1590,1609],256],64804:[[1590,1610],256],64805:[[1588,1580],256],64806:[[1588,1581],256],64807:[[1588,1582],256],64808:[[1588,1605],256],64809:[[1588,1585],256],64810:[[1587,1585],256],64811:[[1589,1585],256],64812:[[1590,1585],256],64813:[[1588,1580],256],64814:[[1588,1581],256],64815:[[1588,1582],256],64816:[[1588,1605],256],64817:[[1587,1607],256],64818:[[1588,1607],256],64819:[[1591,1605],256],64820:[[1587,1580],256],64821:[[1587,1581],256],64822:[[1587,1582],256],64823:[[1588,1580],256],64824:[[1588,1581],256],64825:[[1588,1582],256],64826:[[1591,1605],256],64827:[[1592,1605],256],64828:[[1575,1611],256],64829:[[1575,1611],256],64848:[[1578,1580,1605],256],64849:[[1578,1581,1580],256],64850:[[1578,1581,1580],256],64851:[[1578,1581,1605],256],64852:[[1578,1582,1605],256],64853:[[1578,1605,1580],256],64854:[[1578,1605,1581],256],64855:[[1578,1605,1582],256],64856:[[1580,1605,1581],256],64857:[[1580,1605,1581],256],64858:[[1581,1605,1610],256],64859:[[1581,1605,1609],256],64860:[[1587,1581,1580],256],64861:[[1587,1580,1581],256],64862:[[1587,1580,1609],256],64863:[[1587,1605,1581],256],64864:[[1587,1605,1581],256],64865:[[1587,1605,1580],256],64866:[[1587,1605,1605],256],64867:[[1587,1605,1605],256],64868:[[1589,1581,1581],256],64869:[[1589,1581,1581],256],64870:[[1589,1605,1605],256],64871:[[1588,1581,1605],256],64872:[[1588,1581,1605],256],64873:[[1588,1580,1610],256],64874:[[1588,1605,1582],256],64875:[[1588,1605,1582],256],64876:[[1588,1605,1605],256],64877:[[1588,1605,1605],256],64878:[[1590,1581,1609],256],64879:[[1590,1582,1605],256],64880:[[1590,1582,1605],256],64881:[[1591,1605,1581],256],64882:[[1591,1605,1581],256],64883:[[1591,1605,1605],256],64884:[[1591,1605,1610],256],64885:[[1593,1580,1605],256],64886:[[1593,1605,1605],256],64887:[[1593,1605,1605],256],64888:[[1593,1605,1609],256],64889:[[1594,1605,1605],256],64890:[[1594,1605,1610],256],64891:[[1594,1605,1609],256],64892:[[1601,1582,1605],256],64893:[[1601,1582,1605],256],64894:[[1602,1605,1581],256],64895:[[1602,1605,1605],256],64896:[[1604,1581,1605],256],64897:[[1604,1581,1610],256],64898:[[1604,1581,1609],256],64899:[[1604,1580,1580],256],64900:[[1604,1580,1580],256],64901:[[1604,1582,1605],256],64902:[[1604,1582,1605],256],64903:[[1604,1605,1581],256],64904:[[1604,1605,1581],256],64905:[[1605,1581,1580],256],64906:[[1605,1581,1605],256],64907:[[1605,1581,1610],256],64908:[[1605,1580,1581],256],64909:[[1605,1580,1605],256],64910:[[1605,1582,1580],256],64911:[[1605,1582,1605],256],64914:[[1605,1580,1582],256],64915:[[1607,1605,1580],256],64916:[[1607,1605,1605],256],64917:[[1606,1581,1605],256],64918:[[1606,1581,1609],256],64919:[[1606,1580,1605],256],64920:[[1606,1580,1605],256],64921:[[1606,1580,1609],256],64922:[[1606,1605,1610],256],64923:[[1606,1605,1609],256],64924:[[1610,1605,1605],256],64925:[[1610,1605,1605],256],64926:[[1576,1582,1610],256],64927:[[1578,1580,1610],256],64928:[[1578,1580,1609],256],64929:[[1578,1582,1610],256],64930:[[1578,1582,1609],256],64931:[[1578,1605,1610],256],64932:[[1578,1605,1609],256],64933:[[1580,1605,1610],256],64934:[[1580,1581,1609],256],64935:[[1580,1605,1609],256],64936:[[1587,1582,1609],256],64937:[[1589,1581,1610],256],64938:[[1588,1581,1610],256],64939:[[1590,1581,1610],256],64940:[[1604,1580,1610],256],64941:[[1604,1605,1610],256],64942:[[1610,1581,1610],256],64943:[[1610,1580,1610],256],64944:[[1610,1605,1610],256],64945:[[1605,1605,1610],256],64946:[[1602,1605,1610],256],64947:[[1606,1581,1610],256],64948:[[1602,1605,1581],256],64949:[[1604,1581,1605],256],64950:[[1593,1605,1610],256],64951:[[1603,1605,1610],256],64952:[[1606,1580,1581],256],64953:[[1605,1582,1610],256],64954:[[1604,1580,1605],256],64955:[[1603,1605,1605],256],64956:[[1604,1580,1605],256],64957:[[1606,1580,1581],256],64958:[[1580,1581,1610],256],64959:[[1581,1580,1610],256],64960:[[1605,1580,1610],256],64961:[[1601,1605,1610],256],64962:[[1576,1581,1610],256],64963:[[1603,1605,1605],256],64964:[[1593,1580,1605],256],64965:[[1589,1605,1605],256],64966:[[1587,1582,1610],256],64967:[[1606,1580,1610],256],65008:[[1589,1604,1746],256],65009:[[1602,1604,1746],256],65010:[[1575,1604,1604,1607],256],65011:[[1575,1603,1576,1585],256],65012:[[1605,1581,1605,1583],256],65013:[[1589,1604,1593,1605],256],65014:[[1585,1587,1608,1604],256],65015:[[1593,1604,1610,1607],256],65016:[[1608,1587,1604,1605],256],65017:[[1589,1604,1609],256],65018:[[1589,1604,1609,32,1575,1604,1604,1607,32,1593,1604,1610,1607,32,1608,1587,1604,1605],256],65019:[[1580,1604,32,1580,1604,1575,1604,1607],256],65020:[[1585,1740,1575,1604],256]},
696765024:{65040:[[44],256],65041:[[12289],256],65042:[[12290],256],65043:[[58],256],65044:[[59],256],65045:[[33],256],65046:[[63],256],65047:[[12310],256],65048:[[12311],256],65049:[[8230],256],65056:[,230],65057:[,230],65058:[,230],65059:[,230],65060:[,230],65061:[,230],65062:[,230],65063:[,220],65064:[,220],65065:[,220],65066:[,220],65067:[,220],65068:[,220],65069:[,220],65072:[[8229],256],65073:[[8212],256],65074:[[8211],256],65075:[[95],256],65076:[[95],256],65077:[[40],256],65078:[[41],256],65079:[[123],256],65080:[[125],256],65081:[[12308],256],65082:[[12309],256],65083:[[12304],256],65084:[[12305],256],65085:[[12298],256],65086:[[12299],256],65087:[[12296],256],65088:[[12297],256],65089:[[12300],256],65090:[[12301],256],65091:[[12302],256],65092:[[12303],256],65095:[[91],256],65096:[[93],256],65097:[[8254],256],65098:[[8254],256],65099:[[8254],256],65100:[[8254],256],65101:[[95],256],65102:[[95],256],65103:[[95],256],65104:[[44],256],65105:[[12289],256],65106:[[46],256],65108:[[59],256],65109:[[58],256],65110:[[63],256],65111:[[33],256],65112:[[8212],256],65113:[[40],256],65114:[[41],256],65115:[[123],256],65116:[[125],256],65117:[[12308],256],65118:[[12309],256],65119:[[35],256],65120:[[38],256],65121:[[42],256],65122:[[43],256],65123:[[45],256],65124:[[60],256],65125:[[62],256],65126:[[61],256],65128:[[92],256],65129:[[36],256],65130:[[37],256],65131:[[64],256],65136:[[32,1611],256],65137:[[1600,1611],256],65138:[[32,1612],256],65140:[[32,1613],256],65142:[[32,1614],256],65143:[[1600,1614],256],65144:[[32,1615],256],65145:[[1600,1615],256],65146:[[32,1616],256],65147:[[1600,1616],256],65148:[[32,1617],256],65149:[[1600,1617],256],65150:[[32,1618],256],65151:[[1600,1618],256],65152:[[1569],256],65153:[[1570],256],65154:[[1570],256],65155:[[1571],256],65156:[[1571],256],65157:[[1572],256],65158:[[1572],256],65159:[[1573],256],65160:[[1573],256],65161:[[1574],256],65162:[[1574],256],65163:[[1574],256],65164:[[1574],256],65165:[[1575],256],65166:[[1575],256],65167:[[1576],256],65168:[[1576],256],65169:[[1576],256],65170:[[1576],256],65171:[[1577],256],65172:[[1577],256],65173:[[1578],256],65174:[[1578],256],65175:[[1578],256],65176:[[1578],256],65177:[[1579],256],65178:[[1579],256],65179:[[1579],256],65180:[[1579],256],65181:[[1580],256],65182:[[1580],256],65183:[[1580],256],65184:[[1580],256],65185:[[1581],256],65186:[[1581],256],65187:[[1581],256],65188:[[1581],256],65189:[[1582],256],65190:[[1582],256],65191:[[1582],256],65192:[[1582],256],65193:[[1583],256],65194:[[1583],256],65195:[[1584],256],65196:[[1584],256],65197:[[1585],256],65198:[[1585],256],65199:[[1586],256],65200:[[1586],256],65201:[[1587],256],65202:[[1587],256],65203:[[1587],256],65204:[[1587],256],65205:[[1588],256],65206:[[1588],256],65207:[[1588],256],65208:[[1588],256],65209:[[1589],256],65210:[[1589],256],65211:[[1589],256],65212:[[1589],256],65213:[[1590],256],65214:[[1590],256],65215:[[1590],256],65216:[[1590],256],65217:[[1591],256],65218:[[1591],256],65219:[[1591],256],65220:[[1591],256],65221:[[1592],256],65222:[[1592],256],65223:[[1592],256],65224:[[1592],256],65225:[[1593],256],65226:[[1593],256],65227:[[1593],256],65228:[[1593],256],65229:[[1594],256],65230:[[1594],256],65231:[[1594],256],65232:[[1594],256],65233:[[1601],256],65234:[[1601],256],65235:[[1601],256],65236:[[1601],256],65237:[[1602],256],65238:[[1602],256],65239:[[1602],256],65240:[[1602],256],65241:[[1603],256],65242:[[1603],256],65243:[[1603],256],65244:[[1603],256],65245:[[1604],256],65246:[[1604],256],65247:[[1604],256],65248:[[1604],256],65249:[[1605],256],65250:[[1605],256],65251:[[1605],256],65252:[[1605],256],65253:[[1606],256],65254:[[1606],256],65255:[[1606],256],65256:[[1606],256],65257:[[1607],256],65258:[[1607],256],65259:[[1607],256],65260:[[1607],256],65261:[[1608],256],65262:[[1608],256],65263:[[1609],256],65264:[[1609],256],65265:[[1610],256],65266:[[1610],256],65267:[[1610],256],65268:[[1610],256],65269:[[1604,1570],256],65270:[[1604,1570],256],65271:[[1604,1571],256],65272:[[1604,1571],256],65273:[[1604,1573],256],65274:[[1604,1573],256],65275:[[1604,1575],256],65276:[[1604,1575],256]},
696865280:{65281:[[33],256],65282:[[34],256],65283:[[35],256],65284:[[36],256],65285:[[37],256],65286:[[38],256],65287:[[39],256],65288:[[40],256],65289:[[41],256],65290:[[42],256],65291:[[43],256],65292:[[44],256],65293:[[45],256],65294:[[46],256],65295:[[47],256],65296:[[48],256],65297:[[49],256],65298:[[50],256],65299:[[51],256],65300:[[52],256],65301:[[53],256],65302:[[54],256],65303:[[55],256],65304:[[56],256],65305:[[57],256],65306:[[58],256],65307:[[59],256],65308:[[60],256],65309:[[61],256],65310:[[62],256],65311:[[63],256],65312:[[64],256],65313:[[65],256],65314:[[66],256],65315:[[67],256],65316:[[68],256],65317:[[69],256],65318:[[70],256],65319:[[71],256],65320:[[72],256],65321:[[73],256],65322:[[74],256],65323:[[75],256],65324:[[76],256],65325:[[77],256],65326:[[78],256],65327:[[79],256],65328:[[80],256],65329:[[81],256],65330:[[82],256],65331:[[83],256],65332:[[84],256],65333:[[85],256],65334:[[86],256],65335:[[87],256],65336:[[88],256],65337:[[89],256],65338:[[90],256],65339:[[91],256],65340:[[92],256],65341:[[93],256],65342:[[94],256],65343:[[95],256],65344:[[96],256],65345:[[97],256],65346:[[98],256],65347:[[99],256],65348:[[100],256],65349:[[101],256],65350:[[102],256],65351:[[103],256],65352:[[104],256],65353:[[105],256],65354:[[106],256],65355:[[107],256],65356:[[108],256],65357:[[109],256],65358:[[110],256],65359:[[111],256],65360:[[112],256],65361:[[113],256],65362:[[114],256],65363:[[115],256],65364:[[116],256],65365:[[117],256],65366:[[118],256],65367:[[119],256],65368:[[120],256],65369:[[121],256],65370:[[122],256],65371:[[123],256],65372:[[124],256],65373:[[125],256],65374:[[126],256],65375:[[10629],256],65376:[[10630],256],65377:[[12290],256],65378:[[12300],256],65379:[[12301],256],65380:[[12289],256],65381:[[12539],256],65382:[[12530],256],65383:[[12449],256],65384:[[12451],256],65385:[[12453],256],65386:[[12455],256],65387:[[12457],256],65388:[[12515],256],65389:[[12517],256],65390:[[12519],256],65391:[[12483],256],65392:[[12540],256],65393:[[12450],256],65394:[[12452],256],65395:[[12454],256],65396:[[12456],256],65397:[[12458],256],65398:[[12459],256],65399:[[12461],256],65400:[[12463],256],65401:[[12465],256],65402:[[12467],256],65403:[[12469],256],65404:[[12471],256],65405:[[12473],256],65406:[[12475],256],65407:[[12477],256],65408:[[12479],256],65409:[[12481],256],65410:[[12484],256],65411:[[12486],256],65412:[[12488],256],65413:[[12490],256],65414:[[12491],256],65415:[[12492],256],65416:[[12493],256],65417:[[12494],256],65418:[[12495],256],65419:[[12498],256],65420:[[12501],256],65421:[[12504],256],65422:[[12507],256],65423:[[12510],256],65424:[[12511],256],65425:[[12512],256],65426:[[12513],256],65427:[[12514],256],65428:[[12516],256],65429:[[12518],256],65430:[[12520],256],65431:[[12521],256],65432:[[12522],256],65433:[[12523],256],65434:[[12524],256],65435:[[12525],256],65436:[[12527],256],65437:[[12531],256],65438:[[12441],256],65439:[[12442],256],65440:[[12644],256],65441:[[12593],256],65442:[[12594],256],65443:[[12595],256],65444:[[12596],256],65445:[[12597],256],65446:[[12598],256],65447:[[12599],256],65448:[[12600],256],65449:[[12601],256],65450:[[12602],256],65451:[[12603],256],65452:[[12604],256],65453:[[12605],256],65454:[[12606],256],65455:[[12607],256],65456:[[12608],256],65457:[[12609],256],65458:[[12610],256],65459:[[12611],256],65460:[[12612],256],65461:[[12613],256],65462:[[12614],256],65463:[[12615],256],65464:[[12616],256],65465:[[12617],256],65466:[[12618],256],65467:[[12619],256],65468:[[12620],256],65469:[[12621],256],65470:[[12622],256],65474:[[12623],256],65475:[[12624],256],65476:[[12625],256],65477:[[12626],256],65478:[[12627],256],65479:[[12628],256],65482:[[12629],256],65483:[[12630],256],65484:[[12631],256],65485:[[12632],256],65486:[[12633],256],65487:[[12634],256],65490:[[12635],256],65491:[[12636],256],65492:[[12637],256],65493:[[12638],256],65494:[[12639],256],65495:[[12640],256],65498:[[12641],256],65499:[[12642],256],65500:[[12643],256],65504:[[162],256],65505:[[163],256],65506:[[172],256],65507:[[175],256],65508:[[166],256],65509:[[165],256],65510:[[8361],256],65512:[[9474],256],65513:[[8592],256],65514:[[8593],256],65515:[[8594],256],65516:[[8595],256],65517:[[9632],256],65518:[[9675],256]}
6969
6970};
6971
6972 /***** Module to export */
6973 var unorm = {
6974 nfc: nfc,
6975 nfd: nfd,
6976 nfkc: nfkc,
6977 nfkd: nfkd
6978 };
6979
6980 /*globals module:true,define:true*/
6981
6982 // CommonJS
6983 if (typeof module === "object") {
6984 module.exports = unorm;
6985
6986 // AMD
6987 } else if (typeof define === "function" && define.amd) {
6988 define("unorm", function () {
6989 return unorm;
6990 });
6991
6992 // Global
6993 } else {
6994 root.unorm = unorm;
6995 }
6996
6997 /***** Export as shim for String::normalize method *****/
6998 /*
6999 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
7000
7001 21.1.3.12 String.prototype.normalize(form="NFC")
7002 When the normalize method is called with one argument form, the following steps are taken:
7003
7004 1. Let O be CheckObjectCoercible(this value).
7005 2. Let S be ToString(O).
7006 3. ReturnIfAbrupt(S).
7007 4. If form is not provided or undefined let form be "NFC".
7008 5. Let f be ToString(form).
7009 6. ReturnIfAbrupt(f).
7010 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
7011 8. Let ns be the String value is the result of normalizing S into the normalization form named by f as specified in Unicode Standard Annex #15, UnicodeNormalizatoin Forms.
7012 9. Return ns.
7013
7014 The length property of the normalize method is 0.
7015
7016 *NOTE* The normalize function is intentionally generic; it does not require that its this value be a String object. Therefore it can be transferred to other kinds of objects for use as a method.
7017 */
7018 unorm.shimApplied = false;
7019
7020 if (!String.prototype.normalize) {
7021 String.prototype.normalize = function(form) {
7022 var str = "" + this;
7023 form = form === undefined ? "NFC" : form;
7024
7025 if (form === "NFC") {
7026 return unorm.nfc(str);
7027 } else if (form === "NFD") {
7028 return unorm.nfd(str);
7029 } else if (form === "NFKC") {
7030 return unorm.nfkc(str);
7031 } else if (form === "NFKD") {
7032 return unorm.nfkd(str);
7033 } else {
7034 throw new RangeError("Invalid normalization form: " + form);
7035 }
7036 };
7037
7038 unorm.shimApplied = true;
7039 }
7040}(this));
8b095871
IC
7041</script>
7042 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
7043!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)
7044},_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))
7045},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});
7046</script>
7047 <script>/*!
7048 * Bootstrap v3.2.0 (http://getbootstrap.com)
7049 * Copyright 2011-2014 Twitter, Inc.
7050 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
7051 */
7052if("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>
7053 <script>(function() {
7054 'use strict';
7055
7056 /**
7057 * Extend an Object with another Object's properties.
7058 *
7059 * The source objects are specified as additional arguments.
7060 *
7061 * @param dst Object the object to extend.
7062 *
7063 * @return Object the final object.
7064 */
7065 var _extend = function(dst) {
7066 var sources = Array.prototype.slice.call(arguments, 1);
7067 for (var i=0; i<sources.length; ++i) {
7068 var src = sources[i];
7069 for (var p in src) {
7070 if (src.hasOwnProperty(p)) dst[p] = src[p];
7071 }
7072 }
7073 return dst;
7074 };
7075
7076
7077 /**
7078 * Defer execution of given function.
7079 * @param {Function} func
7080 */
7081 var _defer = function(func) {
7082 if (typeof setImmediate === 'function') {
7083 return setImmediate(func);
7084 } else {
7085 return setTimeout(func, 0);
7086 }
7087 };
7088
7089 /**
7090 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
7091 */
7092 var Levenshtein = {
7093 /**
7094 * Calculate levenshtein distance of the two strings.
7095 *
7096 * @param str1 String the first string.
7097 * @param str2 String the second string.
7098 * @return Integer the levenshtein distance (0 and above).
7099 */
7100 get: function(str1, str2) {
7101 // base cases
7102 if (str1 === str2) return 0;
7103 if (str1.length === 0) return str2.length;
7104 if (str2.length === 0) return str1.length;
7105
7106 // two rows
7107 var prevRow = new Array(str2.length + 1),
7108 curCol, nextCol, i, j, tmp;
7109
7110 // initialise previous row
7111 for (i=0; i<prevRow.length; ++i) {
7112 prevRow[i] = i;
7113 }
7114
7115 // calculate current row distance from previous row
7116 for (i=0; i<str1.length; ++i) {
7117 nextCol = i + 1;
7118
7119 for (j=0; j<str2.length; ++j) {
7120 curCol = nextCol;
7121
7122 // substution
7123 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7124 // insertion
7125 tmp = curCol + 1;
7126 if (nextCol > tmp) {
7127 nextCol = tmp;
7128 }
7129 // deletion
7130 tmp = prevRow[j + 1] + 1;
7131 if (nextCol > tmp) {
7132 nextCol = tmp;
7133 }
7134
7135 // copy current col value into previous (in preparation for next iteration)
7136 prevRow[j] = curCol;
7137 }
7138
7139 // copy last col value into previous (in preparation for next iteration)
7140 prevRow[j] = nextCol;
7141 }
7142
7143 return nextCol;
7144 },
7145
7146 /**
7147 * Asynchronously calculate levenshtein distance of the two strings.
7148 *
7149 * @param str1 String the first string.
7150 * @param str2 String the second string.
7151 * @param cb Function callback function with signature: function(Error err, int distance)
7152 * @param [options] Object additional options.
7153 * @param [options.progress] Function progress callback with signature: function(percentComplete)
7154 */
7155 getAsync: function(str1, str2, cb, options) {
7156 options = _extend({}, {
7157 progress: null
7158 }, options);
7159
7160 // base cases
7161 if (str1 === str2) return cb(null, 0);
7162 if (str1.length === 0) return cb(null, str2.length);
7163 if (str2.length === 0) return cb(null, str1.length);
7164
7165 // two rows
7166 var prevRow = new Array(str2.length + 1),
7167 curCol, nextCol,
7168 i, j, tmp,
7169 startTime, currentTime;
7170
7171 // initialise previous row
7172 for (i=0; i<prevRow.length; ++i) {
7173 prevRow[i] = i;
7174 }
7175
7176 nextCol = 1;
7177 i = 0;
7178 j = -1;
7179
7180 var __calculate = function() {
7181 // reset timer
7182 startTime = new Date().valueOf();
7183 currentTime = startTime;
7184
7185 // keep going until one second has elapsed
7186 while (currentTime - startTime < 1000) {
7187 // reached end of current row?
7188 if (str2.length <= (++j)) {
7189 // copy current into previous (in preparation for next iteration)
7190 prevRow[j] = nextCol;
7191
7192 // if already done all chars
7193 if (str1.length <= (++i)) {
7194 return cb(null, nextCol);
7195 }
7196 // else if we have more left to do
7197 else {
7198 nextCol = i + 1;
7199 j = 0;
7200 }
7201 }
7202
7203 // calculation
7204 curCol = nextCol;
7205
7206 // substution
7207 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7208 // insertion
7209 tmp = curCol + 1;
7210 if (nextCol > tmp) {
7211 nextCol = tmp;
7212 }
7213 // deletion
7214 tmp = prevRow[j + 1] + 1;
7215 if (nextCol > tmp) {
7216 nextCol = tmp;
7217 }
7218
7219 // copy current into previous (in preparation for next iteration)
7220 prevRow[j] = curCol;
7221
7222 // get current time
7223 currentTime = new Date().valueOf();
7224 }
7225
7226 // send a progress update?
7227 if (null !== options.progress) {
7228 try {
7229 options.progress.call(null, (i * 100.0/ str1.length));
7230 } catch (err) {
7231 return cb('Progress callback: ' + err.toString());
7232 }
7233 }
7234
7235 // next iteration
7236 _defer(__calculate);
7237 };
7238
7239 __calculate();
7240 }
7241
7242 };
7243
7244 // amd
7245 if (typeof define !== "undefined" && define !== null && define.amd) {
7246 define(function() {
7247 return Levenshtein;
7248 });
7249 }
7250 // commonjs
7251 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
7252 module.exports = Levenshtein;
7253 }
7254 // web worker
7255 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
7256 self.Levenshtein = Levenshtein;
7257 }
7258 // browser main thread
7259 else if (typeof window !== "undefined" && window !== null) {
7260 window.Levenshtein = Levenshtein;
7261 }
7262}());
7263
7264</script>
7265 <script>(function(r){r.fn.qrcode=function(h){var s;function u(a){this.mode=s;this.data=a}function o(a,c){this.typeNumber=a;this.errorCorrectLevel=c;this.modules=null;this.moduleCount=0;this.dataCache=null;this.dataList=[]}function q(a,c){if(void 0==a.length)throw Error(a.length+"/"+c);for(var d=0;d<a.length&&0==a[d];)d++;this.num=Array(a.length-d+c);for(var b=0;b<a.length-d;b++)this.num[b]=a[b+d]}function p(a,c){this.totalCount=a;this.dataCount=c}function t(){this.buffer=[];this.length=0}u.prototype={getLength:function(){return this.data.length},
7266write:function(a){for(var c=0;c<this.data.length;c++)a.put(this.data.charCodeAt(c),8)}};o.prototype={addData:function(a){this.dataList.push(new u(a));this.dataCache=null},isDark:function(a,c){if(0>a||this.moduleCount<=a||0>c||this.moduleCount<=c)throw Error(a+","+c);return this.modules[a][c]},getModuleCount:function(){return this.moduleCount},make:function(){if(1>this.typeNumber){for(var a=1,a=1;40>a;a++){for(var c=p.getRSBlocks(a,this.errorCorrectLevel),d=new t,b=0,e=0;e<c.length;e++)b+=c[e].dataCount;
7267for(e=0;e<this.dataList.length;e++)c=this.dataList[e],d.put(c.mode,4),d.put(c.getLength(),j.getLengthInBits(c.mode,a)),c.write(d);if(d.getLengthInBits()<=8*b)break}this.typeNumber=a}this.makeImpl(!1,this.getBestMaskPattern())},makeImpl:function(a,c){this.moduleCount=4*this.typeNumber+17;this.modules=Array(this.moduleCount);for(var d=0;d<this.moduleCount;d++){this.modules[d]=Array(this.moduleCount);for(var b=0;b<this.moduleCount;b++)this.modules[d][b]=null}this.setupPositionProbePattern(0,0);this.setupPositionProbePattern(this.moduleCount-
72687,0);this.setupPositionProbePattern(0,this.moduleCount-7);this.setupPositionAdjustPattern();this.setupTimingPattern();this.setupTypeInfo(a,c);7<=this.typeNumber&&this.setupTypeNumber(a);null==this.dataCache&&(this.dataCache=o.createData(this.typeNumber,this.errorCorrectLevel,this.dataList));this.mapData(this.dataCache,c)},setupPositionProbePattern:function(a,c){for(var d=-1;7>=d;d++)if(!(-1>=a+d||this.moduleCount<=a+d))for(var b=-1;7>=b;b++)-1>=c+b||this.moduleCount<=c+b||(this.modules[a+d][c+b]=
72690<=d&&6>=d&&(0==b||6==b)||0<=b&&6>=b&&(0==d||6==d)||2<=d&&4>=d&&2<=b&&4>=b?!0:!1)},getBestMaskPattern:function(){for(var a=0,c=0,d=0;8>d;d++){this.makeImpl(!0,d);var b=j.getLostPoint(this);if(0==d||a>b)a=b,c=d}return c},createMovieClip:function(a,c,d){a=a.createEmptyMovieClip(c,d);this.make();for(c=0;c<this.modules.length;c++)for(var d=1*c,b=0;b<this.modules[c].length;b++){var e=1*b;this.modules[c][b]&&(a.beginFill(0,100),a.moveTo(e,d),a.lineTo(e+1,d),a.lineTo(e+1,d+1),a.lineTo(e,d+1),a.endFill())}return a},
7270setupTimingPattern:function(){for(var a=8;a<this.moduleCount-8;a++)null==this.modules[a][6]&&(this.modules[a][6]=0==a%2);for(a=8;a<this.moduleCount-8;a++)null==this.modules[6][a]&&(this.modules[6][a]=0==a%2)},setupPositionAdjustPattern:function(){for(var a=j.getPatternPosition(this.typeNumber),c=0;c<a.length;c++)for(var d=0;d<a.length;d++){var b=a[c],e=a[d];if(null==this.modules[b][e])for(var f=-2;2>=f;f++)for(var i=-2;2>=i;i++)this.modules[b+f][e+i]=-2==f||2==f||-2==i||2==i||0==f&&0==i?!0:!1}},setupTypeNumber:function(a){for(var c=
7271j.getBCHTypeNumber(this.typeNumber),d=0;18>d;d++){var b=!a&&1==(c>>d&1);this.modules[Math.floor(d/3)][d%3+this.moduleCount-8-3]=b}for(d=0;18>d;d++)b=!a&&1==(c>>d&1),this.modules[d%3+this.moduleCount-8-3][Math.floor(d/3)]=b},setupTypeInfo:function(a,c){for(var d=j.getBCHTypeInfo(this.errorCorrectLevel<<3|c),b=0;15>b;b++){var e=!a&&1==(d>>b&1);6>b?this.modules[b][8]=e:8>b?this.modules[b+1][8]=e:this.modules[this.moduleCount-15+b][8]=e}for(b=0;15>b;b++)e=!a&&1==(d>>b&1),8>b?this.modules[8][this.moduleCount-
7272b-1]=e:9>b?this.modules[8][15-b-1+1]=e:this.modules[8][15-b-1]=e;this.modules[this.moduleCount-8][8]=!a},mapData:function(a,c){for(var d=-1,b=this.moduleCount-1,e=7,f=0,i=this.moduleCount-1;0<i;i-=2)for(6==i&&i--;;){for(var g=0;2>g;g++)if(null==this.modules[b][i-g]){var n=!1;f<a.length&&(n=1==(a[f]>>>e&1));j.getMask(c,b,i-g)&&(n=!n);this.modules[b][i-g]=n;e--; -1==e&&(f++,e=7)}b+=d;if(0>b||this.moduleCount<=b){b-=d;d=-d;break}}}};o.PAD0=236;o.PAD1=17;o.createData=function(a,c,d){for(var c=p.getRSBlocks(a,
7273c),b=new t,e=0;e<d.length;e++){var f=d[e];b.put(f.mode,4);b.put(f.getLength(),j.getLengthInBits(f.mode,a));f.write(b)}for(e=a=0;e<c.length;e++)a+=c[e].dataCount;if(b.getLengthInBits()>8*a)throw Error("code length overflow. ("+b.getLengthInBits()+">"+8*a+")");for(b.getLengthInBits()+4<=8*a&&b.put(0,4);0!=b.getLengthInBits()%8;)b.putBit(!1);for(;!(b.getLengthInBits()>=8*a);){b.put(o.PAD0,8);if(b.getLengthInBits()>=8*a)break;b.put(o.PAD1,8)}return o.createBytes(b,c)};o.createBytes=function(a,c){for(var d=
72740,b=0,e=0,f=Array(c.length),i=Array(c.length),g=0;g<c.length;g++){var n=c[g].dataCount,h=c[g].totalCount-n,b=Math.max(b,n),e=Math.max(e,h);f[g]=Array(n);for(var k=0;k<f[g].length;k++)f[g][k]=255&a.buffer[k+d];d+=n;k=j.getErrorCorrectPolynomial(h);n=(new q(f[g],k.getLength()-1)).mod(k);i[g]=Array(k.getLength()-1);for(k=0;k<i[g].length;k++)h=k+n.getLength()-i[g].length,i[g][k]=0<=h?n.get(h):0}for(k=g=0;k<c.length;k++)g+=c[k].totalCount;d=Array(g);for(k=n=0;k<b;k++)for(g=0;g<c.length;g++)k<f[g].length&&
7275(d[n++]=f[g][k]);for(k=0;k<e;k++)for(g=0;g<c.length;g++)k<i[g].length&&(d[n++]=i[g][k]);return d};s=4;for(var j={PATTERN_POSITION_TABLE:[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,
727678,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],G15:1335,G18:7973,G15_MASK:21522,getBCHTypeInfo:function(a){for(var c=a<<10;0<=j.getBCHDigit(c)-j.getBCHDigit(j.G15);)c^=j.G15<<j.getBCHDigit(c)-j.getBCHDigit(j.G15);return(a<<10|c)^j.G15_MASK},getBCHTypeNumber:function(a){for(var c=a<<12;0<=j.getBCHDigit(c)-
7277j.getBCHDigit(j.G18);)c^=j.G18<<j.getBCHDigit(c)-j.getBCHDigit(j.G18);return a<<12|c},getBCHDigit:function(a){for(var c=0;0!=a;)c++,a>>>=1;return c},getPatternPosition:function(a){return j.PATTERN_POSITION_TABLE[a-1]},getMask:function(a,c,d){switch(a){case 0:return 0==(c+d)%2;case 1:return 0==c%2;case 2:return 0==d%3;case 3:return 0==(c+d)%3;case 4:return 0==(Math.floor(c/2)+Math.floor(d/3))%2;case 5:return 0==c*d%2+c*d%3;case 6:return 0==(c*d%2+c*d%3)%2;case 7:return 0==(c*d%3+(c+d)%2)%2;default:throw Error("bad maskPattern:"+
7278a);}},getErrorCorrectPolynomial:function(a){for(var c=new q([1],0),d=0;d<a;d++)c=c.multiply(new q([1,l.gexp(d)],0));return c},getLengthInBits:function(a,c){if(1<=c&&10>c)switch(a){case 1:return 10;case 2:return 9;case s:return 8;case 8:return 8;default:throw Error("mode:"+a);}else if(27>c)switch(a){case 1:return 12;case 2:return 11;case s:return 16;case 8:return 10;default:throw Error("mode:"+a);}else if(41>c)switch(a){case 1:return 14;case 2:return 13;case s:return 16;case 8:return 12;default:throw Error("mode:"+
7279a);}else throw Error("type:"+c);},getLostPoint:function(a){for(var c=a.getModuleCount(),d=0,b=0;b<c;b++)for(var e=0;e<c;e++){for(var f=0,i=a.isDark(b,e),g=-1;1>=g;g++)if(!(0>b+g||c<=b+g))for(var h=-1;1>=h;h++)0>e+h||c<=e+h||0==g&&0==h||i==a.isDark(b+g,e+h)&&f++;5<f&&(d+=3+f-5)}for(b=0;b<c-1;b++)for(e=0;e<c-1;e++)if(f=0,a.isDark(b,e)&&f++,a.isDark(b+1,e)&&f++,a.isDark(b,e+1)&&f++,a.isDark(b+1,e+1)&&f++,0==f||4==f)d+=3;for(b=0;b<c;b++)for(e=0;e<c-6;e++)a.isDark(b,e)&&!a.isDark(b,e+1)&&a.isDark(b,e+
72802)&&a.isDark(b,e+3)&&a.isDark(b,e+4)&&!a.isDark(b,e+5)&&a.isDark(b,e+6)&&(d+=40);for(e=0;e<c;e++)for(b=0;b<c-6;b++)a.isDark(b,e)&&!a.isDark(b+1,e)&&a.isDark(b+2,e)&&a.isDark(b+3,e)&&a.isDark(b+4,e)&&!a.isDark(b+5,e)&&a.isDark(b+6,e)&&(d+=40);for(e=f=0;e<c;e++)for(b=0;b<c;b++)a.isDark(b,e)&&f++;a=Math.abs(100*f/c/c-50)/5;return d+10*a}},l={glog:function(a){if(1>a)throw Error("glog("+a+")");return l.LOG_TABLE[a]},gexp:function(a){for(;0>a;)a+=255;for(;256<=a;)a-=255;return l.EXP_TABLE[a]},EXP_TABLE:Array(256),
7281LOG_TABLE:Array(256)},m=0;8>m;m++)l.EXP_TABLE[m]=1<<m;for(m=8;256>m;m++)l.EXP_TABLE[m]=l.EXP_TABLE[m-4]^l.EXP_TABLE[m-5]^l.EXP_TABLE[m-6]^l.EXP_TABLE[m-8];for(m=0;255>m;m++)l.LOG_TABLE[l.EXP_TABLE[m]]=m;q.prototype={get:function(a){return this.num[a]},getLength:function(){return this.num.length},multiply:function(a){for(var c=Array(this.getLength()+a.getLength()-1),d=0;d<this.getLength();d++)for(var b=0;b<a.getLength();b++)c[d+b]^=l.gexp(l.glog(this.get(d))+l.glog(a.get(b)));return new q(c,0)},mod:function(a){if(0>
7282this.getLength()-a.getLength())return this;for(var c=l.glog(this.get(0))-l.glog(a.get(0)),d=Array(this.getLength()),b=0;b<this.getLength();b++)d[b]=this.get(b);for(b=0;b<a.getLength();b++)d[b]^=l.gexp(l.glog(a.get(b))+c);return(new q(d,0)).mod(a)}};p.RS_BLOCK_TABLE=[[1,26,19],[1,26,16],[1,26,13],[1,26,9],[1,44,34],[1,44,28],[1,44,22],[1,44,16],[1,70,55],[1,70,44],[2,35,17],[2,35,13],[1,100,80],[2,50,32],[2,50,24],[4,25,9],[1,134,108],[2,67,43],[2,33,15,2,34,16],[2,33,11,2,34,12],[2,86,68],[4,43,27],
7283[4,43,19],[4,43,15],[2,98,78],[4,49,31],[2,32,14,4,33,15],[4,39,13,1,40,14],[2,121,97],[2,60,38,2,61,39],[4,40,18,2,41,19],[4,40,14,2,41,15],[2,146,116],[3,58,36,2,59,37],[4,36,16,4,37,17],[4,36,12,4,37,13],[2,86,68,2,87,69],[4,69,43,1,70,44],[6,43,19,2,44,20],[6,43,15,2,44,16],[4,101,81],[1,80,50,4,81,51],[4,50,22,4,51,23],[3,36,12,8,37,13],[2,116,92,2,117,93],[6,58,36,2,59,37],[4,46,20,6,47,21],[7,42,14,4,43,15],[4,133,107],[8,59,37,1,60,38],[8,44,20,4,45,21],[12,33,11,4,34,12],[3,145,115,1,146,
7284116],[4,64,40,5,65,41],[11,36,16,5,37,17],[11,36,12,5,37,13],[5,109,87,1,110,88],[5,65,41,5,66,42],[5,54,24,7,55,25],[11,36,12],[5,122,98,1,123,99],[7,73,45,3,74,46],[15,43,19,2,44,20],[3,45,15,13,46,16],[1,135,107,5,136,108],[10,74,46,1,75,47],[1,50,22,15,51,23],[2,42,14,17,43,15],[5,150,120,1,151,121],[9,69,43,4,70,44],[17,50,22,1,51,23],[2,42,14,19,43,15],[3,141,113,4,142,114],[3,70,44,11,71,45],[17,47,21,4,48,22],[9,39,13,16,40,14],[3,135,107,5,136,108],[3,67,41,13,68,42],[15,54,24,5,55,25],[15,
728543,15,10,44,16],[4,144,116,4,145,117],[17,68,42],[17,50,22,6,51,23],[19,46,16,6,47,17],[2,139,111,7,140,112],[17,74,46],[7,54,24,16,55,25],[34,37,13],[4,151,121,5,152,122],[4,75,47,14,76,48],[11,54,24,14,55,25],[16,45,15,14,46,16],[6,147,117,4,148,118],[6,73,45,14,74,46],[11,54,24,16,55,25],[30,46,16,2,47,17],[8,132,106,4,133,107],[8,75,47,13,76,48],[7,54,24,22,55,25],[22,45,15,13,46,16],[10,142,114,2,143,115],[19,74,46,4,75,47],[28,50,22,6,51,23],[33,46,16,4,47,17],[8,152,122,4,153,123],[22,73,45,
72863,74,46],[8,53,23,26,54,24],[12,45,15,28,46,16],[3,147,117,10,148,118],[3,73,45,23,74,46],[4,54,24,31,55,25],[11,45,15,31,46,16],[7,146,116,7,147,117],[21,73,45,7,74,46],[1,53,23,37,54,24],[19,45,15,26,46,16],[5,145,115,10,146,116],[19,75,47,10,76,48],[15,54,24,25,55,25],[23,45,15,25,46,16],[13,145,115,3,146,116],[2,74,46,29,75,47],[42,54,24,1,55,25],[23,45,15,28,46,16],[17,145,115],[10,74,46,23,75,47],[10,54,24,35,55,25],[19,45,15,35,46,16],[17,145,115,1,146,116],[14,74,46,21,75,47],[29,54,24,19,
728755,25],[11,45,15,46,46,16],[13,145,115,6,146,116],[14,74,46,23,75,47],[44,54,24,7,55,25],[59,46,16,1,47,17],[12,151,121,7,152,122],[12,75,47,26,76,48],[39,54,24,14,55,25],[22,45,15,41,46,16],[6,151,121,14,152,122],[6,75,47,34,76,48],[46,54,24,10,55,25],[2,45,15,64,46,16],[17,152,122,4,153,123],[29,74,46,14,75,47],[49,54,24,10,55,25],[24,45,15,46,46,16],[4,152,122,18,153,123],[13,74,46,32,75,47],[48,54,24,14,55,25],[42,45,15,32,46,16],[20,147,117,4,148,118],[40,75,47,7,76,48],[43,54,24,22,55,25],[10,
728845,15,67,46,16],[19,148,118,6,149,119],[18,75,47,31,76,48],[34,54,24,34,55,25],[20,45,15,61,46,16]];p.getRSBlocks=function(a,c){var d=p.getRsBlockTable(a,c);if(void 0==d)throw Error("bad rs block @ typeNumber:"+a+"/errorCorrectLevel:"+c);for(var b=d.length/3,e=[],f=0;f<b;f++)for(var h=d[3*f+0],g=d[3*f+1],j=d[3*f+2],l=0;l<h;l++)e.push(new p(g,j));return e};p.getRsBlockTable=function(a,c){switch(c){case 1:return p.RS_BLOCK_TABLE[4*(a-1)+0];case 0:return p.RS_BLOCK_TABLE[4*(a-1)+1];case 3:return p.RS_BLOCK_TABLE[4*
7289(a-1)+2];case 2:return p.RS_BLOCK_TABLE[4*(a-1)+3]}};t.prototype={get:function(a){return 1==(this.buffer[Math.floor(a/8)]>>>7-a%8&1)},put:function(a,c){for(var d=0;d<c;d++)this.putBit(1==(a>>>c-d-1&1))},getLengthInBits:function(){return this.length},putBit:function(a){var c=Math.floor(this.length/8);this.buffer.length<=c&&this.buffer.push(0);a&&(this.buffer[c]|=128>>>this.length%8);this.length++}};"string"===typeof h&&(h={text:h});h=r.extend({},{render:"canvas",width:256,height:256,typeNumber:-1,
7290correctLevel:2,background:"#ffffff",foreground:"#000000"},h);return this.each(function(){var a;if("canvas"==h.render){a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();var c=document.createElement("canvas");c.width=h.width;c.height=h.height;for(var d=c.getContext("2d"),b=h.width/a.getModuleCount(),e=h.height/a.getModuleCount(),f=0;f<a.getModuleCount();f++)for(var i=0;i<a.getModuleCount();i++){d.fillStyle=a.isDark(f,i)?h.foreground:h.background;var g=Math.ceil((i+1)*b)-Math.floor(i*b),
7291j=Math.ceil((f+1)*b)-Math.floor(f*b);d.fillRect(Math.round(i*b),Math.round(f*e),g,j)}}else{a=new o(h.typeNumber,h.correctLevel);a.addData(h.text);a.make();c=r("<table></table>").css("width",h.width+"px").css("height",h.height+"px").css("border","0px").css("border-collapse","collapse").css("background-color",h.background);d=h.width/a.getModuleCount();b=h.height/a.getModuleCount();for(e=0;e<a.getModuleCount();e++){f=r("<tr></tr>").css("height",b+"px").appendTo(c);for(i=0;i<a.getModuleCount();i++)r("<td></td>").css("width",
7292d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
7293</script>
9987f0c1
IC
7294 <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.bitcoinjs = 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){
7295(function (global){
7296'use strict';
8b095871 7297
9987f0c1
IC
7298// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
7299// original notice:
8b095871 7300
9987f0c1
IC
7301/*!
7302 * The buffer module from node.js, for the browser.
7303 *
7304 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7305 * @license MIT
7306 */
7307function compare(a, b) {
7308 if (a === b) {
7309 return 0;
7310 }
8b095871 7311
9987f0c1
IC
7312 var x = a.length;
7313 var y = b.length;
8b095871 7314
9987f0c1
IC
7315 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
7316 if (a[i] !== b[i]) {
7317 x = a[i];
7318 y = b[i];
7319 break;
7320 }
7321 }
8b095871 7322
9987f0c1
IC
7323 if (x < y) {
7324 return -1;
8b095871 7325 }
9987f0c1
IC
7326 if (y < x) {
7327 return 1;
8b095871 7328 }
9987f0c1 7329 return 0;
8b095871 7330}
9987f0c1
IC
7331function isBuffer(b) {
7332 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
7333 return global.Buffer.isBuffer(b);
8b095871 7334 }
9987f0c1 7335 return !!(b != null && b._isBuffer);
8b095871
IC
7336}
7337
9987f0c1 7338// based on node assert, original notice:
8b095871 7339
9987f0c1
IC
7340// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
7341//
7342// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
7343//
7344// Originally from narwhal.js (http://narwhaljs.org)
7345// Copyright (c) 2009 Thomas Robinson <280north.com>
7346//
7347// Permission is hereby granted, free of charge, to any person obtaining a copy
7348// of this software and associated documentation files (the 'Software'), to
7349// deal in the Software without restriction, including without limitation the
7350// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7351// sell copies of the Software, and to permit persons to whom the Software is
7352// furnished to do so, subject to the following conditions:
7353//
7354// The above copyright notice and this permission notice shall be included in
7355// all copies or substantial portions of the Software.
7356//
7357// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
7358// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
7359// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
7360// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
7361// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
7362// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 7363
9987f0c1
IC
7364var util = require('util/');
7365var hasOwn = Object.prototype.hasOwnProperty;
7366var pSlice = Array.prototype.slice;
7367var functionsHaveNames = (function () {
7368 return function foo() {}.name === 'foo';
7369}());
7370function pToString (obj) {
7371 return Object.prototype.toString.call(obj);
8b095871 7372}
9987f0c1
IC
7373function isView(arrbuf) {
7374 if (isBuffer(arrbuf)) {
7375 return false;
7376 }
7377 if (typeof global.ArrayBuffer !== 'function') {
7378 return false;
7379 }
7380 if (typeof ArrayBuffer.isView === 'function') {
7381 return ArrayBuffer.isView(arrbuf);
7382 }
7383 if (!arrbuf) {
7384 return false;
7385 }
7386 if (arrbuf instanceof DataView) {
7387 return true;
7388 }
7389 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
7390 return true;
7391 }
7392 return false;
8b095871 7393}
9987f0c1
IC
7394// 1. The assert module provides functions that throw
7395// AssertionError's when particular conditions are not met. The
7396// assert module must conform to the following interface.
8b095871 7397
9987f0c1 7398var assert = module.exports = ok;
8b095871 7399
9987f0c1
IC
7400// 2. The AssertionError is defined in assert.
7401// new assert.AssertionError({ message: message,
7402// actual: actual,
7403// expected: expected })
8b095871 7404
9987f0c1
IC
7405var regex = /\s*function\s+([^\(\s]*)\s*/;
7406// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
7407function getName(func) {
7408 if (!util.isFunction(func)) {
7409 return;
7410 }
7411 if (functionsHaveNames) {
7412 return func.name;
7413 }
7414 var str = func.toString();
7415 var match = str.match(regex);
7416 return match && match[1];
8b095871 7417}
9987f0c1
IC
7418assert.AssertionError = function AssertionError(options) {
7419 this.name = 'AssertionError';
7420 this.actual = options.actual;
7421 this.expected = options.expected;
7422 this.operator = options.operator;
7423 if (options.message) {
7424 this.message = options.message;
7425 this.generatedMessage = false;
7426 } else {
7427 this.message = getMessage(this);
7428 this.generatedMessage = true;
7429 }
7430 var stackStartFunction = options.stackStartFunction || fail;
7431 if (Error.captureStackTrace) {
7432 Error.captureStackTrace(this, stackStartFunction);
7433 } else {
7434 // non v8 browsers so we can have a stacktrace
7435 var err = new Error();
7436 if (err.stack) {
7437 var out = err.stack;
8b095871 7438
9987f0c1
IC
7439 // try to strip useless frames
7440 var fn_name = getName(stackStartFunction);
7441 var idx = out.indexOf('\n' + fn_name);
7442 if (idx >= 0) {
7443 // once we have located the function frame
7444 // we need to strip out everything before it (and its line)
7445 var next_line = out.indexOf('\n', idx + 1);
7446 out = out.substring(next_line + 1);
7447 }
8b095871 7448
9987f0c1 7449 this.stack = out;
8b095871 7450 }
8b095871 7451 }
9987f0c1 7452};
8b095871 7453
9987f0c1
IC
7454// assert.AssertionError instanceof Error
7455util.inherits(assert.AssertionError, Error);
8b095871 7456
9987f0c1
IC
7457function truncate(s, n) {
7458 if (typeof s === 'string') {
7459 return s.length < n ? s : s.slice(0, n);
7460 } else {
7461 return s;
8b095871 7462 }
8b095871 7463}
9987f0c1
IC
7464function inspect(something) {
7465 if (functionsHaveNames || !util.isFunction(something)) {
7466 return util.inspect(something);
7467 }
7468 var rawname = getName(something);
7469 var name = rawname ? ': ' + rawname : '';
7470 return '[Function' + name + ']';
8b095871 7471}
9987f0c1
IC
7472function getMessage(self) {
7473 return truncate(inspect(self.actual), 128) + ' ' +
7474 self.operator + ' ' +
7475 truncate(inspect(self.expected), 128);
8b095871
IC
7476}
7477
9987f0c1
IC
7478// At present only the three keys mentioned above are used and
7479// understood by the spec. Implementations or sub modules can pass
7480// other keys to the AssertionError's constructor - they will be
7481// ignored.
3af2954a 7482
9987f0c1
IC
7483// 3. All of the following functions must throw an AssertionError
7484// when a corresponding condition is not met, with a message that
7485// may be undefined if not provided. All assertion methods provide
7486// both the actual and expected values to the assertion error for
7487// display purposes.
8b095871 7488
9987f0c1
IC
7489function fail(actual, expected, message, operator, stackStartFunction) {
7490 throw new assert.AssertionError({
7491 message: message,
7492 actual: actual,
7493 expected: expected,
7494 operator: operator,
7495 stackStartFunction: stackStartFunction
7496 });
8b095871
IC
7497}
7498
9987f0c1
IC
7499// EXTENSION! allows for well behaved errors defined elsewhere.
7500assert.fail = fail;
8b095871 7501
9987f0c1
IC
7502// 4. Pure assertion tests whether a value is truthy, as determined
7503// by !!guard.
7504// assert.ok(guard, message_opt);
7505// This statement is equivalent to assert.equal(true, !!guard,
7506// message_opt);. To test strictly for the value true, use
7507// assert.strictEqual(true, guard, message_opt);.
8b095871 7508
9987f0c1
IC
7509function ok(value, message) {
7510 if (!value) fail(value, true, message, '==', assert.ok);
8b095871 7511}
9987f0c1 7512assert.ok = ok;
8b095871 7513
9987f0c1
IC
7514// 5. The equality assertion tests shallow, coercive equality with
7515// ==.
7516// assert.equal(actual, expected, message_opt);
7517
7518assert.equal = function equal(actual, expected, message) {
7519 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
7520};
7521
7522// 6. The non-equality assertion tests for whether two objects are not equal
7523// with != assert.notEqual(actual, expected, message_opt);
7524
7525assert.notEqual = function notEqual(actual, expected, message) {
7526 if (actual == expected) {
7527 fail(actual, expected, message, '!=', assert.notEqual);
8b095871 7528 }
9987f0c1 7529};
8b095871 7530
9987f0c1
IC
7531// 7. The equivalence assertion tests a deep equality relation.
7532// assert.deepEqual(actual, expected, message_opt);
7533
7534assert.deepEqual = function deepEqual(actual, expected, message) {
7535 if (!_deepEqual(actual, expected, false)) {
7536 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
8b095871 7537 }
9987f0c1
IC
7538};
7539
7540assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
7541 if (!_deepEqual(actual, expected, true)) {
7542 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
7543 }
7544};
7545
7546function _deepEqual(actual, expected, strict, memos) {
7547 // 7.1. All identical values are equivalent, as determined by ===.
7548 if (actual === expected) {
7549 return true;
7550 } else if (isBuffer(actual) && isBuffer(expected)) {
7551 return compare(actual, expected) === 0;
7552
7553 // 7.2. If the expected value is a Date object, the actual value is
7554 // equivalent if it is also a Date object that refers to the same time.
7555 } else if (util.isDate(actual) && util.isDate(expected)) {
7556 return actual.getTime() === expected.getTime();
7557
7558 // 7.3 If the expected value is a RegExp object, the actual value is
7559 // equivalent if it is also a RegExp object with the same source and
7560 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
7561 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
7562 return actual.source === expected.source &&
7563 actual.global === expected.global &&
7564 actual.multiline === expected.multiline &&
7565 actual.lastIndex === expected.lastIndex &&
7566 actual.ignoreCase === expected.ignoreCase;
7567
7568 // 7.4. Other pairs that do not both pass typeof value == 'object',
7569 // equivalence is determined by ==.
7570 } else if ((actual === null || typeof actual !== 'object') &&
7571 (expected === null || typeof expected !== 'object')) {
7572 return strict ? actual === expected : actual == expected;
7573
7574 // If both values are instances of typed arrays, wrap their underlying
7575 // ArrayBuffers in a Buffer each to increase performance
7576 // This optimization requires the arrays to have the same type as checked by
7577 // Object.prototype.toString (aka pToString). Never perform binary
7578 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
7579 // bit patterns are not identical.
7580 } else if (isView(actual) && isView(expected) &&
7581 pToString(actual) === pToString(expected) &&
7582 !(actual instanceof Float32Array ||
7583 actual instanceof Float64Array)) {
7584 return compare(new Uint8Array(actual.buffer),
7585 new Uint8Array(expected.buffer)) === 0;
7586
7587 // 7.5 For all other Object pairs, including Array objects, equivalence is
7588 // determined by having the same number of owned properties (as verified
7589 // with Object.prototype.hasOwnProperty.call), the same set of keys
7590 // (although not necessarily the same order), equivalent values for every
7591 // corresponding key, and an identical 'prototype' property. Note: this
7592 // accounts for both named and indexed properties on Arrays.
7593 } else if (isBuffer(actual) !== isBuffer(expected)) {
7594 return false;
7595 } else {
7596 memos = memos || {actual: [], expected: []};
7597
7598 var actualIndex = memos.actual.indexOf(actual);
7599 if (actualIndex !== -1) {
7600 if (actualIndex === memos.expected.indexOf(expected)) {
7601 return true;
7602 }
7603 }
7604
7605 memos.actual.push(actual);
7606 memos.expected.push(expected);
7607
7608 return objEquiv(actual, expected, strict, memos);
7609 }
7610}
7611
7612function isArguments(object) {
7613 return Object.prototype.toString.call(object) == '[object Arguments]';
7614}
7615
7616function objEquiv(a, b, strict, actualVisitedObjects) {
7617 if (a === null || a === undefined || b === null || b === undefined)
7618 return false;
7619 // if one is a primitive, the other must be same
7620 if (util.isPrimitive(a) || util.isPrimitive(b))
7621 return a === b;
7622 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
7623 return false;
7624 var aIsArgs = isArguments(a);
7625 var bIsArgs = isArguments(b);
7626 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
7627 return false;
7628 if (aIsArgs) {
7629 a = pSlice.call(a);
7630 b = pSlice.call(b);
7631 return _deepEqual(a, b, strict);
7632 }
7633 var ka = objectKeys(a);
7634 var kb = objectKeys(b);
7635 var key, i;
7636 // having the same number of owned properties (keys incorporates
7637 // hasOwnProperty)
7638 if (ka.length !== kb.length)
7639 return false;
7640 //the same set of keys (although not necessarily the same order),
7641 ka.sort();
7642 kb.sort();
7643 //~~~cheap key test
7644 for (i = ka.length - 1; i >= 0; i--) {
7645 if (ka[i] !== kb[i])
7646 return false;
7647 }
7648 //equivalent values for every corresponding key, and
7649 //~~~possibly expensive deep test
7650 for (i = ka.length - 1; i >= 0; i--) {
7651 key = ka[i];
7652 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
7653 return false;
7654 }
7655 return true;
7656}
7657
7658// 8. The non-equivalence assertion tests for any deep inequality.
7659// assert.notDeepEqual(actual, expected, message_opt);
7660
7661assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
7662 if (_deepEqual(actual, expected, false)) {
7663 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
7664 }
7665};
7666
7667assert.notDeepStrictEqual = notDeepStrictEqual;
7668function notDeepStrictEqual(actual, expected, message) {
7669 if (_deepEqual(actual, expected, true)) {
7670 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
7671 }
7672}
7673
7674
7675// 9. The strict equality assertion tests strict equality, as determined by ===.
7676// assert.strictEqual(actual, expected, message_opt);
7677
7678assert.strictEqual = function strictEqual(actual, expected, message) {
7679 if (actual !== expected) {
7680 fail(actual, expected, message, '===', assert.strictEqual);
7681 }
7682};
7683
7684// 10. The strict non-equality assertion tests for strict inequality, as
7685// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
7686
7687assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
7688 if (actual === expected) {
7689 fail(actual, expected, message, '!==', assert.notStrictEqual);
7690 }
7691};
7692
7693function expectedException(actual, expected) {
7694 if (!actual || !expected) {
7695 return false;
7696 }
7697
7698 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
7699 return expected.test(actual);
7700 }
7701
7702 try {
7703 if (actual instanceof expected) {
7704 return true;
7705 }
7706 } catch (e) {
7707 // Ignore. The instanceof check doesn't work for arrow functions.
7708 }
7709
7710 if (Error.isPrototypeOf(expected)) {
7711 return false;
7712 }
7713
7714 return expected.call({}, actual) === true;
7715}
7716
7717function _tryBlock(block) {
7718 var error;
7719 try {
7720 block();
7721 } catch (e) {
7722 error = e;
7723 }
7724 return error;
7725}
7726
7727function _throws(shouldThrow, block, expected, message) {
7728 var actual;
7729
7730 if (typeof block !== 'function') {
7731 throw new TypeError('"block" argument must be a function');
7732 }
7733
7734 if (typeof expected === 'string') {
7735 message = expected;
7736 expected = null;
7737 }
7738
7739 actual = _tryBlock(block);
7740
7741 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
7742 (message ? ' ' + message : '.');
7743
7744 if (shouldThrow && !actual) {
7745 fail(actual, expected, 'Missing expected exception' + message);
7746 }
7747
7748 var userProvidedMessage = typeof message === 'string';
7749 var isUnwantedException = !shouldThrow && util.isError(actual);
7750 var isUnexpectedException = !shouldThrow && actual && !expected;
7751
7752 if ((isUnwantedException &&
7753 userProvidedMessage &&
7754 expectedException(actual, expected)) ||
7755 isUnexpectedException) {
7756 fail(actual, expected, 'Got unwanted exception' + message);
7757 }
7758
7759 if ((shouldThrow && actual && expected &&
7760 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
7761 throw actual;
7762 }
7763}
7764
7765// 11. Expected to throw an error:
7766// assert.throws(block, Error_opt, message_opt);
7767
7768assert.throws = function(block, /*optional*/error, /*optional*/message) {
7769 _throws(true, block, error, message);
7770};
7771
7772// EXTENSION! This is annoying to write outside this module.
7773assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
7774 _throws(false, block, error, message);
7775};
7776
7777assert.ifError = function(err) { if (err) throw err; };
7778
7779var objectKeys = Object.keys || function (obj) {
7780 var keys = [];
7781 for (var key in obj) {
7782 if (hasOwn.call(obj, key)) keys.push(key);
7783 }
7784 return keys;
7785};
7786
7787}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
7788},{"util/":32}],2:[function(require,module,exports){
7789'use strict'
7790
7791exports.byteLength = byteLength
7792exports.toByteArray = toByteArray
7793exports.fromByteArray = fromByteArray
7794
7795var lookup = []
7796var revLookup = []
7797var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
7798
7799var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
7800for (var i = 0, len = code.length; i < len; ++i) {
7801 lookup[i] = code[i]
7802 revLookup[code.charCodeAt(i)] = i
7803}
7804
7805revLookup['-'.charCodeAt(0)] = 62
7806revLookup['_'.charCodeAt(0)] = 63
7807
7808function placeHoldersCount (b64) {
7809 var len = b64.length
7810 if (len % 4 > 0) {
7811 throw new Error('Invalid string. Length must be a multiple of 4')
7812 }
7813
7814 // the number of equal signs (place holders)
7815 // if there are two placeholders, than the two characters before it
7816 // represent one byte
7817 // if there is only one, then the three characters before it represent 2 bytes
7818 // this is just a cheap hack to not do indexOf twice
7819 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
7820}
7821
7822function byteLength (b64) {
7823 // base64 is 4/3 + up to two characters of the original data
7824 return (b64.length * 3 / 4) - placeHoldersCount(b64)
7825}
7826
7827function toByteArray (b64) {
7828 var i, l, tmp, placeHolders, arr
7829 var len = b64.length
7830 placeHolders = placeHoldersCount(b64)
7831
7832 arr = new Arr((len * 3 / 4) - placeHolders)
7833
7834 // if there are placeholders, only get up to the last complete 4 chars
7835 l = placeHolders > 0 ? len - 4 : len
7836
7837 var L = 0
7838
7839 for (i = 0; i < l; i += 4) {
7840 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
7841 arr[L++] = (tmp >> 16) & 0xFF
7842 arr[L++] = (tmp >> 8) & 0xFF
7843 arr[L++] = tmp & 0xFF
7844 }
7845
7846 if (placeHolders === 2) {
7847 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
7848 arr[L++] = tmp & 0xFF
7849 } else if (placeHolders === 1) {
7850 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
7851 arr[L++] = (tmp >> 8) & 0xFF
7852 arr[L++] = tmp & 0xFF
7853 }
7854
7855 return arr
7856}
7857
7858function tripletToBase64 (num) {
7859 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
7860}
7861
7862function encodeChunk (uint8, start, end) {
7863 var tmp
7864 var output = []
7865 for (var i = start; i < end; i += 3) {
7866 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
7867 output.push(tripletToBase64(tmp))
7868 }
7869 return output.join('')
7870}
7871
7872function fromByteArray (uint8) {
7873 var tmp
7874 var len = uint8.length
7875 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
7876 var output = ''
7877 var parts = []
7878 var maxChunkLength = 16383 // must be multiple of 3
7879
7880 // go through the array every three bytes, we'll deal with trailing stuff later
7881 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
7882 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
7883 }
7884
7885 // pad the end with zeros, but make sure to not forget the extra bytes
7886 if (extraBytes === 1) {
7887 tmp = uint8[len - 1]
7888 output += lookup[tmp >> 2]
7889 output += lookup[(tmp << 4) & 0x3F]
7890 output += '=='
7891 } else if (extraBytes === 2) {
7892 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
7893 output += lookup[tmp >> 10]
7894 output += lookup[(tmp >> 4) & 0x3F]
7895 output += lookup[(tmp << 2) & 0x3F]
7896 output += '='
7897 }
7898
7899 parts.push(output)
7900
7901 return parts.join('')
7902}
7903
7904},{}],3:[function(require,module,exports){
7905
7906},{}],4:[function(require,module,exports){
7907/*!
7908 * The buffer module from node.js, for the browser.
7909 *
7910 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
7911 * @license MIT
7912 */
7913/* eslint-disable no-proto */
7914
7915'use strict'
7916
7917var base64 = require('base64-js')
7918var ieee754 = require('ieee754')
7919
7920exports.Buffer = Buffer
7921exports.SlowBuffer = SlowBuffer
7922exports.INSPECT_MAX_BYTES = 50
7923
7924var K_MAX_LENGTH = 0x7fffffff
7925exports.kMaxLength = K_MAX_LENGTH
7926
7927/**
7928 * If `Buffer.TYPED_ARRAY_SUPPORT`:
7929 * === true Use Uint8Array implementation (fastest)
7930 * === false Print warning and recommend using `buffer` v4.x which has an Object
7931 * implementation (most compatible, even IE6)
7932 *
7933 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
7934 * Opera 11.6+, iOS 4.2+.
7935 *
7936 * We report that the browser does not support typed arrays if the are not subclassable
7937 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
7938 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
7939 * for __proto__ and has a buggy typed array implementation.
7940 */
7941Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
7942
7943if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
7944 typeof console.error === 'function') {
7945 console.error(
7946 'This browser lacks typed array (Uint8Array) support which is required by ' +
7947 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
7948 )
7949}
7950
7951function typedArraySupport () {
7952 // Can typed array instances can be augmented?
7953 try {
7954 var arr = new Uint8Array(1)
7955 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
7956 return arr.foo() === 42
7957 } catch (e) {
7958 return false
7959 }
7960}
7961
7962function createBuffer (length) {
7963 if (length > K_MAX_LENGTH) {
7964 throw new RangeError('Invalid typed array length')
7965 }
7966 // Return an augmented `Uint8Array` instance
7967 var buf = new Uint8Array(length)
7968 buf.__proto__ = Buffer.prototype
7969 return buf
7970}
7971
7972/**
7973 * The Buffer constructor returns instances of `Uint8Array` that have their
7974 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
7975 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
7976 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
7977 * returns a single octet.
7978 *
7979 * The `Uint8Array` prototype remains unmodified.
7980 */
7981
7982function Buffer (arg, encodingOrOffset, length) {
7983 // Common case.
7984 if (typeof arg === 'number') {
7985 if (typeof encodingOrOffset === 'string') {
7986 throw new Error(
7987 'If encoding is specified then the first argument must be a string'
7988 )
7989 }
7990 return allocUnsafe(arg)
7991 }
7992 return from(arg, encodingOrOffset, length)
7993}
7994
7995// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
7996if (typeof Symbol !== 'undefined' && Symbol.species &&
7997 Buffer[Symbol.species] === Buffer) {
7998 Object.defineProperty(Buffer, Symbol.species, {
7999 value: null,
8000 configurable: true,
8001 enumerable: false,
8002 writable: false
8003 })
8004}
8005
8006Buffer.poolSize = 8192 // not used by this implementation
8007
8008function from (value, encodingOrOffset, length) {
8009 if (typeof value === 'number') {
8010 throw new TypeError('"value" argument must not be a number')
8011 }
8012
8013 if (value instanceof ArrayBuffer) {
8014 return fromArrayBuffer(value, encodingOrOffset, length)
8015 }
8016
8017 if (typeof value === 'string') {
8018 return fromString(value, encodingOrOffset)
8019 }
8020
8021 return fromObject(value)
8022}
8023
8024/**
8025 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
8026 * if value is a number.
8027 * Buffer.from(str[, encoding])
8028 * Buffer.from(array)
8029 * Buffer.from(buffer)
8030 * Buffer.from(arrayBuffer[, byteOffset[, length]])
8031 **/
8032Buffer.from = function (value, encodingOrOffset, length) {
8033 return from(value, encodingOrOffset, length)
8034}
8035
8036// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
8037// https://github.com/feross/buffer/pull/148
8038Buffer.prototype.__proto__ = Uint8Array.prototype
8039Buffer.__proto__ = Uint8Array
8040
8041function assertSize (size) {
8042 if (typeof size !== 'number') {
8043 throw new TypeError('"size" argument must be a number')
8044 } else if (size < 0) {
8045 throw new RangeError('"size" argument must not be negative')
8046 }
8047}
8048
8049function alloc (size, fill, encoding) {
8050 assertSize(size)
8051 if (size <= 0) {
8052 return createBuffer(size)
8053 }
8054 if (fill !== undefined) {
8055 // Only pay attention to encoding if it's a string. This
8056 // prevents accidentally sending in a number that would
8057 // be interpretted as a start offset.
8058 return typeof encoding === 'string'
8059 ? createBuffer(size).fill(fill, encoding)
8060 : createBuffer(size).fill(fill)
8061 }
8062 return createBuffer(size)
8063}
8064
8065/**
8066 * Creates a new filled Buffer instance.
8067 * alloc(size[, fill[, encoding]])
8068 **/
8069Buffer.alloc = function (size, fill, encoding) {
8070 return alloc(size, fill, encoding)
8071}
8072
8073function allocUnsafe (size) {
8074 assertSize(size)
8075 return createBuffer(size < 0 ? 0 : checked(size) | 0)
8076}
8077
8078/**
8079 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
8080 * */
8081Buffer.allocUnsafe = function (size) {
8082 return allocUnsafe(size)
8083}
8084/**
8085 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
8086 */
8087Buffer.allocUnsafeSlow = function (size) {
8088 return allocUnsafe(size)
8089}
8090
8091function fromString (string, encoding) {
8092 if (typeof encoding !== 'string' || encoding === '') {
8093 encoding = 'utf8'
8094 }
8095
8096 if (!Buffer.isEncoding(encoding)) {
8097 throw new TypeError('"encoding" must be a valid string encoding')
8098 }
8099
8100 var length = byteLength(string, encoding) | 0
8101 var buf = createBuffer(length)
8102
8103 var actual = buf.write(string, encoding)
8104
8105 if (actual !== length) {
8106 // Writing a hex string, for example, that contains invalid characters will
8107 // cause everything after the first invalid character to be ignored. (e.g.
8108 // 'abxxcd' will be treated as 'ab')
8109 buf = buf.slice(0, actual)
8110 }
8111
8112 return buf
8113}
8114
8115function fromArrayLike (array) {
8116 var length = array.length < 0 ? 0 : checked(array.length) | 0
8117 var buf = createBuffer(length)
8118 for (var i = 0; i < length; i += 1) {
8119 buf[i] = array[i] & 255
8120 }
8121 return buf
8122}
8123
8124function fromArrayBuffer (array, byteOffset, length) {
8125 if (byteOffset < 0 || array.byteLength < byteOffset) {
8126 throw new RangeError('\'offset\' is out of bounds')
8127 }
8128
8129 if (array.byteLength < byteOffset + (length || 0)) {
8130 throw new RangeError('\'length\' is out of bounds')
8131 }
8132
8133 var buf
8134 if (byteOffset === undefined && length === undefined) {
8135 buf = new Uint8Array(array)
8136 } else if (length === undefined) {
8137 buf = new Uint8Array(array, byteOffset)
8138 } else {
8139 buf = new Uint8Array(array, byteOffset, length)
8140 }
8141
8142 // Return an augmented `Uint8Array` instance
8143 buf.__proto__ = Buffer.prototype
8144 return buf
8145}
8146
8147function fromObject (obj) {
8148 if (Buffer.isBuffer(obj)) {
8149 var len = checked(obj.length) | 0
8150 var buf = createBuffer(len)
8151
8152 if (buf.length === 0) {
8153 return buf
8154 }
8155
8156 obj.copy(buf, 0, 0, len)
8157 return buf
8158 }
8159
8160 if (obj) {
8161 if (isArrayBufferView(obj) || 'length' in obj) {
8162 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
8163 return createBuffer(0)
8164 }
8165 return fromArrayLike(obj)
8166 }
8167
8168 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
8169 return fromArrayLike(obj.data)
8170 }
8171 }
8172
8173 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
8174}
8175
8176function checked (length) {
8177 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
8178 // length is NaN (which is otherwise coerced to zero.)
8179 if (length >= K_MAX_LENGTH) {
8180 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
8181 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
8182 }
8183 return length | 0
8184}
8185
8186function SlowBuffer (length) {
8187 if (+length != length) { // eslint-disable-line eqeqeq
8188 length = 0
8189 }
8190 return Buffer.alloc(+length)
8191}
8192
8193Buffer.isBuffer = function isBuffer (b) {
8194 return b != null && b._isBuffer === true
8195}
8196
8197Buffer.compare = function compare (a, b) {
8198 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
8199 throw new TypeError('Arguments must be Buffers')
8200 }
8201
8202 if (a === b) return 0
8203
8204 var x = a.length
8205 var y = b.length
8206
8207 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
8208 if (a[i] !== b[i]) {
8209 x = a[i]
8210 y = b[i]
8211 break
8212 }
8b095871 8213 }
9987f0c1
IC
8214
8215 if (x < y) return -1
8216 if (y < x) return 1
8217 return 0
8b095871
IC
8218}
8219
9987f0c1
IC
8220Buffer.isEncoding = function isEncoding (encoding) {
8221 switch (String(encoding).toLowerCase()) {
8222 case 'hex':
8223 case 'utf8':
8224 case 'utf-8':
8225 case 'ascii':
8226 case 'latin1':
8227 case 'binary':
8228 case 'base64':
8229 case 'ucs2':
8230 case 'ucs-2':
8231 case 'utf16le':
8232 case 'utf-16le':
8233 return true
8234 default:
8235 return false
8b095871 8236 }
9987f0c1
IC
8237}
8238
8239Buffer.concat = function concat (list, length) {
8240 if (!Array.isArray(list)) {
8241 throw new TypeError('"list" argument must be an Array of Buffers')
8242 }
8243
8244 if (list.length === 0) {
8245 return Buffer.alloc(0)
8246 }
8247
8248 var i
8249 if (length === undefined) {
8250 length = 0
8251 for (i = 0; i < list.length; ++i) {
8252 length += list[i].length
8b095871 8253 }
9987f0c1
IC
8254 }
8255
8256 var buffer = Buffer.allocUnsafe(length)
8257 var pos = 0
8258 for (i = 0; i < list.length; ++i) {
8259 var buf = list[i]
8260 if (!Buffer.isBuffer(buf)) {
8261 throw new TypeError('"list" argument must be an Array of Buffers')
8b095871 8262 }
9987f0c1
IC
8263 buf.copy(buffer, pos)
8264 pos += buf.length
8b095871 8265 }
9987f0c1 8266 return buffer
8b095871
IC
8267}
8268
9987f0c1
IC
8269function byteLength (string, encoding) {
8270 if (Buffer.isBuffer(string)) {
8271 return string.length
8272 }
8273 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
8274 return string.byteLength
8275 }
8276 if (typeof string !== 'string') {
8277 string = '' + string
8278 }
8279
8280 var len = string.length
8281 if (len === 0) return 0
8282
8283 // Use a for loop to avoid recursion
8284 var loweredCase = false
8285 for (;;) {
8286 switch (encoding) {
8287 case 'ascii':
8288 case 'latin1':
8289 case 'binary':
8290 return len
8291 case 'utf8':
8292 case 'utf-8':
8293 case undefined:
8294 return utf8ToBytes(string).length
8295 case 'ucs2':
8296 case 'ucs-2':
8297 case 'utf16le':
8298 case 'utf-16le':
8299 return len * 2
8300 case 'hex':
8301 return len >>> 1
8302 case 'base64':
8303 return base64ToBytes(string).length
8304 default:
8305 if (loweredCase) return utf8ToBytes(string).length // assume utf8
8306 encoding = ('' + encoding).toLowerCase()
8307 loweredCase = true
8308 }
8309 }
8b095871 8310}
9987f0c1 8311Buffer.byteLength = byteLength
8b095871 8312
9987f0c1
IC
8313function slowToString (encoding, start, end) {
8314 var loweredCase = false
8315
8316 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
8317 // property of a typed array.
8318
8319 // This behaves neither like String nor Uint8Array in that we set start/end
8320 // to their upper/lower bounds if the value passed is out of range.
8321 // undefined is handled specially as per ECMA-262 6th Edition,
8322 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
8323 if (start === undefined || start < 0) {
8324 start = 0
8325 }
8326 // Return early if start > this.length. Done here to prevent potential uint32
8327 // coercion fail below.
8328 if (start > this.length) {
8329 return ''
8330 }
8331
8332 if (end === undefined || end > this.length) {
8333 end = this.length
8334 }
8335
8336 if (end <= 0) {
8337 return ''
8338 }
8339
8340 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
8341 end >>>= 0
8342 start >>>= 0
8343
8344 if (end <= start) {
8345 return ''
8346 }
8347
8348 if (!encoding) encoding = 'utf8'
8349
8350 while (true) {
8351 switch (encoding) {
8352 case 'hex':
8353 return hexSlice(this, start, end)
8354
8355 case 'utf8':
8356 case 'utf-8':
8357 return utf8Slice(this, start, end)
8358
8359 case 'ascii':
8360 return asciiSlice(this, start, end)
8361
8362 case 'latin1':
8363 case 'binary':
8364 return latin1Slice(this, start, end)
8365
8366 case 'base64':
8367 return base64Slice(this, start, end)
8368
8369 case 'ucs2':
8370 case 'ucs-2':
8371 case 'utf16le':
8372 case 'utf-16le':
8373 return utf16leSlice(this, start, end)
8374
8375 default:
8376 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8377 encoding = (encoding + '').toLowerCase()
8378 loweredCase = true
8b095871
IC
8379 }
8380 }
8b095871
IC
8381}
8382
9987f0c1
IC
8383// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
8384// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
8385// reliably in a browserify context because there could be multiple different
8386// copies of the 'buffer' package in use. This method works even for Buffer
8387// instances that were created from another copy of the `buffer` package.
8388// See: https://github.com/feross/buffer/issues/154
8389Buffer.prototype._isBuffer = true
8390
8391function swap (b, n, m) {
8392 var i = b[n]
8393 b[n] = b[m]
8394 b[m] = i
8395}
8396
8397Buffer.prototype.swap16 = function swap16 () {
8398 var len = this.length
8399 if (len % 2 !== 0) {
8400 throw new RangeError('Buffer size must be a multiple of 16-bits')
8b095871 8401 }
9987f0c1
IC
8402 for (var i = 0; i < len; i += 2) {
8403 swap(this, i, i + 1)
8b095871 8404 }
9987f0c1
IC
8405 return this
8406}
8407
8408Buffer.prototype.swap32 = function swap32 () {
8409 var len = this.length
8410 if (len % 4 !== 0) {
8411 throw new RangeError('Buffer size must be a multiple of 32-bits')
8b095871 8412 }
9987f0c1
IC
8413 for (var i = 0; i < len; i += 4) {
8414 swap(this, i, i + 3)
8415 swap(this, i + 1, i + 2)
8416 }
8417 return this
8418}
8419
8420Buffer.prototype.swap64 = function swap64 () {
8421 var len = this.length
8422 if (len % 8 !== 0) {
8423 throw new RangeError('Buffer size must be a multiple of 64-bits')
8424 }
8425 for (var i = 0; i < len; i += 8) {
8426 swap(this, i, i + 7)
8427 swap(this, i + 1, i + 6)
8428 swap(this, i + 2, i + 5)
8429 swap(this, i + 3, i + 4)
8430 }
8431 return this
8432}
8433
8434Buffer.prototype.toString = function toString () {
8435 var length = this.length
8436 if (length === 0) return ''
8437 if (arguments.length === 0) return utf8Slice(this, 0, length)
8438 return slowToString.apply(this, arguments)
8439}
8440
8441Buffer.prototype.equals = function equals (b) {
8442 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
8443 if (this === b) return true
8444 return Buffer.compare(this, b) === 0
8445}
8446
8447Buffer.prototype.inspect = function inspect () {
8448 var str = ''
8449 var max = exports.INSPECT_MAX_BYTES
8450 if (this.length > 0) {
8451 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
8452 if (this.length > max) str += ' ... '
8453 }
8454 return '<Buffer ' + str + '>'
8455}
8456
8457Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
8458 if (!Buffer.isBuffer(target)) {
8459 throw new TypeError('Argument must be a Buffer')
8460 }
8461
8462 if (start === undefined) {
8463 start = 0
8464 }
8465 if (end === undefined) {
8466 end = target ? target.length : 0
8467 }
8468 if (thisStart === undefined) {
8469 thisStart = 0
8470 }
8471 if (thisEnd === undefined) {
8472 thisEnd = this.length
8473 }
8474
8475 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
8476 throw new RangeError('out of range index')
8477 }
8478
8479 if (thisStart >= thisEnd && start >= end) {
8480 return 0
8481 }
8482 if (thisStart >= thisEnd) {
8483 return -1
8484 }
8485 if (start >= end) {
8486 return 1
8487 }
8488
8489 start >>>= 0
8490 end >>>= 0
8491 thisStart >>>= 0
8492 thisEnd >>>= 0
8493
8494 if (this === target) return 0
8495
8496 var x = thisEnd - thisStart
8497 var y = end - start
8498 var len = Math.min(x, y)
8499
8500 var thisCopy = this.slice(thisStart, thisEnd)
8501 var targetCopy = target.slice(start, end)
8502
8503 for (var i = 0; i < len; ++i) {
8504 if (thisCopy[i] !== targetCopy[i]) {
8505 x = thisCopy[i]
8506 y = targetCopy[i]
8507 break
8508 }
8509 }
8510
8511 if (x < y) return -1
8512 if (y < x) return 1
8513 return 0
8514}
8515
8516// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
8517// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
8518//
8519// Arguments:
8520// - buffer - a Buffer to search
8521// - val - a string, Buffer, or number
8522// - byteOffset - an index into `buffer`; will be clamped to an int32
8523// - encoding - an optional encoding, relevant is val is a string
8524// - dir - true for indexOf, false for lastIndexOf
8525function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
8526 // Empty buffer means no match
8527 if (buffer.length === 0) return -1
8528
8529 // Normalize byteOffset
8530 if (typeof byteOffset === 'string') {
8531 encoding = byteOffset
8532 byteOffset = 0
8533 } else if (byteOffset > 0x7fffffff) {
8534 byteOffset = 0x7fffffff
8535 } else if (byteOffset < -0x80000000) {
8536 byteOffset = -0x80000000
8537 }
8538 byteOffset = +byteOffset // Coerce to Number.
8539 if (numberIsNaN(byteOffset)) {
8540 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
8541 byteOffset = dir ? 0 : (buffer.length - 1)
8542 }
8543
8544 // Normalize byteOffset: negative offsets start from the end of the buffer
8545 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
8546 if (byteOffset >= buffer.length) {
8547 if (dir) return -1
8548 else byteOffset = buffer.length - 1
8549 } else if (byteOffset < 0) {
8550 if (dir) byteOffset = 0
8551 else return -1
8552 }
8553
8554 // Normalize val
8555 if (typeof val === 'string') {
8556 val = Buffer.from(val, encoding)
8557 }
8558
8559 // Finally, search either indexOf (if dir is true) or lastIndexOf
8560 if (Buffer.isBuffer(val)) {
8561 // Special case: looking for empty string/buffer always fails
8562 if (val.length === 0) {
8563 return -1
8564 }
8565 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
8566 } else if (typeof val === 'number') {
8567 val = val & 0xFF // Search for a byte value [0-255]
8568 if (typeof Uint8Array.prototype.indexOf === 'function') {
8569 if (dir) {
8570 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
8571 } else {
8572 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
8573 }
8574 }
8575 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
8576 }
8577
8578 throw new TypeError('val must be string, number or Buffer')
8579}
8580
8581function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
8582 var indexSize = 1
8583 var arrLength = arr.length
8584 var valLength = val.length
8585
8586 if (encoding !== undefined) {
8587 encoding = String(encoding).toLowerCase()
8588 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
8589 encoding === 'utf16le' || encoding === 'utf-16le') {
8590 if (arr.length < 2 || val.length < 2) {
8591 return -1
8592 }
8593 indexSize = 2
8594 arrLength /= 2
8595 valLength /= 2
8596 byteOffset /= 2
8597 }
8598 }
8599
8600 function read (buf, i) {
8601 if (indexSize === 1) {
8602 return buf[i]
8603 } else {
8604 return buf.readUInt16BE(i * indexSize)
8605 }
8606 }
8607
8608 var i
8609 if (dir) {
8610 var foundIndex = -1
8611 for (i = byteOffset; i < arrLength; i++) {
8612 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
8613 if (foundIndex === -1) foundIndex = i
8614 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
8615 } else {
8616 if (foundIndex !== -1) i -= i - foundIndex
8617 foundIndex = -1
8618 }
8619 }
8620 } else {
8621 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
8622 for (i = byteOffset; i >= 0; i--) {
8623 var found = true
8624 for (var j = 0; j < valLength; j++) {
8625 if (read(arr, i + j) !== read(val, j)) {
8626 found = false
8627 break
8628 }
8629 }
8630 if (found) return i
8b095871
IC
8631 }
8632 }
8b095871 8633
9987f0c1 8634 return -1
8b095871
IC
8635}
8636
9987f0c1
IC
8637Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
8638 return this.indexOf(val, byteOffset, encoding) !== -1
8b095871
IC
8639}
8640
9987f0c1
IC
8641Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
8642 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
8b095871
IC
8643}
8644
9987f0c1
IC
8645Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
8646 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
8b095871
IC
8647}
8648
9987f0c1
IC
8649function hexWrite (buf, string, offset, length) {
8650 offset = Number(offset) || 0
8651 var remaining = buf.length - offset
8652 if (!length) {
8653 length = remaining
8654 } else {
8655 length = Number(length)
8656 if (length > remaining) {
8657 length = remaining
8658 }
8659 }
8b095871 8660
9987f0c1
IC
8661 // must be an even number of digits
8662 var strLen = string.length
8663 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
8b095871 8664
9987f0c1
IC
8665 if (length > strLen / 2) {
8666 length = strLen / 2
8667 }
8668 for (var i = 0; i < length; ++i) {
8669 var parsed = parseInt(string.substr(i * 2, 2), 16)
8670 if (numberIsNaN(parsed)) return i
8671 buf[offset + i] = parsed
8672 }
8673 return i
8b095871
IC
8674}
8675
9987f0c1
IC
8676function utf8Write (buf, string, offset, length) {
8677 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
8678}
8b095871 8679
9987f0c1
IC
8680function asciiWrite (buf, string, offset, length) {
8681 return blitBuffer(asciiToBytes(string), buf, offset, length)
8b095871
IC
8682}
8683
9987f0c1
IC
8684function latin1Write (buf, string, offset, length) {
8685 return asciiWrite(buf, string, offset, length)
8b095871
IC
8686}
8687
9987f0c1
IC
8688function base64Write (buf, string, offset, length) {
8689 return blitBuffer(base64ToBytes(string), buf, offset, length)
8b095871
IC
8690}
8691
9987f0c1
IC
8692function ucs2Write (buf, string, offset, length) {
8693 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
8b095871
IC
8694}
8695
9987f0c1
IC
8696Buffer.prototype.write = function write (string, offset, length, encoding) {
8697 // Buffer#write(string)
8698 if (offset === undefined) {
8699 encoding = 'utf8'
8700 length = this.length
8701 offset = 0
8702 // Buffer#write(string, encoding)
8703 } else if (length === undefined && typeof offset === 'string') {
8704 encoding = offset
8705 length = this.length
8706 offset = 0
8707 // Buffer#write(string, offset[, length][, encoding])
8708 } else if (isFinite(offset)) {
8709 offset = offset >>> 0
8710 if (isFinite(length)) {
8711 length = length >>> 0
8712 if (encoding === undefined) encoding = 'utf8'
8713 } else {
8714 encoding = length
8715 length = undefined
8b095871 8716 }
9987f0c1
IC
8717 } else {
8718 throw new Error(
8719 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
8720 )
8b095871 8721 }
8b095871 8722
9987f0c1
IC
8723 var remaining = this.length - offset
8724 if (length === undefined || length > remaining) length = remaining
8b095871 8725
9987f0c1
IC
8726 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
8727 throw new RangeError('Attempt to write outside buffer bounds')
8728 }
8b095871 8729
9987f0c1 8730 if (!encoding) encoding = 'utf8'
8b095871 8731
9987f0c1
IC
8732 var loweredCase = false
8733 for (;;) {
8734 switch (encoding) {
8735 case 'hex':
8736 return hexWrite(this, string, offset, length)
8b095871 8737
9987f0c1
IC
8738 case 'utf8':
8739 case 'utf-8':
8740 return utf8Write(this, string, offset, length)
8b095871 8741
9987f0c1
IC
8742 case 'ascii':
8743 return asciiWrite(this, string, offset, length)
8b095871 8744
9987f0c1
IC
8745 case 'latin1':
8746 case 'binary':
8747 return latin1Write(this, string, offset, length)
8b095871 8748
9987f0c1
IC
8749 case 'base64':
8750 // Warning: maxLength not taken into account in base64Write
8751 return base64Write(this, string, offset, length)
8b095871 8752
9987f0c1
IC
8753 case 'ucs2':
8754 case 'ucs-2':
8755 case 'utf16le':
8756 case 'utf-16le':
8757 return ucs2Write(this, string, offset, length)
8b095871 8758
9987f0c1
IC
8759 default:
8760 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
8761 encoding = ('' + encoding).toLowerCase()
8762 loweredCase = true
8763 }
8764 }
8b095871
IC
8765}
8766
9987f0c1
IC
8767Buffer.prototype.toJSON = function toJSON () {
8768 return {
8769 type: 'Buffer',
8770 data: Array.prototype.slice.call(this._arr || this, 0)
8771 }
8b095871
IC
8772}
8773
9987f0c1
IC
8774function base64Slice (buf, start, end) {
8775 if (start === 0 && end === buf.length) {
8776 return base64.fromByteArray(buf)
8777 } else {
8778 return base64.fromByteArray(buf.slice(start, end))
8779 }
8b095871
IC
8780}
8781
9987f0c1
IC
8782function utf8Slice (buf, start, end) {
8783 end = Math.min(buf.length, end)
8784 var res = []
8b095871 8785
9987f0c1
IC
8786 var i = start
8787 while (i < end) {
8788 var firstByte = buf[i]
8789 var codePoint = null
8790 var bytesPerSequence = (firstByte > 0xEF) ? 4
8791 : (firstByte > 0xDF) ? 3
8792 : (firstByte > 0xBF) ? 2
8793 : 1
8b095871 8794
9987f0c1
IC
8795 if (i + bytesPerSequence <= end) {
8796 var secondByte, thirdByte, fourthByte, tempCodePoint
8b095871 8797
9987f0c1
IC
8798 switch (bytesPerSequence) {
8799 case 1:
8800 if (firstByte < 0x80) {
8801 codePoint = firstByte
8802 }
8803 break
8804 case 2:
8805 secondByte = buf[i + 1]
8806 if ((secondByte & 0xC0) === 0x80) {
8807 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
8808 if (tempCodePoint > 0x7F) {
8809 codePoint = tempCodePoint
8810 }
8811 }
8812 break
8813 case 3:
8814 secondByte = buf[i + 1]
8815 thirdByte = buf[i + 2]
8816 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
8817 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
8818 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
8819 codePoint = tempCodePoint
8820 }
8821 }
8822 break
8823 case 4:
8824 secondByte = buf[i + 1]
8825 thirdByte = buf[i + 2]
8826 fourthByte = buf[i + 3]
8827 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
8828 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
8829 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
8830 codePoint = tempCodePoint
8831 }
8832 }
8833 }
8b095871 8834 }
9987f0c1
IC
8835
8836 if (codePoint === null) {
8837 // we did not generate a valid codePoint so insert a
8838 // replacement char (U+FFFD) and advance only 1 byte
8839 codePoint = 0xFFFD
8840 bytesPerSequence = 1
8841 } else if (codePoint > 0xFFFF) {
8842 // encode to utf16 (surrogate pair dance)
8843 codePoint -= 0x10000
8844 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
8845 codePoint = 0xDC00 | codePoint & 0x3FF
8b095871 8846 }
9987f0c1
IC
8847
8848 res.push(codePoint)
8849 i += bytesPerSequence
8b095871 8850 }
9987f0c1
IC
8851
8852 return decodeCodePointsArray(res)
8853}
8854
8855// Based on http://stackoverflow.com/a/22747272/680742, the browser with
8856// the lowest limit is Chrome, with 0x10000 args.
8857// We go 1 magnitude less, for safety
8858var MAX_ARGUMENTS_LENGTH = 0x1000
8859
8860function decodeCodePointsArray (codePoints) {
8861 var len = codePoints.length
8862 if (len <= MAX_ARGUMENTS_LENGTH) {
8863 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
8b095871 8864 }
9987f0c1
IC
8865
8866 // Decode in chunks to avoid "call stack size exceeded".
8867 var res = ''
8868 var i = 0
8869 while (i < len) {
8870 res += String.fromCharCode.apply(
8871 String,
8872 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
8873 )
8874 }
8875 return res
8b095871
IC
8876}
8877
9987f0c1
IC
8878function asciiSlice (buf, start, end) {
8879 var ret = ''
8880 end = Math.min(buf.length, end)
8881
8882 for (var i = start; i < end; ++i) {
8883 ret += String.fromCharCode(buf[i] & 0x7F)
8b095871 8884 }
9987f0c1 8885 return ret
8b095871
IC
8886}
8887
9987f0c1
IC
8888function latin1Slice (buf, start, end) {
8889 var ret = ''
8890 end = Math.min(buf.length, end)
8891
8892 for (var i = start; i < end; ++i) {
8893 ret += String.fromCharCode(buf[i])
8b095871 8894 }
9987f0c1 8895 return ret
8b095871
IC
8896}
8897
9987f0c1
IC
8898function hexSlice (buf, start, end) {
8899 var len = buf.length
8b095871 8900
9987f0c1
IC
8901 if (!start || start < 0) start = 0
8902 if (!end || end < 0 || end > len) end = len
8b095871 8903
9987f0c1
IC
8904 var out = ''
8905 for (var i = start; i < end; ++i) {
8906 out += toHex(buf[i])
8907 }
8908 return out
8b095871
IC
8909}
8910
9987f0c1
IC
8911function utf16leSlice (buf, start, end) {
8912 var bytes = buf.slice(start, end)
8913 var res = ''
8914 for (var i = 0; i < bytes.length; i += 2) {
8915 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
8b095871 8916 }
9987f0c1 8917 return res
8b095871
IC
8918}
8919
9987f0c1
IC
8920Buffer.prototype.slice = function slice (start, end) {
8921 var len = this.length
8922 start = ~~start
8923 end = end === undefined ? len : ~~end
8b095871 8924
9987f0c1
IC
8925 if (start < 0) {
8926 start += len
8927 if (start < 0) start = 0
8928 } else if (start > len) {
8929 start = len
8930 }
8b095871 8931
9987f0c1
IC
8932 if (end < 0) {
8933 end += len
8934 if (end < 0) end = 0
8935 } else if (end > len) {
8936 end = len
8937 }
8938
8939 if (end < start) end = start
8940
8941 var newBuf = this.subarray(start, end)
8942 // Return an augmented `Uint8Array` instance
8943 newBuf.__proto__ = Buffer.prototype
8944 return newBuf
8b095871
IC
8945}
8946
9987f0c1
IC
8947/*
8948 * Need to make sure that buffer isn't trying to write out of bounds.
8949 */
8950function checkOffset (offset, ext, length) {
8951 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
8952 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
8b095871
IC
8953}
8954
9987f0c1
IC
8955Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
8956 offset = offset >>> 0
8957 byteLength = byteLength >>> 0
8958 if (!noAssert) checkOffset(offset, byteLength, this.length)
8959
8960 var val = this[offset]
8961 var mul = 1
8962 var i = 0
8963 while (++i < byteLength && (mul *= 0x100)) {
8964 val += this[offset + i] * mul
8965 }
8966
8967 return val
8b095871
IC
8968}
8969
9987f0c1
IC
8970Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
8971 offset = offset >>> 0
8972 byteLength = byteLength >>> 0
8973 if (!noAssert) {
8974 checkOffset(offset, byteLength, this.length)
8975 }
8976
8977 var val = this[offset + --byteLength]
8978 var mul = 1
8979 while (byteLength > 0 && (mul *= 0x100)) {
8980 val += this[offset + --byteLength] * mul
8981 }
8982
8983 return val
8b095871
IC
8984}
8985
9987f0c1
IC
8986Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
8987 offset = offset >>> 0
8988 if (!noAssert) checkOffset(offset, 1, this.length)
8989 return this[offset]
8b095871
IC
8990}
8991
9987f0c1
IC
8992Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
8993 offset = offset >>> 0
8994 if (!noAssert) checkOffset(offset, 2, this.length)
8995 return this[offset] | (this[offset + 1] << 8)
8b095871
IC
8996}
8997
9987f0c1
IC
8998Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
8999 offset = offset >>> 0
9000 if (!noAssert) checkOffset(offset, 2, this.length)
9001 return (this[offset] << 8) | this[offset + 1]
8b095871
IC
9002}
9003
9987f0c1
IC
9004Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
9005 offset = offset >>> 0
9006 if (!noAssert) checkOffset(offset, 4, this.length)
9007
9008 return ((this[offset]) |
9009 (this[offset + 1] << 8) |
9010 (this[offset + 2] << 16)) +
9011 (this[offset + 3] * 0x1000000)
8b095871
IC
9012}
9013
9987f0c1
IC
9014Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
9015 offset = offset >>> 0
9016 if (!noAssert) checkOffset(offset, 4, this.length)
9017
9018 return (this[offset] * 0x1000000) +
9019 ((this[offset + 1] << 16) |
9020 (this[offset + 2] << 8) |
9021 this[offset + 3])
8b095871
IC
9022}
9023
9987f0c1
IC
9024Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
9025 offset = offset >>> 0
9026 byteLength = byteLength >>> 0
9027 if (!noAssert) checkOffset(offset, byteLength, this.length)
9028
9029 var val = this[offset]
9030 var mul = 1
9031 var i = 0
9032 while (++i < byteLength && (mul *= 0x100)) {
9033 val += this[offset + i] * mul
8b095871 9034 }
9987f0c1
IC
9035 mul *= 0x80
9036
9037 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9038
9039 return val
9040}
9041
9042Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
9043 offset = offset >>> 0
9044 byteLength = byteLength >>> 0
9045 if (!noAssert) checkOffset(offset, byteLength, this.length)
9046
9047 var i = byteLength
9048 var mul = 1
9049 var val = this[offset + --i]
9050 while (i > 0 && (mul *= 0x100)) {
9051 val += this[offset + --i] * mul
8b095871 9052 }
9987f0c1
IC
9053 mul *= 0x80
9054
9055 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
9056
9057 return val
8b095871
IC
9058}
9059
9987f0c1
IC
9060Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
9061 offset = offset >>> 0
9062 if (!noAssert) checkOffset(offset, 1, this.length)
9063 if (!(this[offset] & 0x80)) return (this[offset])
9064 return ((0xff - this[offset] + 1) * -1)
8b095871
IC
9065}
9066
9987f0c1
IC
9067Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
9068 offset = offset >>> 0
9069 if (!noAssert) checkOffset(offset, 2, this.length)
9070 var val = this[offset] | (this[offset + 1] << 8)
9071 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9072}
9073
9987f0c1
IC
9074Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
9075 offset = offset >>> 0
9076 if (!noAssert) checkOffset(offset, 2, this.length)
9077 var val = this[offset + 1] | (this[offset] << 8)
9078 return (val & 0x8000) ? val | 0xFFFF0000 : val
8b095871
IC
9079}
9080
9987f0c1
IC
9081Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
9082 offset = offset >>> 0
9083 if (!noAssert) checkOffset(offset, 4, this.length)
9084
9085 return (this[offset]) |
9086 (this[offset + 1] << 8) |
9087 (this[offset + 2] << 16) |
9088 (this[offset + 3] << 24)
8b095871
IC
9089}
9090
9987f0c1
IC
9091Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
9092 offset = offset >>> 0
9093 if (!noAssert) checkOffset(offset, 4, this.length)
9094
9095 return (this[offset] << 24) |
9096 (this[offset + 1] << 16) |
9097 (this[offset + 2] << 8) |
9098 (this[offset + 3])
8b095871
IC
9099}
9100
9987f0c1
IC
9101Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
9102 offset = offset >>> 0
9103 if (!noAssert) checkOffset(offset, 4, this.length)
9104 return ieee754.read(this, offset, true, 23, 4)
8b095871
IC
9105}
9106
9987f0c1
IC
9107Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
9108 offset = offset >>> 0
9109 if (!noAssert) checkOffset(offset, 4, this.length)
9110 return ieee754.read(this, offset, false, 23, 4)
8b095871
IC
9111}
9112
9987f0c1
IC
9113Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
9114 offset = offset >>> 0
9115 if (!noAssert) checkOffset(offset, 8, this.length)
9116 return ieee754.read(this, offset, true, 52, 8)
8b095871
IC
9117}
9118
9987f0c1
IC
9119Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
9120 offset = offset >>> 0
9121 if (!noAssert) checkOffset(offset, 8, this.length)
9122 return ieee754.read(this, offset, false, 52, 8)
9123}
8b095871 9124
9987f0c1
IC
9125function checkInt (buf, value, offset, ext, max, min) {
9126 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
9127 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
9128 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9129}
9130
9131Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
9132 value = +value
9133 offset = offset >>> 0
9134 byteLength = byteLength >>> 0
9135 if (!noAssert) {
9136 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9137 checkInt(this, value, offset, byteLength, maxBytes, 0)
8b095871 9138 }
9987f0c1
IC
9139
9140 var mul = 1
9141 var i = 0
9142 this[offset] = value & 0xFF
9143 while (++i < byteLength && (mul *= 0x100)) {
9144 this[offset + i] = (value / mul) & 0xFF
8b095871 9145 }
8b095871 9146
9987f0c1 9147 return offset + byteLength
8b095871
IC
9148}
9149
9987f0c1
IC
9150Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
9151 value = +value
9152 offset = offset >>> 0
9153 byteLength = byteLength >>> 0
9154 if (!noAssert) {
9155 var maxBytes = Math.pow(2, 8 * byteLength) - 1
9156 checkInt(this, value, offset, byteLength, maxBytes, 0)
9157 }
8b095871 9158
9987f0c1
IC
9159 var i = byteLength - 1
9160 var mul = 1
9161 this[offset + i] = value & 0xFF
9162 while (--i >= 0 && (mul *= 0x100)) {
9163 this[offset + i] = (value / mul) & 0xFF
9164 }
9165
9166 return offset + byteLength
8b095871
IC
9167}
9168
9987f0c1
IC
9169Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
9170 value = +value
9171 offset = offset >>> 0
9172 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
9173 this[offset] = (value & 0xff)
9174 return offset + 1
8b095871
IC
9175}
9176
9987f0c1
IC
9177Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
9178 value = +value
9179 offset = offset >>> 0
9180 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9181 this[offset] = (value & 0xff)
9182 this[offset + 1] = (value >>> 8)
9183 return offset + 2
8b095871
IC
9184}
9185
9987f0c1
IC
9186Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
9187 value = +value
9188 offset = offset >>> 0
9189 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
9190 this[offset] = (value >>> 8)
9191 this[offset + 1] = (value & 0xff)
9192 return offset + 2
8b095871
IC
9193}
9194
9987f0c1
IC
9195Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
9196 value = +value
9197 offset = offset >>> 0
9198 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9199 this[offset + 3] = (value >>> 24)
9200 this[offset + 2] = (value >>> 16)
9201 this[offset + 1] = (value >>> 8)
9202 this[offset] = (value & 0xff)
9203 return offset + 4
8b095871
IC
9204}
9205
9987f0c1
IC
9206Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
9207 value = +value
9208 offset = offset >>> 0
9209 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
9210 this[offset] = (value >>> 24)
9211 this[offset + 1] = (value >>> 16)
9212 this[offset + 2] = (value >>> 8)
9213 this[offset + 3] = (value & 0xff)
9214 return offset + 4
8b095871
IC
9215}
9216
9987f0c1
IC
9217Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
9218 value = +value
9219 offset = offset >>> 0
9220 if (!noAssert) {
9221 var limit = Math.pow(2, (8 * byteLength) - 1)
9222
9223 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9224 }
9225
9226 var i = 0
9227 var mul = 1
9228 var sub = 0
9229 this[offset] = value & 0xFF
9230 while (++i < byteLength && (mul *= 0x100)) {
9231 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
9232 sub = 1
9233 }
9234 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
8b095871 9235 }
9987f0c1
IC
9236
9237 return offset + byteLength
8b095871
IC
9238}
9239
9987f0c1
IC
9240Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
9241 value = +value
9242 offset = offset >>> 0
9243 if (!noAssert) {
9244 var limit = Math.pow(2, (8 * byteLength) - 1)
8b095871 9245
9987f0c1
IC
9246 checkInt(this, value, offset, byteLength, limit - 1, -limit)
9247 }
9248
9249 var i = byteLength - 1
9250 var mul = 1
9251 var sub = 0
9252 this[offset + i] = value & 0xFF
9253 while (--i >= 0 && (mul *= 0x100)) {
9254 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
9255 sub = 1
9256 }
9257 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
9258 }
9259
9260 return offset + byteLength
8b095871
IC
9261}
9262
9987f0c1
IC
9263Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
9264 value = +value
9265 offset = offset >>> 0
9266 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
9267 if (value < 0) value = 0xff + value + 1
9268 this[offset] = (value & 0xff)
9269 return offset + 1
8b095871
IC
9270}
9271
9987f0c1
IC
9272Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
9273 value = +value
9274 offset = offset >>> 0
9275 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9276 this[offset] = (value & 0xff)
9277 this[offset + 1] = (value >>> 8)
9278 return offset + 2
8b095871
IC
9279}
9280
9987f0c1
IC
9281Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
9282 value = +value
9283 offset = offset >>> 0
9284 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
9285 this[offset] = (value >>> 8)
9286 this[offset + 1] = (value & 0xff)
9287 return offset + 2
8b095871
IC
9288}
9289
9987f0c1
IC
9290Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
9291 value = +value
9292 offset = offset >>> 0
9293 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9294 this[offset] = (value & 0xff)
9295 this[offset + 1] = (value >>> 8)
9296 this[offset + 2] = (value >>> 16)
9297 this[offset + 3] = (value >>> 24)
9298 return offset + 4
8b095871
IC
9299}
9300
9987f0c1
IC
9301Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
9302 value = +value
9303 offset = offset >>> 0
9304 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
9305 if (value < 0) value = 0xffffffff + value + 1
9306 this[offset] = (value >>> 24)
9307 this[offset + 1] = (value >>> 16)
9308 this[offset + 2] = (value >>> 8)
9309 this[offset + 3] = (value & 0xff)
9310 return offset + 4
8b095871
IC
9311}
9312
9987f0c1
IC
9313function checkIEEE754 (buf, value, offset, ext, max, min) {
9314 if (offset + ext > buf.length) throw new RangeError('Index out of range')
9315 if (offset < 0) throw new RangeError('Index out of range')
8b095871
IC
9316}
9317
9987f0c1
IC
9318function writeFloat (buf, value, offset, littleEndian, noAssert) {
9319 value = +value
9320 offset = offset >>> 0
9321 if (!noAssert) {
9322 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
8b095871 9323 }
9987f0c1
IC
9324 ieee754.write(buf, value, offset, littleEndian, 23, 4)
9325 return offset + 4
8b095871
IC
9326}
9327
9987f0c1
IC
9328Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
9329 return writeFloat(this, value, offset, true, noAssert)
8b095871
IC
9330}
9331
9987f0c1
IC
9332Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
9333 return writeFloat(this, value, offset, false, noAssert)
9334}
9335
9336function writeDouble (buf, value, offset, littleEndian, noAssert) {
9337 value = +value
9338 offset = offset >>> 0
9339 if (!noAssert) {
9340 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
8b095871 9341 }
9987f0c1
IC
9342 ieee754.write(buf, value, offset, littleEndian, 52, 8)
9343 return offset + 8
8b095871
IC
9344}
9345
9987f0c1
IC
9346Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
9347 return writeDouble(this, value, offset, true, noAssert)
8b095871
IC
9348}
9349
9987f0c1
IC
9350Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
9351 return writeDouble(this, value, offset, false, noAssert)
8b095871
IC
9352}
9353
9987f0c1
IC
9354// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
9355Buffer.prototype.copy = function copy (target, targetStart, start, end) {
9356 if (!start) start = 0
9357 if (!end && end !== 0) end = this.length
9358 if (targetStart >= target.length) targetStart = target.length
9359 if (!targetStart) targetStart = 0
9360 if (end > 0 && end < start) end = start
8b095871 9361
9987f0c1
IC
9362 // Copy 0 bytes; we're done
9363 if (end === start) return 0
9364 if (target.length === 0 || this.length === 0) return 0
8b095871 9365
9987f0c1
IC
9366 // Fatal error conditions
9367 if (targetStart < 0) {
9368 throw new RangeError('targetStart out of bounds')
8b095871 9369 }
9987f0c1
IC
9370 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
9371 if (end < 0) throw new RangeError('sourceEnd out of bounds')
8b095871 9372
9987f0c1
IC
9373 // Are we oob?
9374 if (end > this.length) end = this.length
9375 if (target.length - targetStart < end - start) {
9376 end = target.length - targetStart + start
9377 }
8b095871 9378
9987f0c1
IC
9379 var len = end - start
9380 var i
9381
9382 if (this === target && start < targetStart && targetStart < end) {
9383 // descending copy from end
9384 for (i = len - 1; i >= 0; --i) {
9385 target[i + targetStart] = this[i + start]
8b095871 9386 }
9987f0c1
IC
9387 } else if (len < 1000) {
9388 // ascending copy from start
9389 for (i = 0; i < len; ++i) {
9390 target[i + targetStart] = this[i + start]
8b095871 9391 }
9987f0c1
IC
9392 } else {
9393 Uint8Array.prototype.set.call(
9394 target,
9395 this.subarray(start, start + len),
9396 targetStart
9397 )
9398 }
8b095871 9399
9987f0c1
IC
9400 return len
9401}
9402
9403// Usage:
9404// buffer.fill(number[, offset[, end]])
9405// buffer.fill(buffer[, offset[, end]])
9406// buffer.fill(string[, offset[, end]][, encoding])
9407Buffer.prototype.fill = function fill (val, start, end, encoding) {
9408 // Handle string cases:
9409 if (typeof val === 'string') {
9410 if (typeof start === 'string') {
9411 encoding = start
9412 start = 0
9413 end = this.length
9414 } else if (typeof end === 'string') {
9415 encoding = end
9416 end = this.length
9417 }
9418 if (val.length === 1) {
9419 var code = val.charCodeAt(0)
9420 if (code < 256) {
9421 val = code
8b095871
IC
9422 }
9423 }
9987f0c1
IC
9424 if (encoding !== undefined && typeof encoding !== 'string') {
9425 throw new TypeError('encoding must be a string')
9426 }
9427 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
9428 throw new TypeError('Unknown encoding: ' + encoding)
9429 }
9430 } else if (typeof val === 'number') {
9431 val = val & 255
8b095871 9432 }
8b095871 9433
9987f0c1
IC
9434 // Invalid ranges are not set to a default, so can range check early.
9435 if (start < 0 || this.length < start || this.length < end) {
9436 throw new RangeError('Out of range index')
8b095871 9437 }
9987f0c1
IC
9438
9439 if (end <= start) {
9440 return this
8b095871 9441 }
8b095871 9442
9987f0c1
IC
9443 start = start >>> 0
9444 end = end === undefined ? this.length : end >>> 0
8b095871 9445
9987f0c1
IC
9446 if (!val) val = 0
9447
9448 var i
9449 if (typeof val === 'number') {
9450 for (i = start; i < end; ++i) {
9451 this[i] = val
8b095871 9452 }
9987f0c1
IC
9453 } else {
9454 var bytes = Buffer.isBuffer(val)
9455 ? val
9456 : new Buffer(val, encoding)
9457 var len = bytes.length
9458 for (i = 0; i < end - start; ++i) {
9459 this[i + start] = bytes[i % len]
8b095871
IC
9460 }
9461 }
9987f0c1
IC
9462
9463 return this
8b095871
IC
9464}
9465
9987f0c1
IC
9466// HELPER FUNCTIONS
9467// ================
8b095871 9468
9987f0c1 9469var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
8b095871 9470
9987f0c1
IC
9471function base64clean (str) {
9472 // Node strips out invalid characters like \n and \t from the string, base64-js does not
9473 str = str.trim().replace(INVALID_BASE64_RE, '')
9474 // Node converts strings with length < 2 to ''
9475 if (str.length < 2) return ''
9476 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
9477 while (str.length % 4 !== 0) {
9478 str = str + '='
8b095871 9479 }
9987f0c1
IC
9480 return str
9481}
9482
9483function toHex (n) {
9484 if (n < 16) return '0' + n.toString(16)
9485 return n.toString(16)
9486}
9487
9488function utf8ToBytes (string, units) {
9489 units = units || Infinity
9490 var codePoint
9491 var length = string.length
9492 var leadSurrogate = null
9493 var bytes = []
9494
9495 for (var i = 0; i < length; ++i) {
9496 codePoint = string.charCodeAt(i)
9497
9498 // is surrogate component
9499 if (codePoint > 0xD7FF && codePoint < 0xE000) {
9500 // last char was a lead
9501 if (!leadSurrogate) {
9502 // no lead yet
9503 if (codePoint > 0xDBFF) {
9504 // unexpected trail
9505 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9506 continue
9507 } else if (i + 1 === length) {
9508 // unpaired lead
9509 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9510 continue
9511 }
9512
9513 // valid lead
9514 leadSurrogate = codePoint
9515
9516 continue
9517 }
9518
9519 // 2 leads in a row
9520 if (codePoint < 0xDC00) {
9521 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9522 leadSurrogate = codePoint
9523 continue
9524 }
9525
9526 // valid surrogate pair
9527 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
9528 } else if (leadSurrogate) {
9529 // valid bmp char, but last char was a lead
9530 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
9531 }
9532
9533 leadSurrogate = null
9534
9535 // encode utf8
9536 if (codePoint < 0x80) {
9537 if ((units -= 1) < 0) break
9538 bytes.push(codePoint)
9539 } else if (codePoint < 0x800) {
9540 if ((units -= 2) < 0) break
9541 bytes.push(
9542 codePoint >> 0x6 | 0xC0,
9543 codePoint & 0x3F | 0x80
9544 )
9545 } else if (codePoint < 0x10000) {
9546 if ((units -= 3) < 0) break
9547 bytes.push(
9548 codePoint >> 0xC | 0xE0,
9549 codePoint >> 0x6 & 0x3F | 0x80,
9550 codePoint & 0x3F | 0x80
9551 )
9552 } else if (codePoint < 0x110000) {
9553 if ((units -= 4) < 0) break
9554 bytes.push(
9555 codePoint >> 0x12 | 0xF0,
9556 codePoint >> 0xC & 0x3F | 0x80,
9557 codePoint >> 0x6 & 0x3F | 0x80,
9558 codePoint & 0x3F | 0x80
9559 )
9560 } else {
9561 throw new Error('Invalid code point')
9562 }
8b095871 9563 }
9987f0c1
IC
9564
9565 return bytes
8b095871
IC
9566}
9567
9987f0c1
IC
9568function asciiToBytes (str) {
9569 var byteArray = []
9570 for (var i = 0; i < str.length; ++i) {
9571 // Node's code seems to be doing this and not & 0x7F..
9572 byteArray.push(str.charCodeAt(i) & 0xFF)
8b095871 9573 }
9987f0c1 9574 return byteArray
8b095871
IC
9575}
9576
9987f0c1
IC
9577function utf16leToBytes (str, units) {
9578 var c, hi, lo
9579 var byteArray = []
9580 for (var i = 0; i < str.length; ++i) {
9581 if ((units -= 2) < 0) break
8b095871 9582
9987f0c1
IC
9583 c = str.charCodeAt(i)
9584 hi = c >> 8
9585 lo = c % 256
9586 byteArray.push(lo)
9587 byteArray.push(hi)
9588 }
8b095871 9589
9987f0c1
IC
9590 return byteArray
9591}
8b095871 9592
9987f0c1
IC
9593function base64ToBytes (str) {
9594 return base64.toByteArray(base64clean(str))
9595}
8b095871 9596
9987f0c1
IC
9597function blitBuffer (src, dst, offset, length) {
9598 for (var i = 0; i < length; ++i) {
9599 if ((i + offset >= dst.length) || (i >= src.length)) break
9600 dst[i + offset] = src[i]
9601 }
9602 return i
9603}
9604
9605// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
9606function isArrayBufferView (obj) {
9607 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
9608}
9609
9610function numberIsNaN (obj) {
9611 return obj !== obj // eslint-disable-line no-self-compare
9612}
8b095871 9613
9987f0c1 9614},{"base64-js":2,"ieee754":7}],5:[function(require,module,exports){
8b095871 9615(function (Buffer){
9987f0c1
IC
9616// Copyright Joyent, Inc. and other Node contributors.
9617//
9618// Permission is hereby granted, free of charge, to any person obtaining a
9619// copy of this software and associated documentation files (the
9620// "Software"), to deal in the Software without restriction, including
9621// without limitation the rights to use, copy, modify, merge, publish,
9622// distribute, sublicense, and/or sell copies of the Software, and to permit
9623// persons to whom the Software is furnished to do so, subject to the
9624// following conditions:
9625//
9626// The above copyright notice and this permission notice shall be included
9627// in all copies or substantial portions of the Software.
9628//
9629// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9630// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9631// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9632// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9633// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9634// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9635// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9636
9987f0c1
IC
9637// NOTE: These type checking functions intentionally don't use `instanceof`
9638// because it is fragile and can be easily faked with `Object.create()`.
8b095871 9639
9987f0c1
IC
9640function isArray(arg) {
9641 if (Array.isArray) {
9642 return Array.isArray(arg);
9643 }
9644 return objectToString(arg) === '[object Array]';
8b095871 9645}
9987f0c1 9646exports.isArray = isArray;
8b095871 9647
9987f0c1
IC
9648function isBoolean(arg) {
9649 return typeof arg === 'boolean';
8b095871 9650}
9987f0c1 9651exports.isBoolean = isBoolean;
8b095871 9652
9987f0c1
IC
9653function isNull(arg) {
9654 return arg === null;
8b095871 9655}
9987f0c1 9656exports.isNull = isNull;
8b095871 9657
9987f0c1
IC
9658function isNullOrUndefined(arg) {
9659 return arg == null;
9660}
9661exports.isNullOrUndefined = isNullOrUndefined;
8b095871 9662
9987f0c1
IC
9663function isNumber(arg) {
9664 return typeof arg === 'number';
9665}
9666exports.isNumber = isNumber;
8b095871 9667
9987f0c1
IC
9668function isString(arg) {
9669 return typeof arg === 'string';
9670}
9671exports.isString = isString;
8b095871 9672
9987f0c1
IC
9673function isSymbol(arg) {
9674 return typeof arg === 'symbol';
8b095871 9675}
9987f0c1 9676exports.isSymbol = isSymbol;
8b095871 9677
9987f0c1
IC
9678function isUndefined(arg) {
9679 return arg === void 0;
9680}
9681exports.isUndefined = isUndefined;
8b095871 9682
9987f0c1
IC
9683function isRegExp(re) {
9684 return objectToString(re) === '[object RegExp]';
8b095871 9685}
9987f0c1 9686exports.isRegExp = isRegExp;
8b095871 9687
9987f0c1
IC
9688function isObject(arg) {
9689 return typeof arg === 'object' && arg !== null;
9690}
9691exports.isObject = isObject;
8b095871 9692
9987f0c1
IC
9693function isDate(d) {
9694 return objectToString(d) === '[object Date]';
9695}
9696exports.isDate = isDate;
8b095871 9697
9987f0c1
IC
9698function isError(e) {
9699 return (objectToString(e) === '[object Error]' || e instanceof Error);
8b095871 9700}
9987f0c1 9701exports.isError = isError;
8b095871 9702
9987f0c1
IC
9703function isFunction(arg) {
9704 return typeof arg === 'function';
8b095871 9705}
9987f0c1 9706exports.isFunction = isFunction;
8b095871 9707
9987f0c1
IC
9708function isPrimitive(arg) {
9709 return arg === null ||
9710 typeof arg === 'boolean' ||
9711 typeof arg === 'number' ||
9712 typeof arg === 'string' ||
9713 typeof arg === 'symbol' || // ES6 symbol
9714 typeof arg === 'undefined';
9715}
9716exports.isPrimitive = isPrimitive;
8b095871 9717
9987f0c1 9718exports.isBuffer = Buffer.isBuffer;
8b095871 9719
9987f0c1
IC
9720function objectToString(o) {
9721 return Object.prototype.toString.call(o);
8b095871
IC
9722}
9723
9987f0c1
IC
9724}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
9725},{"../../is-buffer/index.js":9}],6:[function(require,module,exports){
9726// Copyright Joyent, Inc. and other Node contributors.
8b095871 9727//
9987f0c1
IC
9728// Permission is hereby granted, free of charge, to any person obtaining a
9729// copy of this software and associated documentation files (the
9730// "Software"), to deal in the Software without restriction, including
9731// without limitation the rights to use, copy, modify, merge, publish,
9732// distribute, sublicense, and/or sell copies of the Software, and to permit
9733// persons to whom the Software is furnished to do so, subject to the
9734// following conditions:
8b095871 9735//
9987f0c1
IC
9736// The above copyright notice and this permission notice shall be included
9737// in all copies or substantial portions of the Software.
8b095871 9738//
9987f0c1
IC
9739// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
9740// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
9741// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
9742// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
9743// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
9744// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
9745// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 9746
9987f0c1
IC
9747function EventEmitter() {
9748 this._events = this._events || {};
9749 this._maxListeners = this._maxListeners || undefined;
9750}
9751module.exports = EventEmitter;
8b095871 9752
9987f0c1
IC
9753// Backwards-compat with node 0.10.x
9754EventEmitter.EventEmitter = EventEmitter;
8b095871 9755
9987f0c1
IC
9756EventEmitter.prototype._events = undefined;
9757EventEmitter.prototype._maxListeners = undefined;
8b095871 9758
9987f0c1
IC
9759// By default EventEmitters will print a warning if more than 10 listeners are
9760// added to it. This is a useful default which helps finding memory leaks.
9761EventEmitter.defaultMaxListeners = 10;
8b095871 9762
9987f0c1
IC
9763// Obviously not all Emitters should be limited to 10. This function allows
9764// that to be increased. Set to zero for unlimited.
9765EventEmitter.prototype.setMaxListeners = function(n) {
9766 if (!isNumber(n) || n < 0 || isNaN(n))
9767 throw TypeError('n must be a positive number');
9768 this._maxListeners = n;
9769 return this;
9770};
8b095871 9771
9987f0c1
IC
9772EventEmitter.prototype.emit = function(type) {
9773 var er, handler, len, args, i, listeners;
9774
9775 if (!this._events)
9776 this._events = {};
9777
9778 // If there is no 'error' event listener then throw.
9779 if (type === 'error') {
9780 if (!this._events.error ||
9781 (isObject(this._events.error) && !this._events.error.length)) {
9782 er = arguments[1];
9783 if (er instanceof Error) {
9784 throw er; // Unhandled 'error' event
9785 } else {
9786 // At least give some kind of context to the user
9787 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
9788 err.context = er;
9789 throw err;
9790 }
9791 }
8b095871 9792 }
8b095871 9793
9987f0c1
IC
9794 handler = this._events[type];
9795
9796 if (isUndefined(handler))
9797 return false;
9798
9799 if (isFunction(handler)) {
9800 switch (arguments.length) {
9801 // fast cases
9802 case 1:
9803 handler.call(this);
9804 break;
9805 case 2:
9806 handler.call(this, arguments[1]);
9807 break;
9808 case 3:
9809 handler.call(this, arguments[1], arguments[2]);
9810 break;
9811 // slower
9812 default:
9813 args = Array.prototype.slice.call(arguments, 1);
9814 handler.apply(this, args);
9815 }
9816 } else if (isObject(handler)) {
9817 args = Array.prototype.slice.call(arguments, 1);
9818 listeners = handler.slice();
9819 len = listeners.length;
9820 for (i = 0; i < len; i++)
9821 listeners[i].apply(this, args);
8b095871 9822 }
8b095871 9823
9987f0c1
IC
9824 return true;
9825};
9826
9827EventEmitter.prototype.addListener = function(type, listener) {
9828 var m;
9829
9830 if (!isFunction(listener))
9831 throw TypeError('listener must be a function');
9832
9833 if (!this._events)
9834 this._events = {};
9835
9836 // To avoid recursion in the case that type === "newListener"! Before
9837 // adding it to the listeners, first emit "newListener".
9838 if (this._events.newListener)
9839 this.emit('newListener', type,
9840 isFunction(listener.listener) ?
9841 listener.listener : listener);
9842
9843 if (!this._events[type])
9844 // Optimize the case of one listener. Don't need the extra array object.
9845 this._events[type] = listener;
9846 else if (isObject(this._events[type]))
9847 // If we've already got an array, just append.
9848 this._events[type].push(listener);
9849 else
9850 // Adding the second element, need to change to array.
9851 this._events[type] = [this._events[type], listener];
8b095871 9852
9987f0c1
IC
9853 // Check for listener leak
9854 if (isObject(this._events[type]) && !this._events[type].warned) {
9855 if (!isUndefined(this._maxListeners)) {
9856 m = this._maxListeners;
9857 } else {
9858 m = EventEmitter.defaultMaxListeners;
8b095871 9859 }
8b095871 9860
9987f0c1
IC
9861 if (m && m > 0 && this._events[type].length > m) {
9862 this._events[type].warned = true;
9863 console.error('(node) warning: possible EventEmitter memory ' +
9864 'leak detected. %d listeners added. ' +
9865 'Use emitter.setMaxListeners() to increase limit.',
9866 this._events[type].length);
9867 if (typeof console.trace === 'function') {
9868 // not supported in IE 10
9869 console.trace();
9870 }
9871 }
8b095871 9872 }
8b095871 9873
9987f0c1
IC
9874 return this;
9875};
8b095871 9876
9987f0c1 9877EventEmitter.prototype.on = EventEmitter.prototype.addListener;
8b095871 9878
9987f0c1
IC
9879EventEmitter.prototype.once = function(type, listener) {
9880 if (!isFunction(listener))
9881 throw TypeError('listener must be a function');
8b095871 9882
9987f0c1 9883 var fired = false;
8b095871 9884
9987f0c1
IC
9885 function g() {
9886 this.removeListener(type, g);
8b095871 9887
9987f0c1
IC
9888 if (!fired) {
9889 fired = true;
9890 listener.apply(this, arguments);
9891 }
9892 }
8b095871 9893
9987f0c1
IC
9894 g.listener = listener;
9895 this.on(type, g);
8b095871 9896
9987f0c1 9897 return this;
8b095871
IC
9898};
9899
9987f0c1
IC
9900// emits a 'removeListener' event iff the listener was removed
9901EventEmitter.prototype.removeListener = function(type, listener) {
9902 var list, position, length, i;
8b095871 9903
9987f0c1
IC
9904 if (!isFunction(listener))
9905 throw TypeError('listener must be a function');
8b095871 9906
9987f0c1
IC
9907 if (!this._events || !this._events[type])
9908 return this;
8b095871 9909
9987f0c1
IC
9910 list = this._events[type];
9911 length = list.length;
9912 position = -1;
8b095871 9913
9987f0c1
IC
9914 if (list === listener ||
9915 (isFunction(list.listener) && list.listener === listener)) {
9916 delete this._events[type];
9917 if (this._events.removeListener)
9918 this.emit('removeListener', type, listener);
8b095871 9919
9987f0c1
IC
9920 } else if (isObject(list)) {
9921 for (i = length; i-- > 0;) {
9922 if (list[i] === listener ||
9923 (list[i].listener && list[i].listener === listener)) {
9924 position = i;
9925 break;
9926 }
8b095871
IC
9927 }
9928
9987f0c1
IC
9929 if (position < 0)
9930 return this;
8b095871 9931
9987f0c1
IC
9932 if (list.length === 1) {
9933 list.length = 0;
9934 delete this._events[type];
9935 } else {
9936 list.splice(position, 1);
9937 }
8b095871 9938
9987f0c1
IC
9939 if (this._events.removeListener)
9940 this.emit('removeListener', type, listener);
9941 }
8b095871 9942
9987f0c1
IC
9943 return this;
9944};
8b095871 9945
9987f0c1
IC
9946EventEmitter.prototype.removeAllListeners = function(type) {
9947 var key, listeners;
8b095871 9948
9987f0c1
IC
9949 if (!this._events)
9950 return this;
8b095871 9951
9987f0c1
IC
9952 // not listening for removeListener, no need to emit
9953 if (!this._events.removeListener) {
9954 if (arguments.length === 0)
9955 this._events = {};
9956 else if (this._events[type])
9957 delete this._events[type];
9958 return this;
8b095871 9959 }
9987f0c1
IC
9960
9961 // emit removeListener for all listeners on all events
9962 if (arguments.length === 0) {
9963 for (key in this._events) {
9964 if (key === 'removeListener') continue;
9965 this.removeAllListeners(key);
9966 }
9967 this.removeAllListeners('removeListener');
9968 this._events = {};
9969 return this;
8b095871 9970 }
8b095871 9971
9987f0c1 9972 listeners = this._events[type];
8b095871 9973
9987f0c1
IC
9974 if (isFunction(listeners)) {
9975 this.removeListener(type, listeners);
9976 } else if (listeners) {
9977 // LIFO order
9978 while (listeners.length)
9979 this.removeListener(type, listeners[listeners.length - 1]);
8b095871 9980 }
9987f0c1 9981 delete this._events[type];
8b095871 9982
9987f0c1
IC
9983 return this;
9984};
8b095871 9985
9987f0c1
IC
9986EventEmitter.prototype.listeners = function(type) {
9987 var ret;
9988 if (!this._events || !this._events[type])
9989 ret = [];
9990 else if (isFunction(this._events[type]))
9991 ret = [this._events[type]];
9992 else
9993 ret = this._events[type].slice();
9994 return ret;
8b095871
IC
9995};
9996
9987f0c1
IC
9997EventEmitter.prototype.listenerCount = function(type) {
9998 if (this._events) {
9999 var evlistener = this._events[type];
8b095871 10000
9987f0c1
IC
10001 if (isFunction(evlistener))
10002 return 1;
10003 else if (evlistener)
10004 return evlistener.length;
8b095871 10005 }
9987f0c1 10006 return 0;
8b095871
IC
10007};
10008
9987f0c1
IC
10009EventEmitter.listenerCount = function(emitter, type) {
10010 return emitter.listenerCount(type);
10011};
8b095871 10012
9987f0c1
IC
10013function isFunction(arg) {
10014 return typeof arg === 'function';
10015}
8b095871 10016
9987f0c1
IC
10017function isNumber(arg) {
10018 return typeof arg === 'number';
8b095871
IC
10019}
10020
9987f0c1
IC
10021function isObject(arg) {
10022 return typeof arg === 'object' && arg !== null;
10023}
8b095871 10024
9987f0c1
IC
10025function isUndefined(arg) {
10026 return arg === void 0;
10027}
8b095871 10028
9987f0c1
IC
10029},{}],7:[function(require,module,exports){
10030exports.read = function (buffer, offset, isLE, mLen, nBytes) {
10031 var e, m
10032 var eLen = nBytes * 8 - mLen - 1
10033 var eMax = (1 << eLen) - 1
10034 var eBias = eMax >> 1
10035 var nBits = -7
10036 var i = isLE ? (nBytes - 1) : 0
10037 var d = isLE ? -1 : 1
10038 var s = buffer[offset + i]
8b095871 10039
9987f0c1 10040 i += d
8b095871 10041
9987f0c1
IC
10042 e = s & ((1 << (-nBits)) - 1)
10043 s >>= (-nBits)
10044 nBits += eLen
10045 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10046
9987f0c1
IC
10047 m = e & ((1 << (-nBits)) - 1)
10048 e >>= (-nBits)
10049 nBits += mLen
10050 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
8b095871 10051
9987f0c1
IC
10052 if (e === 0) {
10053 e = 1 - eBias
10054 } else if (e === eMax) {
10055 return m ? NaN : ((s ? -1 : 1) * Infinity)
10056 } else {
10057 m = m + Math.pow(2, mLen)
10058 e = e - eBias
8b095871 10059 }
9987f0c1 10060 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
8b095871
IC
10061}
10062
9987f0c1
IC
10063exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
10064 var e, m, c
10065 var eLen = nBytes * 8 - mLen - 1
10066 var eMax = (1 << eLen) - 1
10067 var eBias = eMax >> 1
10068 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
10069 var i = isLE ? 0 : (nBytes - 1)
10070 var d = isLE ? 1 : -1
10071 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
8b095871 10072
9987f0c1 10073 value = Math.abs(value)
8b095871 10074
9987f0c1
IC
10075 if (isNaN(value) || value === Infinity) {
10076 m = isNaN(value) ? 1 : 0
10077 e = eMax
10078 } else {
10079 e = Math.floor(Math.log(value) / Math.LN2)
10080 if (value * (c = Math.pow(2, -e)) < 1) {
10081 e--
10082 c *= 2
10083 }
10084 if (e + eBias >= 1) {
10085 value += rt / c
10086 } else {
10087 value += rt * Math.pow(2, 1 - eBias)
10088 }
10089 if (value * c >= 2) {
10090 e++
10091 c /= 2
10092 }
8b095871 10093
9987f0c1
IC
10094 if (e + eBias >= eMax) {
10095 m = 0
10096 e = eMax
10097 } else if (e + eBias >= 1) {
10098 m = (value * c - 1) * Math.pow(2, mLen)
10099 e = e + eBias
10100 } else {
10101 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
10102 e = 0
10103 }
8b095871 10104 }
8b095871 10105
9987f0c1
IC
10106 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
10107
10108 e = (e << mLen) | m
10109 eLen += mLen
10110 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
10111
10112 buffer[offset + i - d] |= s * 128
10113}
8b095871 10114
9987f0c1
IC
10115},{}],8:[function(require,module,exports){
10116if (typeof Object.create === 'function') {
10117 // implementation from standard node.js 'util' module
10118 module.exports = function inherits(ctor, superCtor) {
10119 ctor.super_ = superCtor
10120 ctor.prototype = Object.create(superCtor.prototype, {
10121 constructor: {
10122 value: ctor,
10123 enumerable: false,
10124 writable: true,
10125 configurable: true
10126 }
10127 });
10128 };
10129} else {
10130 // old school shim for old browsers
10131 module.exports = function inherits(ctor, superCtor) {
10132 ctor.super_ = superCtor
10133 var TempCtor = function () {}
10134 TempCtor.prototype = superCtor.prototype
10135 ctor.prototype = new TempCtor()
10136 ctor.prototype.constructor = ctor
10137 }
10138}
10139
10140},{}],9:[function(require,module,exports){
8b095871 10141/*!
9987f0c1 10142 * Determine if an object is a Buffer
8b095871
IC
10143 *
10144 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
10145 * @license MIT
10146 */
10147
9987f0c1
IC
10148// The _isBuffer check is for Safari 5-7 support, because it's missing
10149// Object.prototype.constructor. Remove this eventually
10150module.exports = function (obj) {
10151 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
10152}
8b095871 10153
9987f0c1
IC
10154function isBuffer (obj) {
10155 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
8b095871
IC
10156}
10157
9987f0c1
IC
10158// For Node v0.10 support. Remove this eventually.
10159function isSlowBuffer (obj) {
10160 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
10161}
8b095871 10162
9987f0c1
IC
10163},{}],10:[function(require,module,exports){
10164var toString = {}.toString;
8b095871 10165
9987f0c1
IC
10166module.exports = Array.isArray || function (arr) {
10167 return toString.call(arr) == '[object Array]';
10168};
8b095871 10169
9987f0c1
IC
10170},{}],11:[function(require,module,exports){
10171(function (process){
10172'use strict';
8b095871 10173
9987f0c1
IC
10174if (!process.version ||
10175 process.version.indexOf('v0.') === 0 ||
10176 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
10177 module.exports = nextTick;
10178} else {
10179 module.exports = process.nextTick;
8b095871
IC
10180}
10181
9987f0c1
IC
10182function nextTick(fn, arg1, arg2, arg3) {
10183 if (typeof fn !== 'function') {
10184 throw new TypeError('"callback" argument must be a function');
10185 }
10186 var len = arguments.length;
10187 var args, i;
10188 switch (len) {
10189 case 0:
10190 case 1:
10191 return process.nextTick(fn);
10192 case 2:
10193 return process.nextTick(function afterTickOne() {
10194 fn.call(null, arg1);
10195 });
10196 case 3:
10197 return process.nextTick(function afterTickTwo() {
10198 fn.call(null, arg1, arg2);
10199 });
10200 case 4:
10201 return process.nextTick(function afterTickThree() {
10202 fn.call(null, arg1, arg2, arg3);
10203 });
10204 default:
10205 args = new Array(len - 1);
10206 i = 0;
10207 while (i < args.length) {
10208 args[i++] = arguments[i];
8b095871 10209 }
9987f0c1
IC
10210 return process.nextTick(function afterTick() {
10211 fn.apply(null, args);
10212 });
8b095871 10213 }
8b095871
IC
10214}
10215
9987f0c1
IC
10216}).call(this,require('_process'))
10217},{"_process":12}],12:[function(require,module,exports){
10218// shim for using process in browser
10219var process = module.exports = {};
8b095871 10220
9987f0c1
IC
10221// cached from whatever global is present so that test runners that stub it
10222// don't break things. But we need to wrap it in a try catch in case it is
10223// wrapped in strict mode code which doesn't define any globals. It's inside a
10224// function because try/catches deoptimize in certain engines.
8b095871 10225
9987f0c1
IC
10226var cachedSetTimeout;
10227var cachedClearTimeout;
8b095871 10228
9987f0c1
IC
10229function defaultSetTimout() {
10230 throw new Error('setTimeout has not been defined');
10231}
10232function defaultClearTimeout () {
10233 throw new Error('clearTimeout has not been defined');
10234}
10235(function () {
10236 try {
10237 if (typeof setTimeout === 'function') {
10238 cachedSetTimeout = setTimeout;
10239 } else {
10240 cachedSetTimeout = defaultSetTimout;
10241 }
10242 } catch (e) {
10243 cachedSetTimeout = defaultSetTimout;
10244 }
10245 try {
10246 if (typeof clearTimeout === 'function') {
10247 cachedClearTimeout = clearTimeout;
10248 } else {
10249 cachedClearTimeout = defaultClearTimeout;
10250 }
10251 } catch (e) {
10252 cachedClearTimeout = defaultClearTimeout;
8b095871 10253 }
9987f0c1
IC
10254} ())
10255function runTimeout(fun) {
10256 if (cachedSetTimeout === setTimeout) {
10257 //normal enviroments in sane situations
10258 return setTimeout(fun, 0);
10259 }
10260 // if setTimeout wasn't available but was latter defined
10261 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
10262 cachedSetTimeout = setTimeout;
10263 return setTimeout(fun, 0);
10264 }
10265 try {
10266 // when when somebody has screwed with setTimeout but no I.E. maddness
10267 return cachedSetTimeout(fun, 0);
10268 } catch(e){
10269 try {
10270 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10271 return cachedSetTimeout.call(null, fun, 0);
10272 } catch(e){
10273 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
10274 return cachedSetTimeout.call(this, fun, 0);
10275 }
8b095871 10276 }
8b095871 10277
8b095871 10278
8b095871 10279}
9987f0c1
IC
10280function runClearTimeout(marker) {
10281 if (cachedClearTimeout === clearTimeout) {
10282 //normal enviroments in sane situations
10283 return clearTimeout(marker);
10284 }
10285 // if clearTimeout wasn't available but was latter defined
10286 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
10287 cachedClearTimeout = clearTimeout;
10288 return clearTimeout(marker);
10289 }
10290 try {
10291 // when when somebody has screwed with setTimeout but no I.E. maddness
10292 return cachedClearTimeout(marker);
10293 } catch (e){
10294 try {
10295 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
10296 return cachedClearTimeout.call(null, marker);
10297 } catch (e){
10298 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
10299 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
10300 return cachedClearTimeout.call(this, marker);
10301 }
10302 }
8b095871 10303
8b095871 10304
8b095871 10305
8b095871 10306}
9987f0c1
IC
10307var queue = [];
10308var draining = false;
10309var currentQueue;
10310var queueIndex = -1;
8b095871 10311
9987f0c1
IC
10312function cleanUpNextTick() {
10313 if (!draining || !currentQueue) {
10314 return;
10315 }
10316 draining = false;
10317 if (currentQueue.length) {
10318 queue = currentQueue.concat(queue);
10319 } else {
10320 queueIndex = -1;
10321 }
10322 if (queue.length) {
10323 drainQueue();
10324 }
8b095871
IC
10325}
10326
9987f0c1
IC
10327function drainQueue() {
10328 if (draining) {
10329 return;
10330 }
10331 var timeout = runTimeout(cleanUpNextTick);
10332 draining = true;
8b095871 10333
9987f0c1
IC
10334 var len = queue.length;
10335 while(len) {
10336 currentQueue = queue;
10337 queue = [];
10338 while (++queueIndex < len) {
10339 if (currentQueue) {
10340 currentQueue[queueIndex].run();
10341 }
10342 }
10343 queueIndex = -1;
10344 len = queue.length;
10345 }
10346 currentQueue = null;
10347 draining = false;
10348 runClearTimeout(timeout);
8b095871
IC
10349}
10350
9987f0c1
IC
10351process.nextTick = function (fun) {
10352 var args = new Array(arguments.length - 1);
10353 if (arguments.length > 1) {
10354 for (var i = 1; i < arguments.length; i++) {
10355 args[i - 1] = arguments[i];
10356 }
10357 }
10358 queue.push(new Item(fun, args));
10359 if (queue.length === 1 && !draining) {
10360 runTimeout(drainQueue);
10361 }
10362};
8b095871 10363
9987f0c1
IC
10364// v8 likes predictible objects
10365function Item(fun, array) {
10366 this.fun = fun;
10367 this.array = array;
8b095871 10368}
9987f0c1
IC
10369Item.prototype.run = function () {
10370 this.fun.apply(null, this.array);
10371};
10372process.title = 'browser';
10373process.browser = true;
10374process.env = {};
10375process.argv = [];
10376process.version = ''; // empty string to avoid regexp issues
10377process.versions = {};
8b095871 10378
9987f0c1 10379function noop() {}
8b095871 10380
9987f0c1
IC
10381process.on = noop;
10382process.addListener = noop;
10383process.once = noop;
10384process.off = noop;
10385process.removeListener = noop;
10386process.removeAllListeners = noop;
10387process.emit = noop;
10388process.prependListener = noop;
10389process.prependOnceListener = noop;
8b095871 10390
9987f0c1 10391process.listeners = function (name) { return [] }
8b095871 10392
9987f0c1
IC
10393process.binding = function (name) {
10394 throw new Error('process.binding is not supported');
10395};
8b095871 10396
9987f0c1
IC
10397process.cwd = function () { return '/' };
10398process.chdir = function (dir) {
10399 throw new Error('process.chdir is not supported');
10400};
10401process.umask = function() { return 0; };
8b095871 10402
9987f0c1
IC
10403},{}],13:[function(require,module,exports){
10404module.exports = require('./lib/_stream_duplex.js');
8b095871 10405
9987f0c1
IC
10406},{"./lib/_stream_duplex.js":14}],14:[function(require,module,exports){
10407// Copyright Joyent, Inc. and other Node contributors.
10408//
10409// Permission is hereby granted, free of charge, to any person obtaining a
10410// copy of this software and associated documentation files (the
10411// "Software"), to deal in the Software without restriction, including
10412// without limitation the rights to use, copy, modify, merge, publish,
10413// distribute, sublicense, and/or sell copies of the Software, and to permit
10414// persons to whom the Software is furnished to do so, subject to the
10415// following conditions:
10416//
10417// The above copyright notice and this permission notice shall be included
10418// in all copies or substantial portions of the Software.
10419//
10420// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10421// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10422// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10423// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10424// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10425// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10426// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10427
9987f0c1
IC
10428// a duplex stream is just a stream that is both readable and writable.
10429// Since JS doesn't have multiple prototypal inheritance, this class
10430// prototypally inherits from Readable, and then parasitically from
10431// Writable.
8b095871 10432
9987f0c1 10433'use strict';
8b095871 10434
9987f0c1 10435/*<replacement>*/
8b095871 10436
9987f0c1
IC
10437var processNextTick = require('process-nextick-args');
10438/*</replacement>*/
8b095871 10439
9987f0c1
IC
10440/*<replacement>*/
10441var objectKeys = Object.keys || function (obj) {
10442 var keys = [];
10443 for (var key in obj) {
10444 keys.push(key);
10445 }return keys;
10446};
10447/*</replacement>*/
8b095871 10448
9987f0c1 10449module.exports = Duplex;
8b095871 10450
9987f0c1
IC
10451/*<replacement>*/
10452var util = require('core-util-is');
10453util.inherits = require('inherits');
10454/*</replacement>*/
8b095871 10455
9987f0c1
IC
10456var Readable = require('./_stream_readable');
10457var Writable = require('./_stream_writable');
8b095871 10458
9987f0c1 10459util.inherits(Duplex, Readable);
8b095871 10460
9987f0c1
IC
10461var keys = objectKeys(Writable.prototype);
10462for (var v = 0; v < keys.length; v++) {
10463 var method = keys[v];
10464 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
8b095871 10465}
8b095871 10466
9987f0c1
IC
10467function Duplex(options) {
10468 if (!(this instanceof Duplex)) return new Duplex(options);
8b095871 10469
9987f0c1
IC
10470 Readable.call(this, options);
10471 Writable.call(this, options);
8b095871 10472
9987f0c1 10473 if (options && options.readable === false) this.readable = false;
8b095871 10474
9987f0c1 10475 if (options && options.writable === false) this.writable = false;
8b095871 10476
9987f0c1
IC
10477 this.allowHalfOpen = true;
10478 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
8b095871 10479
9987f0c1 10480 this.once('end', onend);
8b095871
IC
10481}
10482
9987f0c1
IC
10483// the no-half-open enforcer
10484function onend() {
10485 // if we allow half-open state, or if the writable side ended,
10486 // then we're ok.
10487 if (this.allowHalfOpen || this._writableState.ended) return;
8b095871 10488
9987f0c1
IC
10489 // no more data can be written.
10490 // But allow more writes to happen in this tick.
10491 processNextTick(onEndNT, this);
8b095871
IC
10492}
10493
9987f0c1
IC
10494function onEndNT(self) {
10495 self.end();
8b095871
IC
10496}
10497
9987f0c1
IC
10498Object.defineProperty(Duplex.prototype, 'destroyed', {
10499 get: function () {
10500 if (this._readableState === undefined || this._writableState === undefined) {
10501 return false;
8b095871 10502 }
9987f0c1
IC
10503 return this._readableState.destroyed && this._writableState.destroyed;
10504 },
10505 set: function (value) {
10506 // we ignore the value if the stream
10507 // has not been initialized yet
10508 if (this._readableState === undefined || this._writableState === undefined) {
10509 return;
8b095871 10510 }
9987f0c1
IC
10511
10512 // backward compatibility, the user is explicitly
10513 // managing destroyed
10514 this._readableState.destroyed = value;
10515 this._writableState.destroyed = value;
8b095871 10516 }
9987f0c1 10517});
8b095871 10518
9987f0c1
IC
10519Duplex.prototype._destroy = function (err, cb) {
10520 this.push(null);
10521 this.end();
8b095871 10522
9987f0c1
IC
10523 processNextTick(cb, err);
10524};
8b095871 10525
9987f0c1
IC
10526function forEach(xs, f) {
10527 for (var i = 0, l = xs.length; i < l; i++) {
10528 f(xs[i], i);
10529 }
8b095871 10530}
9987f0c1
IC
10531},{"./_stream_readable":16,"./_stream_writable":18,"core-util-is":5,"inherits":8,"process-nextick-args":11}],15:[function(require,module,exports){
10532// Copyright Joyent, Inc. and other Node contributors.
10533//
10534// Permission is hereby granted, free of charge, to any person obtaining a
10535// copy of this software and associated documentation files (the
10536// "Software"), to deal in the Software without restriction, including
10537// without limitation the rights to use, copy, modify, merge, publish,
10538// distribute, sublicense, and/or sell copies of the Software, and to permit
10539// persons to whom the Software is furnished to do so, subject to the
10540// following conditions:
10541//
10542// The above copyright notice and this permission notice shall be included
10543// in all copies or substantial portions of the Software.
10544//
10545// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10546// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10547// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10548// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10549// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10550// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10551// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 10552
9987f0c1
IC
10553// a passthrough stream.
10554// basically just the most minimal sort of Transform stream.
10555// Every written chunk gets output as-is.
8b095871 10556
9987f0c1 10557'use strict';
8b095871 10558
9987f0c1 10559module.exports = PassThrough;
8b095871 10560
9987f0c1 10561var Transform = require('./_stream_transform');
8b095871 10562
9987f0c1
IC
10563/*<replacement>*/
10564var util = require('core-util-is');
10565util.inherits = require('inherits');
10566/*</replacement>*/
8b095871 10567
9987f0c1 10568util.inherits(PassThrough, Transform);
8b095871 10569
9987f0c1
IC
10570function PassThrough(options) {
10571 if (!(this instanceof PassThrough)) return new PassThrough(options);
8b095871 10572
9987f0c1 10573 Transform.call(this, options);
8b095871
IC
10574}
10575
9987f0c1
IC
10576PassThrough.prototype._transform = function (chunk, encoding, cb) {
10577 cb(null, chunk);
10578};
10579},{"./_stream_transform":17,"core-util-is":5,"inherits":8}],16:[function(require,module,exports){
10580(function (process,global){
10581// Copyright Joyent, Inc. and other Node contributors.
10582//
10583// Permission is hereby granted, free of charge, to any person obtaining a
10584// copy of this software and associated documentation files (the
10585// "Software"), to deal in the Software without restriction, including
10586// without limitation the rights to use, copy, modify, merge, publish,
10587// distribute, sublicense, and/or sell copies of the Software, and to permit
10588// persons to whom the Software is furnished to do so, subject to the
10589// following conditions:
10590//
10591// The above copyright notice and this permission notice shall be included
10592// in all copies or substantial portions of the Software.
10593//
10594// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10595// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
10596// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
10597// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
10598// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
10599// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
10600// USE OR OTHER DEALINGS IN THE SOFTWARE.
10601
10602'use strict';
8b095871 10603
9987f0c1 10604/*<replacement>*/
8b095871 10605
9987f0c1
IC
10606var processNextTick = require('process-nextick-args');
10607/*</replacement>*/
8b095871 10608
9987f0c1 10609module.exports = Readable;
8b095871 10610
9987f0c1
IC
10611/*<replacement>*/
10612var isArray = require('isarray');
10613/*</replacement>*/
8b095871 10614
9987f0c1
IC
10615/*<replacement>*/
10616var Duplex;
10617/*</replacement>*/
8b095871 10618
9987f0c1 10619Readable.ReadableState = ReadableState;
8b095871 10620
9987f0c1
IC
10621/*<replacement>*/
10622var EE = require('events').EventEmitter;
8b095871 10623
9987f0c1
IC
10624var EElistenerCount = function (emitter, type) {
10625 return emitter.listeners(type).length;
10626};
10627/*</replacement>*/
8b095871 10628
9987f0c1
IC
10629/*<replacement>*/
10630var Stream = require('./internal/streams/stream');
10631/*</replacement>*/
8b095871 10632
9987f0c1
IC
10633// TODO(bmeurer): Change this back to const once hole checks are
10634// properly optimized away early in Ignition+TurboFan.
10635/*<replacement>*/
10636var Buffer = require('safe-buffer').Buffer;
10637var OurUint8Array = global.Uint8Array || function () {};
10638function _uint8ArrayToBuffer(chunk) {
10639 return Buffer.from(chunk);
10640}
10641function _isUint8Array(obj) {
10642 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
8b095871 10643}
9987f0c1 10644/*</replacement>*/
8b095871 10645
9987f0c1
IC
10646/*<replacement>*/
10647var util = require('core-util-is');
10648util.inherits = require('inherits');
10649/*</replacement>*/
10650
10651/*<replacement>*/
10652var debugUtil = require('util');
10653var debug = void 0;
10654if (debugUtil && debugUtil.debuglog) {
10655 debug = debugUtil.debuglog('stream');
10656} else {
10657 debug = function () {};
8b095871 10658}
9987f0c1 10659/*</replacement>*/
8b095871 10660
9987f0c1
IC
10661var BufferList = require('./internal/streams/BufferList');
10662var destroyImpl = require('./internal/streams/destroy');
10663var StringDecoder;
10664
10665util.inherits(Readable, Stream);
10666
10667var kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];
10668
10669function prependListener(emitter, event, fn) {
10670 // Sadly this is not cacheable as some libraries bundle their own
10671 // event emitter implementation with them.
10672 if (typeof emitter.prependListener === 'function') {
10673 return emitter.prependListener(event, fn);
8b095871 10674 } else {
9987f0c1
IC
10675 // This is a hack to make sure that our error handler is attached before any
10676 // userland ones. NEVER DO THIS. This is here only because this code needs
10677 // to continue to work with older versions of Node.js that do not include
10678 // the prependListener() method. The goal is to eventually remove this hack.
10679 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
8b095871
IC
10680 }
10681}
10682
9987f0c1
IC
10683function ReadableState(options, stream) {
10684 Duplex = Duplex || require('./_stream_duplex');
8b095871 10685
9987f0c1 10686 options = options || {};
8b095871 10687
9987f0c1
IC
10688 // object stream flag. Used to make read(n) ignore n and to
10689 // make all the buffer merging and length checks go away
10690 this.objectMode = !!options.objectMode;
8b095871 10691
9987f0c1 10692 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
8b095871 10693
9987f0c1
IC
10694 // the point at which it stops calling _read() to fill the buffer
10695 // Note: 0 is a valid value, means "don't call _read preemptively ever"
10696 var hwm = options.highWaterMark;
10697 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
10698 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 10699
9987f0c1
IC
10700 // cast to ints.
10701 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 10702
9987f0c1
IC
10703 // A linked list is used to store data chunks instead of an array because the
10704 // linked list can remove elements from the beginning faster than
10705 // array.shift()
10706 this.buffer = new BufferList();
10707 this.length = 0;
10708 this.pipes = null;
10709 this.pipesCount = 0;
10710 this.flowing = null;
10711 this.ended = false;
10712 this.endEmitted = false;
10713 this.reading = false;
8b095871 10714
9987f0c1
IC
10715 // a flag to be able to tell if the event 'readable'/'data' is emitted
10716 // immediately, or on a later tick. We set this to true at first, because
10717 // any actions that shouldn't happen until "later" should generally also
10718 // not happen before the first read call.
10719 this.sync = true;
8b095871 10720
9987f0c1
IC
10721 // whenever we return null, then we set a flag to say
10722 // that we're awaiting a 'readable' event emission.
10723 this.needReadable = false;
10724 this.emittedReadable = false;
10725 this.readableListening = false;
10726 this.resumeScheduled = false;
8b095871 10727
9987f0c1
IC
10728 // has it been destroyed
10729 this.destroyed = false;
8b095871 10730
9987f0c1
IC
10731 // Crypto is kind of old and crusty. Historically, its default string
10732 // encoding is 'binary' so we have to make this configurable.
10733 // Everything else in the universe uses 'utf8', though.
10734 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 10735
9987f0c1
IC
10736 // the number of writers that are awaiting a drain event in .pipe()s
10737 this.awaitDrain = 0;
8b095871 10738
9987f0c1
IC
10739 // if true, a maybeReadMore has been scheduled
10740 this.readingMore = false;
8b095871 10741
9987f0c1
IC
10742 this.decoder = null;
10743 this.encoding = null;
10744 if (options.encoding) {
10745 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10746 this.decoder = new StringDecoder(options.encoding);
10747 this.encoding = options.encoding;
8b095871 10748 }
8b095871
IC
10749}
10750
9987f0c1
IC
10751function Readable(options) {
10752 Duplex = Duplex || require('./_stream_duplex');
8b095871 10753
9987f0c1 10754 if (!(this instanceof Readable)) return new Readable(options);
8b095871 10755
9987f0c1 10756 this._readableState = new ReadableState(options, this);
8b095871 10757
9987f0c1
IC
10758 // legacy
10759 this.readable = true;
10760
10761 if (options) {
10762 if (typeof options.read === 'function') this._read = options.read;
10763
10764 if (typeof options.destroy === 'function') this._destroy = options.destroy;
8b095871
IC
10765 }
10766
9987f0c1
IC
10767 Stream.call(this);
10768}
8b095871 10769
9987f0c1
IC
10770Object.defineProperty(Readable.prototype, 'destroyed', {
10771 get: function () {
10772 if (this._readableState === undefined) {
10773 return false;
10774 }
10775 return this._readableState.destroyed;
10776 },
10777 set: function (value) {
10778 // we ignore the value if the stream
10779 // has not been initialized yet
10780 if (!this._readableState) {
10781 return;
8b095871 10782 }
9987f0c1
IC
10783
10784 // backward compatibility, the user is explicitly
10785 // managing destroyed
10786 this._readableState.destroyed = value;
8b095871 10787 }
9987f0c1 10788});
8b095871 10789
9987f0c1
IC
10790Readable.prototype.destroy = destroyImpl.destroy;
10791Readable.prototype._undestroy = destroyImpl.undestroy;
10792Readable.prototype._destroy = function (err, cb) {
10793 this.push(null);
10794 cb(err);
10795};
8b095871 10796
9987f0c1
IC
10797// Manually shove something into the read() buffer.
10798// This returns true if the highWaterMark has not been hit yet,
10799// similar to how Writable.write() returns true if you should
10800// write() some more.
10801Readable.prototype.push = function (chunk, encoding) {
10802 var state = this._readableState;
10803 var skipChunkCheck;
10804
10805 if (!state.objectMode) {
10806 if (typeof chunk === 'string') {
10807 encoding = encoding || state.defaultEncoding;
10808 if (encoding !== state.encoding) {
10809 chunk = Buffer.from(chunk, encoding);
10810 encoding = '';
10811 }
10812 skipChunkCheck = true;
10813 }
10814 } else {
10815 skipChunkCheck = true;
10816 }
8b095871 10817
9987f0c1
IC
10818 return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);
10819};
8b095871 10820
9987f0c1
IC
10821// Unshift should *always* be something directly out of read()
10822Readable.prototype.unshift = function (chunk) {
10823 return readableAddChunk(this, chunk, null, true, false);
10824};
8b095871 10825
9987f0c1
IC
10826function readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {
10827 var state = stream._readableState;
10828 if (chunk === null) {
10829 state.reading = false;
10830 onEofChunk(stream, state);
10831 } else {
10832 var er;
10833 if (!skipChunkCheck) er = chunkInvalid(state, chunk);
10834 if (er) {
10835 stream.emit('error', er);
10836 } else if (state.objectMode || chunk && chunk.length > 0) {
10837 if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {
10838 chunk = _uint8ArrayToBuffer(chunk);
10839 }
10840
10841 if (addToFront) {
10842 if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);
10843 } else if (state.ended) {
10844 stream.emit('error', new Error('stream.push() after EOF'));
10845 } else {
10846 state.reading = false;
10847 if (state.decoder && !encoding) {
10848 chunk = state.decoder.write(chunk);
10849 if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);
10850 } else {
10851 addChunk(stream, state, chunk, false);
10852 }
10853 }
10854 } else if (!addToFront) {
10855 state.reading = false;
10856 }
8b095871
IC
10857 }
10858
9987f0c1 10859 return needMoreData(state);
8b095871
IC
10860}
10861
9987f0c1
IC
10862function addChunk(stream, state, chunk, addToFront) {
10863 if (state.flowing && state.length === 0 && !state.sync) {
10864 stream.emit('data', chunk);
10865 stream.read(0);
10866 } else {
10867 // update the buffer info.
10868 state.length += state.objectMode ? 1 : chunk.length;
10869 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
8b095871 10870
9987f0c1 10871 if (state.needReadable) emitReadable(stream);
8b095871 10872 }
9987f0c1 10873 maybeReadMore(stream, state);
8b095871
IC
10874}
10875
9987f0c1
IC
10876function chunkInvalid(state, chunk) {
10877 var er;
10878 if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
10879 er = new TypeError('Invalid non-string/buffer chunk');
10880 }
10881 return er;
8b095871
IC
10882}
10883
9987f0c1
IC
10884// if it's past the high water mark, we can push in some more.
10885// Also, if we have no data yet, we can stand some
10886// more bytes. This is to work around cases where hwm=0,
10887// such as the repl. Also, if the push() triggered a
10888// readable event, and the user called read(largeNumber) such that
10889// needReadable was set, then we ought to push more, so that another
10890// 'readable' event will be triggered.
10891function needMoreData(state) {
10892 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
8b095871
IC
10893}
10894
9987f0c1
IC
10895Readable.prototype.isPaused = function () {
10896 return this._readableState.flowing === false;
10897};
8b095871 10898
9987f0c1
IC
10899// backwards compatibility.
10900Readable.prototype.setEncoding = function (enc) {
10901 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
10902 this._readableState.decoder = new StringDecoder(enc);
10903 this._readableState.encoding = enc;
10904 return this;
10905};
8b095871 10906
9987f0c1
IC
10907// Don't raise the hwm > 8MB
10908var MAX_HWM = 0x800000;
10909function computeNewHighWaterMark(n) {
10910 if (n >= MAX_HWM) {
10911 n = MAX_HWM;
10912 } else {
10913 // Get the next highest power of 2 to prevent increasing hwm excessively in
10914 // tiny amounts
10915 n--;
10916 n |= n >>> 1;
10917 n |= n >>> 2;
10918 n |= n >>> 4;
10919 n |= n >>> 8;
10920 n |= n >>> 16;
10921 n++;
10922 }
10923 return n;
8b095871
IC
10924}
10925
9987f0c1
IC
10926// This function is designed to be inlinable, so please take care when making
10927// changes to the function body.
10928function howMuchToRead(n, state) {
10929 if (n <= 0 || state.length === 0 && state.ended) return 0;
10930 if (state.objectMode) return 1;
10931 if (n !== n) {
10932 // Only flow one buffer at a time
10933 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
10934 }
10935 // If we're asking for more than the current hwm, then raise the hwm.
10936 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
10937 if (n <= state.length) return n;
10938 // Don't have enough
10939 if (!state.ended) {
10940 state.needReadable = true;
10941 return 0;
10942 }
10943 return state.length;
8b095871
IC
10944}
10945
9987f0c1
IC
10946// you can override either this method, or the async _read(n) below.
10947Readable.prototype.read = function (n) {
10948 debug('read', n);
10949 n = parseInt(n, 10);
10950 var state = this._readableState;
10951 var nOrig = n;
8b095871 10952
9987f0c1
IC
10953 if (n !== 0) state.emittedReadable = false;
10954
10955 // if we're doing read(0) to trigger a readable event, but we
10956 // already have a bunch of data in the buffer, then just trigger
10957 // the 'readable' event and move on.
10958 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
10959 debug('read: emitReadable', state.length, state.ended);
10960 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
10961 return null;
8b095871 10962 }
8b095871 10963
9987f0c1 10964 n = howMuchToRead(n, state);
8b095871 10965
9987f0c1
IC
10966 // if we've ended, and we're now clear, then finish it up.
10967 if (n === 0 && state.ended) {
10968 if (state.length === 0) endReadable(this);
10969 return null;
10970 }
8b095871 10971
9987f0c1
IC
10972 // All the actual chunk generation logic needs to be
10973 // *below* the call to _read. The reason is that in certain
10974 // synthetic stream cases, such as passthrough streams, _read
10975 // may be a completely synchronous operation which may change
10976 // the state of the read buffer, providing enough data when
10977 // before there was *not* enough.
10978 //
10979 // So, the steps are:
10980 // 1. Figure out what the state of things will be after we do
10981 // a read from the buffer.
10982 //
10983 // 2. If that resulting state will trigger a _read, then call _read.
10984 // Note that this may be asynchronous, or synchronous. Yes, it is
10985 // deeply ugly to write APIs this way, but that still doesn't mean
10986 // that the Readable class should behave improperly, as streams are
10987 // designed to be sync/async agnostic.
10988 // Take note if the _read call is sync or async (ie, if the read call
10989 // has returned yet), so that we know whether or not it's safe to emit
10990 // 'readable' etc.
10991 //
10992 // 3. Actually pull the requested chunks out of the buffer and return.
8b095871 10993
9987f0c1
IC
10994 // if we need a readable event, then we need to do some reading.
10995 var doRead = state.needReadable;
10996 debug('need readable', doRead);
8b095871 10997
9987f0c1
IC
10998 // if we currently have less than the highWaterMark, then also read some
10999 if (state.length === 0 || state.length - n < state.highWaterMark) {
11000 doRead = true;
11001 debug('length less than watermark', doRead);
11002 }
8b095871 11003
9987f0c1
IC
11004 // however, if we've ended, then there's no point, and if we're already
11005 // reading, then it's unnecessary.
11006 if (state.ended || state.reading) {
11007 doRead = false;
11008 debug('reading or ended', doRead);
11009 } else if (doRead) {
11010 debug('do read');
11011 state.reading = true;
11012 state.sync = true;
11013 // if the length is currently zero, then we *need* a readable event.
11014 if (state.length === 0) state.needReadable = true;
11015 // call internal read method
11016 this._read(state.highWaterMark);
11017 state.sync = false;
11018 // If _read pushed data synchronously, then `reading` will be false,
11019 // and we need to re-evaluate how much data we can return to the user.
11020 if (!state.reading) n = howMuchToRead(nOrig, state);
11021 }
8b095871 11022
9987f0c1
IC
11023 var ret;
11024 if (n > 0) ret = fromList(n, state);else ret = null;
8b095871 11025
9987f0c1
IC
11026 if (ret === null) {
11027 state.needReadable = true;
11028 n = 0;
11029 } else {
11030 state.length -= n;
11031 }
8b095871 11032
9987f0c1
IC
11033 if (state.length === 0) {
11034 // If we have nothing in the buffer, then we want to know
11035 // as soon as we *do* get something into the buffer.
11036 if (!state.ended) state.needReadable = true;
8b095871 11037
9987f0c1
IC
11038 // If we tried to read() past the EOF, then emit end on the next tick.
11039 if (nOrig !== n && state.ended) endReadable(this);
11040 }
8b095871 11041
9987f0c1 11042 if (ret !== null) this.emit('data', ret);
8b095871 11043
9987f0c1
IC
11044 return ret;
11045};
8b095871 11046
9987f0c1
IC
11047function onEofChunk(stream, state) {
11048 if (state.ended) return;
11049 if (state.decoder) {
11050 var chunk = state.decoder.end();
11051 if (chunk && chunk.length) {
11052 state.buffer.push(chunk);
11053 state.length += state.objectMode ? 1 : chunk.length;
11054 }
11055 }
11056 state.ended = true;
8b095871 11057
9987f0c1
IC
11058 // emit 'readable' now to make sure it gets picked up.
11059 emitReadable(stream);
8b095871
IC
11060}
11061
9987f0c1
IC
11062// Don't emit readable right away in sync mode, because this can trigger
11063// another read() call => stack overflow. This way, it might trigger
11064// a nextTick recursion warning, but that's not so bad.
11065function emitReadable(stream) {
11066 var state = stream._readableState;
11067 state.needReadable = false;
11068 if (!state.emittedReadable) {
11069 debug('emitReadable', state.flowing);
11070 state.emittedReadable = true;
11071 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
11072 }
8b095871
IC
11073}
11074
9987f0c1
IC
11075function emitReadable_(stream) {
11076 debug('emit readable');
11077 stream.emit('readable');
11078 flow(stream);
8b095871
IC
11079}
11080
9987f0c1
IC
11081// at this point, the user has presumably seen the 'readable' event,
11082// and called read() to consume some data. that may have triggered
11083// in turn another _read(n) call, in which case reading = true if
11084// it's in progress.
11085// However, if we're not ended, or reading, and the length < hwm,
11086// then go ahead and try to read some more preemptively.
11087function maybeReadMore(stream, state) {
11088 if (!state.readingMore) {
11089 state.readingMore = true;
11090 processNextTick(maybeReadMore_, stream, state);
11091 }
8b095871
IC
11092}
11093
9987f0c1
IC
11094function maybeReadMore_(stream, state) {
11095 var len = state.length;
11096 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
11097 debug('maybeReadMore read 0');
11098 stream.read(0);
11099 if (len === state.length)
11100 // didn't get any data, stop spinning.
11101 break;else len = state.length;
11102 }
11103 state.readingMore = false;
8b095871
IC
11104}
11105
9987f0c1
IC
11106// abstract method. to be overridden in specific implementation classes.
11107// call cb(er, data) where data is <= n in length.
11108// for virtual (non-string, non-buffer) streams, "length" is somewhat
11109// arbitrary, and perhaps not very meaningful.
11110Readable.prototype._read = function (n) {
11111 this.emit('error', new Error('_read() is not implemented'));
11112};
8b095871 11113
9987f0c1
IC
11114Readable.prototype.pipe = function (dest, pipeOpts) {
11115 var src = this;
11116 var state = this._readableState;
11117
11118 switch (state.pipesCount) {
11119 case 0:
11120 state.pipes = dest;
11121 break;
11122 case 1:
11123 state.pipes = [state.pipes, dest];
11124 break;
11125 default:
11126 state.pipes.push(dest);
11127 break;
8b095871 11128 }
9987f0c1
IC
11129 state.pipesCount += 1;
11130 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
8b095871 11131
9987f0c1 11132 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
8b095871 11133
9987f0c1
IC
11134 var endFn = doEnd ? onend : unpipe;
11135 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
8b095871 11136
9987f0c1
IC
11137 dest.on('unpipe', onunpipe);
11138 function onunpipe(readable, unpipeInfo) {
11139 debug('onunpipe');
11140 if (readable === src) {
11141 if (unpipeInfo && unpipeInfo.hasUnpiped === false) {
11142 unpipeInfo.hasUnpiped = true;
11143 cleanup();
11144 }
11145 }
8b095871
IC
11146 }
11147
9987f0c1
IC
11148 function onend() {
11149 debug('onend');
11150 dest.end();
11151 }
8b095871 11152
9987f0c1
IC
11153 // when the dest drains, it reduces the awaitDrain counter
11154 // on the source. This would be more elegant with a .once()
11155 // handler in flow(), but adding and removing repeatedly is
11156 // too slow.
11157 var ondrain = pipeOnDrain(src);
11158 dest.on('drain', ondrain);
8b095871 11159
9987f0c1
IC
11160 var cleanedUp = false;
11161 function cleanup() {
11162 debug('cleanup');
11163 // cleanup event handlers once the pipe is broken
11164 dest.removeListener('close', onclose);
11165 dest.removeListener('finish', onfinish);
11166 dest.removeListener('drain', ondrain);
11167 dest.removeListener('error', onerror);
11168 dest.removeListener('unpipe', onunpipe);
11169 src.removeListener('end', onend);
11170 src.removeListener('end', unpipe);
11171 src.removeListener('data', ondata);
8b095871 11172
9987f0c1
IC
11173 cleanedUp = true;
11174
11175 // if the reader is waiting for a drain event from this
11176 // specific writer, then it would cause it to never start
11177 // flowing again.
11178 // So, if this is awaiting a drain, then we just call it now.
11179 // If we don't know, then assume that we are waiting for one.
11180 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
8b095871 11181 }
8b095871 11182
9987f0c1
IC
11183 // If the user pushes more data while we're writing to dest then we'll end up
11184 // in ondata again. However, we only want to increase awaitDrain once because
11185 // dest will only emit one 'drain' event for the multiple writes.
11186 // => Introduce a guard on increasing awaitDrain.
11187 var increasedAwaitDrain = false;
11188 src.on('data', ondata);
11189 function ondata(chunk) {
11190 debug('ondata');
11191 increasedAwaitDrain = false;
11192 var ret = dest.write(chunk);
11193 if (false === ret && !increasedAwaitDrain) {
11194 // If the user unpiped during `dest.write()`, it is possible
11195 // to get stuck in a permanently paused state if that write
11196 // also returned false.
11197 // => Check whether `dest` is still a piping destination.
11198 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
11199 debug('false write response, pause', src._readableState.awaitDrain);
11200 src._readableState.awaitDrain++;
11201 increasedAwaitDrain = true;
11202 }
11203 src.pause();
11204 }
8b095871 11205 }
8b095871 11206
9987f0c1
IC
11207 // if the dest has an error, then stop piping into it.
11208 // however, don't suppress the throwing behavior for this.
11209 function onerror(er) {
11210 debug('onerror', er);
11211 unpipe();
11212 dest.removeListener('error', onerror);
11213 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
8b095871 11214 }
8b095871 11215
9987f0c1
IC
11216 // Make sure our error handler is attached before userland ones.
11217 prependListener(dest, 'error', onerror);
11218
11219 // Both close and finish should trigger unpipe, but only once.
11220 function onclose() {
11221 dest.removeListener('finish', onfinish);
11222 unpipe();
8b095871 11223 }
9987f0c1
IC
11224 dest.once('close', onclose);
11225 function onfinish() {
11226 debug('onfinish');
11227 dest.removeListener('close', onclose);
11228 unpipe();
11229 }
11230 dest.once('finish', onfinish);
8b095871 11231
9987f0c1
IC
11232 function unpipe() {
11233 debug('unpipe');
11234 src.unpipe(dest);
8b095871 11235 }
8b095871 11236
9987f0c1
IC
11237 // tell the dest that it's being piped to
11238 dest.emit('pipe', src);
8b095871 11239
9987f0c1
IC
11240 // start the flow if it hasn't been started already.
11241 if (!state.flowing) {
11242 debug('pipe resume');
11243 src.resume();
8b095871
IC
11244 }
11245
9987f0c1
IC
11246 return dest;
11247};
8b095871 11248
9987f0c1
IC
11249function pipeOnDrain(src) {
11250 return function () {
11251 var state = src._readableState;
11252 debug('pipeOnDrain', state.awaitDrain);
11253 if (state.awaitDrain) state.awaitDrain--;
11254 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
11255 state.flowing = true;
11256 flow(src);
11257 }
11258 };
8b095871
IC
11259}
11260
9987f0c1
IC
11261Readable.prototype.unpipe = function (dest) {
11262 var state = this._readableState;
11263 var unpipeInfo = { hasUnpiped: false };
8b095871 11264
9987f0c1
IC
11265 // if we're not piping anywhere, then do nothing.
11266 if (state.pipesCount === 0) return this;
8b095871 11267
9987f0c1
IC
11268 // just one destination. most common case.
11269 if (state.pipesCount === 1) {
11270 // passed in one, but it's not the right one.
11271 if (dest && dest !== state.pipes) return this;
11272
11273 if (!dest) dest = state.pipes;
11274
11275 // got a match.
11276 state.pipes = null;
11277 state.pipesCount = 0;
11278 state.flowing = false;
11279 if (dest) dest.emit('unpipe', this, unpipeInfo);
11280 return this;
8b095871
IC
11281 }
11282
9987f0c1 11283 // slow case. multiple pipe destinations.
8b095871 11284
9987f0c1
IC
11285 if (!dest) {
11286 // remove all.
11287 var dests = state.pipes;
11288 var len = state.pipesCount;
11289 state.pipes = null;
11290 state.pipesCount = 0;
11291 state.flowing = false;
8b095871 11292
9987f0c1
IC
11293 for (var i = 0; i < len; i++) {
11294 dests[i].emit('unpipe', this, unpipeInfo);
11295 }return this;
8b095871 11296 }
8b095871 11297
9987f0c1
IC
11298 // try to find the right one.
11299 var index = indexOf(state.pipes, dest);
11300 if (index === -1) return this;
8b095871 11301
9987f0c1
IC
11302 state.pipes.splice(index, 1);
11303 state.pipesCount -= 1;
11304 if (state.pipesCount === 1) state.pipes = state.pipes[0];
8b095871 11305
9987f0c1 11306 dest.emit('unpipe', this, unpipeInfo);
8b095871 11307
9987f0c1
IC
11308 return this;
11309};
8b095871 11310
9987f0c1
IC
11311// set up data events if they are asked for
11312// Ensure readable listeners eventually get something
11313Readable.prototype.on = function (ev, fn) {
11314 var res = Stream.prototype.on.call(this, ev, fn);
11315
11316 if (ev === 'data') {
11317 // Start flowing on next tick if stream isn't explicitly paused
11318 if (this._readableState.flowing !== false) this.resume();
11319 } else if (ev === 'readable') {
11320 var state = this._readableState;
11321 if (!state.endEmitted && !state.readableListening) {
11322 state.readableListening = state.needReadable = true;
11323 state.emittedReadable = false;
11324 if (!state.reading) {
11325 processNextTick(nReadingNextTick, this);
11326 } else if (state.length) {
11327 emitReadable(this);
11328 }
11329 }
8b095871 11330 }
8b095871 11331
9987f0c1
IC
11332 return res;
11333};
11334Readable.prototype.addListener = Readable.prototype.on;
8b095871 11335
9987f0c1
IC
11336function nReadingNextTick(self) {
11337 debug('readable nexttick read 0');
11338 self.read(0);
8b095871
IC
11339}
11340
9987f0c1
IC
11341// pause() and resume() are remnants of the legacy readable stream API
11342// If the user uses them, then switch into old mode.
11343Readable.prototype.resume = function () {
11344 var state = this._readableState;
11345 if (!state.flowing) {
11346 debug('resume');
11347 state.flowing = true;
11348 resume(this, state);
11349 }
11350 return this;
11351};
11352
11353function resume(stream, state) {
11354 if (!state.resumeScheduled) {
11355 state.resumeScheduled = true;
11356 processNextTick(resume_, stream, state);
8b095871 11357 }
8b095871
IC
11358}
11359
9987f0c1
IC
11360function resume_(stream, state) {
11361 if (!state.reading) {
11362 debug('resume read 0');
11363 stream.read(0);
11364 }
11365
11366 state.resumeScheduled = false;
11367 state.awaitDrain = 0;
11368 stream.emit('resume');
11369 flow(stream);
11370 if (state.flowing && !state.reading) stream.read(0);
8b095871
IC
11371}
11372
9987f0c1
IC
11373Readable.prototype.pause = function () {
11374 debug('call pause flowing=%j', this._readableState.flowing);
11375 if (false !== this._readableState.flowing) {
11376 debug('pause');
11377 this._readableState.flowing = false;
11378 this.emit('pause');
11379 }
11380 return this;
11381};
11382
11383function flow(stream) {
11384 var state = stream._readableState;
11385 debug('flow', state.flowing);
11386 while (state.flowing && stream.read() !== null) {}
8b095871
IC
11387}
11388
9987f0c1
IC
11389// wrap an old-style stream as the async data source.
11390// This is *not* part of the readable stream interface.
11391// It is an ugly unfortunate mess of history.
11392Readable.prototype.wrap = function (stream) {
11393 var state = this._readableState;
11394 var paused = false;
8b095871 11395
9987f0c1
IC
11396 var self = this;
11397 stream.on('end', function () {
11398 debug('wrapped end');
11399 if (state.decoder && !state.ended) {
11400 var chunk = state.decoder.end();
11401 if (chunk && chunk.length) self.push(chunk);
11402 }
8b095871 11403
9987f0c1
IC
11404 self.push(null);
11405 });
8b095871 11406
9987f0c1
IC
11407 stream.on('data', function (chunk) {
11408 debug('wrapped data');
11409 if (state.decoder) chunk = state.decoder.write(chunk);
8b095871 11410
9987f0c1
IC
11411 // don't skip over falsy values in objectMode
11412 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
8b095871 11413
9987f0c1
IC
11414 var ret = self.push(chunk);
11415 if (!ret) {
11416 paused = true;
11417 stream.pause();
8b095871 11418 }
9987f0c1
IC
11419 });
11420
11421 // proxy all the other methods.
11422 // important when wrapping filters and duplexes.
11423 for (var i in stream) {
11424 if (this[i] === undefined && typeof stream[i] === 'function') {
11425 this[i] = function (method) {
11426 return function () {
11427 return stream[method].apply(stream, arguments);
11428 };
11429 }(i);
8b095871 11430 }
8b095871
IC
11431 }
11432
9987f0c1
IC
11433 // proxy certain important events.
11434 for (var n = 0; n < kProxyEvents.length; n++) {
11435 stream.on(kProxyEvents[n], self.emit.bind(self, kProxyEvents[n]));
11436 }
8b095871 11437
9987f0c1
IC
11438 // when we try to consume some more bytes, simply unpause the
11439 // underlying stream.
11440 self._read = function (n) {
11441 debug('wrapped _read', n);
11442 if (paused) {
11443 paused = false;
11444 stream.resume();
11445 }
11446 };
8b095871 11447
9987f0c1
IC
11448 return self;
11449};
8b095871 11450
9987f0c1
IC
11451// exposed for testing purposes only.
11452Readable._fromList = fromList;
8b095871 11453
9987f0c1
IC
11454// Pluck off n bytes from an array of buffers.
11455// Length is the combined lengths of all the buffers in the list.
11456// This function is designed to be inlinable, so please take care when making
11457// changes to the function body.
11458function fromList(n, state) {
11459 // nothing buffered
11460 if (state.length === 0) return null;
8b095871 11461
9987f0c1
IC
11462 var ret;
11463 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
11464 // read it all, truncate the list
11465 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
11466 state.buffer.clear();
8b095871 11467 } else {
9987f0c1
IC
11468 // read part of list
11469 ret = fromListPartial(n, state.buffer, state.decoder);
8b095871
IC
11470 }
11471
9987f0c1 11472 return ret;
8b095871
IC
11473}
11474
9987f0c1
IC
11475// Extracts only enough buffered data to satisfy the amount requested.
11476// This function is designed to be inlinable, so please take care when making
11477// changes to the function body.
11478function fromListPartial(n, list, hasStrings) {
11479 var ret;
11480 if (n < list.head.data.length) {
11481 // slice is the same for buffers and strings
11482 ret = list.head.data.slice(0, n);
11483 list.head.data = list.head.data.slice(n);
11484 } else if (n === list.head.data.length) {
11485 // first chunk is a perfect match
11486 ret = list.shift();
8b095871 11487 } else {
9987f0c1
IC
11488 // result spans more than one buffer
11489 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
8b095871 11490 }
9987f0c1 11491 return ret;
8b095871
IC
11492}
11493
9987f0c1
IC
11494// Copies a specified amount of characters from the list of buffered data
11495// chunks.
11496// This function is designed to be inlinable, so please take care when making
11497// changes to the function body.
11498function copyFromBufferString(n, list) {
11499 var p = list.head;
11500 var c = 1;
11501 var ret = p.data;
11502 n -= ret.length;
11503 while (p = p.next) {
11504 var str = p.data;
11505 var nb = n > str.length ? str.length : n;
11506 if (nb === str.length) ret += str;else ret += str.slice(0, n);
11507 n -= nb;
11508 if (n === 0) {
11509 if (nb === str.length) {
11510 ++c;
11511 if (p.next) list.head = p.next;else list.head = list.tail = null;
11512 } else {
11513 list.head = p;
11514 p.data = str.slice(nb);
11515 }
11516 break;
11517 }
11518 ++c;
8b095871 11519 }
9987f0c1
IC
11520 list.length -= c;
11521 return ret;
8b095871
IC
11522}
11523
9987f0c1
IC
11524// Copies a specified amount of bytes from the list of buffered data chunks.
11525// This function is designed to be inlinable, so please take care when making
11526// changes to the function body.
11527function copyFromBuffer(n, list) {
11528 var ret = Buffer.allocUnsafe(n);
11529 var p = list.head;
11530 var c = 1;
11531 p.data.copy(ret);
11532 n -= p.data.length;
11533 while (p = p.next) {
11534 var buf = p.data;
11535 var nb = n > buf.length ? buf.length : n;
11536 buf.copy(ret, ret.length - n, 0, nb);
11537 n -= nb;
11538 if (n === 0) {
11539 if (nb === buf.length) {
11540 ++c;
11541 if (p.next) list.head = p.next;else list.head = list.tail = null;
11542 } else {
11543 list.head = p;
11544 p.data = buf.slice(nb);
8b095871 11545 }
9987f0c1 11546 break;
8b095871 11547 }
9987f0c1 11548 ++c;
8b095871 11549 }
9987f0c1
IC
11550 list.length -= c;
11551 return ret;
8b095871
IC
11552}
11553
9987f0c1
IC
11554function endReadable(stream) {
11555 var state = stream._readableState;
8b095871 11556
9987f0c1
IC
11557 // If we get here before consuming all the bytes, then that is a
11558 // bug in node. Should never happen.
11559 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
8b095871 11560
9987f0c1
IC
11561 if (!state.endEmitted) {
11562 state.ended = true;
11563 processNextTick(endReadableNT, state, stream);
8b095871 11564 }
9987f0c1 11565}
8b095871 11566
9987f0c1
IC
11567function endReadableNT(state, stream) {
11568 // Check that we didn't get one last unshift.
11569 if (!state.endEmitted && state.length === 0) {
11570 state.endEmitted = true;
11571 stream.readable = false;
11572 stream.emit('end');
11573 }
8b095871
IC
11574}
11575
9987f0c1
IC
11576function forEach(xs, f) {
11577 for (var i = 0, l = xs.length; i < l; i++) {
11578 f(xs[i], i);
11579 }
8b095871
IC
11580}
11581
9987f0c1
IC
11582function indexOf(xs, x) {
11583 for (var i = 0, l = xs.length; i < l; i++) {
11584 if (xs[i] === x) return i;
8b095871 11585 }
9987f0c1 11586 return -1;
8b095871 11587}
9987f0c1
IC
11588}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
11589},{"./_stream_duplex":14,"./internal/streams/BufferList":19,"./internal/streams/destroy":20,"./internal/streams/stream":21,"_process":12,"core-util-is":5,"events":6,"inherits":8,"isarray":10,"process-nextick-args":11,"safe-buffer":26,"string_decoder/":28,"util":3}],17:[function(require,module,exports){
11590// Copyright Joyent, Inc. and other Node contributors.
11591//
11592// Permission is hereby granted, free of charge, to any person obtaining a
11593// copy of this software and associated documentation files (the
11594// "Software"), to deal in the Software without restriction, including
11595// without limitation the rights to use, copy, modify, merge, publish,
11596// distribute, sublicense, and/or sell copies of the Software, and to permit
11597// persons to whom the Software is furnished to do so, subject to the
11598// following conditions:
11599//
11600// The above copyright notice and this permission notice shall be included
11601// in all copies or substantial portions of the Software.
11602//
11603// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11604// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11605// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11606// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11607// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11608// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11609// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 11610
9987f0c1
IC
11611// a transform stream is a readable/writable stream where you do
11612// something with the data. Sometimes it's called a "filter",
11613// but that's not a great name for it, since that implies a thing where
11614// some bits pass through, and others are simply ignored. (That would
11615// be a valid example of a transform, of course.)
11616//
11617// While the output is causally related to the input, it's not a
11618// necessarily symmetric or synchronous transformation. For example,
11619// a zlib stream might take multiple plain-text writes(), and then
11620// emit a single compressed chunk some time in the future.
11621//
11622// Here's how this works:
11623//
11624// The Transform stream has all the aspects of the readable and writable
11625// stream classes. When you write(chunk), that calls _write(chunk,cb)
11626// internally, and returns false if there's a lot of pending writes
11627// buffered up. When you call read(), that calls _read(n) until
11628// there's enough pending readable data buffered up.
11629//
11630// In a transform stream, the written data is placed in a buffer. When
11631// _read(n) is called, it transforms the queued up data, calling the
11632// buffered _write cb's as it consumes chunks. If consuming a single
11633// written chunk would result in multiple output chunks, then the first
11634// outputted bit calls the readcb, and subsequent chunks just go into
11635// the read buffer, and will cause it to emit 'readable' if necessary.
11636//
11637// This way, back-pressure is actually determined by the reading side,
11638// since _read has to be called to start processing a new chunk. However,
11639// a pathological inflate type of transform can cause excessive buffering
11640// here. For example, imagine a stream where every byte of input is
11641// interpreted as an integer from 0-255, and then results in that many
11642// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
11643// 1kb of data being output. In this case, you could write a very small
11644// amount of input, and end up with a very large amount of output. In
11645// such a pathological inflating mechanism, there'd be no way to tell
11646// the system to stop doing the transform. A single 4MB write could
11647// cause the system to run out of memory.
11648//
11649// However, even in such a pathological case, only a single written chunk
11650// would be consumed, and then the rest would wait (un-transformed) until
11651// the results of the previous transformed chunk were consumed.
8b095871 11652
9987f0c1 11653'use strict';
8b095871 11654
9987f0c1 11655module.exports = Transform;
8b095871 11656
9987f0c1 11657var Duplex = require('./_stream_duplex');
8b095871 11658
9987f0c1
IC
11659/*<replacement>*/
11660var util = require('core-util-is');
11661util.inherits = require('inherits');
11662/*</replacement>*/
8b095871 11663
9987f0c1 11664util.inherits(Transform, Duplex);
8b095871 11665
9987f0c1
IC
11666function TransformState(stream) {
11667 this.afterTransform = function (er, data) {
11668 return afterTransform(stream, er, data);
11669 };
8b095871 11670
9987f0c1
IC
11671 this.needTransform = false;
11672 this.transforming = false;
11673 this.writecb = null;
11674 this.writechunk = null;
11675 this.writeencoding = null;
11676}
8b095871 11677
9987f0c1
IC
11678function afterTransform(stream, er, data) {
11679 var ts = stream._transformState;
11680 ts.transforming = false;
8b095871 11681
9987f0c1 11682 var cb = ts.writecb;
8b095871 11683
9987f0c1
IC
11684 if (!cb) {
11685 return stream.emit('error', new Error('write callback called multiple times'));
11686 }
8b095871 11687
9987f0c1
IC
11688 ts.writechunk = null;
11689 ts.writecb = null;
8b095871 11690
9987f0c1 11691 if (data !== null && data !== undefined) stream.push(data);
8b095871 11692
9987f0c1 11693 cb(er);
8b095871 11694
9987f0c1
IC
11695 var rs = stream._readableState;
11696 rs.reading = false;
11697 if (rs.needReadable || rs.length < rs.highWaterMark) {
11698 stream._read(rs.highWaterMark);
11699 }
11700}
8b095871 11701
9987f0c1
IC
11702function Transform(options) {
11703 if (!(this instanceof Transform)) return new Transform(options);
8b095871 11704
9987f0c1 11705 Duplex.call(this, options);
8b095871 11706
9987f0c1 11707 this._transformState = new TransformState(this);
8b095871 11708
9987f0c1 11709 var stream = this;
8b095871 11710
9987f0c1
IC
11711 // start out asking for a readable event once data is transformed.
11712 this._readableState.needReadable = true;
8b095871 11713
9987f0c1
IC
11714 // we have implemented the _read method, and done the other things
11715 // that Readable wants before the first _read call, so unset the
11716 // sync guard flag.
11717 this._readableState.sync = false;
8b095871 11718
9987f0c1
IC
11719 if (options) {
11720 if (typeof options.transform === 'function') this._transform = options.transform;
8b095871 11721
9987f0c1 11722 if (typeof options.flush === 'function') this._flush = options.flush;
8b095871 11723 }
8b095871 11724
9987f0c1
IC
11725 // When the writable side finishes, then flush out anything remaining.
11726 this.once('prefinish', function () {
11727 if (typeof this._flush === 'function') this._flush(function (er, data) {
11728 done(stream, er, data);
11729 });else done(stream);
11730 });
11731}
8b095871 11732
9987f0c1
IC
11733Transform.prototype.push = function (chunk, encoding) {
11734 this._transformState.needTransform = false;
11735 return Duplex.prototype.push.call(this, chunk, encoding);
11736};
8b095871 11737
9987f0c1
IC
11738// This is the part where you do stuff!
11739// override this function in implementation classes.
11740// 'chunk' is an input chunk.
11741//
11742// Call `push(newChunk)` to pass along transformed output
11743// to the readable side. You may call 'push' zero or more times.
11744//
11745// Call `cb(err)` when you are done with this chunk. If you pass
11746// an error, then that'll put the hurt on the whole operation. If you
11747// never call cb(), then you'll never get another chunk.
11748Transform.prototype._transform = function (chunk, encoding, cb) {
11749 throw new Error('_transform() is not implemented');
11750};
8b095871 11751
9987f0c1
IC
11752Transform.prototype._write = function (chunk, encoding, cb) {
11753 var ts = this._transformState;
11754 ts.writecb = cb;
11755 ts.writechunk = chunk;
11756 ts.writeencoding = encoding;
11757 if (!ts.transforming) {
11758 var rs = this._readableState;
11759 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
8b095871 11760 }
9987f0c1 11761};
8b095871 11762
9987f0c1
IC
11763// Doesn't matter what the args are here.
11764// _transform does all the work.
11765// That we got here means that the readable side wants more data.
11766Transform.prototype._read = function (n) {
11767 var ts = this._transformState;
8b095871 11768
9987f0c1
IC
11769 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
11770 ts.transforming = true;
11771 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
11772 } else {
11773 // mark that we need a transform, so that any data that comes in
11774 // will get processed, now that we've asked for it.
11775 ts.needTransform = true;
11776 }
11777};
8b095871 11778
9987f0c1
IC
11779Transform.prototype._destroy = function (err, cb) {
11780 var _this = this;
8b095871 11781
9987f0c1
IC
11782 Duplex.prototype._destroy.call(this, err, function (err2) {
11783 cb(err2);
11784 _this.emit('close');
11785 });
11786};
8b095871 11787
9987f0c1
IC
11788function done(stream, er, data) {
11789 if (er) return stream.emit('error', er);
8b095871 11790
9987f0c1 11791 if (data !== null && data !== undefined) stream.push(data);
8b095871 11792
9987f0c1
IC
11793 // if there's nothing in the write buffer, then that means
11794 // that nothing more will ever be provided
11795 var ws = stream._writableState;
11796 var ts = stream._transformState;
8b095871 11797
9987f0c1 11798 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
8b095871 11799
9987f0c1
IC
11800 if (ts.transforming) throw new Error('Calling transform done when still transforming');
11801
11802 return stream.push(null);
11803}
11804},{"./_stream_duplex":14,"core-util-is":5,"inherits":8}],18:[function(require,module,exports){
11805(function (process,global){
8b095871
IC
11806// Copyright Joyent, Inc. and other Node contributors.
11807//
11808// Permission is hereby granted, free of charge, to any person obtaining a
11809// copy of this software and associated documentation files (the
11810// "Software"), to deal in the Software without restriction, including
11811// without limitation the rights to use, copy, modify, merge, publish,
11812// distribute, sublicense, and/or sell copies of the Software, and to permit
11813// persons to whom the Software is furnished to do so, subject to the
11814// following conditions:
11815//
11816// The above copyright notice and this permission notice shall be included
11817// in all copies or substantial portions of the Software.
11818//
11819// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11820// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11821// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11822// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11823// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11824// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11825// USE OR OTHER DEALINGS IN THE SOFTWARE.
11826
9987f0c1
IC
11827// A bit simpler than readable streams.
11828// Implement an async ._write(chunk, encoding, cb), and it'll handle all
11829// the drain event emission and buffering.
11830
11831'use strict';
11832
11833/*<replacement>*/
11834
11835var processNextTick = require('process-nextick-args');
11836/*</replacement>*/
11837
11838module.exports = Writable;
11839
11840/* <replacement> */
11841function WriteReq(chunk, encoding, cb) {
11842 this.chunk = chunk;
11843 this.encoding = encoding;
11844 this.callback = cb;
11845 this.next = null;
8b095871 11846}
8b095871 11847
9987f0c1
IC
11848// It seems a linked list but it is not
11849// there will be only 2 of these for each stream
11850function CorkedRequest(state) {
11851 var _this = this;
8b095871 11852
9987f0c1
IC
11853 this.next = null;
11854 this.entry = null;
11855 this.finish = function () {
11856 onCorkedFinish(_this, state);
11857 };
11858}
11859/* </replacement> */
8b095871 11860
9987f0c1
IC
11861/*<replacement>*/
11862var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
11863/*</replacement>*/
8b095871 11864
9987f0c1
IC
11865/*<replacement>*/
11866var Duplex;
11867/*</replacement>*/
11868
11869Writable.WritableState = WritableState;
11870
11871/*<replacement>*/
11872var util = require('core-util-is');
11873util.inherits = require('inherits');
11874/*</replacement>*/
11875
11876/*<replacement>*/
11877var internalUtil = {
11878 deprecate: require('util-deprecate')
8b095871 11879};
9987f0c1 11880/*</replacement>*/
8b095871 11881
9987f0c1
IC
11882/*<replacement>*/
11883var Stream = require('./internal/streams/stream');
11884/*</replacement>*/
8b095871 11885
9987f0c1
IC
11886/*<replacement>*/
11887var Buffer = require('safe-buffer').Buffer;
11888var OurUint8Array = global.Uint8Array || function () {};
11889function _uint8ArrayToBuffer(chunk) {
11890 return Buffer.from(chunk);
11891}
11892function _isUint8Array(obj) {
11893 return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;
11894}
11895/*</replacement>*/
8b095871 11896
9987f0c1 11897var destroyImpl = require('./internal/streams/destroy');
8b095871 11898
9987f0c1 11899util.inherits(Writable, Stream);
8b095871 11900
9987f0c1 11901function nop() {}
8b095871 11902
9987f0c1
IC
11903function WritableState(options, stream) {
11904 Duplex = Duplex || require('./_stream_duplex');
8b095871 11905
9987f0c1 11906 options = options || {};
8b095871 11907
9987f0c1
IC
11908 // object stream flag to indicate whether or not this stream
11909 // contains buffers or objects.
11910 this.objectMode = !!options.objectMode;
8b095871 11911
9987f0c1 11912 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
8b095871 11913
9987f0c1
IC
11914 // the point at which write() starts returning false
11915 // Note: 0 is a valid value, means that we always return false if
11916 // the entire buffer is not flushed immediately on write()
11917 var hwm = options.highWaterMark;
11918 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
11919 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
8b095871 11920
9987f0c1
IC
11921 // cast to ints.
11922 this.highWaterMark = Math.floor(this.highWaterMark);
8b095871 11923
9987f0c1
IC
11924 // if _final has been called
11925 this.finalCalled = false;
8b095871 11926
9987f0c1
IC
11927 // drain event flag.
11928 this.needDrain = false;
11929 // at the start of calling end()
11930 this.ending = false;
11931 // when end() has been called, and returned
11932 this.ended = false;
11933 // when 'finish' is emitted
11934 this.finished = false;
8b095871 11935
9987f0c1
IC
11936 // has it been destroyed
11937 this.destroyed = false;
8b095871 11938
9987f0c1
IC
11939 // should we decode strings into buffers before passing to _write?
11940 // this is here so that some node-core streams can optimize string
11941 // handling at a lower level.
11942 var noDecode = options.decodeStrings === false;
11943 this.decodeStrings = !noDecode;
8b095871 11944
9987f0c1
IC
11945 // Crypto is kind of old and crusty. Historically, its default string
11946 // encoding is 'binary' so we have to make this configurable.
11947 // Everything else in the universe uses 'utf8', though.
11948 this.defaultEncoding = options.defaultEncoding || 'utf8';
8b095871 11949
9987f0c1
IC
11950 // not an actual buffer we keep track of, but a measurement
11951 // of how much we're waiting to get pushed to some underlying
11952 // socket or file.
11953 this.length = 0;
8b095871 11954
9987f0c1
IC
11955 // a flag to see when we're in the middle of a write.
11956 this.writing = false;
8b095871 11957
9987f0c1
IC
11958 // when true all writes will be buffered until .uncork() call
11959 this.corked = 0;
8b095871 11960
9987f0c1
IC
11961 // a flag to be able to tell if the onwrite cb is called immediately,
11962 // or on a later tick. We set this to true at first, because any
11963 // actions that shouldn't happen until "later" should generally also
11964 // not happen before the first write call.
11965 this.sync = true;
8b095871 11966
9987f0c1
IC
11967 // a flag to know if we're processing previously buffered items, which
11968 // may call the _write() callback in the same tick, so that we don't
11969 // end up in an overlapped onwrite situation.
11970 this.bufferProcessing = false;
8b095871 11971
9987f0c1
IC
11972 // the callback that's passed to _write(chunk,cb)
11973 this.onwrite = function (er) {
11974 onwrite(stream, er);
11975 };
8b095871 11976
9987f0c1
IC
11977 // the callback that the user supplies to write(chunk,encoding,cb)
11978 this.writecb = null;
8b095871 11979
9987f0c1
IC
11980 // the amount that is being written when _write is called.
11981 this.writelen = 0;
8b095871 11982
9987f0c1
IC
11983 this.bufferedRequest = null;
11984 this.lastBufferedRequest = null;
8b095871 11985
9987f0c1
IC
11986 // number of pending user-supplied write callbacks
11987 // this must be 0 before 'finish' can be emitted
11988 this.pendingcb = 0;
8b095871 11989
9987f0c1
IC
11990 // emit prefinish if the only thing we're waiting for is _write cbs
11991 // This is relevant for synchronous Transform streams
11992 this.prefinished = false;
8b095871 11993
9987f0c1
IC
11994 // True if the error was already emitted and should not be thrown again
11995 this.errorEmitted = false;
8b095871 11996
9987f0c1
IC
11997 // count buffered requests
11998 this.bufferedRequestCount = 0;
8b095871 11999
9987f0c1
IC
12000 // allocate the first CorkedRequest, there is always
12001 // one allocated and free to use, and we maintain at most two
12002 this.corkedRequestsFree = new CorkedRequest(this);
12003}
8b095871 12004
9987f0c1
IC
12005WritableState.prototype.getBuffer = function getBuffer() {
12006 var current = this.bufferedRequest;
12007 var out = [];
12008 while (current) {
12009 out.push(current);
12010 current = current.next;
12011 }
12012 return out;
12013};
12014
12015(function () {
12016 try {
12017 Object.defineProperty(WritableState.prototype, 'buffer', {
12018 get: internalUtil.deprecate(function () {
12019 return this.getBuffer();
12020 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')
12021 });
12022 } catch (_) {}
12023})();
12024
12025// Test _writableState for inheritance to account for Duplex streams,
12026// whose prototype chain only points to Readable.
12027var realHasInstance;
12028if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
12029 realHasInstance = Function.prototype[Symbol.hasInstance];
12030 Object.defineProperty(Writable, Symbol.hasInstance, {
12031 value: function (object) {
12032 if (realHasInstance.call(this, object)) return true;
12033
12034 return object && object._writableState instanceof WritableState;
8b095871 12035 }
9987f0c1
IC
12036 });
12037} else {
12038 realHasInstance = function (object) {
12039 return object instanceof this;
12040 };
12041}
8b095871 12042
9987f0c1
IC
12043function Writable(options) {
12044 Duplex = Duplex || require('./_stream_duplex');
12045
12046 // Writable ctor is applied to Duplexes, too.
12047 // `realHasInstance` is necessary because using plain `instanceof`
12048 // would return false, as no `_writableState` property is attached.
12049
12050 // Trying to use the custom `instanceof` for Writable here will also break the
12051 // Node.js LazyTransform implementation, which has a non-trivial getter for
12052 // `_writableState` that would lead to infinite recursion.
12053 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
12054 return new Writable(options);
8b095871
IC
12055 }
12056
9987f0c1
IC
12057 this._writableState = new WritableState(options, this);
12058
12059 // legacy.
12060 this.writable = true;
12061
12062 if (options) {
12063 if (typeof options.write === 'function') this._write = options.write;
12064
12065 if (typeof options.writev === 'function') this._writev = options.writev;
12066
12067 if (typeof options.destroy === 'function') this._destroy = options.destroy;
12068
12069 if (typeof options.final === 'function') this._final = options.final;
12070 }
12071
12072 Stream.call(this);
12073}
12074
12075// Otherwise people can pipe Writable streams, which is just wrong.
12076Writable.prototype.pipe = function () {
12077 this.emit('error', new Error('Cannot pipe, not readable'));
8b095871
IC
12078};
12079
9987f0c1
IC
12080function writeAfterEnd(stream, cb) {
12081 var er = new Error('write after end');
12082 // TODO: defer error events consistently everywhere, not just the cb
12083 stream.emit('error', er);
12084 processNextTick(cb, er);
12085}
8b095871 12086
9987f0c1
IC
12087// Checks that a user-supplied chunk is valid, especially for the particular
12088// mode the stream is in. Currently this means that `null` is never accepted
12089// and undefined/non-string values are only allowed in object mode.
12090function validChunk(stream, state, chunk, cb) {
12091 var valid = true;
12092 var er = false;
8b095871 12093
9987f0c1
IC
12094 if (chunk === null) {
12095 er = new TypeError('May not write null values to stream');
12096 } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
12097 er = new TypeError('Invalid non-string/buffer chunk');
12098 }
12099 if (er) {
12100 stream.emit('error', er);
12101 processNextTick(cb, er);
12102 valid = false;
8b095871 12103 }
9987f0c1
IC
12104 return valid;
12105}
8b095871 12106
9987f0c1
IC
12107Writable.prototype.write = function (chunk, encoding, cb) {
12108 var state = this._writableState;
12109 var ret = false;
12110 var isBuf = _isUint8Array(chunk) && !state.objectMode;
12111
12112 if (isBuf && !Buffer.isBuffer(chunk)) {
12113 chunk = _uint8ArrayToBuffer(chunk);
8b095871
IC
12114 }
12115
9987f0c1
IC
12116 if (typeof encoding === 'function') {
12117 cb = encoding;
12118 encoding = null;
12119 }
8b095871 12120
9987f0c1
IC
12121 if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
12122
12123 if (typeof cb !== 'function') cb = nop;
12124
12125 if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {
12126 state.pendingcb++;
12127 ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);
8b095871 12128 }
8b095871 12129
9987f0c1 12130 return ret;
8b095871
IC
12131};
12132
9987f0c1
IC
12133Writable.prototype.cork = function () {
12134 var state = this._writableState;
12135
12136 state.corked++;
8b095871
IC
12137};
12138
9987f0c1
IC
12139Writable.prototype.uncork = function () {
12140 var state = this._writableState;
12141
12142 if (state.corked) {
12143 state.corked--;
12144
12145 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
12146 }
8b095871
IC
12147};
12148
9987f0c1
IC
12149Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
12150 // node::ParseEncoding() requires lower case.
12151 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
12152 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
12153 this._writableState.defaultEncoding = encoding;
12154 return this;
12155};
8b095871 12156
9987f0c1
IC
12157function decodeChunk(state, chunk, encoding) {
12158 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
12159 chunk = Buffer.from(chunk, encoding);
12160 }
12161 return chunk;
8b095871
IC
12162}
12163
9987f0c1
IC
12164// if we're already writing something, then just put this
12165// in the queue, and wait our turn. Otherwise, call _write
12166// If we return false, then we need a drain event, so set that flag.
12167function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {
12168 if (!isBuf) {
12169 var newChunk = decodeChunk(state, chunk, encoding);
12170 if (chunk !== newChunk) {
12171 isBuf = true;
12172 encoding = 'buffer';
12173 chunk = newChunk;
12174 }
12175 }
12176 var len = state.objectMode ? 1 : chunk.length;
8b095871 12177
9987f0c1 12178 state.length += len;
8b095871 12179
9987f0c1
IC
12180 var ret = state.length < state.highWaterMark;
12181 // we must ensure that previous needDrain will not be reset to false.
12182 if (!ret) state.needDrain = true;
12183
12184 if (state.writing || state.corked) {
12185 var last = state.lastBufferedRequest;
12186 state.lastBufferedRequest = {
12187 chunk: chunk,
12188 encoding: encoding,
12189 isBuf: isBuf,
12190 callback: cb,
12191 next: null
12192 };
12193 if (last) {
12194 last.next = state.lastBufferedRequest;
12195 } else {
12196 state.bufferedRequest = state.lastBufferedRequest;
12197 }
12198 state.bufferedRequestCount += 1;
12199 } else {
12200 doWrite(stream, state, false, len, chunk, encoding, cb);
8b095871 12201 }
9987f0c1
IC
12202
12203 return ret;
8b095871
IC
12204}
12205
9987f0c1
IC
12206function doWrite(stream, state, writev, len, chunk, encoding, cb) {
12207 state.writelen = len;
12208 state.writecb = cb;
12209 state.writing = true;
12210 state.sync = true;
12211 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
12212 state.sync = false;
12213}
8b095871 12214
9987f0c1
IC
12215function onwriteError(stream, state, sync, er, cb) {
12216 --state.pendingcb;
8b095871 12217
9987f0c1
IC
12218 if (sync) {
12219 // defer the callback if we are being called synchronously
12220 // to avoid piling up things on the stack
12221 processNextTick(cb, er);
12222 // this can emit finish, and it will always happen
12223 // after error
12224 processNextTick(finishMaybe, stream, state);
12225 stream._writableState.errorEmitted = true;
12226 stream.emit('error', er);
12227 } else {
12228 // the caller expect this to happen before if
12229 // it is async
12230 cb(er);
12231 stream._writableState.errorEmitted = true;
12232 stream.emit('error', er);
12233 // this can emit finish, but finish must
12234 // always follow error
12235 finishMaybe(stream, state);
12236 }
12237}
8b095871 12238
9987f0c1
IC
12239function onwriteStateUpdate(state) {
12240 state.writing = false;
12241 state.writecb = null;
12242 state.length -= state.writelen;
12243 state.writelen = 0;
8b095871
IC
12244}
12245
9987f0c1
IC
12246function onwrite(stream, er) {
12247 var state = stream._writableState;
12248 var sync = state.sync;
12249 var cb = state.writecb;
8b095871 12250
9987f0c1 12251 onwriteStateUpdate(state);
8b095871 12252
9987f0c1
IC
12253 if (er) onwriteError(stream, state, sync, er, cb);else {
12254 // Check if we're actually ready to finish, but don't emit yet
12255 var finished = needFinish(state);
12256
12257 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
12258 clearBuffer(stream, state);
8b095871 12259 }
9987f0c1
IC
12260
12261 if (sync) {
12262 /*<replacement>*/
12263 asyncWrite(afterWrite, stream, state, finished, cb);
12264 /*</replacement>*/
12265 } else {
12266 afterWrite(stream, state, finished, cb);
8b095871 12267 }
9987f0c1
IC
12268 }
12269}
8b095871 12270
9987f0c1
IC
12271function afterWrite(stream, state, finished, cb) {
12272 if (!finished) onwriteDrain(stream, state);
12273 state.pendingcb--;
12274 cb();
12275 finishMaybe(stream, state);
8b095871 12276}
8b095871 12277
9987f0c1
IC
12278// Must force callback to be called on nextTick, so that we don't
12279// emit 'drain' before the write() consumer gets the 'false' return
12280// value, and has a chance to attach a 'drain' listener.
12281function onwriteDrain(stream, state) {
12282 if (state.length === 0 && state.needDrain) {
12283 state.needDrain = false;
12284 stream.emit('drain');
12285 }
12286}
8b095871 12287
9987f0c1
IC
12288// if there's something in the buffer waiting, then process it
12289function clearBuffer(stream, state) {
12290 state.bufferProcessing = true;
12291 var entry = state.bufferedRequest;
8b095871 12292
9987f0c1
IC
12293 if (stream._writev && entry && entry.next) {
12294 // Fast case, write everything using _writev()
12295 var l = state.bufferedRequestCount;
12296 var buffer = new Array(l);
12297 var holder = state.corkedRequestsFree;
12298 holder.entry = entry;
8b095871 12299
9987f0c1
IC
12300 var count = 0;
12301 var allBuffers = true;
12302 while (entry) {
12303 buffer[count] = entry;
12304 if (!entry.isBuf) allBuffers = false;
12305 entry = entry.next;
12306 count += 1;
12307 }
12308 buffer.allBuffers = allBuffers;
8b095871 12309
9987f0c1 12310 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
8b095871 12311
9987f0c1
IC
12312 // doWrite is almost always async, defer these to save a bit of time
12313 // as the hot path ends with doWrite
12314 state.pendingcb++;
12315 state.lastBufferedRequest = null;
12316 if (holder.next) {
12317 state.corkedRequestsFree = holder.next;
12318 holder.next = null;
12319 } else {
12320 state.corkedRequestsFree = new CorkedRequest(state);
12321 }
12322 } else {
12323 // Slow case, write chunks one-by-one
12324 while (entry) {
12325 var chunk = entry.chunk;
12326 var encoding = entry.encoding;
12327 var cb = entry.callback;
12328 var len = state.objectMode ? 1 : chunk.length;
8b095871 12329
9987f0c1
IC
12330 doWrite(stream, state, false, len, chunk, encoding, cb);
12331 entry = entry.next;
12332 // if we didn't call the onwrite immediately, then
12333 // it means that we need to wait until it does.
12334 // also, that means that the chunk and cb are currently
12335 // being processed, so move the buffer counter past them.
12336 if (state.writing) {
12337 break;
12338 }
12339 }
8b095871 12340
9987f0c1
IC
12341 if (entry === null) state.lastBufferedRequest = null;
12342 }
8b095871 12343
9987f0c1
IC
12344 state.bufferedRequestCount = 0;
12345 state.bufferedRequest = entry;
12346 state.bufferProcessing = false;
8b095871 12347}
8b095871 12348
9987f0c1
IC
12349Writable.prototype._write = function (chunk, encoding, cb) {
12350 cb(new Error('_write() is not implemented'));
12351};
8b095871 12352
9987f0c1 12353Writable.prototype._writev = null;
8b095871 12354
9987f0c1
IC
12355Writable.prototype.end = function (chunk, encoding, cb) {
12356 var state = this._writableState;
8b095871 12357
9987f0c1
IC
12358 if (typeof chunk === 'function') {
12359 cb = chunk;
12360 chunk = null;
12361 encoding = null;
12362 } else if (typeof encoding === 'function') {
12363 cb = encoding;
12364 encoding = null;
12365 }
8b095871 12366
9987f0c1 12367 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
8b095871 12368
9987f0c1
IC
12369 // .end() fully uncorks
12370 if (state.corked) {
12371 state.corked = 1;
12372 this.uncork();
12373 }
8b095871 12374
9987f0c1
IC
12375 // ignore unnecessary end() calls.
12376 if (!state.ending && !state.finished) endWritable(this, state, cb);
12377};
8b095871 12378
9987f0c1
IC
12379function needFinish(state) {
12380 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
12381}
12382function callFinal(stream, state) {
12383 stream._final(function (err) {
12384 state.pendingcb--;
12385 if (err) {
12386 stream.emit('error', err);
12387 }
12388 state.prefinished = true;
12389 stream.emit('prefinish');
12390 finishMaybe(stream, state);
12391 });
12392}
12393function prefinish(stream, state) {
12394 if (!state.prefinished && !state.finalCalled) {
12395 if (typeof stream._final === 'function') {
12396 state.pendingcb++;
12397 state.finalCalled = true;
12398 processNextTick(callFinal, stream, state);
12399 } else {
12400 state.prefinished = true;
12401 stream.emit('prefinish');
12402 }
12403 }
8b095871
IC
12404}
12405
9987f0c1
IC
12406function finishMaybe(stream, state) {
12407 var need = needFinish(state);
12408 if (need) {
12409 prefinish(stream, state);
12410 if (state.pendingcb === 0) {
12411 state.finished = true;
12412 stream.emit('finish');
12413 }
12414 }
12415 return need;
8b095871
IC
12416}
12417
9987f0c1
IC
12418function endWritable(stream, state, cb) {
12419 state.ending = true;
12420 finishMaybe(stream, state);
12421 if (cb) {
12422 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
8b095871 12423 }
9987f0c1
IC
12424 state.ended = true;
12425 stream.writable = false;
8b095871
IC
12426}
12427
9987f0c1
IC
12428function onCorkedFinish(corkReq, state, err) {
12429 var entry = corkReq.entry;
12430 corkReq.entry = null;
12431 while (entry) {
12432 var cb = entry.callback;
12433 state.pendingcb--;
12434 cb(err);
12435 entry = entry.next;
12436 }
12437 if (state.corkedRequestsFree) {
12438 state.corkedRequestsFree.next = corkReq;
12439 } else {
12440 state.corkedRequestsFree = corkReq;
12441 }
12442}
8b095871 12443
9987f0c1
IC
12444Object.defineProperty(Writable.prototype, 'destroyed', {
12445 get: function () {
12446 if (this._writableState === undefined) {
12447 return false;
12448 }
12449 return this._writableState.destroyed;
12450 },
12451 set: function (value) {
12452 // we ignore the value if the stream
12453 // has not been initialized yet
12454 if (!this._writableState) {
12455 return;
12456 }
8b095871 12457
9987f0c1
IC
12458 // backward compatibility, the user is explicitly
12459 // managing destroyed
12460 this._writableState.destroyed = value;
12461 }
12462});
8b095871 12463
9987f0c1
IC
12464Writable.prototype.destroy = destroyImpl.destroy;
12465Writable.prototype._undestroy = destroyImpl.undestroy;
12466Writable.prototype._destroy = function (err, cb) {
12467 this.end();
12468 cb(err);
12469};
12470}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
12471},{"./_stream_duplex":14,"./internal/streams/destroy":20,"./internal/streams/stream":21,"_process":12,"core-util-is":5,"inherits":8,"process-nextick-args":11,"safe-buffer":26,"util-deprecate":29}],19:[function(require,module,exports){
12472'use strict';
8b095871
IC
12473
12474/*<replacement>*/
8b095871 12475
9987f0c1 12476function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
8b095871 12477
9987f0c1
IC
12478var Buffer = require('safe-buffer').Buffer;
12479/*</replacement>*/
8b095871 12480
9987f0c1
IC
12481function copyBuffer(src, target, offset) {
12482 src.copy(target, offset);
8b095871
IC
12483}
12484
9987f0c1
IC
12485module.exports = function () {
12486 function BufferList() {
12487 _classCallCheck(this, BufferList);
8b095871 12488
9987f0c1
IC
12489 this.head = null;
12490 this.tail = null;
12491 this.length = 0;
12492 }
8b095871 12493
9987f0c1
IC
12494 BufferList.prototype.push = function push(v) {
12495 var entry = { data: v, next: null };
12496 if (this.length > 0) this.tail.next = entry;else this.head = entry;
12497 this.tail = entry;
12498 ++this.length;
12499 };
8b095871 12500
9987f0c1
IC
12501 BufferList.prototype.unshift = function unshift(v) {
12502 var entry = { data: v, next: this.head };
12503 if (this.length === 0) this.tail = entry;
12504 this.head = entry;
12505 ++this.length;
12506 };
8b095871 12507
9987f0c1
IC
12508 BufferList.prototype.shift = function shift() {
12509 if (this.length === 0) return;
12510 var ret = this.head.data;
12511 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
12512 --this.length;
12513 return ret;
12514 };
8b095871 12515
9987f0c1
IC
12516 BufferList.prototype.clear = function clear() {
12517 this.head = this.tail = null;
12518 this.length = 0;
12519 };
8b095871 12520
9987f0c1
IC
12521 BufferList.prototype.join = function join(s) {
12522 if (this.length === 0) return '';
12523 var p = this.head;
12524 var ret = '' + p.data;
12525 while (p = p.next) {
12526 ret += s + p.data;
12527 }return ret;
12528 };
8b095871 12529
9987f0c1
IC
12530 BufferList.prototype.concat = function concat(n) {
12531 if (this.length === 0) return Buffer.alloc(0);
12532 if (this.length === 1) return this.head.data;
12533 var ret = Buffer.allocUnsafe(n >>> 0);
12534 var p = this.head;
12535 var i = 0;
12536 while (p) {
12537 copyBuffer(p.data, ret, i);
12538 i += p.data.length;
12539 p = p.next;
12540 }
12541 return ret;
12542 };
8b095871 12543
9987f0c1
IC
12544 return BufferList;
12545}();
12546},{"safe-buffer":26}],20:[function(require,module,exports){
12547'use strict';
8b095871
IC
12548
12549/*<replacement>*/
9987f0c1
IC
12550
12551var processNextTick = require('process-nextick-args');
8b095871
IC
12552/*</replacement>*/
12553
9987f0c1
IC
12554// undocumented cb() API, needed for core, not for public API
12555function destroy(err, cb) {
12556 var _this = this;
8b095871 12557
9987f0c1
IC
12558 var readableDestroyed = this._readableState && this._readableState.destroyed;
12559 var writableDestroyed = this._writableState && this._writableState.destroyed;
8b095871 12560
9987f0c1
IC
12561 if (readableDestroyed || writableDestroyed) {
12562 if (cb) {
12563 cb(err);
12564 } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {
12565 processNextTick(emitErrorNT, this, err);
12566 }
12567 return;
12568 }
8b095871 12569
9987f0c1
IC
12570 // we set destroyed to true before firing error callbacks in order
12571 // to make it re-entrance safe in case destroy() is called within callbacks
8b095871 12572
9987f0c1
IC
12573 if (this._readableState) {
12574 this._readableState.destroyed = true;
12575 }
8b095871 12576
9987f0c1
IC
12577 // if this is a duplex stream mark the writable part as destroyed as well
12578 if (this._writableState) {
12579 this._writableState.destroyed = true;
12580 }
8b095871 12581
9987f0c1
IC
12582 this._destroy(err || null, function (err) {
12583 if (!cb && err) {
12584 processNextTick(emitErrorNT, _this, err);
12585 if (_this._writableState) {
12586 _this._writableState.errorEmitted = true;
12587 }
12588 } else if (cb) {
12589 cb(err);
12590 }
12591 });
12592}
8b095871 12593
9987f0c1
IC
12594function undestroy() {
12595 if (this._readableState) {
12596 this._readableState.destroyed = false;
12597 this._readableState.reading = false;
12598 this._readableState.ended = false;
12599 this._readableState.endEmitted = false;
12600 }
8b095871 12601
9987f0c1
IC
12602 if (this._writableState) {
12603 this._writableState.destroyed = false;
12604 this._writableState.ended = false;
12605 this._writableState.ending = false;
12606 this._writableState.finished = false;
12607 this._writableState.errorEmitted = false;
12608 }
12609}
8b095871 12610
9987f0c1
IC
12611function emitErrorNT(self, err) {
12612 self.emit('error', err);
12613}
8b095871 12614
9987f0c1
IC
12615module.exports = {
12616 destroy: destroy,
12617 undestroy: undestroy
12618};
12619},{"process-nextick-args":11}],21:[function(require,module,exports){
12620module.exports = require('events').EventEmitter;
8b095871 12621
9987f0c1
IC
12622},{"events":6}],22:[function(require,module,exports){
12623module.exports = require('./readable').PassThrough
8b095871 12624
9987f0c1
IC
12625},{"./readable":23}],23:[function(require,module,exports){
12626exports = module.exports = require('./lib/_stream_readable.js');
12627exports.Stream = exports;
12628exports.Readable = exports;
12629exports.Writable = require('./lib/_stream_writable.js');
12630exports.Duplex = require('./lib/_stream_duplex.js');
12631exports.Transform = require('./lib/_stream_transform.js');
12632exports.PassThrough = require('./lib/_stream_passthrough.js');
8b095871 12633
9987f0c1
IC
12634},{"./lib/_stream_duplex.js":14,"./lib/_stream_passthrough.js":15,"./lib/_stream_readable.js":16,"./lib/_stream_transform.js":17,"./lib/_stream_writable.js":18}],24:[function(require,module,exports){
12635module.exports = require('./readable').Transform
8b095871 12636
9987f0c1
IC
12637},{"./readable":23}],25:[function(require,module,exports){
12638module.exports = require('./lib/_stream_writable.js');
8b095871 12639
9987f0c1
IC
12640},{"./lib/_stream_writable.js":18}],26:[function(require,module,exports){
12641/* eslint-disable node/no-deprecated-api */
12642var buffer = require('buffer')
12643var Buffer = buffer.Buffer
8b095871 12644
9987f0c1
IC
12645// alternative to using Object.keys for old browsers
12646function copyProps (src, dst) {
12647 for (var key in src) {
12648 dst[key] = src[key]
12649 }
12650}
12651if (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {
12652 module.exports = buffer
12653} else {
12654 // Copy properties from require('buffer')
12655 copyProps(buffer, exports)
12656 exports.Buffer = SafeBuffer
12657}
8b095871 12658
9987f0c1
IC
12659function SafeBuffer (arg, encodingOrOffset, length) {
12660 return Buffer(arg, encodingOrOffset, length)
12661}
8b095871 12662
9987f0c1
IC
12663// Copy static methods from Buffer
12664copyProps(Buffer, SafeBuffer)
8b095871 12665
9987f0c1
IC
12666SafeBuffer.from = function (arg, encodingOrOffset, length) {
12667 if (typeof arg === 'number') {
12668 throw new TypeError('Argument must not be a number')
8b095871 12669 }
9987f0c1 12670 return Buffer(arg, encodingOrOffset, length)
8b095871
IC
12671}
12672
9987f0c1
IC
12673SafeBuffer.alloc = function (size, fill, encoding) {
12674 if (typeof size !== 'number') {
12675 throw new TypeError('Argument must be a number')
12676 }
12677 var buf = Buffer(size)
12678 if (fill !== undefined) {
12679 if (typeof encoding === 'string') {
12680 buf.fill(fill, encoding)
12681 } else {
12682 buf.fill(fill)
12683 }
12684 } else {
12685 buf.fill(0)
12686 }
12687 return buf
12688}
8b095871 12689
9987f0c1
IC
12690SafeBuffer.allocUnsafe = function (size) {
12691 if (typeof size !== 'number') {
12692 throw new TypeError('Argument must be a number')
12693 }
12694 return Buffer(size)
12695}
8b095871 12696
9987f0c1
IC
12697SafeBuffer.allocUnsafeSlow = function (size) {
12698 if (typeof size !== 'number') {
12699 throw new TypeError('Argument must be a number')
12700 }
12701 return buffer.SlowBuffer(size)
12702}
12703
12704},{"buffer":4}],27:[function(require,module,exports){
12705// Copyright Joyent, Inc. and other Node contributors.
12706//
12707// Permission is hereby granted, free of charge, to any person obtaining a
12708// copy of this software and associated documentation files (the
12709// "Software"), to deal in the Software without restriction, including
12710// without limitation the rights to use, copy, modify, merge, publish,
12711// distribute, sublicense, and/or sell copies of the Software, and to permit
12712// persons to whom the Software is furnished to do so, subject to the
12713// following conditions:
12714//
12715// The above copyright notice and this permission notice shall be included
12716// in all copies or substantial portions of the Software.
12717//
12718// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12719// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12720// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12721// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12722// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12723// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12724// USE OR OTHER DEALINGS IN THE SOFTWARE.
8b095871 12725
9987f0c1 12726module.exports = Stream;
8b095871 12727
9987f0c1
IC
12728var EE = require('events').EventEmitter;
12729var inherits = require('inherits');
8b095871 12730
9987f0c1
IC
12731inherits(Stream, EE);
12732Stream.Readable = require('readable-stream/readable.js');
12733Stream.Writable = require('readable-stream/writable.js');
12734Stream.Duplex = require('readable-stream/duplex.js');
12735Stream.Transform = require('readable-stream/transform.js');
12736Stream.PassThrough = require('readable-stream/passthrough.js');
8b095871 12737
9987f0c1
IC
12738// Backwards-compat with node 0.4.x
12739Stream.Stream = Stream;
8b095871 12740
8b095871 12741
8b095871 12742
9987f0c1
IC
12743// old-style streams. Note that the pipe method (the only relevant
12744// part of this class) is overridden in the Readable class.
8b095871 12745
9987f0c1
IC
12746function Stream() {
12747 EE.call(this);
12748}
8b095871 12749
9987f0c1
IC
12750Stream.prototype.pipe = function(dest, options) {
12751 var source = this;
8b095871 12752
9987f0c1
IC
12753 function ondata(chunk) {
12754 if (dest.writable) {
12755 if (false === dest.write(chunk) && source.pause) {
12756 source.pause();
8b095871 12757 }
8b095871 12758 }
8b095871
IC
12759 }
12760
9987f0c1 12761 source.on('data', ondata);
8b095871 12762
9987f0c1
IC
12763 function ondrain() {
12764 if (source.readable && source.resume) {
12765 source.resume();
12766 }
12767 }
8b095871 12768
9987f0c1 12769 dest.on('drain', ondrain);
8b095871 12770
9987f0c1
IC
12771 // If the 'end' option is not supplied, dest.end() will be called when
12772 // source gets the 'end' or 'close' events. Only dest.end() once.
12773 if (!dest._isStdio && (!options || options.end !== false)) {
12774 source.on('end', onend);
12775 source.on('close', onclose);
12776 }
8b095871 12777
9987f0c1
IC
12778 var didOnEnd = false;
12779 function onend() {
12780 if (didOnEnd) return;
12781 didOnEnd = true;
8b095871 12782
9987f0c1 12783 dest.end();
8b095871 12784 }
8b095871 12785
8b095871 12786
9987f0c1
IC
12787 function onclose() {
12788 if (didOnEnd) return;
12789 didOnEnd = true;
8b095871 12790
9987f0c1 12791 if (typeof dest.destroy === 'function') dest.destroy();
8b095871
IC
12792 }
12793
9987f0c1
IC
12794 // don't leave dangling pipes when there are errors.
12795 function onerror(er) {
12796 cleanup();
12797 if (EE.listenerCount(this, 'error') === 0) {
12798 throw er; // Unhandled stream error in pipe.
12799 }
8b095871
IC
12800 }
12801
9987f0c1
IC
12802 source.on('error', onerror);
12803 dest.on('error', onerror);
8b095871 12804
9987f0c1
IC
12805 // remove all the event listeners that were added.
12806 function cleanup() {
12807 source.removeListener('data', ondata);
12808 dest.removeListener('drain', ondrain);
8b095871 12809
9987f0c1
IC
12810 source.removeListener('end', onend);
12811 source.removeListener('close', onclose);
8b095871 12812
9987f0c1
IC
12813 source.removeListener('error', onerror);
12814 dest.removeListener('error', onerror);
8b095871 12815
9987f0c1
IC
12816 source.removeListener('end', cleanup);
12817 source.removeListener('close', cleanup);
8b095871 12818
9987f0c1 12819 dest.removeListener('close', cleanup);
8b095871
IC
12820 }
12821
9987f0c1
IC
12822 source.on('end', cleanup);
12823 source.on('close', cleanup);
8b095871 12824
9987f0c1 12825 dest.on('close', cleanup);
8b095871 12826
9987f0c1 12827 dest.emit('pipe', source);
8b095871 12828
9987f0c1
IC
12829 // Allow for unix-like usage: A.pipe(B).pipe(C)
12830 return dest;
12831};
8b095871 12832
9987f0c1
IC
12833},{"events":6,"inherits":8,"readable-stream/duplex.js":13,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],28:[function(require,module,exports){
12834'use strict';
8b095871 12835
9987f0c1 12836var Buffer = require('safe-buffer').Buffer;
8b095871 12837
9987f0c1
IC
12838var isEncoding = Buffer.isEncoding || function (encoding) {
12839 encoding = '' + encoding;
12840 switch (encoding && encoding.toLowerCase()) {
12841 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':
12842 return true;
12843 default:
12844 return false;
12845 }
12846};
8b095871 12847
9987f0c1
IC
12848function _normalizeEncoding(enc) {
12849 if (!enc) return 'utf8';
12850 var retried;
12851 while (true) {
12852 switch (enc) {
12853 case 'utf8':
12854 case 'utf-8':
12855 return 'utf8';
12856 case 'ucs2':
12857 case 'ucs-2':
12858 case 'utf16le':
12859 case 'utf-16le':
12860 return 'utf16le';
12861 case 'latin1':
12862 case 'binary':
12863 return 'latin1';
12864 case 'base64':
12865 case 'ascii':
12866 case 'hex':
12867 return enc;
12868 default:
12869 if (retried) return; // undefined
12870 enc = ('' + enc).toLowerCase();
12871 retried = true;
12872 }
8b095871 12873 }
9987f0c1 12874};
8b095871 12875
9987f0c1
IC
12876// Do not cache `Buffer.isEncoding` when checking encoding names as some
12877// modules monkey-patch it to support additional encodings
12878function normalizeEncoding(enc) {
12879 var nenc = _normalizeEncoding(enc);
12880 if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);
12881 return nenc || enc;
12882}
8b095871 12883
9987f0c1
IC
12884// StringDecoder provides an interface for efficiently splitting a series of
12885// buffers into a series of JS strings without breaking apart multi-byte
12886// characters.
12887exports.StringDecoder = StringDecoder;
12888function StringDecoder(encoding) {
12889 this.encoding = normalizeEncoding(encoding);
12890 var nb;
12891 switch (this.encoding) {
12892 case 'utf16le':
12893 this.text = utf16Text;
12894 this.end = utf16End;
12895 nb = 4;
12896 break;
12897 case 'utf8':
12898 this.fillLast = utf8FillLast;
12899 nb = 4;
12900 break;
12901 case 'base64':
12902 this.text = base64Text;
12903 this.end = base64End;
12904 nb = 3;
12905 break;
12906 default:
12907 this.write = simpleWrite;
12908 this.end = simpleEnd;
12909 return;
12910 }
12911 this.lastNeed = 0;
12912 this.lastTotal = 0;
12913 this.lastChar = Buffer.allocUnsafe(nb);
12914}
8b095871 12915
9987f0c1
IC
12916StringDecoder.prototype.write = function (buf) {
12917 if (buf.length === 0) return '';
12918 var r;
12919 var i;
12920 if (this.lastNeed) {
12921 r = this.fillLast(buf);
12922 if (r === undefined) return '';
12923 i = this.lastNeed;
12924 this.lastNeed = 0;
12925 } else {
12926 i = 0;
12927 }
12928 if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);
12929 return r || '';
12930};
8b095871 12931
9987f0c1 12932StringDecoder.prototype.end = utf8End;
8b095871 12933
9987f0c1
IC
12934// Returns only complete characters in a Buffer
12935StringDecoder.prototype.text = utf8Text;
8b095871 12936
9987f0c1
IC
12937// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer
12938StringDecoder.prototype.fillLast = function (buf) {
12939 if (this.lastNeed <= buf.length) {
12940 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);
12941 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 12942 }
9987f0c1
IC
12943 buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);
12944 this.lastNeed -= buf.length;
12945};
8b095871 12946
9987f0c1
IC
12947// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a
12948// continuation byte.
12949function utf8CheckByte(byte) {
12950 if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;
12951 return -1;
12952}
8b095871 12953
9987f0c1
IC
12954// Checks at most 3 bytes at the end of a Buffer in order to detect an
12955// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)
12956// needed to complete the UTF-8 character (if applicable) are returned.
12957function utf8CheckIncomplete(self, buf, i) {
12958 var j = buf.length - 1;
12959 if (j < i) return 0;
12960 var nb = utf8CheckByte(buf[j]);
12961 if (nb >= 0) {
12962 if (nb > 0) self.lastNeed = nb - 1;
12963 return nb;
12964 }
12965 if (--j < i) return 0;
12966 nb = utf8CheckByte(buf[j]);
12967 if (nb >= 0) {
12968 if (nb > 0) self.lastNeed = nb - 2;
12969 return nb;
12970 }
12971 if (--j < i) return 0;
12972 nb = utf8CheckByte(buf[j]);
12973 if (nb >= 0) {
12974 if (nb > 0) {
12975 if (nb === 2) nb = 0;else self.lastNeed = nb - 3;
8b095871 12976 }
9987f0c1 12977 return nb;
8b095871 12978 }
9987f0c1
IC
12979 return 0;
12980}
8b095871 12981
9987f0c1
IC
12982// Validates as many continuation bytes for a multi-byte UTF-8 character as
12983// needed or are available. If we see a non-continuation byte where we expect
12984// one, we "replace" the validated continuation bytes we've seen so far with
12985// UTF-8 replacement characters ('\ufffd'), to match v8's UTF-8 decoding
12986// behavior. The continuation byte check is included three times in the case
12987// where all of the continuation bytes for a character exist in the same buffer.
12988// It is also done this way as a slight performance increase instead of using a
12989// loop.
12990function utf8CheckExtraBytes(self, buf, p) {
12991 if ((buf[0] & 0xC0) !== 0x80) {
12992 self.lastNeed = 0;
12993 return '\ufffd'.repeat(p);
12994 }
12995 if (self.lastNeed > 1 && buf.length > 1) {
12996 if ((buf[1] & 0xC0) !== 0x80) {
12997 self.lastNeed = 1;
12998 return '\ufffd'.repeat(p + 1);
12999 }
13000 if (self.lastNeed > 2 && buf.length > 2) {
13001 if ((buf[2] & 0xC0) !== 0x80) {
13002 self.lastNeed = 2;
13003 return '\ufffd'.repeat(p + 2);
13004 }
13005 }
13006 }
8b095871
IC
13007}
13008
9987f0c1
IC
13009// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.
13010function utf8FillLast(buf) {
13011 var p = this.lastTotal - this.lastNeed;
13012 var r = utf8CheckExtraBytes(this, buf, p);
13013 if (r !== undefined) return r;
13014 if (this.lastNeed <= buf.length) {
13015 buf.copy(this.lastChar, p, 0, this.lastNeed);
13016 return this.lastChar.toString(this.encoding, 0, this.lastTotal);
8b095871 13017 }
9987f0c1
IC
13018 buf.copy(this.lastChar, p, 0, buf.length);
13019 this.lastNeed -= buf.length;
8b095871
IC
13020}
13021
9987f0c1
IC
13022// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a
13023// partial character, the character's bytes are buffered until the required
13024// number of bytes are available.
13025function utf8Text(buf, i) {
13026 var total = utf8CheckIncomplete(this, buf, i);
13027 if (!this.lastNeed) return buf.toString('utf8', i);
13028 this.lastTotal = total;
13029 var end = buf.length - (total - this.lastNeed);
13030 buf.copy(this.lastChar, 0, end);
13031 return buf.toString('utf8', i, end);
8b095871
IC
13032}
13033
9987f0c1
IC
13034// For UTF-8, a replacement character for each buffered byte of a (partial)
13035// character needs to be added to the output.
13036function utf8End(buf) {
13037 var r = buf && buf.length ? this.write(buf) : '';
13038 if (this.lastNeed) return r + '\ufffd'.repeat(this.lastTotal - this.lastNeed);
13039 return r;
13040}
8b095871 13041
9987f0c1
IC
13042// UTF-16LE typically needs two bytes per character, but even if we have an even
13043// number of bytes available, we need to check if we end on a leading/high
13044// surrogate. In that case, we need to wait for the next two bytes in order to
13045// decode the last character properly.
13046function utf16Text(buf, i) {
13047 if ((buf.length - i) % 2 === 0) {
13048 var r = buf.toString('utf16le', i);
13049 if (r) {
13050 var c = r.charCodeAt(r.length - 1);
13051 if (c >= 0xD800 && c <= 0xDBFF) {
13052 this.lastNeed = 2;
13053 this.lastTotal = 4;
13054 this.lastChar[0] = buf[buf.length - 2];
13055 this.lastChar[1] = buf[buf.length - 1];
13056 return r.slice(0, -1);
13057 }
13058 }
13059 return r;
8b095871 13060 }
9987f0c1
IC
13061 this.lastNeed = 1;
13062 this.lastTotal = 2;
13063 this.lastChar[0] = buf[buf.length - 1];
13064 return buf.toString('utf16le', i, buf.length - 1);
8b095871
IC
13065}
13066
9987f0c1
IC
13067// For UTF-16LE we do not explicitly append special replacement characters if we
13068// end on a partial character, we simply let v8 handle that.
13069function utf16End(buf) {
13070 var r = buf && buf.length ? this.write(buf) : '';
13071 if (this.lastNeed) {
13072 var end = this.lastTotal - this.lastNeed;
13073 return r + this.lastChar.toString('utf16le', 0, end);
8b095871 13074 }
9987f0c1 13075 return r;
8b095871
IC
13076}
13077
9987f0c1
IC
13078function base64Text(buf, i) {
13079 var n = (buf.length - i) % 3;
13080 if (n === 0) return buf.toString('base64', i);
13081 this.lastNeed = 3 - n;
13082 this.lastTotal = 3;
13083 if (n === 1) {
13084 this.lastChar[0] = buf[buf.length - 1];
13085 } else {
13086 this.lastChar[0] = buf[buf.length - 2];
13087 this.lastChar[1] = buf[buf.length - 1];
13088 }
13089 return buf.toString('base64', i, buf.length - n);
13090}
8b095871 13091
9987f0c1
IC
13092function base64End(buf) {
13093 var r = buf && buf.length ? this.write(buf) : '';
13094 if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);
13095 return r;
13096}
8b095871 13097
9987f0c1
IC
13098// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)
13099function simpleWrite(buf) {
13100 return buf.toString(this.encoding);
13101}
8b095871 13102
9987f0c1
IC
13103function simpleEnd(buf) {
13104 return buf && buf.length ? this.write(buf) : '';
13105}
13106},{"safe-buffer":26}],29:[function(require,module,exports){
13107(function (global){
8b095871 13108
9987f0c1
IC
13109/**
13110 * Module exports.
13111 */
8b095871 13112
9987f0c1
IC
13113module.exports = deprecate;
13114
13115/**
13116 * Mark that a method should not be used.
13117 * Returns a modified function which warns once by default.
13118 *
13119 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
13120 *
13121 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
13122 * will throw an Error when invoked.
13123 *
13124 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
13125 * will invoke `console.trace()` instead of `console.error()`.
13126 *
13127 * @param {Function} fn - the function to deprecate
13128 * @param {String} msg - the string to print to the console when `fn` is invoked
13129 * @returns {Function} a new "deprecated" version of `fn`
13130 * @api public
13131 */
13132
13133function deprecate (fn, msg) {
13134 if (config('noDeprecation')) {
13135 return fn;
8b095871
IC
13136 }
13137
9987f0c1
IC
13138 var warned = false;
13139 function deprecated() {
13140 if (!warned) {
13141 if (config('throwDeprecation')) {
13142 throw new Error(msg);
13143 } else if (config('traceDeprecation')) {
13144 console.trace(msg);
13145 } else {
13146 console.warn(msg);
13147 }
13148 warned = true;
13149 }
13150 return fn.apply(this, arguments);
8b095871
IC
13151 }
13152
9987f0c1
IC
13153 return deprecated;
13154}
8b095871 13155
9987f0c1
IC
13156/**
13157 * Checks `localStorage` for boolean values for the given `name`.
13158 *
13159 * @param {String} name
13160 * @returns {Boolean}
13161 * @api private
13162 */
8b095871 13163
9987f0c1
IC
13164function config (name) {
13165 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
13166 try {
13167 if (!global.localStorage) return false;
13168 } catch (_) {
13169 return false;
8b095871 13170 }
9987f0c1
IC
13171 var val = global.localStorage[name];
13172 if (null == val) return false;
13173 return String(val).toLowerCase() === 'true';
13174}
8b095871 13175
9987f0c1
IC
13176}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13177},{}],30:[function(require,module,exports){
13178arguments[4][8][0].apply(exports,arguments)
13179},{"dup":8}],31:[function(require,module,exports){
13180module.exports = function isBuffer(arg) {
13181 return arg && typeof arg === 'object'
13182 && typeof arg.copy === 'function'
13183 && typeof arg.fill === 'function'
13184 && typeof arg.readUInt8 === 'function';
13185}
13186},{}],32:[function(require,module,exports){
13187(function (process,global){
13188// Copyright Joyent, Inc. and other Node contributors.
13189//
13190// Permission is hereby granted, free of charge, to any person obtaining a
13191// copy of this software and associated documentation files (the
13192// "Software"), to deal in the Software without restriction, including
13193// without limitation the rights to use, copy, modify, merge, publish,
13194// distribute, sublicense, and/or sell copies of the Software, and to permit
13195// persons to whom the Software is furnished to do so, subject to the
13196// following conditions:
13197//
13198// The above copyright notice and this permission notice shall be included
13199// in all copies or substantial portions of the Software.
13200//
13201// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13202// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13203// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13204// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13205// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13206// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13207// USE OR OTHER DEALINGS IN THE SOFTWARE.
13208
13209var formatRegExp = /%[sdj%]/g;
13210exports.format = function(f) {
13211 if (!isString(f)) {
13212 var objects = [];
13213 for (var i = 0; i < arguments.length; i++) {
13214 objects.push(inspect(arguments[i]));
8b095871 13215 }
9987f0c1 13216 return objects.join(' ');
8b095871
IC
13217 }
13218
9987f0c1
IC
13219 var i = 1;
13220 var args = arguments;
13221 var len = args.length;
13222 var str = String(f).replace(formatRegExp, function(x) {
13223 if (x === '%%') return '%';
13224 if (i >= len) return x;
13225 switch (x) {
13226 case '%s': return String(args[i++]);
13227 case '%d': return Number(args[i++]);
13228 case '%j':
13229 try {
13230 return JSON.stringify(args[i++]);
13231 } catch (_) {
13232 return '[Circular]';
13233 }
13234 default:
13235 return x;
13236 }
13237 });
13238 for (var x = args[i]; i < len; x = args[++i]) {
13239 if (isNull(x) || !isObject(x)) {
13240 str += ' ' + x;
13241 } else {
13242 str += ' ' + inspect(x);
13243 }
13244 }
13245 return str;
13246};
8b095871
IC
13247
13248
9987f0c1
IC
13249// Mark that a method should not be used.
13250// Returns a modified function which warns once by default.
13251// If --no-deprecation is set, then it is a no-op.
13252exports.deprecate = function(fn, msg) {
13253 // Allow for deprecating things in the process of starting up.
13254 if (isUndefined(global.process)) {
13255 return function() {
13256 return exports.deprecate(fn, msg).apply(this, arguments);
13257 };
8b095871 13258 }
8b095871 13259
9987f0c1
IC
13260 if (process.noDeprecation === true) {
13261 return fn;
8b095871
IC
13262 }
13263
9987f0c1
IC
13264 var warned = false;
13265 function deprecated() {
13266 if (!warned) {
13267 if (process.throwDeprecation) {
13268 throw new Error(msg);
13269 } else if (process.traceDeprecation) {
13270 console.trace(msg);
13271 } else {
13272 console.error(msg);
13273 }
13274 warned = true;
13275 }
13276 return fn.apply(this, arguments);
8b095871
IC
13277 }
13278
9987f0c1 13279 return deprecated;
8b095871
IC
13280};
13281
8b095871 13282
9987f0c1
IC
13283var debugs = {};
13284var debugEnviron;
13285exports.debuglog = function(set) {
13286 if (isUndefined(debugEnviron))
13287 debugEnviron = process.env.NODE_DEBUG || '';
13288 set = set.toUpperCase();
13289 if (!debugs[set]) {
13290 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
13291 var pid = process.pid;
13292 debugs[set] = function() {
13293 var msg = exports.format.apply(exports, arguments);
13294 console.error('%s %d: %s', set, pid, msg);
13295 };
13296 } else {
13297 debugs[set] = function() {};
13298 }
13299 }
13300 return debugs[set];
13301};
8b095871 13302
8b095871 13303
9987f0c1
IC
13304/**
13305 * Echos the value of a value. Trys to print the value out
13306 * in the best way possible given the different types.
13307 *
13308 * @param {Object} obj The object to print out.
13309 * @param {Object} opts Optional options object that alters the output.
13310 */
13311/* legacy: obj, showHidden, depth, colors*/
13312function inspect(obj, opts) {
13313 // default options
13314 var ctx = {
13315 seen: [],
13316 stylize: stylizeNoColor
13317 };
13318 // legacy...
13319 if (arguments.length >= 3) ctx.depth = arguments[2];
13320 if (arguments.length >= 4) ctx.colors = arguments[3];
13321 if (isBoolean(opts)) {
13322 // legacy...
13323 ctx.showHidden = opts;
13324 } else if (opts) {
13325 // got an "options" object
13326 exports._extend(ctx, opts);
13327 }
13328 // set default options
13329 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
13330 if (isUndefined(ctx.depth)) ctx.depth = 2;
13331 if (isUndefined(ctx.colors)) ctx.colors = false;
13332 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
13333 if (ctx.colors) ctx.stylize = stylizeWithColor;
13334 return formatValue(ctx, obj, ctx.depth);
13335}
13336exports.inspect = inspect;
8b095871 13337
8b095871 13338
9987f0c1
IC
13339// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
13340inspect.colors = {
13341 'bold' : [1, 22],
13342 'italic' : [3, 23],
13343 'underline' : [4, 24],
13344 'inverse' : [7, 27],
13345 'white' : [37, 39],
13346 'grey' : [90, 39],
13347 'black' : [30, 39],
13348 'blue' : [34, 39],
13349 'cyan' : [36, 39],
13350 'green' : [32, 39],
13351 'magenta' : [35, 39],
13352 'red' : [31, 39],
13353 'yellow' : [33, 39]
13354};
8b095871 13355
9987f0c1
IC
13356// Don't use 'blue' not visible on cmd.exe
13357inspect.styles = {
13358 'special': 'cyan',
13359 'number': 'yellow',
13360 'boolean': 'yellow',
13361 'undefined': 'grey',
13362 'null': 'bold',
13363 'string': 'green',
13364 'date': 'magenta',
13365 // "name": intentionally not styling
13366 'regexp': 'red'
13367};
8b095871 13368
8b095871 13369
9987f0c1
IC
13370function stylizeWithColor(str, styleType) {
13371 var style = inspect.styles[styleType];
8b095871 13372
9987f0c1
IC
13373 if (style) {
13374 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
13375 '\u001b[' + inspect.colors[style][1] + 'm';
13376 } else {
13377 return str;
8b095871 13378 }
9987f0c1 13379}
8b095871 13380
8b095871 13381
9987f0c1
IC
13382function stylizeNoColor(str, styleType) {
13383 return str;
13384}
8b095871 13385
8b095871 13386
9987f0c1
IC
13387function arrayToHash(array) {
13388 var hash = {};
8b095871 13389
9987f0c1
IC
13390 array.forEach(function(val, idx) {
13391 hash[val] = true;
13392 });
8b095871 13393
9987f0c1
IC
13394 return hash;
13395}
8b095871 13396
8b095871 13397
9987f0c1
IC
13398function formatValue(ctx, value, recurseTimes) {
13399 // Provide a hook for user-specified inspect functions.
13400 // Check that value is an object with an inspect function on it
13401 if (ctx.customInspect &&
13402 value &&
13403 isFunction(value.inspect) &&
13404 // Filter out the util module, it's inspect function is special
13405 value.inspect !== exports.inspect &&
13406 // Also filter out any prototype objects using the circular check.
13407 !(value.constructor && value.constructor.prototype === value)) {
13408 var ret = value.inspect(recurseTimes, ctx);
13409 if (!isString(ret)) {
13410 ret = formatValue(ctx, ret, recurseTimes);
8b095871 13411 }
9987f0c1 13412 return ret;
8b095871 13413 }
8b095871 13414
9987f0c1
IC
13415 // Primitive types cannot have properties
13416 var primitive = formatPrimitive(ctx, value);
13417 if (primitive) {
13418 return primitive;
8b095871 13419 }
8b095871 13420
9987f0c1
IC
13421 // Look up the keys of the object.
13422 var keys = Object.keys(value);
13423 var visibleKeys = arrayToHash(keys);
8b095871 13424
9987f0c1
IC
13425 if (ctx.showHidden) {
13426 keys = Object.getOwnPropertyNames(value);
8b095871 13427 }
8b095871 13428
9987f0c1
IC
13429 // IE doesn't make error fields non-enumerable
13430 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
13431 if (isError(value)
13432 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
13433 return formatError(value);
8b095871 13434 }
8b095871 13435
9987f0c1
IC
13436 // Some type of object without properties can be shortcutted.
13437 if (keys.length === 0) {
13438 if (isFunction(value)) {
13439 var name = value.name ? ': ' + value.name : '';
13440 return ctx.stylize('[Function' + name + ']', 'special');
8b095871 13441 }
9987f0c1
IC
13442 if (isRegExp(value)) {
13443 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13444 }
9987f0c1
IC
13445 if (isDate(value)) {
13446 return ctx.stylize(Date.prototype.toString.call(value), 'date');
13447 }
13448 if (isError(value)) {
13449 return formatError(value);
8b095871
IC
13450 }
13451 }
13452
9987f0c1 13453 var base = '', array = false, braces = ['{', '}'];
8b095871 13454
9987f0c1
IC
13455 // Make Array say that they are Array
13456 if (isArray(value)) {
13457 array = true;
13458 braces = ['[', ']'];
13459 }
8b095871 13460
9987f0c1
IC
13461 // Make functions say that they are functions
13462 if (isFunction(value)) {
13463 var n = value.name ? ': ' + value.name : '';
13464 base = ' [Function' + n + ']';
13465 }
8b095871 13466
9987f0c1
IC
13467 // Make RegExps say that they are RegExps
13468 if (isRegExp(value)) {
13469 base = ' ' + RegExp.prototype.toString.call(value);
13470 }
8b095871 13471
9987f0c1
IC
13472 // Make dates with properties first say the date
13473 if (isDate(value)) {
13474 base = ' ' + Date.prototype.toUTCString.call(value);
13475 }
8b095871 13476
9987f0c1
IC
13477 // Make error with message first say the error
13478 if (isError(value)) {
13479 base = ' ' + formatError(value);
13480 }
8b095871 13481
9987f0c1
IC
13482 if (keys.length === 0 && (!array || value.length == 0)) {
13483 return braces[0] + base + braces[1];
13484 }
8b095871 13485
9987f0c1
IC
13486 if (recurseTimes < 0) {
13487 if (isRegExp(value)) {
13488 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
8b095871 13489 } else {
9987f0c1
IC
13490 return ctx.stylize('[Object]', 'special');
13491 }
13492 }
8b095871 13493
9987f0c1 13494 ctx.seen.push(value);
8b095871 13495
9987f0c1
IC
13496 var output;
13497 if (array) {
13498 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
13499 } else {
13500 output = keys.map(function(key) {
13501 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
13502 });
8b095871
IC
13503 }
13504
9987f0c1 13505 ctx.seen.pop();
8b095871 13506
9987f0c1
IC
13507 return reduceToSingleString(output, base, braces);
13508}
8b095871 13509
8b095871 13510
9987f0c1
IC
13511function formatPrimitive(ctx, value) {
13512 if (isUndefined(value))
13513 return ctx.stylize('undefined', 'undefined');
13514 if (isString(value)) {
13515 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
13516 .replace(/'/g, "\\'")
13517 .replace(/\\"/g, '"') + '\'';
13518 return ctx.stylize(simple, 'string');
8b095871 13519 }
9987f0c1
IC
13520 if (isNumber(value))
13521 return ctx.stylize('' + value, 'number');
13522 if (isBoolean(value))
13523 return ctx.stylize('' + value, 'boolean');
13524 // For some reason typeof null is "object", so special case here.
13525 if (isNull(value))
13526 return ctx.stylize('null', 'null');
8b095871
IC
13527}
13528
9987f0c1
IC
13529
13530function formatError(value) {
13531 return '[' + Error.prototype.toString.call(value) + ']';
8b095871
IC
13532}
13533
9987f0c1
IC
13534
13535function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
13536 var output = [];
13537 for (var i = 0, l = value.length; i < l; ++i) {
13538 if (hasOwnProperty(value, String(i))) {
13539 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13540 String(i), true));
13541 } else {
13542 output.push('');
13543 }
8b095871 13544 }
9987f0c1
IC
13545 keys.forEach(function(key) {
13546 if (!key.match(/^\d+$/)) {
13547 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
13548 key, true));
13549 }
13550 });
13551 return output;
8b095871
IC
13552}
13553
8b095871 13554
9987f0c1
IC
13555function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
13556 var name, str, desc;
13557 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
13558 if (desc.get) {
13559 if (desc.set) {
13560 str = ctx.stylize('[Getter/Setter]', 'special');
13561 } else {
13562 str = ctx.stylize('[Getter]', 'special');
13563 }
13564 } else {
13565 if (desc.set) {
13566 str = ctx.stylize('[Setter]', 'special');
13567 }
13568 }
13569 if (!hasOwnProperty(visibleKeys, key)) {
13570 name = '[' + key + ']';
13571 }
13572 if (!str) {
13573 if (ctx.seen.indexOf(desc.value) < 0) {
13574 if (isNull(recurseTimes)) {
13575 str = formatValue(ctx, desc.value, null);
13576 } else {
13577 str = formatValue(ctx, desc.value, recurseTimes - 1);
13578 }
13579 if (str.indexOf('\n') > -1) {
13580 if (array) {
13581 str = str.split('\n').map(function(line) {
13582 return ' ' + line;
13583 }).join('\n').substr(2);
13584 } else {
13585 str = '\n' + str.split('\n').map(function(line) {
13586 return ' ' + line;
13587 }).join('\n');
13588 }
13589 }
13590 } else {
13591 str = ctx.stylize('[Circular]', 'special');
13592 }
13593 }
13594 if (isUndefined(name)) {
13595 if (array && key.match(/^\d+$/)) {
13596 return str;
13597 }
13598 name = JSON.stringify('' + key);
13599 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
13600 name = name.substr(1, name.length - 2);
13601 name = ctx.stylize(name, 'name');
13602 } else {
13603 name = name.replace(/'/g, "\\'")
13604 .replace(/\\"/g, '"')
13605 .replace(/(^"|"$)/g, "'");
13606 name = ctx.stylize(name, 'string');
13607 }
13608 }
8b095871 13609
9987f0c1
IC
13610 return name + ': ' + str;
13611}
8b095871 13612
8b095871 13613
9987f0c1
IC
13614function reduceToSingleString(output, base, braces) {
13615 var numLinesEst = 0;
13616 var length = output.reduce(function(prev, cur) {
13617 numLinesEst++;
13618 if (cur.indexOf('\n') >= 0) numLinesEst++;
13619 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
13620 }, 0);
8b095871 13621
9987f0c1
IC
13622 if (length > 60) {
13623 return braces[0] +
13624 (base === '' ? '' : base + '\n ') +
13625 ' ' +
13626 output.join(',\n ') +
13627 ' ' +
13628 braces[1];
13629 }
8b095871 13630
9987f0c1
IC
13631 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
13632}
8b095871 13633
8b095871 13634
9987f0c1
IC
13635// NOTE: These type checking functions intentionally don't use `instanceof`
13636// because it is fragile and can be easily faked with `Object.create()`.
13637function isArray(ar) {
13638 return Array.isArray(ar);
8b095871 13639}
9987f0c1 13640exports.isArray = isArray;
8b095871 13641
9987f0c1
IC
13642function isBoolean(arg) {
13643 return typeof arg === 'boolean';
13644}
13645exports.isBoolean = isBoolean;
8b095871 13646
9987f0c1
IC
13647function isNull(arg) {
13648 return arg === null;
13649}
13650exports.isNull = isNull;
8b095871 13651
9987f0c1
IC
13652function isNullOrUndefined(arg) {
13653 return arg == null;
13654}
13655exports.isNullOrUndefined = isNullOrUndefined;
8b095871 13656
9987f0c1
IC
13657function isNumber(arg) {
13658 return typeof arg === 'number';
13659}
13660exports.isNumber = isNumber;
8b095871 13661
9987f0c1
IC
13662function isString(arg) {
13663 return typeof arg === 'string';
13664}
13665exports.isString = isString;
8b095871 13666
9987f0c1
IC
13667function isSymbol(arg) {
13668 return typeof arg === 'symbol';
13669}
13670exports.isSymbol = isSymbol;
8b095871 13671
9987f0c1
IC
13672function isUndefined(arg) {
13673 return arg === void 0;
8b095871 13674}
9987f0c1 13675exports.isUndefined = isUndefined;
8b095871 13676
9987f0c1
IC
13677function isRegExp(re) {
13678 return isObject(re) && objectToString(re) === '[object RegExp]';
13679}
13680exports.isRegExp = isRegExp;
8b095871 13681
9987f0c1
IC
13682function isObject(arg) {
13683 return typeof arg === 'object' && arg !== null;
13684}
13685exports.isObject = isObject;
8b095871 13686
9987f0c1
IC
13687function isDate(d) {
13688 return isObject(d) && objectToString(d) === '[object Date]';
13689}
13690exports.isDate = isDate;
8b095871 13691
9987f0c1
IC
13692function isError(e) {
13693 return isObject(e) &&
13694 (objectToString(e) === '[object Error]' || e instanceof Error);
13695}
13696exports.isError = isError;
8b095871 13697
9987f0c1
IC
13698function isFunction(arg) {
13699 return typeof arg === 'function';
13700}
13701exports.isFunction = isFunction;
8b095871 13702
9987f0c1
IC
13703function isPrimitive(arg) {
13704 return arg === null ||
13705 typeof arg === 'boolean' ||
13706 typeof arg === 'number' ||
13707 typeof arg === 'string' ||
13708 typeof arg === 'symbol' || // ES6 symbol
13709 typeof arg === 'undefined';
13710}
13711exports.isPrimitive = isPrimitive;
8b095871 13712
9987f0c1 13713exports.isBuffer = require('./support/isBuffer');
8b095871 13714
9987f0c1
IC
13715function objectToString(o) {
13716 return Object.prototype.toString.call(o);
8b095871
IC
13717}
13718
8b095871 13719
9987f0c1
IC
13720function pad(n) {
13721 return n < 10 ? '0' + n.toString(10) : n.toString(10);
13722}
8b095871 13723
8b095871 13724
9987f0c1
IC
13725var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
13726 'Oct', 'Nov', 'Dec'];
8b095871 13727
9987f0c1
IC
13728// 26 Feb 16:19:34
13729function timestamp() {
13730 var d = new Date();
13731 var time = [pad(d.getHours()),
13732 pad(d.getMinutes()),
13733 pad(d.getSeconds())].join(':');
13734 return [d.getDate(), months[d.getMonth()], time].join(' ');
13735}
13736
13737
13738// log is just a thin wrapper to console.log that prepends a timestamp
13739exports.log = function() {
13740 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
8b095871
IC
13741};
13742
13743
9987f0c1
IC
13744/**
13745 * Inherit the prototype methods from one constructor into another.
13746 *
13747 * The Function.prototype.inherits from lang.js rewritten as a standalone
13748 * function (not on Function.prototype). NOTE: If this file is to be loaded
13749 * during bootstrapping this function needs to be rewritten using some native
13750 * functions as prototype setup using normal JavaScript does not work as
13751 * expected during bootstrapping (see mirror.js in r114903).
13752 *
13753 * @param {function} ctor Constructor function which needs to inherit the
13754 * prototype.
13755 * @param {function} superCtor Constructor function to inherit prototype from.
13756 */
13757exports.inherits = require('inherits');
8b095871 13758
9987f0c1
IC
13759exports._extend = function(origin, add) {
13760 // Don't do anything if add isn't an object
13761 if (!add || !isObject(add)) return origin;
8b095871 13762
9987f0c1
IC
13763 var keys = Object.keys(add);
13764 var i = keys.length;
13765 while (i--) {
13766 origin[keys[i]] = add[keys[i]];
13767 }
13768 return origin;
13769};
8b095871 13770
9987f0c1
IC
13771function hasOwnProperty(obj, prop) {
13772 return Object.prototype.hasOwnProperty.call(obj, prop);
13773}
8b095871 13774
9987f0c1
IC
13775}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
13776},{"./support/isBuffer":31,"_process":12,"inherits":30}],33:[function(require,module,exports){
13777module.exports = {
13778 base58: require('bs58'),
13779 bitcoin: require('bitcoinjs-lib'),
13780 ecurve: require('ecurve'),
13781 BigInteger: require('bigi')
8b095871
IC
13782}
13783
9987f0c1
IC
13784},{"bigi":37,"bitcoinjs-lib":50,"bs58":79,"ecurve":89}],34:[function(require,module,exports){
13785// base-x encoding
13786// Forked from https://github.com/cryptocoinjs/bs58
13787// Originally written by Mike Hearn for BitcoinJ
13788// Copyright (c) 2011 Google Inc
13789// Ported to JavaScript by Stefan Thomas
13790// Merged Buffer refactorings from base58-native by Stephen Pair
13791// Copyright (c) 2013 BitPay Inc
8b095871 13792
9987f0c1 13793var Buffer = require('safe-buffer').Buffer
8b095871 13794
9987f0c1
IC
13795module.exports = function base (ALPHABET) {
13796 var ALPHABET_MAP = {}
13797 var BASE = ALPHABET.length
13798 var LEADER = ALPHABET.charAt(0)
8b095871 13799
9987f0c1
IC
13800 // pre-compute lookup table
13801 for (var z = 0; z < ALPHABET.length; z++) {
13802 var x = ALPHABET.charAt(z)
8b095871 13803
9987f0c1
IC
13804 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
13805 ALPHABET_MAP[x] = z
13806 }
8b095871 13807
9987f0c1
IC
13808 function encode (source) {
13809 if (source.length === 0) return ''
8b095871 13810
9987f0c1
IC
13811 var digits = [0]
13812 for (var i = 0; i < source.length; ++i) {
13813 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
13814 carry += digits[j] << 8
13815 digits[j] = carry % BASE
13816 carry = (carry / BASE) | 0
13817 }
8b095871 13818
9987f0c1
IC
13819 while (carry > 0) {
13820 digits.push(carry % BASE)
13821 carry = (carry / BASE) | 0
13822 }
13823 }
8b095871 13824
9987f0c1 13825 var string = ''
8b095871 13826
9987f0c1
IC
13827 // deal with leading zeros
13828 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
13829 // convert digits to a string
13830 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
8b095871 13831
9987f0c1
IC
13832 return string
13833 }
8b095871 13834
9987f0c1
IC
13835 function decodeUnsafe (string) {
13836 if (string.length === 0) return Buffer.allocUnsafe(0)
8b095871 13837
9987f0c1
IC
13838 var bytes = [0]
13839 for (var i = 0; i < string.length; i++) {
13840 var value = ALPHABET_MAP[string[i]]
13841 if (value === undefined) return
8b095871 13842
9987f0c1
IC
13843 for (var j = 0, carry = value; j < bytes.length; ++j) {
13844 carry += bytes[j] * BASE
13845 bytes[j] = carry & 0xff
13846 carry >>= 8
13847 }
8b095871 13848
9987f0c1
IC
13849 while (carry > 0) {
13850 bytes.push(carry & 0xff)
13851 carry >>= 8
13852 }
13853 }
8b095871 13854
9987f0c1
IC
13855 // deal with leading zeros
13856 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
13857 bytes.push(0)
13858 }
8b095871 13859
9987f0c1
IC
13860 return Buffer.from(bytes.reverse())
13861 }
8b095871 13862
9987f0c1
IC
13863 function decode (string) {
13864 var buffer = decodeUnsafe(string)
13865 if (buffer) return buffer
8b095871 13866
9987f0c1
IC
13867 throw new Error('Non-base' + BASE + ' character')
13868 }
8b095871 13869
9987f0c1
IC
13870 return {
13871 encode: encode,
13872 decodeUnsafe: decodeUnsafe,
13873 decode: decode
13874 }
13875}
8b095871 13876
9987f0c1
IC
13877},{"safe-buffer":98}],35:[function(require,module,exports){
13878// (public) Constructor
13879function BigInteger(a, b, c) {
13880 if (!(this instanceof BigInteger))
13881 return new BigInteger(a, b, c)
8b095871 13882
9987f0c1
IC
13883 if (a != null) {
13884 if ("number" == typeof a) this.fromNumber(a, b, c)
13885 else if (b == null && "string" != typeof a) this.fromString(a, 256)
13886 else this.fromString(a, b)
13887 }
13888}
8b095871 13889
9987f0c1 13890var proto = BigInteger.prototype
8b095871 13891
9987f0c1
IC
13892// duck-typed isBigInteger
13893proto.__bigi = require('../package.json').version
13894BigInteger.isBigInteger = function (obj, check_ver) {
13895 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
13896}
8b095871 13897
9987f0c1
IC
13898// Bits per digit
13899var dbits
8b095871 13900
9987f0c1
IC
13901// am: Compute w_j += (x*this_i), propagate carries,
13902// c is initial carry, returns final carry.
13903// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
13904// We need to select the fastest one that works in this environment.
8b095871 13905
9987f0c1
IC
13906// am1: use a single mult and divide to get the high bits,
13907// max digit bits should be 26 because
13908// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
13909function am1(i, x, w, j, c, n) {
13910 while (--n >= 0) {
13911 var v = x * this[i++] + w[j] + c
13912 c = Math.floor(v / 0x4000000)
13913 w[j++] = v & 0x3ffffff
13914 }
13915 return c
13916}
13917// am2 avoids a big mult-and-extract completely.
13918// Max digit bits should be <= 30 because we do bitwise ops
13919// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
13920function am2(i, x, w, j, c, n) {
13921 var xl = x & 0x7fff,
13922 xh = x >> 15
13923 while (--n >= 0) {
13924 var l = this[i] & 0x7fff
13925 var h = this[i++] >> 15
13926 var m = xh * l + h * xl
13927 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
13928 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
13929 w[j++] = l & 0x3fffffff
13930 }
13931 return c
13932}
13933// Alternately, set max digit bits to 28 since some
13934// browsers slow down when dealing with 32-bit numbers.
13935function am3(i, x, w, j, c, n) {
13936 var xl = x & 0x3fff,
13937 xh = x >> 14
13938 while (--n >= 0) {
13939 var l = this[i] & 0x3fff
13940 var h = this[i++] >> 14
13941 var m = xh * l + h * xl
13942 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
13943 c = (l >> 28) + (m >> 14) + xh * h
13944 w[j++] = l & 0xfffffff
13945 }
13946 return c
13947}
8b095871 13948
9987f0c1
IC
13949// wtf?
13950BigInteger.prototype.am = am1
13951dbits = 26
8b095871 13952
9987f0c1
IC
13953BigInteger.prototype.DB = dbits
13954BigInteger.prototype.DM = ((1 << dbits) - 1)
13955var DV = BigInteger.prototype.DV = (1 << dbits)
8b095871 13956
9987f0c1
IC
13957var BI_FP = 52
13958BigInteger.prototype.FV = Math.pow(2, BI_FP)
13959BigInteger.prototype.F1 = BI_FP - dbits
13960BigInteger.prototype.F2 = 2 * dbits - BI_FP
8b095871 13961
9987f0c1
IC
13962// Digit conversions
13963var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
13964var BI_RC = new Array()
13965var rr, vv
13966rr = "0".charCodeAt(0)
13967for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
13968rr = "a".charCodeAt(0)
13969for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
13970rr = "A".charCodeAt(0)
13971for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
8b095871 13972
9987f0c1
IC
13973function int2char(n) {
13974 return BI_RM.charAt(n)
13975}
8b095871 13976
9987f0c1
IC
13977function intAt(s, i) {
13978 var c = BI_RC[s.charCodeAt(i)]
13979 return (c == null) ? -1 : c
13980}
8b095871 13981
9987f0c1
IC
13982// (protected) copy this to r
13983function bnpCopyTo(r) {
13984 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
13985 r.t = this.t
13986 r.s = this.s
13987}
8b095871 13988
9987f0c1
IC
13989// (protected) set from integer value x, -DV <= x < DV
13990function bnpFromInt(x) {
13991 this.t = 1
13992 this.s = (x < 0) ? -1 : 0
13993 if (x > 0) this[0] = x
13994 else if (x < -1) this[0] = x + DV
13995 else this.t = 0
13996}
8b095871 13997
9987f0c1
IC
13998// return bigint initialized to value
13999function nbv(i) {
14000 var r = new BigInteger()
14001 r.fromInt(i)
14002 return r
8b095871
IC
14003}
14004
9987f0c1
IC
14005// (protected) set from string and radix
14006function bnpFromString(s, b) {
14007 var self = this
8b095871 14008
9987f0c1
IC
14009 var k
14010 if (b == 16) k = 4
14011 else if (b == 8) k = 3
14012 else if (b == 256) k = 8; // byte array
14013 else if (b == 2) k = 1
14014 else if (b == 32) k = 5
14015 else if (b == 4) k = 2
14016 else {
14017 self.fromRadix(s, b)
14018 return
14019 }
14020 self.t = 0
14021 self.s = 0
14022 var i = s.length,
14023 mi = false,
14024 sh = 0
14025 while (--i >= 0) {
14026 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
14027 if (x < 0) {
14028 if (s.charAt(i) == "-") mi = true
14029 continue
14030 }
14031 mi = false
14032 if (sh == 0)
14033 self[self.t++] = x
14034 else if (sh + k > self.DB) {
14035 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
14036 self[self.t++] = (x >> (self.DB - sh))
14037 } else
14038 self[self.t - 1] |= x << sh
14039 sh += k
14040 if (sh >= self.DB) sh -= self.DB
14041 }
14042 if (k == 8 && (s[0] & 0x80) != 0) {
14043 self.s = -1
14044 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
14045 }
14046 self.clamp()
14047 if (mi) BigInteger.ZERO.subTo(self, self)
14048}
8b095871 14049
9987f0c1
IC
14050// (protected) clamp off excess high words
14051function bnpClamp() {
14052 var c = this.s & this.DM
14053 while (this.t > 0 && this[this.t - 1] == c)--this.t
8b095871
IC
14054}
14055
9987f0c1
IC
14056// (public) return string representation in given radix
14057function bnToString(b) {
14058 var self = this
14059 if (self.s < 0) return "-" + self.negate()
14060 .toString(b)
14061 var k
14062 if (b == 16) k = 4
14063 else if (b == 8) k = 3
14064 else if (b == 2) k = 1
14065 else if (b == 32) k = 5
14066 else if (b == 4) k = 2
14067 else return self.toRadix(b)
14068 var km = (1 << k) - 1,
14069 d, m = false,
14070 r = "",
14071 i = self.t
14072 var p = self.DB - (i * self.DB) % k
14073 if (i-- > 0) {
14074 if (p < self.DB && (d = self[i] >> p) > 0) {
14075 m = true
14076 r = int2char(d)
14077 }
14078 while (i >= 0) {
14079 if (p < k) {
14080 d = (self[i] & ((1 << p) - 1)) << (k - p)
14081 d |= self[--i] >> (p += self.DB - k)
14082 } else {
14083 d = (self[i] >> (p -= k)) & km
14084 if (p <= 0) {
14085 p += self.DB
14086 --i
14087 }
14088 }
14089 if (d > 0) m = true
14090 if (m) r += int2char(d)
14091 }
8b095871 14092 }
9987f0c1 14093 return m ? r : "0"
8b095871
IC
14094}
14095
9987f0c1
IC
14096// (public) -this
14097function bnNegate() {
14098 var r = new BigInteger()
14099 BigInteger.ZERO.subTo(this, r)
14100 return r
14101}
8b095871 14102
9987f0c1
IC
14103// (public) |this|
14104function bnAbs() {
14105 return (this.s < 0) ? this.negate() : this
14106}
8b095871 14107
9987f0c1
IC
14108// (public) return + if this > a, - if this < a, 0 if equal
14109function bnCompareTo(a) {
14110 var r = this.s - a.s
14111 if (r != 0) return r
14112 var i = this.t
14113 r = i - a.t
14114 if (r != 0) return (this.s < 0) ? -r : r
14115 while (--i >= 0)
14116 if ((r = this[i] - a[i]) != 0) return r
14117 return 0
14118}
8b095871 14119
9987f0c1
IC
14120// returns bit length of the integer x
14121function nbits(x) {
14122 var r = 1,
14123 t
14124 if ((t = x >>> 16) != 0) {
14125 x = t
14126 r += 16
14127 }
14128 if ((t = x >> 8) != 0) {
14129 x = t
14130 r += 8
14131 }
14132 if ((t = x >> 4) != 0) {
14133 x = t
14134 r += 4
14135 }
14136 if ((t = x >> 2) != 0) {
14137 x = t
14138 r += 2
14139 }
14140 if ((t = x >> 1) != 0) {
14141 x = t
14142 r += 1
8b095871 14143 }
9987f0c1
IC
14144 return r
14145}
8b095871 14146
9987f0c1
IC
14147// (public) return the number of bits in "this"
14148function bnBitLength() {
14149 if (this.t <= 0) return 0
14150 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
14151}
8b095871 14152
9987f0c1
IC
14153// (public) return the number of bytes in "this"
14154function bnByteLength() {
14155 return this.bitLength() >> 3
14156}
8b095871 14157
9987f0c1
IC
14158// (protected) r = this << n*DB
14159function bnpDLShiftTo(n, r) {
14160 var i
14161 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
14162 for (i = n - 1; i >= 0; --i) r[i] = 0
14163 r.t = this.t + n
14164 r.s = this.s
14165}
8b095871 14166
9987f0c1
IC
14167// (protected) r = this >> n*DB
14168function bnpDRShiftTo(n, r) {
14169 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
14170 r.t = Math.max(this.t - n, 0)
14171 r.s = this.s
14172}
8b095871 14173
9987f0c1
IC
14174// (protected) r = this << n
14175function bnpLShiftTo(n, r) {
14176 var self = this
14177 var bs = n % self.DB
14178 var cbs = self.DB - bs
14179 var bm = (1 << cbs) - 1
14180 var ds = Math.floor(n / self.DB),
14181 c = (self.s << bs) & self.DM,
14182 i
14183 for (i = self.t - 1; i >= 0; --i) {
14184 r[i + ds + 1] = (self[i] >> cbs) | c
14185 c = (self[i] & bm) << bs
14186 }
14187 for (i = ds - 1; i >= 0; --i) r[i] = 0
14188 r[ds] = c
14189 r.t = self.t + ds + 1
14190 r.s = self.s
14191 r.clamp()
14192}
8b095871 14193
9987f0c1
IC
14194// (protected) r = this >> n
14195function bnpRShiftTo(n, r) {
14196 var self = this
14197 r.s = self.s
14198 var ds = Math.floor(n / self.DB)
14199 if (ds >= self.t) {
14200 r.t = 0
14201 return
8b095871 14202 }
9987f0c1
IC
14203 var bs = n % self.DB
14204 var cbs = self.DB - bs
14205 var bm = (1 << bs) - 1
14206 r[0] = self[ds] >> bs
14207 for (var i = ds + 1; i < self.t; ++i) {
14208 r[i - ds - 1] |= (self[i] & bm) << cbs
14209 r[i - ds] = self[i] >> bs
14210 }
14211 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
14212 r.t = self.t - ds
14213 r.clamp()
14214}
8b095871 14215
9987f0c1
IC
14216// (protected) r = this - a
14217function bnpSubTo(a, r) {
14218 var self = this
14219 var i = 0,
14220 c = 0,
14221 m = Math.min(a.t, self.t)
14222 while (i < m) {
14223 c += self[i] - a[i]
14224 r[i++] = c & self.DM
14225 c >>= self.DB
8b095871 14226 }
9987f0c1
IC
14227 if (a.t < self.t) {
14228 c -= a.s
14229 while (i < self.t) {
14230 c += self[i]
14231 r[i++] = c & self.DM
14232 c >>= self.DB
14233 }
14234 c += self.s
14235 } else {
14236 c += self.s
14237 while (i < a.t) {
14238 c -= a[i]
14239 r[i++] = c & self.DM
14240 c >>= self.DB
14241 }
14242 c -= a.s
14243 }
14244 r.s = (c < 0) ? -1 : 0
14245 if (c < -1) r[i++] = self.DV + c
14246 else if (c > 0) r[i++] = c
14247 r.t = i
14248 r.clamp()
8b095871
IC
14249}
14250
9987f0c1
IC
14251// (protected) r = this * a, r != this,a (HAC 14.12)
14252// "this" should be the larger one if appropriate.
14253function bnpMultiplyTo(a, r) {
14254 var x = this.abs(),
14255 y = a.abs()
14256 var i = x.t
14257 r.t = i + y.t
14258 while (--i >= 0) r[i] = 0
14259 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
14260 r.s = 0
14261 r.clamp()
14262 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
14263}
8b095871 14264
9987f0c1
IC
14265// (protected) r = this^2, r != this (HAC 14.16)
14266function bnpSquareTo(r) {
14267 var x = this.abs()
14268 var i = r.t = 2 * x.t
14269 while (--i >= 0) r[i] = 0
14270 for (i = 0; i < x.t - 1; ++i) {
14271 var c = x.am(i, x[i], r, 2 * i, 0, 1)
14272 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
14273 r[i + x.t] -= x.DV
14274 r[i + x.t + 1] = 1
14275 }
14276 }
14277 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
14278 r.s = 0
14279 r.clamp()
14280}
8b095871 14281
9987f0c1
IC
14282// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
14283// r != q, this != m. q or r may be null.
14284function bnpDivRemTo(m, q, r) {
14285 var self = this
14286 var pm = m.abs()
14287 if (pm.t <= 0) return
14288 var pt = self.abs()
14289 if (pt.t < pm.t) {
14290 if (q != null) q.fromInt(0)
14291 if (r != null) self.copyTo(r)
14292 return
14293 }
14294 if (r == null) r = new BigInteger()
14295 var y = new BigInteger(),
14296 ts = self.s,
14297 ms = m.s
14298 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
14299 if (nsh > 0) {
14300 pm.lShiftTo(nsh, y)
14301 pt.lShiftTo(nsh, r)
14302 } else {
14303 pm.copyTo(y)
14304 pt.copyTo(r)
14305 }
14306 var ys = y.t
14307 var y0 = y[ys - 1]
14308 if (y0 == 0) return
14309 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
14310 var d1 = self.FV / yt,
14311 d2 = (1 << self.F1) / yt,
14312 e = 1 << self.F2
14313 var i = r.t,
14314 j = i - ys,
14315 t = (q == null) ? new BigInteger() : q
14316 y.dlShiftTo(j, t)
14317 if (r.compareTo(t) >= 0) {
14318 r[r.t++] = 1
14319 r.subTo(t, r)
14320 }
14321 BigInteger.ONE.dlShiftTo(ys, t)
14322 t.subTo(y, y); // "negative" y so we can replace sub with am later
14323 while (y.t < ys) y[y.t++] = 0
14324 while (--j >= 0) {
14325 // Estimate quotient digit
14326 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
14327 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
14328 y.dlShiftTo(j, t)
14329 r.subTo(t, r)
14330 while (r[i] < --qd) r.subTo(t, r)
14331 }
14332 }
14333 if (q != null) {
14334 r.drShiftTo(ys, q)
14335 if (ts != ms) BigInteger.ZERO.subTo(q, q)
14336 }
14337 r.t = ys
14338 r.clamp()
14339 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
14340 if (ts < 0) BigInteger.ZERO.subTo(r, r)
14341}
8b095871 14342
9987f0c1
IC
14343// (public) this mod a
14344function bnMod(a) {
14345 var r = new BigInteger()
14346 this.abs()
14347 .divRemTo(a, null, r)
14348 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
14349 return r
14350}
8b095871 14351
9987f0c1
IC
14352// Modular reduction using "classic" algorithm
14353function Classic(m) {
14354 this.m = m
8b095871
IC
14355}
14356
9987f0c1
IC
14357function cConvert(x) {
14358 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
14359 else return x
8b095871
IC
14360}
14361
9987f0c1
IC
14362function cRevert(x) {
14363 return x
14364}
8b095871 14365
9987f0c1
IC
14366function cReduce(x) {
14367 x.divRemTo(this.m, null, x)
8b095871
IC
14368}
14369
9987f0c1
IC
14370function cMulTo(x, y, r) {
14371 x.multiplyTo(y, r)
14372 this.reduce(r)
8b095871
IC
14373}
14374
9987f0c1
IC
14375function cSqrTo(x, r) {
14376 x.squareTo(r)
14377 this.reduce(r)
14378}
8b095871 14379
9987f0c1
IC
14380Classic.prototype.convert = cConvert
14381Classic.prototype.revert = cRevert
14382Classic.prototype.reduce = cReduce
14383Classic.prototype.mulTo = cMulTo
14384Classic.prototype.sqrTo = cSqrTo
8b095871 14385
9987f0c1
IC
14386// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
14387// justification:
14388// xy == 1 (mod m)
14389// xy = 1+km
14390// xy(2-xy) = (1+km)(1-km)
14391// x[y(2-xy)] = 1-k^2m^2
14392// x[y(2-xy)] == 1 (mod m^2)
14393// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
14394// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
14395// JS multiply "overflows" differently from C/C++, so care is needed here.
14396function bnpInvDigit() {
14397 if (this.t < 1) return 0
14398 var x = this[0]
14399 if ((x & 1) == 0) return 0
14400 var y = x & 3; // y == 1/x mod 2^2
14401 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
14402 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
14403 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
14404 // last step - calculate inverse mod DV directly
14405 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
14406 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
14407 // we really want the negative inverse, and -DV < y < DV
14408 return (y > 0) ? this.DV - y : -y
14409}
8b095871 14410
9987f0c1
IC
14411// Montgomery reduction
14412function Montgomery(m) {
14413 this.m = m
14414 this.mp = m.invDigit()
14415 this.mpl = this.mp & 0x7fff
14416 this.mph = this.mp >> 15
14417 this.um = (1 << (m.DB - 15)) - 1
14418 this.mt2 = 2 * m.t
14419}
8b095871 14420
9987f0c1
IC
14421// xR mod m
14422function montConvert(x) {
14423 var r = new BigInteger()
14424 x.abs()
14425 .dlShiftTo(this.m.t, r)
14426 r.divRemTo(this.m, null, r)
14427 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
14428 return r
8b095871
IC
14429}
14430
9987f0c1
IC
14431// x/R mod m
14432function montRevert(x) {
14433 var r = new BigInteger()
14434 x.copyTo(r)
14435 this.reduce(r)
14436 return r
8b095871
IC
14437}
14438
9987f0c1
IC
14439// x = x/R mod m (HAC 14.32)
14440function montReduce(x) {
14441 while (x.t <= this.mt2) // pad x so am has enough room later
14442 x[x.t++] = 0
14443 for (var i = 0; i < this.m.t; ++i) {
14444 // faster way of calculating u0 = x[i]*mp mod DV
14445 var j = x[i] & 0x7fff
14446 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
14447 // use am to combine the multiply-shift-add into one call
14448 j = i + this.m.t
14449 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
14450 // propagate carry
14451 while (x[j] >= x.DV) {
14452 x[j] -= x.DV
14453 x[++j]++
14454 }
8b095871 14455 }
9987f0c1
IC
14456 x.clamp()
14457 x.drShiftTo(this.m.t, x)
14458 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
8b095871
IC
14459}
14460
9987f0c1
IC
14461// r = "x^2/R mod m"; x != r
14462function montSqrTo(x, r) {
14463 x.squareTo(r)
14464 this.reduce(r)
14465}
8b095871 14466
9987f0c1
IC
14467// r = "xy/R mod m"; x,y != r
14468function montMulTo(x, y, r) {
14469 x.multiplyTo(y, r)
14470 this.reduce(r)
14471}
8b095871 14472
9987f0c1
IC
14473Montgomery.prototype.convert = montConvert
14474Montgomery.prototype.revert = montRevert
14475Montgomery.prototype.reduce = montReduce
14476Montgomery.prototype.mulTo = montMulTo
14477Montgomery.prototype.sqrTo = montSqrTo
8b095871 14478
9987f0c1
IC
14479// (protected) true iff this is even
14480function bnpIsEven() {
14481 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
14482}
8b095871 14483
9987f0c1
IC
14484// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
14485function bnpExp(e, z) {
14486 if (e > 0xffffffff || e < 1) return BigInteger.ONE
14487 var r = new BigInteger(),
14488 r2 = new BigInteger(),
14489 g = z.convert(this),
14490 i = nbits(e) - 1
14491 g.copyTo(r)
14492 while (--i >= 0) {
14493 z.sqrTo(r, r2)
14494 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
14495 else {
14496 var t = r
14497 r = r2
14498 r2 = t
8b095871 14499 }
8b095871 14500 }
9987f0c1 14501 return z.revert(r)
8b095871
IC
14502}
14503
9987f0c1
IC
14504// (public) this^e % m, 0 <= e < 2^32
14505function bnModPowInt(e, m) {
14506 var z
14507 if (e < 256 || m.isEven()) z = new Classic(m)
14508 else z = new Montgomery(m)
14509 return this.exp(e, z)
14510}
8b095871 14511
9987f0c1
IC
14512// protected
14513proto.copyTo = bnpCopyTo
14514proto.fromInt = bnpFromInt
14515proto.fromString = bnpFromString
14516proto.clamp = bnpClamp
14517proto.dlShiftTo = bnpDLShiftTo
14518proto.drShiftTo = bnpDRShiftTo
14519proto.lShiftTo = bnpLShiftTo
14520proto.rShiftTo = bnpRShiftTo
14521proto.subTo = bnpSubTo
14522proto.multiplyTo = bnpMultiplyTo
14523proto.squareTo = bnpSquareTo
14524proto.divRemTo = bnpDivRemTo
14525proto.invDigit = bnpInvDigit
14526proto.isEven = bnpIsEven
14527proto.exp = bnpExp
8b095871 14528
9987f0c1
IC
14529// public
14530proto.toString = bnToString
14531proto.negate = bnNegate
14532proto.abs = bnAbs
14533proto.compareTo = bnCompareTo
14534proto.bitLength = bnBitLength
14535proto.byteLength = bnByteLength
14536proto.mod = bnMod
14537proto.modPowInt = bnModPowInt
8b095871 14538
9987f0c1
IC
14539// (public)
14540function bnClone() {
14541 var r = new BigInteger()
14542 this.copyTo(r)
14543 return r
14544}
8b095871 14545
9987f0c1
IC
14546// (public) return value as integer
14547function bnIntValue() {
14548 if (this.s < 0) {
14549 if (this.t == 1) return this[0] - this.DV
14550 else if (this.t == 0) return -1
14551 } else if (this.t == 1) return this[0]
14552 else if (this.t == 0) return 0
14553 // assumes 16 < DB < 32
14554 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
14555}
8b095871 14556
9987f0c1
IC
14557// (public) return value as byte
14558function bnByteValue() {
14559 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
14560}
8b095871 14561
9987f0c1
IC
14562// (public) return value as short (assumes DB>=16)
14563function bnShortValue() {
14564 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
14565}
8b095871 14566
9987f0c1
IC
14567// (protected) return x s.t. r^x < DV
14568function bnpChunkSize(r) {
14569 return Math.floor(Math.LN2 * this.DB / Math.log(r))
8b095871
IC
14570}
14571
9987f0c1
IC
14572// (public) 0 if this == 0, 1 if this > 0
14573function bnSigNum() {
14574 if (this.s < 0) return -1
14575 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
14576 else return 1
8b095871
IC
14577}
14578
9987f0c1
IC
14579// (protected) convert to radix string
14580function bnpToRadix(b) {
14581 if (b == null) b = 10
14582 if (this.signum() == 0 || b < 2 || b > 36) return "0"
14583 var cs = this.chunkSize(b)
14584 var a = Math.pow(b, cs)
14585 var d = nbv(a),
14586 y = new BigInteger(),
14587 z = new BigInteger(),
14588 r = ""
14589 this.divRemTo(d, y, z)
14590 while (y.signum() > 0) {
14591 r = (a + z.intValue())
14592 .toString(b)
14593 .substr(1) + r
14594 y.divRemTo(d, y, z)
8b095871 14595 }
9987f0c1
IC
14596 return z.intValue()
14597 .toString(b) + r
8b095871
IC
14598}
14599
9987f0c1
IC
14600// (protected) convert from radix string
14601function bnpFromRadix(s, b) {
14602 var self = this
14603 self.fromInt(0)
14604 if (b == null) b = 10
14605 var cs = self.chunkSize(b)
14606 var d = Math.pow(b, cs),
14607 mi = false,
14608 j = 0,
14609 w = 0
14610 for (var i = 0; i < s.length; ++i) {
14611 var x = intAt(s, i)
14612 if (x < 0) {
14613 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
14614 continue
14615 }
14616 w = b * w + x
14617 if (++j >= cs) {
14618 self.dMultiply(d)
14619 self.dAddOffset(w, 0)
14620 j = 0
14621 w = 0
14622 }
8b095871 14623 }
9987f0c1
IC
14624 if (j > 0) {
14625 self.dMultiply(Math.pow(b, j))
14626 self.dAddOffset(w, 0)
14627 }
14628 if (mi) BigInteger.ZERO.subTo(self, self)
8b095871
IC
14629}
14630
9987f0c1
IC
14631// (protected) alternate constructor
14632function bnpFromNumber(a, b, c) {
14633 var self = this
14634 if ("number" == typeof b) {
14635 // new BigInteger(int,int,RNG)
14636 if (a < 2) self.fromInt(1)
14637 else {
14638 self.fromNumber(a, c)
14639 if (!self.testBit(a - 1)) // force MSB set
14640 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
14641 if (self.isEven()) self.dAddOffset(1, 0); // force odd
14642 while (!self.isProbablePrime(b)) {
14643 self.dAddOffset(2, 0)
14644 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
14645 }
14646 }
14647 } else {
14648 // new BigInteger(int,RNG)
14649 var x = new Array(),
14650 t = a & 7
14651 x.length = (a >> 3) + 1
14652 b.nextBytes(x)
14653 if (t > 0) x[0] &= ((1 << t) - 1)
14654 else x[0] = 0
14655 self.fromString(x, 256)
14656 }
8b095871 14657}
8b095871 14658
9987f0c1
IC
14659// (public) convert to bigendian byte array
14660function bnToByteArray() {
14661 var self = this
14662 var i = self.t,
14663 r = new Array()
14664 r[0] = self.s
14665 var p = self.DB - (i * self.DB) % 8,
14666 d, k = 0
14667 if (i-- > 0) {
14668 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
14669 r[k++] = d | (self.s << (self.DB - p))
14670 while (i >= 0) {
14671 if (p < 8) {
14672 d = (self[i] & ((1 << p) - 1)) << (8 - p)
14673 d |= self[--i] >> (p += self.DB - 8)
14674 } else {
14675 d = (self[i] >> (p -= 8)) & 0xff
14676 if (p <= 0) {
14677 p += self.DB
14678 --i
14679 }
14680 }
14681 if ((d & 0x80) != 0) d |= -256
14682 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
14683 if (k > 0 || d != self.s) r[k++] = d
14684 }
14685 }
14686 return r
8b095871 14687}
8b095871 14688
9987f0c1
IC
14689function bnEquals(a) {
14690 return (this.compareTo(a) == 0)
8b095871 14691}
8b095871 14692
9987f0c1
IC
14693function bnMin(a) {
14694 return (this.compareTo(a) < 0) ? this : a
8b095871 14695}
8b095871 14696
9987f0c1
IC
14697function bnMax(a) {
14698 return (this.compareTo(a) > 0) ? this : a
8b095871 14699}
8b095871 14700
9987f0c1
IC
14701// (protected) r = this op a (bitwise)
14702function bnpBitwiseTo(a, op, r) {
14703 var self = this
14704 var i, f, m = Math.min(a.t, self.t)
14705 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
14706 if (a.t < self.t) {
14707 f = a.s & self.DM
14708 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
14709 r.t = self.t
14710 } else {
14711 f = self.s & self.DM
14712 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
14713 r.t = a.t
14714 }
14715 r.s = op(self.s, a.s)
14716 r.clamp()
8b095871 14717}
8b095871 14718
9987f0c1
IC
14719// (public) this & a
14720function op_and(x, y) {
14721 return x & y
8b095871 14722}
8b095871 14723
9987f0c1
IC
14724function bnAnd(a) {
14725 var r = new BigInteger()
14726 this.bitwiseTo(a, op_and, r)
14727 return r
8b095871 14728}
8b095871 14729
9987f0c1
IC
14730// (public) this | a
14731function op_or(x, y) {
14732 return x | y
8b095871 14733}
8b095871 14734
9987f0c1
IC
14735function bnOr(a) {
14736 var r = new BigInteger()
14737 this.bitwiseTo(a, op_or, r)
14738 return r
8b095871 14739}
8b095871 14740
9987f0c1
IC
14741// (public) this ^ a
14742function op_xor(x, y) {
14743 return x ^ y
8b095871 14744}
8b095871 14745
9987f0c1
IC
14746function bnXor(a) {
14747 var r = new BigInteger()
14748 this.bitwiseTo(a, op_xor, r)
14749 return r
8b095871 14750}
8b095871 14751
9987f0c1
IC
14752// (public) this & ~a
14753function op_andnot(x, y) {
14754 return x & ~y
8b095871 14755}
8b095871 14756
9987f0c1
IC
14757function bnAndNot(a) {
14758 var r = new BigInteger()
14759 this.bitwiseTo(a, op_andnot, r)
14760 return r
8b095871 14761}
8b095871 14762
9987f0c1
IC
14763// (public) ~this
14764function bnNot() {
14765 var r = new BigInteger()
14766 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
14767 r.t = this.t
14768 r.s = ~this.s
14769 return r
8b095871 14770}
8b095871 14771
9987f0c1
IC
14772// (public) this << n
14773function bnShiftLeft(n) {
14774 var r = new BigInteger()
14775 if (n < 0) this.rShiftTo(-n, r)
14776 else this.lShiftTo(n, r)
14777 return r
8b095871 14778}
8b095871 14779
9987f0c1
IC
14780// (public) this >> n
14781function bnShiftRight(n) {
14782 var r = new BigInteger()
14783 if (n < 0) this.lShiftTo(-n, r)
14784 else this.rShiftTo(n, r)
14785 return r
8b095871
IC
14786}
14787
9987f0c1
IC
14788// return index of lowest 1-bit in x, x < 2^31
14789function lbit(x) {
14790 if (x == 0) return -1
14791 var r = 0
14792 if ((x & 0xffff) == 0) {
14793 x >>= 16
14794 r += 16
8b095871 14795 }
9987f0c1
IC
14796 if ((x & 0xff) == 0) {
14797 x >>= 8
14798 r += 8
8b095871 14799 }
9987f0c1
IC
14800 if ((x & 0xf) == 0) {
14801 x >>= 4
14802 r += 4
8b095871 14803 }
9987f0c1
IC
14804 if ((x & 3) == 0) {
14805 x >>= 2
14806 r += 2
14807 }
14808 if ((x & 1) == 0)++r
14809 return r
14810}
8b095871 14811
9987f0c1
IC
14812// (public) returns index of lowest 1-bit (or -1 if none)
14813function bnGetLowestSetBit() {
14814 for (var i = 0; i < this.t; ++i)
14815 if (this[i] != 0) return i * this.DB + lbit(this[i])
14816 if (this.s < 0) return this.t * this.DB
14817 return -1
14818}
8b095871 14819
9987f0c1
IC
14820// return number of 1 bits in x
14821function cbit(x) {
14822 var r = 0
14823 while (x != 0) {
14824 x &= x - 1
14825 ++r
8b095871 14826 }
9987f0c1
IC
14827 return r
14828}
8b095871 14829
9987f0c1
IC
14830// (public) return number of set bits
14831function bnBitCount() {
14832 var r = 0,
14833 x = this.s & this.DM
14834 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
14835 return r
14836}
8b095871 14837
9987f0c1
IC
14838// (public) true iff nth bit is set
14839function bnTestBit(n) {
14840 var j = Math.floor(n / this.DB)
14841 if (j >= this.t) return (this.s != 0)
14842 return ((this[j] & (1 << (n % this.DB))) != 0)
14843}
8b095871 14844
9987f0c1
IC
14845// (protected) this op (1<<n)
14846function bnpChangeBit(n, op) {
14847 var r = BigInteger.ONE.shiftLeft(n)
14848 this.bitwiseTo(r, op, r)
14849 return r
14850}
8b095871 14851
9987f0c1
IC
14852// (public) this | (1<<n)
14853function bnSetBit(n) {
14854 return this.changeBit(n, op_or)
14855}
8b095871 14856
9987f0c1
IC
14857// (public) this & ~(1<<n)
14858function bnClearBit(n) {
14859 return this.changeBit(n, op_andnot)
14860}
8b095871 14861
9987f0c1
IC
14862// (public) this ^ (1<<n)
14863function bnFlipBit(n) {
14864 return this.changeBit(n, op_xor)
14865}
8b095871 14866
9987f0c1
IC
14867// (protected) r = this + a
14868function bnpAddTo(a, r) {
14869 var self = this
8b095871 14870
9987f0c1
IC
14871 var i = 0,
14872 c = 0,
14873 m = Math.min(a.t, self.t)
14874 while (i < m) {
14875 c += self[i] + a[i]
14876 r[i++] = c & self.DM
14877 c >>= self.DB
14878 }
14879 if (a.t < self.t) {
14880 c += a.s
14881 while (i < self.t) {
14882 c += self[i]
14883 r[i++] = c & self.DM
14884 c >>= self.DB
14885 }
14886 c += self.s
14887 } else {
14888 c += self.s
14889 while (i < a.t) {
14890 c += a[i]
14891 r[i++] = c & self.DM
14892 c >>= self.DB
14893 }
14894 c += a.s
14895 }
14896 r.s = (c < 0) ? -1 : 0
14897 if (c > 0) r[i++] = c
14898 else if (c < -1) r[i++] = self.DV + c
14899 r.t = i
14900 r.clamp()
14901}
8b095871 14902
9987f0c1
IC
14903// (public) this + a
14904function bnAdd(a) {
14905 var r = new BigInteger()
14906 this.addTo(a, r)
14907 return r
14908}
8b095871 14909
9987f0c1
IC
14910// (public) this - a
14911function bnSubtract(a) {
14912 var r = new BigInteger()
14913 this.subTo(a, r)
14914 return r
14915}
8b095871 14916
9987f0c1
IC
14917// (public) this * a
14918function bnMultiply(a) {
14919 var r = new BigInteger()
14920 this.multiplyTo(a, r)
14921 return r
14922}
8b095871 14923
9987f0c1
IC
14924// (public) this^2
14925function bnSquare() {
14926 var r = new BigInteger()
14927 this.squareTo(r)
14928 return r
14929}
8b095871 14930
9987f0c1
IC
14931// (public) this / a
14932function bnDivide(a) {
14933 var r = new BigInteger()
14934 this.divRemTo(a, r, null)
14935 return r
14936}
8b095871 14937
9987f0c1
IC
14938// (public) this % a
14939function bnRemainder(a) {
14940 var r = new BigInteger()
14941 this.divRemTo(a, null, r)
14942 return r
14943}
8b095871 14944
9987f0c1
IC
14945// (public) [this/a,this%a]
14946function bnDivideAndRemainder(a) {
14947 var q = new BigInteger(),
14948 r = new BigInteger()
14949 this.divRemTo(a, q, r)
14950 return new Array(q, r)
14951}
8b095871 14952
9987f0c1
IC
14953// (protected) this *= n, this >= 0, 1 < n < DV
14954function bnpDMultiply(n) {
14955 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
14956 ++this.t
14957 this.clamp()
8b095871
IC
14958}
14959
9987f0c1
IC
14960// (protected) this += n << w words, this >= 0
14961function bnpDAddOffset(n, w) {
14962 if (n == 0) return
14963 while (this.t <= w) this[this.t++] = 0
14964 this[w] += n
14965 while (this[w] >= this.DV) {
14966 this[w] -= this.DV
14967 if (++w >= this.t) this[this.t++] = 0
14968 ++this[w]
8b095871 14969 }
9987f0c1 14970}
8b095871 14971
9987f0c1
IC
14972// A "null" reducer
14973function NullExp() {}
8b095871 14974
9987f0c1
IC
14975function nNop(x) {
14976 return x
14977}
8b095871 14978
9987f0c1
IC
14979function nMulTo(x, y, r) {
14980 x.multiplyTo(y, r)
14981}
8b095871 14982
9987f0c1
IC
14983function nSqrTo(x, r) {
14984 x.squareTo(r)
14985}
8b095871 14986
9987f0c1
IC
14987NullExp.prototype.convert = nNop
14988NullExp.prototype.revert = nNop
14989NullExp.prototype.mulTo = nMulTo
14990NullExp.prototype.sqrTo = nSqrTo
8b095871 14991
9987f0c1
IC
14992// (public) this^e
14993function bnPow(e) {
14994 return this.exp(e, new NullExp())
14995}
8b095871 14996
9987f0c1
IC
14997// (protected) r = lower n words of "this * a", a.t <= n
14998// "this" should be the larger one if appropriate.
14999function bnpMultiplyLowerTo(a, n, r) {
15000 var i = Math.min(this.t + a.t, n)
15001 r.s = 0; // assumes a,this >= 0
15002 r.t = i
15003 while (i > 0) r[--i] = 0
15004 var j
15005 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
15006 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
15007 r.clamp()
15008}
8b095871 15009
9987f0c1
IC
15010// (protected) r = "this * a" without lower n words, n > 0
15011// "this" should be the larger one if appropriate.
15012function bnpMultiplyUpperTo(a, n, r) {
15013 --n
15014 var i = r.t = this.t + a.t - n
15015 r.s = 0; // assumes a,this >= 0
15016 while (--i >= 0) r[i] = 0
15017 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
15018 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
15019 r.clamp()
15020 r.drShiftTo(1, r)
15021}
8b095871 15022
9987f0c1
IC
15023// Barrett modular reduction
15024function Barrett(m) {
15025 // setup Barrett
15026 this.r2 = new BigInteger()
15027 this.q3 = new BigInteger()
15028 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
15029 this.mu = this.r2.divide(m)
15030 this.m = m
15031}
8b095871 15032
9987f0c1
IC
15033function barrettConvert(x) {
15034 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
15035 else if (x.compareTo(this.m) < 0) return x
15036 else {
15037 var r = new BigInteger()
15038 x.copyTo(r)
15039 this.reduce(r)
15040 return r
8b095871 15041 }
9987f0c1 15042}
8b095871 15043
9987f0c1
IC
15044function barrettRevert(x) {
15045 return x
15046}
8b095871 15047
9987f0c1
IC
15048// x = x mod m (HAC 14.42)
15049function barrettReduce(x) {
15050 var self = this
15051 x.drShiftTo(self.m.t - 1, self.r2)
15052 if (x.t > self.m.t + 1) {
15053 x.t = self.m.t + 1
15054 x.clamp()
8b095871 15055 }
9987f0c1
IC
15056 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
15057 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
15058 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
15059 x.subTo(self.r2, x)
15060 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
15061}
8b095871 15062
9987f0c1
IC
15063// r = x^2 mod m; x != r
15064function barrettSqrTo(x, r) {
15065 x.squareTo(r)
15066 this.reduce(r)
15067}
8b095871 15068
9987f0c1
IC
15069// r = x*y mod m; x,y != r
15070function barrettMulTo(x, y, r) {
15071 x.multiplyTo(y, r)
15072 this.reduce(r)
15073}
8b095871 15074
9987f0c1
IC
15075Barrett.prototype.convert = barrettConvert
15076Barrett.prototype.revert = barrettRevert
15077Barrett.prototype.reduce = barrettReduce
15078Barrett.prototype.mulTo = barrettMulTo
15079Barrett.prototype.sqrTo = barrettSqrTo
8b095871 15080
9987f0c1
IC
15081// (public) this^e % m (HAC 14.85)
15082function bnModPow(e, m) {
15083 var i = e.bitLength(),
15084 k, r = nbv(1),
15085 z
15086 if (i <= 0) return r
15087 else if (i < 18) k = 1
15088 else if (i < 48) k = 3
15089 else if (i < 144) k = 4
15090 else if (i < 768) k = 5
15091 else k = 6
15092 if (i < 8)
15093 z = new Classic(m)
15094 else if (m.isEven())
15095 z = new Barrett(m)
15096 else
15097 z = new Montgomery(m)
8b095871 15098
9987f0c1
IC
15099 // precomputation
15100 var g = new Array(),
15101 n = 3,
15102 k1 = k - 1,
15103 km = (1 << k) - 1
15104 g[1] = z.convert(this)
15105 if (k > 1) {
15106 var g2 = new BigInteger()
15107 z.sqrTo(g[1], g2)
15108 while (n <= km) {
15109 g[n] = new BigInteger()
15110 z.mulTo(g2, g[n - 2], g[n])
15111 n += 2
8b095871 15112 }
9987f0c1 15113 }
8b095871 15114
9987f0c1
IC
15115 var j = e.t - 1,
15116 w, is1 = true,
15117 r2 = new BigInteger(),
15118 t
15119 i = nbits(e[j]) - 1
15120 while (j >= 0) {
15121 if (i >= k1) w = (e[j] >> (i - k1)) & km
15122 else {
15123 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
15124 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8b095871
IC
15125 }
15126
9987f0c1
IC
15127 n = k
15128 while ((w & 1) == 0) {
15129 w >>= 1
15130 --n
15131 }
15132 if ((i -= n) < 0) {
15133 i += this.DB
15134 --j
15135 }
15136 if (is1) { // ret == 1, don't bother squaring or multiplying it
15137 g[w].copyTo(r)
15138 is1 = false
15139 } else {
15140 while (n > 1) {
15141 z.sqrTo(r, r2)
15142 z.sqrTo(r2, r)
15143 n -= 2
15144 }
15145 if (n > 0) z.sqrTo(r, r2)
15146 else {
15147 t = r
15148 r = r2
15149 r2 = t
15150 }
15151 z.mulTo(r2, g[w], r)
8b095871 15152 }
8b095871 15153
9987f0c1
IC
15154 while (j >= 0 && (e[j] & (1 << i)) == 0) {
15155 z.sqrTo(r, r2)
15156 t = r
15157 r = r2
15158 r2 = t
15159 if (--i < 0) {
15160 i = this.DB - 1
15161 --j
15162 }
15163 }
15164 }
15165 return z.revert(r)
8b095871
IC
15166}
15167
9987f0c1
IC
15168// (public) gcd(this,a) (HAC 14.54)
15169function bnGCD(a) {
15170 var x = (this.s < 0) ? this.negate() : this.clone()
15171 var y = (a.s < 0) ? a.negate() : a.clone()
15172 if (x.compareTo(y) < 0) {
15173 var t = x
15174 x = y
15175 y = t
15176 }
15177 var i = x.getLowestSetBit(),
15178 g = y.getLowestSetBit()
15179 if (g < 0) return x
15180 if (i < g) g = i
15181 if (g > 0) {
15182 x.rShiftTo(g, x)
15183 y.rShiftTo(g, y)
15184 }
15185 while (x.signum() > 0) {
15186 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
15187 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
15188 if (x.compareTo(y) >= 0) {
15189 x.subTo(y, x)
15190 x.rShiftTo(1, x)
15191 } else {
15192 y.subTo(x, y)
15193 y.rShiftTo(1, y)
15194 }
15195 }
15196 if (g > 0) y.lShiftTo(g, y)
15197 return y
8b095871
IC
15198}
15199
9987f0c1
IC
15200// (protected) this % n, n < 2^26
15201function bnpModInt(n) {
15202 if (n <= 0) return 0
15203 var d = this.DV % n,
15204 r = (this.s < 0) ? n - 1 : 0
15205 if (this.t > 0)
15206 if (d == 0) r = this[0] % n
15207 else
15208 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
15209 return r
8b095871 15210}
8b095871 15211
9987f0c1
IC
15212// (public) 1/this % m (HAC 14.61)
15213function bnModInverse(m) {
15214 var ac = m.isEven()
15215 if (this.signum() === 0) throw new Error('division by zero')
15216 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
15217 var u = m.clone(),
15218 v = this.clone()
15219 var a = nbv(1),
15220 b = nbv(0),
15221 c = nbv(0),
15222 d = nbv(1)
15223 while (u.signum() != 0) {
15224 while (u.isEven()) {
15225 u.rShiftTo(1, u)
15226 if (ac) {
15227 if (!a.isEven() || !b.isEven()) {
15228 a.addTo(this, a)
15229 b.subTo(m, b)
15230 }
15231 a.rShiftTo(1, a)
15232 } else if (!b.isEven()) b.subTo(m, b)
15233 b.rShiftTo(1, b)
8b095871 15234 }
9987f0c1
IC
15235 while (v.isEven()) {
15236 v.rShiftTo(1, v)
15237 if (ac) {
15238 if (!c.isEven() || !d.isEven()) {
15239 c.addTo(this, c)
15240 d.subTo(m, d)
8b095871 15241 }
9987f0c1
IC
15242 c.rShiftTo(1, c)
15243 } else if (!d.isEven()) d.subTo(m, d)
15244 d.rShiftTo(1, d)
8b095871 15245 }
9987f0c1
IC
15246 if (u.compareTo(v) >= 0) {
15247 u.subTo(v, u)
15248 if (ac) a.subTo(c, a)
15249 b.subTo(d, b)
8b095871 15250 } else {
9987f0c1
IC
15251 v.subTo(u, v)
15252 if (ac) c.subTo(a, c)
15253 d.subTo(b, d)
8b095871
IC
15254 }
15255 }
9987f0c1
IC
15256 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
15257 while (d.compareTo(m) >= 0) d.subTo(m, d)
15258 while (d.signum() < 0) d.addTo(m, d)
15259 return d
15260}
8b095871 15261
9987f0c1
IC
15262var lowprimes = [
15263 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
15264 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
15265 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
15266 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
15267 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
15268 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
15269 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
15270 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
15271 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
15272 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
15273 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
15274]
8b095871 15275
9987f0c1 15276var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8b095871 15277
9987f0c1
IC
15278// (public) test primality with certainty >= 1-.5^t
15279function bnIsProbablePrime(t) {
15280 var i, x = this.abs()
15281 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
15282 for (i = 0; i < lowprimes.length; ++i)
15283 if (x[0] == lowprimes[i]) return true
15284 return false
8b095871 15285 }
9987f0c1
IC
15286 if (x.isEven()) return false
15287 i = 1
15288 while (i < lowprimes.length) {
15289 var m = lowprimes[i],
15290 j = i + 1
15291 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
15292 m = x.modInt(m)
15293 while (i < j) if (m % lowprimes[i++] == 0) return false
15294 }
15295 return x.millerRabin(t)
15296}
8b095871 15297
9987f0c1
IC
15298// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
15299function bnpMillerRabin(t) {
15300 var n1 = this.subtract(BigInteger.ONE)
15301 var k = n1.getLowestSetBit()
15302 if (k <= 0) return false
15303 var r = n1.shiftRight(k)
15304 t = (t + 1) >> 1
15305 if (t > lowprimes.length) t = lowprimes.length
15306 var a = new BigInteger(null)
15307 var j, bases = []
15308 for (var i = 0; i < t; ++i) {
15309 for (;;) {
15310 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
15311 if (bases.indexOf(j) == -1) break
15312 }
15313 bases.push(j)
15314 a.fromInt(j)
15315 var y = a.modPow(r, this)
15316 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
15317 var j = 1
15318 while (j++ < k && y.compareTo(n1) != 0) {
15319 y = y.modPowInt(2, this)
15320 if (y.compareTo(BigInteger.ONE) == 0) return false
8b095871 15321 }
9987f0c1 15322 if (y.compareTo(n1) != 0) return false
8b095871 15323 }
8b095871 15324 }
9987f0c1
IC
15325 return true
15326}
8b095871 15327
9987f0c1
IC
15328// protected
15329proto.chunkSize = bnpChunkSize
15330proto.toRadix = bnpToRadix
15331proto.fromRadix = bnpFromRadix
15332proto.fromNumber = bnpFromNumber
15333proto.bitwiseTo = bnpBitwiseTo
15334proto.changeBit = bnpChangeBit
15335proto.addTo = bnpAddTo
15336proto.dMultiply = bnpDMultiply
15337proto.dAddOffset = bnpDAddOffset
15338proto.multiplyLowerTo = bnpMultiplyLowerTo
15339proto.multiplyUpperTo = bnpMultiplyUpperTo
15340proto.modInt = bnpModInt
15341proto.millerRabin = bnpMillerRabin
8b095871 15342
9987f0c1
IC
15343// public
15344proto.clone = bnClone
15345proto.intValue = bnIntValue
15346proto.byteValue = bnByteValue
15347proto.shortValue = bnShortValue
15348proto.signum = bnSigNum
15349proto.toByteArray = bnToByteArray
15350proto.equals = bnEquals
15351proto.min = bnMin
15352proto.max = bnMax
15353proto.and = bnAnd
15354proto.or = bnOr
15355proto.xor = bnXor
15356proto.andNot = bnAndNot
15357proto.not = bnNot
15358proto.shiftLeft = bnShiftLeft
15359proto.shiftRight = bnShiftRight
15360proto.getLowestSetBit = bnGetLowestSetBit
15361proto.bitCount = bnBitCount
15362proto.testBit = bnTestBit
15363proto.setBit = bnSetBit
15364proto.clearBit = bnClearBit
15365proto.flipBit = bnFlipBit
15366proto.add = bnAdd
15367proto.subtract = bnSubtract
15368proto.multiply = bnMultiply
15369proto.divide = bnDivide
15370proto.remainder = bnRemainder
15371proto.divideAndRemainder = bnDivideAndRemainder
15372proto.modPow = bnModPow
15373proto.modInverse = bnModInverse
15374proto.pow = bnPow
15375proto.gcd = bnGCD
15376proto.isProbablePrime = bnIsProbablePrime
8b095871 15377
9987f0c1
IC
15378// JSBN-specific extension
15379proto.square = bnSquare
15380
15381// constants
15382BigInteger.ZERO = nbv(0)
15383BigInteger.ONE = nbv(1)
15384BigInteger.valueOf = nbv
8b095871 15385
9987f0c1
IC
15386module.exports = BigInteger
15387
15388},{"../package.json":38}],36:[function(require,module,exports){
15389(function (Buffer){
15390// FIXME: Kind of a weird way to throw exceptions, consider removing
15391var assert = require('assert')
15392var BigInteger = require('./bigi')
8b095871
IC
15393
15394/**
9987f0c1 15395 * Turns a byte array into a big integer.
8b095871 15396 *
9987f0c1
IC
15397 * This function will interpret a byte array as a big integer in big
15398 * endian notation.
8b095871 15399 */
9987f0c1
IC
15400BigInteger.fromByteArrayUnsigned = function(byteArray) {
15401 // BigInteger expects a DER integer conformant byte array
15402 if (byteArray[0] & 0x80) {
15403 return new BigInteger([0].concat(byteArray))
8b095871 15404 }
8b095871 15405
9987f0c1
IC
15406 return new BigInteger(byteArray)
15407}
8b095871 15408
9987f0c1
IC
15409/**
15410 * Returns a byte array representation of the big integer.
15411 *
15412 * This returns the absolute of the contained value in big endian
15413 * form. A value of zero results in an empty array.
15414 */
15415BigInteger.prototype.toByteArrayUnsigned = function() {
15416 var byteArray = this.toByteArray()
15417 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
15418}
8b095871 15419
9987f0c1
IC
15420BigInteger.fromDERInteger = function(byteArray) {
15421 return new BigInteger(byteArray)
15422}
8b095871 15423
9987f0c1
IC
15424/*
15425 * Converts BigInteger to a DER integer representation.
15426 *
15427 * The format for this value uses the most significant bit as a sign
15428 * bit. If the most significant bit is already set and the integer is
15429 * positive, a 0x00 is prepended.
15430 *
15431 * Examples:
15432 *
15433 * 0 => 0x00
15434 * 1 => 0x01
15435 * -1 => 0xff
15436 * 127 => 0x7f
15437 * -127 => 0x81
15438 * 128 => 0x0080
15439 * -128 => 0x80
15440 * 255 => 0x00ff
15441 * -255 => 0xff01
15442 * 16300 => 0x3fac
15443 * -16300 => 0xc054
15444 * 62300 => 0x00f35c
15445 * -62300 => 0xff0ca4
15446*/
15447BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8b095871 15448
9987f0c1
IC
15449BigInteger.fromBuffer = function(buffer) {
15450 // BigInteger expects a DER integer conformant byte array
15451 if (buffer[0] & 0x80) {
15452 var byteArray = Array.prototype.slice.call(buffer)
8b095871 15453
9987f0c1 15454 return new BigInteger([0].concat(byteArray))
8b095871 15455 }
9987f0c1
IC
15456
15457 return new BigInteger(buffer)
8b095871
IC
15458}
15459
9987f0c1
IC
15460BigInteger.fromHex = function(hex) {
15461 if (hex === '') return BigInteger.ZERO
8b095871 15462
9987f0c1
IC
15463 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
15464 assert.equal(hex.length % 2, 0, 'Incomplete hex')
15465 return new BigInteger(hex, 16)
8b095871
IC
15466}
15467
9987f0c1
IC
15468BigInteger.prototype.toBuffer = function(size) {
15469 var byteArray = this.toByteArrayUnsigned()
15470 var zeros = []
8b095871 15471
9987f0c1
IC
15472 var padding = size - byteArray.length
15473 while (zeros.length < padding) zeros.push(0)
8b095871 15474
9987f0c1
IC
15475 return new Buffer(zeros.concat(byteArray))
15476}
8b095871 15477
9987f0c1
IC
15478BigInteger.prototype.toHex = function(size) {
15479 return this.toBuffer(size).toString('hex')
8b095871
IC
15480}
15481
9987f0c1
IC
15482}).call(this,require("buffer").Buffer)
15483},{"./bigi":35,"assert":1,"buffer":4}],37:[function(require,module,exports){
15484var BigInteger = require('./bigi')
8b095871 15485
9987f0c1
IC
15486//addons
15487require('./convert')
15488
15489module.exports = BigInteger
15490},{"./bigi":35,"./convert":36}],38:[function(require,module,exports){
15491module.exports={
15492 "_args": [
15493 [
15494 "bigi",
15495 "/home/ian/git/bitcoin/bitcoinjs-lib-browser"
15496 ]
15497 ],
15498 "_from": "bigi@latest",
15499 "_id": "bigi@1.4.2",
15500 "_inCache": true,
15501 "_installable": true,
15502 "_location": "/bigi",
15503 "_nodeVersion": "6.1.0",
15504 "_npmOperationalInternal": {
15505 "host": "packages-12-west.internal.npmjs.com",
15506 "tmp": "tmp/bigi-1.4.2.tgz_1469584192413_0.6801238611806184"
15507 },
15508 "_npmUser": {
15509 "email": "jprichardson@gmail.com",
15510 "name": "jprichardson"
15511 },
15512 "_npmVersion": "3.8.6",
15513 "_phantomChildren": {},
15514 "_requested": {
15515 "name": "bigi",
15516 "raw": "bigi",
15517 "rawSpec": "",
15518 "scope": null,
15519 "spec": "latest",
15520 "type": "tag"
15521 },
15522 "_requiredBy": [
15523 "#USER",
15524 "/bitcoinjs-lib",
15525 "/ecurve"
15526 ],
15527 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz",
15528 "_shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15529 "_shrinkwrap": null,
15530 "_spec": "bigi",
15531 "_where": "/home/ian/git/bitcoin/bitcoinjs-lib-browser",
15532 "bugs": {
15533 "url": "https://github.com/cryptocoinjs/bigi/issues"
15534 },
15535 "dependencies": {},
15536 "description": "Big integers.",
15537 "devDependencies": {
15538 "coveralls": "^2.11.2",
15539 "istanbul": "^0.3.5",
15540 "jshint": "^2.5.1",
15541 "mocha": "^2.1.0",
15542 "mochify": "^2.1.0"
15543 },
15544 "directories": {},
15545 "dist": {
15546 "shasum": "9c665a95f88b8b08fc05cfd731f561859d725825",
15547 "tarball": "https://registry.npmjs.org/bigi/-/bigi-1.4.2.tgz"
15548 },
15549 "gitHead": "c25308081c896ff84702303722bf5ecd8b3f78e3",
15550 "homepage": "https://github.com/cryptocoinjs/bigi#readme",
15551 "keywords": [
15552 "cryptography",
15553 "math",
15554 "bitcoin",
15555 "arbitrary",
15556 "precision",
15557 "arithmetic",
15558 "big",
15559 "integer",
15560 "int",
15561 "number",
15562 "biginteger",
15563 "bigint",
15564 "bignumber",
15565 "decimal",
15566 "float"
15567 ],
15568 "main": "./lib/index.js",
15569 "maintainers": [
15570 {
15571 "email": "boydb@midnightdesign.ws",
15572 "name": "midnightlightning"
15573 },
15574 {
15575 "email": "sidazhang89@gmail.com",
15576 "name": "sidazhang"
15577 },
15578 {
15579 "email": "npm@shesek.info",
15580 "name": "nadav"
15581 },
15582 {
15583 "email": "jprichardson@gmail.com",
15584 "name": "jprichardson"
8b095871 15585 }
9987f0c1
IC
15586 ],
15587 "name": "bigi",
15588 "optionalDependencies": {},
15589 "readme": "ERROR: No README data found!",
15590 "repository": {
15591 "type": "git",
15592 "url": "git+https://github.com/cryptocoinjs/bigi.git"
15593 },
15594 "scripts": {
15595 "browser-test": "mochify --wd -R spec",
15596 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
15597 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info",
15598 "jshint": "jshint --config jshint.json lib/*.js ; true",
15599 "test": "_mocha -- test/*.js",
15600 "unit": "mocha"
15601 },
15602 "testling": {
15603 "browsers": [
15604 "ie/9..latest",
15605 "firefox/latest",
15606 "chrome/latest",
15607 "safari/6.0..latest",
15608 "iphone/6.0..latest",
15609 "android-browser/4.2..latest"
15610 ],
15611 "files": "test/*.js",
15612 "harness": "mocha"
15613 },
15614 "version": "1.4.2"
15615}
8b095871 15616
9987f0c1
IC
15617},{}],39:[function(require,module,exports){
15618// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
15619// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15620// NOTE: SIGHASH byte ignored AND restricted, truncate before use
8b095871 15621
9987f0c1 15622var Buffer = require('safe-buffer').Buffer
8b095871 15623
9987f0c1
IC
15624function check (buffer) {
15625 if (buffer.length < 8) return false
15626 if (buffer.length > 72) return false
15627 if (buffer[0] !== 0x30) return false
15628 if (buffer[1] !== buffer.length - 2) return false
15629 if (buffer[2] !== 0x02) return false
8b095871 15630
9987f0c1
IC
15631 var lenR = buffer[3]
15632 if (lenR === 0) return false
15633 if (5 + lenR >= buffer.length) return false
15634 if (buffer[4 + lenR] !== 0x02) return false
8b095871 15635
9987f0c1
IC
15636 var lenS = buffer[5 + lenR]
15637 if (lenS === 0) return false
15638 if ((6 + lenR + lenS) !== buffer.length) return false
8b095871 15639
9987f0c1
IC
15640 if (buffer[4] & 0x80) return false
15641 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
8b095871 15642
9987f0c1
IC
15643 if (buffer[lenR + 6] & 0x80) return false
15644 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
15645 return true
15646}
8b095871 15647
9987f0c1
IC
15648function decode (buffer) {
15649 if (buffer.length < 8) throw new Error('DER sequence length is too short')
15650 if (buffer.length > 72) throw new Error('DER sequence length is too long')
15651 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
15652 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
15653 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
8b095871 15654
9987f0c1
IC
15655 var lenR = buffer[3]
15656 if (lenR === 0) throw new Error('R length is zero')
15657 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
15658 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
8b095871 15659
9987f0c1
IC
15660 var lenS = buffer[5 + lenR]
15661 if (lenS === 0) throw new Error('S length is zero')
15662 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
8b095871 15663
9987f0c1
IC
15664 if (buffer[4] & 0x80) throw new Error('R value is negative')
15665 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
8b095871 15666
9987f0c1
IC
15667 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
15668 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
8b095871 15669
9987f0c1
IC
15670 // non-BIP66 - extract R, S values
15671 return {
15672 r: buffer.slice(4, 4 + lenR),
15673 s: buffer.slice(6 + lenR)
8b095871 15674 }
9987f0c1 15675}
8b095871 15676
9987f0c1
IC
15677/*
15678 * Expects r and s to be positive DER integers.
15679 *
15680 * The DER format uses the most significant bit as a sign bit (& 0x80).
15681 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
15682 *
15683 * Examples:
15684 *
15685 * 0 => 0x00
15686 * 1 => 0x01
15687 * -1 => 0xff
15688 * 127 => 0x7f
15689 * -127 => 0x81
15690 * 128 => 0x0080
15691 * -128 => 0x80
15692 * 255 => 0x00ff
15693 * -255 => 0xff01
15694 * 16300 => 0x3fac
15695 * -16300 => 0xc054
15696 * 62300 => 0x00f35c
15697 * -62300 => 0xff0ca4
15698*/
15699function encode (r, s) {
15700 var lenR = r.length
15701 var lenS = s.length
15702 if (lenR === 0) throw new Error('R length is zero')
15703 if (lenS === 0) throw new Error('S length is zero')
15704 if (lenR > 33) throw new Error('R length is too long')
15705 if (lenS > 33) throw new Error('S length is too long')
15706 if (r[0] & 0x80) throw new Error('R value is negative')
15707 if (s[0] & 0x80) throw new Error('S value is negative')
15708 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
15709 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
8b095871 15710
9987f0c1 15711 var signature = Buffer.allocUnsafe(6 + lenR + lenS)
8b095871 15712
9987f0c1
IC
15713 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
15714 signature[0] = 0x30
15715 signature[1] = signature.length - 2
15716 signature[2] = 0x02
15717 signature[3] = r.length
15718 r.copy(signature, 4)
15719 signature[4 + lenR] = 0x02
15720 signature[5 + lenR] = s.length
15721 s.copy(signature, 6 + lenR)
8b095871 15722
9987f0c1 15723 return signature
8b095871
IC
15724}
15725
9987f0c1
IC
15726module.exports = {
15727 check: check,
15728 decode: decode,
15729 encode: encode
8b095871
IC
15730}
15731
9987f0c1
IC
15732},{"safe-buffer":98}],40:[function(require,module,exports){
15733module.exports={
15734 "OP_FALSE": 0,
15735 "OP_0": 0,
15736 "OP_PUSHDATA1": 76,
15737 "OP_PUSHDATA2": 77,
15738 "OP_PUSHDATA4": 78,
15739 "OP_1NEGATE": 79,
15740 "OP_RESERVED": 80,
15741 "OP_1": 81,
15742 "OP_TRUE": 81,
15743 "OP_2": 82,
15744 "OP_3": 83,
15745 "OP_4": 84,
15746 "OP_5": 85,
15747 "OP_6": 86,
15748 "OP_7": 87,
15749 "OP_8": 88,
15750 "OP_9": 89,
15751 "OP_10": 90,
15752 "OP_11": 91,
15753 "OP_12": 92,
15754 "OP_13": 93,
15755 "OP_14": 94,
15756 "OP_15": 95,
15757 "OP_16": 96,
15758
15759 "OP_NOP": 97,
15760 "OP_VER": 98,
15761 "OP_IF": 99,
15762 "OP_NOTIF": 100,
15763 "OP_VERIF": 101,
15764 "OP_VERNOTIF": 102,
15765 "OP_ELSE": 103,
15766 "OP_ENDIF": 104,
15767 "OP_VERIFY": 105,
15768 "OP_RETURN": 106,
15769
15770 "OP_TOALTSTACK": 107,
15771 "OP_FROMALTSTACK": 108,
15772 "OP_2DROP": 109,
15773 "OP_2DUP": 110,
15774 "OP_3DUP": 111,
15775 "OP_2OVER": 112,
15776 "OP_2ROT": 113,
15777 "OP_2SWAP": 114,
15778 "OP_IFDUP": 115,
15779 "OP_DEPTH": 116,
15780 "OP_DROP": 117,
15781 "OP_DUP": 118,
15782 "OP_NIP": 119,
15783 "OP_OVER": 120,
15784 "OP_PICK": 121,
15785 "OP_ROLL": 122,
15786 "OP_ROT": 123,
15787 "OP_SWAP": 124,
15788 "OP_TUCK": 125,
15789
15790 "OP_CAT": 126,
15791 "OP_SUBSTR": 127,
15792 "OP_LEFT": 128,
15793 "OP_RIGHT": 129,
15794 "OP_SIZE": 130,
15795
15796 "OP_INVERT": 131,
15797 "OP_AND": 132,
15798 "OP_OR": 133,
15799 "OP_XOR": 134,
15800 "OP_EQUAL": 135,
15801 "OP_EQUALVERIFY": 136,
15802 "OP_RESERVED1": 137,
15803 "OP_RESERVED2": 138,
15804
15805 "OP_1ADD": 139,
15806 "OP_1SUB": 140,
15807 "OP_2MUL": 141,
15808 "OP_2DIV": 142,
15809 "OP_NEGATE": 143,
15810 "OP_ABS": 144,
15811 "OP_NOT": 145,
15812 "OP_0NOTEQUAL": 146,
15813 "OP_ADD": 147,
15814 "OP_SUB": 148,
15815 "OP_MUL": 149,
15816 "OP_DIV": 150,
15817 "OP_MOD": 151,
15818 "OP_LSHIFT": 152,
15819 "OP_RSHIFT": 153,
15820
15821 "OP_BOOLAND": 154,
15822 "OP_BOOLOR": 155,
15823 "OP_NUMEQUAL": 156,
15824 "OP_NUMEQUALVERIFY": 157,
15825 "OP_NUMNOTEQUAL": 158,
15826 "OP_LESSTHAN": 159,
15827 "OP_GREATERTHAN": 160,
15828 "OP_LESSTHANOREQUAL": 161,
15829 "OP_GREATERTHANOREQUAL": 162,
15830 "OP_MIN": 163,
15831 "OP_MAX": 164,
15832
15833 "OP_WITHIN": 165,
15834
15835 "OP_RIPEMD160": 166,
15836 "OP_SHA1": 167,
15837 "OP_SHA256": 168,
15838 "OP_HASH160": 169,
15839 "OP_HASH256": 170,
15840 "OP_CODESEPARATOR": 171,
15841 "OP_CHECKSIG": 172,
15842 "OP_CHECKSIGVERIFY": 173,
15843 "OP_CHECKMULTISIG": 174,
15844 "OP_CHECKMULTISIGVERIFY": 175,
15845
15846 "OP_NOP1": 176,
15847 "OP_NOP2": 177,
15848 "OP_CHECKLOCKTIMEVERIFY": 177,
15849
15850 "OP_NOP3": 178,
15851 "OP_NOP4": 179,
15852 "OP_NOP5": 180,
15853 "OP_NOP6": 181,
15854 "OP_NOP7": 182,
15855 "OP_NOP8": 183,
15856 "OP_NOP9": 184,
15857 "OP_NOP10": 185,
15858
15859 "OP_PUBKEYHASH": 253,
15860 "OP_PUBKEY": 254,
15861 "OP_INVALIDOPCODE": 255
15862}
15863
15864},{}],41:[function(require,module,exports){
15865var OPS = require('./index.json')
15866
15867var map = {}
15868for (var op in OPS) {
15869 var code = OPS[op]
15870 map[code] = op
15871}
15872
15873module.exports = map
15874
15875},{"./index.json":40}],42:[function(require,module,exports){
15876var Buffer = require('safe-buffer').Buffer
15877var bs58check = require('bs58check')
15878var bscript = require('./script')
15879var networks = require('./networks')
15880var typeforce = require('typeforce')
15881var types = require('./types')
8b095871 15882
9987f0c1
IC
15883function fromBase58Check (address) {
15884 var payload = bs58check.decode(address)
15885 if (payload.length < 21) throw new TypeError(address + ' is too short')
15886 if (payload.length > 21) throw new TypeError(address + ' is too long')
8b095871 15887
9987f0c1
IC
15888 var version = payload.readUInt8(0)
15889 var hash = payload.slice(1)
8b095871 15890
9987f0c1 15891 return { hash: hash, version: version }
8b095871
IC
15892}
15893
9987f0c1
IC
15894function toBase58Check (hash, version) {
15895 typeforce(types.tuple(types.Hash160bit, types.UInt8), arguments)
8b095871 15896
9987f0c1
IC
15897 var payload = Buffer.allocUnsafe(21)
15898 payload.writeUInt8(version, 0)
15899 hash.copy(payload, 1)
8b095871 15900
9987f0c1 15901 return bs58check.encode(payload)
8b095871
IC
15902}
15903
9987f0c1
IC
15904function fromOutputScript (outputScript, network) {
15905 network = network || networks.bitcoin
8b095871 15906
9987f0c1
IC
15907 if (bscript.pubKeyHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(3, 23), network.pubKeyHash)
15908 if (bscript.scriptHash.output.check(outputScript)) return toBase58Check(bscript.compile(outputScript).slice(2, 22), network.scriptHash)
8b095871 15909
9987f0c1 15910 throw new Error(bscript.toASM(outputScript) + ' has no matching Address')
8b095871
IC
15911}
15912
9987f0c1
IC
15913function toOutputScript (address, network) {
15914 network = network || networks.bitcoin
8b095871 15915
9987f0c1
IC
15916 var decode = fromBase58Check(address)
15917 if (decode.version === network.pubKeyHash) return bscript.pubKeyHash.output.encode(decode.hash)
15918 if (decode.version === network.scriptHash) return bscript.scriptHash.output.encode(decode.hash)
8b095871 15919
9987f0c1 15920 throw new Error(address + ' has no matching Script')
8b095871 15921}
8b095871 15922
9987f0c1
IC
15923module.exports = {
15924 fromBase58Check: fromBase58Check,
15925 fromOutputScript: fromOutputScript,
15926 toBase58Check: toBase58Check,
15927 toOutputScript: toOutputScript
8b095871 15928}
8b095871 15929
9987f0c1
IC
15930},{"./networks":51,"./script":52,"./types":78,"bs58check":80,"safe-buffer":98,"typeforce":109}],43:[function(require,module,exports){
15931var Buffer = require('safe-buffer').Buffer
15932var bcrypto = require('./crypto')
15933var fastMerkleRoot = require('merkle-lib/fastRoot')
15934var typeforce = require('typeforce')
15935var types = require('./types')
15936var varuint = require('varuint-bitcoin')
8b095871 15937
9987f0c1 15938var Transaction = require('./transaction')
8b095871 15939
9987f0c1
IC
15940function Block () {
15941 this.version = 1
15942 this.prevHash = null
15943 this.merkleRoot = null
15944 this.timestamp = 0
15945 this.bits = 0
15946 this.nonce = 0
8b095871 15947}
8b095871 15948
9987f0c1
IC
15949Block.fromBuffer = function (buffer) {
15950 if (buffer.length < 80) throw new Error('Buffer too small (< 80 bytes)')
8b095871 15951
9987f0c1
IC
15952 var offset = 0
15953 function readSlice (n) {
15954 offset += n
15955 return buffer.slice(offset - n, offset)
15956 }
8b095871 15957
9987f0c1
IC
15958 function readUInt32 () {
15959 var i = buffer.readUInt32LE(offset)
15960 offset += 4
15961 return i
15962 }
8b095871 15963
9987f0c1
IC
15964 function readInt32 () {
15965 var i = buffer.readInt32LE(offset)
15966 offset += 4
15967 return i
15968 }
8b095871 15969
9987f0c1
IC
15970 var block = new Block()
15971 block.version = readInt32()
15972 block.prevHash = readSlice(32)
15973 block.merkleRoot = readSlice(32)
15974 block.timestamp = readUInt32()
15975 block.bits = readUInt32()
15976 block.nonce = readUInt32()
8b095871 15977
9987f0c1 15978 if (buffer.length === 80) return block
8b095871 15979
9987f0c1
IC
15980 function readVarInt () {
15981 var vi = varuint.decode(buffer, offset)
15982 offset += varuint.decode.bytes
15983 return vi
15984 }
8b095871 15985
9987f0c1
IC
15986 function readTransaction () {
15987 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
15988 offset += tx.byteLength()
15989 return tx
15990 }
8b095871 15991
9987f0c1
IC
15992 var nTransactions = readVarInt()
15993 block.transactions = []
8b095871 15994
9987f0c1
IC
15995 for (var i = 0; i < nTransactions; ++i) {
15996 var tx = readTransaction()
15997 block.transactions.push(tx)
15998 }
8b095871 15999
9987f0c1 16000 return block
8b095871
IC
16001}
16002
9987f0c1
IC
16003Block.prototype.byteLength = function (headersOnly) {
16004 if (headersOnly || !this.transactions) return 80
8b095871 16005
9987f0c1
IC
16006 return 80 + varuint.encodingLength(this.transactions.length) + this.transactions.reduce(function (a, x) {
16007 return a + x.byteLength()
16008 }, 0)
8b095871
IC
16009}
16010
9987f0c1
IC
16011Block.fromHex = function (hex) {
16012 return Block.fromBuffer(Buffer.from(hex, 'hex'))
16013}
8b095871 16014
9987f0c1
IC
16015Block.prototype.getHash = function () {
16016 return bcrypto.hash256(this.toBuffer(true))
16017}
8b095871 16018
9987f0c1
IC
16019Block.prototype.getId = function () {
16020 return this.getHash().reverse().toString('hex')
8b095871
IC
16021}
16022
9987f0c1
IC
16023Block.prototype.getUTCDate = function () {
16024 var date = new Date(0) // epoch
16025 date.setUTCSeconds(this.timestamp)
8b095871 16026
9987f0c1 16027 return date
8b095871 16028}
8b095871 16029
9987f0c1
IC
16030// TODO: buffer, offset compatibility
16031Block.prototype.toBuffer = function (headersOnly) {
16032 var buffer = Buffer.allocUnsafe(this.byteLength(headersOnly))
16033
16034 var offset = 0
16035 function writeSlice (slice) {
16036 slice.copy(buffer, offset)
16037 offset += slice.length
16038 }
8b095871 16039
9987f0c1
IC
16040 function writeInt32 (i) {
16041 buffer.writeInt32LE(i, offset)
16042 offset += 4
16043 }
16044 function writeUInt32 (i) {
16045 buffer.writeUInt32LE(i, offset)
16046 offset += 4
16047 }
8b095871 16048
9987f0c1
IC
16049 writeInt32(this.version)
16050 writeSlice(this.prevHash)
16051 writeSlice(this.merkleRoot)
16052 writeUInt32(this.timestamp)
16053 writeUInt32(this.bits)
16054 writeUInt32(this.nonce)
8b095871 16055
9987f0c1 16056 if (headersOnly || !this.transactions) return buffer
8b095871 16057
9987f0c1
IC
16058 varuint.encode(this.transactions.length, buffer, offset)
16059 offset += varuint.encode.bytes
8b095871 16060
9987f0c1
IC
16061 this.transactions.forEach(function (tx) {
16062 var txSize = tx.byteLength() // TODO: extract from toBuffer?
16063 tx.toBuffer(buffer, offset)
16064 offset += txSize
16065 })
8b095871 16066
9987f0c1
IC
16067 return buffer
16068}
8b095871 16069
9987f0c1
IC
16070Block.prototype.toHex = function (headersOnly) {
16071 return this.toBuffer(headersOnly).toString('hex')
16072}
8b095871 16073
9987f0c1
IC
16074Block.calculateTarget = function (bits) {
16075 var exponent = ((bits & 0xff000000) >> 24) - 3
16076 var mantissa = bits & 0x007fffff
16077 var target = Buffer.alloc(32, 0)
16078 target.writeUInt32BE(mantissa, 28 - exponent)
16079 return target
8b095871
IC
16080}
16081
9987f0c1
IC
16082Block.calculateMerkleRoot = function (transactions) {
16083 typeforce([{ getHash: types.Function }], transactions)
16084 if (transactions.length === 0) throw TypeError('Cannot compute merkle root for zero transactions')
8b095871 16085
9987f0c1
IC
16086 var hashes = transactions.map(function (transaction) {
16087 return transaction.getHash()
16088 })
8b095871 16089
9987f0c1
IC
16090 return fastMerkleRoot(hashes, bcrypto.hash256)
16091}
8b095871 16092
9987f0c1
IC
16093Block.prototype.checkMerkleRoot = function () {
16094 if (!this.transactions) return false
8b095871 16095
9987f0c1
IC
16096 var actualMerkleRoot = Block.calculateMerkleRoot(this.transactions)
16097 return this.merkleRoot.compare(actualMerkleRoot) === 0
16098}
8b095871 16099
9987f0c1
IC
16100Block.prototype.checkProofOfWork = function () {
16101 var hash = this.getHash().reverse()
16102 var target = Block.calculateTarget(this.bits)
8b095871 16103
9987f0c1
IC
16104 return hash.compare(target) <= 0
16105}
8b095871 16106
9987f0c1 16107module.exports = Block
8b095871 16108
9987f0c1
IC
16109},{"./crypto":45,"./transaction":76,"./types":78,"merkle-lib/fastRoot":94,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],44:[function(require,module,exports){
16110var pushdata = require('pushdata-bitcoin')
16111var varuint = require('varuint-bitcoin')
8b095871 16112
9987f0c1
IC
16113// https://github.com/feross/buffer/blob/master/index.js#L1127
16114function verifuint (value, max) {
16115 if (typeof value !== 'number') throw new Error('cannot write a non-number as a number')
16116 if (value < 0) throw new Error('specified a negative value for writing an unsigned value')
16117 if (value > max) throw new Error('RangeError: value out of range')
16118 if (Math.floor(value) !== value) throw new Error('value has a fractional component')
8b095871
IC
16119}
16120
9987f0c1
IC
16121function readUInt64LE (buffer, offset) {
16122 var a = buffer.readUInt32LE(offset)
16123 var b = buffer.readUInt32LE(offset + 4)
16124 b *= 0x100000000
8b095871 16125
9987f0c1 16126 verifuint(b + a, 0x001fffffffffffff)
8b095871 16127
9987f0c1 16128 return b + a
8b095871
IC
16129}
16130
9987f0c1
IC
16131function writeUInt64LE (buffer, value, offset) {
16132 verifuint(value, 0x001fffffffffffff)
8b095871 16133
9987f0c1
IC
16134 buffer.writeInt32LE(value & -1, offset)
16135 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
16136 return offset + 8
8b095871
IC
16137}
16138
9987f0c1
IC
16139// TODO: remove in 4.0.0?
16140function readVarInt (buffer, offset) {
16141 var result = varuint.decode(buffer, offset)
8b095871 16142
9987f0c1
IC
16143 return {
16144 number: result,
16145 size: varuint.decode.bytes
8b095871 16146 }
9987f0c1 16147}
8b095871 16148
9987f0c1
IC
16149// TODO: remove in 4.0.0?
16150function writeVarInt (buffer, number, offset) {
16151 varuint.encode(number, buffer, offset)
16152 return varuint.encode.bytes
8b095871
IC
16153}
16154
16155module.exports = {
9987f0c1
IC
16156 pushDataSize: pushdata.encodingLength,
16157 readPushDataInt: pushdata.decode,
16158 readUInt64LE: readUInt64LE,
16159 readVarInt: readVarInt,
16160 varIntBuffer: varuint.encode,
16161 varIntSize: varuint.encodingLength,
16162 writePushDataInt: pushdata.encode,
16163 writeUInt64LE: writeUInt64LE,
16164 writeVarInt: writeVarInt
8b095871
IC
16165}
16166
9987f0c1
IC
16167},{"pushdata-bitcoin":95,"varuint-bitcoin":111}],45:[function(require,module,exports){
16168var createHash = require('create-hash')
8b095871 16169
9987f0c1
IC
16170function ripemd160 (buffer) {
16171 return createHash('rmd160').update(buffer).digest()
16172}
8b095871 16173
9987f0c1
IC
16174function sha1 (buffer) {
16175 return createHash('sha1').update(buffer).digest()
8b095871
IC
16176}
16177
9987f0c1
IC
16178function sha256 (buffer) {
16179 return createHash('sha256').update(buffer).digest()
16180}
8b095871 16181
9987f0c1
IC
16182function hash160 (buffer) {
16183 return ripemd160(sha256(buffer))
16184}
8b095871 16185
9987f0c1
IC
16186function hash256 (buffer) {
16187 return sha256(sha256(buffer))
8b095871
IC
16188}
16189
9987f0c1
IC
16190module.exports = {
16191 hash160: hash160,
16192 hash256: hash256,
16193 ripemd160: ripemd160,
16194 sha1: sha1,
16195 sha256: sha256
8b095871
IC
16196}
16197
9987f0c1
IC
16198},{"create-hash":82}],46:[function(require,module,exports){
16199var Buffer = require('safe-buffer').Buffer
16200var createHmac = require('create-hmac')
16201var typeforce = require('typeforce')
16202var types = require('./types')
8b095871 16203
9987f0c1
IC
16204var BigInteger = require('bigi')
16205var ECSignature = require('./ecsignature')
8b095871 16206
9987f0c1
IC
16207var ZERO = Buffer.alloc(1, 0)
16208var ONE = Buffer.alloc(1, 1)
8b095871 16209
9987f0c1
IC
16210var ecurve = require('ecurve')
16211var secp256k1 = ecurve.getCurveByName('secp256k1')
8b095871 16212
9987f0c1
IC
16213// https://tools.ietf.org/html/rfc6979#section-3.2
16214function deterministicGenerateK (hash, x, checkSig) {
16215 typeforce(types.tuple(
16216 types.Hash256bit,
16217 types.Buffer256bit,
16218 types.Function
16219 ), arguments)
8b095871 16220
9987f0c1
IC
16221 // Step A, ignored as hash already provided
16222 // Step B
16223 // Step C
16224 var k = Buffer.alloc(32, 0)
16225 var v = Buffer.alloc(32, 1)
8b095871 16226
9987f0c1
IC
16227 // Step D
16228 k = createHmac('sha256', k)
16229 .update(v)
16230 .update(ZERO)
16231 .update(x)
16232 .update(hash)
16233 .digest()
8b095871 16234
9987f0c1
IC
16235 // Step E
16236 v = createHmac('sha256', k).update(v).digest()
8b095871 16237
9987f0c1
IC
16238 // Step F
16239 k = createHmac('sha256', k)
16240 .update(v)
16241 .update(ONE)
16242 .update(x)
16243 .update(hash)
16244 .digest()
8b095871 16245
9987f0c1
IC
16246 // Step G
16247 v = createHmac('sha256', k).update(v).digest()
8b095871 16248
9987f0c1
IC
16249 // Step H1/H2a, ignored as tlen === qlen (256 bit)
16250 // Step H2b
16251 v = createHmac('sha256', k).update(v).digest()
8b095871 16252
9987f0c1 16253 var T = BigInteger.fromBuffer(v)
8b095871 16254
9987f0c1
IC
16255 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
16256 while (T.signum() <= 0 || T.compareTo(secp256k1.n) >= 0 || !checkSig(T)) {
16257 k = createHmac('sha256', k)
16258 .update(v)
16259 .update(ZERO)
16260 .digest()
16261
16262 v = createHmac('sha256', k).update(v).digest()
16263
16264 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
16265 // Step H2b again
16266 v = createHmac('sha256', k).update(v).digest()
16267 T = BigInteger.fromBuffer(v)
8b095871
IC
16268 }
16269
9987f0c1 16270 return T
8b095871
IC
16271}
16272
9987f0c1 16273var N_OVER_TWO = secp256k1.n.shiftRight(1)
8b095871 16274
9987f0c1
IC
16275function sign (hash, d) {
16276 typeforce(types.tuple(types.Hash256bit, types.BigInt), arguments)
8b095871 16277
9987f0c1
IC
16278 var x = d.toBuffer(32)
16279 var e = BigInteger.fromBuffer(hash)
16280 var n = secp256k1.n
16281 var G = secp256k1.G
8b095871 16282
9987f0c1
IC
16283 var r, s
16284 deterministicGenerateK(hash, x, function (k) {
16285 var Q = G.multiply(k)
8b095871 16286
9987f0c1 16287 if (secp256k1.isInfinity(Q)) return false
8b095871 16288
9987f0c1
IC
16289 r = Q.affineX.mod(n)
16290 if (r.signum() === 0) return false
8b095871 16291
9987f0c1
IC
16292 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
16293 if (s.signum() === 0) return false
8b095871 16294
9987f0c1
IC
16295 return true
16296 })
16297
16298 // enforce low S values, see bip62: 'low s values in signatures'
16299 if (s.compareTo(N_OVER_TWO) > 0) {
16300 s = n.subtract(s)
8b095871 16301 }
8b095871 16302
9987f0c1 16303 return new ECSignature(r, s)
8b095871 16304}
8b095871 16305
9987f0c1
IC
16306function verify (hash, signature, Q) {
16307 typeforce(types.tuple(
16308 types.Hash256bit,
16309 types.ECSignature,
16310 types.ECPoint
16311 ), arguments)
8b095871 16312
9987f0c1
IC
16313 var n = secp256k1.n
16314 var G = secp256k1.G
8b095871 16315
9987f0c1
IC
16316 var r = signature.r
16317 var s = signature.s
8b095871 16318
9987f0c1
IC
16319 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
16320 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
16321 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
8b095871 16322
9987f0c1
IC
16323 // 1.4.2 H = Hash(M), already done by the user
16324 // 1.4.3 e = H
16325 var e = BigInteger.fromBuffer(hash)
8b095871 16326
9987f0c1
IC
16327 // Compute s^-1
16328 var sInv = s.modInverse(n)
8b095871 16329
9987f0c1
IC
16330 // 1.4.4 Compute u1 = es^−1 mod n
16331 // u2 = rs^−1 mod n
16332 var u1 = e.multiply(sInv).mod(n)
16333 var u2 = r.multiply(sInv).mod(n)
8b095871 16334
9987f0c1
IC
16335 // 1.4.5 Compute R = (xR, yR)
16336 // R = u1G + u2Q
16337 var R = G.multiplyTwo(u1, Q, u2)
8b095871 16338
9987f0c1
IC
16339 // 1.4.5 (cont.) Enforce R is not at infinity
16340 if (secp256k1.isInfinity(R)) return false
8b095871 16341
9987f0c1
IC
16342 // 1.4.6 Convert the field element R.x to an integer
16343 var xR = R.affineX
8b095871 16344
9987f0c1
IC
16345 // 1.4.7 Set v = xR mod n
16346 var v = xR.mod(n)
8b095871 16347
9987f0c1
IC
16348 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
16349 return v.equals(r)
8b095871
IC
16350}
16351
9987f0c1
IC
16352module.exports = {
16353 deterministicGenerateK: deterministicGenerateK,
16354 sign: sign,
16355 verify: verify,
8b095871 16356
9987f0c1
IC
16357 // TODO: remove
16358 __curve: secp256k1
16359}
8b095871 16360
9987f0c1
IC
16361},{"./ecsignature":48,"./types":78,"bigi":37,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],47:[function(require,module,exports){
16362var baddress = require('./address')
16363var bcrypto = require('./crypto')
16364var ecdsa = require('./ecdsa')
16365var randomBytes = require('randombytes')
16366var typeforce = require('typeforce')
16367var types = require('./types')
16368var wif = require('wif')
8b095871 16369
9987f0c1
IC
16370var NETWORKS = require('./networks')
16371var BigInteger = require('bigi')
8b095871 16372
9987f0c1
IC
16373var ecurve = require('ecurve')
16374var secp256k1 = ecdsa.__curve
8b095871 16375
9987f0c1
IC
16376function ECPair (d, Q, options) {
16377 if (options) {
16378 typeforce({
16379 compressed: types.maybe(types.Boolean),
16380 network: types.maybe(types.Network)
16381 }, options)
16382 }
8b095871 16383
9987f0c1 16384 options = options || {}
8b095871 16385
9987f0c1
IC
16386 if (d) {
16387 if (d.signum() <= 0) throw new Error('Private key must be greater than 0')
16388 if (d.compareTo(secp256k1.n) >= 0) throw new Error('Private key must be less than the curve order')
16389 if (Q) throw new TypeError('Unexpected publicKey parameter')
8b095871 16390
9987f0c1
IC
16391 this.d = d
16392 } else {
16393 typeforce(types.ECPoint, Q)
8b095871 16394
9987f0c1 16395 this.__Q = Q
8b095871 16396 }
8b095871 16397
9987f0c1
IC
16398 this.compressed = options.compressed === undefined ? true : options.compressed
16399 this.network = options.network || NETWORKS.bitcoin
8b095871
IC
16400}
16401
9987f0c1
IC
16402Object.defineProperty(ECPair.prototype, 'Q', {
16403 get: function () {
16404 if (!this.__Q && this.d) {
16405 this.__Q = secp256k1.G.multiply(this.d)
16406 }
8b095871 16407
9987f0c1 16408 return this.__Q
8b095871 16409 }
9987f0c1 16410})
8b095871 16411
9987f0c1
IC
16412ECPair.fromPublicKeyBuffer = function (buffer, network) {
16413 var Q = ecurve.Point.decodeFrom(secp256k1, buffer)
8b095871 16414
9987f0c1
IC
16415 return new ECPair(null, Q, {
16416 compressed: Q.compressed,
16417 network: network
16418 })
16419}
8b095871 16420
9987f0c1
IC
16421ECPair.fromWIF = function (string, network) {
16422 var decoded = wif.decode(string)
16423 var version = decoded.version
8b095871 16424
9987f0c1
IC
16425 // list of networks?
16426 if (types.Array(network)) {
16427 network = network.filter(function (x) {
16428 return version === x.wif
16429 }).pop()
16430
16431 if (!network) throw new Error('Unknown network version')
16432
16433 // otherwise, assume a network object (or default to bitcoin)
16434 } else {
16435 network = network || NETWORKS.bitcoin
16436
16437 if (version !== network.wif) throw new Error('Invalid network version')
8b095871
IC
16438 }
16439
9987f0c1
IC
16440 var d = BigInteger.fromBuffer(decoded.privateKey)
16441
16442 return new ECPair(d, null, {
16443 compressed: decoded.compressed,
16444 network: network
16445 })
8b095871
IC
16446}
16447
9987f0c1
IC
16448ECPair.makeRandom = function (options) {
16449 options = options || {}
16450
16451 var rng = options.rng || randomBytes
16452
16453 var d
16454 do {
16455 var buffer = rng(32)
16456 typeforce(types.Buffer256bit, buffer)
16457
16458 d = BigInteger.fromBuffer(buffer)
16459 } while (d.signum() <= 0 || d.compareTo(secp256k1.n) >= 0)
16460
16461 return new ECPair(d, null, options)
8b095871
IC
16462}
16463
9987f0c1
IC
16464ECPair.prototype.getAddress = function () {
16465 return baddress.toBase58Check(bcrypto.hash160(this.getPublicKeyBuffer()), this.getNetwork().pubKeyHash)
8b095871
IC
16466}
16467
9987f0c1
IC
16468ECPair.prototype.getNetwork = function () {
16469 return this.network
8b095871
IC
16470}
16471
9987f0c1
IC
16472ECPair.prototype.getPublicKeyBuffer = function () {
16473 return this.Q.getEncoded(this.compressed)
8b095871
IC
16474}
16475
9987f0c1
IC
16476ECPair.prototype.sign = function (hash) {
16477 if (!this.d) throw new Error('Missing private key')
16478
16479 return ecdsa.sign(hash, this.d)
8b095871
IC
16480}
16481
9987f0c1
IC
16482ECPair.prototype.toWIF = function () {
16483 if (!this.d) throw new Error('Missing private key')
16484
16485 return wif.encode(this.network.wif, this.d.toBuffer(32), this.compressed)
8b095871
IC
16486}
16487
9987f0c1
IC
16488ECPair.prototype.verify = function (hash, signature) {
16489 return ecdsa.verify(hash, signature, this.Q)
16490}
8b095871 16491
9987f0c1 16492module.exports = ECPair
8b095871 16493
9987f0c1
IC
16494},{"./address":42,"./crypto":45,"./ecdsa":46,"./networks":51,"./types":78,"bigi":37,"ecurve":89,"randombytes":96,"typeforce":109,"wif":112}],48:[function(require,module,exports){
16495(function (Buffer){
16496var bip66 = require('bip66')
16497var typeforce = require('typeforce')
16498var types = require('./types')
8b095871 16499
9987f0c1 16500var BigInteger = require('bigi')
8b095871 16501
9987f0c1
IC
16502function ECSignature (r, s) {
16503 typeforce(types.tuple(types.BigInt, types.BigInt), arguments)
8b095871 16504
9987f0c1
IC
16505 this.r = r
16506 this.s = s
16507}
16508
16509ECSignature.parseCompact = function (buffer) {
16510 if (buffer.length !== 65) throw new Error('Invalid signature length')
16511
16512 var flagByte = buffer.readUInt8(0) - 27
16513 if (flagByte !== (flagByte & 7)) throw new Error('Invalid signature parameter')
16514
16515 var compressed = !!(flagByte & 4)
16516 var recoveryParam = flagByte & 3
16517
16518 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
16519 var s = BigInteger.fromBuffer(buffer.slice(33))
16520
16521 return {
16522 compressed: compressed,
16523 i: recoveryParam,
16524 signature: new ECSignature(r, s)
8b095871 16525 }
9987f0c1 16526}
8b095871 16527
9987f0c1
IC
16528ECSignature.fromDER = function (buffer) {
16529 var decode = bip66.decode(buffer)
16530 var r = BigInteger.fromDERInteger(decode.r)
16531 var s = BigInteger.fromDERInteger(decode.s)
8b095871 16532
9987f0c1
IC
16533 return new ECSignature(r, s)
16534}
16535
16536// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
16537ECSignature.parseScriptSignature = function (buffer) {
16538 var hashType = buffer.readUInt8(buffer.length - 1)
16539 var hashTypeMod = hashType & ~0x80
16540
16541 if (hashTypeMod <= 0x00 || hashTypeMod >= 0x04) throw new Error('Invalid hashType ' + hashType)
16542
16543 return {
16544 signature: ECSignature.fromDER(buffer.slice(0, -1)),
16545 hashType: hashType
8b095871 16546 }
9987f0c1 16547}
8b095871 16548
9987f0c1
IC
16549ECSignature.prototype.toCompact = function (i, compressed) {
16550 if (compressed) {
16551 i += 4
16552 }
16553
16554 i += 27
16555
16556 var buffer = Buffer.alloc(65)
16557 buffer.writeUInt8(i, 0)
16558 this.r.toBuffer(32).copy(buffer, 1)
16559 this.s.toBuffer(32).copy(buffer, 33)
16560
16561 return buffer
8b095871
IC
16562}
16563
9987f0c1
IC
16564ECSignature.prototype.toDER = function () {
16565 var r = Buffer.from(this.r.toDERInteger())
16566 var s = Buffer.from(this.s.toDERInteger())
16567
16568 return bip66.encode(r, s)
16569}
16570
16571ECSignature.prototype.toScriptSignature = function (hashType) {
16572 var hashTypeMod = hashType & ~0x80
16573 if (hashTypeMod <= 0 || hashTypeMod >= 4) throw new Error('Invalid hashType ' + hashType)
16574
16575 var hashTypeBuffer = Buffer.alloc(1)
16576 hashTypeBuffer.writeUInt8(hashType, 0)
16577
16578 return Buffer.concat([this.toDER(), hashTypeBuffer])
16579}
16580
16581module.exports = ECSignature
8b095871
IC
16582
16583}).call(this,require("buffer").Buffer)
9987f0c1
IC
16584},{"./types":78,"bigi":37,"bip66":39,"buffer":4,"typeforce":109}],49:[function(require,module,exports){
16585var Buffer = require('safe-buffer').Buffer
16586var base58check = require('bs58check')
16587var bcrypto = require('./crypto')
16588var createHmac = require('create-hmac')
16589var typeforce = require('typeforce')
16590var types = require('./types')
16591var NETWORKS = require('./networks')
16592
16593var BigInteger = require('bigi')
16594var ECPair = require('./ecpair')
16595
16596var ecurve = require('ecurve')
16597var curve = ecurve.getCurveByName('secp256k1')
16598
16599function HDNode (keyPair, chainCode) {
16600 typeforce(types.tuple('ECPair', types.Buffer256bit), arguments)
16601
16602 if (!keyPair.compressed) throw new TypeError('BIP32 only allows compressed keyPairs')
16603
16604 this.keyPair = keyPair
16605 this.chainCode = chainCode
16606 this.depth = 0
16607 this.index = 0
16608 this.parentFingerprint = 0x00000000
8b095871
IC
16609}
16610
9987f0c1
IC
16611HDNode.HIGHEST_BIT = 0x80000000
16612HDNode.LENGTH = 78
16613HDNode.MASTER_SECRET = Buffer.from('Bitcoin seed', 'utf8')
8b095871 16614
9987f0c1
IC
16615HDNode.fromSeedBuffer = function (seed, network) {
16616 typeforce(types.tuple(types.Buffer, types.maybe(types.Network)), arguments)
8b095871 16617
9987f0c1
IC
16618 if (seed.length < 16) throw new TypeError('Seed should be at least 128 bits')
16619 if (seed.length > 64) throw new TypeError('Seed should be at most 512 bits')
8b095871 16620
9987f0c1
IC
16621 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
16622 var IL = I.slice(0, 32)
16623 var IR = I.slice(32)
8b095871 16624
9987f0c1
IC
16625 // In case IL is 0 or >= n, the master key is invalid
16626 // This is handled by the ECPair constructor
16627 var pIL = BigInteger.fromBuffer(IL)
16628 var keyPair = new ECPair(pIL, null, {
16629 network: network
16630 })
8b095871 16631
9987f0c1
IC
16632 return new HDNode(keyPair, IR)
16633}
8b095871 16634
9987f0c1
IC
16635HDNode.fromSeedHex = function (hex, network) {
16636 return HDNode.fromSeedBuffer(Buffer.from(hex, 'hex'), network)
8b095871
IC
16637}
16638
9987f0c1
IC
16639HDNode.fromBase58 = function (string, networks) {
16640 var buffer = base58check.decode(string)
16641 if (buffer.length !== 78) throw new Error('Invalid buffer length')
8b095871 16642
9987f0c1
IC
16643 // 4 bytes: version bytes
16644 var version = buffer.readUInt32BE(0)
16645 var network
8b095871 16646
9987f0c1
IC
16647 // list of networks?
16648 if (Array.isArray(networks)) {
16649 network = networks.filter(function (x) {
16650 return version === x.bip32.private ||
16651 version === x.bip32.public
16652 }).pop()
8b095871 16653
9987f0c1
IC
16654 if (!network) throw new Error('Unknown network version')
16655
16656 // otherwise, assume a network object (or default to bitcoin)
16657 } else {
16658 network = networks || NETWORKS.bitcoin
8b095871
IC
16659 }
16660
9987f0c1
IC
16661 if (version !== network.bip32.private &&
16662 version !== network.bip32.public) throw new Error('Invalid network version')
8b095871 16663
9987f0c1
IC
16664 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
16665 var depth = buffer[4]
8b095871 16666
9987f0c1
IC
16667 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16668 var parentFingerprint = buffer.readUInt32BE(5)
16669 if (depth === 0) {
16670 if (parentFingerprint !== 0x00000000) throw new Error('Invalid parent fingerprint')
16671 }
8b095871 16672
9987f0c1
IC
16673 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16674 // This is encoded in MSB order. (0x00000000 if master key)
16675 var index = buffer.readUInt32BE(9)
16676 if (depth === 0 && index !== 0) throw new Error('Invalid index')
16677
16678 // 32 bytes: the chain code
16679 var chainCode = buffer.slice(13, 45)
16680 var keyPair
16681
16682 // 33 bytes: private key data (0x00 + k)
16683 if (version === network.bip32.private) {
16684 if (buffer.readUInt8(45) !== 0x00) throw new Error('Invalid private key')
16685
16686 var d = BigInteger.fromBuffer(buffer.slice(46, 78))
16687 keyPair = new ECPair(d, null, { network: network })
16688
16689 // 33 bytes: public key data (0x02 + X or 0x03 + X)
16690 } else {
16691 var Q = ecurve.Point.decodeFrom(curve, buffer.slice(45, 78))
16692 // Q.compressed is assumed, if somehow this assumption is broken, `new HDNode` will throw
16693
16694 // Verify that the X coordinate in the public point corresponds to a point on the curve.
16695 // If not, the extended public key is invalid.
16696 curve.validate(Q)
16697
16698 keyPair = new ECPair(null, Q, { network: network })
16699 }
16700
16701 var hd = new HDNode(keyPair, chainCode)
16702 hd.depth = depth
16703 hd.index = index
16704 hd.parentFingerprint = parentFingerprint
16705
16706 return hd
8b095871
IC
16707}
16708
9987f0c1
IC
16709HDNode.prototype.getAddress = function () {
16710 return this.keyPair.getAddress()
16711}
8b095871 16712
9987f0c1
IC
16713HDNode.prototype.getIdentifier = function () {
16714 return bcrypto.hash160(this.keyPair.getPublicKeyBuffer())
16715}
8b095871 16716
9987f0c1
IC
16717HDNode.prototype.getFingerprint = function () {
16718 return this.getIdentifier().slice(0, 4)
16719}
8b095871 16720
9987f0c1
IC
16721HDNode.prototype.getNetwork = function () {
16722 return this.keyPair.getNetwork()
8b095871
IC
16723}
16724
9987f0c1
IC
16725HDNode.prototype.getPublicKeyBuffer = function () {
16726 return this.keyPair.getPublicKeyBuffer()
16727}
8b095871 16728
9987f0c1
IC
16729HDNode.prototype.neutered = function () {
16730 var neuteredKeyPair = new ECPair(null, this.keyPair.Q, {
16731 network: this.keyPair.network
16732 })
8b095871 16733
9987f0c1
IC
16734 var neutered = new HDNode(neuteredKeyPair, this.chainCode)
16735 neutered.depth = this.depth
16736 neutered.index = this.index
16737 neutered.parentFingerprint = this.parentFingerprint
8b095871 16738
9987f0c1
IC
16739 return neutered
16740}
8b095871 16741
9987f0c1
IC
16742HDNode.prototype.sign = function (hash) {
16743 return this.keyPair.sign(hash)
16744}
8b095871 16745
9987f0c1
IC
16746HDNode.prototype.verify = function (hash, signature) {
16747 return this.keyPair.verify(hash, signature)
8b095871
IC
16748}
16749
9987f0c1
IC
16750HDNode.prototype.toBase58 = function (__isPrivate) {
16751 if (__isPrivate !== undefined) throw new TypeError('Unsupported argument in 2.0.0')
8b095871 16752
9987f0c1
IC
16753 // Version
16754 var network = this.keyPair.network
16755 var version = (!this.isNeutered()) ? network.bip32.private : network.bip32.public
16756 var buffer = Buffer.allocUnsafe(78)
8b095871 16757
9987f0c1
IC
16758 // 4 bytes: version bytes
16759 buffer.writeUInt32BE(version, 0)
8b095871 16760
9987f0c1
IC
16761 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
16762 buffer.writeUInt8(this.depth, 4)
16763
16764 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
16765 buffer.writeUInt32BE(this.parentFingerprint, 5)
16766
16767 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
16768 // This is encoded in big endian. (0x00000000 if master key)
16769 buffer.writeUInt32BE(this.index, 9)
16770
16771 // 32 bytes: the chain code
16772 this.chainCode.copy(buffer, 13)
16773
16774 // 33 bytes: the public key or private key data
16775 if (!this.isNeutered()) {
16776 // 0x00 + k for private keys
16777 buffer.writeUInt8(0, 45)
16778 this.keyPair.d.toBuffer(32).copy(buffer, 46)
16779
16780 // 33 bytes: the public key
16781 } else {
16782 // X9.62 encoding for public keys
16783 this.keyPair.getPublicKeyBuffer().copy(buffer, 45)
16784 }
16785
16786 return base58check.encode(buffer)
8b095871
IC
16787}
16788
9987f0c1
IC
16789// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
16790HDNode.prototype.derive = function (index) {
16791 typeforce(types.UInt32, index)
16792
16793 var isHardened = index >= HDNode.HIGHEST_BIT
16794 var data = Buffer.allocUnsafe(37)
16795
16796 // Hardened child
16797 if (isHardened) {
16798 if (this.isNeutered()) throw new TypeError('Could not derive hardened child key')
8b095871 16799
9987f0c1
IC
16800 // data = 0x00 || ser256(kpar) || ser32(index)
16801 data[0] = 0x00
16802 this.keyPair.d.toBuffer(32).copy(data, 1)
16803 data.writeUInt32BE(index, 33)
8b095871 16804
9987f0c1
IC
16805 // Normal child
16806 } else {
16807 // data = serP(point(kpar)) || ser32(index)
16808 // = serP(Kpar) || ser32(index)
16809 this.keyPair.getPublicKeyBuffer().copy(data, 0)
16810 data.writeUInt32BE(index, 33)
16811 }
8b095871 16812
9987f0c1
IC
16813 var I = createHmac('sha512', this.chainCode).update(data).digest()
16814 var IL = I.slice(0, 32)
16815 var IR = I.slice(32)
8b095871 16816
9987f0c1 16817 var pIL = BigInteger.fromBuffer(IL)
8b095871 16818
9987f0c1
IC
16819 // In case parse256(IL) >= n, proceed with the next value for i
16820 if (pIL.compareTo(curve.n) >= 0) {
16821 return this.derive(index + 1)
8b095871
IC
16822 }
16823
9987f0c1
IC
16824 // Private parent key -> private child key
16825 var derivedKeyPair
16826 if (!this.isNeutered()) {
16827 // ki = parse256(IL) + kpar (mod n)
16828 var ki = pIL.add(this.keyPair.d).mod(curve.n)
8b095871 16829
9987f0c1
IC
16830 // In case ki == 0, proceed with the next value for i
16831 if (ki.signum() === 0) {
16832 return this.derive(index + 1)
16833 }
16834
16835 derivedKeyPair = new ECPair(ki, null, {
16836 network: this.keyPair.network
16837 })
16838
16839 // Public parent key -> public child key
16840 } else {
16841 // Ki = point(parse256(IL)) + Kpar
16842 // = G*IL + Kpar
16843 var Ki = curve.G.multiply(pIL).add(this.keyPair.Q)
16844
16845 // In case Ki is the point at infinity, proceed with the next value for i
16846 if (curve.isInfinity(Ki)) {
16847 return this.derive(index + 1)
16848 }
16849
16850 derivedKeyPair = new ECPair(null, Ki, {
16851 network: this.keyPair.network
16852 })
16853 }
16854
16855 var hd = new HDNode(derivedKeyPair, IR)
16856 hd.depth = this.depth + 1
16857 hd.index = index
16858 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
16859
16860 return hd
8b095871
IC
16861}
16862
9987f0c1
IC
16863HDNode.prototype.deriveHardened = function (index) {
16864 typeforce(types.UInt31, index)
8b095871 16865
9987f0c1
IC
16866 // Only derives hardened private keys by default
16867 return this.derive(index + HDNode.HIGHEST_BIT)
16868}
8b095871 16869
9987f0c1
IC
16870// Private === not neutered
16871// Public === neutered
16872HDNode.prototype.isNeutered = function () {
16873 return !(this.keyPair.d)
8b095871
IC
16874}
16875
9987f0c1
IC
16876HDNode.prototype.derivePath = function (path) {
16877 typeforce(types.BIP32Path, path)
8b095871 16878
9987f0c1
IC
16879 var splitPath = path.split('/')
16880 if (splitPath[0] === 'm') {
16881 if (this.parentFingerprint) {
16882 throw new Error('Not a master node')
16883 }
8b095871 16884
9987f0c1
IC
16885 splitPath = splitPath.slice(1)
16886 }
8b095871 16887
9987f0c1
IC
16888 return splitPath.reduce(function (prevHd, indexStr) {
16889 var index
16890 if (indexStr.slice(-1) === "'") {
16891 index = parseInt(indexStr.slice(0, -1), 10)
16892 return prevHd.deriveHardened(index)
16893 } else {
16894 index = parseInt(indexStr, 10)
16895 return prevHd.derive(index)
16896 }
16897 }, this)
16898}
8b095871 16899
9987f0c1 16900module.exports = HDNode
8b095871 16901
9987f0c1
IC
16902},{"./crypto":45,"./ecpair":47,"./networks":51,"./types":78,"bigi":37,"bs58check":80,"create-hmac":85,"ecurve":89,"safe-buffer":98,"typeforce":109}],50:[function(require,module,exports){
16903module.exports = {
16904 Block: require('./block'),
16905 ECPair: require('./ecpair'),
16906 ECSignature: require('./ecsignature'),
16907 HDNode: require('./hdnode'),
16908 Transaction: require('./transaction'),
16909 TransactionBuilder: require('./transaction_builder'),
8b095871 16910
9987f0c1
IC
16911 address: require('./address'),
16912 bufferutils: require('./bufferutils'), // TODO: remove in 4.0.0
16913 crypto: require('./crypto'),
16914 networks: require('./networks'),
16915 opcodes: require('bitcoin-ops'),
16916 script: require('./script')
8b095871
IC
16917}
16918
9987f0c1
IC
16919},{"./address":42,"./block":43,"./bufferutils":44,"./crypto":45,"./ecpair":47,"./ecsignature":48,"./hdnode":49,"./networks":51,"./script":52,"./transaction":76,"./transaction_builder":77,"bitcoin-ops":40}],51:[function(require,module,exports){
16920// https://en.bitcoin.it/wiki/List_of_address_prefixes
16921// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
8b095871 16922
9987f0c1
IC
16923module.exports = {
16924 bitcoin: {
16925 messagePrefix: '\x18Bitcoin Signed Message:\n',
16926 bip32: {
16927 public: 0x0488b21e,
16928 private: 0x0488ade4
16929 },
16930 pubKeyHash: 0x00,
16931 scriptHash: 0x05,
16932 wif: 0x80
16933 },
16934 testnet: {
16935 messagePrefix: '\x18Bitcoin Signed Message:\n',
16936 bip32: {
16937 public: 0x043587cf,
16938 private: 0x04358394
16939 },
16940 pubKeyHash: 0x6f,
16941 scriptHash: 0xc4,
16942 wif: 0xef
16943 },
16944 litecoin: {
8d18f379
IC
16945 messagePrefix: '\x19Litecoin Signed Message:\n',
16946 bip32: {
16947 public: 0x0488b21e,
16948 private: 0x0488ade4,
16949 },
16950 pubKeyHash: 0x30,
16951 scriptHash: 0x32,
16952 wif: 0xb0
16953 },
16954 litecoinLtub: {
9987f0c1
IC
16955 messagePrefix: '\x19Litecoin Signed Message:\n',
16956 bip32: {
16957 public: 0x019da462,
16958 private: 0x019d9cfe
16959 },
16960 pubKeyHash: 0x30,
16961 scriptHash: 0x32,
16962 wif: 0xb0
16963 }
16964}
8b095871 16965
9987f0c1
IC
16966},{}],52:[function(require,module,exports){
16967var Buffer = require('safe-buffer').Buffer
16968var bip66 = require('bip66')
16969var pushdata = require('pushdata-bitcoin')
16970var typeforce = require('typeforce')
16971var types = require('./types')
16972var scriptNumber = require('./script_number')
16973
16974var OPS = require('bitcoin-ops')
16975var REVERSE_OPS = require('bitcoin-ops/map')
16976var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
16977
16978function isOPInt (value) {
16979 return types.Number(value) &&
16980 ((value === OPS.OP_0) ||
16981 (value >= OPS.OP_1 && value <= OPS.OP_16) ||
16982 (value === OPS.OP_1NEGATE))
8b095871
IC
16983}
16984
9987f0c1
IC
16985function isPushOnlyChunk (value) {
16986 return types.Buffer(value) || isOPInt(value)
8b095871
IC
16987}
16988
9987f0c1
IC
16989function isPushOnly (value) {
16990 return types.Array(value) && value.every(isPushOnlyChunk)
16991}
8b095871 16992
9987f0c1
IC
16993function compile (chunks) {
16994 // TODO: remove me
16995 if (Buffer.isBuffer(chunks)) return chunks
8b095871 16996
9987f0c1 16997 typeforce(types.Array, chunks)
8b095871 16998
9987f0c1
IC
16999 var bufferSize = chunks.reduce(function (accum, chunk) {
17000 // data chunk
17001 if (Buffer.isBuffer(chunk)) {
17002 // adhere to BIP62.3, minimal push policy
17003 if (chunk.length === 1 && (chunk[0] === 0x81 || (chunk[0] >= 1 && chunk[0] <= 16))) {
17004 return accum + 1
17005 }
8b095871 17006
9987f0c1
IC
17007 return accum + pushdata.encodingLength(chunk.length) + chunk.length
17008 }
8b095871 17009
9987f0c1
IC
17010 // opcode
17011 return accum + 1
17012 }, 0.0)
8b095871 17013
9987f0c1
IC
17014 var buffer = Buffer.allocUnsafe(bufferSize)
17015 var offset = 0
8b095871 17016
9987f0c1
IC
17017 chunks.forEach(function (chunk) {
17018 // data chunk
17019 if (Buffer.isBuffer(chunk)) {
17020 // adhere to BIP62.3, minimal push policy
17021 if (chunk.length === 1 && chunk[0] >= 1 && chunk[0] <= 16) {
17022 var opcode = OP_INT_BASE + chunk[0]
17023 buffer.writeUInt8(opcode, offset)
17024 offset += 1
17025 return
17026 }
8b095871 17027
9987f0c1
IC
17028 if (chunk.length === 1 && chunk[0] === 0x81) {
17029 buffer.writeUInt8(OPS.OP_1NEGATE, offset)
17030 offset += 1
17031 return
17032 }
8b095871 17033
9987f0c1 17034 offset += pushdata.encode(buffer, chunk.length, offset)
8b095871 17035
9987f0c1
IC
17036 chunk.copy(buffer, offset)
17037 offset += chunk.length
8b095871 17038
9987f0c1
IC
17039 // opcode
17040 } else {
17041 buffer.writeUInt8(chunk, offset)
17042 offset += 1
17043 }
17044 })
8b095871 17045
9987f0c1
IC
17046 if (offset !== buffer.length) throw new Error('Could not decode chunks')
17047 return buffer
17048}
8b095871 17049
9987f0c1
IC
17050function decompile (buffer) {
17051 // TODO: remove me
17052 if (types.Array(buffer)) return buffer
8b095871 17053
9987f0c1 17054 typeforce(types.Buffer, buffer)
8b095871 17055
9987f0c1
IC
17056 var chunks = []
17057 var i = 0
8b095871 17058
9987f0c1
IC
17059 while (i < buffer.length) {
17060 var opcode = buffer[i]
8b095871 17061
9987f0c1
IC
17062 // data chunk
17063 if ((opcode > OPS.OP_0) && (opcode <= OPS.OP_PUSHDATA4)) {
17064 var d = pushdata.decode(buffer, i)
8b095871 17065
9987f0c1
IC
17066 // did reading a pushDataInt fail? empty script
17067 if (d === null) return []
17068 i += d.size
8b095871 17069
9987f0c1
IC
17070 // attempt to read too much data? empty script
17071 if (i + d.number > buffer.length) return []
8b095871 17072
9987f0c1
IC
17073 var data = buffer.slice(i, i + d.number)
17074 i += d.number
8b095871 17075
9987f0c1 17076 chunks.push(data)
8b095871 17077
9987f0c1
IC
17078 // opcode
17079 } else {
17080 chunks.push(opcode)
8b095871 17081
9987f0c1
IC
17082 i += 1
17083 }
17084 }
17085
17086 return chunks
8b095871
IC
17087}
17088
9987f0c1
IC
17089function toASM (chunks) {
17090 if (Buffer.isBuffer(chunks)) {
17091 chunks = decompile(chunks)
17092 }
8b095871 17093
9987f0c1
IC
17094 return chunks.map(function (chunk) {
17095 // data?
17096 if (Buffer.isBuffer(chunk)) return chunk.toString('hex')
8b095871 17097
9987f0c1
IC
17098 // opcode!
17099 return REVERSE_OPS[chunk]
17100 }).join(' ')
17101}
8b095871 17102
9987f0c1
IC
17103function fromASM (asm) {
17104 typeforce(types.String, asm)
8b095871 17105
9987f0c1
IC
17106 return compile(asm.split(' ').map(function (chunkStr) {
17107 // opcode?
17108 if (OPS[chunkStr] !== undefined) return OPS[chunkStr]
17109 typeforce(types.Hex, chunkStr)
8b095871 17110
9987f0c1
IC
17111 // data!
17112 return Buffer.from(chunkStr, 'hex')
17113 }))
17114}
8b095871 17115
9987f0c1
IC
17116function toStack (chunks) {
17117 chunks = decompile(chunks)
17118 typeforce(isPushOnly, chunks)
8b095871 17119
9987f0c1
IC
17120 return chunks.map(function (op) {
17121 if (Buffer.isBuffer(op)) return op
17122 if (op === OPS.OP_0) return Buffer.allocUnsafe(0)
17123
17124 return scriptNumber.encode(op - OP_INT_BASE)
17125 })
8b095871
IC
17126}
17127
9987f0c1
IC
17128function isCanonicalPubKey (buffer) {
17129 if (!Buffer.isBuffer(buffer)) return false
17130 if (buffer.length < 33) return false
8b095871 17131
9987f0c1
IC
17132 switch (buffer[0]) {
17133 case 0x02:
17134 case 0x03:
17135 return buffer.length === 33
17136 case 0x04:
17137 return buffer.length === 65
17138 }
8b095871 17139
9987f0c1 17140 return false
8b095871
IC
17141}
17142
9987f0c1
IC
17143function isDefinedHashType (hashType) {
17144 var hashTypeMod = hashType & ~0x80
8b095871 17145
9987f0c1
IC
17146// return hashTypeMod > SIGHASH_ALL && hashTypeMod < SIGHASH_SINGLE
17147 return hashTypeMod > 0x00 && hashTypeMod < 0x04
8b095871
IC
17148}
17149
9987f0c1
IC
17150function isCanonicalSignature (buffer) {
17151 if (!Buffer.isBuffer(buffer)) return false
17152 if (!isDefinedHashType(buffer[buffer.length - 1])) return false
8b095871 17153
9987f0c1 17154 return bip66.check(buffer.slice(0, -1))
8b095871
IC
17155}
17156
9987f0c1
IC
17157module.exports = {
17158 compile: compile,
17159 decompile: decompile,
17160 fromASM: fromASM,
17161 toASM: toASM,
17162 toStack: toStack,
8b095871 17163
9987f0c1 17164 number: require('./script_number'),
8b095871 17165
9987f0c1
IC
17166 isCanonicalPubKey: isCanonicalPubKey,
17167 isCanonicalSignature: isCanonicalSignature,
17168 isPushOnly: isPushOnly,
17169 isDefinedHashType: isDefinedHashType
8b095871
IC
17170}
17171
9987f0c1
IC
17172var templates = require('./templates')
17173for (var key in templates) {
17174 module.exports[key] = templates[key]
8b095871
IC
17175}
17176
9987f0c1
IC
17177},{"./script_number":53,"./templates":54,"./types":78,"bip66":39,"bitcoin-ops":40,"bitcoin-ops/map":41,"pushdata-bitcoin":95,"safe-buffer":98,"typeforce":109}],53:[function(require,module,exports){
17178var Buffer = require('safe-buffer').Buffer
8b095871 17179
9987f0c1
IC
17180function decode (buffer, maxLength, minimal) {
17181 maxLength = maxLength || 4
17182 minimal = minimal === undefined ? true : minimal
8b095871 17183
9987f0c1
IC
17184 var length = buffer.length
17185 if (length === 0) return 0
17186 if (length > maxLength) throw new TypeError('Script number overflow')
17187 if (minimal) {
17188 if ((buffer[length - 1] & 0x7f) === 0) {
17189 if (length <= 1 || (buffer[length - 2] & 0x80) === 0) throw new Error('Non-minimally encoded script number')
17190 }
17191 }
8b095871 17192
9987f0c1
IC
17193 // 40-bit
17194 if (length === 5) {
17195 var a = buffer.readUInt32LE(0)
17196 var b = buffer.readUInt8(4)
8b095871 17197
9987f0c1
IC
17198 if (b & 0x80) return -(((b & ~0x80) * 0x100000000) + a)
17199 return (b * 0x100000000) + a
17200 }
8b095871 17201
9987f0c1 17202 var result = 0
8b095871 17203
9987f0c1
IC
17204 // 32-bit / 24-bit / 16-bit / 8-bit
17205 for (var i = 0; i < length; ++i) {
17206 result |= buffer[i] << (8 * i)
8b095871
IC
17207 }
17208
9987f0c1
IC
17209 if (buffer[length - 1] & 0x80) return -(result & ~(0x80 << (8 * (length - 1))))
17210 return result
17211}
8b095871 17212
9987f0c1
IC
17213function scriptNumSize (i) {
17214 return i > 0x7fffffff ? 5
17215 : i > 0x7fffff ? 4
17216 : i > 0x7fff ? 3
17217 : i > 0x7f ? 2
17218 : i > 0x00 ? 1
17219 : 0
8b095871
IC
17220}
17221
9987f0c1
IC
17222function encode (number) {
17223 var value = Math.abs(number)
17224 var size = scriptNumSize(value)
17225 var buffer = Buffer.allocUnsafe(size)
17226 var negative = number < 0
8b095871 17227
9987f0c1
IC
17228 for (var i = 0; i < size; ++i) {
17229 buffer.writeUInt8(value & 0xff, i)
17230 value >>= 8
17231 }
8b095871 17232
9987f0c1
IC
17233 if (buffer[size - 1] & 0x80) {
17234 buffer.writeUInt8(negative ? 0x80 : 0x00, size - 1)
17235 } else if (negative) {
17236 buffer[size - 1] |= 0x80
17237 }
17238
17239 return buffer
8b095871
IC
17240}
17241
9987f0c1
IC
17242module.exports = {
17243 decode: decode,
17244 encode: encode
17245}
8b095871 17246
9987f0c1
IC
17247},{"safe-buffer":98}],54:[function(require,module,exports){
17248var decompile = require('../script').decompile
17249var multisig = require('./multisig')
17250var nullData = require('./nulldata')
17251var pubKey = require('./pubkey')
17252var pubKeyHash = require('./pubkeyhash')
17253var scriptHash = require('./scripthash')
17254var witnessPubKeyHash = require('./witnesspubkeyhash')
17255var witnessScriptHash = require('./witnessscripthash')
17256var witnessCommitment = require('./witnesscommitment')
17257
17258var types = {
17259 MULTISIG: 'multisig',
17260 NONSTANDARD: 'nonstandard',
17261 NULLDATA: 'nulldata',
17262 P2PK: 'pubkey',
17263 P2PKH: 'pubkeyhash',
17264 P2SH: 'scripthash',
17265 P2WPKH: 'witnesspubkeyhash',
17266 P2WSH: 'witnessscripthash',
17267 WITNESS_COMMITMENT: 'witnesscommitment'
17268}
8b095871 17269
9987f0c1
IC
17270function classifyOutput (script) {
17271 if (witnessPubKeyHash.output.check(script)) return types.P2WPKH
17272 if (witnessScriptHash.output.check(script)) return types.P2WSH
17273 if (pubKeyHash.output.check(script)) return types.P2PKH
17274 if (scriptHash.output.check(script)) return types.P2SH
8b095871 17275
9987f0c1
IC
17276 // XXX: optimization, below functions .decompile before use
17277 var chunks = decompile(script)
17278 if (multisig.output.check(chunks)) return types.MULTISIG
17279 if (pubKey.output.check(chunks)) return types.P2PK
17280 if (witnessCommitment.output.check(chunks)) return types.WITNESS_COMMITMENT
17281 if (nullData.output.check(chunks)) return types.NULLDATA
8b095871 17282
9987f0c1 17283 return types.NONSTANDARD
8b095871
IC
17284}
17285
9987f0c1
IC
17286function classifyInput (script, allowIncomplete) {
17287 // XXX: optimization, below functions .decompile before use
17288 var chunks = decompile(script)
8b095871 17289
9987f0c1
IC
17290 if (pubKeyHash.input.check(chunks)) return types.P2PKH
17291 if (scriptHash.input.check(chunks, allowIncomplete)) return types.P2SH
17292 if (multisig.input.check(chunks, allowIncomplete)) return types.MULTISIG
17293 if (pubKey.input.check(chunks)) return types.P2PK
8b095871 17294
9987f0c1 17295 return types.NONSTANDARD
8b095871
IC
17296}
17297
9987f0c1
IC
17298function classifyWitness (script, allowIncomplete) {
17299 // XXX: optimization, below functions .decompile before use
17300 var chunks = decompile(script)
8b095871 17301
9987f0c1
IC
17302 if (witnessPubKeyHash.input.check(chunks)) return types.P2WPKH
17303 if (witnessScriptHash.input.check(chunks, allowIncomplete)) return types.P2WSH
8b095871 17304
9987f0c1
IC
17305 return types.NONSTANDARD
17306}
8b095871 17307
9987f0c1
IC
17308module.exports = {
17309 classifyInput: classifyInput,
17310 classifyOutput: classifyOutput,
17311 classifyWitness: classifyWitness,
17312 multisig: multisig,
17313 nullData: nullData,
17314 pubKey: pubKey,
17315 pubKeyHash: pubKeyHash,
17316 scriptHash: scriptHash,
17317 witnessPubKeyHash: witnessPubKeyHash,
17318 witnessScriptHash: witnessScriptHash,
17319 witnessCommitment: witnessCommitment,
17320 types: types
17321}
17322
17323},{"../script":52,"./multisig":55,"./nulldata":58,"./pubkey":59,"./pubkeyhash":62,"./scripthash":65,"./witnesscommitment":68,"./witnesspubkeyhash":70,"./witnessscripthash":73}],55:[function(require,module,exports){
17324module.exports = {
17325 input: require('./input'),
17326 output: require('./output')
8b095871
IC
17327}
17328
9987f0c1
IC
17329},{"./input":56,"./output":57}],56:[function(require,module,exports){
17330// OP_0 [signatures ...]
8b095871 17331
9987f0c1
IC
17332var Buffer = require('safe-buffer').Buffer
17333var bscript = require('../../script')
17334var typeforce = require('typeforce')
17335var OPS = require('bitcoin-ops')
8b095871 17336
9987f0c1
IC
17337function partialSignature (value) {
17338 return value === OPS.OP_0 || bscript.isCanonicalSignature(value)
17339}
8b095871 17340
9987f0c1
IC
17341function check (script, allowIncomplete) {
17342 var chunks = bscript.decompile(script)
17343 if (chunks.length < 2) return false
17344 if (chunks[0] !== OPS.OP_0) return false
8b095871 17345
9987f0c1
IC
17346 if (allowIncomplete) {
17347 return chunks.slice(1).every(partialSignature)
17348 }
8b095871 17349
9987f0c1 17350 return chunks.slice(1).every(bscript.isCanonicalSignature)
8b095871 17351}
9987f0c1 17352check.toJSON = function () { return 'multisig input' }
8b095871 17353
9987f0c1 17354var EMPTY_BUFFER = Buffer.allocUnsafe(0)
8b095871 17355
9987f0c1
IC
17356function encodeStack (signatures, scriptPubKey) {
17357 typeforce([partialSignature], signatures)
8b095871 17358
9987f0c1
IC
17359 if (scriptPubKey) {
17360 var scriptData = bscript.multisig.output.decode(scriptPubKey)
17361
17362 if (signatures.length < scriptData.m) {
17363 throw new TypeError('Not enough signatures provided')
17364 }
8b095871 17365
9987f0c1
IC
17366 if (signatures.length > scriptData.pubKeys.length) {
17367 throw new TypeError('Too many signatures provided')
17368 }
17369 }
17370
17371 return [].concat(EMPTY_BUFFER, signatures)
8b095871
IC
17372}
17373
9987f0c1
IC
17374function encode (signatures, scriptPubKey) {
17375 return bscript.compile(encodeStack(signatures, scriptPubKey))
8b095871
IC
17376}
17377
9987f0c1
IC
17378function decodeStack (stack, allowIncomplete) {
17379 typeforce(check, stack, allowIncomplete)
17380 return stack.slice(1)
8b095871
IC
17381}
17382
9987f0c1
IC
17383function decode (buffer, allowIncomplete) {
17384 var stack = bscript.decompile(buffer)
17385 return decodeStack(stack, allowIncomplete)
17386}
8b095871 17387
9987f0c1
IC
17388module.exports = {
17389 check: check,
17390 decode: decode,
17391 decodeStack: decodeStack,
17392 encode: encode,
17393 encodeStack: encodeStack
17394}
8b095871 17395
9987f0c1
IC
17396},{"../../script":52,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],57:[function(require,module,exports){
17397// m [pubKeys ...] n OP_CHECKMULTISIG
8b095871 17398
9987f0c1
IC
17399var bscript = require('../../script')
17400var types = require('../../types')
17401var typeforce = require('typeforce')
17402var OPS = require('bitcoin-ops')
17403var OP_INT_BASE = OPS.OP_RESERVED // OP_1 - 1
17404
17405function check (script, allowIncomplete) {
17406 var chunks = bscript.decompile(script)
17407
17408 if (chunks.length < 4) return false
17409 if (chunks[chunks.length - 1] !== OPS.OP_CHECKMULTISIG) return false
17410 if (!types.Number(chunks[0])) return false
17411 if (!types.Number(chunks[chunks.length - 2])) return false
17412 var m = chunks[0] - OP_INT_BASE
17413 var n = chunks[chunks.length - 2] - OP_INT_BASE
17414
17415 if (m <= 0) return false
17416 if (n > 16) return false
17417 if (m > n) return false
17418 if (n !== chunks.length - 3) return false
17419 if (allowIncomplete) return true
17420
17421 var keys = chunks.slice(1, -2)
17422 return keys.every(bscript.isCanonicalPubKey)
17423}
17424check.toJSON = function () { return 'multi-sig output' }
17425
17426function encode (m, pubKeys) {
17427 typeforce({
17428 m: types.Number,
17429 pubKeys: [bscript.isCanonicalPubKey]
17430 }, {
17431 m: m,
17432 pubKeys: pubKeys
17433 })
8b095871 17434
9987f0c1
IC
17435 var n = pubKeys.length
17436 if (n < m) throw new TypeError('Not enough pubKeys provided')
8b095871 17437
9987f0c1
IC
17438 return bscript.compile([].concat(
17439 OP_INT_BASE + m,
17440 pubKeys,
17441 OP_INT_BASE + n,
17442 OPS.OP_CHECKMULTISIG
17443 ))
17444}
8b095871 17445
9987f0c1
IC
17446function decode (buffer, allowIncomplete) {
17447 var chunks = bscript.decompile(buffer)
17448 typeforce(check, chunks, allowIncomplete)
8b095871 17449
9987f0c1
IC
17450 return {
17451 m: chunks[0] - OP_INT_BASE,
17452 pubKeys: chunks.slice(1, -2)
8b095871 17453 }
9987f0c1 17454}
8b095871 17455
9987f0c1
IC
17456module.exports = {
17457 check: check,
17458 decode: decode,
17459 encode: encode
17460}
8b095871 17461
9987f0c1
IC
17462},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],58:[function(require,module,exports){
17463// OP_RETURN {data}
8b095871 17464
9987f0c1
IC
17465var bscript = require('../script')
17466var types = require('../types')
17467var typeforce = require('typeforce')
17468var OPS = require('bitcoin-ops')
8b095871 17469
9987f0c1
IC
17470function check (script) {
17471 var buffer = bscript.compile(script)
8b095871 17472
9987f0c1
IC
17473 return buffer.length > 1 &&
17474 buffer[0] === OPS.OP_RETURN
17475}
17476check.toJSON = function () { return 'null data output' }
8b095871 17477
9987f0c1
IC
17478function encode (data) {
17479 typeforce(types.Buffer, data)
8b095871 17480
9987f0c1
IC
17481 return bscript.compile([OPS.OP_RETURN, data])
17482}
8b095871 17483
9987f0c1
IC
17484function decode (buffer) {
17485 typeforce(check, buffer)
17486
17487 return buffer.slice(2)
17488}
8b095871 17489
9987f0c1
IC
17490module.exports = {
17491 output: {
17492 check: check,
17493 decode: decode,
17494 encode: encode
8b095871 17495 }
9987f0c1 17496}
8b095871 17497
9987f0c1
IC
17498},{"../script":52,"../types":78,"bitcoin-ops":40,"typeforce":109}],59:[function(require,module,exports){
17499arguments[4][55][0].apply(exports,arguments)
17500},{"./input":60,"./output":61,"dup":55}],60:[function(require,module,exports){
17501// {signature}
8b095871 17502
9987f0c1
IC
17503var bscript = require('../../script')
17504var types = require('../../types')
17505var typeforce = require('typeforce')
8b095871 17506
9987f0c1
IC
17507function check (script) {
17508 var chunks = bscript.decompile(script)
8b095871 17509
9987f0c1
IC
17510 return chunks.length === 1 &&
17511 bscript.isCanonicalSignature(chunks[0])
17512}
17513check.toJSON = function () { return 'pubKey input' }
8b095871 17514
9987f0c1
IC
17515function encodeStack (signature) {
17516 typeforce(types.Buffer, signature)
17517 return [signature]
8b095871
IC
17518}
17519
9987f0c1
IC
17520function encode (signature) {
17521 return bscript.compile(encodeStack(signature))
17522}
8b095871 17523
9987f0c1
IC
17524function decodeStack (stack) {
17525 typeforce(check, stack)
17526 return stack[0]
17527}
8b095871 17528
9987f0c1
IC
17529function decode (buffer) {
17530 var stack = bscript.decompile(buffer)
17531 return decodeStack(stack)
17532}
8b095871 17533
9987f0c1
IC
17534module.exports = {
17535 check: check,
17536 decode: decode,
17537 decodeStack: decodeStack,
17538 encode: encode,
17539 encodeStack: encodeStack
8b095871
IC
17540}
17541
9987f0c1
IC
17542},{"../../script":52,"../../types":78,"typeforce":109}],61:[function(require,module,exports){
17543// {pubKey} OP_CHECKSIG
8b095871 17544
9987f0c1
IC
17545var bscript = require('../../script')
17546var typeforce = require('typeforce')
17547var OPS = require('bitcoin-ops')
8b095871 17548
9987f0c1
IC
17549function check (script) {
17550 var chunks = bscript.decompile(script)
8b095871 17551
9987f0c1
IC
17552 return chunks.length === 2 &&
17553 bscript.isCanonicalPubKey(chunks[0]) &&
17554 chunks[1] === OPS.OP_CHECKSIG
17555}
17556check.toJSON = function () { return 'pubKey output' }
8b095871 17557
9987f0c1
IC
17558function encode (pubKey) {
17559 typeforce(bscript.isCanonicalPubKey, pubKey)
8b095871 17560
9987f0c1
IC
17561 return bscript.compile([pubKey, OPS.OP_CHECKSIG])
17562}
8b095871 17563
9987f0c1
IC
17564function decode (buffer) {
17565 var chunks = bscript.decompile(buffer)
17566 typeforce(check, chunks)
8b095871 17567
9987f0c1
IC
17568 return chunks[0]
17569}
8b095871 17570
9987f0c1
IC
17571module.exports = {
17572 check: check,
17573 decode: decode,
17574 encode: encode
17575}
8b095871 17576
9987f0c1
IC
17577},{"../../script":52,"bitcoin-ops":40,"typeforce":109}],62:[function(require,module,exports){
17578arguments[4][55][0].apply(exports,arguments)
17579},{"./input":63,"./output":64,"dup":55}],63:[function(require,module,exports){
17580// {signature} {pubKey}
8b095871 17581
9987f0c1
IC
17582var bscript = require('../../script')
17583var types = require('../../types')
17584var typeforce = require('typeforce')
8b095871 17585
9987f0c1
IC
17586function check (script) {
17587 var chunks = bscript.decompile(script)
8b095871 17588
9987f0c1
IC
17589 return chunks.length === 2 &&
17590 bscript.isCanonicalSignature(chunks[0]) &&
17591 bscript.isCanonicalPubKey(chunks[1])
8b095871 17592}
9987f0c1 17593check.toJSON = function () { return 'pubKeyHash input' }
8b095871 17594
9987f0c1
IC
17595function encodeStack (signature, pubKey) {
17596 typeforce({
17597 signature: types.Buffer, pubKey: types.Buffer
17598 }, {
17599 signature: signature, pubKey: pubKey
17600 })
8b095871 17601
9987f0c1 17602 return [signature, pubKey]
8b095871
IC
17603}
17604
9987f0c1
IC
17605function encode (signature, pubKey) {
17606 return bscript.compile(encodeStack(signature, pubKey))
8b095871
IC
17607}
17608
9987f0c1
IC
17609function decodeStack (stack) {
17610 typeforce(check, stack)
8b095871 17611
9987f0c1
IC
17612 return {
17613 signature: stack[0],
17614 pubKey: stack[1]
17615 }
8b095871
IC
17616}
17617
9987f0c1
IC
17618function decode (buffer) {
17619 var stack = bscript.decompile(buffer)
17620 return decodeStack(stack)
8b095871
IC
17621}
17622
9987f0c1
IC
17623module.exports = {
17624 check: check,
17625 decode: decode,
17626 decodeStack: decodeStack,
17627 encode: encode,
17628 encodeStack: encodeStack
8b095871
IC
17629}
17630
9987f0c1
IC
17631},{"../../script":52,"../../types":78,"typeforce":109}],64:[function(require,module,exports){
17632// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
8b095871 17633
9987f0c1
IC
17634var bscript = require('../../script')
17635var types = require('../../types')
17636var typeforce = require('typeforce')
17637var OPS = require('bitcoin-ops')
8b095871 17638
9987f0c1
IC
17639function check (script) {
17640 var buffer = bscript.compile(script)
8b095871 17641
9987f0c1
IC
17642 return buffer.length === 25 &&
17643 buffer[0] === OPS.OP_DUP &&
17644 buffer[1] === OPS.OP_HASH160 &&
17645 buffer[2] === 0x14 &&
17646 buffer[23] === OPS.OP_EQUALVERIFY &&
17647 buffer[24] === OPS.OP_CHECKSIG
8b095871 17648}
9987f0c1 17649check.toJSON = function () { return 'pubKeyHash output' }
8b095871 17650
9987f0c1
IC
17651function encode (pubKeyHash) {
17652 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17653
9987f0c1
IC
17654 return bscript.compile([
17655 OPS.OP_DUP,
17656 OPS.OP_HASH160,
17657 pubKeyHash,
17658 OPS.OP_EQUALVERIFY,
17659 OPS.OP_CHECKSIG
17660 ])
8b095871
IC
17661}
17662
9987f0c1
IC
17663function decode (buffer) {
17664 typeforce(check, buffer)
8b095871 17665
9987f0c1 17666 return buffer.slice(3, 23)
8b095871
IC
17667}
17668
9987f0c1
IC
17669module.exports = {
17670 check: check,
17671 decode: decode,
17672 encode: encode
8b095871
IC
17673}
17674
9987f0c1
IC
17675},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],65:[function(require,module,exports){
17676arguments[4][55][0].apply(exports,arguments)
17677},{"./input":66,"./output":67,"dup":55}],66:[function(require,module,exports){
17678// <scriptSig> {serialized scriptPubKey script}
8b095871 17679
9987f0c1
IC
17680var Buffer = require('safe-buffer').Buffer
17681var bscript = require('../../script')
17682var typeforce = require('typeforce')
8b095871 17683
9987f0c1
IC
17684function check (script, allowIncomplete) {
17685 var chunks = bscript.decompile(script)
17686 if (chunks.length < 1) return false
8b095871 17687
9987f0c1
IC
17688 var lastChunk = chunks[chunks.length - 1]
17689 if (!Buffer.isBuffer(lastChunk)) return false
8b095871 17690
9987f0c1
IC
17691 var scriptSigChunks = bscript.decompile(bscript.compile(chunks.slice(0, -1)))
17692 var redeemScriptChunks = bscript.decompile(lastChunk)
8b095871 17693
9987f0c1
IC
17694 // is redeemScript a valid script?
17695 if (redeemScriptChunks.length === 0) return false
17696
17697 // is redeemScriptSig push only?
17698 if (!bscript.isPushOnly(scriptSigChunks)) return false
17699
17700 var inputType = bscript.classifyInput(scriptSigChunks, allowIncomplete)
17701 var outputType = bscript.classifyOutput(redeemScriptChunks)
17702 if (chunks.length === 1) {
17703 return outputType === bscript.types.P2WSH || outputType === bscript.types.P2WPKH
17704 }
17705 return inputType === outputType
8b095871 17706}
9987f0c1 17707check.toJSON = function () { return 'scriptHash input' }
8b095871 17708
9987f0c1
IC
17709function encodeStack (redeemScriptStack, redeemScript) {
17710 var serializedScriptPubKey = bscript.compile(redeemScript)
8b095871 17711
9987f0c1
IC
17712 return [].concat(redeemScriptStack, serializedScriptPubKey)
17713}
8b095871 17714
9987f0c1
IC
17715function encode (redeemScriptSig, redeemScript) {
17716 var redeemScriptStack = bscript.decompile(redeemScriptSig)
8b095871 17717
9987f0c1
IC
17718 return bscript.compile(encodeStack(redeemScriptStack, redeemScript))
17719}
8b095871 17720
9987f0c1
IC
17721function decodeStack (stack) {
17722 typeforce(check, stack)
17723
17724 return {
17725 redeemScriptStack: stack.slice(0, -1),
17726 redeemScript: stack[stack.length - 1]
17727 }
8b095871
IC
17728}
17729
9987f0c1
IC
17730function decode (buffer) {
17731 var stack = bscript.decompile(buffer)
17732 var result = decodeStack(stack)
17733 result.redeemScriptSig = bscript.compile(result.redeemScriptStack)
17734 delete result.redeemScriptStack
17735 return result
17736}
8b095871 17737
9987f0c1
IC
17738module.exports = {
17739 check: check,
17740 decode: decode,
17741 decodeStack: decodeStack,
17742 encode: encode,
17743 encodeStack: encodeStack
17744}
8b095871 17745
9987f0c1
IC
17746},{"../../script":52,"safe-buffer":98,"typeforce":109}],67:[function(require,module,exports){
17747// OP_HASH160 {scriptHash} OP_EQUAL
8b095871 17748
9987f0c1
IC
17749var bscript = require('../../script')
17750var types = require('../../types')
17751var typeforce = require('typeforce')
17752var OPS = require('bitcoin-ops')
8b095871 17753
9987f0c1
IC
17754function check (script) {
17755 var buffer = bscript.compile(script)
8b095871 17756
9987f0c1
IC
17757 return buffer.length === 23 &&
17758 buffer[0] === OPS.OP_HASH160 &&
17759 buffer[1] === 0x14 &&
17760 buffer[22] === OPS.OP_EQUAL
8b095871 17761}
9987f0c1 17762check.toJSON = function () { return 'scriptHash output' }
8b095871 17763
9987f0c1
IC
17764function encode (scriptHash) {
17765 typeforce(types.Hash160bit, scriptHash)
8b095871 17766
9987f0c1
IC
17767 return bscript.compile([OPS.OP_HASH160, scriptHash, OPS.OP_EQUAL])
17768}
8b095871 17769
9987f0c1
IC
17770function decode (buffer) {
17771 typeforce(check, buffer)
8b095871 17772
9987f0c1
IC
17773 return buffer.slice(2, 22)
17774}
8b095871 17775
9987f0c1
IC
17776module.exports = {
17777 check: check,
17778 decode: decode,
17779 encode: encode
8b095871
IC
17780}
17781
9987f0c1
IC
17782},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],68:[function(require,module,exports){
17783module.exports = {
17784 output: require('./output')
17785}
8b095871 17786
9987f0c1
IC
17787},{"./output":69}],69:[function(require,module,exports){
17788// OP_RETURN {aa21a9ed} {commitment}
8b095871 17789
9987f0c1
IC
17790var Buffer = require('safe-buffer').Buffer
17791var bscript = require('../../script')
17792var types = require('../../types')
17793var typeforce = require('typeforce')
17794var OPS = require('bitcoin-ops')
8b095871 17795
9987f0c1 17796var HEADER = Buffer.from('aa21a9ed', 'hex')
8b095871 17797
9987f0c1
IC
17798function check (script) {
17799 var buffer = bscript.compile(script)
17800
17801 return buffer.length > 37 &&
17802 buffer[0] === OPS.OP_RETURN &&
17803 buffer[1] === 0x24 &&
17804 buffer.slice(2, 6).equals(HEADER)
8b095871
IC
17805}
17806
9987f0c1 17807check.toJSON = function () { return 'Witness commitment output' }
8b095871 17808
9987f0c1
IC
17809function encode (commitment) {
17810 typeforce(types.Hash256bit, commitment)
8b095871 17811
9987f0c1
IC
17812 var buffer = Buffer.allocUnsafe(36)
17813 HEADER.copy(buffer, 0)
17814 commitment.copy(buffer, 4)
8b095871 17815
9987f0c1
IC
17816 return bscript.compile([OPS.OP_RETURN, buffer])
17817}
8b095871 17818
9987f0c1
IC
17819function decode (buffer) {
17820 typeforce(check, buffer)
8b095871 17821
9987f0c1
IC
17822 return bscript.decompile(buffer)[1].slice(4, 36)
17823}
8b095871 17824
9987f0c1
IC
17825module.exports = {
17826 check: check,
17827 decode: decode,
17828 encode: encode
17829}
8b095871 17830
9987f0c1
IC
17831},{"../../script":52,"../../types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],70:[function(require,module,exports){
17832arguments[4][55][0].apply(exports,arguments)
17833},{"./input":71,"./output":72,"dup":55}],71:[function(require,module,exports){
17834// {signature} {pubKey}
8b095871 17835
9987f0c1 17836var pkh = require('../pubkeyhash/input')
8b095871 17837
9987f0c1
IC
17838module.exports = {
17839 check: pkh.check,
17840 decodeStack: pkh.decodeStack,
17841 encodeStack: pkh.encodeStack
8b095871
IC
17842}
17843
9987f0c1
IC
17844},{"../pubkeyhash/input":63}],72:[function(require,module,exports){
17845// OP_0 {pubKeyHash}
8b095871 17846
9987f0c1
IC
17847var bscript = require('../../script')
17848var types = require('../../types')
17849var typeforce = require('typeforce')
17850var OPS = require('bitcoin-ops')
8b095871 17851
9987f0c1
IC
17852function check (script) {
17853 var buffer = bscript.compile(script)
8b095871 17854
9987f0c1
IC
17855 return buffer.length === 22 &&
17856 buffer[0] === OPS.OP_0 &&
17857 buffer[1] === 0x14
17858}
17859check.toJSON = function () { return 'Witness pubKeyHash output' }
8b095871 17860
9987f0c1
IC
17861function encode (pubKeyHash) {
17862 typeforce(types.Hash160bit, pubKeyHash)
8b095871 17863
9987f0c1
IC
17864 return bscript.compile([OPS.OP_0, pubKeyHash])
17865}
8b095871 17866
9987f0c1
IC
17867function decode (buffer) {
17868 typeforce(check, buffer)
17869
17870 return buffer.slice(2)
8b095871
IC
17871}
17872
9987f0c1
IC
17873module.exports = {
17874 check: check,
17875 decode: decode,
17876 encode: encode
17877}
8b095871 17878
9987f0c1
IC
17879},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],73:[function(require,module,exports){
17880arguments[4][55][0].apply(exports,arguments)
17881},{"./input":74,"./output":75,"dup":55}],74:[function(require,module,exports){
17882// {signature} {pubKey}
8b095871 17883
9987f0c1 17884var p2sh = require('../scripthash/input')
8b095871 17885
9987f0c1
IC
17886module.exports = {
17887 check: p2sh.check,
17888 decodeStack: p2sh.decodeStack,
17889 encodeStack: p2sh.encodeStack
17890}
8b095871 17891
9987f0c1
IC
17892},{"../scripthash/input":66}],75:[function(require,module,exports){
17893// OP_0 {scriptHash}
8b095871 17894
9987f0c1
IC
17895var bscript = require('../../script')
17896var types = require('../../types')
17897var typeforce = require('typeforce')
17898var OPS = require('bitcoin-ops')
8b095871 17899
9987f0c1
IC
17900function check (script) {
17901 var buffer = bscript.compile(script)
17902
17903 return buffer.length === 34 &&
17904 buffer[0] === OPS.OP_0 &&
17905 buffer[1] === 0x20
8b095871 17906}
9987f0c1 17907check.toJSON = function () { return 'Witness scriptHash output' }
8b095871 17908
9987f0c1
IC
17909function encode (scriptHash) {
17910 typeforce(types.Hash256bit, scriptHash)
8b095871 17911
9987f0c1
IC
17912 return bscript.compile([OPS.OP_0, scriptHash])
17913}
8b095871 17914
9987f0c1
IC
17915function decode (buffer) {
17916 typeforce(check, buffer)
8b095871 17917
9987f0c1
IC
17918 return buffer.slice(2)
17919}
8b095871 17920
9987f0c1
IC
17921module.exports = {
17922 check: check,
17923 decode: decode,
17924 encode: encode
17925}
8b095871 17926
9987f0c1
IC
17927},{"../../script":52,"../../types":78,"bitcoin-ops":40,"typeforce":109}],76:[function(require,module,exports){
17928var Buffer = require('safe-buffer').Buffer
17929var bcrypto = require('./crypto')
17930var bscript = require('./script')
17931var bufferutils = require('./bufferutils')
17932var opcodes = require('bitcoin-ops')
17933var typeforce = require('typeforce')
17934var types = require('./types')
17935var varuint = require('varuint-bitcoin')
8b095871 17936
9987f0c1
IC
17937function varSliceSize (someScript) {
17938 var length = someScript.length
8b095871 17939
9987f0c1
IC
17940 return varuint.encodingLength(length) + length
17941}
8b095871 17942
9987f0c1
IC
17943function vectorSize (someVector) {
17944 var length = someVector.length
17945
17946 return varuint.encodingLength(length) + someVector.reduce(function (sum, witness) {
17947 return sum + varSliceSize(witness)
17948 }, 0)
8b095871
IC
17949}
17950
9987f0c1
IC
17951function Transaction () {
17952 this.version = 1
17953 this.locktime = 0
17954 this.ins = []
17955 this.outs = []
17956}
8b095871 17957
9987f0c1
IC
17958Transaction.DEFAULT_SEQUENCE = 0xffffffff
17959Transaction.SIGHASH_ALL = 0x01
17960Transaction.SIGHASH_NONE = 0x02
17961Transaction.SIGHASH_SINGLE = 0x03
17962Transaction.SIGHASH_ANYONECANPAY = 0x80
17963Transaction.ADVANCED_TRANSACTION_MARKER = 0x00
17964Transaction.ADVANCED_TRANSACTION_FLAG = 0x01
8b095871 17965
9987f0c1
IC
17966var EMPTY_SCRIPT = Buffer.allocUnsafe(0)
17967var EMPTY_WITNESS = []
17968var ZERO = Buffer.from('0000000000000000000000000000000000000000000000000000000000000000', 'hex')
17969var ONE = Buffer.from('0000000000000000000000000000000000000000000000000000000000000001', 'hex')
17970var VALUE_UINT64_MAX = Buffer.from('ffffffffffffffff', 'hex')
17971var BLANK_OUTPUT = {
17972 script: EMPTY_SCRIPT,
17973 valueBuffer: VALUE_UINT64_MAX
17974}
8b095871 17975
9987f0c1
IC
17976Transaction.fromBuffer = function (buffer, __noStrict) {
17977 var offset = 0
17978 function readSlice (n) {
17979 offset += n
17980 return buffer.slice(offset - n, offset)
17981 }
8b095871 17982
9987f0c1
IC
17983 function readUInt32 () {
17984 var i = buffer.readUInt32LE(offset)
17985 offset += 4
17986 return i
17987 }
8b095871 17988
9987f0c1
IC
17989 function readInt32 () {
17990 var i = buffer.readInt32LE(offset)
17991 offset += 4
17992 return i
17993 }
8b095871 17994
9987f0c1
IC
17995 function readUInt64 () {
17996 var i = bufferutils.readUInt64LE(buffer, offset)
17997 offset += 8
17998 return i
8b095871
IC
17999 }
18000
9987f0c1
IC
18001 function readVarInt () {
18002 var vi = varuint.decode(buffer, offset)
18003 offset += varuint.decode.bytes
18004 return vi
18005 }
8b095871 18006
9987f0c1
IC
18007 function readVarSlice () {
18008 return readSlice(readVarInt())
18009 }
8b095871 18010
9987f0c1
IC
18011 function readVector () {
18012 var count = readVarInt()
18013 var vector = []
18014 for (var i = 0; i < count; i++) vector.push(readVarSlice())
18015 return vector
18016 }
8b095871 18017
9987f0c1
IC
18018 var tx = new Transaction()
18019 tx.version = readInt32()
8b095871 18020
9987f0c1
IC
18021 var marker = buffer.readUInt8(offset)
18022 var flag = buffer.readUInt8(offset + 1)
8b095871 18023
9987f0c1
IC
18024 var hasWitnesses = false
18025 if (marker === Transaction.ADVANCED_TRANSACTION_MARKER &&
18026 flag === Transaction.ADVANCED_TRANSACTION_FLAG) {
18027 offset += 2
18028 hasWitnesses = true
18029 }
8b095871 18030
9987f0c1
IC
18031 var vinLen = readVarInt()
18032 for (var i = 0; i < vinLen; ++i) {
18033 tx.ins.push({
18034 hash: readSlice(32),
18035 index: readUInt32(),
18036 script: readVarSlice(),
18037 sequence: readUInt32(),
18038 witness: EMPTY_WITNESS
18039 })
18040 }
8b095871 18041
9987f0c1
IC
18042 var voutLen = readVarInt()
18043 for (i = 0; i < voutLen; ++i) {
18044 tx.outs.push({
18045 value: readUInt64(),
18046 script: readVarSlice()
18047 })
8b095871
IC
18048 }
18049
9987f0c1
IC
18050 if (hasWitnesses) {
18051 for (i = 0; i < vinLen; ++i) {
18052 tx.ins[i].witness = readVector()
18053 }
8b095871 18054
9987f0c1
IC
18055 // was this pointless?
18056 if (!tx.hasWitnesses()) throw new Error('Transaction has superfluous witness data')
18057 }
8b095871 18058
9987f0c1 18059 tx.locktime = readUInt32()
8b095871 18060
9987f0c1
IC
18061 if (__noStrict) return tx
18062 if (offset !== buffer.length) throw new Error('Transaction has unexpected data')
8b095871 18063
9987f0c1
IC
18064 return tx
18065}
8b095871 18066
9987f0c1
IC
18067Transaction.fromHex = function (hex) {
18068 return Transaction.fromBuffer(Buffer.from(hex, 'hex'))
8b095871 18069}
8b095871 18070
9987f0c1
IC
18071Transaction.isCoinbaseHash = function (buffer) {
18072 typeforce(types.Hash256bit, buffer)
18073 for (var i = 0; i < 32; ++i) {
18074 if (buffer[i] !== 0) return false
8b095871 18075 }
9987f0c1 18076 return true
8b095871 18077}
9987f0c1
IC
18078
18079Transaction.prototype.isCoinbase = function () {
18080 return this.ins.length === 1 && Transaction.isCoinbaseHash(this.ins[0].hash)
8b095871
IC
18081}
18082
9987f0c1
IC
18083Transaction.prototype.addInput = function (hash, index, sequence, scriptSig) {
18084 typeforce(types.tuple(
18085 types.Hash256bit,
18086 types.UInt32,
18087 types.maybe(types.UInt32),
18088 types.maybe(types.Buffer)
18089 ), arguments)
8b095871 18090
9987f0c1
IC
18091 if (types.Null(sequence)) {
18092 sequence = Transaction.DEFAULT_SEQUENCE
18093 }
18094
18095 // Add the input and return the input's index
18096 return (this.ins.push({
18097 hash: hash,
18098 index: index,
18099 script: scriptSig || EMPTY_SCRIPT,
18100 sequence: sequence,
18101 witness: EMPTY_WITNESS
18102 }) - 1)
8b095871
IC
18103}
18104
9987f0c1
IC
18105Transaction.prototype.addOutput = function (scriptPubKey, value) {
18106 typeforce(types.tuple(types.Buffer, types.Satoshi), arguments)
8b095871 18107
9987f0c1
IC
18108 // Add the output and return the output's index
18109 return (this.outs.push({
18110 script: scriptPubKey,
18111 value: value
18112 }) - 1)
8b095871
IC
18113}
18114
9987f0c1
IC
18115Transaction.prototype.hasWitnesses = function () {
18116 return this.ins.some(function (x) {
18117 return x.witness.length !== 0
18118 })
18119}
8b095871 18120
9987f0c1
IC
18121Transaction.prototype.weight = function () {
18122 var base = this.__byteLength(false)
18123 var total = this.__byteLength(true)
18124 return base * 3 + total
8b095871
IC
18125}
18126
9987f0c1
IC
18127Transaction.prototype.virtualSize = function () {
18128 return Math.ceil(this.weight() / 4)
18129}
8b095871 18130
9987f0c1
IC
18131Transaction.prototype.byteLength = function () {
18132 return this.__byteLength(true)
8b095871
IC
18133}
18134
9987f0c1
IC
18135Transaction.prototype.__byteLength = function (__allowWitness) {
18136 var hasWitnesses = __allowWitness && this.hasWitnesses()
18137
18138 return (
18139 (hasWitnesses ? 10 : 8) +
18140 varuint.encodingLength(this.ins.length) +
18141 varuint.encodingLength(this.outs.length) +
18142 this.ins.reduce(function (sum, input) { return sum + 40 + varSliceSize(input.script) }, 0) +
18143 this.outs.reduce(function (sum, output) { return sum + 8 + varSliceSize(output.script) }, 0) +
18144 (hasWitnesses ? this.ins.reduce(function (sum, input) { return sum + vectorSize(input.witness) }, 0) : 0)
18145 )
8b095871
IC
18146}
18147
9987f0c1
IC
18148Transaction.prototype.clone = function () {
18149 var newTx = new Transaction()
18150 newTx.version = this.version
18151 newTx.locktime = this.locktime
18152
18153 newTx.ins = this.ins.map(function (txIn) {
18154 return {
18155 hash: txIn.hash,
18156 index: txIn.index,
18157 script: txIn.script,
18158 sequence: txIn.sequence,
18159 witness: txIn.witness
8b095871 18160 }
9987f0c1 18161 })
8b095871 18162
9987f0c1
IC
18163 newTx.outs = this.outs.map(function (txOut) {
18164 return {
18165 script: txOut.script,
18166 value: txOut.value
18167 }
18168 })
8b095871 18169
9987f0c1
IC
18170 return newTx
18171}
18172
18173/**
18174 * Hash transaction for signing a specific input.
18175 *
18176 * Bitcoin uses a different hash for each signed transaction input.
18177 * This method copies the transaction, makes the necessary changes based on the
18178 * hashType, and then hashes the result.
18179 * This hash can then be used to sign the provided transaction input.
18180 */
18181Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
18182 typeforce(types.tuple(types.UInt32, types.Buffer, /* types.UInt8 */ types.Number), arguments)
18183
18184 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L29
18185 if (inIndex >= this.ins.length) return ONE
18186
18187 // ignore OP_CODESEPARATOR
18188 var ourScript = bscript.compile(bscript.decompile(prevOutScript).filter(function (x) {
18189 return x !== opcodes.OP_CODESEPARATOR
18190 }))
18191
18192 var txTmp = this.clone()
18193
18194 // SIGHASH_NONE: ignore all outputs? (wildcard payee)
18195 if ((hashType & 0x1f) === Transaction.SIGHASH_NONE) {
18196 txTmp.outs = []
18197
18198 // ignore sequence numbers (except at inIndex)
18199 txTmp.ins.forEach(function (input, i) {
18200 if (i === inIndex) return
18201
18202 input.sequence = 0
18203 })
18204
18205 // SIGHASH_SINGLE: ignore all outputs, except at the same index?
18206 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE) {
18207 // https://github.com/bitcoin/bitcoin/blob/master/src/test/sighash_tests.cpp#L60
18208 if (inIndex >= this.outs.length) return ONE
18209
18210 // truncate outputs after
18211 txTmp.outs.length = inIndex + 1
18212
18213 // "blank" outputs before
18214 for (var i = 0; i < inIndex; i++) {
18215 txTmp.outs[i] = BLANK_OUTPUT
8b095871
IC
18216 }
18217
9987f0c1
IC
18218 // ignore sequence numbers (except at inIndex)
18219 txTmp.ins.forEach(function (input, y) {
18220 if (y === inIndex) return
8b095871 18221
9987f0c1
IC
18222 input.sequence = 0
18223 })
8b095871 18224 }
8b095871 18225
9987f0c1
IC
18226 // SIGHASH_ANYONECANPAY: ignore inputs entirely?
18227 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
18228 txTmp.ins = [txTmp.ins[inIndex]]
18229 txTmp.ins[0].script = ourScript
18230
18231 // SIGHASH_ALL: only ignore input scripts
18232 } else {
18233 // "blank" others input scripts
18234 txTmp.ins.forEach(function (input) { input.script = EMPTY_SCRIPT })
18235 txTmp.ins[inIndex].script = ourScript
18236 }
18237
18238 // serialize and hash
18239 var buffer = Buffer.allocUnsafe(txTmp.__byteLength(false) + 4)
18240 buffer.writeInt32LE(hashType, buffer.length - 4)
18241 txTmp.__toBuffer(buffer, 0, false)
18242
18243 return bcrypto.hash256(buffer)
8b095871
IC
18244}
18245
9987f0c1
IC
18246Transaction.prototype.hashForWitnessV0 = function (inIndex, prevOutScript, value, hashType) {
18247 typeforce(types.tuple(types.UInt32, types.Buffer, types.Satoshi, types.UInt32), arguments)
18248
18249 var tbuffer, toffset
18250 function writeSlice (slice) { toffset += slice.copy(tbuffer, toffset) }
18251 function writeUInt32 (i) { toffset = tbuffer.writeUInt32LE(i, toffset) }
18252 function writeUInt64 (i) { toffset = bufferutils.writeUInt64LE(tbuffer, i, toffset) }
18253 function writeVarInt (i) {
18254 varuint.encode(i, tbuffer, toffset)
18255 toffset += varuint.encode.bytes
18256 }
18257 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18258
18259 var hashOutputs = ZERO
18260 var hashPrevouts = ZERO
18261 var hashSequence = ZERO
18262
18263 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY)) {
18264 tbuffer = Buffer.allocUnsafe(36 * this.ins.length)
18265 toffset = 0
18266
18267 this.ins.forEach(function (txIn) {
18268 writeSlice(txIn.hash)
18269 writeUInt32(txIn.index)
18270 })
18271
18272 hashPrevouts = bcrypto.hash256(tbuffer)
18273 }
18274
18275 if (!(hashType & Transaction.SIGHASH_ANYONECANPAY) &&
18276 (hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18277 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18278 tbuffer = Buffer.allocUnsafe(4 * this.ins.length)
18279 toffset = 0
18280
18281 this.ins.forEach(function (txIn) {
18282 writeUInt32(txIn.sequence)
18283 })
18284
18285 hashSequence = bcrypto.hash256(tbuffer)
18286 }
18287
18288 if ((hashType & 0x1f) !== Transaction.SIGHASH_SINGLE &&
18289 (hashType & 0x1f) !== Transaction.SIGHASH_NONE) {
18290 var txOutsSize = this.outs.reduce(function (sum, output) {
18291 return sum + 8 + varSliceSize(output.script)
18292 }, 0)
18293
18294 tbuffer = Buffer.allocUnsafe(txOutsSize)
18295 toffset = 0
18296
18297 this.outs.forEach(function (out) {
18298 writeUInt64(out.value)
18299 writeVarSlice(out.script)
18300 })
18301
18302 hashOutputs = bcrypto.hash256(tbuffer)
18303 } else if ((hashType & 0x1f) === Transaction.SIGHASH_SINGLE && inIndex < this.outs.length) {
18304 var output = this.outs[inIndex]
18305
18306 tbuffer = Buffer.allocUnsafe(8 + varSliceSize(output.script))
18307 toffset = 0
18308 writeUInt64(output.value)
18309 writeVarSlice(output.script)
18310
18311 hashOutputs = bcrypto.hash256(tbuffer)
18312 }
18313
18314 tbuffer = Buffer.allocUnsafe(156 + varSliceSize(prevOutScript))
18315 toffset = 0
18316
18317 var input = this.ins[inIndex]
18318 writeUInt32(this.version)
18319 writeSlice(hashPrevouts)
18320 writeSlice(hashSequence)
18321 writeSlice(input.hash)
18322 writeUInt32(input.index)
18323 writeVarSlice(prevOutScript)
18324 writeUInt64(value)
18325 writeUInt32(input.sequence)
18326 writeSlice(hashOutputs)
18327 writeUInt32(this.locktime)
18328 writeUInt32(hashType)
18329 return bcrypto.hash256(tbuffer)
8b095871
IC
18330}
18331
9987f0c1
IC
18332Transaction.prototype.getHash = function () {
18333 return bcrypto.hash256(this.__toBuffer(undefined, undefined, false))
18334}
8b095871 18335
9987f0c1
IC
18336Transaction.prototype.getId = function () {
18337 // transaction hash's are displayed in reverse order
18338 return this.getHash().reverse().toString('hex')
18339}
8b095871 18340
9987f0c1
IC
18341Transaction.prototype.toBuffer = function (buffer, initialOffset) {
18342 return this.__toBuffer(buffer, initialOffset, true)
18343}
8b095871 18344
9987f0c1
IC
18345Transaction.prototype.__toBuffer = function (buffer, initialOffset, __allowWitness) {
18346 if (!buffer) buffer = Buffer.allocUnsafe(this.__byteLength(__allowWitness))
8b095871 18347
9987f0c1
IC
18348 var offset = initialOffset || 0
18349 function writeSlice (slice) { offset += slice.copy(buffer, offset) }
18350 function writeUInt8 (i) { offset = buffer.writeUInt8(i, offset) }
18351 function writeUInt32 (i) { offset = buffer.writeUInt32LE(i, offset) }
18352 function writeInt32 (i) { offset = buffer.writeInt32LE(i, offset) }
18353 function writeUInt64 (i) { offset = bufferutils.writeUInt64LE(buffer, i, offset) }
18354 function writeVarInt (i) {
18355 varuint.encode(i, buffer, offset)
18356 offset += varuint.encode.bytes
18357 }
18358 function writeVarSlice (slice) { writeVarInt(slice.length); writeSlice(slice) }
18359 function writeVector (vector) { writeVarInt(vector.length); vector.forEach(writeVarSlice) }
8b095871 18360
9987f0c1 18361 writeInt32(this.version)
8b095871 18362
9987f0c1 18363 var hasWitnesses = __allowWitness && this.hasWitnesses()
8b095871 18364
9987f0c1
IC
18365 if (hasWitnesses) {
18366 writeUInt8(Transaction.ADVANCED_TRANSACTION_MARKER)
18367 writeUInt8(Transaction.ADVANCED_TRANSACTION_FLAG)
18368 }
8b095871 18369
9987f0c1 18370 writeVarInt(this.ins.length)
8b095871 18371
9987f0c1
IC
18372 this.ins.forEach(function (txIn) {
18373 writeSlice(txIn.hash)
18374 writeUInt32(txIn.index)
18375 writeVarSlice(txIn.script)
18376 writeUInt32(txIn.sequence)
18377 })
8b095871 18378
9987f0c1
IC
18379 writeVarInt(this.outs.length)
18380 this.outs.forEach(function (txOut) {
18381 if (!txOut.valueBuffer) {
18382 writeUInt64(txOut.value)
18383 } else {
18384 writeSlice(txOut.valueBuffer)
8b095871 18385 }
8b095871 18386
9987f0c1
IC
18387 writeVarSlice(txOut.script)
18388 })
8b095871 18389
9987f0c1
IC
18390 if (hasWitnesses) {
18391 this.ins.forEach(function (input) {
18392 writeVector(input.witness)
18393 })
18394 }
8b095871 18395
9987f0c1 18396 writeUInt32(this.locktime)
8b095871 18397
9987f0c1
IC
18398 // avoid slicing unless necessary
18399 if (initialOffset !== undefined) return buffer.slice(initialOffset, offset)
18400 return buffer
18401}
8b095871 18402
9987f0c1
IC
18403Transaction.prototype.toHex = function () {
18404 return this.toBuffer().toString('hex')
18405}
8b095871 18406
9987f0c1
IC
18407Transaction.prototype.setInputScript = function (index, scriptSig) {
18408 typeforce(types.tuple(types.Number, types.Buffer), arguments)
8b095871 18409
9987f0c1
IC
18410 this.ins[index].script = scriptSig
18411}
8b095871 18412
9987f0c1
IC
18413Transaction.prototype.setWitness = function (index, witness) {
18414 typeforce(types.tuple(types.Number, [types.Buffer]), arguments)
18415
18416 this.ins[index].witness = witness
18417}
18418
18419module.exports = Transaction
18420
18421},{"./bufferutils":44,"./crypto":45,"./script":52,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109,"varuint-bitcoin":111}],77:[function(require,module,exports){
18422var Buffer = require('safe-buffer').Buffer
18423var baddress = require('./address')
18424var bcrypto = require('./crypto')
18425var bscript = require('./script')
18426var networks = require('./networks')
18427var ops = require('bitcoin-ops')
18428var typeforce = require('typeforce')
18429var types = require('./types')
18430var scriptTypes = bscript.types
18431var SIGNABLE = [bscript.types.P2PKH, bscript.types.P2PK, bscript.types.MULTISIG]
18432var P2SH = SIGNABLE.concat([bscript.types.P2WPKH, bscript.types.P2WSH])
18433
18434var ECPair = require('./ecpair')
18435var ECSignature = require('./ecsignature')
18436var Transaction = require('./transaction')
18437
18438function extractChunks (type, chunks, script) {
18439 var pubKeys = []
18440 var signatures = []
18441 switch (type) {
18442 case scriptTypes.P2PKH:
18443 // if (redeemScript) throw new Error('Nonstandard... P2SH(P2PKH)')
18444 pubKeys = chunks.slice(1)
18445 signatures = chunks.slice(0, 1)
18446 break
18447
18448 case scriptTypes.P2PK:
18449 pubKeys[0] = script ? bscript.pubKey.output.decode(script) : undefined
18450 signatures = chunks.slice(0, 1)
18451 break
18452
18453 case scriptTypes.MULTISIG:
18454 if (script) {
18455 var multisig = bscript.multisig.output.decode(script)
18456 pubKeys = multisig.pubKeys
18457 }
18458
18459 signatures = chunks.slice(1).map(function (chunk) {
18460 return chunk.length === 0 ? undefined : chunk
18461 })
18462 break
18463 }
18464
18465 return {
18466 pubKeys: pubKeys,
18467 signatures: signatures
18468 }
18469}
18470function expandInput (scriptSig, witnessStack) {
18471 if (scriptSig.length === 0 && witnessStack.length === 0) return {}
18472
18473 var prevOutScript
18474 var prevOutType
18475 var scriptType
18476 var script
18477 var redeemScript
18478 var witnessScript
18479 var witnessScriptType
18480 var redeemScriptType
18481 var witness = false
18482 var p2wsh = false
18483 var p2sh = false
18484 var witnessProgram
18485 var chunks
18486
18487 var scriptSigChunks = bscript.decompile(scriptSig)
18488 var sigType = bscript.classifyInput(scriptSigChunks, true)
18489 if (sigType === scriptTypes.P2SH) {
18490 p2sh = true
18491 redeemScript = scriptSigChunks[scriptSigChunks.length - 1]
18492 redeemScriptType = bscript.classifyOutput(redeemScript)
18493 prevOutScript = bscript.scriptHash.output.encode(bcrypto.hash160(redeemScript))
18494 prevOutType = scriptTypes.P2SH
18495 script = redeemScript
18496 }
18497
18498 var classifyWitness = bscript.classifyWitness(witnessStack)
18499 if (classifyWitness === scriptTypes.P2WSH) {
18500 witnessScript = witnessStack[witnessStack.length - 1]
18501 witnessScriptType = bscript.classifyOutput(witnessScript)
18502 p2wsh = true
18503 if (scriptSig.length === 0) {
18504 prevOutScript = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18505 prevOutType = scriptTypes.P2WSH
18506 if (typeof redeemScript !== 'undefined') {
18507 throw new Error('Redeem script given when unnecessary')
18508 }
18509 // bare witness
18510 } else {
18511 if (!redeemScript) {
18512 throw new Error('No redeemScript provided for P2WSH, but scriptSig non-empty')
18513 }
18514 witnessProgram = bscript.witnessScriptHash.output.encode(bcrypto.sha256(witnessScript))
18515 if (!redeemScript.equals(witnessProgram)) {
18516 throw new Error('Redeem script didn\'t match witnessScript')
18517 }
8b095871 18518 }
8b095871 18519
9987f0c1
IC
18520 if (SIGNABLE.indexOf(bscript.classifyOutput(witnessScript)) === -1) {
18521 throw new Error('unsupported witness script')
18522 }
18523 script = witnessScript
18524 scriptType = witnessScriptType
18525 chunks = witnessStack.slice(0, -1)
18526 } else if (classifyWitness === scriptTypes.P2WPKH) {
18527 var key = witnessStack[witnessStack.length - 1]
18528 var keyHash = bcrypto.hash160(key)
18529 if (scriptSig.length === 0) {
18530 prevOutScript = bscript.witnessPubKeyHash.output.encode(keyHash)
18531 prevOutType = scriptTypes.P2WPKH
18532 if (typeof redeemScript !== 'undefined') {
18533 throw new Error('Redeem script given when unnecessary')
18534 }
18535 } else {
18536 if (!redeemScript) {
18537 throw new Error('No redeemScript provided for P2WPKH, but scriptSig wasn\'t empty')
18538 }
18539 witnessProgram = bscript.witnessPubKeyHash.output.encode(keyHash)
18540 if (!redeemScript.equals(witnessProgram)) {
18541 throw new Error('Redeem script did not have the right witness program')
18542 }
18543 }
8b095871 18544
9987f0c1
IC
18545 scriptType = scriptTypes.P2PKH
18546 chunks = witnessStack
18547 } else if (redeemScript) {
18548 if (P2SH.indexOf(redeemScriptType) === -1) {
18549 throw new Error('Bad redeemscript!')
8b095871 18550 }
8b095871 18551
9987f0c1
IC
18552 script = redeemScript
18553 scriptType = redeemScriptType
18554 chunks = scriptSigChunks.slice(0, -1)
18555 } else {
18556 prevOutType = scriptType = bscript.classifyInput(scriptSig)
18557 chunks = scriptSigChunks
8b095871 18558 }
8b095871 18559
9987f0c1 18560 var expanded = extractChunks(scriptType, chunks, script)
8b095871 18561
9987f0c1
IC
18562 var result = {
18563 pubKeys: expanded.pubKeys,
18564 signatures: expanded.signatures,
18565 prevOutScript: prevOutScript,
18566 prevOutType: prevOutType,
18567 signType: scriptType,
18568 signScript: script,
18569 witness: Boolean(witness)
18570 }
8b095871 18571
9987f0c1
IC
18572 if (p2sh) {
18573 result.redeemScript = redeemScript
18574 result.redeemScriptType = redeemScriptType
18575 }
8b095871 18576
9987f0c1
IC
18577 if (p2wsh) {
18578 result.witnessScript = witnessScript
18579 result.witnessScriptType = witnessScriptType
8b095871
IC
18580 }
18581
9987f0c1 18582 return result
8b095871
IC
18583}
18584
9987f0c1
IC
18585// could be done in expandInput, but requires the original Transaction for hashForSignature
18586function fixMultisigOrder (input, transaction, vin) {
18587 if (input.redeemScriptType !== scriptTypes.MULTISIG || !input.redeemScript) return
18588 if (input.pubKeys.length === input.signatures.length) return
8b095871 18589
9987f0c1 18590 var unmatched = input.signatures.concat()
8b095871 18591
9987f0c1
IC
18592 input.signatures = input.pubKeys.map(function (pubKey) {
18593 var keyPair = ECPair.fromPublicKeyBuffer(pubKey)
18594 var match
8b095871 18595
9987f0c1
IC
18596 // check for a signature
18597 unmatched.some(function (signature, i) {
18598 // skip if undefined || OP_0
18599 if (!signature) return false
8b095871 18600
9987f0c1
IC
18601 // TODO: avoid O(n) hashForSignature
18602 var parsed = ECSignature.parseScriptSignature(signature)
18603 var hash = transaction.hashForSignature(vin, input.redeemScript, parsed.hashType)
8b095871 18604
9987f0c1
IC
18605 // skip if signature does not match pubKey
18606 if (!keyPair.verify(hash, parsed.signature)) return false
8b095871 18607
9987f0c1
IC
18608 // remove matched signature from unmatched
18609 unmatched[i] = undefined
18610 match = signature
8b095871 18611
9987f0c1
IC
18612 return true
18613 })
8b095871 18614
9987f0c1
IC
18615 return match
18616 })
18617}
8b095871 18618
9987f0c1
IC
18619function expandOutput (script, scriptType, ourPubKey) {
18620 typeforce(types.Buffer, script)
8b095871 18621
9987f0c1
IC
18622 var scriptChunks = bscript.decompile(script)
18623 if (!scriptType) {
18624 scriptType = bscript.classifyOutput(script)
8b095871 18625 }
8b095871 18626
9987f0c1 18627 var pubKeys = []
8b095871 18628
9987f0c1
IC
18629 switch (scriptType) {
18630 // does our hash160(pubKey) match the output scripts?
18631 case scriptTypes.P2PKH:
18632 if (!ourPubKey) break
8b095871 18633
9987f0c1
IC
18634 var pkh1 = scriptChunks[2]
18635 var pkh2 = bcrypto.hash160(ourPubKey)
18636 if (pkh1.equals(pkh2)) pubKeys = [ourPubKey]
18637 break
8b095871 18638
9987f0c1
IC
18639 // does our hash160(pubKey) match the output scripts?
18640 case scriptTypes.P2WPKH:
18641 if (!ourPubKey) break
8b095871 18642
9987f0c1
IC
18643 var wpkh1 = scriptChunks[1]
18644 var wpkh2 = bcrypto.hash160(ourPubKey)
18645 if (wpkh1.equals(wpkh2)) pubKeys = [ourPubKey]
18646 break
8b095871 18647
9987f0c1
IC
18648 case scriptTypes.P2PK:
18649 pubKeys = scriptChunks.slice(0, 1)
18650 break
18651
18652 case scriptTypes.MULTISIG:
18653 pubKeys = scriptChunks.slice(1, -2)
18654 break
8b095871 18655
9987f0c1
IC
18656 default: return { scriptType: scriptType }
18657 }
8b095871 18658
9987f0c1
IC
18659 return {
18660 pubKeys: pubKeys,
18661 scriptType: scriptType,
18662 signatures: pubKeys.map(function () { return undefined })
18663 }
8b095871
IC
18664}
18665
9987f0c1
IC
18666function checkP2shInput (input, redeemScriptHash) {
18667 if (input.prevOutType) {
18668 if (input.prevOutType !== scriptTypes.P2SH) throw new Error('PrevOutScript must be P2SH')
8b095871 18669
9987f0c1
IC
18670 var prevOutScriptScriptHash = bscript.decompile(input.prevOutScript)[1]
18671 if (!prevOutScriptScriptHash.equals(redeemScriptHash)) throw new Error('Inconsistent hash160(RedeemScript)')
18672 }
8b095871
IC
18673}
18674
9987f0c1
IC
18675function checkP2WSHInput (input, witnessScriptHash) {
18676 if (input.prevOutType) {
18677 if (input.prevOutType !== scriptTypes.P2WSH) throw new Error('PrevOutScript must be P2WSH')
8b095871 18678
9987f0c1
IC
18679 var scriptHash = bscript.decompile(input.prevOutScript)[1]
18680 if (!scriptHash.equals(witnessScriptHash)) throw new Error('Inconsistent sha25(WitnessScript)')
18681 }
8b095871
IC
18682}
18683
9987f0c1
IC
18684function prepareInput (input, kpPubKey, redeemScript, witnessValue, witnessScript) {
18685 var expanded
18686 var prevOutType
18687 var prevOutScript
8b095871 18688
9987f0c1
IC
18689 var p2sh = false
18690 var p2shType
18691 var redeemScriptHash
18692
18693 var witness = false
18694 var p2wsh = false
18695 var witnessType
18696 var witnessScriptHash
18697
18698 var signType
18699 var signScript
18700
18701 if (redeemScript && witnessScript) {
18702 redeemScriptHash = bcrypto.hash160(redeemScript)
18703 witnessScriptHash = bcrypto.sha256(witnessScript)
18704 checkP2shInput(input, redeemScriptHash)
18705
18706 if (!redeemScript.equals(bscript.witnessScriptHash.output.encode(witnessScriptHash))) throw new Error('Witness script inconsistent with redeem script')
18707
18708 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18709 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18710 prevOutType = bscript.types.P2SH
18711 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18712 p2sh = witness = p2wsh = true
18713 p2shType = bscript.types.P2WSH
18714 signType = witnessType = expanded.scriptType
18715 signScript = witnessScript
18716 } else if (redeemScript) {
18717 redeemScriptHash = bcrypto.hash160(redeemScript)
18718 checkP2shInput(input, redeemScriptHash)
18719
18720 expanded = expandOutput(redeemScript, undefined, kpPubKey)
18721 if (!expanded.pubKeys) throw new Error('RedeemScript not supported "' + bscript.toASM(redeemScript) + '"')
18722
18723 prevOutType = bscript.types.P2SH
18724 prevOutScript = bscript.scriptHash.output.encode(redeemScriptHash)
18725 p2sh = true
18726 signType = p2shType = expanded.scriptType
18727 signScript = redeemScript
18728 witness = signType === bscript.types.P2WPKH
18729 } else if (witnessScript) {
18730 witnessScriptHash = bcrypto.sha256(witnessScript)
18731 checkP2WSHInput(input, witnessScriptHash)
18732
18733 expanded = expandOutput(witnessScript, undefined, kpPubKey)
18734 if (!expanded.pubKeys) throw new Error('WitnessScript not supported "' + bscript.toASM(redeemScript) + '"')
18735
18736 prevOutType = bscript.types.P2WSH
18737 prevOutScript = bscript.witnessScriptHash.output.encode(witnessScriptHash)
18738 witness = p2wsh = true
18739 signType = witnessType = expanded.scriptType
18740 signScript = witnessScript
18741 } else if (input.prevOutType) {
18742 // embedded scripts are not possible without a redeemScript
18743 if (input.prevOutType === scriptTypes.P2SH ||
18744 input.prevOutType === scriptTypes.P2WSH) {
18745 throw new Error('PrevOutScript is ' + input.prevOutType + ', requires redeemScript')
18746 }
18747
18748 prevOutType = input.prevOutType
18749 prevOutScript = input.prevOutScript
18750 expanded = expandOutput(input.prevOutScript, input.prevOutType, kpPubKey)
18751 if (!expanded.pubKeys) return
18752
18753 witness = (input.prevOutType === scriptTypes.P2WPKH)
18754 signType = prevOutType
18755 signScript = prevOutScript
18756 } else {
18757 prevOutScript = bscript.pubKeyHash.output.encode(bcrypto.hash160(kpPubKey))
18758 expanded = expandOutput(prevOutScript, scriptTypes.P2PKH, kpPubKey)
18759 prevOutType = scriptTypes.P2PKH
18760 witness = false
18761 signType = prevOutType
18762 signScript = prevOutScript
18763 }
8b095871 18764
9987f0c1
IC
18765 if (witness && !types.Satoshi(witnessValue)) {
18766 throw new Error('Input was witness but not given witness value')
18767 }
8b095871 18768
9987f0c1
IC
18769 if (signType === scriptTypes.P2WPKH) {
18770 signScript = bscript.pubKeyHash.output.encode(bscript.witnessPubKeyHash.output.decode(signScript))
18771 }
8b095871 18772
9987f0c1
IC
18773 if (p2sh) {
18774 input.redeemScript = redeemScript
18775 input.redeemScriptType = p2shType
18776 }
8b095871 18777
9987f0c1
IC
18778 if (p2wsh) {
18779 input.witnessScript = witnessScript
18780 input.witnessScriptType = witnessType
18781 }
8b095871 18782
9987f0c1
IC
18783 input.pubKeys = expanded.pubKeys
18784 input.signatures = expanded.signatures
18785 input.signScript = signScript
18786 input.signType = signType
18787 input.prevOutScript = prevOutScript
18788 input.prevOutType = prevOutType
18789 input.witness = witness
8b095871
IC
18790}
18791
9987f0c1
IC
18792function buildStack (type, signatures, pubKeys, allowIncomplete) {
18793 if (type === scriptTypes.P2PKH) {
18794 if (signatures.length === 1 && Buffer.isBuffer(signatures[0]) && pubKeys.length === 1) return bscript.pubKeyHash.input.encodeStack(signatures[0], pubKeys[0])
18795 } else if (type === scriptTypes.P2PK) {
18796 if (signatures.length === 1 && Buffer.isBuffer(signatures[0])) return bscript.pubKey.input.encodeStack(signatures[0])
18797 } else if (type === scriptTypes.MULTISIG) {
18798 if (signatures.length > 0) {
18799 signatures = signatures.map(function (signature) {
18800 return signature || ops.OP_0
18801 })
18802 if (!allowIncomplete) {
18803 // remove blank signatures
18804 signatures = signatures.filter(function (x) { return x !== ops.OP_0 })
18805 }
8b095871 18806
9987f0c1
IC
18807 return bscript.multisig.input.encodeStack(signatures /* see if it's necessary first */)
18808 }
18809 } else {
18810 throw new Error('Not yet supported')
18811 }
8b095871 18812
9987f0c1 18813 if (!allowIncomplete) throw new Error('Not enough signatures provided')
8b095871 18814
9987f0c1 18815 return []
8b095871
IC
18816}
18817
9987f0c1
IC
18818function buildInput (input, allowIncomplete) {
18819 var scriptType = input.prevOutType
18820 var sig = []
18821 var witness = []
18822 if (SIGNABLE.indexOf(scriptType) !== -1) {
18823 sig = buildStack(scriptType, input.signatures, input.pubKeys, allowIncomplete)
8b095871
IC
18824 }
18825
9987f0c1
IC
18826 var p2sh = false
18827 if (scriptType === bscript.types.P2SH) {
18828 // We can remove this error later when we have a guarantee prepareInput
18829 // rejects unsignable scripts - it MUST be signable at this point.
18830 if (P2SH.indexOf(input.redeemScriptType) === -1) {
18831 throw new Error('Impossible to sign this type')
18832 }
18833 p2sh = true
18834 if (SIGNABLE.indexOf(input.redeemScriptType) !== -1) {
18835 sig = buildStack(input.redeemScriptType, input.signatures, input.pubKeys, allowIncomplete)
18836 }
18837 // If it wasn't SIGNABLE, it's witness, defer to that
18838 scriptType = input.redeemScriptType
8b095871
IC
18839 }
18840
9987f0c1
IC
18841 if (scriptType === bscript.types.P2WPKH) {
18842 // P2WPKH is a special case of P2PKH
18843 witness = buildStack(bscript.types.P2PKH, input.signatures, input.pubKeys, allowIncomplete)
18844 } else if (scriptType === bscript.types.P2WSH) {
18845 // We can remove this check later
18846 if (SIGNABLE.indexOf(input.witnessScriptType) !== -1) {
18847 witness = buildStack(input.witnessScriptType, input.signatures, input.pubKeys, allowIncomplete)
18848 witness.push(input.witnessScript)
18849 } else {
18850 // We can remove this error later when we have a guarantee prepareInput
18851 // rejects unsignble scripts - it MUST be signable at this point.
18852 throw new Error()
18853 }
8b095871 18854
9987f0c1 18855 scriptType = input.witnessScriptType
8b095871
IC
18856 }
18857
9987f0c1
IC
18858 // append redeemScript if necessary
18859 if (p2sh) {
18860 sig.push(input.redeemScript)
8b095871
IC
18861 }
18862
9987f0c1
IC
18863 return {
18864 type: scriptType,
18865 script: bscript.compile(sig),
18866 witness: witness
8b095871 18867 }
8b095871
IC
18868}
18869
9987f0c1
IC
18870function TransactionBuilder (network, maximumFeeRate) {
18871 this.prevTxMap = {}
18872 this.network = network || networks.bitcoin
8b095871 18873
9987f0c1
IC
18874 // WARNING: This is __NOT__ to be relied on, its just another potential safety mechanism (safety in-depth)
18875 this.maximumFeeRate = maximumFeeRate || 1000
8b095871 18876
9987f0c1
IC
18877 this.inputs = []
18878 this.tx = new Transaction()
8b095871
IC
18879}
18880
9987f0c1
IC
18881TransactionBuilder.prototype.setLockTime = function (locktime) {
18882 typeforce(types.UInt32, locktime)
8b095871 18883
9987f0c1
IC
18884 // if any signatures exist, throw
18885 if (this.inputs.some(function (input) {
18886 if (!input.signatures) return false
18887
18888 return input.signatures.some(function (s) { return s })
18889 })) {
18890 throw new Error('No, this would invalidate signatures')
18891 }
18892
18893 this.tx.locktime = locktime
8b095871
IC
18894}
18895
9987f0c1
IC
18896TransactionBuilder.prototype.setVersion = function (version) {
18897 typeforce(types.UInt32, version)
8b095871 18898
9987f0c1
IC
18899 // XXX: this might eventually become more complex depending on what the versions represent
18900 this.tx.version = version
18901}
8b095871 18902
9987f0c1
IC
18903TransactionBuilder.fromTransaction = function (transaction, network) {
18904 var txb = new TransactionBuilder(network)
8b095871 18905
9987f0c1
IC
18906 // Copy transaction fields
18907 txb.setVersion(transaction.version)
18908 txb.setLockTime(transaction.locktime)
8b095871 18909
9987f0c1
IC
18910 // Copy outputs (done first to avoid signature invalidation)
18911 transaction.outs.forEach(function (txOut) {
18912 txb.addOutput(txOut.script, txOut.value)
18913 })
8b095871 18914
9987f0c1
IC
18915 // Copy inputs
18916 transaction.ins.forEach(function (txIn) {
18917 txb.__addInputUnsafe(txIn.hash, txIn.index, {
18918 sequence: txIn.sequence,
18919 script: txIn.script,
18920 witness: txIn.witness
18921 })
8b095871
IC
18922 })
18923
9987f0c1
IC
18924 // fix some things not possible through the public API
18925 txb.inputs.forEach(function (input, i) {
18926 fixMultisigOrder(input, transaction, i)
18927 })
8b095871 18928
9987f0c1 18929 return txb
8b095871
IC
18930}
18931
9987f0c1
IC
18932TransactionBuilder.prototype.addInput = function (txHash, vout, sequence, prevOutScript) {
18933 if (!this.__canModifyInputs()) {
18934 throw new Error('No, this would invalidate signatures')
18935 }
8b095871 18936
9987f0c1 18937 var value
8b095871 18938
9987f0c1
IC
18939 // is it a hex string?
18940 if (typeof txHash === 'string') {
18941 // transaction hashs's are displayed in reverse order, un-reverse it
18942 txHash = Buffer.from(txHash, 'hex').reverse()
8b095871 18943
9987f0c1
IC
18944 // is it a Transaction object?
18945 } else if (txHash instanceof Transaction) {
18946 var txOut = txHash.outs[vout]
18947 prevOutScript = txOut.script
18948 value = txOut.value
8b095871 18949
9987f0c1
IC
18950 txHash = txHash.getHash()
18951 }
8b095871 18952
9987f0c1
IC
18953 return this.__addInputUnsafe(txHash, vout, {
18954 sequence: sequence,
18955 prevOutScript: prevOutScript,
18956 value: value
18957 })
18958}
8b095871 18959
9987f0c1
IC
18960TransactionBuilder.prototype.__addInputUnsafe = function (txHash, vout, options) {
18961 if (Transaction.isCoinbaseHash(txHash)) {
18962 throw new Error('coinbase inputs not supported')
18963 }
8b095871 18964
9987f0c1
IC
18965 var prevTxOut = txHash.toString('hex') + ':' + vout
18966 if (this.prevTxMap[prevTxOut] !== undefined) throw new Error('Duplicate TxOut: ' + prevTxOut)
8b095871 18967
9987f0c1 18968 var input = {}
8b095871 18969
9987f0c1
IC
18970 // derive what we can from the scriptSig
18971 if (options.script !== undefined) {
18972 input = expandInput(options.script, options.witness || [])
8b095871
IC
18973 }
18974
9987f0c1
IC
18975 // if an input value was given, retain it
18976 if (options.value !== undefined) {
18977 input.value = options.value
8b095871 18978 }
8b095871 18979
9987f0c1
IC
18980 // derive what we can from the previous transactions output script
18981 if (!input.prevOutScript && options.prevOutScript) {
18982 var prevOutType
8b095871 18983
9987f0c1
IC
18984 if (!input.pubKeys && !input.signatures) {
18985 var expanded = expandOutput(options.prevOutScript)
8b095871 18986
9987f0c1
IC
18987 if (expanded.pubKeys) {
18988 input.pubKeys = expanded.pubKeys
18989 input.signatures = expanded.signatures
18990 }
8b095871 18991
9987f0c1
IC
18992 prevOutType = expanded.scriptType
18993 }
8b095871 18994
9987f0c1
IC
18995 input.prevOutScript = options.prevOutScript
18996 input.prevOutType = prevOutType || bscript.classifyOutput(options.prevOutScript)
18997 }
8b095871 18998
9987f0c1
IC
18999 var vin = this.tx.addInput(txHash, vout, options.sequence, options.scriptSig)
19000 this.inputs[vin] = input
19001 this.prevTxMap[prevTxOut] = vin
8b095871 19002
9987f0c1
IC
19003 return vin
19004}
8b095871 19005
9987f0c1
IC
19006TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
19007 if (!this.__canModifyOutputs()) {
19008 throw new Error('No, this would invalidate signatures')
8b095871
IC
19009 }
19010
9987f0c1
IC
19011 // Attempt to get a script if it's a base58 address string
19012 if (typeof scriptPubKey === 'string') {
19013 scriptPubKey = baddress.toOutputScript(scriptPubKey, this.network)
8b095871 19014 }
8b095871 19015
9987f0c1
IC
19016 return this.tx.addOutput(scriptPubKey, value)
19017}
8b095871 19018
9987f0c1
IC
19019TransactionBuilder.prototype.build = function () {
19020 return this.__build(false)
19021}
19022TransactionBuilder.prototype.buildIncomplete = function () {
19023 return this.__build(true)
19024}
8b095871 19025
9987f0c1
IC
19026TransactionBuilder.prototype.__build = function (allowIncomplete) {
19027 if (!allowIncomplete) {
19028 if (!this.tx.ins.length) throw new Error('Transaction has no inputs')
19029 if (!this.tx.outs.length) throw new Error('Transaction has no outputs')
19030 }
8b095871 19031
9987f0c1
IC
19032 var tx = this.tx.clone()
19033 // Create script signatures from inputs
19034 this.inputs.forEach(function (input, i) {
19035 var scriptType = input.witnessScriptType || input.redeemScriptType || input.prevOutType
19036 if (!scriptType && !allowIncomplete) throw new Error('Transaction is not complete')
19037 var result = buildInput(input, allowIncomplete)
8b095871 19038
9987f0c1
IC
19039 // skip if no result
19040 if (!allowIncomplete) {
19041 if (SIGNABLE.indexOf(result.type) === -1 && result.type !== bscript.types.P2WPKH) {
19042 throw new Error(result.type + ' not supported')
19043 }
19044 }
8b095871 19045
9987f0c1
IC
19046 tx.setInputScript(i, result.script)
19047 tx.setWitness(i, result.witness)
19048 })
8b095871 19049
9987f0c1
IC
19050 if (!allowIncomplete) {
19051 // do not rely on this, its merely a last resort
19052 if (this.__overMaximumFees(tx.byteLength())) {
19053 throw new Error('Transaction has absurd fees')
19054 }
19055 }
8b095871 19056
9987f0c1 19057 return tx
8b095871
IC
19058}
19059
9987f0c1
IC
19060function canSign (input) {
19061 return input.prevOutScript !== undefined &&
19062 input.signScript !== undefined &&
19063 input.pubKeys !== undefined &&
19064 input.signatures !== undefined &&
19065 input.signatures.length === input.pubKeys.length &&
19066 input.pubKeys.length > 0 &&
19067 input.witness !== undefined
8b095871
IC
19068}
19069
9987f0c1
IC
19070TransactionBuilder.prototype.sign = function (vin, keyPair, redeemScript, hashType, witnessValue, witnessScript) {
19071 if (keyPair.network !== this.network) throw new Error('Inconsistent network')
19072 if (!this.inputs[vin]) throw new Error('No input at index: ' + vin)
19073 hashType = hashType || Transaction.SIGHASH_ALL
8b095871 19074
9987f0c1 19075 var input = this.inputs[vin]
8b095871 19076
9987f0c1
IC
19077 // if redeemScript was previously provided, enforce consistency
19078 if (input.redeemScript !== undefined &&
19079 redeemScript &&
19080 !input.redeemScript.equals(redeemScript)) {
19081 throw new Error('Inconsistent redeemScript')
19082 }
8b095871 19083
9987f0c1
IC
19084 var kpPubKey = keyPair.getPublicKeyBuffer()
19085 if (!canSign(input)) {
19086 prepareInput(input, kpPubKey, redeemScript, witnessValue, witnessScript)
19087 if (!canSign(input)) throw Error(input.prevOutType + ' not supported')
19088 }
8b095871 19089
9987f0c1
IC
19090 // ready to sign
19091 var signatureHash
19092 if (input.witness) {
19093 signatureHash = this.tx.hashForWitnessV0(vin, input.signScript, witnessValue, hashType)
8b095871 19094 } else {
9987f0c1 19095 signatureHash = this.tx.hashForSignature(vin, input.signScript, hashType)
8b095871 19096 }
9987f0c1
IC
19097 // enforce in order signing of public keys
19098 var signed = input.pubKeys.some(function (pubKey, i) {
19099 if (!kpPubKey.equals(pubKey)) return false
19100 if (input.signatures[i]) throw new Error('Signature already exists')
8b095871 19101
9987f0c1
IC
19102 input.signatures[i] = keyPair.sign(signatureHash).toScriptSignature(hashType)
19103 return true
19104 })
8b095871 19105
9987f0c1 19106 if (!signed) throw new Error('Key pair cannot sign for this input')
8b095871
IC
19107}
19108
9987f0c1
IC
19109function signatureHashType (buffer) {
19110 return buffer.readUInt8(buffer.length - 1)
8b095871
IC
19111}
19112
9987f0c1
IC
19113TransactionBuilder.prototype.__canModifyInputs = function () {
19114 return this.inputs.every(function (input) {
19115 // any signatures?
19116 if (input.signatures === undefined) return true
8b095871 19117
9987f0c1
IC
19118 return input.signatures.every(function (signature) {
19119 if (!signature) return true
19120 var hashType = signatureHashType(signature)
8b095871 19121
9987f0c1
IC
19122 // if SIGHASH_ANYONECANPAY is set, signatures would not
19123 // be invalidated by more inputs
19124 return hashType & Transaction.SIGHASH_ANYONECANPAY
19125 })
19126 })
8b095871
IC
19127}
19128
9987f0c1
IC
19129TransactionBuilder.prototype.__canModifyOutputs = function () {
19130 var nInputs = this.tx.ins.length
19131 var nOutputs = this.tx.outs.length
8b095871 19132
9987f0c1
IC
19133 return this.inputs.every(function (input) {
19134 if (input.signatures === undefined) return true
8b095871 19135
9987f0c1
IC
19136 return input.signatures.every(function (signature) {
19137 if (!signature) return true
19138 var hashType = signatureHashType(signature)
8b095871 19139
9987f0c1
IC
19140 var hashTypeMod = hashType & 0x1f
19141 if (hashTypeMod === Transaction.SIGHASH_NONE) return true
19142 if (hashTypeMod === Transaction.SIGHASH_SINGLE) {
19143 // if SIGHASH_SINGLE is set, and nInputs > nOutputs
19144 // some signatures would be invalidated by the addition
19145 // of more outputs
19146 return nInputs <= nOutputs
19147 }
19148 })
19149 })
8b095871
IC
19150}
19151
9987f0c1
IC
19152TransactionBuilder.prototype.__overMaximumFees = function (bytes) {
19153 // not all inputs will have .value defined
19154 var incoming = this.inputs.reduce(function (a, x) { return a + (x.value >>> 0) }, 0)
8b095871 19155
9987f0c1
IC
19156 // but all outputs do, and if we have any input value
19157 // we can immediately determine if the outputs are too small
19158 var outgoing = this.tx.outs.reduce(function (a, x) { return a + x.value }, 0)
19159 var fee = incoming - outgoing
19160 var feeRate = fee / bytes
8b095871 19161
9987f0c1 19162 return feeRate > this.maximumFeeRate
8b095871
IC
19163}
19164
9987f0c1 19165module.exports = TransactionBuilder
8b095871 19166
9987f0c1
IC
19167},{"./address":42,"./crypto":45,"./ecpair":47,"./ecsignature":48,"./networks":51,"./script":52,"./transaction":76,"./types":78,"bitcoin-ops":40,"safe-buffer":98,"typeforce":109}],78:[function(require,module,exports){
19168var typeforce = require('typeforce')
8b095871 19169
9987f0c1
IC
19170var UINT31_MAX = Math.pow(2, 31) - 1
19171function UInt31 (value) {
19172 return typeforce.UInt32(value) && value <= UINT31_MAX
19173}
8b095871 19174
9987f0c1
IC
19175function BIP32Path (value) {
19176 return typeforce.String(value) && value.match(/^(m\/)?(\d+'?\/)*\d+'?$/)
19177}
19178BIP32Path.toJSON = function () { return 'BIP32 derivation path' }
8b095871 19179
9987f0c1
IC
19180var SATOSHI_MAX = 21 * 1e14
19181function Satoshi (value) {
19182 return typeforce.UInt53(value) && value <= SATOSHI_MAX
19183}
8b095871 19184
9987f0c1
IC
19185// external dependent types
19186var BigInt = typeforce.quacksLike('BigInteger')
19187var ECPoint = typeforce.quacksLike('Point')
8b095871 19188
9987f0c1
IC
19189// exposed, external API
19190var ECSignature = typeforce.compile({ r: BigInt, s: BigInt })
19191var Network = typeforce.compile({
19192 messagePrefix: typeforce.oneOf(typeforce.Buffer, typeforce.String),
19193 bip32: {
19194 public: typeforce.UInt32,
19195 private: typeforce.UInt32
19196 },
19197 pubKeyHash: typeforce.UInt8,
19198 scriptHash: typeforce.UInt8,
19199 wif: typeforce.UInt8
19200})
8b095871 19201
9987f0c1
IC
19202// extend typeforce types with ours
19203var types = {
19204 BigInt: BigInt,
19205 BIP32Path: BIP32Path,
19206 Buffer256bit: typeforce.BufferN(32),
19207 ECPoint: ECPoint,
19208 ECSignature: ECSignature,
19209 Hash160bit: typeforce.BufferN(20),
19210 Hash256bit: typeforce.BufferN(32),
19211 Network: Network,
19212 Satoshi: Satoshi,
19213 UInt31: UInt31
19214}
8b095871 19215
9987f0c1
IC
19216for (var typeName in typeforce) {
19217 types[typeName] = typeforce[typeName]
19218}
8b095871 19219
9987f0c1 19220module.exports = types
8b095871 19221
9987f0c1
IC
19222},{"typeforce":109}],79:[function(require,module,exports){
19223var basex = require('base-x')
19224var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
8b095871 19225
9987f0c1 19226module.exports = basex(ALPHABET)
8b095871 19227
9987f0c1
IC
19228},{"base-x":34}],80:[function(require,module,exports){
19229(function (Buffer){
19230'use strict'
8b095871 19231
9987f0c1
IC
19232var base58 = require('bs58')
19233var createHash = require('create-hash')
8b095871 19234
9987f0c1
IC
19235// SHA256(SHA256(buffer))
19236function sha256x2 (buffer) {
19237 var tmp = createHash('sha256').update(buffer).digest()
19238 return createHash('sha256').update(tmp).digest()
19239}
8b095871 19240
9987f0c1
IC
19241// Encode a buffer as a base58-check encoded string
19242function encode (payload) {
19243 var checksum = sha256x2(payload)
8b095871 19244
9987f0c1
IC
19245 return base58.encode(Buffer.concat([
19246 payload,
19247 checksum
19248 ], payload.length + 4))
19249}
8b095871 19250
9987f0c1
IC
19251function decodeRaw (buffer) {
19252 var payload = buffer.slice(0, -4)
19253 var checksum = buffer.slice(-4)
19254 var newChecksum = sha256x2(payload)
8b095871 19255
9987f0c1
IC
19256 if (checksum[0] ^ newChecksum[0] |
19257 checksum[1] ^ newChecksum[1] |
19258 checksum[2] ^ newChecksum[2] |
19259 checksum[3] ^ newChecksum[3]) return
8b095871 19260
9987f0c1
IC
19261 return payload
19262}
8b095871 19263
9987f0c1
IC
19264// Decode a base58-check encoded string to a buffer, no result if checksum is wrong
19265function decodeUnsafe (string) {
19266 var buffer = base58.decodeUnsafe(string)
19267 if (!buffer) return
8b095871 19268
9987f0c1
IC
19269 return decodeRaw(buffer)
19270}
8b095871 19271
9987f0c1
IC
19272function decode (string) {
19273 var buffer = base58.decode(string)
19274 var payload = decodeRaw(buffer)
19275 if (!payload) throw new Error('Invalid checksum')
19276 return payload
19277}
8b095871 19278
9987f0c1
IC
19279module.exports = {
19280 encode: encode,
19281 decode: decode,
19282 decodeUnsafe: decodeUnsafe
19283}
8b095871 19284
9987f0c1
IC
19285}).call(this,require("buffer").Buffer)
19286},{"bs58":79,"buffer":4,"create-hash":82}],81:[function(require,module,exports){
19287var Buffer = require('safe-buffer').Buffer
19288var Transform = require('stream').Transform
19289var StringDecoder = require('string_decoder').StringDecoder
19290var inherits = require('inherits')
8b095871 19291
9987f0c1
IC
19292function CipherBase (hashMode) {
19293 Transform.call(this)
19294 this.hashMode = typeof hashMode === 'string'
19295 if (this.hashMode) {
19296 this[hashMode] = this._finalOrDigest
19297 } else {
19298 this.final = this._finalOrDigest
8b095871 19299 }
9987f0c1
IC
19300 if (this._final) {
19301 this.__final = this._final
19302 this._final = null
19303 }
19304 this._decoder = null
19305 this._encoding = null
8b095871 19306}
9987f0c1 19307inherits(CipherBase, Transform)
8b095871 19308
9987f0c1
IC
19309CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
19310 if (typeof data === 'string') {
19311 data = Buffer.from(data, inputEnc)
19312 }
8b095871 19313
9987f0c1
IC
19314 var outData = this._update(data)
19315 if (this.hashMode) return this
8b095871 19316
9987f0c1
IC
19317 if (outputEnc) {
19318 outData = this._toString(outData, outputEnc)
19319 }
8b095871 19320
9987f0c1
IC
19321 return outData
19322}
8b095871 19323
9987f0c1
IC
19324CipherBase.prototype.setAutoPadding = function () {}
19325CipherBase.prototype.getAuthTag = function () {
19326 throw new Error('trying to get auth tag in unsupported state')
19327}
8b095871 19328
9987f0c1
IC
19329CipherBase.prototype.setAuthTag = function () {
19330 throw new Error('trying to set auth tag in unsupported state')
19331}
8b095871 19332
9987f0c1
IC
19333CipherBase.prototype.setAAD = function () {
19334 throw new Error('trying to set aad in unsupported state')
19335}
8b095871 19336
9987f0c1
IC
19337CipherBase.prototype._transform = function (data, _, next) {
19338 var err
19339 try {
19340 if (this.hashMode) {
19341 this._update(data)
19342 } else {
19343 this.push(this._update(data))
19344 }
19345 } catch (e) {
19346 err = e
19347 } finally {
19348 next(err)
19349 }
19350}
19351CipherBase.prototype._flush = function (done) {
19352 var err
19353 try {
19354 this.push(this.__final())
19355 } catch (e) {
19356 err = e
8b095871
IC
19357 }
19358
9987f0c1
IC
19359 done(err)
19360}
19361CipherBase.prototype._finalOrDigest = function (outputEnc) {
19362 var outData = this.__final() || Buffer.alloc(0)
19363 if (outputEnc) {
19364 outData = this._toString(outData, outputEnc, true)
19365 }
19366 return outData
8b095871
IC
19367}
19368
9987f0c1
IC
19369CipherBase.prototype._toString = function (value, enc, fin) {
19370 if (!this._decoder) {
19371 this._decoder = new StringDecoder(enc)
19372 this._encoding = enc
19373 }
8b095871 19374
9987f0c1 19375 if (this._encoding !== enc) throw new Error('can\'t switch encodings')
8b095871 19376
9987f0c1
IC
19377 var out = this._decoder.write(value)
19378 if (fin) {
19379 out += this._decoder.end()
19380 }
8b095871 19381
9987f0c1
IC
19382 return out
19383}
8b095871 19384
9987f0c1 19385module.exports = CipherBase
8b095871 19386
9987f0c1
IC
19387},{"inherits":93,"safe-buffer":98,"stream":27,"string_decoder":28}],82:[function(require,module,exports){
19388(function (Buffer){
19389'use strict'
19390var inherits = require('inherits')
19391var md5 = require('./md5')
19392var RIPEMD160 = require('ripemd160')
19393var sha = require('sha.js')
8b095871 19394
9987f0c1
IC
19395var Base = require('cipher-base')
19396
19397function HashNoConstructor (hash) {
19398 Base.call(this, 'digest')
8b095871 19399
9987f0c1
IC
19400 this._hash = hash
19401 this.buffers = []
8b095871
IC
19402}
19403
9987f0c1 19404inherits(HashNoConstructor, Base)
8b095871 19405
9987f0c1
IC
19406HashNoConstructor.prototype._update = function (data) {
19407 this.buffers.push(data)
8b095871
IC
19408}
19409
9987f0c1
IC
19410HashNoConstructor.prototype._final = function () {
19411 var buf = Buffer.concat(this.buffers)
19412 var r = this._hash(buf)
19413 this.buffers = null
8b095871 19414
9987f0c1
IC
19415 return r
19416}
8b095871 19417
9987f0c1
IC
19418function Hash (hash) {
19419 Base.call(this, 'digest')
8b095871 19420
9987f0c1
IC
19421 this._hash = hash
19422}
8b095871 19423
9987f0c1 19424inherits(Hash, Base)
8b095871 19425
9987f0c1
IC
19426Hash.prototype._update = function (data) {
19427 this._hash.update(data)
19428}
8b095871 19429
9987f0c1
IC
19430Hash.prototype._final = function () {
19431 return this._hash.digest()
19432}
8b095871 19433
9987f0c1
IC
19434module.exports = function createHash (alg) {
19435 alg = alg.toLowerCase()
19436 if (alg === 'md5') return new HashNoConstructor(md5)
19437 if (alg === 'rmd160' || alg === 'ripemd160') return new Hash(new RIPEMD160())
8b095871 19438
9987f0c1
IC
19439 return new Hash(sha(alg))
19440}
8b095871 19441
9987f0c1
IC
19442}).call(this,require("buffer").Buffer)
19443},{"./md5":84,"buffer":4,"cipher-base":81,"inherits":93,"ripemd160":97,"sha.js":100}],83:[function(require,module,exports){
19444(function (Buffer){
19445'use strict'
19446var intSize = 4
19447var zeroBuffer = new Buffer(intSize)
19448zeroBuffer.fill(0)
8b095871 19449
9987f0c1
IC
19450var charSize = 8
19451var hashSize = 16
8b095871 19452
9987f0c1
IC
19453function toArray (buf) {
19454 if ((buf.length % intSize) !== 0) {
19455 var len = buf.length + (intSize - (buf.length % intSize))
19456 buf = Buffer.concat([buf, zeroBuffer], len)
19457 }
8b095871 19458
9987f0c1
IC
19459 var arr = new Array(buf.length >>> 2)
19460 for (var i = 0, j = 0; i < buf.length; i += intSize, j++) {
19461 arr[j] = buf.readInt32LE(i)
8b095871
IC
19462 }
19463
9987f0c1 19464 return arr
8b095871
IC
19465}
19466
9987f0c1
IC
19467module.exports = function hash (buf, fn) {
19468 var arr = fn(toArray(buf), buf.length * charSize)
19469 buf = new Buffer(hashSize)
19470 for (var i = 0; i < arr.length; i++) {
19471 buf.writeInt32LE(arr[i], i << 2, true)
19472 }
19473 return buf
8b095871
IC
19474}
19475
19476}).call(this,require("buffer").Buffer)
9987f0c1
IC
19477},{"buffer":4}],84:[function(require,module,exports){
19478'use strict'
19479/*
19480 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
19481 * Digest Algorithm, as defined in RFC 1321.
19482 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
19483 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
19484 * Distributed under the BSD License
19485 * See http://pajhome.org.uk/crypt/md5 for more info.
19486 */
8b095871 19487
9987f0c1 19488var makeHash = require('./make-hash')
8b095871 19489
9987f0c1
IC
19490/*
19491 * Calculate the MD5 of an array of little-endian words, and a bit length
19492 */
19493function core_md5 (x, len) {
19494 /* append padding */
19495 x[len >> 5] |= 0x80 << ((len) % 32)
19496 x[(((len + 64) >>> 9) << 4) + 14] = len
19497
19498 var a = 1732584193
19499 var b = -271733879
19500 var c = -1732584194
19501 var d = 271733878
19502
19503 for (var i = 0; i < x.length; i += 16) {
19504 var olda = a
19505 var oldb = b
19506 var oldc = c
19507 var oldd = d
19508
19509 a = md5_ff(a, b, c, d, x[i + 0], 7, -680876936)
19510 d = md5_ff(d, a, b, c, x[i + 1], 12, -389564586)
19511 c = md5_ff(c, d, a, b, x[i + 2], 17, 606105819)
19512 b = md5_ff(b, c, d, a, x[i + 3], 22, -1044525330)
19513 a = md5_ff(a, b, c, d, x[i + 4], 7, -176418897)
19514 d = md5_ff(d, a, b, c, x[i + 5], 12, 1200080426)
19515 c = md5_ff(c, d, a, b, x[i + 6], 17, -1473231341)
19516 b = md5_ff(b, c, d, a, x[i + 7], 22, -45705983)
19517 a = md5_ff(a, b, c, d, x[i + 8], 7, 1770035416)
19518 d = md5_ff(d, a, b, c, x[i + 9], 12, -1958414417)
19519 c = md5_ff(c, d, a, b, x[i + 10], 17, -42063)
19520 b = md5_ff(b, c, d, a, x[i + 11], 22, -1990404162)
19521 a = md5_ff(a, b, c, d, x[i + 12], 7, 1804603682)
19522 d = md5_ff(d, a, b, c, x[i + 13], 12, -40341101)
19523 c = md5_ff(c, d, a, b, x[i + 14], 17, -1502002290)
19524 b = md5_ff(b, c, d, a, x[i + 15], 22, 1236535329)
19525
19526 a = md5_gg(a, b, c, d, x[i + 1], 5, -165796510)
19527 d = md5_gg(d, a, b, c, x[i + 6], 9, -1069501632)
19528 c = md5_gg(c, d, a, b, x[i + 11], 14, 643717713)
19529 b = md5_gg(b, c, d, a, x[i + 0], 20, -373897302)
19530 a = md5_gg(a, b, c, d, x[i + 5], 5, -701558691)
19531 d = md5_gg(d, a, b, c, x[i + 10], 9, 38016083)
19532 c = md5_gg(c, d, a, b, x[i + 15], 14, -660478335)
19533 b = md5_gg(b, c, d, a, x[i + 4], 20, -405537848)
19534 a = md5_gg(a, b, c, d, x[i + 9], 5, 568446438)
19535 d = md5_gg(d, a, b, c, x[i + 14], 9, -1019803690)
19536 c = md5_gg(c, d, a, b, x[i + 3], 14, -187363961)
19537 b = md5_gg(b, c, d, a, x[i + 8], 20, 1163531501)
19538 a = md5_gg(a, b, c, d, x[i + 13], 5, -1444681467)
19539 d = md5_gg(d, a, b, c, x[i + 2], 9, -51403784)
19540 c = md5_gg(c, d, a, b, x[i + 7], 14, 1735328473)
19541 b = md5_gg(b, c, d, a, x[i + 12], 20, -1926607734)
19542
19543 a = md5_hh(a, b, c, d, x[i + 5], 4, -378558)
19544 d = md5_hh(d, a, b, c, x[i + 8], 11, -2022574463)
19545 c = md5_hh(c, d, a, b, x[i + 11], 16, 1839030562)
19546 b = md5_hh(b, c, d, a, x[i + 14], 23, -35309556)
19547 a = md5_hh(a, b, c, d, x[i + 1], 4, -1530992060)
19548 d = md5_hh(d, a, b, c, x[i + 4], 11, 1272893353)
19549 c = md5_hh(c, d, a, b, x[i + 7], 16, -155497632)
19550 b = md5_hh(b, c, d, a, x[i + 10], 23, -1094730640)
19551 a = md5_hh(a, b, c, d, x[i + 13], 4, 681279174)
19552 d = md5_hh(d, a, b, c, x[i + 0], 11, -358537222)
19553 c = md5_hh(c, d, a, b, x[i + 3], 16, -722521979)
19554 b = md5_hh(b, c, d, a, x[i + 6], 23, 76029189)
19555 a = md5_hh(a, b, c, d, x[i + 9], 4, -640364487)
19556 d = md5_hh(d, a, b, c, x[i + 12], 11, -421815835)
19557 c = md5_hh(c, d, a, b, x[i + 15], 16, 530742520)
19558 b = md5_hh(b, c, d, a, x[i + 2], 23, -995338651)
19559
19560 a = md5_ii(a, b, c, d, x[i + 0], 6, -198630844)
19561 d = md5_ii(d, a, b, c, x[i + 7], 10, 1126891415)
19562 c = md5_ii(c, d, a, b, x[i + 14], 15, -1416354905)
19563 b = md5_ii(b, c, d, a, x[i + 5], 21, -57434055)
19564 a = md5_ii(a, b, c, d, x[i + 12], 6, 1700485571)
19565 d = md5_ii(d, a, b, c, x[i + 3], 10, -1894986606)
19566 c = md5_ii(c, d, a, b, x[i + 10], 15, -1051523)
19567 b = md5_ii(b, c, d, a, x[i + 1], 21, -2054922799)
19568 a = md5_ii(a, b, c, d, x[i + 8], 6, 1873313359)
19569 d = md5_ii(d, a, b, c, x[i + 15], 10, -30611744)
19570 c = md5_ii(c, d, a, b, x[i + 6], 15, -1560198380)
19571 b = md5_ii(b, c, d, a, x[i + 13], 21, 1309151649)
19572 a = md5_ii(a, b, c, d, x[i + 4], 6, -145523070)
19573 d = md5_ii(d, a, b, c, x[i + 11], 10, -1120210379)
19574 c = md5_ii(c, d, a, b, x[i + 2], 15, 718787259)
19575 b = md5_ii(b, c, d, a, x[i + 9], 21, -343485551)
19576
19577 a = safe_add(a, olda)
19578 b = safe_add(b, oldb)
19579 c = safe_add(c, oldc)
19580 d = safe_add(d, oldd)
19581 }
19582
19583 return [a, b, c, d]
19584}
8b095871 19585
9987f0c1
IC
19586/*
19587 * These functions implement the four basic operations the algorithm uses.
19588 */
19589function md5_cmn (q, a, b, x, s, t) {
19590 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s), b)
8b095871
IC
19591}
19592
9987f0c1
IC
19593function md5_ff (a, b, c, d, x, s, t) {
19594 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t)
19595}
8b095871 19596
9987f0c1
IC
19597function md5_gg (a, b, c, d, x, s, t) {
19598 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t)
19599}
8b095871 19600
9987f0c1
IC
19601function md5_hh (a, b, c, d, x, s, t) {
19602 return md5_cmn(b ^ c ^ d, a, b, x, s, t)
19603}
8b095871 19604
9987f0c1
IC
19605function md5_ii (a, b, c, d, x, s, t) {
19606 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t)
19607}
8b095871 19608
9987f0c1
IC
19609/*
19610 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
19611 * to work around bugs in some JS interpreters.
19612 */
19613function safe_add (x, y) {
19614 var lsw = (x & 0xFFFF) + (y & 0xFFFF)
19615 var msw = (x >> 16) + (y >> 16) + (lsw >> 16)
19616 return (msw << 16) | (lsw & 0xFFFF)
19617}
8b095871 19618
9987f0c1
IC
19619/*
19620 * Bitwise rotate a 32-bit number to the left.
19621 */
19622function bit_rol (num, cnt) {
19623 return (num << cnt) | (num >>> (32 - cnt))
19624}
8b095871 19625
9987f0c1
IC
19626module.exports = function md5 (buf) {
19627 return makeHash(buf, core_md5)
8b095871
IC
19628}
19629
9987f0c1
IC
19630},{"./make-hash":83}],85:[function(require,module,exports){
19631'use strict'
19632var inherits = require('inherits')
19633var Legacy = require('./legacy')
19634var Base = require('cipher-base')
19635var Buffer = require('safe-buffer').Buffer
19636var md5 = require('create-hash/md5')
19637var RIPEMD160 = require('ripemd160')
8b095871 19638
9987f0c1 19639var sha = require('sha.js')
8b095871 19640
9987f0c1 19641var ZEROS = Buffer.alloc(128)
8b095871 19642
9987f0c1
IC
19643function Hmac (alg, key) {
19644 Base.call(this, 'digest')
19645 if (typeof key === 'string') {
19646 key = Buffer.from(key)
19647 }
8b095871 19648
9987f0c1 19649 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
8b095871 19650
9987f0c1
IC
19651 this._alg = alg
19652 this._key = key
19653 if (key.length > blocksize) {
19654 var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19655 key = hash.update(key).digest()
19656 } else if (key.length < blocksize) {
19657 key = Buffer.concat([key, ZEROS], blocksize)
19658 }
8b095871 19659
9987f0c1
IC
19660 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19661 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19662
9987f0c1
IC
19663 for (var i = 0; i < blocksize; i++) {
19664 ipad[i] = key[i] ^ 0x36
19665 opad[i] = key[i] ^ 0x5C
8b095871 19666 }
9987f0c1
IC
19667 this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg)
19668 this._hash.update(ipad)
19669}
8b095871 19670
9987f0c1
IC
19671inherits(Hmac, Base)
19672
19673Hmac.prototype._update = function (data) {
19674 this._hash.update(data)
8b095871
IC
19675}
19676
9987f0c1
IC
19677Hmac.prototype._final = function () {
19678 var h = this._hash.digest()
19679 var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg)
19680 return hash.update(this._opad).update(h).digest()
8b095871
IC
19681}
19682
9987f0c1
IC
19683module.exports = function createHmac (alg, key) {
19684 alg = alg.toLowerCase()
19685 if (alg === 'rmd160' || alg === 'ripemd160') {
19686 return new Hmac('rmd160', key)
19687 }
19688 if (alg === 'md5') {
19689 return new Legacy(md5, key)
19690 }
19691 return new Hmac(alg, key)
19692}
8b095871 19693
9987f0c1
IC
19694},{"./legacy":86,"cipher-base":81,"create-hash/md5":84,"inherits":93,"ripemd160":97,"safe-buffer":98,"sha.js":100}],86:[function(require,module,exports){
19695'use strict'
19696var inherits = require('inherits')
19697var Buffer = require('safe-buffer').Buffer
8b095871 19698
9987f0c1 19699var Base = require('cipher-base')
8b095871 19700
9987f0c1
IC
19701var ZEROS = Buffer.alloc(128)
19702var blocksize = 64
8b095871 19703
9987f0c1
IC
19704function Hmac (alg, key) {
19705 Base.call(this, 'digest')
19706 if (typeof key === 'string') {
19707 key = Buffer.from(key)
8b095871
IC
19708 }
19709
9987f0c1
IC
19710 this._alg = alg
19711 this._key = key
8b095871 19712
9987f0c1
IC
19713 if (key.length > blocksize) {
19714 key = alg(key)
19715 } else if (key.length < blocksize) {
19716 key = Buffer.concat([key, ZEROS], blocksize)
19717 }
8b095871 19718
9987f0c1
IC
19719 var ipad = this._ipad = Buffer.allocUnsafe(blocksize)
19720 var opad = this._opad = Buffer.allocUnsafe(blocksize)
8b095871 19721
9987f0c1
IC
19722 for (var i = 0; i < blocksize; i++) {
19723 ipad[i] = key[i] ^ 0x36
19724 opad[i] = key[i] ^ 0x5C
19725 }
8b095871 19726
9987f0c1 19727 this._hash = [ipad]
8b095871
IC
19728}
19729
9987f0c1 19730inherits(Hmac, Base)
8b095871 19731
9987f0c1
IC
19732Hmac.prototype._update = function (data) {
19733 this._hash.push(data)
8b095871
IC
19734}
19735
9987f0c1
IC
19736Hmac.prototype._final = function () {
19737 var h = this._alg(Buffer.concat(this._hash))
19738 return this._alg(Buffer.concat([this._opad, h]))
8b095871 19739}
9987f0c1 19740module.exports = Hmac
8b095871 19741
9987f0c1 19742},{"cipher-base":81,"inherits":93,"safe-buffer":98}],87:[function(require,module,exports){
8b095871 19743var assert = require('assert')
8b095871
IC
19744var BigInteger = require('bigi')
19745
9987f0c1 19746var Point = require('./point')
8b095871 19747
9987f0c1
IC
19748function Curve (p, a, b, Gx, Gy, n, h) {
19749 this.p = p
19750 this.a = a
19751 this.b = b
19752 this.G = Point.fromAffine(this, Gx, Gy)
19753 this.n = n
19754 this.h = h
8b095871 19755
9987f0c1 19756 this.infinity = new Point(this, null, null, BigInteger.ZERO)
8b095871 19757
9987f0c1
IC
19758 // result caching
19759 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
8b095871 19760
9987f0c1
IC
19761 // determine size of p in bytes
19762 this.pLength = Math.floor((this.p.bitLength() + 7) / 8)
19763}
8b095871 19764
9987f0c1
IC
19765Curve.prototype.pointFromX = function (isOdd, x) {
19766 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
19767 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
8b095871 19768
9987f0c1
IC
19769 var y = beta
19770 if (beta.isEven() ^ !isOdd) {
19771 y = this.p.subtract(y) // -y % p
8b095871 19772 }
9987f0c1
IC
19773
19774 return Point.fromAffine(this, x, y)
8b095871
IC
19775}
19776
9987f0c1
IC
19777Curve.prototype.isInfinity = function (Q) {
19778 if (Q === this.infinity) return true
8b095871 19779
9987f0c1
IC
19780 return Q.z.signum() === 0 && Q.y.signum() !== 0
19781}
8b095871 19782
9987f0c1
IC
19783Curve.prototype.isOnCurve = function (Q) {
19784 if (this.isInfinity(Q)) return true
8b095871 19785
9987f0c1
IC
19786 var x = Q.affineX
19787 var y = Q.affineY
19788 var a = this.a
19789 var b = this.b
19790 var p = this.p
8b095871 19791
9987f0c1
IC
19792 // Check that xQ and yQ are integers in the interval [0, p - 1]
19793 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
19794 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
8b095871 19795
9987f0c1
IC
19796 // and check that y^2 = x^3 + ax + b (mod p)
19797 var lhs = y.square().mod(p)
19798 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
19799 return lhs.equals(rhs)
19800}
8b095871 19801
9987f0c1
IC
19802/**
19803 * Validate an elliptic curve point.
19804 *
19805 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
19806 */
19807Curve.prototype.validate = function (Q) {
19808 // Check Q != O
19809 assert(!this.isInfinity(Q), 'Point is at infinity')
19810 assert(this.isOnCurve(Q), 'Point is not on the curve')
19811
19812 // Check nQ = O (where Q is a scalar multiple of G)
19813 var nQ = Q.multiply(this.n)
19814 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
8b095871 19815
9987f0c1
IC
19816 return true
19817}
8b095871 19818
9987f0c1 19819module.exports = Curve
8b095871 19820
9987f0c1
IC
19821},{"./point":91,"assert":1,"bigi":37}],88:[function(require,module,exports){
19822module.exports={
19823 "secp128r1": {
19824 "p": "fffffffdffffffffffffffffffffffff",
19825 "a": "fffffffdfffffffffffffffffffffffc",
19826 "b": "e87579c11079f43dd824993c2cee5ed3",
19827 "n": "fffffffe0000000075a30d1b9038a115",
19828 "h": "01",
19829 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
19830 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
19831 },
19832 "secp160k1": {
19833 "p": "fffffffffffffffffffffffffffffffeffffac73",
19834 "a": "00",
19835 "b": "07",
19836 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
19837 "h": "01",
19838 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
19839 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
19840 },
19841 "secp160r1": {
19842 "p": "ffffffffffffffffffffffffffffffff7fffffff",
19843 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
19844 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
19845 "n": "0100000000000000000001f4c8f927aed3ca752257",
19846 "h": "01",
19847 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
19848 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
19849 },
19850 "secp192k1": {
19851 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
19852 "a": "00",
19853 "b": "03",
19854 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
19855 "h": "01",
19856 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
19857 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
19858 },
19859 "secp192r1": {
19860 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
19861 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
19862 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
19863 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
19864 "h": "01",
19865 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
19866 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
19867 },
19868 "secp256k1": {
19869 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
19870 "a": "00",
19871 "b": "07",
19872 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
19873 "h": "01",
19874 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
19875 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
19876 },
19877 "secp256r1": {
19878 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
19879 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
19880 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
19881 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
19882 "h": "01",
19883 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
19884 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
19885 }
8b095871
IC
19886}
19887
9987f0c1
IC
19888},{}],89:[function(require,module,exports){
19889var Point = require('./point')
19890var Curve = require('./curve')
8b095871 19891
9987f0c1 19892var getCurveByName = require('./names')
8b095871 19893
9987f0c1
IC
19894module.exports = {
19895 Curve: Curve,
19896 Point: Point,
19897 getCurveByName: getCurveByName
8b095871
IC
19898}
19899
9987f0c1
IC
19900},{"./curve":87,"./names":90,"./point":91}],90:[function(require,module,exports){
19901var BigInteger = require('bigi')
8b095871 19902
9987f0c1
IC
19903var curves = require('./curves.json')
19904var Curve = require('./curve')
8b095871 19905
9987f0c1
IC
19906function getCurveByName (name) {
19907 var curve = curves[name]
19908 if (!curve) return null
8b095871 19909
9987f0c1
IC
19910 var p = new BigInteger(curve.p, 16)
19911 var a = new BigInteger(curve.a, 16)
19912 var b = new BigInteger(curve.b, 16)
19913 var n = new BigInteger(curve.n, 16)
19914 var h = new BigInteger(curve.h, 16)
19915 var Gx = new BigInteger(curve.Gx, 16)
19916 var Gy = new BigInteger(curve.Gy, 16)
8b095871 19917
9987f0c1 19918 return new Curve(p, a, b, Gx, Gy, n, h)
8b095871
IC
19919}
19920
9987f0c1 19921module.exports = getCurveByName
8b095871 19922
9987f0c1
IC
19923},{"./curve":87,"./curves.json":88,"bigi":37}],91:[function(require,module,exports){
19924(function (Buffer){
19925var assert = require('assert')
19926var BigInteger = require('bigi')
8b095871 19927
9987f0c1 19928var THREE = BigInteger.valueOf(3)
8b095871 19929
9987f0c1
IC
19930function Point (curve, x, y, z) {
19931 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
8b095871 19932
9987f0c1
IC
19933 this.curve = curve
19934 this.x = x
19935 this.y = y
19936 this.z = z
19937 this._zInv = null
8b095871 19938
9987f0c1 19939 this.compressed = true
8b095871
IC
19940}
19941
9987f0c1
IC
19942Object.defineProperty(Point.prototype, 'zInv', {
19943 get: function () {
19944 if (this._zInv === null) {
19945 this._zInv = this.z.modInverse(this.curve.p)
19946 }
8b095871 19947
9987f0c1
IC
19948 return this._zInv
19949 }
19950})
8b095871 19951
9987f0c1
IC
19952Object.defineProperty(Point.prototype, 'affineX', {
19953 get: function () {
19954 return this.x.multiply(this.zInv).mod(this.curve.p)
19955 }
19956})
19957
19958Object.defineProperty(Point.prototype, 'affineY', {
19959 get: function () {
19960 return this.y.multiply(this.zInv).mod(this.curve.p)
19961 }
19962})
19963
19964Point.fromAffine = function (curve, x, y) {
19965 return new Point(curve, x, y, BigInteger.ONE)
8b095871
IC
19966}
19967
9987f0c1
IC
19968Point.prototype.equals = function (other) {
19969 if (other === this) return true
19970 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
19971 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
8b095871 19972
9987f0c1
IC
19973 // u = Y2 * Z1 - Y1 * Z2
19974 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
8b095871 19975
9987f0c1 19976 if (u.signum() !== 0) return false
8b095871 19977
9987f0c1
IC
19978 // v = X2 * Z1 - X1 * Z2
19979 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
8b095871 19980
9987f0c1
IC
19981 return v.signum() === 0
19982}
8b095871 19983
9987f0c1
IC
19984Point.prototype.negate = function () {
19985 var y = this.curve.p.subtract(this.y)
8b095871 19986
9987f0c1 19987 return new Point(this.curve, this.x, y, this.z)
8b095871
IC
19988}
19989
9987f0c1
IC
19990Point.prototype.add = function (b) {
19991 if (this.curve.isInfinity(this)) return b
19992 if (this.curve.isInfinity(b)) return this
19993
19994 var x1 = this.x
19995 var y1 = this.y
19996 var x2 = b.x
19997 var y2 = b.y
8b095871 19998
9987f0c1
IC
19999 // u = Y2 * Z1 - Y1 * Z2
20000 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
20001 // v = X2 * Z1 - X1 * Z2
20002 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
8b095871 20003
9987f0c1
IC
20004 if (v.signum() === 0) {
20005 if (u.signum() === 0) {
20006 return this.twice() // this == b, so double
20007 }
8b095871 20008
9987f0c1 20009 return this.curve.infinity // this = -b, so infinity
8b095871 20010 }
9987f0c1
IC
20011
20012 var v2 = v.square()
20013 var v3 = v2.multiply(v)
20014 var x1v2 = x1.multiply(v2)
20015 var zu2 = u.square().multiply(this.z)
20016
20017 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
20018 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
20019 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
20020 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)
20021 // z3 = v^3 * z1 * z2
20022 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
20023
20024 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20025}
20026
9987f0c1
IC
20027Point.prototype.twice = function () {
20028 if (this.curve.isInfinity(this)) return this
20029 if (this.y.signum() === 0) return this.curve.infinity
8b095871 20030
9987f0c1
IC
20031 var x1 = this.x
20032 var y1 = this.y
8b095871 20033
9987f0c1
IC
20034 var y1z1 = y1.multiply(this.z).mod(this.curve.p)
20035 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
20036 var a = this.curve.a
8b095871 20037
9987f0c1
IC
20038 // w = 3 * x1^2 + a * z1^2
20039 var w = x1.square().multiply(THREE)
8b095871 20040
9987f0c1
IC
20041 if (a.signum() !== 0) {
20042 w = w.add(this.z.square().multiply(a))
20043 }
8b095871 20044
9987f0c1
IC
20045 w = w.mod(this.curve.p)
20046 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
20047 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
20048 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
20049 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
20050 // z3 = 8 * (y1 * z1)^3
20051 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
8b095871 20052
9987f0c1 20053 return new Point(this.curve, x3, y3, z3)
8b095871
IC
20054}
20055
9987f0c1
IC
20056// Simple NAF (Non-Adjacent Form) multiplication algorithm
20057// TODO: modularize the multiplication algorithm
20058Point.prototype.multiply = function (k) {
20059 if (this.curve.isInfinity(this)) return this
20060 if (k.signum() === 0) return this.curve.infinity
8b095871 20061
9987f0c1
IC
20062 var e = k
20063 var h = e.multiply(THREE)
8b095871 20064
9987f0c1
IC
20065 var neg = this.negate()
20066 var R = this
8b095871 20067
9987f0c1
IC
20068 for (var i = h.bitLength() - 2; i > 0; --i) {
20069 var hBit = h.testBit(i)
20070 var eBit = e.testBit(i)
8b095871 20071
9987f0c1 20072 R = R.twice()
8b095871 20073
9987f0c1
IC
20074 if (hBit !== eBit) {
20075 R = R.add(hBit ? this : neg)
20076 }
8b095871
IC
20077 }
20078
9987f0c1
IC
20079 return R
20080}
8b095871 20081
9987f0c1
IC
20082// Compute this*j + x*k (simultaneous multiplication)
20083Point.prototype.multiplyTwo = function (j, x, k) {
20084 var i = Math.max(j.bitLength(), k.bitLength()) - 1
20085 var R = this.curve.infinity
20086 var both = this.add(x)
20087
20088 while (i >= 0) {
20089 var jBit = j.testBit(i)
20090 var kBit = k.testBit(i)
20091
20092 R = R.twice()
20093
20094 if (jBit) {
20095 if (kBit) {
20096 R = R.add(both)
20097 } else {
20098 R = R.add(this)
20099 }
20100 } else if (kBit) {
20101 R = R.add(x)
20102 }
20103 --i
8b095871
IC
20104 }
20105
9987f0c1
IC
20106 return R
20107}
8b095871 20108
9987f0c1
IC
20109Point.prototype.getEncoded = function (compressed) {
20110 if (compressed == null) compressed = this.compressed
20111 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
8b095871 20112
9987f0c1
IC
20113 var x = this.affineX
20114 var y = this.affineY
20115 var byteLength = this.curve.pLength
20116 var buffer
20117
20118 // 0x02/0x03 | X
20119 if (compressed) {
20120 buffer = new Buffer(1 + byteLength)
20121 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
8b095871 20122
9987f0c1 20123 // 0x04 | X | Y
8b095871 20124 } else {
9987f0c1
IC
20125 buffer = new Buffer(1 + byteLength + byteLength)
20126 buffer.writeUInt8(0x04, 0)
8b095871 20127
9987f0c1 20128 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
8b095871
IC
20129 }
20130
9987f0c1 20131 x.toBuffer(byteLength).copy(buffer, 1)
8b095871 20132
9987f0c1 20133 return buffer
8b095871
IC
20134}
20135
9987f0c1
IC
20136Point.decodeFrom = function (curve, buffer) {
20137 var type = buffer.readUInt8(0)
20138 var compressed = (type !== 4)
8b095871 20139
9987f0c1
IC
20140 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
20141 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
8b095871 20142
9987f0c1
IC
20143 var Q
20144 if (compressed) {
20145 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
20146 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
8b095871 20147
9987f0c1
IC
20148 var isOdd = (type === 0x03)
20149 Q = curve.pointFromX(isOdd, x)
20150 } else {
20151 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
8b095871 20152
9987f0c1
IC
20153 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
20154 Q = Point.fromAffine(curve, x, y)
20155 }
8b095871 20156
9987f0c1
IC
20157 Q.compressed = compressed
20158 return Q
8b095871
IC
20159}
20160
9987f0c1
IC
20161Point.prototype.toString = function () {
20162 if (this.curve.isInfinity(this)) return '(INFINITY)'
8b095871 20163
9987f0c1
IC
20164 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
20165}
8b095871 20166
9987f0c1 20167module.exports = Point
8b095871 20168
9987f0c1
IC
20169}).call(this,require("buffer").Buffer)
20170},{"assert":1,"bigi":37,"buffer":4}],92:[function(require,module,exports){
20171(function (Buffer){
20172'use strict'
20173var Transform = require('stream').Transform
20174var inherits = require('inherits')
8b095871 20175
9987f0c1
IC
20176function HashBase (blockSize) {
20177 Transform.call(this)
8b095871 20178
9987f0c1
IC
20179 this._block = new Buffer(blockSize)
20180 this._blockSize = blockSize
20181 this._blockOffset = 0
20182 this._length = [0, 0, 0, 0]
8b095871 20183
9987f0c1
IC
20184 this._finalized = false
20185}
8b095871 20186
9987f0c1 20187inherits(HashBase, Transform)
8b095871 20188
9987f0c1
IC
20189HashBase.prototype._transform = function (chunk, encoding, callback) {
20190 var error = null
20191 try {
20192 if (encoding !== 'buffer') chunk = new Buffer(chunk, encoding)
20193 this.update(chunk)
20194 } catch (err) {
20195 error = err
20196 }
8b095871 20197
9987f0c1
IC
20198 callback(error)
20199}
8b095871 20200
9987f0c1
IC
20201HashBase.prototype._flush = function (callback) {
20202 var error = null
20203 try {
20204 this.push(this._digest())
20205 } catch (err) {
20206 error = err
8b095871
IC
20207 }
20208
9987f0c1 20209 callback(error)
8b095871
IC
20210}
20211
9987f0c1
IC
20212HashBase.prototype.update = function (data, encoding) {
20213 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
20214 if (this._finalized) throw new Error('Digest already called')
20215 if (!Buffer.isBuffer(data)) data = new Buffer(data, encoding || 'binary')
8b095871 20216
9987f0c1
IC
20217 // consume data
20218 var block = this._block
20219 var offset = 0
20220 while (this._blockOffset + data.length - offset >= this._blockSize) {
20221 for (var i = this._blockOffset; i < this._blockSize;) block[i++] = data[offset++]
20222 this._update()
20223 this._blockOffset = 0
20224 }
20225 while (offset < data.length) block[this._blockOffset++] = data[offset++]
8b095871 20226
9987f0c1
IC
20227 // update length
20228 for (var j = 0, carry = data.length * 8; carry > 0; ++j) {
20229 this._length[j] += carry
20230 carry = (this._length[j] / 0x0100000000) | 0
20231 if (carry > 0) this._length[j] -= 0x0100000000 * carry
20232 }
8b095871 20233
9987f0c1
IC
20234 return this
20235}
8b095871 20236
9987f0c1
IC
20237HashBase.prototype._update = function (data) {
20238 throw new Error('_update is not implemented')
20239}
8b095871 20240
9987f0c1
IC
20241HashBase.prototype.digest = function (encoding) {
20242 if (this._finalized) throw new Error('Digest already called')
20243 this._finalized = true
8b095871 20244
9987f0c1
IC
20245 var digest = this._digest()
20246 if (encoding !== undefined) digest = digest.toString(encoding)
20247 return digest
20248}
8b095871 20249
9987f0c1
IC
20250HashBase.prototype._digest = function () {
20251 throw new Error('_digest is not implemented')
20252}
8b095871 20253
9987f0c1 20254module.exports = HashBase
8b095871 20255
9987f0c1
IC
20256}).call(this,require("buffer").Buffer)
20257},{"buffer":4,"inherits":93,"stream":27}],93:[function(require,module,exports){
20258arguments[4][8][0].apply(exports,arguments)
20259},{"dup":8}],94:[function(require,module,exports){
20260(function (Buffer){
20261// constant-space merkle root calculation algorithm
20262module.exports = function fastRoot (values, digestFn) {
20263 if (!Array.isArray(values)) throw TypeError('Expected values Array')
20264 if (typeof digestFn !== 'function') throw TypeError('Expected digest Function')
8b095871 20265
9987f0c1
IC
20266 var length = values.length
20267 var results = values.concat()
8b095871 20268
9987f0c1
IC
20269 while (length > 1) {
20270 var j = 0
8b095871 20271
9987f0c1
IC
20272 for (var i = 0; i < length; i += 2, ++j) {
20273 var left = results[i]
20274 var right = i + 1 === length ? left : results[i + 1]
20275 var data = Buffer.concat([left, right])
8b095871 20276
9987f0c1 20277 results[j] = digestFn(data)
8b095871
IC
20278 }
20279
9987f0c1 20280 length = j
8b095871
IC
20281 }
20282
9987f0c1 20283 return results[0]
8b095871
IC
20284}
20285
8b095871 20286}).call(this,require("buffer").Buffer)
9987f0c1
IC
20287},{"buffer":4}],95:[function(require,module,exports){
20288var OPS = require('bitcoin-ops')
20289
20290function encodingLength (i) {
20291 return i < OPS.OP_PUSHDATA1 ? 1
20292 : i <= 0xff ? 2
20293 : i <= 0xffff ? 3
20294 : 5
8b095871
IC
20295}
20296
9987f0c1
IC
20297function encode (buffer, number, offset) {
20298 var size = encodingLength(number)
8b095871 20299
9987f0c1
IC
20300 // ~6 bit
20301 if (size === 1) {
20302 buffer.writeUInt8(number, offset)
8b095871 20303
9987f0c1
IC
20304 // 8 bit
20305 } else if (size === 2) {
20306 buffer.writeUInt8(OPS.OP_PUSHDATA1, offset)
20307 buffer.writeUInt8(number, offset + 1)
20308
20309 // 16 bit
20310 } else if (size === 3) {
20311 buffer.writeUInt8(OPS.OP_PUSHDATA2, offset)
20312 buffer.writeUInt16LE(number, offset + 1)
8b095871 20313
9987f0c1
IC
20314 // 32 bit
20315 } else {
20316 buffer.writeUInt8(OPS.OP_PUSHDATA4, offset)
20317 buffer.writeUInt32LE(number, offset + 1)
20318 }
8b095871 20319
9987f0c1 20320 return size
8b095871
IC
20321}
20322
9987f0c1
IC
20323function decode (buffer, offset) {
20324 var opcode = buffer.readUInt8(offset)
20325 var number, size
8b095871 20326
9987f0c1
IC
20327 // ~6 bit
20328 if (opcode < OPS.OP_PUSHDATA1) {
20329 number = opcode
20330 size = 1
8b095871 20331
9987f0c1
IC
20332 // 8 bit
20333 } else if (opcode === OPS.OP_PUSHDATA1) {
20334 if (offset + 2 > buffer.length) return null
20335 number = buffer.readUInt8(offset + 1)
20336 size = 2
8b095871 20337
9987f0c1
IC
20338 // 16 bit
20339 } else if (opcode === OPS.OP_PUSHDATA2) {
20340 if (offset + 3 > buffer.length) return null
20341 number = buffer.readUInt16LE(offset + 1)
20342 size = 3
8b095871 20343
9987f0c1
IC
20344 // 32 bit
20345 } else {
20346 if (offset + 5 > buffer.length) return null
20347 if (opcode !== OPS.OP_PUSHDATA4) throw new Error('Unexpected opcode')
8b095871 20348
9987f0c1
IC
20349 number = buffer.readUInt32LE(offset + 1)
20350 size = 5
20351 }
8b095871 20352
9987f0c1
IC
20353 return {
20354 opcode: opcode,
20355 number: number,
20356 size: size
20357 }
8b095871
IC
20358}
20359
20360module.exports = {
9987f0c1
IC
20361 encodingLength: encodingLength,
20362 encode: encode,
20363 decode: decode
8b095871
IC
20364}
20365
9987f0c1
IC
20366},{"bitcoin-ops":40}],96:[function(require,module,exports){
20367(function (process,global){
20368'use strict'
8b095871 20369
9987f0c1
IC
20370function oldBrowser () {
20371 throw new Error('secure random number generation not supported by this browser\nuse chrome, FireFox or Internet Explorer 11')
8b095871
IC
20372}
20373
9987f0c1
IC
20374var Buffer = require('safe-buffer').Buffer
20375var crypto = global.crypto || global.msCrypto
8b095871 20376
9987f0c1
IC
20377if (crypto && crypto.getRandomValues) {
20378 module.exports = randomBytes
20379} else {
20380 module.exports = oldBrowser
20381}
8b095871 20382
9987f0c1
IC
20383function randomBytes (size, cb) {
20384 // phantomjs needs to throw
20385 if (size > 65536) throw new Error('requested too many random bytes')
20386 // in case browserify isn't using the Uint8Array version
20387 var rawBytes = new global.Uint8Array(size)
8b095871 20388
9987f0c1
IC
20389 // This will not work in older browsers.
20390 // See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
20391 if (size > 0) { // getRandomValues fails on IE if size == 0
20392 crypto.getRandomValues(rawBytes)
8b095871 20393 }
8b095871 20394
9987f0c1
IC
20395 // XXX: phantomjs doesn't like a buffer being passed here
20396 var bytes = Buffer.from(rawBytes.buffer)
8b095871 20397
9987f0c1
IC
20398 if (typeof cb === 'function') {
20399 return process.nextTick(function () {
20400 cb(null, bytes)
20401 })
20402 }
8b095871 20403
9987f0c1 20404 return bytes
8b095871
IC
20405}
20406
9987f0c1
IC
20407}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20408},{"_process":12,"safe-buffer":98}],97:[function(require,module,exports){
20409(function (Buffer){
20410'use strict'
20411var inherits = require('inherits')
20412var HashBase = require('hash-base')
8b095871 20413
9987f0c1
IC
20414function RIPEMD160 () {
20415 HashBase.call(this, 64)
8b095871 20416
9987f0c1
IC
20417 // state
20418 this._a = 0x67452301
20419 this._b = 0xefcdab89
20420 this._c = 0x98badcfe
20421 this._d = 0x10325476
20422 this._e = 0xc3d2e1f0
8b095871
IC
20423}
20424
9987f0c1
IC
20425inherits(RIPEMD160, HashBase)
20426
20427RIPEMD160.prototype._update = function () {
20428 var m = new Array(16)
20429 for (var i = 0; i < 16; ++i) m[i] = this._block.readInt32LE(i * 4)
20430
20431 var al = this._a
20432 var bl = this._b
20433 var cl = this._c
20434 var dl = this._d
20435 var el = this._e
20436
20437 // Mj = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
20438 // K = 0x00000000
20439 // Sj = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
20440 al = fn1(al, bl, cl, dl, el, m[0], 0x00000000, 11); cl = rotl(cl, 10)
20441 el = fn1(el, al, bl, cl, dl, m[1], 0x00000000, 14); bl = rotl(bl, 10)
20442 dl = fn1(dl, el, al, bl, cl, m[2], 0x00000000, 15); al = rotl(al, 10)
20443 cl = fn1(cl, dl, el, al, bl, m[3], 0x00000000, 12); el = rotl(el, 10)
20444 bl = fn1(bl, cl, dl, el, al, m[4], 0x00000000, 5); dl = rotl(dl, 10)
20445 al = fn1(al, bl, cl, dl, el, m[5], 0x00000000, 8); cl = rotl(cl, 10)
20446 el = fn1(el, al, bl, cl, dl, m[6], 0x00000000, 7); bl = rotl(bl, 10)
20447 dl = fn1(dl, el, al, bl, cl, m[7], 0x00000000, 9); al = rotl(al, 10)
20448 cl = fn1(cl, dl, el, al, bl, m[8], 0x00000000, 11); el = rotl(el, 10)
20449 bl = fn1(bl, cl, dl, el, al, m[9], 0x00000000, 13); dl = rotl(dl, 10)
20450 al = fn1(al, bl, cl, dl, el, m[10], 0x00000000, 14); cl = rotl(cl, 10)
20451 el = fn1(el, al, bl, cl, dl, m[11], 0x00000000, 15); bl = rotl(bl, 10)
20452 dl = fn1(dl, el, al, bl, cl, m[12], 0x00000000, 6); al = rotl(al, 10)
20453 cl = fn1(cl, dl, el, al, bl, m[13], 0x00000000, 7); el = rotl(el, 10)
20454 bl = fn1(bl, cl, dl, el, al, m[14], 0x00000000, 9); dl = rotl(dl, 10)
20455 al = fn1(al, bl, cl, dl, el, m[15], 0x00000000, 8); cl = rotl(cl, 10)
20456
20457 // Mj = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
20458 // K = 0x5a827999
20459 // Sj = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
20460 el = fn2(el, al, bl, cl, dl, m[7], 0x5a827999, 7); bl = rotl(bl, 10)
20461 dl = fn2(dl, el, al, bl, cl, m[4], 0x5a827999, 6); al = rotl(al, 10)
20462 cl = fn2(cl, dl, el, al, bl, m[13], 0x5a827999, 8); el = rotl(el, 10)
20463 bl = fn2(bl, cl, dl, el, al, m[1], 0x5a827999, 13); dl = rotl(dl, 10)
20464 al = fn2(al, bl, cl, dl, el, m[10], 0x5a827999, 11); cl = rotl(cl, 10)
20465 el = fn2(el, al, bl, cl, dl, m[6], 0x5a827999, 9); bl = rotl(bl, 10)
20466 dl = fn2(dl, el, al, bl, cl, m[15], 0x5a827999, 7); al = rotl(al, 10)
20467 cl = fn2(cl, dl, el, al, bl, m[3], 0x5a827999, 15); el = rotl(el, 10)
20468 bl = fn2(bl, cl, dl, el, al, m[12], 0x5a827999, 7); dl = rotl(dl, 10)
20469 al = fn2(al, bl, cl, dl, el, m[0], 0x5a827999, 12); cl = rotl(cl, 10)
20470 el = fn2(el, al, bl, cl, dl, m[9], 0x5a827999, 15); bl = rotl(bl, 10)
20471 dl = fn2(dl, el, al, bl, cl, m[5], 0x5a827999, 9); al = rotl(al, 10)
20472 cl = fn2(cl, dl, el, al, bl, m[2], 0x5a827999, 11); el = rotl(el, 10)
20473 bl = fn2(bl, cl, dl, el, al, m[14], 0x5a827999, 7); dl = rotl(dl, 10)
20474 al = fn2(al, bl, cl, dl, el, m[11], 0x5a827999, 13); cl = rotl(cl, 10)
20475 el = fn2(el, al, bl, cl, dl, m[8], 0x5a827999, 12); bl = rotl(bl, 10)
20476
20477 // Mj = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
20478 // K = 0x6ed9eba1
20479 // Sj = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
20480 dl = fn3(dl, el, al, bl, cl, m[3], 0x6ed9eba1, 11); al = rotl(al, 10)
20481 cl = fn3(cl, dl, el, al, bl, m[10], 0x6ed9eba1, 13); el = rotl(el, 10)
20482 bl = fn3(bl, cl, dl, el, al, m[14], 0x6ed9eba1, 6); dl = rotl(dl, 10)
20483 al = fn3(al, bl, cl, dl, el, m[4], 0x6ed9eba1, 7); cl = rotl(cl, 10)
20484 el = fn3(el, al, bl, cl, dl, m[9], 0x6ed9eba1, 14); bl = rotl(bl, 10)
20485 dl = fn3(dl, el, al, bl, cl, m[15], 0x6ed9eba1, 9); al = rotl(al, 10)
20486 cl = fn3(cl, dl, el, al, bl, m[8], 0x6ed9eba1, 13); el = rotl(el, 10)
20487 bl = fn3(bl, cl, dl, el, al, m[1], 0x6ed9eba1, 15); dl = rotl(dl, 10)
20488 al = fn3(al, bl, cl, dl, el, m[2], 0x6ed9eba1, 14); cl = rotl(cl, 10)
20489 el = fn3(el, al, bl, cl, dl, m[7], 0x6ed9eba1, 8); bl = rotl(bl, 10)
20490 dl = fn3(dl, el, al, bl, cl, m[0], 0x6ed9eba1, 13); al = rotl(al, 10)
20491 cl = fn3(cl, dl, el, al, bl, m[6], 0x6ed9eba1, 6); el = rotl(el, 10)
20492 bl = fn3(bl, cl, dl, el, al, m[13], 0x6ed9eba1, 5); dl = rotl(dl, 10)
20493 al = fn3(al, bl, cl, dl, el, m[11], 0x6ed9eba1, 12); cl = rotl(cl, 10)
20494 el = fn3(el, al, bl, cl, dl, m[5], 0x6ed9eba1, 7); bl = rotl(bl, 10)
20495 dl = fn3(dl, el, al, bl, cl, m[12], 0x6ed9eba1, 5); al = rotl(al, 10)
20496
20497 // Mj = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
20498 // K = 0x8f1bbcdc
20499 // Sj = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
20500 cl = fn4(cl, dl, el, al, bl, m[1], 0x8f1bbcdc, 11); el = rotl(el, 10)
20501 bl = fn4(bl, cl, dl, el, al, m[9], 0x8f1bbcdc, 12); dl = rotl(dl, 10)
20502 al = fn4(al, bl, cl, dl, el, m[11], 0x8f1bbcdc, 14); cl = rotl(cl, 10)
20503 el = fn4(el, al, bl, cl, dl, m[10], 0x8f1bbcdc, 15); bl = rotl(bl, 10)
20504 dl = fn4(dl, el, al, bl, cl, m[0], 0x8f1bbcdc, 14); al = rotl(al, 10)
20505 cl = fn4(cl, dl, el, al, bl, m[8], 0x8f1bbcdc, 15); el = rotl(el, 10)
20506 bl = fn4(bl, cl, dl, el, al, m[12], 0x8f1bbcdc, 9); dl = rotl(dl, 10)
20507 al = fn4(al, bl, cl, dl, el, m[4], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20508 el = fn4(el, al, bl, cl, dl, m[13], 0x8f1bbcdc, 9); bl = rotl(bl, 10)
20509 dl = fn4(dl, el, al, bl, cl, m[3], 0x8f1bbcdc, 14); al = rotl(al, 10)
20510 cl = fn4(cl, dl, el, al, bl, m[7], 0x8f1bbcdc, 5); el = rotl(el, 10)
20511 bl = fn4(bl, cl, dl, el, al, m[15], 0x8f1bbcdc, 6); dl = rotl(dl, 10)
20512 al = fn4(al, bl, cl, dl, el, m[14], 0x8f1bbcdc, 8); cl = rotl(cl, 10)
20513 el = fn4(el, al, bl, cl, dl, m[5], 0x8f1bbcdc, 6); bl = rotl(bl, 10)
20514 dl = fn4(dl, el, al, bl, cl, m[6], 0x8f1bbcdc, 5); al = rotl(al, 10)
20515 cl = fn4(cl, dl, el, al, bl, m[2], 0x8f1bbcdc, 12); el = rotl(el, 10)
20516
20517 // Mj = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
20518 // K = 0xa953fd4e
20519 // Sj = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
20520 bl = fn5(bl, cl, dl, el, al, m[4], 0xa953fd4e, 9); dl = rotl(dl, 10)
20521 al = fn5(al, bl, cl, dl, el, m[0], 0xa953fd4e, 15); cl = rotl(cl, 10)
20522 el = fn5(el, al, bl, cl, dl, m[5], 0xa953fd4e, 5); bl = rotl(bl, 10)
20523 dl = fn5(dl, el, al, bl, cl, m[9], 0xa953fd4e, 11); al = rotl(al, 10)
20524 cl = fn5(cl, dl, el, al, bl, m[7], 0xa953fd4e, 6); el = rotl(el, 10)
20525 bl = fn5(bl, cl, dl, el, al, m[12], 0xa953fd4e, 8); dl = rotl(dl, 10)
20526 al = fn5(al, bl, cl, dl, el, m[2], 0xa953fd4e, 13); cl = rotl(cl, 10)
20527 el = fn5(el, al, bl, cl, dl, m[10], 0xa953fd4e, 12); bl = rotl(bl, 10)
20528 dl = fn5(dl, el, al, bl, cl, m[14], 0xa953fd4e, 5); al = rotl(al, 10)
20529 cl = fn5(cl, dl, el, al, bl, m[1], 0xa953fd4e, 12); el = rotl(el, 10)
20530 bl = fn5(bl, cl, dl, el, al, m[3], 0xa953fd4e, 13); dl = rotl(dl, 10)
20531 al = fn5(al, bl, cl, dl, el, m[8], 0xa953fd4e, 14); cl = rotl(cl, 10)
20532 el = fn5(el, al, bl, cl, dl, m[11], 0xa953fd4e, 11); bl = rotl(bl, 10)
20533 dl = fn5(dl, el, al, bl, cl, m[6], 0xa953fd4e, 8); al = rotl(al, 10)
20534 cl = fn5(cl, dl, el, al, bl, m[15], 0xa953fd4e, 5); el = rotl(el, 10)
20535 bl = fn5(bl, cl, dl, el, al, m[13], 0xa953fd4e, 6); dl = rotl(dl, 10)
20536
20537 var ar = this._a
20538 var br = this._b
20539 var cr = this._c
20540 var dr = this._d
20541 var er = this._e
20542
20543 // M'j = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
20544 // K' = 0x50a28be6
20545 // S'j = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
20546 ar = fn5(ar, br, cr, dr, er, m[5], 0x50a28be6, 8); cr = rotl(cr, 10)
20547 er = fn5(er, ar, br, cr, dr, m[14], 0x50a28be6, 9); br = rotl(br, 10)
20548 dr = fn5(dr, er, ar, br, cr, m[7], 0x50a28be6, 9); ar = rotl(ar, 10)
20549 cr = fn5(cr, dr, er, ar, br, m[0], 0x50a28be6, 11); er = rotl(er, 10)
20550 br = fn5(br, cr, dr, er, ar, m[9], 0x50a28be6, 13); dr = rotl(dr, 10)
20551 ar = fn5(ar, br, cr, dr, er, m[2], 0x50a28be6, 15); cr = rotl(cr, 10)
20552 er = fn5(er, ar, br, cr, dr, m[11], 0x50a28be6, 15); br = rotl(br, 10)
20553 dr = fn5(dr, er, ar, br, cr, m[4], 0x50a28be6, 5); ar = rotl(ar, 10)
20554 cr = fn5(cr, dr, er, ar, br, m[13], 0x50a28be6, 7); er = rotl(er, 10)
20555 br = fn5(br, cr, dr, er, ar, m[6], 0x50a28be6, 7); dr = rotl(dr, 10)
20556 ar = fn5(ar, br, cr, dr, er, m[15], 0x50a28be6, 8); cr = rotl(cr, 10)
20557 er = fn5(er, ar, br, cr, dr, m[8], 0x50a28be6, 11); br = rotl(br, 10)
20558 dr = fn5(dr, er, ar, br, cr, m[1], 0x50a28be6, 14); ar = rotl(ar, 10)
20559 cr = fn5(cr, dr, er, ar, br, m[10], 0x50a28be6, 14); er = rotl(er, 10)
20560 br = fn5(br, cr, dr, er, ar, m[3], 0x50a28be6, 12); dr = rotl(dr, 10)
20561 ar = fn5(ar, br, cr, dr, er, m[12], 0x50a28be6, 6); cr = rotl(cr, 10)
20562
20563 // M'j = 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
20564 // K' = 0x5c4dd124
20565 // S'j = 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
20566 er = fn4(er, ar, br, cr, dr, m[6], 0x5c4dd124, 9); br = rotl(br, 10)
20567 dr = fn4(dr, er, ar, br, cr, m[11], 0x5c4dd124, 13); ar = rotl(ar, 10)
20568 cr = fn4(cr, dr, er, ar, br, m[3], 0x5c4dd124, 15); er = rotl(er, 10)
20569 br = fn4(br, cr, dr, er, ar, m[7], 0x5c4dd124, 7); dr = rotl(dr, 10)
20570 ar = fn4(ar, br, cr, dr, er, m[0], 0x5c4dd124, 12); cr = rotl(cr, 10)
20571 er = fn4(er, ar, br, cr, dr, m[13], 0x5c4dd124, 8); br = rotl(br, 10)
20572 dr = fn4(dr, er, ar, br, cr, m[5], 0x5c4dd124, 9); ar = rotl(ar, 10)
20573 cr = fn4(cr, dr, er, ar, br, m[10], 0x5c4dd124, 11); er = rotl(er, 10)
20574 br = fn4(br, cr, dr, er, ar, m[14], 0x5c4dd124, 7); dr = rotl(dr, 10)
20575 ar = fn4(ar, br, cr, dr, er, m[15], 0x5c4dd124, 7); cr = rotl(cr, 10)
20576 er = fn4(er, ar, br, cr, dr, m[8], 0x5c4dd124, 12); br = rotl(br, 10)
20577 dr = fn4(dr, er, ar, br, cr, m[12], 0x5c4dd124, 7); ar = rotl(ar, 10)
20578 cr = fn4(cr, dr, er, ar, br, m[4], 0x5c4dd124, 6); er = rotl(er, 10)
20579 br = fn4(br, cr, dr, er, ar, m[9], 0x5c4dd124, 15); dr = rotl(dr, 10)
20580 ar = fn4(ar, br, cr, dr, er, m[1], 0x5c4dd124, 13); cr = rotl(cr, 10)
20581 er = fn4(er, ar, br, cr, dr, m[2], 0x5c4dd124, 11); br = rotl(br, 10)
20582
20583 // M'j = 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
20584 // K' = 0x6d703ef3
20585 // S'j = 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
20586 dr = fn3(dr, er, ar, br, cr, m[15], 0x6d703ef3, 9); ar = rotl(ar, 10)
20587 cr = fn3(cr, dr, er, ar, br, m[5], 0x6d703ef3, 7); er = rotl(er, 10)
20588 br = fn3(br, cr, dr, er, ar, m[1], 0x6d703ef3, 15); dr = rotl(dr, 10)
20589 ar = fn3(ar, br, cr, dr, er, m[3], 0x6d703ef3, 11); cr = rotl(cr, 10)
20590 er = fn3(er, ar, br, cr, dr, m[7], 0x6d703ef3, 8); br = rotl(br, 10)
20591 dr = fn3(dr, er, ar, br, cr, m[14], 0x6d703ef3, 6); ar = rotl(ar, 10)
20592 cr = fn3(cr, dr, er, ar, br, m[6], 0x6d703ef3, 6); er = rotl(er, 10)
20593 br = fn3(br, cr, dr, er, ar, m[9], 0x6d703ef3, 14); dr = rotl(dr, 10)
20594 ar = fn3(ar, br, cr, dr, er, m[11], 0x6d703ef3, 12); cr = rotl(cr, 10)
20595 er = fn3(er, ar, br, cr, dr, m[8], 0x6d703ef3, 13); br = rotl(br, 10)
20596 dr = fn3(dr, er, ar, br, cr, m[12], 0x6d703ef3, 5); ar = rotl(ar, 10)
20597 cr = fn3(cr, dr, er, ar, br, m[2], 0x6d703ef3, 14); er = rotl(er, 10)
20598 br = fn3(br, cr, dr, er, ar, m[10], 0x6d703ef3, 13); dr = rotl(dr, 10)
20599 ar = fn3(ar, br, cr, dr, er, m[0], 0x6d703ef3, 13); cr = rotl(cr, 10)
20600 er = fn3(er, ar, br, cr, dr, m[4], 0x6d703ef3, 7); br = rotl(br, 10)
20601 dr = fn3(dr, er, ar, br, cr, m[13], 0x6d703ef3, 5); ar = rotl(ar, 10)
20602
20603 // M'j = 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
20604 // K' = 0x7a6d76e9
20605 // S'j = 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
20606 cr = fn2(cr, dr, er, ar, br, m[8], 0x7a6d76e9, 15); er = rotl(er, 10)
20607 br = fn2(br, cr, dr, er, ar, m[6], 0x7a6d76e9, 5); dr = rotl(dr, 10)
20608 ar = fn2(ar, br, cr, dr, er, m[4], 0x7a6d76e9, 8); cr = rotl(cr, 10)
20609 er = fn2(er, ar, br, cr, dr, m[1], 0x7a6d76e9, 11); br = rotl(br, 10)
20610 dr = fn2(dr, er, ar, br, cr, m[3], 0x7a6d76e9, 14); ar = rotl(ar, 10)
20611 cr = fn2(cr, dr, er, ar, br, m[11], 0x7a6d76e9, 14); er = rotl(er, 10)
20612 br = fn2(br, cr, dr, er, ar, m[15], 0x7a6d76e9, 6); dr = rotl(dr, 10)
20613 ar = fn2(ar, br, cr, dr, er, m[0], 0x7a6d76e9, 14); cr = rotl(cr, 10)
20614 er = fn2(er, ar, br, cr, dr, m[5], 0x7a6d76e9, 6); br = rotl(br, 10)
20615 dr = fn2(dr, er, ar, br, cr, m[12], 0x7a6d76e9, 9); ar = rotl(ar, 10)
20616 cr = fn2(cr, dr, er, ar, br, m[2], 0x7a6d76e9, 12); er = rotl(er, 10)
20617 br = fn2(br, cr, dr, er, ar, m[13], 0x7a6d76e9, 9); dr = rotl(dr, 10)
20618 ar = fn2(ar, br, cr, dr, er, m[9], 0x7a6d76e9, 12); cr = rotl(cr, 10)
20619 er = fn2(er, ar, br, cr, dr, m[7], 0x7a6d76e9, 5); br = rotl(br, 10)
20620 dr = fn2(dr, er, ar, br, cr, m[10], 0x7a6d76e9, 15); ar = rotl(ar, 10)
20621 cr = fn2(cr, dr, er, ar, br, m[14], 0x7a6d76e9, 8); er = rotl(er, 10)
20622
20623 // M'j = 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
20624 // K' = 0x00000000
20625 // S'j = 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
20626 br = fn1(br, cr, dr, er, ar, m[12], 0x00000000, 8); dr = rotl(dr, 10)
20627 ar = fn1(ar, br, cr, dr, er, m[15], 0x00000000, 5); cr = rotl(cr, 10)
20628 er = fn1(er, ar, br, cr, dr, m[10], 0x00000000, 12); br = rotl(br, 10)
20629 dr = fn1(dr, er, ar, br, cr, m[4], 0x00000000, 9); ar = rotl(ar, 10)
20630 cr = fn1(cr, dr, er, ar, br, m[1], 0x00000000, 12); er = rotl(er, 10)
20631 br = fn1(br, cr, dr, er, ar, m[5], 0x00000000, 5); dr = rotl(dr, 10)
20632 ar = fn1(ar, br, cr, dr, er, m[8], 0x00000000, 14); cr = rotl(cr, 10)
20633 er = fn1(er, ar, br, cr, dr, m[7], 0x00000000, 6); br = rotl(br, 10)
20634 dr = fn1(dr, er, ar, br, cr, m[6], 0x00000000, 8); ar = rotl(ar, 10)
20635 cr = fn1(cr, dr, er, ar, br, m[2], 0x00000000, 13); er = rotl(er, 10)
20636 br = fn1(br, cr, dr, er, ar, m[13], 0x00000000, 6); dr = rotl(dr, 10)
20637 ar = fn1(ar, br, cr, dr, er, m[14], 0x00000000, 5); cr = rotl(cr, 10)
20638 er = fn1(er, ar, br, cr, dr, m[0], 0x00000000, 15); br = rotl(br, 10)
20639 dr = fn1(dr, er, ar, br, cr, m[3], 0x00000000, 13); ar = rotl(ar, 10)
20640 cr = fn1(cr, dr, er, ar, br, m[9], 0x00000000, 11); er = rotl(er, 10)
20641 br = fn1(br, cr, dr, er, ar, m[11], 0x00000000, 11); dr = rotl(dr, 10)
20642
20643 // change state
20644 var t = (this._b + cl + dr) | 0
20645 this._b = (this._c + dl + er) | 0
20646 this._c = (this._d + el + ar) | 0
20647 this._d = (this._e + al + br) | 0
20648 this._e = (this._a + bl + cr) | 0
20649 this._a = t
20650}
20651
20652RIPEMD160.prototype._digest = function () {
20653 // create padding and handle blocks
20654 this._block[this._blockOffset++] = 0x80
20655 if (this._blockOffset > 56) {
20656 this._block.fill(0, this._blockOffset, 64)
20657 this._update()
20658 this._blockOffset = 0
20659 }
20660
20661 this._block.fill(0, this._blockOffset, 56)
20662 this._block.writeUInt32LE(this._length[0], 56)
20663 this._block.writeUInt32LE(this._length[1], 60)
20664 this._update()
20665
20666 // produce result
20667 var buffer = new Buffer(20)
20668 buffer.writeInt32LE(this._a, 0)
20669 buffer.writeInt32LE(this._b, 4)
20670 buffer.writeInt32LE(this._c, 8)
20671 buffer.writeInt32LE(this._d, 12)
20672 buffer.writeInt32LE(this._e, 16)
20673 return buffer
20674}
8b095871 20675
9987f0c1
IC
20676function rotl (x, n) {
20677 return (x << n) | (x >>> (32 - n))
20678}
8b095871 20679
9987f0c1
IC
20680function fn1 (a, b, c, d, e, m, k, s) {
20681 return (rotl((a + (b ^ c ^ d) + m + k) | 0, s) + e) | 0
20682}
8b095871 20683
9987f0c1
IC
20684function fn2 (a, b, c, d, e, m, k, s) {
20685 return (rotl((a + ((b & c) | ((~b) & d)) + m + k) | 0, s) + e) | 0
20686}
8b095871 20687
9987f0c1
IC
20688function fn3 (a, b, c, d, e, m, k, s) {
20689 return (rotl((a + ((b | (~c)) ^ d) + m + k) | 0, s) + e) | 0
20690}
8b095871 20691
9987f0c1
IC
20692function fn4 (a, b, c, d, e, m, k, s) {
20693 return (rotl((a + ((b & d) | (c & (~d))) + m + k) | 0, s) + e) | 0
20694}
8b095871 20695
9987f0c1
IC
20696function fn5 (a, b, c, d, e, m, k, s) {
20697 return (rotl((a + (b ^ (c | (~d))) + m + k) | 0, s) + e) | 0
20698}
8b095871 20699
9987f0c1 20700module.exports = RIPEMD160
8b095871 20701
9987f0c1
IC
20702}).call(this,require("buffer").Buffer)
20703},{"buffer":4,"hash-base":92,"inherits":93}],98:[function(require,module,exports){
20704arguments[4][26][0].apply(exports,arguments)
20705},{"buffer":4,"dup":26}],99:[function(require,module,exports){
20706(function (Buffer){
20707// prototype class for hash functions
20708function Hash (blockSize, finalSize) {
20709 this._block = new Buffer(blockSize)
20710 this._finalSize = finalSize
20711 this._blockSize = blockSize
20712 this._len = 0
20713 this._s = 0
20714}
20715
20716Hash.prototype.update = function (data, enc) {
20717 if (typeof data === 'string') {
20718 enc = enc || 'utf8'
20719 data = new Buffer(data, enc)
8b095871
IC
20720 }
20721
9987f0c1
IC
20722 var l = this._len += data.length
20723 var s = this._s || 0
20724 var f = 0
20725 var buffer = this._block
8b095871 20726
9987f0c1
IC
20727 while (s < l) {
20728 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
20729 var ch = (t - f)
8b095871 20730
9987f0c1
IC
20731 for (var i = 0; i < ch; i++) {
20732 buffer[(s % this._blockSize) + i] = data[i + f]
8b095871
IC
20733 }
20734
9987f0c1
IC
20735 s += ch
20736 f += ch
8b095871 20737
9987f0c1
IC
20738 if ((s % this._blockSize) === 0) {
20739 this._update(buffer)
20740 }
20741 }
20742 this._s = s
8b095871 20743
9987f0c1
IC
20744 return this
20745}
8b095871 20746
9987f0c1
IC
20747Hash.prototype.digest = function (enc) {
20748 // Suppose the length of the message M, in bits, is l
20749 var l = this._len * 8
8b095871 20750
9987f0c1
IC
20751 // Append the bit 1 to the end of the message
20752 this._block[this._len % this._blockSize] = 0x80
8b095871 20753
9987f0c1
IC
20754 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
20755 this._block.fill(0, this._len % this._blockSize + 1)
8b095871 20756
9987f0c1
IC
20757 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
20758 this._update(this._block)
20759 this._block.fill(0)
20760 }
8b095871 20761
9987f0c1
IC
20762 // to this append the block which is equal to the number l written in binary
20763 // TODO: handle case where l is > Math.pow(2, 29)
20764 this._block.writeInt32BE(l, this._blockSize - 4)
8b095871 20765
9987f0c1 20766 var hash = this._update(this._block) || this._hash()
8b095871 20767
9987f0c1 20768 return enc ? hash.toString(enc) : hash
8b095871
IC
20769}
20770
9987f0c1
IC
20771Hash.prototype._update = function () {
20772 throw new Error('_update must be implemented by subclass')
8b095871
IC
20773}
20774
9987f0c1 20775module.exports = Hash
8b095871 20776
9987f0c1
IC
20777}).call(this,require("buffer").Buffer)
20778},{"buffer":4}],100:[function(require,module,exports){
20779var exports = module.exports = function SHA (algorithm) {
20780 algorithm = algorithm.toLowerCase()
8b095871 20781
9987f0c1
IC
20782 var Algorithm = exports[algorithm]
20783 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
8b095871 20784
9987f0c1 20785 return new Algorithm()
8b095871
IC
20786}
20787
9987f0c1
IC
20788exports.sha = require('./sha')
20789exports.sha1 = require('./sha1')
20790exports.sha224 = require('./sha224')
20791exports.sha256 = require('./sha256')
20792exports.sha384 = require('./sha384')
20793exports.sha512 = require('./sha512')
8b095871 20794
9987f0c1 20795},{"./sha":101,"./sha1":102,"./sha224":103,"./sha256":104,"./sha384":105,"./sha512":106}],101:[function(require,module,exports){
8b095871 20796(function (Buffer){
9987f0c1
IC
20797/*
20798 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
20799 * in FIPS PUB 180-1
20800 * This source code is derived from sha1.js of the same repository.
20801 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
20802 * operation was added.
20803 */
8b095871 20804
9987f0c1
IC
20805var inherits = require('inherits')
20806var Hash = require('./hash')
8b095871 20807
9987f0c1
IC
20808var K = [
20809 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20810]
8b095871 20811
9987f0c1 20812var W = new Array(80)
8b095871 20813
9987f0c1
IC
20814function Sha () {
20815 this.init()
20816 this._w = W
8b095871 20817
9987f0c1 20818 Hash.call(this, 64, 56)
8b095871
IC
20819}
20820
9987f0c1 20821inherits(Sha, Hash)
8b095871 20822
9987f0c1
IC
20823Sha.prototype.init = function () {
20824 this._a = 0x67452301
20825 this._b = 0xefcdab89
20826 this._c = 0x98badcfe
20827 this._d = 0x10325476
20828 this._e = 0xc3d2e1f0
8b095871 20829
9987f0c1 20830 return this
8b095871
IC
20831}
20832
9987f0c1
IC
20833function rotl5 (num) {
20834 return (num << 5) | (num >>> 27)
8b095871
IC
20835}
20836
9987f0c1
IC
20837function rotl30 (num) {
20838 return (num << 30) | (num >>> 2)
8b095871
IC
20839}
20840
9987f0c1
IC
20841function ft (s, b, c, d) {
20842 if (s === 0) return (b & c) | ((~b) & d)
20843 if (s === 2) return (b & c) | (b & d) | (c & d)
20844 return b ^ c ^ d
8b095871
IC
20845}
20846
9987f0c1
IC
20847Sha.prototype._update = function (M) {
20848 var W = this._w
8b095871 20849
9987f0c1
IC
20850 var a = this._a | 0
20851 var b = this._b | 0
20852 var c = this._c | 0
20853 var d = this._d | 0
20854 var e = this._e | 0
8b095871 20855
9987f0c1
IC
20856 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20857 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
8b095871 20858
9987f0c1
IC
20859 for (var j = 0; j < 80; ++j) {
20860 var s = ~~(j / 20)
20861 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 20862
9987f0c1
IC
20863 e = d
20864 d = c
20865 c = rotl30(b)
20866 b = a
20867 a = t
20868 }
8b095871 20869
9987f0c1
IC
20870 this._a = (a + this._a) | 0
20871 this._b = (b + this._b) | 0
20872 this._c = (c + this._c) | 0
20873 this._d = (d + this._d) | 0
20874 this._e = (e + this._e) | 0
8b095871
IC
20875}
20876
9987f0c1
IC
20877Sha.prototype._hash = function () {
20878 var H = new Buffer(20)
8b095871 20879
9987f0c1
IC
20880 H.writeInt32BE(this._a | 0, 0)
20881 H.writeInt32BE(this._b | 0, 4)
20882 H.writeInt32BE(this._c | 0, 8)
20883 H.writeInt32BE(this._d | 0, 12)
20884 H.writeInt32BE(this._e | 0, 16)
8b095871 20885
9987f0c1 20886 return H
8b095871
IC
20887}
20888
9987f0c1 20889module.exports = Sha
8b095871 20890
9987f0c1
IC
20891}).call(this,require("buffer").Buffer)
20892},{"./hash":99,"buffer":4,"inherits":93}],102:[function(require,module,exports){
20893(function (Buffer){
20894/*
20895 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
20896 * in FIPS PUB 180-1
20897 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
20898 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
20899 * Distributed under the BSD License
20900 * See http://pajhome.org.uk/crypt/md5 for details.
20901 */
8b095871 20902
9987f0c1
IC
20903var inherits = require('inherits')
20904var Hash = require('./hash')
8b095871 20905
9987f0c1
IC
20906var K = [
20907 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
20908]
8b095871 20909
9987f0c1 20910var W = new Array(80)
8b095871 20911
9987f0c1
IC
20912function Sha1 () {
20913 this.init()
20914 this._w = W
8b095871 20915
9987f0c1 20916 Hash.call(this, 64, 56)
8b095871
IC
20917}
20918
9987f0c1 20919inherits(Sha1, Hash)
8b095871 20920
9987f0c1
IC
20921Sha1.prototype.init = function () {
20922 this._a = 0x67452301
20923 this._b = 0xefcdab89
20924 this._c = 0x98badcfe
20925 this._d = 0x10325476
20926 this._e = 0xc3d2e1f0
8b095871 20927
9987f0c1 20928 return this
8b095871
IC
20929}
20930
9987f0c1
IC
20931function rotl1 (num) {
20932 return (num << 1) | (num >>> 31)
20933}
8b095871 20934
9987f0c1
IC
20935function rotl5 (num) {
20936 return (num << 5) | (num >>> 27)
8b095871
IC
20937}
20938
9987f0c1
IC
20939function rotl30 (num) {
20940 return (num << 30) | (num >>> 2)
8b095871
IC
20941}
20942
9987f0c1
IC
20943function ft (s, b, c, d) {
20944 if (s === 0) return (b & c) | ((~b) & d)
20945 if (s === 2) return (b & c) | (b & d) | (c & d)
20946 return b ^ c ^ d
8b095871
IC
20947}
20948
9987f0c1
IC
20949Sha1.prototype._update = function (M) {
20950 var W = this._w
8b095871 20951
9987f0c1
IC
20952 var a = this._a | 0
20953 var b = this._b | 0
20954 var c = this._c | 0
20955 var d = this._d | 0
20956 var e = this._e | 0
8b095871 20957
9987f0c1
IC
20958 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
20959 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
8b095871 20960
9987f0c1
IC
20961 for (var j = 0; j < 80; ++j) {
20962 var s = ~~(j / 20)
20963 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
8b095871 20964
9987f0c1
IC
20965 e = d
20966 d = c
20967 c = rotl30(b)
20968 b = a
20969 a = t
20970 }
8b095871 20971
9987f0c1
IC
20972 this._a = (a + this._a) | 0
20973 this._b = (b + this._b) | 0
20974 this._c = (c + this._c) | 0
20975 this._d = (d + this._d) | 0
20976 this._e = (e + this._e) | 0
8b095871
IC
20977}
20978
9987f0c1
IC
20979Sha1.prototype._hash = function () {
20980 var H = new Buffer(20)
20981
20982 H.writeInt32BE(this._a | 0, 0)
20983 H.writeInt32BE(this._b | 0, 4)
20984 H.writeInt32BE(this._c | 0, 8)
20985 H.writeInt32BE(this._d | 0, 12)
20986 H.writeInt32BE(this._e | 0, 16)
8b095871 20987
9987f0c1 20988 return H
8b095871
IC
20989}
20990
9987f0c1 20991module.exports = Sha1
8b095871 20992
9987f0c1
IC
20993}).call(this,require("buffer").Buffer)
20994},{"./hash":99,"buffer":4,"inherits":93}],103:[function(require,module,exports){
20995(function (Buffer){
20996/**
20997 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
20998 * in FIPS 180-2
20999 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21000 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21001 *
21002 */
8b095871 21003
9987f0c1
IC
21004var inherits = require('inherits')
21005var Sha256 = require('./sha256')
21006var Hash = require('./hash')
8b095871 21007
9987f0c1 21008var W = new Array(64)
8b095871 21009
9987f0c1
IC
21010function Sha224 () {
21011 this.init()
8b095871 21012
9987f0c1 21013 this._w = W // new Array(64)
8b095871 21014
9987f0c1 21015 Hash.call(this, 64, 56)
8b095871
IC
21016}
21017
9987f0c1 21018inherits(Sha224, Sha256)
8b095871 21019
9987f0c1
IC
21020Sha224.prototype.init = function () {
21021 this._a = 0xc1059ed8
21022 this._b = 0x367cd507
21023 this._c = 0x3070dd17
21024 this._d = 0xf70e5939
21025 this._e = 0xffc00b31
21026 this._f = 0x68581511
21027 this._g = 0x64f98fa7
21028 this._h = 0xbefa4fa4
21029
21030 return this
8b095871
IC
21031}
21032
9987f0c1
IC
21033Sha224.prototype._hash = function () {
21034 var H = new Buffer(28)
8b095871 21035
9987f0c1
IC
21036 H.writeInt32BE(this._a, 0)
21037 H.writeInt32BE(this._b, 4)
21038 H.writeInt32BE(this._c, 8)
21039 H.writeInt32BE(this._d, 12)
21040 H.writeInt32BE(this._e, 16)
21041 H.writeInt32BE(this._f, 20)
21042 H.writeInt32BE(this._g, 24)
8b095871 21043
9987f0c1 21044 return H
8b095871
IC
21045}
21046
9987f0c1 21047module.exports = Sha224
8b095871 21048
9987f0c1
IC
21049}).call(this,require("buffer").Buffer)
21050},{"./hash":99,"./sha256":104,"buffer":4,"inherits":93}],104:[function(require,module,exports){
21051(function (Buffer){
21052/**
21053 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
21054 * in FIPS 180-2
21055 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
21056 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
21057 *
21058 */
8b095871 21059
9987f0c1
IC
21060var inherits = require('inherits')
21061var Hash = require('./hash')
8b095871 21062
9987f0c1
IC
21063var K = [
21064 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
21065 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
21066 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
21067 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
21068 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
21069 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
21070 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
21071 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
21072 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
21073 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
21074 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
21075 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
21076 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
21077 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
21078 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
21079 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
21080]
8b095871 21081
9987f0c1 21082var W = new Array(64)
8b095871 21083
9987f0c1
IC
21084function Sha256 () {
21085 this.init()
8b095871 21086
9987f0c1 21087 this._w = W // new Array(64)
8b095871 21088
9987f0c1
IC
21089 Hash.call(this, 64, 56)
21090}
8b095871 21091
9987f0c1 21092inherits(Sha256, Hash)
8b095871 21093
9987f0c1
IC
21094Sha256.prototype.init = function () {
21095 this._a = 0x6a09e667
21096 this._b = 0xbb67ae85
21097 this._c = 0x3c6ef372
21098 this._d = 0xa54ff53a
21099 this._e = 0x510e527f
21100 this._f = 0x9b05688c
21101 this._g = 0x1f83d9ab
21102 this._h = 0x5be0cd19
8b095871 21103
9987f0c1
IC
21104 return this
21105}
8b095871 21106
9987f0c1
IC
21107function ch (x, y, z) {
21108 return z ^ (x & (y ^ z))
8b095871
IC
21109}
21110
9987f0c1
IC
21111function maj (x, y, z) {
21112 return (x & y) | (z & (x | y))
8b095871
IC
21113}
21114
9987f0c1
IC
21115function sigma0 (x) {
21116 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
8b095871
IC
21117}
21118
9987f0c1
IC
21119function sigma1 (x) {
21120 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
21121}
8b095871 21122
9987f0c1
IC
21123function gamma0 (x) {
21124 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
21125}
8b095871 21126
9987f0c1
IC
21127function gamma1 (x) {
21128 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
21129}
8b095871 21130
9987f0c1
IC
21131Sha256.prototype._update = function (M) {
21132 var W = this._w
8b095871 21133
9987f0c1
IC
21134 var a = this._a | 0
21135 var b = this._b | 0
21136 var c = this._c | 0
21137 var d = this._d | 0
21138 var e = this._e | 0
21139 var f = this._f | 0
21140 var g = this._g | 0
21141 var h = this._h | 0
8b095871 21142
9987f0c1
IC
21143 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
21144 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
8b095871 21145
9987f0c1
IC
21146 for (var j = 0; j < 64; ++j) {
21147 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
21148 var T2 = (sigma0(a) + maj(a, b, c)) | 0
8b095871 21149
9987f0c1
IC
21150 h = g
21151 g = f
21152 f = e
21153 e = (d + T1) | 0
21154 d = c
21155 c = b
21156 b = a
21157 a = (T1 + T2) | 0
8b095871
IC
21158 }
21159
9987f0c1
IC
21160 this._a = (a + this._a) | 0
21161 this._b = (b + this._b) | 0
21162 this._c = (c + this._c) | 0
21163 this._d = (d + this._d) | 0
21164 this._e = (e + this._e) | 0
21165 this._f = (f + this._f) | 0
21166 this._g = (g + this._g) | 0
21167 this._h = (h + this._h) | 0
8b095871
IC
21168}
21169
9987f0c1
IC
21170Sha256.prototype._hash = function () {
21171 var H = new Buffer(32)
8b095871 21172
9987f0c1
IC
21173 H.writeInt32BE(this._a, 0)
21174 H.writeInt32BE(this._b, 4)
21175 H.writeInt32BE(this._c, 8)
21176 H.writeInt32BE(this._d, 12)
21177 H.writeInt32BE(this._e, 16)
21178 H.writeInt32BE(this._f, 20)
21179 H.writeInt32BE(this._g, 24)
21180 H.writeInt32BE(this._h, 28)
8b095871 21181
9987f0c1 21182 return H
8b095871
IC
21183}
21184
9987f0c1 21185module.exports = Sha256
8b095871 21186
9987f0c1
IC
21187}).call(this,require("buffer").Buffer)
21188},{"./hash":99,"buffer":4,"inherits":93}],105:[function(require,module,exports){
21189(function (Buffer){
21190var inherits = require('inherits')
21191var SHA512 = require('./sha512')
21192var Hash = require('./hash')
8b095871 21193
9987f0c1 21194var W = new Array(160)
8b095871 21195
9987f0c1
IC
21196function Sha384 () {
21197 this.init()
21198 this._w = W
8b095871 21199
9987f0c1
IC
21200 Hash.call(this, 128, 112)
21201}
8b095871 21202
9987f0c1 21203inherits(Sha384, SHA512)
8b095871 21204
9987f0c1
IC
21205Sha384.prototype.init = function () {
21206 this._ah = 0xcbbb9d5d
21207 this._bh = 0x629a292a
21208 this._ch = 0x9159015a
21209 this._dh = 0x152fecd8
21210 this._eh = 0x67332667
21211 this._fh = 0x8eb44a87
21212 this._gh = 0xdb0c2e0d
21213 this._hh = 0x47b5481d
8b095871 21214
9987f0c1
IC
21215 this._al = 0xc1059ed8
21216 this._bl = 0x367cd507
21217 this._cl = 0x3070dd17
21218 this._dl = 0xf70e5939
21219 this._el = 0xffc00b31
21220 this._fl = 0x68581511
21221 this._gl = 0x64f98fa7
21222 this._hl = 0xbefa4fa4
8b095871 21223
9987f0c1 21224 return this
8b095871
IC
21225}
21226
9987f0c1
IC
21227Sha384.prototype._hash = function () {
21228 var H = new Buffer(48)
8b095871 21229
9987f0c1
IC
21230 function writeInt64BE (h, l, offset) {
21231 H.writeInt32BE(h, offset)
21232 H.writeInt32BE(l, offset + 4)
21233 }
8b095871 21234
9987f0c1
IC
21235 writeInt64BE(this._ah, this._al, 0)
21236 writeInt64BE(this._bh, this._bl, 8)
21237 writeInt64BE(this._ch, this._cl, 16)
21238 writeInt64BE(this._dh, this._dl, 24)
21239 writeInt64BE(this._eh, this._el, 32)
21240 writeInt64BE(this._fh, this._fl, 40)
8b095871 21241
9987f0c1
IC
21242 return H
21243}
8b095871 21244
9987f0c1 21245module.exports = Sha384
8b095871 21246
9987f0c1
IC
21247}).call(this,require("buffer").Buffer)
21248},{"./hash":99,"./sha512":106,"buffer":4,"inherits":93}],106:[function(require,module,exports){
21249(function (Buffer){
21250var inherits = require('inherits')
21251var Hash = require('./hash')
8b095871 21252
9987f0c1
IC
21253var K = [
21254 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
21255 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
21256 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
21257 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
21258 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
21259 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
21260 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
21261 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
21262 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
21263 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
21264 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
21265 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
21266 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
21267 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
21268 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
21269 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
21270 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
21271 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
21272 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
21273 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
21274 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
21275 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
21276 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
21277 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
21278 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
21279 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
21280 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
21281 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
21282 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
21283 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
21284 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
21285 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
21286 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
21287 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
21288 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
21289 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
21290 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
21291 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
21292 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
21293 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
21294]
8b095871 21295
9987f0c1 21296var W = new Array(160)
8b095871 21297
9987f0c1
IC
21298function Sha512 () {
21299 this.init()
21300 this._w = W
8b095871 21301
9987f0c1
IC
21302 Hash.call(this, 128, 112)
21303}
8b095871 21304
9987f0c1 21305inherits(Sha512, Hash)
8b095871 21306
9987f0c1
IC
21307Sha512.prototype.init = function () {
21308 this._ah = 0x6a09e667
21309 this._bh = 0xbb67ae85
21310 this._ch = 0x3c6ef372
21311 this._dh = 0xa54ff53a
21312 this._eh = 0x510e527f
21313 this._fh = 0x9b05688c
21314 this._gh = 0x1f83d9ab
21315 this._hh = 0x5be0cd19
8b095871 21316
9987f0c1
IC
21317 this._al = 0xf3bcc908
21318 this._bl = 0x84caa73b
21319 this._cl = 0xfe94f82b
21320 this._dl = 0x5f1d36f1
21321 this._el = 0xade682d1
21322 this._fl = 0x2b3e6c1f
21323 this._gl = 0xfb41bd6b
21324 this._hl = 0x137e2179
8b095871 21325
9987f0c1 21326 return this
8b095871
IC
21327}
21328
9987f0c1
IC
21329function Ch (x, y, z) {
21330 return z ^ (x & (y ^ z))
8b095871
IC
21331}
21332
9987f0c1
IC
21333function maj (x, y, z) {
21334 return (x & y) | (z & (x | y))
8b095871
IC
21335}
21336
9987f0c1
IC
21337function sigma0 (x, xl) {
21338 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
21339}
8b095871 21340
9987f0c1
IC
21341function sigma1 (x, xl) {
21342 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
21343}
8b095871 21344
9987f0c1
IC
21345function Gamma0 (x, xl) {
21346 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
8b095871
IC
21347}
21348
9987f0c1
IC
21349function Gamma0l (x, xl) {
21350 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
21351}
8b095871 21352
9987f0c1
IC
21353function Gamma1 (x, xl) {
21354 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
21355}
8b095871 21356
9987f0c1
IC
21357function Gamma1l (x, xl) {
21358 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
21359}
8b095871 21360
9987f0c1
IC
21361function getCarry (a, b) {
21362 return (a >>> 0) < (b >>> 0) ? 1 : 0
8b095871
IC
21363}
21364
9987f0c1
IC
21365Sha512.prototype._update = function (M) {
21366 var W = this._w
8b095871 21367
9987f0c1
IC
21368 var ah = this._ah | 0
21369 var bh = this._bh | 0
21370 var ch = this._ch | 0
21371 var dh = this._dh | 0
21372 var eh = this._eh | 0
21373 var fh = this._fh | 0
21374 var gh = this._gh | 0
21375 var hh = this._hh | 0
8b095871 21376
9987f0c1
IC
21377 var al = this._al | 0
21378 var bl = this._bl | 0
21379 var cl = this._cl | 0
21380 var dl = this._dl | 0
21381 var el = this._el | 0
21382 var fl = this._fl | 0
21383 var gl = this._gl | 0
21384 var hl = this._hl | 0
8b095871 21385
9987f0c1
IC
21386 for (var i = 0; i < 32; i += 2) {
21387 W[i] = M.readInt32BE(i * 4)
21388 W[i + 1] = M.readInt32BE(i * 4 + 4)
21389 }
21390 for (; i < 160; i += 2) {
21391 var xh = W[i - 15 * 2]
21392 var xl = W[i - 15 * 2 + 1]
21393 var gamma0 = Gamma0(xh, xl)
21394 var gamma0l = Gamma0l(xl, xh)
8b095871 21395
9987f0c1
IC
21396 xh = W[i - 2 * 2]
21397 xl = W[i - 2 * 2 + 1]
21398 var gamma1 = Gamma1(xh, xl)
21399 var gamma1l = Gamma1l(xl, xh)
8b095871 21400
9987f0c1
IC
21401 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
21402 var Wi7h = W[i - 7 * 2]
21403 var Wi7l = W[i - 7 * 2 + 1]
8b095871 21404
9987f0c1
IC
21405 var Wi16h = W[i - 16 * 2]
21406 var Wi16l = W[i - 16 * 2 + 1]
8b095871 21407
9987f0c1
IC
21408 var Wil = (gamma0l + Wi7l) | 0
21409 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
21410 Wil = (Wil + gamma1l) | 0
21411 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
21412 Wil = (Wil + Wi16l) | 0
21413 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
8b095871 21414
9987f0c1
IC
21415 W[i] = Wih
21416 W[i + 1] = Wil
8b095871
IC
21417 }
21418
9987f0c1
IC
21419 for (var j = 0; j < 160; j += 2) {
21420 Wih = W[j]
21421 Wil = W[j + 1]
8b095871 21422
9987f0c1
IC
21423 var majh = maj(ah, bh, ch)
21424 var majl = maj(al, bl, cl)
8b095871 21425
9987f0c1
IC
21426 var sigma0h = sigma0(ah, al)
21427 var sigma0l = sigma0(al, ah)
21428 var sigma1h = sigma1(eh, el)
21429 var sigma1l = sigma1(el, eh)
8b095871 21430
9987f0c1
IC
21431 // t1 = h + sigma1 + ch + K[j] + W[j]
21432 var Kih = K[j]
21433 var Kil = K[j + 1]
8b095871 21434
9987f0c1
IC
21435 var chh = Ch(eh, fh, gh)
21436 var chl = Ch(el, fl, gl)
8b095871 21437
9987f0c1
IC
21438 var t1l = (hl + sigma1l) | 0
21439 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
21440 t1l = (t1l + chl) | 0
21441 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
21442 t1l = (t1l + Kil) | 0
21443 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
21444 t1l = (t1l + Wil) | 0
21445 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
8b095871 21446
9987f0c1
IC
21447 // t2 = sigma0 + maj
21448 var t2l = (sigma0l + majl) | 0
21449 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
21450
21451 hh = gh
21452 hl = gl
21453 gh = fh
21454 gl = fl
21455 fh = eh
21456 fl = el
21457 el = (dl + t1l) | 0
21458 eh = (dh + t1h + getCarry(el, dl)) | 0
21459 dh = ch
21460 dl = cl
21461 ch = bh
21462 cl = bl
21463 bh = ah
21464 bl = al
21465 al = (t1l + t2l) | 0
21466 ah = (t1h + t2h + getCarry(al, t1l)) | 0
21467 }
8b095871 21468
9987f0c1
IC
21469 this._al = (this._al + al) | 0
21470 this._bl = (this._bl + bl) | 0
21471 this._cl = (this._cl + cl) | 0
21472 this._dl = (this._dl + dl) | 0
21473 this._el = (this._el + el) | 0
21474 this._fl = (this._fl + fl) | 0
21475 this._gl = (this._gl + gl) | 0
21476 this._hl = (this._hl + hl) | 0
8b095871 21477
9987f0c1
IC
21478 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
21479 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
21480 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
21481 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
21482 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
21483 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
21484 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
21485 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
21486}
8b095871 21487
9987f0c1
IC
21488Sha512.prototype._hash = function () {
21489 var H = new Buffer(64)
8b095871 21490
9987f0c1
IC
21491 function writeInt64BE (h, l, offset) {
21492 H.writeInt32BE(h, offset)
21493 H.writeInt32BE(l, offset + 4)
8b095871
IC
21494 }
21495
9987f0c1
IC
21496 writeInt64BE(this._ah, this._al, 0)
21497 writeInt64BE(this._bh, this._bl, 8)
21498 writeInt64BE(this._ch, this._cl, 16)
21499 writeInt64BE(this._dh, this._dl, 24)
21500 writeInt64BE(this._eh, this._el, 32)
21501 writeInt64BE(this._fh, this._fl, 40)
21502 writeInt64BE(this._gh, this._gl, 48)
21503 writeInt64BE(this._hh, this._hl, 56)
21504
21505 return H
8b095871
IC
21506}
21507
9987f0c1 21508module.exports = Sha512
8b095871 21509
9987f0c1
IC
21510}).call(this,require("buffer").Buffer)
21511},{"./hash":99,"buffer":4,"inherits":93}],107:[function(require,module,exports){
21512var inherits = require('inherits')
21513var native = require('./native')
8b095871 21514
9987f0c1
IC
21515function TfTypeError (type, value, valueTypeName) {
21516 this.__error = Error.call(this)
21517 this.__type = type
21518 this.__value = value
21519 this.__valueTypeName = valueTypeName
8b095871 21520
9987f0c1
IC
21521 var message
21522 Object.defineProperty(this, 'message', {
21523 enumerable: true,
21524 get: function () {
21525 if (message) return message
8b095871 21526
9987f0c1
IC
21527 valueTypeName = valueTypeName || getValueTypeName(value)
21528 message = tfErrorString(type, value, valueTypeName)
8b095871 21529
9987f0c1
IC
21530 return message
21531 }
8b095871 21532 })
9987f0c1 21533}
8b095871 21534
9987f0c1
IC
21535function TfPropertyTypeError (type, property, label, value, error, valueTypeName) {
21536 this.__error = error || Error.call(this)
21537 this.__label = label
21538 this.__property = property
21539 this.__type = type
21540 this.__value = value
21541 this.__valueTypeName = valueTypeName
8b095871 21542
9987f0c1
IC
21543 var message
21544 Object.defineProperty(this, 'message', {
21545 enumerable: true,
21546 get: function () {
21547 if (message) return message
21548 if (type) {
21549 valueTypeName = valueTypeName || getValueTypeName(value)
21550 message = tfPropertyErrorString(type, label, property, value, valueTypeName)
21551 } else {
21552 message = 'Unexpected property "' + property + '"'
21553 }
8b095871 21554
9987f0c1
IC
21555 return message
21556 }
8b095871 21557 })
8b095871
IC
21558}
21559
9987f0c1
IC
21560// inherit from Error, assign stack
21561[TfTypeError, TfPropertyTypeError].forEach(function (tfErrorType) {
21562 inherits(tfErrorType, Error)
21563 Object.defineProperty(tfErrorType, 'stack', {
21564 get: function () { return this.__error.stack }
21565 })
21566})
8b095871 21567
9987f0c1
IC
21568function tfCustomError (expected, actual) {
21569 return new TfTypeError(expected, {}, actual)
21570}
8b095871 21571
9987f0c1
IC
21572function tfSubError (e, property, label) {
21573 // sub child?
21574 if (e instanceof TfPropertyTypeError) {
21575 property = property + '.' + e.__property
21576 label = e.__label
8b095871 21577
9987f0c1
IC
21578 return new TfPropertyTypeError(
21579 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21580 )
8b095871
IC
21581 }
21582
9987f0c1
IC
21583 // child?
21584 if (e instanceof TfTypeError) {
21585 return new TfPropertyTypeError(
21586 e.__type, property, label, e.__value, e.__error, e.__valueTypeName
21587 )
21588 }
8b095871 21589
9987f0c1
IC
21590 return e
21591}
8b095871 21592
9987f0c1
IC
21593function getTypeName (fn) {
21594 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1]
21595}
8b095871 21596
9987f0c1
IC
21597function getValueTypeName (value) {
21598 return native.Nil(value) ? '' : getTypeName(value.constructor)
21599}
8b095871 21600
9987f0c1
IC
21601function getValue (value) {
21602 if (native.Function(value)) return ''
21603 if (native.String(value)) return JSON.stringify(value)
21604 if (value && native.Object(value)) return ''
21605 return value
21606}
8b095871 21607
9987f0c1
IC
21608function tfJSON (type) {
21609 if (native.Function(type)) return type.toJSON ? type.toJSON() : getTypeName(type)
21610 if (native.Array(type)) return 'Array'
21611 if (type && native.Object(type)) return 'Object'
8b095871 21612
9987f0c1
IC
21613 return type !== undefined ? type : ''
21614}
8b095871 21615
9987f0c1
IC
21616function tfErrorString (type, value, valueTypeName) {
21617 var valueJson = getValue(value)
8b095871 21618
9987f0c1
IC
21619 return 'Expected ' + tfJSON(type) + ', got' +
21620 (valueTypeName !== '' ? ' ' + valueTypeName : '') +
21621 (valueJson !== '' ? ' ' + valueJson : '')
8b095871
IC
21622}
21623
9987f0c1
IC
21624function tfPropertyErrorString (type, label, name, value, valueTypeName) {
21625 var description = '" of type '
21626 if (label === 'key') description = '" with key type '
8b095871 21627
9987f0c1 21628 return tfErrorString('property "' + tfJSON(name) + description + tfJSON(type), value, valueTypeName)
8b095871
IC
21629}
21630
9987f0c1
IC
21631module.exports = {
21632 TfTypeError: TfTypeError,
21633 TfPropertyTypeError: TfPropertyTypeError,
21634 tfCustomError: tfCustomError,
21635 tfSubError: tfSubError,
21636 tfJSON: tfJSON,
21637 getValueTypeName: getValueTypeName
8b095871
IC
21638}
21639
9987f0c1
IC
21640},{"./native":110,"inherits":93}],108:[function(require,module,exports){
21641(function (Buffer){
21642var NATIVE = require('./native')
21643var ERRORS = require('./errors')
21644
21645function _Buffer (value) {
21646 return Buffer.isBuffer(value)
8b095871
IC
21647}
21648
9987f0c1
IC
21649function Hex (value) {
21650 return typeof value === 'string' && /^([0-9a-f]{2})+$/i.test(value)
21651}
8b095871 21652
9987f0c1
IC
21653function _LengthN (type, length) {
21654 var name = type.toJSON()
8b095871 21655
9987f0c1
IC
21656 function Length (value) {
21657 if (!type(value)) return false
21658 if (value.length === length) return true
8b095871 21659
9987f0c1
IC
21660 throw ERRORS.tfCustomError(name + '(Length: ' + length + ')', name + '(Length: ' + value.length + ')')
21661 }
21662 Length.toJSON = function () { return name }
8b095871 21663
9987f0c1
IC
21664 return Length
21665}
8b095871 21666
9987f0c1
IC
21667var _ArrayN = _LengthN.bind(null, NATIVE.Array)
21668var _BufferN = _LengthN.bind(null, _Buffer)
21669var _HexN = _LengthN.bind(null, Hex)
8b095871 21670
9987f0c1 21671var UINT53_MAX = Math.pow(2, 53) - 1
8b095871 21672
9987f0c1
IC
21673function Finite (value) {
21674 return typeof value === 'number' && isFinite(value)
21675}
21676function Int8 (value) { return ((value << 24) >> 24) === value }
21677function Int16 (value) { return ((value << 16) >> 16) === value }
21678function Int32 (value) { return (value | 0) === value }
21679function UInt8 (value) { return (value & 0xff) === value }
21680function UInt16 (value) { return (value & 0xffff) === value }
21681function UInt32 (value) { return (value >>> 0) === value }
21682function UInt53 (value) {
21683 return typeof value === 'number' &&
21684 value >= 0 &&
21685 value <= UINT53_MAX &&
21686 Math.floor(value) === value
21687}
8b095871 21688
9987f0c1
IC
21689var types = {
21690 ArrayN: _ArrayN,
21691 Buffer: _Buffer,
21692 BufferN: _BufferN,
21693 Finite: Finite,
21694 Hex: Hex,
21695 HexN: _HexN,
21696 Int8: Int8,
21697 Int16: Int16,
21698 Int32: Int32,
21699 UInt8: UInt8,
21700 UInt16: UInt16,
21701 UInt32: UInt32,
21702 UInt53: UInt53
21703}
8b095871 21704
9987f0c1
IC
21705for (var typeName in types) {
21706 types[typeName].toJSON = function (t) {
21707 return t
21708 }.bind(null, typeName)
21709}
8b095871 21710
9987f0c1 21711module.exports = types
8b095871 21712
9987f0c1
IC
21713}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
21714},{"../../../../../.nvm/versions/node/v6.0.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":9,"./errors":107,"./native":110}],109:[function(require,module,exports){
21715var ERRORS = require('./errors')
21716var NATIVE = require('./native')
8b095871 21717
9987f0c1
IC
21718// short-hand
21719var tfJSON = ERRORS.tfJSON
21720var TfTypeError = ERRORS.TfTypeError
21721var TfPropertyTypeError = ERRORS.TfPropertyTypeError
21722var tfSubError = ERRORS.tfSubError
21723var getValueTypeName = ERRORS.getValueTypeName
8b095871 21724
9987f0c1
IC
21725var TYPES = {
21726 arrayOf: function arrayOf (type) {
21727 type = compile(type)
8b095871 21728
9987f0c1
IC
21729 function _arrayOf (array, strict) {
21730 if (!NATIVE.Array(array)) return false
8b095871 21731
9987f0c1
IC
21732 return array.every(function (value, i) {
21733 try {
21734 return typeforce(type, value, strict)
21735 } catch (e) {
21736 throw tfSubError(e, i)
21737 }
21738 })
8b095871 21739 }
9987f0c1 21740 _arrayOf.toJSON = function () { return '[' + tfJSON(type) + ']' }
8b095871 21741
9987f0c1
IC
21742 return _arrayOf
21743 },
8b095871 21744
9987f0c1
IC
21745 maybe: function maybe (type) {
21746 type = compile(type)
8b095871 21747
9987f0c1
IC
21748 function _maybe (value, strict) {
21749 return NATIVE.Nil(value) || type(value, strict, maybe)
21750 }
21751 _maybe.toJSON = function () { return '?' + tfJSON(type) }
8b095871 21752
9987f0c1
IC
21753 return _maybe
21754 },
8b095871 21755
9987f0c1
IC
21756 map: function map (propertyType, propertyKeyType) {
21757 propertyType = compile(propertyType)
21758 if (propertyKeyType) propertyKeyType = compile(propertyKeyType)
8b095871 21759
9987f0c1
IC
21760 function _map (value, strict) {
21761 if (!NATIVE.Object(value, strict)) return false
21762 if (NATIVE.Nil(value, strict)) return false
8b095871 21763
9987f0c1
IC
21764 for (var propertyName in value) {
21765 try {
21766 if (propertyKeyType) {
21767 typeforce(propertyKeyType, propertyName, strict)
21768 }
21769 } catch (e) {
21770 throw tfSubError(e, propertyName, 'key')
8b095871
IC
21771 }
21772
9987f0c1
IC
21773 try {
21774 var propertyValue = value[propertyName]
21775 typeforce(propertyType, propertyValue, strict)
21776 } catch (e) {
21777 throw tfSubError(e, propertyName)
8b095871
IC
21778 }
21779 }
21780
9987f0c1
IC
21781 return true
21782 }
8b095871 21783
9987f0c1
IC
21784 if (propertyKeyType) {
21785 _map.toJSON = function () {
21786 return '{' + tfJSON(propertyKeyType) + ': ' + tfJSON(propertyType) + '}'
8b095871 21787 }
9987f0c1
IC
21788 } else {
21789 _map.toJSON = function () { return '{' + tfJSON(propertyType) + '}' }
8b095871
IC
21790 }
21791
9987f0c1
IC
21792 return _map
21793 },
8b095871 21794
9987f0c1
IC
21795 object: function object (uncompiled) {
21796 var type = {}
8b095871 21797
9987f0c1
IC
21798 for (var typePropertyName in uncompiled) {
21799 type[typePropertyName] = compile(uncompiled[typePropertyName])
21800 }
8b095871 21801
9987f0c1
IC
21802 function _object (value, strict) {
21803 if (!NATIVE.Object(value)) return false
21804 if (NATIVE.Nil(value)) return false
8b095871 21805
9987f0c1 21806 var propertyName
8b095871 21807
9987f0c1
IC
21808 try {
21809 for (propertyName in type) {
21810 var propertyType = type[propertyName]
21811 var propertyValue = value[propertyName]
8b095871 21812
9987f0c1
IC
21813 typeforce(propertyType, propertyValue, strict)
21814 }
21815 } catch (e) {
21816 throw tfSubError(e, propertyName)
21817 }
8b095871 21818
9987f0c1
IC
21819 if (strict) {
21820 for (propertyName in value) {
21821 if (type[propertyName]) continue
8b095871 21822
9987f0c1
IC
21823 throw new TfPropertyTypeError(undefined, propertyName)
21824 }
21825 }
8b095871 21826
9987f0c1
IC
21827 return true
21828 }
21829 _object.toJSON = function () { return tfJSON(type) }
8b095871 21830
9987f0c1
IC
21831 return _object
21832 },
8b095871 21833
9987f0c1
IC
21834 oneOf: function oneOf () {
21835 var types = [].slice.call(arguments).map(compile)
8b095871 21836
9987f0c1
IC
21837 function _oneOf (value, strict) {
21838 return types.some(function (type) {
21839 try {
21840 return typeforce(type, value, strict)
21841 } catch (e) {
21842 return false
21843 }
21844 })
21845 }
21846 _oneOf.toJSON = function () { return types.map(tfJSON).join('|') }
8b095871 21847
9987f0c1
IC
21848 return _oneOf
21849 },
8b095871 21850
9987f0c1
IC
21851 quacksLike: function quacksLike (type) {
21852 function _quacksLike (value) {
21853 return type === getValueTypeName(value)
21854 }
21855 _quacksLike.toJSON = function () { return type }
8b095871 21856
9987f0c1
IC
21857 return _quacksLike
21858 },
8b095871 21859
9987f0c1
IC
21860 tuple: function tuple () {
21861 var types = [].slice.call(arguments).map(compile)
8b095871 21862
9987f0c1
IC
21863 function _tuple (values, strict) {
21864 return types.every(function (type, i) {
21865 try {
21866 return typeforce(type, values[i], strict)
21867 } catch (e) {
21868 throw tfSubError(e, i)
21869 }
21870 }) && (!strict || values.length === arguments.length)
21871 }
21872 _tuple.toJSON = function () { return '(' + types.map(tfJSON).join(', ') + ')' }
8b095871 21873
9987f0c1
IC
21874 return _tuple
21875 },
8b095871 21876
9987f0c1
IC
21877 value: function value (expected) {
21878 function _value (actual) {
21879 return actual === expected
21880 }
21881 _value.toJSON = function () { return expected }
8b095871 21882
9987f0c1 21883 return _value
8b095871
IC
21884 }
21885}
21886
9987f0c1
IC
21887function compile (type) {
21888 if (NATIVE.String(type)) {
21889 if (type[0] === '?') return TYPES.maybe(compile(type.slice(1)))
8b095871 21890
9987f0c1
IC
21891 return NATIVE[type] || TYPES.quacksLike(type)
21892 } else if (type && NATIVE.Object(type)) {
21893 if (NATIVE.Array(type)) return TYPES.arrayOf(compile(type[0]))
8b095871 21894
9987f0c1
IC
21895 return TYPES.object(type)
21896 } else if (NATIVE.Function(type)) {
21897 return type
21898 }
8b095871 21899
9987f0c1
IC
21900 return TYPES.value(type)
21901}
8b095871 21902
9987f0c1
IC
21903function typeforce (type, value, strict, surrogate) {
21904 if (NATIVE.Function(type)) {
21905 if (type(value, strict)) return true
8b095871 21906
9987f0c1 21907 throw new TfTypeError(surrogate || type, value)
ab78acc6 21908 }
8b095871 21909
9987f0c1
IC
21910 // JIT
21911 return typeforce(compile(type), value, strict)
21912}
8b095871 21913
9987f0c1
IC
21914// assign types to typeforce function
21915for (var typeName in NATIVE) {
21916 typeforce[typeName] = NATIVE[typeName]
8b095871
IC
21917}
21918
9987f0c1
IC
21919for (typeName in TYPES) {
21920 typeforce[typeName] = TYPES[typeName]
8b095871
IC
21921}
21922
9987f0c1
IC
21923var EXTRA = require('./extra')
21924for (typeName in EXTRA) {
21925 typeforce[typeName] = EXTRA[typeName]
8b095871
IC
21926}
21927
9987f0c1
IC
21928// async wrapper
21929function __async (type, value, strict, callback) {
21930 // default to falsy strict if using shorthand overload
21931 if (typeof strict === 'function') return __async(type, value, false, strict)
8b095871 21932
9987f0c1
IC
21933 try {
21934 typeforce(type, value, strict)
21935 } catch (e) {
21936 return callback(e)
21937 }
8b095871 21938
9987f0c1
IC
21939 callback()
21940}
8b095871 21941
9987f0c1
IC
21942typeforce.async = __async
21943typeforce.compile = compile
21944typeforce.TfTypeError = TfTypeError
21945typeforce.TfPropertyTypeError = TfPropertyTypeError
8b095871 21946
9987f0c1 21947module.exports = typeforce
8b095871 21948
9987f0c1
IC
21949},{"./errors":107,"./extra":108,"./native":110}],110:[function(require,module,exports){
21950var types = {
21951 Array: function (value) { return value !== null && value !== undefined && value.constructor === Array },
21952 Boolean: function (value) { return typeof value === 'boolean' },
21953 Function: function (value) { return typeof value === 'function' },
21954 Nil: function (value) { return value === undefined || value === null },
21955 Number: function (value) { return typeof value === 'number' },
21956 Object: function (value) { return typeof value === 'object' },
21957 String: function (value) { return typeof value === 'string' },
21958 '': function () { return true }
21959}
8b095871 21960
9987f0c1
IC
21961// TODO: deprecate
21962types.Null = types.Nil
8b095871 21963
9987f0c1
IC
21964for (var typeName in types) {
21965 types[typeName].toJSON = function (t) {
21966 return t
21967 }.bind(null, typeName)
21968}
8b095871 21969
9987f0c1 21970module.exports = types
8b095871 21971
9987f0c1
IC
21972},{}],111:[function(require,module,exports){
21973(function (Buffer){
21974'use strict'
8b095871 21975
9987f0c1
IC
21976// Number.MAX_SAFE_INTEGER
21977var MAX_SAFE_INTEGER = 9007199254740991
8b095871 21978
9987f0c1
IC
21979function checkUInt53 (n) {
21980 if (n < 0 || n > MAX_SAFE_INTEGER || n % 1 !== 0) throw new RangeError('value out of range')
8b095871
IC
21981}
21982
9987f0c1
IC
21983function encode (number, buffer, offset) {
21984 checkUInt53(number)
8b095871 21985
9987f0c1
IC
21986 if (!buffer) buffer = new Buffer(encodingLength(number))
21987 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
21988 if (!offset) offset = 0
8b095871 21989
9987f0c1
IC
21990 // 8 bit
21991 if (number < 0xfd) {
21992 buffer.writeUInt8(number, offset)
21993 encode.bytes = 1
8b095871 21994
9987f0c1
IC
21995 // 16 bit
21996 } else if (number <= 0xffff) {
21997 buffer.writeUInt8(0xfd, offset)
21998 buffer.writeUInt16LE(number, offset + 1)
21999 encode.bytes = 3
8b095871 22000
9987f0c1
IC
22001 // 32 bit
22002 } else if (number <= 0xffffffff) {
22003 buffer.writeUInt8(0xfe, offset)
22004 buffer.writeUInt32LE(number, offset + 1)
22005 encode.bytes = 5
8b095871 22006
9987f0c1
IC
22007 // 64 bit
22008 } else {
22009 buffer.writeUInt8(0xff, offset)
22010 buffer.writeUInt32LE(number >>> 0, offset + 1)
22011 buffer.writeUInt32LE((number / 0x100000000) | 0, offset + 5)
22012 encode.bytes = 9
ab78acc6 22013 }
8b095871 22014
9987f0c1 22015 return buffer
8b095871
IC
22016}
22017
9987f0c1
IC
22018function decode (buffer, offset) {
22019 if (!Buffer.isBuffer(buffer)) throw new TypeError('buffer must be a Buffer instance')
22020 if (!offset) offset = 0
8b095871 22021
9987f0c1 22022 var first = buffer.readUInt8(offset)
8b095871 22023
9987f0c1
IC
22024 // 8 bit
22025 if (first < 0xfd) {
22026 decode.bytes = 1
22027 return first
8b095871 22028
9987f0c1
IC
22029 // 16 bit
22030 } else if (first === 0xfd) {
22031 decode.bytes = 3
22032 return buffer.readUInt16LE(offset + 1)
8b095871 22033
9987f0c1
IC
22034 // 32 bit
22035 } else if (first === 0xfe) {
22036 decode.bytes = 5
22037 return buffer.readUInt32LE(offset + 1)
8b095871 22038
9987f0c1
IC
22039 // 64 bit
22040 } else {
22041 decode.bytes = 9
22042 var lo = buffer.readUInt32LE(offset + 1)
22043 var hi = buffer.readUInt32LE(offset + 5)
22044 var number = hi * 0x0100000000 + lo
22045 checkUInt53(number)
8b095871 22046
9987f0c1 22047 return number
8b095871 22048 }
ab78acc6
IC
22049}
22050
9987f0c1
IC
22051function encodingLength (number) {
22052 checkUInt53(number)
8b095871 22053
9987f0c1
IC
22054 return (
22055 number < 0xfd ? 1
22056 : number <= 0xffff ? 3
22057 : number <= 0xffffffff ? 5
22058 : 9
22059 )
ab78acc6 22060}
3af2954a 22061
9987f0c1 22062module.exports = { encode: encode, decode: decode, encodingLength: encodingLength }
3af2954a 22063
9987f0c1
IC
22064}).call(this,require("buffer").Buffer)
22065},{"buffer":4}],112:[function(require,module,exports){
22066(function (Buffer){
22067var bs58check = require('bs58check')
3af2954a 22068
9987f0c1
IC
22069function decodeRaw (buffer, version) {
22070 // check version only if defined
22071 if (version !== undefined && buffer[0] !== version) throw new Error('Invalid network version')
3af2954a 22072
9987f0c1
IC
22073 // uncompressed
22074 if (buffer.length === 33) {
22075 return {
22076 version: buffer[0],
22077 privateKey: buffer.slice(1, 33),
22078 compressed: false
ab78acc6 22079 }
9987f0c1 22080 }
8b095871 22081
9987f0c1
IC
22082 // invalid length
22083 if (buffer.length !== 34) throw new Error('Invalid WIF length')
8b095871 22084
9987f0c1
IC
22085 // invalid compression flag
22086 if (buffer[33] !== 0x01) throw new Error('Invalid compression flag')
8b095871 22087
9987f0c1
IC
22088 return {
22089 version: buffer[0],
22090 privateKey: buffer.slice(1, 33),
22091 compressed: true
22092 }
22093}
3af2954a 22094
9987f0c1
IC
22095function encodeRaw (version, privateKey, compressed) {
22096 var result = new Buffer(compressed ? 34 : 33)
8b095871 22097
9987f0c1
IC
22098 result.writeUInt8(version, 0)
22099 privateKey.copy(result, 1)
3af2954a 22100
9987f0c1
IC
22101 if (compressed) {
22102 result[33] = 0x01
22103 }
8b095871 22104
9987f0c1
IC
22105 return result
22106}
8b095871 22107
9987f0c1
IC
22108function decode (string, version) {
22109 return decodeRaw(bs58check.decode(string), version)
ab78acc6 22110}
3af2954a 22111
9987f0c1
IC
22112function encode (version, privateKey, compressed) {
22113 if (typeof version === 'number') return bs58check.encode(encodeRaw(version, privateKey, compressed))
8b095871 22114
9987f0c1
IC
22115 return bs58check.encode(
22116 encodeRaw(
22117 version.version,
22118 version.privateKey,
22119 version.compressed
22120 )
22121 )
ab78acc6 22122}
3af2954a 22123
9987f0c1
IC
22124module.exports = {
22125 decode: decode,
22126 decodeRaw: decodeRaw,
22127 encode: encode,
22128 encodeRaw: encodeRaw
22129}
8b095871
IC
22130
22131}).call(this,require("buffer").Buffer)
9987f0c1 22132},{"bs58check":80,"buffer":4}]},{},[33])(33)
8d18f379
IC
22133});
22134</script>
9987f0c1
IC
22135 <script>bitcoinjs.bitcoin.networks.shadow = {
22136 messagePrefix: "unused",
8b095871
IC
22137 bip32: {
22138 public: 0xEE80286A,
22139 private: 0xEE8031E8
22140 },
22141 pubKeyHash: 0x3f,
22142 scriptHash: 0x7d,
22143 wif: 0xbf,
8b095871
IC
22144};
22145
9987f0c1
IC
22146bitcoinjs.bitcoin.networks.shadowtn = {
22147 messagePrefix: "unused",
8b095871
IC
22148 bip32: {
22149 public: 0x76C0FDFB,
22150 private: 0x76C1077A
22151 },
22152 pubKeyHash: 0x7f,
22153 scriptHash: 0xc4,
22154 wif: 0xff,
8b095871 22155};
3af2954a 22156
9987f0c1
IC
22157bitcoinjs.bitcoin.networks.clam = {
22158 messagePrefix: "unused",
8b095871
IC
22159 bip32: {
22160 public: 0xa8c26d64,
22161 private: 0xa8c17826
22162 },
22163 pubKeyHash: 0x89,
9987f0c1 22164 scriptHash: 0x00, // TODO set this correctly
8b095871
IC
22165 wif: 0x85,
22166};
3af2954a 22167
9987f0c1
IC
22168bitcoinjs.bitcoin.networks.crown = {
22169 messagePrefix: "unused",
0921f370 22170 bip32: {
22171 public: 0x0488b21e,
22172 private: 0x0488ade4
22173 },
22174 pubKeyHash: 0x00,
22175 scriptHash: 0x05,
22176 wif: 0x80,
22177};
22178
9987f0c1
IC
22179bitcoinjs.bitcoin.networks.dash = {
22180 messagePrefix: "unused",
8b095871
IC
22181 bip32: {
22182 public: 0x0488b21e,
22183 private: 0x0488ade4
22184 },
22185 pubKeyHash: 0x4c,
22186 scriptHash: 0x10,
22187 wif: 0xcc,
22188};
ab78acc6 22189
56ad9601
JS
22190bitcoinjs.bitcoin.networks.maza = {
22191 messagePrefix: "unused",
22192 bip32: {
22193 public: 0x0488b21e,
22194 private: 0x0488ade4
22195 },
22196 pubKeyHash: 0x32,
22197 scriptHash: 0x09,
22198 wif: 0xe0,
22199};
22200
9987f0c1
IC
22201bitcoinjs.bitcoin.networks.dashtn = {
22202 messagePrefix: "unused",
c0386f3b
KR
22203 bip32: {
22204 public: 0x043587cf,
22205 private: 0x04358394
22206 },
22207 pubKeyHash: 0x8c,
22208 scriptHash: 0x13,
22209 wif: 0xef,
22210};
22211
9987f0c1
IC
22212bitcoinjs.bitcoin.networks.game = {
22213 messagePrefix: "unused",
f88fab20 22214 bip32: {
22215 public: 0x0488b21e,
22216 private: 0x0488ade4
22217 },
22218 pubKeyHash: 0x26,
22219 scriptHash: 0x05,
22220 wif: 0xa6,
22221};
22222
9987f0c1
IC
22223bitcoinjs.bitcoin.networks.namecoin = {
22224 messagePrefix: "unused",
8b095871
IC
22225 bip32: {
22226 public: 0x0488b21e,
22227 private: 0x0488ade4
22228 },
22229 pubKeyHash: 0x34,
9987f0c1 22230 scriptHash: 0x00, // TODO set this correctly
8b095871
IC
22231 wif: 0x80,
22232};
3af2954a 22233
9987f0c1
IC
22234bitcoinjs.bitcoin.networks.peercoin = {
22235 messagePrefix: "unused",
8b095871
IC
22236 bip32: {
22237 public: 0x0488b21e,
22238 private: 0x0488ade4
22239 },
22240 pubKeyHash: 0x37,
9987f0c1 22241 scriptHash: 0x00, // TODO set this correctly
8b095871
IC
22242 wif: 0xb7,
22243};
3af2954a 22244
9987f0c1
IC
22245bitcoinjs.bitcoin.networks.slimcoin = {
22246 messagePrefix: "unused",
01e81e53
GH
22247 bip32: {
22248 public: 0xef6adf10,
22249 private: 0xef69ea80
22250 },
22251 pubKeyHash: 0x3f,
22252 scriptHash: 0x7d,
22253 wif: 0x46,
22254};
22255
9987f0c1
IC
22256bitcoinjs.bitcoin.networks.slimcointn = {
22257 messagePrefix: "unused",
01e81e53
GH
22258 bip32: {
22259 public: 0x043587CF,
22260 private: 0x04358394
22261 },
22262 pubKeyHash: 0x6f,
22263 scriptHash: 0xc4,
22264 wif: 0x57,
22265};
22266
9987f0c1
IC
22267bitcoinjs.bitcoin.networks.dogecoin = {
22268 messagePrefix: '\x19Dogecoin Signed Message:\n',
22269 bip32: {
22270 public: 0x02facafd,
22271 private: 0x02fac398
22272 },
22273 pubKeyHash: 0x1e,
22274 scriptHash: 0x16,
22275 wif: 0x9e,
22276},
22277
22278bitcoinjs.bitcoin.networks.viacoin = {
22279 messagePrefix: '\x18Viacoin Signed Message:\n',
22280 bip32: {
22281 public: 0x0488b21e,
22282 private: 0x0488ade4
22283 },
22284 pubKeyHash: 0x47,
22285 scriptHash: 0x21,
22286 wif: 0xc7,
22287},
22288
22289bitcoinjs.bitcoin.networks.viacointestnet = {
22290 messagePrefix: '\x18Viacoin Signed Message:\n',
22291 bip32: {
22292 public: 0x043587cf,
22293 private: 0x04358394
22294 },
22295 pubKeyHash: 0x7f,
22296 scriptHash: 0xc4,
22297 wif: 0xff,
22298},
22299
22300bitcoinjs.bitcoin.networks.gamerscoin = {
22301 messagePrefix: '\x19Gamerscoin Signed Message:\n',
22302 bip32: {
22303 public: 0x019da462,
22304 private: 0x019d9cfe
22305 },
22306 pubKeyHash: 0x26,
22307 scriptHash: 0x05,
22308 wif: 0xA6,
22309},
22310
22311bitcoinjs.bitcoin.networks.jumbucks = {
22312 messagePrefix: '\x19Jumbucks Signed Message:\n',
22313 bip32: {
22314 public: 0x037a689a,
22315 private: 0x037a6460
22316 },
22317 pubKeyHash: 0x2b,
22318 scriptHash: 0x05,
22319 wif: 0xab,
22320},
22321
22322bitcoinjs.bitcoin.networks.zetacoin = {
22323 messagePrefix: '\x18Zetacoin Signed Message:\n',
22324 bip32: {
22325 public: 0x0488b21e,
22326 private: 0x0488ade4
22327 },
22328 pubKeyHash: 0x50,
22329 scriptHash: 0x09,
22330 wif: 0xe0,
22331}
b3cc3930
IC
22332
22333bitcoinjs.bitcoin.networks.myriadcoin = {
22334 messagePrefix: "unused",
22335 bip32: {
22336 public: 0x0488b21e,
22337 private: 0x0488ade4
22338 },
22339 pubKeyHash: 0x32,
22340 scriptHash: 0x00, // TODO set this correctly
22341 wif: 0xb2,
22342};
f128bd58
IC
22343
22344bitcoinjs.bitcoin.networks.pivx = {
22345 messagePrefix: "unused",
22346 bip32: {
22347 public: 0x022d2533,
22348 private: 0x0221312b
22349 },
22350 pubKeyHash: 0x1e,
22351 scriptHash: 0x0d,
22352 wif: 0xd4,
22353};
22354
22355bitcoinjs.bitcoin.networks.pivxtestnet = {
22356 messagePrefix: "unused",
22357 bip32: {
22358 public: 0x3a8061a0,
22359 private: 0x3a805837
22360 },
22361 pubKeyHash: 0x8b,
22362 scriptHash: 0x13,
22363 wif: 0xef,
22364};
8b095871
IC
22365</script>
22366 <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.ethUtil = 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){
22367(function (global){
22368'use strict';
3af2954a 22369
8b095871
IC
22370// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
22371// original notice:
3af2954a 22372
8b095871
IC
22373/*!
22374 * The buffer module from node.js, for the browser.
22375 *
22376 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
22377 * @license MIT
22378 */
22379function compare(a, b) {
22380 if (a === b) {
22381 return 0;
22382 }
3af2954a 22383
8b095871
IC
22384 var x = a.length;
22385 var y = b.length;
3af2954a 22386
8b095871
IC
22387 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
22388 if (a[i] !== b[i]) {
22389 x = a[i];
22390 y = b[i];
22391 break;
22392 }
22393 }
3af2954a 22394
8b095871
IC
22395 if (x < y) {
22396 return -1;
22397 }
22398 if (y < x) {
22399 return 1;
22400 }
22401 return 0;
ab78acc6 22402}
8b095871
IC
22403function isBuffer(b) {
22404 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
22405 return global.Buffer.isBuffer(b);
22406 }
22407 return !!(b != null && b._isBuffer);
ab78acc6 22408}
3af2954a 22409
8b095871
IC
22410// based on node assert, original notice:
22411
22412// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
22413//
22414// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
22415//
22416// Originally from narwhal.js (http://narwhaljs.org)
22417// Copyright (c) 2009 Thomas Robinson <280north.com>
22418//
22419// Permission is hereby granted, free of charge, to any person obtaining a copy
22420// of this software and associated documentation files (the 'Software'), to
22421// deal in the Software without restriction, including without limitation the
22422// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
22423// sell copies of the Software, and to permit persons to whom the Software is
22424// furnished to do so, subject to the following conditions:
22425//
22426// The above copyright notice and this permission notice shall be included in
22427// all copies or substantial portions of the Software.
22428//
22429// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22430// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22431// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22432// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
22433// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22434// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22435
22436var util = require('util/');
22437var hasOwn = Object.prototype.hasOwnProperty;
22438var pSlice = Array.prototype.slice;
22439var functionsHaveNames = (function () {
22440 return function foo() {}.name === 'foo';
22441}());
22442function pToString (obj) {
22443 return Object.prototype.toString.call(obj);
22444}
22445function isView(arrbuf) {
22446 if (isBuffer(arrbuf)) {
22447 return false;
ab78acc6 22448 }
8b095871
IC
22449 if (typeof global.ArrayBuffer !== 'function') {
22450 return false;
22451 }
22452 if (typeof ArrayBuffer.isView === 'function') {
22453 return ArrayBuffer.isView(arrbuf);
22454 }
22455 if (!arrbuf) {
22456 return false;
22457 }
22458 if (arrbuf instanceof DataView) {
22459 return true;
22460 }
22461 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
22462 return true;
22463 }
22464 return false;
ab78acc6 22465}
8b095871
IC
22466// 1. The assert module provides functions that throw
22467// AssertionError's when particular conditions are not met. The
22468// assert module must conform to the following interface.
3af2954a 22469
8b095871 22470var assert = module.exports = ok;
3af2954a 22471
8b095871
IC
22472// 2. The AssertionError is defined in assert.
22473// new assert.AssertionError({ message: message,
22474// actual: actual,
22475// expected: expected })
22476
22477var regex = /\s*function\s+([^\(\s]*)\s*/;
22478// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
22479function getName(func) {
22480 if (!util.isFunction(func)) {
22481 return;
22482 }
22483 if (functionsHaveNames) {
22484 return func.name;
22485 }
22486 var str = func.toString();
22487 var match = str.match(regex);
22488 return match && match[1];
ab78acc6 22489}
8b095871
IC
22490assert.AssertionError = function AssertionError(options) {
22491 this.name = 'AssertionError';
22492 this.actual = options.actual;
22493 this.expected = options.expected;
22494 this.operator = options.operator;
22495 if (options.message) {
22496 this.message = options.message;
22497 this.generatedMessage = false;
22498 } else {
22499 this.message = getMessage(this);
22500 this.generatedMessage = true;
22501 }
22502 var stackStartFunction = options.stackStartFunction || fail;
22503 if (Error.captureStackTrace) {
22504 Error.captureStackTrace(this, stackStartFunction);
22505 } else {
22506 // non v8 browsers so we can have a stacktrace
22507 var err = new Error();
22508 if (err.stack) {
22509 var out = err.stack;
22510
22511 // try to strip useless frames
22512 var fn_name = getName(stackStartFunction);
22513 var idx = out.indexOf('\n' + fn_name);
22514 if (idx >= 0) {
22515 // once we have located the function frame
22516 // we need to strip out everything before it (and its line)
22517 var next_line = out.indexOf('\n', idx + 1);
22518 out = out.substring(next_line + 1);
22519 }
3af2954a 22520
8b095871
IC
22521 this.stack = out;
22522 }
22523 }
22524};
3af2954a 22525
8b095871
IC
22526// assert.AssertionError instanceof Error
22527util.inherits(assert.AssertionError, Error);
3af2954a 22528
8b095871
IC
22529function truncate(s, n) {
22530 if (typeof s === 'string') {
22531 return s.length < n ? s : s.slice(0, n);
22532 } else {
22533 return s;
3af2954a 22534 }
ab78acc6 22535}
8b095871
IC
22536function inspect(something) {
22537 if (functionsHaveNames || !util.isFunction(something)) {
22538 return util.inspect(something);
22539 }
22540 var rawname = getName(something);
22541 var name = rawname ? ': ' + rawname : '';
22542 return '[Function' + name + ']';
22543}
22544function getMessage(self) {
22545 return truncate(inspect(self.actual), 128) + ' ' +
22546 self.operator + ' ' +
22547 truncate(inspect(self.expected), 128);
ab78acc6 22548}
3af2954a 22549
8b095871
IC
22550// At present only the three keys mentioned above are used and
22551// understood by the spec. Implementations or sub modules can pass
22552// other keys to the AssertionError's constructor - they will be
22553// ignored.
3af2954a 22554
8b095871
IC
22555// 3. All of the following functions must throw an AssertionError
22556// when a corresponding condition is not met, with a message that
22557// may be undefined if not provided. All assertion methods provide
22558// both the actual and expected values to the assertion error for
22559// display purposes.
3af2954a 22560
8b095871
IC
22561function fail(actual, expected, message, operator, stackStartFunction) {
22562 throw new assert.AssertionError({
22563 message: message,
22564 actual: actual,
22565 expected: expected,
22566 operator: operator,
22567 stackStartFunction: stackStartFunction
22568 });
ab78acc6 22569}
3af2954a 22570
8b095871
IC
22571// EXTENSION! allows for well behaved errors defined elsewhere.
22572assert.fail = fail;
3af2954a 22573
8b095871
IC
22574// 4. Pure assertion tests whether a value is truthy, as determined
22575// by !!guard.
22576// assert.ok(guard, message_opt);
22577// This statement is equivalent to assert.equal(true, !!guard,
22578// message_opt);. To test strictly for the value true, use
22579// assert.strictEqual(true, guard, message_opt);.
3af2954a 22580
8b095871
IC
22581function ok(value, message) {
22582 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 22583}
8b095871 22584assert.ok = ok;
3af2954a 22585
8b095871
IC
22586// 5. The equality assertion tests shallow, coercive equality with
22587// ==.
22588// assert.equal(actual, expected, message_opt);
3af2954a 22589
8b095871
IC
22590assert.equal = function equal(actual, expected, message) {
22591 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
22592};
3af2954a 22593
8b095871
IC
22594// 6. The non-equality assertion tests for whether two objects are not equal
22595// with != assert.notEqual(actual, expected, message_opt);
3af2954a 22596
8b095871
IC
22597assert.notEqual = function notEqual(actual, expected, message) {
22598 if (actual == expected) {
22599 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 22600 }
8b095871
IC
22601};
22602
22603// 7. The equivalence assertion tests a deep equality relation.
22604// assert.deepEqual(actual, expected, message_opt);
22605
22606assert.deepEqual = function deepEqual(actual, expected, message) {
22607 if (!_deepEqual(actual, expected, false)) {
22608 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 22609 }
8b095871 22610};
3af2954a 22611
8b095871
IC
22612assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
22613 if (!_deepEqual(actual, expected, true)) {
22614 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 22615 }
8b095871
IC
22616};
22617
22618function _deepEqual(actual, expected, strict, memos) {
22619 // 7.1. All identical values are equivalent, as determined by ===.
22620 if (actual === expected) {
22621 return true;
22622 } else if (isBuffer(actual) && isBuffer(expected)) {
22623 return compare(actual, expected) === 0;
22624
22625 // 7.2. If the expected value is a Date object, the actual value is
22626 // equivalent if it is also a Date object that refers to the same time.
22627 } else if (util.isDate(actual) && util.isDate(expected)) {
22628 return actual.getTime() === expected.getTime();
22629
22630 // 7.3 If the expected value is a RegExp object, the actual value is
22631 // equivalent if it is also a RegExp object with the same source and
22632 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
22633 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
22634 return actual.source === expected.source &&
22635 actual.global === expected.global &&
22636 actual.multiline === expected.multiline &&
22637 actual.lastIndex === expected.lastIndex &&
22638 actual.ignoreCase === expected.ignoreCase;
22639
22640 // 7.4. Other pairs that do not both pass typeof value == 'object',
22641 // equivalence is determined by ==.
22642 } else if ((actual === null || typeof actual !== 'object') &&
22643 (expected === null || typeof expected !== 'object')) {
22644 return strict ? actual === expected : actual == expected;
22645
22646 // If both values are instances of typed arrays, wrap their underlying
22647 // ArrayBuffers in a Buffer each to increase performance
22648 // This optimization requires the arrays to have the same type as checked by
22649 // Object.prototype.toString (aka pToString). Never perform binary
22650 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
22651 // bit patterns are not identical.
22652 } else if (isView(actual) && isView(expected) &&
22653 pToString(actual) === pToString(expected) &&
22654 !(actual instanceof Float32Array ||
22655 actual instanceof Float64Array)) {
22656 return compare(new Uint8Array(actual.buffer),
22657 new Uint8Array(expected.buffer)) === 0;
22658
22659 // 7.5 For all other Object pairs, including Array objects, equivalence is
22660 // determined by having the same number of owned properties (as verified
22661 // with Object.prototype.hasOwnProperty.call), the same set of keys
22662 // (although not necessarily the same order), equivalent values for every
22663 // corresponding key, and an identical 'prototype' property. Note: this
22664 // accounts for both named and indexed properties on Arrays.
22665 } else if (isBuffer(actual) !== isBuffer(expected)) {
22666 return false;
22667 } else {
22668 memos = memos || {actual: [], expected: []};
3af2954a 22669
8b095871
IC
22670 var actualIndex = memos.actual.indexOf(actual);
22671 if (actualIndex !== -1) {
22672 if (actualIndex === memos.expected.indexOf(expected)) {
22673 return true;
ab78acc6 22674 }
3af2954a 22675 }
8b095871
IC
22676
22677 memos.actual.push(actual);
22678 memos.expected.push(expected);
22679
22680 return objEquiv(actual, expected, strict, memos);
3af2954a 22681 }
ab78acc6 22682}
3af2954a 22683
8b095871
IC
22684function isArguments(object) {
22685 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 22686}
3af2954a 22687
8b095871
IC
22688function objEquiv(a, b, strict, actualVisitedObjects) {
22689 if (a === null || a === undefined || b === null || b === undefined)
22690 return false;
22691 // if one is a primitive, the other must be same
22692 if (util.isPrimitive(a) || util.isPrimitive(b))
22693 return a === b;
22694 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
22695 return false;
22696 var aIsArgs = isArguments(a);
22697 var bIsArgs = isArguments(b);
22698 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
22699 return false;
22700 if (aIsArgs) {
22701 a = pSlice.call(a);
22702 b = pSlice.call(b);
22703 return _deepEqual(a, b, strict);
22704 }
22705 var ka = objectKeys(a);
22706 var kb = objectKeys(b);
22707 var key, i;
22708 // having the same number of owned properties (keys incorporates
22709 // hasOwnProperty)
22710 if (ka.length !== kb.length)
22711 return false;
22712 //the same set of keys (although not necessarily the same order),
22713 ka.sort();
22714 kb.sort();
22715 //~~~cheap key test
22716 for (i = ka.length - 1; i >= 0; i--) {
22717 if (ka[i] !== kb[i])
22718 return false;
22719 }
22720 //equivalent values for every corresponding key, and
22721 //~~~possibly expensive deep test
22722 for (i = ka.length - 1; i >= 0; i--) {
22723 key = ka[i];
22724 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
22725 return false;
22726 }
22727 return true;
ab78acc6 22728}
3af2954a 22729
8b095871
IC
22730// 8. The non-equivalence assertion tests for any deep inequality.
22731// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 22732
8b095871
IC
22733assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
22734 if (_deepEqual(actual, expected, false)) {
22735 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 22736 }
8b095871 22737};
3af2954a 22738
8b095871
IC
22739assert.notDeepStrictEqual = notDeepStrictEqual;
22740function notDeepStrictEqual(actual, expected, message) {
22741 if (_deepEqual(actual, expected, true)) {
22742 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
22743 }
ab78acc6 22744}
3af2954a 22745
3af2954a 22746
8b095871
IC
22747// 9. The strict equality assertion tests strict equality, as determined by ===.
22748// assert.strictEqual(actual, expected, message_opt);
3af2954a 22749
8b095871
IC
22750assert.strictEqual = function strictEqual(actual, expected, message) {
22751 if (actual !== expected) {
22752 fail(actual, expected, message, '===', assert.strictEqual);
22753 }
22754};
3af2954a 22755
8b095871
IC
22756// 10. The strict non-equality assertion tests for strict inequality, as
22757// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 22758
8b095871
IC
22759assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
22760 if (actual === expected) {
22761 fail(actual, expected, message, '!==', assert.notStrictEqual);
22762 }
22763};
3af2954a 22764
8b095871
IC
22765function expectedException(actual, expected) {
22766 if (!actual || !expected) {
22767 return false;
22768 }
3af2954a 22769
8b095871
IC
22770 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
22771 return expected.test(actual);
22772 }
3af2954a 22773
8b095871
IC
22774 try {
22775 if (actual instanceof expected) {
22776 return true;
22777 }
22778 } catch (e) {
22779 // Ignore. The instanceof check doesn't work for arrow functions.
22780 }
3af2954a 22781
8b095871
IC
22782 if (Error.isPrototypeOf(expected)) {
22783 return false;
22784 }
22785
22786 return expected.call({}, actual) === true;
ab78acc6 22787}
3af2954a 22788
8b095871
IC
22789function _tryBlock(block) {
22790 var error;
22791 try {
22792 block();
22793 } catch (e) {
22794 error = e;
22795 }
22796 return error;
ab78acc6 22797}
3af2954a 22798
8b095871
IC
22799function _throws(shouldThrow, block, expected, message) {
22800 var actual;
22801
22802 if (typeof block !== 'function') {
22803 throw new TypeError('"block" argument must be a function');
3af2954a 22804 }
8b095871
IC
22805
22806 if (typeof expected === 'string') {
22807 message = expected;
22808 expected = null;
ab78acc6 22809 }
8b095871
IC
22810
22811 actual = _tryBlock(block);
22812
22813 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
22814 (message ? ' ' + message : '.');
22815
22816 if (shouldThrow && !actual) {
22817 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 22818 }
8b095871
IC
22819
22820 var userProvidedMessage = typeof message === 'string';
22821 var isUnwantedException = !shouldThrow && util.isError(actual);
22822 var isUnexpectedException = !shouldThrow && actual && !expected;
22823
22824 if ((isUnwantedException &&
22825 userProvidedMessage &&
22826 expectedException(actual, expected)) ||
22827 isUnexpectedException) {
22828 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 22829 }
3af2954a 22830
8b095871
IC
22831 if ((shouldThrow && actual && expected &&
22832 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
22833 throw actual;
22834 }
ab78acc6 22835}
3af2954a 22836
8b095871
IC
22837// 11. Expected to throw an error:
22838// assert.throws(block, Error_opt, message_opt);
22839
22840assert.throws = function(block, /*optional*/error, /*optional*/message) {
22841 _throws(true, block, error, message);
22842};
22843
22844// EXTENSION! This is annoying to write outside this module.
22845assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
22846 _throws(false, block, error, message);
22847};
22848
22849assert.ifError = function(err) { if (err) throw err; };
22850
22851var objectKeys = Object.keys || function (obj) {
22852 var keys = [];
22853 for (var key in obj) {
22854 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 22855 }
8b095871
IC
22856 return keys;
22857};
3af2954a 22858
8b095871
IC
22859}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
22860},{"util/":30}],2:[function(require,module,exports){
22861'use strict'
22862
22863exports.byteLength = byteLength
22864exports.toByteArray = toByteArray
22865exports.fromByteArray = fromByteArray
22866
22867var lookup = []
22868var revLookup = []
22869var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
22870
22871var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
22872for (var i = 0, len = code.length; i < len; ++i) {
22873 lookup[i] = code[i]
22874 revLookup[code.charCodeAt(i)] = i
22875}
22876
22877revLookup['-'.charCodeAt(0)] = 62
22878revLookup['_'.charCodeAt(0)] = 63
22879
22880function placeHoldersCount (b64) {
22881 var len = b64.length
22882 if (len % 4 > 0) {
22883 throw new Error('Invalid string. Length must be a multiple of 4')
22884 }
22885
22886 // the number of equal signs (place holders)
22887 // if there are two placeholders, than the two characters before it
22888 // represent one byte
22889 // if there is only one, then the three characters before it represent 2 bytes
22890 // this is just a cheap hack to not do indexOf twice
22891 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
22892}
22893
8b095871
IC
22894function byteLength (b64) {
22895 // base64 is 4/3 + up to two characters of the original data
22896 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 22897}
3af2954a 22898
8b095871
IC
22899function toByteArray (b64) {
22900 var i, j, l, tmp, placeHolders, arr
22901 var len = b64.length
22902 placeHolders = placeHoldersCount(b64)
22903
22904 arr = new Arr(len * 3 / 4 - placeHolders)
22905
22906 // if there are placeholders, only get up to the last complete 4 chars
22907 l = placeHolders > 0 ? len - 4 : len
22908
22909 var L = 0
22910
22911 for (i = 0, j = 0; i < l; i += 4, j += 3) {
22912 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
22913 arr[L++] = (tmp >> 16) & 0xFF
22914 arr[L++] = (tmp >> 8) & 0xFF
22915 arr[L++] = tmp & 0xFF
22916 }
22917
22918 if (placeHolders === 2) {
22919 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
22920 arr[L++] = tmp & 0xFF
22921 } else if (placeHolders === 1) {
22922 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
22923 arr[L++] = (tmp >> 8) & 0xFF
22924 arr[L++] = tmp & 0xFF
22925 }
22926
22927 return arr
ab78acc6 22928}
3af2954a 22929
8b095871
IC
22930function tripletToBase64 (num) {
22931 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 22932}
3af2954a 22933
8b095871
IC
22934function encodeChunk (uint8, start, end) {
22935 var tmp
22936 var output = []
22937 for (var i = start; i < end; i += 3) {
22938 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
22939 output.push(tripletToBase64(tmp))
22940 }
22941 return output.join('')
ab78acc6 22942}
3af2954a 22943
8b095871
IC
22944function fromByteArray (uint8) {
22945 var tmp
22946 var len = uint8.length
22947 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
22948 var output = ''
22949 var parts = []
22950 var maxChunkLength = 16383 // must be multiple of 3
22951
22952 // go through the array every three bytes, we'll deal with trailing stuff later
22953 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
22954 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
22955 }
22956
22957 // pad the end with zeros, but make sure to not forget the extra bytes
22958 if (extraBytes === 1) {
22959 tmp = uint8[len - 1]
22960 output += lookup[tmp >> 2]
22961 output += lookup[(tmp << 4) & 0x3F]
22962 output += '=='
22963 } else if (extraBytes === 2) {
22964 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
22965 output += lookup[tmp >> 10]
22966 output += lookup[(tmp >> 4) & 0x3F]
22967 output += lookup[(tmp << 2) & 0x3F]
22968 output += '='
22969 }
22970
22971 parts.push(output)
22972
22973 return parts.join('')
ab78acc6 22974}
3af2954a 22975
8b095871 22976},{}],3:[function(require,module,exports){
3af2954a 22977
8b095871
IC
22978},{}],4:[function(require,module,exports){
22979(function (global){
22980'use strict';
22981
22982var buffer = require('buffer');
22983var Buffer = buffer.Buffer;
22984var SlowBuffer = buffer.SlowBuffer;
22985var MAX_LEN = buffer.kMaxLength || 2147483647;
22986exports.alloc = function alloc(size, fill, encoding) {
22987 if (typeof Buffer.alloc === 'function') {
22988 return Buffer.alloc(size, fill, encoding);
ab78acc6 22989 }
8b095871
IC
22990 if (typeof encoding === 'number') {
22991 throw new TypeError('encoding must not be number');
22992 }
22993 if (typeof size !== 'number') {
22994 throw new TypeError('size must be a number');
22995 }
22996 if (size > MAX_LEN) {
22997 throw new RangeError('size is too large');
22998 }
22999 var enc = encoding;
23000 var _fill = fill;
23001 if (_fill === undefined) {
23002 enc = undefined;
23003 _fill = 0;
23004 }
23005 var buf = new Buffer(size);
23006 if (typeof _fill === 'string') {
23007 var fillBuf = new Buffer(_fill, enc);
23008 var flen = fillBuf.length;
23009 var i = -1;
23010 while (++i < size) {
23011 buf[i] = fillBuf[i % flen];
ab78acc6 23012 }
ab78acc6 23013 } else {
8b095871 23014 buf.fill(_fill);
ab78acc6 23015 }
8b095871 23016 return buf;
ab78acc6 23017}
8b095871
IC
23018exports.allocUnsafe = function allocUnsafe(size) {
23019 if (typeof Buffer.allocUnsafe === 'function') {
23020 return Buffer.allocUnsafe(size);
23021 }
23022 if (typeof size !== 'number') {
23023 throw new TypeError('size must be a number');
23024 }
23025 if (size > MAX_LEN) {
23026 throw new RangeError('size is too large');
23027 }
23028 return new Buffer(size);
ab78acc6 23029}
8b095871
IC
23030exports.from = function from(value, encodingOrOffset, length) {
23031 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
23032 return Buffer.from(value, encodingOrOffset, length);
23033 }
23034 if (typeof value === 'number') {
23035 throw new TypeError('"value" argument must not be a number');
23036 }
23037 if (typeof value === 'string') {
23038 return new Buffer(value, encodingOrOffset);
23039 }
23040 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
23041 var offset = encodingOrOffset;
23042 if (arguments.length === 1) {
23043 return new Buffer(value);
23044 }
23045 if (typeof offset === 'undefined') {
23046 offset = 0;
23047 }
23048 var len = length;
23049 if (typeof len === 'undefined') {
23050 len = value.byteLength - offset;
23051 }
23052 if (offset >= value.byteLength) {
23053 throw new RangeError('\'offset\' is out of bounds');
23054 }
23055 if (len > value.byteLength - offset) {
23056 throw new RangeError('\'length\' is out of bounds');
23057 }
23058 return new Buffer(value.slice(offset, offset + len));
23059 }
23060 if (Buffer.isBuffer(value)) {
23061 var out = new Buffer(value.length);
23062 value.copy(out, 0, 0, value.length);
23063 return out;
23064 }
23065 if (value) {
23066 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
23067 return new Buffer(value);
23068 }
23069 if (value.type === 'Buffer' && Array.isArray(value.data)) {
23070 return new Buffer(value.data);
23071 }
23072 }
3af2954a 23073
8b095871 23074 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 23075}
8b095871
IC
23076exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
23077 if (typeof Buffer.allocUnsafeSlow === 'function') {
23078 return Buffer.allocUnsafeSlow(size);
23079 }
23080 if (typeof size !== 'number') {
23081 throw new TypeError('size must be a number');
23082 }
23083 if (size >= MAX_LEN) {
23084 throw new RangeError('size is too large');
23085 }
23086 return new SlowBuffer(size);
ab78acc6 23087}
3af2954a 23088
8b095871
IC
23089}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
23090},{"buffer":5}],5:[function(require,module,exports){
23091/*!
23092 * The buffer module from node.js, for the browser.
23093 *
23094 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
23095 * @license MIT
23096 */
23097/* eslint-disable no-proto */
3af2954a 23098
8b095871 23099'use strict'
3af2954a 23100
8b095871
IC
23101var base64 = require('base64-js')
23102var ieee754 = require('ieee754')
3af2954a 23103
8b095871
IC
23104exports.Buffer = Buffer
23105exports.SlowBuffer = SlowBuffer
23106exports.INSPECT_MAX_BYTES = 50
23107
23108var K_MAX_LENGTH = 0x7fffffff
23109exports.kMaxLength = K_MAX_LENGTH
23110
23111/**
23112 * If `Buffer.TYPED_ARRAY_SUPPORT`:
23113 * === true Use Uint8Array implementation (fastest)
23114 * === false Print warning and recommend using `buffer` v4.x which has an Object
23115 * implementation (most compatible, even IE6)
23116 *
23117 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
23118 * Opera 11.6+, iOS 4.2+.
23119 *
23120 * We report that the browser does not support typed arrays if the are not subclassable
23121 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
23122 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
23123 * for __proto__ and has a buggy typed array implementation.
23124 */
23125Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
23126
23127if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
23128 typeof console.error === 'function') {
23129 console.error(
23130 'This browser lacks typed array (Uint8Array) support which is required by ' +
23131 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
23132 )
ab78acc6 23133}
3af2954a 23134
8b095871
IC
23135function typedArraySupport () {
23136 // Can typed array instances can be augmented?
23137 try {
23138 var arr = new Uint8Array(1)
23139 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
23140 return arr.foo() === 42
23141 } catch (e) {
23142 return false
23143 }
ab78acc6 23144}
3af2954a 23145
8b095871
IC
23146function createBuffer (length) {
23147 if (length > K_MAX_LENGTH) {
23148 throw new RangeError('Invalid typed array length')
3af2954a 23149 }
8b095871
IC
23150 // Return an augmented `Uint8Array` instance
23151 var buf = new Uint8Array(length)
23152 buf.__proto__ = Buffer.prototype
23153 return buf
ab78acc6 23154}
3af2954a 23155
8b095871
IC
23156/**
23157 * The Buffer constructor returns instances of `Uint8Array` that have their
23158 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
23159 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
23160 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
23161 * returns a single octet.
23162 *
23163 * The `Uint8Array` prototype remains unmodified.
23164 */
3af2954a 23165
8b095871
IC
23166function Buffer (arg, encodingOrOffset, length) {
23167 // Common case.
23168 if (typeof arg === 'number') {
23169 if (typeof encodingOrOffset === 'string') {
23170 throw new Error(
23171 'If encoding is specified then the first argument must be a string'
23172 )
23173 }
23174 return allocUnsafe(arg)
23175 }
23176 return from(arg, encodingOrOffset, length)
ab78acc6 23177}
3af2954a 23178
8b095871
IC
23179// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
23180if (typeof Symbol !== 'undefined' && Symbol.species &&
23181 Buffer[Symbol.species] === Buffer) {
23182 Object.defineProperty(Buffer, Symbol.species, {
23183 value: null,
23184 configurable: true,
23185 enumerable: false,
23186 writable: false
23187 })
ab78acc6 23188}
3af2954a 23189
8b095871 23190Buffer.poolSize = 8192 // not used by this implementation
3af2954a 23191
8b095871
IC
23192function from (value, encodingOrOffset, length) {
23193 if (typeof value === 'number') {
23194 throw new TypeError('"value" argument must not be a number')
23195 }
3af2954a 23196
8b095871
IC
23197 if (value instanceof ArrayBuffer) {
23198 return fromArrayBuffer(value, encodingOrOffset, length)
23199 }
3af2954a 23200
8b095871
IC
23201 if (typeof value === 'string') {
23202 return fromString(value, encodingOrOffset)
23203 }
3af2954a 23204
8b095871 23205 return fromObject(value)
ab78acc6 23206}
3af2954a 23207
8b095871
IC
23208/**
23209 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
23210 * if value is a number.
23211 * Buffer.from(str[, encoding])
23212 * Buffer.from(array)
23213 * Buffer.from(buffer)
23214 * Buffer.from(arrayBuffer[, byteOffset[, length]])
23215 **/
23216Buffer.from = function (value, encodingOrOffset, length) {
23217 return from(value, encodingOrOffset, length)
ab78acc6 23218}
3af2954a 23219
8b095871
IC
23220// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
23221// https://github.com/feross/buffer/pull/148
23222Buffer.prototype.__proto__ = Uint8Array.prototype
23223Buffer.__proto__ = Uint8Array
23224
23225function assertSize (size) {
23226 if (typeof size !== 'number') {
23227 throw new TypeError('"size" argument must be a number')
23228 } else if (size < 0) {
23229 throw new RangeError('"size" argument must not be negative')
23230 }
23231}
23232
23233function alloc (size, fill, encoding) {
23234 assertSize(size)
23235 if (size <= 0) {
23236 return createBuffer(size)
3af2954a 23237 }
8b095871
IC
23238 if (fill !== undefined) {
23239 // Only pay attention to encoding if it's a string. This
23240 // prevents accidentally sending in a number that would
23241 // be interpretted as a start offset.
23242 return typeof encoding === 'string'
23243 ? createBuffer(size).fill(fill, encoding)
23244 : createBuffer(size).fill(fill)
23245 }
23246 return createBuffer(size)
ab78acc6 23247}
3af2954a 23248
8b095871
IC
23249/**
23250 * Creates a new filled Buffer instance.
23251 * alloc(size[, fill[, encoding]])
23252 **/
23253Buffer.alloc = function (size, fill, encoding) {
23254 return alloc(size, fill, encoding)
ab78acc6 23255}
3af2954a 23256
8b095871
IC
23257function allocUnsafe (size) {
23258 assertSize(size)
23259 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 23260}
3af2954a 23261
8b095871
IC
23262/**
23263 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
23264 * */
23265Buffer.allocUnsafe = function (size) {
23266 return allocUnsafe(size)
23267}
23268/**
23269 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
23270 */
23271Buffer.allocUnsafeSlow = function (size) {
23272 return allocUnsafe(size)
ab78acc6 23273}
3af2954a 23274
8b095871
IC
23275function fromString (string, encoding) {
23276 if (typeof encoding !== 'string' || encoding === '') {
23277 encoding = 'utf8'
23278 }
23279
23280 if (!Buffer.isEncoding(encoding)) {
23281 throw new TypeError('"encoding" must be a valid string encoding')
23282 }
23283
23284 var length = byteLength(string, encoding) | 0
23285 var buf = createBuffer(length)
23286
23287 var actual = buf.write(string, encoding)
23288
23289 if (actual !== length) {
23290 // Writing a hex string, for example, that contains invalid characters will
23291 // cause everything after the first invalid character to be ignored. (e.g.
23292 // 'abxxcd' will be treated as 'ab')
23293 buf = buf.slice(0, actual)
23294 }
23295
23296 return buf
ab78acc6 23297}
3af2954a 23298
8b095871
IC
23299function fromArrayLike (array) {
23300 var length = array.length < 0 ? 0 : checked(array.length) | 0
23301 var buf = createBuffer(length)
23302 for (var i = 0; i < length; i += 1) {
23303 buf[i] = array[i] & 255
23304 }
23305 return buf
23306}
3af2954a 23307
8b095871
IC
23308function fromArrayBuffer (array, byteOffset, length) {
23309 if (byteOffset < 0 || array.byteLength < byteOffset) {
23310 throw new RangeError('\'offset\' is out of bounds')
23311 }
3af2954a 23312
8b095871
IC
23313 if (array.byteLength < byteOffset + (length || 0)) {
23314 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
23315 }
23316
8b095871
IC
23317 var buf
23318 if (byteOffset === undefined && length === undefined) {
23319 buf = new Uint8Array(array)
23320 } else if (length === undefined) {
23321 buf = new Uint8Array(array, byteOffset)
23322 } else {
23323 buf = new Uint8Array(array, byteOffset, length)
23324 }
3af2954a 23325
8b095871
IC
23326 // Return an augmented `Uint8Array` instance
23327 buf.__proto__ = Buffer.prototype
23328 return buf
23329}
23330
23331function fromObject (obj) {
23332 if (Buffer.isBuffer(obj)) {
23333 var len = checked(obj.length) | 0
23334 var buf = createBuffer(len)
23335
23336 if (buf.length === 0) {
23337 return buf
ab78acc6 23338 }
8b095871
IC
23339
23340 obj.copy(buf, 0, 0, len)
23341 return buf
23342 }
23343
23344 if (obj) {
23345 if (ArrayBuffer.isView(obj) || 'length' in obj) {
23346 if (typeof obj.length !== 'number' || isnan(obj.length)) {
23347 return createBuffer(0)
ab78acc6 23348 }
8b095871 23349 return fromArrayLike(obj)
ab78acc6 23350 }
3af2954a 23351
8b095871
IC
23352 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
23353 return fromArrayLike(obj.data)
3af2954a
IC
23354 }
23355 }
8b095871
IC
23356
23357 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 23358}
3af2954a 23359
8b095871
IC
23360function checked (length) {
23361 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
23362 // length is NaN (which is otherwise coerced to zero.)
23363 if (length >= K_MAX_LENGTH) {
23364 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
23365 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 23366 }
8b095871
IC
23367 return length | 0
23368}
23369
23370function SlowBuffer (length) {
23371 if (+length != length) { // eslint-disable-line eqeqeq
23372 length = 0
3af2954a 23373 }
8b095871 23374 return Buffer.alloc(+length)
ab78acc6 23375}
3af2954a 23376
8b095871
IC
23377Buffer.isBuffer = function isBuffer (b) {
23378 return b != null && b._isBuffer === true
ab78acc6 23379}
3af2954a 23380
8b095871
IC
23381Buffer.compare = function compare (a, b) {
23382 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
23383 throw new TypeError('Arguments must be Buffers')
23384 }
23385
23386 if (a === b) return 0
23387
23388 var x = a.length
23389 var y = b.length
23390
23391 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
23392 if (a[i] !== b[i]) {
23393 x = a[i]
23394 y = b[i]
23395 break
ab78acc6
IC
23396 }
23397 }
8b095871
IC
23398
23399 if (x < y) return -1
23400 if (y < x) return 1
23401 return 0
23402}
23403
23404Buffer.isEncoding = function isEncoding (encoding) {
23405 switch (String(encoding).toLowerCase()) {
23406 case 'hex':
23407 case 'utf8':
23408 case 'utf-8':
23409 case 'ascii':
23410 case 'latin1':
23411 case 'binary':
23412 case 'base64':
23413 case 'ucs2':
23414 case 'ucs-2':
23415 case 'utf16le':
23416 case 'utf-16le':
23417 return true
23418 default:
23419 return false
23420 }
ab78acc6
IC
23421}
23422
8b095871
IC
23423Buffer.concat = function concat (list, length) {
23424 if (!Array.isArray(list)) {
23425 throw new TypeError('"list" argument must be an Array of Buffers')
23426 }
ab78acc6 23427
8b095871
IC
23428 if (list.length === 0) {
23429 return Buffer.alloc(0)
23430 }
ab78acc6 23431
8b095871
IC
23432 var i
23433 if (length === undefined) {
23434 length = 0
23435 for (i = 0; i < list.length; ++i) {
23436 length += list[i].length
23437 }
3af2954a 23438 }
8b095871
IC
23439
23440 var buffer = Buffer.allocUnsafe(length)
23441 var pos = 0
23442 for (i = 0; i < list.length; ++i) {
23443 var buf = list[i]
23444 if (!Buffer.isBuffer(buf)) {
23445 throw new TypeError('"list" argument must be an Array of Buffers')
23446 }
23447 buf.copy(buffer, pos)
23448 pos += buf.length
ab78acc6 23449 }
8b095871 23450 return buffer
ab78acc6
IC
23451}
23452
8b095871
IC
23453function byteLength (string, encoding) {
23454 if (Buffer.isBuffer(string)) {
23455 return string.length
23456 }
23457 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
23458 return string.byteLength
23459 }
23460 if (typeof string !== 'string') {
23461 string = '' + string
23462 }
23463
23464 var len = string.length
23465 if (len === 0) return 0
23466
23467 // Use a for loop to avoid recursion
23468 var loweredCase = false
23469 for (;;) {
23470 switch (encoding) {
23471 case 'ascii':
23472 case 'latin1':
23473 case 'binary':
23474 return len
23475 case 'utf8':
23476 case 'utf-8':
23477 case undefined:
23478 return utf8ToBytes(string).length
23479 case 'ucs2':
23480 case 'ucs-2':
23481 case 'utf16le':
23482 case 'utf-16le':
23483 return len * 2
23484 case 'hex':
23485 return len >>> 1
23486 case 'base64':
23487 return base64ToBytes(string).length
23488 default:
23489 if (loweredCase) return utf8ToBytes(string).length // assume utf8
23490 encoding = ('' + encoding).toLowerCase()
23491 loweredCase = true
ab78acc6 23492 }
3af2954a 23493 }
ab78acc6 23494}
8b095871 23495Buffer.byteLength = byteLength
3af2954a 23496
8b095871
IC
23497function slowToString (encoding, start, end) {
23498 var loweredCase = false
3af2954a 23499
8b095871
IC
23500 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
23501 // property of a typed array.
3af2954a 23502
8b095871
IC
23503 // This behaves neither like String nor Uint8Array in that we set start/end
23504 // to their upper/lower bounds if the value passed is out of range.
23505 // undefined is handled specially as per ECMA-262 6th Edition,
23506 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
23507 if (start === undefined || start < 0) {
23508 start = 0
23509 }
23510 // Return early if start > this.length. Done here to prevent potential uint32
23511 // coercion fail below.
23512 if (start > this.length) {
23513 return ''
23514 }
3af2954a 23515
8b095871
IC
23516 if (end === undefined || end > this.length) {
23517 end = this.length
23518 }
3af2954a 23519
8b095871
IC
23520 if (end <= 0) {
23521 return ''
23522 }
3af2954a 23523
8b095871
IC
23524 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
23525 end >>>= 0
23526 start >>>= 0
3af2954a 23527
8b095871
IC
23528 if (end <= start) {
23529 return ''
3af2954a
IC
23530 }
23531
8b095871 23532 if (!encoding) encoding = 'utf8'
3af2954a 23533
8b095871
IC
23534 while (true) {
23535 switch (encoding) {
23536 case 'hex':
23537 return hexSlice(this, start, end)
23538
23539 case 'utf8':
23540 case 'utf-8':
23541 return utf8Slice(this, start, end)
23542
23543 case 'ascii':
23544 return asciiSlice(this, start, end)
23545
23546 case 'latin1':
23547 case 'binary':
23548 return latin1Slice(this, start, end)
23549
23550 case 'base64':
23551 return base64Slice(this, start, end)
23552
23553 case 'ucs2':
23554 case 'ucs-2':
23555 case 'utf16le':
23556 case 'utf-16le':
23557 return utf16leSlice(this, start, end)
23558
23559 default:
23560 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
23561 encoding = (encoding + '').toLowerCase()
23562 loweredCase = true
23563 }
23564 }
ab78acc6 23565}
3af2954a 23566
8b095871
IC
23567// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
23568// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
23569// reliably in a browserify context because there could be multiple different
23570// copies of the 'buffer' package in use. This method works even for Buffer
23571// instances that were created from another copy of the `buffer` package.
23572// See: https://github.com/feross/buffer/issues/154
23573Buffer.prototype._isBuffer = true
23574
23575function swap (b, n, m) {
23576 var i = b[n]
23577 b[n] = b[m]
23578 b[m] = i
ab78acc6 23579}
3af2954a 23580
8b095871
IC
23581Buffer.prototype.swap16 = function swap16 () {
23582 var len = this.length
23583 if (len % 2 !== 0) {
23584 throw new RangeError('Buffer size must be a multiple of 16-bits')
23585 }
23586 for (var i = 0; i < len; i += 2) {
23587 swap(this, i, i + 1)
23588 }
23589 return this
23590}
3af2954a 23591
8b095871
IC
23592Buffer.prototype.swap32 = function swap32 () {
23593 var len = this.length
23594 if (len % 4 !== 0) {
23595 throw new RangeError('Buffer size must be a multiple of 32-bits')
23596 }
23597 for (var i = 0; i < len; i += 4) {
23598 swap(this, i, i + 3)
23599 swap(this, i + 1, i + 2)
23600 }
23601 return this
23602}
3af2954a 23603
8b095871
IC
23604Buffer.prototype.swap64 = function swap64 () {
23605 var len = this.length
23606 if (len % 8 !== 0) {
23607 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 23608 }
8b095871
IC
23609 for (var i = 0; i < len; i += 8) {
23610 swap(this, i, i + 7)
23611 swap(this, i + 1, i + 6)
23612 swap(this, i + 2, i + 5)
23613 swap(this, i + 3, i + 4)
23614 }
23615 return this
23616}
3af2954a 23617
8b095871
IC
23618Buffer.prototype.toString = function toString () {
23619 var length = this.length
23620 if (length === 0) return ''
23621 if (arguments.length === 0) return utf8Slice(this, 0, length)
23622 return slowToString.apply(this, arguments)
ab78acc6 23623}
3af2954a 23624
8b095871
IC
23625Buffer.prototype.equals = function equals (b) {
23626 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
23627 if (this === b) return true
23628 return Buffer.compare(this, b) === 0
23629}
3af2954a 23630
8b095871
IC
23631Buffer.prototype.inspect = function inspect () {
23632 var str = ''
23633 var max = exports.INSPECT_MAX_BYTES
23634 if (this.length > 0) {
23635 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
23636 if (this.length > max) str += ' ... '
23637 }
23638 return '<Buffer ' + str + '>'
ab78acc6 23639}
3af2954a 23640
8b095871
IC
23641Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
23642 if (!Buffer.isBuffer(target)) {
23643 throw new TypeError('Argument must be a Buffer')
23644 }
3af2954a 23645
8b095871
IC
23646 if (start === undefined) {
23647 start = 0
23648 }
23649 if (end === undefined) {
23650 end = target ? target.length : 0
23651 }
23652 if (thisStart === undefined) {
23653 thisStart = 0
23654 }
23655 if (thisEnd === undefined) {
23656 thisEnd = this.length
23657 }
3af2954a 23658
8b095871
IC
23659 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
23660 throw new RangeError('out of range index')
23661 }
3af2954a 23662
8b095871
IC
23663 if (thisStart >= thisEnd && start >= end) {
23664 return 0
23665 }
23666 if (thisStart >= thisEnd) {
23667 return -1
23668 }
23669 if (start >= end) {
23670 return 1
23671 }
3af2954a 23672
8b095871
IC
23673 start >>>= 0
23674 end >>>= 0
23675 thisStart >>>= 0
23676 thisEnd >>>= 0
3af2954a 23677
8b095871 23678 if (this === target) return 0
3af2954a 23679
8b095871
IC
23680 var x = thisEnd - thisStart
23681 var y = end - start
23682 var len = Math.min(x, y)
23683
23684 var thisCopy = this.slice(thisStart, thisEnd)
23685 var targetCopy = target.slice(start, end)
23686
23687 for (var i = 0; i < len; ++i) {
23688 if (thisCopy[i] !== targetCopy[i]) {
23689 x = thisCopy[i]
23690 y = targetCopy[i]
23691 break
3af2954a 23692 }
8b095871
IC
23693 }
23694
23695 if (x < y) return -1
23696 if (y < x) return 1
23697 return 0
ab78acc6 23698}
3af2954a 23699
8b095871
IC
23700// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
23701// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 23702//
8b095871
IC
23703// Arguments:
23704// - buffer - a Buffer to search
23705// - val - a string, Buffer, or number
23706// - byteOffset - an index into `buffer`; will be clamped to an int32
23707// - encoding - an optional encoding, relevant is val is a string
23708// - dir - true for indexOf, false for lastIndexOf
23709function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
23710 // Empty buffer means no match
23711 if (buffer.length === 0) return -1
23712
23713 // Normalize byteOffset
23714 if (typeof byteOffset === 'string') {
23715 encoding = byteOffset
23716 byteOffset = 0
23717 } else if (byteOffset > 0x7fffffff) {
23718 byteOffset = 0x7fffffff
23719 } else if (byteOffset < -0x80000000) {
23720 byteOffset = -0x80000000
23721 }
23722 byteOffset = +byteOffset // Coerce to Number.
23723 if (isNaN(byteOffset)) {
23724 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
23725 byteOffset = dir ? 0 : (buffer.length - 1)
23726 }
23727
23728 // Normalize byteOffset: negative offsets start from the end of the buffer
23729 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
23730 if (byteOffset >= buffer.length) {
23731 if (dir) return -1
23732 else byteOffset = buffer.length - 1
23733 } else if (byteOffset < 0) {
23734 if (dir) byteOffset = 0
23735 else return -1
23736 }
23737
23738 // Normalize val
23739 if (typeof val === 'string') {
23740 val = Buffer.from(val, encoding)
23741 }
3af2954a 23742
8b095871
IC
23743 // Finally, search either indexOf (if dir is true) or lastIndexOf
23744 if (Buffer.isBuffer(val)) {
23745 // Special case: looking for empty string/buffer always fails
23746 if (val.length === 0) {
23747 return -1
23748 }
23749 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
23750 } else if (typeof val === 'number') {
23751 val = val & 0xFF // Search for a byte value [0-255]
23752 if (typeof Uint8Array.prototype.indexOf === 'function') {
23753 if (dir) {
23754 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
23755 } else {
23756 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
23757 }
23758 }
23759 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
23760 }
3af2954a 23761
8b095871
IC
23762 throw new TypeError('val must be string, number or Buffer')
23763}
3af2954a 23764
8b095871
IC
23765function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
23766 var indexSize = 1
23767 var arrLength = arr.length
23768 var valLength = val.length
3af2954a 23769
8b095871
IC
23770 if (encoding !== undefined) {
23771 encoding = String(encoding).toLowerCase()
23772 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
23773 encoding === 'utf16le' || encoding === 'utf-16le') {
23774 if (arr.length < 2 || val.length < 2) {
23775 return -1
23776 }
23777 indexSize = 2
23778 arrLength /= 2
23779 valLength /= 2
23780 byteOffset /= 2
23781 }
23782 }
3af2954a 23783
8b095871
IC
23784 function read (buf, i) {
23785 if (indexSize === 1) {
23786 return buf[i]
23787 } else {
23788 return buf.readUInt16BE(i * indexSize)
23789 }
23790 }
3af2954a 23791
8b095871
IC
23792 var i
23793 if (dir) {
23794 var foundIndex = -1
23795 for (i = byteOffset; i < arrLength; i++) {
23796 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
23797 if (foundIndex === -1) foundIndex = i
23798 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
23799 } else {
23800 if (foundIndex !== -1) i -= i - foundIndex
23801 foundIndex = -1
23802 }
23803 }
ab78acc6 23804 } else {
8b095871
IC
23805 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
23806 for (i = byteOffset; i >= 0; i--) {
23807 var found = true
23808 for (var j = 0; j < valLength; j++) {
23809 if (read(arr, i + j) !== read(val, j)) {
23810 found = false
23811 break
23812 }
23813 }
23814 if (found) return i
23815 }
ab78acc6 23816 }
3af2954a 23817
8b095871
IC
23818 return -1
23819}
3af2954a 23820
8b095871
IC
23821Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
23822 return this.indexOf(val, byteOffset, encoding) !== -1
23823}
23824
23825Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
23826 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
23827}
3af2954a 23828
8b095871
IC
23829Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
23830 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
23831}
23832
23833function hexWrite (buf, string, offset, length) {
23834 offset = Number(offset) || 0
23835 var remaining = buf.length - offset
23836 if (!length) {
23837 length = remaining
23838 } else {
23839 length = Number(length)
23840 if (length > remaining) {
23841 length = remaining
3af2954a 23842 }
3af2954a
IC
23843 }
23844
8b095871
IC
23845 // must be an even number of digits
23846 var strLen = string.length
23847 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 23848
8b095871
IC
23849 if (length > strLen / 2) {
23850 length = strLen / 2
ab78acc6 23851 }
8b095871
IC
23852 for (var i = 0; i < length; ++i) {
23853 var parsed = parseInt(string.substr(i * 2, 2), 16)
23854 if (isNaN(parsed)) return i
23855 buf[offset + i] = parsed
ab78acc6 23856 }
8b095871 23857 return i
ab78acc6 23858}
3af2954a 23859
8b095871
IC
23860function utf8Write (buf, string, offset, length) {
23861 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 23862}
3af2954a 23863
8b095871
IC
23864function asciiWrite (buf, string, offset, length) {
23865 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 23866}
3af2954a 23867
8b095871
IC
23868function latin1Write (buf, string, offset, length) {
23869 return asciiWrite(buf, string, offset, length)
ab78acc6 23870}
3af2954a 23871
8b095871
IC
23872function base64Write (buf, string, offset, length) {
23873 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 23874}
3af2954a 23875
8b095871
IC
23876function ucs2Write (buf, string, offset, length) {
23877 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
23878}
3af2954a 23879
8b095871
IC
23880Buffer.prototype.write = function write (string, offset, length, encoding) {
23881 // Buffer#write(string)
23882 if (offset === undefined) {
23883 encoding = 'utf8'
23884 length = this.length
23885 offset = 0
23886 // Buffer#write(string, encoding)
23887 } else if (length === undefined && typeof offset === 'string') {
23888 encoding = offset
23889 length = this.length
23890 offset = 0
23891 // Buffer#write(string, offset[, length][, encoding])
23892 } else if (isFinite(offset)) {
23893 offset = offset >>> 0
23894 if (isFinite(length)) {
23895 length = length >>> 0
23896 if (encoding === undefined) encoding = 'utf8'
23897 } else {
23898 encoding = length
23899 length = undefined
23900 }
23901 } else {
23902 throw new Error(
23903 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
23904 )
3af2954a
IC
23905 }
23906
8b095871
IC
23907 var remaining = this.length - offset
23908 if (length === undefined || length > remaining) length = remaining
3af2954a 23909
8b095871
IC
23910 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
23911 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 23912 }
3af2954a 23913
8b095871 23914 if (!encoding) encoding = 'utf8'
3af2954a 23915
8b095871
IC
23916 var loweredCase = false
23917 for (;;) {
23918 switch (encoding) {
23919 case 'hex':
23920 return hexWrite(this, string, offset, length)
3af2954a 23921
8b095871
IC
23922 case 'utf8':
23923 case 'utf-8':
23924 return utf8Write(this, string, offset, length)
3af2954a 23925
8b095871
IC
23926 case 'ascii':
23927 return asciiWrite(this, string, offset, length)
3af2954a 23928
8b095871
IC
23929 case 'latin1':
23930 case 'binary':
23931 return latin1Write(this, string, offset, length)
3af2954a 23932
8b095871
IC
23933 case 'base64':
23934 // Warning: maxLength not taken into account in base64Write
23935 return base64Write(this, string, offset, length)
3af2954a 23936
8b095871
IC
23937 case 'ucs2':
23938 case 'ucs-2':
23939 case 'utf16le':
23940 case 'utf-16le':
23941 return ucs2Write(this, string, offset, length)
3af2954a 23942
8b095871
IC
23943 default:
23944 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
23945 encoding = ('' + encoding).toLowerCase()
23946 loweredCase = true
23947 }
3af2954a 23948 }
ab78acc6 23949}
3af2954a 23950
8b095871
IC
23951Buffer.prototype.toJSON = function toJSON () {
23952 return {
23953 type: 'Buffer',
23954 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 23955 }
ab78acc6
IC
23956}
23957
8b095871
IC
23958function base64Slice (buf, start, end) {
23959 if (start === 0 && end === buf.length) {
23960 return base64.fromByteArray(buf)
23961 } else {
23962 return base64.fromByteArray(buf.slice(start, end))
3af2954a 23963 }
8b095871 23964}
3af2954a 23965
8b095871
IC
23966function utf8Slice (buf, start, end) {
23967 end = Math.min(buf.length, end)
23968 var res = []
3af2954a 23969
8b095871
IC
23970 var i = start
23971 while (i < end) {
23972 var firstByte = buf[i]
23973 var codePoint = null
23974 var bytesPerSequence = (firstByte > 0xEF) ? 4
23975 : (firstByte > 0xDF) ? 3
23976 : (firstByte > 0xBF) ? 2
23977 : 1
3af2954a 23978
8b095871
IC
23979 if (i + bytesPerSequence <= end) {
23980 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 23981
8b095871
IC
23982 switch (bytesPerSequence) {
23983 case 1:
23984 if (firstByte < 0x80) {
23985 codePoint = firstByte
23986 }
23987 break
23988 case 2:
23989 secondByte = buf[i + 1]
23990 if ((secondByte & 0xC0) === 0x80) {
23991 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
23992 if (tempCodePoint > 0x7F) {
23993 codePoint = tempCodePoint
23994 }
23995 }
23996 break
23997 case 3:
23998 secondByte = buf[i + 1]
23999 thirdByte = buf[i + 2]
24000 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
24001 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
24002 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
24003 codePoint = tempCodePoint
24004 }
24005 }
24006 break
24007 case 4:
24008 secondByte = buf[i + 1]
24009 thirdByte = buf[i + 2]
24010 fourthByte = buf[i + 3]
24011 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
24012 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
24013 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
24014 codePoint = tempCodePoint
24015 }
24016 }
24017 }
24018 }
3af2954a 24019
8b095871
IC
24020 if (codePoint === null) {
24021 // we did not generate a valid codePoint so insert a
24022 // replacement char (U+FFFD) and advance only 1 byte
24023 codePoint = 0xFFFD
24024 bytesPerSequence = 1
24025 } else if (codePoint > 0xFFFF) {
24026 // encode to utf16 (surrogate pair dance)
24027 codePoint -= 0x10000
24028 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
24029 codePoint = 0xDC00 | codePoint & 0x3FF
24030 }
24031
24032 res.push(codePoint)
24033 i += bytesPerSequence
3af2954a
IC
24034 }
24035
8b095871 24036 return decodeCodePointsArray(res)
ab78acc6 24037}
3af2954a 24038
8b095871
IC
24039// Based on http://stackoverflow.com/a/22747272/680742, the browser with
24040// the lowest limit is Chrome, with 0x10000 args.
24041// We go 1 magnitude less, for safety
24042var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 24043
8b095871
IC
24044function decodeCodePointsArray (codePoints) {
24045 var len = codePoints.length
24046 if (len <= MAX_ARGUMENTS_LENGTH) {
24047 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
24048 }
24049
8b095871
IC
24050 // Decode in chunks to avoid "call stack size exceeded".
24051 var res = ''
24052 var i = 0
24053 while (i < len) {
24054 res += String.fromCharCode.apply(
24055 String,
24056 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
24057 )
3af2954a 24058 }
8b095871
IC
24059 return res
24060}
3af2954a 24061
8b095871
IC
24062function asciiSlice (buf, start, end) {
24063 var ret = ''
24064 end = Math.min(buf.length, end)
3af2954a 24065
8b095871
IC
24066 for (var i = start; i < end; ++i) {
24067 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 24068 }
8b095871
IC
24069 return ret
24070}
3af2954a 24071
8b095871
IC
24072function latin1Slice (buf, start, end) {
24073 var ret = ''
24074 end = Math.min(buf.length, end)
3af2954a 24075
8b095871
IC
24076 for (var i = start; i < end; ++i) {
24077 ret += String.fromCharCode(buf[i])
3af2954a 24078 }
8b095871 24079 return ret
ab78acc6 24080}
3af2954a 24081
8b095871
IC
24082function hexSlice (buf, start, end) {
24083 var len = buf.length
3af2954a 24084
8b095871
IC
24085 if (!start || start < 0) start = 0
24086 if (!end || end < 0 || end > len) end = len
3af2954a 24087
8b095871
IC
24088 var out = ''
24089 for (var i = start; i < end; ++i) {
24090 out += toHex(buf[i])
3af2954a 24091 }
8b095871
IC
24092 return out
24093}
3af2954a 24094
8b095871
IC
24095function utf16leSlice (buf, start, end) {
24096 var bytes = buf.slice(start, end)
24097 var res = ''
24098 for (var i = 0; i < bytes.length; i += 2) {
24099 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
24100 }
24101 return res
24102}
3af2954a 24103
8b095871
IC
24104Buffer.prototype.slice = function slice (start, end) {
24105 var len = this.length
24106 start = ~~start
24107 end = end === undefined ? len : ~~end
3af2954a 24108
8b095871
IC
24109 if (start < 0) {
24110 start += len
24111 if (start < 0) start = 0
24112 } else if (start > len) {
24113 start = len
24114 }
3af2954a 24115
8b095871
IC
24116 if (end < 0) {
24117 end += len
24118 if (end < 0) end = 0
24119 } else if (end > len) {
24120 end = len
24121 }
3af2954a 24122
8b095871 24123 if (end < start) end = start
3af2954a 24124
8b095871
IC
24125 var newBuf = this.subarray(start, end)
24126 // Return an augmented `Uint8Array` instance
24127 newBuf.__proto__ = Buffer.prototype
24128 return newBuf
24129}
3af2954a 24130
8b095871
IC
24131/*
24132 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 24133 */
8b095871
IC
24134function checkOffset (offset, ext, length) {
24135 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
24136 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 24137}
3af2954a 24138
8b095871
IC
24139Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
24140 offset = offset >>> 0
24141 byteLength = byteLength >>> 0
24142 if (!noAssert) checkOffset(offset, byteLength, this.length)
24143
24144 var val = this[offset]
24145 var mul = 1
24146 var i = 0
24147 while (++i < byteLength && (mul *= 0x100)) {
24148 val += this[offset + i] * mul
3af2954a
IC
24149 }
24150
8b095871
IC
24151 return val
24152}
3af2954a 24153
8b095871
IC
24154Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
24155 offset = offset >>> 0
24156 byteLength = byteLength >>> 0
24157 if (!noAssert) {
24158 checkOffset(offset, byteLength, this.length)
ab78acc6 24159 }
3af2954a 24160
8b095871
IC
24161 var val = this[offset + --byteLength]
24162 var mul = 1
24163 while (byteLength > 0 && (mul *= 0x100)) {
24164 val += this[offset + --byteLength] * mul
ab78acc6 24165 }
3af2954a 24166
8b095871 24167 return val
ab78acc6 24168}
3af2954a 24169
8b095871
IC
24170Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
24171 offset = offset >>> 0
24172 if (!noAssert) checkOffset(offset, 1, this.length)
24173 return this[offset]
ab78acc6 24174}
3af2954a 24175
8b095871
IC
24176Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
24177 offset = offset >>> 0
24178 if (!noAssert) checkOffset(offset, 2, this.length)
24179 return this[offset] | (this[offset + 1] << 8)
24180}
3af2954a 24181
8b095871
IC
24182Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
24183 offset = offset >>> 0
24184 if (!noAssert) checkOffset(offset, 2, this.length)
24185 return (this[offset] << 8) | this[offset + 1]
24186}
3af2954a 24187
8b095871
IC
24188Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
24189 offset = offset >>> 0
24190 if (!noAssert) checkOffset(offset, 4, this.length)
24191
24192 return ((this[offset]) |
24193 (this[offset + 1] << 8) |
24194 (this[offset + 2] << 16)) +
24195 (this[offset + 3] * 0x1000000)
ab78acc6 24196}
3af2954a 24197
8b095871
IC
24198Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
24199 offset = offset >>> 0
24200 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24201
8b095871
IC
24202 return (this[offset] * 0x1000000) +
24203 ((this[offset + 1] << 16) |
24204 (this[offset + 2] << 8) |
24205 this[offset + 3])
24206}
3af2954a 24207
8b095871
IC
24208Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
24209 offset = offset >>> 0
24210 byteLength = byteLength >>> 0
24211 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24212
8b095871
IC
24213 var val = this[offset]
24214 var mul = 1
24215 var i = 0
24216 while (++i < byteLength && (mul *= 0x100)) {
24217 val += this[offset + i] * mul
3af2954a 24218 }
8b095871 24219 mul *= 0x80
3af2954a 24220
8b095871 24221 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 24222
8b095871 24223 return val
ab78acc6 24224}
3af2954a 24225
8b095871
IC
24226Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
24227 offset = offset >>> 0
24228 byteLength = byteLength >>> 0
24229 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 24230
8b095871
IC
24231 var i = byteLength
24232 var mul = 1
24233 var val = this[offset + --i]
24234 while (i > 0 && (mul *= 0x100)) {
24235 val += this[offset + --i] * mul
3af2954a 24236 }
8b095871 24237 mul *= 0x80
3af2954a 24238
8b095871
IC
24239 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
24240
24241 return val
ab78acc6 24242}
3af2954a 24243
8b095871
IC
24244Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
24245 offset = offset >>> 0
24246 if (!noAssert) checkOffset(offset, 1, this.length)
24247 if (!(this[offset] & 0x80)) return (this[offset])
24248 return ((0xff - this[offset] + 1) * -1)
ab78acc6 24249}
3af2954a 24250
8b095871
IC
24251Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
24252 offset = offset >>> 0
24253 if (!noAssert) checkOffset(offset, 2, this.length)
24254 var val = this[offset] | (this[offset + 1] << 8)
24255 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 24256}
3af2954a 24257
8b095871
IC
24258Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
24259 offset = offset >>> 0
24260 if (!noAssert) checkOffset(offset, 2, this.length)
24261 var val = this[offset + 1] | (this[offset] << 8)
24262 return (val & 0x8000) ? val | 0xFFFF0000 : val
24263}
ab78acc6 24264
8b095871
IC
24265Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
24266 offset = offset >>> 0
24267 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24268
8b095871
IC
24269 return (this[offset]) |
24270 (this[offset + 1] << 8) |
24271 (this[offset + 2] << 16) |
24272 (this[offset + 3] << 24)
ab78acc6 24273}
3af2954a 24274
8b095871
IC
24275Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
24276 offset = offset >>> 0
24277 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 24278
8b095871
IC
24279 return (this[offset] << 24) |
24280 (this[offset + 1] << 16) |
24281 (this[offset + 2] << 8) |
24282 (this[offset + 3])
24283}
3af2954a 24284
8b095871
IC
24285Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
24286 offset = offset >>> 0
24287 if (!noAssert) checkOffset(offset, 4, this.length)
24288 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 24289}
3af2954a 24290
8b095871
IC
24291Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
24292 offset = offset >>> 0
24293 if (!noAssert) checkOffset(offset, 4, this.length)
24294 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 24295}
3af2954a 24296
8b095871
IC
24297Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
24298 offset = offset >>> 0
24299 if (!noAssert) checkOffset(offset, 8, this.length)
24300 return ieee754.read(this, offset, true, 52, 8)
24301}
3af2954a 24302
8b095871
IC
24303Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
24304 offset = offset >>> 0
24305 if (!noAssert) checkOffset(offset, 8, this.length)
24306 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 24307}
3af2954a 24308
8b095871
IC
24309function checkInt (buf, value, offset, ext, max, min) {
24310 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
24311 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
24312 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 24313}
3af2954a 24314
8b095871
IC
24315Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
24316 value = +value
24317 offset = offset >>> 0
24318 byteLength = byteLength >>> 0
24319 if (!noAssert) {
24320 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24321 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
24322 }
24323
8b095871 24324 var mul = 1
ab78acc6 24325 var i = 0
8b095871
IC
24326 this[offset] = value & 0xFF
24327 while (++i < byteLength && (mul *= 0x100)) {
24328 this[offset + i] = (value / mul) & 0xFF
24329 }
3af2954a 24330
8b095871
IC
24331 return offset + byteLength
24332}
24333
24334Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
24335 value = +value
24336 offset = offset >>> 0
24337 byteLength = byteLength >>> 0
24338 if (!noAssert) {
24339 var maxBytes = Math.pow(2, 8 * byteLength) - 1
24340 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 24341 }
3af2954a 24342
8b095871
IC
24343 var i = byteLength - 1
24344 var mul = 1
24345 this[offset + i] = value & 0xFF
24346 while (--i >= 0 && (mul *= 0x100)) {
24347 this[offset + i] = (value / mul) & 0xFF
ab78acc6 24348 }
3af2954a 24349
8b095871
IC
24350 return offset + byteLength
24351}
24352
24353Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
24354 value = +value
24355 offset = offset >>> 0
24356 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
24357 this[offset] = (value & 0xff)
24358 return offset + 1
24359}
24360
24361Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
24362 value = +value
24363 offset = offset >>> 0
24364 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24365 this[offset] = (value & 0xff)
24366 this[offset + 1] = (value >>> 8)
24367 return offset + 2
24368}
24369
24370Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
24371 value = +value
24372 offset = offset >>> 0
24373 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
24374 this[offset] = (value >>> 8)
24375 this[offset + 1] = (value & 0xff)
24376 return offset + 2
ab78acc6 24377}
3af2954a 24378
8b095871
IC
24379Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
24380 value = +value
24381 offset = offset >>> 0
24382 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24383 this[offset + 3] = (value >>> 24)
24384 this[offset + 2] = (value >>> 16)
24385 this[offset + 1] = (value >>> 8)
24386 this[offset] = (value & 0xff)
24387 return offset + 4
ab78acc6 24388}
3af2954a 24389
8b095871
IC
24390Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
24391 value = +value
24392 offset = offset >>> 0
24393 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
24394 this[offset] = (value >>> 24)
24395 this[offset + 1] = (value >>> 16)
24396 this[offset + 2] = (value >>> 8)
24397 this[offset + 3] = (value & 0xff)
24398 return offset + 4
24399}
3af2954a 24400
8b095871
IC
24401Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
24402 value = +value
24403 offset = offset >>> 0
24404 if (!noAssert) {
24405 var limit = Math.pow(2, (8 * byteLength) - 1)
24406
24407 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
24408 }
24409
8b095871
IC
24410 var i = 0
24411 var mul = 1
24412 var sub = 0
24413 this[offset] = value & 0xFF
24414 while (++i < byteLength && (mul *= 0x100)) {
24415 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
24416 sub = 1
ab78acc6 24417 }
8b095871 24418 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
24419 }
24420
8b095871 24421 return offset + byteLength
ab78acc6 24422}
3af2954a 24423
8b095871
IC
24424Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
24425 value = +value
24426 offset = offset >>> 0
24427 if (!noAssert) {
24428 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 24429
8b095871
IC
24430 checkInt(this, value, offset, byteLength, limit - 1, -limit)
24431 }
ab78acc6 24432
8b095871
IC
24433 var i = byteLength - 1
24434 var mul = 1
24435 var sub = 0
24436 this[offset + i] = value & 0xFF
24437 while (--i >= 0 && (mul *= 0x100)) {
24438 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
24439 sub = 1
3af2954a 24440 }
8b095871 24441 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 24442 }
3af2954a 24443
8b095871
IC
24444 return offset + byteLength
24445}
3af2954a 24446
8b095871
IC
24447Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
24448 value = +value
24449 offset = offset >>> 0
24450 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
24451 if (value < 0) value = 0xff + value + 1
24452 this[offset] = (value & 0xff)
24453 return offset + 1
24454}
3af2954a 24455
8b095871
IC
24456Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
24457 value = +value
24458 offset = offset >>> 0
24459 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24460 this[offset] = (value & 0xff)
24461 this[offset + 1] = (value >>> 8)
24462 return offset + 2
24463}
3af2954a 24464
8b095871
IC
24465Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
24466 value = +value
24467 offset = offset >>> 0
24468 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
24469 this[offset] = (value >>> 8)
24470 this[offset + 1] = (value & 0xff)
24471 return offset + 2
24472}
3af2954a 24473
8b095871
IC
24474Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
24475 value = +value
24476 offset = offset >>> 0
24477 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24478 this[offset] = (value & 0xff)
24479 this[offset + 1] = (value >>> 8)
24480 this[offset + 2] = (value >>> 16)
24481 this[offset + 3] = (value >>> 24)
24482 return offset + 4
24483}
3af2954a 24484
8b095871
IC
24485Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
24486 value = +value
24487 offset = offset >>> 0
24488 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
24489 if (value < 0) value = 0xffffffff + value + 1
24490 this[offset] = (value >>> 24)
24491 this[offset + 1] = (value >>> 16)
24492 this[offset + 2] = (value >>> 8)
24493 this[offset + 3] = (value & 0xff)
24494 return offset + 4
24495}
3af2954a 24496
8b095871
IC
24497function checkIEEE754 (buf, value, offset, ext, max, min) {
24498 if (offset + ext > buf.length) throw new RangeError('Index out of range')
24499 if (offset < 0) throw new RangeError('Index out of range')
24500}
3af2954a 24501
8b095871
IC
24502function writeFloat (buf, value, offset, littleEndian, noAssert) {
24503 value = +value
24504 offset = offset >>> 0
24505 if (!noAssert) {
24506 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 24507 }
8b095871
IC
24508 ieee754.write(buf, value, offset, littleEndian, 23, 4)
24509 return offset + 4
ab78acc6 24510}
3af2954a 24511
8b095871
IC
24512Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
24513 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 24514}
3af2954a 24515
8b095871
IC
24516Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
24517 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 24518}
3af2954a 24519
8b095871
IC
24520function writeDouble (buf, value, offset, littleEndian, noAssert) {
24521 value = +value
24522 offset = offset >>> 0
24523 if (!noAssert) {
24524 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 24525 }
8b095871
IC
24526 ieee754.write(buf, value, offset, littleEndian, 52, 8)
24527 return offset + 8
ab78acc6 24528}
3af2954a 24529
8b095871
IC
24530Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
24531 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 24532}
3af2954a 24533
8b095871
IC
24534Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
24535 return writeDouble(this, value, offset, false, noAssert)
24536}
3af2954a 24537
8b095871
IC
24538// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
24539Buffer.prototype.copy = function copy (target, targetStart, start, end) {
24540 if (!start) start = 0
24541 if (!end && end !== 0) end = this.length
24542 if (targetStart >= target.length) targetStart = target.length
24543 if (!targetStart) targetStart = 0
24544 if (end > 0 && end < start) end = start
3af2954a 24545
8b095871
IC
24546 // Copy 0 bytes; we're done
24547 if (end === start) return 0
24548 if (target.length === 0 || this.length === 0) return 0
3af2954a 24549
8b095871
IC
24550 // Fatal error conditions
24551 if (targetStart < 0) {
24552 throw new RangeError('targetStart out of bounds')
3af2954a 24553 }
8b095871
IC
24554 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
24555 if (end < 0) throw new RangeError('sourceEnd out of bounds')
24556
24557 // Are we oob?
24558 if (end > this.length) end = this.length
24559 if (target.length - targetStart < end - start) {
24560 end = target.length - targetStart + start
3af2954a 24561 }
8b095871
IC
24562
24563 var len = end - start
24564 var i
24565
24566 if (this === target && start < targetStart && targetStart < end) {
24567 // descending copy from end
24568 for (i = len - 1; i >= 0; --i) {
24569 target[i + targetStart] = this[i + start]
3af2954a 24570 }
8b095871
IC
24571 } else if (len < 1000) {
24572 // ascending copy from start
24573 for (i = 0; i < len; ++i) {
24574 target[i + targetStart] = this[i + start]
24575 }
24576 } else {
24577 Uint8Array.prototype.set.call(
24578 target,
24579 this.subarray(start, start + len),
24580 targetStart
24581 )
3af2954a
IC
24582 }
24583
8b095871
IC
24584 return len
24585}
24586
24587// Usage:
24588// buffer.fill(number[, offset[, end]])
24589// buffer.fill(buffer[, offset[, end]])
24590// buffer.fill(string[, offset[, end]][, encoding])
24591Buffer.prototype.fill = function fill (val, start, end, encoding) {
24592 // Handle string cases:
24593 if (typeof val === 'string') {
24594 if (typeof start === 'string') {
24595 encoding = start
24596 start = 0
24597 end = this.length
24598 } else if (typeof end === 'string') {
24599 encoding = end
24600 end = this.length
24601 }
24602 if (val.length === 1) {
24603 var code = val.charCodeAt(0)
24604 if (code < 256) {
24605 val = code
3af2954a 24606 }
3af2954a 24607 }
8b095871
IC
24608 if (encoding !== undefined && typeof encoding !== 'string') {
24609 throw new TypeError('encoding must be a string')
24610 }
24611 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
24612 throw new TypeError('Unknown encoding: ' + encoding)
24613 }
24614 } else if (typeof val === 'number') {
24615 val = val & 255
ab78acc6 24616 }
3af2954a 24617
8b095871
IC
24618 // Invalid ranges are not set to a default, so can range check early.
24619 if (start < 0 || this.length < start || this.length < end) {
24620 throw new RangeError('Out of range index')
24621 }
3af2954a 24622
8b095871
IC
24623 if (end <= start) {
24624 return this
24625 }
3af2954a 24626
8b095871
IC
24627 start = start >>> 0
24628 end = end === undefined ? this.length : end >>> 0
3af2954a 24629
8b095871
IC
24630 if (!val) val = 0
24631
24632 var i
24633 if (typeof val === 'number') {
24634 for (i = start; i < end; ++i) {
24635 this[i] = val
24636 }
ab78acc6 24637 } else {
8b095871
IC
24638 var bytes = Buffer.isBuffer(val)
24639 ? val
24640 : new Buffer(val, encoding)
24641 var len = bytes.length
24642 for (i = 0; i < end - start; ++i) {
24643 this[i + start] = bytes[i % len]
ab78acc6
IC
24644 }
24645 }
3af2954a 24646
8b095871
IC
24647 return this
24648}
3af2954a 24649
8b095871
IC
24650// HELPER FUNCTIONS
24651// ================
24652
24653var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
24654
24655function base64clean (str) {
24656 // Node strips out invalid characters like \n and \t from the string, base64-js does not
24657 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
24658 // Node converts strings with length < 2 to ''
24659 if (str.length < 2) return ''
24660 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
24661 while (str.length % 4 !== 0) {
24662 str = str + '='
3af2954a 24663 }
8b095871 24664 return str
ab78acc6
IC
24665}
24666
8b095871
IC
24667function stringtrim (str) {
24668 if (str.trim) return str.trim()
24669 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 24670}
3af2954a 24671
8b095871
IC
24672function toHex (n) {
24673 if (n < 16) return '0' + n.toString(16)
24674 return n.toString(16)
ab78acc6 24675}
3af2954a 24676
8b095871
IC
24677function utf8ToBytes (string, units) {
24678 units = units || Infinity
24679 var codePoint
24680 var length = string.length
24681 var leadSurrogate = null
24682 var bytes = []
3af2954a 24683
8b095871
IC
24684 for (var i = 0; i < length; ++i) {
24685 codePoint = string.charCodeAt(i)
3af2954a 24686
8b095871
IC
24687 // is surrogate component
24688 if (codePoint > 0xD7FF && codePoint < 0xE000) {
24689 // last char was a lead
24690 if (!leadSurrogate) {
24691 // no lead yet
24692 if (codePoint > 0xDBFF) {
24693 // unexpected trail
24694 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24695 continue
24696 } else if (i + 1 === length) {
24697 // unpaired lead
24698 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24699 continue
24700 }
3af2954a 24701
8b095871
IC
24702 // valid lead
24703 leadSurrogate = codePoint
24704
24705 continue
24706 }
24707
24708 // 2 leads in a row
24709 if (codePoint < 0xDC00) {
24710 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24711 leadSurrogate = codePoint
24712 continue
24713 }
24714
24715 // valid surrogate pair
24716 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
24717 } else if (leadSurrogate) {
24718 // valid bmp char, but last char was a lead
24719 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
24720 }
24721
24722 leadSurrogate = null
24723
24724 // encode utf8
24725 if (codePoint < 0x80) {
24726 if ((units -= 1) < 0) break
24727 bytes.push(codePoint)
24728 } else if (codePoint < 0x800) {
24729 if ((units -= 2) < 0) break
24730 bytes.push(
24731 codePoint >> 0x6 | 0xC0,
24732 codePoint & 0x3F | 0x80
24733 )
24734 } else if (codePoint < 0x10000) {
24735 if ((units -= 3) < 0) break
24736 bytes.push(
24737 codePoint >> 0xC | 0xE0,
24738 codePoint >> 0x6 & 0x3F | 0x80,
24739 codePoint & 0x3F | 0x80
24740 )
24741 } else if (codePoint < 0x110000) {
24742 if ((units -= 4) < 0) break
24743 bytes.push(
24744 codePoint >> 0x12 | 0xF0,
24745 codePoint >> 0xC & 0x3F | 0x80,
24746 codePoint >> 0x6 & 0x3F | 0x80,
24747 codePoint & 0x3F | 0x80
24748 )
ab78acc6 24749 } else {
8b095871 24750 throw new Error('Invalid code point')
ab78acc6 24751 }
3af2954a
IC
24752 }
24753
8b095871
IC
24754 return bytes
24755}
3af2954a 24756
8b095871
IC
24757function asciiToBytes (str) {
24758 var byteArray = []
24759 for (var i = 0; i < str.length; ++i) {
24760 // Node's code seems to be doing this and not & 0x7F..
24761 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 24762 }
8b095871
IC
24763 return byteArray
24764}
3af2954a 24765
8b095871
IC
24766function utf16leToBytes (str, units) {
24767 var c, hi, lo
24768 var byteArray = []
24769 for (var i = 0; i < str.length; ++i) {
24770 if ((units -= 2) < 0) break
3af2954a 24771
8b095871
IC
24772 c = str.charCodeAt(i)
24773 hi = c >> 8
24774 lo = c % 256
24775 byteArray.push(lo)
24776 byteArray.push(hi)
24777 }
ebd8d4e8 24778
8b095871
IC
24779 return byteArray
24780}
24781
24782function base64ToBytes (str) {
24783 return base64.toByteArray(base64clean(str))
24784}
24785
24786function blitBuffer (src, dst, offset, length) {
24787 for (var i = 0; i < length; ++i) {
24788 if ((i + offset >= dst.length) || (i >= src.length)) break
24789 dst[i + offset] = src[i]
24790 }
24791 return i
24792}
24793
24794function isnan (val) {
24795 return val !== val // eslint-disable-line no-self-compare
24796}
24797
24798},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
24799(function (Buffer){
24800// Copyright Joyent, Inc. and other Node contributors.
24801//
24802// Permission is hereby granted, free of charge, to any person obtaining a
24803// copy of this software and associated documentation files (the
24804// "Software"), to deal in the Software without restriction, including
24805// without limitation the rights to use, copy, modify, merge, publish,
24806// distribute, sublicense, and/or sell copies of the Software, and to permit
24807// persons to whom the Software is furnished to do so, subject to the
24808// following conditions:
24809//
24810// The above copyright notice and this permission notice shall be included
24811// in all copies or substantial portions of the Software.
24812//
24813// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24814// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24815// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
24816// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24817// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24818// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24819// USE OR OTHER DEALINGS IN THE SOFTWARE.
24820
24821// NOTE: These type checking functions intentionally don't use `instanceof`
24822// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 24823
8b095871
IC
24824function isArray(arg) {
24825 if (Array.isArray) {
24826 return Array.isArray(arg);
24827 }
24828 return objectToString(arg) === '[object Array]';
24829}
24830exports.isArray = isArray;
ebd8d4e8 24831
8b095871
IC
24832function isBoolean(arg) {
24833 return typeof arg === 'boolean';
24834}
24835exports.isBoolean = isBoolean;
ebd8d4e8 24836
8b095871
IC
24837function isNull(arg) {
24838 return arg === null;
24839}
24840exports.isNull = isNull;
ebd8d4e8 24841
8b095871
IC
24842function isNullOrUndefined(arg) {
24843 return arg == null;
24844}
24845exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 24846
8b095871
IC
24847function isNumber(arg) {
24848 return typeof arg === 'number';
ab78acc6 24849}
8b095871 24850exports.isNumber = isNumber;
212b1b46 24851
8b095871
IC
24852function isString(arg) {
24853 return typeof arg === 'string';
ab78acc6 24854}
8b095871 24855exports.isString = isString;
212b1b46 24856
8b095871
IC
24857function isSymbol(arg) {
24858 return typeof arg === 'symbol';
ab78acc6 24859}
8b095871 24860exports.isSymbol = isSymbol;
ab78acc6 24861
8b095871
IC
24862function isUndefined(arg) {
24863 return arg === void 0;
24864}
24865exports.isUndefined = isUndefined;
ab78acc6 24866
8b095871
IC
24867function isRegExp(re) {
24868 return objectToString(re) === '[object RegExp]';
24869}
24870exports.isRegExp = isRegExp;
ab78acc6 24871
8b095871
IC
24872function isObject(arg) {
24873 return typeof arg === 'object' && arg !== null;
24874}
24875exports.isObject = isObject;
212b1b46 24876
8b095871
IC
24877function isDate(d) {
24878 return objectToString(d) === '[object Date]';
24879}
24880exports.isDate = isDate;
212b1b46 24881
8b095871
IC
24882function isError(e) {
24883 return (objectToString(e) === '[object Error]' || e instanceof Error);
24884}
24885exports.isError = isError;
212b1b46 24886
8b095871
IC
24887function isFunction(arg) {
24888 return typeof arg === 'function';
24889}
24890exports.isFunction = isFunction;
212b1b46 24891
8b095871
IC
24892function isPrimitive(arg) {
24893 return arg === null ||
24894 typeof arg === 'boolean' ||
24895 typeof arg === 'number' ||
24896 typeof arg === 'string' ||
24897 typeof arg === 'symbol' || // ES6 symbol
24898 typeof arg === 'undefined';
ab78acc6 24899}
8b095871 24900exports.isPrimitive = isPrimitive;
212b1b46 24901
8b095871 24902exports.isBuffer = Buffer.isBuffer;
ab78acc6 24903
8b095871
IC
24904function objectToString(o) {
24905 return Object.prototype.toString.call(o);
ab78acc6 24906}
212b1b46 24907
8b095871
IC
24908}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
24909},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
24910// Copyright Joyent, Inc. and other Node contributors.
24911//
24912// Permission is hereby granted, free of charge, to any person obtaining a
24913// copy of this software and associated documentation files (the
24914// "Software"), to deal in the Software without restriction, including
24915// without limitation the rights to use, copy, modify, merge, publish,
24916// distribute, sublicense, and/or sell copies of the Software, and to permit
24917// persons to whom the Software is furnished to do so, subject to the
24918// following conditions:
24919//
24920// The above copyright notice and this permission notice shall be included
24921// in all copies or substantial portions of the Software.
24922//
24923// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
24924// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24925// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
24926// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
24927// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
24928// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
24929// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 24930
8b095871
IC
24931function EventEmitter() {
24932 this._events = this._events || {};
24933 this._maxListeners = this._maxListeners || undefined;
ab78acc6 24934}
8b095871 24935module.exports = EventEmitter;
212b1b46 24936
8b095871
IC
24937// Backwards-compat with node 0.10.x
24938EventEmitter.EventEmitter = EventEmitter;
212b1b46 24939
8b095871
IC
24940EventEmitter.prototype._events = undefined;
24941EventEmitter.prototype._maxListeners = undefined;
212b1b46 24942
8b095871
IC
24943// By default EventEmitters will print a warning if more than 10 listeners are
24944// added to it. This is a useful default which helps finding memory leaks.
24945EventEmitter.defaultMaxListeners = 10;
212b1b46 24946
8b095871
IC
24947// Obviously not all Emitters should be limited to 10. This function allows
24948// that to be increased. Set to zero for unlimited.
24949EventEmitter.prototype.setMaxListeners = function(n) {
24950 if (!isNumber(n) || n < 0 || isNaN(n))
24951 throw TypeError('n must be a positive number');
24952 this._maxListeners = n;
24953 return this;
24954};
212b1b46 24955
8b095871
IC
24956EventEmitter.prototype.emit = function(type) {
24957 var er, handler, len, args, i, listeners;
212b1b46 24958
8b095871
IC
24959 if (!this._events)
24960 this._events = {};
212b1b46 24961
8b095871
IC
24962 // If there is no 'error' event listener then throw.
24963 if (type === 'error') {
24964 if (!this._events.error ||
24965 (isObject(this._events.error) && !this._events.error.length)) {
24966 er = arguments[1];
24967 if (er instanceof Error) {
24968 throw er; // Unhandled 'error' event
24969 } else {
24970 // At least give some kind of context to the user
24971 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
24972 err.context = er;
24973 throw err;
24974 }
24975 }
ab78acc6 24976 }
212b1b46 24977
8b095871 24978 handler = this._events[type];
212b1b46 24979
8b095871
IC
24980 if (isUndefined(handler))
24981 return false;
24982
24983 if (isFunction(handler)) {
24984 switch (arguments.length) {
24985 // fast cases
24986 case 1:
24987 handler.call(this);
24988 break;
24989 case 2:
24990 handler.call(this, arguments[1]);
24991 break;
24992 case 3:
24993 handler.call(this, arguments[1], arguments[2]);
24994 break;
24995 // slower
24996 default:
24997 args = Array.prototype.slice.call(arguments, 1);
24998 handler.apply(this, args);
3af2954a 24999 }
8b095871
IC
25000 } else if (isObject(handler)) {
25001 args = Array.prototype.slice.call(arguments, 1);
25002 listeners = handler.slice();
25003 len = listeners.length;
25004 for (i = 0; i < len; i++)
25005 listeners[i].apply(this, args);
3af2954a 25006 }
212b1b46 25007
8b095871
IC
25008 return true;
25009};
ebd8d4e8 25010
8b095871
IC
25011EventEmitter.prototype.addListener = function(type, listener) {
25012 var m;
ebd8d4e8 25013
8b095871
IC
25014 if (!isFunction(listener))
25015 throw TypeError('listener must be a function');
ebd8d4e8 25016
8b095871
IC
25017 if (!this._events)
25018 this._events = {};
3af2954a 25019
8b095871
IC
25020 // To avoid recursion in the case that type === "newListener"! Before
25021 // adding it to the listeners, first emit "newListener".
25022 if (this._events.newListener)
25023 this.emit('newListener', type,
25024 isFunction(listener.listener) ?
25025 listener.listener : listener);
3af2954a 25026
8b095871
IC
25027 if (!this._events[type])
25028 // Optimize the case of one listener. Don't need the extra array object.
25029 this._events[type] = listener;
25030 else if (isObject(this._events[type]))
25031 // If we've already got an array, just append.
25032 this._events[type].push(listener);
25033 else
25034 // Adding the second element, need to change to array.
25035 this._events[type] = [this._events[type], listener];
3af2954a 25036
8b095871
IC
25037 // Check for listener leak
25038 if (isObject(this._events[type]) && !this._events[type].warned) {
25039 if (!isUndefined(this._maxListeners)) {
25040 m = this._maxListeners;
25041 } else {
25042 m = EventEmitter.defaultMaxListeners;
25043 }
3af2954a 25044
8b095871
IC
25045 if (m && m > 0 && this._events[type].length > m) {
25046 this._events[type].warned = true;
25047 console.error('(node) warning: possible EventEmitter memory ' +
25048 'leak detected. %d listeners added. ' +
25049 'Use emitter.setMaxListeners() to increase limit.',
25050 this._events[type].length);
25051 if (typeof console.trace === 'function') {
25052 // not supported in IE 10
25053 console.trace();
25054 }
25055 }
3af2954a
IC
25056 }
25057
8b095871
IC
25058 return this;
25059};
3af2954a 25060
8b095871 25061EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 25062
8b095871
IC
25063EventEmitter.prototype.once = function(type, listener) {
25064 if (!isFunction(listener))
25065 throw TypeError('listener must be a function');
3af2954a 25066
8b095871 25067 var fired = false;
ebd8d4e8 25068
8b095871
IC
25069 function g() {
25070 this.removeListener(type, g);
3af2954a 25071
8b095871
IC
25072 if (!fired) {
25073 fired = true;
25074 listener.apply(this, arguments);
25075 }
25076 }
3af2954a 25077
8b095871
IC
25078 g.listener = listener;
25079 this.on(type, g);
ebd8d4e8 25080
8b095871
IC
25081 return this;
25082};
ebd8d4e8 25083
8b095871
IC
25084// emits a 'removeListener' event iff the listener was removed
25085EventEmitter.prototype.removeListener = function(type, listener) {
25086 var list, position, length, i;
ebd8d4e8 25087
8b095871
IC
25088 if (!isFunction(listener))
25089 throw TypeError('listener must be a function');
ebd8d4e8 25090
8b095871
IC
25091 if (!this._events || !this._events[type])
25092 return this;
ab78acc6 25093
8b095871
IC
25094 list = this._events[type];
25095 length = list.length;
25096 position = -1;
ebd8d4e8 25097
8b095871
IC
25098 if (list === listener ||
25099 (isFunction(list.listener) && list.listener === listener)) {
25100 delete this._events[type];
25101 if (this._events.removeListener)
25102 this.emit('removeListener', type, listener);
ebd8d4e8 25103
8b095871
IC
25104 } else if (isObject(list)) {
25105 for (i = length; i-- > 0;) {
25106 if (list[i] === listener ||
25107 (list[i].listener && list[i].listener === listener)) {
25108 position = i;
25109 break;
25110 }
25111 }
25112
25113 if (position < 0)
25114 return this;
25115
25116 if (list.length === 1) {
25117 list.length = 0;
25118 delete this._events[type];
25119 } else {
25120 list.splice(position, 1);
25121 }
25122
25123 if (this._events.removeListener)
25124 this.emit('removeListener', type, listener);
ab78acc6 25125 }
ebd8d4e8 25126
8b095871
IC
25127 return this;
25128};
ebd8d4e8 25129
8b095871
IC
25130EventEmitter.prototype.removeAllListeners = function(type) {
25131 var key, listeners;
ebd8d4e8 25132
8b095871
IC
25133 if (!this._events)
25134 return this;
ab78acc6 25135
8b095871
IC
25136 // not listening for removeListener, no need to emit
25137 if (!this._events.removeListener) {
25138 if (arguments.length === 0)
25139 this._events = {};
25140 else if (this._events[type])
25141 delete this._events[type];
25142 return this;
25143 }
ab78acc6 25144
8b095871
IC
25145 // emit removeListener for all listeners on all events
25146 if (arguments.length === 0) {
25147 for (key in this._events) {
25148 if (key === 'removeListener') continue;
25149 this.removeAllListeners(key);
25150 }
25151 this.removeAllListeners('removeListener');
25152 this._events = {};
25153 return this;
25154 }
ebd8d4e8 25155
8b095871 25156 listeners = this._events[type];
ebd8d4e8 25157
8b095871
IC
25158 if (isFunction(listeners)) {
25159 this.removeListener(type, listeners);
25160 } else if (listeners) {
25161 // LIFO order
25162 while (listeners.length)
25163 this.removeListener(type, listeners[listeners.length - 1]);
25164 }
25165 delete this._events[type];
ebd8d4e8 25166
8b095871
IC
25167 return this;
25168};
ebd8d4e8 25169
8b095871
IC
25170EventEmitter.prototype.listeners = function(type) {
25171 var ret;
25172 if (!this._events || !this._events[type])
25173 ret = [];
25174 else if (isFunction(this._events[type]))
25175 ret = [this._events[type]];
25176 else
25177 ret = this._events[type].slice();
25178 return ret;
25179};
ebd8d4e8 25180
8b095871
IC
25181EventEmitter.prototype.listenerCount = function(type) {
25182 if (this._events) {
25183 var evlistener = this._events[type];
ebd8d4e8 25184
8b095871
IC
25185 if (isFunction(evlistener))
25186 return 1;
25187 else if (evlistener)
25188 return evlistener.length;
25189 }
25190 return 0;
25191};
25192
25193EventEmitter.listenerCount = function(emitter, type) {
25194 return emitter.listenerCount(type);
25195};
25196
25197function isFunction(arg) {
25198 return typeof arg === 'function';
ebd8d4e8
IC
25199}
25200
8b095871
IC
25201function isNumber(arg) {
25202 return typeof arg === 'number';
ebd8d4e8
IC
25203}
25204
8b095871
IC
25205function isObject(arg) {
25206 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
25207}
25208
8b095871
IC
25209function isUndefined(arg) {
25210 return arg === void 0;
ebd8d4e8
IC
25211}
25212
8b095871
IC
25213},{}],8:[function(require,module,exports){
25214exports.read = function (buffer, offset, isLE, mLen, nBytes) {
25215 var e, m
25216 var eLen = nBytes * 8 - mLen - 1
25217 var eMax = (1 << eLen) - 1
25218 var eBias = eMax >> 1
25219 var nBits = -7
25220 var i = isLE ? (nBytes - 1) : 0
25221 var d = isLE ? -1 : 1
25222 var s = buffer[offset + i]
ebd8d4e8 25223
8b095871 25224 i += d
ebd8d4e8 25225
8b095871
IC
25226 e = s & ((1 << (-nBits)) - 1)
25227 s >>= (-nBits)
25228 nBits += eLen
25229 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25230
8b095871
IC
25231 m = e & ((1 << (-nBits)) - 1)
25232 e >>= (-nBits)
25233 nBits += mLen
25234 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 25235
8b095871
IC
25236 if (e === 0) {
25237 e = 1 - eBias
25238 } else if (e === eMax) {
25239 return m ? NaN : ((s ? -1 : 1) * Infinity)
25240 } else {
25241 m = m + Math.pow(2, mLen)
25242 e = e - eBias
ab78acc6 25243 }
8b095871 25244 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
25245}
25246
8b095871
IC
25247exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
25248 var e, m, c
25249 var eLen = nBytes * 8 - mLen - 1
25250 var eMax = (1 << eLen) - 1
25251 var eBias = eMax >> 1
25252 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
25253 var i = isLE ? 0 : (nBytes - 1)
25254 var d = isLE ? 1 : -1
25255 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 25256
8b095871 25257 value = Math.abs(value)
ebd8d4e8 25258
8b095871
IC
25259 if (isNaN(value) || value === Infinity) {
25260 m = isNaN(value) ? 1 : 0
25261 e = eMax
ab78acc6 25262 } else {
8b095871
IC
25263 e = Math.floor(Math.log(value) / Math.LN2)
25264 if (value * (c = Math.pow(2, -e)) < 1) {
25265 e--
25266 c *= 2
25267 }
25268 if (e + eBias >= 1) {
25269 value += rt / c
25270 } else {
25271 value += rt * Math.pow(2, 1 - eBias)
25272 }
25273 if (value * c >= 2) {
25274 e++
25275 c /= 2
25276 }
ebd8d4e8 25277
8b095871
IC
25278 if (e + eBias >= eMax) {
25279 m = 0
25280 e = eMax
25281 } else if (e + eBias >= 1) {
25282 m = (value * c - 1) * Math.pow(2, mLen)
25283 e = e + eBias
25284 } else {
25285 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
25286 e = 0
25287 }
ebd8d4e8 25288 }
ebd8d4e8 25289
8b095871 25290 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 25291
8b095871
IC
25292 e = (e << mLen) | m
25293 eLen += mLen
25294 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 25295
8b095871 25296 buffer[offset + i - d] |= s * 128
ab78acc6
IC
25297}
25298
8b095871
IC
25299},{}],9:[function(require,module,exports){
25300if (typeof Object.create === 'function') {
25301 // implementation from standard node.js 'util' module
25302 module.exports = function inherits(ctor, superCtor) {
25303 ctor.super_ = superCtor
25304 ctor.prototype = Object.create(superCtor.prototype, {
25305 constructor: {
25306 value: ctor,
25307 enumerable: false,
25308 writable: true,
25309 configurable: true
25310 }
25311 });
25312 };
25313} else {
25314 // old school shim for old browsers
25315 module.exports = function inherits(ctor, superCtor) {
25316 ctor.super_ = superCtor
25317 var TempCtor = function () {}
25318 TempCtor.prototype = superCtor.prototype
25319 ctor.prototype = new TempCtor()
25320 ctor.prototype.constructor = ctor
ebd8d4e8 25321 }
8b095871 25322}
ab78acc6 25323
8b095871
IC
25324},{}],10:[function(require,module,exports){
25325/*!
25326 * Determine if an object is a Buffer
25327 *
25328 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
25329 * @license MIT
25330 */
ebd8d4e8 25331
8b095871
IC
25332// The _isBuffer check is for Safari 5-7 support, because it's missing
25333// Object.prototype.constructor. Remove this eventually
25334module.exports = function (obj) {
25335 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
25336}
25337
8b095871
IC
25338function isBuffer (obj) {
25339 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
25340}
ebd8d4e8 25341
8b095871
IC
25342// For Node v0.10 support. Remove this eventually.
25343function isSlowBuffer (obj) {
25344 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
25345}
ebd8d4e8 25346
8b095871
IC
25347},{}],11:[function(require,module,exports){
25348var toString = {}.toString;
ab78acc6 25349
8b095871
IC
25350module.exports = Array.isArray || function (arr) {
25351 return toString.call(arr) == '[object Array]';
25352};
ebd8d4e8 25353
8b095871
IC
25354},{}],12:[function(require,module,exports){
25355(function (process){
25356'use strict';
ebd8d4e8 25357
8b095871
IC
25358if (!process.version ||
25359 process.version.indexOf('v0.') === 0 ||
25360 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
25361 module.exports = nextTick;
25362} else {
25363 module.exports = process.nextTick;
25364}
25365
25366function nextTick(fn, arg1, arg2, arg3) {
25367 if (typeof fn !== 'function') {
25368 throw new TypeError('"callback" argument must be a function');
25369 }
25370 var len = arguments.length;
25371 var args, i;
25372 switch (len) {
25373 case 0:
25374 case 1:
25375 return process.nextTick(fn);
25376 case 2:
25377 return process.nextTick(function afterTickOne() {
25378 fn.call(null, arg1);
25379 });
25380 case 3:
25381 return process.nextTick(function afterTickTwo() {
25382 fn.call(null, arg1, arg2);
25383 });
25384 case 4:
25385 return process.nextTick(function afterTickThree() {
25386 fn.call(null, arg1, arg2, arg3);
25387 });
25388 default:
25389 args = new Array(len - 1);
25390 i = 0;
25391 while (i < args.length) {
25392 args[i++] = arguments[i];
25393 }
25394 return process.nextTick(function afterTick() {
25395 fn.apply(null, args);
25396 });
ab78acc6 25397 }
ebd8d4e8
IC
25398}
25399
8b095871
IC
25400}).call(this,require('_process'))
25401},{"_process":13}],13:[function(require,module,exports){
25402// shim for using process in browser
25403var process = module.exports = {};
ebd8d4e8 25404
8b095871
IC
25405// cached from whatever global is present so that test runners that stub it
25406// don't break things. But we need to wrap it in a try catch in case it is
25407// wrapped in strict mode code which doesn't define any globals. It's inside a
25408// function because try/catches deoptimize in certain engines.
ab78acc6 25409
8b095871
IC
25410var cachedSetTimeout;
25411var cachedClearTimeout;
ebd8d4e8 25412
8b095871
IC
25413function defaultSetTimout() {
25414 throw new Error('setTimeout has not been defined');
ab78acc6 25415}
8b095871
IC
25416function defaultClearTimeout () {
25417 throw new Error('clearTimeout has not been defined');
ab78acc6 25418}
8b095871
IC
25419(function () {
25420 try {
25421 if (typeof setTimeout === 'function') {
25422 cachedSetTimeout = setTimeout;
25423 } else {
25424 cachedSetTimeout = defaultSetTimout;
25425 }
25426 } catch (e) {
25427 cachedSetTimeout = defaultSetTimout;
25428 }
25429 try {
25430 if (typeof clearTimeout === 'function') {
25431 cachedClearTimeout = clearTimeout;
25432 } else {
25433 cachedClearTimeout = defaultClearTimeout;
25434 }
25435 } catch (e) {
25436 cachedClearTimeout = defaultClearTimeout;
25437 }
25438} ())
25439function runTimeout(fun) {
25440 if (cachedSetTimeout === setTimeout) {
25441 //normal enviroments in sane situations
25442 return setTimeout(fun, 0);
25443 }
25444 // if setTimeout wasn't available but was latter defined
25445 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
25446 cachedSetTimeout = setTimeout;
25447 return setTimeout(fun, 0);
25448 }
25449 try {
25450 // when when somebody has screwed with setTimeout but no I.E. maddness
25451 return cachedSetTimeout(fun, 0);
25452 } catch(e){
25453 try {
25454 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25455 return cachedSetTimeout.call(null, fun, 0);
25456 } catch(e){
25457 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error
25458 return cachedSetTimeout.call(this, fun, 0);
25459 }
25460 }
25461
ebd8d4e8 25462
ab78acc6 25463}
8b095871
IC
25464function runClearTimeout(marker) {
25465 if (cachedClearTimeout === clearTimeout) {
25466 //normal enviroments in sane situations
25467 return clearTimeout(marker);
25468 }
25469 // if clearTimeout wasn't available but was latter defined
25470 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
25471 cachedClearTimeout = clearTimeout;
25472 return clearTimeout(marker);
25473 }
25474 try {
25475 // when when somebody has screwed with setTimeout but no I.E. maddness
25476 return cachedClearTimeout(marker);
25477 } catch (e){
25478 try {
25479 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
25480 return cachedClearTimeout.call(null, marker);
25481 } catch (e){
25482 // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.
25483 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
25484 return cachedClearTimeout.call(this, marker);
25485 }
25486 }
25487
25488
ebd8d4e8 25489
ab78acc6 25490}
8b095871
IC
25491var queue = [];
25492var draining = false;
25493var currentQueue;
25494var queueIndex = -1;
ebd8d4e8 25495
8b095871
IC
25496function cleanUpNextTick() {
25497 if (!draining || !currentQueue) {
25498 return;
25499 }
25500 draining = false;
25501 if (currentQueue.length) {
25502 queue = currentQueue.concat(queue);
25503 } else {
25504 queueIndex = -1;
25505 }
25506 if (queue.length) {
25507 drainQueue();
25508 }
ebd8d4e8
IC
25509}
25510
8b095871
IC
25511function drainQueue() {
25512 if (draining) {
25513 return;
25514 }
25515 var timeout = runTimeout(cleanUpNextTick);
25516 draining = true;
25517
25518 var len = queue.length;
25519 while(len) {
25520 currentQueue = queue;
25521 queue = [];
25522 while (++queueIndex < len) {
25523 if (currentQueue) {
25524 currentQueue[queueIndex].run();
25525 }
25526 }
25527 queueIndex = -1;
25528 len = queue.length;
25529 }
25530 currentQueue = null;
25531 draining = false;
25532 runClearTimeout(timeout);
ebd8d4e8
IC
25533}
25534
8b095871
IC
25535process.nextTick = function (fun) {
25536 var args = new Array(arguments.length - 1);
25537 if (arguments.length > 1) {
25538 for (var i = 1; i < arguments.length; i++) {
25539 args[i - 1] = arguments[i];
25540 }
25541 }
25542 queue.push(new Item(fun, args));
25543 if (queue.length === 1 && !draining) {
25544 runTimeout(drainQueue);
25545 }
25546};
25547
25548// v8 likes predictible objects
25549function Item(fun, array) {
25550 this.fun = fun;
25551 this.array = array;
ab78acc6 25552}
8b095871
IC
25553Item.prototype.run = function () {
25554 this.fun.apply(null, this.array);
25555};
25556process.title = 'browser';
25557process.browser = true;
25558process.env = {};
25559process.argv = [];
25560process.version = ''; // empty string to avoid regexp issues
25561process.versions = {};
ebd8d4e8 25562
8b095871
IC
25563function noop() {}
25564
25565process.on = noop;
25566process.addListener = noop;
25567process.once = noop;
25568process.off = noop;
25569process.removeListener = noop;
25570process.removeAllListeners = noop;
25571process.emit = noop;
25572
25573process.binding = function (name) {
25574 throw new Error('process.binding is not supported');
25575};
25576
25577process.cwd = function () { return '/' };
25578process.chdir = function (dir) {
25579 throw new Error('process.chdir is not supported');
25580};
25581process.umask = function() { return 0; };
25582
25583},{}],14:[function(require,module,exports){
25584module.exports = require("./lib/_stream_duplex.js")
25585
25586},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
25587// a duplex stream is just a stream that is both readable and writable.
25588// Since JS doesn't have multiple prototypal inheritance, this class
25589// prototypally inherits from Readable, and then parasitically from
25590// Writable.
25591
25592'use strict';
25593
25594/*<replacement>*/
ab78acc6 25595
8b095871
IC
25596var objectKeys = Object.keys || function (obj) {
25597 var keys = [];
25598 for (var key in obj) {
25599 keys.push(key);
25600 }return keys;
25601};
25602/*</replacement>*/
ebd8d4e8 25603
8b095871 25604module.exports = Duplex;
ebd8d4e8 25605
8b095871
IC
25606/*<replacement>*/
25607var processNextTick = require('process-nextick-args');
25608/*</replacement>*/
ebd8d4e8 25609
8b095871
IC
25610/*<replacement>*/
25611var util = require('core-util-is');
25612util.inherits = require('inherits');
25613/*</replacement>*/
ebd8d4e8 25614
8b095871
IC
25615var Readable = require('./_stream_readable');
25616var Writable = require('./_stream_writable');
ebd8d4e8 25617
8b095871
IC
25618util.inherits(Duplex, Readable);
25619
25620var keys = objectKeys(Writable.prototype);
25621for (var v = 0; v < keys.length; v++) {
25622 var method = keys[v];
25623 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 25624}
ebd8d4e8 25625
8b095871
IC
25626function Duplex(options) {
25627 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 25628
8b095871
IC
25629 Readable.call(this, options);
25630 Writable.call(this, options);
ebd8d4e8 25631
8b095871 25632 if (options && options.readable === false) this.readable = false;
ebd8d4e8 25633
8b095871 25634 if (options && options.writable === false) this.writable = false;
ebd8d4e8 25635
8b095871
IC
25636 this.allowHalfOpen = true;
25637 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 25638
8b095871 25639 this.once('end', onend);
ebd8d4e8
IC
25640}
25641
8b095871
IC
25642// the no-half-open enforcer
25643function onend() {
25644 // if we allow half-open state, or if the writable side ended,
25645 // then we're ok.
25646 if (this.allowHalfOpen || this._writableState.ended) return;
25647
25648 // no more data can be written.
25649 // But allow more writes to happen in this tick.
25650 processNextTick(onEndNT, this);
ebd8d4e8
IC
25651}
25652
8b095871
IC
25653function onEndNT(self) {
25654 self.end();
25655}
ebd8d4e8 25656
8b095871
IC
25657function forEach(xs, f) {
25658 for (var i = 0, l = xs.length; i < l; i++) {
25659 f(xs[i], i);
25660 }
25661}
25662},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
25663// a passthrough stream.
25664// basically just the most minimal sort of Transform stream.
25665// Every written chunk gets output as-is.
ebd8d4e8 25666
8b095871 25667'use strict';
ebd8d4e8 25668
8b095871 25669module.exports = PassThrough;
ebd8d4e8 25670
8b095871 25671var Transform = require('./_stream_transform');
ebd8d4e8 25672
8b095871
IC
25673/*<replacement>*/
25674var util = require('core-util-is');
25675util.inherits = require('inherits');
25676/*</replacement>*/
ebd8d4e8 25677
8b095871 25678util.inherits(PassThrough, Transform);
ebd8d4e8 25679
8b095871
IC
25680function PassThrough(options) {
25681 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 25682
8b095871 25683 Transform.call(this, options);
ebd8d4e8
IC
25684}
25685
8b095871
IC
25686PassThrough.prototype._transform = function (chunk, encoding, cb) {
25687 cb(null, chunk);
25688};
25689},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
25690(function (process){
25691'use strict';
ebd8d4e8 25692
8b095871 25693module.exports = Readable;
ebd8d4e8 25694
8b095871
IC
25695/*<replacement>*/
25696var processNextTick = require('process-nextick-args');
25697/*</replacement>*/
ebd8d4e8 25698
8b095871
IC
25699/*<replacement>*/
25700var isArray = require('isarray');
25701/*</replacement>*/
ebd8d4e8 25702
8b095871
IC
25703/*<replacement>*/
25704var Duplex;
25705/*</replacement>*/
ebd8d4e8 25706
8b095871 25707Readable.ReadableState = ReadableState;
ebd8d4e8 25708
8b095871
IC
25709/*<replacement>*/
25710var EE = require('events').EventEmitter;
ebd8d4e8 25711
8b095871
IC
25712var EElistenerCount = function (emitter, type) {
25713 return emitter.listeners(type).length;
25714};
25715/*</replacement>*/
ebd8d4e8 25716
8b095871
IC
25717/*<replacement>*/
25718var Stream;
25719(function () {
25720 try {
25721 Stream = require('st' + 'ream');
25722 } catch (_) {} finally {
25723 if (!Stream) Stream = require('events').EventEmitter;
25724 }
25725})();
25726/*</replacement>*/
ebd8d4e8 25727
8b095871
IC
25728var Buffer = require('buffer').Buffer;
25729/*<replacement>*/
25730var bufferShim = require('buffer-shims');
25731/*</replacement>*/
ab78acc6 25732
8b095871
IC
25733/*<replacement>*/
25734var util = require('core-util-is');
25735util.inherits = require('inherits');
25736/*</replacement>*/
ab78acc6 25737
8b095871
IC
25738/*<replacement>*/
25739var debugUtil = require('util');
25740var debug = void 0;
25741if (debugUtil && debugUtil.debuglog) {
25742 debug = debugUtil.debuglog('stream');
25743} else {
25744 debug = function () {};
25745}
25746/*</replacement>*/
ab78acc6 25747
8b095871
IC
25748var BufferList = require('./internal/streams/BufferList');
25749var StringDecoder;
ab78acc6 25750
8b095871 25751util.inherits(Readable, Stream);
ab78acc6 25752
8b095871
IC
25753function prependListener(emitter, event, fn) {
25754 // Sadly this is not cacheable as some libraries bundle their own
25755 // event emitter implementation with them.
25756 if (typeof emitter.prependListener === 'function') {
25757 return emitter.prependListener(event, fn);
25758 } else {
25759 // This is a hack to make sure that our error handler is attached before any
25760 // userland ones. NEVER DO THIS. This is here only because this code needs
25761 // to continue to work with older versions of Node.js that do not include
25762 // the prependListener() method. The goal is to eventually remove this hack.
25763 if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];
ebd8d4e8 25764 }
ebd8d4e8
IC
25765}
25766
8b095871
IC
25767function ReadableState(options, stream) {
25768 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25769
8b095871 25770 options = options || {};
ebd8d4e8 25771
8b095871
IC
25772 // object stream flag. Used to make read(n) ignore n and to
25773 // make all the buffer merging and length checks go away
25774 this.objectMode = !!options.objectMode;
ebd8d4e8 25775
8b095871 25776 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 25777
8b095871
IC
25778 // the point at which it stops calling _read() to fill the buffer
25779 // Note: 0 is a valid value, means "don't call _read preemptively ever"
25780 var hwm = options.highWaterMark;
25781 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
25782 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 25783
8b095871
IC
25784 // cast to ints.
25785 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 25786
8b095871
IC
25787 // A linked list is used to store data chunks instead of an array because the
25788 // linked list can remove elements from the beginning faster than
25789 // array.shift()
25790 this.buffer = new BufferList();
25791 this.length = 0;
25792 this.pipes = null;
25793 this.pipesCount = 0;
25794 this.flowing = null;
25795 this.ended = false;
25796 this.endEmitted = false;
25797 this.reading = false;
ab78acc6 25798
8b095871
IC
25799 // a flag to be able to tell if the onwrite cb is called immediately,
25800 // or on a later tick. We set this to true at first, because any
25801 // actions that shouldn't happen until "later" should generally also
25802 // not happen before the first write call.
25803 this.sync = true;
ebd8d4e8 25804
8b095871
IC
25805 // whenever we return null, then we set a flag to say
25806 // that we're awaiting a 'readable' event emission.
25807 this.needReadable = false;
25808 this.emittedReadable = false;
25809 this.readableListening = false;
25810 this.resumeScheduled = false;
ebd8d4e8 25811
8b095871
IC
25812 // Crypto is kind of old and crusty. Historically, its default string
25813 // encoding is 'binary' so we have to make this configurable.
25814 // Everything else in the universe uses 'utf8', though.
25815 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 25816
8b095871
IC
25817 // when piping, we only care about 'readable' events that happen
25818 // after read()ing all the bytes and not getting any pushback.
25819 this.ranOut = false;
ebd8d4e8 25820
8b095871
IC
25821 // the number of writers that are awaiting a drain event in .pipe()s
25822 this.awaitDrain = 0;
ebd8d4e8 25823
8b095871
IC
25824 // if true, a maybeReadMore has been scheduled
25825 this.readingMore = false;
ebd8d4e8 25826
8b095871
IC
25827 this.decoder = null;
25828 this.encoding = null;
25829 if (options.encoding) {
25830 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
25831 this.decoder = new StringDecoder(options.encoding);
25832 this.encoding = options.encoding;
25833 }
25834}
ebd8d4e8 25835
8b095871
IC
25836function Readable(options) {
25837 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 25838
8b095871 25839 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 25840
8b095871 25841 this._readableState = new ReadableState(options, this);
ebd8d4e8 25842
8b095871
IC
25843 // legacy
25844 this.readable = true;
ebd8d4e8 25845
8b095871 25846 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 25847
8b095871
IC
25848 Stream.call(this);
25849}
ebd8d4e8 25850
8b095871
IC
25851// Manually shove something into the read() buffer.
25852// This returns true if the highWaterMark has not been hit yet,
25853// similar to how Writable.write() returns true if you should
25854// write() some more.
25855Readable.prototype.push = function (chunk, encoding) {
25856 var state = this._readableState;
ebd8d4e8 25857
8b095871
IC
25858 if (!state.objectMode && typeof chunk === 'string') {
25859 encoding = encoding || state.defaultEncoding;
25860 if (encoding !== state.encoding) {
25861 chunk = bufferShim.from(chunk, encoding);
25862 encoding = '';
25863 }
25864 }
ebd8d4e8 25865
8b095871
IC
25866 return readableAddChunk(this, state, chunk, encoding, false);
25867};
ebd8d4e8 25868
8b095871
IC
25869// Unshift should *always* be something directly out of read()
25870Readable.prototype.unshift = function (chunk) {
25871 var state = this._readableState;
25872 return readableAddChunk(this, state, chunk, '', true);
25873};
ebd8d4e8 25874
8b095871
IC
25875Readable.prototype.isPaused = function () {
25876 return this._readableState.flowing === false;
25877};
25878
25879function readableAddChunk(stream, state, chunk, encoding, addToFront) {
25880 var er = chunkInvalid(state, chunk);
25881 if (er) {
25882 stream.emit('error', er);
25883 } else if (chunk === null) {
25884 state.reading = false;
25885 onEofChunk(stream, state);
25886 } else if (state.objectMode || chunk && chunk.length > 0) {
25887 if (state.ended && !addToFront) {
25888 var e = new Error('stream.push() after EOF');
25889 stream.emit('error', e);
25890 } else if (state.endEmitted && addToFront) {
25891 var _e = new Error('stream.unshift() after end event');
25892 stream.emit('error', _e);
25893 } else {
25894 var skipAdd;
25895 if (state.decoder && !addToFront && !encoding) {
25896 chunk = state.decoder.write(chunk);
25897 skipAdd = !state.objectMode && chunk.length === 0;
25898 }
ebd8d4e8 25899
8b095871 25900 if (!addToFront) state.reading = false;
ebd8d4e8 25901
8b095871
IC
25902 // Don't add to the buffer if we've decoded to an empty string chunk and
25903 // we're not in object mode
25904 if (!skipAdd) {
25905 // if we want the data now, just emit it.
25906 if (state.flowing && state.length === 0 && !state.sync) {
25907 stream.emit('data', chunk);
25908 stream.read(0);
25909 } else {
25910 // update the buffer info.
25911 state.length += state.objectMode ? 1 : chunk.length;
25912 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 25913
8b095871
IC
25914 if (state.needReadable) emitReadable(stream);
25915 }
25916 }
ab78acc6 25917
8b095871
IC
25918 maybeReadMore(stream, state);
25919 }
25920 } else if (!addToFront) {
25921 state.reading = false;
25922 }
ab78acc6 25923
8b095871
IC
25924 return needMoreData(state);
25925}
ab78acc6 25926
8b095871
IC
25927// if it's past the high water mark, we can push in some more.
25928// Also, if we have no data yet, we can stand some
25929// more bytes. This is to work around cases where hwm=0,
25930// such as the repl. Also, if the push() triggered a
25931// readable event, and the user called read(largeNumber) such that
25932// needReadable was set, then we ought to push more, so that another
25933// 'readable' event will be triggered.
25934function needMoreData(state) {
25935 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
25936}
ebd8d4e8 25937
8b095871
IC
25938// backwards compatibility.
25939Readable.prototype.setEncoding = function (enc) {
25940 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
25941 this._readableState.decoder = new StringDecoder(enc);
25942 this._readableState.encoding = enc;
25943 return this;
25944};
25945
25946// Don't raise the hwm > 8MB
25947var MAX_HWM = 0x800000;
25948function computeNewHighWaterMark(n) {
25949 if (n >= MAX_HWM) {
25950 n = MAX_HWM;
ab78acc6 25951 } else {
8b095871
IC
25952 // Get the next highest power of 2 to prevent increasing hwm excessively in
25953 // tiny amounts
25954 n--;
25955 n |= n >>> 1;
25956 n |= n >>> 2;
25957 n |= n >>> 4;
25958 n |= n >>> 8;
25959 n |= n >>> 16;
25960 n++;
ebd8d4e8 25961 }
8b095871 25962 return n;
ebd8d4e8
IC
25963}
25964
8b095871
IC
25965// This function is designed to be inlinable, so please take care when making
25966// changes to the function body.
25967function howMuchToRead(n, state) {
25968 if (n <= 0 || state.length === 0 && state.ended) return 0;
25969 if (state.objectMode) return 1;
25970 if (n !== n) {
25971 // Only flow one buffer at a time
25972 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
25973 }
25974 // If we're asking for more than the current hwm, then raise the hwm.
25975 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
25976 if (n <= state.length) return n;
25977 // Don't have enough
25978 if (!state.ended) {
25979 state.needReadable = true;
25980 return 0;
25981 }
25982 return state.length;
25983}
ebd8d4e8 25984
8b095871
IC
25985// you can override either this method, or the async _read(n) below.
25986Readable.prototype.read = function (n) {
25987 debug('read', n);
25988 n = parseInt(n, 10);
25989 var state = this._readableState;
25990 var nOrig = n;
ebd8d4e8 25991
8b095871 25992 if (n !== 0) state.emittedReadable = false;
ab78acc6 25993
8b095871
IC
25994 // if we're doing read(0) to trigger a readable event, but we
25995 // already have a bunch of data in the buffer, then just trigger
25996 // the 'readable' event and move on.
25997 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
25998 debug('read: emitReadable', state.length, state.ended);
25999 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
26000 return null;
ebd8d4e8 26001 }
ebd8d4e8 26002
8b095871 26003 n = howMuchToRead(n, state);
ebd8d4e8 26004
8b095871
IC
26005 // if we've ended, and we're now clear, then finish it up.
26006 if (n === 0 && state.ended) {
26007 if (state.length === 0) endReadable(this);
26008 return null;
26009 }
ebd8d4e8 26010
8b095871
IC
26011 // All the actual chunk generation logic needs to be
26012 // *below* the call to _read. The reason is that in certain
26013 // synthetic stream cases, such as passthrough streams, _read
26014 // may be a completely synchronous operation which may change
26015 // the state of the read buffer, providing enough data when
26016 // before there was *not* enough.
26017 //
26018 // So, the steps are:
26019 // 1. Figure out what the state of things will be after we do
26020 // a read from the buffer.
26021 //
26022 // 2. If that resulting state will trigger a _read, then call _read.
26023 // Note that this may be asynchronous, or synchronous. Yes, it is
26024 // deeply ugly to write APIs this way, but that still doesn't mean
26025 // that the Readable class should behave improperly, as streams are
26026 // designed to be sync/async agnostic.
26027 // Take note if the _read call is sync or async (ie, if the read call
26028 // has returned yet), so that we know whether or not it's safe to emit
26029 // 'readable' etc.
26030 //
26031 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 26032
8b095871
IC
26033 // if we need a readable event, then we need to do some reading.
26034 var doRead = state.needReadable;
26035 debug('need readable', doRead);
ebd8d4e8 26036
8b095871
IC
26037 // if we currently have less than the highWaterMark, then also read some
26038 if (state.length === 0 || state.length - n < state.highWaterMark) {
26039 doRead = true;
26040 debug('length less than watermark', doRead);
26041 }
ebd8d4e8 26042
8b095871
IC
26043 // however, if we've ended, then there's no point, and if we're already
26044 // reading, then it's unnecessary.
26045 if (state.ended || state.reading) {
26046 doRead = false;
26047 debug('reading or ended', doRead);
26048 } else if (doRead) {
26049 debug('do read');
26050 state.reading = true;
26051 state.sync = true;
26052 // if the length is currently zero, then we *need* a readable event.
26053 if (state.length === 0) state.needReadable = true;
26054 // call internal read method
26055 this._read(state.highWaterMark);
26056 state.sync = false;
26057 // If _read pushed data synchronously, then `reading` will be false,
26058 // and we need to re-evaluate how much data we can return to the user.
26059 if (!state.reading) n = howMuchToRead(nOrig, state);
26060 }
ebd8d4e8 26061
8b095871
IC
26062 var ret;
26063 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 26064
8b095871
IC
26065 if (ret === null) {
26066 state.needReadable = true;
26067 n = 0;
26068 } else {
26069 state.length -= n;
26070 }
ebd8d4e8 26071
8b095871
IC
26072 if (state.length === 0) {
26073 // If we have nothing in the buffer, then we want to know
26074 // as soon as we *do* get something into the buffer.
26075 if (!state.ended) state.needReadable = true;
ebd8d4e8 26076
8b095871
IC
26077 // If we tried to read() past the EOF, then emit end on the next tick.
26078 if (nOrig !== n && state.ended) endReadable(this);
26079 }
26080
26081 if (ret !== null) this.emit('data', ret);
26082
26083 return ret;
ab78acc6
IC
26084};
26085
8b095871
IC
26086function chunkInvalid(state, chunk) {
26087 var er = null;
26088 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
26089 er = new TypeError('Invalid non-string/buffer chunk');
26090 }
26091 return er;
26092}
ab78acc6 26093
8b095871
IC
26094function onEofChunk(stream, state) {
26095 if (state.ended) return;
26096 if (state.decoder) {
26097 var chunk = state.decoder.end();
26098 if (chunk && chunk.length) {
26099 state.buffer.push(chunk);
26100 state.length += state.objectMode ? 1 : chunk.length;
26101 }
26102 }
26103 state.ended = true;
26104
26105 // emit 'readable' now to make sure it gets picked up.
26106 emitReadable(stream);
26107}
26108
26109// Don't emit readable right away in sync mode, because this can trigger
26110// another read() call => stack overflow. This way, it might trigger
26111// a nextTick recursion warning, but that's not so bad.
26112function emitReadable(stream) {
26113 var state = stream._readableState;
26114 state.needReadable = false;
26115 if (!state.emittedReadable) {
26116 debug('emitReadable', state.flowing);
26117 state.emittedReadable = true;
26118 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
26119 }
ebd8d4e8
IC
26120}
26121
8b095871
IC
26122function emitReadable_(stream) {
26123 debug('emit readable');
26124 stream.emit('readable');
26125 flow(stream);
26126}
ebd8d4e8 26127
8b095871
IC
26128// at this point, the user has presumably seen the 'readable' event,
26129// and called read() to consume some data. that may have triggered
26130// in turn another _read(n) call, in which case reading = true if
26131// it's in progress.
26132// However, if we're not ended, or reading, and the length < hwm,
26133// then go ahead and try to read some more preemptively.
26134function maybeReadMore(stream, state) {
26135 if (!state.readingMore) {
26136 state.readingMore = true;
26137 processNextTick(maybeReadMore_, stream, state);
26138 }
26139}
ab78acc6 26140
8b095871
IC
26141function maybeReadMore_(stream, state) {
26142 var len = state.length;
26143 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
26144 debug('maybeReadMore read 0');
26145 stream.read(0);
26146 if (len === state.length)
26147 // didn't get any data, stop spinning.
26148 break;else len = state.length;
26149 }
26150 state.readingMore = false;
26151}
ab78acc6 26152
8b095871
IC
26153// abstract method. to be overridden in specific implementation classes.
26154// call cb(er, data) where data is <= n in length.
26155// for virtual (non-string, non-buffer) streams, "length" is somewhat
26156// arbitrary, and perhaps not very meaningful.
26157Readable.prototype._read = function (n) {
26158 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
26159};
26160
8b095871
IC
26161Readable.prototype.pipe = function (dest, pipeOpts) {
26162 var src = this;
26163 var state = this._readableState;
ab78acc6 26164
8b095871
IC
26165 switch (state.pipesCount) {
26166 case 0:
26167 state.pipes = dest;
26168 break;
26169 case 1:
26170 state.pipes = [state.pipes, dest];
26171 break;
26172 default:
26173 state.pipes.push(dest);
26174 break;
ab78acc6 26175 }
8b095871
IC
26176 state.pipesCount += 1;
26177 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 26178
8b095871 26179 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 26180
8b095871
IC
26181 var endFn = doEnd ? onend : cleanup;
26182 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 26183
8b095871
IC
26184 dest.on('unpipe', onunpipe);
26185 function onunpipe(readable) {
26186 debug('onunpipe');
26187 if (readable === src) {
26188 cleanup();
ab78acc6 26189 }
8b095871 26190 }
ebd8d4e8 26191
8b095871
IC
26192 function onend() {
26193 debug('onend');
26194 dest.end();
ebd8d4e8
IC
26195 }
26196
8b095871
IC
26197 // when the dest drains, it reduces the awaitDrain counter
26198 // on the source. This would be more elegant with a .once()
26199 // handler in flow(), but adding and removing repeatedly is
26200 // too slow.
26201 var ondrain = pipeOnDrain(src);
26202 dest.on('drain', ondrain);
ebd8d4e8 26203
8b095871
IC
26204 var cleanedUp = false;
26205 function cleanup() {
26206 debug('cleanup');
26207 // cleanup event handlers once the pipe is broken
26208 dest.removeListener('close', onclose);
26209 dest.removeListener('finish', onfinish);
26210 dest.removeListener('drain', ondrain);
26211 dest.removeListener('error', onerror);
26212 dest.removeListener('unpipe', onunpipe);
26213 src.removeListener('end', onend);
26214 src.removeListener('end', cleanup);
26215 src.removeListener('data', ondata);
ebd8d4e8 26216
8b095871 26217 cleanedUp = true;
ebd8d4e8 26218
8b095871
IC
26219 // if the reader is waiting for a drain event from this
26220 // specific writer, then it would cause it to never start
26221 // flowing again.
26222 // So, if this is awaiting a drain, then we just call it now.
26223 // If we don't know, then assume that we are waiting for one.
26224 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
26225 }
ebd8d4e8 26226
8b095871
IC
26227 // If the user pushes more data while we're writing to dest then we'll end up
26228 // in ondata again. However, we only want to increase awaitDrain once because
26229 // dest will only emit one 'drain' event for the multiple writes.
26230 // => Introduce a guard on increasing awaitDrain.
26231 var increasedAwaitDrain = false;
26232 src.on('data', ondata);
26233 function ondata(chunk) {
26234 debug('ondata');
26235 increasedAwaitDrain = false;
26236 var ret = dest.write(chunk);
26237 if (false === ret && !increasedAwaitDrain) {
26238 // If the user unpiped during `dest.write()`, it is possible
26239 // to get stuck in a permanently paused state if that write
26240 // also returned false.
26241 // => Check whether `dest` is still a piping destination.
26242 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
26243 debug('false write response, pause', src._readableState.awaitDrain);
26244 src._readableState.awaitDrain++;
26245 increasedAwaitDrain = true;
26246 }
26247 src.pause();
26248 }
26249 }
ebd8d4e8 26250
8b095871
IC
26251 // if the dest has an error, then stop piping into it.
26252 // however, don't suppress the throwing behavior for this.
26253 function onerror(er) {
26254 debug('onerror', er);
26255 unpipe();
26256 dest.removeListener('error', onerror);
26257 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
26258 }
ab78acc6 26259
8b095871
IC
26260 // Make sure our error handler is attached before userland ones.
26261 prependListener(dest, 'error', onerror);
ab78acc6 26262
8b095871
IC
26263 // Both close and finish should trigger unpipe, but only once.
26264 function onclose() {
26265 dest.removeListener('finish', onfinish);
26266 unpipe();
26267 }
26268 dest.once('close', onclose);
26269 function onfinish() {
26270 debug('onfinish');
26271 dest.removeListener('close', onclose);
26272 unpipe();
ab78acc6 26273 }
8b095871 26274 dest.once('finish', onfinish);
ebd8d4e8 26275
8b095871
IC
26276 function unpipe() {
26277 debug('unpipe');
26278 src.unpipe(dest);
26279 }
26280
26281 // tell the dest that it's being piped to
26282 dest.emit('pipe', src);
26283
26284 // start the flow if it hasn't been started already.
26285 if (!state.flowing) {
26286 debug('pipe resume');
26287 src.resume();
26288 }
26289
26290 return dest;
ab78acc6 26291};
ebd8d4e8 26292
8b095871
IC
26293function pipeOnDrain(src) {
26294 return function () {
26295 var state = src._readableState;
26296 debug('pipeOnDrain', state.awaitDrain);
26297 if (state.awaitDrain) state.awaitDrain--;
26298 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
26299 state.flowing = true;
26300 flow(src);
26301 }
26302 };
26303}
ebd8d4e8 26304
8b095871
IC
26305Readable.prototype.unpipe = function (dest) {
26306 var state = this._readableState;
ebd8d4e8 26307
8b095871
IC
26308 // if we're not piping anywhere, then do nothing.
26309 if (state.pipesCount === 0) return this;
ebd8d4e8 26310
8b095871
IC
26311 // just one destination. most common case.
26312 if (state.pipesCount === 1) {
26313 // passed in one, but it's not the right one.
26314 if (dest && dest !== state.pipes) return this;
ebd8d4e8 26315
8b095871
IC
26316 if (!dest) dest = state.pipes;
26317
26318 // got a match.
26319 state.pipes = null;
26320 state.pipesCount = 0;
26321 state.flowing = false;
26322 if (dest) dest.emit('unpipe', this);
26323 return this;
ab78acc6 26324 }
ebd8d4e8 26325
8b095871 26326 // slow case. multiple pipe destinations.
ebd8d4e8 26327
8b095871
IC
26328 if (!dest) {
26329 // remove all.
26330 var dests = state.pipes;
26331 var len = state.pipesCount;
26332 state.pipes = null;
26333 state.pipesCount = 0;
26334 state.flowing = false;
ebd8d4e8 26335
8b095871
IC
26336 for (var i = 0; i < len; i++) {
26337 dests[i].emit('unpipe', this);
26338 }return this;
26339 }
ebd8d4e8 26340
8b095871
IC
26341 // try to find the right one.
26342 var index = indexOf(state.pipes, dest);
26343 if (index === -1) return this;
ebd8d4e8 26344
8b095871
IC
26345 state.pipes.splice(index, 1);
26346 state.pipesCount -= 1;
26347 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 26348
8b095871 26349 dest.emit('unpipe', this);
ab78acc6 26350
8b095871
IC
26351 return this;
26352};
ab78acc6 26353
8b095871
IC
26354// set up data events if they are asked for
26355// Ensure readable listeners eventually get something
26356Readable.prototype.on = function (ev, fn) {
26357 var res = Stream.prototype.on.call(this, ev, fn);
26358
26359 if (ev === 'data') {
26360 // Start flowing on next tick if stream isn't explicitly paused
26361 if (this._readableState.flowing !== false) this.resume();
26362 } else if (ev === 'readable') {
26363 var state = this._readableState;
26364 if (!state.endEmitted && !state.readableListening) {
26365 state.readableListening = state.needReadable = true;
26366 state.emittedReadable = false;
26367 if (!state.reading) {
26368 processNextTick(nReadingNextTick, this);
26369 } else if (state.length) {
26370 emitReadable(this, state);
ebd8d4e8 26371 }
ab78acc6 26372 }
8b095871 26373 }
ebd8d4e8 26374
8b095871
IC
26375 return res;
26376};
26377Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 26378
8b095871
IC
26379function nReadingNextTick(self) {
26380 debug('readable nexttick read 0');
26381 self.read(0);
26382}
ab78acc6 26383
8b095871
IC
26384// pause() and resume() are remnants of the legacy readable stream API
26385// If the user uses them, then switch into old mode.
26386Readable.prototype.resume = function () {
26387 var state = this._readableState;
26388 if (!state.flowing) {
26389 debug('resume');
26390 state.flowing = true;
26391 resume(this, state);
ebd8d4e8 26392 }
ab78acc6 26393 return this;
ebd8d4e8
IC
26394};
26395
8b095871
IC
26396function resume(stream, state) {
26397 if (!state.resumeScheduled) {
26398 state.resumeScheduled = true;
26399 processNextTick(resume_, stream, state);
ebd8d4e8 26400 }
8b095871 26401}
ab78acc6 26402
8b095871
IC
26403function resume_(stream, state) {
26404 if (!state.reading) {
26405 debug('resume read 0');
26406 stream.read(0);
ebd8d4e8 26407 }
ebd8d4e8 26408
8b095871
IC
26409 state.resumeScheduled = false;
26410 state.awaitDrain = 0;
26411 stream.emit('resume');
26412 flow(stream);
26413 if (state.flowing && !state.reading) stream.read(0);
26414}
ab78acc6 26415
8b095871
IC
26416Readable.prototype.pause = function () {
26417 debug('call pause flowing=%j', this._readableState.flowing);
26418 if (false !== this._readableState.flowing) {
26419 debug('pause');
26420 this._readableState.flowing = false;
26421 this.emit('pause');
ebd8d4e8 26422 }
ab78acc6
IC
26423 return this;
26424};
ebd8d4e8 26425
8b095871
IC
26426function flow(stream) {
26427 var state = stream._readableState;
26428 debug('flow', state.flowing);
26429 while (state.flowing && stream.read() !== null) {}
26430}
ebd8d4e8 26431
8b095871
IC
26432// wrap an old-style stream as the async data source.
26433// This is *not* part of the readable stream interface.
26434// It is an ugly unfortunate mess of history.
26435Readable.prototype.wrap = function (stream) {
26436 var state = this._readableState;
26437 var paused = false;
ebd8d4e8 26438
8b095871
IC
26439 var self = this;
26440 stream.on('end', function () {
26441 debug('wrapped end');
26442 if (state.decoder && !state.ended) {
26443 var chunk = state.decoder.end();
26444 if (chunk && chunk.length) self.push(chunk);
26445 }
ebd8d4e8 26446
8b095871
IC
26447 self.push(null);
26448 });
ebd8d4e8 26449
8b095871
IC
26450 stream.on('data', function (chunk) {
26451 debug('wrapped data');
26452 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 26453
8b095871
IC
26454 // don't skip over falsy values in objectMode
26455 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 26456
8b095871
IC
26457 var ret = self.push(chunk);
26458 if (!ret) {
26459 paused = true;
26460 stream.pause();
26461 }
26462 });
26463
26464 // proxy all the other methods.
26465 // important when wrapping filters and duplexes.
26466 for (var i in stream) {
26467 if (this[i] === undefined && typeof stream[i] === 'function') {
26468 this[i] = function (method) {
26469 return function () {
26470 return stream[method].apply(stream, arguments);
26471 };
26472 }(i);
26473 }
ab78acc6 26474 }
ebd8d4e8 26475
8b095871
IC
26476 // proxy certain important events.
26477 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
26478 forEach(events, function (ev) {
26479 stream.on(ev, self.emit.bind(self, ev));
26480 });
26481
26482 // when we try to consume some more bytes, simply unpause the
26483 // underlying stream.
26484 self._read = function (n) {
26485 debug('wrapped _read', n);
26486 if (paused) {
26487 paused = false;
26488 stream.resume();
26489 }
26490 };
26491
26492 return self;
ebd8d4e8
IC
26493};
26494
8b095871
IC
26495// exposed for testing purposes only.
26496Readable._fromList = fromList;
ebd8d4e8 26497
8b095871
IC
26498// Pluck off n bytes from an array of buffers.
26499// Length is the combined lengths of all the buffers in the list.
26500// This function is designed to be inlinable, so please take care when making
26501// changes to the function body.
26502function fromList(n, state) {
26503 // nothing buffered
26504 if (state.length === 0) return null;
ab78acc6 26505
8b095871
IC
26506 var ret;
26507 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
26508 // read it all, truncate the list
26509 if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);
26510 state.buffer.clear();
26511 } else {
26512 // read part of list
26513 ret = fromListPartial(n, state.buffer, state.decoder);
26514 }
26515
26516 return ret;
26517}
26518
26519// Extracts only enough buffered data to satisfy the amount requested.
26520// This function is designed to be inlinable, so please take care when making
26521// changes to the function body.
26522function fromListPartial(n, list, hasStrings) {
26523 var ret;
26524 if (n < list.head.data.length) {
26525 // slice is the same for buffers and strings
26526 ret = list.head.data.slice(0, n);
26527 list.head.data = list.head.data.slice(n);
26528 } else if (n === list.head.data.length) {
26529 // first chunk is a perfect match
26530 ret = list.shift();
26531 } else {
26532 // result spans more than one buffer
26533 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
26534 }
26535 return ret;
ab78acc6 26536}
ebd8d4e8 26537
8b095871
IC
26538// Copies a specified amount of characters from the list of buffered data
26539// chunks.
26540// This function is designed to be inlinable, so please take care when making
26541// changes to the function body.
26542function copyFromBufferString(n, list) {
26543 var p = list.head;
26544 var c = 1;
26545 var ret = p.data;
26546 n -= ret.length;
26547 while (p = p.next) {
26548 var str = p.data;
26549 var nb = n > str.length ? str.length : n;
26550 if (nb === str.length) ret += str;else ret += str.slice(0, n);
26551 n -= nb;
26552 if (n === 0) {
26553 if (nb === str.length) {
26554 ++c;
26555 if (p.next) list.head = p.next;else list.head = list.tail = null;
26556 } else {
26557 list.head = p;
26558 p.data = str.slice(nb);
26559 }
26560 break;
ab78acc6 26561 }
8b095871
IC
26562 ++c;
26563 }
26564 list.length -= c;
26565 return ret;
ab78acc6
IC
26566}
26567
8b095871
IC
26568// Copies a specified amount of bytes from the list of buffered data chunks.
26569// This function is designed to be inlinable, so please take care when making
26570// changes to the function body.
26571function copyFromBuffer(n, list) {
26572 var ret = bufferShim.allocUnsafe(n);
26573 var p = list.head;
26574 var c = 1;
26575 p.data.copy(ret);
26576 n -= p.data.length;
26577 while (p = p.next) {
26578 var buf = p.data;
26579 var nb = n > buf.length ? buf.length : n;
26580 buf.copy(ret, ret.length - n, 0, nb);
26581 n -= nb;
26582 if (n === 0) {
26583 if (nb === buf.length) {
26584 ++c;
26585 if (p.next) list.head = p.next;else list.head = list.tail = null;
26586 } else {
26587 list.head = p;
26588 p.data = buf.slice(nb);
26589 }
26590 break;
ab78acc6 26591 }
8b095871
IC
26592 ++c;
26593 }
26594 list.length -= c;
26595 return ret;
ab78acc6 26596}
ebd8d4e8 26597
8b095871
IC
26598function endReadable(stream) {
26599 var state = stream._readableState;
ab78acc6 26600
8b095871
IC
26601 // If we get here before consuming all the bytes, then that is a
26602 // bug in node. Should never happen.
26603 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 26604
8b095871
IC
26605 if (!state.endEmitted) {
26606 state.ended = true;
26607 processNextTick(endReadableNT, state, stream);
26608 }
26609}
ebd8d4e8 26610
8b095871
IC
26611function endReadableNT(state, stream) {
26612 // Check that we didn't get one last unshift.
26613 if (!state.endEmitted && state.length === 0) {
26614 state.endEmitted = true;
26615 stream.readable = false;
26616 stream.emit('end');
26617 }
26618}
ebd8d4e8 26619
8b095871
IC
26620function forEach(xs, f) {
26621 for (var i = 0, l = xs.length; i < l; i++) {
26622 f(xs[i], i);
26623 }
26624}
ebd8d4e8 26625
8b095871
IC
26626function indexOf(xs, x) {
26627 for (var i = 0, l = xs.length; i < l; i++) {
26628 if (xs[i] === x) return i;
26629 }
26630 return -1;
26631}
26632}).call(this,require('_process'))
26633},{"./_stream_duplex":15,"./internal/streams/BufferList":20,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"isarray":11,"process-nextick-args":12,"string_decoder/":26,"util":3}],18:[function(require,module,exports){
26634// a transform stream is a readable/writable stream where you do
26635// something with the data. Sometimes it's called a "filter",
26636// but that's not a great name for it, since that implies a thing where
26637// some bits pass through, and others are simply ignored. (That would
26638// be a valid example of a transform, of course.)
ab78acc6 26639//
8b095871
IC
26640// While the output is causally related to the input, it's not a
26641// necessarily symmetric or synchronous transformation. For example,
26642// a zlib stream might take multiple plain-text writes(), and then
26643// emit a single compressed chunk some time in the future.
ab78acc6 26644//
8b095871 26645// Here's how this works:
ab78acc6 26646//
8b095871
IC
26647// The Transform stream has all the aspects of the readable and writable
26648// stream classes. When you write(chunk), that calls _write(chunk,cb)
26649// internally, and returns false if there's a lot of pending writes
26650// buffered up. When you call read(), that calls _read(n) until
26651// there's enough pending readable data buffered up.
26652//
26653// In a transform stream, the written data is placed in a buffer. When
26654// _read(n) is called, it transforms the queued up data, calling the
26655// buffered _write cb's as it consumes chunks. If consuming a single
26656// written chunk would result in multiple output chunks, then the first
26657// outputted bit calls the readcb, and subsequent chunks just go into
26658// the read buffer, and will cause it to emit 'readable' if necessary.
26659//
26660// This way, back-pressure is actually determined by the reading side,
26661// since _read has to be called to start processing a new chunk. However,
26662// a pathological inflate type of transform can cause excessive buffering
26663// here. For example, imagine a stream where every byte of input is
26664// interpreted as an integer from 0-255, and then results in that many
26665// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
26666// 1kb of data being output. In this case, you could write a very small
26667// amount of input, and end up with a very large amount of output. In
26668// such a pathological inflating mechanism, there'd be no way to tell
26669// the system to stop doing the transform. A single 4MB write could
26670// cause the system to run out of memory.
26671//
26672// However, even in such a pathological case, only a single written chunk
26673// would be consumed, and then the rest would wait (un-transformed) until
26674// the results of the previous transformed chunk were consumed.
ebd8d4e8 26675
8b095871 26676'use strict';
ebd8d4e8 26677
8b095871 26678module.exports = Transform;
ebd8d4e8 26679
8b095871 26680var Duplex = require('./_stream_duplex');
ebd8d4e8 26681
ab78acc6
IC
26682/*<replacement>*/
26683var util = require('core-util-is');
26684util.inherits = require('inherits');
26685/*</replacement>*/
ebd8d4e8 26686
8b095871 26687util.inherits(Transform, Duplex);
ebd8d4e8 26688
8b095871
IC
26689function TransformState(stream) {
26690 this.afterTransform = function (er, data) {
26691 return afterTransform(stream, er, data);
26692 };
ebd8d4e8 26693
8b095871
IC
26694 this.needTransform = false;
26695 this.transforming = false;
26696 this.writecb = null;
26697 this.writechunk = null;
26698 this.writeencoding = null;
26699}
ebd8d4e8 26700
8b095871
IC
26701function afterTransform(stream, er, data) {
26702 var ts = stream._transformState;
26703 ts.transforming = false;
ebd8d4e8 26704
8b095871 26705 var cb = ts.writecb;
ebd8d4e8 26706
8b095871 26707 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 26708
8b095871
IC
26709 ts.writechunk = null;
26710 ts.writecb = null;
ebd8d4e8 26711
8b095871 26712 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26713
8b095871
IC
26714 cb(er);
26715
26716 var rs = stream._readableState;
26717 rs.reading = false;
26718 if (rs.needReadable || rs.length < rs.highWaterMark) {
26719 stream._read(rs.highWaterMark);
26720 }
ebd8d4e8
IC
26721}
26722
8b095871
IC
26723function Transform(options) {
26724 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 26725
8b095871 26726 Duplex.call(this, options);
ebd8d4e8 26727
8b095871
IC
26728 this._transformState = new TransformState(this);
26729
26730 var stream = this;
26731
26732 // start out asking for a readable event once data is transformed.
26733 this._readableState.needReadable = true;
26734
26735 // we have implemented the _read method, and done the other things
26736 // that Readable wants before the first _read call, so unset the
26737 // sync guard flag.
26738 this._readableState.sync = false;
26739
26740 if (options) {
26741 if (typeof options.transform === 'function') this._transform = options.transform;
26742
26743 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 26744 }
8b095871
IC
26745
26746 // When the writable side finishes, then flush out anything remaining.
26747 this.once('prefinish', function () {
26748 if (typeof this._flush === 'function') this._flush(function (er, data) {
26749 done(stream, er, data);
26750 });else done(stream);
26751 });
ab78acc6 26752}
ebd8d4e8 26753
8b095871
IC
26754Transform.prototype.push = function (chunk, encoding) {
26755 this._transformState.needTransform = false;
26756 return Duplex.prototype.push.call(this, chunk, encoding);
26757};
26758
26759// This is the part where you do stuff!
26760// override this function in implementation classes.
26761// 'chunk' is an input chunk.
ab78acc6 26762//
8b095871
IC
26763// Call `push(newChunk)` to pass along transformed output
26764// to the readable side. You may call 'push' zero or more times.
ab78acc6 26765//
8b095871
IC
26766// Call `cb(err)` when you are done with this chunk. If you pass
26767// an error, then that'll put the hurt on the whole operation. If you
26768// never call cb(), then you'll never get another chunk.
26769Transform.prototype._transform = function (chunk, encoding, cb) {
26770 throw new Error('_transform() is not implemented');
26771};
ebd8d4e8 26772
8b095871
IC
26773Transform.prototype._write = function (chunk, encoding, cb) {
26774 var ts = this._transformState;
26775 ts.writecb = cb;
26776 ts.writechunk = chunk;
26777 ts.writeencoding = encoding;
26778 if (!ts.transforming) {
26779 var rs = this._readableState;
26780 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
26781 }
26782};
ebd8d4e8 26783
8b095871
IC
26784// Doesn't matter what the args are here.
26785// _transform does all the work.
26786// That we got here means that the readable side wants more data.
26787Transform.prototype._read = function (n) {
26788 var ts = this._transformState;
ebd8d4e8 26789
8b095871
IC
26790 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
26791 ts.transforming = true;
26792 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
26793 } else {
26794 // mark that we need a transform, so that any data that comes in
26795 // will get processed, now that we've asked for it.
26796 ts.needTransform = true;
26797 }
26798};
ebd8d4e8 26799
8b095871
IC
26800function done(stream, er, data) {
26801 if (er) return stream.emit('error', er);
ebd8d4e8 26802
8b095871 26803 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 26804
8b095871
IC
26805 // if there's nothing in the write buffer, then that means
26806 // that nothing more will ever be provided
26807 var ws = stream._writableState;
26808 var ts = stream._transformState;
ebd8d4e8 26809
8b095871 26810 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 26811
8b095871 26812 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 26813
8b095871
IC
26814 return stream.push(null);
26815}
26816},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 26817(function (process){
8b095871
IC
26818// A bit simpler than readable streams.
26819// Implement an async ._write(chunk, encoding, cb), and it'll handle all
26820// the drain event emission and buffering.
ebd8d4e8 26821
8b095871
IC
26822'use strict';
26823
26824module.exports = Writable;
ebd8d4e8 26825
ab78acc6 26826/*<replacement>*/
8b095871 26827var processNextTick = require('process-nextick-args');
ab78acc6
IC
26828/*</replacement>*/
26829
ab78acc6 26830/*<replacement>*/
8b095871 26831var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
26832/*</replacement>*/
26833
ab78acc6 26834/*<replacement>*/
8b095871 26835var Duplex;
ab78acc6
IC
26836/*</replacement>*/
26837
8b095871 26838Writable.WritableState = WritableState;
ab78acc6
IC
26839
26840/*<replacement>*/
26841var util = require('core-util-is');
26842util.inherits = require('inherits');
26843/*</replacement>*/
26844
8b095871
IC
26845/*<replacement>*/
26846var internalUtil = {
26847 deprecate: require('util-deprecate')
26848};
26849/*</replacement>*/
ab78acc6 26850
8b095871
IC
26851/*<replacement>*/
26852var Stream;
26853(function () {
26854 try {
26855 Stream = require('st' + 'ream');
26856 } catch (_) {} finally {
26857 if (!Stream) Stream = require('events').EventEmitter;
26858 }
26859})();
26860/*</replacement>*/
ab78acc6 26861
8b095871 26862var Buffer = require('buffer').Buffer;
ab78acc6 26863/*<replacement>*/
8b095871 26864var bufferShim = require('buffer-shims');
ab78acc6
IC
26865/*</replacement>*/
26866
8b095871
IC
26867util.inherits(Writable, Stream);
26868
26869function nop() {}
ab78acc6 26870
8b095871
IC
26871function WriteReq(chunk, encoding, cb) {
26872 this.chunk = chunk;
26873 this.encoding = encoding;
26874 this.callback = cb;
26875 this.next = null;
26876}
ab78acc6 26877
8b095871
IC
26878function WritableState(options, stream) {
26879 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
26880
26881 options = options || {};
26882
8b095871
IC
26883 // object stream flag to indicate whether or not this stream
26884 // contains buffers or objects.
26885 this.objectMode = !!options.objectMode;
26886
26887 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
26888
26889 // the point at which write() starts returning false
26890 // Note: 0 is a valid value, means that we always return false if
26891 // the entire buffer is not flushed immediately on write()
ab78acc6 26892 var hwm = options.highWaterMark;
8b095871
IC
26893 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
26894 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
26895
26896 // cast to ints.
8b095871 26897 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 26898
8b095871
IC
26899 // drain event flag.
26900 this.needDrain = false;
26901 // at the start of calling end()
26902 this.ending = false;
26903 // when end() has been called, and returned
ab78acc6 26904 this.ended = false;
8b095871
IC
26905 // when 'finish' is emitted
26906 this.finished = false;
26907
26908 // should we decode strings into buffers before passing to _write?
26909 // this is here so that some node-core streams can optimize string
26910 // handling at a lower level.
26911 var noDecode = options.decodeStrings === false;
26912 this.decodeStrings = !noDecode;
26913
26914 // Crypto is kind of old and crusty. Historically, its default string
26915 // encoding is 'binary' so we have to make this configurable.
26916 // Everything else in the universe uses 'utf8', though.
26917 this.defaultEncoding = options.defaultEncoding || 'utf8';
26918
26919 // not an actual buffer we keep track of, but a measurement
26920 // of how much we're waiting to get pushed to some underlying
26921 // socket or file.
26922 this.length = 0;
26923
26924 // a flag to see when we're in the middle of a write.
26925 this.writing = false;
26926
26927 // when true all writes will be buffered until .uncork() call
26928 this.corked = 0;
ebd8d4e8 26929
ab78acc6
IC
26930 // a flag to be able to tell if the onwrite cb is called immediately,
26931 // or on a later tick. We set this to true at first, because any
26932 // actions that shouldn't happen until "later" should generally also
26933 // not happen before the first write call.
26934 this.sync = true;
ebd8d4e8 26935
8b095871
IC
26936 // a flag to know if we're processing previously buffered items, which
26937 // may call the _write() callback in the same tick, so that we don't
26938 // end up in an overlapped onwrite situation.
26939 this.bufferProcessing = false;
26940
26941 // the callback that's passed to _write(chunk,cb)
26942 this.onwrite = function (er) {
26943 onwrite(stream, er);
26944 };
26945
26946 // the callback that the user supplies to write(chunk,encoding,cb)
26947 this.writecb = null;
26948
26949 // the amount that is being written when _write is called.
26950 this.writelen = 0;
26951
26952 this.bufferedRequest = null;
26953 this.lastBufferedRequest = null;
26954
26955 // number of pending user-supplied write callbacks
26956 // this must be 0 before 'finish' can be emitted
26957 this.pendingcb = 0;
26958
26959 // emit prefinish if the only thing we're waiting for is _write cbs
26960 // This is relevant for synchronous Transform streams
26961 this.prefinished = false;
26962
26963 // True if the error was already emitted and should not be thrown again
26964 this.errorEmitted = false;
26965
26966 // count buffered requests
26967 this.bufferedRequestCount = 0;
26968
26969 // allocate the first CorkedRequest, there is always
26970 // one allocated and free to use, and we maintain at most two
26971 this.corkedRequestsFree = new CorkedRequest(this);
26972}
26973
26974WritableState.prototype.getBuffer = function getBuffer() {
26975 var current = this.bufferedRequest;
26976 var out = [];
26977 while (current) {
26978 out.push(current);
26979 current = current.next;
26980 }
26981 return out;
26982};
26983
26984(function () {
26985 try {
26986 Object.defineProperty(WritableState.prototype, 'buffer', {
26987 get: internalUtil.deprecate(function () {
26988 return this.getBuffer();
26989 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
26990 });
26991 } catch (_) {}
26992})();
26993
26994// Test _writableState for inheritance to account for Duplex streams,
26995// whose prototype chain only points to Readable.
26996var realHasInstance;
26997if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
26998 realHasInstance = Function.prototype[Symbol.hasInstance];
26999 Object.defineProperty(Writable, Symbol.hasInstance, {
27000 value: function (object) {
27001 if (realHasInstance.call(this, object)) return true;
27002
27003 return object && object._writableState instanceof WritableState;
27004 }
27005 });
27006} else {
27007 realHasInstance = function (object) {
27008 return object instanceof this;
27009 };
27010}
27011
27012function Writable(options) {
27013 Duplex = Duplex || require('./_stream_duplex');
27014
27015 // Writable ctor is applied to Duplexes, too.
27016 // `realHasInstance` is necessary because using plain `instanceof`
27017 // would return false, as no `_writableState` property is attached.
27018
27019 // Trying to use the custom `instanceof` for Writable here will also break the
27020 // Node.js LazyTransform implementation, which has a non-trivial getter for
27021 // `_writableState` that would lead to infinite recursion.
27022 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
27023 return new Writable(options);
27024 }
27025
27026 this._writableState = new WritableState(options, this);
27027
27028 // legacy.
27029 this.writable = true;
27030
27031 if (options) {
27032 if (typeof options.write === 'function') this._write = options.write;
27033
27034 if (typeof options.writev === 'function') this._writev = options.writev;
27035 }
27036
27037 Stream.call(this);
27038}
27039
27040// Otherwise people can pipe Writable streams, which is just wrong.
27041Writable.prototype.pipe = function () {
27042 this.emit('error', new Error('Cannot pipe, not readable'));
27043};
27044
27045function writeAfterEnd(stream, cb) {
27046 var er = new Error('write after end');
27047 // TODO: defer error events consistently everywhere, not just the cb
27048 stream.emit('error', er);
27049 processNextTick(cb, er);
27050}
27051
27052// If we get something that is not a buffer, string, null, or undefined,
27053// and we're not in objectMode, then that's an error.
27054// Otherwise stream chunks are all considered to be of length=1, and the
27055// watermarks determine how many objects to keep in the buffer, rather than
27056// how many bytes or characters.
27057function validChunk(stream, state, chunk, cb) {
27058 var valid = true;
27059 var er = false;
27060 // Always throw error if a null is written
27061 // if we are not in object mode then throw
27062 // if it is not a buffer, string, or undefined.
27063 if (chunk === null) {
27064 er = new TypeError('May not write null values to stream');
27065 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
27066 er = new TypeError('Invalid non-string/buffer chunk');
27067 }
27068 if (er) {
27069 stream.emit('error', er);
27070 processNextTick(cb, er);
27071 valid = false;
27072 }
27073 return valid;
27074}
ebd8d4e8 27075
8b095871
IC
27076Writable.prototype.write = function (chunk, encoding, cb) {
27077 var state = this._writableState;
27078 var ret = false;
ab78acc6 27079
8b095871
IC
27080 if (typeof encoding === 'function') {
27081 cb = encoding;
27082 encoding = null;
27083 }
ab78acc6 27084
8b095871 27085 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 27086
8b095871 27087 if (typeof cb !== 'function') cb = nop;
ab78acc6 27088
8b095871
IC
27089 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
27090 state.pendingcb++;
27091 ret = writeOrBuffer(this, state, chunk, encoding, cb);
27092 }
ab78acc6 27093
8b095871
IC
27094 return ret;
27095};
ab78acc6 27096
8b095871
IC
27097Writable.prototype.cork = function () {
27098 var state = this._writableState;
ab78acc6 27099
8b095871
IC
27100 state.corked++;
27101};
ebd8d4e8 27102
8b095871
IC
27103Writable.prototype.uncork = function () {
27104 var state = this._writableState;
ab78acc6 27105
8b095871
IC
27106 if (state.corked) {
27107 state.corked--;
ab78acc6 27108
8b095871
IC
27109 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
27110 }
27111};
ab78acc6 27112
8b095871
IC
27113Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
27114 // node::ParseEncoding() requires lower case.
27115 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
27116 if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);
27117 this._writableState.defaultEncoding = encoding;
27118 return this;
27119};
ab78acc6 27120
8b095871
IC
27121function decodeChunk(state, chunk, encoding) {
27122 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
27123 chunk = bufferShim.from(chunk, encoding);
27124 }
27125 return chunk;
ab78acc6
IC
27126}
27127
8b095871
IC
27128// if we're already writing something, then just put this
27129// in the queue, and wait our turn. Otherwise, call _write
27130// If we return false, then we need a drain event, so set that flag.
27131function writeOrBuffer(stream, state, chunk, encoding, cb) {
27132 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 27133
8b095871
IC
27134 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
27135 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27136
8b095871 27137 state.length += len;
ebd8d4e8 27138
8b095871
IC
27139 var ret = state.length < state.highWaterMark;
27140 // we must ensure that previous needDrain will not be reset to false.
27141 if (!ret) state.needDrain = true;
ebd8d4e8 27142
8b095871
IC
27143 if (state.writing || state.corked) {
27144 var last = state.lastBufferedRequest;
27145 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
27146 if (last) {
27147 last.next = state.lastBufferedRequest;
ebd8d4e8 27148 } else {
8b095871
IC
27149 state.bufferedRequest = state.lastBufferedRequest;
27150 }
27151 state.bufferedRequestCount += 1;
27152 } else {
27153 doWrite(stream, state, false, len, chunk, encoding, cb);
27154 }
ab78acc6 27155
8b095871
IC
27156 return ret;
27157}
ab78acc6 27158
8b095871
IC
27159function doWrite(stream, state, writev, len, chunk, encoding, cb) {
27160 state.writelen = len;
27161 state.writecb = cb;
27162 state.writing = true;
27163 state.sync = true;
27164 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
27165 state.sync = false;
27166}
ab78acc6 27167
8b095871
IC
27168function onwriteError(stream, state, sync, er, cb) {
27169 --state.pendingcb;
27170 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 27171
8b095871
IC
27172 stream._writableState.errorEmitted = true;
27173 stream.emit('error', er);
27174}
ebd8d4e8 27175
8b095871
IC
27176function onwriteStateUpdate(state) {
27177 state.writing = false;
27178 state.writecb = null;
27179 state.length -= state.writelen;
27180 state.writelen = 0;
ab78acc6 27181}
ebd8d4e8 27182
8b095871
IC
27183function onwrite(stream, er) {
27184 var state = stream._writableState;
27185 var sync = state.sync;
27186 var cb = state.writecb;
ab78acc6 27187
8b095871 27188 onwriteStateUpdate(state);
ab78acc6 27189
8b095871
IC
27190 if (er) onwriteError(stream, state, sync, er, cb);else {
27191 // Check if we're actually ready to finish, but don't emit yet
27192 var finished = needFinish(state);
27193
27194 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
27195 clearBuffer(stream, state);
27196 }
27197
27198 if (sync) {
27199 /*<replacement>*/
27200 asyncWrite(afterWrite, stream, state, finished, cb);
27201 /*</replacement>*/
27202 } else {
27203 afterWrite(stream, state, finished, cb);
27204 }
27205 }
ab78acc6
IC
27206}
27207
8b095871
IC
27208function afterWrite(stream, state, finished, cb) {
27209 if (!finished) onwriteDrain(stream, state);
27210 state.pendingcb--;
27211 cb();
27212 finishMaybe(stream, state);
27213}
ab78acc6 27214
8b095871
IC
27215// Must force callback to be called on nextTick, so that we don't
27216// emit 'drain' before the write() consumer gets the 'false' return
27217// value, and has a chance to attach a 'drain' listener.
27218function onwriteDrain(stream, state) {
27219 if (state.length === 0 && state.needDrain) {
27220 state.needDrain = false;
27221 stream.emit('drain');
ebd8d4e8 27222 }
ebd8d4e8 27223}
ebd8d4e8 27224
8b095871
IC
27225// if there's something in the buffer waiting, then process it
27226function clearBuffer(stream, state) {
27227 state.bufferProcessing = true;
27228 var entry = state.bufferedRequest;
ebd8d4e8 27229
8b095871
IC
27230 if (stream._writev && entry && entry.next) {
27231 // Fast case, write everything using _writev()
27232 var l = state.bufferedRequestCount;
27233 var buffer = new Array(l);
27234 var holder = state.corkedRequestsFree;
27235 holder.entry = entry;
ebd8d4e8 27236
8b095871
IC
27237 var count = 0;
27238 while (entry) {
27239 buffer[count] = entry;
27240 entry = entry.next;
27241 count += 1;
27242 }
ebd8d4e8 27243
8b095871 27244 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 27245
8b095871
IC
27246 // doWrite is almost always async, defer these to save a bit of time
27247 // as the hot path ends with doWrite
27248 state.pendingcb++;
27249 state.lastBufferedRequest = null;
27250 if (holder.next) {
27251 state.corkedRequestsFree = holder.next;
27252 holder.next = null;
27253 } else {
27254 state.corkedRequestsFree = new CorkedRequest(state);
27255 }
27256 } else {
27257 // Slow case, write chunks one-by-one
27258 while (entry) {
27259 var chunk = entry.chunk;
27260 var encoding = entry.encoding;
27261 var cb = entry.callback;
27262 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 27263
8b095871
IC
27264 doWrite(stream, state, false, len, chunk, encoding, cb);
27265 entry = entry.next;
27266 // if we didn't call the onwrite immediately, then
27267 // it means that we need to wait until it does.
27268 // also, that means that the chunk and cb are currently
27269 // being processed, so move the buffer counter past them.
27270 if (state.writing) {
27271 break;
27272 }
27273 }
27274
27275 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 27276 }
ab78acc6 27277
8b095871
IC
27278 state.bufferedRequestCount = 0;
27279 state.bufferedRequest = entry;
27280 state.bufferProcessing = false;
ebd8d4e8
IC
27281}
27282
8b095871
IC
27283Writable.prototype._write = function (chunk, encoding, cb) {
27284 cb(new Error('_write() is not implemented'));
27285};
ebd8d4e8 27286
8b095871 27287Writable.prototype._writev = null;
ab78acc6 27288
8b095871
IC
27289Writable.prototype.end = function (chunk, encoding, cb) {
27290 var state = this._writableState;
27291
27292 if (typeof chunk === 'function') {
27293 cb = chunk;
27294 chunk = null;
27295 encoding = null;
27296 } else if (typeof encoding === 'function') {
27297 cb = encoding;
27298 encoding = null;
ab78acc6
IC
27299 }
27300
8b095871 27301 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 27302
8b095871
IC
27303 // .end() fully uncorks
27304 if (state.corked) {
27305 state.corked = 1;
27306 this.uncork();
ab78acc6
IC
27307 }
27308
8b095871
IC
27309 // ignore unnecessary end() calls.
27310 if (!state.ending && !state.finished) endWritable(this, state, cb);
27311};
ab78acc6 27312
8b095871
IC
27313function needFinish(state) {
27314 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
27315}
ab78acc6 27316
8b095871
IC
27317function prefinish(stream, state) {
27318 if (!state.prefinished) {
27319 state.prefinished = true;
27320 stream.emit('prefinish');
ab78acc6 27321 }
8b095871 27322}
ab78acc6 27323
8b095871
IC
27324function finishMaybe(stream, state) {
27325 var need = needFinish(state);
27326 if (need) {
27327 if (state.pendingcb === 0) {
27328 prefinish(stream, state);
27329 state.finished = true;
27330 stream.emit('finish');
27331 } else {
27332 prefinish(stream, state);
27333 }
ab78acc6 27334 }
8b095871
IC
27335 return need;
27336}
ab78acc6 27337
8b095871
IC
27338function endWritable(stream, state, cb) {
27339 state.ending = true;
27340 finishMaybe(stream, state);
27341 if (cb) {
27342 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 27343 }
8b095871
IC
27344 state.ended = true;
27345 stream.writable = false;
27346}
ab78acc6 27347
8b095871
IC
27348// It seems a linked list but it is not
27349// there will be only 2 of these for each stream
27350function CorkedRequest(state) {
27351 var _this = this;
ab78acc6 27352
8b095871
IC
27353 this.next = null;
27354 this.entry = null;
ebd8d4e8 27355
8b095871
IC
27356 this.finish = function (err) {
27357 var entry = _this.entry;
27358 _this.entry = null;
27359 while (entry) {
27360 var cb = entry.callback;
27361 state.pendingcb--;
27362 cb(err);
27363 entry = entry.next;
27364 }
27365 if (state.corkedRequestsFree) {
27366 state.corkedRequestsFree.next = _this;
27367 } else {
27368 state.corkedRequestsFree = _this;
27369 }
27370 };
27371}
27372}).call(this,require('_process'))
27373},{"./_stream_duplex":15,"_process":13,"buffer":5,"buffer-shims":4,"core-util-is":6,"events":7,"inherits":9,"process-nextick-args":12,"util-deprecate":27}],20:[function(require,module,exports){
27374'use strict';
ebd8d4e8 27375
8b095871
IC
27376var Buffer = require('buffer').Buffer;
27377/*<replacement>*/
27378var bufferShim = require('buffer-shims');
27379/*</replacement>*/
ebd8d4e8 27380
8b095871 27381module.exports = BufferList;
ebd8d4e8 27382
8b095871
IC
27383function BufferList() {
27384 this.head = null;
27385 this.tail = null;
27386 this.length = 0;
27387}
ab78acc6 27388
8b095871
IC
27389BufferList.prototype.push = function (v) {
27390 var entry = { data: v, next: null };
27391 if (this.length > 0) this.tail.next = entry;else this.head = entry;
27392 this.tail = entry;
27393 ++this.length;
27394};
27395
27396BufferList.prototype.unshift = function (v) {
27397 var entry = { data: v, next: this.head };
27398 if (this.length === 0) this.tail = entry;
27399 this.head = entry;
27400 ++this.length;
27401};
ab78acc6 27402
8b095871
IC
27403BufferList.prototype.shift = function () {
27404 if (this.length === 0) return;
27405 var ret = this.head.data;
27406 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
27407 --this.length;
ab78acc6
IC
27408 return ret;
27409};
27410
8b095871
IC
27411BufferList.prototype.clear = function () {
27412 this.head = this.tail = null;
27413 this.length = 0;
27414};
ebd8d4e8 27415
8b095871
IC
27416BufferList.prototype.join = function (s) {
27417 if (this.length === 0) return '';
27418 var p = this.head;
27419 var ret = '' + p.data;
27420 while (p = p.next) {
27421 ret += s + p.data;
27422 }return ret;
27423};
ebd8d4e8 27424
8b095871
IC
27425BufferList.prototype.concat = function (n) {
27426 if (this.length === 0) return bufferShim.alloc(0);
27427 if (this.length === 1) return this.head.data;
27428 var ret = bufferShim.allocUnsafe(n >>> 0);
27429 var p = this.head;
27430 var i = 0;
27431 while (p) {
27432 p.data.copy(ret, i);
27433 i += p.data.length;
27434 p = p.next;
ebd8d4e8 27435 }
8b095871
IC
27436 return ret;
27437};
27438},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
27439module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 27440
8b095871
IC
27441},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
27442(function (process){
27443var Stream = (function (){
27444 try {
27445 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
27446 } catch(_){}
27447}());
27448exports = module.exports = require('./lib/_stream_readable.js');
27449exports.Stream = Stream || exports;
27450exports.Readable = exports;
27451exports.Writable = require('./lib/_stream_writable.js');
27452exports.Duplex = require('./lib/_stream_duplex.js');
27453exports.Transform = require('./lib/_stream_transform.js');
27454exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 27455
8b095871
IC
27456if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
27457 module.exports = Stream;
ab78acc6 27458}
ebd8d4e8 27459
8b095871
IC
27460}).call(this,require('_process'))
27461},{"./lib/_stream_duplex.js":15,"./lib/_stream_passthrough.js":16,"./lib/_stream_readable.js":17,"./lib/_stream_transform.js":18,"./lib/_stream_writable.js":19,"_process":13}],23:[function(require,module,exports){
27462module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 27463
8b095871
IC
27464},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
27465module.exports = require("./lib/_stream_writable.js")
ab78acc6 27466
8b095871
IC
27467},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
27468// Copyright Joyent, Inc. and other Node contributors.
27469//
27470// Permission is hereby granted, free of charge, to any person obtaining a
27471// copy of this software and associated documentation files (the
27472// "Software"), to deal in the Software without restriction, including
27473// without limitation the rights to use, copy, modify, merge, publish,
27474// distribute, sublicense, and/or sell copies of the Software, and to permit
27475// persons to whom the Software is furnished to do so, subject to the
27476// following conditions:
27477//
27478// The above copyright notice and this permission notice shall be included
27479// in all copies or substantial portions of the Software.
27480//
27481// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27482// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27483// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27484// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27485// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27486// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27487// USE OR OTHER DEALINGS IN THE SOFTWARE.
27488
27489module.exports = Stream;
27490
27491var EE = require('events').EventEmitter;
27492var inherits = require('inherits');
27493
27494inherits(Stream, EE);
27495Stream.Readable = require('readable-stream/readable.js');
27496Stream.Writable = require('readable-stream/writable.js');
27497Stream.Duplex = require('readable-stream/duplex.js');
27498Stream.Transform = require('readable-stream/transform.js');
27499Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 27500
8b095871
IC
27501// Backwards-compat with node 0.4.x
27502Stream.Stream = Stream;
ebd8d4e8 27503
ab78acc6 27504
ab78acc6 27505
8b095871
IC
27506// old-style streams. Note that the pipe method (the only relevant
27507// part of this class) is overridden in the Readable class.
ebd8d4e8 27508
8b095871
IC
27509function Stream() {
27510 EE.call(this);
27511}
ebd8d4e8 27512
8b095871
IC
27513Stream.prototype.pipe = function(dest, options) {
27514 var source = this;
ab78acc6 27515
8b095871
IC
27516 function ondata(chunk) {
27517 if (dest.writable) {
27518 if (false === dest.write(chunk) && source.pause) {
27519 source.pause();
27520 }
ab78acc6
IC
27521 }
27522 }
27523
8b095871
IC
27524 source.on('data', ondata);
27525
27526 function ondrain() {
27527 if (source.readable && source.resume) {
27528 source.resume();
27529 }
ab78acc6
IC
27530 }
27531
ab78acc6
IC
27532 dest.on('drain', ondrain);
27533
8b095871
IC
27534 // If the 'end' option is not supplied, dest.end() will be called when
27535 // source gets the 'end' or 'close' events. Only dest.end() once.
27536 if (!dest._isStdio && (!options || options.end !== false)) {
27537 source.on('end', onend);
27538 source.on('close', onclose);
ab78acc6
IC
27539 }
27540
8b095871
IC
27541 var didOnEnd = false;
27542 function onend() {
27543 if (didOnEnd) return;
27544 didOnEnd = true;
ab78acc6 27545
8b095871 27546 dest.end();
ab78acc6 27547 }
ab78acc6
IC
27548
27549
ab78acc6 27550 function onclose() {
8b095871
IC
27551 if (didOnEnd) return;
27552 didOnEnd = true;
ebd8d4e8 27553
8b095871 27554 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
27555 }
27556
8b095871
IC
27557 // don't leave dangling pipes when there are errors.
27558 function onerror(er) {
27559 cleanup();
27560 if (EE.listenerCount(this, 'error') === 0) {
27561 throw er; // Unhandled stream error in pipe.
27562 }
ebd8d4e8
IC
27563 }
27564
8b095871
IC
27565 source.on('error', onerror);
27566 dest.on('error', onerror);
ab78acc6 27567
8b095871
IC
27568 // remove all the event listeners that were added.
27569 function cleanup() {
27570 source.removeListener('data', ondata);
27571 dest.removeListener('drain', ondrain);
ab78acc6 27572
8b095871
IC
27573 source.removeListener('end', onend);
27574 source.removeListener('close', onclose);
ab78acc6 27575
8b095871
IC
27576 source.removeListener('error', onerror);
27577 dest.removeListener('error', onerror);
ab78acc6 27578
8b095871
IC
27579 source.removeListener('end', cleanup);
27580 source.removeListener('close', cleanup);
ab78acc6 27581
8b095871
IC
27582 dest.removeListener('close', cleanup);
27583 }
ab78acc6 27584
8b095871
IC
27585 source.on('end', cleanup);
27586 source.on('close', cleanup);
ab78acc6 27587
8b095871 27588 dest.on('close', cleanup);
ebd8d4e8 27589
8b095871 27590 dest.emit('pipe', source);
ab78acc6 27591
8b095871
IC
27592 // Allow for unix-like usage: A.pipe(B).pipe(C)
27593 return dest;
27594};
ab78acc6 27595
8b095871
IC
27596},{"events":7,"inherits":9,"readable-stream/duplex.js":14,"readable-stream/passthrough.js":21,"readable-stream/readable.js":22,"readable-stream/transform.js":23,"readable-stream/writable.js":24}],26:[function(require,module,exports){
27597// Copyright Joyent, Inc. and other Node contributors.
27598//
27599// Permission is hereby granted, free of charge, to any person obtaining a
27600// copy of this software and associated documentation files (the
27601// "Software"), to deal in the Software without restriction, including
27602// without limitation the rights to use, copy, modify, merge, publish,
27603// distribute, sublicense, and/or sell copies of the Software, and to permit
27604// persons to whom the Software is furnished to do so, subject to the
27605// following conditions:
27606//
27607// The above copyright notice and this permission notice shall be included
27608// in all copies or substantial portions of the Software.
27609//
27610// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27611// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27612// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27613// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27614// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27615// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27616// USE OR OTHER DEALINGS IN THE SOFTWARE.
27617
27618var Buffer = require('buffer').Buffer;
ebd8d4e8 27619
8b095871
IC
27620var isBufferEncoding = Buffer.isEncoding
27621 || function(encoding) {
27622 switch (encoding && encoding.toLowerCase()) {
27623 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;
27624 default: return false;
27625 }
27626 }
ab78acc6 27627
ab78acc6 27628
8b095871
IC
27629function assertEncoding(encoding) {
27630 if (encoding && !isBufferEncoding(encoding)) {
27631 throw new Error('Unknown encoding: ' + encoding);
27632 }
27633}
ebd8d4e8 27634
8b095871
IC
27635// StringDecoder provides an interface for efficiently splitting a series of
27636// buffers into a series of JS strings without breaking apart multi-byte
27637// characters. CESU-8 is handled as part of the UTF-8 encoding.
27638//
27639// @TODO Handling all encodings inside a single object makes it very difficult
27640// to reason about this code, so it should be split up in the future.
27641// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
27642// points as used by CESU-8.
27643var StringDecoder = exports.StringDecoder = function(encoding) {
27644 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
27645 assertEncoding(encoding);
27646 switch (this.encoding) {
27647 case 'utf8':
27648 // CESU-8 represents each of Surrogate Pair by 3-bytes
27649 this.surrogateSize = 3;
27650 break;
27651 case 'ucs2':
27652 case 'utf16le':
27653 // UTF-16 represents each of Surrogate Pair by 2-bytes
27654 this.surrogateSize = 2;
27655 this.detectIncompleteChar = utf16DetectIncompleteChar;
27656 break;
27657 case 'base64':
27658 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
27659 this.surrogateSize = 3;
27660 this.detectIncompleteChar = base64DetectIncompleteChar;
27661 break;
27662 default:
27663 this.write = passThroughWrite;
27664 return;
27665 }
27666
27667 // Enough space to store all bytes of a single character. UTF-8 needs 4
27668 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
27669 this.charBuffer = new Buffer(6);
27670 // Number of bytes received for the current incomplete multi-byte character.
27671 this.charReceived = 0;
27672 // Number of bytes expected for the current incomplete multi-byte character.
27673 this.charLength = 0;
ab78acc6
IC
27674};
27675
ab78acc6 27676
8b095871
IC
27677// write decodes the given buffer and returns it as JS string that is
27678// guaranteed to not contain any partial multi-byte characters. Any partial
27679// character found at the end of the buffer is buffered up, and will be
27680// returned when calling write again with the remaining bytes.
27681//
27682// Note: Converting a Buffer containing an orphan surrogate to a String
27683// currently works, but converting a String to a Buffer (via `new Buffer`, or
27684// Buffer#write) will replace incomplete surrogates with the unicode
27685// replacement character. See https://codereview.chromium.org/121173009/ .
27686StringDecoder.prototype.write = function(buffer) {
27687 var charStr = '';
27688 // if our last write ended with an incomplete multibyte character
27689 while (this.charLength) {
27690 // determine how many remaining bytes this buffer has to offer for this char
27691 var available = (buffer.length >= this.charLength - this.charReceived) ?
27692 this.charLength - this.charReceived :
27693 buffer.length;
ab78acc6 27694
8b095871
IC
27695 // add the new bytes to the char buffer
27696 buffer.copy(this.charBuffer, this.charReceived, 0, available);
27697 this.charReceived += available;
27698
27699 if (this.charReceived < this.charLength) {
27700 // still not enough chars in this buffer? wait for more ...
27701 return '';
ebd8d4e8 27702 }
ebd8d4e8 27703
8b095871
IC
27704 // remove bytes belonging to the current character from the buffer
27705 buffer = buffer.slice(available, buffer.length);
ab78acc6 27706
8b095871
IC
27707 // get the character that was split
27708 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
27709
27710 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27711 var charCode = charStr.charCodeAt(charStr.length - 1);
27712 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27713 this.charLength += this.surrogateSize;
27714 charStr = '';
27715 continue;
ab78acc6 27716 }
8b095871 27717 this.charReceived = this.charLength = 0;
ebd8d4e8 27718
8b095871
IC
27719 // if there are no more bytes in this buffer, just emit our char
27720 if (buffer.length === 0) {
27721 return charStr;
27722 }
27723 break;
ebd8d4e8 27724 }
ebd8d4e8 27725
8b095871
IC
27726 // determine and set charLength / charReceived
27727 this.detectIncompleteChar(buffer);
ebd8d4e8 27728
8b095871
IC
27729 var end = buffer.length;
27730 if (this.charLength) {
27731 // buffer the incomplete character bytes we got
27732 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
27733 end -= this.charReceived;
ab78acc6 27734 }
ebd8d4e8 27735
8b095871
IC
27736 charStr += buffer.toString(this.encoding, 0, end);
27737
27738 var end = charStr.length - 1;
27739 var charCode = charStr.charCodeAt(end);
27740 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
27741 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
27742 var size = this.surrogateSize;
27743 this.charLength += size;
27744 this.charReceived += size;
27745 this.charBuffer.copy(this.charBuffer, size, 0, size);
27746 buffer.copy(this.charBuffer, 0, 0, size);
27747 return charStr.substring(0, end);
ab78acc6 27748 }
ebd8d4e8 27749
8b095871
IC
27750 // or just emit the charStr
27751 return charStr;
27752};
ebd8d4e8 27753
8b095871
IC
27754// detectIncompleteChar determines if there is an incomplete UTF-8 character at
27755// the end of the given buffer. If so, it sets this.charLength to the byte
27756// length that character, and sets this.charReceived to the number of bytes
27757// that are available for this character.
27758StringDecoder.prototype.detectIncompleteChar = function(buffer) {
27759 // determine how many bytes we have to check at the end of this buffer
27760 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 27761
8b095871
IC
27762 // Figure out if one of the last i bytes of our buffer announces an
27763 // incomplete char.
27764 for (; i > 0; i--) {
27765 var c = buffer[buffer.length - i];
ebd8d4e8 27766
8b095871 27767 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 27768
8b095871
IC
27769 // 110XXXXX
27770 if (i == 1 && c >> 5 == 0x06) {
27771 this.charLength = 2;
27772 break;
ebd8d4e8 27773 }
ab78acc6 27774
8b095871
IC
27775 // 1110XXXX
27776 if (i <= 2 && c >> 4 == 0x0E) {
27777 this.charLength = 3;
27778 break;
27779 }
27780
27781 // 11110XXX
27782 if (i <= 3 && c >> 3 == 0x1E) {
27783 this.charLength = 4;
27784 break;
ebd8d4e8
IC
27785 }
27786 }
8b095871
IC
27787 this.charReceived = i;
27788};
ab78acc6 27789
8b095871
IC
27790StringDecoder.prototype.end = function(buffer) {
27791 var res = '';
27792 if (buffer && buffer.length)
27793 res = this.write(buffer);
ab78acc6 27794
8b095871
IC
27795 if (this.charReceived) {
27796 var cr = this.charReceived;
27797 var buf = this.charBuffer;
27798 var enc = this.encoding;
27799 res += buf.slice(0, cr).toString(enc);
27800 }
ab78acc6 27801
8b095871 27802 return res;
ab78acc6
IC
27803};
27804
8b095871
IC
27805function passThroughWrite(buffer) {
27806 return buffer.toString(this.encoding);
27807}
ab78acc6 27808
8b095871
IC
27809function utf16DetectIncompleteChar(buffer) {
27810 this.charReceived = buffer.length % 2;
27811 this.charLength = this.charReceived ? 2 : 0;
27812}
ab78acc6 27813
8b095871
IC
27814function base64DetectIncompleteChar(buffer) {
27815 this.charReceived = buffer.length % 3;
27816 this.charLength = this.charReceived ? 3 : 0;
27817}
ab78acc6 27818
8b095871
IC
27819},{"buffer":5}],27:[function(require,module,exports){
27820(function (global){
ab78acc6 27821
8b095871
IC
27822/**
27823 * Module exports.
27824 */
ebd8d4e8 27825
8b095871 27826module.exports = deprecate;
ebd8d4e8 27827
8b095871
IC
27828/**
27829 * Mark that a method should not be used.
27830 * Returns a modified function which warns once by default.
27831 *
27832 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
27833 *
27834 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
27835 * will throw an Error when invoked.
27836 *
27837 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
27838 * will invoke `console.trace()` instead of `console.error()`.
27839 *
27840 * @param {Function} fn - the function to deprecate
27841 * @param {String} msg - the string to print to the console when `fn` is invoked
27842 * @returns {Function} a new "deprecated" version of `fn`
27843 * @api public
27844 */
ebd8d4e8 27845
8b095871
IC
27846function deprecate (fn, msg) {
27847 if (config('noDeprecation')) {
27848 return fn;
27849 }
ebd8d4e8 27850
8b095871
IC
27851 var warned = false;
27852 function deprecated() {
27853 if (!warned) {
27854 if (config('throwDeprecation')) {
27855 throw new Error(msg);
27856 } else if (config('traceDeprecation')) {
27857 console.trace(msg);
27858 } else {
27859 console.warn(msg);
ab78acc6 27860 }
8b095871 27861 warned = true;
ab78acc6 27862 }
8b095871 27863 return fn.apply(this, arguments);
ebd8d4e8
IC
27864 }
27865
8b095871 27866 return deprecated;
ebd8d4e8
IC
27867}
27868
8b095871
IC
27869/**
27870 * Checks `localStorage` for boolean values for the given `name`.
27871 *
27872 * @param {String} name
27873 * @returns {Boolean}
27874 * @api private
27875 */
ebd8d4e8 27876
8b095871
IC
27877function config (name) {
27878 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
27879 try {
27880 if (!global.localStorage) return false;
27881 } catch (_) {
27882 return false;
ab78acc6 27883 }
8b095871
IC
27884 var val = global.localStorage[name];
27885 if (null == val) return false;
27886 return String(val).toLowerCase() === 'true';
ebd8d4e8 27887}
ebd8d4e8 27888
8b095871
IC
27889}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
27890},{}],28:[function(require,module,exports){
27891arguments[4][9][0].apply(exports,arguments)
27892},{"dup":9}],29:[function(require,module,exports){
27893module.exports = function isBuffer(arg) {
27894 return arg && typeof arg === 'object'
27895 && typeof arg.copy === 'function'
27896 && typeof arg.fill === 'function'
27897 && typeof arg.readUInt8 === 'function';
ebd8d4e8 27898}
8b095871
IC
27899},{}],30:[function(require,module,exports){
27900(function (process,global){
ab78acc6
IC
27901// Copyright Joyent, Inc. and other Node contributors.
27902//
27903// Permission is hereby granted, free of charge, to any person obtaining a
27904// copy of this software and associated documentation files (the
27905// "Software"), to deal in the Software without restriction, including
27906// without limitation the rights to use, copy, modify, merge, publish,
27907// distribute, sublicense, and/or sell copies of the Software, and to permit
27908// persons to whom the Software is furnished to do so, subject to the
27909// following conditions:
27910//
27911// The above copyright notice and this permission notice shall be included
27912// in all copies or substantial portions of the Software.
27913//
27914// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
27915// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
27916// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
27917// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
27918// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
27919// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
27920// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 27921
8b095871
IC
27922var formatRegExp = /%[sdj%]/g;
27923exports.format = function(f) {
27924 if (!isString(f)) {
27925 var objects = [];
27926 for (var i = 0; i < arguments.length; i++) {
27927 objects.push(inspect(arguments[i]));
27928 }
27929 return objects.join(' ');
27930 }
ebd8d4e8 27931
8b095871
IC
27932 var i = 1;
27933 var args = arguments;
27934 var len = args.length;
27935 var str = String(f).replace(formatRegExp, function(x) {
27936 if (x === '%%') return '%';
27937 if (i >= len) return x;
27938 switch (x) {
27939 case '%s': return String(args[i++]);
27940 case '%d': return Number(args[i++]);
27941 case '%j':
27942 try {
27943 return JSON.stringify(args[i++]);
27944 } catch (_) {
27945 return '[Circular]';
27946 }
27947 default:
27948 return x;
27949 }
27950 });
27951 for (var x = args[i]; i < len; x = args[++i]) {
27952 if (isNull(x) || !isObject(x)) {
27953 str += ' ' + x;
27954 } else {
27955 str += ' ' + inspect(x);
27956 }
27957 }
27958 return str;
27959};
ebd8d4e8 27960
ebd8d4e8 27961
8b095871
IC
27962// Mark that a method should not be used.
27963// Returns a modified function which warns once by default.
27964// If --no-deprecation is set, then it is a no-op.
27965exports.deprecate = function(fn, msg) {
27966 // Allow for deprecating things in the process of starting up.
27967 if (isUndefined(global.process)) {
27968 return function() {
27969 return exports.deprecate(fn, msg).apply(this, arguments);
27970 };
27971 }
27972
27973 if (process.noDeprecation === true) {
27974 return fn;
27975 }
27976
27977 var warned = false;
27978 function deprecated() {
27979 if (!warned) {
27980 if (process.throwDeprecation) {
27981 throw new Error(msg);
27982 } else if (process.traceDeprecation) {
27983 console.trace(msg);
27984 } else {
27985 console.error(msg);
27986 }
27987 warned = true;
27988 }
27989 return fn.apply(this, arguments);
27990 }
27991
27992 return deprecated;
27993};
ebd8d4e8 27994
ab78acc6 27995
8b095871
IC
27996var debugs = {};
27997var debugEnviron;
27998exports.debuglog = function(set) {
27999 if (isUndefined(debugEnviron))
28000 debugEnviron = process.env.NODE_DEBUG || '';
28001 set = set.toUpperCase();
28002 if (!debugs[set]) {
28003 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
28004 var pid = process.pid;
28005 debugs[set] = function() {
28006 var msg = exports.format.apply(exports, arguments);
28007 console.error('%s %d: %s', set, pid, msg);
28008 };
28009 } else {
28010 debugs[set] = function() {};
28011 }
28012 }
28013 return debugs[set];
28014};
ab78acc6
IC
28015
28016
8b095871
IC
28017/**
28018 * Echos the value of a value. Trys to print the value out
28019 * in the best way possible given the different types.
28020 *
28021 * @param {Object} obj The object to print out.
28022 * @param {Object} opts Optional options object that alters the output.
28023 */
28024/* legacy: obj, showHidden, depth, colors*/
28025function inspect(obj, opts) {
28026 // default options
28027 var ctx = {
28028 seen: [],
28029 stylize: stylizeNoColor
ab78acc6 28030 };
8b095871
IC
28031 // legacy...
28032 if (arguments.length >= 3) ctx.depth = arguments[2];
28033 if (arguments.length >= 4) ctx.colors = arguments[3];
28034 if (isBoolean(opts)) {
28035 // legacy...
28036 ctx.showHidden = opts;
28037 } else if (opts) {
28038 // got an "options" object
28039 exports._extend(ctx, opts);
28040 }
28041 // set default options
28042 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
28043 if (isUndefined(ctx.depth)) ctx.depth = 2;
28044 if (isUndefined(ctx.colors)) ctx.colors = false;
28045 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
28046 if (ctx.colors) ctx.stylize = stylizeWithColor;
28047 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 28048}
8b095871 28049exports.inspect = inspect;
ebd8d4e8 28050
ab78acc6 28051
8b095871
IC
28052// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
28053inspect.colors = {
28054 'bold' : [1, 22],
28055 'italic' : [3, 23],
28056 'underline' : [4, 24],
28057 'inverse' : [7, 27],
28058 'white' : [37, 39],
28059 'grey' : [90, 39],
28060 'black' : [30, 39],
28061 'blue' : [34, 39],
28062 'cyan' : [36, 39],
28063 'green' : [32, 39],
28064 'magenta' : [35, 39],
28065 'red' : [31, 39],
28066 'yellow' : [33, 39]
28067};
ab78acc6 28068
8b095871
IC
28069// Don't use 'blue' not visible on cmd.exe
28070inspect.styles = {
28071 'special': 'cyan',
28072 'number': 'yellow',
28073 'boolean': 'yellow',
28074 'undefined': 'grey',
28075 'null': 'bold',
28076 'string': 'green',
28077 'date': 'magenta',
28078 // "name": intentionally not styling
28079 'regexp': 'red'
28080};
ab78acc6 28081
ab78acc6 28082
8b095871
IC
28083function stylizeWithColor(str, styleType) {
28084 var style = inspect.styles[styleType];
ab78acc6 28085
8b095871
IC
28086 if (style) {
28087 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
28088 '\u001b[' + inspect.colors[style][1] + 'm';
28089 } else {
28090 return str;
ab78acc6 28091 }
ebd8d4e8 28092}
ebd8d4e8 28093
ab78acc6 28094
8b095871
IC
28095function stylizeNoColor(str, styleType) {
28096 return str;
28097}
ab78acc6 28098
ab78acc6 28099
8b095871
IC
28100function arrayToHash(array) {
28101 var hash = {};
ab78acc6 28102
8b095871
IC
28103 array.forEach(function(val, idx) {
28104 hash[val] = true;
ab78acc6 28105 });
ebd8d4e8 28106
8b095871
IC
28107 return hash;
28108}
ab78acc6 28109
ab78acc6 28110
8b095871
IC
28111function formatValue(ctx, value, recurseTimes) {
28112 // Provide a hook for user-specified inspect functions.
28113 // Check that value is an object with an inspect function on it
28114 if (ctx.customInspect &&
28115 value &&
28116 isFunction(value.inspect) &&
28117 // Filter out the util module, it's inspect function is special
28118 value.inspect !== exports.inspect &&
28119 // Also filter out any prototype objects using the circular check.
28120 !(value.constructor && value.constructor.prototype === value)) {
28121 var ret = value.inspect(recurseTimes, ctx);
28122 if (!isString(ret)) {
28123 ret = formatValue(ctx, ret, recurseTimes);
28124 }
28125 return ret;
ab78acc6 28126 }
ebd8d4e8 28127
8b095871
IC
28128 // Primitive types cannot have properties
28129 var primitive = formatPrimitive(ctx, value);
28130 if (primitive) {
28131 return primitive;
ab78acc6 28132 }
ebd8d4e8 28133
8b095871
IC
28134 // Look up the keys of the object.
28135 var keys = Object.keys(value);
28136 var visibleKeys = arrayToHash(keys);
ebd8d4e8 28137
8b095871
IC
28138 if (ctx.showHidden) {
28139 keys = Object.getOwnPropertyNames(value);
28140 }
ebd8d4e8 28141
8b095871
IC
28142 // IE doesn't make error fields non-enumerable
28143 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
28144 if (isError(value)
28145 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
28146 return formatError(value);
28147 }
ebd8d4e8 28148
8b095871
IC
28149 // Some type of object without properties can be shortcutted.
28150 if (keys.length === 0) {
28151 if (isFunction(value)) {
28152 var name = value.name ? ': ' + value.name : '';
28153 return ctx.stylize('[Function' + name + ']', 'special');
28154 }
28155 if (isRegExp(value)) {
28156 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28157 }
28158 if (isDate(value)) {
28159 return ctx.stylize(Date.prototype.toString.call(value), 'date');
28160 }
28161 if (isError(value)) {
28162 return formatError(value);
28163 }
28164 }
ab78acc6 28165
8b095871 28166 var base = '', array = false, braces = ['{', '}'];
ab78acc6 28167
8b095871
IC
28168 // Make Array say that they are Array
28169 if (isArray(value)) {
28170 array = true;
28171 braces = ['[', ']'];
28172 }
ebd8d4e8 28173
8b095871
IC
28174 // Make functions say that they are functions
28175 if (isFunction(value)) {
28176 var n = value.name ? ': ' + value.name : '';
28177 base = ' [Function' + n + ']';
28178 }
ebd8d4e8 28179
8b095871
IC
28180 // Make RegExps say that they are RegExps
28181 if (isRegExp(value)) {
28182 base = ' ' + RegExp.prototype.toString.call(value);
28183 }
ebd8d4e8 28184
8b095871
IC
28185 // Make dates with properties first say the date
28186 if (isDate(value)) {
28187 base = ' ' + Date.prototype.toUTCString.call(value);
28188 }
ebd8d4e8 28189
8b095871
IC
28190 // Make error with message first say the error
28191 if (isError(value)) {
28192 base = ' ' + formatError(value);
28193 }
ebd8d4e8 28194
8b095871
IC
28195 if (keys.length === 0 && (!array || value.length == 0)) {
28196 return braces[0] + base + braces[1];
28197 }
ebd8d4e8 28198
8b095871
IC
28199 if (recurseTimes < 0) {
28200 if (isRegExp(value)) {
28201 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
28202 } else {
28203 return ctx.stylize('[Object]', 'special');
28204 }
28205 }
ebd8d4e8 28206
8b095871 28207 ctx.seen.push(value);
ebd8d4e8 28208
8b095871
IC
28209 var output;
28210 if (array) {
28211 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
28212 } else {
28213 output = keys.map(function(key) {
28214 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
28215 });
28216 }
ebd8d4e8 28217
8b095871 28218 ctx.seen.pop();
ebd8d4e8 28219
8b095871 28220 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
28221}
28222
ebd8d4e8 28223
8b095871
IC
28224function formatPrimitive(ctx, value) {
28225 if (isUndefined(value))
28226 return ctx.stylize('undefined', 'undefined');
28227 if (isString(value)) {
28228 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
28229 .replace(/'/g, "\\'")
28230 .replace(/\\"/g, '"') + '\'';
28231 return ctx.stylize(simple, 'string');
28232 }
28233 if (isNumber(value))
28234 return ctx.stylize('' + value, 'number');
28235 if (isBoolean(value))
28236 return ctx.stylize('' + value, 'boolean');
28237 // For some reason typeof null is "object", so special case here.
28238 if (isNull(value))
28239 return ctx.stylize('null', 'null');
28240}
ebd8d4e8 28241
ebd8d4e8 28242
8b095871
IC
28243function formatError(value) {
28244 return '[' + Error.prototype.toString.call(value) + ']';
28245}
ebd8d4e8 28246
ebd8d4e8 28247
8b095871
IC
28248function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
28249 var output = [];
28250 for (var i = 0, l = value.length; i < l; ++i) {
28251 if (hasOwnProperty(value, String(i))) {
28252 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28253 String(i), true));
28254 } else {
28255 output.push('');
28256 }
28257 }
28258 keys.forEach(function(key) {
28259 if (!key.match(/^\d+$/)) {
28260 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
28261 key, true));
28262 }
28263 });
28264 return output;
28265}
ebd8d4e8 28266
ebd8d4e8 28267
8b095871
IC
28268function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
28269 var name, str, desc;
28270 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
28271 if (desc.get) {
28272 if (desc.set) {
28273 str = ctx.stylize('[Getter/Setter]', 'special');
28274 } else {
28275 str = ctx.stylize('[Getter]', 'special');
28276 }
28277 } else {
28278 if (desc.set) {
28279 str = ctx.stylize('[Setter]', 'special');
28280 }
28281 }
28282 if (!hasOwnProperty(visibleKeys, key)) {
28283 name = '[' + key + ']';
28284 }
28285 if (!str) {
28286 if (ctx.seen.indexOf(desc.value) < 0) {
28287 if (isNull(recurseTimes)) {
28288 str = formatValue(ctx, desc.value, null);
28289 } else {
28290 str = formatValue(ctx, desc.value, recurseTimes - 1);
28291 }
28292 if (str.indexOf('\n') > -1) {
28293 if (array) {
28294 str = str.split('\n').map(function(line) {
28295 return ' ' + line;
28296 }).join('\n').substr(2);
28297 } else {
28298 str = '\n' + str.split('\n').map(function(line) {
28299 return ' ' + line;
28300 }).join('\n');
28301 }
28302 }
28303 } else {
28304 str = ctx.stylize('[Circular]', 'special');
28305 }
28306 }
28307 if (isUndefined(name)) {
28308 if (array && key.match(/^\d+$/)) {
28309 return str;
28310 }
28311 name = JSON.stringify('' + key);
28312 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
28313 name = name.substr(1, name.length - 2);
28314 name = ctx.stylize(name, 'name');
28315 } else {
28316 name = name.replace(/'/g, "\\'")
28317 .replace(/\\"/g, '"')
28318 .replace(/(^"|"$)/g, "'");
28319 name = ctx.stylize(name, 'string');
28320 }
28321 }
ebd8d4e8 28322
8b095871
IC
28323 return name + ': ' + str;
28324}
ebd8d4e8 28325
ebd8d4e8 28326
8b095871
IC
28327function reduceToSingleString(output, base, braces) {
28328 var numLinesEst = 0;
28329 var length = output.reduce(function(prev, cur) {
28330 numLinesEst++;
28331 if (cur.indexOf('\n') >= 0) numLinesEst++;
28332 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
28333 }, 0);
ebd8d4e8 28334
8b095871
IC
28335 if (length > 60) {
28336 return braces[0] +
28337 (base === '' ? '' : base + '\n ') +
28338 ' ' +
28339 output.join(',\n ') +
28340 ' ' +
28341 braces[1];
28342 }
ebd8d4e8 28343
8b095871
IC
28344 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
28345}
ebd8d4e8 28346
ebd8d4e8 28347
8b095871
IC
28348// NOTE: These type checking functions intentionally don't use `instanceof`
28349// because it is fragile and can be easily faked with `Object.create()`.
28350function isArray(ar) {
28351 return Array.isArray(ar);
28352}
28353exports.isArray = isArray;
ebd8d4e8 28354
8b095871
IC
28355function isBoolean(arg) {
28356 return typeof arg === 'boolean';
28357}
28358exports.isBoolean = isBoolean;
ebd8d4e8 28359
8b095871
IC
28360function isNull(arg) {
28361 return arg === null;
28362}
28363exports.isNull = isNull;
ebd8d4e8 28364
8b095871
IC
28365function isNullOrUndefined(arg) {
28366 return arg == null;
ebd8d4e8 28367}
8b095871 28368exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 28369
8b095871
IC
28370function isNumber(arg) {
28371 return typeof arg === 'number';
28372}
28373exports.isNumber = isNumber;
ebd8d4e8 28374
8b095871
IC
28375function isString(arg) {
28376 return typeof arg === 'string';
28377}
28378exports.isString = isString;
ebd8d4e8 28379
8b095871
IC
28380function isSymbol(arg) {
28381 return typeof arg === 'symbol';
28382}
28383exports.isSymbol = isSymbol;
ebd8d4e8 28384
8b095871
IC
28385function isUndefined(arg) {
28386 return arg === void 0;
28387}
28388exports.isUndefined = isUndefined;
ebd8d4e8 28389
8b095871
IC
28390function isRegExp(re) {
28391 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 28392}
8b095871 28393exports.isRegExp = isRegExp;
ebd8d4e8 28394
8b095871
IC
28395function isObject(arg) {
28396 return typeof arg === 'object' && arg !== null;
28397}
28398exports.isObject = isObject;
ebd8d4e8 28399
8b095871
IC
28400function isDate(d) {
28401 return isObject(d) && objectToString(d) === '[object Date]';
28402}
28403exports.isDate = isDate;
ebd8d4e8 28404
8b095871
IC
28405function isError(e) {
28406 return isObject(e) &&
28407 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 28408}
8b095871 28409exports.isError = isError;
ebd8d4e8 28410
8b095871
IC
28411function isFunction(arg) {
28412 return typeof arg === 'function';
ebd8d4e8 28413}
8b095871 28414exports.isFunction = isFunction;
ebd8d4e8 28415
8b095871
IC
28416function isPrimitive(arg) {
28417 return arg === null ||
28418 typeof arg === 'boolean' ||
28419 typeof arg === 'number' ||
28420 typeof arg === 'string' ||
28421 typeof arg === 'symbol' || // ES6 symbol
28422 typeof arg === 'undefined';
28423}
28424exports.isPrimitive = isPrimitive;
ebd8d4e8 28425
8b095871 28426exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 28427
8b095871
IC
28428function objectToString(o) {
28429 return Object.prototype.toString.call(o);
28430}
ab78acc6 28431
ab78acc6 28432
8b095871
IC
28433function pad(n) {
28434 return n < 10 ? '0' + n.toString(10) : n.toString(10);
28435}
ebd8d4e8 28436
ab78acc6 28437
8b095871
IC
28438var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
28439 'Oct', 'Nov', 'Dec'];
ab78acc6 28440
8b095871
IC
28441// 26 Feb 16:19:34
28442function timestamp() {
28443 var d = new Date();
28444 var time = [pad(d.getHours()),
28445 pad(d.getMinutes()),
28446 pad(d.getSeconds())].join(':');
28447 return [d.getDate(), months[d.getMonth()], time].join(' ');
28448}
28449
28450
28451// log is just a thin wrapper to console.log that prepends a timestamp
28452exports.log = function() {
28453 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 28454};
ebd8d4e8 28455
ebd8d4e8 28456
8b095871
IC
28457/**
28458 * Inherit the prototype methods from one constructor into another.
28459 *
28460 * The Function.prototype.inherits from lang.js rewritten as a standalone
28461 * function (not on Function.prototype). NOTE: If this file is to be loaded
28462 * during bootstrapping this function needs to be rewritten using some native
28463 * functions as prototype setup using normal JavaScript does not work as
28464 * expected during bootstrapping (see mirror.js in r114903).
28465 *
28466 * @param {function} ctor Constructor function which needs to inherit the
28467 * prototype.
28468 * @param {function} superCtor Constructor function to inherit prototype from.
28469 */
28470exports.inherits = require('inherits');
ebd8d4e8 28471
8b095871
IC
28472exports._extend = function(origin, add) {
28473 // Don't do anything if add isn't an object
28474 if (!add || !isObject(add)) return origin;
28475
28476 var keys = Object.keys(add);
28477 var i = keys.length;
28478 while (i--) {
28479 origin[keys[i]] = add[keys[i]];
ebd8d4e8 28480 }
8b095871 28481 return origin;
ab78acc6 28482};
ebd8d4e8 28483
8b095871
IC
28484function hasOwnProperty(obj, prop) {
28485 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
28486}
28487
8b095871
IC
28488}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
28489},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
28490(function (Buffer){
28491const createKeccakHash = require('keccak')
28492const secp256k1 = require('secp256k1')
28493const assert = require('assert')
28494const rlp = require('rlp')
28495const BN = require('bn.js')
28496const createHash = require('create-hash')
28497Object.assign(exports, require('ethjs-util'))
ab78acc6 28498
8b095871
IC
28499/**
28500 * the max integer that this VM can handle (a ```BN```)
28501 * @var {BN} MAX_INTEGER
28502 */
28503exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 28504
8b095871
IC
28505/**
28506 * 2^256 (a ```BN```)
28507 * @var {BN} TWO_POW256
28508 */
28509exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 28510
8b095871
IC
28511/**
28512 * SHA3-256 hash of null (a ```String```)
28513 * @var {String} SHA3_NULL_S
28514 */
28515exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 28516
8b095871
IC
28517/**
28518 * SHA3-256 hash of null (a ```Buffer```)
28519 * @var {Buffer} SHA3_NULL
28520 */
28521exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 28522
8b095871
IC
28523/**
28524 * SHA3-256 of an RLP of an empty array (a ```String```)
28525 * @var {String} SHA3_RLP_ARRAY_S
28526 */
28527exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 28528
8b095871
IC
28529/**
28530 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
28531 * @var {Buffer} SHA3_RLP_ARRAY
28532 */
28533exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 28534
8b095871
IC
28535/**
28536 * SHA3-256 hash of the RLP of null (a ```String```)
28537 * @var {String} SHA3_RLP_S
28538 */
28539exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 28540
8b095871
IC
28541/**
28542 * SHA3-256 hash of the RLP of null (a ```Buffer```)
28543 * @var {Buffer} SHA3_RLP
28544 */
28545exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 28546
8b095871
IC
28547/**
28548 * [`BN`](https://github.com/indutny/bn.js)
28549 * @var {Function}
28550 */
28551exports.BN = BN
ebd8d4e8 28552
8b095871
IC
28553/**
28554 * [`rlp`](https://github.com/ethereumjs/rlp)
28555 * @var {Function}
28556 */
28557exports.rlp = rlp
ebd8d4e8 28558
8b095871
IC
28559/**
28560 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
28561 * @var {Object}
28562 */
28563exports.secp256k1 = secp256k1
ab78acc6 28564
8b095871
IC
28565/**
28566 * Returns a buffer filled with 0s
28567 * @method zeros
28568 * @param {Number} bytes the number of bytes the buffer should be
28569 * @return {Buffer}
28570 */
28571exports.zeros = function (bytes) {
28572 return Buffer.allocUnsafe(bytes).fill(0)
28573}
28574
28575/**
28576 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28577 * Or it truncates the beginning if it exceeds.
28578 * @method lsetLength
28579 * @param {Buffer|Array} msg the value to pad
28580 * @param {Number} length the number of bytes the output should be
28581 * @param {Boolean} [right=false] whether to start padding form the left or right
28582 * @return {Buffer|Array}
28583 */
28584exports.setLengthLeft = exports.setLength = function (msg, length, right) {
28585 var buf = exports.zeros(length)
28586 msg = exports.toBuffer(msg)
28587 if (right) {
28588 if (msg.length < length) {
28589 msg.copy(buf)
28590 return buf
28591 }
28592 return msg.slice(0, length)
28593 } else {
28594 if (msg.length < length) {
28595 msg.copy(buf, length - msg.length)
28596 return buf
ebd8d4e8 28597 }
8b095871 28598 return msg.slice(-length)
ebd8d4e8
IC
28599 }
28600}
28601
8b095871
IC
28602/**
28603 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
28604 * Or it truncates the beginning if it exceeds.
28605 * @param {Buffer|Array} msg the value to pad
28606 * @param {Number} length the number of bytes the output should be
28607 * @return {Buffer|Array}
28608 */
28609exports.setLengthRight = function (msg, length) {
28610 return exports.setLength(msg, length, true)
ab78acc6
IC
28611}
28612
8b095871
IC
28613/**
28614 * Trims leading zeros from a `Buffer` or an `Array`
28615 * @param {Buffer|Array|String} a
28616 * @return {Buffer|Array|String}
28617 */
28618exports.unpad = exports.stripZeros = function (a) {
28619 a = exports.stripHexPrefix(a)
28620 var first = a[0]
28621 while (a.length > 0 && first.toString() === '0') {
28622 a = a.slice(1)
28623 first = a[0]
28624 }
28625 return a
28626}
28627/**
28628 * Attempts to turn a value into a `Buffer`. As input it supports `Buffer`, `String`, `Number`, null/undefined, `BN` and other objects with a `toArray()` method.
28629 * @param {*} v the value
28630 */
28631exports.toBuffer = function (v) {
28632 if (!Buffer.isBuffer(v)) {
28633 if (Array.isArray(v)) {
28634 v = Buffer.from(v)
28635 } else if (typeof v === 'string') {
28636 if (exports.isHexPrefixed(v)) {
28637 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
28638 } else {
28639 v = Buffer.from(v)
28640 }
28641 } else if (typeof v === 'number') {
28642 v = exports.intToBuffer(v)
28643 } else if (v === null || v === undefined) {
28644 v = Buffer.allocUnsafe(0)
28645 } else if (v.toArray) {
28646 // converts a BN to a Buffer
28647 v = Buffer.from(v.toArray())
28648 } else {
28649 throw new Error('invalid type')
28650 }
ebd8d4e8 28651 }
8b095871 28652 return v
ebd8d4e8
IC
28653}
28654
8b095871
IC
28655/**
28656 * Converts a `Buffer` to a `Number`
28657 * @param {Buffer} buf
28658 * @return {Number}
28659 * @throws If the input number exceeds 53 bits.
28660 */
28661exports.bufferToInt = function (buf) {
28662 return new BN(exports.toBuffer(buf)).toNumber()
28663}
ebd8d4e8 28664
8b095871
IC
28665/**
28666 * Converts a `Buffer` into a hex `String`
28667 * @param {Buffer} buf
28668 * @return {String}
28669 */
28670exports.bufferToHex = function (buf) {
28671 buf = exports.toBuffer(buf)
28672 return '0x' + buf.toString('hex')
28673}
ab78acc6 28674
8b095871
IC
28675/**
28676 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
28677 * @param {Buffer} num
28678 * @return {BN}
28679 */
28680exports.fromSigned = function (num) {
28681 return new BN(num).fromTwos(256)
28682}
ab78acc6 28683
8b095871
IC
28684/**
28685 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
28686 * @param {BN} num
28687 * @return {Buffer}
28688 */
28689exports.toUnsigned = function (num) {
28690 return Buffer.from(num.toTwos(256).toArray())
28691}
ab78acc6 28692
8b095871
IC
28693/**
28694 * Creates SHA-3 hash of the input
28695 * @param {Buffer|Array|String|Number} a the input data
28696 * @param {Number} [bits=256] the SHA width
28697 * @return {Buffer}
28698 */
28699exports.sha3 = function (a, bits) {
28700 a = exports.toBuffer(a)
28701 if (!bits) bits = 256
ab78acc6 28702
8b095871
IC
28703 return createKeccakHash('keccak' + bits).update(a).digest()
28704}
ab78acc6 28705
8b095871
IC
28706/**
28707 * Creates SHA256 hash of the input
28708 * @param {Buffer|Array|String|Number} a the input data
28709 * @return {Buffer}
28710 */
28711exports.sha256 = function (a) {
28712 a = exports.toBuffer(a)
28713 return createHash('sha256').update(a).digest()
28714}
ab78acc6 28715
8b095871
IC
28716/**
28717 * Creates RIPEMD160 hash of the input
28718 * @param {Buffer|Array|String|Number} a the input data
28719 * @param {Boolean} padded whether it should be padded to 256 bits or not
28720 * @return {Buffer}
28721 */
28722exports.ripemd160 = function (a, padded) {
28723 a = exports.toBuffer(a)
28724 var hash = createHash('rmd160').update(a).digest()
28725 if (padded === true) {
28726 return exports.setLength(hash, 32)
28727 } else {
28728 return hash
ebd8d4e8 28729 }
8b095871 28730}
ebd8d4e8 28731
8b095871
IC
28732/**
28733 * Creates SHA-3 hash of the RLP encoded version of the input
28734 * @param {Buffer|Array|String|Number} a the input data
28735 * @return {Buffer}
28736 */
28737exports.rlphash = function (a) {
28738 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
28739}
28740
8b095871
IC
28741/**
28742 * Checks if the private key satisfies the rules of the curve secp256k1.
28743 * @param {Buffer} privateKey
28744 * @return {Boolean}
28745 */
28746exports.isValidPrivate = function (privateKey) {
28747 return secp256k1.privateKeyVerify(privateKey)
28748}
ebd8d4e8 28749
8b095871
IC
28750/**
28751 * Checks if the public key satisfies the rules of the curve secp256k1
28752 * and the requirements of Ethereum.
28753 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
28754 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28755 * @return {Boolean}
28756 */
28757exports.isValidPublic = function (publicKey, sanitize) {
28758 if (publicKey.length === 64) {
28759 // Convert to SEC1 for secp256k1
28760 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
28761 }
ebd8d4e8 28762
8b095871
IC
28763 if (!sanitize) {
28764 return false
28765 }
ebd8d4e8 28766
8b095871
IC
28767 return secp256k1.publicKeyVerify(publicKey)
28768}
ebd8d4e8 28769
8b095871
IC
28770/**
28771 * Returns the ethereum address of a given public key.
28772 * Accepts "Ethereum public keys" and SEC1 encoded keys.
28773 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
28774 * @param {Boolean} [sanitize=false] Accept public keys in other formats
28775 * @return {Buffer}
28776 */
28777exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
28778 pubKey = exports.toBuffer(pubKey)
28779 if (sanitize && (pubKey.length !== 64)) {
28780 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 28781 }
8b095871
IC
28782 assert(pubKey.length === 64)
28783 // Only take the lower 160bits of the hash
28784 return exports.sha3(pubKey).slice(-20)
28785}
ebd8d4e8 28786
8b095871
IC
28787/**
28788 * Returns the ethereum public key of a given private key
28789 * @param {Buffer} privateKey A private key must be 256 bits wide
28790 * @return {Buffer}
28791 */
28792var privateToPublic = exports.privateToPublic = function (privateKey) {
28793 privateKey = exports.toBuffer(privateKey)
28794 // skip the type flag and use the X, Y points
28795 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
28796}
ab78acc6 28797
8b095871
IC
28798/**
28799 * Converts a public key to the Ethereum format.
28800 * @param {Buffer} publicKey
28801 * @return {Buffer}
28802 */
28803exports.importPublic = function (publicKey) {
28804 publicKey = exports.toBuffer(publicKey)
28805 if (publicKey.length !== 64) {
28806 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 28807 }
8b095871
IC
28808 return publicKey
28809}
ab78acc6 28810
8b095871
IC
28811/**
28812 * ECDSA sign
28813 * @param {Buffer} msgHash
28814 * @param {Buffer} privateKey
28815 * @return {Object}
28816 */
28817exports.ecsign = function (msgHash, privateKey) {
28818 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 28819
8b095871
IC
28820 var ret = {}
28821 ret.r = sig.signature.slice(0, 32)
28822 ret.s = sig.signature.slice(32, 64)
28823 ret.v = sig.recovery + 27
28824 return ret
ebd8d4e8
IC
28825}
28826
8b095871
IC
28827/**
28828 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
28829 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
28830 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
28831 * used to produce the signature.
28832 * @param message
28833 * @returns {Buffer} hash
28834 */
28835exports.hashPersonalMessage = function (message) {
28836 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
28837 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
28838}
28839
8b095871
IC
28840/**
28841 * ECDSA public key recovery from signature
28842 * @param {Buffer} msgHash
28843 * @param {Number} v
28844 * @param {Buffer} r
28845 * @param {Buffer} s
28846 * @return {Buffer} publicKey
28847 */
28848exports.ecrecover = function (msgHash, v, r, s) {
28849 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
28850 var recovery = v - 27
28851 if (recovery !== 0 && recovery !== 1) {
28852 throw new Error('Invalid signature v value')
ab78acc6 28853 }
8b095871
IC
28854 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
28855 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 28856}
ebd8d4e8 28857
8b095871
IC
28858/**
28859 * Convert signature parameters into the format of `eth_sign` RPC method
28860 * @param {Number} v
28861 * @param {Buffer} r
28862 * @param {Buffer} s
28863 * @return {String} sig
28864 */
28865exports.toRpcSig = function (v, r, s) {
28866 // NOTE: with potential introduction of chainId this might need to be updated
28867 if (v !== 27 && v !== 28) {
28868 throw new Error('Invalid recovery id')
28869 }
28870
28871 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
28872 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
28873 return exports.bufferToHex(Buffer.concat([
28874 exports.setLengthLeft(r, 32),
28875 exports.setLengthLeft(s, 32),
28876 exports.toBuffer(v - 27)
28877 ]))
ebd8d4e8
IC
28878}
28879
8b095871
IC
28880/**
28881 * Convert signature format of the `eth_sign` RPC method to signature parameters
28882 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
28883 * @param {String} sig
28884 * @return {Object}
28885 */
28886exports.fromRpcSig = function (sig) {
28887 sig = exports.toBuffer(sig)
ebd8d4e8 28888
8b095871
IC
28889 // NOTE: with potential introduction of chainId this might need to be updated
28890 if (sig.length !== 65) {
28891 throw new Error('Invalid signature length')
28892 }
28893
28894 var v = sig[64]
28895 // support both versions of `eth_sign` responses
28896 if (v < 27) {
28897 v += 27
28898 }
28899
28900 return {
28901 v: v,
28902 r: sig.slice(0, 32),
28903 s: sig.slice(32, 64)
28904 }
ebd8d4e8
IC
28905}
28906
8b095871
IC
28907/**
28908 * Returns the ethereum address of a given private key
28909 * @param {Buffer} privateKey A private key must be 256 bits wide
28910 * @return {Buffer}
28911 */
28912exports.privateToAddress = function (privateKey) {
28913 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 28914}
ebd8d4e8 28915
8b095871
IC
28916/**
28917 * Checks if the address is a valid. Accepts checksummed addresses too
28918 * @param {String} address
28919 * @return {Boolean}
28920 */
28921exports.isValidAddress = function (address) {
28922 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 28923}
ebd8d4e8 28924
8b095871
IC
28925/**
28926 * Returns a checksummed address
28927 * @param {String} address
28928 * @return {String}
28929 */
28930exports.toChecksumAddress = function (address) {
28931 address = exports.stripHexPrefix(address).toLowerCase()
28932 var hash = exports.sha3(address).toString('hex')
28933 var ret = '0x'
28934
28935 for (var i = 0; i < address.length; i++) {
28936 if (parseInt(hash[i], 16) >= 8) {
28937 ret += address[i].toUpperCase()
28938 } else {
28939 ret += address[i]
28940 }
28941 }
28942
28943 return ret
ebd8d4e8
IC
28944}
28945
8b095871
IC
28946/**
28947 * Checks if the address is a valid checksummed address
28948 * @param {Buffer} address
28949 * @return {Boolean}
28950 */
28951exports.isValidChecksumAddress = function (address) {
28952 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 28953}
ebd8d4e8 28954
8b095871
IC
28955/**
28956 * Generates an address of a newly created contract
28957 * @param {Buffer} from the address which is creating this new address
28958 * @param {Buffer} nonce the nonce of the from account
28959 * @return {Buffer}
28960 */
28961exports.generateAddress = function (from, nonce) {
28962 from = exports.toBuffer(from)
28963 nonce = new BN(nonce)
28964
28965 if (nonce.isZero()) {
28966 // in RLP we want to encode null in the case of zero nonce
28967 // read the RLP documentation for an answer if you dare
28968 nonce = null
28969 } else {
28970 nonce = Buffer.from(nonce.toArray())
28971 }
28972
28973 // Only take the lower 160bits of the hash
28974 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 28975}
ebd8d4e8 28976
8b095871
IC
28977/**
28978 * Returns true if the supplied address belongs to a precompiled account
28979 * @param {Buffer|String} address
28980 * @return {Boolean}
28981 */
28982exports.isPrecompiled = function (address) {
28983 var a = exports.unpad(address)
28984 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
28985}
28986
8b095871
IC
28987/**
28988 * Adds "0x" to a given `String` if it does not already start with "0x"
28989 * @param {String} str
28990 * @return {String}
28991 */
28992exports.addHexPrefix = function (str) {
28993 if (typeof str !== 'string') {
28994 return str
28995 }
28996
28997 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
28998}
28999
8b095871
IC
29000/**
29001 * Validate ECDSA signature
29002 * @method isValidSignature
29003 * @param {Buffer} v
29004 * @param {Buffer} r
29005 * @param {Buffer} s
29006 * @param {Boolean} [homestead=true]
29007 * @return {Boolean}
29008 */
29009
29010exports.isValidSignature = function (v, r, s, homestead) {
29011 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
29012 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
29013
29014 if (r.length !== 32 || s.length !== 32) {
29015 return false
29016 }
29017
29018 if (v !== 27 && v !== 28) {
29019 return false
29020 }
29021
29022 r = new BN(r)
29023 s = new BN(s)
29024
29025 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
29026 return false
29027 }
29028
29029 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
29030 return false
29031 }
29032
29033 return true
ebd8d4e8
IC
29034}
29035
8b095871
IC
29036/**
29037 * Converts a `Buffer` or `Array` to JSON
29038 * @param {Buffer|Array} ba
29039 * @return {Array|String|null}
29040 */
29041exports.baToJSON = function (ba) {
29042 if (Buffer.isBuffer(ba)) {
29043 return '0x' + ba.toString('hex')
29044 } else if (ba instanceof Array) {
29045 var array = []
29046 for (var i = 0; i < ba.length; i++) {
29047 array.push(exports.baToJSON(ba[i]))
29048 }
29049 return array
29050 }
ab78acc6 29051}
ebd8d4e8 29052
8b095871
IC
29053/**
29054 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
29055 * @param {Object} self the `Object` to define properties on
29056 * @param {Array} fields an array fields to define. Fields can contain:
29057 * * `name` - the name of the properties
29058 * * `length` - the number of bytes the field can have
29059 * * `allowLess` - if the field can be less than the length
29060 * * `allowEmpty`
29061 * @param {*} data data to be validated against the definitions
29062 */
29063exports.defineProperties = function (self, fields, data) {
29064 self.raw = []
29065 self._fields = []
29066
29067 // attach the `toJSON`
29068 self.toJSON = function (label) {
29069 if (label) {
29070 var obj = {}
29071 self._fields.forEach(function (field) {
29072 obj[field] = '0x' + self[field].toString('hex')
29073 })
29074 return obj
29075 }
29076 return exports.baToJSON(this.raw)
29077 }
29078
29079 self.serialize = function serialize () {
29080 return rlp.encode(self.raw)
29081 }
29082
29083 fields.forEach(function (field, i) {
29084 self._fields.push(field.name)
29085 function getter () {
29086 return self.raw[i]
29087 }
29088 function setter (v) {
29089 v = exports.toBuffer(v)
29090
29091 if (v.toString('hex') === '00' && !field.allowZero) {
29092 v = Buffer.allocUnsafe(0)
29093 }
29094
29095 if (field.allowLess && field.length) {
29096 v = exports.stripZeros(v)
29097 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
29098 } else if (!(field.allowZero && v.length === 0) && field.length) {
29099 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
29100 }
29101
29102 self.raw[i] = v
29103 }
29104
29105 Object.defineProperty(self, field.name, {
29106 enumerable: true,
29107 configurable: true,
29108 get: getter,
29109 set: setter
29110 })
29111
29112 if (field.default) {
29113 self[field.name] = field.default
29114 }
29115
29116 // attach alias
29117 if (field.alias) {
29118 Object.defineProperty(self, field.alias, {
29119 enumerable: false,
29120 configurable: true,
29121 set: setter,
29122 get: getter
29123 })
29124 }
29125 })
29126
29127 // if the constuctor is passed data
29128 if (data) {
29129 if (typeof data === 'string') {
29130 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
29131 }
29132
29133 if (Buffer.isBuffer(data)) {
29134 data = rlp.decode(data)
29135 }
29136
29137 if (Array.isArray(data)) {
29138 if (data.length > self._fields.length) {
29139 throw (new Error('wrong number of fields in data'))
29140 }
29141
29142 // make sure all the items are buffers
29143 data.forEach(function (d, i) {
29144 self[self._fields[i]] = exports.toBuffer(d)
29145 })
29146 } else if (typeof data === 'object') {
29147 const keys = Object.keys(data)
29148 fields.forEach(function (field) {
29149 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
29150 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
29151 })
29152 } else {
29153 throw new Error('invalid data')
29154 }
29155 }
ab78acc6 29156}
ebd8d4e8 29157
8b095871
IC
29158}).call(this,require("buffer").Buffer)
29159},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
29160(function (Buffer){
29161// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
29162// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29163// NOTE: SIGHASH byte ignored AND restricted, truncate before use
29164
29165function check (buffer) {
29166 if (buffer.length < 8) return false
29167 if (buffer.length > 72) return false
29168 if (buffer[0] !== 0x30) return false
29169 if (buffer[1] !== buffer.length - 2) return false
29170 if (buffer[2] !== 0x02) return false
29171
29172 var lenR = buffer[3]
29173 if (lenR === 0) return false
29174 if (5 + lenR >= buffer.length) return false
29175 if (buffer[4 + lenR] !== 0x02) return false
29176
29177 var lenS = buffer[5 + lenR]
29178 if (lenS === 0) return false
29179 if ((6 + lenR + lenS) !== buffer.length) return false
29180
29181 if (buffer[4] & 0x80) return false
29182 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
29183
29184 if (buffer[lenR + 6] & 0x80) return false
29185 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
29186 return true
ab78acc6 29187}
ab78acc6 29188
8b095871
IC
29189function decode (buffer) {
29190 if (buffer.length < 8) throw new Error('DER sequence length is too short')
29191 if (buffer.length > 72) throw new Error('DER sequence length is too long')
29192 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
29193 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
29194 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
29195
29196 var lenR = buffer[3]
29197 if (lenR === 0) throw new Error('R length is zero')
29198 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
29199 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
29200
29201 var lenS = buffer[5 + lenR]
29202 if (lenS === 0) throw new Error('S length is zero')
29203 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
29204
29205 if (buffer[4] & 0x80) throw new Error('R value is negative')
29206 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
29207
29208 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
29209 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
29210
29211 // non-BIP66 - extract R, S values
29212 return {
29213 r: buffer.slice(4, 4 + lenR),
29214 s: buffer.slice(6 + lenR)
29215 }
ebd8d4e8
IC
29216}
29217
8b095871
IC
29218/*
29219 * Expects r and s to be positive DER integers.
29220 *
29221 * The DER format uses the most significant bit as a sign bit (& 0x80).
29222 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
29223 *
29224 * Examples:
29225 *
29226 * 0 => 0x00
29227 * 1 => 0x01
29228 * -1 => 0xff
29229 * 127 => 0x7f
29230 * -127 => 0x81
29231 * 128 => 0x0080
29232 * -128 => 0x80
29233 * 255 => 0x00ff
29234 * -255 => 0xff01
29235 * 16300 => 0x3fac
29236 * -16300 => 0xc054
29237 * 62300 => 0x00f35c
29238 * -62300 => 0xff0ca4
29239*/
29240function encode (r, s) {
29241 var lenR = r.length
29242 var lenS = s.length
29243 if (lenR === 0) throw new Error('R length is zero')
29244 if (lenS === 0) throw new Error('S length is zero')
29245 if (lenR > 33) throw new Error('R length is too long')
29246 if (lenS > 33) throw new Error('S length is too long')
29247 if (r[0] & 0x80) throw new Error('R value is negative')
29248 if (s[0] & 0x80) throw new Error('S value is negative')
29249 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
29250 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
29251
29252 var signature = new Buffer(6 + lenR + lenS)
29253
29254 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
29255 signature[0] = 0x30
29256 signature[1] = signature.length - 2
29257 signature[2] = 0x02
29258 signature[3] = r.length
29259 r.copy(signature, 4)
29260 signature[4 + lenR] = 0x02
29261 signature[5 + lenR] = s.length
29262 s.copy(signature, 6 + lenR)
29263
29264 return signature
ebd8d4e8
IC
29265}
29266
8b095871
IC
29267module.exports = {
29268 check: check,
29269 decode: decode,
29270 encode: encode
ebd8d4e8 29271}
8b095871 29272
ab78acc6 29273}).call(this,require("buffer").Buffer)
8b095871
IC
29274},{"buffer":5}],33:[function(require,module,exports){
29275(function (module, exports) {
29276 'use strict';
ebd8d4e8 29277
8b095871
IC
29278 // Utils
29279 function assert (val, msg) {
29280 if (!val) throw new Error(msg || 'Assertion failed');
29281 }
ebd8d4e8 29282
8b095871
IC
29283 // Could use `inherits` module, but don't want to move from single file
29284 // architecture yet.
29285 function inherits (ctor, superCtor) {
29286 ctor.super_ = superCtor;
29287 var TempCtor = function () {};
29288 TempCtor.prototype = superCtor.prototype;
29289 ctor.prototype = new TempCtor();
29290 ctor.prototype.constructor = ctor;
29291 }
ebd8d4e8 29292
8b095871 29293 // BN
ab78acc6 29294
8b095871
IC
29295 function BN (number, base, endian) {
29296 if (BN.isBN(number)) {
29297 return number;
29298 }
ab78acc6 29299
8b095871
IC
29300 this.negative = 0;
29301 this.words = null;
29302 this.length = 0;
ab78acc6 29303
8b095871
IC
29304 // Reduction context
29305 this.red = null;
ab78acc6 29306
8b095871
IC
29307 if (number !== null) {
29308 if (base === 'le' || base === 'be') {
29309 endian = base;
29310 base = 10;
29311 }
ab78acc6 29312
8b095871
IC
29313 this._init(number || 0, base || 10, endian || 'be');
29314 }
29315 }
29316 if (typeof module === 'object') {
29317 module.exports = BN;
29318 } else {
29319 exports.BN = BN;
29320 }
ab78acc6 29321
8b095871
IC
29322 BN.BN = BN;
29323 BN.wordSize = 26;
ab78acc6 29324
8b095871
IC
29325 var Buffer;
29326 try {
29327 Buffer = require('buf' + 'fer').Buffer;
29328 } catch (e) {
29329 }
ab78acc6 29330
8b095871
IC
29331 BN.isBN = function isBN (num) {
29332 if (num instanceof BN) {
29333 return true;
29334 }
ab78acc6 29335
8b095871
IC
29336 return num !== null && typeof num === 'object' &&
29337 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
29338 };
ebd8d4e8 29339
8b095871
IC
29340 BN.max = function max (left, right) {
29341 if (left.cmp(right) > 0) return left;
29342 return right;
29343 };
ebd8d4e8 29344
8b095871
IC
29345 BN.min = function min (left, right) {
29346 if (left.cmp(right) < 0) return left;
29347 return right;
29348 };
29349
29350 BN.prototype._init = function init (number, base, endian) {
29351 if (typeof number === 'number') {
29352 return this._initNumber(number, base, endian);
ab78acc6 29353 }
ebd8d4e8 29354
8b095871
IC
29355 if (typeof number === 'object') {
29356 return this._initArray(number, base, endian);
29357 }
ebd8d4e8 29358
8b095871
IC
29359 if (base === 'hex') {
29360 base = 16;
29361 }
29362 assert(base === (base | 0) && base >= 2 && base <= 36);
29363
29364 number = number.toString().replace(/\s+/g, '');
29365 var start = 0;
29366 if (number[0] === '-') {
29367 start++;
29368 }
29369
29370 if (base === 16) {
29371 this._parseHex(number, start);
29372 } else {
29373 this._parseBase(number, base, start);
ab78acc6 29374 }
ebd8d4e8 29375
8b095871
IC
29376 if (number[0] === '-') {
29377 this.negative = 1;
29378 }
ebd8d4e8 29379
8b095871 29380 this.strip();
ebd8d4e8 29381
8b095871 29382 if (endian !== 'le') return;
ebd8d4e8 29383
8b095871
IC
29384 this._initArray(this.toArray(), base, endian);
29385 };
ebd8d4e8 29386
8b095871
IC
29387 BN.prototype._initNumber = function _initNumber (number, base, endian) {
29388 if (number < 0) {
29389 this.negative = 1;
29390 number = -number;
29391 }
29392 if (number < 0x4000000) {
29393 this.words = [ number & 0x3ffffff ];
29394 this.length = 1;
29395 } else if (number < 0x10000000000000) {
29396 this.words = [
29397 number & 0x3ffffff,
29398 (number / 0x4000000) & 0x3ffffff
29399 ];
29400 this.length = 2;
29401 } else {
29402 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
29403 this.words = [
29404 number & 0x3ffffff,
29405 (number / 0x4000000) & 0x3ffffff,
29406 1
29407 ];
29408 this.length = 3;
29409 }
ebd8d4e8 29410
8b095871 29411 if (endian !== 'le') return;
ebd8d4e8 29412
8b095871
IC
29413 // Reverse the bytes
29414 this._initArray(this.toArray(), base, endian);
29415 };
ebd8d4e8 29416
8b095871
IC
29417 BN.prototype._initArray = function _initArray (number, base, endian) {
29418 // Perhaps a Uint8Array
29419 assert(typeof number.length === 'number');
29420 if (number.length <= 0) {
29421 this.words = [ 0 ];
29422 this.length = 1;
29423 return this;
ab78acc6 29424 }
ebd8d4e8 29425
8b095871
IC
29426 this.length = Math.ceil(number.length / 3);
29427 this.words = new Array(this.length);
29428 for (var i = 0; i < this.length; i++) {
29429 this.words[i] = 0;
29430 }
ebd8d4e8 29431
8b095871
IC
29432 var j, w;
29433 var off = 0;
29434 if (endian === 'be') {
29435 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
29436 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
29437 this.words[j] |= (w << off) & 0x3ffffff;
29438 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29439 off += 24;
29440 if (off >= 26) {
29441 off -= 26;
29442 j++;
29443 }
29444 }
29445 } else if (endian === 'le') {
29446 for (i = 0, j = 0; i < number.length; i += 3) {
29447 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
29448 this.words[j] |= (w << off) & 0x3ffffff;
29449 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
29450 off += 24;
29451 if (off >= 26) {
29452 off -= 26;
29453 j++;
29454 }
29455 }
29456 }
29457 return this.strip();
29458 };
ebd8d4e8 29459
8b095871
IC
29460 function parseHex (str, start, end) {
29461 var r = 0;
29462 var len = Math.min(str.length, end);
29463 for (var i = start; i < len; i++) {
29464 var c = str.charCodeAt(i) - 48;
ab78acc6 29465
8b095871 29466 r <<= 4;
ab78acc6 29467
8b095871
IC
29468 // 'a' - 'f'
29469 if (c >= 49 && c <= 54) {
29470 r |= c - 49 + 0xa;
ab78acc6 29471
8b095871
IC
29472 // 'A' - 'F'
29473 } else if (c >= 17 && c <= 22) {
29474 r |= c - 17 + 0xa;
ebd8d4e8 29475
8b095871
IC
29476 // '0' - '9'
29477 } else {
29478 r |= c & 0xf;
29479 }
29480 }
29481 return r;
29482 }
29483
29484 BN.prototype._parseHex = function _parseHex (number, start) {
29485 // Create possibly bigger array to ensure that it fits the number
29486 this.length = Math.ceil((number.length - start) / 6);
29487 this.words = new Array(this.length);
29488 for (var i = 0; i < this.length; i++) {
29489 this.words[i] = 0;
29490 }
29491
29492 var j, w;
29493 // Scan 24-bit chunks and add them to the number
29494 var off = 0;
29495 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
29496 w = parseHex(number, i, i + 6);
29497 this.words[j] |= (w << off) & 0x3ffffff;
29498 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
29499 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29500 off += 24;
29501 if (off >= 26) {
29502 off -= 26;
29503 j++;
29504 }
29505 }
29506 if (i + 6 !== start) {
29507 w = parseHex(number, start, i + 6);
29508 this.words[j] |= (w << off) & 0x3ffffff;
29509 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
29510 }
29511 this.strip();
29512 };
ebd8d4e8 29513
8b095871
IC
29514 function parseBase (str, start, end, mul) {
29515 var r = 0;
29516 var len = Math.min(str.length, end);
29517 for (var i = start; i < len; i++) {
29518 var c = str.charCodeAt(i) - 48;
ebd8d4e8 29519
8b095871 29520 r *= mul;
ebd8d4e8 29521
8b095871
IC
29522 // 'a'
29523 if (c >= 49) {
29524 r += c - 49 + 0xa;
ebd8d4e8 29525
8b095871
IC
29526 // 'A'
29527 } else if (c >= 17) {
29528 r += c - 17 + 0xa;
ebd8d4e8 29529
8b095871
IC
29530 // '0' - '9'
29531 } else {
29532 r += c;
29533 }
29534 }
29535 return r;
29536 }
ebd8d4e8 29537
8b095871
IC
29538 BN.prototype._parseBase = function _parseBase (number, base, start) {
29539 // Initialize as zero
29540 this.words = [ 0 ];
29541 this.length = 1;
ebd8d4e8 29542
8b095871
IC
29543 // Find length of limb in base
29544 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
29545 limbLen++;
29546 }
29547 limbLen--;
29548 limbPow = (limbPow / base) | 0;
ebd8d4e8 29549
8b095871
IC
29550 var total = number.length - start;
29551 var mod = total % limbLen;
29552 var end = Math.min(total, total - mod) + start;
ebd8d4e8 29553
8b095871
IC
29554 var word = 0;
29555 for (var i = start; i < end; i += limbLen) {
29556 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 29557
8b095871
IC
29558 this.imuln(limbPow);
29559 if (this.words[0] + word < 0x4000000) {
29560 this.words[0] += word;
29561 } else {
29562 this._iaddn(word);
29563 }
29564 }
ebd8d4e8 29565
8b095871
IC
29566 if (mod !== 0) {
29567 var pow = 1;
29568 word = parseBase(number, i, number.length, base);
ebd8d4e8 29569
8b095871
IC
29570 for (i = 0; i < mod; i++) {
29571 pow *= base;
29572 }
ab78acc6 29573
8b095871
IC
29574 this.imuln(pow);
29575 if (this.words[0] + word < 0x4000000) {
29576 this.words[0] += word;
29577 } else {
29578 this._iaddn(word);
29579 }
29580 }
29581 };
ab78acc6 29582
8b095871
IC
29583 BN.prototype.copy = function copy (dest) {
29584 dest.words = new Array(this.length);
29585 for (var i = 0; i < this.length; i++) {
29586 dest.words[i] = this.words[i];
ab78acc6 29587 }
8b095871
IC
29588 dest.length = this.length;
29589 dest.negative = this.negative;
29590 dest.red = this.red;
29591 };
ab78acc6 29592
8b095871
IC
29593 BN.prototype.clone = function clone () {
29594 var r = new BN(null);
29595 this.copy(r);
29596 return r;
29597 };
ab78acc6 29598
8b095871
IC
29599 BN.prototype._expand = function _expand (size) {
29600 while (this.length < size) {
29601 this.words[this.length++] = 0;
29602 }
29603 return this;
29604 };
ab78acc6 29605
8b095871
IC
29606 // Remove leading `0` from `this`
29607 BN.prototype.strip = function strip () {
29608 while (this.length > 1 && this.words[this.length - 1] === 0) {
29609 this.length--;
ab78acc6 29610 }
8b095871
IC
29611 return this._normSign();
29612 };
ebd8d4e8 29613
8b095871
IC
29614 BN.prototype._normSign = function _normSign () {
29615 // -0 = 0
29616 if (this.length === 1 && this.words[0] === 0) {
29617 this.negative = 0;
ab78acc6 29618 }
8b095871
IC
29619 return this;
29620 };
ebd8d4e8 29621
8b095871
IC
29622 BN.prototype.inspect = function inspect () {
29623 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
29624 };
ebd8d4e8 29625
8b095871 29626 /*
ebd8d4e8 29627
8b095871
IC
29628 var zeros = [];
29629 var groupSizes = [];
29630 var groupBases = [];
ebd8d4e8 29631
8b095871
IC
29632 var s = '';
29633 var i = -1;
29634 while (++i < BN.wordSize) {
29635 zeros[i] = s;
29636 s += '0';
29637 }
29638 groupSizes[0] = 0;
29639 groupSizes[1] = 0;
29640 groupBases[0] = 0;
29641 groupBases[1] = 0;
29642 var base = 2 - 1;
29643 while (++base < 36 + 1) {
29644 var groupSize = 0;
29645 var groupBase = 1;
29646 while (groupBase < (1 << BN.wordSize) / base) {
29647 groupBase *= base;
29648 groupSize += 1;
29649 }
29650 groupSizes[base] = groupSize;
29651 groupBases[base] = groupBase;
ebd8d4e8
IC
29652 }
29653
8b095871 29654 */
ebd8d4e8 29655
8b095871
IC
29656 var zeros = [
29657 '',
29658 '0',
29659 '00',
29660 '000',
29661 '0000',
29662 '00000',
29663 '000000',
29664 '0000000',
29665 '00000000',
29666 '000000000',
29667 '0000000000',
29668 '00000000000',
29669 '000000000000',
29670 '0000000000000',
29671 '00000000000000',
29672 '000000000000000',
29673 '0000000000000000',
29674 '00000000000000000',
29675 '000000000000000000',
29676 '0000000000000000000',
29677 '00000000000000000000',
29678 '000000000000000000000',
29679 '0000000000000000000000',
29680 '00000000000000000000000',
29681 '000000000000000000000000',
29682 '0000000000000000000000000'
29683 ];
29684
29685 var groupSizes = [
29686 0, 0,
29687 25, 16, 12, 11, 10, 9, 8,
29688 8, 7, 7, 7, 7, 6, 6,
29689 6, 6, 6, 6, 6, 5, 5,
29690 5, 5, 5, 5, 5, 5, 5,
29691 5, 5, 5, 5, 5, 5, 5
29692 ];
29693
29694 var groupBases = [
29695 0, 0,
29696 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
29697 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
29698 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
29699 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
29700 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
29701 ];
29702
29703 BN.prototype.toString = function toString (base, padding) {
29704 base = base || 10;
29705 padding = padding | 0 || 1;
29706
29707 var out;
29708 if (base === 16 || base === 'hex') {
29709 out = '';
29710 var off = 0;
29711 var carry = 0;
29712 for (var i = 0; i < this.length; i++) {
29713 var w = this.words[i];
29714 var word = (((w << off) | carry) & 0xffffff).toString(16);
29715 carry = (w >>> (24 - off)) & 0xffffff;
29716 if (carry !== 0 || i !== this.length - 1) {
29717 out = zeros[6 - word.length] + word + out;
29718 } else {
29719 out = word + out;
29720 }
29721 off += 2;
29722 if (off >= 26) {
29723 off -= 26;
29724 i--;
29725 }
29726 }
29727 if (carry !== 0) {
29728 out = carry.toString(16) + out;
29729 }
29730 while (out.length % padding !== 0) {
29731 out = '0' + out;
29732 }
29733 if (this.negative !== 0) {
29734 out = '-' + out;
29735 }
29736 return out;
29737 }
29738
29739 if (base === (base | 0) && base >= 2 && base <= 36) {
29740 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
29741 var groupSize = groupSizes[base];
29742 // var groupBase = Math.pow(base, groupSize);
29743 var groupBase = groupBases[base];
29744 out = '';
29745 var c = this.clone();
29746 c.negative = 0;
29747 while (!c.isZero()) {
29748 var r = c.modn(groupBase).toString(base);
29749 c = c.idivn(groupBase);
29750
29751 if (!c.isZero()) {
29752 out = zeros[groupSize - r.length] + r + out;
29753 } else {
29754 out = r + out;
29755 }
29756 }
29757 if (this.isZero()) {
29758 out = '0' + out;
29759 }
29760 while (out.length % padding !== 0) {
29761 out = '0' + out;
29762 }
29763 if (this.negative !== 0) {
29764 out = '-' + out;
29765 }
29766 return out;
29767 }
29768
29769 assert(false, 'Base should be between 2 and 36');
29770 };
29771
29772 BN.prototype.toNumber = function toNumber () {
29773 var ret = this.words[0];
29774 if (this.length === 2) {
29775 ret += this.words[1] * 0x4000000;
29776 } else if (this.length === 3 && this.words[2] === 0x01) {
29777 // NOTE: at this stage it is known that the top bit is set
29778 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
29779 } else if (this.length > 2) {
29780 assert(false, 'Number can only safely store up to 53 bits');
29781 }
29782 return (this.negative !== 0) ? -ret : ret;
29783 };
29784
29785 BN.prototype.toJSON = function toJSON () {
29786 return this.toString(16);
29787 };
29788
29789 BN.prototype.toBuffer = function toBuffer (endian, length) {
29790 assert(typeof Buffer !== 'undefined');
29791 return this.toArrayLike(Buffer, endian, length);
29792 };
ebd8d4e8 29793
8b095871
IC
29794 BN.prototype.toArray = function toArray (endian, length) {
29795 return this.toArrayLike(Array, endian, length);
29796 };
ebd8d4e8 29797
8b095871
IC
29798 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
29799 var byteLength = this.byteLength();
29800 var reqLength = length || Math.max(1, byteLength);
29801 assert(byteLength <= reqLength, 'byte array longer than desired length');
29802 assert(reqLength > 0, 'Requested array length <= 0');
29803
29804 this.strip();
29805 var littleEndian = endian === 'le';
29806 var res = new ArrayType(reqLength);
29807
29808 var b, i;
29809 var q = this.clone();
29810 if (!littleEndian) {
29811 // Assume big-endian
29812 for (i = 0; i < reqLength - byteLength; i++) {
29813 res[i] = 0;
29814 }
ebd8d4e8 29815
8b095871
IC
29816 for (i = 0; !q.isZero(); i++) {
29817 b = q.andln(0xff);
29818 q.iushrn(8);
ebd8d4e8 29819
8b095871
IC
29820 res[reqLength - i - 1] = b;
29821 }
29822 } else {
29823 for (i = 0; !q.isZero(); i++) {
29824 b = q.andln(0xff);
29825 q.iushrn(8);
ebd8d4e8 29826
8b095871
IC
29827 res[i] = b;
29828 }
29829
29830 for (; i < reqLength; i++) {
29831 res[i] = 0;
29832 }
ab78acc6 29833 }
ebd8d4e8 29834
8b095871
IC
29835 return res;
29836 };
ebd8d4e8 29837
8b095871
IC
29838 if (Math.clz32) {
29839 BN.prototype._countBits = function _countBits (w) {
29840 return 32 - Math.clz32(w);
29841 };
29842 } else {
29843 BN.prototype._countBits = function _countBits (w) {
29844 var t = w;
29845 var r = 0;
29846 if (t >= 0x1000) {
29847 r += 13;
29848 t >>>= 13;
29849 }
29850 if (t >= 0x40) {
29851 r += 7;
29852 t >>>= 7;
29853 }
29854 if (t >= 0x8) {
29855 r += 4;
29856 t >>>= 4;
29857 }
29858 if (t >= 0x02) {
29859 r += 2;
29860 t >>>= 2;
29861 }
29862 return r + t;
29863 };
ebd8d4e8
IC
29864 }
29865
8b095871
IC
29866 BN.prototype._zeroBits = function _zeroBits (w) {
29867 // Short-cut
29868 if (w === 0) return 26;
ebd8d4e8 29869
8b095871
IC
29870 var t = w;
29871 var r = 0;
29872 if ((t & 0x1fff) === 0) {
29873 r += 13;
29874 t >>>= 13;
29875 }
29876 if ((t & 0x7f) === 0) {
29877 r += 7;
29878 t >>>= 7;
29879 }
29880 if ((t & 0xf) === 0) {
29881 r += 4;
29882 t >>>= 4;
29883 }
29884 if ((t & 0x3) === 0) {
29885 r += 2;
29886 t >>>= 2;
29887 }
29888 if ((t & 0x1) === 0) {
29889 r++;
29890 }
29891 return r;
29892 };
ebd8d4e8 29893
8b095871
IC
29894 // Return number of used bits in a BN
29895 BN.prototype.bitLength = function bitLength () {
29896 var w = this.words[this.length - 1];
29897 var hi = this._countBits(w);
29898 return (this.length - 1) * 26 + hi;
29899 };
ebd8d4e8 29900
8b095871
IC
29901 function toBitArray (num) {
29902 var w = new Array(num.bitLength());
ebd8d4e8 29903
8b095871
IC
29904 for (var bit = 0; bit < w.length; bit++) {
29905 var off = (bit / 26) | 0;
29906 var wbit = bit % 26;
ebd8d4e8 29907
8b095871 29908 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 29909 }
8b095871
IC
29910
29911 return w;
ab78acc6 29912 }
ebd8d4e8 29913
8b095871
IC
29914 // Number of trailing zero bits
29915 BN.prototype.zeroBits = function zeroBits () {
29916 if (this.isZero()) return 0;
29917
29918 var r = 0;
29919 for (var i = 0; i < this.length; i++) {
29920 var b = this._zeroBits(this.words[i]);
29921 r += b;
29922 if (b !== 26) break;
ab78acc6 29923 }
8b095871
IC
29924 return r;
29925 };
29926
29927 BN.prototype.byteLength = function byteLength () {
29928 return Math.ceil(this.bitLength() / 8);
29929 };
29930
29931 BN.prototype.toTwos = function toTwos (width) {
29932 if (this.negative !== 0) {
29933 return this.abs().inotn(width).iaddn(1);
ab78acc6 29934 }
8b095871
IC
29935 return this.clone();
29936 };
ebd8d4e8 29937
8b095871
IC
29938 BN.prototype.fromTwos = function fromTwos (width) {
29939 if (this.testn(width - 1)) {
29940 return this.notn(width).iaddn(1).ineg();
29941 }
29942 return this.clone();
29943 };
ebd8d4e8 29944
8b095871
IC
29945 BN.prototype.isNeg = function isNeg () {
29946 return this.negative !== 0;
29947 };
ebd8d4e8 29948
8b095871
IC
29949 // Return negative clone of `this`
29950 BN.prototype.neg = function neg () {
29951 return this.clone().ineg();
29952 };
ebd8d4e8 29953
8b095871
IC
29954 BN.prototype.ineg = function ineg () {
29955 if (!this.isZero()) {
29956 this.negative ^= 1;
ab78acc6 29957 }
ebd8d4e8 29958
8b095871
IC
29959 return this;
29960 };
ebd8d4e8 29961
8b095871
IC
29962 // Or `num` with `this` in-place
29963 BN.prototype.iuor = function iuor (num) {
29964 while (this.length < num.length) {
29965 this.words[this.length++] = 0;
29966 }
ebd8d4e8 29967
8b095871
IC
29968 for (var i = 0; i < num.length; i++) {
29969 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 29970 }
ebd8d4e8 29971
8b095871
IC
29972 return this.strip();
29973 };
ebd8d4e8 29974
8b095871
IC
29975 BN.prototype.ior = function ior (num) {
29976 assert((this.negative | num.negative) === 0);
29977 return this.iuor(num);
ab78acc6 29978 };
ebd8d4e8 29979
8b095871
IC
29980 // Or `num` with `this`
29981 BN.prototype.or = function or (num) {
29982 if (this.length > num.length) return this.clone().ior(num);
29983 return num.clone().ior(this);
29984 };
ebd8d4e8 29985
8b095871
IC
29986 BN.prototype.uor = function uor (num) {
29987 if (this.length > num.length) return this.clone().iuor(num);
29988 return num.clone().iuor(this);
29989 };
ebd8d4e8 29990
8b095871
IC
29991 // And `num` with `this` in-place
29992 BN.prototype.iuand = function iuand (num) {
29993 // b = min-length(num, this)
29994 var b;
29995 if (this.length > num.length) {
29996 b = num;
29997 } else {
29998 b = this;
29999 }
30000
30001 for (var i = 0; i < b.length; i++) {
30002 this.words[i] = this.words[i] & num.words[i];
30003 }
ebd8d4e8 30004
8b095871 30005 this.length = b.length;
ebd8d4e8 30006
8b095871
IC
30007 return this.strip();
30008 };
ebd8d4e8 30009
8b095871
IC
30010 BN.prototype.iand = function iand (num) {
30011 assert((this.negative | num.negative) === 0);
30012 return this.iuand(num);
30013 };
ebd8d4e8 30014
8b095871
IC
30015 // And `num` with `this`
30016 BN.prototype.and = function and (num) {
30017 if (this.length > num.length) return this.clone().iand(num);
30018 return num.clone().iand(this);
30019 };
ebd8d4e8 30020
8b095871
IC
30021 BN.prototype.uand = function uand (num) {
30022 if (this.length > num.length) return this.clone().iuand(num);
30023 return num.clone().iuand(this);
30024 };
ebd8d4e8 30025
8b095871
IC
30026 // Xor `num` with `this` in-place
30027 BN.prototype.iuxor = function iuxor (num) {
30028 // a.length > b.length
30029 var a;
30030 var b;
30031 if (this.length > num.length) {
30032 a = this;
30033 b = num;
30034 } else {
30035 a = num;
30036 b = this;
30037 }
ebd8d4e8 30038
8b095871
IC
30039 for (var i = 0; i < b.length; i++) {
30040 this.words[i] = a.words[i] ^ b.words[i];
30041 }
ebd8d4e8 30042
8b095871
IC
30043 if (this !== a) {
30044 for (; i < a.length; i++) {
30045 this.words[i] = a.words[i];
30046 }
30047 }
ebd8d4e8 30048
8b095871 30049 this.length = a.length;
ebd8d4e8 30050
8b095871
IC
30051 return this.strip();
30052 };
ebd8d4e8 30053
8b095871
IC
30054 BN.prototype.ixor = function ixor (num) {
30055 assert((this.negative | num.negative) === 0);
30056 return this.iuxor(num);
30057 };
ebd8d4e8 30058
8b095871
IC
30059 // Xor `num` with `this`
30060 BN.prototype.xor = function xor (num) {
30061 if (this.length > num.length) return this.clone().ixor(num);
30062 return num.clone().ixor(this);
30063 };
ebd8d4e8 30064
8b095871
IC
30065 BN.prototype.uxor = function uxor (num) {
30066 if (this.length > num.length) return this.clone().iuxor(num);
30067 return num.clone().iuxor(this);
30068 };
ebd8d4e8 30069
8b095871
IC
30070 // Not ``this`` with ``width`` bitwidth
30071 BN.prototype.inotn = function inotn (width) {
30072 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 30073
8b095871
IC
30074 var bytesNeeded = Math.ceil(width / 26) | 0;
30075 var bitsLeft = width % 26;
ebd8d4e8 30076
8b095871
IC
30077 // Extend the buffer with leading zeroes
30078 this._expand(bytesNeeded);
30079
30080 if (bitsLeft > 0) {
30081 bytesNeeded--;
ab78acc6 30082 }
8b095871
IC
30083
30084 // Handle complete words
30085 for (var i = 0; i < bytesNeeded; i++) {
30086 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 30087 }
8b095871
IC
30088
30089 // Handle the residue
30090 if (bitsLeft > 0) {
30091 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 30092 }
ebd8d4e8 30093
8b095871
IC
30094 // And remove leading zeroes
30095 return this.strip();
30096 };
ebd8d4e8 30097
8b095871
IC
30098 BN.prototype.notn = function notn (width) {
30099 return this.clone().inotn(width);
30100 };
ebd8d4e8 30101
8b095871
IC
30102 // Set `bit` of `this`
30103 BN.prototype.setn = function setn (bit, val) {
30104 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 30105
8b095871
IC
30106 var off = (bit / 26) | 0;
30107 var wbit = bit % 26;
ebd8d4e8 30108
8b095871 30109 this._expand(off + 1);
ebd8d4e8 30110
8b095871
IC
30111 if (val) {
30112 this.words[off] = this.words[off] | (1 << wbit);
30113 } else {
30114 this.words[off] = this.words[off] & ~(1 << wbit);
30115 }
ebd8d4e8 30116
8b095871
IC
30117 return this.strip();
30118 };
ebd8d4e8 30119
8b095871
IC
30120 // Add `num` to `this` in-place
30121 BN.prototype.iadd = function iadd (num) {
30122 var r;
30123
30124 // negative + positive
30125 if (this.negative !== 0 && num.negative === 0) {
30126 this.negative = 0;
30127 r = this.isub(num);
30128 this.negative ^= 1;
30129 return this._normSign();
30130
30131 // positive + negative
30132 } else if (this.negative === 0 && num.negative !== 0) {
30133 num.negative = 0;
30134 r = this.isub(num);
30135 num.negative = 1;
30136 return r._normSign();
30137 }
30138
30139 // a.length > b.length
30140 var a, b;
30141 if (this.length > num.length) {
30142 a = this;
30143 b = num;
ab78acc6 30144 } else {
8b095871
IC
30145 a = num;
30146 b = this;
30147 }
30148
30149 var carry = 0;
30150 for (var i = 0; i < b.length; i++) {
30151 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
30152 this.words[i] = r & 0x3ffffff;
30153 carry = r >>> 26;
30154 }
30155 for (; carry !== 0 && i < a.length; i++) {
30156 r = (a.words[i] | 0) + carry;
30157 this.words[i] = r & 0x3ffffff;
30158 carry = r >>> 26;
30159 }
30160
30161 this.length = a.length;
30162 if (carry !== 0) {
30163 this.words[this.length] = carry;
30164 this.length++;
30165 // Copy the rest of the words
30166 } else if (a !== this) {
30167 for (; i < a.length; i++) {
30168 this.words[i] = a.words[i];
30169 }
ab78acc6 30170 }
ebd8d4e8 30171
8b095871
IC
30172 return this;
30173 };
ebd8d4e8 30174
8b095871
IC
30175 // Add `num` to `this`
30176 BN.prototype.add = function add (num) {
30177 var res;
30178 if (num.negative !== 0 && this.negative === 0) {
30179 num.negative = 0;
30180 res = this.sub(num);
30181 num.negative ^= 1;
30182 return res;
30183 } else if (num.negative === 0 && this.negative !== 0) {
30184 this.negative = 0;
30185 res = num.sub(this);
30186 this.negative = 1;
30187 return res;
30188 }
ebd8d4e8 30189
8b095871 30190 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 30191
8b095871
IC
30192 return num.clone().iadd(this);
30193 };
ebd8d4e8 30194
8b095871
IC
30195 // Subtract `num` from `this` in-place
30196 BN.prototype.isub = function isub (num) {
30197 // this - (-num) = this + num
30198 if (num.negative !== 0) {
30199 num.negative = 0;
30200 var r = this.iadd(num);
30201 num.negative = 1;
30202 return r._normSign();
30203
30204 // -this - num = -(this + num)
30205 } else if (this.negative !== 0) {
30206 this.negative = 0;
30207 this.iadd(num);
30208 this.negative = 1;
30209 return this._normSign();
30210 }
30211
30212 // At this point both numbers are positive
30213 var cmp = this.cmp(num);
30214
30215 // Optimization - zeroify
30216 if (cmp === 0) {
30217 this.negative = 0;
30218 this.length = 1;
30219 this.words[0] = 0;
30220 return this;
30221 }
ebd8d4e8 30222
8b095871
IC
30223 // a > b
30224 var a, b;
30225 if (cmp > 0) {
30226 a = this;
30227 b = num;
30228 } else {
30229 a = num;
30230 b = this;
30231 }
ebd8d4e8 30232
8b095871
IC
30233 var carry = 0;
30234 for (var i = 0; i < b.length; i++) {
30235 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
30236 carry = r >> 26;
30237 this.words[i] = r & 0x3ffffff;
30238 }
30239 for (; carry !== 0 && i < a.length; i++) {
30240 r = (a.words[i] | 0) + carry;
30241 carry = r >> 26;
30242 this.words[i] = r & 0x3ffffff;
30243 }
ebd8d4e8 30244
8b095871
IC
30245 // Copy rest of the words
30246 if (carry === 0 && i < a.length && a !== this) {
30247 for (; i < a.length; i++) {
30248 this.words[i] = a.words[i];
30249 }
30250 }
ebd8d4e8 30251
8b095871 30252 this.length = Math.max(this.length, i);
ebd8d4e8 30253
8b095871
IC
30254 if (a !== this) {
30255 this.negative = 1;
ab78acc6 30256 }
ebd8d4e8 30257
8b095871
IC
30258 return this.strip();
30259 };
ebd8d4e8 30260
8b095871
IC
30261 // Subtract `num` from `this`
30262 BN.prototype.sub = function sub (num) {
30263 return this.clone().isub(num);
30264 };
30265
30266 function smallMulTo (self, num, out) {
30267 out.negative = num.negative ^ self.negative;
30268 var len = (self.length + num.length) | 0;
30269 out.length = len;
30270 len = (len - 1) | 0;
30271
30272 // Peel one iteration (compiler can't do it, because of code complexity)
30273 var a = self.words[0] | 0;
30274 var b = num.words[0] | 0;
30275 var r = a * b;
30276
30277 var lo = r & 0x3ffffff;
30278 var carry = (r / 0x4000000) | 0;
30279 out.words[0] = lo;
30280
30281 for (var k = 1; k < len; k++) {
30282 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
30283 // note that ncarry could be >= 0x3ffffff
30284 var ncarry = carry >>> 26;
30285 var rword = carry & 0x3ffffff;
30286 var maxJ = Math.min(k, num.length - 1);
30287 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
30288 var i = (k - j) | 0;
30289 a = self.words[i] | 0;
30290 b = num.words[j] | 0;
30291 r = a * b + rword;
30292 ncarry += (r / 0x4000000) | 0;
30293 rword = r & 0x3ffffff;
30294 }
30295 out.words[k] = rword | 0;
30296 carry = ncarry | 0;
30297 }
30298 if (carry !== 0) {
30299 out.words[k] = carry | 0;
ab78acc6 30300 } else {
8b095871
IC
30301 out.length--;
30302 }
30303
30304 return out.strip();
30305 }
30306
30307 // TODO(indutny): it may be reasonable to omit it for users who don't need
30308 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
30309 // multiplication (like elliptic secp256k1).
30310 var comb10MulTo = function comb10MulTo (self, num, out) {
30311 var a = self.words;
30312 var b = num.words;
30313 var o = out.words;
30314 var c = 0;
30315 var lo;
30316 var mid;
30317 var hi;
30318 var a0 = a[0] | 0;
30319 var al0 = a0 & 0x1fff;
30320 var ah0 = a0 >>> 13;
30321 var a1 = a[1] | 0;
30322 var al1 = a1 & 0x1fff;
30323 var ah1 = a1 >>> 13;
30324 var a2 = a[2] | 0;
30325 var al2 = a2 & 0x1fff;
30326 var ah2 = a2 >>> 13;
30327 var a3 = a[3] | 0;
30328 var al3 = a3 & 0x1fff;
30329 var ah3 = a3 >>> 13;
30330 var a4 = a[4] | 0;
30331 var al4 = a4 & 0x1fff;
30332 var ah4 = a4 >>> 13;
30333 var a5 = a[5] | 0;
30334 var al5 = a5 & 0x1fff;
30335 var ah5 = a5 >>> 13;
30336 var a6 = a[6] | 0;
30337 var al6 = a6 & 0x1fff;
30338 var ah6 = a6 >>> 13;
30339 var a7 = a[7] | 0;
30340 var al7 = a7 & 0x1fff;
30341 var ah7 = a7 >>> 13;
30342 var a8 = a[8] | 0;
30343 var al8 = a8 & 0x1fff;
30344 var ah8 = a8 >>> 13;
30345 var a9 = a[9] | 0;
30346 var al9 = a9 & 0x1fff;
30347 var ah9 = a9 >>> 13;
30348 var b0 = b[0] | 0;
30349 var bl0 = b0 & 0x1fff;
30350 var bh0 = b0 >>> 13;
30351 var b1 = b[1] | 0;
30352 var bl1 = b1 & 0x1fff;
30353 var bh1 = b1 >>> 13;
30354 var b2 = b[2] | 0;
30355 var bl2 = b2 & 0x1fff;
30356 var bh2 = b2 >>> 13;
30357 var b3 = b[3] | 0;
30358 var bl3 = b3 & 0x1fff;
30359 var bh3 = b3 >>> 13;
30360 var b4 = b[4] | 0;
30361 var bl4 = b4 & 0x1fff;
30362 var bh4 = b4 >>> 13;
30363 var b5 = b[5] | 0;
30364 var bl5 = b5 & 0x1fff;
30365 var bh5 = b5 >>> 13;
30366 var b6 = b[6] | 0;
30367 var bl6 = b6 & 0x1fff;
30368 var bh6 = b6 >>> 13;
30369 var b7 = b[7] | 0;
30370 var bl7 = b7 & 0x1fff;
30371 var bh7 = b7 >>> 13;
30372 var b8 = b[8] | 0;
30373 var bl8 = b8 & 0x1fff;
30374 var bh8 = b8 >>> 13;
30375 var b9 = b[9] | 0;
30376 var bl9 = b9 & 0x1fff;
30377 var bh9 = b9 >>> 13;
30378
30379 out.negative = self.negative ^ num.negative;
30380 out.length = 19;
30381 /* k = 0 */
30382 lo = Math.imul(al0, bl0);
30383 mid = Math.imul(al0, bh0);
30384 mid = (mid + Math.imul(ah0, bl0)) | 0;
30385 hi = Math.imul(ah0, bh0);
30386 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30387 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
30388 w0 &= 0x3ffffff;
30389 /* k = 1 */
30390 lo = Math.imul(al1, bl0);
30391 mid = Math.imul(al1, bh0);
30392 mid = (mid + Math.imul(ah1, bl0)) | 0;
30393 hi = Math.imul(ah1, bh0);
30394 lo = (lo + Math.imul(al0, bl1)) | 0;
30395 mid = (mid + Math.imul(al0, bh1)) | 0;
30396 mid = (mid + Math.imul(ah0, bl1)) | 0;
30397 hi = (hi + Math.imul(ah0, bh1)) | 0;
30398 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30399 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
30400 w1 &= 0x3ffffff;
30401 /* k = 2 */
30402 lo = Math.imul(al2, bl0);
30403 mid = Math.imul(al2, bh0);
30404 mid = (mid + Math.imul(ah2, bl0)) | 0;
30405 hi = Math.imul(ah2, bh0);
30406 lo = (lo + Math.imul(al1, bl1)) | 0;
30407 mid = (mid + Math.imul(al1, bh1)) | 0;
30408 mid = (mid + Math.imul(ah1, bl1)) | 0;
30409 hi = (hi + Math.imul(ah1, bh1)) | 0;
30410 lo = (lo + Math.imul(al0, bl2)) | 0;
30411 mid = (mid + Math.imul(al0, bh2)) | 0;
30412 mid = (mid + Math.imul(ah0, bl2)) | 0;
30413 hi = (hi + Math.imul(ah0, bh2)) | 0;
30414 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30415 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
30416 w2 &= 0x3ffffff;
30417 /* k = 3 */
30418 lo = Math.imul(al3, bl0);
30419 mid = Math.imul(al3, bh0);
30420 mid = (mid + Math.imul(ah3, bl0)) | 0;
30421 hi = Math.imul(ah3, bh0);
30422 lo = (lo + Math.imul(al2, bl1)) | 0;
30423 mid = (mid + Math.imul(al2, bh1)) | 0;
30424 mid = (mid + Math.imul(ah2, bl1)) | 0;
30425 hi = (hi + Math.imul(ah2, bh1)) | 0;
30426 lo = (lo + Math.imul(al1, bl2)) | 0;
30427 mid = (mid + Math.imul(al1, bh2)) | 0;
30428 mid = (mid + Math.imul(ah1, bl2)) | 0;
30429 hi = (hi + Math.imul(ah1, bh2)) | 0;
30430 lo = (lo + Math.imul(al0, bl3)) | 0;
30431 mid = (mid + Math.imul(al0, bh3)) | 0;
30432 mid = (mid + Math.imul(ah0, bl3)) | 0;
30433 hi = (hi + Math.imul(ah0, bh3)) | 0;
30434 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30435 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
30436 w3 &= 0x3ffffff;
30437 /* k = 4 */
30438 lo = Math.imul(al4, bl0);
30439 mid = Math.imul(al4, bh0);
30440 mid = (mid + Math.imul(ah4, bl0)) | 0;
30441 hi = Math.imul(ah4, bh0);
30442 lo = (lo + Math.imul(al3, bl1)) | 0;
30443 mid = (mid + Math.imul(al3, bh1)) | 0;
30444 mid = (mid + Math.imul(ah3, bl1)) | 0;
30445 hi = (hi + Math.imul(ah3, bh1)) | 0;
30446 lo = (lo + Math.imul(al2, bl2)) | 0;
30447 mid = (mid + Math.imul(al2, bh2)) | 0;
30448 mid = (mid + Math.imul(ah2, bl2)) | 0;
30449 hi = (hi + Math.imul(ah2, bh2)) | 0;
30450 lo = (lo + Math.imul(al1, bl3)) | 0;
30451 mid = (mid + Math.imul(al1, bh3)) | 0;
30452 mid = (mid + Math.imul(ah1, bl3)) | 0;
30453 hi = (hi + Math.imul(ah1, bh3)) | 0;
30454 lo = (lo + Math.imul(al0, bl4)) | 0;
30455 mid = (mid + Math.imul(al0, bh4)) | 0;
30456 mid = (mid + Math.imul(ah0, bl4)) | 0;
30457 hi = (hi + Math.imul(ah0, bh4)) | 0;
30458 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30459 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
30460 w4 &= 0x3ffffff;
30461 /* k = 5 */
30462 lo = Math.imul(al5, bl0);
30463 mid = Math.imul(al5, bh0);
30464 mid = (mid + Math.imul(ah5, bl0)) | 0;
30465 hi = Math.imul(ah5, bh0);
30466 lo = (lo + Math.imul(al4, bl1)) | 0;
30467 mid = (mid + Math.imul(al4, bh1)) | 0;
30468 mid = (mid + Math.imul(ah4, bl1)) | 0;
30469 hi = (hi + Math.imul(ah4, bh1)) | 0;
30470 lo = (lo + Math.imul(al3, bl2)) | 0;
30471 mid = (mid + Math.imul(al3, bh2)) | 0;
30472 mid = (mid + Math.imul(ah3, bl2)) | 0;
30473 hi = (hi + Math.imul(ah3, bh2)) | 0;
30474 lo = (lo + Math.imul(al2, bl3)) | 0;
30475 mid = (mid + Math.imul(al2, bh3)) | 0;
30476 mid = (mid + Math.imul(ah2, bl3)) | 0;
30477 hi = (hi + Math.imul(ah2, bh3)) | 0;
30478 lo = (lo + Math.imul(al1, bl4)) | 0;
30479 mid = (mid + Math.imul(al1, bh4)) | 0;
30480 mid = (mid + Math.imul(ah1, bl4)) | 0;
30481 hi = (hi + Math.imul(ah1, bh4)) | 0;
30482 lo = (lo + Math.imul(al0, bl5)) | 0;
30483 mid = (mid + Math.imul(al0, bh5)) | 0;
30484 mid = (mid + Math.imul(ah0, bl5)) | 0;
30485 hi = (hi + Math.imul(ah0, bh5)) | 0;
30486 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30487 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
30488 w5 &= 0x3ffffff;
30489 /* k = 6 */
30490 lo = Math.imul(al6, bl0);
30491 mid = Math.imul(al6, bh0);
30492 mid = (mid + Math.imul(ah6, bl0)) | 0;
30493 hi = Math.imul(ah6, bh0);
30494 lo = (lo + Math.imul(al5, bl1)) | 0;
30495 mid = (mid + Math.imul(al5, bh1)) | 0;
30496 mid = (mid + Math.imul(ah5, bl1)) | 0;
30497 hi = (hi + Math.imul(ah5, bh1)) | 0;
30498 lo = (lo + Math.imul(al4, bl2)) | 0;
30499 mid = (mid + Math.imul(al4, bh2)) | 0;
30500 mid = (mid + Math.imul(ah4, bl2)) | 0;
30501 hi = (hi + Math.imul(ah4, bh2)) | 0;
30502 lo = (lo + Math.imul(al3, bl3)) | 0;
30503 mid = (mid + Math.imul(al3, bh3)) | 0;
30504 mid = (mid + Math.imul(ah3, bl3)) | 0;
30505 hi = (hi + Math.imul(ah3, bh3)) | 0;
30506 lo = (lo + Math.imul(al2, bl4)) | 0;
30507 mid = (mid + Math.imul(al2, bh4)) | 0;
30508 mid = (mid + Math.imul(ah2, bl4)) | 0;
30509 hi = (hi + Math.imul(ah2, bh4)) | 0;
30510 lo = (lo + Math.imul(al1, bl5)) | 0;
30511 mid = (mid + Math.imul(al1, bh5)) | 0;
30512 mid = (mid + Math.imul(ah1, bl5)) | 0;
30513 hi = (hi + Math.imul(ah1, bh5)) | 0;
30514 lo = (lo + Math.imul(al0, bl6)) | 0;
30515 mid = (mid + Math.imul(al0, bh6)) | 0;
30516 mid = (mid + Math.imul(ah0, bl6)) | 0;
30517 hi = (hi + Math.imul(ah0, bh6)) | 0;
30518 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30519 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
30520 w6 &= 0x3ffffff;
30521 /* k = 7 */
30522 lo = Math.imul(al7, bl0);
30523 mid = Math.imul(al7, bh0);
30524 mid = (mid + Math.imul(ah7, bl0)) | 0;
30525 hi = Math.imul(ah7, bh0);
30526 lo = (lo + Math.imul(al6, bl1)) | 0;
30527 mid = (mid + Math.imul(al6, bh1)) | 0;
30528 mid = (mid + Math.imul(ah6, bl1)) | 0;
30529 hi = (hi + Math.imul(ah6, bh1)) | 0;
30530 lo = (lo + Math.imul(al5, bl2)) | 0;
30531 mid = (mid + Math.imul(al5, bh2)) | 0;
30532 mid = (mid + Math.imul(ah5, bl2)) | 0;
30533 hi = (hi + Math.imul(ah5, bh2)) | 0;
30534 lo = (lo + Math.imul(al4, bl3)) | 0;
30535 mid = (mid + Math.imul(al4, bh3)) | 0;
30536 mid = (mid + Math.imul(ah4, bl3)) | 0;
30537 hi = (hi + Math.imul(ah4, bh3)) | 0;
30538 lo = (lo + Math.imul(al3, bl4)) | 0;
30539 mid = (mid + Math.imul(al3, bh4)) | 0;
30540 mid = (mid + Math.imul(ah3, bl4)) | 0;
30541 hi = (hi + Math.imul(ah3, bh4)) | 0;
30542 lo = (lo + Math.imul(al2, bl5)) | 0;
30543 mid = (mid + Math.imul(al2, bh5)) | 0;
30544 mid = (mid + Math.imul(ah2, bl5)) | 0;
30545 hi = (hi + Math.imul(ah2, bh5)) | 0;
30546 lo = (lo + Math.imul(al1, bl6)) | 0;
30547 mid = (mid + Math.imul(al1, bh6)) | 0;
30548 mid = (mid + Math.imul(ah1, bl6)) | 0;
30549 hi = (hi + Math.imul(ah1, bh6)) | 0;
30550 lo = (lo + Math.imul(al0, bl7)) | 0;
30551 mid = (mid + Math.imul(al0, bh7)) | 0;
30552 mid = (mid + Math.imul(ah0, bl7)) | 0;
30553 hi = (hi + Math.imul(ah0, bh7)) | 0;
30554 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30555 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
30556 w7 &= 0x3ffffff;
30557 /* k = 8 */
30558 lo = Math.imul(al8, bl0);
30559 mid = Math.imul(al8, bh0);
30560 mid = (mid + Math.imul(ah8, bl0)) | 0;
30561 hi = Math.imul(ah8, bh0);
30562 lo = (lo + Math.imul(al7, bl1)) | 0;
30563 mid = (mid + Math.imul(al7, bh1)) | 0;
30564 mid = (mid + Math.imul(ah7, bl1)) | 0;
30565 hi = (hi + Math.imul(ah7, bh1)) | 0;
30566 lo = (lo + Math.imul(al6, bl2)) | 0;
30567 mid = (mid + Math.imul(al6, bh2)) | 0;
30568 mid = (mid + Math.imul(ah6, bl2)) | 0;
30569 hi = (hi + Math.imul(ah6, bh2)) | 0;
30570 lo = (lo + Math.imul(al5, bl3)) | 0;
30571 mid = (mid + Math.imul(al5, bh3)) | 0;
30572 mid = (mid + Math.imul(ah5, bl3)) | 0;
30573 hi = (hi + Math.imul(ah5, bh3)) | 0;
30574 lo = (lo + Math.imul(al4, bl4)) | 0;
30575 mid = (mid + Math.imul(al4, bh4)) | 0;
30576 mid = (mid + Math.imul(ah4, bl4)) | 0;
30577 hi = (hi + Math.imul(ah4, bh4)) | 0;
30578 lo = (lo + Math.imul(al3, bl5)) | 0;
30579 mid = (mid + Math.imul(al3, bh5)) | 0;
30580 mid = (mid + Math.imul(ah3, bl5)) | 0;
30581 hi = (hi + Math.imul(ah3, bh5)) | 0;
30582 lo = (lo + Math.imul(al2, bl6)) | 0;
30583 mid = (mid + Math.imul(al2, bh6)) | 0;
30584 mid = (mid + Math.imul(ah2, bl6)) | 0;
30585 hi = (hi + Math.imul(ah2, bh6)) | 0;
30586 lo = (lo + Math.imul(al1, bl7)) | 0;
30587 mid = (mid + Math.imul(al1, bh7)) | 0;
30588 mid = (mid + Math.imul(ah1, bl7)) | 0;
30589 hi = (hi + Math.imul(ah1, bh7)) | 0;
30590 lo = (lo + Math.imul(al0, bl8)) | 0;
30591 mid = (mid + Math.imul(al0, bh8)) | 0;
30592 mid = (mid + Math.imul(ah0, bl8)) | 0;
30593 hi = (hi + Math.imul(ah0, bh8)) | 0;
30594 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30595 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
30596 w8 &= 0x3ffffff;
30597 /* k = 9 */
30598 lo = Math.imul(al9, bl0);
30599 mid = Math.imul(al9, bh0);
30600 mid = (mid + Math.imul(ah9, bl0)) | 0;
30601 hi = Math.imul(ah9, bh0);
30602 lo = (lo + Math.imul(al8, bl1)) | 0;
30603 mid = (mid + Math.imul(al8, bh1)) | 0;
30604 mid = (mid + Math.imul(ah8, bl1)) | 0;
30605 hi = (hi + Math.imul(ah8, bh1)) | 0;
30606 lo = (lo + Math.imul(al7, bl2)) | 0;
30607 mid = (mid + Math.imul(al7, bh2)) | 0;
30608 mid = (mid + Math.imul(ah7, bl2)) | 0;
30609 hi = (hi + Math.imul(ah7, bh2)) | 0;
30610 lo = (lo + Math.imul(al6, bl3)) | 0;
30611 mid = (mid + Math.imul(al6, bh3)) | 0;
30612 mid = (mid + Math.imul(ah6, bl3)) | 0;
30613 hi = (hi + Math.imul(ah6, bh3)) | 0;
30614 lo = (lo + Math.imul(al5, bl4)) | 0;
30615 mid = (mid + Math.imul(al5, bh4)) | 0;
30616 mid = (mid + Math.imul(ah5, bl4)) | 0;
30617 hi = (hi + Math.imul(ah5, bh4)) | 0;
30618 lo = (lo + Math.imul(al4, bl5)) | 0;
30619 mid = (mid + Math.imul(al4, bh5)) | 0;
30620 mid = (mid + Math.imul(ah4, bl5)) | 0;
30621 hi = (hi + Math.imul(ah4, bh5)) | 0;
30622 lo = (lo + Math.imul(al3, bl6)) | 0;
30623 mid = (mid + Math.imul(al3, bh6)) | 0;
30624 mid = (mid + Math.imul(ah3, bl6)) | 0;
30625 hi = (hi + Math.imul(ah3, bh6)) | 0;
30626 lo = (lo + Math.imul(al2, bl7)) | 0;
30627 mid = (mid + Math.imul(al2, bh7)) | 0;
30628 mid = (mid + Math.imul(ah2, bl7)) | 0;
30629 hi = (hi + Math.imul(ah2, bh7)) | 0;
30630 lo = (lo + Math.imul(al1, bl8)) | 0;
30631 mid = (mid + Math.imul(al1, bh8)) | 0;
30632 mid = (mid + Math.imul(ah1, bl8)) | 0;
30633 hi = (hi + Math.imul(ah1, bh8)) | 0;
30634 lo = (lo + Math.imul(al0, bl9)) | 0;
30635 mid = (mid + Math.imul(al0, bh9)) | 0;
30636 mid = (mid + Math.imul(ah0, bl9)) | 0;
30637 hi = (hi + Math.imul(ah0, bh9)) | 0;
30638 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30639 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
30640 w9 &= 0x3ffffff;
30641 /* k = 10 */
30642 lo = Math.imul(al9, bl1);
30643 mid = Math.imul(al9, bh1);
30644 mid = (mid + Math.imul(ah9, bl1)) | 0;
30645 hi = Math.imul(ah9, bh1);
30646 lo = (lo + Math.imul(al8, bl2)) | 0;
30647 mid = (mid + Math.imul(al8, bh2)) | 0;
30648 mid = (mid + Math.imul(ah8, bl2)) | 0;
30649 hi = (hi + Math.imul(ah8, bh2)) | 0;
30650 lo = (lo + Math.imul(al7, bl3)) | 0;
30651 mid = (mid + Math.imul(al7, bh3)) | 0;
30652 mid = (mid + Math.imul(ah7, bl3)) | 0;
30653 hi = (hi + Math.imul(ah7, bh3)) | 0;
30654 lo = (lo + Math.imul(al6, bl4)) | 0;
30655 mid = (mid + Math.imul(al6, bh4)) | 0;
30656 mid = (mid + Math.imul(ah6, bl4)) | 0;
30657 hi = (hi + Math.imul(ah6, bh4)) | 0;
30658 lo = (lo + Math.imul(al5, bl5)) | 0;
30659 mid = (mid + Math.imul(al5, bh5)) | 0;
30660 mid = (mid + Math.imul(ah5, bl5)) | 0;
30661 hi = (hi + Math.imul(ah5, bh5)) | 0;
30662 lo = (lo + Math.imul(al4, bl6)) | 0;
30663 mid = (mid + Math.imul(al4, bh6)) | 0;
30664 mid = (mid + Math.imul(ah4, bl6)) | 0;
30665 hi = (hi + Math.imul(ah4, bh6)) | 0;
30666 lo = (lo + Math.imul(al3, bl7)) | 0;
30667 mid = (mid + Math.imul(al3, bh7)) | 0;
30668 mid = (mid + Math.imul(ah3, bl7)) | 0;
30669 hi = (hi + Math.imul(ah3, bh7)) | 0;
30670 lo = (lo + Math.imul(al2, bl8)) | 0;
30671 mid = (mid + Math.imul(al2, bh8)) | 0;
30672 mid = (mid + Math.imul(ah2, bl8)) | 0;
30673 hi = (hi + Math.imul(ah2, bh8)) | 0;
30674 lo = (lo + Math.imul(al1, bl9)) | 0;
30675 mid = (mid + Math.imul(al1, bh9)) | 0;
30676 mid = (mid + Math.imul(ah1, bl9)) | 0;
30677 hi = (hi + Math.imul(ah1, bh9)) | 0;
30678 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30679 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
30680 w10 &= 0x3ffffff;
30681 /* k = 11 */
30682 lo = Math.imul(al9, bl2);
30683 mid = Math.imul(al9, bh2);
30684 mid = (mid + Math.imul(ah9, bl2)) | 0;
30685 hi = Math.imul(ah9, bh2);
30686 lo = (lo + Math.imul(al8, bl3)) | 0;
30687 mid = (mid + Math.imul(al8, bh3)) | 0;
30688 mid = (mid + Math.imul(ah8, bl3)) | 0;
30689 hi = (hi + Math.imul(ah8, bh3)) | 0;
30690 lo = (lo + Math.imul(al7, bl4)) | 0;
30691 mid = (mid + Math.imul(al7, bh4)) | 0;
30692 mid = (mid + Math.imul(ah7, bl4)) | 0;
30693 hi = (hi + Math.imul(ah7, bh4)) | 0;
30694 lo = (lo + Math.imul(al6, bl5)) | 0;
30695 mid = (mid + Math.imul(al6, bh5)) | 0;
30696 mid = (mid + Math.imul(ah6, bl5)) | 0;
30697 hi = (hi + Math.imul(ah6, bh5)) | 0;
30698 lo = (lo + Math.imul(al5, bl6)) | 0;
30699 mid = (mid + Math.imul(al5, bh6)) | 0;
30700 mid = (mid + Math.imul(ah5, bl6)) | 0;
30701 hi = (hi + Math.imul(ah5, bh6)) | 0;
30702 lo = (lo + Math.imul(al4, bl7)) | 0;
30703 mid = (mid + Math.imul(al4, bh7)) | 0;
30704 mid = (mid + Math.imul(ah4, bl7)) | 0;
30705 hi = (hi + Math.imul(ah4, bh7)) | 0;
30706 lo = (lo + Math.imul(al3, bl8)) | 0;
30707 mid = (mid + Math.imul(al3, bh8)) | 0;
30708 mid = (mid + Math.imul(ah3, bl8)) | 0;
30709 hi = (hi + Math.imul(ah3, bh8)) | 0;
30710 lo = (lo + Math.imul(al2, bl9)) | 0;
30711 mid = (mid + Math.imul(al2, bh9)) | 0;
30712 mid = (mid + Math.imul(ah2, bl9)) | 0;
30713 hi = (hi + Math.imul(ah2, bh9)) | 0;
30714 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30715 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
30716 w11 &= 0x3ffffff;
30717 /* k = 12 */
30718 lo = Math.imul(al9, bl3);
30719 mid = Math.imul(al9, bh3);
30720 mid = (mid + Math.imul(ah9, bl3)) | 0;
30721 hi = Math.imul(ah9, bh3);
30722 lo = (lo + Math.imul(al8, bl4)) | 0;
30723 mid = (mid + Math.imul(al8, bh4)) | 0;
30724 mid = (mid + Math.imul(ah8, bl4)) | 0;
30725 hi = (hi + Math.imul(ah8, bh4)) | 0;
30726 lo = (lo + Math.imul(al7, bl5)) | 0;
30727 mid = (mid + Math.imul(al7, bh5)) | 0;
30728 mid = (mid + Math.imul(ah7, bl5)) | 0;
30729 hi = (hi + Math.imul(ah7, bh5)) | 0;
30730 lo = (lo + Math.imul(al6, bl6)) | 0;
30731 mid = (mid + Math.imul(al6, bh6)) | 0;
30732 mid = (mid + Math.imul(ah6, bl6)) | 0;
30733 hi = (hi + Math.imul(ah6, bh6)) | 0;
30734 lo = (lo + Math.imul(al5, bl7)) | 0;
30735 mid = (mid + Math.imul(al5, bh7)) | 0;
30736 mid = (mid + Math.imul(ah5, bl7)) | 0;
30737 hi = (hi + Math.imul(ah5, bh7)) | 0;
30738 lo = (lo + Math.imul(al4, bl8)) | 0;
30739 mid = (mid + Math.imul(al4, bh8)) | 0;
30740 mid = (mid + Math.imul(ah4, bl8)) | 0;
30741 hi = (hi + Math.imul(ah4, bh8)) | 0;
30742 lo = (lo + Math.imul(al3, bl9)) | 0;
30743 mid = (mid + Math.imul(al3, bh9)) | 0;
30744 mid = (mid + Math.imul(ah3, bl9)) | 0;
30745 hi = (hi + Math.imul(ah3, bh9)) | 0;
30746 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30747 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
30748 w12 &= 0x3ffffff;
30749 /* k = 13 */
30750 lo = Math.imul(al9, bl4);
30751 mid = Math.imul(al9, bh4);
30752 mid = (mid + Math.imul(ah9, bl4)) | 0;
30753 hi = Math.imul(ah9, bh4);
30754 lo = (lo + Math.imul(al8, bl5)) | 0;
30755 mid = (mid + Math.imul(al8, bh5)) | 0;
30756 mid = (mid + Math.imul(ah8, bl5)) | 0;
30757 hi = (hi + Math.imul(ah8, bh5)) | 0;
30758 lo = (lo + Math.imul(al7, bl6)) | 0;
30759 mid = (mid + Math.imul(al7, bh6)) | 0;
30760 mid = (mid + Math.imul(ah7, bl6)) | 0;
30761 hi = (hi + Math.imul(ah7, bh6)) | 0;
30762 lo = (lo + Math.imul(al6, bl7)) | 0;
30763 mid = (mid + Math.imul(al6, bh7)) | 0;
30764 mid = (mid + Math.imul(ah6, bl7)) | 0;
30765 hi = (hi + Math.imul(ah6, bh7)) | 0;
30766 lo = (lo + Math.imul(al5, bl8)) | 0;
30767 mid = (mid + Math.imul(al5, bh8)) | 0;
30768 mid = (mid + Math.imul(ah5, bl8)) | 0;
30769 hi = (hi + Math.imul(ah5, bh8)) | 0;
30770 lo = (lo + Math.imul(al4, bl9)) | 0;
30771 mid = (mid + Math.imul(al4, bh9)) | 0;
30772 mid = (mid + Math.imul(ah4, bl9)) | 0;
30773 hi = (hi + Math.imul(ah4, bh9)) | 0;
30774 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30775 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
30776 w13 &= 0x3ffffff;
30777 /* k = 14 */
30778 lo = Math.imul(al9, bl5);
30779 mid = Math.imul(al9, bh5);
30780 mid = (mid + Math.imul(ah9, bl5)) | 0;
30781 hi = Math.imul(ah9, bh5);
30782 lo = (lo + Math.imul(al8, bl6)) | 0;
30783 mid = (mid + Math.imul(al8, bh6)) | 0;
30784 mid = (mid + Math.imul(ah8, bl6)) | 0;
30785 hi = (hi + Math.imul(ah8, bh6)) | 0;
30786 lo = (lo + Math.imul(al7, bl7)) | 0;
30787 mid = (mid + Math.imul(al7, bh7)) | 0;
30788 mid = (mid + Math.imul(ah7, bl7)) | 0;
30789 hi = (hi + Math.imul(ah7, bh7)) | 0;
30790 lo = (lo + Math.imul(al6, bl8)) | 0;
30791 mid = (mid + Math.imul(al6, bh8)) | 0;
30792 mid = (mid + Math.imul(ah6, bl8)) | 0;
30793 hi = (hi + Math.imul(ah6, bh8)) | 0;
30794 lo = (lo + Math.imul(al5, bl9)) | 0;
30795 mid = (mid + Math.imul(al5, bh9)) | 0;
30796 mid = (mid + Math.imul(ah5, bl9)) | 0;
30797 hi = (hi + Math.imul(ah5, bh9)) | 0;
30798 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30799 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
30800 w14 &= 0x3ffffff;
30801 /* k = 15 */
30802 lo = Math.imul(al9, bl6);
30803 mid = Math.imul(al9, bh6);
30804 mid = (mid + Math.imul(ah9, bl6)) | 0;
30805 hi = Math.imul(ah9, bh6);
30806 lo = (lo + Math.imul(al8, bl7)) | 0;
30807 mid = (mid + Math.imul(al8, bh7)) | 0;
30808 mid = (mid + Math.imul(ah8, bl7)) | 0;
30809 hi = (hi + Math.imul(ah8, bh7)) | 0;
30810 lo = (lo + Math.imul(al7, bl8)) | 0;
30811 mid = (mid + Math.imul(al7, bh8)) | 0;
30812 mid = (mid + Math.imul(ah7, bl8)) | 0;
30813 hi = (hi + Math.imul(ah7, bh8)) | 0;
30814 lo = (lo + Math.imul(al6, bl9)) | 0;
30815 mid = (mid + Math.imul(al6, bh9)) | 0;
30816 mid = (mid + Math.imul(ah6, bl9)) | 0;
30817 hi = (hi + Math.imul(ah6, bh9)) | 0;
30818 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30819 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
30820 w15 &= 0x3ffffff;
30821 /* k = 16 */
30822 lo = Math.imul(al9, bl7);
30823 mid = Math.imul(al9, bh7);
30824 mid = (mid + Math.imul(ah9, bl7)) | 0;
30825 hi = Math.imul(ah9, bh7);
30826 lo = (lo + Math.imul(al8, bl8)) | 0;
30827 mid = (mid + Math.imul(al8, bh8)) | 0;
30828 mid = (mid + Math.imul(ah8, bl8)) | 0;
30829 hi = (hi + Math.imul(ah8, bh8)) | 0;
30830 lo = (lo + Math.imul(al7, bl9)) | 0;
30831 mid = (mid + Math.imul(al7, bh9)) | 0;
30832 mid = (mid + Math.imul(ah7, bl9)) | 0;
30833 hi = (hi + Math.imul(ah7, bh9)) | 0;
30834 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30835 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
30836 w16 &= 0x3ffffff;
30837 /* k = 17 */
30838 lo = Math.imul(al9, bl8);
30839 mid = Math.imul(al9, bh8);
30840 mid = (mid + Math.imul(ah9, bl8)) | 0;
30841 hi = Math.imul(ah9, bh8);
30842 lo = (lo + Math.imul(al8, bl9)) | 0;
30843 mid = (mid + Math.imul(al8, bh9)) | 0;
30844 mid = (mid + Math.imul(ah8, bl9)) | 0;
30845 hi = (hi + Math.imul(ah8, bh9)) | 0;
30846 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30847 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
30848 w17 &= 0x3ffffff;
30849 /* k = 18 */
30850 lo = Math.imul(al9, bl9);
30851 mid = Math.imul(al9, bh9);
30852 mid = (mid + Math.imul(ah9, bl9)) | 0;
30853 hi = Math.imul(ah9, bh9);
30854 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
30855 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
30856 w18 &= 0x3ffffff;
30857 o[0] = w0;
30858 o[1] = w1;
30859 o[2] = w2;
30860 o[3] = w3;
30861 o[4] = w4;
30862 o[5] = w5;
30863 o[6] = w6;
30864 o[7] = w7;
30865 o[8] = w8;
30866 o[9] = w9;
30867 o[10] = w10;
30868 o[11] = w11;
30869 o[12] = w12;
30870 o[13] = w13;
30871 o[14] = w14;
30872 o[15] = w15;
30873 o[16] = w16;
30874 o[17] = w17;
30875 o[18] = w18;
30876 if (c !== 0) {
30877 o[19] = c;
30878 out.length++;
ab78acc6 30879 }
8b095871
IC
30880 return out;
30881 };
30882
30883 // Polyfill comb
30884 if (!Math.imul) {
30885 comb10MulTo = smallMulTo;
30886 }
30887
30888 function bigMulTo (self, num, out) {
30889 out.negative = num.negative ^ self.negative;
30890 out.length = self.length + num.length;
30891
30892 var carry = 0;
30893 var hncarry = 0;
30894 for (var k = 0; k < out.length - 1; k++) {
30895 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
30896 // note that ncarry could be >= 0x3ffffff
30897 var ncarry = hncarry;
30898 hncarry = 0;
30899 var rword = carry & 0x3ffffff;
30900 var maxJ = Math.min(k, num.length - 1);
30901 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
30902 var i = k - j;
30903 var a = self.words[i] | 0;
30904 var b = num.words[j] | 0;
30905 var r = a * b;
30906
30907 var lo = r & 0x3ffffff;
30908 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
30909 lo = (lo + rword) | 0;
30910 rword = lo & 0x3ffffff;
30911 ncarry = (ncarry + (lo >>> 26)) | 0;
30912
30913 hncarry += ncarry >>> 26;
30914 ncarry &= 0x3ffffff;
30915 }
30916 out.words[k] = rword;
30917 carry = ncarry;
30918 ncarry = hncarry;
30919 }
30920 if (carry !== 0) {
30921 out.words[k] = carry;
30922 } else {
30923 out.length--;
ab78acc6 30924 }
8b095871
IC
30925
30926 return out.strip();
ab78acc6 30927 }
8b095871
IC
30928
30929 function jumboMulTo (self, num, out) {
30930 var fftm = new FFTM();
30931 return fftm.mulp(self, num, out);
ab78acc6 30932 }
8b095871
IC
30933
30934 BN.prototype.mulTo = function mulTo (num, out) {
30935 var res;
30936 var len = this.length + num.length;
30937 if (this.length === 10 && num.length === 10) {
30938 res = comb10MulTo(this, num, out);
30939 } else if (len < 63) {
30940 res = smallMulTo(this, num, out);
30941 } else if (len < 1024) {
30942 res = bigMulTo(this, num, out);
ab78acc6 30943 } else {
8b095871 30944 res = jumboMulTo(this, num, out);
ab78acc6 30945 }
8b095871
IC
30946
30947 return res;
30948 };
30949
30950 // Cooley-Tukey algorithm for FFT
30951 // slightly revisited to rely on looping instead of recursion
30952
30953 function FFTM (x, y) {
30954 this.x = x;
30955 this.y = y;
ab78acc6 30956 }
8b095871
IC
30957
30958 FFTM.prototype.makeRBT = function makeRBT (N) {
30959 var t = new Array(N);
30960 var l = BN.prototype._countBits(N) - 1;
30961 for (var i = 0; i < N; i++) {
30962 t[i] = this.revBin(i, l, N);
30963 }
30964
30965 return t;
30966 };
30967
30968 // Returns binary-reversed representation of `x`
30969 FFTM.prototype.revBin = function revBin (x, l, N) {
30970 if (x === 0 || x === N - 1) return x;
30971
30972 var rb = 0;
30973 for (var i = 0; i < l; i++) {
30974 rb |= (x & 1) << (l - i - 1);
30975 x >>= 1;
30976 }
30977
30978 return rb;
30979 };
30980
30981 // Performs "tweedling" phase, therefore 'emulating'
30982 // behaviour of the recursive algorithm
30983 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
30984 for (var i = 0; i < N; i++) {
30985 rtws[i] = rws[rbt[i]];
30986 itws[i] = iws[rbt[i]];
30987 }
30988 };
30989
30990 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
30991 this.permute(rbt, rws, iws, rtws, itws, N);
30992
30993 for (var s = 1; s < N; s <<= 1) {
30994 var l = s << 1;
30995
30996 var rtwdf = Math.cos(2 * Math.PI / l);
30997 var itwdf = Math.sin(2 * Math.PI / l);
30998
30999 for (var p = 0; p < N; p += l) {
31000 var rtwdf_ = rtwdf;
31001 var itwdf_ = itwdf;
31002
31003 for (var j = 0; j < s; j++) {
31004 var re = rtws[p + j];
31005 var ie = itws[p + j];
31006
31007 var ro = rtws[p + j + s];
31008 var io = itws[p + j + s];
31009
31010 var rx = rtwdf_ * ro - itwdf_ * io;
31011
31012 io = rtwdf_ * io + itwdf_ * ro;
31013 ro = rx;
31014
31015 rtws[p + j] = re + ro;
31016 itws[p + j] = ie + io;
31017
31018 rtws[p + j + s] = re - ro;
31019 itws[p + j + s] = ie - io;
31020
31021 /* jshint maxdepth : false */
31022 if (j !== l) {
31023 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
31024
31025 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
31026 rtwdf_ = rx;
31027 }
31028 }
31029 }
ab78acc6 31030 }
8b095871
IC
31031 };
31032
31033 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
31034 var N = Math.max(m, n) | 1;
31035 var odd = N & 1;
31036 var i = 0;
31037 for (N = N / 2 | 0; N; N = N >>> 1) {
31038 i++;
ab78acc6 31039 }
ebd8d4e8 31040
8b095871
IC
31041 return 1 << i + 1 + odd;
31042 };
ebd8d4e8 31043
8b095871
IC
31044 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
31045 if (N <= 1) return;
ebd8d4e8 31046
8b095871
IC
31047 for (var i = 0; i < N / 2; i++) {
31048 var t = rws[i];
ebd8d4e8 31049
8b095871
IC
31050 rws[i] = rws[N - i - 1];
31051 rws[N - i - 1] = t;
ebd8d4e8 31052
8b095871 31053 t = iws[i];
ebd8d4e8 31054
8b095871
IC
31055 iws[i] = -iws[N - i - 1];
31056 iws[N - i - 1] = -t;
31057 }
31058 };
ebd8d4e8 31059
8b095871
IC
31060 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
31061 var carry = 0;
31062 for (var i = 0; i < N / 2; i++) {
31063 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
31064 Math.round(ws[2 * i] / N) +
31065 carry;
ebd8d4e8 31066
8b095871 31067 ws[i] = w & 0x3ffffff;
ebd8d4e8 31068
8b095871
IC
31069 if (w < 0x4000000) {
31070 carry = 0;
31071 } else {
31072 carry = w / 0x4000000 | 0;
31073 }
31074 }
ebd8d4e8 31075
8b095871
IC
31076 return ws;
31077 };
ebd8d4e8 31078
8b095871
IC
31079 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
31080 var carry = 0;
31081 for (var i = 0; i < len; i++) {
31082 carry = carry + (ws[i] | 0);
ebd8d4e8 31083
8b095871
IC
31084 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
31085 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
31086 }
ebd8d4e8 31087
8b095871
IC
31088 // Pad with zeroes
31089 for (i = 2 * len; i < N; ++i) {
31090 rws[i] = 0;
31091 }
ebd8d4e8 31092
8b095871
IC
31093 assert(carry === 0);
31094 assert((carry & ~0x1fff) === 0);
31095 };
ebd8d4e8 31096
8b095871
IC
31097 FFTM.prototype.stub = function stub (N) {
31098 var ph = new Array(N);
31099 for (var i = 0; i < N; i++) {
31100 ph[i] = 0;
31101 }
ebd8d4e8 31102
8b095871
IC
31103 return ph;
31104 };
ebd8d4e8 31105
8b095871
IC
31106 FFTM.prototype.mulp = function mulp (x, y, out) {
31107 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 31108
8b095871 31109 var rbt = this.makeRBT(N);
ebd8d4e8 31110
8b095871 31111 var _ = this.stub(N);
ebd8d4e8 31112
8b095871
IC
31113 var rws = new Array(N);
31114 var rwst = new Array(N);
31115 var iwst = new Array(N);
ebd8d4e8 31116
8b095871
IC
31117 var nrws = new Array(N);
31118 var nrwst = new Array(N);
31119 var niwst = new Array(N);
ebd8d4e8 31120
8b095871
IC
31121 var rmws = out.words;
31122 rmws.length = N;
ebd8d4e8 31123
8b095871
IC
31124 this.convert13b(x.words, x.length, rws, N);
31125 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 31126
8b095871
IC
31127 this.transform(rws, _, rwst, iwst, N, rbt);
31128 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 31129
8b095871
IC
31130 for (var i = 0; i < N; i++) {
31131 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
31132 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
31133 rwst[i] = rx;
31134 }
ebd8d4e8 31135
8b095871
IC
31136 this.conjugate(rwst, iwst, N);
31137 this.transform(rwst, iwst, rmws, _, N, rbt);
31138 this.conjugate(rmws, _, N);
31139 this.normalize13b(rmws, N);
ebd8d4e8 31140
8b095871
IC
31141 out.negative = x.negative ^ y.negative;
31142 out.length = x.length + y.length;
31143 return out.strip();
31144 };
ebd8d4e8 31145
8b095871
IC
31146 // Multiply `this` by `num`
31147 BN.prototype.mul = function mul (num) {
31148 var out = new BN(null);
31149 out.words = new Array(this.length + num.length);
31150 return this.mulTo(num, out);
31151 };
ab78acc6 31152
8b095871
IC
31153 // Multiply employing FFT
31154 BN.prototype.mulf = function mulf (num) {
31155 var out = new BN(null);
31156 out.words = new Array(this.length + num.length);
31157 return jumboMulTo(this, num, out);
31158 };
ebd8d4e8 31159
8b095871
IC
31160 // In-place Multiplication
31161 BN.prototype.imul = function imul (num) {
31162 return this.clone().mulTo(num, this);
31163 };
ab78acc6 31164
8b095871
IC
31165 BN.prototype.imuln = function imuln (num) {
31166 assert(typeof num === 'number');
31167 assert(num < 0x4000000);
ab78acc6 31168
8b095871
IC
31169 // Carry
31170 var carry = 0;
31171 for (var i = 0; i < this.length; i++) {
31172 var w = (this.words[i] | 0) * num;
31173 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
31174 carry >>= 26;
31175 carry += (w / 0x4000000) | 0;
31176 // NOTE: lo is 27bit maximum
31177 carry += lo >>> 26;
31178 this.words[i] = lo & 0x3ffffff;
31179 }
ab78acc6 31180
8b095871
IC
31181 if (carry !== 0) {
31182 this.words[i] = carry;
31183 this.length++;
31184 }
ab78acc6 31185
8b095871
IC
31186 return this;
31187 };
ab78acc6 31188
8b095871
IC
31189 BN.prototype.muln = function muln (num) {
31190 return this.clone().imuln(num);
31191 };
ebd8d4e8 31192
8b095871
IC
31193 // `this` * `this`
31194 BN.prototype.sqr = function sqr () {
31195 return this.mul(this);
31196 };
ebd8d4e8 31197
8b095871
IC
31198 // `this` * `this` in-place
31199 BN.prototype.isqr = function isqr () {
31200 return this.imul(this.clone());
31201 };
ab78acc6 31202
8b095871
IC
31203 // Math.pow(`this`, `num`)
31204 BN.prototype.pow = function pow (num) {
31205 var w = toBitArray(num);
31206 if (w.length === 0) return new BN(1);
ab78acc6 31207
8b095871
IC
31208 // Skip leading zeroes
31209 var res = this;
31210 for (var i = 0; i < w.length; i++, res = res.sqr()) {
31211 if (w[i] !== 0) break;
31212 }
ebd8d4e8 31213
8b095871
IC
31214 if (++i < w.length) {
31215 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
31216 if (w[i] === 0) continue;
ebd8d4e8 31217
8b095871
IC
31218 res = res.mul(q);
31219 }
ab78acc6
IC
31220 }
31221
8b095871
IC
31222 return res;
31223 };
ab78acc6 31224
8b095871
IC
31225 // Shift-left in-place
31226 BN.prototype.iushln = function iushln (bits) {
31227 assert(typeof bits === 'number' && bits >= 0);
31228 var r = bits % 26;
31229 var s = (bits - r) / 26;
31230 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
31231 var i;
31232
31233 if (r !== 0) {
31234 var carry = 0;
31235
31236 for (i = 0; i < this.length; i++) {
31237 var newCarry = this.words[i] & carryMask;
31238 var c = ((this.words[i] | 0) - newCarry) << r;
31239 this.words[i] = c | carry;
31240 carry = newCarry >>> (26 - r);
31241 }
31242
31243 if (carry) {
31244 this.words[i] = carry;
31245 this.length++;
31246 }
ab78acc6 31247 }
ebd8d4e8 31248
8b095871
IC
31249 if (s !== 0) {
31250 for (i = this.length - 1; i >= 0; i--) {
31251 this.words[i + s] = this.words[i];
31252 }
ebd8d4e8 31253
8b095871
IC
31254 for (i = 0; i < s; i++) {
31255 this.words[i] = 0;
31256 }
ebd8d4e8 31257
8b095871
IC
31258 this.length += s;
31259 }
ebd8d4e8 31260
8b095871
IC
31261 return this.strip();
31262 };
ebd8d4e8 31263
8b095871
IC
31264 BN.prototype.ishln = function ishln (bits) {
31265 // TODO(indutny): implement me
31266 assert(this.negative === 0);
31267 return this.iushln(bits);
31268 };
ebd8d4e8 31269
8b095871
IC
31270 // Shift-right in-place
31271 // NOTE: `hint` is a lowest bit before trailing zeroes
31272 // NOTE: if `extended` is present - it will be filled with destroyed bits
31273 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
31274 assert(typeof bits === 'number' && bits >= 0);
31275 var h;
31276 if (hint) {
31277 h = (hint - (hint % 26)) / 26;
31278 } else {
31279 h = 0;
31280 }
ebd8d4e8 31281
8b095871
IC
31282 var r = bits % 26;
31283 var s = Math.min((bits - r) / 26, this.length);
31284 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31285 var maskedWords = extended;
31286
31287 h -= s;
31288 h = Math.max(0, h);
31289
31290 // Extended mode, copy masked part
31291 if (maskedWords) {
31292 for (var i = 0; i < s; i++) {
31293 maskedWords.words[i] = this.words[i];
31294 }
31295 maskedWords.length = s;
ab78acc6 31296 }
ebd8d4e8 31297
8b095871
IC
31298 if (s === 0) {
31299 // No-op, we should not move anything at all
31300 } else if (this.length > s) {
31301 this.length -= s;
31302 for (i = 0; i < this.length; i++) {
31303 this.words[i] = this.words[i + s];
31304 }
31305 } else {
31306 this.words[0] = 0;
31307 this.length = 1;
31308 }
ab78acc6 31309
8b095871
IC
31310 var carry = 0;
31311 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
31312 var word = this.words[i] | 0;
31313 this.words[i] = (carry << (26 - r)) | (word >>> r);
31314 carry = word & mask;
ab78acc6 31315 }
ebd8d4e8 31316
8b095871
IC
31317 // Push carried bits as a mask
31318 if (maskedWords && carry !== 0) {
31319 maskedWords.words[maskedWords.length++] = carry;
31320 }
31321
31322 if (this.length === 0) {
31323 this.words[0] = 0;
31324 this.length = 1;
31325 }
31326
31327 return this.strip();
31328 };
31329
31330 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
31331 // TODO(indutny): implement me
31332 assert(this.negative === 0);
31333 return this.iushrn(bits, hint, extended);
31334 };
31335
31336 // Shift-left
31337 BN.prototype.shln = function shln (bits) {
31338 return this.clone().ishln(bits);
31339 };
31340
31341 BN.prototype.ushln = function ushln (bits) {
31342 return this.clone().iushln(bits);
31343 };
31344
31345 // Shift-right
31346 BN.prototype.shrn = function shrn (bits) {
31347 return this.clone().ishrn(bits);
31348 };
ebd8d4e8 31349
8b095871
IC
31350 BN.prototype.ushrn = function ushrn (bits) {
31351 return this.clone().iushrn(bits);
31352 };
ebd8d4e8 31353
8b095871
IC
31354 // Test if n bit is set
31355 BN.prototype.testn = function testn (bit) {
31356 assert(typeof bit === 'number' && bit >= 0);
31357 var r = bit % 26;
31358 var s = (bit - r) / 26;
31359 var q = 1 << r;
ebd8d4e8 31360
8b095871
IC
31361 // Fast case: bit is much higher than all existing words
31362 if (this.length <= s) return false;
ab78acc6 31363
8b095871
IC
31364 // Check bit and return
31365 var w = this.words[s];
ab78acc6 31366
8b095871
IC
31367 return !!(w & q);
31368 };
ab78acc6 31369
8b095871
IC
31370 // Return only lowers bits of number (in-place)
31371 BN.prototype.imaskn = function imaskn (bits) {
31372 assert(typeof bits === 'number' && bits >= 0);
31373 var r = bits % 26;
31374 var s = (bits - r) / 26;
ab78acc6 31375
8b095871 31376 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 31377
8b095871
IC
31378 if (this.length <= s) {
31379 return this;
31380 }
ab78acc6 31381
8b095871
IC
31382 if (r !== 0) {
31383 s++;
31384 }
31385 this.length = Math.min(s, this.length);
ab78acc6 31386
8b095871
IC
31387 if (r !== 0) {
31388 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
31389 this.words[this.length - 1] &= mask;
31390 }
ab78acc6 31391
8b095871
IC
31392 return this.strip();
31393 };
ab78acc6 31394
8b095871
IC
31395 // Return only lowers bits of number
31396 BN.prototype.maskn = function maskn (bits) {
31397 return this.clone().imaskn(bits);
31398 };
ebd8d4e8 31399
8b095871
IC
31400 // Add plain number `num` to `this`
31401 BN.prototype.iaddn = function iaddn (num) {
31402 assert(typeof num === 'number');
31403 assert(num < 0x4000000);
31404 if (num < 0) return this.isubn(-num);
31405
31406 // Possible sign change
31407 if (this.negative !== 0) {
31408 if (this.length === 1 && (this.words[0] | 0) < num) {
31409 this.words[0] = num - (this.words[0] | 0);
31410 this.negative = 0;
31411 return this;
31412 }
ebd8d4e8 31413
8b095871
IC
31414 this.negative = 0;
31415 this.isubn(num);
31416 this.negative = 1;
31417 return this;
31418 }
ebd8d4e8 31419
8b095871
IC
31420 // Add without checks
31421 return this._iaddn(num);
31422 };
ebd8d4e8 31423
8b095871
IC
31424 BN.prototype._iaddn = function _iaddn (num) {
31425 this.words[0] += num;
ebd8d4e8 31426
8b095871
IC
31427 // Carry
31428 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
31429 this.words[i] -= 0x4000000;
31430 if (i === this.length - 1) {
31431 this.words[i + 1] = 1;
31432 } else {
31433 this.words[i + 1]++;
31434 }
31435 }
31436 this.length = Math.max(this.length, i + 1);
ebd8d4e8 31437
8b095871
IC
31438 return this;
31439 };
ebd8d4e8 31440
8b095871
IC
31441 // Subtract plain number `num` from `this`
31442 BN.prototype.isubn = function isubn (num) {
31443 assert(typeof num === 'number');
31444 assert(num < 0x4000000);
31445 if (num < 0) return this.iaddn(-num);
ebd8d4e8 31446
8b095871
IC
31447 if (this.negative !== 0) {
31448 this.negative = 0;
31449 this.iaddn(num);
31450 this.negative = 1;
31451 return this;
31452 }
ebd8d4e8 31453
8b095871 31454 this.words[0] -= num;
ab78acc6 31455
8b095871
IC
31456 if (this.length === 1 && this.words[0] < 0) {
31457 this.words[0] = -this.words[0];
31458 this.negative = 1;
31459 } else {
31460 // Carry
31461 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
31462 this.words[i] += 0x4000000;
31463 this.words[i + 1] -= 1;
31464 }
31465 }
ebd8d4e8 31466
8b095871
IC
31467 return this.strip();
31468 };
ab78acc6 31469
8b095871
IC
31470 BN.prototype.addn = function addn (num) {
31471 return this.clone().iaddn(num);
31472 };
ab78acc6 31473
8b095871
IC
31474 BN.prototype.subn = function subn (num) {
31475 return this.clone().isubn(num);
31476 };
ab78acc6 31477
8b095871
IC
31478 BN.prototype.iabs = function iabs () {
31479 this.negative = 0;
ab78acc6 31480
8b095871
IC
31481 return this;
31482 };
ab78acc6 31483
8b095871
IC
31484 BN.prototype.abs = function abs () {
31485 return this.clone().iabs();
31486 };
ab78acc6 31487
8b095871
IC
31488 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
31489 var len = num.length + shift;
31490 var i;
ab78acc6 31491
8b095871 31492 this._expand(len);
ab78acc6 31493
8b095871
IC
31494 var w;
31495 var carry = 0;
31496 for (i = 0; i < num.length; i++) {
31497 w = (this.words[i + shift] | 0) + carry;
31498 var right = (num.words[i] | 0) * mul;
31499 w -= right & 0x3ffffff;
31500 carry = (w >> 26) - ((right / 0x4000000) | 0);
31501 this.words[i + shift] = w & 0x3ffffff;
31502 }
31503 for (; i < this.length - shift; i++) {
31504 w = (this.words[i + shift] | 0) + carry;
31505 carry = w >> 26;
31506 this.words[i + shift] = w & 0x3ffffff;
31507 }
ebd8d4e8 31508
8b095871 31509 if (carry === 0) return this.strip();
ab78acc6 31510
8b095871
IC
31511 // Subtraction overflow
31512 assert(carry === -1);
31513 carry = 0;
31514 for (i = 0; i < this.length; i++) {
31515 w = -(this.words[i] | 0) + carry;
31516 carry = w >> 26;
31517 this.words[i] = w & 0x3ffffff;
31518 }
31519 this.negative = 1;
ab78acc6 31520
8b095871
IC
31521 return this.strip();
31522 };
ab78acc6 31523
8b095871
IC
31524 BN.prototype._wordDiv = function _wordDiv (num, mode) {
31525 var shift = this.length - num.length;
ebd8d4e8 31526
8b095871
IC
31527 var a = this.clone();
31528 var b = num;
ab78acc6 31529
8b095871
IC
31530 // Normalize
31531 var bhi = b.words[b.length - 1] | 0;
31532 var bhiBits = this._countBits(bhi);
31533 shift = 26 - bhiBits;
31534 if (shift !== 0) {
31535 b = b.ushln(shift);
31536 a.iushln(shift);
31537 bhi = b.words[b.length - 1] | 0;
31538 }
ebd8d4e8 31539
8b095871
IC
31540 // Initialize quotient
31541 var m = a.length - b.length;
31542 var q;
ab78acc6 31543
8b095871
IC
31544 if (mode !== 'mod') {
31545 q = new BN(null);
31546 q.length = m + 1;
31547 q.words = new Array(q.length);
31548 for (var i = 0; i < q.length; i++) {
31549 q.words[i] = 0;
31550 }
31551 }
ebd8d4e8 31552
8b095871
IC
31553 var diff = a.clone()._ishlnsubmul(b, 1, m);
31554 if (diff.negative === 0) {
31555 a = diff;
31556 if (q) {
31557 q.words[m] = 1;
31558 }
31559 }
ebd8d4e8 31560
8b095871
IC
31561 for (var j = m - 1; j >= 0; j--) {
31562 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
31563 (a.words[b.length + j - 1] | 0);
ebd8d4e8 31564
8b095871
IC
31565 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
31566 // (0x7ffffff)
31567 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 31568
8b095871
IC
31569 a._ishlnsubmul(b, qj, j);
31570 while (a.negative !== 0) {
31571 qj--;
31572 a.negative = 0;
31573 a._ishlnsubmul(b, 1, j);
31574 if (!a.isZero()) {
31575 a.negative ^= 1;
31576 }
31577 }
31578 if (q) {
31579 q.words[j] = qj;
31580 }
31581 }
31582 if (q) {
31583 q.strip();
31584 }
31585 a.strip();
ebd8d4e8 31586
8b095871
IC
31587 // Denormalize
31588 if (mode !== 'div' && shift !== 0) {
31589 a.iushrn(shift);
31590 }
ebd8d4e8 31591
8b095871
IC
31592 return {
31593 div: q || null,
31594 mod: a
31595 };
31596 };
ebd8d4e8 31597
8b095871
IC
31598 // NOTE: 1) `mode` can be set to `mod` to request mod only,
31599 // to `div` to request div only, or be absent to
31600 // request both div & mod
31601 // 2) `positive` is true if unsigned mod is requested
31602 BN.prototype.divmod = function divmod (num, mode, positive) {
31603 assert(!num.isZero());
31604
31605 if (this.isZero()) {
31606 return {
31607 div: new BN(0),
31608 mod: new BN(0)
31609 };
31610 }
ebd8d4e8 31611
8b095871
IC
31612 var div, mod, res;
31613 if (this.negative !== 0 && num.negative === 0) {
31614 res = this.neg().divmod(num, mode);
ebd8d4e8 31615
8b095871
IC
31616 if (mode !== 'mod') {
31617 div = res.div.neg();
31618 }
ebd8d4e8 31619
8b095871
IC
31620 if (mode !== 'div') {
31621 mod = res.mod.neg();
31622 if (positive && mod.negative !== 0) {
31623 mod.iadd(num);
31624 }
31625 }
ebd8d4e8 31626
8b095871
IC
31627 return {
31628 div: div,
31629 mod: mod
31630 };
31631 }
ebd8d4e8 31632
8b095871
IC
31633 if (this.negative === 0 && num.negative !== 0) {
31634 res = this.divmod(num.neg(), mode);
ebd8d4e8 31635
8b095871
IC
31636 if (mode !== 'mod') {
31637 div = res.div.neg();
31638 }
ebd8d4e8 31639
8b095871
IC
31640 return {
31641 div: div,
31642 mod: res.mod
31643 };
31644 }
ebd8d4e8 31645
8b095871
IC
31646 if ((this.negative & num.negative) !== 0) {
31647 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 31648
8b095871
IC
31649 if (mode !== 'div') {
31650 mod = res.mod.neg();
31651 if (positive && mod.negative !== 0) {
31652 mod.isub(num);
31653 }
31654 }
ebd8d4e8 31655
8b095871
IC
31656 return {
31657 div: res.div,
31658 mod: mod
31659 };
31660 }
ebd8d4e8 31661
8b095871 31662 // Both numbers are positive at this point
ebd8d4e8 31663
8b095871
IC
31664 // Strip both numbers to approximate shift value
31665 if (num.length > this.length || this.cmp(num) < 0) {
31666 return {
31667 div: new BN(0),
31668 mod: this
31669 };
31670 }
ebd8d4e8 31671
8b095871
IC
31672 // Very short reduction
31673 if (num.length === 1) {
31674 if (mode === 'div') {
31675 return {
31676 div: this.divn(num.words[0]),
31677 mod: null
31678 };
31679 }
ebd8d4e8 31680
8b095871
IC
31681 if (mode === 'mod') {
31682 return {
31683 div: null,
31684 mod: new BN(this.modn(num.words[0]))
31685 };
31686 }
ebd8d4e8 31687
8b095871
IC
31688 return {
31689 div: this.divn(num.words[0]),
31690 mod: new BN(this.modn(num.words[0]))
31691 };
31692 }
ebd8d4e8 31693
8b095871
IC
31694 return this._wordDiv(num, mode);
31695 };
ab78acc6 31696
8b095871
IC
31697 // Find `this` / `num`
31698 BN.prototype.div = function div (num) {
31699 return this.divmod(num, 'div', false).div;
31700 };
ab78acc6 31701
8b095871
IC
31702 // Find `this` % `num`
31703 BN.prototype.mod = function mod (num) {
31704 return this.divmod(num, 'mod', false).mod;
31705 };
ab78acc6 31706
8b095871
IC
31707 BN.prototype.umod = function umod (num) {
31708 return this.divmod(num, 'mod', true).mod;
31709 };
ebd8d4e8 31710
8b095871
IC
31711 // Find Round(`this` / `num`)
31712 BN.prototype.divRound = function divRound (num) {
31713 var dm = this.divmod(num);
ebd8d4e8 31714
8b095871
IC
31715 // Fast case - exact division
31716 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 31717
8b095871 31718 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 31719
8b095871
IC
31720 var half = num.ushrn(1);
31721 var r2 = num.andln(1);
31722 var cmp = mod.cmp(half);
ebd8d4e8 31723
8b095871
IC
31724 // Round down
31725 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 31726
8b095871
IC
31727 // Round up
31728 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
31729 };
ab78acc6 31730
8b095871
IC
31731 BN.prototype.modn = function modn (num) {
31732 assert(num <= 0x3ffffff);
31733 var p = (1 << 26) % num;
ab78acc6 31734
8b095871
IC
31735 var acc = 0;
31736 for (var i = this.length - 1; i >= 0; i--) {
31737 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 31738 }
ab78acc6 31739
8b095871
IC
31740 return acc;
31741 };
31742
31743 // In-place division by number
31744 BN.prototype.idivn = function idivn (num) {
31745 assert(num <= 0x3ffffff);
31746
31747 var carry = 0;
31748 for (var i = this.length - 1; i >= 0; i--) {
31749 var w = (this.words[i] | 0) + carry * 0x4000000;
31750 this.words[i] = (w / num) | 0;
31751 carry = w % num;
ebd8d4e8 31752 }
ebd8d4e8 31753
8b095871
IC
31754 return this.strip();
31755 };
ab78acc6 31756
8b095871
IC
31757 BN.prototype.divn = function divn (num) {
31758 return this.clone().idivn(num);
31759 };
ebd8d4e8 31760
8b095871
IC
31761 BN.prototype.egcd = function egcd (p) {
31762 assert(p.negative === 0);
31763 assert(!p.isZero());
ebd8d4e8 31764
8b095871
IC
31765 var x = this;
31766 var y = p.clone();
31767
31768 if (x.negative !== 0) {
31769 x = x.umod(p);
31770 } else {
31771 x = x.clone();
31772 }
31773
31774 // A * x + B * y = x
31775 var A = new BN(1);
31776 var B = new BN(0);
31777
31778 // C * x + D * y = y
31779 var C = new BN(0);
31780 var D = new BN(1);
31781
31782 var g = 0;
31783
31784 while (x.isEven() && y.isEven()) {
31785 x.iushrn(1);
31786 y.iushrn(1);
31787 ++g;
31788 }
ebd8d4e8 31789
8b095871
IC
31790 var yp = y.clone();
31791 var xp = x.clone();
ebd8d4e8 31792
8b095871
IC
31793 while (!x.isZero()) {
31794 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31795 if (i > 0) {
31796 x.iushrn(i);
31797 while (i-- > 0) {
31798 if (A.isOdd() || B.isOdd()) {
31799 A.iadd(yp);
31800 B.isub(xp);
31801 }
ebd8d4e8 31802
8b095871
IC
31803 A.iushrn(1);
31804 B.iushrn(1);
31805 }
31806 }
ebd8d4e8 31807
8b095871
IC
31808 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31809 if (j > 0) {
31810 y.iushrn(j);
31811 while (j-- > 0) {
31812 if (C.isOdd() || D.isOdd()) {
31813 C.iadd(yp);
31814 D.isub(xp);
31815 }
ab78acc6 31816
8b095871
IC
31817 C.iushrn(1);
31818 D.iushrn(1);
31819 }
31820 }
ebd8d4e8 31821
8b095871
IC
31822 if (x.cmp(y) >= 0) {
31823 x.isub(y);
31824 A.isub(C);
31825 B.isub(D);
31826 } else {
31827 y.isub(x);
31828 C.isub(A);
31829 D.isub(B);
31830 }
31831 }
ebd8d4e8 31832
8b095871
IC
31833 return {
31834 a: C,
31835 b: D,
31836 gcd: y.iushln(g)
31837 };
31838 };
ebd8d4e8 31839
8b095871
IC
31840 // This is reduced incarnation of the binary EEA
31841 // above, designated to invert members of the
31842 // _prime_ fields F(p) at a maximal speed
31843 BN.prototype._invmp = function _invmp (p) {
31844 assert(p.negative === 0);
31845 assert(!p.isZero());
ebd8d4e8 31846
8b095871
IC
31847 var a = this;
31848 var b = p.clone();
ebd8d4e8 31849
8b095871
IC
31850 if (a.negative !== 0) {
31851 a = a.umod(p);
31852 } else {
31853 a = a.clone();
31854 }
ebd8d4e8 31855
8b095871
IC
31856 var x1 = new BN(1);
31857 var x2 = new BN(0);
ebd8d4e8 31858
8b095871 31859 var delta = b.clone();
ebd8d4e8 31860
8b095871
IC
31861 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
31862 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
31863 if (i > 0) {
31864 a.iushrn(i);
31865 while (i-- > 0) {
31866 if (x1.isOdd()) {
31867 x1.iadd(delta);
31868 }
ebd8d4e8 31869
8b095871
IC
31870 x1.iushrn(1);
31871 }
31872 }
ab78acc6 31873
8b095871
IC
31874 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
31875 if (j > 0) {
31876 b.iushrn(j);
31877 while (j-- > 0) {
31878 if (x2.isOdd()) {
31879 x2.iadd(delta);
31880 }
ebd8d4e8 31881
8b095871
IC
31882 x2.iushrn(1);
31883 }
31884 }
ebd8d4e8 31885
8b095871
IC
31886 if (a.cmp(b) >= 0) {
31887 a.isub(b);
31888 x1.isub(x2);
31889 } else {
31890 b.isub(a);
31891 x2.isub(x1);
31892 }
31893 }
ebd8d4e8 31894
8b095871
IC
31895 var res;
31896 if (a.cmpn(1) === 0) {
31897 res = x1;
31898 } else {
31899 res = x2;
31900 }
ebd8d4e8 31901
8b095871
IC
31902 if (res.cmpn(0) < 0) {
31903 res.iadd(p);
ab78acc6
IC
31904 }
31905
8b095871
IC
31906 return res;
31907 };
ebd8d4e8 31908
8b095871
IC
31909 BN.prototype.gcd = function gcd (num) {
31910 if (this.isZero()) return num.abs();
31911 if (num.isZero()) return this.abs();
31912
31913 var a = this.clone();
31914 var b = num.clone();
31915 a.negative = 0;
31916 b.negative = 0;
31917
31918 // Remove common factor of two
31919 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
31920 a.iushrn(1);
31921 b.iushrn(1);
ab78acc6 31922 }
ab78acc6 31923
8b095871
IC
31924 do {
31925 while (a.isEven()) {
31926 a.iushrn(1);
31927 }
31928 while (b.isEven()) {
31929 b.iushrn(1);
31930 }
ebd8d4e8 31931
8b095871
IC
31932 var r = a.cmp(b);
31933 if (r < 0) {
31934 // Swap `a` and `b` to make `a` always bigger than `b`
31935 var t = a;
31936 a = b;
31937 b = t;
31938 } else if (r === 0 || b.cmpn(1) === 0) {
31939 break;
31940 }
ab78acc6 31941
8b095871
IC
31942 a.isub(b);
31943 } while (true);
ab78acc6 31944
8b095871
IC
31945 return b.iushln(shift);
31946 };
ab78acc6 31947
8b095871
IC
31948 // Invert number in the field F(num)
31949 BN.prototype.invm = function invm (num) {
31950 return this.egcd(num).a.umod(num);
31951 };
ebd8d4e8 31952
8b095871
IC
31953 BN.prototype.isEven = function isEven () {
31954 return (this.words[0] & 1) === 0;
31955 };
ab78acc6 31956
8b095871
IC
31957 BN.prototype.isOdd = function isOdd () {
31958 return (this.words[0] & 1) === 1;
31959 };
ebd8d4e8 31960
8b095871
IC
31961 // And first word and num
31962 BN.prototype.andln = function andln (num) {
31963 return this.words[0] & num;
31964 };
ebd8d4e8 31965
8b095871
IC
31966 // Increment at the bit position in-line
31967 BN.prototype.bincn = function bincn (bit) {
31968 assert(typeof bit === 'number');
31969 var r = bit % 26;
31970 var s = (bit - r) / 26;
31971 var q = 1 << r;
31972
31973 // Fast case: bit is much higher than all existing words
31974 if (this.length <= s) {
31975 this._expand(s + 1);
31976 this.words[s] |= q;
31977 return this;
31978 }
ebd8d4e8 31979
8b095871
IC
31980 // Add bit and propagate, if needed
31981 var carry = q;
31982 for (var i = s; carry !== 0 && i < this.length; i++) {
31983 var w = this.words[i] | 0;
31984 w += carry;
31985 carry = w >>> 26;
31986 w &= 0x3ffffff;
31987 this.words[i] = w;
31988 }
31989 if (carry !== 0) {
31990 this.words[i] = carry;
31991 this.length++;
31992 }
31993 return this;
31994 };
ebd8d4e8 31995
8b095871
IC
31996 BN.prototype.isZero = function isZero () {
31997 return this.length === 1 && this.words[0] === 0;
31998 };
ebd8d4e8 31999
8b095871
IC
32000 BN.prototype.cmpn = function cmpn (num) {
32001 var negative = num < 0;
ebd8d4e8 32002
8b095871
IC
32003 if (this.negative !== 0 && !negative) return -1;
32004 if (this.negative === 0 && negative) return 1;
ab78acc6 32005
8b095871 32006 this.strip();
ab78acc6 32007
8b095871
IC
32008 var res;
32009 if (this.length > 1) {
32010 res = 1;
32011 } else {
32012 if (negative) {
32013 num = -num;
32014 }
ebd8d4e8 32015
8b095871 32016 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 32017
8b095871
IC
32018 var w = this.words[0] | 0;
32019 res = w === num ? 0 : w < num ? -1 : 1;
32020 }
32021 if (this.negative !== 0) return -res | 0;
32022 return res;
32023 };
ebd8d4e8 32024
8b095871
IC
32025 // Compare two numbers and return:
32026 // 1 - if `this` > `num`
32027 // 0 - if `this` == `num`
32028 // -1 - if `this` < `num`
32029 BN.prototype.cmp = function cmp (num) {
32030 if (this.negative !== 0 && num.negative === 0) return -1;
32031 if (this.negative === 0 && num.negative !== 0) return 1;
32032
32033 var res = this.ucmp(num);
32034 if (this.negative !== 0) return -res | 0;
32035 return res;
32036 };
ebd8d4e8 32037
8b095871
IC
32038 // Unsigned comparison
32039 BN.prototype.ucmp = function ucmp (num) {
32040 // At this point both numbers have the same sign
32041 if (this.length > num.length) return 1;
32042 if (this.length < num.length) return -1;
32043
32044 var res = 0;
32045 for (var i = this.length - 1; i >= 0; i--) {
32046 var a = this.words[i] | 0;
32047 var b = num.words[i] | 0;
32048
32049 if (a === b) continue;
32050 if (a < b) {
32051 res = -1;
32052 } else if (a > b) {
32053 res = 1;
32054 }
32055 break;
32056 }
32057 return res;
32058 };
ebd8d4e8 32059
8b095871
IC
32060 BN.prototype.gtn = function gtn (num) {
32061 return this.cmpn(num) === 1;
32062 };
ebd8d4e8 32063
8b095871
IC
32064 BN.prototype.gt = function gt (num) {
32065 return this.cmp(num) === 1;
32066 };
ebd8d4e8 32067
8b095871
IC
32068 BN.prototype.gten = function gten (num) {
32069 return this.cmpn(num) >= 0;
32070 };
ab78acc6 32071
8b095871
IC
32072 BN.prototype.gte = function gte (num) {
32073 return this.cmp(num) >= 0;
32074 };
ab78acc6 32075
8b095871
IC
32076 BN.prototype.ltn = function ltn (num) {
32077 return this.cmpn(num) === -1;
32078 };
ab78acc6 32079
8b095871
IC
32080 BN.prototype.lt = function lt (num) {
32081 return this.cmp(num) === -1;
32082 };
ebd8d4e8 32083
8b095871
IC
32084 BN.prototype.lten = function lten (num) {
32085 return this.cmpn(num) <= 0;
32086 };
ab78acc6 32087
8b095871
IC
32088 BN.prototype.lte = function lte (num) {
32089 return this.cmp(num) <= 0;
32090 };
ab78acc6 32091
8b095871
IC
32092 BN.prototype.eqn = function eqn (num) {
32093 return this.cmpn(num) === 0;
32094 };
ab78acc6 32095
8b095871
IC
32096 BN.prototype.eq = function eq (num) {
32097 return this.cmp(num) === 0;
32098 };
ebd8d4e8 32099
8b095871
IC
32100 //
32101 // A reduce context, could be using montgomery or something better, depending
32102 // on the `m` itself.
32103 //
32104 BN.red = function red (num) {
32105 return new Red(num);
32106 };
ab78acc6 32107
8b095871
IC
32108 BN.prototype.toRed = function toRed (ctx) {
32109 assert(!this.red, 'Already a number in reduction context');
32110 assert(this.negative === 0, 'red works only with positives');
32111 return ctx.convertTo(this)._forceRed(ctx);
32112 };
32113
32114 BN.prototype.fromRed = function fromRed () {
32115 assert(this.red, 'fromRed works only with numbers in reduction context');
32116 return this.red.convertFrom(this);
32117 };
32118
32119 BN.prototype._forceRed = function _forceRed (ctx) {
32120 this.red = ctx;
32121 return this;
32122 };
32123
32124 BN.prototype.forceRed = function forceRed (ctx) {
32125 assert(!this.red, 'Already a number in reduction context');
32126 return this._forceRed(ctx);
32127 };
32128
32129 BN.prototype.redAdd = function redAdd (num) {
32130 assert(this.red, 'redAdd works only with red numbers');
32131 return this.red.add(this, num);
32132 };
ebd8d4e8 32133
8b095871
IC
32134 BN.prototype.redIAdd = function redIAdd (num) {
32135 assert(this.red, 'redIAdd works only with red numbers');
32136 return this.red.iadd(this, num);
32137 };
ab78acc6 32138
8b095871
IC
32139 BN.prototype.redSub = function redSub (num) {
32140 assert(this.red, 'redSub works only with red numbers');
32141 return this.red.sub(this, num);
32142 };
ab78acc6 32143
8b095871
IC
32144 BN.prototype.redISub = function redISub (num) {
32145 assert(this.red, 'redISub works only with red numbers');
32146 return this.red.isub(this, num);
32147 };
ebd8d4e8 32148
8b095871
IC
32149 BN.prototype.redShl = function redShl (num) {
32150 assert(this.red, 'redShl works only with red numbers');
32151 return this.red.shl(this, num);
32152 };
ebd8d4e8 32153
8b095871
IC
32154 BN.prototype.redMul = function redMul (num) {
32155 assert(this.red, 'redMul works only with red numbers');
32156 this.red._verify2(this, num);
32157 return this.red.mul(this, num);
32158 };
ebd8d4e8 32159
8b095871
IC
32160 BN.prototype.redIMul = function redIMul (num) {
32161 assert(this.red, 'redMul works only with red numbers');
32162 this.red._verify2(this, num);
32163 return this.red.imul(this, num);
32164 };
ebd8d4e8 32165
8b095871
IC
32166 BN.prototype.redSqr = function redSqr () {
32167 assert(this.red, 'redSqr works only with red numbers');
32168 this.red._verify1(this);
32169 return this.red.sqr(this);
32170 };
ebd8d4e8 32171
8b095871
IC
32172 BN.prototype.redISqr = function redISqr () {
32173 assert(this.red, 'redISqr works only with red numbers');
32174 this.red._verify1(this);
32175 return this.red.isqr(this);
32176 };
ebd8d4e8 32177
8b095871
IC
32178 // Square root over p
32179 BN.prototype.redSqrt = function redSqrt () {
32180 assert(this.red, 'redSqrt works only with red numbers');
32181 this.red._verify1(this);
32182 return this.red.sqrt(this);
32183 };
ebd8d4e8 32184
8b095871
IC
32185 BN.prototype.redInvm = function redInvm () {
32186 assert(this.red, 'redInvm works only with red numbers');
32187 this.red._verify1(this);
32188 return this.red.invm(this);
32189 };
ebd8d4e8 32190
8b095871
IC
32191 // Return negative clone of `this` % `red modulo`
32192 BN.prototype.redNeg = function redNeg () {
32193 assert(this.red, 'redNeg works only with red numbers');
32194 this.red._verify1(this);
32195 return this.red.neg(this);
32196 };
ebd8d4e8 32197
8b095871
IC
32198 BN.prototype.redPow = function redPow (num) {
32199 assert(this.red && !num.red, 'redPow(normalNum)');
32200 this.red._verify1(this);
32201 return this.red.pow(this, num);
32202 };
ebd8d4e8 32203
8b095871
IC
32204 // Prime numbers with efficient reduction
32205 var primes = {
32206 k256: null,
32207 p224: null,
32208 p192: null,
32209 p25519: null
32210 };
ebd8d4e8 32211
8b095871
IC
32212 // Pseudo-Mersenne prime
32213 function MPrime (name, p) {
32214 // P = 2 ^ N - K
32215 this.name = name;
32216 this.p = new BN(p, 16);
32217 this.n = this.p.bitLength();
32218 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 32219
8b095871
IC
32220 this.tmp = this._tmp();
32221 }
ebd8d4e8 32222
8b095871
IC
32223 MPrime.prototype._tmp = function _tmp () {
32224 var tmp = new BN(null);
32225 tmp.words = new Array(Math.ceil(this.n / 13));
32226 return tmp;
32227 };
ebd8d4e8 32228
8b095871
IC
32229 MPrime.prototype.ireduce = function ireduce (num) {
32230 // Assumes that `num` is less than `P^2`
32231 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
32232 var r = num;
32233 var rlen;
ebd8d4e8 32234
8b095871
IC
32235 do {
32236 this.split(r, this.tmp);
32237 r = this.imulK(r);
32238 r = r.iadd(this.tmp);
32239 rlen = r.bitLength();
32240 } while (rlen > this.n);
32241
32242 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
32243 if (cmp === 0) {
32244 r.words[0] = 0;
32245 r.length = 1;
32246 } else if (cmp > 0) {
32247 r.isub(this.p);
32248 } else {
32249 r.strip();
32250 }
ebd8d4e8 32251
8b095871
IC
32252 return r;
32253 };
ebd8d4e8 32254
8b095871
IC
32255 MPrime.prototype.split = function split (input, out) {
32256 input.iushrn(this.n, 0, out);
32257 };
ebd8d4e8 32258
8b095871
IC
32259 MPrime.prototype.imulK = function imulK (num) {
32260 return num.imul(this.k);
32261 };
ebd8d4e8 32262
8b095871
IC
32263 function K256 () {
32264 MPrime.call(
32265 this,
32266 'k256',
32267 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
32268 }
32269 inherits(K256, MPrime);
ebd8d4e8 32270
8b095871
IC
32271 K256.prototype.split = function split (input, output) {
32272 // 256 = 9 * 26 + 22
32273 var mask = 0x3fffff;
ebd8d4e8 32274
8b095871
IC
32275 var outLen = Math.min(input.length, 9);
32276 for (var i = 0; i < outLen; i++) {
32277 output.words[i] = input.words[i];
32278 }
32279 output.length = outLen;
ebd8d4e8 32280
8b095871
IC
32281 if (input.length <= 9) {
32282 input.words[0] = 0;
32283 input.length = 1;
32284 return;
32285 }
ebd8d4e8 32286
8b095871
IC
32287 // Shift by 9 limbs
32288 var prev = input.words[9];
32289 output.words[output.length++] = prev & mask;
ebd8d4e8 32290
8b095871
IC
32291 for (i = 10; i < input.length; i++) {
32292 var next = input.words[i] | 0;
32293 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
32294 prev = next;
32295 }
32296 prev >>>= 22;
32297 input.words[i - 10] = prev;
32298 if (prev === 0 && input.length > 10) {
32299 input.length -= 10;
32300 } else {
32301 input.length -= 9;
32302 }
32303 };
ebd8d4e8 32304
8b095871
IC
32305 K256.prototype.imulK = function imulK (num) {
32306 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
32307 num.words[num.length] = 0;
32308 num.words[num.length + 1] = 0;
32309 num.length += 2;
32310
32311 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
32312 var lo = 0;
32313 for (var i = 0; i < num.length; i++) {
32314 var w = num.words[i] | 0;
32315 lo += w * 0x3d1;
32316 num.words[i] = lo & 0x3ffffff;
32317 lo = w * 0x40 + ((lo / 0x4000000) | 0);
32318 }
32319
32320 // Fast length reduction
32321 if (num.words[num.length - 1] === 0) {
32322 num.length--;
32323 if (num.words[num.length - 1] === 0) {
32324 num.length--;
32325 }
32326 }
32327 return num;
32328 };
ebd8d4e8 32329
8b095871
IC
32330 function P224 () {
32331 MPrime.call(
32332 this,
32333 'p224',
32334 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
32335 }
32336 inherits(P224, MPrime);
ebd8d4e8 32337
8b095871
IC
32338 function P192 () {
32339 MPrime.call(
32340 this,
32341 'p192',
32342 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
32343 }
32344 inherits(P192, MPrime);
ebd8d4e8 32345
8b095871
IC
32346 function P25519 () {
32347 // 2 ^ 255 - 19
32348 MPrime.call(
32349 this,
32350 '25519',
32351 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
32352 }
32353 inherits(P25519, MPrime);
ebd8d4e8 32354
8b095871
IC
32355 P25519.prototype.imulK = function imulK (num) {
32356 // K = 0x13
32357 var carry = 0;
32358 for (var i = 0; i < num.length; i++) {
32359 var hi = (num.words[i] | 0) * 0x13 + carry;
32360 var lo = hi & 0x3ffffff;
32361 hi >>>= 26;
ebd8d4e8 32362
8b095871
IC
32363 num.words[i] = lo;
32364 carry = hi;
32365 }
32366 if (carry !== 0) {
32367 num.words[num.length++] = carry;
32368 }
32369 return num;
32370 };
ebd8d4e8 32371
8b095871
IC
32372 // Exported mostly for testing purposes, use plain name instead
32373 BN._prime = function prime (name) {
32374 // Cached version of prime
32375 if (primes[name]) return primes[name];
32376
32377 var prime;
32378 if (name === 'k256') {
32379 prime = new K256();
32380 } else if (name === 'p224') {
32381 prime = new P224();
32382 } else if (name === 'p192') {
32383 prime = new P192();
32384 } else if (name === 'p25519') {
32385 prime = new P25519();
32386 } else {
32387 throw new Error('Unknown prime ' + name);
32388 }
32389 primes[name] = prime;
ab78acc6 32390
8b095871
IC
32391 return prime;
32392 };
ab78acc6 32393
8b095871
IC
32394 //
32395 // Base reduction engine
32396 //
32397 function Red (m) {
32398 if (typeof m === 'string') {
32399 var prime = BN._prime(m);
32400 this.m = prime.p;
32401 this.prime = prime;
32402 } else {
32403 assert(m.gtn(1), 'modulus must be greater than 1');
32404 this.m = m;
32405 this.prime = null;
32406 }
32407 }
ab78acc6 32408
8b095871
IC
32409 Red.prototype._verify1 = function _verify1 (a) {
32410 assert(a.negative === 0, 'red works only with positives');
32411 assert(a.red, 'red works only with red numbers');
32412 };
ab78acc6 32413
8b095871
IC
32414 Red.prototype._verify2 = function _verify2 (a, b) {
32415 assert((a.negative | b.negative) === 0, 'red works only with positives');
32416 assert(a.red && a.red === b.red,
32417 'red works only with red numbers');
32418 };
ebd8d4e8 32419
8b095871
IC
32420 Red.prototype.imod = function imod (a) {
32421 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
32422 return a.umod(this.m)._forceRed(this);
32423 };
ebd8d4e8 32424
8b095871
IC
32425 Red.prototype.neg = function neg (a) {
32426 if (a.isZero()) {
32427 return a.clone();
32428 }
ebd8d4e8 32429
8b095871
IC
32430 return this.m.sub(a)._forceRed(this);
32431 };
ab78acc6 32432
8b095871
IC
32433 Red.prototype.add = function add (a, b) {
32434 this._verify2(a, b);
ab78acc6 32435
8b095871
IC
32436 var res = a.add(b);
32437 if (res.cmp(this.m) >= 0) {
32438 res.isub(this.m);
32439 }
32440 return res._forceRed(this);
32441 };
ab78acc6 32442
8b095871
IC
32443 Red.prototype.iadd = function iadd (a, b) {
32444 this._verify2(a, b);
ab78acc6 32445
8b095871
IC
32446 var res = a.iadd(b);
32447 if (res.cmp(this.m) >= 0) {
32448 res.isub(this.m);
32449 }
32450 return res;
32451 };
ab78acc6 32452
8b095871
IC
32453 Red.prototype.sub = function sub (a, b) {
32454 this._verify2(a, b);
ab78acc6 32455
8b095871
IC
32456 var res = a.sub(b);
32457 if (res.cmpn(0) < 0) {
32458 res.iadd(this.m);
32459 }
32460 return res._forceRed(this);
32461 };
ab78acc6 32462
8b095871
IC
32463 Red.prototype.isub = function isub (a, b) {
32464 this._verify2(a, b);
ebd8d4e8 32465
8b095871
IC
32466 var res = a.isub(b);
32467 if (res.cmpn(0) < 0) {
32468 res.iadd(this.m);
32469 }
32470 return res;
32471 };
ebd8d4e8 32472
8b095871
IC
32473 Red.prototype.shl = function shl (a, num) {
32474 this._verify1(a);
32475 return this.imod(a.ushln(num));
32476 };
ebd8d4e8 32477
8b095871
IC
32478 Red.prototype.imul = function imul (a, b) {
32479 this._verify2(a, b);
32480 return this.imod(a.imul(b));
32481 };
ebd8d4e8 32482
8b095871
IC
32483 Red.prototype.mul = function mul (a, b) {
32484 this._verify2(a, b);
32485 return this.imod(a.mul(b));
32486 };
ebd8d4e8 32487
8b095871
IC
32488 Red.prototype.isqr = function isqr (a) {
32489 return this.imul(a, a.clone());
32490 };
32491
32492 Red.prototype.sqr = function sqr (a) {
32493 return this.mul(a, a);
32494 };
ebd8d4e8 32495
8b095871
IC
32496 Red.prototype.sqrt = function sqrt (a) {
32497 if (a.isZero()) return a.clone();
ebd8d4e8 32498
8b095871
IC
32499 var mod3 = this.m.andln(3);
32500 assert(mod3 % 2 === 1);
ebd8d4e8 32501
8b095871
IC
32502 // Fast case
32503 if (mod3 === 3) {
32504 var pow = this.m.add(new BN(1)).iushrn(2);
32505 return this.pow(a, pow);
32506 }
ebd8d4e8 32507
8b095871
IC
32508 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
32509 //
32510 // Find Q and S, that Q * 2 ^ S = (P - 1)
32511 var q = this.m.subn(1);
32512 var s = 0;
32513 while (!q.isZero() && q.andln(1) === 0) {
32514 s++;
32515 q.iushrn(1);
32516 }
32517 assert(!q.isZero());
ebd8d4e8 32518
8b095871
IC
32519 var one = new BN(1).toRed(this);
32520 var nOne = one.redNeg();
ebd8d4e8 32521
8b095871
IC
32522 // Find quadratic non-residue
32523 // NOTE: Max is such because of generalized Riemann hypothesis.
32524 var lpow = this.m.subn(1).iushrn(1);
32525 var z = this.m.bitLength();
32526 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 32527
8b095871
IC
32528 while (this.pow(z, lpow).cmp(nOne) !== 0) {
32529 z.redIAdd(nOne);
32530 }
ebd8d4e8 32531
8b095871
IC
32532 var c = this.pow(z, q);
32533 var r = this.pow(a, q.addn(1).iushrn(1));
32534 var t = this.pow(a, q);
32535 var m = s;
32536 while (t.cmp(one) !== 0) {
32537 var tmp = t;
32538 for (var i = 0; tmp.cmp(one) !== 0; i++) {
32539 tmp = tmp.redSqr();
32540 }
32541 assert(i < m);
32542 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 32543
8b095871
IC
32544 r = r.redMul(b);
32545 c = b.redSqr();
32546 t = t.redMul(c);
32547 m = i;
32548 }
ebd8d4e8 32549
8b095871
IC
32550 return r;
32551 };
ebd8d4e8 32552
8b095871
IC
32553 Red.prototype.invm = function invm (a) {
32554 var inv = a._invmp(this.m);
32555 if (inv.negative !== 0) {
32556 inv.negative = 0;
32557 return this.imod(inv).redNeg();
32558 } else {
32559 return this.imod(inv);
32560 }
32561 };
ebd8d4e8 32562
8b095871
IC
32563 Red.prototype.pow = function pow (a, num) {
32564 if (num.isZero()) return new BN(1);
32565 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 32566
8b095871
IC
32567 var windowSize = 4;
32568 var wnd = new Array(1 << windowSize);
32569 wnd[0] = new BN(1).toRed(this);
32570 wnd[1] = a;
32571 for (var i = 2; i < wnd.length; i++) {
32572 wnd[i] = this.mul(wnd[i - 1], a);
32573 }
ebd8d4e8 32574
8b095871
IC
32575 var res = wnd[0];
32576 var current = 0;
32577 var currentLen = 0;
32578 var start = num.bitLength() % 26;
32579 if (start === 0) {
32580 start = 26;
32581 }
ebd8d4e8 32582
8b095871
IC
32583 for (i = num.length - 1; i >= 0; i--) {
32584 var word = num.words[i];
32585 for (var j = start - 1; j >= 0; j--) {
32586 var bit = (word >> j) & 1;
32587 if (res !== wnd[0]) {
32588 res = this.sqr(res);
32589 }
ebd8d4e8 32590
8b095871
IC
32591 if (bit === 0 && current === 0) {
32592 currentLen = 0;
32593 continue;
32594 }
ebd8d4e8 32595
8b095871
IC
32596 current <<= 1;
32597 current |= bit;
32598 currentLen++;
32599 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 32600
8b095871
IC
32601 res = this.mul(res, wnd[current]);
32602 currentLen = 0;
32603 current = 0;
32604 }
32605 start = 26;
32606 }
ebd8d4e8 32607
8b095871
IC
32608 return res;
32609 };
ebd8d4e8 32610
8b095871
IC
32611 Red.prototype.convertTo = function convertTo (num) {
32612 var r = num.umod(this.m);
ebd8d4e8 32613
8b095871
IC
32614 return r === num ? r.clone() : r;
32615 };
ebd8d4e8 32616
8b095871
IC
32617 Red.prototype.convertFrom = function convertFrom (num) {
32618 var res = num.clone();
32619 res.red = null;
32620 return res;
32621 };
ebd8d4e8 32622
8b095871
IC
32623 //
32624 // Montgomery method engine
32625 //
ebd8d4e8 32626
8b095871
IC
32627 BN.mont = function mont (num) {
32628 return new Mont(num);
32629 };
ebd8d4e8 32630
8b095871
IC
32631 function Mont (m) {
32632 Red.call(this, m);
ebd8d4e8 32633
8b095871
IC
32634 this.shift = this.m.bitLength();
32635 if (this.shift % 26 !== 0) {
32636 this.shift += 26 - (this.shift % 26);
32637 }
ebd8d4e8 32638
8b095871
IC
32639 this.r = new BN(1).iushln(this.shift);
32640 this.r2 = this.imod(this.r.sqr());
32641 this.rinv = this.r._invmp(this.m);
32642
32643 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
32644 this.minv = this.minv.umod(this.r);
32645 this.minv = this.r.sub(this.minv);
ebd8d4e8 32646 }
8b095871 32647 inherits(Mont, Red);
ebd8d4e8 32648
8b095871
IC
32649 Mont.prototype.convertTo = function convertTo (num) {
32650 return this.imod(num.ushln(this.shift));
32651 };
ab78acc6 32652
8b095871
IC
32653 Mont.prototype.convertFrom = function convertFrom (num) {
32654 var r = this.imod(num.mul(this.rinv));
32655 r.red = null;
32656 return r;
32657 };
ebd8d4e8 32658
8b095871
IC
32659 Mont.prototype.imul = function imul (a, b) {
32660 if (a.isZero() || b.isZero()) {
32661 a.words[0] = 0;
32662 a.length = 1;
32663 return a;
32664 }
ebd8d4e8 32665
8b095871
IC
32666 var t = a.imul(b);
32667 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32668 var u = t.isub(c).iushrn(this.shift);
32669 var res = u;
ab78acc6 32670
8b095871
IC
32671 if (u.cmp(this.m) >= 0) {
32672 res = u.isub(this.m);
32673 } else if (u.cmpn(0) < 0) {
32674 res = u.iadd(this.m);
32675 }
ab78acc6 32676
8b095871
IC
32677 return res._forceRed(this);
32678 };
ab78acc6 32679
8b095871
IC
32680 Mont.prototype.mul = function mul (a, b) {
32681 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 32682
8b095871
IC
32683 var t = a.mul(b);
32684 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
32685 var u = t.isub(c).iushrn(this.shift);
32686 var res = u;
32687 if (u.cmp(this.m) >= 0) {
32688 res = u.isub(this.m);
32689 } else if (u.cmpn(0) < 0) {
32690 res = u.iadd(this.m);
32691 }
ab78acc6 32692
8b095871
IC
32693 return res._forceRed(this);
32694 };
ab78acc6 32695
8b095871
IC
32696 Mont.prototype.invm = function invm (a) {
32697 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
32698 var res = this.imod(a._invmp(this.m).mul(this.r2));
32699 return res._forceRed(this);
32700 };
32701})(typeof module === 'undefined' || module, this);
ab78acc6 32702
8b095871
IC
32703},{}],34:[function(require,module,exports){
32704var r;
ebd8d4e8 32705
8b095871
IC
32706module.exports = function rand(len) {
32707 if (!r)
32708 r = new Rand(null);
ebd8d4e8 32709
8b095871
IC
32710 return r.generate(len);
32711};
ab78acc6 32712
8b095871
IC
32713function Rand(rand) {
32714 this.rand = rand;
ab78acc6 32715}
8b095871 32716module.exports.Rand = Rand;
ab78acc6 32717
8b095871
IC
32718Rand.prototype.generate = function generate(len) {
32719 return this._rand(len);
32720};
ab78acc6 32721
8b095871
IC
32722if (typeof self === 'object') {
32723 if (self.crypto && self.crypto.getRandomValues) {
32724 // Modern browsers
32725 Rand.prototype._rand = function _rand(n) {
32726 var arr = new Uint8Array(n);
32727 self.crypto.getRandomValues(arr);
32728 return arr;
32729 };
32730 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
32731 // IE
32732 Rand.prototype._rand = function _rand(n) {
32733 var arr = new Uint8Array(n);
32734 self.msCrypto.getRandomValues(arr);
32735 return arr;
32736 };
32737 } else {
32738 // Old junk
32739 Rand.prototype._rand = function() {
32740 throw new Error('Not implemented yet');
32741 };
32742 }
32743} else {
32744 // Node.js or Web worker with no crypto support
32745 try {
32746 var crypto = require('crypto');
ab78acc6 32747
8b095871
IC
32748 Rand.prototype._rand = function _rand(n) {
32749 return crypto.randomBytes(n);
32750 };
32751 } catch (e) {
32752 // Emulate crypto API using randy
32753 Rand.prototype._rand = function _rand(n) {
32754 var res = new Uint8Array(n);
32755 for (var i = 0; i < res.length; i++)
32756 res[i] = this.rand.getByte();
32757 return res;
32758 };
32759 }
32760}
32761
32762},{"crypto":3}],35:[function(require,module,exports){
32763(function (Buffer){
32764var Transform = require('stream').Transform
32765var inherits = require('inherits')
32766var StringDecoder = require('string_decoder').StringDecoder
32767module.exports = CipherBase
32768inherits(CipherBase, Transform)
32769function CipherBase (hashMode) {
32770 Transform.call(this)
32771 this.hashMode = typeof hashMode === 'string'
32772 if (this.hashMode) {
32773 this[hashMode] = this._finalOrDigest
32774 } else {
32775 this.final = this._finalOrDigest
32776 }
32777 this._decoder = null
32778 this._encoding = null
32779}
32780CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
32781 if (typeof data === 'string') {
32782 data = new Buffer(data, inputEnc)
32783 }
32784 var outData = this._update(data)
32785 if (this.hashMode) {
32786 return this
32787 }
32788 if (outputEnc) {
32789 outData = this._toString(outData, outputEnc)
32790 }
32791 return outData
32792}
ab78acc6 32793
8b095871 32794CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 32795
8b095871
IC
32796CipherBase.prototype.getAuthTag = function () {
32797 throw new Error('trying to get auth tag in unsupported state')
32798}
ab78acc6 32799
8b095871
IC
32800CipherBase.prototype.setAuthTag = function () {
32801 throw new Error('trying to set auth tag in unsupported state')
32802}
ab78acc6 32803
8b095871
IC
32804CipherBase.prototype.setAAD = function () {
32805 throw new Error('trying to set aad in unsupported state')
32806}
ab78acc6 32807
8b095871
IC
32808CipherBase.prototype._transform = function (data, _, next) {
32809 var err
32810 try {
32811 if (this.hashMode) {
32812 this._update(data)
32813 } else {
32814 this.push(this._update(data))
32815 }
32816 } catch (e) {
32817 err = e
32818 } finally {
32819 next(err)
32820 }
32821}
32822CipherBase.prototype._flush = function (done) {
32823 var err
32824 try {
32825 this.push(this._final())
32826 } catch (e) {
32827 err = e
32828 } finally {
32829 done(err)
32830 }
32831}
32832CipherBase.prototype._finalOrDigest = function (outputEnc) {
32833 var outData = this._final() || new Buffer('')
32834 if (outputEnc) {
32835 outData = this._toString(outData, outputEnc, true)
32836 }
32837 return outData
32838}
ebd8d4e8 32839
8b095871
IC
32840CipherBase.prototype._toString = function (value, enc, fin) {
32841 if (!this._decoder) {
32842 this._decoder = new StringDecoder(enc)
32843 this._encoding = enc
32844 }
32845 if (this._encoding !== enc) {
32846 throw new Error('can\'t switch encodings')
32847 }
32848 var out = this._decoder.write(value)
32849 if (fin) {
32850 out += this._decoder.end()
ab78acc6 32851 }
8b095871
IC
32852 return out
32853}
ab78acc6 32854
8b095871
IC
32855}).call(this,require("buffer").Buffer)
32856},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
32857(function (Buffer){
32858'use strict';
32859var inherits = require('inherits')
32860var md5 = require('./md5')
32861var rmd160 = require('ripemd160')
32862var sha = require('sha.js')
ebd8d4e8 32863
8b095871 32864var Base = require('cipher-base')
ebd8d4e8 32865
8b095871
IC
32866function HashNoConstructor(hash) {
32867 Base.call(this, 'digest')
ebd8d4e8 32868
8b095871
IC
32869 this._hash = hash
32870 this.buffers = []
32871}
ebd8d4e8 32872
8b095871 32873inherits(HashNoConstructor, Base)
ebd8d4e8 32874
8b095871
IC
32875HashNoConstructor.prototype._update = function (data) {
32876 this.buffers.push(data)
32877}
ebd8d4e8 32878
8b095871
IC
32879HashNoConstructor.prototype._final = function () {
32880 var buf = Buffer.concat(this.buffers)
32881 var r = this._hash(buf)
32882 this.buffers = null
ebd8d4e8 32883
8b095871
IC
32884 return r
32885}
ab78acc6 32886
8b095871
IC
32887function Hash(hash) {
32888 Base.call(this, 'digest')
ab78acc6 32889
8b095871
IC
32890 this._hash = hash
32891}
ab78acc6 32892
8b095871 32893inherits(Hash, Base)
ab78acc6 32894
8b095871
IC
32895Hash.prototype._update = function (data) {
32896 this._hash.update(data)
32897}
ab78acc6 32898
8b095871
IC
32899Hash.prototype._final = function () {
32900 return this._hash.digest()
32901}
ab78acc6 32902
8b095871
IC
32903module.exports = function createHash (alg) {
32904 alg = alg.toLowerCase()
32905 if ('md5' === alg) return new HashNoConstructor(md5)
32906 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
32907
32908 return new Hash(sha(alg))
ab78acc6
IC
32909}
32910
8b095871
IC
32911}).call(this,require("buffer").Buffer)
32912},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
32913(function (Buffer){
32914'use strict';
32915var intSize = 4;
32916var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
32917var chrsz = 8;
ab78acc6 32918
8b095871
IC
32919function toArray(buf, bigEndian) {
32920 if ((buf.length % intSize) !== 0) {
32921 var len = buf.length + (intSize - (buf.length % intSize));
32922 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
32923 }
32924
8b095871
IC
32925 var arr = [];
32926 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
32927 for (var i = 0; i < buf.length; i += intSize) {
32928 arr.push(fn.call(buf, i));
32929 }
32930 return arr;
ab78acc6
IC
32931}
32932
8b095871
IC
32933function toBuffer(arr, size, bigEndian) {
32934 var buf = new Buffer(size);
32935 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
32936 for (var i = 0; i < arr.length; i++) {
32937 fn.call(buf, arr[i], i * 4, true);
32938 }
32939 return buf;
32940}
ab78acc6 32941
8b095871
IC
32942function hash(buf, fn, hashSize, bigEndian) {
32943 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
32944 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
32945 return toBuffer(arr, hashSize, bigEndian);
32946}
32947exports.hash = hash;
ab78acc6 32948}).call(this,require("buffer").Buffer)
8b095871 32949},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 32950'use strict';
8b095871
IC
32951/*
32952 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
32953 * Digest Algorithm, as defined in RFC 1321.
32954 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
32955 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
32956 * Distributed under the BSD License
32957 * See http://pajhome.org.uk/crypt/md5 for more info.
32958 */
ebd8d4e8 32959
8b095871 32960var helpers = require('./helpers');
ebd8d4e8 32961
8b095871
IC
32962/*
32963 * Calculate the MD5 of an array of little-endian words, and a bit length
32964 */
32965function core_md5(x, len)
32966{
32967 /* append padding */
32968 x[len >> 5] |= 0x80 << ((len) % 32);
32969 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 32970
8b095871
IC
32971 var a = 1732584193;
32972 var b = -271733879;
32973 var c = -1732584194;
32974 var d = 271733878;
ebd8d4e8 32975
8b095871
IC
32976 for(var i = 0; i < x.length; i += 16)
32977 {
32978 var olda = a;
32979 var oldb = b;
32980 var oldc = c;
32981 var oldd = d;
ebd8d4e8 32982
8b095871
IC
32983 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
32984 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
32985 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
32986 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
32987 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
32988 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
32989 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
32990 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
32991 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
32992 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
32993 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
32994 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
32995 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
32996 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
32997 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
32998 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 32999
8b095871
IC
33000 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
33001 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
33002 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
33003 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
33004 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
33005 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
33006 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
33007 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
33008 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
33009 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
33010 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
33011 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
33012 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
33013 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
33014 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
33015 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 33016
8b095871
IC
33017 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
33018 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
33019 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
33020 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
33021 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
33022 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
33023 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
33024 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
33025 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
33026 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
33027 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
33028 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
33029 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
33030 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
33031 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
33032 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 33033
8b095871
IC
33034 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
33035 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
33036 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
33037 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
33038 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
33039 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
33040 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
33041 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
33042 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
33043 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
33044 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
33045 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
33046 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
33047 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
33048 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
33049 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 33050
8b095871
IC
33051 a = safe_add(a, olda);
33052 b = safe_add(b, oldb);
33053 c = safe_add(c, oldc);
33054 d = safe_add(d, oldd);
ab78acc6 33055 }
8b095871 33056 return Array(a, b, c, d);
ebd8d4e8 33057
ab78acc6 33058}
ebd8d4e8 33059
8b095871
IC
33060/*
33061 * These functions implement the four basic operations the algorithm uses.
33062 */
33063function md5_cmn(q, a, b, x, s, t)
33064{
33065 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 33066}
8b095871
IC
33067function md5_ff(a, b, c, d, x, s, t)
33068{
33069 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 33070}
8b095871
IC
33071function md5_gg(a, b, c, d, x, s, t)
33072{
33073 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 33074}
8b095871
IC
33075function md5_hh(a, b, c, d, x, s, t)
33076{
33077 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
33078}
33079function md5_ii(a, b, c, d, x, s, t)
33080{
33081 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 33082}
ebd8d4e8 33083
8b095871
IC
33084/*
33085 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
33086 * to work around bugs in some JS interpreters.
33087 */
33088function safe_add(x, y)
33089{
33090 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
33091 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
33092 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 33093}
ebd8d4e8 33094
8b095871
IC
33095/*
33096 * Bitwise rotate a 32-bit number to the left.
33097 */
33098function bit_rol(num, cnt)
33099{
33100 return (num << cnt) | (num >>> (32 - cnt));
33101}
ebd8d4e8 33102
8b095871
IC
33103module.exports = function md5(buf) {
33104 return helpers.hash(buf, core_md5, 16);
33105};
33106},{"./helpers":37}],39:[function(require,module,exports){
33107'use strict';
ebd8d4e8 33108
8b095871 33109var elliptic = exports;
ebd8d4e8 33110
8b095871
IC
33111elliptic.version = require('../package.json').version;
33112elliptic.utils = require('./elliptic/utils');
33113elliptic.rand = require('brorand');
33114elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
33115elliptic.curve = require('./elliptic/curve');
33116elliptic.curves = require('./elliptic/curves');
ebd8d4e8 33117
8b095871
IC
33118// Protocols
33119elliptic.ec = require('./elliptic/ec');
33120elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 33121
8b095871
IC
33122},{"../package.json":55,"./elliptic/curve":42,"./elliptic/curves":45,"./elliptic/ec":46,"./elliptic/eddsa":49,"./elliptic/hmac-drbg":52,"./elliptic/utils":54,"brorand":34}],40:[function(require,module,exports){
33123'use strict';
ebd8d4e8 33124
8b095871
IC
33125var BN = require('bn.js');
33126var elliptic = require('../../elliptic');
33127var utils = elliptic.utils;
33128var getNAF = utils.getNAF;
33129var getJSF = utils.getJSF;
33130var assert = utils.assert;
33131
33132function BaseCurve(type, conf) {
33133 this.type = type;
33134 this.p = new BN(conf.p, 16);
33135
33136 // Use Montgomery, when there is no fast reduction for the prime
33137 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
33138
33139 // Useful for many curves
33140 this.zero = new BN(0).toRed(this.red);
33141 this.one = new BN(1).toRed(this.red);
33142 this.two = new BN(2).toRed(this.red);
33143
33144 // Curve configuration, optional
33145 this.n = conf.n && new BN(conf.n, 16);
33146 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
33147
33148 // Temporary arrays
33149 this._wnafT1 = new Array(4);
33150 this._wnafT2 = new Array(4);
33151 this._wnafT3 = new Array(4);
33152 this._wnafT4 = new Array(4);
33153
33154 // Generalized Greg Maxwell's trick
33155 var adjustCount = this.n && this.p.div(this.n);
33156 if (!adjustCount || adjustCount.cmpn(100) > 0) {
33157 this.redN = null;
33158 } else {
33159 this._maxwellTrick = true;
33160 this.redN = this.n.toRed(this.red);
ebd8d4e8 33161 }
ebd8d4e8 33162}
8b095871 33163module.exports = BaseCurve;
ebd8d4e8 33164
8b095871
IC
33165BaseCurve.prototype.point = function point() {
33166 throw new Error('Not implemented');
33167};
ebd8d4e8 33168
8b095871
IC
33169BaseCurve.prototype.validate = function validate() {
33170 throw new Error('Not implemented');
33171};
ebd8d4e8 33172
8b095871
IC
33173BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
33174 assert(p.precomputed);
33175 var doubles = p._getDoubles();
ebd8d4e8 33176
8b095871
IC
33177 var naf = getNAF(k, 1);
33178 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
33179 I /= 3;
ebd8d4e8 33180
8b095871
IC
33181 // Translate into more windowed form
33182 var repr = [];
33183 for (var j = 0; j < naf.length; j += doubles.step) {
33184 var nafW = 0;
33185 for (var k = j + doubles.step - 1; k >= j; k--)
33186 nafW = (nafW << 1) + naf[k];
33187 repr.push(nafW);
33188 }
ebd8d4e8 33189
8b095871
IC
33190 var a = this.jpoint(null, null, null);
33191 var b = this.jpoint(null, null, null);
33192 for (var i = I; i > 0; i--) {
33193 for (var j = 0; j < repr.length; j++) {
33194 var nafW = repr[j];
33195 if (nafW === i)
33196 b = b.mixedAdd(doubles.points[j]);
33197 else if (nafW === -i)
33198 b = b.mixedAdd(doubles.points[j].neg());
33199 }
33200 a = a.add(b);
33201 }
33202 return a.toP();
33203};
ebd8d4e8 33204
8b095871
IC
33205BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
33206 var w = 4;
ebd8d4e8 33207
8b095871
IC
33208 // Precompute window
33209 var nafPoints = p._getNAFPoints(w);
33210 w = nafPoints.wnd;
33211 var wnd = nafPoints.points;
ebd8d4e8 33212
8b095871
IC
33213 // Get NAF form
33214 var naf = getNAF(k, w);
ebd8d4e8 33215
8b095871
IC
33216 // Add `this`*(N+1) for every w-NAF index
33217 var acc = this.jpoint(null, null, null);
33218 for (var i = naf.length - 1; i >= 0; i--) {
33219 // Count zeroes
33220 for (var k = 0; i >= 0 && naf[i] === 0; i--)
33221 k++;
33222 if (i >= 0)
33223 k++;
33224 acc = acc.dblp(k);
ebd8d4e8 33225
8b095871
IC
33226 if (i < 0)
33227 break;
33228 var z = naf[i];
33229 assert(z !== 0);
33230 if (p.type === 'affine') {
33231 // J +- P
33232 if (z > 0)
33233 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
33234 else
33235 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
33236 } else {
33237 // J +- J
33238 if (z > 0)
33239 acc = acc.add(wnd[(z - 1) >> 1]);
33240 else
33241 acc = acc.add(wnd[(-z - 1) >> 1].neg());
33242 }
ebd8d4e8 33243 }
8b095871
IC
33244 return p.type === 'affine' ? acc.toP() : acc;
33245};
ebd8d4e8 33246
8b095871
IC
33247BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
33248 points,
33249 coeffs,
33250 len,
33251 jacobianResult) {
33252 var wndWidth = this._wnafT1;
33253 var wnd = this._wnafT2;
33254 var naf = this._wnafT3;
33255
33256 // Fill all arrays
33257 var max = 0;
33258 for (var i = 0; i < len; i++) {
33259 var p = points[i];
33260 var nafPoints = p._getNAFPoints(defW);
33261 wndWidth[i] = nafPoints.wnd;
33262 wnd[i] = nafPoints.points;
33263 }
33264
33265 // Comb small window NAFs
33266 for (var i = len - 1; i >= 1; i -= 2) {
33267 var a = i - 1;
33268 var b = i;
33269 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
33270 naf[a] = getNAF(coeffs[a], wndWidth[a]);
33271 naf[b] = getNAF(coeffs[b], wndWidth[b]);
33272 max = Math.max(naf[a].length, max);
33273 max = Math.max(naf[b].length, max);
33274 continue;
33275 }
ebd8d4e8 33276
8b095871
IC
33277 var comb = [
33278 points[a], /* 1 */
33279 null, /* 3 */
33280 null, /* 5 */
33281 points[b] /* 7 */
33282 ];
33283
33284 // Try to avoid Projective points, if possible
33285 if (points[a].y.cmp(points[b].y) === 0) {
33286 comb[1] = points[a].add(points[b]);
33287 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33288 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
33289 comb[1] = points[a].toJ().mixedAdd(points[b]);
33290 comb[2] = points[a].add(points[b].neg());
33291 } else {
33292 comb[1] = points[a].toJ().mixedAdd(points[b]);
33293 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
33294 }
ebd8d4e8 33295
8b095871
IC
33296 var index = [
33297 -3, /* -1 -1 */
33298 -1, /* -1 0 */
33299 -5, /* -1 1 */
33300 -7, /* 0 -1 */
33301 0, /* 0 0 */
33302 7, /* 0 1 */
33303 5, /* 1 -1 */
33304 1, /* 1 0 */
33305 3 /* 1 1 */
33306 ];
ebd8d4e8 33307
8b095871
IC
33308 var jsf = getJSF(coeffs[a], coeffs[b]);
33309 max = Math.max(jsf[0].length, max);
33310 naf[a] = new Array(max);
33311 naf[b] = new Array(max);
33312 for (var j = 0; j < max; j++) {
33313 var ja = jsf[0][j] | 0;
33314 var jb = jsf[1][j] | 0;
ebd8d4e8 33315
8b095871
IC
33316 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
33317 naf[b][j] = 0;
33318 wnd[a] = comb;
33319 }
33320 }
ebd8d4e8 33321
8b095871
IC
33322 var acc = this.jpoint(null, null, null);
33323 var tmp = this._wnafT4;
33324 for (var i = max; i >= 0; i--) {
33325 var k = 0;
ebd8d4e8 33326
8b095871
IC
33327 while (i >= 0) {
33328 var zero = true;
33329 for (var j = 0; j < len; j++) {
33330 tmp[j] = naf[j][i] | 0;
33331 if (tmp[j] !== 0)
33332 zero = false;
33333 }
33334 if (!zero)
33335 break;
33336 k++;
33337 i--;
33338 }
33339 if (i >= 0)
33340 k++;
33341 acc = acc.dblp(k);
33342 if (i < 0)
33343 break;
ebd8d4e8 33344
8b095871
IC
33345 for (var j = 0; j < len; j++) {
33346 var z = tmp[j];
33347 var p;
33348 if (z === 0)
33349 continue;
33350 else if (z > 0)
33351 p = wnd[j][(z - 1) >> 1];
33352 else if (z < 0)
33353 p = wnd[j][(-z - 1) >> 1].neg();
33354
33355 if (p.type === 'affine')
33356 acc = acc.mixedAdd(p);
33357 else
33358 acc = acc.add(p);
33359 }
33360 }
33361 // Zeroify references
33362 for (var i = 0; i < len; i++)
33363 wnd[i] = null;
ebd8d4e8 33364
8b095871
IC
33365 if (jacobianResult)
33366 return acc;
33367 else
33368 return acc.toP();
33369};
ebd8d4e8 33370
8b095871
IC
33371function BasePoint(curve, type) {
33372 this.curve = curve;
33373 this.type = type;
33374 this.precomputed = null;
33375}
33376BaseCurve.BasePoint = BasePoint;
ebd8d4e8 33377
8b095871
IC
33378BasePoint.prototype.eq = function eq(/*other*/) {
33379 throw new Error('Not implemented');
33380};
ebd8d4e8 33381
8b095871
IC
33382BasePoint.prototype.validate = function validate() {
33383 return this.curve.validate(this);
33384};
ebd8d4e8 33385
8b095871
IC
33386BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
33387 bytes = utils.toArray(bytes, enc);
ebd8d4e8 33388
8b095871 33389 var len = this.p.byteLength();
ebd8d4e8 33390
8b095871
IC
33391 // uncompressed, hybrid-odd, hybrid-even
33392 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
33393 bytes.length - 1 === 2 * len) {
33394 if (bytes[0] === 0x06)
33395 assert(bytes[bytes.length - 1] % 2 === 0);
33396 else if (bytes[0] === 0x07)
33397 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 33398
8b095871
IC
33399 var res = this.point(bytes.slice(1, 1 + len),
33400 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 33401
8b095871
IC
33402 return res;
33403 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
33404 bytes.length - 1 === len) {
33405 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 33406 }
8b095871
IC
33407 throw new Error('Unknown point format');
33408};
ebd8d4e8 33409
8b095871
IC
33410BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
33411 return this.encode(enc, true);
33412};
33413
33414BasePoint.prototype._encode = function _encode(compact) {
33415 var len = this.curve.p.byteLength();
33416 var x = this.getX().toArray('be', len);
33417
33418 if (compact)
33419 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
33420
33421 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
33422};
33423
33424BasePoint.prototype.encode = function encode(enc, compact) {
33425 return utils.encode(this._encode(compact), enc);
33426};
33427
33428BasePoint.prototype.precompute = function precompute(power) {
33429 if (this.precomputed)
33430 return this;
33431
33432 var precomputed = {
33433 doubles: null,
33434 naf: null,
33435 beta: null
33436 };
33437 precomputed.naf = this._getNAFPoints(8);
33438 precomputed.doubles = this._getDoubles(4, power);
33439 precomputed.beta = this._getBeta();
33440 this.precomputed = precomputed;
33441
33442 return this;
33443};
33444
33445BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
33446 if (!this.precomputed)
33447 return false;
33448
33449 var doubles = this.precomputed.doubles;
33450 if (!doubles)
33451 return false;
33452
33453 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
33454};
33455
33456BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
33457 if (this.precomputed && this.precomputed.doubles)
33458 return this.precomputed.doubles;
33459
33460 var doubles = [ this ];
33461 var acc = this;
33462 for (var i = 0; i < power; i += step) {
33463 for (var j = 0; j < step; j++)
33464 acc = acc.dbl();
33465 doubles.push(acc);
ebd8d4e8 33466 }
8b095871
IC
33467 return {
33468 step: step,
33469 points: doubles
33470 };
33471};
ebd8d4e8 33472
8b095871
IC
33473BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
33474 if (this.precomputed && this.precomputed.naf)
33475 return this.precomputed.naf;
ebd8d4e8 33476
8b095871
IC
33477 var res = [ this ];
33478 var max = (1 << wnd) - 1;
33479 var dbl = max === 1 ? null : this.dbl();
33480 for (var i = 1; i < max; i++)
33481 res[i] = res[i - 1].add(dbl);
33482 return {
33483 wnd: wnd,
33484 points: res
33485 };
33486};
ebd8d4e8 33487
8b095871
IC
33488BasePoint.prototype._getBeta = function _getBeta() {
33489 return null;
33490};
ebd8d4e8 33491
8b095871
IC
33492BasePoint.prototype.dblp = function dblp(k) {
33493 var r = this;
33494 for (var i = 0; i < k; i++)
33495 r = r.dbl();
33496 return r;
33497};
ebd8d4e8 33498
8b095871
IC
33499},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
33500'use strict';
ebd8d4e8 33501
8b095871
IC
33502var curve = require('../curve');
33503var elliptic = require('../../elliptic');
33504var BN = require('bn.js');
33505var inherits = require('inherits');
33506var Base = curve.base;
ebd8d4e8 33507
8b095871 33508var assert = elliptic.utils.assert;
ebd8d4e8 33509
8b095871
IC
33510function EdwardsCurve(conf) {
33511 // NOTE: Important as we are creating point in Base.call()
33512 this.twisted = (conf.a | 0) !== 1;
33513 this.mOneA = this.twisted && (conf.a | 0) === -1;
33514 this.extended = this.mOneA;
33515
33516 Base.call(this, 'edwards', conf);
33517
33518 this.a = new BN(conf.a, 16).umod(this.red.m);
33519 this.a = this.a.toRed(this.red);
33520 this.c = new BN(conf.c, 16).toRed(this.red);
33521 this.c2 = this.c.redSqr();
33522 this.d = new BN(conf.d, 16).toRed(this.red);
33523 this.dd = this.d.redAdd(this.d);
33524
33525 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
33526 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 33527}
8b095871
IC
33528inherits(EdwardsCurve, Base);
33529module.exports = EdwardsCurve;
ebd8d4e8 33530
8b095871
IC
33531EdwardsCurve.prototype._mulA = function _mulA(num) {
33532 if (this.mOneA)
33533 return num.redNeg();
33534 else
33535 return this.a.redMul(num);
33536};
ebd8d4e8 33537
8b095871
IC
33538EdwardsCurve.prototype._mulC = function _mulC(num) {
33539 if (this.oneC)
33540 return num;
33541 else
33542 return this.c.redMul(num);
33543};
ebd8d4e8 33544
8b095871
IC
33545// Just for compatibility with Short curve
33546EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
33547 return this.point(x, y, z, t);
33548};
ebd8d4e8 33549
8b095871
IC
33550EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
33551 x = new BN(x, 16);
33552 if (!x.red)
33553 x = x.toRed(this.red);
ebd8d4e8 33554
8b095871
IC
33555 var x2 = x.redSqr();
33556 var rhs = this.c2.redSub(this.a.redMul(x2));
33557 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
33558
33559 var y2 = rhs.redMul(lhs.redInvm());
33560 var y = y2.redSqrt();
33561 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
33562 throw new Error('invalid point');
33563
33564 var isOdd = y.fromRed().isOdd();
33565 if (odd && !isOdd || !odd && isOdd)
33566 y = y.redNeg();
33567
33568 return this.point(x, y);
33569};
33570
33571EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
33572 y = new BN(y, 16);
33573 if (!y.red)
33574 y = y.toRed(this.red);
33575
33576 // x^2 = (y^2 - 1) / (d y^2 + 1)
33577 var y2 = y.redSqr();
33578 var lhs = y2.redSub(this.one);
33579 var rhs = y2.redMul(this.d).redAdd(this.one);
33580 var x2 = lhs.redMul(rhs.redInvm());
33581
33582 if (x2.cmp(this.zero) === 0) {
33583 if (odd)
33584 throw new Error('invalid point');
33585 else
33586 return this.point(this.zero, y);
ebd8d4e8
IC
33587 }
33588
8b095871
IC
33589 var x = x2.redSqrt();
33590 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
33591 throw new Error('invalid point');
ebd8d4e8 33592
8b095871
IC
33593 if (x.isOdd() !== odd)
33594 x = x.redNeg();
ebd8d4e8 33595
8b095871
IC
33596 return this.point(x, y);
33597};
ebd8d4e8 33598
8b095871
IC
33599EdwardsCurve.prototype.validate = function validate(point) {
33600 if (point.isInfinity())
33601 return true;
ebd8d4e8 33602
8b095871
IC
33603 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
33604 point.normalize();
ebd8d4e8 33605
8b095871
IC
33606 var x2 = point.x.redSqr();
33607 var y2 = point.y.redSqr();
33608 var lhs = x2.redMul(this.a).redAdd(y2);
33609 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 33610
8b095871
IC
33611 return lhs.cmp(rhs) === 0;
33612};
ebd8d4e8 33613
8b095871
IC
33614function Point(curve, x, y, z, t) {
33615 Base.BasePoint.call(this, curve, 'projective');
33616 if (x === null && y === null && z === null) {
33617 this.x = this.curve.zero;
33618 this.y = this.curve.one;
33619 this.z = this.curve.one;
33620 this.t = this.curve.zero;
33621 this.zOne = true;
33622 } else {
33623 this.x = new BN(x, 16);
33624 this.y = new BN(y, 16);
33625 this.z = z ? new BN(z, 16) : this.curve.one;
33626 this.t = t && new BN(t, 16);
33627 if (!this.x.red)
33628 this.x = this.x.toRed(this.curve.red);
33629 if (!this.y.red)
33630 this.y = this.y.toRed(this.curve.red);
33631 if (!this.z.red)
33632 this.z = this.z.toRed(this.curve.red);
33633 if (this.t && !this.t.red)
33634 this.t = this.t.toRed(this.curve.red);
33635 this.zOne = this.z === this.curve.one;
33636
33637 // Use extended coordinates
33638 if (this.curve.extended && !this.t) {
33639 this.t = this.x.redMul(this.y);
33640 if (!this.zOne)
33641 this.t = this.t.redMul(this.z.redInvm());
33642 }
33643 }
33644}
33645inherits(Point, Base.BasePoint);
33646
33647EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
33648 return Point.fromJSON(this, obj);
33649};
33650
33651EdwardsCurve.prototype.point = function point(x, y, z, t) {
33652 return new Point(this, x, y, z, t);
33653};
33654
33655Point.fromJSON = function fromJSON(curve, obj) {
33656 return new Point(curve, obj[0], obj[1], obj[2]);
33657};
33658
33659Point.prototype.inspect = function inspect() {
33660 if (this.isInfinity())
33661 return '<EC Point Infinity>';
33662 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
33663 ' y: ' + this.y.fromRed().toString(16, 2) +
33664 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
33665};
33666
33667Point.prototype.isInfinity = function isInfinity() {
33668 // XXX This code assumes that zero is always zero in red
33669 return this.x.cmpn(0) === 0 &&
33670 this.y.cmp(this.z) === 0;
33671};
33672
33673Point.prototype._extDbl = function _extDbl() {
33674 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33675 // #doubling-dbl-2008-hwcd
33676 // 4M + 4S
33677
33678 // A = X1^2
33679 var a = this.x.redSqr();
33680 // B = Y1^2
33681 var b = this.y.redSqr();
33682 // C = 2 * Z1^2
33683 var c = this.z.redSqr();
33684 c = c.redIAdd(c);
33685 // D = a * A
33686 var d = this.curve._mulA(a);
33687 // E = (X1 + Y1)^2 - A - B
33688 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
33689 // G = D + B
33690 var g = d.redAdd(b);
33691 // F = G - C
33692 var f = g.redSub(c);
33693 // H = D - B
33694 var h = d.redSub(b);
33695 // X3 = E * F
33696 var nx = e.redMul(f);
33697 // Y3 = G * H
33698 var ny = g.redMul(h);
33699 // T3 = E * H
33700 var nt = e.redMul(h);
33701 // Z3 = F * G
33702 var nz = f.redMul(g);
33703 return this.curve.point(nx, ny, nz, nt);
33704};
33705
33706Point.prototype._projDbl = function _projDbl() {
33707 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33708 // #doubling-dbl-2008-bbjlp
33709 // #doubling-dbl-2007-bl
33710 // and others
33711 // Generally 3M + 4S or 2M + 4S
33712
33713 // B = (X1 + Y1)^2
33714 var b = this.x.redAdd(this.y).redSqr();
33715 // C = X1^2
33716 var c = this.x.redSqr();
33717 // D = Y1^2
33718 var d = this.y.redSqr();
33719
33720 var nx;
33721 var ny;
33722 var nz;
33723 if (this.curve.twisted) {
33724 // E = a * C
33725 var e = this.curve._mulA(c);
33726 // F = E + D
33727 var f = e.redAdd(d);
33728 if (this.zOne) {
33729 // X3 = (B - C - D) * (F - 2)
33730 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
33731 // Y3 = F * (E - D)
33732 ny = f.redMul(e.redSub(d));
33733 // Z3 = F^2 - 2 * F
33734 nz = f.redSqr().redSub(f).redSub(f);
33735 } else {
33736 // H = Z1^2
33737 var h = this.z.redSqr();
33738 // J = F - 2 * H
33739 var j = f.redSub(h).redISub(h);
33740 // X3 = (B-C-D)*J
33741 nx = b.redSub(c).redISub(d).redMul(j);
33742 // Y3 = F * (E - D)
33743 ny = f.redMul(e.redSub(d));
33744 // Z3 = F * J
33745 nz = f.redMul(j);
33746 }
33747 } else {
33748 // E = C + D
33749 var e = c.redAdd(d);
33750 // H = (c * Z1)^2
33751 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
33752 // J = E - 2 * H
33753 var j = e.redSub(h).redSub(h);
33754 // X3 = c * (B - E) * J
33755 nx = this.curve._mulC(b.redISub(e)).redMul(j);
33756 // Y3 = c * E * (C - D)
33757 ny = this.curve._mulC(e).redMul(c.redISub(d));
33758 // Z3 = E * J
33759 nz = e.redMul(j);
33760 }
33761 return this.curve.point(nx, ny, nz);
33762};
33763
33764Point.prototype.dbl = function dbl() {
33765 if (this.isInfinity())
33766 return this;
33767
33768 // Double in extended coordinates
33769 if (this.curve.extended)
33770 return this._extDbl();
33771 else
33772 return this._projDbl();
33773};
33774
33775Point.prototype._extAdd = function _extAdd(p) {
33776 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
33777 // #addition-add-2008-hwcd-3
33778 // 8M
33779
33780 // A = (Y1 - X1) * (Y2 - X2)
33781 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
33782 // B = (Y1 + X1) * (Y2 + X2)
33783 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
33784 // C = T1 * k * T2
33785 var c = this.t.redMul(this.curve.dd).redMul(p.t);
33786 // D = Z1 * 2 * Z2
33787 var d = this.z.redMul(p.z.redAdd(p.z));
33788 // E = B - A
33789 var e = b.redSub(a);
33790 // F = D - C
33791 var f = d.redSub(c);
33792 // G = D + C
33793 var g = d.redAdd(c);
33794 // H = B + A
33795 var h = b.redAdd(a);
33796 // X3 = E * F
33797 var nx = e.redMul(f);
33798 // Y3 = G * H
33799 var ny = g.redMul(h);
33800 // T3 = E * H
33801 var nt = e.redMul(h);
33802 // Z3 = F * G
33803 var nz = f.redMul(g);
33804 return this.curve.point(nx, ny, nz, nt);
33805};
33806
33807Point.prototype._projAdd = function _projAdd(p) {
33808 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
33809 // #addition-add-2008-bbjlp
33810 // #addition-add-2007-bl
33811 // 10M + 1S
33812
33813 // A = Z1 * Z2
33814 var a = this.z.redMul(p.z);
33815 // B = A^2
33816 var b = a.redSqr();
33817 // C = X1 * X2
33818 var c = this.x.redMul(p.x);
33819 // D = Y1 * Y2
33820 var d = this.y.redMul(p.y);
33821 // E = d * C * D
33822 var e = this.curve.d.redMul(c).redMul(d);
33823 // F = B - E
33824 var f = b.redSub(e);
33825 // G = B + E
33826 var g = b.redAdd(e);
33827 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
33828 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
33829 var nx = a.redMul(f).redMul(tmp);
33830 var ny;
33831 var nz;
33832 if (this.curve.twisted) {
33833 // Y3 = A * G * (D - a * C)
33834 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
33835 // Z3 = F * G
33836 nz = f.redMul(g);
33837 } else {
33838 // Y3 = A * G * (D - C)
33839 ny = a.redMul(g).redMul(d.redSub(c));
33840 // Z3 = c * F * G
33841 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 33842 }
8b095871
IC
33843 return this.curve.point(nx, ny, nz);
33844};
ebd8d4e8 33845
8b095871
IC
33846Point.prototype.add = function add(p) {
33847 if (this.isInfinity())
33848 return p;
33849 if (p.isInfinity())
33850 return this;
ebd8d4e8 33851
8b095871
IC
33852 if (this.curve.extended)
33853 return this._extAdd(p);
33854 else
33855 return this._projAdd(p);
33856};
ebd8d4e8 33857
8b095871
IC
33858Point.prototype.mul = function mul(k) {
33859 if (this._hasDoubles(k))
33860 return this.curve._fixedNafMul(this, k);
33861 else
33862 return this.curve._wnafMul(this, k);
33863};
ebd8d4e8 33864
8b095871
IC
33865Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
33866 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
33867};
ebd8d4e8 33868
8b095871
IC
33869Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
33870 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
33871};
ebd8d4e8 33872
8b095871
IC
33873Point.prototype.normalize = function normalize() {
33874 if (this.zOne)
33875 return this;
33876
33877 // Normalize coordinates
33878 var zi = this.z.redInvm();
33879 this.x = this.x.redMul(zi);
33880 this.y = this.y.redMul(zi);
33881 if (this.t)
33882 this.t = this.t.redMul(zi);
33883 this.z = this.curve.one;
33884 this.zOne = true;
33885 return this;
33886};
33887
33888Point.prototype.neg = function neg() {
33889 return this.curve.point(this.x.redNeg(),
33890 this.y,
33891 this.z,
33892 this.t && this.t.redNeg());
33893};
33894
33895Point.prototype.getX = function getX() {
33896 this.normalize();
33897 return this.x.fromRed();
33898};
33899
33900Point.prototype.getY = function getY() {
33901 this.normalize();
33902 return this.y.fromRed();
33903};
33904
33905Point.prototype.eq = function eq(other) {
33906 return this === other ||
33907 this.getX().cmp(other.getX()) === 0 &&
33908 this.getY().cmp(other.getY()) === 0;
33909};
33910
33911Point.prototype.eqXToP = function eqXToP(x) {
33912 var rx = x.toRed(this.curve.red).redMul(this.z);
33913 if (this.x.cmp(rx) === 0)
33914 return true;
ebd8d4e8 33915
8b095871
IC
33916 var xc = x.clone();
33917 var t = this.curve.redN.redMul(this.z);
33918 for (;;) {
33919 xc.iadd(this.curve.n);
33920 if (xc.cmp(this.curve.p) >= 0)
33921 return false;
ebd8d4e8 33922
8b095871
IC
33923 rx.redIAdd(t);
33924 if (this.x.cmp(rx) === 0)
33925 return true;
ebd8d4e8 33926 }
8b095871
IC
33927 return false;
33928};
ebd8d4e8 33929
8b095871
IC
33930// Compatibility with BaseCurve
33931Point.prototype.toP = Point.prototype.normalize;
33932Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 33933
8b095871
IC
33934},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
33935'use strict';
ebd8d4e8 33936
8b095871 33937var curve = exports;
ebd8d4e8 33938
8b095871
IC
33939curve.base = require('./base');
33940curve.short = require('./short');
33941curve.mont = require('./mont');
33942curve.edwards = require('./edwards');
ebd8d4e8 33943
8b095871
IC
33944},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
33945'use strict';
ebd8d4e8 33946
8b095871
IC
33947var curve = require('../curve');
33948var BN = require('bn.js');
33949var inherits = require('inherits');
33950var Base = curve.base;
ebd8d4e8 33951
8b095871
IC
33952var elliptic = require('../../elliptic');
33953var utils = elliptic.utils;
ebd8d4e8 33954
8b095871
IC
33955function MontCurve(conf) {
33956 Base.call(this, 'mont', conf);
ebd8d4e8 33957
8b095871
IC
33958 this.a = new BN(conf.a, 16).toRed(this.red);
33959 this.b = new BN(conf.b, 16).toRed(this.red);
33960 this.i4 = new BN(4).toRed(this.red).redInvm();
33961 this.two = new BN(2).toRed(this.red);
33962 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 33963}
8b095871
IC
33964inherits(MontCurve, Base);
33965module.exports = MontCurve;
ebd8d4e8 33966
8b095871
IC
33967MontCurve.prototype.validate = function validate(point) {
33968 var x = point.normalize().x;
33969 var x2 = x.redSqr();
33970 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
33971 var y = rhs.redSqrt();
ebd8d4e8 33972
8b095871
IC
33973 return y.redSqr().cmp(rhs) === 0;
33974};
ebd8d4e8 33975
8b095871
IC
33976function Point(curve, x, z) {
33977 Base.BasePoint.call(this, curve, 'projective');
33978 if (x === null && z === null) {
33979 this.x = this.curve.one;
33980 this.z = this.curve.zero;
33981 } else {
33982 this.x = new BN(x, 16);
33983 this.z = new BN(z, 16);
33984 if (!this.x.red)
33985 this.x = this.x.toRed(this.curve.red);
33986 if (!this.z.red)
33987 this.z = this.z.toRed(this.curve.red);
33988 }
33989}
33990inherits(Point, Base.BasePoint);
ebd8d4e8 33991
8b095871
IC
33992MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
33993 return this.point(utils.toArray(bytes, enc), 1);
33994};
ebd8d4e8 33995
8b095871
IC
33996MontCurve.prototype.point = function point(x, z) {
33997 return new Point(this, x, z);
33998};
ebd8d4e8 33999
8b095871
IC
34000MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
34001 return Point.fromJSON(this, obj);
34002};
ebd8d4e8 34003
8b095871
IC
34004Point.prototype.precompute = function precompute() {
34005 // No-op
34006};
ebd8d4e8 34007
8b095871
IC
34008Point.prototype._encode = function _encode() {
34009 return this.getX().toArray('be', this.curve.p.byteLength());
34010};
ebd8d4e8 34011
8b095871
IC
34012Point.fromJSON = function fromJSON(curve, obj) {
34013 return new Point(curve, obj[0], obj[1] || curve.one);
34014};
ebd8d4e8 34015
8b095871
IC
34016Point.prototype.inspect = function inspect() {
34017 if (this.isInfinity())
34018 return '<EC Point Infinity>';
34019 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34020 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
34021};
ebd8d4e8 34022
8b095871
IC
34023Point.prototype.isInfinity = function isInfinity() {
34024 // XXX This code assumes that zero is always zero in red
34025 return this.z.cmpn(0) === 0;
34026};
ebd8d4e8 34027
8b095871
IC
34028Point.prototype.dbl = function dbl() {
34029 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
34030 // 2M + 2S + 4A
34031
34032 // A = X1 + Z1
34033 var a = this.x.redAdd(this.z);
34034 // AA = A^2
34035 var aa = a.redSqr();
34036 // B = X1 - Z1
34037 var b = this.x.redSub(this.z);
34038 // BB = B^2
34039 var bb = b.redSqr();
34040 // C = AA - BB
34041 var c = aa.redSub(bb);
34042 // X3 = AA * BB
34043 var nx = aa.redMul(bb);
34044 // Z3 = C * (BB + A24 * C)
34045 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
34046 return this.curve.point(nx, nz);
34047};
ebd8d4e8 34048
8b095871
IC
34049Point.prototype.add = function add() {
34050 throw new Error('Not supported on Montgomery curve');
34051};
ebd8d4e8 34052
8b095871
IC
34053Point.prototype.diffAdd = function diffAdd(p, diff) {
34054 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
34055 // 4M + 2S + 6A
34056
34057 // A = X2 + Z2
34058 var a = this.x.redAdd(this.z);
34059 // B = X2 - Z2
34060 var b = this.x.redSub(this.z);
34061 // C = X3 + Z3
34062 var c = p.x.redAdd(p.z);
34063 // D = X3 - Z3
34064 var d = p.x.redSub(p.z);
34065 // DA = D * A
34066 var da = d.redMul(a);
34067 // CB = C * B
34068 var cb = c.redMul(b);
34069 // X5 = Z1 * (DA + CB)^2
34070 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
34071 // Z5 = X1 * (DA - CB)^2
34072 var nz = diff.x.redMul(da.redISub(cb).redSqr());
34073 return this.curve.point(nx, nz);
34074};
ebd8d4e8 34075
8b095871
IC
34076Point.prototype.mul = function mul(k) {
34077 var t = k.clone();
34078 var a = this; // (N / 2) * Q + Q
34079 var b = this.curve.point(null, null); // (N / 2) * Q
34080 var c = this; // Q
34081
34082 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
34083 bits.push(t.andln(1));
34084
34085 for (var i = bits.length - 1; i >= 0; i--) {
34086 if (bits[i] === 0) {
34087 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
34088 a = a.diffAdd(b, c);
34089 // N * Q = 2 * ((N / 2) * Q + Q))
34090 b = b.dbl();
34091 } else {
34092 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
34093 b = a.diffAdd(b, c);
34094 // N * Q + Q = 2 * ((N / 2) * Q + Q)
34095 a = a.dbl();
34096 }
ebd8d4e8 34097 }
8b095871
IC
34098 return b;
34099};
ebd8d4e8 34100
8b095871
IC
34101Point.prototype.mulAdd = function mulAdd() {
34102 throw new Error('Not supported on Montgomery curve');
34103};
ebd8d4e8 34104
8b095871
IC
34105Point.prototype.jumlAdd = function jumlAdd() {
34106 throw new Error('Not supported on Montgomery curve');
34107};
ebd8d4e8 34108
8b095871
IC
34109Point.prototype.eq = function eq(other) {
34110 return this.getX().cmp(other.getX()) === 0;
34111};
ebd8d4e8 34112
8b095871
IC
34113Point.prototype.normalize = function normalize() {
34114 this.x = this.x.redMul(this.z.redInvm());
34115 this.z = this.curve.one;
34116 return this;
34117};
ebd8d4e8 34118
8b095871
IC
34119Point.prototype.getX = function getX() {
34120 // Normalize coordinates
34121 this.normalize();
34122
34123 return this.x.fromRed();
34124};
34125
34126},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 34127'use strict';
ebd8d4e8 34128
8b095871
IC
34129var curve = require('../curve');
34130var elliptic = require('../../elliptic');
34131var BN = require('bn.js');
34132var inherits = require('inherits');
34133var Base = curve.base;
ab78acc6 34134
8b095871 34135var assert = elliptic.utils.assert;
ebd8d4e8 34136
8b095871
IC
34137function ShortCurve(conf) {
34138 Base.call(this, 'short', conf);
ebd8d4e8 34139
8b095871
IC
34140 this.a = new BN(conf.a, 16).toRed(this.red);
34141 this.b = new BN(conf.b, 16).toRed(this.red);
34142 this.tinv = this.two.redInvm();
ab78acc6 34143
8b095871
IC
34144 this.zeroA = this.a.fromRed().cmpn(0) === 0;
34145 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 34146
8b095871
IC
34147 // If the curve is endomorphic, precalculate beta and lambda
34148 this.endo = this._getEndomorphism(conf);
34149 this._endoWnafT1 = new Array(4);
34150 this._endoWnafT2 = new Array(4);
ebd8d4e8 34151}
8b095871
IC
34152inherits(ShortCurve, Base);
34153module.exports = ShortCurve;
ebd8d4e8 34154
8b095871
IC
34155ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
34156 // No efficient endomorphism
34157 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
34158 return;
ebd8d4e8 34159
8b095871
IC
34160 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
34161 var beta;
34162 var lambda;
34163 if (conf.beta) {
34164 beta = new BN(conf.beta, 16).toRed(this.red);
34165 } else {
34166 var betas = this._getEndoRoots(this.p);
34167 // Choose the smallest beta
34168 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
34169 beta = beta.toRed(this.red);
34170 }
34171 if (conf.lambda) {
34172 lambda = new BN(conf.lambda, 16);
34173 } else {
34174 // Choose the lambda that is matching selected beta
34175 var lambdas = this._getEndoRoots(this.n);
34176 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
34177 lambda = lambdas[0];
34178 } else {
34179 lambda = lambdas[1];
34180 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
34181 }
34182 }
ab78acc6 34183
8b095871
IC
34184 // Get basis vectors, used for balanced length-two representation
34185 var basis;
34186 if (conf.basis) {
34187 basis = conf.basis.map(function(vec) {
34188 return {
34189 a: new BN(vec.a, 16),
34190 b: new BN(vec.b, 16)
34191 };
34192 });
34193 } else {
34194 basis = this._getEndoBasis(lambda);
34195 }
ab78acc6 34196
8b095871
IC
34197 return {
34198 beta: beta,
34199 lambda: lambda,
34200 basis: basis
34201 };
34202};
ab78acc6 34203
8b095871
IC
34204ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
34205 // Find roots of for x^2 + x + 1 in F
34206 // Root = (-1 +- Sqrt(-3)) / 2
34207 //
34208 var red = num === this.p ? this.red : BN.mont(num);
34209 var tinv = new BN(2).toRed(red).redInvm();
34210 var ntinv = tinv.redNeg();
ab78acc6 34211
8b095871 34212 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 34213
8b095871
IC
34214 var l1 = ntinv.redAdd(s).fromRed();
34215 var l2 = ntinv.redSub(s).fromRed();
34216 return [ l1, l2 ];
34217};
ab78acc6 34218
8b095871
IC
34219ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
34220 // aprxSqrt >= sqrt(this.n)
34221 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
34222
34223 // 3.74
34224 // Run EGCD, until r(L + 1) < aprxSqrt
34225 var u = lambda;
34226 var v = this.n.clone();
34227 var x1 = new BN(1);
34228 var y1 = new BN(0);
34229 var x2 = new BN(0);
34230 var y2 = new BN(1);
34231
34232 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
34233 var a0;
34234 var b0;
34235 // First vector
34236 var a1;
34237 var b1;
34238 // Second vector
34239 var a2;
34240 var b2;
34241
34242 var prevR;
34243 var i = 0;
34244 var r;
34245 var x;
34246 while (u.cmpn(0) !== 0) {
34247 var q = v.div(u);
34248 r = v.sub(q.mul(u));
34249 x = x2.sub(q.mul(x1));
34250 var y = y2.sub(q.mul(y1));
34251
34252 if (!a1 && r.cmp(aprxSqrt) < 0) {
34253 a0 = prevR.neg();
34254 b0 = x1;
34255 a1 = r.neg();
34256 b1 = x;
34257 } else if (a1 && ++i === 2) {
34258 break;
ab78acc6 34259 }
8b095871 34260 prevR = r;
ab78acc6 34261
8b095871
IC
34262 v = u;
34263 u = r;
34264 x2 = x1;
34265 x1 = x;
34266 y2 = y1;
34267 y1 = y;
ebd8d4e8 34268 }
8b095871
IC
34269 a2 = r.neg();
34270 b2 = x;
ab78acc6 34271
8b095871
IC
34272 var len1 = a1.sqr().add(b1.sqr());
34273 var len2 = a2.sqr().add(b2.sqr());
34274 if (len2.cmp(len1) >= 0) {
34275 a2 = a0;
34276 b2 = b0;
34277 }
ebd8d4e8 34278
8b095871
IC
34279 // Normalize signs
34280 if (a1.negative) {
34281 a1 = a1.neg();
34282 b1 = b1.neg();
34283 }
34284 if (a2.negative) {
34285 a2 = a2.neg();
34286 b2 = b2.neg();
34287 }
ebd8d4e8 34288
8b095871
IC
34289 return [
34290 { a: a1, b: b1 },
34291 { a: a2, b: b2 }
34292 ];
34293};
ab78acc6 34294
8b095871
IC
34295ShortCurve.prototype._endoSplit = function _endoSplit(k) {
34296 var basis = this.endo.basis;
34297 var v1 = basis[0];
34298 var v2 = basis[1];
ab78acc6 34299
8b095871
IC
34300 var c1 = v2.b.mul(k).divRound(this.n);
34301 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 34302
8b095871
IC
34303 var p1 = c1.mul(v1.a);
34304 var p2 = c2.mul(v2.a);
34305 var q1 = c1.mul(v1.b);
34306 var q2 = c2.mul(v2.b);
ab78acc6 34307
8b095871
IC
34308 // Calculate answer
34309 var k1 = k.sub(p1).sub(p2);
34310 var k2 = q1.add(q2).neg();
34311 return { k1: k1, k2: k2 };
34312};
ab78acc6 34313
8b095871
IC
34314ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
34315 x = new BN(x, 16);
34316 if (!x.red)
34317 x = x.toRed(this.red);
ab78acc6 34318
8b095871
IC
34319 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
34320 var y = y2.redSqrt();
34321 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
34322 throw new Error('invalid point');
ab78acc6 34323
8b095871
IC
34324 // XXX Is there any way to tell if the number is odd without converting it
34325 // to non-red form?
34326 var isOdd = y.fromRed().isOdd();
34327 if (odd && !isOdd || !odd && isOdd)
34328 y = y.redNeg();
ab78acc6 34329
8b095871
IC
34330 return this.point(x, y);
34331};
ab78acc6 34332
8b095871
IC
34333ShortCurve.prototype.validate = function validate(point) {
34334 if (point.inf)
34335 return true;
ab78acc6 34336
8b095871
IC
34337 var x = point.x;
34338 var y = point.y;
ab78acc6 34339
8b095871
IC
34340 var ax = this.a.redMul(x);
34341 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
34342 return y.redSqr().redISub(rhs).cmpn(0) === 0;
34343};
ab78acc6 34344
8b095871
IC
34345ShortCurve.prototype._endoWnafMulAdd =
34346 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
34347 var npoints = this._endoWnafT1;
34348 var ncoeffs = this._endoWnafT2;
34349 for (var i = 0; i < points.length; i++) {
34350 var split = this._endoSplit(coeffs[i]);
34351 var p = points[i];
34352 var beta = p._getBeta();
ab78acc6 34353
8b095871
IC
34354 if (split.k1.negative) {
34355 split.k1.ineg();
34356 p = p.neg(true);
34357 }
34358 if (split.k2.negative) {
34359 split.k2.ineg();
34360 beta = beta.neg(true);
ab78acc6 34361 }
ab78acc6 34362
8b095871
IC
34363 npoints[i * 2] = p;
34364 npoints[i * 2 + 1] = beta;
34365 ncoeffs[i * 2] = split.k1;
34366 ncoeffs[i * 2 + 1] = split.k2;
34367 }
34368 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 34369
8b095871
IC
34370 // Clean-up references to points and coefficients
34371 for (var j = 0; j < i * 2; j++) {
34372 npoints[j] = null;
34373 ncoeffs[j] = null;
34374 }
34375 return res;
34376};
34377
34378function Point(curve, x, y, isRed) {
34379 Base.BasePoint.call(this, curve, 'affine');
34380 if (x === null && y === null) {
34381 this.x = null;
34382 this.y = null;
34383 this.inf = true;
34384 } else {
34385 this.x = new BN(x, 16);
34386 this.y = new BN(y, 16);
34387 // Force redgomery representation when loading from JSON
34388 if (isRed) {
34389 this.x.forceRed(this.curve.red);
34390 this.y.forceRed(this.curve.red);
ab78acc6 34391 }
8b095871
IC
34392 if (!this.x.red)
34393 this.x = this.x.toRed(this.curve.red);
34394 if (!this.y.red)
34395 this.y = this.y.toRed(this.curve.red);
34396 this.inf = false;
34397 }
34398}
34399inherits(Point, Base.BasePoint);
ab78acc6 34400
8b095871
IC
34401ShortCurve.prototype.point = function point(x, y, isRed) {
34402 return new Point(this, x, y, isRed);
34403};
ab78acc6 34404
8b095871
IC
34405ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
34406 return Point.fromJSON(this, obj, red);
34407};
ab78acc6 34408
8b095871
IC
34409Point.prototype._getBeta = function _getBeta() {
34410 if (!this.curve.endo)
34411 return;
ab78acc6 34412
8b095871
IC
34413 var pre = this.precomputed;
34414 if (pre && pre.beta)
34415 return pre.beta;
ab78acc6 34416
8b095871
IC
34417 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
34418 if (pre) {
34419 var curve = this.curve;
34420 var endoMul = function(p) {
34421 return curve.point(p.x.redMul(curve.endo.beta), p.y);
34422 };
34423 pre.beta = beta;
34424 beta.precomputed = {
34425 beta: null,
34426 naf: pre.naf && {
34427 wnd: pre.naf.wnd,
34428 points: pre.naf.points.map(endoMul)
34429 },
34430 doubles: pre.doubles && {
34431 step: pre.doubles.step,
34432 points: pre.doubles.points.map(endoMul)
34433 }
ab78acc6 34434 };
ab78acc6 34435 }
8b095871 34436 return beta;
ab78acc6
IC
34437};
34438
8b095871
IC
34439Point.prototype.toJSON = function toJSON() {
34440 if (!this.precomputed)
34441 return [ this.x, this.y ];
ab78acc6 34442
8b095871
IC
34443 return [ this.x, this.y, this.precomputed && {
34444 doubles: this.precomputed.doubles && {
34445 step: this.precomputed.doubles.step,
34446 points: this.precomputed.doubles.points.slice(1)
34447 },
34448 naf: this.precomputed.naf && {
34449 wnd: this.precomputed.naf.wnd,
34450 points: this.precomputed.naf.points.slice(1)
34451 }
34452 } ];
34453};
ab78acc6 34454
8b095871
IC
34455Point.fromJSON = function fromJSON(curve, obj, red) {
34456 if (typeof obj === 'string')
34457 obj = JSON.parse(obj);
34458 var res = curve.point(obj[0], obj[1], red);
34459 if (!obj[2])
34460 return res;
ab78acc6 34461
8b095871
IC
34462 function obj2point(obj) {
34463 return curve.point(obj[0], obj[1], red);
34464 }
34465
34466 var pre = obj[2];
34467 res.precomputed = {
34468 beta: null,
34469 doubles: pre.doubles && {
34470 step: pre.doubles.step,
34471 points: [ res ].concat(pre.doubles.points.map(obj2point))
34472 },
34473 naf: pre.naf && {
34474 wnd: pre.naf.wnd,
34475 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 34476 }
8b095871
IC
34477 };
34478 return res;
34479};
ab78acc6 34480
8b095871
IC
34481Point.prototype.inspect = function inspect() {
34482 if (this.isInfinity())
34483 return '<EC Point Infinity>';
34484 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
34485 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
34486};
ab78acc6 34487
8b095871
IC
34488Point.prototype.isInfinity = function isInfinity() {
34489 return this.inf;
34490};
ebd8d4e8 34491
8b095871
IC
34492Point.prototype.add = function add(p) {
34493 // O + P = P
34494 if (this.inf)
34495 return p;
ab78acc6 34496
8b095871
IC
34497 // P + O = P
34498 if (p.inf)
34499 return this;
ab78acc6 34500
8b095871
IC
34501 // P + P = 2P
34502 if (this.eq(p))
34503 return this.dbl();
ab78acc6 34504
8b095871
IC
34505 // P + (-P) = O
34506 if (this.neg().eq(p))
34507 return this.curve.point(null, null);
ab78acc6 34508
8b095871
IC
34509 // P + Q = O
34510 if (this.x.cmp(p.x) === 0)
34511 return this.curve.point(null, null);
ebd8d4e8 34512
8b095871
IC
34513 var c = this.y.redSub(p.y);
34514 if (c.cmpn(0) !== 0)
34515 c = c.redMul(this.x.redSub(p.x).redInvm());
34516 var nx = c.redSqr().redISub(this.x).redISub(p.x);
34517 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34518 return this.curve.point(nx, ny);
34519};
ab78acc6 34520
8b095871
IC
34521Point.prototype.dbl = function dbl() {
34522 if (this.inf)
34523 return this;
ebd8d4e8 34524
8b095871
IC
34525 // 2P = O
34526 var ys1 = this.y.redAdd(this.y);
34527 if (ys1.cmpn(0) === 0)
34528 return this.curve.point(null, null);
ebd8d4e8 34529
8b095871 34530 var a = this.curve.a;
ebd8d4e8 34531
8b095871
IC
34532 var x2 = this.x.redSqr();
34533 var dyinv = ys1.redInvm();
34534 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 34535
8b095871
IC
34536 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
34537 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
34538 return this.curve.point(nx, ny);
34539};
ebd8d4e8 34540
8b095871
IC
34541Point.prototype.getX = function getX() {
34542 return this.x.fromRed();
34543};
ab78acc6 34544
8b095871
IC
34545Point.prototype.getY = function getY() {
34546 return this.y.fromRed();
34547};
ebd8d4e8 34548
8b095871
IC
34549Point.prototype.mul = function mul(k) {
34550 k = new BN(k, 16);
ebd8d4e8 34551
8b095871
IC
34552 if (this._hasDoubles(k))
34553 return this.curve._fixedNafMul(this, k);
34554 else if (this.curve.endo)
34555 return this.curve._endoWnafMulAdd([ this ], [ k ]);
34556 else
34557 return this.curve._wnafMul(this, k);
34558};
ebd8d4e8 34559
8b095871
IC
34560Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
34561 var points = [ this, p2 ];
34562 var coeffs = [ k1, k2 ];
34563 if (this.curve.endo)
34564 return this.curve._endoWnafMulAdd(points, coeffs);
34565 else
34566 return this.curve._wnafMulAdd(1, points, coeffs, 2);
34567};
ebd8d4e8 34568
8b095871
IC
34569Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
34570 var points = [ this, p2 ];
34571 var coeffs = [ k1, k2 ];
34572 if (this.curve.endo)
34573 return this.curve._endoWnafMulAdd(points, coeffs, true);
34574 else
34575 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
34576};
ebd8d4e8 34577
8b095871
IC
34578Point.prototype.eq = function eq(p) {
34579 return this === p ||
34580 this.inf === p.inf &&
34581 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
34582};
ebd8d4e8 34583
8b095871
IC
34584Point.prototype.neg = function neg(_precompute) {
34585 if (this.inf)
34586 return this;
ebd8d4e8 34587
8b095871
IC
34588 var res = this.curve.point(this.x, this.y.redNeg());
34589 if (_precompute && this.precomputed) {
34590 var pre = this.precomputed;
34591 var negate = function(p) {
34592 return p.neg();
34593 };
34594 res.precomputed = {
34595 naf: pre.naf && {
34596 wnd: pre.naf.wnd,
34597 points: pre.naf.points.map(negate)
34598 },
34599 doubles: pre.doubles && {
34600 step: pre.doubles.step,
34601 points: pre.doubles.points.map(negate)
34602 }
34603 };
34604 }
34605 return res;
34606};
ebd8d4e8 34607
8b095871
IC
34608Point.prototype.toJ = function toJ() {
34609 if (this.inf)
34610 return this.curve.jpoint(null, null, null);
ebd8d4e8 34611
8b095871
IC
34612 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
34613 return res;
34614};
ebd8d4e8 34615
8b095871
IC
34616function JPoint(curve, x, y, z) {
34617 Base.BasePoint.call(this, curve, 'jacobian');
34618 if (x === null && y === null && z === null) {
34619 this.x = this.curve.one;
34620 this.y = this.curve.one;
34621 this.z = new BN(0);
34622 } else {
34623 this.x = new BN(x, 16);
34624 this.y = new BN(y, 16);
34625 this.z = new BN(z, 16);
34626 }
34627 if (!this.x.red)
34628 this.x = this.x.toRed(this.curve.red);
34629 if (!this.y.red)
34630 this.y = this.y.toRed(this.curve.red);
34631 if (!this.z.red)
34632 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 34633
8b095871 34634 this.zOne = this.z === this.curve.one;
ab78acc6 34635}
8b095871 34636inherits(JPoint, Base.BasePoint);
ab78acc6 34637
8b095871
IC
34638ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
34639 return new JPoint(this, x, y, z);
34640};
ab78acc6 34641
8b095871
IC
34642JPoint.prototype.toP = function toP() {
34643 if (this.isInfinity())
34644 return this.curve.point(null, null);
ab78acc6 34645
8b095871
IC
34646 var zinv = this.z.redInvm();
34647 var zinv2 = zinv.redSqr();
34648 var ax = this.x.redMul(zinv2);
34649 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 34650
8b095871
IC
34651 return this.curve.point(ax, ay);
34652};
ab78acc6 34653
8b095871
IC
34654JPoint.prototype.neg = function neg() {
34655 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
34656};
ab78acc6 34657
8b095871
IC
34658JPoint.prototype.add = function add(p) {
34659 // O + P = P
34660 if (this.isInfinity())
34661 return p;
ab78acc6 34662
8b095871
IC
34663 // P + O = P
34664 if (p.isInfinity())
34665 return this;
ab78acc6 34666
8b095871
IC
34667 // 12M + 4S + 7A
34668 var pz2 = p.z.redSqr();
34669 var z2 = this.z.redSqr();
34670 var u1 = this.x.redMul(pz2);
34671 var u2 = p.x.redMul(z2);
34672 var s1 = this.y.redMul(pz2.redMul(p.z));
34673 var s2 = p.y.redMul(z2.redMul(this.z));
34674
34675 var h = u1.redSub(u2);
34676 var r = s1.redSub(s2);
34677 if (h.cmpn(0) === 0) {
34678 if (r.cmpn(0) !== 0)
34679 return this.curve.jpoint(null, null, null);
34680 else
34681 return this.dbl();
34682 }
ab78acc6 34683
8b095871
IC
34684 var h2 = h.redSqr();
34685 var h3 = h2.redMul(h);
34686 var v = u1.redMul(h2);
ab78acc6 34687
8b095871
IC
34688 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34689 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34690 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 34691
8b095871
IC
34692 return this.curve.jpoint(nx, ny, nz);
34693};
ab78acc6 34694
8b095871
IC
34695JPoint.prototype.mixedAdd = function mixedAdd(p) {
34696 // O + P = P
34697 if (this.isInfinity())
34698 return p.toJ();
ab78acc6 34699
8b095871
IC
34700 // P + O = P
34701 if (p.isInfinity())
34702 return this;
ab78acc6 34703
8b095871
IC
34704 // 8M + 3S + 7A
34705 var z2 = this.z.redSqr();
34706 var u1 = this.x;
34707 var u2 = p.x.redMul(z2);
34708 var s1 = this.y;
34709 var s2 = p.y.redMul(z2).redMul(this.z);
34710
34711 var h = u1.redSub(u2);
34712 var r = s1.redSub(s2);
34713 if (h.cmpn(0) === 0) {
34714 if (r.cmpn(0) !== 0)
34715 return this.curve.jpoint(null, null, null);
34716 else
34717 return this.dbl();
ab78acc6
IC
34718 }
34719
8b095871
IC
34720 var h2 = h.redSqr();
34721 var h3 = h2.redMul(h);
34722 var v = u1.redMul(h2);
ab78acc6 34723
8b095871
IC
34724 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
34725 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
34726 var nz = this.z.redMul(h);
ab78acc6 34727
8b095871
IC
34728 return this.curve.jpoint(nx, ny, nz);
34729};
ab78acc6 34730
8b095871
IC
34731JPoint.prototype.dblp = function dblp(pow) {
34732 if (pow === 0)
34733 return this;
34734 if (this.isInfinity())
34735 return this;
34736 if (!pow)
34737 return this.dbl();
34738
34739 if (this.curve.zeroA || this.curve.threeA) {
34740 var r = this;
34741 for (var i = 0; i < pow; i++)
34742 r = r.dbl();
34743 return r;
34744 }
34745
34746 // 1M + 2S + 1A + N * (4S + 5M + 8A)
34747 // N = 1 => 6M + 6S + 9A
34748 var a = this.curve.a;
34749 var tinv = this.curve.tinv;
34750
34751 var jx = this.x;
34752 var jy = this.y;
34753 var jz = this.z;
34754 var jz4 = jz.redSqr().redSqr();
34755
34756 // Reuse results
34757 var jyd = jy.redAdd(jy);
34758 for (var i = 0; i < pow; i++) {
34759 var jx2 = jx.redSqr();
34760 var jyd2 = jyd.redSqr();
34761 var jyd4 = jyd2.redSqr();
34762 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
34763
34764 var t1 = jx.redMul(jyd2);
34765 var nx = c.redSqr().redISub(t1.redAdd(t1));
34766 var t2 = t1.redISub(nx);
34767 var dny = c.redMul(t2);
34768 dny = dny.redIAdd(dny).redISub(jyd4);
34769 var nz = jyd.redMul(jz);
34770 if (i + 1 < pow)
34771 jz4 = jz4.redMul(jyd4);
34772
34773 jx = nx;
34774 jz = nz;
34775 jyd = dny;
34776 }
34777
34778 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
34779};
ab78acc6 34780
8b095871
IC
34781JPoint.prototype.dbl = function dbl() {
34782 if (this.isInfinity())
34783 return this;
ab78acc6 34784
8b095871
IC
34785 if (this.curve.zeroA)
34786 return this._zeroDbl();
34787 else if (this.curve.threeA)
34788 return this._threeDbl();
34789 else
34790 return this._dbl();
34791};
ab78acc6 34792
8b095871
IC
34793JPoint.prototype._zeroDbl = function _zeroDbl() {
34794 var nx;
34795 var ny;
34796 var nz;
34797 // Z = 1
34798 if (this.zOne) {
34799 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34800 // #doubling-mdbl-2007-bl
34801 // 1M + 5S + 14A
34802
34803 // XX = X1^2
34804 var xx = this.x.redSqr();
34805 // YY = Y1^2
34806 var yy = this.y.redSqr();
34807 // YYYY = YY^2
34808 var yyyy = yy.redSqr();
34809 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34810 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34811 s = s.redIAdd(s);
34812 // M = 3 * XX + a; a = 0
34813 var m = xx.redAdd(xx).redIAdd(xx);
34814 // T = M ^ 2 - 2*S
34815 var t = m.redSqr().redISub(s).redISub(s);
34816
34817 // 8 * YYYY
34818 var yyyy8 = yyyy.redIAdd(yyyy);
34819 yyyy8 = yyyy8.redIAdd(yyyy8);
34820 yyyy8 = yyyy8.redIAdd(yyyy8);
34821
34822 // X3 = T
34823 nx = t;
34824 // Y3 = M * (S - T) - 8 * YYYY
34825 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
34826 // Z3 = 2*Y1
34827 nz = this.y.redAdd(this.y);
34828 } else {
34829 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
34830 // #doubling-dbl-2009-l
34831 // 2M + 5S + 13A
34832
34833 // A = X1^2
34834 var a = this.x.redSqr();
34835 // B = Y1^2
34836 var b = this.y.redSqr();
34837 // C = B^2
34838 var c = b.redSqr();
34839 // D = 2 * ((X1 + B)^2 - A - C)
34840 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
34841 d = d.redIAdd(d);
34842 // E = 3 * A
34843 var e = a.redAdd(a).redIAdd(a);
34844 // F = E^2
34845 var f = e.redSqr();
34846
34847 // 8 * C
34848 var c8 = c.redIAdd(c);
34849 c8 = c8.redIAdd(c8);
34850 c8 = c8.redIAdd(c8);
34851
34852 // X3 = F - 2 * D
34853 nx = f.redISub(d).redISub(d);
34854 // Y3 = E * (D - X3) - 8 * C
34855 ny = e.redMul(d.redISub(nx)).redISub(c8);
34856 // Z3 = 2 * Y1 * Z1
34857 nz = this.y.redMul(this.z);
34858 nz = nz.redIAdd(nz);
34859 }
34860
34861 return this.curve.jpoint(nx, ny, nz);
34862};
ab78acc6 34863
8b095871
IC
34864JPoint.prototype._threeDbl = function _threeDbl() {
34865 var nx;
34866 var ny;
34867 var nz;
34868 // Z = 1
34869 if (this.zOne) {
34870 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
34871 // #doubling-mdbl-2007-bl
34872 // 1M + 5S + 15A
34873
34874 // XX = X1^2
34875 var xx = this.x.redSqr();
34876 // YY = Y1^2
34877 var yy = this.y.redSqr();
34878 // YYYY = YY^2
34879 var yyyy = yy.redSqr();
34880 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
34881 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34882 s = s.redIAdd(s);
34883 // M = 3 * XX + a
34884 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
34885 // T = M^2 - 2 * S
34886 var t = m.redSqr().redISub(s).redISub(s);
34887 // X3 = T
34888 nx = t;
34889 // Y3 = M * (S - T) - 8 * YYYY
34890 var yyyy8 = yyyy.redIAdd(yyyy);
34891 yyyy8 = yyyy8.redIAdd(yyyy8);
34892 yyyy8 = yyyy8.redIAdd(yyyy8);
34893 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
34894 // Z3 = 2 * Y1
34895 nz = this.y.redAdd(this.y);
34896 } else {
34897 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
34898 // 3M + 5S
34899
34900 // delta = Z1^2
34901 var delta = this.z.redSqr();
34902 // gamma = Y1^2
34903 var gamma = this.y.redSqr();
34904 // beta = X1 * gamma
34905 var beta = this.x.redMul(gamma);
34906 // alpha = 3 * (X1 - delta) * (X1 + delta)
34907 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
34908 alpha = alpha.redAdd(alpha).redIAdd(alpha);
34909 // X3 = alpha^2 - 8 * beta
34910 var beta4 = beta.redIAdd(beta);
34911 beta4 = beta4.redIAdd(beta4);
34912 var beta8 = beta4.redAdd(beta4);
34913 nx = alpha.redSqr().redISub(beta8);
34914 // Z3 = (Y1 + Z1)^2 - gamma - delta
34915 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
34916 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
34917 var ggamma8 = gamma.redSqr();
34918 ggamma8 = ggamma8.redIAdd(ggamma8);
34919 ggamma8 = ggamma8.redIAdd(ggamma8);
34920 ggamma8 = ggamma8.redIAdd(ggamma8);
34921 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
34922 }
34923
34924 return this.curve.jpoint(nx, ny, nz);
34925};
ab78acc6 34926
8b095871
IC
34927JPoint.prototype._dbl = function _dbl() {
34928 var a = this.curve.a;
ab78acc6 34929
8b095871
IC
34930 // 4M + 6S + 10A
34931 var jx = this.x;
34932 var jy = this.y;
34933 var jz = this.z;
34934 var jz4 = jz.redSqr().redSqr();
ab78acc6 34935
8b095871
IC
34936 var jx2 = jx.redSqr();
34937 var jy2 = jy.redSqr();
ebd8d4e8 34938
8b095871 34939 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 34940
8b095871
IC
34941 var jxd4 = jx.redAdd(jx);
34942 jxd4 = jxd4.redIAdd(jxd4);
34943 var t1 = jxd4.redMul(jy2);
34944 var nx = c.redSqr().redISub(t1.redAdd(t1));
34945 var t2 = t1.redISub(nx);
ebd8d4e8 34946
8b095871
IC
34947 var jyd8 = jy2.redSqr();
34948 jyd8 = jyd8.redIAdd(jyd8);
34949 jyd8 = jyd8.redIAdd(jyd8);
34950 jyd8 = jyd8.redIAdd(jyd8);
34951 var ny = c.redMul(t2).redISub(jyd8);
34952 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 34953
8b095871
IC
34954 return this.curve.jpoint(nx, ny, nz);
34955};
ebd8d4e8 34956
8b095871
IC
34957JPoint.prototype.trpl = function trpl() {
34958 if (!this.curve.zeroA)
34959 return this.dbl().add(this);
34960
34961 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
34962 // 5M + 10S + ...
34963
34964 // XX = X1^2
34965 var xx = this.x.redSqr();
34966 // YY = Y1^2
34967 var yy = this.y.redSqr();
34968 // ZZ = Z1^2
34969 var zz = this.z.redSqr();
34970 // YYYY = YY^2
34971 var yyyy = yy.redSqr();
34972 // M = 3 * XX + a * ZZ2; a = 0
34973 var m = xx.redAdd(xx).redIAdd(xx);
34974 // MM = M^2
34975 var mm = m.redSqr();
34976 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
34977 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
34978 e = e.redIAdd(e);
34979 e = e.redAdd(e).redIAdd(e);
34980 e = e.redISub(mm);
34981 // EE = E^2
34982 var ee = e.redSqr();
34983 // T = 16*YYYY
34984 var t = yyyy.redIAdd(yyyy);
34985 t = t.redIAdd(t);
34986 t = t.redIAdd(t);
34987 t = t.redIAdd(t);
34988 // U = (M + E)^2 - MM - EE - T
34989 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
34990 // X3 = 4 * (X1 * EE - 4 * YY * U)
34991 var yyu4 = yy.redMul(u);
34992 yyu4 = yyu4.redIAdd(yyu4);
34993 yyu4 = yyu4.redIAdd(yyu4);
34994 var nx = this.x.redMul(ee).redISub(yyu4);
34995 nx = nx.redIAdd(nx);
34996 nx = nx.redIAdd(nx);
34997 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
34998 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
34999 ny = ny.redIAdd(ny);
35000 ny = ny.redIAdd(ny);
35001 ny = ny.redIAdd(ny);
35002 // Z3 = (Z1 + E)^2 - ZZ - EE
35003 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
35004
35005 return this.curve.jpoint(nx, ny, nz);
35006};
ebd8d4e8 35007
8b095871
IC
35008JPoint.prototype.mul = function mul(k, kbase) {
35009 k = new BN(k, kbase);
ebd8d4e8 35010
8b095871
IC
35011 return this.curve._wnafMul(this, k);
35012};
ebd8d4e8 35013
8b095871
IC
35014JPoint.prototype.eq = function eq(p) {
35015 if (p.type === 'affine')
35016 return this.eq(p.toJ());
ebd8d4e8 35017
8b095871
IC
35018 if (this === p)
35019 return true;
ebd8d4e8 35020
8b095871
IC
35021 // x1 * z2^2 == x2 * z1^2
35022 var z2 = this.z.redSqr();
35023 var pz2 = p.z.redSqr();
35024 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
35025 return false;
ebd8d4e8 35026
8b095871
IC
35027 // y1 * z2^3 == y2 * z1^3
35028 var z3 = z2.redMul(this.z);
35029 var pz3 = pz2.redMul(p.z);
35030 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
35031};
ab78acc6 35032
8b095871
IC
35033JPoint.prototype.eqXToP = function eqXToP(x) {
35034 var zs = this.z.redSqr();
35035 var rx = x.toRed(this.curve.red).redMul(zs);
35036 if (this.x.cmp(rx) === 0)
35037 return true;
ebd8d4e8 35038
8b095871
IC
35039 var xc = x.clone();
35040 var t = this.curve.redN.redMul(zs);
35041 for (;;) {
35042 xc.iadd(this.curve.n);
35043 if (xc.cmp(this.curve.p) >= 0)
35044 return false;
ebd8d4e8 35045
8b095871
IC
35046 rx.redIAdd(t);
35047 if (this.x.cmp(rx) === 0)
35048 return true;
35049 }
35050 return false;
35051};
ebd8d4e8 35052
8b095871
IC
35053JPoint.prototype.inspect = function inspect() {
35054 if (this.isInfinity())
35055 return '<EC JPoint Infinity>';
35056 return '<EC JPoint x: ' + this.x.toString(16, 2) +
35057 ' y: ' + this.y.toString(16, 2) +
35058 ' z: ' + this.z.toString(16, 2) + '>';
35059};
ebd8d4e8 35060
8b095871
IC
35061JPoint.prototype.isInfinity = function isInfinity() {
35062 // XXX This code assumes that zero is always zero in red
35063 return this.z.cmpn(0) === 0;
35064};
ebd8d4e8 35065
8b095871
IC
35066},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
35067'use strict';
ebd8d4e8 35068
8b095871 35069var curves = exports;
ebd8d4e8 35070
8b095871
IC
35071var hash = require('hash.js');
35072var elliptic = require('../elliptic');
ebd8d4e8 35073
8b095871 35074var assert = elliptic.utils.assert;
ebd8d4e8 35075
8b095871
IC
35076function PresetCurve(options) {
35077 if (options.type === 'short')
35078 this.curve = new elliptic.curve.short(options);
35079 else if (options.type === 'edwards')
35080 this.curve = new elliptic.curve.edwards(options);
35081 else
35082 this.curve = new elliptic.curve.mont(options);
35083 this.g = this.curve.g;
35084 this.n = this.curve.n;
35085 this.hash = options.hash;
35086
35087 assert(this.g.validate(), 'Invalid curve');
35088 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
35089}
35090curves.PresetCurve = PresetCurve;
35091
35092function defineCurve(name, options) {
35093 Object.defineProperty(curves, name, {
35094 configurable: true,
35095 enumerable: true,
35096 get: function() {
35097 var curve = new PresetCurve(options);
35098 Object.defineProperty(curves, name, {
35099 configurable: true,
35100 enumerable: true,
35101 value: curve
35102 });
35103 return curve;
35104 }
35105 });
ebd8d4e8
IC
35106}
35107
8b095871
IC
35108defineCurve('p192', {
35109 type: 'short',
35110 prime: 'p192',
35111 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
35112 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
35113 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
35114 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
35115 hash: hash.sha256,
35116 gRed: false,
35117 g: [
35118 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
35119 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
35120 ]
35121});
ebd8d4e8 35122
8b095871
IC
35123defineCurve('p224', {
35124 type: 'short',
35125 prime: 'p224',
35126 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
35127 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
35128 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
35129 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
35130 hash: hash.sha256,
35131 gRed: false,
35132 g: [
35133 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
35134 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
35135 ]
35136});
ebd8d4e8 35137
8b095871
IC
35138defineCurve('p256', {
35139 type: 'short',
35140 prime: null,
35141 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
35142 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
35143 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
35144 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
35145 hash: hash.sha256,
35146 gRed: false,
35147 g: [
35148 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
35149 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
35150 ]
35151});
ebd8d4e8 35152
8b095871
IC
35153defineCurve('p384', {
35154 type: 'short',
35155 prime: null,
35156 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35157 'fffffffe ffffffff 00000000 00000000 ffffffff',
35158 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35159 'fffffffe ffffffff 00000000 00000000 fffffffc',
35160 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
35161 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
35162 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
35163 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
35164 hash: hash.sha384,
35165 gRed: false,
35166 g: [
35167 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
35168 '5502f25d bf55296c 3a545e38 72760ab7',
35169 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
35170 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
35171 ]
35172});
ebd8d4e8 35173
8b095871
IC
35174defineCurve('p521', {
35175 type: 'short',
35176 prime: null,
35177 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35178 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35179 'ffffffff ffffffff ffffffff ffffffff ffffffff',
35180 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35181 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35182 'ffffffff ffffffff ffffffff ffffffff fffffffc',
35183 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
35184 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
35185 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
35186 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
35187 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
35188 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
35189 hash: hash.sha512,
35190 gRed: false,
35191 g: [
35192 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
35193 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
35194 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
35195 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
35196 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
35197 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
35198 ]
35199});
ebd8d4e8 35200
8b095871
IC
35201defineCurve('curve25519', {
35202 type: 'mont',
35203 prime: 'p25519',
35204 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35205 a: '76d06',
35206 b: '1',
35207 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35208 hash: hash.sha256,
35209 gRed: false,
35210 g: [
35211 '9'
35212 ]
35213});
ebd8d4e8 35214
8b095871
IC
35215defineCurve('ed25519', {
35216 type: 'edwards',
35217 prime: 'p25519',
35218 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
35219 a: '-1',
35220 c: '1',
35221 // -121665 * (121666^(-1)) (mod P)
35222 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
35223 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
35224 hash: hash.sha256,
35225 gRed: false,
35226 g: [
35227 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
35228
35229 // 4/5
35230 '6666666666666666666666666666666666666666666666666666666666666658'
35231 ]
35232});
ebd8d4e8 35233
8b095871
IC
35234var pre;
35235try {
35236 pre = require('./precomputed/secp256k1');
35237} catch (e) {
35238 pre = undefined;
35239}
35240
35241defineCurve('secp256k1', {
35242 type: 'short',
35243 prime: 'k256',
35244 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
35245 a: '0',
35246 b: '7',
35247 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
35248 h: '1',
35249 hash: hash.sha256,
35250
35251 // Precomputed endomorphism
35252 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
35253 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
35254 basis: [
35255 {
35256 a: '3086d221a7d46bcde86c90e49284eb15',
35257 b: '-e4437ed6010e88286f547fa90abfe4c3'
35258 },
35259 {
35260 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
35261 b: '3086d221a7d46bcde86c90e49284eb15'
35262 }
35263 ],
ebd8d4e8 35264
8b095871
IC
35265 gRed: false,
35266 g: [
35267 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
35268 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
35269 pre
35270 ]
35271});
ebd8d4e8 35272
8b095871
IC
35273},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
35274'use strict';
ebd8d4e8 35275
8b095871
IC
35276var BN = require('bn.js');
35277var elliptic = require('../../elliptic');
35278var utils = elliptic.utils;
35279var assert = utils.assert;
ebd8d4e8 35280
8b095871
IC
35281var KeyPair = require('./key');
35282var Signature = require('./signature');
ebd8d4e8 35283
8b095871
IC
35284function EC(options) {
35285 if (!(this instanceof EC))
35286 return new EC(options);
ebd8d4e8 35287
8b095871
IC
35288 // Shortcut `elliptic.ec(curve-name)`
35289 if (typeof options === 'string') {
35290 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
35291
35292 options = elliptic.curves[options];
ebd8d4e8
IC
35293 }
35294
8b095871
IC
35295 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
35296 if (options instanceof elliptic.curves.PresetCurve)
35297 options = { curve: options };
ebd8d4e8 35298
8b095871
IC
35299 this.curve = options.curve.curve;
35300 this.n = this.curve.n;
35301 this.nh = this.n.ushrn(1);
35302 this.g = this.curve.g;
ebd8d4e8 35303
8b095871
IC
35304 // Point on curve
35305 this.g = options.curve.g;
35306 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 35307
8b095871
IC
35308 // Hash for function for DRBG
35309 this.hash = options.hash || options.curve.hash;
ebd8d4e8 35310}
8b095871 35311module.exports = EC;
ebd8d4e8 35312
8b095871
IC
35313EC.prototype.keyPair = function keyPair(options) {
35314 return new KeyPair(this, options);
35315};
35316
35317EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
35318 return KeyPair.fromPrivate(this, priv, enc);
35319};
35320
35321EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
35322 return KeyPair.fromPublic(this, pub, enc);
35323};
35324
35325EC.prototype.genKeyPair = function genKeyPair(options) {
35326 if (!options)
35327 options = {};
35328
35329 // Instantiate Hmac_DRBG
35330 var drbg = new elliptic.hmacDRBG({
35331 hash: this.hash,
35332 pers: options.pers,
35333 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
35334 nonce: this.n.toArray()
35335 });
ebd8d4e8 35336
8b095871
IC
35337 var bytes = this.n.byteLength();
35338 var ns2 = this.n.sub(new BN(2));
35339 do {
35340 var priv = new BN(drbg.generate(bytes));
35341 if (priv.cmp(ns2) > 0)
35342 continue;
ebd8d4e8 35343
8b095871
IC
35344 priv.iaddn(1);
35345 return this.keyFromPrivate(priv);
35346 } while (true);
35347};
ebd8d4e8 35348
8b095871
IC
35349EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
35350 var delta = msg.byteLength() * 8 - this.n.bitLength();
35351 if (delta > 0)
35352 msg = msg.ushrn(delta);
35353 if (!truncOnly && msg.cmp(this.n) >= 0)
35354 return msg.sub(this.n);
35355 else
35356 return msg;
35357};
ebd8d4e8 35358
8b095871
IC
35359EC.prototype.sign = function sign(msg, key, enc, options) {
35360 if (typeof enc === 'object') {
35361 options = enc;
35362 enc = null;
ebd8d4e8 35363 }
8b095871
IC
35364 if (!options)
35365 options = {};
ebd8d4e8 35366
8b095871
IC
35367 key = this.keyFromPrivate(key, enc);
35368 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 35369
8b095871
IC
35370 // Zero-extend key to provide enough entropy
35371 var bytes = this.n.byteLength();
35372 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 35373
8b095871
IC
35374 // Zero-extend nonce to have the same byte size as N
35375 var nonce = msg.toArray('be', bytes);
ab78acc6 35376
8b095871
IC
35377 // Instantiate Hmac_DRBG
35378 var drbg = new elliptic.hmacDRBG({
35379 hash: this.hash,
35380 entropy: bkey,
35381 nonce: nonce,
35382 pers: options.pers,
35383 persEnc: options.persEnc
35384 });
ab78acc6 35385
8b095871
IC
35386 // Number of bytes to generate
35387 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 35388
8b095871
IC
35389 for (var iter = 0; true; iter++) {
35390 var k = options.k ?
35391 options.k(iter) :
35392 new BN(drbg.generate(this.n.byteLength()));
35393 k = this._truncateToN(k, true);
35394 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
35395 continue;
ebd8d4e8 35396
8b095871
IC
35397 var kp = this.g.mul(k);
35398 if (kp.isInfinity())
35399 continue;
ebd8d4e8 35400
8b095871
IC
35401 var kpX = kp.getX();
35402 var r = kpX.umod(this.n);
35403 if (r.cmpn(0) === 0)
35404 continue;
ebd8d4e8 35405
8b095871
IC
35406 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
35407 s = s.umod(this.n);
35408 if (s.cmpn(0) === 0)
35409 continue;
ebd8d4e8 35410
8b095871
IC
35411 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
35412 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 35413
8b095871
IC
35414 // Use complement of `s`, if it is > `n / 2`
35415 if (options.canonical && s.cmp(this.nh) > 0) {
35416 s = this.n.sub(s);
35417 recoveryParam ^= 1;
35418 }
ebd8d4e8 35419
8b095871
IC
35420 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
35421 }
35422};
ebd8d4e8 35423
8b095871
IC
35424EC.prototype.verify = function verify(msg, signature, key, enc) {
35425 msg = this._truncateToN(new BN(msg, 16));
35426 key = this.keyFromPublic(key, enc);
35427 signature = new Signature(signature, 'hex');
ebd8d4e8 35428
8b095871
IC
35429 // Perform primitive values validation
35430 var r = signature.r;
35431 var s = signature.s;
35432 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
35433 return false;
35434 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
35435 return false;
ebd8d4e8 35436
8b095871
IC
35437 // Validate signature
35438 var sinv = s.invm(this.n);
35439 var u1 = sinv.mul(msg).umod(this.n);
35440 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 35441
8b095871
IC
35442 if (!this.curve._maxwellTrick) {
35443 var p = this.g.mulAdd(u1, key.getPublic(), u2);
35444 if (p.isInfinity())
35445 return false;
ebd8d4e8 35446
8b095871
IC
35447 return p.getX().umod(this.n).cmp(r) === 0;
35448 }
ab78acc6 35449
8b095871
IC
35450 // NOTE: Greg Maxwell's trick, inspired by:
35451 // https://git.io/vad3K
ebd8d4e8 35452
8b095871
IC
35453 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
35454 if (p.isInfinity())
35455 return false;
ab78acc6 35456
8b095871
IC
35457 // Compare `p.x` of Jacobian point with `r`,
35458 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
35459 // inverse of `p.z^2`
35460 return p.eqXToP(r);
35461};
ab78acc6 35462
8b095871
IC
35463EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
35464 assert((3 & j) === j, 'The recovery param is more than two bits');
35465 signature = new Signature(signature, enc);
ab78acc6 35466
8b095871
IC
35467 var n = this.n;
35468 var e = new BN(msg);
35469 var r = signature.r;
35470 var s = signature.s;
ab78acc6 35471
8b095871
IC
35472 // A set LSB signifies that the y-coordinate is odd
35473 var isYOdd = j & 1;
35474 var isSecondKey = j >> 1;
35475 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
35476 throw new Error('Unable to find sencond key candinate');
35477
35478 // 1.1. Let x = r + jn.
35479 if (isSecondKey)
35480 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
35481 else
35482 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 35483
8b095871
IC
35484 var rInv = signature.r.invm(n);
35485 var s1 = n.sub(e).mul(rInv).umod(n);
35486 var s2 = s.mul(rInv).umod(n);
ab78acc6 35487
8b095871
IC
35488 // 1.6.1 Compute Q = r^-1 (sR - eG)
35489 // Q = r^-1 (sR + -eG)
35490 return this.g.mulAdd(s1, r, s2);
35491};
ab78acc6 35492
8b095871
IC
35493EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
35494 signature = new Signature(signature, enc);
35495 if (signature.recoveryParam !== null)
35496 return signature.recoveryParam;
ab78acc6 35497
8b095871
IC
35498 for (var i = 0; i < 4; i++) {
35499 var Qprime;
35500 try {
35501 Qprime = this.recoverPubKey(e, signature, i);
35502 } catch (e) {
35503 continue;
ab78acc6 35504 }
ab78acc6 35505
8b095871
IC
35506 if (Qprime.eq(Q))
35507 return i;
35508 }
35509 throw new Error('Unable to find valid recovery factor');
35510};
ebd8d4e8 35511
8b095871
IC
35512},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
35513'use strict';
ebd8d4e8 35514
8b095871
IC
35515var BN = require('bn.js');
35516var elliptic = require('../../elliptic');
35517var utils = elliptic.utils;
35518var assert = utils.assert;
ebd8d4e8 35519
8b095871
IC
35520function KeyPair(ec, options) {
35521 this.ec = ec;
35522 this.priv = null;
35523 this.pub = null;
ebd8d4e8 35524
8b095871
IC
35525 // KeyPair(ec, { priv: ..., pub: ... })
35526 if (options.priv)
35527 this._importPrivate(options.priv, options.privEnc);
35528 if (options.pub)
35529 this._importPublic(options.pub, options.pubEnc);
35530}
35531module.exports = KeyPair;
ebd8d4e8 35532
8b095871
IC
35533KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
35534 if (pub instanceof KeyPair)
35535 return pub;
ebd8d4e8 35536
8b095871
IC
35537 return new KeyPair(ec, {
35538 pub: pub,
35539 pubEnc: enc
35540 });
35541};
ebd8d4e8 35542
8b095871
IC
35543KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
35544 if (priv instanceof KeyPair)
35545 return priv;
ebd8d4e8 35546
8b095871
IC
35547 return new KeyPair(ec, {
35548 priv: priv,
35549 privEnc: enc
35550 });
35551};
ebd8d4e8 35552
8b095871
IC
35553KeyPair.prototype.validate = function validate() {
35554 var pub = this.getPublic();
ebd8d4e8 35555
8b095871
IC
35556 if (pub.isInfinity())
35557 return { result: false, reason: 'Invalid public key' };
35558 if (!pub.validate())
35559 return { result: false, reason: 'Public key is not a point' };
35560 if (!pub.mul(this.ec.curve.n).isInfinity())
35561 return { result: false, reason: 'Public key * N != O' };
ab78acc6 35562
8b095871
IC
35563 return { result: true, reason: null };
35564};
ebd8d4e8 35565
8b095871
IC
35566KeyPair.prototype.getPublic = function getPublic(compact, enc) {
35567 // compact is optional argument
35568 if (typeof compact === 'string') {
35569 enc = compact;
35570 compact = null;
ebd8d4e8
IC
35571 }
35572
8b095871
IC
35573 if (!this.pub)
35574 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 35575
8b095871
IC
35576 if (!enc)
35577 return this.pub;
ebd8d4e8 35578
8b095871
IC
35579 return this.pub.encode(enc, compact);
35580};
ebd8d4e8 35581
8b095871
IC
35582KeyPair.prototype.getPrivate = function getPrivate(enc) {
35583 if (enc === 'hex')
35584 return this.priv.toString(16, 2);
35585 else
35586 return this.priv;
35587};
ab78acc6 35588
8b095871
IC
35589KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
35590 this.priv = new BN(key, enc || 16);
ab78acc6 35591
8b095871
IC
35592 // Ensure that the priv won't be bigger than n, otherwise we may fail
35593 // in fixed multiplication method
35594 this.priv = this.priv.umod(this.ec.curve.n);
35595};
ab78acc6 35596
8b095871
IC
35597KeyPair.prototype._importPublic = function _importPublic(key, enc) {
35598 if (key.x || key.y) {
35599 // Montgomery points only have an `x` coordinate.
35600 // Weierstrass/Edwards points on the other hand have both `x` and
35601 // `y` coordinates.
35602 if (this.ec.curve.type === 'mont') {
35603 assert(key.x, 'Need x coordinate');
35604 } else if (this.ec.curve.type === 'short' ||
35605 this.ec.curve.type === 'edwards') {
35606 assert(key.x && key.y, 'Need both x and y coordinate');
35607 }
35608 this.pub = this.ec.curve.point(key.x, key.y);
35609 return;
35610 }
35611 this.pub = this.ec.curve.decodePoint(key, enc);
35612};
ebd8d4e8 35613
8b095871
IC
35614// ECDH
35615KeyPair.prototype.derive = function derive(pub) {
35616 return pub.mul(this.priv).getX();
35617};
ebd8d4e8 35618
8b095871
IC
35619// ECDSA
35620KeyPair.prototype.sign = function sign(msg, enc, options) {
35621 return this.ec.sign(msg, this, enc, options);
35622};
ebd8d4e8 35623
8b095871
IC
35624KeyPair.prototype.verify = function verify(msg, signature) {
35625 return this.ec.verify(msg, signature, this);
35626};
ebd8d4e8 35627
8b095871
IC
35628KeyPair.prototype.inspect = function inspect() {
35629 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
35630 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
35631};
ebd8d4e8 35632
8b095871
IC
35633},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
35634'use strict';
ebd8d4e8 35635
8b095871 35636var BN = require('bn.js');
ebd8d4e8 35637
8b095871
IC
35638var elliptic = require('../../elliptic');
35639var utils = elliptic.utils;
35640var assert = utils.assert;
ebd8d4e8 35641
8b095871
IC
35642function Signature(options, enc) {
35643 if (options instanceof Signature)
35644 return options;
ebd8d4e8 35645
8b095871
IC
35646 if (this._importDER(options, enc))
35647 return;
ebd8d4e8 35648
8b095871
IC
35649 assert(options.r && options.s, 'Signature without r or s');
35650 this.r = new BN(options.r, 16);
35651 this.s = new BN(options.s, 16);
35652 if (options.recoveryParam === undefined)
35653 this.recoveryParam = null;
35654 else
35655 this.recoveryParam = options.recoveryParam;
35656}
35657module.exports = Signature;
35658
35659function Position() {
35660 this.place = 0;
35661}
35662
35663function getLength(buf, p) {
35664 var initial = buf[p.place++];
35665 if (!(initial & 0x80)) {
35666 return initial;
35667 }
35668 var octetLen = initial & 0xf;
35669 var val = 0;
35670 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
35671 val <<= 8;
35672 val |= buf[off];
35673 }
35674 p.place = off;
35675 return val;
35676}
35677
35678function rmPadding(buf) {
35679 var i = 0;
35680 var len = buf.length - 1;
35681 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
35682 i++;
35683 }
35684 if (i === 0) {
35685 return buf;
35686 }
35687 return buf.slice(i);
35688}
ebd8d4e8 35689
8b095871
IC
35690Signature.prototype._importDER = function _importDER(data, enc) {
35691 data = utils.toArray(data, enc);
35692 var p = new Position();
35693 if (data[p.place++] !== 0x30) {
35694 return false;
35695 }
35696 var len = getLength(data, p);
35697 if ((len + p.place) !== data.length) {
35698 return false;
35699 }
35700 if (data[p.place++] !== 0x02) {
35701 return false;
35702 }
35703 var rlen = getLength(data, p);
35704 var r = data.slice(p.place, rlen + p.place);
35705 p.place += rlen;
35706 if (data[p.place++] !== 0x02) {
35707 return false;
35708 }
35709 var slen = getLength(data, p);
35710 if (data.length !== slen + p.place) {
35711 return false;
35712 }
35713 var s = data.slice(p.place, slen + p.place);
35714 if (r[0] === 0 && (r[1] & 0x80)) {
35715 r = r.slice(1);
35716 }
35717 if (s[0] === 0 && (s[1] & 0x80)) {
35718 s = s.slice(1);
35719 }
ab78acc6 35720
8b095871
IC
35721 this.r = new BN(r);
35722 this.s = new BN(s);
35723 this.recoveryParam = null;
ebd8d4e8 35724
8b095871
IC
35725 return true;
35726};
ab78acc6 35727
8b095871
IC
35728function constructLength(arr, len) {
35729 if (len < 0x80) {
35730 arr.push(len);
35731 return;
35732 }
35733 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
35734 arr.push(octets | 0x80);
35735 while (--octets) {
35736 arr.push((len >>> (octets << 3)) & 0xff);
35737 }
35738 arr.push(len);
35739}
35740
35741Signature.prototype.toDER = function toDER(enc) {
35742 var r = this.r.toArray();
35743 var s = this.s.toArray();
35744
35745 // Pad values
35746 if (r[0] & 0x80)
35747 r = [ 0 ].concat(r);
35748 // Pad values
35749 if (s[0] & 0x80)
35750 s = [ 0 ].concat(s);
35751
35752 r = rmPadding(r);
35753 s = rmPadding(s);
35754
35755 while (!s[0] && !(s[1] & 0x80)) {
35756 s = s.slice(1);
35757 }
35758 var arr = [ 0x02 ];
35759 constructLength(arr, r.length);
35760 arr = arr.concat(r);
35761 arr.push(0x02);
35762 constructLength(arr, s.length);
35763 var backHalf = arr.concat(s);
35764 var res = [ 0x30 ];
35765 constructLength(res, backHalf.length);
35766 res = res.concat(backHalf);
35767 return utils.encode(res, enc);
35768};
ab78acc6 35769
8b095871
IC
35770},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
35771'use strict';
ebd8d4e8 35772
8b095871
IC
35773var hash = require('hash.js');
35774var elliptic = require('../../elliptic');
35775var utils = elliptic.utils;
35776var assert = utils.assert;
35777var parseBytes = utils.parseBytes;
35778var KeyPair = require('./key');
35779var Signature = require('./signature');
ab78acc6 35780
8b095871
IC
35781function EDDSA(curve) {
35782 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 35783
8b095871
IC
35784 if (!(this instanceof EDDSA))
35785 return new EDDSA(curve);
ab78acc6 35786
8b095871
IC
35787 var curve = elliptic.curves[curve].curve;
35788 this.curve = curve;
35789 this.g = curve.g;
35790 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 35791
8b095871
IC
35792 this.pointClass = curve.point().constructor;
35793 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
35794 this.hash = hash.sha512;
35795}
ebd8d4e8 35796
8b095871 35797module.exports = EDDSA;
ebd8d4e8 35798
8b095871
IC
35799/**
35800* @param {Array|String} message - message bytes
35801* @param {Array|String|KeyPair} secret - secret bytes or a keypair
35802* @returns {Signature} - signature
35803*/
35804EDDSA.prototype.sign = function sign(message, secret) {
35805 message = parseBytes(message);
35806 var key = this.keyFromSecret(secret);
35807 var r = this.hashInt(key.messagePrefix(), message);
35808 var R = this.g.mul(r);
35809 var Rencoded = this.encodePoint(R);
35810 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
35811 .mul(key.priv());
35812 var S = r.add(s_).umod(this.curve.n);
35813 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
35814};
ebd8d4e8 35815
8b095871
IC
35816/**
35817* @param {Array} message - message bytes
35818* @param {Array|String|Signature} sig - sig bytes
35819* @param {Array|String|Point|KeyPair} pub - public key
35820* @returns {Boolean} - true if public key matches sig of message
35821*/
35822EDDSA.prototype.verify = function verify(message, sig, pub) {
35823 message = parseBytes(message);
35824 sig = this.makeSignature(sig);
35825 var key = this.keyFromPublic(pub);
35826 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
35827 var SG = this.g.mul(sig.S());
35828 var RplusAh = sig.R().add(key.pub().mul(h));
35829 return RplusAh.eq(SG);
35830};
ebd8d4e8 35831
8b095871
IC
35832EDDSA.prototype.hashInt = function hashInt() {
35833 var hash = this.hash();
35834 for (var i = 0; i < arguments.length; i++)
35835 hash.update(arguments[i]);
35836 return utils.intFromLE(hash.digest()).umod(this.curve.n);
35837};
ebd8d4e8 35838
8b095871
IC
35839EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
35840 return KeyPair.fromPublic(this, pub);
35841};
ebd8d4e8 35842
8b095871
IC
35843EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
35844 return KeyPair.fromSecret(this, secret);
35845};
35846
35847EDDSA.prototype.makeSignature = function makeSignature(sig) {
35848 if (sig instanceof Signature)
35849 return sig;
35850 return new Signature(this, sig);
35851};
ebd8d4e8
IC
35852
35853/**
8b095871
IC
35854* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
35855*
35856* EDDSA defines methods for encoding and decoding points and integers. These are
35857* helper convenience methods, that pass along to utility functions implied
35858* parameters.
35859*
35860*/
35861EDDSA.prototype.encodePoint = function encodePoint(point) {
35862 var enc = point.getY().toArray('le', this.encodingLength);
35863 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
35864 return enc;
35865};
ebd8d4e8 35866
8b095871
IC
35867EDDSA.prototype.decodePoint = function decodePoint(bytes) {
35868 bytes = utils.parseBytes(bytes);
ebd8d4e8 35869
8b095871
IC
35870 var lastIx = bytes.length - 1;
35871 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
35872 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 35873
8b095871
IC
35874 var y = utils.intFromLE(normed);
35875 return this.curve.pointFromY(y, xIsOdd);
35876};
ebd8d4e8 35877
8b095871
IC
35878EDDSA.prototype.encodeInt = function encodeInt(num) {
35879 return num.toArray('le', this.encodingLength);
35880};
ebd8d4e8 35881
8b095871
IC
35882EDDSA.prototype.decodeInt = function decodeInt(bytes) {
35883 return utils.intFromLE(bytes);
35884};
ebd8d4e8 35885
8b095871
IC
35886EDDSA.prototype.isPoint = function isPoint(val) {
35887 return val instanceof this.pointClass;
35888};
ebd8d4e8 35889
8b095871
IC
35890},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
35891'use strict';
ebd8d4e8 35892
8b095871
IC
35893var elliptic = require('../../elliptic');
35894var utils = elliptic.utils;
35895var assert = utils.assert;
35896var parseBytes = utils.parseBytes;
35897var cachedProperty = utils.cachedProperty;
ebd8d4e8 35898
8b095871
IC
35899/**
35900* @param {EDDSA} eddsa - instance
35901* @param {Object} params - public/private key parameters
35902*
35903* @param {Array<Byte>} [params.secret] - secret seed bytes
35904* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
35905* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
35906*
35907*/
35908function KeyPair(eddsa, params) {
35909 this.eddsa = eddsa;
35910 this._secret = parseBytes(params.secret);
35911 if (eddsa.isPoint(params.pub))
35912 this._pub = params.pub;
35913 else
35914 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
35915}
35916
8b095871
IC
35917KeyPair.fromPublic = function fromPublic(eddsa, pub) {
35918 if (pub instanceof KeyPair)
35919 return pub;
35920 return new KeyPair(eddsa, { pub: pub });
35921};
ebd8d4e8 35922
8b095871
IC
35923KeyPair.fromSecret = function fromSecret(eddsa, secret) {
35924 if (secret instanceof KeyPair)
35925 return secret;
35926 return new KeyPair(eddsa, { secret: secret });
35927};
ebd8d4e8 35928
8b095871
IC
35929KeyPair.prototype.secret = function secret() {
35930 return this._secret;
35931};
ebd8d4e8 35932
8b095871
IC
35933cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
35934 return this.eddsa.encodePoint(this.pub());
35935});
ebd8d4e8 35936
8b095871
IC
35937cachedProperty(KeyPair, 'pub', function pub() {
35938 if (this._pubBytes)
35939 return this.eddsa.decodePoint(this._pubBytes);
35940 return this.eddsa.g.mul(this.priv());
35941});
ebd8d4e8 35942
8b095871
IC
35943cachedProperty(KeyPair, 'privBytes', function privBytes() {
35944 var eddsa = this.eddsa;
35945 var hash = this.hash();
35946 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 35947
8b095871
IC
35948 var a = hash.slice(0, eddsa.encodingLength);
35949 a[0] &= 248;
35950 a[lastIx] &= 127;
35951 a[lastIx] |= 64;
ebd8d4e8 35952
8b095871
IC
35953 return a;
35954});
ebd8d4e8 35955
8b095871
IC
35956cachedProperty(KeyPair, 'priv', function priv() {
35957 return this.eddsa.decodeInt(this.privBytes());
35958});
ebd8d4e8 35959
8b095871
IC
35960cachedProperty(KeyPair, 'hash', function hash() {
35961 return this.eddsa.hash().update(this.secret()).digest();
35962});
ebd8d4e8 35963
8b095871
IC
35964cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
35965 return this.hash().slice(this.eddsa.encodingLength);
35966});
ebd8d4e8 35967
8b095871
IC
35968KeyPair.prototype.sign = function sign(message) {
35969 assert(this._secret, 'KeyPair can only verify');
35970 return this.eddsa.sign(message, this);
35971};
ebd8d4e8 35972
8b095871
IC
35973KeyPair.prototype.verify = function verify(message, sig) {
35974 return this.eddsa.verify(message, sig, this);
35975};
ebd8d4e8 35976
8b095871
IC
35977KeyPair.prototype.getSecret = function getSecret(enc) {
35978 assert(this._secret, 'KeyPair is public only');
35979 return utils.encode(this.secret(), enc);
35980};
ebd8d4e8 35981
8b095871
IC
35982KeyPair.prototype.getPublic = function getPublic(enc) {
35983 return utils.encode(this.pubBytes(), enc);
35984};
ebd8d4e8 35985
8b095871 35986module.exports = KeyPair;
ebd8d4e8 35987
8b095871
IC
35988},{"../../elliptic":39}],51:[function(require,module,exports){
35989'use strict';
ebd8d4e8 35990
8b095871
IC
35991var BN = require('bn.js');
35992var elliptic = require('../../elliptic');
35993var utils = elliptic.utils;
35994var assert = utils.assert;
35995var cachedProperty = utils.cachedProperty;
35996var parseBytes = utils.parseBytes;
ebd8d4e8 35997
8b095871
IC
35998/**
35999* @param {EDDSA} eddsa - eddsa instance
36000* @param {Array<Bytes>|Object} sig -
36001* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
36002* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
36003* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
36004* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
36005*/
36006function Signature(eddsa, sig) {
36007 this.eddsa = eddsa;
ebd8d4e8 36008
8b095871
IC
36009 if (typeof sig !== 'object')
36010 sig = parseBytes(sig);
ebd8d4e8 36011
8b095871
IC
36012 if (Array.isArray(sig)) {
36013 sig = {
36014 R: sig.slice(0, eddsa.encodingLength),
36015 S: sig.slice(eddsa.encodingLength)
36016 };
ab78acc6 36017 }
ebd8d4e8 36018
8b095871 36019 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 36020
8b095871
IC
36021 if (eddsa.isPoint(sig.R))
36022 this._R = sig.R;
36023 if (sig.S instanceof BN)
36024 this._S = sig.S;
36025
36026 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
36027 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
36028}
36029
8b095871
IC
36030cachedProperty(Signature, 'S', function S() {
36031 return this.eddsa.decodeInt(this.Sencoded());
36032});
ab78acc6 36033
8b095871
IC
36034cachedProperty(Signature, 'R', function R() {
36035 return this.eddsa.decodePoint(this.Rencoded());
36036});
ebd8d4e8 36037
8b095871
IC
36038cachedProperty(Signature, 'Rencoded', function Rencoded() {
36039 return this.eddsa.encodePoint(this.R());
36040});
ebd8d4e8 36041
8b095871
IC
36042cachedProperty(Signature, 'Sencoded', function Sencoded() {
36043 return this.eddsa.encodeInt(this.S());
36044});
ebd8d4e8 36045
8b095871
IC
36046Signature.prototype.toBytes = function toBytes() {
36047 return this.Rencoded().concat(this.Sencoded());
36048};
ebd8d4e8 36049
8b095871
IC
36050Signature.prototype.toHex = function toHex() {
36051 return utils.encode(this.toBytes(), 'hex').toUpperCase();
36052};
ebd8d4e8 36053
8b095871 36054module.exports = Signature;
ebd8d4e8 36055
8b095871
IC
36056},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
36057'use strict';
ebd8d4e8 36058
8b095871
IC
36059var hash = require('hash.js');
36060var elliptic = require('../elliptic');
36061var utils = elliptic.utils;
36062var assert = utils.assert;
ebd8d4e8 36063
8b095871
IC
36064function HmacDRBG(options) {
36065 if (!(this instanceof HmacDRBG))
36066 return new HmacDRBG(options);
36067 this.hash = options.hash;
36068 this.predResist = !!options.predResist;
ab78acc6 36069
8b095871
IC
36070 this.outLen = this.hash.outSize;
36071 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 36072
8b095871
IC
36073 this.reseed = null;
36074 this.reseedInterval = null;
36075 this.K = null;
36076 this.V = null;
ebd8d4e8 36077
8b095871
IC
36078 var entropy = utils.toArray(options.entropy, options.entropyEnc);
36079 var nonce = utils.toArray(options.nonce, options.nonceEnc);
36080 var pers = utils.toArray(options.pers, options.persEnc);
36081 assert(entropy.length >= (this.minEntropy / 8),
36082 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
36083 this._init(entropy, nonce, pers);
ebd8d4e8 36084}
8b095871 36085module.exports = HmacDRBG;
ebd8d4e8 36086
8b095871
IC
36087HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
36088 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 36089
8b095871
IC
36090 this.K = new Array(this.outLen / 8);
36091 this.V = new Array(this.outLen / 8);
36092 for (var i = 0; i < this.V.length; i++) {
36093 this.K[i] = 0x00;
36094 this.V[i] = 0x01;
36095 }
ebd8d4e8 36096
8b095871
IC
36097 this._update(seed);
36098 this.reseed = 1;
36099 this.reseedInterval = 0x1000000000000; // 2^48
36100};
ebd8d4e8 36101
8b095871
IC
36102HmacDRBG.prototype._hmac = function hmac() {
36103 return new hash.hmac(this.hash, this.K);
36104};
ebd8d4e8 36105
8b095871
IC
36106HmacDRBG.prototype._update = function update(seed) {
36107 var kmac = this._hmac()
36108 .update(this.V)
36109 .update([ 0x00 ]);
36110 if (seed)
36111 kmac = kmac.update(seed);
36112 this.K = kmac.digest();
36113 this.V = this._hmac().update(this.V).digest();
36114 if (!seed)
36115 return;
36116
36117 this.K = this._hmac()
36118 .update(this.V)
36119 .update([ 0x01 ])
36120 .update(seed)
36121 .digest();
36122 this.V = this._hmac().update(this.V).digest();
36123};
36124
36125HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
36126 // Optional entropy enc
36127 if (typeof entropyEnc !== 'string') {
36128 addEnc = add;
36129 add = entropyEnc;
36130 entropyEnc = null;
ebd8d4e8 36131 }
ebd8d4e8 36132
8b095871
IC
36133 entropy = utils.toBuffer(entropy, entropyEnc);
36134 add = utils.toBuffer(add, addEnc);
ebd8d4e8 36135
8b095871
IC
36136 assert(entropy.length >= (this.minEntropy / 8),
36137 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 36138
8b095871
IC
36139 this._update(entropy.concat(add || []));
36140 this.reseed = 1;
36141};
ebd8d4e8 36142
8b095871
IC
36143HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
36144 if (this.reseed > this.reseedInterval)
36145 throw new Error('Reseed is required');
ebd8d4e8 36146
8b095871
IC
36147 // Optional encoding
36148 if (typeof enc !== 'string') {
36149 addEnc = add;
36150 add = enc;
36151 enc = null;
36152 }
ebd8d4e8 36153
8b095871
IC
36154 // Optional additional data
36155 if (add) {
36156 add = utils.toArray(add, addEnc);
36157 this._update(add);
ebd8d4e8
IC
36158 }
36159
8b095871
IC
36160 var temp = [];
36161 while (temp.length < len) {
36162 this.V = this._hmac().update(this.V).digest();
36163 temp = temp.concat(this.V);
ebd8d4e8
IC
36164 }
36165
8b095871
IC
36166 var res = temp.slice(0, len);
36167 this._update(add);
36168 this.reseed++;
36169 return utils.encode(res, enc);
36170};
ebd8d4e8 36171
8b095871
IC
36172},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
36173module.exports = {
36174 doubles: {
36175 step: 4,
36176 points: [
36177 [
36178 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
36179 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
36180 ],
36181 [
36182 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
36183 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
36184 ],
36185 [
36186 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
36187 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
36188 ],
36189 [
36190 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
36191 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
36192 ],
36193 [
36194 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
36195 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
36196 ],
36197 [
36198 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
36199 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
36200 ],
36201 [
36202 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
36203 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
36204 ],
36205 [
36206 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
36207 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
36208 ],
36209 [
36210 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
36211 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
36212 ],
36213 [
36214 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
36215 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
36216 ],
36217 [
36218 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
36219 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
36220 ],
36221 [
36222 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
36223 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
36224 ],
36225 [
36226 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
36227 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
36228 ],
36229 [
36230 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
36231 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
36232 ],
36233 [
36234 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
36235 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
36236 ],
36237 [
36238 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
36239 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
36240 ],
36241 [
36242 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
36243 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
36244 ],
36245 [
36246 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
36247 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
36248 ],
36249 [
36250 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
36251 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
36252 ],
36253 [
36254 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
36255 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
36256 ],
36257 [
36258 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
36259 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
36260 ],
36261 [
36262 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
36263 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
36264 ],
36265 [
36266 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
36267 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
36268 ],
36269 [
36270 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
36271 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
36272 ],
36273 [
36274 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
36275 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
36276 ],
36277 [
36278 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
36279 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
36280 ],
36281 [
36282 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
36283 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
36284 ],
36285 [
36286 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
36287 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
36288 ],
36289 [
36290 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
36291 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
36292 ],
36293 [
36294 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
36295 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
36296 ],
36297 [
36298 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
36299 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
36300 ],
36301 [
36302 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
36303 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
36304 ],
36305 [
36306 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
36307 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
36308 ],
36309 [
36310 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
36311 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
36312 ],
36313 [
36314 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
36315 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
36316 ],
36317 [
36318 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
36319 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
36320 ],
36321 [
36322 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
36323 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
36324 ],
36325 [
36326 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
36327 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
36328 ],
36329 [
36330 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
36331 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
36332 ],
36333 [
36334 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
36335 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
36336 ],
36337 [
36338 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
36339 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
36340 ],
36341 [
36342 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
36343 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
36344 ],
36345 [
36346 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
36347 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
36348 ],
36349 [
36350 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
36351 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
36352 ],
36353 [
36354 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
36355 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
36356 ],
36357 [
36358 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
36359 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
36360 ],
36361 [
36362 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
36363 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
36364 ],
36365 [
36366 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
36367 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
36368 ],
36369 [
36370 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
36371 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
36372 ],
36373 [
36374 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
36375 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
36376 ],
36377 [
36378 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
36379 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
36380 ],
36381 [
36382 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
36383 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
36384 ],
36385 [
36386 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
36387 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
36388 ],
36389 [
36390 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
36391 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
36392 ],
36393 [
36394 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
36395 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
36396 ],
36397 [
36398 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
36399 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
36400 ],
36401 [
36402 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
36403 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
36404 ],
36405 [
36406 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
36407 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
36408 ],
36409 [
36410 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
36411 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
36412 ],
36413 [
36414 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
36415 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
36416 ],
36417 [
36418 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
36419 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
36420 ],
36421 [
36422 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
36423 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
36424 ],
36425 [
36426 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
36427 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
36428 ],
36429 [
36430 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
36431 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
36432 ],
36433 [
36434 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
36435 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
36436 ]
36437 ]
36438 },
36439 naf: {
36440 wnd: 7,
36441 points: [
36442 [
36443 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
36444 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
36445 ],
36446 [
36447 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
36448 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
36449 ],
36450 [
36451 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
36452 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
36453 ],
36454 [
36455 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
36456 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
36457 ],
36458 [
36459 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
36460 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
36461 ],
36462 [
36463 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
36464 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
36465 ],
36466 [
36467 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
36468 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
36469 ],
36470 [
36471 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
36472 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
36473 ],
36474 [
36475 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
36476 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
36477 ],
36478 [
36479 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
36480 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
36481 ],
36482 [
36483 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
36484 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
36485 ],
36486 [
36487 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
36488 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
36489 ],
36490 [
36491 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
36492 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
36493 ],
36494 [
36495 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
36496 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
36497 ],
36498 [
36499 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
36500 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
36501 ],
36502 [
36503 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
36504 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
36505 ],
36506 [
36507 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
36508 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
36509 ],
36510 [
36511 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
36512 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
36513 ],
36514 [
36515 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
36516 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
36517 ],
36518 [
36519 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
36520 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
36521 ],
36522 [
36523 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
36524 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
36525 ],
36526 [
36527 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
36528 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
36529 ],
36530 [
36531 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
36532 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
36533 ],
36534 [
36535 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
36536 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
36537 ],
36538 [
36539 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
36540 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
36541 ],
36542 [
36543 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
36544 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
36545 ],
36546 [
36547 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
36548 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
36549 ],
36550 [
36551 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
36552 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
36553 ],
36554 [
36555 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
36556 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
36557 ],
36558 [
36559 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
36560 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
36561 ],
36562 [
36563 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
36564 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
36565 ],
36566 [
36567 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
36568 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
36569 ],
36570 [
36571 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
36572 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
36573 ],
36574 [
36575 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
36576 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
36577 ],
36578 [
36579 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
36580 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
36581 ],
36582 [
36583 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
36584 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
36585 ],
36586 [
36587 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
36588 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
36589 ],
36590 [
36591 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
36592 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
36593 ],
36594 [
36595 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
36596 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
36597 ],
36598 [
36599 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
36600 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
36601 ],
36602 [
36603 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
36604 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
36605 ],
36606 [
36607 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
36608 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
36609 ],
36610 [
36611 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
36612 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
36613 ],
36614 [
36615 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
36616 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
36617 ],
36618 [
36619 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
36620 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
36621 ],
36622 [
36623 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
36624 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
36625 ],
36626 [
36627 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
36628 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
36629 ],
36630 [
36631 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
36632 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
36633 ],
36634 [
36635 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
36636 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
36637 ],
36638 [
36639 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
36640 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
36641 ],
36642 [
36643 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
36644 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
36645 ],
36646 [
36647 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
36648 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
36649 ],
36650 [
36651 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
36652 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
36653 ],
36654 [
36655 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
36656 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
36657 ],
36658 [
36659 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
36660 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
36661 ],
36662 [
36663 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
36664 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
36665 ],
36666 [
36667 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
36668 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
36669 ],
36670 [
36671 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
36672 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
36673 ],
36674 [
36675 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
36676 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
36677 ],
36678 [
36679 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
36680 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
36681 ],
36682 [
36683 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
36684 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
36685 ],
36686 [
36687 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
36688 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
36689 ],
36690 [
36691 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
36692 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
36693 ],
36694 [
36695 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
36696 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
36697 ],
36698 [
36699 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
36700 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
36701 ],
36702 [
36703 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
36704 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
36705 ],
36706 [
36707 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
36708 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
36709 ],
36710 [
36711 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
36712 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
36713 ],
36714 [
36715 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
36716 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
36717 ],
36718 [
36719 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
36720 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
36721 ],
36722 [
36723 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
36724 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
36725 ],
36726 [
36727 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
36728 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
36729 ],
36730 [
36731 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
36732 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
36733 ],
36734 [
36735 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
36736 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
36737 ],
36738 [
36739 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
36740 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
36741 ],
36742 [
36743 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
36744 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
36745 ],
36746 [
36747 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
36748 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
36749 ],
36750 [
36751 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
36752 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
36753 ],
36754 [
36755 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
36756 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
36757 ],
36758 [
36759 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
36760 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
36761 ],
36762 [
36763 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
36764 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
36765 ],
36766 [
36767 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
36768 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
36769 ],
36770 [
36771 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
36772 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
36773 ],
36774 [
36775 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
36776 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
36777 ],
36778 [
36779 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
36780 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
36781 ],
36782 [
36783 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
36784 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
36785 ],
36786 [
36787 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
36788 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
36789 ],
36790 [
36791 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
36792 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
36793 ],
36794 [
36795 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
36796 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
36797 ],
36798 [
36799 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
36800 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
36801 ],
36802 [
36803 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
36804 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
36805 ],
36806 [
36807 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
36808 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
36809 ],
36810 [
36811 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
36812 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
36813 ],
36814 [
36815 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
36816 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
36817 ],
36818 [
36819 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
36820 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
36821 ],
36822 [
36823 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
36824 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
36825 ],
36826 [
36827 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
36828 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
36829 ],
36830 [
36831 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
36832 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
36833 ],
36834 [
36835 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
36836 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
36837 ],
36838 [
36839 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
36840 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
36841 ],
36842 [
36843 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
36844 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
36845 ],
36846 [
36847 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
36848 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
36849 ],
36850 [
36851 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
36852 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
36853 ],
36854 [
36855 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
36856 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
36857 ],
36858 [
36859 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
36860 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
36861 ],
36862 [
36863 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
36864 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
36865 ],
36866 [
36867 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
36868 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
36869 ],
36870 [
36871 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
36872 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
36873 ],
36874 [
36875 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
36876 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
36877 ],
36878 [
36879 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
36880 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
36881 ],
36882 [
36883 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
36884 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
36885 ],
36886 [
36887 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
36888 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
36889 ],
36890 [
36891 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
36892 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
36893 ],
36894 [
36895 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
36896 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
36897 ],
36898 [
36899 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
36900 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
36901 ],
36902 [
36903 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
36904 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
36905 ],
36906 [
36907 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
36908 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
36909 ],
36910 [
36911 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
36912 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
36913 ],
36914 [
36915 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
36916 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
36917 ],
36918 [
36919 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
36920 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
36921 ],
36922 [
36923 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
36924 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
36925 ],
36926 [
36927 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
36928 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
36929 ],
36930 [
36931 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
36932 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
36933 ],
36934 [
36935 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
36936 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
36937 ],
36938 [
36939 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
36940 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
36941 ],
36942 [
36943 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
36944 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
36945 ],
36946 [
36947 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
36948 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
36949 ]
36950 ]
36951 }
36952};
ebd8d4e8 36953
8b095871
IC
36954},{}],54:[function(require,module,exports){
36955'use strict';
ebd8d4e8 36956
8b095871
IC
36957var utils = exports;
36958var BN = require('bn.js');
ebd8d4e8 36959
8b095871
IC
36960utils.assert = function assert(val, msg) {
36961 if (!val)
36962 throw new Error(msg || 'Assertion failed');
36963};
ebd8d4e8 36964
8b095871
IC
36965function toArray(msg, enc) {
36966 if (Array.isArray(msg))
36967 return msg.slice();
36968 if (!msg)
36969 return [];
36970 var res = [];
36971 if (typeof msg !== 'string') {
36972 for (var i = 0; i < msg.length; i++)
36973 res[i] = msg[i] | 0;
36974 return res;
36975 }
36976 if (!enc) {
36977 for (var i = 0; i < msg.length; i++) {
36978 var c = msg.charCodeAt(i);
36979 var hi = c >> 8;
36980 var lo = c & 0xff;
36981 if (hi)
36982 res.push(hi, lo);
36983 else
36984 res.push(lo);
36985 }
36986 } else if (enc === 'hex') {
36987 msg = msg.replace(/[^a-z0-9]+/ig, '');
36988 if (msg.length % 2 !== 0)
36989 msg = '0' + msg;
36990 for (var i = 0; i < msg.length; i += 2)
36991 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 36992 }
8b095871 36993 return res;
ebd8d4e8 36994}
8b095871 36995utils.toArray = toArray;
ebd8d4e8 36996
8b095871
IC
36997function zero2(word) {
36998 if (word.length === 1)
36999 return '0' + word;
37000 else
37001 return word;
37002}
37003utils.zero2 = zero2;
ab78acc6 37004
8b095871
IC
37005function toHex(msg) {
37006 var res = '';
37007 for (var i = 0; i < msg.length; i++)
37008 res += zero2(msg[i].toString(16));
37009 return res;
37010}
37011utils.toHex = toHex;
ebd8d4e8 37012
8b095871
IC
37013utils.encode = function encode(arr, enc) {
37014 if (enc === 'hex')
37015 return toHex(arr);
37016 else
37017 return arr;
37018};
ebd8d4e8 37019
8b095871
IC
37020// Represent num in a w-NAF form
37021function getNAF(num, w) {
37022 var naf = [];
37023 var ws = 1 << (w + 1);
37024 var k = num.clone();
37025 while (k.cmpn(1) >= 0) {
37026 var z;
37027 if (k.isOdd()) {
37028 var mod = k.andln(ws - 1);
37029 if (mod > (ws >> 1) - 1)
37030 z = (ws >> 1) - mod;
37031 else
37032 z = mod;
37033 k.isubn(z);
37034 } else {
37035 z = 0;
37036 }
37037 naf.push(z);
37038
37039 // Optimization, shift by word if possible
37040 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
37041 for (var i = 1; i < shift; i++)
37042 naf.push(0);
37043 k.iushrn(shift);
37044 }
37045
37046 return naf;
37047}
37048utils.getNAF = getNAF;
37049
37050// Represent k1, k2 in a Joint Sparse Form
37051function getJSF(k1, k2) {
37052 var jsf = [
37053 [],
37054 []
37055 ];
37056
37057 k1 = k1.clone();
37058 k2 = k2.clone();
37059 var d1 = 0;
37060 var d2 = 0;
37061 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
37062
37063 // First phase
37064 var m14 = (k1.andln(3) + d1) & 3;
37065 var m24 = (k2.andln(3) + d2) & 3;
37066 if (m14 === 3)
37067 m14 = -1;
37068 if (m24 === 3)
37069 m24 = -1;
37070 var u1;
37071 if ((m14 & 1) === 0) {
37072 u1 = 0;
37073 } else {
37074 var m8 = (k1.andln(7) + d1) & 7;
37075 if ((m8 === 3 || m8 === 5) && m24 === 2)
37076 u1 = -m14;
37077 else
37078 u1 = m14;
37079 }
37080 jsf[0].push(u1);
ebd8d4e8 37081
8b095871
IC
37082 var u2;
37083 if ((m24 & 1) === 0) {
37084 u2 = 0;
37085 } else {
37086 var m8 = (k2.andln(7) + d2) & 7;
37087 if ((m8 === 3 || m8 === 5) && m14 === 2)
37088 u2 = -m24;
37089 else
37090 u2 = m24;
37091 }
37092 jsf[1].push(u2);
ebd8d4e8 37093
8b095871
IC
37094 // Second phase
37095 if (2 * d1 === u1 + 1)
37096 d1 = 1 - d1;
37097 if (2 * d2 === u2 + 1)
37098 d2 = 1 - d2;
37099 k1.iushrn(1);
37100 k2.iushrn(1);
37101 }
ebd8d4e8 37102
8b095871
IC
37103 return jsf;
37104}
37105utils.getJSF = getJSF;
ab78acc6 37106
8b095871
IC
37107function cachedProperty(obj, name, computer) {
37108 var key = '_' + name;
37109 obj.prototype[name] = function cachedProperty() {
37110 return this[key] !== undefined ? this[key] :
37111 this[key] = computer.call(this);
37112 };
37113}
37114utils.cachedProperty = cachedProperty;
ebd8d4e8 37115
8b095871
IC
37116function parseBytes(bytes) {
37117 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
37118 bytes;
37119}
37120utils.parseBytes = parseBytes;
ebd8d4e8 37121
8b095871
IC
37122function intFromLE(bytes) {
37123 return new BN(bytes, 'hex', 'le');
37124}
37125utils.intFromLE = intFromLE;
ebd8d4e8 37126
8b095871
IC
37127
37128},{"bn.js":33}],55:[function(require,module,exports){
37129module.exports={
37130 "_args": [
37131 [
37132 {
37133 "raw": "elliptic@^6.2.3",
37134 "scope": null,
37135 "escapedName": "elliptic",
37136 "name": "elliptic",
37137 "rawSpec": "^6.2.3",
37138 "spec": ">=6.2.3 <7.0.0",
37139 "type": "range"
37140 },
37141 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
37142 ]
37143 ],
37144 "_from": "elliptic@>=6.2.3 <7.0.0",
37145 "_id": "elliptic@6.3.3",
37146 "_inCache": true,
37147 "_location": "/elliptic",
37148 "_nodeVersion": "7.0.0",
37149 "_npmOperationalInternal": {
37150 "host": "packages-18-east.internal.npmjs.com",
37151 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
37152 },
37153 "_npmUser": {
37154 "name": "indutny",
37155 "email": "fedor@indutny.com"
37156 },
37157 "_npmVersion": "3.10.8",
37158 "_phantomChildren": {},
37159 "_requested": {
37160 "raw": "elliptic@^6.2.3",
37161 "scope": null,
37162 "escapedName": "elliptic",
37163 "name": "elliptic",
37164 "rawSpec": "^6.2.3",
37165 "spec": ">=6.2.3 <7.0.0",
37166 "type": "range"
37167 },
37168 "_requiredBy": [
37169 "/browserify-sign",
37170 "/create-ecdh",
37171 "/secp256k1"
37172 ],
37173 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
37174 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37175 "_shrinkwrap": null,
37176 "_spec": "elliptic@^6.2.3",
37177 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
37178 "author": {
37179 "name": "Fedor Indutny",
37180 "email": "fedor@indutny.com"
37181 },
37182 "bugs": {
37183 "url": "https://github.com/indutny/elliptic/issues"
37184 },
37185 "dependencies": {
37186 "bn.js": "^4.4.0",
37187 "brorand": "^1.0.1",
37188 "hash.js": "^1.0.0",
37189 "inherits": "^2.0.1"
37190 },
37191 "description": "EC cryptography",
37192 "devDependencies": {
37193 "brfs": "^1.4.3",
37194 "coveralls": "^2.11.3",
37195 "grunt": "^0.4.5",
37196 "grunt-browserify": "^5.0.0",
37197 "grunt-cli": "^1.2.0",
37198 "grunt-contrib-connect": "^1.0.0",
37199 "grunt-contrib-copy": "^1.0.0",
37200 "grunt-contrib-uglify": "^1.0.1",
37201 "grunt-mocha-istanbul": "^3.0.1",
37202 "grunt-saucelabs": "^8.6.2",
37203 "istanbul": "^0.4.2",
37204 "jscs": "^2.9.0",
37205 "jshint": "^2.6.0",
37206 "mocha": "^2.1.0"
37207 },
37208 "directories": {},
37209 "dist": {
37210 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
37211 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
37212 },
37213 "files": [
37214 "lib"
37215 ],
37216 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
37217 "homepage": "https://github.com/indutny/elliptic",
37218 "keywords": [
37219 "EC",
37220 "Elliptic",
37221 "curve",
37222 "Cryptography"
37223 ],
37224 "license": "MIT",
37225 "main": "lib/elliptic.js",
37226 "maintainers": [
37227 {
37228 "name": "indutny",
37229 "email": "fedor@indutny.com"
37230 }
37231 ],
37232 "name": "elliptic",
37233 "optionalDependencies": {},
37234 "readme": "ERROR: No README data found!",
37235 "repository": {
37236 "type": "git",
37237 "url": "git+ssh://git@github.com/indutny/elliptic.git"
37238 },
37239 "scripts": {
37240 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37241 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
37242 "lint": "npm run jscs && npm run jshint",
37243 "test": "npm run lint && npm run unit",
37244 "unit": "istanbul test _mocha --reporter=spec test/index.js",
37245 "version": "grunt dist && git add dist/"
37246 },
37247 "version": "6.3.3"
ebd8d4e8
IC
37248}
37249
8b095871
IC
37250},{}],56:[function(require,module,exports){
37251(function (Buffer){
37252'use strict';
ab78acc6 37253
8b095871
IC
37254var isHexPrefixed = require('is-hex-prefixed');
37255var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 37256
8b095871
IC
37257/**
37258 * Pads a `String` to have an even length
37259 * @param {String} value
37260 * @return {String} output
37261 */
37262function padToEven(value) {
37263 var a = value; // eslint-disable-line
37264
37265 if (typeof a !== 'string') {
37266 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
37267 }
37268
37269 if (a.length % 2) {
37270 a = '0' + a;
37271 }
37272
37273 return a;
ebd8d4e8
IC
37274}
37275
8b095871
IC
37276/**
37277 * Converts a `Number` into a hex `String`
37278 * @param {Number} i
37279 * @return {String}
37280 */
37281function intToHex(i) {
37282 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 37283
8b095871
IC
37284 return '0x' + padToEven(hex);
37285}
ab78acc6 37286
8b095871
IC
37287/**
37288 * Converts an `Number` to a `Buffer`
37289 * @param {Number} i
37290 * @return {Buffer}
37291 */
37292function intToBuffer(i) {
37293 var hex = intToHex(i);
ab78acc6 37294
8b095871
IC
37295 return new Buffer(hex.slice(2), 'hex');
37296}
ebd8d4e8 37297
8b095871
IC
37298/**
37299 * Get the binary size of a string
37300 * @param {String} str
37301 * @return {Number}
37302 */
37303function getBinarySize(str) {
37304 if (typeof str !== 'string') {
37305 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
37306 }
ebd8d4e8 37307
8b095871
IC
37308 return Buffer.byteLength(str, 'utf8');
37309}
37310
37311/**
37312 * Returns TRUE if the first specified array contains all elements
37313 * from the second one. FALSE otherwise.
37314 *
37315 * @param {array} superset
37316 * @param {array} subset
37317 *
37318 * @returns {boolean}
37319 */
37320function arrayContainsArray(superset, subset, some) {
37321 if (Array.isArray(superset) !== true) {
37322 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
37323 }
37324 if (Array.isArray(subset) !== true) {
37325 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
37326 }
37327
8b095871
IC
37328 return subset[Boolean(some) && 'some' || 'every'](function (value) {
37329 return superset.indexOf(value) >= 0;
37330 });
ebd8d4e8
IC
37331}
37332
8b095871
IC
37333/**
37334 * Should be called to get utf8 from it's hex representation
37335 *
37336 * @method toUtf8
37337 * @param {String} string in hex
37338 * @returns {String} ascii string representation of hex value
37339 */
37340function toUtf8(hex) {
37341 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 37342
8b095871
IC
37343 return bufferValue.toString('utf8');
37344}
ab78acc6 37345
8b095871
IC
37346/**
37347 * Should be called to get ascii from it's hex representation
37348 *
37349 * @method toAscii
37350 * @param {String} string in hex
37351 * @returns {String} ascii string representation of hex value
37352 */
37353function toAscii(hex) {
37354 var str = ''; // eslint-disable-line
37355 var i = 0,
37356 l = hex.length; // eslint-disable-line
ebd8d4e8 37357
8b095871
IC
37358 if (hex.substring(0, 2) === '0x') {
37359 i = 2;
37360 }
ebd8d4e8 37361
8b095871
IC
37362 for (; i < l; i += 2) {
37363 var code = parseInt(hex.substr(i, 2), 16);
37364 str += String.fromCharCode(code);
ebd8d4e8 37365 }
8b095871
IC
37366
37367 return str;
ebd8d4e8
IC
37368}
37369
8b095871
IC
37370/**
37371 * Should be called to get hex representation (prefixed by 0x) of utf8 string
37372 *
37373 * @method fromUtf8
37374 * @param {String} string
37375 * @param {Number} optional padding
37376 * @returns {String} hex representation of input string
37377 */
37378function fromUtf8(stringValue) {
37379 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 37380
8b095871
IC
37381 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
37382}
ab78acc6 37383
8b095871
IC
37384/**
37385 * Should be called to get hex representation (prefixed by 0x) of ascii string
37386 *
37387 * @method fromAscii
37388 * @param {String} string
37389 * @param {Number} optional padding
37390 * @returns {String} hex representation of input string
37391 */
37392function fromAscii(stringValue) {
37393 var hex = ''; // eslint-disable-line
37394 for (var i = 0; i < stringValue.length; i++) {
37395 // eslint-disable-line
37396 var code = stringValue.charCodeAt(i);
37397 var n = code.toString(16);
37398 hex += n.length < 2 ? '0' + n : n;
37399 }
ab78acc6 37400
8b095871
IC
37401 return '0x' + hex;
37402}
ebd8d4e8 37403
8b095871
IC
37404/**
37405 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
37406 *
37407 * @method getKeys get specific key from inner object array of objects
37408 * @param {String} params
37409 * @param {String} key
37410 * @param {Boolean} allowEmpty
37411 * @returns {Array} output just a simple array of output keys
37412 */
37413function getKeys(params, key, allowEmpty) {
37414 if (!Array.isArray(params)) {
37415 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
37416 }
37417 if (typeof key !== 'string') {
37418 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
37419 }
ebd8d4e8 37420
8b095871 37421 var result = []; // eslint-disable-line
ebd8d4e8 37422
8b095871
IC
37423 for (var i = 0; i < params.length; i++) {
37424 // eslint-disable-line
37425 var value = params[i][key]; // eslint-disable-line
37426 if (allowEmpty && !value) {
37427 value = '';
37428 } else if (typeof value !== 'string') {
37429 throw new Error('invalid abi');
37430 }
37431 result.push(value);
37432 }
ebd8d4e8 37433
8b095871 37434 return result;
ebd8d4e8
IC
37435}
37436
8b095871
IC
37437/**
37438 * Is the string a hex string.
37439 *
37440 * @method check if string is hex string of specific length
37441 * @param {String} value
37442 * @param {Number} length
37443 * @returns {Boolean} output the string is a hex string
37444 */
37445function isHexString(value, length) {
37446 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
37447 return false;
ab78acc6
IC
37448 }
37449
8b095871
IC
37450 if (length && value.length !== 2 + 2 * length) {
37451 return false;
37452 }
ebd8d4e8 37453
8b095871
IC
37454 return true;
37455}
ab78acc6 37456
8b095871
IC
37457module.exports = {
37458 arrayContainsArray: arrayContainsArray,
37459 intToBuffer: intToBuffer,
37460 getBinarySize: getBinarySize,
37461 isHexPrefixed: isHexPrefixed,
37462 stripHexPrefix: stripHexPrefix,
37463 padToEven: padToEven,
37464 intToHex: intToHex,
37465 fromAscii: fromAscii,
37466 fromUtf8: fromUtf8,
37467 toAscii: toAscii,
37468 toUtf8: toUtf8,
37469 getKeys: getKeys,
37470 isHexString: isHexString
37471};
37472}).call(this,require("buffer").Buffer)
37473},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
37474var hash = exports;
37475
37476hash.utils = require('./hash/utils');
37477hash.common = require('./hash/common');
37478hash.sha = require('./hash/sha');
37479hash.ripemd = require('./hash/ripemd');
37480hash.hmac = require('./hash/hmac');
37481
37482// Proxy hash functions to the main object
37483hash.sha1 = hash.sha.sha1;
37484hash.sha256 = hash.sha.sha256;
37485hash.sha224 = hash.sha.sha224;
37486hash.sha384 = hash.sha.sha384;
37487hash.sha512 = hash.sha.sha512;
37488hash.ripemd160 = hash.ripemd.ripemd160;
37489
37490},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
37491var hash = require('../hash');
37492var utils = hash.utils;
37493var assert = utils.assert;
37494
37495function BlockHash() {
37496 this.pending = null;
37497 this.pendingTotal = 0;
37498 this.blockSize = this.constructor.blockSize;
37499 this.outSize = this.constructor.outSize;
37500 this.hmacStrength = this.constructor.hmacStrength;
37501 this.padLength = this.constructor.padLength / 8;
37502 this.endian = 'big';
37503
37504 this._delta8 = this.blockSize / 8;
37505 this._delta32 = this.blockSize / 32;
37506}
37507exports.BlockHash = BlockHash;
37508
37509BlockHash.prototype.update = function update(msg, enc) {
37510 // Convert message to array, pad it, and join into 32bit blocks
37511 msg = utils.toArray(msg, enc);
37512 if (!this.pending)
37513 this.pending = msg;
37514 else
37515 this.pending = this.pending.concat(msg);
37516 this.pendingTotal += msg.length;
ab78acc6 37517
8b095871
IC
37518 // Enough data, try updating
37519 if (this.pending.length >= this._delta8) {
37520 msg = this.pending;
ebd8d4e8 37521
8b095871
IC
37522 // Process pending data in blocks
37523 var r = msg.length % this._delta8;
37524 this.pending = msg.slice(msg.length - r, msg.length);
37525 if (this.pending.length === 0)
37526 this.pending = null;
ebd8d4e8 37527
8b095871
IC
37528 msg = utils.join32(msg, 0, msg.length - r, this.endian);
37529 for (var i = 0; i < msg.length; i += this._delta32)
37530 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
37531 }
37532
8b095871
IC
37533 return this;
37534};
ebd8d4e8 37535
8b095871
IC
37536BlockHash.prototype.digest = function digest(enc) {
37537 this.update(this._pad());
37538 assert(this.pending === null);
ebd8d4e8 37539
8b095871
IC
37540 return this._digest(enc);
37541};
ebd8d4e8 37542
8b095871
IC
37543BlockHash.prototype._pad = function pad() {
37544 var len = this.pendingTotal;
37545 var bytes = this._delta8;
37546 var k = bytes - ((len + this.padLength) % bytes);
37547 var res = new Array(k + this.padLength);
37548 res[0] = 0x80;
37549 for (var i = 1; i < k; i++)
37550 res[i] = 0;
37551
37552 // Append length
37553 len <<= 3;
37554 if (this.endian === 'big') {
37555 for (var t = 8; t < this.padLength; t++)
37556 res[i++] = 0;
37557
37558 res[i++] = 0;
37559 res[i++] = 0;
37560 res[i++] = 0;
37561 res[i++] = 0;
37562 res[i++] = (len >>> 24) & 0xff;
37563 res[i++] = (len >>> 16) & 0xff;
37564 res[i++] = (len >>> 8) & 0xff;
37565 res[i++] = len & 0xff;
ebd8d4e8 37566 } else {
8b095871
IC
37567 res[i++] = len & 0xff;
37568 res[i++] = (len >>> 8) & 0xff;
37569 res[i++] = (len >>> 16) & 0xff;
37570 res[i++] = (len >>> 24) & 0xff;
37571 res[i++] = 0;
37572 res[i++] = 0;
37573 res[i++] = 0;
37574 res[i++] = 0;
ebd8d4e8 37575
8b095871
IC
37576 for (var t = 8; t < this.padLength; t++)
37577 res[i++] = 0;
ebd8d4e8
IC
37578 }
37579
8b095871
IC
37580 return res;
37581};
ebd8d4e8 37582
8b095871
IC
37583},{"../hash":57}],59:[function(require,module,exports){
37584var hmac = exports;
ebd8d4e8 37585
8b095871
IC
37586var hash = require('../hash');
37587var utils = hash.utils;
37588var assert = utils.assert;
ebd8d4e8 37589
8b095871
IC
37590function Hmac(hash, key, enc) {
37591 if (!(this instanceof Hmac))
37592 return new Hmac(hash, key, enc);
37593 this.Hash = hash;
37594 this.blockSize = hash.blockSize / 8;
37595 this.outSize = hash.outSize / 8;
37596 this.inner = null;
37597 this.outer = null;
ebd8d4e8 37598
8b095871 37599 this._init(utils.toArray(key, enc));
ebd8d4e8 37600}
8b095871 37601module.exports = Hmac;
ebd8d4e8 37602
8b095871
IC
37603Hmac.prototype._init = function init(key) {
37604 // Shorten key, if needed
37605 if (key.length > this.blockSize)
37606 key = new this.Hash().update(key).digest();
37607 assert(key.length <= this.blockSize);
ebd8d4e8 37608
8b095871
IC
37609 // Add padding to key
37610 for (var i = key.length; i < this.blockSize; i++)
37611 key.push(0);
ab78acc6 37612
8b095871
IC
37613 for (var i = 0; i < key.length; i++)
37614 key[i] ^= 0x36;
37615 this.inner = new this.Hash().update(key);
ab78acc6 37616
8b095871
IC
37617 // 0x36 ^ 0x5c = 0x6a
37618 for (var i = 0; i < key.length; i++)
37619 key[i] ^= 0x6a;
37620 this.outer = new this.Hash().update(key);
37621};
ebd8d4e8 37622
8b095871
IC
37623Hmac.prototype.update = function update(msg, enc) {
37624 this.inner.update(msg, enc);
37625 return this;
37626};
ab78acc6 37627
8b095871
IC
37628Hmac.prototype.digest = function digest(enc) {
37629 this.outer.update(this.inner.digest());
37630 return this.outer.digest(enc);
37631};
ab78acc6 37632
8b095871
IC
37633},{"../hash":57}],60:[function(require,module,exports){
37634var hash = require('../hash');
37635var utils = hash.utils;
37636
37637var rotl32 = utils.rotl32;
37638var sum32 = utils.sum32;
37639var sum32_3 = utils.sum32_3;
37640var sum32_4 = utils.sum32_4;
37641var BlockHash = hash.common.BlockHash;
37642
37643function RIPEMD160() {
37644 if (!(this instanceof RIPEMD160))
37645 return new RIPEMD160();
37646
37647 BlockHash.call(this);
37648
37649 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
37650 this.endian = 'little';
37651}
37652utils.inherits(RIPEMD160, BlockHash);
37653exports.ripemd160 = RIPEMD160;
37654
37655RIPEMD160.blockSize = 512;
37656RIPEMD160.outSize = 160;
37657RIPEMD160.hmacStrength = 192;
37658RIPEMD160.padLength = 64;
37659
37660RIPEMD160.prototype._update = function update(msg, start) {
37661 var A = this.h[0];
37662 var B = this.h[1];
37663 var C = this.h[2];
37664 var D = this.h[3];
37665 var E = this.h[4];
37666 var Ah = A;
37667 var Bh = B;
37668 var Ch = C;
37669 var Dh = D;
37670 var Eh = E;
37671 for (var j = 0; j < 80; j++) {
37672 var T = sum32(
37673 rotl32(
37674 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
37675 s[j]),
37676 E);
37677 A = E;
37678 E = D;
37679 D = rotl32(C, 10);
37680 C = B;
37681 B = T;
37682 T = sum32(
37683 rotl32(
37684 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
37685 sh[j]),
37686 Eh);
37687 Ah = Eh;
37688 Eh = Dh;
37689 Dh = rotl32(Ch, 10);
37690 Ch = Bh;
37691 Bh = T;
37692 }
37693 T = sum32_3(this.h[1], C, Dh);
37694 this.h[1] = sum32_3(this.h[2], D, Eh);
37695 this.h[2] = sum32_3(this.h[3], E, Ah);
37696 this.h[3] = sum32_3(this.h[4], A, Bh);
37697 this.h[4] = sum32_3(this.h[0], B, Ch);
37698 this.h[0] = T;
37699};
ebd8d4e8 37700
8b095871
IC
37701RIPEMD160.prototype._digest = function digest(enc) {
37702 if (enc === 'hex')
37703 return utils.toHex32(this.h, 'little');
37704 else
37705 return utils.split32(this.h, 'little');
37706};
ebd8d4e8 37707
8b095871
IC
37708function f(j, x, y, z) {
37709 if (j <= 15)
37710 return x ^ y ^ z;
37711 else if (j <= 31)
37712 return (x & y) | ((~x) & z);
37713 else if (j <= 47)
37714 return (x | (~y)) ^ z;
37715 else if (j <= 63)
37716 return (x & z) | (y & (~z));
37717 else
37718 return x ^ (y | (~z));
37719}
37720
37721function K(j) {
37722 if (j <= 15)
37723 return 0x00000000;
37724 else if (j <= 31)
37725 return 0x5a827999;
37726 else if (j <= 47)
37727 return 0x6ed9eba1;
37728 else if (j <= 63)
37729 return 0x8f1bbcdc;
37730 else
37731 return 0xa953fd4e;
37732}
37733
37734function Kh(j) {
37735 if (j <= 15)
37736 return 0x50a28be6;
37737 else if (j <= 31)
37738 return 0x5c4dd124;
37739 else if (j <= 47)
37740 return 0x6d703ef3;
37741 else if (j <= 63)
37742 return 0x7a6d76e9;
37743 else
37744 return 0x00000000;
37745}
ebd8d4e8 37746
8b095871
IC
37747var r = [
37748 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
37749 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
37750 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
37751 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
37752 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
37753];
ebd8d4e8 37754
8b095871
IC
37755var rh = [
37756 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
37757 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
37758 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
37759 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
37760 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
37761];
ebd8d4e8 37762
8b095871
IC
37763var s = [
37764 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
37765 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
37766 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
37767 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
37768 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
37769];
ebd8d4e8 37770
8b095871
IC
37771var sh = [
37772 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
37773 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
37774 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
37775 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
37776 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
37777];
ebd8d4e8 37778
8b095871
IC
37779},{"../hash":57}],61:[function(require,module,exports){
37780var hash = require('../hash');
37781var utils = hash.utils;
37782var assert = utils.assert;
37783
37784var rotr32 = utils.rotr32;
37785var rotl32 = utils.rotl32;
37786var sum32 = utils.sum32;
37787var sum32_4 = utils.sum32_4;
37788var sum32_5 = utils.sum32_5;
37789var rotr64_hi = utils.rotr64_hi;
37790var rotr64_lo = utils.rotr64_lo;
37791var shr64_hi = utils.shr64_hi;
37792var shr64_lo = utils.shr64_lo;
37793var sum64 = utils.sum64;
37794var sum64_hi = utils.sum64_hi;
37795var sum64_lo = utils.sum64_lo;
37796var sum64_4_hi = utils.sum64_4_hi;
37797var sum64_4_lo = utils.sum64_4_lo;
37798var sum64_5_hi = utils.sum64_5_hi;
37799var sum64_5_lo = utils.sum64_5_lo;
37800var BlockHash = hash.common.BlockHash;
37801
37802var sha256_K = [
37803 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
37804 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
37805 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
37806 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
37807 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
37808 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
37809 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
37810 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
37811 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
37812 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
37813 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
37814 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
37815 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
37816 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
37817 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
37818 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
37819];
ebd8d4e8 37820
8b095871
IC
37821var sha512_K = [
37822 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
37823 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
37824 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
37825 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
37826 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
37827 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
37828 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
37829 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
37830 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
37831 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
37832 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
37833 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
37834 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
37835 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
37836 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
37837 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
37838 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
37839 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
37840 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
37841 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
37842 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
37843 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
37844 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
37845 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
37846 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
37847 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
37848 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
37849 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
37850 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
37851 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
37852 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
37853 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
37854 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
37855 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
37856 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
37857 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
37858 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
37859 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
37860 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
37861 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
37862];
ebd8d4e8 37863
8b095871
IC
37864var sha1_K = [
37865 0x5A827999, 0x6ED9EBA1,
37866 0x8F1BBCDC, 0xCA62C1D6
37867];
ebd8d4e8 37868
8b095871
IC
37869function SHA256() {
37870 if (!(this instanceof SHA256))
37871 return new SHA256();
37872
37873 BlockHash.call(this);
37874 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
37875 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
37876 this.k = sha256_K;
37877 this.W = new Array(64);
37878}
37879utils.inherits(SHA256, BlockHash);
37880exports.sha256 = SHA256;
37881
37882SHA256.blockSize = 512;
37883SHA256.outSize = 256;
37884SHA256.hmacStrength = 192;
37885SHA256.padLength = 64;
37886
37887SHA256.prototype._update = function _update(msg, start) {
37888 var W = this.W;
37889
37890 for (var i = 0; i < 16; i++)
37891 W[i] = msg[start + i];
37892 for (; i < W.length; i++)
37893 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
37894
37895 var a = this.h[0];
37896 var b = this.h[1];
37897 var c = this.h[2];
37898 var d = this.h[3];
37899 var e = this.h[4];
37900 var f = this.h[5];
37901 var g = this.h[6];
37902 var h = this.h[7];
37903
37904 assert(this.k.length === W.length);
37905 for (var i = 0; i < W.length; i++) {
37906 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
37907 var T2 = sum32(s0_256(a), maj32(a, b, c));
37908 h = g;
37909 g = f;
37910 f = e;
37911 e = sum32(d, T1);
37912 d = c;
37913 c = b;
37914 b = a;
37915 a = sum32(T1, T2);
37916 }
37917
37918 this.h[0] = sum32(this.h[0], a);
37919 this.h[1] = sum32(this.h[1], b);
37920 this.h[2] = sum32(this.h[2], c);
37921 this.h[3] = sum32(this.h[3], d);
37922 this.h[4] = sum32(this.h[4], e);
37923 this.h[5] = sum32(this.h[5], f);
37924 this.h[6] = sum32(this.h[6], g);
37925 this.h[7] = sum32(this.h[7], h);
37926};
ebd8d4e8 37927
8b095871
IC
37928SHA256.prototype._digest = function digest(enc) {
37929 if (enc === 'hex')
37930 return utils.toHex32(this.h, 'big');
37931 else
37932 return utils.split32(this.h, 'big');
37933};
ebd8d4e8 37934
8b095871
IC
37935function SHA224() {
37936 if (!(this instanceof SHA224))
37937 return new SHA224();
ebd8d4e8 37938
8b095871
IC
37939 SHA256.call(this);
37940 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
37941 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
37942}
37943utils.inherits(SHA224, SHA256);
37944exports.sha224 = SHA224;
ebd8d4e8 37945
8b095871
IC
37946SHA224.blockSize = 512;
37947SHA224.outSize = 224;
37948SHA224.hmacStrength = 192;
37949SHA224.padLength = 64;
ebd8d4e8 37950
8b095871
IC
37951SHA224.prototype._digest = function digest(enc) {
37952 // Just truncate output
37953 if (enc === 'hex')
37954 return utils.toHex32(this.h.slice(0, 7), 'big');
37955 else
37956 return utils.split32(this.h.slice(0, 7), 'big');
37957};
37958
37959function SHA512() {
37960 if (!(this instanceof SHA512))
37961 return new SHA512();
37962
37963 BlockHash.call(this);
37964 this.h = [ 0x6a09e667, 0xf3bcc908,
37965 0xbb67ae85, 0x84caa73b,
37966 0x3c6ef372, 0xfe94f82b,
37967 0xa54ff53a, 0x5f1d36f1,
37968 0x510e527f, 0xade682d1,
37969 0x9b05688c, 0x2b3e6c1f,
37970 0x1f83d9ab, 0xfb41bd6b,
37971 0x5be0cd19, 0x137e2179 ];
37972 this.k = sha512_K;
37973 this.W = new Array(160);
37974}
37975utils.inherits(SHA512, BlockHash);
37976exports.sha512 = SHA512;
37977
37978SHA512.blockSize = 1024;
37979SHA512.outSize = 512;
37980SHA512.hmacStrength = 192;
37981SHA512.padLength = 128;
37982
37983SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
37984 var W = this.W;
37985
37986 // 32 x 32bit words
37987 for (var i = 0; i < 32; i++)
37988 W[i] = msg[start + i];
37989 for (; i < W.length; i += 2) {
37990 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
37991 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
37992 var c1_hi = W[i - 14]; // i - 7
37993 var c1_lo = W[i - 13];
37994 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
37995 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
37996 var c3_hi = W[i - 32]; // i - 16
37997 var c3_lo = W[i - 31];
37998
37999 W[i] = sum64_4_hi(c0_hi, c0_lo,
38000 c1_hi, c1_lo,
38001 c2_hi, c2_lo,
38002 c3_hi, c3_lo);
38003 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
38004 c1_hi, c1_lo,
38005 c2_hi, c2_lo,
38006 c3_hi, c3_lo);
ebd8d4e8 38007 }
8b095871
IC
38008};
38009
38010SHA512.prototype._update = function _update(msg, start) {
38011 this._prepareBlock(msg, start);
38012
38013 var W = this.W;
38014
38015 var ah = this.h[0];
38016 var al = this.h[1];
38017 var bh = this.h[2];
38018 var bl = this.h[3];
38019 var ch = this.h[4];
38020 var cl = this.h[5];
38021 var dh = this.h[6];
38022 var dl = this.h[7];
38023 var eh = this.h[8];
38024 var el = this.h[9];
38025 var fh = this.h[10];
38026 var fl = this.h[11];
38027 var gh = this.h[12];
38028 var gl = this.h[13];
38029 var hh = this.h[14];
38030 var hl = this.h[15];
38031
38032 assert(this.k.length === W.length);
38033 for (var i = 0; i < W.length; i += 2) {
38034 var c0_hi = hh;
38035 var c0_lo = hl;
38036 var c1_hi = s1_512_hi(eh, el);
38037 var c1_lo = s1_512_lo(eh, el);
38038 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
38039 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
38040 var c3_hi = this.k[i];
38041 var c3_lo = this.k[i + 1];
38042 var c4_hi = W[i];
38043 var c4_lo = W[i + 1];
38044
38045 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
38046 c1_hi, c1_lo,
38047 c2_hi, c2_lo,
38048 c3_hi, c3_lo,
38049 c4_hi, c4_lo);
38050 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
38051 c1_hi, c1_lo,
38052 c2_hi, c2_lo,
38053 c3_hi, c3_lo,
38054 c4_hi, c4_lo);
38055
38056 var c0_hi = s0_512_hi(ah, al);
38057 var c0_lo = s0_512_lo(ah, al);
38058 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
38059 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
38060
38061 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
38062 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
38063
38064 hh = gh;
38065 hl = gl;
38066
38067 gh = fh;
38068 gl = fl;
38069
38070 fh = eh;
38071 fl = el;
38072
38073 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
38074 el = sum64_lo(dl, dl, T1_hi, T1_lo);
38075
38076 dh = ch;
38077 dl = cl;
38078
38079 ch = bh;
38080 cl = bl;
38081
38082 bh = ah;
38083 bl = al;
38084
38085 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
38086 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
38087 }
38088
38089 sum64(this.h, 0, ah, al);
38090 sum64(this.h, 2, bh, bl);
38091 sum64(this.h, 4, ch, cl);
38092 sum64(this.h, 6, dh, dl);
38093 sum64(this.h, 8, eh, el);
38094 sum64(this.h, 10, fh, fl);
38095 sum64(this.h, 12, gh, gl);
38096 sum64(this.h, 14, hh, hl);
38097};
38098
38099SHA512.prototype._digest = function digest(enc) {
38100 if (enc === 'hex')
38101 return utils.toHex32(this.h, 'big');
38102 else
38103 return utils.split32(this.h, 'big');
38104};
38105
38106function SHA384() {
38107 if (!(this instanceof SHA384))
38108 return new SHA384();
38109
38110 SHA512.call(this);
38111 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
38112 0x629a292a, 0x367cd507,
38113 0x9159015a, 0x3070dd17,
38114 0x152fecd8, 0xf70e5939,
38115 0x67332667, 0xffc00b31,
38116 0x8eb44a87, 0x68581511,
38117 0xdb0c2e0d, 0x64f98fa7,
38118 0x47b5481d, 0xbefa4fa4 ];
38119}
38120utils.inherits(SHA384, SHA512);
38121exports.sha384 = SHA384;
38122
38123SHA384.blockSize = 1024;
38124SHA384.outSize = 384;
38125SHA384.hmacStrength = 192;
38126SHA384.padLength = 128;
38127
38128SHA384.prototype._digest = function digest(enc) {
38129 if (enc === 'hex')
38130 return utils.toHex32(this.h.slice(0, 12), 'big');
38131 else
38132 return utils.split32(this.h.slice(0, 12), 'big');
38133};
ebd8d4e8 38134
8b095871
IC
38135function SHA1() {
38136 if (!(this instanceof SHA1))
38137 return new SHA1();
ebd8d4e8 38138
8b095871
IC
38139 BlockHash.call(this);
38140 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
38141 0x10325476, 0xc3d2e1f0 ];
38142 this.W = new Array(80);
38143}
ebd8d4e8 38144
8b095871
IC
38145utils.inherits(SHA1, BlockHash);
38146exports.sha1 = SHA1;
ebd8d4e8 38147
8b095871
IC
38148SHA1.blockSize = 512;
38149SHA1.outSize = 160;
38150SHA1.hmacStrength = 80;
38151SHA1.padLength = 64;
ebd8d4e8 38152
8b095871
IC
38153SHA1.prototype._update = function _update(msg, start) {
38154 var W = this.W;
ebd8d4e8 38155
8b095871
IC
38156 for (var i = 0; i < 16; i++)
38157 W[i] = msg[start + i];
ebd8d4e8 38158
8b095871
IC
38159 for(; i < W.length; i++)
38160 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 38161
8b095871
IC
38162 var a = this.h[0];
38163 var b = this.h[1];
38164 var c = this.h[2];
38165 var d = this.h[3];
38166 var e = this.h[4];
ebd8d4e8 38167
8b095871
IC
38168 for (var i = 0; i < W.length; i++) {
38169 var s = ~~(i / 20);
38170 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
38171 e = d;
38172 d = c;
38173 c = rotl32(b, 30);
38174 b = a;
38175 a = t;
ebd8d4e8
IC
38176 }
38177
8b095871
IC
38178 this.h[0] = sum32(this.h[0], a);
38179 this.h[1] = sum32(this.h[1], b);
38180 this.h[2] = sum32(this.h[2], c);
38181 this.h[3] = sum32(this.h[3], d);
38182 this.h[4] = sum32(this.h[4], e);
38183};
ebd8d4e8 38184
8b095871
IC
38185SHA1.prototype._digest = function digest(enc) {
38186 if (enc === 'hex')
38187 return utils.toHex32(this.h, 'big');
38188 else
38189 return utils.split32(this.h, 'big');
38190};
38191
38192function ch32(x, y, z) {
38193 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
38194}
38195
8b095871
IC
38196function maj32(x, y, z) {
38197 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
38198}
38199
8b095871
IC
38200function p32(x, y, z) {
38201 return x ^ y ^ z;
38202}
ebd8d4e8 38203
8b095871
IC
38204function s0_256(x) {
38205 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
38206}
ebd8d4e8 38207
8b095871
IC
38208function s1_256(x) {
38209 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
38210}
38211
8b095871
IC
38212function g0_256(x) {
38213 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
38214}
ab78acc6 38215
8b095871
IC
38216function g1_256(x) {
38217 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
38218}
ab78acc6 38219
8b095871
IC
38220function ft_1(s, x, y, z) {
38221 if (s === 0)
38222 return ch32(x, y, z);
38223 if (s === 1 || s === 3)
38224 return p32(x, y, z);
38225 if (s === 2)
38226 return maj32(x, y, z);
38227}
ebd8d4e8 38228
8b095871
IC
38229function ch64_hi(xh, xl, yh, yl, zh, zl) {
38230 var r = (xh & yh) ^ ((~xh) & zh);
38231 if (r < 0)
38232 r += 0x100000000;
38233 return r;
38234}
ebd8d4e8 38235
8b095871
IC
38236function ch64_lo(xh, xl, yh, yl, zh, zl) {
38237 var r = (xl & yl) ^ ((~xl) & zl);
38238 if (r < 0)
38239 r += 0x100000000;
38240 return r;
ebd8d4e8
IC
38241}
38242
8b095871
IC
38243function maj64_hi(xh, xl, yh, yl, zh, zl) {
38244 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
38245 if (r < 0)
38246 r += 0x100000000;
38247 return r;
38248}
ebd8d4e8 38249
8b095871
IC
38250function maj64_lo(xh, xl, yh, yl, zh, zl) {
38251 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
38252 if (r < 0)
38253 r += 0x100000000;
38254 return r;
38255}
ebd8d4e8 38256
8b095871
IC
38257function s0_512_hi(xh, xl) {
38258 var c0_hi = rotr64_hi(xh, xl, 28);
38259 var c1_hi = rotr64_hi(xl, xh, 2); // 34
38260 var c2_hi = rotr64_hi(xl, xh, 7); // 39
38261
38262 var r = c0_hi ^ c1_hi ^ c2_hi;
38263 if (r < 0)
38264 r += 0x100000000;
38265 return r;
ebd8d4e8
IC
38266}
38267
8b095871
IC
38268function s0_512_lo(xh, xl) {
38269 var c0_lo = rotr64_lo(xh, xl, 28);
38270 var c1_lo = rotr64_lo(xl, xh, 2); // 34
38271 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 38272
8b095871
IC
38273 var r = c0_lo ^ c1_lo ^ c2_lo;
38274 if (r < 0)
38275 r += 0x100000000;
38276 return r;
38277}
ebd8d4e8 38278
8b095871
IC
38279function s1_512_hi(xh, xl) {
38280 var c0_hi = rotr64_hi(xh, xl, 14);
38281 var c1_hi = rotr64_hi(xh, xl, 18);
38282 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 38283
8b095871
IC
38284 var r = c0_hi ^ c1_hi ^ c2_hi;
38285 if (r < 0)
38286 r += 0x100000000;
38287 return r;
ebd8d4e8
IC
38288}
38289
8b095871
IC
38290function s1_512_lo(xh, xl) {
38291 var c0_lo = rotr64_lo(xh, xl, 14);
38292 var c1_lo = rotr64_lo(xh, xl, 18);
38293 var c2_lo = rotr64_lo(xl, xh, 9); // 41
38294
38295 var r = c0_lo ^ c1_lo ^ c2_lo;
38296 if (r < 0)
38297 r += 0x100000000;
38298 return r;
ebd8d4e8
IC
38299}
38300
8b095871
IC
38301function g0_512_hi(xh, xl) {
38302 var c0_hi = rotr64_hi(xh, xl, 1);
38303 var c1_hi = rotr64_hi(xh, xl, 8);
38304 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 38305
8b095871
IC
38306 var r = c0_hi ^ c1_hi ^ c2_hi;
38307 if (r < 0)
38308 r += 0x100000000;
38309 return r;
38310}
38311
38312function g0_512_lo(xh, xl) {
38313 var c0_lo = rotr64_lo(xh, xl, 1);
38314 var c1_lo = rotr64_lo(xh, xl, 8);
38315 var c2_lo = shr64_lo(xh, xl, 7);
38316
38317 var r = c0_lo ^ c1_lo ^ c2_lo;
38318 if (r < 0)
38319 r += 0x100000000;
38320 return r;
38321}
38322
38323function g1_512_hi(xh, xl) {
38324 var c0_hi = rotr64_hi(xh, xl, 19);
38325 var c1_hi = rotr64_hi(xl, xh, 29); // 61
38326 var c2_hi = shr64_hi(xh, xl, 6);
38327
38328 var r = c0_hi ^ c1_hi ^ c2_hi;
38329 if (r < 0)
38330 r += 0x100000000;
38331 return r;
38332}
38333
38334function g1_512_lo(xh, xl) {
38335 var c0_lo = rotr64_lo(xh, xl, 19);
38336 var c1_lo = rotr64_lo(xl, xh, 29); // 61
38337 var c2_lo = shr64_lo(xh, xl, 6);
38338
38339 var r = c0_lo ^ c1_lo ^ c2_lo;
38340 if (r < 0)
38341 r += 0x100000000;
38342 return r;
38343}
38344
38345},{"../hash":57}],62:[function(require,module,exports){
38346var utils = exports;
38347var inherits = require('inherits');
38348
38349function toArray(msg, enc) {
38350 if (Array.isArray(msg))
38351 return msg.slice();
38352 if (!msg)
38353 return [];
38354 var res = [];
38355 if (typeof msg === 'string') {
38356 if (!enc) {
38357 for (var i = 0; i < msg.length; i++) {
38358 var c = msg.charCodeAt(i);
38359 var hi = c >> 8;
38360 var lo = c & 0xff;
38361 if (hi)
38362 res.push(hi, lo);
38363 else
38364 res.push(lo);
38365 }
38366 } else if (enc === 'hex') {
38367 msg = msg.replace(/[^a-z0-9]+/ig, '');
38368 if (msg.length % 2 !== 0)
38369 msg = '0' + msg;
38370 for (var i = 0; i < msg.length; i += 2)
38371 res.push(parseInt(msg[i] + msg[i + 1], 16));
38372 }
38373 } else {
38374 for (var i = 0; i < msg.length; i++)
38375 res[i] = msg[i] | 0;
ebd8d4e8 38376 }
8b095871 38377 return res;
ebd8d4e8 38378}
8b095871 38379utils.toArray = toArray;
ebd8d4e8 38380
8b095871
IC
38381function toHex(msg) {
38382 var res = '';
38383 for (var i = 0; i < msg.length; i++)
38384 res += zero2(msg[i].toString(16));
38385 return res;
38386}
38387utils.toHex = toHex;
ebd8d4e8 38388
8b095871
IC
38389function htonl(w) {
38390 var res = (w >>> 24) |
38391 ((w >>> 8) & 0xff00) |
38392 ((w << 8) & 0xff0000) |
38393 ((w & 0xff) << 24);
38394 return res >>> 0;
38395}
38396utils.htonl = htonl;
ebd8d4e8 38397
8b095871
IC
38398function toHex32(msg, endian) {
38399 var res = '';
38400 for (var i = 0; i < msg.length; i++) {
38401 var w = msg[i];
38402 if (endian === 'little')
38403 w = htonl(w);
38404 res += zero8(w.toString(16));
38405 }
38406 return res;
38407}
38408utils.toHex32 = toHex32;
ebd8d4e8 38409
8b095871
IC
38410function zero2(word) {
38411 if (word.length === 1)
38412 return '0' + word;
38413 else
38414 return word;
38415}
38416utils.zero2 = zero2;
38417
38418function zero8(word) {
38419 if (word.length === 7)
38420 return '0' + word;
38421 else if (word.length === 6)
38422 return '00' + word;
38423 else if (word.length === 5)
38424 return '000' + word;
38425 else if (word.length === 4)
38426 return '0000' + word;
38427 else if (word.length === 3)
38428 return '00000' + word;
38429 else if (word.length === 2)
38430 return '000000' + word;
38431 else if (word.length === 1)
38432 return '0000000' + word;
38433 else
38434 return word;
38435}
38436utils.zero8 = zero8;
38437
38438function join32(msg, start, end, endian) {
38439 var len = end - start;
38440 assert(len % 4 === 0);
38441 var res = new Array(len / 4);
38442 for (var i = 0, k = start; i < res.length; i++, k += 4) {
38443 var w;
38444 if (endian === 'big')
38445 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
38446 else
38447 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
38448 res[i] = w >>> 0;
38449 }
38450 return res;
38451}
38452utils.join32 = join32;
38453
38454function split32(msg, endian) {
38455 var res = new Array(msg.length * 4);
38456 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
38457 var m = msg[i];
38458 if (endian === 'big') {
38459 res[k] = m >>> 24;
38460 res[k + 1] = (m >>> 16) & 0xff;
38461 res[k + 2] = (m >>> 8) & 0xff;
38462 res[k + 3] = m & 0xff;
38463 } else {
38464 res[k + 3] = m >>> 24;
38465 res[k + 2] = (m >>> 16) & 0xff;
38466 res[k + 1] = (m >>> 8) & 0xff;
38467 res[k] = m & 0xff;
38468 }
ebd8d4e8 38469 }
8b095871 38470 return res;
ebd8d4e8 38471}
8b095871 38472utils.split32 = split32;
ebd8d4e8 38473
8b095871
IC
38474function rotr32(w, b) {
38475 return (w >>> b) | (w << (32 - b));
38476}
38477utils.rotr32 = rotr32;
ebd8d4e8 38478
8b095871
IC
38479function rotl32(w, b) {
38480 return (w << b) | (w >>> (32 - b));
38481}
38482utils.rotl32 = rotl32;
ebd8d4e8 38483
8b095871
IC
38484function sum32(a, b) {
38485 return (a + b) >>> 0;
38486}
38487utils.sum32 = sum32;
ebd8d4e8 38488
8b095871
IC
38489function sum32_3(a, b, c) {
38490 return (a + b + c) >>> 0;
38491}
38492utils.sum32_3 = sum32_3;
ebd8d4e8 38493
8b095871
IC
38494function sum32_4(a, b, c, d) {
38495 return (a + b + c + d) >>> 0;
38496}
38497utils.sum32_4 = sum32_4;
ebd8d4e8 38498
8b095871
IC
38499function sum32_5(a, b, c, d, e) {
38500 return (a + b + c + d + e) >>> 0;
38501}
38502utils.sum32_5 = sum32_5;
ebd8d4e8 38503
8b095871
IC
38504function assert(cond, msg) {
38505 if (!cond)
38506 throw new Error(msg || 'Assertion failed');
38507}
38508utils.assert = assert;
ab78acc6 38509
8b095871 38510utils.inherits = inherits;
ab78acc6 38511
8b095871
IC
38512function sum64(buf, pos, ah, al) {
38513 var bh = buf[pos];
38514 var bl = buf[pos + 1];
ab78acc6 38515
8b095871
IC
38516 var lo = (al + bl) >>> 0;
38517 var hi = (lo < al ? 1 : 0) + ah + bh;
38518 buf[pos] = hi >>> 0;
38519 buf[pos + 1] = lo;
38520}
38521exports.sum64 = sum64;
ebd8d4e8 38522
8b095871
IC
38523function sum64_hi(ah, al, bh, bl) {
38524 var lo = (al + bl) >>> 0;
38525 var hi = (lo < al ? 1 : 0) + ah + bh;
38526 return hi >>> 0;
38527};
38528exports.sum64_hi = sum64_hi;
ebd8d4e8 38529
8b095871
IC
38530function sum64_lo(ah, al, bh, bl) {
38531 var lo = al + bl;
38532 return lo >>> 0;
38533};
38534exports.sum64_lo = sum64_lo;
38535
38536function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
38537 var carry = 0;
38538 var lo = al;
38539 lo = (lo + bl) >>> 0;
38540 carry += lo < al ? 1 : 0;
38541 lo = (lo + cl) >>> 0;
38542 carry += lo < cl ? 1 : 0;
38543 lo = (lo + dl) >>> 0;
38544 carry += lo < dl ? 1 : 0;
38545
38546 var hi = ah + bh + ch + dh + carry;
38547 return hi >>> 0;
38548};
38549exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 38550
8b095871
IC
38551function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
38552 var lo = al + bl + cl + dl;
38553 return lo >>> 0;
38554};
38555exports.sum64_4_lo = sum64_4_lo;
38556
38557function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38558 var carry = 0;
38559 var lo = al;
38560 lo = (lo + bl) >>> 0;
38561 carry += lo < al ? 1 : 0;
38562 lo = (lo + cl) >>> 0;
38563 carry += lo < cl ? 1 : 0;
38564 lo = (lo + dl) >>> 0;
38565 carry += lo < dl ? 1 : 0;
38566 lo = (lo + el) >>> 0;
38567 carry += lo < el ? 1 : 0;
38568
38569 var hi = ah + bh + ch + dh + eh + carry;
38570 return hi >>> 0;
38571};
38572exports.sum64_5_hi = sum64_5_hi;
38573
38574function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
38575 var lo = al + bl + cl + dl + el;
38576
38577 return lo >>> 0;
38578};
38579exports.sum64_5_lo = sum64_5_lo;
38580
38581function rotr64_hi(ah, al, num) {
38582 var r = (al << (32 - num)) | (ah >>> num);
38583 return r >>> 0;
38584};
38585exports.rotr64_hi = rotr64_hi;
38586
38587function rotr64_lo(ah, al, num) {
38588 var r = (ah << (32 - num)) | (al >>> num);
38589 return r >>> 0;
38590};
38591exports.rotr64_lo = rotr64_lo;
38592
38593function shr64_hi(ah, al, num) {
38594 return ah >>> num;
38595};
38596exports.shr64_hi = shr64_hi;
38597
38598function shr64_lo(ah, al, num) {
38599 var r = (ah << (32 - num)) | (al >>> num);
38600 return r >>> 0;
38601};
38602exports.shr64_lo = shr64_lo;
38603
38604},{"inherits":63}],63:[function(require,module,exports){
38605arguments[4][9][0].apply(exports,arguments)
38606},{"dup":9}],64:[function(require,module,exports){
38607/**
38608 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
38609 * @param {String} str the string input value
38610 * @return {Boolean} a boolean if it is or is not hex prefixed
38611 * @throws if the str input is not a string
38612 */
38613module.exports = function isHexPrefixed(str) {
38614 if (typeof str !== 'string') {
38615 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
38616 }
38617
38618 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
38619}
38620
8b095871
IC
38621},{}],65:[function(require,module,exports){
38622'use strict'
38623module.exports = require('./lib/api')(require('./lib/keccak'))
38624
38625},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
38626'use strict'
38627var createKeccak = require('./keccak')
38628var createShake = require('./shake')
38629
38630module.exports = function (KeccakState) {
38631 var Keccak = createKeccak(KeccakState)
38632 var Shake = createShake(KeccakState)
38633
38634 return function (algorithm, options) {
38635 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
38636 switch (hash) {
38637 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
38638 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
38639 case 'keccak384': return new Keccak(832, 768, null, 384, options)
38640 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
38641
38642 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
38643 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
38644 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
38645 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
38646
38647 case 'shake128': return new Shake(1344, 256, 0x1f, options)
38648 case 'shake256': return new Shake(1088, 512, 0x1f, options)
38649
38650 default: throw new Error('Invald algorithm: ' + algorithm)
38651 }
38652 }
38653}
38654
38655},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 38656(function (Buffer){
8b095871
IC
38657'use strict'
38658var Transform = require('stream').Transform
38659var inherits = require('inherits')
38660
38661module.exports = function (KeccakState) {
38662 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
38663 Transform.call(this, options)
38664
38665 this._rate = rate
38666 this._capacity = capacity
38667 this._delimitedSuffix = delimitedSuffix
38668 this._hashBitLength = hashBitLength
38669 this._options = options
38670
38671 this._state = new KeccakState()
38672 this._state.initialize(rate, capacity)
38673 this._finalized = false
38674 }
38675
38676 inherits(Keccak, Transform)
38677
38678 Keccak.prototype._transform = function (chunk, encoding, callback) {
38679 var error = null
38680 try {
38681 this.update(chunk, encoding)
38682 } catch (err) {
38683 error = err
38684 }
38685
38686 callback(error)
38687 }
38688
38689 Keccak.prototype._flush = function (callback) {
38690 var error = null
38691 try {
38692 this.push(this.digest())
38693 } catch (err) {
38694 error = err
38695 }
38696
38697 callback(error)
38698 }
38699
38700 Keccak.prototype.update = function (data, encoding) {
38701 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38702 if (this._finalized) throw new Error('Digest already called')
38703 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38704
38705 this._state.absorb(data)
38706
38707 return this
38708 }
38709
38710 Keccak.prototype.digest = function (encoding) {
38711 if (this._finalized) throw new Error('Digest already called')
38712 this._finalized = true
38713
38714 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
38715 var digest = this._state.squeeze(this._hashBitLength / 8)
38716 if (encoding !== undefined) digest = digest.toString(encoding)
38717
38718 this._resetState()
38719
38720 return digest
38721 }
38722
38723 // remove result from memory
38724 Keccak.prototype._resetState = function () {
38725 this._state.initialize(this._rate, this._capacity)
38726 return this
38727 }
38728
38729 // because sometimes we need hash right now and little later
38730 Keccak.prototype._clone = function () {
38731 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
38732 this._state.copy(clone._state)
38733 clone._finalized = this._finalized
38734
38735 return clone
38736 }
38737
38738 return Keccak
38739}
38740
38741}).call(this,require("buffer").Buffer)
38742},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
38743(function (Buffer){
38744'use strict'
38745var Transform = require('stream').Transform
38746var inherits = require('inherits')
38747
38748module.exports = function (KeccakState) {
38749 function Shake (rate, capacity, delimitedSuffix, options) {
38750 Transform.call(this, options)
38751
38752 this._rate = rate
38753 this._capacity = capacity
38754 this._delimitedSuffix = delimitedSuffix
38755 this._options = options
38756
38757 this._state = new KeccakState()
38758 this._state.initialize(rate, capacity)
38759 this._finalized = false
38760 }
38761
38762 inherits(Shake, Transform)
38763
38764 Shake.prototype._transform = function (chunk, encoding, callback) {
38765 var error = null
38766 try {
38767 this.update(chunk, encoding)
38768 } catch (err) {
38769 error = err
38770 }
ebd8d4e8 38771
8b095871
IC
38772 callback(error)
38773 }
ebd8d4e8 38774
8b095871 38775 Shake.prototype._flush = function () {}
ebd8d4e8 38776
8b095871
IC
38777 Shake.prototype._read = function (size) {
38778 this.push(this.squeeze(size))
38779 }
ebd8d4e8 38780
8b095871
IC
38781 Shake.prototype.update = function (data, encoding) {
38782 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
38783 if (this._finalized) throw new Error('Squeeze already called')
38784 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
38785
38786 this._state.absorb(data)
38787
38788 return this
38789 }
38790
38791 Shake.prototype.squeeze = function (dataByteLength, encoding) {
38792 if (!this._finalized) {
38793 this._finalized = true
38794 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 38795 }
ebd8d4e8 38796
8b095871
IC
38797 var data = this._state.squeeze(dataByteLength)
38798 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 38799
8b095871
IC
38800 return data
38801 }
ebd8d4e8 38802
8b095871
IC
38803 Shake.prototype._resetState = function () {
38804 this._state.initialize(this._rate, this._capacity)
38805 return this
38806 }
ebd8d4e8 38807
8b095871
IC
38808 Shake.prototype._clone = function () {
38809 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
38810 this._state.copy(clone._state)
38811 clone._finalized = this._finalized
ab78acc6 38812
8b095871
IC
38813 return clone
38814 }
ebd8d4e8 38815
8b095871
IC
38816 return Shake
38817}
ab78acc6 38818
8b095871
IC
38819}).call(this,require("buffer").Buffer)
38820},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
38821'use strict'
38822var P1600_ROUND_CONSTANTS = [1, 0, 32898, 0, 32906, 2147483648, 2147516416, 2147483648, 32907, 0, 2147483649, 0, 2147516545, 2147483648, 32777, 2147483648, 138, 0, 136, 0, 2147516425, 0, 2147483658, 0, 2147516555, 0, 139, 2147483648, 32905, 2147483648, 32771, 2147483648, 32770, 2147483648, 128, 2147483648, 32778, 0, 2147483658, 2147483648, 2147516545, 2147483648, 32896, 2147483648, 2147483649, 0, 2147516424, 2147483648]
38823
38824exports.p1600 = function (s) {
38825 for (var round = 0; round < 24; ++round) {
38826 // theta
38827 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
38828 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
38829 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
38830 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
38831 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
38832 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
38833 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
38834 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
38835 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
38836 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
38837
38838 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
38839 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
38840 var t1slo0 = s[0] ^ lo
38841 var t1shi0 = s[1] ^ hi
38842 var t1slo5 = s[10] ^ lo
38843 var t1shi5 = s[11] ^ hi
38844 var t1slo10 = s[20] ^ lo
38845 var t1shi10 = s[21] ^ hi
38846 var t1slo15 = s[30] ^ lo
38847 var t1shi15 = s[31] ^ hi
38848 var t1slo20 = s[40] ^ lo
38849 var t1shi20 = s[41] ^ hi
38850 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
38851 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
38852 var t1slo1 = s[2] ^ lo
38853 var t1shi1 = s[3] ^ hi
38854 var t1slo6 = s[12] ^ lo
38855 var t1shi6 = s[13] ^ hi
38856 var t1slo11 = s[22] ^ lo
38857 var t1shi11 = s[23] ^ hi
38858 var t1slo16 = s[32] ^ lo
38859 var t1shi16 = s[33] ^ hi
38860 var t1slo21 = s[42] ^ lo
38861 var t1shi21 = s[43] ^ hi
38862 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
38863 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
38864 var t1slo2 = s[4] ^ lo
38865 var t1shi2 = s[5] ^ hi
38866 var t1slo7 = s[14] ^ lo
38867 var t1shi7 = s[15] ^ hi
38868 var t1slo12 = s[24] ^ lo
38869 var t1shi12 = s[25] ^ hi
38870 var t1slo17 = s[34] ^ lo
38871 var t1shi17 = s[35] ^ hi
38872 var t1slo22 = s[44] ^ lo
38873 var t1shi22 = s[45] ^ hi
38874 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
38875 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
38876 var t1slo3 = s[6] ^ lo
38877 var t1shi3 = s[7] ^ hi
38878 var t1slo8 = s[16] ^ lo
38879 var t1shi8 = s[17] ^ hi
38880 var t1slo13 = s[26] ^ lo
38881 var t1shi13 = s[27] ^ hi
38882 var t1slo18 = s[36] ^ lo
38883 var t1shi18 = s[37] ^ hi
38884 var t1slo23 = s[46] ^ lo
38885 var t1shi23 = s[47] ^ hi
38886 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
38887 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
38888 var t1slo4 = s[8] ^ lo
38889 var t1shi4 = s[9] ^ hi
38890 var t1slo9 = s[18] ^ lo
38891 var t1shi9 = s[19] ^ hi
38892 var t1slo14 = s[28] ^ lo
38893 var t1shi14 = s[29] ^ hi
38894 var t1slo19 = s[38] ^ lo
38895 var t1shi19 = s[39] ^ hi
38896 var t1slo24 = s[48] ^ lo
38897 var t1shi24 = s[49] ^ hi
38898
38899 // rho & pi
38900 var t2slo0 = t1slo0
38901 var t2shi0 = t1shi0
38902 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
38903 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
38904 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
38905 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
38906 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
38907 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
38908 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
38909 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
38910 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
38911 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
38912 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
38913 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
38914 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
38915 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
38916 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
38917 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
38918 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
38919 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
38920 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
38921 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
38922 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
38923 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
38924 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
38925 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
38926 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
38927 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
38928 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
38929 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
38930 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
38931 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
38932 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
38933 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
38934 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
38935 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
38936 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
38937 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
38938 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
38939 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
38940 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
38941 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
38942 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
38943 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
38944 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
38945 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
38946 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
38947 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
38948 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
38949 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
38950
38951 // chi
38952 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
38953 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
38954 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
38955 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
38956 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
38957 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
38958 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
38959 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
38960 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
38961 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
38962 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
38963 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
38964 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
38965 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
38966 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
38967 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
38968 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
38969 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
38970 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
38971 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
38972 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
38973 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
38974 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
38975 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
38976 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
38977 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
38978 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
38979 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
38980 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
38981 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
38982 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
38983 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
38984 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
38985 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
38986 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
38987 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
38988 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
38989 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
38990 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
38991 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
38992 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
38993 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
38994 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
38995 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
38996 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
38997 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
38998 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
38999 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
39000 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
39001 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
39002
39003 // iota
39004 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
39005 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
39006 }
39007}
39008
39009},{}],70:[function(require,module,exports){
39010(function (Buffer){
39011'use strict'
39012var keccakState = require('./keccak-state-unroll')
ebd8d4e8 39013
8b095871
IC
39014function Keccak () {
39015 // much faster than `new Array(50)`
39016 this.state = [
39017 0, 0, 0, 0, 0,
39018 0, 0, 0, 0, 0,
39019 0, 0, 0, 0, 0,
39020 0, 0, 0, 0, 0,
39021 0, 0, 0, 0, 0
39022 ]
ebd8d4e8 39023
8b095871
IC
39024 this.blockSize = null
39025 this.count = 0
39026 this.squeezing = false
39027}
ebd8d4e8 39028
8b095871
IC
39029Keccak.prototype.initialize = function (rate, capacity) {
39030 for (var i = 0; i < 50; ++i) this.state[i] = 0
39031 this.blockSize = rate / 8
39032 this.count = 0
39033 this.squeezing = false
39034}
39035
39036Keccak.prototype.absorb = function (data) {
39037 for (var i = 0; i < data.length; ++i) {
39038 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
39039 this.count += 1
39040 if (this.count === this.blockSize) {
39041 keccakState.p1600(this.state)
39042 this.count = 0
ebd8d4e8
IC
39043 }
39044 }
8b095871 39045}
ebd8d4e8 39046
8b095871
IC
39047Keccak.prototype.absorbLastFewBits = function (bits) {
39048 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
39049 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
39050 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
39051 keccakState.p1600(this.state)
39052 this.count = 0
39053 this.squeezing = true
ebd8d4e8
IC
39054}
39055
8b095871
IC
39056Keccak.prototype.squeeze = function (length) {
39057 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 39058
8b095871
IC
39059 var output = Buffer.allocUnsafe(length)
39060 for (var i = 0; i < length; ++i) {
39061 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
39062 this.count += 1
39063 if (this.count === this.blockSize) {
39064 keccakState.p1600(this.state)
39065 this.count = 0
ebd8d4e8 39066 }
8b095871 39067 }
ebd8d4e8 39068
8b095871
IC
39069 return output
39070}
ebd8d4e8 39071
8b095871
IC
39072Keccak.prototype.copy = function (dest) {
39073 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
39074 dest.blockSize = this.blockSize
39075 dest.count = this.count
39076 dest.squeezing = this.squeezing
39077}
ebd8d4e8 39078
8b095871 39079module.exports = Keccak
ebd8d4e8 39080
8b095871
IC
39081}).call(this,require("buffer").Buffer)
39082},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
39083(function (Buffer){
39084/*
39085CryptoJS v3.1.2
39086code.google.com/p/crypto-js
39087(c) 2009-2013 by Jeff Mott. All rights reserved.
39088code.google.com/p/crypto-js/wiki/License
39089*/
39090/** @preserve
39091(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 39092
8b095871 39093Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 39094
8b095871
IC
39095 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
39096 - 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.
39097
39098THIS 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.
39099*/
39100
39101// constants table
39102var zl = [
39103 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
39104 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
39105 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
39106 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
39107 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
39108]
39109
39110var zr = [
39111 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
39112 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
39113 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
39114 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
39115 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
39116]
39117
39118var sl = [
39119 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
39120 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
39121 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
39122 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
39123 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
39124]
39125
39126var sr = [
39127 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
39128 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
39129 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
39130 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
39131 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
39132]
39133
39134var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
39135var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
39136
39137function bytesToWords (bytes) {
39138 var words = []
39139 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
39140 words[b >>> 5] |= bytes[i] << (24 - b % 32)
39141 }
39142 return words
ebd8d4e8
IC
39143}
39144
8b095871
IC
39145function wordsToBytes (words) {
39146 var bytes = []
39147 for (var b = 0; b < words.length * 32; b += 8) {
39148 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
39149 }
39150 return bytes
ebd8d4e8
IC
39151}
39152
8b095871
IC
39153function processBlock (H, M, offset) {
39154 // swap endian
39155 for (var i = 0; i < 16; i++) {
39156 var offset_i = offset + i
39157 var M_offset_i = M[offset_i]
ebd8d4e8 39158
8b095871
IC
39159 // Swap
39160 M[offset_i] = (
39161 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
39162 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
39163 )
39164 }
ebd8d4e8 39165
8b095871
IC
39166 // Working variables
39167 var al, bl, cl, dl, el
39168 var ar, br, cr, dr, er
39169
39170 ar = al = H[0]
39171 br = bl = H[1]
39172 cr = cl = H[2]
39173 dr = dl = H[3]
39174 er = el = H[4]
39175
39176 // computation
39177 var t
39178 for (i = 0; i < 80; i += 1) {
39179 t = (al + M[offset + zl[i]]) | 0
39180 if (i < 16) {
39181 t += f1(bl, cl, dl) + hl[0]
39182 } else if (i < 32) {
39183 t += f2(bl, cl, dl) + hl[1]
39184 } else if (i < 48) {
39185 t += f3(bl, cl, dl) + hl[2]
39186 } else if (i < 64) {
39187 t += f4(bl, cl, dl) + hl[3]
39188 } else {// if (i<80) {
39189 t += f5(bl, cl, dl) + hl[4]
39190 }
39191 t = t | 0
39192 t = rotl(t, sl[i])
39193 t = (t + el) | 0
39194 al = el
39195 el = dl
39196 dl = rotl(cl, 10)
39197 cl = bl
39198 bl = t
39199
39200 t = (ar + M[offset + zr[i]]) | 0
39201 if (i < 16) {
39202 t += f5(br, cr, dr) + hr[0]
39203 } else if (i < 32) {
39204 t += f4(br, cr, dr) + hr[1]
39205 } else if (i < 48) {
39206 t += f3(br, cr, dr) + hr[2]
39207 } else if (i < 64) {
39208 t += f2(br, cr, dr) + hr[3]
39209 } else {// if (i<80) {
39210 t += f1(br, cr, dr) + hr[4]
39211 }
39212
39213 t = t | 0
39214 t = rotl(t, sr[i])
39215 t = (t + er) | 0
39216 ar = er
39217 er = dr
39218 dr = rotl(cr, 10)
39219 cr = br
39220 br = t
39221 }
39222
39223 // intermediate hash value
39224 t = (H[1] + cl + dr) | 0
39225 H[1] = (H[2] + dl + er) | 0
39226 H[2] = (H[3] + el + ar) | 0
39227 H[3] = (H[4] + al + br) | 0
39228 H[4] = (H[0] + bl + cr) | 0
39229 H[0] = t
ebd8d4e8
IC
39230}
39231
8b095871
IC
39232function f1 (x, y, z) {
39233 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
39234}
39235
8b095871
IC
39236function f2 (x, y, z) {
39237 return (((x) & (y)) | ((~x) & (z)))
39238}
ebd8d4e8 39239
8b095871
IC
39240function f3 (x, y, z) {
39241 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
39242}
39243
8b095871
IC
39244function f4 (x, y, z) {
39245 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
39246}
39247
8b095871
IC
39248function f5 (x, y, z) {
39249 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
39250}
39251
8b095871
IC
39252function rotl (x, n) {
39253 return (x << n) | (x >>> (32 - n))
39254}
ebd8d4e8 39255
8b095871
IC
39256function ripemd160 (message) {
39257 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 39258
8b095871
IC
39259 if (typeof message === 'string') {
39260 message = new Buffer(message, 'utf8')
39261 }
ebd8d4e8 39262
8b095871 39263 var m = bytesToWords(message)
ebd8d4e8 39264
8b095871
IC
39265 var nBitsLeft = message.length * 8
39266 var nBitsTotal = message.length * 8
ebd8d4e8 39267
8b095871
IC
39268 // Add padding
39269 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
39270 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
39271 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
39272 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
39273 )
ebd8d4e8 39274
8b095871
IC
39275 for (var i = 0; i < m.length; i += 16) {
39276 processBlock(H, m, i)
ebd8d4e8
IC
39277 }
39278
8b095871
IC
39279 // swap endian
39280 for (i = 0; i < 5; i++) {
39281 // shortcut
39282 var H_i = H[i]
ebd8d4e8 39283
8b095871
IC
39284 // Swap
39285 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
39286 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
39287 }
39288
8b095871
IC
39289 var digestbytes = wordsToBytes(H)
39290 return new Buffer(digestbytes)
ebd8d4e8
IC
39291}
39292
8b095871 39293module.exports = ripemd160
ebd8d4e8 39294
8b095871
IC
39295}).call(this,require("buffer").Buffer)
39296},{"buffer":5}],72:[function(require,module,exports){
39297(function (Buffer){
39298const assert = require('assert')
39299/**
39300 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
39301 * This function takes in a data, convert it to buffer if not, and a length for recursion
39302 *
39303 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39304 * @returns {Buffer} - returns buffer of encoded data
39305 **/
39306exports.encode = function (input) {
39307 if (input instanceof Array) {
39308 var output = []
39309 for (var i = 0; i < input.length; i++) {
39310 output.push(exports.encode(input[i]))
39311 }
39312 var buf = Buffer.concat(output)
39313 return Buffer.concat([encodeLength(buf.length, 192), buf])
39314 } else {
39315 input = toBuffer(input)
39316 if (input.length === 1 && input[0] < 128) {
39317 return input
39318 } else {
39319 return Buffer.concat([encodeLength(input.length, 128), input])
39320 }
39321 }
ebd8d4e8
IC
39322}
39323
8b095871
IC
39324function safeParseInt (v, base) {
39325 if (v.slice(0, 2) === '00') {
39326 throw (new Error('invalid RLP: extra zeros'))
39327 }
ebd8d4e8 39328
8b095871 39329 return parseInt(v, base)
ebd8d4e8
IC
39330}
39331
8b095871
IC
39332function encodeLength (len, offset) {
39333 if (len < 56) {
39334 return new Buffer([len + offset])
39335 } else {
39336 var hexLength = intToHex(len)
39337 var lLength = hexLength.length / 2
39338 var firstByte = intToHex(offset + 55 + lLength)
39339 return new Buffer(firstByte + hexLength, 'hex')
39340 }
39341}
ebd8d4e8 39342
8b095871
IC
39343/**
39344 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
39345 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
39346 * @returns {Array} - returns decode Array of Buffers containg the original message
39347 **/
39348exports.decode = function (input, stream) {
39349 if (!input || input.length === 0) {
39350 return new Buffer([])
39351 }
ebd8d4e8 39352
8b095871
IC
39353 input = toBuffer(input)
39354 var decoded = _decode(input)
ab78acc6 39355
8b095871
IC
39356 if (stream) {
39357 return decoded
39358 }
ebd8d4e8 39359
8b095871
IC
39360 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
39361 return decoded.data
ebd8d4e8
IC
39362}
39363
8b095871
IC
39364exports.getLength = function (input) {
39365 if (!input || input.length === 0) {
39366 return new Buffer([])
ab78acc6
IC
39367 }
39368
8b095871
IC
39369 input = toBuffer(input)
39370 var firstByte = input[0]
39371 if (firstByte <= 0x7f) {
39372 return input.length
39373 } else if (firstByte <= 0xb7) {
39374 return firstByte - 0x7f
39375 } else if (firstByte <= 0xbf) {
39376 return firstByte - 0xb6
39377 } else if (firstByte <= 0xf7) {
39378 // a list between 0-55 bytes long
39379 return firstByte - 0xbf
39380 } else {
39381 // a list over 55 bytes long
39382 var llength = firstByte - 0xf6
39383 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39384 return llength + length
39385 }
ebd8d4e8
IC
39386}
39387
8b095871
IC
39388function _decode (input) {
39389 var length, llength, data, innerRemainder, d
39390 var decoded = []
39391 var firstByte = input[0]
ebd8d4e8 39392
8b095871
IC
39393 if (firstByte <= 0x7f) {
39394 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
39395 return {
39396 data: input.slice(0, 1),
39397 remainder: input.slice(1)
39398 }
39399 } else if (firstByte <= 0xb7) {
39400 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
39401 // The range of the first byte is [0x80, 0xb7]
39402 length = firstByte - 0x7f
ebd8d4e8 39403
8b095871
IC
39404 // set 0x80 null to 0
39405 if (firstByte === 0x80) {
39406 data = new Buffer([])
39407 } else {
39408 data = input.slice(1, length)
39409 }
ebd8d4e8 39410
8b095871
IC
39411 if (length === 2 && data[0] < 0x80) {
39412 throw new Error('invalid rlp encoding: byte must be less 0x80')
39413 }
ebd8d4e8 39414
8b095871
IC
39415 return {
39416 data: data,
39417 remainder: input.slice(length)
39418 }
39419 } else if (firstByte <= 0xbf) {
39420 llength = firstByte - 0xb6
39421 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39422 data = input.slice(llength, length + llength)
39423 if (data.length < length) {
39424 throw (new Error('invalid RLP'))
39425 }
ebd8d4e8 39426
8b095871
IC
39427 return {
39428 data: data,
39429 remainder: input.slice(length + llength)
39430 }
39431 } else if (firstByte <= 0xf7) {
39432 // a list between 0-55 bytes long
39433 length = firstByte - 0xbf
39434 innerRemainder = input.slice(1, length)
39435 while (innerRemainder.length) {
39436 d = _decode(innerRemainder)
39437 decoded.push(d.data)
39438 innerRemainder = d.remainder
39439 }
ebd8d4e8 39440
8b095871
IC
39441 return {
39442 data: decoded,
39443 remainder: input.slice(length)
39444 }
39445 } else {
39446 // a list over 55 bytes long
39447 llength = firstByte - 0xf6
39448 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
39449 var totalLength = llength + length
39450 if (totalLength > input.length) {
39451 throw new Error('invalid rlp: total length is larger than the data')
39452 }
ab78acc6 39453
8b095871
IC
39454 innerRemainder = input.slice(llength, totalLength)
39455 if (innerRemainder.length === 0) {
39456 throw new Error('invalid rlp, List has a invalid length')
39457 }
ab78acc6 39458
8b095871
IC
39459 while (innerRemainder.length) {
39460 d = _decode(innerRemainder)
39461 decoded.push(d.data)
39462 innerRemainder = d.remainder
39463 }
39464 return {
39465 data: decoded,
39466 remainder: input.slice(totalLength)
39467 }
ab78acc6 39468 }
8b095871 39469}
ab78acc6 39470
8b095871
IC
39471function isHexPrefixed (str) {
39472 return str.slice(0, 2) === '0x'
ab78acc6
IC
39473}
39474
8b095871
IC
39475// Removes 0x from a given String
39476function stripHexPrefix (str) {
39477 if (typeof str !== 'string') {
39478 return str
39479 }
39480 return isHexPrefixed(str) ? str.slice(2) : str
39481}
ab78acc6 39482
8b095871
IC
39483function intToHex (i) {
39484 var hex = i.toString(16)
39485 if (hex.length % 2) {
39486 hex = '0' + hex
ab78acc6
IC
39487 }
39488
8b095871 39489 return hex
ebd8d4e8
IC
39490}
39491
8b095871
IC
39492function padToEven (a) {
39493 if (a.length % 2) a = '0' + a
39494 return a
ebd8d4e8
IC
39495}
39496
8b095871
IC
39497function intToBuffer (i) {
39498 var hex = intToHex(i)
39499 return new Buffer(hex, 'hex')
ebd8d4e8
IC
39500}
39501
8b095871
IC
39502function toBuffer (v) {
39503 if (!Buffer.isBuffer(v)) {
39504 if (typeof v === 'string') {
39505 if (isHexPrefixed(v)) {
39506 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
39507 } else {
39508 v = new Buffer(v)
39509 }
39510 } else if (typeof v === 'number') {
39511 if (!v) {
39512 v = new Buffer([])
39513 } else {
39514 v = intToBuffer(v)
39515 }
39516 } else if (v === null || v === undefined) {
39517 v = new Buffer([])
39518 } else if (v.toArray) {
39519 // converts a BN to a Buffer
39520 v = new Buffer(v.toArray())
39521 } else {
39522 throw new Error('invalid type')
39523 }
39524 }
39525 return v
ebd8d4e8
IC
39526}
39527
8b095871
IC
39528}).call(this,require("buffer").Buffer)
39529},{"assert":1,"buffer":5}],73:[function(require,module,exports){
39530'use strict'
39531module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 39532
8b095871
IC
39533},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
39534(function (Buffer){
39535'use strict'
39536var toString = Object.prototype.toString
ebd8d4e8 39537
8b095871
IC
39538// TypeError
39539exports.isArray = function (value, message) {
39540 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
39541}
39542
8b095871
IC
39543exports.isBoolean = function (value, message) {
39544 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
39545}
ebd8d4e8 39546
8b095871
IC
39547exports.isBuffer = function (value, message) {
39548 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
39549}
39550
8b095871
IC
39551exports.isFunction = function (value, message) {
39552 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
39553}
39554
8b095871
IC
39555exports.isNumber = function (value, message) {
39556 if (toString.call(value) !== '[object Number]') throw TypeError(message)
39557}
ab78acc6 39558
8b095871
IC
39559exports.isObject = function (value, message) {
39560 if (toString.call(value) !== '[object Object]') throw TypeError(message)
39561}
ebd8d4e8 39562
8b095871
IC
39563// RangeError
39564exports.isBufferLength = function (buffer, length, message) {
39565 if (buffer.length !== length) throw RangeError(message)
39566}
ebd8d4e8 39567
8b095871
IC
39568exports.isBufferLength2 = function (buffer, length1, length2, message) {
39569 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
39570}
39571
8b095871
IC
39572exports.isLengthGTZero = function (value, message) {
39573 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
39574}
39575
8b095871
IC
39576exports.isNumberInInterval = function (number, x, y, message) {
39577 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
39578}
39579
8b095871
IC
39580}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
39581},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 39582(function (Buffer){
8b095871
IC
39583'use strict'
39584var bip66 = require('bip66')
39585
39586var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
39587 // begin
39588 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
39589 // private key
39590 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39591 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39592 // middle
39593 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39594 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39595 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39596 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39597 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39598 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39599 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39600 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39601 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
39602 // public key
39603 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39604 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39605 0x00
39606])
39607
39608var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
39609 // begin
39610 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
39611 // private key
39612 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39613 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39614 // middle
39615 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
39616 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39617 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39618 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
39619 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
39620 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
39621 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
39622 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
39623 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
39624 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
39625 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
39626 // public key
39627 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39628 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39629 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39630 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39631 0x00
39632])
39633
39634var ZERO_BUFFER_32 = new Buffer([
39635 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
39636 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
39637])
39638
39639exports.privateKeyExport = function (privateKey, publicKey, compressed) {
39640 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
39641 privateKey.copy(result, compressed ? 8 : 9)
39642 publicKey.copy(result, compressed ? 181 : 214)
39643 return result
39644}
39645
39646exports.privateKeyImport = function (privateKey) {
39647 var length = privateKey.length
39648
39649 // sequence header
39650 var index = 0
39651 if (length < index + 1 || privateKey[index] !== 0x30) return
39652 index += 1
39653
39654 // sequence length constructor
39655 if (length < index + 1 || !(privateKey[index] & 0x80)) return
39656
39657 var lenb = privateKey[index] & 0x7f
39658 index += 1
39659 if (lenb < 1 || lenb > 2) return
39660 if (length < index + lenb) return
39661
39662 // sequence length
39663 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
39664 index += lenb
39665 if (length < index + len) return
39666
39667 // sequence element 0: version number (=1)
39668 if (length < index + 3 ||
39669 privateKey[index] !== 0x02 ||
39670 privateKey[index + 1] !== 0x01 ||
39671 privateKey[index + 2] !== 0x01) {
39672 return
39673 }
39674 index += 3
ab78acc6 39675
8b095871
IC
39676 // sequence element 1: octet string, up to 32 bytes
39677 if (length < index + 2 ||
39678 privateKey[index] !== 0x04 ||
39679 privateKey[index + 1] > 0x20 ||
39680 length < index + 2 + privateKey[index + 1]) {
39681 return
39682 }
ab78acc6 39683
8b095871 39684 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 39685}
ebd8d4e8 39686
8b095871
IC
39687exports.signatureExport = function (sigObj) {
39688 var r = Buffer.concat([new Buffer([0]), sigObj.r])
39689 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 39690
8b095871
IC
39691 var s = Buffer.concat([new Buffer([0]), sigObj.s])
39692 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 39693
8b095871
IC
39694 return bip66.encode(r.slice(posR), s.slice(posS))
39695}
ab78acc6 39696
8b095871
IC
39697exports.signatureImport = function (sig) {
39698 var r = new Buffer(ZERO_BUFFER_32)
39699 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39700
8b095871
IC
39701 try {
39702 var sigObj = bip66.decode(sig)
39703 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
39704 if (sigObj.r.length > 32) throw new Error('R length is too long')
39705 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
39706 if (sigObj.s.length > 32) throw new Error('S length is too long')
39707 } catch (err) {
39708 return
ab78acc6
IC
39709 }
39710
8b095871
IC
39711 sigObj.r.copy(r, 32 - sigObj.r.length)
39712 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 39713
8b095871
IC
39714 return { r: r, s: s }
39715}
ab78acc6 39716
8b095871
IC
39717exports.signatureImportLax = function (sig) {
39718 var r = new Buffer(ZERO_BUFFER_32)
39719 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 39720
8b095871
IC
39721 var length = sig.length
39722 var index = 0
ab78acc6 39723
8b095871
IC
39724 // sequence tag byte
39725 if (sig[index++] !== 0x30) return
39726
39727 // sequence length byte
39728 var lenbyte = sig[index++]
39729 if (lenbyte & 0x80) {
39730 index += lenbyte - 0x80
39731 if (index > length) return
ab78acc6
IC
39732 }
39733
8b095871
IC
39734 // sequence tag byte for r
39735 if (sig[index++] !== 0x02) return
39736
39737 // length for r
39738 var rlen = sig[index++]
39739 if (rlen & 0x80) {
39740 lenbyte = rlen - 0x80
39741 if (index + lenbyte > length) return
39742 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39743 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 39744 }
8b095871
IC
39745 if (rlen > length - index) return
39746 var rindex = index
39747 index += rlen
ab78acc6 39748
8b095871
IC
39749 // sequence tag byte for s
39750 if (sig[index++] !== 0x02) return
ab78acc6 39751
8b095871
IC
39752 // length for s
39753 var slen = sig[index++]
39754 if (slen & 0x80) {
39755 lenbyte = slen - 0x80
39756 if (index + lenbyte > length) return
39757 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
39758 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 39759 }
8b095871
IC
39760 if (slen > length - index) return
39761 var sindex = index
39762 index += slen
ab78acc6 39763
8b095871
IC
39764 // ignore leading zeros in r
39765 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
39766 // copy r value
39767 if (rlen > 32) return
39768 var rvalue = sig.slice(rindex, rindex + rlen)
39769 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 39770
8b095871
IC
39771 // ignore leading zeros in s
39772 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
39773 // copy s value
39774 if (slen > 32) return
39775 var svalue = sig.slice(sindex, sindex + slen)
39776 svalue.copy(s, 32 - svalue.length)
39777
39778 return { r: r, s: s }
ab78acc6
IC
39779}
39780
8b095871
IC
39781}).call(this,require("buffer").Buffer)
39782},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
39783(function (Buffer){
39784'use strict'
39785var createHash = require('create-hash')
39786var BN = require('bn.js')
39787var EC = require('elliptic').ec
39788
39789var messages = require('../messages.json')
39790
39791var ec = new EC('secp256k1')
39792var ecparams = ec.curve
39793
39794function loadCompressedPublicKey (first, xBuffer) {
39795 var x = new BN(xBuffer)
39796
39797 // overflow
39798 if (x.cmp(ecparams.p) >= 0) return null
39799 x = x.toRed(ecparams.red)
39800
39801 // compute corresponding Y
39802 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
39803 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
39804
39805 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39806}
39807
8b095871
IC
39808function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
39809 var x = new BN(xBuffer)
39810 var y = new BN(yBuffer)
ebd8d4e8 39811
8b095871
IC
39812 // overflow
39813 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 39814
8b095871
IC
39815 x = x.toRed(ecparams.red)
39816 y = y.toRed(ecparams.red)
ebd8d4e8 39817
8b095871
IC
39818 // is odd flag
39819 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 39820
8b095871
IC
39821 // x*x*x + b = y*y
39822 var x3 = x.redSqr().redIMul(x)
39823 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 39824
8b095871 39825 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
39826}
39827
8b095871
IC
39828function loadPublicKey (publicKey) {
39829 var first = publicKey[0]
39830 switch (first) {
39831 case 0x02:
39832 case 0x03:
39833 if (publicKey.length !== 33) return null
39834 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
39835 case 0x04:
39836 case 0x06:
39837 case 0x07:
39838 if (publicKey.length !== 65) return null
39839 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
39840 default:
39841 return null
ebd8d4e8 39842 }
8b095871 39843}
ebd8d4e8 39844
8b095871
IC
39845exports.privateKeyVerify = function (privateKey) {
39846 var bn = new BN(privateKey)
39847 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
39848}
ebd8d4e8 39849
8b095871
IC
39850exports.privateKeyExport = function (privateKey, compressed) {
39851 var d = new BN(privateKey)
39852 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 39853
8b095871 39854 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
39855}
39856
8b095871
IC
39857exports.privateKeyTweakAdd = function (privateKey, tweak) {
39858 var bn = new BN(tweak)
39859 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39860
8b095871
IC
39861 bn.iadd(new BN(privateKey))
39862 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
39863 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 39864
8b095871
IC
39865 return bn.toArrayLike(Buffer, 'be', 32)
39866}
39867
39868exports.privateKeyTweakMul = function (privateKey, tweak) {
39869 var bn = new BN(tweak)
39870 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
39871
39872 bn.imul(new BN(privateKey))
39873 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
39874
39875 return bn.toArrayLike(Buffer, 'be', 32)
39876}
39877
39878exports.publicKeyCreate = function (privateKey, compressed) {
39879 var d = new BN(privateKey)
39880 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
39881
39882 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
39883}
39884
39885exports.publicKeyConvert = function (publicKey, compressed) {
39886 var pair = loadPublicKey(publicKey)
39887 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39888
8b095871 39889 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
39890}
39891
8b095871
IC
39892exports.publicKeyVerify = function (publicKey) {
39893 return loadPublicKey(publicKey) !== null
39894}
ab78acc6 39895
8b095871
IC
39896exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
39897 var pair = loadPublicKey(publicKey)
39898 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39899
8b095871
IC
39900 tweak = new BN(tweak)
39901 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 39902
8b095871
IC
39903 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
39904}
ab78acc6 39905
8b095871
IC
39906exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
39907 var pair = loadPublicKey(publicKey)
39908 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 39909
8b095871
IC
39910 tweak = new BN(tweak)
39911 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 39912
8b095871
IC
39913 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
39914}
ab78acc6 39915
8b095871
IC
39916exports.publicKeyCombine = function (publicKeys, compressed) {
39917 var pairs = new Array(publicKeys.length)
39918 for (var i = 0; i < publicKeys.length; ++i) {
39919 pairs[i] = loadPublicKey(publicKeys[i])
39920 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
39921 }
39922
8b095871
IC
39923 var point = pairs[0].pub
39924 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
39925 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 39926
8b095871
IC
39927 return new Buffer(point.encode(true, compressed))
39928}
ab78acc6 39929
8b095871
IC
39930exports.signatureNormalize = function (signature) {
39931 var r = new BN(signature.slice(0, 32))
39932 var s = new BN(signature.slice(32, 64))
39933 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
39934
39935 var result = new Buffer(signature)
39936 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
39937
39938 return result
ab78acc6
IC
39939}
39940
8b095871
IC
39941exports.signatureExport = function (signature) {
39942 var r = signature.slice(0, 32)
39943 var s = signature.slice(32, 64)
39944 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
39945
39946 return { r: r, s: s }
ab78acc6
IC
39947}
39948
8b095871
IC
39949exports.signatureImport = function (sigObj) {
39950 var r = new BN(sigObj.r)
39951 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
39952
39953 var s = new BN(sigObj.s)
39954 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
39955
39956 return Buffer.concat([
39957 r.toArrayLike(Buffer, 'be', 32),
39958 s.toArrayLike(Buffer, 'be', 32)
39959 ])
ab78acc6
IC
39960}
39961
8b095871
IC
39962exports.sign = function (message, privateKey, noncefn, data) {
39963 if (typeof noncefn === 'function') {
39964 var getNonce = noncefn
39965 noncefn = function (counter) {
39966 var nonce = getNonce(message, privateKey, null, data, counter)
39967 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 39968
8b095871
IC
39969 return new BN(nonce)
39970 }
ab78acc6 39971 }
ebd8d4e8 39972
8b095871
IC
39973 var d = new BN(privateKey)
39974 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 39975
8b095871
IC
39976 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
39977 return {
39978 signature: Buffer.concat([
39979 result.r.toArrayLike(Buffer, 'be', 32),
39980 result.s.toArrayLike(Buffer, 'be', 32)
39981 ]),
39982 recovery: result.recoveryParam
ebd8d4e8 39983 }
8b095871 39984}
ab78acc6 39985
8b095871
IC
39986exports.verify = function (message, signature, publicKey) {
39987 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 39988
8b095871
IC
39989 var sigr = new BN(sigObj.r)
39990 var sigs = new BN(sigObj.s)
39991 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
39992 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 39993
8b095871
IC
39994 var pair = loadPublicKey(publicKey)
39995 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 39996
8b095871
IC
39997 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
39998}
ebd8d4e8 39999
8b095871
IC
40000exports.recover = function (message, signature, recovery, compressed) {
40001 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 40002
8b095871
IC
40003 var sigr = new BN(sigObj.r)
40004 var sigs = new BN(sigObj.s)
40005 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 40006
8b095871
IC
40007 try {
40008 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 40009
8b095871
IC
40010 var point = ec.recoverPubKey(message, sigObj, recovery)
40011 return new Buffer(point.encode(true, compressed))
40012 } catch (err) {
40013 throw new Error(messages.ECDSA_RECOVER_FAIL)
40014 }
ebd8d4e8
IC
40015}
40016
8b095871
IC
40017exports.ecdh = function (publicKey, privateKey) {
40018 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
40019 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
40020}
40021
8b095871
IC
40022exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
40023 var pair = loadPublicKey(publicKey)
40024 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 40025
8b095871
IC
40026 var scalar = new BN(privateKey)
40027 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
40028
40029 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
40030}
40031
8b095871
IC
40032}).call(this,require("buffer").Buffer)
40033},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
40034'use strict'
40035var assert = require('./assert')
40036var der = require('./der')
40037var messages = require('./messages.json')
ab78acc6 40038
8b095871
IC
40039function initCompressedValue (value, defaultValue) {
40040 if (value === undefined) return defaultValue
ab78acc6 40041
8b095871
IC
40042 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
40043 return value
ab78acc6
IC
40044}
40045
8b095871
IC
40046module.exports = function (secp256k1) {
40047 return {
40048 privateKeyVerify: function (privateKey) {
40049 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40050 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
40051 },
ab78acc6 40052
8b095871
IC
40053 privateKeyExport: function (privateKey, compressed) {
40054 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40055 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40056
8b095871
IC
40057 compressed = initCompressedValue(compressed, true)
40058 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 40059
8b095871
IC
40060 return der.privateKeyExport(privateKey, publicKey, compressed)
40061 },
ab78acc6 40062
8b095871
IC
40063 privateKeyImport: function (privateKey) {
40064 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 40065
8b095871
IC
40066 privateKey = der.privateKeyImport(privateKey)
40067 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 40068
8b095871
IC
40069 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
40070 },
ab78acc6 40071
8b095871
IC
40072 privateKeyTweakAdd: function (privateKey, tweak) {
40073 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40074 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40075
8b095871
IC
40076 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40077 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40078
8b095871
IC
40079 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
40080 },
ab78acc6 40081
8b095871
IC
40082 privateKeyTweakMul: function (privateKey, tweak) {
40083 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40084 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40085
8b095871
IC
40086 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40087 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 40088
8b095871
IC
40089 return secp256k1.privateKeyTweakMul(privateKey, tweak)
40090 },
ab78acc6 40091
8b095871
IC
40092 publicKeyCreate: function (privateKey, compressed) {
40093 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40094 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40095
8b095871 40096 compressed = initCompressedValue(compressed, true)
ab78acc6 40097
8b095871
IC
40098 return secp256k1.publicKeyCreate(privateKey, compressed)
40099 },
ab78acc6 40100
8b095871
IC
40101 publicKeyConvert: function (publicKey, compressed) {
40102 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40103 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40104
8b095871
IC
40105 compressed = initCompressedValue(compressed, true)
40106
40107 return secp256k1.publicKeyConvert(publicKey, compressed)
40108 },
40109
40110 publicKeyVerify: function (publicKey) {
40111 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40112 return secp256k1.publicKeyVerify(publicKey)
40113 },
40114
40115 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
40116 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40117 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40118
40119 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40120 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40121
40122 compressed = initCompressedValue(compressed, true)
40123
40124 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
40125 },
40126
40127 publicKeyTweakMul: function (publicKey, tweak, compressed) {
40128 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40129 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40130
40131 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
40132 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
40133
40134 compressed = initCompressedValue(compressed, true)
40135
40136 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
40137 },
40138
40139 publicKeyCombine: function (publicKeys, compressed) {
40140 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
40141 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
40142 for (var i = 0; i < publicKeys.length; ++i) {
40143 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
40144 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
40145 }
40146
8b095871 40147 compressed = initCompressedValue(compressed, true)
ab78acc6 40148
8b095871
IC
40149 return secp256k1.publicKeyCombine(publicKeys, compressed)
40150 },
ab78acc6 40151
8b095871
IC
40152 signatureNormalize: function (signature) {
40153 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40154 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40155
8b095871
IC
40156 return secp256k1.signatureNormalize(signature)
40157 },
ab78acc6 40158
8b095871
IC
40159 signatureExport: function (signature) {
40160 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40161 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40162
40163 var sigObj = secp256k1.signatureExport(signature)
40164 return der.signatureExport(sigObj)
40165 },
40166
40167 signatureImport: function (sig) {
40168 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40169 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40170
40171 var sigObj = der.signatureImport(sig)
40172 if (sigObj) return secp256k1.signatureImport(sigObj)
40173
40174 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40175 },
40176
40177 signatureImportLax: function (sig) {
40178 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40179 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
40180
40181 var sigObj = der.signatureImportLax(sig)
40182 if (sigObj) return secp256k1.signatureImport(sigObj)
40183
40184 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
40185 },
40186
40187 sign: function (message, privateKey, options) {
40188 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40189 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
40190
40191 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40192 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
40193
40194 var data = null
40195 var noncefn = null
40196 if (options !== undefined) {
40197 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
40198
40199 if (options.data !== undefined) {
40200 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
40201 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
40202 data = options.data
40203 }
40204
40205 if (options.noncefn !== undefined) {
40206 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
40207 noncefn = options.noncefn
40208 }
ab78acc6
IC
40209 }
40210
8b095871
IC
40211 return secp256k1.sign(message, privateKey, noncefn, data)
40212 },
ab78acc6 40213
8b095871
IC
40214 verify: function (message, signature, publicKey) {
40215 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40216 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40217
8b095871
IC
40218 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40219 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40220
8b095871
IC
40221 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40222 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
40223
40224 return secp256k1.verify(message, signature, publicKey)
40225 },
ab78acc6 40226
8b095871
IC
40227 recover: function (message, signature, recovery, compressed) {
40228 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
40229 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 40230
8b095871
IC
40231 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
40232 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 40233
8b095871
IC
40234 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
40235 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 40236
8b095871 40237 compressed = initCompressedValue(compressed, true)
ab78acc6 40238
8b095871
IC
40239 return secp256k1.recover(message, signature, recovery, compressed)
40240 },
ab78acc6 40241
8b095871
IC
40242 ecdh: function (publicKey, privateKey) {
40243 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40244 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40245
8b095871
IC
40246 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40247 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40248
8b095871
IC
40249 return secp256k1.ecdh(publicKey, privateKey)
40250 },
ab78acc6 40251
8b095871
IC
40252 ecdhUnsafe: function (publicKey, privateKey, compressed) {
40253 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
40254 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 40255
8b095871
IC
40256 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
40257 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 40258
8b095871 40259 compressed = initCompressedValue(compressed, true)
ab78acc6 40260
8b095871
IC
40261 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
40262 }
40263 }
40264}
ab78acc6 40265
8b095871
IC
40266},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
40267module.exports={
40268 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
40269 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
40270 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
40271 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
40272 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40273 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
40274 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
40275 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
40276 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
40277 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
40278 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
40279 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
40280 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
40281 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
40282 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
40283 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
40284 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
40285 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
40286 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
40287 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
40288 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
40289 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
40290 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
40291 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
40292 "MSG32_TYPE_INVALID": "message should be a Buffer",
40293 "MSG32_LENGTH_INVALID": "message length is invalid",
40294 "OPTIONS_TYPE_INVALID": "options should be an Object",
40295 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
40296 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
40297 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
40298 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
40299 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
40300 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
40301 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
40302}
40303
40304},{}],79:[function(require,module,exports){
40305(function (Buffer){
40306// prototype class for hash functions
40307function Hash (blockSize, finalSize) {
40308 this._block = new Buffer(blockSize)
40309 this._finalSize = finalSize
40310 this._blockSize = blockSize
40311 this._len = 0
40312 this._s = 0
40313}
40314
40315Hash.prototype.update = function (data, enc) {
40316 if (typeof data === 'string') {
40317 enc = enc || 'utf8'
40318 data = new Buffer(data, enc)
ab78acc6
IC
40319 }
40320
8b095871
IC
40321 var l = this._len += data.length
40322 var s = this._s || 0
40323 var f = 0
40324 var buffer = this._block
ab78acc6 40325
8b095871
IC
40326 while (s < l) {
40327 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
40328 var ch = (t - f)
ab78acc6 40329
8b095871
IC
40330 for (var i = 0; i < ch; i++) {
40331 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
40332 }
40333
8b095871
IC
40334 s += ch
40335 f += ch
ab78acc6 40336
8b095871
IC
40337 if ((s % this._blockSize) === 0) {
40338 this._update(buffer)
40339 }
ab78acc6 40340 }
8b095871 40341 this._s = s
ab78acc6 40342
8b095871
IC
40343 return this
40344}
ab78acc6 40345
8b095871
IC
40346Hash.prototype.digest = function (enc) {
40347 // Suppose the length of the message M, in bits, is l
40348 var l = this._len * 8
ab78acc6 40349
8b095871
IC
40350 // Append the bit 1 to the end of the message
40351 this._block[this._len % this._blockSize] = 0x80
ab78acc6 40352
8b095871
IC
40353 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
40354 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 40355
8b095871
IC
40356 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
40357 this._update(this._block)
40358 this._block.fill(0)
40359 }
ab78acc6 40360
8b095871
IC
40361 // to this append the block which is equal to the number l written in binary
40362 // TODO: handle case where l is > Math.pow(2, 29)
40363 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 40364
8b095871 40365 var hash = this._update(this._block) || this._hash()
ebd8d4e8 40366
8b095871 40367 return enc ? hash.toString(enc) : hash
ab78acc6 40368}
ebd8d4e8 40369
8b095871
IC
40370Hash.prototype._update = function () {
40371 throw new Error('_update must be implemented by subclass')
ab78acc6 40372}
8b095871
IC
40373
40374module.exports = Hash
40375
40376}).call(this,require("buffer").Buffer)
40377},{"buffer":5}],80:[function(require,module,exports){
40378var exports = module.exports = function SHA (algorithm) {
40379 algorithm = algorithm.toLowerCase()
40380
40381 var Algorithm = exports[algorithm]
40382 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
40383
40384 return new Algorithm()
ab78acc6 40385}
ebd8d4e8 40386
8b095871
IC
40387exports.sha = require('./sha')
40388exports.sha1 = require('./sha1')
40389exports.sha224 = require('./sha224')
40390exports.sha256 = require('./sha256')
40391exports.sha384 = require('./sha384')
40392exports.sha512 = require('./sha512')
40393
40394},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
40395(function (Buffer){
40396/*
40397 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
40398 * in FIPS PUB 180-1
40399 * This source code is derived from sha1.js of the same repository.
40400 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
40401 * operation was added.
40402 */
40403
40404var inherits = require('inherits')
40405var Hash = require('./hash')
40406
40407var K = [
40408 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40409]
40410
40411var W = new Array(80)
40412
40413function Sha () {
40414 this.init()
40415 this._w = W
40416
40417 Hash.call(this, 64, 56)
ab78acc6 40418}
ebd8d4e8 40419
8b095871 40420inherits(Sha, Hash)
ebd8d4e8 40421
8b095871
IC
40422Sha.prototype.init = function () {
40423 this._a = 0x67452301
40424 this._b = 0xefcdab89
40425 this._c = 0x98badcfe
40426 this._d = 0x10325476
40427 this._e = 0xc3d2e1f0
ebd8d4e8 40428
8b095871
IC
40429 return this
40430}
ebd8d4e8 40431
8b095871
IC
40432function rotl5 (num) {
40433 return (num << 5) | (num >>> 27)
40434}
ebd8d4e8 40435
8b095871
IC
40436function rotl30 (num) {
40437 return (num << 30) | (num >>> 2)
40438}
ebd8d4e8 40439
8b095871
IC
40440function ft (s, b, c, d) {
40441 if (s === 0) return (b & c) | ((~b) & d)
40442 if (s === 2) return (b & c) | (b & d) | (c & d)
40443 return b ^ c ^ d
40444}
ebd8d4e8 40445
8b095871
IC
40446Sha.prototype._update = function (M) {
40447 var W = this._w
ebd8d4e8 40448
8b095871
IC
40449 var a = this._a | 0
40450 var b = this._b | 0
40451 var c = this._c | 0
40452 var d = this._d | 0
40453 var e = this._e | 0
ebd8d4e8 40454
8b095871
IC
40455 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40456 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 40457
8b095871
IC
40458 for (var j = 0; j < 80; ++j) {
40459 var s = ~~(j / 20)
40460 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 40461
8b095871
IC
40462 e = d
40463 d = c
40464 c = rotl30(b)
40465 b = a
40466 a = t
40467 }
40468
40469 this._a = (a + this._a) | 0
40470 this._b = (b + this._b) | 0
40471 this._c = (c + this._c) | 0
40472 this._d = (d + this._d) | 0
40473 this._e = (e + this._e) | 0
40474}
40475
40476Sha.prototype._hash = function () {
40477 var H = new Buffer(20)
ab78acc6 40478
8b095871
IC
40479 H.writeInt32BE(this._a | 0, 0)
40480 H.writeInt32BE(this._b | 0, 4)
40481 H.writeInt32BE(this._c | 0, 8)
40482 H.writeInt32BE(this._d | 0, 12)
40483 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 40484
8b095871 40485 return H
ebd8d4e8
IC
40486}
40487
8b095871 40488module.exports = Sha
ebd8d4e8 40489
8b095871
IC
40490}).call(this,require("buffer").Buffer)
40491},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
40492(function (Buffer){
40493/*
40494 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
40495 * in FIPS PUB 180-1
40496 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
40497 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40498 * Distributed under the BSD License
40499 * See http://pajhome.org.uk/crypt/md5 for details.
40500 */
ebd8d4e8 40501
8b095871
IC
40502var inherits = require('inherits')
40503var Hash = require('./hash')
ebd8d4e8 40504
8b095871
IC
40505var K = [
40506 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
40507]
ebd8d4e8 40508
8b095871 40509var W = new Array(80)
ab78acc6 40510
8b095871
IC
40511function Sha1 () {
40512 this.init()
40513 this._w = W
ebd8d4e8 40514
8b095871
IC
40515 Hash.call(this, 64, 56)
40516}
ebd8d4e8 40517
8b095871 40518inherits(Sha1, Hash)
ebd8d4e8 40519
8b095871
IC
40520Sha1.prototype.init = function () {
40521 this._a = 0x67452301
40522 this._b = 0xefcdab89
40523 this._c = 0x98badcfe
40524 this._d = 0x10325476
40525 this._e = 0xc3d2e1f0
ebd8d4e8 40526
8b095871
IC
40527 return this
40528}
ebd8d4e8 40529
8b095871
IC
40530function rotl1 (num) {
40531 return (num << 1) | (num >>> 31)
40532}
ebd8d4e8 40533
8b095871
IC
40534function rotl5 (num) {
40535 return (num << 5) | (num >>> 27)
40536}
ebd8d4e8 40537
8b095871
IC
40538function rotl30 (num) {
40539 return (num << 30) | (num >>> 2)
40540}
ebd8d4e8 40541
8b095871
IC
40542function ft (s, b, c, d) {
40543 if (s === 0) return (b & c) | ((~b) & d)
40544 if (s === 2) return (b & c) | (b & d) | (c & d)
40545 return b ^ c ^ d
40546}
ebd8d4e8 40547
8b095871
IC
40548Sha1.prototype._update = function (M) {
40549 var W = this._w
ebd8d4e8 40550
8b095871
IC
40551 var a = this._a | 0
40552 var b = this._b | 0
40553 var c = this._c | 0
40554 var d = this._d | 0
40555 var e = this._e | 0
ebd8d4e8 40556
8b095871
IC
40557 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40558 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
40559
40560 for (var j = 0; j < 80; ++j) {
40561 var s = ~~(j / 20)
40562 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
40563
40564 e = d
40565 d = c
40566 c = rotl30(b)
40567 b = a
40568 a = t
ab78acc6
IC
40569 }
40570
8b095871
IC
40571 this._a = (a + this._a) | 0
40572 this._b = (b + this._b) | 0
40573 this._c = (c + this._c) | 0
40574 this._d = (d + this._d) | 0
40575 this._e = (e + this._e) | 0
40576}
ab78acc6 40577
8b095871
IC
40578Sha1.prototype._hash = function () {
40579 var H = new Buffer(20)
ab78acc6 40580
8b095871
IC
40581 H.writeInt32BE(this._a | 0, 0)
40582 H.writeInt32BE(this._b | 0, 4)
40583 H.writeInt32BE(this._c | 0, 8)
40584 H.writeInt32BE(this._d | 0, 12)
40585 H.writeInt32BE(this._e | 0, 16)
ab78acc6 40586
8b095871
IC
40587 return H
40588}
ab78acc6 40589
8b095871 40590module.exports = Sha1
ab78acc6 40591
8b095871
IC
40592}).call(this,require("buffer").Buffer)
40593},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
40594(function (Buffer){
40595/**
40596 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40597 * in FIPS 180-2
40598 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40599 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40600 *
40601 */
ab78acc6 40602
8b095871
IC
40603var inherits = require('inherits')
40604var Sha256 = require('./sha256')
40605var Hash = require('./hash')
ab78acc6 40606
8b095871 40607var W = new Array(64)
ab78acc6 40608
8b095871
IC
40609function Sha224 () {
40610 this.init()
ab78acc6 40611
8b095871 40612 this._w = W // new Array(64)
ebd8d4e8 40613
8b095871
IC
40614 Hash.call(this, 64, 56)
40615}
ebd8d4e8 40616
8b095871 40617inherits(Sha224, Sha256)
ebd8d4e8 40618
8b095871
IC
40619Sha224.prototype.init = function () {
40620 this._a = 0xc1059ed8
40621 this._b = 0x367cd507
40622 this._c = 0x3070dd17
40623 this._d = 0xf70e5939
40624 this._e = 0xffc00b31
40625 this._f = 0x68581511
40626 this._g = 0x64f98fa7
40627 this._h = 0xbefa4fa4
ebd8d4e8 40628
8b095871
IC
40629 return this
40630}
ab78acc6 40631
8b095871
IC
40632Sha224.prototype._hash = function () {
40633 var H = new Buffer(28)
ebd8d4e8 40634
8b095871
IC
40635 H.writeInt32BE(this._a, 0)
40636 H.writeInt32BE(this._b, 4)
40637 H.writeInt32BE(this._c, 8)
40638 H.writeInt32BE(this._d, 12)
40639 H.writeInt32BE(this._e, 16)
40640 H.writeInt32BE(this._f, 20)
40641 H.writeInt32BE(this._g, 24)
ab78acc6 40642
8b095871
IC
40643 return H
40644}
ebd8d4e8 40645
8b095871 40646module.exports = Sha224
ebd8d4e8 40647
8b095871
IC
40648}).call(this,require("buffer").Buffer)
40649},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
40650(function (Buffer){
40651/**
40652 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
40653 * in FIPS 180-2
40654 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
40655 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
40656 *
40657 */
ebd8d4e8 40658
8b095871
IC
40659var inherits = require('inherits')
40660var Hash = require('./hash')
ab78acc6 40661
8b095871
IC
40662var K = [
40663 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
40664 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
40665 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
40666 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
40667 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
40668 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
40669 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
40670 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
40671 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
40672 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
40673 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
40674 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
40675 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
40676 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
40677 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
40678 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
40679]
ebd8d4e8 40680
8b095871 40681var W = new Array(64)
ebd8d4e8 40682
8b095871
IC
40683function Sha256 () {
40684 this.init()
ebd8d4e8 40685
8b095871 40686 this._w = W // new Array(64)
ebd8d4e8 40687
8b095871 40688 Hash.call(this, 64, 56)
ab78acc6 40689}
ebd8d4e8 40690
8b095871 40691inherits(Sha256, Hash)
ebd8d4e8 40692
8b095871
IC
40693Sha256.prototype.init = function () {
40694 this._a = 0x6a09e667
40695 this._b = 0xbb67ae85
40696 this._c = 0x3c6ef372
40697 this._d = 0xa54ff53a
40698 this._e = 0x510e527f
40699 this._f = 0x9b05688c
40700 this._g = 0x1f83d9ab
40701 this._h = 0x5be0cd19
ebd8d4e8 40702
8b095871
IC
40703 return this
40704}
ebd8d4e8 40705
8b095871
IC
40706function ch (x, y, z) {
40707 return z ^ (x & (y ^ z))
40708}
ebd8d4e8 40709
8b095871
IC
40710function maj (x, y, z) {
40711 return (x & y) | (z & (x | y))
40712}
ebd8d4e8 40713
8b095871
IC
40714function sigma0 (x) {
40715 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
40716}
ebd8d4e8 40717
8b095871
IC
40718function sigma1 (x) {
40719 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
40720}
ebd8d4e8 40721
8b095871
IC
40722function gamma0 (x) {
40723 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
40724}
ebd8d4e8 40725
8b095871
IC
40726function gamma1 (x) {
40727 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
40728}
ab78acc6 40729
8b095871
IC
40730Sha256.prototype._update = function (M) {
40731 var W = this._w
ebd8d4e8 40732
8b095871
IC
40733 var a = this._a | 0
40734 var b = this._b | 0
40735 var c = this._c | 0
40736 var d = this._d | 0
40737 var e = this._e | 0
40738 var f = this._f | 0
40739 var g = this._g | 0
40740 var h = this._h | 0
ab78acc6 40741
8b095871
IC
40742 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
40743 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 40744
8b095871
IC
40745 for (var j = 0; j < 64; ++j) {
40746 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
40747 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 40748
8b095871
IC
40749 h = g
40750 g = f
40751 f = e
40752 e = (d + T1) | 0
40753 d = c
40754 c = b
40755 b = a
40756 a = (T1 + T2) | 0
ebd8d4e8
IC
40757 }
40758
8b095871
IC
40759 this._a = (a + this._a) | 0
40760 this._b = (b + this._b) | 0
40761 this._c = (c + this._c) | 0
40762 this._d = (d + this._d) | 0
40763 this._e = (e + this._e) | 0
40764 this._f = (f + this._f) | 0
40765 this._g = (g + this._g) | 0
40766 this._h = (h + this._h) | 0
ab78acc6 40767}
ebd8d4e8 40768
8b095871
IC
40769Sha256.prototype._hash = function () {
40770 var H = new Buffer(32)
ebd8d4e8 40771
8b095871
IC
40772 H.writeInt32BE(this._a, 0)
40773 H.writeInt32BE(this._b, 4)
40774 H.writeInt32BE(this._c, 8)
40775 H.writeInt32BE(this._d, 12)
40776 H.writeInt32BE(this._e, 16)
40777 H.writeInt32BE(this._f, 20)
40778 H.writeInt32BE(this._g, 24)
40779 H.writeInt32BE(this._h, 28)
40780
40781 return H
ab78acc6 40782}
ebd8d4e8 40783
8b095871 40784module.exports = Sha256
ebd8d4e8 40785
8b095871
IC
40786}).call(this,require("buffer").Buffer)
40787},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
40788(function (Buffer){
40789var inherits = require('inherits')
40790var SHA512 = require('./sha512')
40791var Hash = require('./hash')
ebd8d4e8 40792
8b095871 40793var W = new Array(160)
ebd8d4e8 40794
8b095871
IC
40795function Sha384 () {
40796 this.init()
40797 this._w = W
ab78acc6 40798
8b095871
IC
40799 Hash.call(this, 128, 112)
40800}
ab78acc6 40801
8b095871 40802inherits(Sha384, SHA512)
ebd8d4e8 40803
8b095871
IC
40804Sha384.prototype.init = function () {
40805 this._ah = 0xcbbb9d5d
40806 this._bh = 0x629a292a
40807 this._ch = 0x9159015a
40808 this._dh = 0x152fecd8
40809 this._eh = 0x67332667
40810 this._fh = 0x8eb44a87
40811 this._gh = 0xdb0c2e0d
40812 this._hh = 0x47b5481d
40813
40814 this._al = 0xc1059ed8
40815 this._bl = 0x367cd507
40816 this._cl = 0x3070dd17
40817 this._dl = 0xf70e5939
40818 this._el = 0xffc00b31
40819 this._fl = 0x68581511
40820 this._gl = 0x64f98fa7
40821 this._hl = 0xbefa4fa4
ebd8d4e8 40822
8b095871
IC
40823 return this
40824}
ebd8d4e8 40825
8b095871
IC
40826Sha384.prototype._hash = function () {
40827 var H = new Buffer(48)
ebd8d4e8 40828
8b095871
IC
40829 function writeInt64BE (h, l, offset) {
40830 H.writeInt32BE(h, offset)
40831 H.writeInt32BE(l, offset + 4)
40832 }
ebd8d4e8 40833
8b095871
IC
40834 writeInt64BE(this._ah, this._al, 0)
40835 writeInt64BE(this._bh, this._bl, 8)
40836 writeInt64BE(this._ch, this._cl, 16)
40837 writeInt64BE(this._dh, this._dl, 24)
40838 writeInt64BE(this._eh, this._el, 32)
40839 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 40840
8b095871 40841 return H
ab78acc6 40842}
ebd8d4e8 40843
8b095871
IC
40844module.exports = Sha384
40845
40846}).call(this,require("buffer").Buffer)
40847},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
40848(function (Buffer){
40849var inherits = require('inherits')
40850var Hash = require('./hash')
40851
40852var K = [
40853 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
40854 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
40855 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
40856 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
40857 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
40858 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
40859 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
40860 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
40861 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
40862 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
40863 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
40864 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
40865 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
40866 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
40867 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
40868 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
40869 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
40870 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
40871 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
40872 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
40873 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
40874 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
40875 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
40876 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
40877 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
40878 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
40879 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
40880 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
40881 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
40882 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
40883 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
40884 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
40885 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
40886 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
40887 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
40888 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
40889 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
40890 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
40891 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
40892 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
40893]
40894
40895var W = new Array(160)
ebd8d4e8 40896
8b095871
IC
40897function Sha512 () {
40898 this.init()
40899 this._w = W
ebd8d4e8 40900
8b095871 40901 Hash.call(this, 128, 112)
ab78acc6 40902}
ebd8d4e8 40903
8b095871 40904inherits(Sha512, Hash)
ebd8d4e8 40905
8b095871
IC
40906Sha512.prototype.init = function () {
40907 this._ah = 0x6a09e667
40908 this._bh = 0xbb67ae85
40909 this._ch = 0x3c6ef372
40910 this._dh = 0xa54ff53a
40911 this._eh = 0x510e527f
40912 this._fh = 0x9b05688c
40913 this._gh = 0x1f83d9ab
40914 this._hh = 0x5be0cd19
40915
40916 this._al = 0xf3bcc908
40917 this._bl = 0x84caa73b
40918 this._cl = 0xfe94f82b
40919 this._dl = 0x5f1d36f1
40920 this._el = 0xade682d1
40921 this._fl = 0x2b3e6c1f
40922 this._gl = 0xfb41bd6b
40923 this._hl = 0x137e2179
ebd8d4e8 40924
8b095871 40925 return this
ab78acc6 40926}
ebd8d4e8 40927
8b095871
IC
40928function Ch (x, y, z) {
40929 return z ^ (x & (y ^ z))
40930}
ebd8d4e8 40931
8b095871
IC
40932function maj (x, y, z) {
40933 return (x & y) | (z & (x | y))
ab78acc6 40934}
ebd8d4e8 40935
8b095871
IC
40936function sigma0 (x, xl) {
40937 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
40938}
ebd8d4e8 40939
8b095871
IC
40940function sigma1 (x, xl) {
40941 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
40942}
ab78acc6 40943
8b095871
IC
40944function Gamma0 (x, xl) {
40945 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 40946}
ebd8d4e8 40947
8b095871
IC
40948function Gamma0l (x, xl) {
40949 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
40950}
ebd8d4e8 40951
8b095871
IC
40952function Gamma1 (x, xl) {
40953 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
40954}
40955
8b095871
IC
40956function Gamma1l (x, xl) {
40957 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
40958}
40959
8b095871
IC
40960function getCarry (a, b) {
40961 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
40962}
40963
8b095871
IC
40964Sha512.prototype._update = function (M) {
40965 var W = this._w
ebd8d4e8 40966
8b095871
IC
40967 var ah = this._ah | 0
40968 var bh = this._bh | 0
40969 var ch = this._ch | 0
40970 var dh = this._dh | 0
40971 var eh = this._eh | 0
40972 var fh = this._fh | 0
40973 var gh = this._gh | 0
40974 var hh = this._hh | 0
ebd8d4e8 40975
8b095871
IC
40976 var al = this._al | 0
40977 var bl = this._bl | 0
40978 var cl = this._cl | 0
40979 var dl = this._dl | 0
40980 var el = this._el | 0
40981 var fl = this._fl | 0
40982 var gl = this._gl | 0
40983 var hl = this._hl | 0
ebd8d4e8 40984
8b095871
IC
40985 for (var i = 0; i < 32; i += 2) {
40986 W[i] = M.readInt32BE(i * 4)
40987 W[i + 1] = M.readInt32BE(i * 4 + 4)
40988 }
40989 for (; i < 160; i += 2) {
40990 var xh = W[i - 15 * 2]
40991 var xl = W[i - 15 * 2 + 1]
40992 var gamma0 = Gamma0(xh, xl)
40993 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 40994
8b095871
IC
40995 xh = W[i - 2 * 2]
40996 xl = W[i - 2 * 2 + 1]
40997 var gamma1 = Gamma1(xh, xl)
40998 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 40999
8b095871
IC
41000 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
41001 var Wi7h = W[i - 7 * 2]
41002 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 41003
8b095871
IC
41004 var Wi16h = W[i - 16 * 2]
41005 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 41006
8b095871
IC
41007 var Wil = (gamma0l + Wi7l) | 0
41008 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
41009 Wil = (Wil + gamma1l) | 0
41010 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
41011 Wil = (Wil + Wi16l) | 0
41012 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 41013
8b095871
IC
41014 W[i] = Wih
41015 W[i + 1] = Wil
41016 }
ebd8d4e8 41017
8b095871
IC
41018 for (var j = 0; j < 160; j += 2) {
41019 Wih = W[j]
41020 Wil = W[j + 1]
ebd8d4e8 41021
8b095871
IC
41022 var majh = maj(ah, bh, ch)
41023 var majl = maj(al, bl, cl)
ebd8d4e8 41024
8b095871
IC
41025 var sigma0h = sigma0(ah, al)
41026 var sigma0l = sigma0(al, ah)
41027 var sigma1h = sigma1(eh, el)
41028 var sigma1l = sigma1(el, eh)
ab78acc6 41029
8b095871
IC
41030 // t1 = h + sigma1 + ch + K[j] + W[j]
41031 var Kih = K[j]
41032 var Kil = K[j + 1]
ab78acc6 41033
8b095871
IC
41034 var chh = Ch(eh, fh, gh)
41035 var chl = Ch(el, fl, gl)
ebd8d4e8 41036
8b095871
IC
41037 var t1l = (hl + sigma1l) | 0
41038 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
41039 t1l = (t1l + chl) | 0
41040 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
41041 t1l = (t1l + Kil) | 0
41042 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
41043 t1l = (t1l + Wil) | 0
41044 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 41045
8b095871
IC
41046 // t2 = sigma0 + maj
41047 var t2l = (sigma0l + majl) | 0
41048 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 41049
8b095871
IC
41050 hh = gh
41051 hl = gl
41052 gh = fh
41053 gl = fl
41054 fh = eh
41055 fl = el
41056 el = (dl + t1l) | 0
41057 eh = (dh + t1h + getCarry(el, dl)) | 0
41058 dh = ch
41059 dl = cl
41060 ch = bh
41061 cl = bl
41062 bh = ah
41063 bl = al
41064 al = (t1l + t2l) | 0
41065 ah = (t1h + t2h + getCarry(al, t1l)) | 0
41066 }
ab78acc6 41067
8b095871
IC
41068 this._al = (this._al + al) | 0
41069 this._bl = (this._bl + bl) | 0
41070 this._cl = (this._cl + cl) | 0
41071 this._dl = (this._dl + dl) | 0
41072 this._el = (this._el + el) | 0
41073 this._fl = (this._fl + fl) | 0
41074 this._gl = (this._gl + gl) | 0
41075 this._hl = (this._hl + hl) | 0
ab78acc6 41076
8b095871
IC
41077 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
41078 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
41079 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
41080 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
41081 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
41082 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
41083 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
41084 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
41085}
41086
8b095871
IC
41087Sha512.prototype._hash = function () {
41088 var H = new Buffer(64)
ab78acc6 41089
8b095871
IC
41090 function writeInt64BE (h, l, offset) {
41091 H.writeInt32BE(h, offset)
41092 H.writeInt32BE(l, offset + 4)
41093 }
ab78acc6 41094
8b095871
IC
41095 writeInt64BE(this._ah, this._al, 0)
41096 writeInt64BE(this._bh, this._bl, 8)
41097 writeInt64BE(this._ch, this._cl, 16)
41098 writeInt64BE(this._dh, this._dl, 24)
41099 writeInt64BE(this._eh, this._el, 32)
41100 writeInt64BE(this._fh, this._fl, 40)
41101 writeInt64BE(this._gh, this._gl, 48)
41102 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 41103
8b095871 41104 return H
ebd8d4e8
IC
41105}
41106
8b095871 41107module.exports = Sha512
ebd8d4e8 41108
ab78acc6 41109}).call(this,require("buffer").Buffer)
8b095871
IC
41110},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
41111var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 41112
8b095871
IC
41113/**
41114 * Removes '0x' from a given `String` is present
41115 * @param {String} str the string value
41116 * @return {String|Optional} a string by pass if necessary
41117 */
41118module.exports = function stripHexPrefix(str) {
41119 if (typeof str !== 'string') {
41120 return str;
41121 }
07ac4350 41122
8b095871
IC
41123 return isHexPrefixed(str) ? str.slice(2) : str;
41124}
07ac4350 41125
8b095871
IC
41126},{"is-hex-prefixed":64}]},{},[31])(31)
41127});</script>
8a1f452d 41128 <script>function convertRippleAdrr(address) {
41129 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
41130 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
41131 )
41132 }
41133
41134function convertRipplePriv(priv) {
920eb591 41135 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
8a1f452d 41136}
41137
41138</script>
ab78acc6 41139 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
41140
41141//// base.js
41142
41143/** @fileOverview Javascript cryptography implementation.
41144 *
41145 * Crush to remove comments, shorten variable names and
41146 * generally reduce transmission size.
41147 *
41148 * @author Emily Stark
41149 * @author Mike Hamburg
41150 * @author Dan Boneh
41151 */
41152
41153"use strict";
41154/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
41155/*global document, window, escape, unescape, module, require, Uint32Array */
41156
41157/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
41158var sjcl = {
41159 /** @namespace Symmetric ciphers. */
41160 cipher: {},
41161
41162 /** @namespace Hash functions. Right now only SHA256 is implemented. */
41163 hash: {},
41164
41165 /** @namespace Key exchange functions. Right now only SRP is implemented. */
41166 keyexchange: {},
41167
41168 /** @namespace Block cipher modes of operation. */
41169 mode: {},
41170
41171 /** @namespace Miscellaneous. HMAC and PBKDF2. */
41172 misc: {},
41173
41174 /**
41175 * @namespace Bit array encoders and decoders.
41176 *
41177 * @description
41178 * The members of this namespace are functions which translate between
41179 * SJCL's bitArrays and other objects (usually strings). Because it
41180 * isn't always clear which direction is encoding and which is decoding,
41181 * the method names are "fromBits" and "toBits".
41182 */
41183 codec: {},
41184
41185 /** @namespace Exceptions. */
41186 exception: {
41187 /** @constructor Ciphertext is corrupt. */
41188 corrupt: function(message) {
41189 this.toString = function() { return "CORRUPT: "+this.message; };
41190 this.message = message;
41191 },
41192
41193 /** @constructor Invalid parameter. */
41194 invalid: function(message) {
41195 this.toString = function() { return "INVALID: "+this.message; };
41196 this.message = message;
41197 },
41198
41199 /** @constructor Bug or missing feature in SJCL. @constructor */
41200 bug: function(message) {
41201 this.toString = function() { return "BUG: "+this.message; };
41202 this.message = message;
41203 },
41204
41205 /** @constructor Something isn't ready. */
41206 notReady: function(message) {
41207 this.toString = function() { return "NOT READY: "+this.message; };
41208 this.message = message;
ebd8d4e8 41209 }
80c4dd2a
IC
41210 }
41211};
41212
41213if(typeof module !== 'undefined' && module.exports){
41214 module.exports = sjcl;
41215}
41216if (typeof define === "function") {
41217 define([], function () {
41218 return sjcl;
41219 });
41220}
41221
41222
41223//// bitArray.js
41224
41225/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
41226 *
41227 * @author Emily Stark
41228 * @author Mike Hamburg
41229 * @author Dan Boneh
41230 */
41231
41232/** @namespace Arrays of bits, encoded as arrays of Numbers.
41233 *
41234 * @description
41235 * <p>
41236 * These objects are the currency accepted by SJCL's crypto functions.
41237 * </p>
41238 *
41239 * <p>
41240 * Most of our crypto primitives operate on arrays of 4-byte words internally,
41241 * but many of them can take arguments that are not a multiple of 4 bytes.
41242 * This library encodes arrays of bits (whose size need not be a multiple of 8
41243 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
41244 * array of words, 32 bits at a time. Since the words are double-precision
41245 * floating point numbers, they fit some extra data. We use this (in a private,
41246 * possibly-changing manner) to encode the number of bits actually present
41247 * in the last word of the array.
41248 * </p>
41249 *
41250 * <p>
41251 * Because bitwise ops clear this out-of-band data, these arrays can be passed
41252 * to ciphers like AES which want arrays of words.
41253 * </p>
41254 */
41255sjcl.bitArray = {
41256 /**
41257 * Array slices in units of bits.
41258 * @param {bitArray} a The array to slice.
41259 * @param {Number} bstart The offset to the start of the slice, in bits.
41260 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
41261 * slice until the end of the array.
41262 * @return {bitArray} The requested slice.
41263 */
41264 bitSlice: function (a, bstart, bend) {
41265 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
41266 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
41267 },
41268
41269 /**
41270 * Extract a number packed into a bit array.
41271 * @param {bitArray} a The array to slice.
41272 * @param {Number} bstart The offset to the start of the slice, in bits.
41273 * @param {Number} length The length of the number to extract.
41274 * @return {Number} The requested slice.
41275 */
41276 extract: function(a, bstart, blength) {
41277 // FIXME: this Math.floor is not necessary at all, but for some reason
41278 // seems to suppress a bug in the Chromium JIT.
41279 var x, sh = Math.floor((-bstart-blength) & 31);
41280 if ((bstart + blength - 1 ^ bstart) & -32) {
41281 // it crosses a boundary
41282 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
41283 } else {
41284 // within a single word
41285 x = a[bstart/32|0] >>> sh;
ebd8d4e8 41286 }
80c4dd2a
IC
41287 return x & ((1<<blength) - 1);
41288 },
41289
41290 /**
41291 * Concatenate two bit arrays.
41292 * @param {bitArray} a1 The first array.
41293 * @param {bitArray} a2 The second array.
41294 * @return {bitArray} The concatenation of a1 and a2.
41295 */
41296 concat: function (a1, a2) {
41297 if (a1.length === 0 || a2.length === 0) {
41298 return a1.concat(a2);
41299 }
41300
41301 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
41302 if (shift === 32) {
41303 return a1.concat(a2);
41304 } else {
41305 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 41306 }
80c4dd2a
IC
41307 },
41308
41309 /**
41310 * Find the length of an array of bits.
41311 * @param {bitArray} a The array.
41312 * @return {Number} The length of a, in bits.
41313 */
41314 bitLength: function (a) {
41315 var l = a.length, x;
41316 if (l === 0) { return 0; }
41317 x = a[l - 1];
41318 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
41319 },
41320
41321 /**
41322 * Truncate an array.
41323 * @param {bitArray} a The array.
41324 * @param {Number} len The length to truncate to, in bits.
41325 * @return {bitArray} A new array, truncated to len bits.
41326 */
41327 clamp: function (a, len) {
41328 if (a.length * 32 < len) { return a; }
41329 a = a.slice(0, Math.ceil(len / 32));
41330 var l = a.length;
41331 len = len & 31;
41332 if (l > 0 && len) {
41333 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
41334 }
41335 return a;
41336 },
41337
41338 /**
41339 * Make a partial word for a bit array.
41340 * @param {Number} len The number of bits in the word.
41341 * @param {Number} x The bits.
41342 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
41343 * @return {Number} The partial word.
41344 */
41345 partial: function (len, x, _end) {
41346 if (len === 32) { return x; }
41347 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
41348 },
41349
41350 /**
41351 * Get the number of bits used by a partial word.
41352 * @param {Number} x The partial word.
41353 * @return {Number} The number of bits used by the partial word.
41354 */
41355 getPartial: function (x) {
41356 return Math.round(x/0x10000000000) || 32;
41357 },
41358
41359 /**
41360 * Compare two arrays for equality in a predictable amount of time.
41361 * @param {bitArray} a The first array.
41362 * @param {bitArray} b The second array.
41363 * @return {boolean} true if a == b; false otherwise.
41364 */
41365 equal: function (a, b) {
41366 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
41367 return false;
ebd8d4e8 41368 }
80c4dd2a
IC
41369 var x = 0, i;
41370 for (i=0; i<a.length; i++) {
41371 x |= a[i]^b[i];
ebd8d4e8 41372 }
80c4dd2a
IC
41373 return (x === 0);
41374 },
41375
41376 /** Shift an array right.
41377 * @param {bitArray} a The array to shift.
41378 * @param {Number} shift The number of bits to shift.
41379 * @param {Number} [carry=0] A byte to carry in
41380 * @param {bitArray} [out=[]] An array to prepend to the output.
41381 * @private
41382 */
41383 _shiftRight: function (a, shift, carry, out) {
41384 var i, last2=0, shift2;
41385 if (out === undefined) { out = []; }
41386
41387 for (; shift >= 32; shift -= 32) {
41388 out.push(carry);
41389 carry = 0;
41390 }
41391 if (shift === 0) {
41392 return out.concat(a);
41393 }
41394
41395 for (i=0; i<a.length; i++) {
41396 out.push(carry | a[i]>>>shift);
41397 carry = a[i] << (32-shift);
41398 }
41399 last2 = a.length ? a[a.length-1] : 0;
41400 shift2 = sjcl.bitArray.getPartial(last2);
41401 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
41402 return out;
41403 },
41404
41405 /** xor a block of 4 words together.
41406 * @private
41407 */
41408 _xor4: function(x,y) {
41409 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
41410 },
41411
41412 /** byteswap a word array inplace.
41413 * (does not handle partial words)
41414 * @param {sjcl.bitArray} a word array
41415 * @return {sjcl.bitArray} byteswapped array
41416 */
41417 byteswapM: function(a) {
41418 var i, v, m = 0xff00;
41419 for (i = 0; i < a.length; ++i) {
41420 v = a[i];
41421 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 41422 }
80c4dd2a
IC
41423 return a;
41424 }
41425};
41426
41427
41428//// codecString.js
41429
41430/** @fileOverview Bit array codec implementations.
41431 *
41432 * @author Emily Stark
41433 * @author Mike Hamburg
41434 * @author Dan Boneh
41435 */
41436
41437/** @namespace UTF-8 strings */
41438sjcl.codec.utf8String = {
41439 /** Convert from a bitArray to a UTF-8 string. */
41440 fromBits: function (arr) {
41441 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
41442 for (i=0; i<bl/8; i++) {
41443 if ((i&3) === 0) {
41444 tmp = arr[i/4];
41445 }
41446 out += String.fromCharCode(tmp >>> 24);
41447 tmp <<= 8;
ebd8d4e8 41448 }
80c4dd2a
IC
41449 return decodeURIComponent(escape(out));
41450 },
41451
41452 /** Convert from a UTF-8 string to a bitArray. */
41453 toBits: function (str) {
41454 str = unescape(encodeURIComponent(str));
41455 var out = [], i, tmp=0;
41456 for (i=0; i<str.length; i++) {
41457 tmp = tmp << 8 | str.charCodeAt(i);
41458 if ((i&3) === 3) {
41459 out.push(tmp);
41460 tmp = 0;
41461 }
ebd8d4e8 41462 }
80c4dd2a
IC
41463 if (i&3) {
41464 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 41465 }
80c4dd2a
IC
41466 return out;
41467 }
41468};
41469
41470
41471//// codecHex.js
41472
41473/** @fileOverview Bit array codec implementations.
41474 *
41475 * @author Emily Stark
41476 * @author Mike Hamburg
41477 * @author Dan Boneh
41478 */
41479
41480/** @namespace Hexadecimal */
41481sjcl.codec.hex = {
41482 /** Convert from a bitArray to a hex string. */
41483 fromBits: function (arr) {
41484 var out = "", i;
41485 for (i=0; i<arr.length; i++) {
41486 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 41487 }
80c4dd2a
IC
41488 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
41489 },
41490 /** Convert from a hex string to a bitArray. */
41491 toBits: function (str) {
41492 var i, out=[], len;
41493 str = str.replace(/\s|0x/g, "");
41494 len = str.length;
41495 str = str + "00000000";
41496 for (i=0; i<str.length; i+=8) {
41497 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 41498 }
80c4dd2a
IC
41499 return sjcl.bitArray.clamp(out, len*4);
41500 }
41501};
41502
41503
41504//// sha512.js
41505
41506/** @fileOverview Javascript SHA-512 implementation.
41507 *
41508 * This implementation was written for CryptoJS by Jeff Mott and adapted for
41509 * SJCL by Stefan Thomas.
41510 *
41511 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
41512 * Released with New BSD License
41513 *
41514 * @author Emily Stark
41515 * @author Mike Hamburg
41516 * @author Dan Boneh
41517 * @author Jeff Mott
41518 * @author Stefan Thomas
41519 */
41520
41521/**
41522 * Context for a SHA-512 operation in progress.
41523 * @constructor
41524 * @class Secure Hash Algorithm, 512 bits.
41525 */
41526sjcl.hash.sha512 = function (hash) {
41527 if (!this._key[0]) { this._precompute(); }
41528 if (hash) {
41529 this._h = hash._h.slice(0);
41530 this._buffer = hash._buffer.slice(0);
41531 this._length = hash._length;
41532 } else {
41533 this.reset();
41534 }
41535};
41536
41537/**
41538 * Hash a string or an array of words.
41539 * @static
41540 * @param {bitArray|String} data the data to hash.
41541 * @return {bitArray} The hash value, an array of 16 big-endian words.
41542 */
41543sjcl.hash.sha512.hash = function (data) {
41544 return (new sjcl.hash.sha512()).update(data).finalize();
41545};
41546
41547sjcl.hash.sha512.prototype = {
41548 /**
41549 * The hash's block size, in bits.
41550 * @constant
41551 */
41552 blockSize: 1024,
41553
41554 /**
41555 * Reset the hash state.
41556 * @return this
41557 */
41558 reset:function () {
41559 this._h = this._init.slice(0);
41560 this._buffer = [];
41561 this._length = 0;
41562 return this;
41563 },
41564
41565 /**
41566 * Input several words to the hash.
41567 * @param {bitArray|String} data the data to hash.
41568 * @return this
41569 */
41570 update: function (data) {
41571 if (typeof data === "string") {
41572 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 41573 }
80c4dd2a
IC
41574 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
41575 ol = this._length,
41576 nl = this._length = ol + sjcl.bitArray.bitLength(data);
41577 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
41578 this._block(b.splice(0,32));
ebd8d4e8 41579 }
80c4dd2a
IC
41580 return this;
41581 },
41582
41583 /**
41584 * Complete hashing and output the hash value.
41585 * @return {bitArray} The hash value, an array of 16 big-endian words.
41586 */
41587 finalize:function () {
41588 var i, b = this._buffer, h = this._h;
41589
41590 // Round out and push the buffer
41591 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
41592
41593 // Round out the buffer to a multiple of 32 words, less the 4 length words.
41594 for (i = b.length + 4; i & 31; i++) {
41595 b.push(0);
ebd8d4e8 41596 }
80c4dd2a
IC
41597
41598 // append the length
41599 b.push(0);
41600 b.push(0);
41601 b.push(Math.floor(this._length / 0x100000000));
41602 b.push(this._length | 0);
41603
41604 while (b.length) {
41605 this._block(b.splice(0,32));
ebd8d4e8 41606 }
80c4dd2a
IC
41607
41608 this.reset();
41609 return h;
41610 },
41611
41612 /**
41613 * The SHA-512 initialization vector, to be precomputed.
41614 * @private
41615 */
41616 _init:[],
41617
41618 /**
41619 * Least significant 24 bits of SHA512 initialization values.
41620 *
41621 * Javascript only has 53 bits of precision, so we compute the 40 most
41622 * significant bits and add the remaining 24 bits as constants.
41623 *
41624 * @private
41625 */
41626 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
41627
41628 /*
41629 _init:
41630 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
41631 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
41632 */
41633
41634 /**
41635 * The SHA-512 hash key, to be precomputed.
41636 * @private
41637 */
41638 _key:[],
41639
41640 /**
41641 * Least significant 24 bits of SHA512 key values.
41642 * @private
41643 */
41644 _keyr:
41645 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
41646 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
41647 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
41648 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
41649 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
41650 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
41651 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
41652 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
41653 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
41654 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
41655
41656 /*
41657 _key:
41658 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
41659 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
41660 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
41661 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
41662 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
41663 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
41664 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
41665 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
41666 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
41667 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
41668 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
41669 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
41670 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
41671 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
41672 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
41673 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
41674 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
41675 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
41676 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
41677 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
41678 */
41679
41680 /**
41681 * Function to precompute _init and _key.
41682 * @private
41683 */
41684 _precompute: function () {
41685 // XXX: This code is for precomputing the SHA256 constants, change for
41686 // SHA512 and re-enable.
41687 var i = 0, prime = 2, factor;
41688
41689 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
41690 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
41691
41692 outer: for (; i<80; prime++) {
41693 for (factor=2; factor*factor <= prime; factor++) {
41694 if (prime % factor === 0) {
41695 // not a prime
41696 continue outer;
ebd8d4e8 41697 }
80c4dd2a
IC
41698 }
41699
41700 if (i<8) {
41701 this._init[i*2] = frac(Math.pow(prime, 1/2));
41702 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
41703 }
41704 this._key[i*2] = frac(Math.pow(prime, 1/3));
41705 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
41706 i++;
ebd8d4e8 41707 }
80c4dd2a
IC
41708 },
41709
41710 /**
41711 * Perform one cycle of SHA-512.
41712 * @param {bitArray} words one block of words.
41713 * @private
41714 */
41715 _block:function (words) {
41716 var i, wrh, wrl,
41717 w = words.slice(0),
41718 h = this._h,
41719 k = this._key,
41720 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
41721 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
41722 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
41723 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
41724
41725 // Working variables
41726 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
41727 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
41728 eh = h4h, el = h4l, fh = h5h, fl = h5l,
41729 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
41730
41731 for (i=0; i<80; i++) {
41732 // load up the input word for this round
41733 if (i<16) {
41734 wrh = w[i * 2];
41735 wrl = w[i * 2 + 1];
41736 } else {
41737 // Gamma0
41738 var gamma0xh = w[(i-15) * 2];
41739 var gamma0xl = w[(i-15) * 2 + 1];
41740 var gamma0h =
41741 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
41742 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
41743 (gamma0xh >>> 7);
41744 var gamma0l =
41745 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
41746 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
41747 ((gamma0xh << 25) | (gamma0xl >>> 7));
41748
41749 // Gamma1
41750 var gamma1xh = w[(i-2) * 2];
41751 var gamma1xl = w[(i-2) * 2 + 1];
41752 var gamma1h =
41753 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
41754 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
41755 (gamma1xh >>> 6);
41756 var gamma1l =
41757 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
41758 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
41759 ((gamma1xh << 26) | (gamma1xl >>> 6));
41760
41761 // Shortcuts
41762 var wr7h = w[(i-7) * 2];
41763 var wr7l = w[(i-7) * 2 + 1];
41764
41765 var wr16h = w[(i-16) * 2];
41766 var wr16l = w[(i-16) * 2 + 1];
41767
41768 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
41769 wrl = gamma0l + wr7l;
41770 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
41771 wrl += gamma1l;
41772 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
41773 wrl += wr16l;
41774 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
41775 }
41776
41777 w[i*2] = wrh |= 0;
41778 w[i*2 + 1] = wrl |= 0;
41779
41780 // Ch
41781 var chh = (eh & fh) ^ (~eh & gh);
41782 var chl = (el & fl) ^ (~el & gl);
41783
41784 // Maj
41785 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
41786 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
41787
41788 // Sigma0
41789 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
41790 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
41791
41792 // Sigma1
41793 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
41794 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
41795
41796 // K(round)
41797 var krh = k[i*2];
41798 var krl = k[i*2+1];
41799
41800 // t1 = h + sigma1 + ch + K(round) + W(round)
41801 var t1l = hl + sigma1l;
41802 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
41803 t1l += chl;
41804 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
41805 t1l += krl;
41806 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
41807 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
41808 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
41809
41810 // t2 = sigma0 + maj
41811 var t2l = sigma0l + majl;
41812 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
41813
41814 // Update working variables
41815 hh = gh;
41816 hl = gl;
41817 gh = fh;
41818 gl = fl;
41819 fh = eh;
41820 fl = el;
41821 el = (dl + t1l) | 0;
41822 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41823 dh = ch;
41824 dl = cl;
41825 ch = bh;
41826 cl = bl;
41827 bh = ah;
41828 bl = al;
41829 al = (t1l + t2l) | 0;
41830 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
41831 }
41832
41833 // Intermediate hash
41834 h0l = h[1] = (h0l + al) | 0;
41835 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
41836 h1l = h[3] = (h1l + bl) | 0;
41837 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
41838 h2l = h[5] = (h2l + cl) | 0;
41839 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
41840 h3l = h[7] = (h3l + dl) | 0;
41841 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
41842 h4l = h[9] = (h4l + el) | 0;
41843 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
41844 h5l = h[11] = (h5l + fl) | 0;
41845 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
41846 h6l = h[13] = (h6l + gl) | 0;
41847 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
41848 h7l = h[15] = (h7l + hl) | 0;
41849 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
41850 }
41851};
41852
41853
41854//// hmac.js
41855
41856/** @fileOverview HMAC implementation.
41857 *
41858 * @author Emily Stark
41859 * @author Mike Hamburg
41860 * @author Dan Boneh
41861 */
41862
41863/** HMAC with the specified hash function.
41864 * @constructor
41865 * @param {bitArray} key the key for HMAC.
41866 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
41867 */
41868sjcl.misc.hmac = function (key, Hash) {
41869 this._hash = Hash = Hash || sjcl.hash.sha256;
41870 var exKey = [[],[]], i,
41871 bs = Hash.prototype.blockSize / 32;
41872 this._baseHash = [new Hash(), new Hash()];
41873
41874 if (key.length > bs) {
41875 key = Hash.hash(key);
41876 }
41877
41878 for (i=0; i<bs; i++) {
41879 exKey[0][i] = key[i]^0x36363636;
41880 exKey[1][i] = key[i]^0x5C5C5C5C;
41881 }
41882
41883 this._baseHash[0].update(exKey[0]);
41884 this._baseHash[1].update(exKey[1]);
41885 this._resultHash = new Hash(this._baseHash[0]);
41886};
41887
41888/** HMAC with the specified hash function. Also called encrypt since it's a prf.
41889 * @param {bitArray|String} data The data to mac.
41890 */
41891sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
41892 if (!this._updated) {
41893 this.update(data);
41894 return this.digest(data);
41895 } else {
41896 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
41897 }
41898};
41899
41900sjcl.misc.hmac.prototype.reset = function () {
41901 this._resultHash = new this._hash(this._baseHash[0]);
41902 this._updated = false;
41903};
41904
41905sjcl.misc.hmac.prototype.update = function (data) {
41906 this._updated = true;
41907 this._resultHash.update(data);
41908};
41909
41910sjcl.misc.hmac.prototype.digest = function () {
41911 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
41912
41913 this.reset();
41914
41915 return result;
41916};
41917
41918
41919//// pbkdf2.js
41920
41921
41922/** @fileOverview Password-based key-derivation function, version 2.0.
41923 *
41924 * @author Emily Stark
41925 * @author Mike Hamburg
41926 * @author Dan Boneh
41927 */
41928
41929/** Password-Based Key-Derivation Function, version 2.0.
41930 *
41931 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
41932 *
41933 * This is the method specified by RSA's PKCS #5 standard.
41934 *
41935 * @param {bitArray|String} password The password.
41936 * @param {bitArray|String} salt The salt. Should have lots of entropy.
41937 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
41938 * @param {Number} [length] The length of the derived key. Defaults to the
41939 output size of the hash function.
41940 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
41941 * @return {bitArray} the derived key.
41942 */
41943sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
41944 count = count || 1000;
41945
41946 if (length < 0 || count < 0) {
41947 throw sjcl.exception.invalid("invalid params to pbkdf2");
41948 }
41949
41950 if (typeof password === "string") {
41951 password = sjcl.codec.utf8String.toBits(password);
41952 }
41953
41954 if (typeof salt === "string") {
41955 salt = sjcl.codec.utf8String.toBits(salt);
41956 }
41957
41958 Prff = Prff || sjcl.misc.hmac;
41959
41960 var prf = new Prff(password),
41961 u, ui, i, j, k, out = [], b = sjcl.bitArray;
41962
41963 for (k = 1; 32 * out.length < (length || 1); k++) {
41964 u = ui = prf.encrypt(b.concat(salt,[k]));
41965
41966 for (i=1; i<count; i++) {
41967 ui = prf.encrypt(ui);
41968 for (j=0; j<ui.length; j++) {
41969 u[j] ^= ui[j];
41970 }
ebd8d4e8 41971 }
80c4dd2a
IC
41972
41973 out = out.concat(u);
41974 }
41975
41976 if (length) { out = b.clamp(out, length); }
41977
41978 return out;
41979};
41980
41981
41982//// sha256.js
41983
41984/** @fileOverview Javascript SHA-256 implementation.
41985 *
41986 * An older version of this implementation is available in the public
41987 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
41988 * Stanford University 2008-2010 and BSD-licensed for liability
41989 * reasons.
41990 *
41991 * Special thanks to Aldo Cortesi for pointing out several bugs in
41992 * this code.
41993 *
41994 * @author Emily Stark
41995 * @author Mike Hamburg
41996 * @author Dan Boneh
41997 */
41998
41999/**
42000 * Context for a SHA-256 operation in progress.
42001 * @constructor
42002 * @class Secure Hash Algorithm, 256 bits.
42003 */
42004sjcl.hash.sha256 = function (hash) {
42005 if (!this._key[0]) { this._precompute(); }
42006 if (hash) {
42007 this._h = hash._h.slice(0);
42008 this._buffer = hash._buffer.slice(0);
42009 this._length = hash._length;
42010 } else {
42011 this.reset();
42012 }
42013};
42014
42015/**
42016 * Hash a string or an array of words.
42017 * @static
42018 * @param {bitArray|String} data the data to hash.
42019 * @return {bitArray} The hash value, an array of 16 big-endian words.
42020 */
42021sjcl.hash.sha256.hash = function (data) {
42022 return (new sjcl.hash.sha256()).update(data).finalize();
42023};
42024
42025sjcl.hash.sha256.prototype = {
42026 /**
42027 * The hash's block size, in bits.
42028 * @constant
42029 */
42030 blockSize: 512,
42031
42032 /**
42033 * Reset the hash state.
42034 * @return this
42035 */
42036 reset:function () {
42037 this._h = this._init.slice(0);
42038 this._buffer = [];
42039 this._length = 0;
42040 return this;
42041 },
42042
42043 /**
42044 * Input several words to the hash.
42045 * @param {bitArray|String} data the data to hash.
42046 * @return this
42047 */
42048 update: function (data) {
42049 if (typeof data === "string") {
42050 data = sjcl.codec.utf8String.toBits(data);
42051 }
42052 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
42053 ol = this._length,
42054 nl = this._length = ol + sjcl.bitArray.bitLength(data);
42055 for (i = 512+ol & -512; i <= nl; i+= 512) {
42056 this._block(b.splice(0,16));
ebd8d4e8 42057 }
3af2954a 42058 return this;
80c4dd2a
IC
42059 },
42060
42061 /**
42062 * Complete hashing and output the hash value.
42063 * @return {bitArray} The hash value, an array of 8 big-endian words.
42064 */
42065 finalize:function () {
42066 var i, b = this._buffer, h = this._h;
42067
42068 // Round out and push the buffer
42069 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
42070
42071 // Round out the buffer to a multiple of 16 words, less the 2 length words.
42072 for (i = b.length + 2; i & 15; i++) {
42073 b.push(0);
42074 }
42075
42076 // append the length
42077 b.push(Math.floor(this._length / 0x100000000));
42078 b.push(this._length | 0);
42079
42080 while (b.length) {
42081 this._block(b.splice(0,16));
42082 }
42083
42084 this.reset();
42085 return h;
42086 },
42087
42088 /**
42089 * The SHA-256 initialization vector, to be precomputed.
42090 * @private
42091 */
42092 _init:[],
42093 /*
42094 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
42095 */
42096
42097 /**
42098 * The SHA-256 hash key, to be precomputed.
42099 * @private
42100 */
42101 _key:[],
42102 /*
42103 _key:
42104 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
42105 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
42106 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
42107 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
42108 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
42109 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
42110 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
42111 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
42112 */
42113
42114
42115 /**
42116 * Function to precompute _init and _key.
42117 * @private
42118 */
42119 _precompute: function () {
42120 var i = 0, prime = 2, factor;
42121
42122 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
42123
42124 outer: for (; i<64; prime++) {
42125 for (factor=2; factor*factor <= prime; factor++) {
42126 if (prime % factor === 0) {
42127 // not a prime
42128 continue outer;
ebd8d4e8 42129 }
80c4dd2a
IC
42130 }
42131
42132 if (i<8) {
42133 this._init[i] = frac(Math.pow(prime, 1/2));
42134 }
42135 this._key[i] = frac(Math.pow(prime, 1/3));
42136 i++;
ebd8d4e8 42137 }
80c4dd2a
IC
42138 },
42139
42140 /**
42141 * Perform one cycle of SHA-256.
42142 * @param {bitArray} words one block of words.
42143 * @private
42144 */
42145 _block:function (words) {
42146 var i, tmp, a, b,
42147 w = words.slice(0),
42148 h = this._h,
42149 k = this._key,
42150 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
42151 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
42152
42153 /* Rationale for placement of |0 :
42154 * If a value can overflow is original 32 bits by a factor of more than a few
42155 * million (2^23 ish), there is a possibility that it might overflow the
42156 * 53-bit mantissa and lose precision.
42157 *
42158 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
42159 * propagates around the loop, and on the hash state h[]. I don't believe
42160 * that the clamps on h4 and on h0 are strictly necessary, but it's close
42161 * (for h4 anyway), and better safe than sorry.
42162 *
42163 * The clamps on h[] are necessary for the output to be correct even in the
42164 * common case and for short inputs.
42165 */
42166 for (i=0; i<64; i++) {
42167 // load up the input word for this round
42168 if (i<16) {
42169 tmp = w[i];
42170 } else {
42171 a = w[(i+1 ) & 15];
42172 b = w[(i+14) & 15];
42173 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
42174 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
42175 w[i&15] + w[(i+9) & 15]) | 0;
42176 }
42177
42178 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
42179
42180 // shift register
42181 h7 = h6; h6 = h5; h5 = h4;
42182 h4 = h3 + tmp | 0;
42183 h3 = h2; h2 = h1; h1 = h0;
42184
42185 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
42186 }
42187
42188 h[0] = h[0]+h0 | 0;
42189 h[1] = h[1]+h1 | 0;
42190 h[2] = h[2]+h2 | 0;
42191 h[3] = h[3]+h3 | 0;
42192 h[4] = h[4]+h4 | 0;
42193 h[5] = h[5]+h5 | 0;
42194 h[6] = h[6]+h6 | 0;
42195 h[7] = h[7]+h7 | 0;
42196 }
42197};
ea87f1d3
IC
42198</script>
42199 <script>// An extremely basic translation library
42200//
42201// Example usage:
42202//
42203// Set some html to be translated. Do this using the 'data-translate' attribute:
42204//
42205// <div data-translate>Test</div>
42206// <div data-translate-html><em>keep em tag</em></div>
52da415f
IC
42207// <input data-translate-placeholder placeholder="Example placeholder">
42208// <span data-translate-title title="Example title"></span>
ea87f1d3
IC
42209//
42210// Obtain all the phrases to be translated via js debug console:
42211//
42212// Translate.phrasesAsJson();
42213//
42214// Use that template to translate the phrases into another language.
42215// Leave the key the same. Change the value to the new language.
42216//
42217// Create a js file to load the new phrases. In this example for Spanish,
42218// es.js will contain the following code:
42219//
42220// Translate.loadForeignPhrases("es", {
42221// "Test": "Test in Spanish",
42222// "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
52da415f
IC
42223// "Example placeholder": "Example placeholder in Spanish"
42224// "Example title": "Example title in Spanish"
ea87f1d3
IC
42225// });
42226//
42227// In your UI put a listener for clicking on the Spanish button:
42228//
42229// mySpanishButton.addEventListener("click", function() {
42230// Translate.setLanguage("es");
42231// });
42232// myEnglishButton.addEventListener("click", function() {
42233// Translate.setLanguage("en");
42234// });
42235
42236Translate = new (function() {
42237
42238 var defaultLanguage = "en";
42239
42240 var allPhrases = {};
42241 allPhrases[defaultLanguage] = {};
42242
42243 // Node types
42244
42245 var text = {
42246 selector: "[data-translate]",
42247 getKey: function() {
42248 return this.textContent.trim().replace(/\s+/g, " ");
42249 },
42250 setPhrase: function(p) {
42251 this.textContent = p;
42252 },
42253 }
42254
42255 var html = {
42256 selector: "[data-translate-html]",
42257 getKey: function() {
42258 return this.innerHTML.trim().replace(/\s+/g, " ");
42259 },
42260 setPhrase: function(p) {
42261 this.innerHTML = p;
42262 },
42263 }
42264
42265 var placeholder = {
42266 selector: "[data-translate-placeholder]",
42267 getKey: function() {
42268 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
42269 },
42270 setPhrase: function(p) {
42271 this.setAttribute("placeholder", p);
42272 },
42273 }
42274
52da415f
IC
42275 var title = {
42276 selector: "[data-translate-title]",
42277 getKey: function() {
42278 return this.getAttribute("title").trim().replace(/\s+/g, " ");
42279 },
42280 setPhrase: function(p) {
42281 this.setAttribute("title", p);
42282 },
42283 }
42284
ea87f1d3
IC
42285 // Get elements to be translated
42286 var allEls = getEls(text)
42287 .concat(getEls(html))
52da415f
IC
42288 .concat(getEls(placeholder))
42289 .concat(getEls(title));
ea87f1d3
IC
42290
42291 // Provides access to phrases from a non-default language.
42292 // See phrases_en.js for example usage.
42293 this.loadForeignPhrases = function(language, phrases) {
42294 allPhrases[language] = phrases;
42295 }
42296
42297 // Displays a different language, eg "en" or "fr"
42298 this.setLanguage = function(language) {
42299 for (var i=0; i<allEls.length; i++) {
42300 var el = allEls[i];
42301 var key = el.key;
42302 if (!(language in allPhrases)) {
42303 console.log(language + " not in allPhrases");
42304 return;
42305 }
42306 if (!(key in allPhrases[language])) {
42307 console.log(language + " does not contain phrase: " + key);
42308 return;
42309 }
42310 var phrase = allPhrases[language][key];
42311 el.setPhrase(phrase);
42312 }
42313 }
42314
42315 // Converts the phrases to a key-pair json file.
42316 // This is a good way to export phrases for use in translation tools.
42317 this.phrasesAsJson = function(language) {
42318 var keys = [];
42319 for (var i=0; i<allEls.length; i++) {
42320 var el = allEls[i];
42321 var key = el.key;
42322 keys.push(key);
42323 }
42324 keys.sort();
42325 var output = {};
42326 for (var i=0; i<keys.length; i++) {
42327 var key = keys[i];
42328 var translated = "";
42329 if (language in allPhrases && key in allPhrases[language]) {
42330 translated = allPhrases[language][key];
42331 }
42332 output[key] = translated;
42333 }
42334 return JSON.stringify(output, null, 2);
42335 }
42336
42337 function getEls(nodeType) {
42338 var nodes = document.querySelectorAll(nodeType.selector);
42339 var els = [];
42340 for (var i=0; i<nodes.length; i++) {
42341 var node = nodes[i];
42342 node.getKey = nodeType.getKey;
42343 node.setPhrase = nodeType.setPhrase;
42344 node.key = node.getKey();
42345 allPhrases[defaultLanguage][node.key] = node.key;
42346 els.push(node);
42347 }
42348 return els;
42349 }
42350
42351})();
42352</script>
42353 <script>Translate.loadForeignPhrases("en",
42354{
42355 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
42356 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
42357 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
42358 "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).": "<code>m/44'/0'/1'</code> for the next account. Continue incrementing for more accounts (most use a single account).",
42359 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
42360 "Account": "Account",
42361 "Address": "Address",
42362 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
42363 "BIP32 Derivation Path": "BIP32 Derivation Path",
42364 "BIP32 Extended Key": "BIP32 Extended Key",
42365 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
42366 "BIP32 Root Key": "BIP32 Root Key",
42367 "BIP39 Mnemonic": "BIP39 Mnemonic",
42368 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
42369 "BIP39 Seed": "BIP39 Seed",
42370 "Base 10": "Base 10",
42371 "Base 6": "Base 6",
42372 "Be careful - it can be easy to make mistakes if you don't know what you're doing.": "Be careful - it can be easy to make mistakes if you don't know what you're doing.",
42373 "Binary": "Binary",
42374 "Bitcoin Core": "Bitcoin Core",
42375 "Bits Per Event": "Bits Per Event",
42376 "Block Explorers": "Block Explorers",
42377 "Can be used with": "Can be used with",
42378 "Card": "Card",
42379 "Coin": "Coin",
42380 "Dice": "Dice",
42381 "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.": "Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address, keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't random enough for the needs of this tool.",
42382 "Double-click that file to open it in a browser on any offline computer.": "Double-click that file to open it in a browser on any offline computer.",
42383 "Entropy": "Entropy",
42384 "Entropy Type": "Entropy Type",
42385 "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.": "Entropy is an advanced feature. Your mnemonic may be insecure if this feature is used incorrectly.",
42386 "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.": "Entropy values must be sourced from a <a href=\"https://en.wikipedia.org/wiki/Random_number_generation\" target=\"_blank\">strong source of randomness</a>.",
42387 "Event Count": "Event Count",
42388 "External / Internal": "External / Internal",
42389 "Filtered Entropy": "Filtered Entropy",
42390 "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>": "For more info see the <a href=\"http://www.mycelium.com/\" target=\"_blank\">Mycelium Wallet homepage</a>",
42391 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\" target=\"_blank\">BIP39 spec</a>.",
42392 "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.": "For more info see the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">BIP44 spec</a>.",
42393 "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>": "For more info see the <a href=\"https://github.com/bitcoin/bitcoin/pull/8035\" target=\"_blank\">Bitcoin Core BIP32 implementation</a>",
42394 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
42395 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
42396 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
42397 "Get the source code from the repository": "Get the source code from the repository",
42398 "Hex": "Hex",
42399 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
42400 "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.": "If cryptographic randomness isn't available in your browser, this page will show a warning and the generate button will not work.",
42401 "In that case you might choose to use your own source of entropy.": "In that case you might choose to use your own source of entropy.",
42402 "In your browser, select file save-as, and save this page as a file.": "In your browser, select file save-as, and save this page as a file.",
42403 "Libraries": "Libraries",
42404 "Mnemonic Language": "Mnemonic Language",
42405 "Mnemonic Length": "Mnemonic Length",
42406 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
42407 "More info": "More info",
42408 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
42409 "Mycelium Wallet": "Mycelium Wallet",
42410 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
42411 "Offline Usage": "Offline Usage",
42412 "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.": "Only enter the <code>xpub</code> extended key into block explorer search fields, never the <code>xprv</code> key.",
42413 "Path": "Path",
42414 "Private Key": "Private Key",
42415 "Private Keys": "Private Keys",
42416 "Public Key": "Public Key",
42417 "Purpose": "Purpose",
42418 "Raw Binary": "Raw Binary",
42419 "Read more": "Read more",
42420 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki\" target=\"_blank\">official BIP32 spec</a>",
42421 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki\">official BIP39 spec</a>",
42422 "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>": "Read more at the <a href=\"https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki\" target=\"_blank\">official BIP44 spec</a>",
42423 "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>": "See the demo at <a href=\"http://bip32.org/\" target=\"_blank\">bip32.org</a>",
42424 "Show": "Show",
42425 "Show more rows": "Show more rows",
42426 "Strength": "Strength",
42427 "Supply my own source of entropy": "Supply my own source of entropy",
42428 "The built in random generator can generally be trusted more than your own intuition about randomness.": "The built in random generator can generally be trusted more than your own intuition about randomness.",
42429 "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.": "The random mnemonic generator on this page uses a <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues\" target=\"_blank\">cryptographically secure random number generator</a>.",
42430 "This means flipping a fair coin, rolling a fair dice, noise measurements etc.": "This means flipping a fair coin, rolling a fair dice, noise measurements etc.",
42431 "This project is 100% open-source code": "This project is 100% open-source code",
42432 "Toggle": "Toggle",
42433 "Total Bits": "Total Bits",
42434 "Use hardened addresses": "Use hardened addresses",
42435 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
42436 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
42437 "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.": "Use private keys at <a href=\"https://web.archive.org/web/20150707020924/https://brainwallet.org/\" target=\"_blank\">brainwallet.org</a>.",
42438 "Valid entropy values include:": "Valid entropy values include:",
42439 "Warning": "Warning",
42440 "Word Count": "Word Count",
42441 "You are not a good source of entropy.": "You are not a good source of entropy.",
42442 "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).": "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).",
42443 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
42444 "words": "words"
42445}
42446);
dc55c6b0 42447</script>
ab78acc6 42448 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 42449WORDLISTS["english"] = [
ebd8d4e8
IC
42450"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
42451"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
42452"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
42453"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
42454"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
42455"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
42456"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
42457"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
42458"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
42459"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
42460"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
42461"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
42462"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
42463"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
42464"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
42465"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
42466"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
42467"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
42468"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
42469"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
42470"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
42471"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
42472"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
42473"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
42474"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
42475"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
42476"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
42477"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
42478"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
42479"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
42480"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
42481"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
42482"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
42483"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
42484"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
42485"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
42486"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
42487"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
42488"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
42489"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
42490"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
42491"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
42492"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
42493"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
42494"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
42495"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
42496"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
42497"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
42498"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
42499"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
42500"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
42501"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
42502"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
42503"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
42504"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
42505"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
42506"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
42507"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
42508"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
42509"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
42510"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
42511"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
42512"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
42513"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
42514"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
42515"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
42516"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
42517"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
42518"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
42519"film","filter","final","find","fine","finger","finish","fire","firm","first",
42520"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
42521"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
42522"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
42523"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
42524"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
42525"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
42526"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
42527"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
42528"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
42529"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
42530"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
42531"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
42532"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
42533"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
42534"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
42535"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
42536"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
42537"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
42538"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
42539"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
42540"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
42541"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
42542"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
42543"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
42544"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
42545"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
42546"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
42547"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
42548"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
42549"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
42550"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
42551"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
42552"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
42553"liar","liberty","library","license","life","lift","light","like","limb","limit",
42554"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
42555"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
42556"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
42557"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
42558"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
42559"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
42560"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
42561"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
42562"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
42563"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
42564"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
42565"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
42566"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
42567"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
42568"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
42569"network","neutral","never","news","next","nice","night","noble","noise","nominee",
42570"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
42571"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
42572"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
42573"oil","okay","old","olive","olympic","omit","once","one","onion","online",
42574"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
42575"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
42576"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
42577"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
42578"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
42579"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
42580"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
42581"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
42582"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
42583"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
42584"pole","police","pond","pony","pool","popular","portion","position","possible","post",
42585"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
42586"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
42587"prize","problem","process","produce","profit","program","project","promote","proof","property",
42588"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
42589"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
42590"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
42591"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
42592"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
42593"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
42594"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
42595"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
42596"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
42597"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
42598"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
42599"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
42600"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
42601"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
42602"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
42603"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
42604"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
42605"scrub","sea","search","season","seat","second","secret","section","security","seed",
42606"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
42607"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
42608"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
42609"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
42610"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
42611"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
42612"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
42613"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
42614"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
42615"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
42616"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
42617"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
42618"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
42619"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
42620"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
42621"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
42622"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
42623"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
42624"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
42625"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
42626"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
42627"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
42628"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
42629"thank","that","theme","then","theory","there","they","thing","this","thought",
42630"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
42631"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
42632"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
42633"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
42634"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
42635"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
42636"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
42637"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
42638"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
42639"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
42640"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
42641"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
42642"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
42643"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
42644"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
42645"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
42646"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
42647"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
42648"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
42649"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
42650"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
42651"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
42652"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
42653"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
42654"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
42655</script>
42656 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42657WORDLISTS["japanese"] = [
42658"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
42659"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
42660"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
42661"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
42662"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
42663"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
42664"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
42665"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
42666"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
42667"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
42668"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
42669"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
42670"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
42671"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
42672"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
42673"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
42674"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
42675"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
42676"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
42677"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
42678"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
42679"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
42680"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
42681"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
42682"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
42683"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
42684"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
42685"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
42686"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
42687"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
42688"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
42689"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
42690"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
42691"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
42692"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
42693"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
42694"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
42695"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
42696"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
42697"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
42698"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
42699"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
42700"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
42701"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
42702"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
42703"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
42704"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
42705"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
42706"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
42707"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
42708"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
42709"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
42710"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
42711"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
42712"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
42713"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
42714"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
42715"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
42716"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
42717"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
42718"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
42719"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
42720"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
42721"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
42722"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
42723"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
42724"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
42725"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
42726"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
42727"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
42728"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
42729"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
42730"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
42731"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
42732"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
42733"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
42734"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
42735"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
42736"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
42737"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
42738"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
42739"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
42740"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
42741"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
42742"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
42743"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
42744"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
42745"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
42746"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
42747"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
42748"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
42749"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
42750"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
42751"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
42752"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
42753"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
42754"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
42755"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
42756"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
42757"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
42758"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
42759"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
42760"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
42761"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
42762"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
42763"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
42764"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
42765"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
42766"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
42767"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
42768"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
42769"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
42770"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
42771"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
42772"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
42773"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
42774"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
42775"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
42776"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
42777"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
42778"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
42779"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
42780"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
42781"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
42782"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
42783"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
42784"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
42785"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
42786"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
42787"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
42788"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
42789"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
42790"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
42791"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
42792"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
42793"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
42794"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
42795"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
42796"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
42797"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
42798"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
42799"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
42800"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
42801"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
42802"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
42803"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
42804"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
42805"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
42806"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
42807"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
42808"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
42809"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
42810"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
42811"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
42812"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
42813"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
42814"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
42815"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
42816"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
42817"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
42818"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
42819"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
42820"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
42821"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
42822"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
42823"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
42824"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
42825"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
42826"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
42827"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
42828"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
42829"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
42830"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
42831"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
42832"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
42833"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
42834"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
42835"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
42836"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
42837"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
42838"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
42839"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
42840"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
42841"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
42842"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
42843"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
42844"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
42845"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
42846"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
42847"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
42848"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
42849"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
42850"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
42851"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
42852"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
42853"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
42854"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
42855"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
42856"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
42857"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
42858"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
42859"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
42860"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
42861"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
42862"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
42863</script>
42864 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
42865WORDLISTS["spanish"] = [
42866"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
42867"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
42868"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
42869"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
42870"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
42871"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
42872"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
42873"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
42874"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
42875"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
42876"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
42877"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
42878"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
42879"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
42880"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
42881"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
42882"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
42883"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
42884"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
42885"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
42886"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
42887"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
42888"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
42889"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
42890"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
42891"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
42892"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
42893"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
42894"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
42895"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
42896"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
42897"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
42898"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
42899"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
42900"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
42901"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
42902"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
42903"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
42904"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
42905"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
42906"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
42907"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
42908"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
42909"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
42910"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
42911"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
42912"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
42913"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
42914"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
42915"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
42916"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
42917"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
42918"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
42919"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
42920"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
42921"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
42922"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
42923"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
42924"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
42925"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
42926"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
42927"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
42928"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
42929"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
42930"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
42931"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
42932"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
42933"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
42934"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
42935"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
42936"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
42937"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
42938"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
42939"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
42940"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
42941"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
42942"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
42943"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
42944"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
42945"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
42946"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
42947"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
42948"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
42949"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
42950"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
42951"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
42952"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
42953"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
42954"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
42955"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
42956"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
42957"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
42958"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
42959"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
42960"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
42961"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
42962"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
42963"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
42964"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
42965"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
42966"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
42967"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
42968"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
42969"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
42970"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
42971"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
42972"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
42973"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
42974"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
42975"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
42976"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
42977"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
42978"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
42979"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
42980"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
42981"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
42982"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
42983"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
42984"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
42985"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
42986"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
42987"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
42988"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
42989"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
42990"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
42991"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
42992"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
42993"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
42994"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
42995"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
42996"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
42997"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
42998"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
42999"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
43000"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
43001"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
43002"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
43003"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
43004"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
43005"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
43006"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
43007"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
43008"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
43009"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
43010"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
43011"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
43012"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
43013"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
43014"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
43015"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
43016"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
43017"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
43018"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
43019"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
43020"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
43021"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
43022"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
43023"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
43024"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
43025"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
43026"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
43027"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
43028"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
43029"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
43030"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
43031"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
43032"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
43033"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
43034"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
43035"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
43036"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
43037"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
43038"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
43039"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
43040"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
43041"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
43042"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
43043"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
43044"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
43045"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
43046"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
43047"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
43048"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
43049"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
43050"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
43051"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
43052"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
43053"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
43054"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
43055"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
43056"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
43057"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
43058"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
43059"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
43060"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
43061"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
43062"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
43063"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
43064"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
43065"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
43066"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
43067"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
43068"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
43069"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
43070"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
43071</script>
43072 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43073WORDLISTS["chinese_simplified"] = [
43074"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
43075"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
43076"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
43077"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
43078"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
43079"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
43080"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
43081"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
43082"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
43083"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
43084"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
43085"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
43086"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
43087"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
43088"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
43089"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
43090"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
43091"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
43092"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
43093"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
43094"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
43095"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
43096"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
43097"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
43098"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
43099"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
43100"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
43101"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
43102"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
43103"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
43104"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
43105"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
43106"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
43107"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
43108"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
43109"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
43110"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
43111"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
43112"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
43113"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
43114"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
43115"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
43116"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
43117"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
43118"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
43119"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
43120"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
43121"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
43122"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
43123"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
43124"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
43125"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
43126"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
43127"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
43128"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
43129"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
43130"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
43131"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
43132"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
43133"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
43134"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
43135"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
43136"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
43137"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
43138"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
43139"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
43140"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
43141"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
43142"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
43143"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
43144"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
43145"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
43146"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
43147"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
43148"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
43149"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
43150"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
43151"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
43152"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
43153"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
43154"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
43155"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
43156"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
43157"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
43158"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
43159"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
43160"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
43161"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
43162"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
43163"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
43164"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
43165"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
43166"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
43167"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
43168"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
43169"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
43170"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
43171"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
43172"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
43173"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
43174"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
43175"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
43176"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
43177"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
43178"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
43179"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
43180"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
43181"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
43182"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
43183"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
43184"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
43185"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
43186"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
43187"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
43188"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
43189"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
43190"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
43191"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
43192"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
43193"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
43194"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
43195"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
43196"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
43197"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
43198"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
43199"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
43200"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
43201"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
43202"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
43203"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
43204"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
43205"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
43206"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
43207"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
43208"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
43209"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
43210"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
43211"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
43212"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
43213"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
43214"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
43215"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
43216"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
43217"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
43218"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
43219"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
43220"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
43221"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
43222"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
43223"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
43224"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
43225"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
43226"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
43227"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
43228"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
43229"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
43230"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
43231"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
43232"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
43233"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
43234"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
43235"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
43236"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
43237"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
43238"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
43239"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
43240"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
43241"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
43242"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
43243"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
43244"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
43245"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
43246"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
43247"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
43248"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
43249"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
43250"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
43251"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
43252"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
43253"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
43254"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
43255"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
43256"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
43257"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
43258"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
43259"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
43260"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
43261"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
43262"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
43263"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
43264"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
43265"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
43266"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
43267"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
43268"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
43269"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
43270"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
43271"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
43272"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
43273"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
43274"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
43275"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
43276"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
43277"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
43278"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
43279</script>
43280 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43281WORDLISTS["chinese_traditional"] = [
43282"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
43283"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
43284"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
43285"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
43286"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
43287"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
43288"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
43289"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
43290"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
43291"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
43292"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
43293"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
43294"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
43295"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
43296"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
43297"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
43298"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
43299"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
43300"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
43301"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
43302"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
43303"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
43304"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
43305"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
43306"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
43307"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
43308"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
43309"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
43310"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
43311"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
43312"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
43313"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
43314"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
43315"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
43316"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
43317"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
43318"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
43319"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
43320"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
43321"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
43322"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
43323"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
43324"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
43325"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
43326"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
43327"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
43328"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
43329"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
43330"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
43331"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
43332"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
43333"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
43334"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
43335"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
43336"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
43337"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
43338"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
43339"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
43340"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
43341"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
43342"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
43343"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
43344"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
43345"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
43346"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
43347"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
43348"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
43349"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
43350"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
43351"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
43352"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
43353"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
43354"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
43355"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
43356"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
43357"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
43358"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
43359"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
43360"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
43361"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
43362"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
43363"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
43364"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
43365"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
43366"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
43367"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
43368"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
43369"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
43370"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
43371"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
43372"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
43373"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
43374"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
43375"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
43376"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
43377"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
43378"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
43379"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
43380"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
43381"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
43382"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
43383"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
43384"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
43385"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
43386"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
43387"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
43388"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
43389"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
43390"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
43391"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
43392"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
43393"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
43394"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
43395"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
43396"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
43397"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
43398"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
43399"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
43400"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
43401"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
43402"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
43403"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
43404"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
43405"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
43406"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
43407"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
43408"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
43409"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
43410"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
43411"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
43412"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
43413"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
43414"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
43415"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
43416"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
43417"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
43418"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
43419"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
43420"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
43421"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
43422"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
43423"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
43424"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
43425"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
43426"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
43427"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
43428"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
43429"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
43430"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
43431"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
43432"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
43433"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
43434"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
43435"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
43436"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
43437"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
43438"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
43439"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
43440"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
43441"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
43442"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
43443"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
43444"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
43445"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
43446"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
43447"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
43448"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
43449"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
43450"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
43451"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
43452"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
43453"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
43454"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
43455"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
43456"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
43457"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
43458"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
43459"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
43460"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
43461"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
43462"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
43463"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
43464"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
43465"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
43466"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
43467"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
43468"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
43469"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
43470"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
43471"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
43472"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
43473"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
43474"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
43475"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
43476"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
43477"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
43478"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
43479"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
43480"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
43481"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
43482"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
43483"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
43484"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
43485"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
43486"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
43487</script>
43488 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43489WORDLISTS["french"] = [
43490"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
43491"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
43492"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
43493"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
43494"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
43495"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
43496"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
43497"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
43498"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
43499"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
43500"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
43501"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
43502"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
43503"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
43504"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
43505"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
43506"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
43507"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
43508"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
43509"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
43510"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
43511"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
43512"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
43513"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
43514"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
43515"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
43516"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
43517"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
43518"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
43519"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
43520"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
43521"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
43522"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
43523"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
43524"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
43525"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
43526"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
43527"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
43528"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
43529"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
43530"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
43531"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
43532"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
43533"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
43534"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
43535"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
43536"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
43537"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
43538"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
43539"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
43540"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
43541"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
43542"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
43543"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
43544"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
43545"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
43546"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
43547"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
43548"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
43549"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
43550"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
43551"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
43552"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
43553"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
43554"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
43555"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
43556"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
43557"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
43558"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
43559"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
43560"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
43561"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
43562"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
43563"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
43564"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
43565"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
43566"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
43567"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
43568"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
43569"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
43570"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
43571"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
43572"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
43573"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
43574"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
43575"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
43576"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
43577"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
43578"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
43579"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
43580"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
43581"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
43582"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
43583"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
43584"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
43585"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
43586"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
43587"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
43588"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
43589"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
43590"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
43591"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
43592"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
43593"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
43594"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
43595"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
43596"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
43597"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
43598"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
43599"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
43600"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
43601"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
43602"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
43603"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
43604"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
43605"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
43606"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
43607"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
43608"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
43609"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
43610"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
43611"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
43612"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
43613"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
43614"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
43615"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
43616"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
43617"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
43618"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
43619"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
43620"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
43621"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
43622"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
43623"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
43624"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
43625"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
43626"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
43627"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
43628"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
43629"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
43630"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
43631"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
43632"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
43633"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
43634"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
43635"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
43636"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
43637"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
43638"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
43639"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
43640"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
43641"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
43642"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
43643"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
43644"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
43645"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
43646"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
43647"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
43648"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
43649"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
43650"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
43651"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
43652"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
43653"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
43654"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
43655"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
43656"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
43657"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
43658"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
43659"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
43660"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
43661"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
43662"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
43663"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
43664"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
43665"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
43666"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
43667"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
43668"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
43669"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
43670"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
43671"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
43672"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
43673"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
43674"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
43675"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
43676"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
43677"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
43678"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
43679"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
43680"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
43681"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
43682"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
43683"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
43684"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
43685"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
43686"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
43687"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
43688"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
43689"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
43690"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
43691"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
43692"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
43693"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
43694"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
43695</script>
43696 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
43697WORDLISTS["italian"] = [
43698"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
43699"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
43700"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
43701"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
43702"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
43703"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
43704"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
43705"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
43706"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
43707"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
43708"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
43709"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
43710"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
43711"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
43712"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
43713"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
43714"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
43715"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
43716"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
43717"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
43718"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
43719"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
43720"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
43721"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
43722"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
43723"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
43724"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
43725"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
43726"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
43727"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
43728"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
43729"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
43730"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
43731"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
43732"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
43733"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
43734"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
43735"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
43736"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
43737"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
43738"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
43739"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
43740"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
43741"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
43742"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
43743"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
43744"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
43745"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
43746"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
43747"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
43748"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
43749"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
43750"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
43751"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
43752"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
43753"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
43754"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
43755"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
43756"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
43757"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
43758"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
43759"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
43760"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
43761"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
43762"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
43763"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
43764"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
43765"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
43766"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
43767"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
43768"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
43769"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
43770"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
43771"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
43772"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
43773"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
43774"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
43775"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
43776"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
43777"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
43778"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
43779"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
43780"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
43781"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
43782"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
43783"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
43784"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
43785"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
43786"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
43787"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
43788"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
43789"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
43790"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
43791"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
43792"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
43793"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
43794"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
43795"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
43796"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
43797"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
43798"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
43799"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
43800"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
43801"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
43802"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
43803"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
43804"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
43805"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
43806"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
43807"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
43808"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
43809"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
43810"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
43811"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
43812"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
43813"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
43814"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
43815"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
43816"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
43817"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
43818"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
43819"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
43820"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
43821"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
43822"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
43823"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
43824"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
43825"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
43826"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
43827"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
43828"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
43829"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
43830"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
43831"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
43832"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
43833"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
43834"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
43835"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
43836"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
43837"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
43838"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
43839"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
43840"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
43841"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
43842"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
43843"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
43844"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
43845"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
43846"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
43847"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
43848"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
43849"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
43850"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
43851"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
43852"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
43853"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
43854"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
43855"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
43856"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
43857"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
43858"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
43859"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
43860"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
43861"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
43862"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
43863"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
43864"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
43865"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
43866"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
43867"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
43868"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
43869"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
43870"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
43871"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
43872"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
43873"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
43874"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
43875"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
43876"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
43877"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
43878"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
43879"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
43880"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
43881"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
43882"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
43883"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
43884"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
43885"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
43886"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
43887"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
43888"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
43889"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
43890"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
43891"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
43892"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
43893"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
43894"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
43895"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
43896"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
43897"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
43898"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
43899"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
43900"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
43901"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
43902"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 43903</script>
ab78acc6 43904 <script>/*
3af2954a
IC
43905 * Copyright (c) 2013 Pavol Rusnak
43906 *
43907 * Permission is hereby granted, free of charge, to any person obtaining a copy of
43908 * this software and associated documentation files (the "Software"), to deal in
43909 * the Software without restriction, including without limitation the rights to
43910 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
43911 * of the Software, and to permit persons to whom the Software is furnished to do
43912 * so, subject to the following conditions:
43913 *
43914 * The above copyright notice and this permission notice shall be included in all
43915 * copies or substantial portions of the Software.
43916 *
43917 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
43918 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43919 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
43920 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
43921 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
43922 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
43923 */
43924
43925/*
43926 * Javascript port from python by Ian Coleman
43927 *
80c4dd2a
IC
43928 * Requires code from sjcl
43929 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
43930 */
43931
43932var Mnemonic = function(language) {
43933
43934 var PBKDF2_ROUNDS = 2048;
43935 var RADIX = 2048;
43936
43937 var self = this;
43938 var wordlist = [];
43939
80c4dd2a
IC
43940 var hmacSHA512 = function(key) {
43941 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
43942 this.encrypt = function() {
43943 return hasher.encrypt.apply(hasher, arguments);
43944 };
43945 };
43946
3af2954a
IC
43947 function init() {
43948 wordlist = WORDLISTS[language];
43949 if (wordlist.length != RADIX) {
43950 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
43951 throw err;
43952 }
43953 }
43954
43955 self.generate = function(strength) {
43956 strength = strength || 128;
43957 var r = strength % 32;
43958 if (r > 0) {
43959 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
43960 }
43961 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
43962 if (!hasStrongCrypto) {
43963 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
43964 }
43965 var buffer = new Uint8Array(strength / 8);
43966 var data = crypto.getRandomValues(buffer);
43967 return self.toMnemonic(data);
43968 }
43969
80c4dd2a
IC
43970 self.toMnemonic = function(byteArray) {
43971 if (byteArray.length % 4 > 0) {
43972 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
43973 }
43974
43975 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
43976 var data = byteArrayToWordArray(byteArray);
43977 var hash = sjcl.hash.sha256.hash(data);
43978 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
43979
43980 // b is a binary string, eg '00111010101100...'
43981 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
43982 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
43983 //
43984 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
43985 // c = bin(int(h, 16))[2:].zfill(256)
43986 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
43987 var a = byteArrayToBinaryString(byteArray);
43988 var c = zfill(hexStringToBinaryString(h), 256);
43989 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
43990 // b = line1 + line2
43991 var b = a + d;
43992
43993 var result = [];
43994 var blen = b.length / 11;
43995 for (var i=0; i<blen; i++) {
43996 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
43997 result.push(wordlist[idx]);
43998 }
0515eeec 43999 return self.joinWords(result);
3af2954a
IC
44000 }
44001
44002 self.check = function(mnemonic) {
0515eeec 44003 var mnemonic = self.splitWords(mnemonic);
18abe53b 44004 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
44005 return false
44006 }
44007 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
44008 var idx = [];
44009 for (var i=0; i<mnemonic.length; i++) {
44010 var word = mnemonic[i];
44011 var wordIndex = wordlist.indexOf(word);
44012 if (wordIndex == -1) {
44013 return false;
44014 }
44015 var binaryIndex = zfill(wordIndex.toString(2), 11);
44016 idx.push(binaryIndex);
44017 }
44018 var b = idx.join('');
44019 var l = b.length;
44020 //d = b[:l / 33 * 32]
44021 //h = b[-l / 33:]
44022 var d = b.substring(0, l / 33 * 32);
44023 var h = b.substring(l - l / 33, l);
44024 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 44025 var nd = binaryStringToWordArray(d);
3af2954a 44026 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
44027 var ndHash = sjcl.hash.sha256.hash(nd);
44028 var ndHex = sjcl.codec.hex.fromBits(ndHash);
44029 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
44030 var nh = ndBstr.substring(0,l/33);
44031 return h == nh;
44032 }
44033
44034 self.toSeed = function(mnemonic, passphrase) {
44035 passphrase = passphrase || '';
599fb39e
IC
44036 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
44037 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
44038 passphrase = self.normalizeString(passphrase)
44039 passphrase = "mnemonic" + passphrase;
599fb39e 44040 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
44041 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
44042 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
44043 var hashHex = sjcl.codec.hex.fromBits(result);
44044 return hashHex;
3af2954a
IC
44045 }
44046
0515eeec
IC
44047 self.splitWords = function(mnemonic) {
44048 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
44049 }
44050
44051 self.joinWords = function(words) {
44052 // Set space correctly depending on the language
44053 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
44054 var space = " ";
44055 if (language == "japanese") {
44056 space = "\u3000"; // ideographic space
44057 }
44058 return words.join(space);
44059 }
44060
3af2954a
IC
44061 self.normalizeString = function(str) {
44062 if (typeof str.normalize == "function") {
44063 return str.normalize("NFKD");
44064 }
44065 else {
44066 // TODO decide how to handle this in the future.
44067 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
44068 return str;
44069 }
44070 }
44071
80c4dd2a
IC
44072 function byteArrayToWordArray(data) {
44073 var a = [];
44074 for (var i=0; i<data.length/4; i++) {
44075 v = 0;
44076 v += data[i*4 + 0] << 8 * 3;
44077 v += data[i*4 + 1] << 8 * 2;
44078 v += data[i*4 + 2] << 8 * 1;
44079 v += data[i*4 + 3] << 8 * 0;
44080 a.push(v);
44081 }
44082 return a;
44083 }
44084
3af2954a
IC
44085 function byteArrayToBinaryString(data) {
44086 var bin = "";
44087 for (var i=0; i<data.length; i++) {
44088 bin += zfill(data[i].toString(2), 8);
44089 }
44090 return bin;
44091 }
44092
80c4dd2a
IC
44093 function hexStringToBinaryString(hexString) {
44094 binaryString = "";
44095 for (var i=0; i<hexString.length; i++) {
44096 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
44097 }
44098 return binaryString;
44099 }
44100
44101 function binaryStringToWordArray(binary) {
44102 var aLen = binary.length / 32;
44103 var a = [];
44104 for (var i=0; i<aLen; i++) {
44105 var valueStr = binary.substring(0,32);
3af2954a 44106 var value = parseInt(valueStr, 2);
80c4dd2a
IC
44107 a.push(value);
44108 binary = binary.slice(32);
3af2954a 44109 }
80c4dd2a 44110 return a;
3af2954a
IC
44111 }
44112
44113 // Pad a numeric string on the left with zero digits until the given width
44114 // is reached.
44115 // Note this differs to the python implementation because it does not
44116 // handle numbers starting with a sign.
44117 function zfill(source, length) {
44118 source = source.toString();
44119 while (source.length < length) {
44120 source = '0' + source;
44121 }
44122 return source;
44123 }
44124
44125 init();
ebd8d4e8 44126
3af2954a 44127}
dc55c6b0 44128</script>
95f04905
IC
44129 <script>/*
44130 JavaScript BigInteger library version 0.9.1
44131 http://silentmatt.com/biginteger/
18abe53b 44132
95f04905
IC
44133 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
44134 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
44135 Licensed under the MIT license.
c6624d51 44136
95f04905
IC
44137 Support for arbitrary internal representation base was added by
44138 Vitaly Magerya.
44139*/
18abe53b 44140
95f04905
IC
44141/*
44142 File: biginteger.js
18abe53b 44143
95f04905 44144 Exports:
18abe53b 44145
95f04905
IC
44146 <BigInteger>
44147*/
44148(function(exports) {
44149"use strict";
44150/*
44151 Class: BigInteger
44152 An arbitrarily-large integer.
18abe53b 44153
95f04905
IC
44154 <BigInteger> objects should be considered immutable. None of the "built-in"
44155 methods modify *this* or their arguments. All properties should be
44156 considered private.
18abe53b 44157
95f04905
IC
44158 All the methods of <BigInteger> instances can be called "statically". The
44159 static versions are convenient if you don't already have a <BigInteger>
44160 object.
18abe53b 44161
95f04905 44162 As an example, these calls are equivalent.
18abe53b 44163
95f04905
IC
44164 > BigInteger(4).multiply(5); // returns BigInteger(20);
44165 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 44166
95f04905
IC
44167 > var a = 42;
44168 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
44169*/
c6624d51 44170
95f04905 44171var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
44172
44173/*
44174 Constructor: BigInteger()
44175 Convert a value to a <BigInteger>.
44176
44177 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
44178 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
44179 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
44180 without a radix argument.
44181
44182 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
44183 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
44184 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
44185 > var n3 = BigInteger(n2); // Return n2, unchanged
44186
44187 The constructor form only takes an array and a sign. *n* must be an
44188 array of numbers in little-endian order, where each digit is between 0
44189 and BigInteger.base. The second parameter sets the sign: -1 for
44190 negative, +1 for positive, or 0 for zero. The array is *not copied and
44191 may be modified*. If the array contains only zeros, the sign parameter
44192 is ignored and is forced to zero.
44193
44194 > new BigInteger([5], -1): create a new BigInteger with value -5
44195
44196 Parameters:
44197
44198 n - Value to convert to a <BigInteger>.
44199
44200 Returns:
44201
44202 A <BigInteger> value.
44203
44204 See Also:
44205
44206 <parse>, <BigInteger>
44207*/
44208function BigInteger(n, s, token) {
44209 if (token !== CONSTRUCT) {
44210 if (n instanceof BigInteger) {
44211 return n;
44212 }
44213 else if (typeof n === "undefined") {
44214 return ZERO;
44215 }
44216 return BigInteger.parse(n);
44217 }
44218
44219 n = n || []; // Provide the nullary constructor for subclasses.
44220 while (n.length && !n[n.length - 1]) {
44221 --n.length;
44222 }
44223 this._d = n;
44224 this._s = n.length ? (s || 1) : 0;
44225}
44226
44227BigInteger._construct = function(n, s) {
44228 return new BigInteger(n, s, CONSTRUCT);
44229};
44230
44231// Base-10 speedup hacks in parse, toString, exp10 and log functions
44232// require base to be a power of 10. 10^7 is the largest such power
44233// that won't cause a precision loss when digits are multiplied.
44234var BigInteger_base = 10000000;
44235var BigInteger_base_log10 = 7;
44236
44237BigInteger.base = BigInteger_base;
44238BigInteger.base_log10 = BigInteger_base_log10;
44239
44240var ZERO = new BigInteger([], 0, CONSTRUCT);
44241// Constant: ZERO
44242// <BigInteger> 0.
44243BigInteger.ZERO = ZERO;
44244
44245var ONE = new BigInteger([1], 1, CONSTRUCT);
44246// Constant: ONE
44247// <BigInteger> 1.
44248BigInteger.ONE = ONE;
44249
44250var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
44251// Constant: M_ONE
44252// <BigInteger> -1.
44253BigInteger.M_ONE = M_ONE;
44254
44255// Constant: _0
44256// Shortcut for <ZERO>.
44257BigInteger._0 = ZERO;
44258
44259// Constant: _1
44260// Shortcut for <ONE>.
44261BigInteger._1 = ONE;
44262
44263/*
44264 Constant: small
44265 Array of <BigIntegers> from 0 to 36.
44266
44267 These are used internally for parsing, but useful when you need a "small"
44268 <BigInteger>.
44269
44270 See Also:
44271
44272 <ZERO>, <ONE>, <_0>, <_1>
44273*/
44274BigInteger.small = [
44275 ZERO,
44276 ONE,
44277 /* Assuming BigInteger_base > 36 */
44278 new BigInteger( [2], 1, CONSTRUCT),
44279 new BigInteger( [3], 1, CONSTRUCT),
44280 new BigInteger( [4], 1, CONSTRUCT),
44281 new BigInteger( [5], 1, CONSTRUCT),
44282 new BigInteger( [6], 1, CONSTRUCT),
44283 new BigInteger( [7], 1, CONSTRUCT),
44284 new BigInteger( [8], 1, CONSTRUCT),
44285 new BigInteger( [9], 1, CONSTRUCT),
44286 new BigInteger([10], 1, CONSTRUCT),
44287 new BigInteger([11], 1, CONSTRUCT),
44288 new BigInteger([12], 1, CONSTRUCT),
44289 new BigInteger([13], 1, CONSTRUCT),
44290 new BigInteger([14], 1, CONSTRUCT),
44291 new BigInteger([15], 1, CONSTRUCT),
44292 new BigInteger([16], 1, CONSTRUCT),
44293 new BigInteger([17], 1, CONSTRUCT),
44294 new BigInteger([18], 1, CONSTRUCT),
44295 new BigInteger([19], 1, CONSTRUCT),
44296 new BigInteger([20], 1, CONSTRUCT),
44297 new BigInteger([21], 1, CONSTRUCT),
44298 new BigInteger([22], 1, CONSTRUCT),
44299 new BigInteger([23], 1, CONSTRUCT),
44300 new BigInteger([24], 1, CONSTRUCT),
44301 new BigInteger([25], 1, CONSTRUCT),
44302 new BigInteger([26], 1, CONSTRUCT),
44303 new BigInteger([27], 1, CONSTRUCT),
44304 new BigInteger([28], 1, CONSTRUCT),
44305 new BigInteger([29], 1, CONSTRUCT),
44306 new BigInteger([30], 1, CONSTRUCT),
44307 new BigInteger([31], 1, CONSTRUCT),
44308 new BigInteger([32], 1, CONSTRUCT),
44309 new BigInteger([33], 1, CONSTRUCT),
44310 new BigInteger([34], 1, CONSTRUCT),
44311 new BigInteger([35], 1, CONSTRUCT),
44312 new BigInteger([36], 1, CONSTRUCT)
44313];
44314
44315// Used for parsing/radix conversion
44316BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
44317
44318/*
44319 Method: toString
44320 Convert a <BigInteger> to a string.
44321
44322 When *base* is greater than 10, letters are upper case.
44323
44324 Parameters:
44325
44326 base - Optional base to represent the number in (default is base 10).
44327 Must be between 2 and 36 inclusive, or an Error will be thrown.
44328
44329 Returns:
44330
44331 The string representation of the <BigInteger>.
44332*/
44333BigInteger.prototype.toString = function(base) {
44334 base = +base || 10;
44335 if (base < 2 || base > 36) {
44336 throw new Error("illegal radix " + base + ".");
44337 }
44338 if (this._s === 0) {
44339 return "0";
44340 }
44341 if (base === 10) {
44342 var str = this._s < 0 ? "-" : "";
44343 str += this._d[this._d.length - 1].toString();
44344 for (var i = this._d.length - 2; i >= 0; i--) {
44345 var group = this._d[i].toString();
44346 while (group.length < BigInteger_base_log10) group = '0' + group;
44347 str += group;
44348 }
44349 return str;
44350 }
44351 else {
44352 var numerals = BigInteger.digits;
44353 base = BigInteger.small[base];
44354 var sign = this._s;
44355
44356 var n = this.abs();
44357 var digits = [];
44358 var digit;
44359
44360 while (n._s !== 0) {
44361 var divmod = n.divRem(base);
44362 n = divmod[0];
44363 digit = divmod[1];
44364 // TODO: This could be changed to unshift instead of reversing at the end.
44365 // Benchmark both to compare speeds.
44366 digits.push(numerals[digit.valueOf()]);
44367 }
44368 return (sign < 0 ? "-" : "") + digits.reverse().join("");
44369 }
44370};
44371
44372// Verify strings for parsing
44373BigInteger.radixRegex = [
44374 /^$/,
44375 /^$/,
44376 /^[01]*$/,
44377 /^[012]*$/,
44378 /^[0-3]*$/,
44379 /^[0-4]*$/,
44380 /^[0-5]*$/,
44381 /^[0-6]*$/,
44382 /^[0-7]*$/,
44383 /^[0-8]*$/,
44384 /^[0-9]*$/,
44385 /^[0-9aA]*$/,
44386 /^[0-9abAB]*$/,
44387 /^[0-9abcABC]*$/,
44388 /^[0-9a-dA-D]*$/,
44389 /^[0-9a-eA-E]*$/,
44390 /^[0-9a-fA-F]*$/,
44391 /^[0-9a-gA-G]*$/,
44392 /^[0-9a-hA-H]*$/,
44393 /^[0-9a-iA-I]*$/,
44394 /^[0-9a-jA-J]*$/,
44395 /^[0-9a-kA-K]*$/,
44396 /^[0-9a-lA-L]*$/,
44397 /^[0-9a-mA-M]*$/,
44398 /^[0-9a-nA-N]*$/,
44399 /^[0-9a-oA-O]*$/,
44400 /^[0-9a-pA-P]*$/,
44401 /^[0-9a-qA-Q]*$/,
44402 /^[0-9a-rA-R]*$/,
44403 /^[0-9a-sA-S]*$/,
44404 /^[0-9a-tA-T]*$/,
44405 /^[0-9a-uA-U]*$/,
44406 /^[0-9a-vA-V]*$/,
44407 /^[0-9a-wA-W]*$/,
44408 /^[0-9a-xA-X]*$/,
44409 /^[0-9a-yA-Y]*$/,
44410 /^[0-9a-zA-Z]*$/
44411];
44412
44413/*
44414 Function: parse
44415 Parse a string into a <BigInteger>.
44416
44417 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
44418 *base* is not provided, it will be guessed based on the leading characters
44419 of *s* as follows:
44420
44421 - "0x" or "0X": *base* = 16
44422 - "0c" or "0C": *base* = 8
44423 - "0b" or "0B": *base* = 2
44424 - else: *base* = 10
44425
44426 If no base is provided, or *base* is 10, the number can be in exponential
44427 form. For example, these are all valid:
44428
44429 > BigInteger.parse("1e9"); // Same as "1000000000"
44430 > BigInteger.parse("1.234*10^3"); // Same as 1234
44431 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
44432
44433 If any characters fall outside the range defined by the radix, an exception
44434 will be thrown.
44435
44436 Parameters:
44437
44438 s - The string to parse.
44439 base - Optional radix (default is to guess based on *s*).
44440
44441 Returns:
44442
44443 a <BigInteger> instance.
44444*/
44445BigInteger.parse = function(s, base) {
44446 // Expands a number in exponential form to decimal form.
44447 // expandExponential("-13.441*10^5") === "1344100";
44448 // expandExponential("1.12300e-1") === "0.112300";
44449 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
44450 function expandExponential(str) {
44451 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
44452
44453 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
44454 c = +c;
44455 var l = c < 0;
44456 var i = n.length + c;
44457 x = (l ? n : f).length;
44458 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
44459 var z = (new Array(c + 1)).join("0");
44460 var r = n + f;
44461 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
44462 });
44463 }
44464
44465 s = s.toString();
44466 if (typeof base === "undefined" || +base === 10) {
44467 s = expandExponential(s);
44468 }
44469
44470 var prefixRE;
44471 if (typeof base === "undefined") {
44472 prefixRE = '0[xcb]';
44473 }
44474 else if (base == 16) {
44475 prefixRE = '0x';
44476 }
44477 else if (base == 8) {
44478 prefixRE = '0c';
44479 }
44480 else if (base == 2) {
44481 prefixRE = '0b';
44482 }
44483 else {
44484 prefixRE = '';
44485 }
44486 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
44487 if (parts) {
44488 var sign = parts[1] || "+";
44489 var baseSection = parts[2] || "";
44490 var digits = parts[3] || "";
44491
44492 if (typeof base === "undefined") {
44493 // Guess base
44494 if (baseSection === "0x" || baseSection === "0X") { // Hex
44495 base = 16;
44496 }
44497 else if (baseSection === "0c" || baseSection === "0C") { // Octal
44498 base = 8;
44499 }
44500 else if (baseSection === "0b" || baseSection === "0B") { // Binary
44501 base = 2;
44502 }
44503 else {
44504 base = 10;
44505 }
44506 }
44507 else if (base < 2 || base > 36) {
44508 throw new Error("Illegal radix " + base + ".");
44509 }
44510
44511 base = +base;
44512
44513 // Check for digits outside the range
44514 if (!(BigInteger.radixRegex[base].test(digits))) {
44515 throw new Error("Bad digit for radix " + base);
44516 }
44517
44518 // Strip leading zeros, and convert to array
44519 digits = digits.replace(/^0+/, "").split("");
44520 if (digits.length === 0) {
44521 return ZERO;
44522 }
44523
44524 // Get the sign (we know it's not zero)
44525 sign = (sign === "-") ? -1 : 1;
44526
44527 // Optimize 10
44528 if (base == 10) {
44529 var d = [];
44530 while (digits.length >= BigInteger_base_log10) {
44531 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
44532 }
44533 d.push(parseInt(digits.join(''), 10));
44534 return new BigInteger(d, sign, CONSTRUCT);
44535 }
44536
44537 // Do the conversion
44538 var d = ZERO;
44539 base = BigInteger.small[base];
44540 var small = BigInteger.small;
44541 for (var i = 0; i < digits.length; i++) {
44542 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
44543 }
44544 return new BigInteger(d._d, sign, CONSTRUCT);
44545 }
44546 else {
44547 throw new Error("Invalid BigInteger format: " + s);
44548 }
44549};
44550
44551/*
44552 Function: add
44553 Add two <BigIntegers>.
44554
44555 Parameters:
44556
44557 n - The number to add to *this*. Will be converted to a <BigInteger>.
44558
44559 Returns:
44560
44561 The numbers added together.
44562
44563 See Also:
44564
44565 <subtract>, <multiply>, <quotient>, <next>
44566*/
44567BigInteger.prototype.add = function(n) {
44568 if (this._s === 0) {
44569 return BigInteger(n);
44570 }
44571
44572 n = BigInteger(n);
44573 if (n._s === 0) {
44574 return this;
44575 }
44576 if (this._s !== n._s) {
44577 n = n.negate();
44578 return this.subtract(n);
44579 }
44580
44581 var a = this._d;
44582 var b = n._d;
44583 var al = a.length;
44584 var bl = b.length;
44585 var sum = new Array(Math.max(al, bl) + 1);
44586 var size = Math.min(al, bl);
44587 var carry = 0;
44588 var digit;
44589
44590 for (var i = 0; i < size; i++) {
44591 digit = a[i] + b[i] + carry;
44592 sum[i] = digit % BigInteger_base;
44593 carry = (digit / BigInteger_base) | 0;
44594 }
44595 if (bl > al) {
44596 a = b;
44597 al = bl;
44598 }
44599 for (i = size; carry && i < al; i++) {
44600 digit = a[i] + carry;
44601 sum[i] = digit % BigInteger_base;
44602 carry = (digit / BigInteger_base) | 0;
44603 }
44604 if (carry) {
44605 sum[i] = carry;
44606 }
44607
44608 for ( ; i < al; i++) {
44609 sum[i] = a[i];
44610 }
44611
44612 return new BigInteger(sum, this._s, CONSTRUCT);
44613};
44614
44615/*
44616 Function: negate
44617 Get the additive inverse of a <BigInteger>.
44618
44619 Returns:
44620
44621 A <BigInteger> with the same magnatude, but with the opposite sign.
44622
44623 See Also:
44624
44625 <abs>
44626*/
44627BigInteger.prototype.negate = function() {
44628 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
44629};
44630
44631/*
44632 Function: abs
44633 Get the absolute value of a <BigInteger>.
44634
44635 Returns:
44636
44637 A <BigInteger> with the same magnatude, but always positive (or zero).
44638
44639 See Also:
44640
44641 <negate>
44642*/
44643BigInteger.prototype.abs = function() {
44644 return (this._s < 0) ? this.negate() : this;
44645};
44646
44647/*
44648 Function: subtract
44649 Subtract two <BigIntegers>.
44650
44651 Parameters:
44652
44653 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
44654
44655 Returns:
44656
44657 The *n* subtracted from *this*.
44658
44659 See Also:
44660
44661 <add>, <multiply>, <quotient>, <prev>
44662*/
44663BigInteger.prototype.subtract = function(n) {
44664 if (this._s === 0) {
44665 return BigInteger(n).negate();
44666 }
44667
44668 n = BigInteger(n);
44669 if (n._s === 0) {
44670 return this;
44671 }
44672 if (this._s !== n._s) {
44673 n = n.negate();
44674 return this.add(n);
44675 }
44676
44677 var m = this;
44678 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
44679 if (this._s < 0) {
44680 m = new BigInteger(n._d, 1, CONSTRUCT);
44681 n = new BigInteger(this._d, 1, CONSTRUCT);
44682 }
44683
44684 // Both are positive => a - b
44685 var sign = m.compareAbs(n);
44686 if (sign === 0) {
44687 return ZERO;
44688 }
44689 else if (sign < 0) {
44690 // swap m and n
44691 var t = n;
44692 n = m;
44693 m = t;
44694 }
44695
44696 // a > b
44697 var a = m._d;
44698 var b = n._d;
44699 var al = a.length;
44700 var bl = b.length;
44701 var diff = new Array(al); // al >= bl since a > b
44702 var borrow = 0;
44703 var i;
44704 var digit;
44705
44706 for (i = 0; i < bl; i++) {
44707 digit = a[i] - borrow - b[i];
44708 if (digit < 0) {
44709 digit += BigInteger_base;
44710 borrow = 1;
44711 }
44712 else {
44713 borrow = 0;
44714 }
44715 diff[i] = digit;
44716 }
44717 for (i = bl; i < al; i++) {
44718 digit = a[i] - borrow;
44719 if (digit < 0) {
44720 digit += BigInteger_base;
44721 }
44722 else {
44723 diff[i++] = digit;
44724 break;
44725 }
44726 diff[i] = digit;
44727 }
44728 for ( ; i < al; i++) {
44729 diff[i] = a[i];
44730 }
44731
44732 return new BigInteger(diff, sign, CONSTRUCT);
44733};
44734
44735(function() {
44736 function addOne(n, sign) {
44737 var a = n._d;
44738 var sum = a.slice();
44739 var carry = true;
44740 var i = 0;
44741
44742 while (true) {
44743 var digit = (a[i] || 0) + 1;
44744 sum[i] = digit % BigInteger_base;
44745 if (digit <= BigInteger_base - 1) {
44746 break;
44747 }
44748 ++i;
44749 }
44750
44751 return new BigInteger(sum, sign, CONSTRUCT);
44752 }
44753
44754 function subtractOne(n, sign) {
44755 var a = n._d;
44756 var sum = a.slice();
44757 var borrow = true;
44758 var i = 0;
44759
44760 while (true) {
44761 var digit = (a[i] || 0) - 1;
44762 if (digit < 0) {
44763 sum[i] = digit + BigInteger_base;
44764 }
44765 else {
44766 sum[i] = digit;
44767 break;
44768 }
44769 ++i;
44770 }
44771
44772 return new BigInteger(sum, sign, CONSTRUCT);
44773 }
44774
44775 /*
44776 Function: next
44777 Get the next <BigInteger> (add one).
44778
44779 Returns:
44780
44781 *this* + 1.
44782
44783 See Also:
44784
44785 <add>, <prev>
44786 */
44787 BigInteger.prototype.next = function() {
44788 switch (this._s) {
44789 case 0:
44790 return ONE;
44791 case -1:
44792 return subtractOne(this, -1);
44793 // case 1:
44794 default:
44795 return addOne(this, 1);
44796 }
44797 };
44798
44799 /*
44800 Function: prev
44801 Get the previous <BigInteger> (subtract one).
44802
44803 Returns:
44804
44805 *this* - 1.
44806
44807 See Also:
44808
44809 <next>, <subtract>
44810 */
44811 BigInteger.prototype.prev = function() {
44812 switch (this._s) {
44813 case 0:
44814 return M_ONE;
44815 case -1:
44816 return addOne(this, -1);
44817 // case 1:
44818 default:
44819 return subtractOne(this, 1);
44820 }
44821 };
44822})();
44823
44824/*
44825 Function: compareAbs
44826 Compare the absolute value of two <BigIntegers>.
44827
44828 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
44829
44830 Parameters:
44831
44832 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44833
44834 Returns:
44835
44836 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
44837
44838 See Also:
44839
44840 <compare>, <abs>
44841*/
44842BigInteger.prototype.compareAbs = function(n) {
44843 if (this === n) {
44844 return 0;
44845 }
44846
44847 if (!(n instanceof BigInteger)) {
44848 if (!isFinite(n)) {
44849 return(isNaN(n) ? n : -1);
44850 }
44851 n = BigInteger(n);
44852 }
44853
44854 if (this._s === 0) {
44855 return (n._s !== 0) ? -1 : 0;
44856 }
44857 if (n._s === 0) {
44858 return 1;
44859 }
44860
44861 var l = this._d.length;
44862 var nl = n._d.length;
44863 if (l < nl) {
44864 return -1;
44865 }
44866 else if (l > nl) {
44867 return 1;
44868 }
44869
44870 var a = this._d;
44871 var b = n._d;
44872 for (var i = l-1; i >= 0; i--) {
44873 if (a[i] !== b[i]) {
44874 return a[i] < b[i] ? -1 : 1;
44875 }
44876 }
44877
44878 return 0;
44879};
44880
44881/*
44882 Function: compare
44883 Compare two <BigIntegers>.
44884
44885 Parameters:
44886
44887 n - The number to compare to *this*. Will be converted to a <BigInteger>.
44888
44889 Returns:
44890
44891 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
44892
44893 See Also:
44894
44895 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
44896*/
44897BigInteger.prototype.compare = function(n) {
44898 if (this === n) {
44899 return 0;
44900 }
44901
44902 n = BigInteger(n);
44903
44904 if (this._s === 0) {
44905 return -n._s;
44906 }
44907
44908 if (this._s === n._s) { // both positive or both negative
44909 var cmp = this.compareAbs(n);
44910 return cmp * this._s;
44911 }
44912 else {
44913 return this._s;
44914 }
44915};
44916
44917/*
44918 Function: isUnit
44919 Return true iff *this* is either 1 or -1.
44920
44921 Returns:
44922
44923 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
44924
44925 See Also:
44926
44927 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
44928 <BigInteger.ONE>, <BigInteger.M_ONE>
44929*/
44930BigInteger.prototype.isUnit = function() {
44931 return this === ONE ||
44932 this === M_ONE ||
44933 (this._d.length === 1 && this._d[0] === 1);
44934};
44935
44936/*
44937 Function: multiply
44938 Multiply two <BigIntegers>.
44939
44940 Parameters:
44941
44942 n - The number to multiply *this* by. Will be converted to a
44943 <BigInteger>.
44944
44945 Returns:
44946
44947 The numbers multiplied together.
44948
44949 See Also:
44950
44951 <add>, <subtract>, <quotient>, <square>
44952*/
44953BigInteger.prototype.multiply = function(n) {
44954 // TODO: Consider adding Karatsuba multiplication for large numbers
44955 if (this._s === 0) {
44956 return ZERO;
44957 }
44958
44959 n = BigInteger(n);
44960 if (n._s === 0) {
44961 return ZERO;
44962 }
44963 if (this.isUnit()) {
44964 if (this._s < 0) {
44965 return n.negate();
44966 }
44967 return n;
44968 }
44969 if (n.isUnit()) {
44970 if (n._s < 0) {
44971 return this.negate();
44972 }
44973 return this;
44974 }
44975 if (this === n) {
44976 return this.square();
44977 }
44978
44979 var r = (this._d.length >= n._d.length);
44980 var a = (r ? this : n)._d; // a will be longer than b
44981 var b = (r ? n : this)._d;
44982 var al = a.length;
44983 var bl = b.length;
44984
44985 var pl = al + bl;
44986 var partial = new Array(pl);
44987 var i;
44988 for (i = 0; i < pl; i++) {
44989 partial[i] = 0;
44990 }
44991
44992 for (i = 0; i < bl; i++) {
44993 var carry = 0;
44994 var bi = b[i];
44995 var jlimit = al + i;
44996 var digit;
44997 for (var j = i; j < jlimit; j++) {
44998 digit = partial[j] + bi * a[j - i] + carry;
44999 carry = (digit / BigInteger_base) | 0;
45000 partial[j] = (digit % BigInteger_base) | 0;
45001 }
45002 if (carry) {
45003 digit = partial[j] + carry;
45004 carry = (digit / BigInteger_base) | 0;
45005 partial[j] = digit % BigInteger_base;
45006 }
45007 }
45008 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
45009};
45010
45011// Multiply a BigInteger by a single-digit native number
45012// Assumes that this and n are >= 0
45013// This is not really intended to be used outside the library itself
45014BigInteger.prototype.multiplySingleDigit = function(n) {
45015 if (n === 0 || this._s === 0) {
45016 return ZERO;
45017 }
45018 if (n === 1) {
45019 return this;
45020 }
45021
45022 var digit;
45023 if (this._d.length === 1) {
45024 digit = this._d[0] * n;
45025 if (digit >= BigInteger_base) {
45026 return new BigInteger([(digit % BigInteger_base)|0,
45027 (digit / BigInteger_base)|0], 1, CONSTRUCT);
45028 }
45029 return new BigInteger([digit], 1, CONSTRUCT);
45030 }
45031
45032 if (n === 2) {
45033 return this.add(this);
45034 }
45035 if (this.isUnit()) {
45036 return new BigInteger([n], 1, CONSTRUCT);
45037 }
45038
45039 var a = this._d;
45040 var al = a.length;
45041
45042 var pl = al + 1;
45043 var partial = new Array(pl);
45044 for (var i = 0; i < pl; i++) {
45045 partial[i] = 0;
45046 }
45047
45048 var carry = 0;
45049 for (var j = 0; j < al; j++) {
45050 digit = n * a[j] + carry;
45051 carry = (digit / BigInteger_base) | 0;
45052 partial[j] = (digit % BigInteger_base) | 0;
45053 }
45054 if (carry) {
45055 partial[j] = carry;
45056 }
45057
45058 return new BigInteger(partial, 1, CONSTRUCT);
45059};
45060
45061/*
45062 Function: square
45063 Multiply a <BigInteger> by itself.
45064
45065 This is slightly faster than regular multiplication, since it removes the
45066 duplicated multiplcations.
45067
45068 Returns:
45069
45070 > this.multiply(this)
45071
45072 See Also:
45073 <multiply>
45074*/
45075BigInteger.prototype.square = function() {
45076 // Normally, squaring a 10-digit number would take 100 multiplications.
45077 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
45078 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
45079 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
45080
45081 if (this._s === 0) {
45082 return ZERO;
45083 }
45084 if (this.isUnit()) {
45085 return ONE;
45086 }
45087
45088 var digits = this._d;
45089 var length = digits.length;
45090 var imult1 = new Array(length + length + 1);
45091 var product, carry, k;
45092 var i;
45093
45094 // Calculate diagonal
45095 for (i = 0; i < length; i++) {
45096 k = i * 2;
45097 product = digits[i] * digits[i];
45098 carry = (product / BigInteger_base) | 0;
45099 imult1[k] = product % BigInteger_base;
45100 imult1[k + 1] = carry;
45101 }
45102
45103 // Calculate repeating part
45104 for (i = 0; i < length; i++) {
45105 carry = 0;
45106 k = i * 2 + 1;
45107 for (var j = i + 1; j < length; j++, k++) {
45108 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
45109 carry = (product / BigInteger_base) | 0;
45110 imult1[k] = product % BigInteger_base;
45111 }
45112 k = length + i;
45113 var digit = carry + imult1[k];
45114 carry = (digit / BigInteger_base) | 0;
45115 imult1[k] = digit % BigInteger_base;
45116 imult1[k + 1] += carry;
45117 }
45118
45119 return new BigInteger(imult1, 1, CONSTRUCT);
45120};
45121
45122/*
45123 Function: quotient
45124 Divide two <BigIntegers> and truncate towards zero.
45125
45126 <quotient> throws an exception if *n* is zero.
45127
45128 Parameters:
45129
45130 n - The number to divide *this* by. Will be converted to a <BigInteger>.
45131
45132 Returns:
45133
45134 The *this* / *n*, truncated to an integer.
45135
45136 See Also:
45137
45138 <add>, <subtract>, <multiply>, <divRem>, <remainder>
45139*/
45140BigInteger.prototype.quotient = function(n) {
45141 return this.divRem(n)[0];
45142};
45143
45144/*
45145 Function: divide
45146 Deprecated synonym for <quotient>.
45147*/
45148BigInteger.prototype.divide = BigInteger.prototype.quotient;
45149
45150/*
45151 Function: remainder
45152 Calculate the remainder of two <BigIntegers>.
45153
45154 <remainder> throws an exception if *n* is zero.
45155
45156 Parameters:
45157
45158 n - The remainder after *this* is divided *this* by *n*. Will be
45159 converted to a <BigInteger>.
45160
45161 Returns:
45162
45163 *this* % *n*.
45164
45165 See Also:
45166
45167 <divRem>, <quotient>
45168*/
45169BigInteger.prototype.remainder = function(n) {
45170 return this.divRem(n)[1];
45171};
45172
45173/*
45174 Function: divRem
45175 Calculate the integer quotient and remainder of two <BigIntegers>.
45176
45177 <divRem> throws an exception if *n* is zero.
45178
45179 Parameters:
45180
45181 n - The number to divide *this* by. Will be converted to a <BigInteger>.
45182
45183 Returns:
45184
45185 A two-element array containing the quotient and the remainder.
45186
45187 > a.divRem(b)
45188
45189 is exactly equivalent to
45190
45191 > [a.quotient(b), a.remainder(b)]
45192
45193 except it is faster, because they are calculated at the same time.
45194
45195 See Also:
45196
45197 <quotient>, <remainder>
45198*/
45199BigInteger.prototype.divRem = function(n) {
45200 n = BigInteger(n);
45201 if (n._s === 0) {
45202 throw new Error("Divide by zero");
45203 }
45204 if (this._s === 0) {
45205 return [ZERO, ZERO];
45206 }
45207 if (n._d.length === 1) {
45208 return this.divRemSmall(n._s * n._d[0]);
45209 }
45210
45211 // Test for easy cases -- |n1| <= |n2|
45212 switch (this.compareAbs(n)) {
45213 case 0: // n1 == n2
45214 return [this._s === n._s ? ONE : M_ONE, ZERO];
45215 case -1: // |n1| < |n2|
45216 return [ZERO, this];
45217 }
45218
45219 var sign = this._s * n._s;
45220 var a = n.abs();
45221 var b_digits = this._d;
45222 var b_index = b_digits.length;
45223 var digits = n._d.length;
45224 var quot = [];
45225 var guess;
45226
45227 var part = new BigInteger([], 0, CONSTRUCT);
45228
45229 while (b_index) {
45230 part._d.unshift(b_digits[--b_index]);
45231 part = new BigInteger(part._d, 1, CONSTRUCT);
45232
45233 if (part.compareAbs(n) < 0) {
45234 quot.push(0);
45235 continue;
45236 }
45237 if (part._s === 0) {
45238 guess = 0;
45239 }
45240 else {
45241 var xlen = part._d.length, ylen = a._d.length;
45242 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
45243 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
45244 if (part._d.length > a._d.length) {
45245 // The length of part._d can either match a._d length,
45246 // or exceed it by one.
45247 highx = (highx+1)*BigInteger_base;
45248 }
45249 guess = Math.ceil(highx/highy);
45250 }
45251 do {
45252 var check = a.multiplySingleDigit(guess);
45253 if (check.compareAbs(part) <= 0) {
45254 break;
45255 }
45256 guess--;
45257 } while (guess);
45258
45259 quot.push(guess);
45260 if (!guess) {
45261 continue;
45262 }
45263 var diff = part.subtract(check);
45264 part._d = diff._d.slice();
45265 }
45266
45267 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
45268 new BigInteger(part._d, this._s, CONSTRUCT)];
45269};
45270
45271// Throws an exception if n is outside of (-BigInteger.base, -1] or
45272// [1, BigInteger.base). It's not necessary to call this, since the
45273// other division functions will call it if they are able to.
45274BigInteger.prototype.divRemSmall = function(n) {
45275 var r;
45276 n = +n;
45277 if (n === 0) {
45278 throw new Error("Divide by zero");
45279 }
45280
45281 var n_s = n < 0 ? -1 : 1;
45282 var sign = this._s * n_s;
45283 n = Math.abs(n);
45284
45285 if (n < 1 || n >= BigInteger_base) {
45286 throw new Error("Argument out of range");
45287 }
45288
45289 if (this._s === 0) {
45290 return [ZERO, ZERO];
45291 }
45292
45293 if (n === 1 || n === -1) {
45294 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
45295 }
45296
45297 // 2 <= n < BigInteger_base
45298
45299 // divide a single digit by a single digit
45300 if (this._d.length === 1) {
45301 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
45302 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
45303 if (sign < 0) {
45304 q = q.negate();
45305 }
45306 if (this._s < 0) {
45307 r = r.negate();
45308 }
45309 return [q, r];
45310 }
45311
45312 var digits = this._d.slice();
45313 var quot = new Array(digits.length);
45314 var part = 0;
45315 var diff = 0;
45316 var i = 0;
45317 var guess;
45318
45319 while (digits.length) {
45320 part = part * BigInteger_base + digits[digits.length - 1];
45321 if (part < n) {
45322 quot[i++] = 0;
45323 digits.pop();
45324 diff = BigInteger_base * diff + part;
45325 continue;
45326 }
45327 if (part === 0) {
45328 guess = 0;
45329 }
45330 else {
45331 guess = (part / n) | 0;
45332 }
45333
45334 var check = n * guess;
45335 diff = part - check;
45336 quot[i++] = guess;
45337 if (!guess) {
45338 digits.pop();
45339 continue;
45340 }
45341
45342 digits.pop();
45343 part = diff;
45344 }
45345
45346 r = new BigInteger([diff], 1, CONSTRUCT);
45347 if (this._s < 0) {
45348 r = r.negate();
45349 }
45350 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
45351};
45352
45353/*
45354 Function: isEven
45355 Return true iff *this* is divisible by two.
45356
45357 Note that <BigInteger.ZERO> is even.
45358
45359 Returns:
45360
45361 true if *this* is even, false otherwise.
45362
45363 See Also:
45364
45365 <isOdd>
45366*/
45367BigInteger.prototype.isEven = function() {
45368 var digits = this._d;
45369 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
45370};
45371
45372/*
45373 Function: isOdd
45374 Return true iff *this* is not divisible by two.
45375
45376 Returns:
45377
45378 true if *this* is odd, false otherwise.
45379
45380 See Also:
45381
45382 <isEven>
45383*/
45384BigInteger.prototype.isOdd = function() {
45385 return !this.isEven();
45386};
45387
45388/*
45389 Function: sign
45390 Get the sign of a <BigInteger>.
45391
45392 Returns:
45393
45394 * -1 if *this* < 0
45395 * 0 if *this* == 0
45396 * +1 if *this* > 0
45397
45398 See Also:
45399
45400 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
45401*/
45402BigInteger.prototype.sign = function() {
45403 return this._s;
45404};
45405
45406/*
45407 Function: isPositive
45408 Return true iff *this* > 0.
45409
45410 Returns:
45411
45412 true if *this*.compare(<BigInteger.ZERO>) == 1.
45413
45414 See Also:
45415
45416 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
45417*/
45418BigInteger.prototype.isPositive = function() {
45419 return this._s > 0;
45420};
45421
45422/*
45423 Function: isNegative
45424 Return true iff *this* < 0.
45425
45426 Returns:
45427
45428 true if *this*.compare(<BigInteger.ZERO>) == -1.
45429
45430 See Also:
45431
45432 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
45433*/
45434BigInteger.prototype.isNegative = function() {
45435 return this._s < 0;
45436};
45437
45438/*
45439 Function: isZero
45440 Return true iff *this* == 0.
45441
45442 Returns:
45443
45444 true if *this*.compare(<BigInteger.ZERO>) == 0.
45445
45446 See Also:
45447
45448 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
45449*/
45450BigInteger.prototype.isZero = function() {
45451 return this._s === 0;
45452};
45453
45454/*
45455 Function: exp10
45456 Multiply a <BigInteger> by a power of 10.
45457
45458 This is equivalent to, but faster than
45459
45460 > if (n >= 0) {
45461 > return this.multiply(BigInteger("1e" + n));
45462 > }
45463 > else { // n <= 0
45464 > return this.quotient(BigInteger("1e" + -n));
45465 > }
45466
45467 Parameters:
45468
45469 n - The power of 10 to multiply *this* by. *n* is converted to a
45470 javascipt number and must be no greater than <BigInteger.MAX_EXP>
45471 (0x7FFFFFFF), or an exception will be thrown.
45472
45473 Returns:
45474
45475 *this* * (10 ** *n*), truncated to an integer if necessary.
45476
45477 See Also:
45478
45479 <pow>, <multiply>
45480*/
45481BigInteger.prototype.exp10 = function(n) {
45482 n = +n;
45483 if (n === 0) {
45484 return this;
45485 }
45486 if (Math.abs(n) > Number(MAX_EXP)) {
45487 throw new Error("exponent too large in BigInteger.exp10");
45488 }
45489 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
45490 if (this._s === 0) {
45491 return ZERO;
45492 }
45493 if (n > 0) {
45494 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45495
45496 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45497 k._d.unshift(0);
45498 }
45499 if (n == 0)
45500 return k;
45501 k._s = 1;
45502 k = k.multiplySingleDigit(Math.pow(10, n));
45503 return (this._s < 0 ? k.negate() : k);
45504 } else if (-n >= this._d.length*BigInteger_base_log10) {
45505 return ZERO;
45506 } else {
45507 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
45508
45509 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
45510 k._d.shift();
45511 }
45512 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
45513 }
45514};
45515
45516/*
45517 Function: pow
45518 Raise a <BigInteger> to a power.
45519
45520 In this implementation, 0**0 is 1.
45521
45522 Parameters:
45523
45524 n - The exponent to raise *this* by. *n* must be no greater than
45525 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
45526
45527 Returns:
45528
45529 *this* raised to the *nth* power.
45530
45531 See Also:
45532
45533 <modPow>
45534*/
45535BigInteger.prototype.pow = function(n) {
45536 if (this.isUnit()) {
45537 if (this._s > 0) {
45538 return this;
45539 }
45540 else {
45541 return BigInteger(n).isOdd() ? this : this.negate();
45542 }
45543 }
45544
45545 n = BigInteger(n);
45546 if (n._s === 0) {
45547 return ONE;
45548 }
45549 else if (n._s < 0) {
45550 if (this._s === 0) {
45551 throw new Error("Divide by zero");
45552 }
45553 else {
45554 return ZERO;
45555 }
45556 }
45557 if (this._s === 0) {
45558 return ZERO;
45559 }
45560 if (n.isUnit()) {
45561 return this;
45562 }
45563
45564 if (n.compareAbs(MAX_EXP) > 0) {
45565 throw new Error("exponent too large in BigInteger.pow");
45566 }
45567 var x = this;
45568 var aux = ONE;
45569 var two = BigInteger.small[2];
45570
45571 while (n.isPositive()) {
45572 if (n.isOdd()) {
45573 aux = aux.multiply(x);
45574 if (n.isUnit()) {
45575 return aux;
45576 }
45577 }
45578 x = x.square();
45579 n = n.quotient(two);
45580 }
45581
45582 return aux;
45583};
45584
45585/*
45586 Function: modPow
45587 Raise a <BigInteger> to a power (mod m).
45588
45589 Because it is reduced by a modulus, <modPow> is not limited by
45590 <BigInteger.MAX_EXP> like <pow>.
45591
45592 Parameters:
45593
45594 exponent - The exponent to raise *this* by. Must be positive.
45595 modulus - The modulus.
45596
45597 Returns:
45598
45599 *this* ^ *exponent* (mod *modulus*).
45600
45601 See Also:
45602
45603 <pow>, <mod>
45604*/
45605BigInteger.prototype.modPow = function(exponent, modulus) {
45606 var result = ONE;
45607 var base = this;
45608
45609 while (exponent.isPositive()) {
45610 if (exponent.isOdd()) {
45611 result = result.multiply(base).remainder(modulus);
45612 }
45613
45614 exponent = exponent.quotient(BigInteger.small[2]);
45615 if (exponent.isPositive()) {
45616 base = base.square().remainder(modulus);
45617 }
45618 }
45619
45620 return result;
45621};
45622
45623/*
45624 Function: log
45625 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
45626
45627 This is equivalent to
45628
45629 > Math.log(this.toJSValue())
45630
45631 but handles values outside of the native number range.
45632
45633 Returns:
45634
45635 log( *this* )
45636
45637 See Also:
45638
45639 <toJSValue>
45640*/
45641BigInteger.prototype.log = function() {
45642 switch (this._s) {
45643 case 0: return -Infinity;
45644 case -1: return NaN;
45645 default: // Fall through.
45646 }
45647
45648 var l = this._d.length;
45649
45650 if (l*BigInteger_base_log10 < 30) {
45651 return Math.log(this.valueOf());
45652 }
45653
45654 var N = Math.ceil(30/BigInteger_base_log10);
45655 var firstNdigits = this._d.slice(l - N);
45656 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
45657};
45658
45659/*
45660 Function: valueOf
45661 Convert a <BigInteger> to a native JavaScript integer.
45662
45663 This is called automatically by JavaScipt to convert a <BigInteger> to a
45664 native value.
45665
45666 Returns:
45667
45668 > parseInt(this.toString(), 10)
45669
45670 See Also:
45671
45672 <toString>, <toJSValue>
45673*/
45674BigInteger.prototype.valueOf = function() {
45675 return parseInt(this.toString(), 10);
45676};
45677
45678/*
45679 Function: toJSValue
45680 Convert a <BigInteger> to a native JavaScript integer.
45681
45682 This is the same as valueOf, but more explicitly named.
45683
45684 Returns:
45685
45686 > parseInt(this.toString(), 10)
45687
45688 See Also:
45689
45690 <toString>, <valueOf>
45691*/
45692BigInteger.prototype.toJSValue = function() {
45693 return parseInt(this.toString(), 10);
45694};
45695
45696var MAX_EXP = BigInteger(0x7FFFFFFF);
45697// Constant: MAX_EXP
45698// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
45699BigInteger.MAX_EXP = MAX_EXP;
45700
45701(function() {
45702 function makeUnary(fn) {
45703 return function(a) {
45704 return fn.call(BigInteger(a));
45705 };
45706 }
45707
45708 function makeBinary(fn) {
45709 return function(a, b) {
45710 return fn.call(BigInteger(a), BigInteger(b));
45711 };
45712 }
45713
45714 function makeTrinary(fn) {
45715 return function(a, b, c) {
45716 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
45717 };
45718 }
45719
45720 (function() {
45721 var i, fn;
45722 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
45723 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
45724 var trinary = ["modPow"];
45725
45726 for (i = 0; i < unary.length; i++) {
45727 fn = unary[i];
45728 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
45729 }
45730
45731 for (i = 0; i < binary.length; i++) {
45732 fn = binary[i];
45733 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
45734 }
45735
45736 for (i = 0; i < trinary.length; i++) {
45737 fn = trinary[i];
45738 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
45739 }
45740
45741 BigInteger.exp10 = function(x, n) {
45742 return BigInteger(x).exp10(n);
45743 };
45744 })();
45745})();
45746
45747exports.BigInteger = BigInteger;
45748})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
45749</script>
45750 <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.zxcvbn = 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){
45751var adjacency_graphs;adjacency_graphs={qwerty:{"!":["`~",null,null,"2@","qQ",null],'"':[";:","[{","]}",null,null,"/?"],"#":["2@",null,null,"4$","eE","wW"],$:["3#",null,null,"5%","rR","eE"],"%":["4$",null,null,"6^","tT","rR"],"&":["6^",null,null,"8*","uU","yY"],"'":[";:","[{","]}",null,null,"/?"],"(":["8*",null,null,"0)","oO","iI"],")":["9(",null,null,"-_","pP","oO"],"*":["7&",null,null,"9(","iI","uU"],"+":["-_",null,null,null,"]}","[{"],",":["mM","kK","lL",".>",null,null],"-":["0)",null,null,"=+","[{","pP"],".":[",<","lL",";:","/?",null,null],"/":[".>",";:","'\"",null,null,null],0:["9(",null,null,"-_","pP","oO"],1:["`~",null,null,"2@","qQ",null],2:["1!",null,null,"3#","wW","qQ"],3:["2@",null,null,"4$","eE","wW"],4:["3#",null,null,"5%","rR","eE"],5:["4$",null,null,"6^","tT","rR"],6:["5%",null,null,"7&","yY","tT"],7:["6^",null,null,"8*","uU","yY"],8:["7&",null,null,"9(","iI","uU"],9:["8*",null,null,"0)","oO","iI"],":":["lL","pP","[{","'\"","/?",".>"],";":["lL","pP","[{","'\"","/?",".>"],"<":["mM","kK","lL",".>",null,null],"=":["-_",null,null,null,"]}","[{"],">":[",<","lL",";:","/?",null,null],"?":[".>",";:","'\"",null,null,null],"@":["1!",null,null,"3#","wW","qQ"],A:[null,"qQ","wW","sS","zZ",null],B:["vV","gG","hH","nN",null,null],C:["xX","dD","fF","vV",null,null],D:["sS","eE","rR","fF","cC","xX"],E:["wW","3#","4$","rR","dD","sS"],F:["dD","rR","tT","gG","vV","cC"],G:["fF","tT","yY","hH","bB","vV"],H:["gG","yY","uU","jJ","nN","bB"],I:["uU","8*","9(","oO","kK","jJ"],J:["hH","uU","iI","kK","mM","nN"],K:["jJ","iI","oO","lL",",<","mM"],L:["kK","oO","pP",";:",".>",",<"],M:["nN","jJ","kK",",<",null,null],N:["bB","hH","jJ","mM",null,null],O:["iI","9(","0)","pP","lL","kK"],P:["oO","0)","-_","[{",";:","lL"],Q:[null,"1!","2@","wW","aA",null],R:["eE","4$","5%","tT","fF","dD"],S:["aA","wW","eE","dD","xX","zZ"],T:["rR","5%","6^","yY","gG","fF"],U:["yY","7&","8*","iI","jJ","hH"],V:["cC","fF","gG","bB",null,null],W:["qQ","2@","3#","eE","sS","aA"],X:["zZ","sS","dD","cC",null,null],Y:["tT","6^","7&","uU","hH","gG"],Z:[null,"aA","sS","xX",null,null],"[":["pP","-_","=+","]}","'\"",";:"],"\\":["]}",null,null,null,null,null],"]":["[{","=+",null,"\\|",null,"'\""],"^":["5%",null,null,"7&","yY","tT"],_:["0)",null,null,"=+","[{","pP"],"`":[null,null,null,"1!",null,null],a:[null,"qQ","wW","sS","zZ",null],b:["vV","gG","hH","nN",null,null],c:["xX","dD","fF","vV",null,null],d:["sS","eE","rR","fF","cC","xX"],e:["wW","3#","4$","rR","dD","sS"],f:["dD","rR","tT","gG","vV","cC"],g:["fF","tT","yY","hH","bB","vV"],h:["gG","yY","uU","jJ","nN","bB"],i:["uU","8*","9(","oO","kK","jJ"],j:["hH","uU","iI","kK","mM","nN"],k:["jJ","iI","oO","lL",",<","mM"],l:["kK","oO","pP",";:",".>",",<"],m:["nN","jJ","kK",",<",null,null],n:["bB","hH","jJ","mM",null,null],o:["iI","9(","0)","pP","lL","kK"],p:["oO","0)","-_","[{",";:","lL"],q:[null,"1!","2@","wW","aA",null],r:["eE","4$","5%","tT","fF","dD"],s:["aA","wW","eE","dD","xX","zZ"],t:["rR","5%","6^","yY","gG","fF"],u:["yY","7&","8*","iI","jJ","hH"],v:["cC","fF","gG","bB",null,null],w:["qQ","2@","3#","eE","sS","aA"],x:["zZ","sS","dD","cC",null,null],y:["tT","6^","7&","uU","hH","gG"],z:[null,"aA","sS","xX",null,null],"{":["pP","-_","=+","]}","'\"",";:"],"|":["]}",null,null,null,null,null],"}":["[{","=+",null,"\\|",null,"'\""],"~":[null,null,null,"1!",null,null]},dvorak:{"!":["`~",null,null,"2@","'\"",null],'"':[null,"1!","2@",",<","aA",null],"#":["2@",null,null,"4$",".>",",<"],$:["3#",null,null,"5%","pP",".>"],"%":["4$",null,null,"6^","yY","pP"],"&":["6^",null,null,"8*","gG","fF"],"'":[null,"1!","2@",",<","aA",null],"(":["8*",null,null,"0)","rR","cC"],")":["9(",null,null,"[{","lL","rR"],"*":["7&",null,null,"9(","cC","gG"],"+":["/?","]}",null,"\\|",null,"-_"],",":["'\"","2@","3#",".>","oO","aA"],"-":["sS","/?","=+",null,null,"zZ"],".":[",<","3#","4$","pP","eE","oO"],"/":["lL","[{","]}","=+","-_","sS"],0:["9(",null,null,"[{","lL","rR"],1:["`~",null,null,"2@","'\"",null],2:["1!",null,null,"3#",",<","'\""],3:["2@",null,null,"4$",".>",",<"],4:["3#",null,null,"5%","pP",".>"],5:["4$",null,null,"6^","yY","pP"],6:["5%",null,null,"7&","fF","yY"],7:["6^",null,null,"8*","gG","fF"],8:["7&",null,null,"9(","cC","gG"],9:["8*",null,null,"0)","rR","cC"],":":[null,"aA","oO","qQ",null,null],";":[null,"aA","oO","qQ",null,null],"<":["'\"","2@","3#",".>","oO","aA"],"=":["/?","]}",null,"\\|",null,"-_"],">":[",<","3#","4$","pP","eE","oO"],"?":["lL","[{","]}","=+","-_","sS"],"@":["1!",null,null,"3#",",<","'\""],A:[null,"'\"",",<","oO",";:",null],B:["xX","dD","hH","mM",null,null],C:["gG","8*","9(","rR","tT","hH"],D:["iI","fF","gG","hH","bB","xX"],E:["oO",".>","pP","uU","jJ","qQ"],F:["yY","6^","7&","gG","dD","iI"],G:["fF","7&","8*","cC","hH","dD"],H:["dD","gG","cC","tT","mM","bB"],I:["uU","yY","fF","dD","xX","kK"],J:["qQ","eE","uU","kK",null,null],K:["jJ","uU","iI","xX",null,null],L:["rR","0)","[{","/?","sS","nN"],M:["bB","hH","tT","wW",null,null],N:["tT","rR","lL","sS","vV","wW"],O:["aA",",<",".>","eE","qQ",";:"],P:[".>","4$","5%","yY","uU","eE"],Q:[";:","oO","eE","jJ",null,null],R:["cC","9(","0)","lL","nN","tT"],S:["nN","lL","/?","-_","zZ","vV"],T:["hH","cC","rR","nN","wW","mM"],U:["eE","pP","yY","iI","kK","jJ"],V:["wW","nN","sS","zZ",null,null],W:["mM","tT","nN","vV",null,null],X:["kK","iI","dD","bB",null,null],Y:["pP","5%","6^","fF","iI","uU"],Z:["vV","sS","-_",null,null,null],"[":["0)",null,null,"]}","/?","lL"],"\\":["=+",null,null,null,null,null],"]":["[{",null,null,null,"=+","/?"],"^":["5%",null,null,"7&","fF","yY"],_:["sS","/?","=+",null,null,"zZ"],"`":[null,null,null,"1!",null,null],a:[null,"'\"",",<","oO",";:",null],b:["xX","dD","hH","mM",null,null],c:["gG","8*","9(","rR","tT","hH"],d:["iI","fF","gG","hH","bB","xX"],e:["oO",".>","pP","uU","jJ","qQ"],f:["yY","6^","7&","gG","dD","iI"],g:["fF","7&","8*","cC","hH","dD"],h:["dD","gG","cC","tT","mM","bB"],i:["uU","yY","fF","dD","xX","kK"],j:["qQ","eE","uU","kK",null,null],k:["jJ","uU","iI","xX",null,null],l:["rR","0)","[{","/?","sS","nN"],m:["bB","hH","tT","wW",null,null],n:["tT","rR","lL","sS","vV","wW"],o:["aA",",<",".>","eE","qQ",";:"],p:[".>","4$","5%","yY","uU","eE"],q:[";:","oO","eE","jJ",null,null],r:["cC","9(","0)","lL","nN","tT"],s:["nN","lL","/?","-_","zZ","vV"],t:["hH","cC","rR","nN","wW","mM"],u:["eE","pP","yY","iI","kK","jJ"],v:["wW","nN","sS","zZ",null,null],w:["mM","tT","nN","vV",null,null],x:["kK","iI","dD","bB",null,null],y:["pP","5%","6^","fF","iI","uU"],z:["vV","sS","-_",null,null,null],"{":["0)",null,null,"]}","/?","lL"],"|":["=+",null,null,null,null,null],"}":["[{",null,null,null,"=+","/?"],"~":[null,null,null,"1!",null,null]},keypad:{"*":["/",null,null,null,"-","+","9","8"],"+":["9","*","-",null,null,null,null,"6"],"-":["*",null,null,null,null,null,"+","9"],".":["0","2","3",null,null,null,null,null],"/":[null,null,null,null,"*","9","8","7"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6",null,null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","+",null,null,"3","2"],7:[null,null,null,"/","8","5","4",null],8:["7",null,"/","*","9","6","5","4"],9:["8","/","*","-","+",null,"6","5"]},mac_keypad:{"*":["/",null,null,null,null,null,"-","9"],"+":["6","9","-",null,null,null,null,"3"],"-":["9","/","*",null,null,null,"+","6"],".":["0","2","3",null,null,null,null,null],"/":["=",null,null,null,"*","-","9","8"],0:[null,"1","2","3",".",null,null,null],1:[null,null,"4","5","2","0",null,null],2:["1","4","5","6","3",".","0",null],3:["2","5","6","+",null,null,".","0"],4:[null,null,"7","8","5","2","1",null],5:["4","7","8","9","6","3","2","1"],6:["5","8","9","-","+",null,"3","2"],7:[null,null,null,"=","8","5","4",null],8:["7",null,"=","/","9","6","5","4"],9:["8","=","/","*","-","+","6","5"],"=":[null,null,null,null,"/","9","8","7"]}},module.exports=adjacency_graphs;
45752
45753},{}],2:[function(require,module,exports){
45754var feedback,scoring;scoring=require("./scoring"),feedback={default_feedback:{warning:"",suggestions:["Use a few words, avoid common phrases","No need for symbols, digits, or uppercase letters"]},get_feedback:function(e,s){var a,t,r,n,o,i;if(0===s.length)return this.default_feedback;if(e>2)return{warning:"",suggestions:[]};for(n=s[0],i=s.slice(1),t=0,r=i.length;t<r;t++)o=i[t],o.token.length>n.token.length&&(n=o);return feedback=this.get_match_feedback(n,1===s.length),a="Add another word or two. Uncommon words are better.",null!=feedback?(feedback.suggestions.unshift(a),null==feedback.warning&&(feedback.warning="")):feedback={warning:"",suggestions:[a]},feedback},get_match_feedback:function(e,s){var a,t;switch(e.pattern){case"dictionary":return this.get_dictionary_match_feedback(e,s);case"spatial":return a=e.graph.toUpperCase(),t=1===e.turns?"Straight rows of keys are easy to guess":"Short keyboard patterns are easy to guess",{warning:t,suggestions:["Use a longer keyboard pattern with more turns"]};case"repeat":return t=1===e.base_token.length?'Repeats like "aaa" are easy to guess':'Repeats like "abcabcabc" are only slightly harder to guess than "abc"',{warning:t,suggestions:["Avoid repeated words and characters"]};case"sequence":return{warning:"Sequences like abc or 6543 are easy to guess",suggestions:["Avoid sequences"]};case"regex":if("recent_year"===e.regex_name)return{warning:"Recent years are easy to guess",suggestions:["Avoid recent years","Avoid years that are associated with you"]};break;case"date":return{warning:"Dates are often easy to guess",suggestions:["Avoid dates and years that are associated with you"]}}},get_dictionary_match_feedback:function(e,s){var a,t,r,n,o;return n="passwords"===e.dictionary_name?!s||e.l33t||e.reversed?e.guesses_log10<=4?"This is similar to a commonly used password":void 0:e.rank<=10?"This is a top-10 common password":e.rank<=100?"This is a top-100 common password":"This is a very common password":"english"===e.dictionary_name?s?"A word by itself is easy to guess":void 0:"surnames"===(a=e.dictionary_name)||"male_names"===a||"female_names"===a?s?"Names and surnames by themselves are easy to guess":"Common names and surnames are easy to guess":"",r=[],o=e.token,o.match(scoring.START_UPPER)?r.push("Capitalization doesn't help very much"):o.match(scoring.ALL_UPPER)&&o.toLowerCase()!==o&&r.push("All-uppercase is almost as easy to guess as all-lowercase"),e.reversed&&e.token.length>=4&&r.push("Reversed words aren't much harder to guess"),e.l33t&&r.push("Predictable substitutions like '@' instead of 'a' don't help very much"),t={warning:n,suggestions:r}}},module.exports=feedback;
45755
45756},{"./scoring":6}],3:[function(require,module,exports){
45757var frequency_lists;frequency_lists={passwords:"123456,password,12345678,qwerty,123456789,12345,1234,111111,1234567,dragon,123123,baseball,abc123,football,monkey,letmein,shadow,master,696969,mustang,666666,qwertyuiop,123321,1234567890,pussy,superman,654321,1qaz2wsx,7777777,fuckyou,qazwsx,jordan,123qwe,000000,killer,trustno1,hunter,harley,zxcvbnm,asdfgh,buster,batman,soccer,tigger,charlie,sunshine,iloveyou,fuckme,ranger,hockey,computer,starwars,asshole,pepper,klaster,112233,zxcvbn,freedom,princess,maggie,pass,ginger,11111111,131313,fuck,love,cheese,159753,summer,chelsea,dallas,biteme,matrix,yankees,6969,corvette,austin,access,thunder,merlin,secret,diamond,hello,hammer,fucker,1234qwer,silver,gfhjkm,internet,samantha,golfer,scooter,test,orange,cookie,q1w2e3r4t5,maverick,sparky,phoenix,mickey,bigdog,snoopy,guitar,whatever,chicken,camaro,mercedes,peanut,ferrari,falcon,cowboy,welcome,sexy,samsung,steelers,smokey,dakota,arsenal,boomer,eagles,tigers,marina,nascar,booboo,gateway,yellow,porsche,monster,spider,diablo,hannah,bulldog,junior,london,purple,compaq,lakers,iceman,qwer1234,hardcore,cowboys,money,banana,ncc1701,boston,tennis,q1w2e3r4,coffee,scooby,123654,nikita,yamaha,mother,barney,brandy,chester,fuckoff,oliver,player,forever,rangers,midnight,chicago,bigdaddy,redsox,angel,badboy,fender,jasper,slayer,rabbit,natasha,marine,bigdick,wizard,marlboro,raiders,prince,casper,fishing,flower,jasmine,iwantu,panties,adidas,winter,winner,gandalf,password1,enter,ghbdtn,1q2w3e4r,golden,cocacola,jordan23,winston,madison,angels,panther,blowme,sexsex,bigtits,spanky,bitch,sophie,asdfasdf,horny,thx1138,toyota,tiger,dick,canada,12344321,blowjob,8675309,muffin,liverpoo,apples,qwerty123,passw0rd,abcd1234,pokemon,123abc,slipknot,qazxsw,123456a,scorpion,qwaszx,butter,startrek,rainbow,asdfghjkl,razz,newyork,redskins,gemini,cameron,qazwsxedc,florida,liverpool,turtle,sierra,viking,booger,butthead,doctor,rocket,159357,dolphins,captain,bandit,jaguar,packers,pookie,peaches,789456,asdf,dolphin,helpme,blue,theman,maxwell,qwertyui,shithead,lovers,maddog,giants,nirvana,metallic,hotdog,rosebud,mountain,warrior,stupid,elephant,suckit,success,bond007,jackass,alexis,porn,lucky,scorpio,samson,q1w2e3,azerty,rush2112,driver,freddy,1q2w3e4r5t,sydney,gators,dexter,red123,123456q,12345a,bubba,creative,voodoo,golf,trouble,america,nissan,gunner,garfield,bullshit,asdfghjk,5150,fucking,apollo,1qazxsw2,2112,eminem,legend,airborne,bear,beavis,apple,brooklyn,godzilla,skippy,4815162342,buddy,qwert,kitten,magic,shelby,beaver,phantom,asdasd,xavier,braves,darkness,blink182,copper,platinum,qweqwe,tomcat,01012011,girls,bigboy,102030,animal,police,online,11223344,voyager,lifehack,12qwaszx,fish,sniper,315475,trinity,blazer,heaven,lover,snowball,playboy,loveme,bubbles,hooters,cricket,willow,donkey,topgun,nintendo,saturn,destiny,pakistan,pumpkin,digital,sergey,redwings,explorer,tits,private,runner,therock,guinness,lasvegas,beatles,789456123,fire,cassie,christin,qwerty1,celtic,asdf1234,andrey,broncos,007007,babygirl,eclipse,fluffy,cartman,michigan,carolina,testing,alexande,birdie,pantera,cherry,vampire,mexico,dickhead,buffalo,genius,montana,beer,minecraft,maximus,flyers,lovely,stalker,metallica,doggie,snickers,speedy,bronco,lol123,paradise,yankee,horses,magnum,dreams,147258369,lacrosse,ou812,goober,enigma,qwertyu,scotty,pimpin,bollocks,surfer,cock,poohbear,genesis,star,asd123,qweasdzxc,racing,hello1,hawaii,eagle1,viper,poopoo,einstein,boobies,12345q,bitches,drowssap,simple,badger,alaska,action,jester,drummer,111222,spitfire,forest,maryjane,champion,diesel,svetlana,friday,hotrod,147258,chevy,lucky1,westside,security,google,badass,tester,shorty,thumper,hitman,mozart,zaq12wsx,boobs,reddog,010203,lizard,a123456,123456789a,ruslan,eagle,1232323q,scarface,qwerty12,147852,a12345,buddha,porno,420420,spirit,money1,stargate,qwe123,naruto,mercury,liberty,12345qwert,semperfi,suzuki,popcorn,spooky,marley,scotland,kitty,cherokee,vikings,simpsons,rascal,qweasd,hummer,loveyou,michael1,patches,russia,jupiter,penguin,passion,cumshot,vfhbyf,honda,vladimir,sandman,passport,raider,bastard,123789,infinity,assman,bulldogs,fantasy,sucker,1234554321,horney,domino,budlight,disney,ironman,usuckballz1,softball,brutus,redrum,bigred,mnbvcxz,fktrcfylh,karina,marines,digger,kawasaki,cougar,fireman,oksana,monday,cunt,justice,nigger,super,wildcats,tinker,logitech,dancer,swordfis,avalon,everton,alexandr,motorola,patriots,hentai,madonna,pussy1,ducati,colorado,connor,juventus,galore,smooth,freeuser,warcraft,boogie,titanic,wolverin,elizabet,arizona,valentin,saints,asdfg,accord,test123,password123,christ,yfnfif,stinky,slut,spiderma,naughty,chopper,hello123,ncc1701d,extreme,skyline,poop,zombie,pearljam,123qweasd,froggy,awesome,vision,pirate,fylhtq,dreamer,bullet,predator,empire,123123a,kirill,charlie1,panthers,penis,skipper,nemesis,rasdzv3,peekaboo,rolltide,cardinal,psycho,danger,mookie,happy1,wanker,chevelle,manutd,goblue,9379992,hobbes,vegeta,fyfcnfcbz,852456,picard,159951,windows,loverboy,victory,vfrcbv,bambam,serega,123654789,turkey,tweety,galina,hiphop,rooster,changeme,berlin,taurus,suckme,polina,electric,avatar,134679,maksim,raptor,alpha1,hendrix,newport,bigcock,brazil,spring,a1b2c3,madmax,alpha,britney,sublime,darkside,bigman,wolfpack,classic,hercules,ronaldo,letmein1,1q2w3e,741852963,spiderman,blizzard,123456789q,cheyenne,cjkysirj,tiger1,wombat,bubba1,pandora,zxc123,holiday,wildcat,devils,horse,alabama,147852369,caesar,12312,buddy1,bondage,pussycat,pickle,shaggy,catch22,leather,chronic,a1b2c3d4,admin,qqq111,qaz123,airplane,kodiak,freepass,billybob,sunset,katana,phpbb,chocolat,snowman,angel1,stingray,firebird,wolves,zeppelin,detroit,pontiac,gundam,panzer,vagina,outlaw,redhead,tarheels,greenday,nastya,01011980,hardon,engineer,dragon1,hellfire,serenity,cobra,fireball,lickme,darkstar,1029384756,01011,mustang1,flash,124578,strike,beauty,pavilion,01012000,bobafett,dbrnjhbz,bigmac,bowling,chris1,ytrewq,natali,pyramid,rulez,welcome1,dodgers,apache,swimming,whynot,teens,trooper,fuckit,defender,precious,135790,packard,weasel,popeye,lucifer,cancer,icecream,142536,raven,swordfish,presario,viktor,rockstar,blonde,james1,wutang,spike,pimp,atlanta,airforce,thailand,casino,lennon,mouse,741852,hacker,bluebird,hawkeye,456123,theone,catfish,sailor,goldfish,nfnmzyf,tattoo,pervert,barbie,maxima,nipples,machine,trucks,wrangler,rocks,tornado,lights,cadillac,bubble,pegasus,madman,longhorn,browns,target,666999,eatme,qazwsx123,microsoft,dilbert,christia,baller,lesbian,shooter,xfiles,seattle,qazqaz,cthutq,amateur,prelude,corona,freaky,malibu,123qweasdzxc,assassin,246810,atlantis,integra,pussies,iloveu,lonewolf,dragons,monkey1,unicorn,software,bobcat,stealth,peewee,openup,753951,srinivas,zaqwsx,valentina,shotgun,trigger,veronika,bruins,coyote,babydoll,joker,dollar,lestat,rocky1,hottie,random,butterfly,wordpass,smiley,sweety,snake,chipper,woody,samurai,devildog,gizmo,maddie,soso123aljg,mistress,freedom1,flipper,express,hjvfirf,moose,cessna,piglet,polaris,teacher,montreal,cookies,wolfgang,scully,fatboy,wicked,balls,tickle,bunny,dfvgbh,foobar,transam,pepsi,fetish,oicu812,basketba,toshiba,hotstuff,sunday,booty,gambit,31415926,impala,stephani,jessica1,hooker,lancer,knicks,shamrock,fuckyou2,stinger,314159,redneck,deftones,squirt,siemens,blaster,trucker,subaru,renegade,ibanez,manson,swinger,reaper,blondie,mylove,galaxy,blahblah,enterpri,travel,1234abcd,babylon5,indiana,skeeter,master1,sugar,ficken,smoke,bigone,sweetpea,fucked,trfnthbyf,marino,escort,smitty,bigfoot,babes,larisa,trumpet,spartan,valera,babylon,asdfghj,yankees1,bigboobs,stormy,mister,hamlet,aardvark,butterfl,marathon,paladin,cavalier,manchester,skater,indigo,hornet,buckeyes,01011990,indians,karate,hesoyam,toronto,diamonds,chiefs,buckeye,1qaz2wsx3edc,highland,hotsex,charger,redman,passwor,maiden,drpepper,storm,pornstar,garden,12345678910,pencil,sherlock,timber,thuglife,insane,pizza,jungle,jesus1,aragorn,1a2b3c,hamster,david1,triumph,techno,lollol,pioneer,catdog,321654,fktrctq,morpheus,141627,pascal,shadow1,hobbit,wetpussy,erotic,consumer,blabla,justme,stones,chrissy,spartak,goforit,burger,pitbull,adgjmptw,italia,barcelona,hunting,colors,kissme,virgin,overlord,pebbles,sundance,emerald,doggy,racecar,irina,element,1478963,zipper,alpine,basket,goddess,poison,nipple,sakura,chichi,huskers,13579,pussys,q12345,ultimate,ncc1701e,blackie,nicola,rommel,matthew1,caserta,omega,geronimo,sammy1,trojan,123qwe123,philips,nugget,tarzan,chicks,aleksandr,bassman,trixie,portugal,anakin,dodger,bomber,superfly,madness,q1w2e3r4t5y6,loser,123asd,fatcat,ybrbnf,soldier,warlock,wrinkle1,desire,sexual,babe,seminole,alejandr,951753,11235813,westham,andrei,concrete,access14,weed,letmein2,ladybug,naked,christop,trombone,tintin,bluesky,rhbcnbyf,qazxswedc,onelove,cdtnkfyf,whore,vfvjxrf,titans,stallion,truck,hansolo,blue22,smiles,beagle,panama,kingkong,flatron,inferno,mongoose,connect,poiuyt,snatch,qawsed,juice,blessed,rocker,snakes,turbo,bluemoon,sex4me,finger,jamaica,a1234567,mulder,beetle,fuckyou1,passat,immortal,plastic,123454321,anthony1,whiskey,dietcoke,suck,spunky,magic1,monitor,cactus,exigen,planet,ripper,teen,spyder,apple1,nolimit,hollywoo,sluts,sticky,trunks,1234321,14789632,pickles,sailing,bonehead,ghbdtnbr,delta,charlott,rubber,911911,112358,molly1,yomama,hongkong,jumper,william1,ilovesex,faster,unreal,cumming,memphis,1123581321,nylons,legion,sebastia,shalom,pentium,geheim,werewolf,funtime,ferret,orion,curious,555666,niners,cantona,sprite,philly,pirates,abgrtyu,lollipop,eternity,boeing,super123,sweets,cooldude,tottenha,green1,jackoff,stocking,7895123,moomoo,martini,biscuit,drizzt,colt45,fossil,makaveli,snapper,satan666,maniac,salmon,patriot,verbatim,nasty,shasta,asdzxc,shaved,blackcat,raistlin,qwerty12345,punkrock,cjkywt,01012010,4128,waterloo,crimson,twister,oxford,musicman,seinfeld,biggie,condor,ravens,megadeth,wolfman,cosmos,sharks,banshee,keeper,foxtrot,gn56gn56,skywalke,velvet,black1,sesame,dogs,squirrel,privet,sunrise,wolverine,sucks,legolas,grendel,ghost,cats,carrot,frosty,lvbnhbq,blades,stardust,frog,qazwsxed,121314,coolio,brownie,groovy,twilight,daytona,vanhalen,pikachu,peanuts,licker,hershey,jericho,intrepid,ninja,1234567a,zaq123,lobster,goblin,punisher,strider,shogun,kansas,amadeus,seven7,jason1,neptune,showtime,muscle,oldman,ekaterina,rfrfirf,getsome,showme,111222333,obiwan,skittles,danni,tanker,maestro,tarheel,anubis,hannibal,anal,newlife,gothic,shark,fighter,blue123,blues,123456z,princes,slick,chaos,thunder1,sabine,1q2w3e4r5t6y,python,test1,mirage,devil,clover,tequila,chelsea1,surfing,delete,potato,chubby,panasonic,sandiego,portland,baggins,fusion,sooners,blackdog,buttons,californ,moscow,playtime,mature,1a2b3c4d,dagger,dima,stimpy,asdf123,gangster,warriors,iverson,chargers,byteme,swallow,liquid,lucky7,dingdong,nymets,cracker,mushroom,456852,crusader,bigguy,miami,dkflbvbh,bugger,nimrod,tazman,stranger,newpass,doodle,powder,gotcha,guardian,dublin,slapshot,septembe,147896325,pepsi1,milano,grizzly,woody1,knights,photos,2468,nookie,charly,rammstein,brasil,123321123,scruffy,munchkin,poopie,123098,kittycat,latino,walnut,1701,thegame,viper1,1passwor,kolobok,picasso,robert1,barcelon,bananas,trance,auburn,coltrane,eatshit,goodluck,starcraft,wheels,parrot,postal,blade,wisdom,pink,gorilla,katerina,pass123,andrew1,shaney14,dumbass,osiris,fuck_inside,oakland,discover,ranger1,spanking,lonestar,bingo,meridian,ping,heather1,dookie,stonecol,megaman,192837465,rjntyjr,ledzep,lowrider,25802580,richard1,firefly,griffey,racerx,paradox,ghjcnj,gangsta,zaq1xsw2,tacobell,weezer,sirius,halflife,buffett,shiloh,123698745,vertigo,sergei,aliens,sobaka,keyboard,kangaroo,sinner,soccer1,0.0.000,bonjour,socrates,chucky,hotboy,sprint,0007,sarah1,scarlet,celica,shazam,formula1,sommer,trebor,qwerasdf,jeep,mailcreated5240,bollox,asshole1,fuckface,honda1,rebels,vacation,lexmark,penguins,12369874,ragnarok,formula,258456,tempest,vfhecz,tacoma,qwertz,colombia,flames,rockon,duck,prodigy,wookie,dodgeram,mustangs,123qaz,sithlord,smoker,server,bang,incubus,scoobydo,oblivion,molson,kitkat,titleist,rescue,zxcv1234,carpet,1122,bigballs,tardis,jimbob,xanadu,blueeyes,shaman,mersedes,pooper,pussy69,golfing,hearts,mallard,12312312,kenwood,patrick1,dogg,cowboys1,oracle,123zxc,nuttertools,102938,topper,1122334455,shemale,sleepy,gremlin,yourmom,123987,gateway1,printer,monkeys,peterpan,mikey,kingston,cooler,analsex,jimbo,pa55word,asterix,freckles,birdman,frank1,defiant,aussie,stud,blondes,tatyana,445566,aspirine,mariners,jackal,deadhead,katrin,anime,rootbeer,frogger,polo,scooter1,hallo,noodles,thomas1,parola,shaolin,celine,11112222,plymouth,creampie,justdoit,ohyeah,fatass,assfuck,amazon,1234567q,kisses,magnus,camel,nopass,bosco,987456,6751520,harley1,putter,champs,massive,spidey,lightnin,camelot,letsgo,gizmodo,aezakmi,bones,caliente,12121,goodtime,thankyou,raiders1,brucelee,redalert,aquarius,456654,catherin,smokin,pooh,mypass,astros,roller,porkchop,sapphire,qwert123,kevin1,a1s2d3f4,beckham,atomic,rusty1,vanilla,qazwsxedcrfv,hunter1,kaktus,cxfcnmt,blacky,753159,elvis1,aggies,blackjac,bangkok,scream,123321q,iforgot,power1,kasper,abc12,buster1,slappy,shitty,veritas,chevrole,amber1,01012001,vader,amsterdam,jammer,primus,spectrum,eduard,granny,horny1,sasha1,clancy,usa123,satan,diamond1,hitler,avenger,1221,spankme,123456qwerty,simba,smudge,scrappy,labrador,john316,syracuse,front242,falcons,husker,candyman,commando,gator,pacman,delta1,pancho,krishna,fatman,clitoris,pineappl,lesbians,8j4ye3uz,barkley,vulcan,punkin,boner,celtics,monopoly,flyboy,romashka,hamburg,123456aa,lick,gangbang,223344,area51,spartans,aaa111,tricky,snuggles,drago,homerun,vectra,homer1,hermes,topcat,cuddles,infiniti,1234567890q,cosworth,goose,phoenix1,killer1,ivanov,bossman,qawsedrf,peugeot,exigent,doberman,durango,brandon1,plumber,telefon,horndog,laguna,rbhbkk,dawg,webmaster,breeze,beast,porsche9,beefcake,leopard,redbull,oscar1,topdog,godsmack,theking,pics,omega1,speaker,viktoria,fuckers,bowler,starbuck,gjkbyf,valhalla,anarchy,blacks,herbie,kingpin,starfish,nokia,loveit,achilles,906090,labtec,ncc1701a,fitness,jordan1,brando,arsenal1,bull,kicker,napass,desert,sailboat,bohica,tractor,hidden,muppet,jackson1,jimmy1,terminator,phillies,pa55w0rd,terror,farside,swingers,legacy,frontier,butthole,doughboy,jrcfyf,tuesday,sabbath,daniel1,nebraska,homers,qwertyuio,azamat,fallen,agent007,striker,camels,iguana,looker,pinkfloy,moloko,qwerty123456,dannyboy,luckydog,789654,pistol,whocares,charmed,skiing,select,franky,puppy,daniil,vladik,vette,vfrcbvrf,ihateyou,nevada,moneys,vkontakte,mandingo,puppies,666777,mystic,zidane,kotenok,dilligaf,budman,bunghole,zvezda,123457,triton,golfball,technics,trojans,panda,laptop,rookie,01011991,15426378,aberdeen,gustav,jethro,enterprise,igor,stripper,filter,hurrican,rfnthbyf,lespaul,gizmo1,butch,132435,dthjybrf,1366613,excalibu,963852,nofear,momoney,possum,cutter,oilers,moocow,cupcake,gbpltw,batman1,splash,svetik,super1,soleil,bogdan,melissa1,vipers,babyboy,tdutybq,lancelot,ccbill,keystone,passwort,flamingo,firefox,dogman,vortex,rebel,noodle,raven1,zaphod,killme,pokemon1,coolman,danila,designer,skinny,kamikaze,deadman,gopher,doobie,warhammer,deeznuts,freaks,engage,chevy1,steve1,apollo13,poncho,hammers,azsxdc,dracula,000007,sassy,bitch1,boots,deskjet,12332,macdaddy,mighty,rangers1,manchest,sterlin,casey1,meatball,mailman,sinatra,cthulhu,summer1,bubbas,cartoon,bicycle,eatpussy,truelove,sentinel,tolkien,breast,capone,lickit,summit,123456k,peter1,daisy1,kitty1,123456789z,crazy1,jamesbon,texas1,sexygirl,362436,sonic,billyboy,redhot,microsof,microlab,daddy1,rockets,iloveyo,fernand,gordon24,danie,cutlass,polska,star69,titties,pantyhos,01011985,thekid,aikido,gofish,mayday,1234qwe,coke,anfield,sony,lansing,smut,scotch,sexx,catman,73501505,hustler,saun,dfkthbz,passwor1,jenny1,azsxdcfv,cheers,irish1,gabrie,tinman,orioles,1225,charlton,fortuna,01011970,airbus,rustam,xtreme,bigmoney,zxcasd,retard,grumpy,huskies,boxing,4runner,kelly1,ultima,warlord,fordf150,oranges,rotten,asdfjkl,superstar,denali,sultan,bikini,saratoga,thor,figaro,sixers,wildfire,vladislav,128500,sparta,mayhem,greenbay,chewie,music1,number1,cancun,fabie,mellon,poiuytrewq,cloud9,crunch,bigtime,chicken1,piccolo,bigbird,321654987,billy1,mojo,01011981,maradona,sandro,chester1,bizkit,rjirfrgbde,789123,rightnow,jasmine1,hyperion,treasure,meatloaf,armani,rovers,jarhead,01011986,cruise,coconut,dragoon,utopia,davids,cosmo,rfhbyf,reebok,1066,charli,giorgi,sticks,sayang,pass1234,exodus,anaconda,zaqxsw,illini,woofwoof,emily1,sandy1,packer,poontang,govols,jedi,tomato,beaner,cooter,creamy,lionking,happy123,albatros,poodle,kenworth,dinosaur,greens,goku,happyday,eeyore,tsunami,cabbage,holyshit,turkey50,memorex,chaser,bogart,orgasm,tommy1,volley,whisper,knopka,ericsson,walleye,321123,pepper1,katie1,chickens,tyler1,corrado,twisted,100000,zorro,clemson,zxcasdqwe,tootsie,milana,zenith,fktrcfylhf,shania,frisco,polniypizdec0211,crazybab,junebug,fugazi,rereirf,vfvekz,1001,sausage,vfczyz,koshka,clapton,justin1,anhyeuem,condom,fubar,hardrock,skywalker,tundra,cocks,gringo,150781,canon,vitalik,aspire,stocks,samsung1,applepie,abc12345,arjay,gandalf1,boob,pillow,sparkle,gmoney,rockhard,lucky13,samiam,everest,hellyeah,bigsexy,skorpion,rfrnec,hedgehog,australi,candle,slacker,dicks,voyeur,jazzman,america1,bobby1,br0d3r,wolfie,vfksirf,1qa2ws3ed,13243546,fright,yosemite,temp,karolina,fart,barsik,surf,cheetah,baddog,deniska,starship,bootie,milena,hithere,kume,greatone,dildo,50cent,0.0.0.000,albion,amanda1,midget,lion,maxell,football1,cyclone,freeporn,nikola,bonsai,kenshin,slider,balloon,roadkill,killbill,222333,jerkoff,78945612,dinamo,tekken,rambler,goliath,cinnamon,malaka,backdoor,fiesta,packers1,rastaman,fletch,sojdlg123aljg,stefano,artemis,calico,nyjets,damnit,robotech,duchess,rctybz,hooter,keywest,18436572,hal9000,mechanic,pingpong,operator,presto,sword,rasputin,spank,bristol,faggot,shado,963852741,amsterda,321456,wibble,carrera,alibaba,majestic,ramses,duster,route66,trident,clipper,steeler,wrestlin,divine,kipper,gotohell,kingfish,snake1,passwords,buttman,pompey,viagra,zxcvbnm1,spurs,332211,slutty,lineage2,oleg,macross,pooter,brian1,qwert1,charles1,slave,jokers,yzerman,swimmer,ne1469,nwo4life,solnce,seamus,lolipop,pupsik,moose1,ivanova,secret1,matador,love69,420247,ktyjxrf,subway,cinder,vermont,pussie,chico,florian,magick,guiness,allsop,ghetto,flash1,a123456789,typhoon,dfkthf,depeche,skydive,dammit,seeker,fuckthis,crysis,kcj9wx5n,umbrella,r2d2c3po,123123q,snoopdog,critter,theboss,ding,162534,splinter,kinky,cyclops,jayhawk,456321,caramel,qwer123,underdog,caveman,onlyme,grapes,feather,hotshot,fuckher,renault,george1,sex123,pippen,000001,789987,floppy,cunts,megapass,1000,pornos,usmc,kickass,great1,quattro,135246,wassup,helloo,p0015123,nicole1,chivas,shannon1,bullseye,java,fishes,blackhaw,jamesbond,tunafish,juggalo,dkflbckfd,123789456,dallas1,translator,122333,beanie,alucard,gfhjkm123,supersta,magicman,ashley1,cohiba,xbox360,caligula,12131415,facial,7753191,dfktynbyf,cobra1,cigars,fang,klingon,bob123,safari,looser,10203,deepthroat,malina,200000,tazmania,gonzo,goalie,jacob1,monaco,cruiser,misfit,vh5150,tommyboy,marino13,yousuck,sharky,vfhufhbnf,horizon,absolut,brighton,123456r,death1,kungfu,maxx,forfun,mamapapa,enter1,budweise,banker,getmoney,kostya,qazwsx12,bigbear,vector,fallout,nudist,gunners,royals,chainsaw,scania,trader,blueboy,walrus,eastside,kahuna,qwerty1234,love123,steph,01011989,cypress,champ,undertaker,ybrjkfq,europa,snowboar,sabres,moneyman,chrisbln,minime,nipper,groucho,whitey,viewsonic,penthous,wolf359,fabric,flounder,coolguy,whitesox,passme,smegma,skidoo,thanatos,fucku2,snapple,dalejr,mondeo,thesims,mybaby,panasoni,sinbad,thecat,topher,frodo,sneakers,q123456,z1x2c3,alfa,chicago1,taylor1,ghjcnjnfr,cat123,olivier,cyber,titanium,0420,madison1,jabroni,dang,hambone,intruder,holly1,gargoyle,sadie1,static,poseidon,studly,newcastl,sexxxx,poppy,johannes,danzig,beastie,musica,buckshot,sunnyday,adonis,bluedog,bonkers,2128506,chrono,compute,spawn,01011988,turbo1,smelly,wapbbs,goldstar,ferrari1,778899,quantum,pisces,boomboom,gunnar,1024,test1234,florida1,nike,superman1,multiplelo,custom,motherlode,1qwerty,westwood,usnavy,apple123,daewoo,korn,stereo,sasuke,sunflowe,watcher,dharma,555777,mouse1,assholes,babyblue,123qwerty,marius,walmart,snoop,starfire,tigger1,paintbal,knickers,aaliyah,lokomotiv,theend,winston1,sapper,rover,erotica,scanner,racer,zeus,sexy69,doogie,bayern,joshua1,newbie,scott1,losers,droopy,outkast,martin1,dodge1,wasser,ufkbyf,rjycnfynby,thirteen,12345z,112211,hotred,deejay,hotpussy,192837,jessic,philippe,scout,panther1,cubbies,havefun,magpie,fghtkm,avalanch,newyork1,pudding,leonid,harry1,cbr600,audia4,bimmer,fucku,01011984,idontknow,vfvfgfgf,1357,aleksey,builder,01011987,zerocool,godfather,mylife,donuts,allmine,redfish,777888,sascha,nitram,bounce,333666,smokes,1x2zkg8w,rodman,stunner,zxasqw12,hoosier,hairy,beretta,insert,123456s,rtyuehe,francesc,tights,cheese1,micron,quartz,hockey1,gegcbr,searay,jewels,bogey,paintball,celeron,padres,bing,syncmaster,ziggy,simon1,beaches,prissy,diehard,orange1,mittens,aleksandra,queens,02071986,biggles,thongs,southpark,artur,twinkle,gretzky,rabota,cambiami,monalisa,gollum,chuckles,spike1,gladiator,whisky,spongebob,sexy1,03082006,mazafaka,meathead,4121,ou8122,barefoot,12345678q,cfitymrf,bigass,a1s2d3,kosmos,blessing,titty,clevelan,terrapin,ginger1,johnboy,maggot,clarinet,deeznutz,336699,stumpy,stoney,footbal,traveler,volvo,bucket,snapon,pianoman,hawkeyes,futbol,casanova,tango,goodboy,scuba,honey1,sexyman,warthog,mustard,abc1234,nickel,10203040,meowmeow,1012,boricua,prophet,sauron,12qwas,reefer,andromeda,crystal1,joker1,90210,goofy,loco,lovesex,triangle,whatsup,mellow,bengals,monster1,maste,01011910,lover1,love1,123aaa,sunshin,smeghead,hokies,sting,welder,rambo,cerberus,bunny1,rockford,monke,1q2w3e4r5,goldwing,gabriell,buzzard,crjhgbjy,james007,rainman,groove,tiberius,purdue,nokia6300,hayabusa,shou,jagger,diver,zigzag,poochie,usarmy,phish,redwood,redwing,12345679,salamander,silver1,abcd123,sputnik,boobie,ripple,eternal,12qw34er,thegreat,allstar,slinky,gesperrt,mishka,whiskers,pinhead,overkill,sweet1,rhfcjnrf,montgom240,sersolution,jamie1,starman,proxy,swords,nikolay,bacardi,rasta,badgirl,rebecca1,wildman,penny1,spaceman,1007,10101,logan1,hacked,bulldog1,helmet,windsor,buffy1,runescape,trapper,123451,banane,dbrnjh,ripken,12345qwe,frisky,shun,fester,oasis,lightning,ib6ub9,cicero,kool,pony,thedog,784512,01011992,megatron,illusion,edward1,napster,11223,squash,roadking,woohoo,19411945,hoosiers,01091989,tracker,bagira,midway,leavemealone,br549,14725836,235689,menace,rachel1,feng,laser,stoned,realmadrid,787898,balloons,tinkerbell,5551212,maria1,pobeda,heineken,sonics,moonlight,optimus,comet,orchid,02071982,jaybird,kashmir,12345678a,chuang,chunky,peach,mortgage,rulezzz,saleen,chuckie,zippy,fishing1,gsxr750,doghouse,maxim,reader,shai,buddah,benfica,chou,salomon,meister,eraser,blackbir,bigmike,starter,pissing,angus,deluxe,eagles1,hardcock,135792468,mian,seahawks,godfathe,bookworm,gregor,intel,talisman,blackjack,babyface,hawaiian,dogfood,zhong,01011975,sancho,ludmila,medusa,mortimer,123456654321,roadrunn,just4me,stalin,01011993,handyman,alphabet,pizzas,calgary,clouds,password2,cgfhnfr,f**k,cubswin,gong,lexus,max123,xxx123,digital1,gfhjkm1,7779311,missy1,michae,beautifu,gator1,1005,pacers,buddie,chinook,heckfy,dutchess,sally1,breasts,beowulf,darkman,jenn,tiffany1,zhei,quan,qazwsx1,satana,shang,idontkno,smiths,puddin,nasty1,teddybea,valkyrie,passwd,chao,boxster,killers,yoda,cheater,inuyasha,beast1,wareagle,foryou,dragonball,mermaid,bhbirf,teddy1,dolphin1,misty1,delphi,gromit,sponge,qazzaq,fytxrf,gameover,diao,sergi,beamer,beemer,kittykat,rancid,manowar,adam12,diggler,assword,austin1,wishbone,gonavy,sparky1,fisting,thedude,sinister,1213,venera,novell,salsero,jayden,fuckoff1,linda1,vedder,02021987,1pussy,redline,lust,jktymrf,02011985,dfcbkbq,dragon12,chrome,gamecube,titten,cong,bella1,leng,02081988,eureka,bitchass,147369,banner,lakota,123321a,mustafa,preacher,hotbox,02041986,z1x2c3v4,playstation,01011977,claymore,electra,checkers,zheng,qing,armagedon,02051986,wrestle,svoboda,bulls,nimbus,alenka,madina,newpass6,onetime,aa123456,bartman,02091987,silverad,electron,12345t,devil666,oliver1,skylar,rhtdtlrj,gobucks,johann,12011987,milkman,02101985,camper,thunderb,bigbutt,jammin,davide,cheeks,goaway,lighter,claudi,thumbs,pissoff,ghostrider,cocaine,teng,squall,lotus,hootie,blackout,doitnow,subzero,02031986,marine1,02021988,pothead,123456qw,skate,1369,peng,antoni,neng,miao,bcfields,1492,marika,794613,musashi,tulips,nong,piao,chai,ruan,southpar,02061985,nude,mandarin,654123,ninjas,cannabis,jetski,xerxes,zhuang,kleopatra,dickie,bilbo,pinky,morgan1,1020,1017,dieter,baseball1,tottenham,quest,yfnfkmz,dirtbike,1234567890a,mango,jackson5,ipswich,iamgod,02011987,tdutybz,modena,qiao,slippery,qweasd123,bluefish,samtron,toon,111333,iscool,02091986,petrov,fuzzy,zhou,1357924680,mollydog,deng,02021986,1236987,pheonix,zhun,ghblehjr,othello,starcraf,000111,sanfran,a11111,cameltoe,badman,vasilisa,jiang,1qaz2ws,luan,sveta,12qw12,akira,chuai,369963,cheech,beatle,pickup,paloma,01011983,caravan,elizaveta,gawker,banzai,pussey,mullet,seng,bingo1,bearcat,flexible,farscape,borussia,zhuai,templar,guitar1,toolman,yfcntymrf,chloe1,xiang,slave1,guai,nuggets,02081984,mantis,slim,scorpio1,fyutkbyf,thedoors,02081987,02061986,123qq123,zappa,fergie,7ugd5hip2j,huai,asdfzxcv,sunflower,pussyman,deadpool,bigtit,01011982,love12,lassie,skyler,gatorade,carpedie,jockey,mancity,spectre,02021984,cameron1,artemka,reng,02031984,iomega,jing,moritz,spice,rhino,spinner,heater,zhai,hover,talon,grease,qiong,corleone,ltybcrf,tian,cowboy1,hippie,chimera,ting,alex123,02021985,mickey1,corsair,sonoma,aaron1,xxxpass,bacchus,webmaste,chuo,xyz123,chrysler,spurs1,artem,shei,cosmic,01020304,deutsch,gabriel1,123455,oceans,987456321,binladen,latinas,a12345678,speedo,buttercu,02081989,21031988,merlot,millwall,ceng,kotaku,jiong,dragonba,2580,stonecold,snuffy,01011999,02011986,hellos,blaze,maggie1,slapper,istanbul,bonjovi,babylove,mazda,bullfrog,phoeni,meng,porsche1,nomore,02061989,bobdylan,capslock,orion1,zaraza,teddybear,ntktajy,myname,rong,wraith,mets,niao,02041984,smokie,chevrolet,dialog,gfhjkmgfhjkm,dotcom,vadim,monarch,athlon,mikey1,hamish,pian,liang,coolness,chui,thoma,ramones,ciccio,chippy,eddie1,house1,ning,marker,cougars,jackpot,barbados,reds,pdtplf,knockers,cobalt,amateurs,dipshit,napoli,kilroy,pulsar,jayhawks,daemon,alexey,weng,shuang,9293709b13,shiner,eldorado,soulmate,mclaren,golfer1,andromed,duan,50spanks,sexyboy,dogshit,02021983,shuo,kakashka,syzygy,111111a,yeahbaby,qiang,netscape,fulham,120676,gooner,zhui,rainbow6,laurent,dog123,halifax,freeway,carlitos,147963,eastwood,microphone,monkey12,1123,persik,coldbeer,geng,nuan,danny1,fgtkmcby,entropy,gadget,just4fun,sophi,baggio,carlito,1234567891,02021989,02041983,specialk,piramida,suan,bigblue,salasana,hopeful,mephisto,bailey1,hack,annie1,generic,violetta,spencer1,arcadia,02051983,hondas,9562876,trainer,jones1,smashing,liao,159632,iceberg,rebel1,snooker,temp123,zang,matteo,fastball,q2w3e4r5,bamboo,fuckyo,shutup,astro,buddyboy,nikitos,redbird,maxxxx,shitface,02031987,kuai,kissmyass,sahara,radiohea,1234asdf,wildcard,maxwell1,patric,plasma,heynow,bruno1,shao,bigfish,misfits,sassy1,sheng,02011988,02081986,testpass,nanook,cygnus,licking,slavik,pringles,xing,1022,ninja1,submit,dundee,tiburon,pinkfloyd,yummy,shuai,guang,chopin,obelix,insomnia,stroker,1a2s3d4f,1223,playboy1,lazarus,jorda,spider1,homerj,sleeper,02041982,darklord,cang,02041988,02041987,tripod,magician,jelly,telephon,15975,vsjasnel12,pasword,iverson3,pavlov,homeboy,gamecock,amigo,brodie,budapest,yjdsqgfhjkm,reckless,02011980,pang,tiger123,2469,mason1,orient,01011979,zong,cdtnbr,maksimka,1011,bushido,taxman,giorgio,sphinx,kazantip,02101984,concorde,verizon,lovebug,georg,sam123,seadoo,qazwsxedc123,jiao,jezebel,pharmacy,abnormal,jellybea,maxime,puffy,islander,bunnies,jiggaman,drakon,010180,pluto,zhjckfd,12365,classics,crusher,mordor,hooligan,strawberry,02081985,scrabble,hawaii50,1224,wg8e3wjf,cthtuf,premium,arrow,123456qwe,mazda626,ramrod,tootie,rhjrjlbk,ghost1,1211,bounty,niang,02071984,goat,killer12,sweetnes,porno1,masamune,426hemi,corolla,mariposa,hjccbz,doomsday,bummer,blue12,zhao,bird33,excalibur,samsun,kirsty,buttfuck,kfhbcf,zhuo,marcello,ozzy,02021982,dynamite,655321,master12,123465,lollypop,stepan,1qa2ws,spiker,goirish,callum,michael2,moonbeam,attila,henry1,lindros,andrea1,sporty,lantern,12365478,nextel,violin,volcom,998877,water1,imation,inspiron,dynamo,citadel,placebo,clowns,tiao,02061988,tripper,dabears,haggis,merlin1,02031985,anthrax,amerika,iloveme,vsegda,burrito,bombers,snowboard,forsaken,katarina,a1a2a3,woofer,tigger2,fullmoon,tiger2,spock,hannah1,snoopy1,sexxxy,sausages,stanislav,cobain,robotics,exotic,green123,mobydick,senators,pumpkins,fergus,asddsa,147741,258852,windsurf,reddevil,vfitymrf,nevermind,nang,woodland,4417,mick,shui,q1q2q3,wingman,69696,superb,zuan,ganesh,pecker,zephyr,anastasiya,icu812,larry1,02081982,broker,zalupa,mihail,vfibyf,dogger,7007,paddle,varvara,schalke,1z2x3c,presiden,yankees2,tuning,poopy,02051982,concord,vanguard,stiffy,rjhjktdf,felix1,wrench,firewall,boxer,bubba69,popper,02011984,temppass,gobears,cuan,tipper,fuckme1,kamila,thong,puss,bigcat,drummer1,02031982,sowhat,digimon,tigers1,rang,jingle,bian,uranus,soprano,mandy1,dusty1,fandango,aloha,pumpkin1,postman,02061980,dogcat,bombay,pussy123,onetwo,highheel,pippo,julie1,laura1,pepito,beng,smokey1,stylus,stratus,reload,duckie,karen1,jimbo1,225588,369258,krusty,snappy,asdf12,electro,111qqq,kuang,fishin,clit,abstr,christma,qqqqq1,1234560,carnage,guyver,boxers,kittens,zeng,1000000,qwerty11,toaster,cramps,yugioh,02061987,icehouse,zxcvbnm123,pineapple,namaste,harrypotter,mygirl,falcon1,earnhard,fender1,spikes,nutmeg,01081989,dogboy,02091983,369852,softail,mypassword,prowler,bigboss,1112,harvest,heng,jubilee,killjoy,basset,keng,zaqxswcde,redsox1,biao,titan,misfit99,robot,wifey,kidrock,02101987,gameboy,enrico,1z2x3c4v,broncos1,arrows,havana,banger,cookie1,chriss,123qw,platypus,cindy1,lumber,pinball,foxy,london1,1023,05051987,02041985,password12,superma,longbow,radiohead,nigga,12051988,spongebo,qwert12345,abrakadabra,dodgers1,02101989,chillin,niceguy,pistons,hookup,santafe,bigben,jets,1013,vikings1,mankind,viktoriya,beardog,hammer1,02071980,reddwarf,magelan,longjohn,jennife,gilles,carmex2,02071987,stasik,bumper,doofus,slamdunk,pixies,garion,steffi,alessandro,beerman,niceass,warrior1,honolulu,134679852,visa,johndeer,mother1,windmill,boozer,oatmeal,aptiva,busty,delight,tasty,slick1,bergkamp,badgers,guitars,puffin,02091981,nikki1,irishman,miller1,zildjian,123000,airwolf,magnet,anai,install,02041981,02061983,astra,romans,megan1,mudvayne,freebird,muscles,dogbert,02091980,02091984,snowflak,01011900,mang,joseph1,nygiants,playstat,junior1,vjcrdf,qwer12,webhompas,giraffe,pelican,jefferso,comanche,bruiser,monkeybo,kjkszpj,123456l,micro,albany,02051987,angel123,epsilon,aladin,death666,hounddog,josephin,altima,chilly,02071988,78945,ultra,02041979,gasman,thisisit,pavel,idunno,kimmie,05051985,paulie,ballin,medion,moondog,manolo,pallmall,climber,fishbone,genesis1,153624,toffee,tbone,clippers,krypton,jerry1,picturs,compass,111111q,02051988,1121,02081977,sairam,getout,333777,cobras,22041987,bigblock,severin,booster,norwich,whiteout,ctrhtn,123456m,02061984,hewlett,shocker,fuckinside,02031981,chase1,white1,versace,123456789s,basebal,iloveyou2,bluebell,08031986,anthon,stubby,foreve,undertak,werder,saiyan,mama123,medic,chipmunk,mike123,mazdarx7,qwe123qwe,bowwow,kjrjvjnbd,celeb,choochoo,demo,lovelife,02051984,colnago,lithium,02051989,15051981,zzzxxx,welcom,anastasi,fidelio,franc,26061987,roadster,stone55,drifter,hookem,hellboy,1234qw,cbr900rr,sinned,good123654,storm1,gypsy,zebra,zachary1,toejam,buceta,02021979,testing1,redfox,lineage,mike1,highbury,koroleva,nathan1,washingt,02061982,02091985,vintage,redbaron,dalshe,mykids,11051987,macbeth,julien,james123,krasotka,111000,10011986,987123,pipeline,tatarin,sensei,codered,komodo,frogman,7894561230,nascar24,juicy,01031988,redrose,mydick,pigeon,tkbpfdtnf,smirnoff,1215,spam,winner1,flyfish,moskva,81fukkc,21031987,olesya,starligh,summer99,13041988,fishhead,freesex,super12,06061986,azazel,scoobydoo,02021981,cabron,yogibear,sheba1,konstantin,tranny,chilli,terminat,ghbywtccf,slowhand,soccer12,cricket1,fuckhead,1002,seagull,achtung,blam,bigbob,bdsm,nostromo,survivor,cnfybckfd,lemonade,boomer1,rainbow1,rober,irinka,cocksuck,peaches1,itsme,sugar1,zodiac,upyours,dinara,135791,sunny1,chiara,johnson1,02041989,solitude,habibi,sushi,markiz,smoke1,rockies,catwoman,johnny1,qwerty7,bearcats,username,01011978,wanderer,ohshit,02101986,sigma,stephen1,paradigm,02011989,flanker,sanity,jsbach,spotty,bologna,fantasia,chevys,borabora,cocker,74108520,123ewq,12021988,01061990,gtnhjdbx,02071981,01011960,sundevil,3000gt,mustang6,gagging,maggi,armstron,yfnfkb,13041987,revolver,02021976,trouble1,madcat,jeremy1,jackass1,volkswag,30051985,corndog,pool6123,marines1,03041991,pizza1,piggy,sissy,02031979,sunfire,angelus,undead,24061986,14061991,wildbill,shinobi,45m2do5bs,123qwer,21011989,cleopatr,lasvega,hornets,amorcit,11081989,coventry,nirvana1,destin,sidekick,20061988,02081983,gbhfvblf,sneaky,bmw325,22021989,nfytxrf,sekret,kalina,zanzibar,hotone,qazws,wasabi,heidi1,highlander,blues1,hitachi,paolo,23041987,slayer1,simba1,02011981,tinkerbe,kieran,01121986,172839,boiler,1125,bluesman,waffle,asdfgh01,threesom,conan,1102,reflex,18011987,nautilus,everlast,fatty,vader1,01071986,cyborg,ghbdtn123,birddog,rubble,02071983,suckers,02021973,skyhawk,12qw12qw,dakota1,joebob,nokia6233,woodie,longdong,lamer,troll,ghjcnjgfhjkm,420000,boating,nitro,armada,messiah,1031,penguin1,02091989,americ,02071989,redeye,asdqwe123,07071987,monty1,goten,spikey,sonata,635241,tokiohotel,sonyericsson,citroen,compaq1,1812,umpire,belmont,jonny,pantera1,nudes,palmtree,14111986,fenway,bighead,razor,gryphon,andyod22,aaaaa1,taco,10031988,enterme,malachi,dogface,reptile,01041985,dindom,handball,marseille,candy1,19101987,torino,tigge,matthias,viewsoni,13031987,stinker,evangelion,24011985,123456123,rampage,sandrine,02081980,thecrow,astral,28041987,sprinter,private1,seabee,shibby,02101988,25081988,fearless,junkie,01091987,aramis,antelope,draven,fuck1,mazda6,eggman,02021990,barselona,buddy123,19061987,fyfnjkbq,nancy1,12121990,10071987,sluggo,kille,hotties,irishka,zxcasdqwe123,shamus,fairlane,honeybee,soccer10,13061986,fantomas,17051988,10051987,20111986,gladiato,karachi,gambler,gordo,01011995,biatch,matthe,25800852,papito,excite,buffalo1,bobdole,cheshire,player1,28021992,thewho,10101986,pinky1,mentor,tomahawk,brown1,03041986,bismillah,bigpoppa,ijrjkfl,01121988,runaway,08121986,skibum,studman,helper,squeak,holycow,manfred,harlem,glock,gideon,987321,14021985,yellow1,wizard1,margarit,success1,medved,sf49ers,lambda,pasadena,johngalt,quasar,1776,02031980,coldplay,amand,playa,bigpimp,04041991,capricorn,elefant,sweetness,bruce1,luca,dominik,10011990,biker,09051945,datsun,elcamino,trinitro,malice,audi,voyager1,02101983,joe123,carpente,spartan1,mario1,glamour,diaper,12121985,22011988,winter1,asimov,callisto,nikolai,pebble,02101981,vendetta,david123,boytoy,11061985,02031989,iloveyou1,stupid1,cayman,casper1,zippo,yamahar1,wildwood,foxylady,calibra,02041980,27061988,dungeon,leedsutd,30041986,11051990,bestbuy,antares,dominion,24680,01061986,skillet,enforcer,derparol,01041988,196969,29071983,f00tball,purple1,mingus,25031987,21031990,remingto,giggles,klaste,3x7pxr,01011994,coolcat,29051989,megane,20031987,02051980,04041988,synergy,0000007,macman,iforget,adgjmp,vjqgfhjkm,28011987,rfvfcenhf,16051989,25121987,16051987,rogue,mamamia,08051990,20091991,1210,carnival,bolitas,paris1,dmitriy,dimas,05051989,papillon,knuckles,29011985,hola,tophat,28021990,100500,cutiepie,devo,415263,ducks,ghjuhfvvf,asdqwe,22021986,freefall,parol,02011983,zarina,buste,vitamin,warez,bigones,17061988,baritone,jamess,twiggy,mischief,bitchy,hetfield,1003,dontknow,grinch,sasha_007,18061990,12031985,12031987,calimero,224466,letmei,15011987,acmilan,alexandre,02031977,08081988,whiteboy,21051991,barney1,02071978,money123,18091985,bigdawg,02031988,cygnusx1,zoloto,31011987,firefigh,blowfish,screamer,lfybbk,20051988,chelse,11121986,01031989,harddick,sexylady,30031988,02041974,auditt,pizdec,kojak,kfgjxrf,20091988,123456ru,wp2003wp,1204,15051990,slugger,kordell1,03031986,swinging,01011974,02071979,rockie,dimples,1234123,1dragon,trucking,rusty2,roger1,marijuana,kerouac,02051978,08031985,paco,thecure,keepout,kernel,noname123,13121985,francisc,bozo,02011982,22071986,02101979,obsidian,12345qw,spud,tabasco,02051985,jaguars,dfktynby,kokomo,popova,notused,sevens,4200,magneto,02051976,roswell,15101986,21101986,lakeside,bigbang,aspen,little1,14021986,loki,suckmydick,strawber,carlos1,nokian73,dirty1,joshu,25091987,16121987,02041975,advent,17011987,slimshady,whistler,10101990,stryker,22031984,15021985,01031985,blueball,26031988,ksusha,bahamut,robocop,w_pass,chris123,impreza,prozac,bookie,bricks,13021990,alice1,cassandr,11111q,john123,4ever,korova,02051973,142857,25041988,paramedi,eclipse1,salope,07091990,1124,darkangel,23021986,999666,nomad,02051981,smackdow,01021990,yoyoma,argentin,moonligh,57chevy,bootys,hardone,capricor,galant,spanker,dkflbr,24111989,magpies,krolik,21051988,cevthrb,cheddar,22041988,bigbooty,scuba1,qwedsa,duffman,bukkake,acura,johncena,sexxy,p@ssw0rd,258369,cherries,12345s,asgard,leopold,fuck123,mopar,lalakers,dogpound,matrix1,crusty,spanner,kestrel,fenris,universa,peachy,assasin,lemmein,eggplant,hejsan,canucks,wendy1,doggy1,aikman,tupac,turnip,godlike,fussball,golden1,19283746,april1,django,petrova,captain1,vincent1,ratman,taekwondo,chocha,serpent,perfect1,capetown,vampir,amore,gymnast,timeout,nbvjatq,blue32,ksenia,k.lvbkf,nazgul,budweiser,clutch,mariya,sylveste,02051972,beaker,cartman1,q11111,sexxx,forever1,loser1,marseill,magellan,vehpbr,sexgod,jktxrf,hallo123,132456,liverpool1,southpaw,seneca,camden,357159,camero,tenchi,johndoe,145236,roofer,741963,vlad,02041978,fktyrf,zxcv123,wingnut,wolfpac,notebook,pufunga7782,brandy1,biteme1,goodgirl,redhat,02031978,challeng,millenium,hoops,maveric,noname,angus1,gaell,onion,olympus,sabrina1,ricard,sixpack,gratis,gagged,camaross,hotgirls,flasher,02051977,bubba123,goldfing,moonshin,gerrard,volkov,sonyfuck,mandrake,258963,tracer,lakers1,asians,susan1,money12,helmut,boater,diablo2,1234zxcv,dogwood,bubbles1,happy2,randy1,aries,beach1,marcius2,navigator,goodie,hellokitty,fkbyjxrf,earthlink,lookout,jumbo,opendoor,stanley1,marie1,12345m,07071977,ashle,wormix,murzik,02081976,lakewood,bluejays,loveya,commande,gateway2,peppe,01011976,7896321,goth,oreo,slammer,rasmus,faith1,knight1,stone1,redskin,ironmaiden,gotmilk,destiny1,dejavu,1master,midnite,timosha,espresso,delfin,toriamos,oberon,ceasar,markie,1a2s3d,ghhh47hj7649,vjkjrj,daddyo,dougie,disco,auggie,lekker,therock1,ou8123,start1,noway,p4ssw0rd,shadow12,333444,saigon,2fast4u,capecod,23skidoo,qazxcv,beater,bremen,aaasss,roadrunner,peace1,12345qwer,02071975,platon,bordeaux,vbkfirf,135798642,test12,supernov,beatles1,qwert40,optimist,vanessa1,prince1,ilovegod,nightwish,natasha1,alchemy,bimbo,blue99,patches1,gsxr1000,richar,hattrick,hott,solaris,proton,nevets,enternow,beavis1,amigos,159357a,ambers,lenochka,147896,suckdick,shag,intercourse,blue1234,spiral,02061977,tosser,ilove,02031975,cowgirl,canuck,q2w3e4,munch,spoons,waterboy,123567,evgeniy,savior,zasada,redcar,mamacita,terefon,globus,doggies,htubcnhfwbz,1008,cuervo,suslik,azertyui,limewire,houston1,stratfor,steaua,coors,tennis1,12345qwerty,stigmata,derf,klondike,patrici,marijuan,hardball,odyssey,nineinch,boston1,pass1,beezer,sandr,charon,power123,a1234,vauxhall,875421,awesome1,reggae,boulder,funstuff,iriska,krokodil,rfntymrf,sterva,champ1,bball,peeper,m123456,toolbox,cabernet,sheepdog,magic32,pigpen,02041977,holein1,lhfrjy,banan,dabomb,natalie1,jennaj,montana1,joecool,funky,steven1,ringo,junio,sammy123,qqqwww,baltimor,footjob,geezer,357951,mash4077,cashmone,pancake,monic,grandam,bongo,yessir,gocubs,nastia,vancouve,barley,dragon69,watford,ilikepie,02071976,laddie,123456789m,hairball,toonarmy,pimpdadd,cvthnm,hunte,davinci,lback,sophie1,firenze,q1234567,admin1,bonanza,elway7,daman,strap,azert,wxcvbn,afrika,theforce,123456t,idefix,wolfen,houdini,scheisse,default,beech,maserati,02061976,sigmachi,dylan1,bigdicks,eskimo,mizzou,02101976,riccardo,egghead,111777,kronos,ghbrjk,chaos1,jomama,rfhnjirf,rodeo,dolemite,cafc91,nittany,pathfind,mikael,password9,vqsablpzla,purpl,gabber,modelsne,myxworld,hellsing,punker,rocknrol,fishon,fuck69,02041976,lolol,twinkie,tripleh,cirrus,redbone,killer123,biggun,allegro,gthcbr,smith1,wanking,bootsy,barry1,mohawk,koolaid,5329,futurama,samoht,klizma,996633,lobo,honeys,peanut1,556677,zxasqw,joemama,javelin,samm,223322,sandra1,flicks,montag,nataly,3006,tasha1,1235789,dogbone,poker1,p0o9i8u7,goodday,smoothie,toocool,max333,metroid,archange,vagabond,billabon,22061941,tyson1,02031973,darkange,skateboard,evolutio,morrowind,wizards,frodo1,rockin,cumslut,plastics,zaqwsxcde,5201314,doit,outback,bumble,dominiqu,persona,nevermore,alinka,02021971,forgetit,sexo,all4one,c2h5oh,petunia,sheeba,kenny1,elisabet,aolsucks,woodstoc,pumper,02011975,fabio,granada,scrapper,123459,minimoni,q123456789,breaker,1004,02091976,ncc74656,slimshad,friendster,austin31,wiseguy,donner,dilbert1,132465,blackbird,buffet,jellybean,barfly,behappy,01011971,carebear,fireblad,02051975,boxcar,cheeky,kiteboy,hello12,panda1,elvisp,opennow,doktor,alex12,02101977,pornking,flamengo,02091975,snowbird,lonesome,robin1,11111a,weed420,baracuda,bleach,12345abc,nokia1,metall,singapor,mariner,herewego,dingo,tycoon,cubs,blunts,proview,123456789d,kamasutra,lagnaf,vipergts,navyseal,starwar,masterbate,wildone,peterbil,cucumber,butkus,123qwert,climax,deniro,gotribe,cement,scooby1,summer69,harrier,shodan,newyear,02091977,starwars1,romeo1,sedona,harald,doubled,sasha123,bigguns,salami,awnyce,kiwi,homemade,pimping,azzer,bradley1,warhamme,linkin,dudeman,qwe321,pinnacle,maxdog,flipflop,lfitymrf,fucker1,acidburn,esquire,sperma,fellatio,jeepster,thedon,sexybitch,pookey,spliff,widget,vfntvfnbrf,trinity1,mutant,samuel1,meliss,gohome,1q2q3q,mercede,comein,grin,cartoons,paragon,henrik,rainyday,pacino,senna,bigdog1,alleycat,12345qaz,narnia,mustang2,tanya1,gianni,apollo11,wetter,clovis,escalade,rainbows,freddy1,smart1,daisydog,s123456,cocksucker,pushkin,lefty,sambo,fyutkjxtr,hiziad,boyz,whiplash,orchard,newark,adrenalin,1598753,bootsie,chelle,trustme,chewy,golfgti,tuscl,ambrosia,5wr2i7h8,penetration,shonuf,jughead,payday,stickman,gotham,kolokol,johnny5,kolbasa,stang,puppydog,charisma,gators1,mone,jakarta,draco,nightmar,01011973,inlove,laetitia,02091973,tarpon,nautica,meadow,0192837465,luckyone,14881488,chessie,goldeney,tarakan,69camaro,bungle,wordup,interne,fuckme2,515000,dragonfl,sprout,02081974,gerbil,bandit1,02071971,melanie1,phialpha,camber,kathy1,adriano,gonzo1,10293847,bigjohn,bismarck,7777777a,scamper,12348765,rabbits,222777,bynthytn,dima123,alexander1,mallorca,dragster,favorite6,beethove,burner,cooper1,fosters,hello2,normandy,777999,sebring,1michael,lauren1,blake1,killa,02091971,nounours,trumpet1,thumper1,playball,xantia,rugby1,rocknroll,guillaum,angela1,strelok,prosper,buttercup,masterp,dbnfkbr,cambridg,venom,treefrog,lumina,1234566,supra,sexybabe,freee,shen,frogs,driller,pavement,grace1,dicky,checker,smackdown,pandas,cannibal,asdffdsa,blue42,zyjxrf,nthvbyfnjh,melrose,neon,jabber,gamma,369258147,aprilia,atticus,benessere,catcher,skipper1,azertyuiop,sixty9,thierry,treetop,jello,melons,123456789qwe,tantra,buzzer,catnip,bouncer,computer1,sexyone,ananas,young1,olenka,sexman,mooses,kittys,sephiroth,contra,hallowee,skylark,sparkles,777333,1qazxsw23edc,lucas1,q1w2e3r,gofast,hannes,amethyst,ploppy,flower2,hotass,amatory,volleyba,dixie1,bettyboo,ticklish,02061974,frenchy,phish1,murphy1,trustno,02061972,leinad,mynameis,spooge,jupiter1,hyundai,frosch,junkmail,abacab,marbles,32167,casio,sunshine1,wayne1,longhair,caster,snicker,02101973,gannibal,skinhead,hansol,gatsby,segblue2,montecar,plato,gumby,kaboom,matty,bosco1,888999,jazzy,panter,jesus123,charlie2,giulia,candyass,sex69,travis1,farmboy,special1,02041973,letsdoit,password01,allison1,abcdefg1,notredam,ilikeit,789654123,liberty1,rugger,uptown,alcatraz,123456w,airman,007bond,navajo,kenobi,terrier,stayout,grisha,frankie1,fluff,1qazzaq1,1234561,virginie,1234568,tango1,werdna,octopus,fitter,dfcbkbcf,blacklab,115599,montrose,allen1,supernova,frederik,ilovepussy,justice1,radeon,playboy2,blubber,sliver,swoosh,motocros,lockdown,pearls,thebear,istheman,pinetree,biit,1234rewq,rustydog,tampabay,titts,babycake,jehovah,vampire1,streaming,collie,camil,fidelity,calvin1,stitch,gatit,restart,puppy1,budgie,grunt,capitals,hiking,dreamcas,zorro1,321678,riffraff,makaka,playmate,napalm,rollin,amstel,zxcvb123,samanth,rumble,fuckme69,jimmys,951357,pizzaman,1234567899,tralala,delpiero,alexi,yamato,itisme,1million,vfndtq,kahlua,londo,wonderboy,carrots,tazz,ratboy,rfgecnf,02081973,nico,fujitsu,tujhrf,sergbest,blobby,02051970,sonic1,1357911,smirnov,video1,panhead,bucky,02031974,44332211,duffer,cashmoney,left4dead,bagpuss,salman,01011972,titfuck,66613666,england1,malish,dresden,lemans,darina,zapper,123456as,123456qqq,met2002,02041972,redstar,blue23,1234509876,pajero,booyah,please1,tetsuo,semper,finder,hanuman,sunlight,123456n,02061971,treble,cupoi,password99,dimitri,3ip76k2,popcorn1,lol12345,stellar,nympho,shark1,keith1,saskia,bigtruck,revoluti,rambo1,asd222,feelgood,phat,gogators,bismark,cola,puck,furball,burnout,slonik,bowtie,mommy1,icecube,fabienn,mouser,papamama,rolex,giants1,blue11,trooper1,momdad,iklo,morten,rhubarb,gareth,123456d,blitz,canada1,r2d2,brest,tigercat,usmarine,lilbit,benny1,azrael,lebowski,12345r,madagaskar,begemot,loverman,dragonballz,italiano,mazda3,naughty1,onions,diver1,cyrano,capcom,asdfg123,forlife,fisherman,weare138,requiem,mufasa,alpha123,piercing,hellas,abracadabra,duckman,caracas,macintos,02011971,jordan2,crescent,fduecn,hogtied,eatmenow,ramjet,18121812,kicksass,whatthe,discus,rfhfvtkmrf,rufus1,sqdwfe,mantle,vegitto,trek,dan123,paladin1,rudeboy,liliya,lunchbox,riversid,acapulco,libero,dnsadm,maison,toomuch,boobear,hemlock,sextoy,pugsley,misiek,athome,migue,altoids,marcin,123450,rhfcfdbwf,jeter2,rhinos,rjhjkm,mercury1,ronaldinho,shampoo,makayla,kamilla,masterbating,tennesse,holger,john1,matchbox,hores,poptart,parlament,goodyear,asdfgh1,02081970,hardwood,alain,erection,hfytnrb,highlife,implants,benjami,dipper,jeeper,bendover,supersonic,babybear,laserjet,gotenks,bama,natedogg,aol123,pokemo,rabbit1,raduga,sopranos,cashflow,menthol,pharao,hacking,334455,ghjcnbnenrf,lizzy,muffin1,pooky,penis1,flyer,gramma,dipset,becca,ireland1,diana1,donjuan,pong,ziggy1,alterego,simple1,cbr900,logger,111555,claudia1,cantona7,matisse,ljxtymrf,victori,harle,mamas,encore,mangos,iceman1,diamon,alexxx,tiamat,5000,desktop,mafia,smurf,princesa,shojou,blueberr,welkom,maximka,123890,123q123,tammy1,bobmarley,clips,demon666,ismail,termite,laser1,missie,altair,donna1,bauhaus,trinitron,mogwai,flyers88,juniper,nokia5800,boroda,jingles,qwerasdfzxcv,shakur,777666,legos,mallrats,1qazxsw,goldeneye,tamerlan,julia1,backbone,spleen,49ers,shady,darkone,medic1,justi,giggle,cloudy,aisan,douche,parkour,bluejay,huskers1,redwine,1qw23er4,satchmo,1231234,nineball,stewart1,ballsack,probes,kappa,amiga,flipper1,dortmund,963258,trigun,1237895,homepage,blinky,screwy,gizzmo,belkin,chemist,coolhand,chachi,braves1,thebest,greedisgood,pro100,banana1,101091m,123456g,wonderfu,barefeet,8inches,1111qqqq,kcchiefs,qweasdzxc123,metal1,jennifer1,xian,asdasd123,pollux,cheerleaers,fruity,mustang5,turbos,shopper,photon,espana,hillbill,oyster,macaroni,gigabyte,jesper,motown,tuxedo,buster12,triplex,cyclones,estrell,mortis,holla,456987,fiddle,sapphic,jurassic,thebeast,ghjcnjq,baura,spock1,metallica1,karaoke,nemrac58,love1234,02031970,flvbybcnhfnjh,frisbee,diva,ajax,feathers,flower1,soccer11,allday,mierda,pearl1,amature,marauder,333555,redheads,womans,egorka,godbless,159263,nimitz,aaaa1111,sashka,madcow,socce,greywolf,baboon,pimpdaddy,123456789r,reloaded,lancia,rfhfylfi,dicker,placid,grimace,22446688,olemiss,whores,culinary,wannabe,maxi,1234567aa,amelie,riley1,trample,phantom1,baberuth,bramble,asdfqwer,vides,4you,abc123456,taichi,aztnm,smother,outsider,hakr,blackhawk,bigblack,girlie,spook,valeriya,gianluca,freedo,1q2q3q4q,handbag,lavalamp,cumm,pertinant,whatup,nokia123,redlight,patrik,111aaa,poppy1,dfytxrf,aviator,sweeps,kristin1,cypher,elway,yinyang,access1,poophead,tucson,noles1,monterey,waterfal,dank,dougal,918273,suede,minnesot,legman,bukowski,ganja,mammoth,riverrat,asswipe,daredevi,lian,arizona1,kamikadze,alex1234,smile1,angel2,55bgates,bellagio,0001,wanrltw,stiletto,lipton,arsena,biohazard,bbking,chappy,tetris,as123456,darthvad,lilwayne,nopassword,7412369,123456789987654321,natchez,glitter,14785236,mytime,rubicon,moto,pyon,wazzup,tbird,shane1,nightowl,getoff,beckham7,trueblue,hotgirl,nevermin,deathnote,13131,taffy,bigal,copenhag,apricot,gallaries,dtkjcbgtl,totoro,onlyone,civicsi,jesse1,baby123,sierra1,festus,abacus,sickboy,fishtank,fungus,charle,golfpro,teensex,mario66,seaside,aleksei,rosewood,blackberry,1020304050,bedlam,schumi,deerhunt,contour,darkelf,surveyor,deltas,pitchers,741258963,dipstick,funny1,lizzard,112233445566,jupiter2,softtail,titman,greenman,z1x2c3v4b5,smartass,12345677,notnow,myworld,nascar1,chewbacc,nosferatu,downhill,dallas22,kuan,blazers,whales,soldat,craving,powerman,yfcntyf,hotrats,cfvceyu,qweasdzx,princess1,feline,qqwwee,chitown,1234qaz,mastermind,114477,dingbat,care1839,standby,kismet,atreides,dogmeat,icarus,monkeyboy,alex1,mouses,nicetits,sealteam,chopper1,crispy,winter99,rrpass1,myporn,myspace1,corazo,topolino,ass123,lawman,muffy,orgy,1love,passord,hooyah,ekmzyf,pretzel,amonra,nestle,01011950,jimbeam,happyman,z12345,stonewal,helios,manunited,harcore,dick1,gaymen,2hot4u,light1,qwerty13,kakashi,pjkjnj,alcatel,taylo,allah,buddydog,ltkmaby,mongo,blonds,start123,audia6,123456v,civilwar,bellaco,turtles,mustan,deadspin,aaa123,fynjirf,lucky123,tortoise,amor,summe,waterski,zulu,drag0n,dtxyjcnm,gizmos,strife,interacial,pusyy,goose1,bear1,equinox,matri,jaguar1,tobydog,sammys,nachos,traktor,bryan1,morgoth,444555,dasani,miami1,mashka,xxxxxx1,ownage,nightwin,hotlips,passmast,cool123,skolko,eldiablo,manu,1357908642,screwyou,badabing,foreplay,hydro,kubrick,seductive,demon1,comeon,galileo,aladdin,metoo,happines,902100,mizuno,caddy,bizzare,girls1,redone,ohmygod,sable,bonovox,girlies,hamper,opus,gizmodo1,aaabbb,pizzahut,999888,rocky2,anton1,kikimora,peavey,ocelot,a1a2a3a4,2wsx3edc,jackie1,solace,sprocket,galary,chuck1,volvo1,shurik,poop123,locutus,virago,wdtnjxtr,tequier,bisexual,doodles,makeitso,fishy,789632145,nothing1,fishcake,sentry,libertad,oaktree,fivestar,adidas1,vegitta,mississi,spiffy,carme,neutron,vantage,agassi,boners,123456789v,hilltop,taipan,barrage,kenneth1,fister,martian,willem,lfybkf,bluestar,moonman,ntktdbpjh,paperino,bikers,daffy,benji,quake,dragonfly,suckcock,danilka,lapochka,belinea,calypso,asshol,camero1,abraxas,mike1234,womam,q1q2q3q4q5,youknow,maxpower,pic's,audi80,sonora,raymond1,tickler,tadpole,belair,crazyman,finalfantasy,999000,jonatha,paisley,kissmyas,morgana,monste,mantra,spunk,magic123,jonesy,mark1,alessand,741258,baddest,ghbdtnrfrltkf,zxccxz,tictac,augustin,racers,7grout,foxfire,99762000,openit,nathanie,1z2x3c4v5b,seadog,gangbanged,lovehate,hondacbr,harpoon,mamochka,fisherma,bismilla,locust,wally1,spiderman1,saffron,utjhubq,123456987,20spanks,safeway,pisser,bdfyjd,kristen1,bigdick1,magenta,vfhujif,anfisa,friday13,qaz123wsx,0987654321q,tyrant,guan,meggie,kontol,nurlan,ayanami,rocket1,yaroslav,websol76,mutley,hugoboss,websolutions,elpaso,gagarin,badboys,sephirot,918273645,newuser,qian,edcrfv,booger1,852258,lockout,timoxa94,mazda323,firedog,sokolova,skydiver,jesus777,1234567890z,soulfly,canary,malinka,guillerm,hookers,dogfart,surfer1,osprey,india123,rhjkbr,stoppedby,nokia5530,123456789o,blue1,werter,divers,3000,123456f,alpina,cali,whoknows,godspeed,986532,foreskin,fuzzy1,heyyou,didier,slapnuts,fresno,rosebud1,sandman1,bears1,blade1,honeybun,queen1,baronn,pakista,philipp,9111961,topsecret,sniper1,214365,slipper,letsfuck,pippen33,godawgs,mousey,qw123456,scrotum,loveis,lighthou,bp2002,nancy123,jeffrey1,susieq,buddy2,ralphie,trout1,willi,antonov,sluttey,rehbwf,marty1,darian,losangeles,letme1n,12345d,pusssy,godiva,ender,golfnut,leonidas,a1b2c3d4e5,puffer,general1,wizzard,lehjxrf,racer1,bigbucks,cool12,buddys,zinger,esprit,vbienrf,josep,tickling,froggie,987654321a,895623,daddys,crumbs,gucci,mikkel,opiate,tracy1,christophe,came11,777555,petrovich,humbug,dirtydog,allstate,horatio,wachtwoord,creepers,squirts,rotary,bigd,georgia1,fujifilm,2sweet,dasha,yorkie,slimjim,wiccan,kenzie,system1,skunk,b12345,getit,pommes,daredevil,sugars,bucker,piston,lionheart,1bitch,515051,catfight,recon,icecold,fantom,vodafone,kontakt,boris1,vfcnth,canine,01011961,valleywa,faraon,chickenwing101,qq123456,livewire,livelife,roosters,jeepers,ilya1234,coochie,pavlik,dewalt,dfhdfhf,architec,blackops,1qaz2wsx3edc4rfv,rhfcjnf,wsxedc,teaser,sebora,25252,rhino1,ankara,swifty,decimal,redleg,shanno,nermal,candies,smirnova,dragon01,photo1,ranetki,a1s2d3f4g5,axio,wertzu,maurizio,6uldv8,zxcvasdf,punkass,flowe,graywolf,peddler,3rjs1la7qe,mpegs,seawolf,ladyboy,pianos,piggies,vixen,alexus,orpheus,gdtrfb,z123456,macgyver,hugetits,ralph1,flathead,maurici,mailru,goofball,nissan1,nikon,stopit,odin,big1,smooch,reboot,famil,bullit,anthony7,gerhard,methos,124038,morena,eagle2,jessica2,zebras,getlost,gfynthf,123581321,sarajevo,indon,comets,tatjana,rfgbnjirf,joystick,batman12,123456c,sabre,beerme,victory1,kitties,1475369,badboy1,booboo1,comcast,slava,squid,saxophon,lionhear,qaywsx,bustle,nastena,roadway,loader,hillside,starlight,24681012,niggers,access99,bazooka,molly123,blackice,bandi,cocacol,nfhfrfy,timur,muschi,horse1,quant4307s,squerting,oscars,mygirls,flashman,tangerin,goofy1,p0o9i8,housewifes,newness,monkey69,escorpio,password11,hippo,warcraft3,qazxsw123,qpalzm,ribbit,ghbdtndctv,bogota,star123,258000,lincoln1,bigjim,lacoste,firestorm,legenda,indain,ludacris,milamber,1009,evangeli,letmesee,a111111,hooters1,bigred1,shaker,husky,a4tech,cnfkrth,argyle,rjhjdf,nataha,0o9i8u7y,gibson1,sooners1,glendale,archery,hoochie,stooge,aaaaaa1,scorpions,school1,vegas1,rapier,mike23,bassoon,groupd2013,macaco,baker1,labia,freewill,santiag,silverado,butch1,vflfufcrfh,monica1,rugrat,cornhole,aerosmit,bionicle,gfgfvfvf,daniel12,virgo,fmale,favorite2,detroit1,pokey,shredder,baggies,wednesda,cosmo1,mimosa,sparhawk,firehawk,romario,911turbo,funtimes,fhntvrf,nexus6,159753456,timothy1,bajingan,terry1,frenchie,raiden,1mustang,babemagnet,74123698,nadejda,truffles,rapture,douglas1,lamborghini,motocross,rjcvjc,748596,skeeter1,dante1,angel666,telecom,carsten,pietro,bmw318,astro1,carpediem,samir,orang,helium,scirocco,fuzzball,rushmore,rebelz,hotspur,lacrimosa,chevys10,madonna1,domenico,yfnfirf,jachin,shelby1,bloke,dawgs,dunhill,atlanta1,service1,mikado,devilman,angelit,reznor,euphoria,lesbain,checkmat,browndog,phreak,blaze1,crash1,farida,mutter,luckyme,horsemen,vgirl,jediknig,asdas,cesare,allnight,rockey,starlite,truck1,passfan,close-up,samue,cazzo,wrinkles,homely,eatme1,sexpot,snapshot,dima1995,asthma,thetruth,ducky,blender,priyanka,gaucho,dutchman,sizzle,kakarot,651550,passcode,justinbieber,666333,elodie,sanjay,110442,alex01,lotus1,2300mj,lakshmi,zoomer,quake3,12349876,teapot,12345687,ramada,pennywis,striper,pilot1,chingon,optima,nudity,ethan1,euclid,beeline,loyola,biguns,zaq12345,bravo1,disney1,buffa,assmunch,vivid,6661313,wellingt,aqwzsx,madala11,9874123,sigmar,pictere,tiptop,bettyboop,dinero,tahiti,gregory1,bionic,speed1,fubar1,lexus1,denis1,hawthorn,saxman,suntzu,bernhard,dominika,camaro1,hunter12,balboa,bmw2002,seville,diablo1,vfhbyjxrf,1234abc,carling,lockerroom,punani,darth,baron1,vaness,1password,libido,picher,232425,karamba,futyn007,daydream,11001001,dragon123,friends1,bopper,rocky123,chooch,asslover,shimmer,riddler,openme,tugboat,sexy123,midori,gulnara,christo,swatch,laker,offroad,puddles,hackers,mannheim,manager1,horseman,roman1,dancer1,komputer,pictuers,nokia5130,ejaculation,lioness,123456y,evilone,nastenka,pushok,javie,lilman,3141592,mjolnir,toulouse,pussy2,bigworm,smoke420,fullback,extensa,dreamcast,belize,delboy,willie1,casablanca,csyjxtr,ricky1,bonghit,salvator,basher,pussylover,rosie1,963258741,vivitron,cobra427,meonly,armageddon,myfriend,zardoz,qwedsazxc,kraken,fzappa,starfox,333999,illmatic,capoeira,weenie,ramzes,freedom2,toasty,pupkin,shinigami,fhvfutljy,nocturne,churchil,thumbnils,tailgate,neworder,sexymama,goarmy,cerebus,michelle1,vbifyz,surfsup,earthlin,dabulls,basketbal,aligator,mojojojo,saibaba,welcome2,wifes,wdtnjr,12345w,slasher,papabear,terran,footman,hocke,153759,texans,tom123,sfgiants,billabong,aassdd,monolith,xxx777,l3tm31n,ticktock,newone,hellno,japanees,contortionist,admin123,scout1,alabama1,divx1,rochard,privat,radar1,bigdad,fhctybq,tortuga,citrus,avanti,fantasy1,woodstock,s12345,fireman1,embalmer,woodwork,bonzai,konyor,newstart,jigga,panorama,goats,smithy,rugrats,hotmama,daedalus,nonstop,fruitbat,lisenok,quaker,violator,12345123,my3sons,cajun,fraggle,gayboy,oldfart,vulva,knickerless,orgasms,undertow,binky,litle,kfcnjxrf,masturbation,bunnie,alexis1,planner,transexual,sparty,leeloo,monies,fozzie,stinger1,landrove,anakonda,scoobie,yamaha1,henti,star12,rfhlbyfk,beyonce,catfood,cjytxrf,zealots,strat,fordtruc,archangel,silvi,sativa,boogers,miles1,bigjoe,tulip,petite,greentea,shitter,jonboy,voltron,morticia,evanescence,3edc4rfv,longshot,windows1,serge,aabbcc,starbucks,sinful,drywall,prelude1,www123,camel1,homebrew,marlins,123412,letmeinn,domini,swampy,plokij,fordf350,webcam,michele1,bolivi,27731828,wingzero,qawsedrftg,shinji,sverige,jasper1,piper1,cummer,iiyama,gocats,amour,alfarome,jumanji,mike69,fantasti,1monkey,w00t88,shawn1,lorien,1a2s3d4f5g,koleso,murph,natascha,sunkist,kennwort,emine,grinder,m12345,q1q2q3q4,cheeba,money2,qazwsxedc1,diamante,prosto,pdiddy,stinky1,gabby1,luckys,franci,pornographic,moochie,gfhjdjp,samdog,empire1,comicbookdb,emili,motdepasse,iphone,braveheart,reeses,nebula,sanjose,bubba2,kickflip,arcangel,superbow,porsche911,xyzzy,nigger1,dagobert,devil1,alatam,monkey2,barbara1,12345v,vfpfafrf,alessio,babemagn,aceman,arrakis,kavkaz,987789,jasons,berserk,sublime1,rogue1,myspace,buckwhea,csyekz,pussy4me,vette1,boots1,boingo,arnaud,budlite,redstorm,paramore,becky1,imtheman,chango,marley1,milkyway,666555,giveme,mahalo,lux2000,lucian,paddy,praxis,shimano,bigpenis,creeper,newproject2004,rammstei,j3qq4h7h2v,hfljcnm,lambchop,anthony2,bugman,gfhjkm12,dreamer1,stooges,cybersex,diamant,cowboyup,maximus1,sentra,615243,goethe,manhatta,fastcar,selmer,1213141516,yfnfitymrf,denni,chewey,yankee1,elektra,123456789p,trousers,fishface,topspin,orwell,vorona,sodapop,motherfu,ibilltes,forall,kookie,ronald1,balrog,maximilian,mypasswo,sonny1,zzxxcc,tkfkdg,magoo,mdogg,heeled,gitara,lesbos,marajade,tippy,morozova,enter123,lesbean,pounded,asd456,fialka,scarab,sharpie,spanky1,gstring,sachin,12345asd,princeto,hellohel,ursitesux,billows,1234kekc,kombat,cashew,duracell,kseniya,sevenof9,kostik,arthur1,corvet07,rdfhnbhf,songoku,tiberian,needforspeed,1qwert,dropkick,kevin123,panache,libra,a123456a,kjiflm,vfhnsirf,cntgfy,iamcool,narut,buffer,sk8ordie,urlaub,fireblade,blanked,marishka,gemini1,altec,gorillaz,chief1,revival47,ironman1,space1,ramstein,doorknob,devilmaycry,nemesis1,sosiska,pennstat,monday1,pioner,shevchenko,detectiv,evildead,blessed1,aggie,coffees,tical,scotts,bullwink,marsel,krypto,adrock,rjitxrf,asmodeus,rapunzel,theboys,hotdogs,deepthro,maxpayne,veronic,fyyeirf,otter,cheste,abbey1,thanos,bedrock,bartok,google1,xxxzzz,rodent,montecarlo,hernande,mikayla,123456789l,bravehea,12locked,ltymub,pegasus1,ameteur,saltydog,faisal,milfnew,momsuck,everques,ytngfhjkz,m0nkey,businessbabe,cooki,custard,123456ab,lbvjxrf,outlaws,753357,qwerty78,udacha,insider,chees,fuckmehard,shotokan,katya,seahorse,vtldtlm,turtle1,mike12,beebop,heathe,everton1,darknes,barnie,rbcekz,alisher,toohot,theduke,555222,reddog1,breezy,bulldawg,monkeyman,baylee,losangel,mastermi,apollo1,aurelie,zxcvb12345,cayenne,bastet,wsxzaq,geibcnbr,yello,fucmy69,redwall,ladybird,bitchs,cccccc1,rktjgfnhf,ghjdthrf,quest1,oedipus,linus,impalass,fartman,12345k,fokker,159753a,optiplex,bbbbbb1,realtor,slipkno,santacru,rowdy,jelena,smeller,3984240,ddddd1,sexyme,janet1,3698741,eatme69,cazzone,today1,poobear,ignatius,master123,newpass1,heather2,snoopdogg,blondinka,pass12,honeydew,fuckthat,890098890,lovem,goldrush,gecko,biker1,llama,pendejo,avalanche,fremont,snowman1,gandolf,chowder,1a2b3c4d5e,flyguy,magadan,1fuck,pingvin,nokia5230,ab1234,lothar,lasers,bignuts,renee1,royboy,skynet,12340987,1122334,dragrace,lovely1,22334455,booter,12345612,corvett,123456qq,capital1,videoes,funtik,wyvern,flange,sammydog,hulkster,13245768,not4you,vorlon,omegared,l58jkdjp!,filippo,123mudar,samadams,petrus,chris12,charlie123,123456789123,icetea,sunderla,adrian1,123qweas,kazanova,aslan,monkey123,fktyeirf,goodsex,123ab,lbtest,banaan,bluenose,837519,asd12345,waffenss,whateve,1a2a3a4a,trailers,vfhbirf,bhbcrf,klaatu,turk182,monsoon,beachbum,sunbeam,succes,clyde1,viking1,rawhide,bubblegum,princ,mackenzi,hershey1,222555,dima55,niggaz,manatee,aquila,anechka,pamel,bugsbunn,lovel,sestra,newport1,althor,hornyman,wakeup,zzz111,phishy,cerber,torrent,thething,solnishko,babel,buckeye1,peanu,ethernet,uncencored,baraka,665544,chris2,rb26dett,willy1,choppers,texaco,biggirl,123456b,anna2614,sukebe,caralho,callofduty,rt6ytere,jesus7,angel12,1money,timelord,allblack,pavlova,romanov,tequiero,yitbos,lookup,bulls23,snowflake,dickweed,barks,lever,irisha,firestar,fred1234,ghjnjnbg,danman,gatito,betty1,milhouse,kbctyjr,masterbaiting,delsol,papit,doggys,123698741,bdfyjdf,invictus,bloods,kayla1,yourmama,apple2,angelok,bigboy1,pontiac1,verygood,yeshua,twins2,porn4me,141516,rasta69,james2,bosshog,candys,adventur,stripe,djkjlz,dokken,austin316,skins,hogwarts,vbhevbh,navigato,desperado,xxx666,cneltyn,vasiliy,hazmat,daytek,eightbal,fred1,four20,74227422,fabia,aerosmith,manue,wingchun,boohoo,hombre,sanity72,goatboy,fuckm,partizan,avrora,utahjazz,submarin,pussyeat,heinlein,control1,costaric,smarty,chuan,triplets,snowy,snafu,teacher1,vangogh,vandal,evergree,cochise,qwerty99,pyramid1,saab900,sniffer,qaz741,lebron23,mark123,wolvie,blackbelt,yoshi,feeder,janeway,nutella,fuking,asscock,deepak,poppie,bigshow,housewife,grils,tonto,cynthia1,temptress,irakli,belle1,russell1,manders,frank123,seabass,gforce,songbird,zippy1,naught,brenda1,chewy1,hotshit,topaz,43046721,girfriend,marinka,jakester,thatsme,planeta,falstaff,patrizia,reborn,riptide,cherry1,shuan,nogard,chino,oasis1,qwaszx12,goodlife,davis1,1911a1,harrys,shitfuck,12345678900,russian7,007700,bulls1,porshe,danil,dolphi,river1,sabaka,gobigred,deborah1,volkswagen,miamo,alkaline,muffdive,1letmein,fkbyrf,goodguy,hallo1,nirvan,ozzie,cannonda,cvbhyjdf,marmite,germany1,joeblow,radio1,love11,raindrop,159852,jacko,newday,fathead,elvis123,caspe,citibank,sports1,deuce,boxter,fakepass,golfman,snowdog,birthday4,nonmembe,niklas,parsifal,krasota,theshit,1235813,maganda,nikita1,omicron,cassie1,columbo,buick,sigma1,thistle,bassin,rickster,apteka,sienna,skulls,miamor,coolgirl,gravis,1qazxc,virgini,hunter2,akasha,batma,motorcyc,bambino,tenerife,fordf250,zhuan,iloveporn,markiza,hotbabes,becool,fynjybyf,wapapapa,forme,mamont,pizda,dragonz,sharon1,scrooge,mrbill,pfloyd,leeroy,natedog,ishmael,777111,tecumseh,carajo,nfy.irf,0000000000o,blackcock,fedorov,antigone,feanor,novikova,bobert,peregrin,spartan117,pumkin,rayman,manuals,tooltime,555333,bonethug,marina1,bonnie1,tonyhawk,laracroft,mahalkita,18273645,terriers,gamer,hoser,littlema,molotok,glennwei,lemon1,caboose,tater,12345654321,brians,fritz1,mistral,jigsaw,fuckshit,hornyguy,southside,edthom,antonio1,bobmarle,pitures,ilikesex,crafty,nexus,boarder,fulcrum,astonvil,yanks1,yngwie,account1,zooropa,hotlegs,sammi,gumbo,rover1,perkele,maurolarastefy,lampard,357753,barracud,dmband,abcxyz,pathfinder,335577,yuliya,micky,jayman,asdfg12345,1596321,halcyon,rerfhtre,feniks,zaxscd,gotyoass,jaycee,samson1,jamesb,vibrate,grandpri,camino,colossus,davidb,mamo4ka,nicky1,homer123,pinguin,watermelon,shadow01,lasttime,glider,823762,helen1,pyramids,tulane,osama,rostov,john12,scoote,bhbyrf,gohan,galeries,joyful,bigpussy,tonka,mowgli,astalavista,zzz123,leafs,dalejr8,unicorn1,777000,primal,bigmama,okmijn,killzone,qaz12345,snookie,zxcvvcxz,davidc,epson,rockman,ceaser,beanbag,katten,3151020,duckhunt,segreto,matros,ragnar,699669,sexsexse,123123z,fuckyeah,bigbutts,gbcmrf,element1,marketin,saratov,elbereth,blaster1,yamahar6,grime,masha,juneau,1230123,pappy,lindsay1,mooner,seattle1,katzen,lucent,polly1,lagwagon,pixie,misiaczek,666666a,smokedog,lakers24,eyeball,ironhors,ametuer,volkodav,vepsrf,kimmy,gumby1,poi098,ovation,1q2w3,drinker,penetrating,summertime,1dallas,prima,modles,takamine,hardwork,macintosh,tahoe,passthie,chiks,sundown,flowers1,boromir,music123,phaedrus,albert1,joung,malakas,gulliver,parker1,balder,sonne,jessie1,domainlock2005,express1,vfkbyf,youandme,raketa,koala,dhjnvytyjub,nhfrnjh,testibil,ybrbnjc,987654321q,axeman,pintail,pokemon123,dogggg,shandy,thesaint,11122233,x72jhhu3z,theclash,raptors,zappa1,djdjxrf,hell666,friday1,vivaldi,pluto1,lance1,guesswho,jeadmi,corgan,skillz,skippy1,mango1,gymnastic,satori,362514,theedge,cxfcnkbdfz,sparkey,deicide,bagels,lololol,lemmings,r4e3w2q1,silve,staind,schnuffi,dazzle,basebal1,leroy1,bilbo1,luckie,qwerty2,goodfell,hermione,peaceout,davidoff,yesterda,killah,flippy,chrisb,zelda1,headless,muttley,fuckof,tittys,catdaddy,photog,beeker,reaver,ram1500,yorktown,bolero,tryagain,arman,chicco,learjet,alexei,jenna1,go2hell,12s3t4p55,momsanaladventure,mustang9,protoss,rooter,ginola,dingo1,mojave,erica1,1qazse4,marvin1,redwolf,sunbird,dangerou,maciek,girsl,hawks1,packard1,excellen,dashka,soleda,toonces,acetate,nacked,jbond007,alligator,debbie1,wellhung,monkeyma,supers,rigger,larsson,vaseline,rjnzhf,maripos,123456asd,cbr600rr,doggydog,cronic,jason123,trekker,flipmode,druid,sonyvaio,dodges,mayfair,mystuff,fun4me,samanta,sofiya,magics,1ranger,arcane,sixtynin,222444,omerta,luscious,gbyudby,bobcats,envision,chance1,seaweed,holdem,tomate,mensch,slicer,acura1,goochi,qweewq,punter,repoman,tomboy,never1,cortina,gomets,147896321,369852147,dogma,bhjxrf,loglatin,eragon,strato,gazelle,growler,885522,klaudia,payton34,fuckem,butchie,scorpi,lugano,123456789k,nichola,chipper1,spide,uhbujhbq,rsalinas,vfylfhby,longhorns,bugatti,everquest,!qaz2wsx,blackass,999111,snakeman,p455w0rd,fanatic,family1,pfqxbr,777vlad,mysecret,marat,phoenix2,october1,genghis,panties1,cooker,citron,ace123,1234569,gramps,blackcoc,kodiak1,hickory,ivanhoe,blackboy,escher,sincity,beaks,meandyou,spaniel,canon1,timmy1,lancaste,polaroid,edinburg,fuckedup,hotman,cueball,golfclub,gopack,bookcase,worldcup,dkflbvbhjdbx,twostep,17171717aa,letsplay,zolushka,stella1,pfkegf,kingtut,67camaro,barracuda,wiggles,gjhjkm,prancer,patata,kjifhf,theman1,romanova,sexyass,copper1,dobber,sokolov,pomidor,algernon,cadman,amoremio,william2,silly1,bobbys,hercule,hd764nw5d7e1vb1,defcon,deutschland,robinhood,alfalfa,machoman,lesbens,pandora1,easypay,tomservo,nadezhda,goonies,saab9000,jordyn,f15eagle,dbrecz,12qwerty,greatsex,thrawn,blunted,baywatch,doggystyle,loloxx,chevy2,january1,kodak,bushel,78963214,ub6ib9,zz8807zpl,briefs,hawker,224488,first1,bonzo,brent1,erasure,69213124,sidewind,soccer13,622521,mentos,kolibri,onepiece,united1,ponyboy,keksa12,wayer,mypussy,andrej,mischa,mille,bruno123,garter,bigpun,talgat,familia,jazzy1,mustang8,newjob,747400,bobber,blackbel,hatteras,ginge,asdfjkl;,camelot1,blue44,rebbyt34,ebony1,vegas123,myboys,aleksander,ijrjkflrf,lopata,pilsner,lotus123,m0nk3y,andreev,freiheit,balls1,drjynfrnt,mazda1,waterpolo,shibumi,852963,123bbb,cezer121,blondie1,volkova,rattler,kleenex,ben123,sanane,happydog,satellit,qazplm,qazwsxedcrfvtgb,meowmix,badguy,facefuck,spice1,blondy,major1,25000,anna123,654321a,sober1,deathrow,patterso,china1,naruto1,hawkeye1,waldo1,butchy,crayon,5tgb6yhn,klopik,crocodil,mothra,imhorny,pookie1,splatter,slippy,lizard1,router,buratino,yahweh,123698,dragon11,123qwe456,peepers,trucker1,ganjaman,1hxboqg2,cheyanne,storys,sebastie,zztop,maddison,4rfv3edc,darthvader,jeffro,iloveit,victor1,hotty,delphin,lifeisgood,gooseman,shifty,insertions,dude123,abrupt,123masha,boogaloo,chronos,stamford,pimpster,kthjxrf,getmein,amidala,flubber,fettish,grapeape,dantes,oralsex,jack1,foxcg33,winchest,francis1,getin,archon,cliffy,blueman,1basebal,sport1,emmitt22,porn123,bignasty,morga,123hfjdk147,ferrar,juanito,fabiol,caseydog,steveo,peternorth,paroll,kimchi,bootleg,gaijin,secre,acacia,eatme2,amarillo,monkey11,rfhfgep,tylers,a1a2a3a4a5,sweetass,blower,rodina,babushka,camilo,cimbom,tiffan,vfnbkmlf,ohbaby,gotigers,lindsey1,dragon13,romulus,qazxsw12,zxcvbn1,dropdead,hitman47,snuggle,eleven11,bloopers,357mag,avangard,bmw320,ginscoot,dshade,masterkey,voodoo1,rootedit,caramba,leahcim,hannover,8phrowz622,tim123,cassius,000000a,angelito,zzzzz1,badkarma,star1,malaga,glenwood,footlove,golf1,summer12,helpme1,fastcars,titan1,police1,polinka,k.jdm,marusya,augusto,shiraz,pantyhose,donald1,blaise,arabella,brigada,c3por2d2,peter01,marco1,hellow,dillweed,uzumymw,geraldin,loveyou2,toyota1,088011,gophers,indy500,slainte,5hsu75kpot,teejay,renat,racoon,sabrin,angie1,shiznit,harpua,sexyred,latex,tucker1,alexandru,wahoo,teamwork,deepblue,goodison,rundmc,r2d2c3p0,puppys,samba,ayrton,boobed,999777,topsecre,blowme1,123321z,loudog,random1,pantie,drevil,mandolin,121212q,hottub,brother1,failsafe,spade1,matvey,open1234,carmen1,priscill,schatzi,kajak,gooddog,trojans1,gordon1,kayak,calamity,argent,ufhvjybz,seviyi,penfold,assface,dildos,hawkwind,crowbar,yanks,ruffles,rastus,luv2epus,open123,aquafina,dawns,jared1,teufel,12345c,vwgolf,pepsi123,amores,passwerd,01478520,boliva,smutty,headshot,password3,davidd,zydfhm,gbgbcmrf,pornpass,insertion,ceckbr,test2,car123,checkit,dbnfkbq,niggas,nyyankee,muskrat,nbuhtyjr,gunner1,ocean1,fabienne,chrissy1,wendys,loveme89,batgirl,cerveza,igorek,steel1,ragman,boris123,novifarm,sexy12,qwerty777,mike01,giveitup,123456abc,fuckall,crevice,hackerz,gspot,eight8,assassins,texass,swallows,123458,baldur,moonshine,labatt,modem,sydney1,voland,dbnfkz,hotchick,jacker,princessa,dawgs1,holiday1,booper,reliant,miranda1,jamaica1,andre1,badnaamhere,barnaby,tiger7,david12,margaux,corsica,085tzzqi,universi,thewall,nevermor,martin6,qwerty77,cipher,apples1,0102030405,seraphim,black123,imzadi,gandon,ducati99,1shadow,dkflbvbhjdyf,44magnum,bigbad,feedme,samantha1,ultraman,redneck1,jackdog,usmc0311,fresh1,monique1,tigre,alphaman,cool1,greyhoun,indycar,crunchy,55chevy,carefree,willow1,063dyjuy,xrated,assclown,federica,hilfiger,trivia,bronco1,mamita,100200300,simcity,lexingky,akatsuki,retsam,johndeere,abudfv,raster,elgato,businka,satanas,mattingl,redwing1,shamil,patate,mannn,moonstar,evil666,b123456,bowl300,tanechka,34523452,carthage,babygir,santino,bondarenko,jesuss,chico1,numlock,shyguy,sound1,kirby1,needit,mostwanted,427900,funky1,steve123,passions,anduril,kermit1,prospero,lusty,barakuda,dream1,broodwar,porky,christy1,mahal,yyyyyy1,allan1,1sexy,flintsto,capri,cumeater,heretic,robert2,hippos,blindax,marykay,collecti,kasumi,1qaz!qaz,112233q,123258,chemistr,coolboy,0o9i8u,kabuki,righton,tigress,nessie,sergej,andrew12,yfafyz,ytrhjvfyn,angel7,victo,mobbdeep,lemming,transfor,1725782,myhouse,aeynbr,muskie,leno4ka,westham1,cvbhyjd,daffodil,pussylicker,pamela1,stuffer,warehous,tinker1,2w3e4r,pluton,louise1,polarbea,253634,prime1,anatoliy,januar,wysiwyg,cobraya,ralphy,whaler,xterra,cableguy,112233a,porn69,jamesd,aqualung,jimmy123,lumpy,luckyman,kingsize,golfing1,alpha7,leeds1,marigold,lol1234,teabag,alex11,10sne1,saopaulo,shanny,roland1,basser,3216732167,carol1,year2005,morozov,saturn1,joseluis,bushed,redrock,memnoch,lalaland,indiana1,lovegod,gulnaz,buffalos,loveyou1,anteater,pattaya,jaydee,redshift,bartek,summerti,coffee1,ricochet,incest,schastie,rakkaus,h2opolo,suikoden,perro,dance1,loveme1,whoopass,vladvlad,boober,flyers1,alessia,gfcgjhn,pipers,papaya,gunsling,coolone,blackie1,gonads,gfhjkzytn,foxhound,qwert12,gangrel,ghjvtntq,bluedevi,mywife,summer01,hangman,licorice,patter,vfr750,thorsten,515253,ninguna,dakine,strange1,mexic,vergeten,12345432,8phrowz624,stampede,floyd1,sailfish,raziel,ananda,giacomo,freeme,crfprf,74185296,allstars,master01,solrac,gfnhbjn,bayliner,bmw525,3465xxx,catter,single1,michael3,pentium4,nitrox,mapet123456,halibut,killroy,xxxxx1,phillip1,poopsie,arsenalfc,buffys,kosova,all4me,32165498,arslan,opensesame,brutis,charles2,pochta,nadegda,backspac,mustang0,invis,gogeta,654321q,adam25,niceday,truckin,gfdkbr,biceps,sceptre,bigdave,lauras,user345,sandys,shabba,ratdog,cristiano,natha,march13,gumball,getsdown,wasdwasd,redhead1,dddddd1,longlegs,13572468,starsky,ducksoup,bunnys,omsairam,whoami,fred123,danmark,flapper,swanky,lakings,yfhenj,asterios,rainier,searcher,dapper,ltdjxrf,horsey,seahawk,shroom,tkfkdgo,aquaman,tashkent,number9,messi10,1asshole,milenium,illumina,vegita,jodeci,buster01,bareback,goldfinger,fire1,33rjhjds,sabian,thinkpad,smooth1,sully,bonghits,sushi1,magnavox,colombi,voiture,limpone,oldone,aruba,rooster1,zhenya,nomar5,touchdow,limpbizkit,rhfcfdxbr,baphomet,afrodita,bball1,madiso,ladles,lovefeet,matthew2,theworld,thunderbird,dolly1,123rrr,forklift,alfons,berkut,speedy1,saphire,oilman,creatine,pussylov,bastard1,456258,wicked1,filimon,skyline1,fucing,yfnfkbz,hot123,abdulla,nippon,nolimits,billiard,booty1,buttplug,westlife,coolbean,aloha1,lopas,asasin,1212121,october2,whodat,good4u,d12345,kostas,ilya1992,regal,pioneer1,volodya,focus1,bastos,nbvjif,fenix,anita1,vadimka,nickle,jesusc,123321456,teste,christ1,essendon,evgenii,celticfc,adam1,forumwp,lovesme,26exkp,chillout,burly,thelast1,marcus1,metalgear,test11,ronaldo7,socrate,world1,franki,mommie,vicecity,postov1000,charlie3,oldschool,333221,legoland,antoshka,counterstrike,buggy,mustang3,123454,qwertzui,toons,chesty,bigtoe,tigger12,limpopo,rerehepf,diddle,nokia3250,solidsnake,conan1,rockroll,963369,titanic1,qwezxc,cloggy,prashant,katharin,maxfli,takashi,cumonme,michael9,mymother,pennstate,khalid,48151623,fightclub,showboat,mateusz,elrond,teenie,arrow1,mammamia,dustydog,dominator,erasmus,zxcvb1,1a2a3a,bones1,dennis1,galaxie,pleaseme,whatever1,junkyard,galadriel,charlies,2wsxzaq1,crimson1,behemoth,teres,master11,fairway,shady1,pass99,1batman,joshua12,baraban,apelsin,mousepad,melon,twodogs,123321qwe,metalica,ryjgrf,pipiska,rerfhfxf,lugnut,cretin,iloveu2,powerade,aaaaaaa1,omanko,kovalenko,isabe,chobits,151nxjmt,shadow11,zcxfcnkbdf,gy3yt2rgls,vfhbyrf,159753123,bladerunner,goodone,wonton,doodie,333666999,fuckyou123,kitty123,chisox,orlando1,skateboa,red12345,destroye,snoogans,satan1,juancarlo,goheels,jetson,scottt,fuckup,aleksa,gfhfljrc,passfind,oscar123,derrick1,hateme,viper123,pieman,audi100,tuffy,andover,shooter1,10000,makarov,grant1,nighthaw,13576479,browneye,batigol,nfvfhf,chocolate1,7hrdnw23,petter,bantam,morlii,jediknight,brenden,argonaut,goodstuf,wisconsi,315920,abigail1,dirtbag,splurge,k123456,lucky777,valdepen,gsxr600,322223,ghjnjrjk,zaq1xsw2cde3,schwanz,walter1,letmein22,nomads,124356,codeblue,nokian70,fucke,footbal1,agyvorc,aztecs,passw0r,smuggles,femmes,ballgag,krasnodar,tamuna,schule,sixtynine,empires,erfolg,dvader,ladygaga,elite1,venezuel,nitrous,kochamcie,olivia1,trustn01,arioch,sting1,131415,tristar,555000,maroon,135799,marsik,555556,fomoco,natalka,cwoui,tartan,davecole,nosferat,hotsauce,dmitry,horus,dimasik,skazka,boss302,bluebear,vesper,ultras,tarantul,asd123asd,azteca,theflash,8ball,1footbal,titlover,lucas123,number6,sampson1,789852,party1,dragon99,adonai,carwash,metropol,psychnau,vthctltc,hounds,firework,blink18,145632,wildcat1,satchel,rice80,ghtktcnm,sailor1,cubano,anderso,rocks1,mike11,famili,dfghjc,besiktas,roygbiv,nikko,bethan,minotaur,rakesh,orange12,hfleuf,jackel,myangel,favorite7,1478520,asssss,agnieszka,haley1,raisin,htubyf,1buster,cfiekz,derevo,1a2a3a4a5a,baltika,raffles,scruffy1,clitlick,louis1,buddha1,fy.nrf,walker1,makoto,shadow2,redbeard,vfvfvskfhfve,mycock,sandydog,lineman,network1,favorite8,longdick,mustangg,mavericks,indica,1killer,cisco1,angelofwar,blue69,brianna1,bubbaa,slayer666,level42,baldrick,brutus1,lowdown,haribo,lovesexy,500000,thissuck,picker,stephy,1fuckme,characte,telecast,1bigdog,repytwjdf,thematrix,hammerhe,chucha,ganesha,gunsmoke,georgi,sheltie,1harley,knulla,sallas,westie,dragon7,conker,crappie,margosha,lisboa,3e2w1q,shrike,grifter,ghjcnjghjcnj,asdfg1,mnbvcxz1,myszka,posture,boggie,rocketman,flhtyfkby,twiztid,vostok,pi314159,force1,televizor,gtkmvtym,samhain,imcool,jadzia,dreamers,strannik,k2trix,steelhea,nikitin,commodor,brian123,chocobo,whopper,ibilljpf,megafon,ararat,thomas12,ghbrjkbcn,q1234567890,hibernia,kings1,jim123,redfive,68camaro,iawgk2,xavier1,1234567u,d123456,ndirish,airborn,halfmoon,fluffy1,ranchero,sneaker,soccer2,passion1,cowman,birthday1,johnn,razzle,glock17,wsxqaz,nubian,lucky2,jelly1,henderso,eric1,123123e,boscoe01,fuck0ff,simpson1,sassie,rjyjgkz,nascar3,watashi,loredana,janus,wilso,conman,david2,mothe,iloveher,snikers,davidj,fkmnthyfnbdf,mettss,ratfink,123456h,lostsoul,sweet16,brabus,wobble,petra1,fuckfest,otters,sable1,svetka,spartacu,bigstick,milashka,1lover,pasport,champagn,papichul,hrvatska,hondacivic,kevins,tacit,moneybag,gohogs,rasta1,246813579,ytyfdbcnm,gubber,darkmoon,vitaliy,233223,playboys,tristan1,joyce1,oriflame,mugwump,access2,autocad,thematri,qweqwe123,lolwut,ibill01,multisyn,1233211,pelikan,rob123,chacal,1234432,griffon,pooch,dagestan,geisha,satriani,anjali,rocketma,gixxer,pendrago,vincen,hellokit,killyou,ruger,doodah,bumblebe,badlands,galactic,emachines,foghorn,jackso,jerem,avgust,frontera,123369,daisymae,hornyboy,welcome123,tigger01,diabl,angel13,interex,iwantsex,rockydog,kukolka,sawdust,online1,3234412,bigpapa,jewboy,3263827,dave123,riches,333222,tony1,toggle,farter,124816,tities,balle,brasilia,southsid,micke,ghbdtn12,patit,ctdfcnjgjkm,olds442,zzzzzz1,nelso,gremlins,gypsy1,carter1,slut69,farcry,7415963,michael8,birdie1,charl,123456789abc,100001,aztec,sinjin,bigpimpi,closeup,atlas1,nvidia,doggone,classic1,manana,malcolm1,rfkbyf,hotbabe,rajesh,dimebag,ganjubas,rodion,jagr68,seren,syrinx,funnyman,karapuz,123456789n,bloomin,admin18533362,biggdogg,ocarina,poopy1,hellome,internet1,booties,blowjobs,matt1,donkey1,swede,1jennife,evgeniya,lfhbyf,coach1,444777,green12,patryk,pinewood,justin12,271828,89600506779,notredame,tuborg,lemond,sk8ter,million1,wowser,pablo1,st0n3,jeeves,funhouse,hiroshi,gobucs,angeleye,bereza,winter12,catalin,qazedc,andros,ramazan,vampyre,sweethea,imperium,murat,jamest,flossy,sandeep,morgen,salamandra,bigdogg,stroller,njdevils,nutsack,vittorio,%%passwo,playful,rjyatnrf,tookie,ubnfhf,michi,777444,shadow13,devils1,radiance,toshiba1,beluga,amormi,dandfa,trust1,killemall,smallville,polgara,billyb,landscap,steves,exploite,zamboni,damage11,dzxtckfd,trader12,pokey1,kobe08,damager,egorov,dragon88,ckfdbr,lisa69,blade2,audis4,nelson1,nibbles,23176djivanfros,mutabor,artofwar,matvei,metal666,hrfzlz,schwinn,poohbea,seven77,thinker,123456789qwerty,sobriety,jakers,karamelka,vbkfyf,volodin,iddqd,dale03,roberto1,lizaveta,qqqqqq1,cathy1,08154711,davidm,quixote,bluenote,tazdevil,katrina1,bigfoot1,bublik,marma,olechka,fatpussy,marduk,arina,nonrev67,qqqq1111,camill,wtpfhm,truffle,fairview,mashina,voltaire,qazxswedcvfr,dickface,grassy,lapdance,bosstone,crazy8,yackwin,mobil,danielit,mounta1n,player69,bluegill,mewtwo,reverb,cnthdf,pablito,a123321,elena1,warcraft1,orland,ilovemyself,rfntyjr,joyride,schoo,dthjxrf,thetachi,goodtimes,blacksun,humpty,chewbacca,guyute,123xyz,lexicon,blue45,qwe789,galatasaray,centrino,hendrix1,deimos,saturn5,craig1,vlad1996,sarah123,tupelo,ljrnjh,hotwife,bingos,1231231,nicholas1,flamer,pusher,1233210,heart1,hun999,jiggy,giddyup,oktober,123456zxc,budda,galahad,glamur,samwise,oneton,bugsbunny,dominic1,scooby2,freetime,internat,159753852,sc00ter,wantit,mazinger,inflames,laracrof,greedo,014789,godofwar,repytwjd,water123,fishnet,venus1,wallace1,tenpin,paula1,1475963,mania,novikov,qwertyasdfgh,goldmine,homies,777888999,8balls,holeinon,paper1,samael,013579,mansur,nikit,ak1234,blueline,polska1,hotcock,laredo,windstar,vbkbwbz,raider1,newworld,lfybkrf,catfish1,shorty1,piranha,treacle,royale,2234562,smurfs,minion,cadence,flapjack,123456p,sydne,135531,robinhoo,nasdaq,decatur,cyberonline,newage,gemstone,jabba,touchme,hooch,pigdog,indahous,fonzie,zebra1,juggle,patrick2,nihongo,hitomi,oldnavy,qwerfdsa,ukraina,shakti,allure,kingrich,diane1,canad,piramide,hottie1,clarion,college1,5641110,connect1,therion,clubber,velcro,dave1,astra1,13579-,astroboy,skittle,isgreat,photoes,cvzefh1gkc,001100,2cool4u,7555545,ginger12,2wsxcde3,camaro69,invader,domenow,asd1234,colgate,qwertasdfg,jack123,pass01,maxman,bronte,whkzyc,peter123,bogie,yecgaa,abc321,1qay2wsx,enfield,camaroz2,trashman,bonefish,system32,azsxdcfvgb,peterose,iwantyou,dick69,temp1234,blastoff,capa200,connie1,blazin,12233445,sexybaby,123456j,brentfor,pheasant,hommer,jerryg,thunders,august1,lager,kapusta,boobs1,nokia5300,rocco1,xytfu7,stars1,tugger,123sas,blingbling,1bubba,0wnsyo0,1george,baile,richard2,habana,1diamond,sensatio,1golfer,maverick1,1chris,clinton1,michael7,dragons1,sunrise1,pissant,fatim,mopar1,levani,rostik,pizzapie,987412365,oceans11,748159263,cum4me,palmetto,4r3e2w1q,paige1,muncher,arsehole,kratos,gaffer,banderas,billys,prakash,crabby,bungie,silver12,caddis,spawn1,xboxlive,sylvania,littlebi,524645,futura,valdemar,isacs155,prettygirl,big123,555444,slimer,chicke,newstyle,skypilot,sailormoon,fatluvr69,jetaime,sitruc,jesuschrist,sameer,bear12,hellion,yendor,country1,etnies,conejo,jedimast,darkknight,toobad,yxcvbn,snooks,porn4life,calvary,alfaromeo,ghostman,yannick,fnkfynblf,vatoloco,homebase,5550666,barret,1111111111zz,odysseus,edwardss,favre4,jerrys,crybaby,xsw21qaz,firestor,spanks,indians1,squish,kingair,babycakes,haters,sarahs,212223,teddyb,xfactor,cumload,rhapsody,death123,three3,raccoon,thomas2,slayer66,1q2q3q4q5q,thebes,mysterio,thirdeye,orkiox.,nodoubt,bugsy,schweiz,dima1996,angels1,darkwing,jeronimo,moonpie,ronaldo9,peaches2,mack10,manish,denise1,fellowes,carioca,taylor12,epaulson,makemoney,oc247ngucz,kochanie,3edcvfr4,vulture,1qw23e,1234567z,munchie,picard1,xthtgfirf,sportste,psycho1,tahoe1,creativ,perils,slurred,hermit,scoob,diesel1,cards1,wipeout,weeble,integra1,out3xf,powerpc,chrism,kalle,ariadne,kailua,phatty,dexter1,fordman,bungalow,paul123,compa,train1,thejoker,jys6wz,pussyeater,eatmee,sludge,dominus,denisa,tagheuer,yxcvbnm,bill1,ghfdlf,300zx,nikita123,carcass,semaj,ramone,muenchen,animal1,greeny,annemari,dbrf134,jeepcj7,mollys,garten,sashok,ironmaid,coyotes,astoria,george12,westcoast,primetim,123456o,panchito,rafae,japan1,framer,auralo,tooshort,egorova,qwerty22,callme,medicina,warhawk,w1w2w3w4,cristia,merli,alex22,kawaii,chatte,wargames,utvols,muaddib,trinket,andreas1,jjjjj1,cleric,scooters,cuntlick,gggggg1,slipknot1,235711,handcuff,stussy,guess1,leiceste,ppppp1,passe,lovegun,chevyman,hugecock,driver1,buttsex,psychnaut1,cyber1,black2,alpha12,melbourn,man123,metalman,yjdsqujl,blondi,bungee,freak1,stomper,caitlin1,nikitina,flyaway,prikol,begood,desperad,aurelius,john1234,whosyourdaddy,slimed123,bretagne,den123,hotwheel,king123,roodypoo,izzicam,save13tx,warpten,nokia3310,samolet,ready1,coopers,scott123,bonito,1aaaaa,yomomma,dawg1,rache,itworks,asecret,fencer,451236,polka,olivetti,sysadmin,zepplin,sanjuan,479373,lickem,hondacrx,pulamea,future1,naked1,sexyguy,w4g8at,lollol1,declan,runner1,rumple,daddy123,4snz9g,grandprix,calcio,whatthefuck,nagrom,asslick,pennst,negrit,squiggy,1223334444,police22,giovann,toronto1,tweet,yardbird,seagate,truckers,554455,scimitar,pescator,slydog,gaysex,dogfish,fuck777,12332112,qazxswed,morkovka,daniela1,imback,horny69,789123456,123456789w,jimmy2,bagger,ilove69,nikolaus,atdhfkm,rebirth,1111aaaa,pervasive,gjgeufq,dte4uw,gfhnbpfy,skeletor,whitney1,walkman,delorean,disco1,555888,as1234,ishikawa,fuck12,reaper1,dmitrii,bigshot,morrisse,purgen,qwer4321,itachi,willys,123123qwe,kisska,roma123,trafford,sk84life,326159487,pedros,idiom,plover,bebop,159875321,jailbird,arrowhea,qwaszx123,zaxscdvf,catlover,bakers,13579246,bones69,vermont1,helloyou,simeon,chevyz71,funguy,stargaze,parolparol,steph1,bubby,apathy,poppet,laxman,kelly123,goodnews,741236,boner1,gaetano,astonvilla,virtua,luckyboy,rocheste,hello2u,elohim,trigger1,cstrike,pepsicola,miroslav,96385274,fistfuck,cheval,magyar,svetlanka,lbfyjxrf,mamedov,123123123q,ronaldo1,scotty1,1nicole,pittbull,fredd,bbbbb1,dagwood,gfhkfvtyn,ghblehrb,logan5,1jordan,sexbomb,omega2,montauk,258741,dtythf,gibbon,winamp,thebomb,millerli,852654,gemin,baldy,halflife2,dragon22,mulberry,morrigan,hotel6,zorglub,surfin,951159,excell,arhangel,emachine,moses1,968574,reklama,bulldog2,cuties,barca,twingo,saber,elite11,redtruck,casablan,ashish,moneyy,pepper12,cnhtktw,rjcnbr,arschloch,phenix,cachorro,sunita,madoka,joselui,adams1,mymoney,hemicuda,fyutkjr,jake12,chicas,eeeee1,sonnyboy,smarties,birdy,kitten1,cnfcbr,island1,kurosaki,taekwond,konfetka,bennett1,omega3,jackson2,fresca,minako,octavian,kban667,feyenoord,muaythai,jakedog,fktrcfylhjdyf,1357911q,phuket,sexslave,fktrcfylhjdbx,asdfjk,89015173454,qwerty00,kindbud,eltoro,sex6969,nyknicks,12344321q,caballo,evenflow,hoddle,love22,metro1,mahalko,lawdog,tightass,manitou,buckie,whiskey1,anton123,335533,password4,primo,ramair,timbo,brayden,stewie,pedro1,yorkshir,ganster,hellothe,tippy1,direwolf,genesi,rodrig,enkeli,vaz21099,sorcerer,winky,oneshot,boggle,serebro,badger1,japanes,comicbook,kamehame,alcat,denis123,echo45,sexboy,gr8ful,hondo,voetbal,blue33,2112rush,geneviev,danni1,moosey,polkmn,matthew7,ironhead,hot2trot,ashley12,sweeper,imogen,blue21,retep,stealth1,guitarra,bernard1,tatian,frankfur,vfnhbwf,slacking,haha123,963741,asdasdas,katenok,airforce1,123456789qaz,shotgun1,12qwasz,reggie1,sharo,976431,pacifica,dhip6a,neptun,kardon,spooky1,beaut,555555a,toosweet,tiedup,11121314,startac,lover69,rediska,pirata,vfhrbp,1234qwerty,energize,hansolo1,playbo,larry123,oemdlg,cnjvfnjkju,a123123,alexan,gohawks,antonius,fcbayern,mambo,yummy1,kremlin,ellen1,tremere,vfiekz,bellevue,charlie9,izabella,malishka,fermat,rotterda,dawggy,becket,chasey,kramer1,21125150,lolit,cabrio,schlong,arisha,verity,3some,favorit,maricon,travelle,hotpants,red1234,garrett1,home123,knarf,seven777,figment,asdewq,canseco,good2go,warhol,thomas01,pionee,al9agd,panacea,chevy454,brazzers,oriole,azerty123,finalfan,patricio,northsta,rebelde,bulldo,stallone,boogie1,7uftyx,cfhfnjd,compusa,cornholi,config,deere,hoopster,sepultura,grasshop,babygurl,lesbo,diceman,proverbs,reddragon,nurbek,tigerwoo,superdup,buzzsaw,kakaroto,golgo13,edwar,123qaz123,butter1,sssss1,texas2,respekt,ou812ic,123456qaz,55555a,doctor1,mcgwire,maria123,aol999,cinders,aa1234,joness,ghbrjkmyj,makemone,sammyboy,567765,380zliki,theraven,testme,mylene,elvira26,indiglo,tiramisu,shannara,baby1,123666,gfhreh,papercut,johnmish,orange8,bogey1,mustang7,bagpipes,dimarik,vsijyjr,4637324,ravage,cogito,seven11,natashka,warzone,hr3ytm,4free,bigdee,000006,243462536,bigboi,123333,trouts,sandy123,szevasz,monica2,guderian,newlife1,ratchet,r12345,razorbac,12345i,piazza31,oddjob,beauty1,fffff1,anklet,nodrog,pepit,olivi,puravida,robert12,transam1,portman,bubbadog,steelers1,wilson1,eightball,mexico1,superboy,4rfv5tgb,mzepab,samurai1,fuckslut,colleen1,girdle,vfrcbvec,q1w2e3r4t,soldier1,19844891,alyssa1,a12345a,fidelis,skelter,nolove,mickeymouse,frehley,password69,watermel,aliska,soccer15,12345e,ladybug1,abulafia,adagio,tigerlil,takehana,hecate,bootneck,junfan,arigato,wonkette,bobby123,trustnoone,phantasm,132465798,brianjo,w12345,t34vfrc1991,deadeye,1robert,1daddy,adida,check1,grimlock,muffi,airwalk,prizrak,onclick,longbeac,ernie1,eadgbe,moore1,geniu,shadow123,bugaga,jonathan1,cjrjkjdf,orlova,buldog,talon1,westport,aenima,541233432442,barsuk,chicago2,kellys,hellbent,toughguy,iskander,skoal,whatisit,jake123,scooter2,fgjrfkbgcbc,ghandi,love13,adelphia,vjhrjdrf,adrenali,niunia,jemoeder,rainbo,all4u8,anime1,freedom7,seraph,789321,tommys,antman,firetruc,neogeo,natas,bmwm3,froggy1,paul1,mamit,bayview,gateways,kusanagi,ihateu,frederi,rock1,centurion,grizli,biggin,fish1,stalker1,3girls,ilovepor,klootzak,lollo,redsox04,kirill123,jake1,pampers,vasya,hammers1,teacup,towing,celtic1,ishtar,yingyang,4904s677075,dahc1,patriot1,patrick9,redbirds,doremi,rebecc,yoohoo,makarova,epiphone,rfgbnfy,milesd,blister,chelseafc,katana1,blackrose,1james,primrose,shock5,hard1,scooby12,c6h12o6,dustoff,boing,chisel,kamil,1william,defiant1,tyvugq,mp8o6d,aaa340,nafets,sonnet,flyhigh,242526,crewcom,love23,strike1,stairway,katusha,salamand,cupcake1,password0,007james,sunnie,multisync,harley01,tequila1,fred12,driver8,q8zo8wzq,hunter01,mozzer,temporar,eatmeraw,mrbrownxx,kailey,sycamore,flogger,tincup,rahasia,ganymede,bandera,slinger,1111122222,vander,woodys,1cowboy,khaled,jamies,london12,babyboo,tzpvaw,diogenes,budice,mavrick,135797531,cheeta,macros,squonk,blackber,topfuel,apache1,falcon16,darkjedi,cheeze,vfhvtkfl,sparco,change1,gfhfif,freestyl,kukuruza,loveme2,12345f,kozlov,sherpa,marbella,44445555,bocephus,1winner,alvar,hollydog,gonefish,iwantin,barman,godislove,amanda18,rfpfynbg,eugen,abcdef1,redhawk,thelema,spoonman,baller1,harry123,475869,tigerman,cdtnjxrf,marillio,scribble,elnino,carguy,hardhead,l2g7k3,troopers,selen,dragon76,antigua,ewtosi,ulysse,astana,paroli,cristo,carmex,marjan,bassfish,letitbe,kasparov,jay123,19933991,blue13,eyecandy,scribe,mylord,ukflbjkec,ellie1,beaver1,destro,neuken,halfpint,ameli,lilly1,satanic,xngwoj,12345trewq,asdf1,bulldogg,asakura,jesucrist,flipside,packers4,biggy,kadett,biteme69,bobdog,silverfo,saint1,bobbo,packman,knowledg,foolio,fussbal,12345g,kozerog,westcoas,minidisc,nbvcxw,martini1,alastair,rasengan,superbee,memento,porker,lena123,florenc,kakadu,bmw123,getalife,bigsky,monkee,people1,schlampe,red321,memyself,0147896325,12345678900987654321,soccer14,realdeal,gfgjxrf,bella123,juggs,doritos,celtics1,peterbilt,ghbdtnbrb,gnusmas,xcountry,ghbdtn1,batman99,deusex,gtnhjdf,blablabl,juster,marimba,love2,rerjkrf,alhambra,micros,siemens1,assmaste,moonie,dashadasha,atybrc,eeeeee1,wildrose,blue55,davidl,xrp23q,skyblue,leo123,ggggg1,bestfriend,franny,1234rmvb,fun123,rules1,sebastien,chester2,hakeem,winston2,fartripper,atlant,07831505,iluvsex,q1a2z3,larrys,009900,ghjkju,capitan,rider1,qazxsw21,belochka,andy123,hellya,chicca,maximal,juergen,password1234,howard1,quetzal,daniel123,qpwoeiruty,123555,bharat,ferrari3,numbnuts,savant,ladydog,phipsi,lovepussy,etoile,power2,mitten,britneys,chilidog,08522580,2fchbg,kinky1,bluerose,loulo,ricardo1,doqvq3,kswbdu,013cpfza,timoha,ghbdtnghbdtn,3stooges,gearhead,browns1,g00ber,super7,greenbud,kitty2,pootie,toolshed,gamers,coffe,ibill123,freelove,anasazi,sister1,jigger,natash,stacy1,weronika,luzern,soccer7,hoopla,dmoney,valerie1,canes,razdvatri,washere,greenwoo,rfhjkbyf,anselm,pkxe62,maribe,daniel2,maxim1,faceoff,carbine,xtkjdtr,buddy12,stratos,jumpman,buttocks,aqswdefr,pepsis,sonechka,steeler1,lanman,nietzsch,ballz,biscuit1,wrxsti,goodfood,juventu,federic,mattman,vika123,strelec,jledfyxbr,sideshow,4life,fredderf,bigwilly,12347890,12345671,sharik,bmw325i,fylhtqrf,dannon4,marky,mrhappy,drdoom,maddog1,pompier,cerbera,goobers,howler,jenny69,evely,letitrid,cthuttdyf,felip,shizzle,golf12,t123456,yamah,bluearmy,squishy,roxan,10inches,dollface,babygirl1,blacksta,kaneda,lexingto,canadien,222888,kukushka,sistema,224422,shadow69,ppspankp,mellons,barbie1,free4all,alfa156,lostone,2w3e4r5t,painkiller,robbie1,binger,8dihc6,jaspe,rellik,quark,sogood,hoopstar,number2,snowy1,dad2ownu,cresta,qwe123asd,hjvfyjdf,gibsonsg,qbg26i,dockers,grunge,duckling,lfiekz,cuntsoup,kasia1,1tigger,woaini,reksio,tmoney,firefighter,neuron,audia3,woogie,powerboo,powermac,fatcock,12345666,upnfmc,lustful,porn1,gotlove,amylee,kbytqrf,11924704,25251325,sarasota,sexme,ozzie1,berliner,nigga1,guatemal,seagulls,iloveyou!,chicken2,qwerty21,010203040506,1pillow,libby1,vodoley,backlash,piglets,teiubesc,019283,vonnegut,perico,thunde,buckey,gtxtymrf,manunite,iiiii1,lost4815162342,madonn,270873_,britney1,kevlar,piano1,boondock,colt1911,salamat,doma77ns,anuradha,cnhjqrf,rottweil,newmoon,topgun1,mauser,fightclu,birthday21,reviewpa,herons,aassddff,lakers32,melissa2,vredina,jiujitsu,mgoblue,shakey,moss84,12345zxcvb,funsex,benji1,garci,113322,chipie,windex,nokia5310,pwxd5x,bluemax,cosita,chalupa,trotsky,new123,g3ujwg,newguy,canabis,gnaget,happydays,felixx,1patrick,cumface,sparkie,kozlova,123234,newports,broncos7,golf18,recycle,hahah,harrypot,cachondo,open4me,miria,guessit,pepsione,knocker,usmc1775,countach,playe,wiking,landrover,cracksevi,drumline,a7777777,smile123,manzana,panty,liberta,pimp69,dolfan,quality1,schnee,superson,elaine22,webhompass,mrbrownx,deepsea,4wheel,mamasita,rockport,rollie,myhome,jordan12,kfvgjxrf,hockey12,seagrave,ford1,chelsea2,samsara,marissa1,lamesa,mobil1,piotrek,tommygun,yyyyy1,wesley1,billy123,homersim,julies,amanda12,shaka,maldini,suzenet,springst,iiiiii1,yakuza,111111aa,westwind,helpdesk,annamari,bringit,hopefull,hhhhhhh1,saywhat,mazdarx8,bulova,jennife1,baikal,gfhjkmxbr,victoria1,gizmo123,alex99,defjam,2girls,sandrock,positivo,shingo,syncmast,opensesa,silicone,fuckina,senna1,karlos,duffbeer,montagne,gehrig,thetick,pepino,hamburge,paramedic,scamp,smokeweed,fabregas,phantoms,venom121293,2583458,badone,porno69,manwhore,vfvf123,notagain,vbktyf,rfnthbyrf,wildblue,kelly001,dragon66,camell,curtis1,frolova,1212123,dothedew,tyler123,reddrago,planetx,promethe,gigolo,1001001,thisone,eugeni,blackshe,cruzazul,incognito,puller,joonas,quick1,spirit1,gazza,zealot,gordito,hotrod1,mitch1,pollito,hellcat,mythos,duluth,383pdjvl,easy123,hermos,binkie,its420,lovecraf,darien,romina,doraemon,19877891,syclone,hadoken,transpor,ichiro,intell,gargamel,dragon2,wavpzt,557744,rjw7x4,jennys,kickit,rjynfrn,likeit,555111,corvus,nec3520,133113,mookie1,bochum,samsung2,locoman0,154ugeiu,vfvfbgfgf,135792,[start],tenni,20001,vestax,hufmqw,neveragain,wizkid,kjgfnf,nokia6303,tristen,saltanat,louie1,gandalf2,sinfonia,alpha3,tolstoy,ford150,f00bar,1hello,alici,lol12,riker1,hellou,333888,1hunter,qw1234,vibrator,mets86,43211234,gonzale,cookies1,sissy1,john11,bubber,blue01,cup2006,gtkmvtyb,nazareth,heybaby,suresh,teddie,mozilla,rodeo1,madhouse,gamera,123123321,naresh,dominos,foxtrot1,taras,powerup,kipling,jasonb,fidget,galena,meatman,alpacino,bookmark,farting,humper,titsnass,gorgon,castaway,dianka,anutka,gecko1,fucklove,connery,wings1,erika1,peoria,moneymaker,ichabod,heaven1,paperboy,phaser,breakers,nurse1,westbrom,alex13,brendan1,123asd123,almera,grubber,clarkie,thisisme,welkom01,51051051051,crypto,freenet,pflybwf,black12,testme2,changeit,autobahn,attica,chaoss,denver1,tercel,gnasher23,master2,vasilii,sherman1,gomer,bigbuck,derek1,qwerzxcv,jumble,dragon23,art131313,numark,beasty,cxfcnmttcnm,updown,starion,glist,sxhq65,ranger99,monkey7,shifter,wolves1,4r5t6y,phone1,favorite5,skytommy,abracada,1martin,102030405060,gatech,giulio,blacktop,cheer1,africa1,grizzly1,inkjet,shemales,durango1,booner,11223344q,supergirl,vanyarespekt,dickless,srilanka,weaponx,6string,nashvill,spicey,boxer1,fabien,2sexy2ho,bowhunt,jerrylee,acrobat,tawnee,ulisse,nolimit8,l8g3bkde,pershing,gordo1,allover,gobrowns,123432,123444,321456987,spoon1,hhhhh1,sailing1,gardenia,teache,sexmachine,tratata,pirate1,niceone,jimbos,314159265,qsdfgh,bobbyy,ccccc1,carla1,vjkjltw,savana,biotech,frigid,123456789g,dragon10,yesiam,alpha06,oakwood,tooter,winsto,radioman,vavilon,asnaeb,google123,nariman,kellyb,dthyjcnm,password6,parol1,golf72,skate1,lthtdj,1234567890s,kennet,rossia,lindas,nataliya,perfecto,eminem1,kitana,aragorn1,rexona,arsenalf,planot,coope,testing123,timex,blackbox,bullhead,barbarian,dreamon,polaris1,cfvjktn,frdfhbev,gametime,slipknot666,nomad1,hfgcjlbz,happy69,fiddler,brazil1,joeboy,indianali,113355,obelisk,telemark,ghostrid,preston1,anonim,wellcome,verizon1,sayangku,censor,timeport,dummies,adult1,nbnfybr,donger,thales,iamgay,sexy1234,deadlift,pidaras,doroga,123qwe321,portuga,asdfgh12,happys,cadr14nu,pi3141,maksik,dribble,cortland,darken,stepanova,bommel,tropic,sochi2014,bluegras,shahid,merhaba,nacho,2580456,orange44,kongen,3cudjz,78girl,my3kids,marcopol,deadmeat,gabbie,saruman,jeepman,freddie1,katie123,master99,ronal,ballbag,centauri,killer7,xqgann,pinecone,jdeere,geirby,aceshigh,55832811,pepsimax,rayden,razor1,tallyho,ewelina,coldfire,florid,glotest,999333,sevenup,bluefin,limaperu,apostol,bobbins,charmed1,michelin,sundin,centaur,alphaone,christof,trial1,lions1,45645,just4you,starflee,vicki1,cougar1,green2,jellyfis,batman69,games1,hihje863,crazyzil,w0rm1,oklick,dogbite,yssup,sunstar,paprika,postov10,124578963,x24ik3,kanada,buckster,iloveamy,bear123,smiler,nx74205,ohiostat,spacey,bigbill,doudo,nikolaeva,hcleeb,sex666,mindy1,buster11,deacons,boness,njkcnsq,candy2,cracker1,turkey1,qwertyu1,gogreen,tazzzz,edgewise,ranger01,qwerty6,blazer1,arian,letmeinnow,cigar1,jjjjjj1,grigio,frien,tenchu,f9lmwd,imissyou,filipp,heathers,coolie,salem1,woodduck,scubadiv,123kat,raffaele,nikolaev,dapzu455,skooter,9inches,lthgfhjkm,gr8one,ffffff1,zujlrf,amanda69,gldmeo,m5wkqf,rfrltkf,televisi,bonjou,paleale,stuff1,cumalot,fuckmenow,climb7,mark1234,t26gn4,oneeye,george2,utyyflbq,hunting1,tracy71,ready2go,hotguy,accessno,charger1,rudedog,kmfdm,goober1,sweetie1,wtpmjgda,dimensio,ollie1,pickles1,hellraiser,mustdie,123zzz,99887766,stepanov,verdun,tokenbad,anatol,bartende,cidkid86,onkelz,timmie,mooseman,patch1,12345678c,marta1,dummy1,bethany1,myfamily,history1,178500,lsutiger,phydeaux,moren,dbrnjhjdbx,gnbxrf,uniden,drummers,abpbrf,godboy,daisy123,hogan1,ratpack,irland,tangerine,greddy,flore,sqrunch,billyjoe,q55555,clemson1,98745632,marios,ishot,angelin,access12,naruto12,lolly,scxakv,austin12,sallad,cool99,rockit,mongo1,mark22,ghbynth,ariadna,senha,docto,tyler2,mobius,hammarby,192168,anna12,claire1,pxx3eftp,secreto,greeneye,stjabn,baguvix,satana666,rhbcnbyjxrf,dallastx,garfiel,michaelj,1summer,montan,1234ab,filbert,squids,fastback,lyudmila,chucho,eagleone,kimberle,ar3yuk3,jake01,nokids,soccer22,1066ad,ballon,cheeto,review69,madeira,taylor2,sunny123,chubbs,lakeland,striker1,porche,qwertyu8,digiview,go1234,ferari,lovetits,aditya,minnow,green3,matman,cellphon,fortytwo,minni,pucara,69a20a,roman123,fuente,12e3e456,paul12,jacky,demian,littleman,jadakiss,vlad1997,franca,282860,midian,nunzio,xaccess2,colibri,jessica0,revilo,654456,harvey1,wolf1,macarena,corey1,husky1,arsen,milleniu,852147,crowes,redcat,combat123654,hugger,psalms,quixtar,ilovemom,toyot,ballss,ilovekim,serdar,james23,avenger1,serendip,malamute,nalgas,teflon,shagger,letmein6,vyjujnjxbt,assa1234,student1,dixiedog,gznybwf13,fuckass,aq1sw2de3,robroy,hosehead,sosa21,123345,ias100,teddy123,poppin,dgl70460,zanoza,farhan,quicksilver,1701d,tajmahal,depechemode,paulchen,angler,tommy2,recoil,megamanx,scarecro,nicole2,152535,rfvtgb,skunky,fatty1,saturno,wormwood,milwauke,udbwsk,sexlover,stefa,7bgiqk,gfnhbr,omar10,bratan,lbyfvj,slyfox,forest1,jambo,william3,tempus,solitari,lucydog,murzilka,qweasdzxc1,vehpbkrf,12312345,fixit,woobie,andre123,123456789x,lifter,zinaida,soccer17,andone,foxbat,torsten,apple12,teleport,123456i,leglover,bigcocks,vologda,dodger1,martyn,d6o8pm,naciona,eagleeye,maria6,rimshot,bentley1,octagon,barbos,masaki,gremio,siemen,s1107d,mujeres,bigtits1,cherr,saints1,mrpink,simran,ghzybr,ferrari2,secret12,tornado1,kocham,picolo,deneme,onelove1,rolan,fenster,1fuckyou,cabbie,pegaso,nastyboy,password5,aidana,mine2306,mike13,wetone,tigger69,ytreza,bondage1,myass,golova,tolik,happyboy,poilkj,nimda2k,rammer,rubies,hardcore1,jetset,hoops1,jlaudio,misskitt,1charlie,google12,theone1,phred,porsch,aalborg,luft4,charlie5,password7,gnosis,djgabbab,1daniel,vinny,borris,cumulus,member1,trogdor,darthmau,andrew2,ktjybl,relisys,kriste,rasta220,chgobndg,weener,qwerty66,fritter,followme,freeman1,ballen,blood1,peache,mariso,trevor1,biotch,gtfullam,chamonix,friendste,alligato,misha1,1soccer,18821221,venkat,superd,molotov,bongos,mpower,acun3t1x,dfcmrf,h4x3d,rfhfufylf,tigran,booyaa,plastic1,monstr,rfnhby,lookatme,anabolic,tiesto,simon123,soulman,canes1,skyking,tomcat1,madona,bassline,dasha123,tarheel1,dutch1,xsw23edc,qwerty123456789,imperator,slaveboy,bateau,paypal,house123,pentax,wolf666,drgonzo,perros,digger1,juninho,hellomoto,bladerun,zzzzzzz1,keebler,take8422,fffffff1,ginuwine,israe,caesar1,crack1,precious1,garand,magda1,zigazaga,321ewq,johnpaul,mama1234,iceman69,sanjeev,treeman,elric,rebell,1thunder,cochon,deamon,zoltan,straycat,uhbyuj,luvfur,mugsy,primer,wonder1,teetime,candycan,pfchfytw,fromage,gitler,salvatio,piggy1,23049307,zafira,chicky,sergeev,katze,bangers,andriy,jailbait,vaz2107,ghbhjlf,dbjktnnf,aqswde,zaratustra,asroma,1pepper,alyss,kkkkk1,ryan1,radish,cozumel,waterpol,pentium1,rosebowl,farmall,steinway,dbrekz,baranov,jkmuf,another1,chinacat,qqqqqqq1,hadrian,devilmaycry4,ratbag,teddy2,love21,pullings,packrat,robyn1,boobo,qw12er34,tribe1,rosey,celestia,nikkie,fortune12,olga123,danthema,gameon,vfrfhjys,dilshod,henry14,jenova,redblue,chimaera,pennywise,sokrates,danimal,qqaazz,fuaqz4,killer2,198200,tbone1,kolyan,wabbit,lewis1,maxtor,egoist,asdfas,spyglass,omegas,jack12,nikitka,esperanz,doozer,matematika,wwwww1,ssssss1,poiu0987,suchka,courtney1,gungho,alpha2,fktyjxrf,summer06,bud420,devildriver,heavyd,saracen,foucault,choclate,rjdfktyrj,goblue1,monaro,jmoney,dcpugh,efbcapa201,qqh92r,pepsicol,bbb747,ch5nmk,honeyb,beszoptad,tweeter,intheass,iseedeadpeople,123dan,89231243658s,farside1,findme,smiley1,55556666,sartre,ytcnjh,kacper,costarica,134679258,mikeys,nolimit9,vova123,withyou,5rxypn,love143,freebie,rescue1,203040,michael6,12monkey,redgreen,steff,itstime,naveen,good12345,acidrain,1dawg,miramar,playas,daddio,orion2,852741,studmuff,kobe24,senha123,stephe,mehmet,allalone,scarface1,helloworld,smith123,blueyes,vitali,memphis1,mybitch,colin1,159874,1dick,podaria,d6wnro,brahms,f3gh65,dfcbkmtd,xxxman,corran,ugejvp,qcfmtz,marusia,totem,arachnid,matrix2,antonell,fgntrf,zemfira,christos,surfing1,naruto123,plato1,56qhxs,madzia,vanille,043aaa,asq321,mutton,ohiostate,golde,cdznjckfd,rhfcysq,green5,elephan,superdog,jacqueli,bollock,lolitas,nick12,1orange,maplelea,july23,argento,waldorf,wolfer,pokemon12,zxcvbnmm,flicka,drexel,outlawz,harrie,atrain,juice2,falcons1,charlie6,19391945,tower1,dragon21,hotdamn,dirtyboy,love4ever,1ginger,thunder2,virgo1,alien1,bubblegu,4wwvte,123456789qqq,realtime,studio54,passss,vasilek,awsome,giorgia,bigbass,2002tii,sunghile,mosdef,simbas,count0,uwrl7c,summer05,lhepmz,ranger21,sugarbea,principe,5550123,tatanka,9638v,cheerios,majere,nomercy,jamesbond007,bh90210,7550055,jobber,karaganda,pongo,trickle,defamer,6chid8,1q2a3z,tuscan,nick123,.adgjm,loveyo,hobbes1,note1234,shootme,171819,loveporn,9788960,monty123,fabrice,macduff,monkey13,shadowfa,tweeker,hanna1,madball,telnet,loveu2,qwedcxzas,thatsit,vfhcbr,ptfe3xxp,gblfhfcs,ddddddd1,hakkinen,liverune,deathsta,misty123,suka123,recon1,inferno1,232629,polecat,sanibel,grouch,hitech,hamradio,rkfdbfnehf,vandam,nadin,fastlane,shlong,iddqdidkfa,ledzeppelin,sexyfeet,098123,stacey1,negras,roofing,lucifer1,ikarus,tgbyhn,melnik,barbaria,montego,twisted1,bigal1,jiggle,darkwolf,acerview,silvio,treetops,bishop1,iwanna,pornsite,happyme,gfccdjhl,114411,veritech,batterse,casey123,yhntgb,mailto,milli,guster,q12345678,coronet,sleuth,fuckmeha,armadill,kroshka,geordie,lastochka,pynchon,killall,tommy123,sasha1996,godslove,hikaru,clticic,cornbrea,vfkmdbyf,passmaster,123123123a,souris,nailer,diabolo,skipjack,martin12,hinata,mof6681,brookie,dogfight,johnso,karpov,326598,rfvbrflpt,travesti,caballer,galaxy1,wotan,antoha,art123,xakep1234,ricflair,pervert1,p00kie,ambulanc,santosh,berserker,larry33,bitch123,a987654321,dogstar,angel22,cjcbcrf,redhouse,toodles,gold123,hotspot,kennedy1,glock21,chosen1,schneide,mainman,taffy1,3ki42x,4zqauf,ranger2,4meonly,year2000,121212a,kfylsi,netzwerk,diese,picasso1,rerecz,225522,dastan,swimmer1,brooke1,blackbea,oneway,ruslana,dont4get,phidelt,chrisp,gjyxbr,xwing,kickme,shimmy,kimmy1,4815162342lost,qwerty5,fcporto,jazzbo,mierd,252627,basses,sr20det,00133,florin,howdy1,kryten,goshen,koufax,cichlid,imhotep,andyman,wrest666,saveme,dutchy,anonymou,semprini,siempre,mocha1,forest11,wildroid,aspen1,sesam,kfgekz,cbhbec,a55555,sigmanu,slash1,giggs11,vatech,marias,candy123,jericho1,kingme,123a123,drakula,cdjkjxm,mercur,oneman,hoseman,plumper,ilovehim,lancers,sergey1,takeshi,goodtogo,cranberr,ghjcnj123,harvick,qazxs,1972chev,horsesho,freedom3,letmein7,saitek,anguss,vfvfgfgfz,300000,elektro,toonporn,999111999q,mamuka,q9umoz,edelweis,subwoofer,bayside,disturbe,volition,lucky3,12345678z,3mpz4r,march1,atlantida,strekoza,seagrams,090909t,yy5rbfsc,jack1234,sammy12,sampras,mark12,eintrach,chaucer,lllll1,nochance,whitepower,197000,lbvekz,passer,torana,12345as,pallas,koolio,12qw34,nokia8800,findout,1thomas,mmmmm1,654987,mihaela,chinaman,superduper,donnas,ringo1,jeroen,gfdkjdf,professo,cdtnrf,tranmere,tanstaaf,himera,ukflbfnjh,667788,alex32,joschi,w123456,okidoki,flatline,papercli,super8,doris1,2good4u,4z34l0ts,pedigree,freeride,gsxr1100,wulfgar,benjie,ferdinan,king1,charlie7,djdxbr,fhntvbq,ripcurl,2wsx1qaz,kingsx,desade,sn00py,loveboat,rottie,evgesha,4money,dolittle,adgjmpt,buzzers,brett1,makita,123123qweqwe,rusalka,sluts1,123456e,jameson1,bigbaby,1z2z3z,ckjybr,love4u,fucker69,erhfbyf,jeanluc,farhad,fishfood,merkin,giant1,golf69,rfnfcnhjaf,camera1,stromb,smoothy,774411,nylon,juice1,rfn.irf,newyor,123456789t,marmot,star11,jennyff,jester1,hisashi,kumquat,alex777,helicopt,merkur,dehpye,cummin,zsmj2v,kristjan,april12,englan,honeypot,badgirls,uzumaki,keines,p12345,guita,quake1,duncan1,juicer,milkbone,hurtme,123456789b,qq123456789,schwein,p3wqaw,54132442,qwertyytrewq,andreeva,ruffryde,punkie,abfkrf,kristinka,anna1987,ooooo1,335533aa,umberto,amber123,456123789,456789123,beelch,manta,peeker,1112131415,3141592654,gipper,wrinkle5,katies,asd123456,james11,78n3s5af,michael0,daboss,jimmyb,hotdog1,david69,852123,blazed,sickan,eljefe,2n6wvq,gobills,rfhfcm,squeaker,cabowabo,luebri,karups,test01,melkor,angel777,smallvil,modano,olorin,4rkpkt,leslie1,koffie,shadows1,littleon,amiga1,topeka,summer20,asterix1,pitstop,aloysius,k12345,magazin,joker69,panocha,pass1word,1233214,ironpony,368ejhih,88keys,pizza123,sonali,57np39,quake2,1234567890qw,1020304,sword1,fynjif,abcde123,dfktyjr,rockys,grendel1,harley12,kokakola,super2,azathoth,lisa123,shelley1,girlss,ibragim,seven1,jeff24,1bigdick,dragan,autobot,t4nvp7,omega123,900000,hecnfv,889988,nitro1,doggie1,fatjoe,811pahc,tommyt,savage1,pallino,smitty1,jg3h4hfn,jamielee,1qazwsx,zx123456,machine1,asdfgh123,guinnes,789520,sharkman,jochen,legend1,sonic2,extreme1,dima12,photoman,123459876,nokian95,775533,vaz2109,april10,becks,repmvf,pooker,qwer12345,themaster,nabeel,monkey10,gogetit,hockey99,bbbbbbb1,zinedine,dolphin2,anelka,1superma,winter01,muggsy,horny2,669966,kuleshov,jesusis,calavera,bullet1,87t5hdf,sleepers,winkie,vespa,lightsab,carine,magister,1spider,shitbird,salavat,becca1,wc18c2,shirak,galactus,zaskar,barkley1,reshma,dogbreat,fullsail,asasa,boeder,12345ta,zxcvbnm12,lepton,elfquest,tony123,vkaxcs,savatage,sevilia1,badkitty,munkey,pebbles1,diciembr,qapmoc,gabriel2,1qa2ws3e,cbcmrb,welldone,nfyufh,kaizen,jack11,manisha,grommit,g12345,maverik,chessman,heythere,mixail,jjjjjjj1,sylvia1,fairmont,harve,skully,global1,youwish,pikachu1,badcat,zombie1,49527843,ultra1,redrider,offsprin,lovebird,153426,stymie,aq1sw2,sorrento,0000001,r3ady41t,webster1,95175,adam123,coonass,159487,slut1,gerasim,monkey99,slutwife,159963,1pass1page,hobiecat,bigtymer,all4you,maggie2,olamide,comcast1,infinit,bailee,vasileva,.ktxrf,asdfghjkl1,12345678912,setter,fuckyou7,nnagqx,lifesuck,draken,austi,feb2000,cable1,1234qwerasdf,hax0red,zxcv12,vlad7788,nosaj,lenovo,underpar,huskies1,lovegirl,feynman,suerte,babaloo,alskdjfhg,oldsmobi,bomber1,redrover,pupuce,methodman,phenom,cutegirl,countyli,gretsch,godisgood,bysunsu,hardhat,mironova,123qwe456rty,rusty123,salut,187211,555666777,11111z,mahesh,rjntyjxtr,br00klyn,dunce1,timebomb,bovine,makelove,littlee,shaven,rizwan,patrick7,42042042,bobbijo,rustem,buttmunc,dongle,tiger69,bluecat,blackhol,shirin,peaces,cherub,cubase,longwood,lotus7,gwju3g,bruin,pzaiu8,green11,uyxnyd,seventee,dragon5,tinkerbel,bluess,bomba,fedorova,joshua2,bodyshop,peluche,gbpacker,shelly1,d1i2m3a4,ghtpbltyn,talons,sergeevna,misato,chrisc,sexmeup,brend,olddog,davros,hazelnut,bridget1,hzze929b,readme,brethart,wild1,ghbdtnbr1,nortel,kinger,royal1,bucky1,allah1,drakkar,emyeuanh,gallaghe,hardtime,jocker,tanman,flavio,abcdef123,leviatha,squid1,skeet,sexse,123456x,mom4u4mm,lilred,djljktq,ocean11,cadaver,baxter1,808state,fighton,primavera,1andrew,moogle,limabean,goddess1,vitalya,blue56,258025,bullride,cicci,1234567d,connor1,gsxr11,oliveoil,leonard1,legsex,gavrik,rjnjgtc,mexicano,2bad4u,goodfellas,ornw6d,mancheste,hawkmoon,zlzfrh,schorsch,g9zns4,bashful,rossi46,stephie,rfhfntkm,sellout,123fuck,stewar1,solnze,00007,thor5200,compaq12,didit,bigdeal,hjlbyf,zebulon,wpf8eu,kamran,emanuele,197500,carvin,ozlq6qwm,3syqo15hil,pennys,epvjb6,asdfghjkl123,198000,nfbcbz,jazzer,asfnhg66,zoloft,albundy,aeiou,getlaid,planet1,gjkbyjxrf,alex2000,brianb,moveon,maggie11,eieio,vcradq,shaggy1,novartis,cocoloco,dunamis,554uzpad,sundrop,1qwertyu,alfie,feliks,briand,123www,red456,addams,fhntv1998,goodhead,theway,javaman,angel01,stratoca,lonsdale,15987532,bigpimpin,skater1,issue43,muffie,yasmina,slowride,crm114,sanity729,himmel,carolcox,bustanut,parabola,masterlo,computador,crackhea,dynastar,rockbott,doggysty,wantsome,bigten,gaelle,juicy1,alaska1,etower,sixnine,suntan,froggies,nokia7610,hunter11,njnets,alicante,buttons1,diosesamo,elizabeth1,chiron,trustnoo,amatuers,tinytim,mechta,sammy2,cthulu,trs8f7,poonam,m6cjy69u35,cookie12,blue25,jordans,santa1,kalinka,mikey123,lebedeva,12345689,kissss,queenbee,vjybnjh,ghostdog,cuckold,bearshare,rjcntyrj,alinochka,ghjcnjrdfibyj,aggie1,teens1,3qvqod,dauren,tonino,hpk2qc,iqzzt580,bears85,nascar88,theboy,njqcw4,masyanya,pn5jvw,intranet,lollone,shadow99,00096462,techie,cvtifhbrb,redeemed,gocanes,62717315,topman,intj3a,cobrajet,antivirus,whyme,berserke,ikilz083,airedale,brandon2,hopkig,johanna1,danil8098,gojira,arthu,vision1,pendragon,milen,chrissie,vampiro,mudder,chris22,blowme69,omega7,surfers,goterps,italy1,baseba11,diego1,gnatsum,birdies,semenov,joker123,zenit2011,wojtek,cab4ma99,watchmen,damia,forgotte,fdm7ed,strummer,freelanc,cingular,orange77,mcdonalds,vjhjpjdf,kariya,tombston,starlet,hawaii1,dantheman,megabyte,nbvjirf,anjing,ybrjkftdbx,hotmom,kazbek,pacific1,sashimi,asd12,coorslig,yvtte545,kitte,elysium,klimenko,cobblers,kamehameha,only4me,redriver,triforce,sidorov,vittoria,fredi,dank420,m1234567,fallout2,989244342a,crazy123,crapola,servus,volvos,1scooter,griffin1,autopass,ownzyou,deviant,george01,2kgwai,boeing74,simhrq,hermosa,hardcor,griffy,rolex1,hackme,cuddles1,master3,bujhtr,aaron123,popolo,blader,1sexyred,gerry1,cronos,ffvdj474,yeehaw,bob1234,carlos2,mike77,buckwheat,ramesh,acls2h,monster2,montess,11qq22ww,lazer,zx123456789,chimpy,masterch,sargon,lochness,archana,1234qwert,hbxfhl,sarahb,altoid,zxcvbn12,dakot,caterham,dolomite,chazz,r29hqq,longone,pericles,grand1,sherbert,eagle3,pudge,irontree,synapse,boome,nogood,summer2,pooki,gangsta1,mahalkit,elenka,lbhtrnjh,dukedog,19922991,hopkins1,evgenia,domino1,x123456,manny1,tabbycat,drake1,jerico,drahcir,kelly2,708090a,facesit,11c645df,mac123,boodog,kalani,hiphop1,critters,hellothere,tbirds,valerka,551scasi,love777,paloalto,mrbrown,duke3d,killa1,arcturus,spider12,dizzy1,smudger,goddog,75395,spammy,1357997531,78678,datalife,zxcvbn123,1122112211,london22,23dp4x,rxmtkp,biggirls,ownsu,lzbs2twz,sharps,geryfe,237081a,golakers,nemesi,sasha1995,pretty1,mittens1,d1lakiss,speedrac,gfhjkmm,sabbat,hellrais,159753258,qwertyuiop123,playgirl,crippler,salma,strat1,celest,hello5,omega5,cheese12,ndeyl5,edward12,soccer3,cheerio,davido,vfrcbr,gjhjctyjr,boscoe,inessa,shithole,ibill,qwepoi,201jedlz,asdlkj,davidk,spawn2,ariel1,michael4,jamie123,romantik,micro1,pittsbur,canibus,katja,muhtar,thomas123,studboy,masahiro,rebrov,patrick8,hotboys,sarge1,1hammer,nnnnn1,eistee,datalore,jackdani,sasha2010,mwq6qlzo,cmfnpu,klausi,cnhjbntkm,andrzej,ilovejen,lindaa,hunter123,vvvvv1,novembe,hamster1,x35v8l,lacey1,1silver,iluvporn,valter,herson,alexsandr,cojones,backhoe,womens,777angel,beatit,klingon1,ta8g4w,luisito,benedikt,maxwel,inspecto,zaq12ws,wladimir,bobbyd,peterj,asdfg12,hellspawn,bitch69,nick1234,golfer23,sony123,jello1,killie,chubby1,kodaira52,yanochka,buckfast,morris1,roaddogg,snakeeye,sex1234,mike22,mmouse,fucker11,dantist,brittan,vfrfhjdf,doc123,plokijuh,emerald1,batman01,serafim,elementa,soccer9,footlong,cthuttdbx,hapkido,eagle123,getsmart,getiton,batman2,masons,mastiff,098890,cfvfhf,james7,azalea,sherif,saun24865709,123red,cnhtrjpf,martina1,pupper,michael5,alan12,shakir,devin1,ha8fyp,palom,mamulya,trippy,deerhunter,happyone,monkey77,3mta3,123456789f,crownvic,teodor,natusik,0137485,vovchik,strutter,triumph1,cvetok,moremone,sonnen,screwbal,akira1,sexnow,pernille,independ,poopies,samapi,kbcbxrf,master22,swetlana,urchin,viper2,magica,slurpee,postit,gilgames,kissarmy,clubpenguin,limpbizk,timber1,celin,lilkim,fuckhard,lonely1,mom123,goodwood,extasy,sdsadee23,foxglove,malibog,clark1,casey2,shell1,odense,balefire,dcunited,cubbie,pierr,solei,161718,bowling1,areyukesc,batboy,r123456,1pionee,marmelad,maynard1,cn42qj,cfvehfq,heathrow,qazxcvbn,connecti,secret123,newfie,xzsawq21,tubitzen,nikusha,enigma1,yfcnz123,1austin,michaelc,splunge,wanger,phantom2,jason2,pain4me,primetime21,babes1,liberte,sugarray,undergro,zonker,labatts,djhjyf,watch1,eagle5,madison2,cntgfirf,sasha2,masterca,fiction7,slick50,bruins1,sagitari,12481632,peniss,insuranc,2b8riedt,12346789,mrclean,ssptx452,tissot,q1w2e3r4t5y6u7,avatar1,comet1,spacer,vbrjkf,pass11,wanker1,14vbqk9p,noshit,money4me,sayana,fish1234,seaways,pipper,romeo123,karens,wardog,ab123456,gorilla1,andrey123,lifesucks,jamesr,4wcqjn,bearman,glock22,matt11,dflbvrf,barbi,maine1,dima1997,sunnyboy,6bjvpe,bangkok1,666666q,rafiki,letmein0,0raziel0,dalla,london99,wildthin,patrycja,skydog,qcactw,tmjxn151,yqlgr667,jimmyd,stripclub,deadwood,863abgsg,horses1,qn632o,scatman,sonia1,subrosa,woland,kolya,charlie4,moleman,j12345,summer11,angel11,blasen,sandal,mynewpas,retlaw,cambria,mustang4,nohack04,kimber45,fatdog,maiden1,bigload,necron,dupont24,ghost123,turbo2,.ktymrf,radagast,balzac,vsevolod,pankaj,argentum,2bigtits,mamabear,bumblebee,mercury7,maddie1,chomper,jq24nc,snooky,pussylic,1lovers,taltos,warchild,diablo66,jojo12,sumerki,aventura,gagger,annelies,drumset,cumshots,azimut,123580,clambake,bmw540,birthday54,psswrd,paganini,wildwest,filibert,teaseme,1test,scampi,thunder5,antosha,purple12,supersex,hhhhhh1,brujah,111222333a,13579a,bvgthfnjh,4506802a,killians,choco,qqqwwweee,raygun,1grand,koetsu13,sharp1,mimi92139,fastfood,idontcare,bluered,chochoz,4z3al0ts,target1,sheffiel,labrat,stalingrad,147123,cubfan,corvett1,holden1,snapper1,4071505,amadeo,pollo,desperados,lovestory,marcopolo,mumbles,familyguy,kimchee,marcio,support1,tekila,shygirl1,trekkie,submissi,ilaria,salam,loveu,wildstar,master69,sales1,netware,homer2,arseniy,gerrity1,raspberr,atreyu,stick1,aldric,tennis12,matahari,alohomora,dicanio,michae1,michaeld,666111,luvbug,boyscout,esmerald,mjordan,admiral1,steamboa,616913,ybhdfyf,557711,555999,sunray,apokalipsis,theroc,bmw330,buzzy,chicos,lenusik,shadowma,eagles05,444222,peartree,qqq123,sandmann,spring1,430799,phatass,andi03,binky1,arsch,bamba,kenny123,fabolous,loser123,poop12,maman,phobos,tecate,myxworld4,metros,cocorico,nokia6120,johnny69,hater,spanked,313233,markos,love2011,mozart1,viktoriy,reccos,331234,hornyone,vitesse,1um83z,55555q,proline,v12345,skaven,alizee,bimini,fenerbahce,543216,zaqqaz,poi123,stabilo,brownie1,1qwerty1,dinesh,baggins1,1234567t,davidkin,friend1,lietuva,octopuss,spooks,12345qq,myshit,buttface,paradoxx,pop123,golfin,sweet69,rfghbp,sambuca,kayak1,bogus1,girlz,dallas12,millers,123456zx,operatio,pravda,eternal1,chase123,moroni,proust,blueduck,harris1,redbarch,996699,1010101,mouche,millenni,1123456,score1,1234565,1234576,eae21157,dave12,pussyy,gfif1991,1598741,hoppy,darrian,snoogins,fartface,ichbins,vfkbyrf,rusrap,2741001,fyfrjylf,aprils,favre,thisis,bannana,serval,wiggum,satsuma,matt123,ivan123,gulmira,123zxc123,oscar2,acces,annie2,dragon0,emiliano,allthat,pajaro,amandine,rawiswar,sinead,tassie,karma1,piggys,nokias,orions,origami,type40,mondo,ferrets,monker,biteme2,gauntlet,arkham,ascona,ingram01,klem1,quicksil,bingo123,blue66,plazma,onfire,shortie,spjfet,123963,thered,fire777,lobito,vball,1chicken,moosehea,elefante,babe23,jesus12,parallax,elfstone,number5,shrooms,freya,hacker1,roxette,snoops,number7,fellini,dtlmvf,chigger,mission1,mitsubis,kannan,whitedog,james01,ghjgecr,rfnfgekmnf,everythi,getnaked,prettybo,sylvan,chiller,carrera4,cowbo,biochem,azbuka,qwertyuiop1,midnight1,informat,audio1,alfred1,0range,sucker1,scott2,russland,1eagle,torben,djkrjlfd,rocky6,maddy1,bonobo,portos,chrissi,xjznq5,dexte,vdlxuc,teardrop,pktmxr,iamtheone,danijela,eyphed,suzuki1,etvww4,redtail,ranger11,mowerman,asshole2,coolkid,adriana1,bootcamp,longcut,evets,npyxr5,bighurt,bassman1,stryder,giblet,nastja,blackadd,topflite,wizar,cumnow,technolo,bassboat,bullitt,kugm7b,maksimus,wankers,mine12,sunfish,pimpin1,shearer9,user1,vjzgjxnf,tycobb,80070633pc,stanly,vitaly,shirley1,cinzia,carolyn1,angeliqu,teamo,qdarcv,aa123321,ragdoll,bonit,ladyluck,wiggly,vitara,jetbalance,12345600,ozzman,dima12345,mybuddy,shilo,satan66,erebus,warrio,090808qwe,stupi,bigdan,paul1234,chiapet,brooks1,philly1,dually,gowest,farmer1,1qa2ws3ed4rf,alberto1,beachboy,barne,aa12345,aliyah,radman,benson1,dfkthbq,highball,bonou2,i81u812,workit,darter,redhook,csfbr5yy,buttlove,episode1,ewyuza,porthos,lalal,abcd12,papero,toosexy,keeper1,silver7,jujitsu,corset,pilot123,simonsay,pinggolf,katerinka,kender,drunk1,fylhjvtlf,rashmi,nighthawk,maggy,juggernaut,larryb,cabibble,fyabcf,247365,gangstar,jaybee,verycool,123456789qw,forbidde,prufrock,12345zxc,malaika,blackbur,docker,filipe,koshechka,gemma1,djamaal,dfcbkmtdf,gangst,9988aa,ducks1,pthrfkj,puertorico,muppets,griffins,whippet,sauber,timofey,larinso,123456789zxc,quicken,qsefth,liteon,headcase,bigdadd,zxc321,maniak,jamesc,bassmast,bigdogs,1girls,123xxx,trajan,lerochka,noggin,mtndew,04975756,domin,wer123,fumanchu,lambada,thankgod,june22,kayaking,patchy,summer10,timepass,poiu1234,kondor,kakka,lament,zidane10,686xqxfg,l8v53x,caveman1,nfvthkfy,holymoly,pepita,alex1996,mifune,fighter1,asslicker,jack22,abc123abc,zaxxon,midnigh,winni,psalm23,punky,monkey22,password13,mymusic,justyna,annushka,lucky5,briann,495rus19,withlove,almaz,supergir,miata,bingbong,bradpitt,kamasutr,yfgjktjy,vanman,pegleg,amsterdam1,123a321,letmein9,shivan,korona,bmw520,annette1,scotsman,gandal,welcome12,sc00by,qpwoei,fred69,m1sf1t,hamburg1,1access,dfkmrbhbz,excalibe,boobies1,fuckhole,karamel,starfuck,star99,breakfas,georgiy,ywvxpz,smasher,fatcat1,allanon,12345n,coondog,whacko,avalon1,scythe,saab93,timon,khorne,atlast,nemisis,brady12,blenheim,52678677,mick7278,9skw5g,fleetwoo,ruger1,kissass,pussy7,scruff,12345l,bigfun,vpmfsz,yxkck878,evgeny,55667788,lickher,foothill,alesis,poppies,77777778,californi,mannie,bartjek,qhxbij,thehulk,xirt2k,angelo4ek,rfkmrekznjh,tinhorse,1david,sparky12,night1,luojianhua,bobble,nederland,rosemari,travi,minou,ciscokid,beehive,565hlgqo,alpine1,samsung123,trainman,xpress,logistic,vw198m2n,hanter,zaqwsx123,qwasz,mariachi,paska,kmg365,kaulitz,sasha12,north1,polarbear,mighty1,makeksa11,123456781,one4all,gladston,notoriou,polniypizdec110211,gosia,grandad,xholes,timofei,invalidp,speaker1,zaharov,maggiema,loislane,gonoles,br5499,discgolf,kaskad,snooper,newman1,belial,demigod,vicky1,pridurok,alex1990,tardis1,cruzer,hornie,sacramen,babycat,burunduk,mark69,oakland1,me1234,gmctruck,extacy,sexdog,putang,poppen,billyd,1qaz2w,loveable,gimlet,azwebitalia,ragtop,198500,qweas,mirela,rock123,11bravo,sprewell,tigrenok,jaredleto,vfhbif,blue2,rimjob,catwalk,sigsauer,loqse,doromich,jack01,lasombra,jonny5,newpassword,profesor,garcia1,123as123,croucher,demeter,4_life,rfhfvtkm,superman2,rogues,assword1,russia1,jeff1,mydream,z123456789,rascal1,darre,kimberl,pickle1,ztmfcq,ponchik,lovesporn,hikari,gsgba368,pornoman,chbjun,choppy,diggity,nightwolf,viktori,camar,vfhecmrf,alisa1,minstrel,wishmaster,mulder1,aleks,gogirl,gracelan,8womys,highwind,solstice,dbrnjhjdyf,nightman,pimmel,beertje,ms6nud,wwfwcw,fx3tuo,poopface,asshat,dirtyd,jiminy,luv2fuck,ptybnxtvgbjy,dragnet,pornogra,10inch,scarlet1,guido1,raintree,v123456,1aaaaaaa,maxim1935,hotwater,gadzooks,playaz,harri,brando1,defcon1,ivanna,123654a,arsenal2,candela,nt5d27,jaime1,duke1,burton1,allstar1,dragos,newpoint,albacore,1236987z,verygoodbot,1wildcat,fishy1,ptktysq,chris11,puschel,itdxtyrj,7kbe9d,serpico,jazzie,1zzzzz,kindbuds,wenef45313,1compute,tatung,sardor,gfyfcjybr,test99,toucan,meteora,lysander,asscrack,jowgnx,hevnm4,suckthis,masha123,karinka,marit,oqglh565,dragon00,vvvbbb,cheburashka,vfrfrf,downlow,unforgiven,p3e85tr,kim123,sillyboy,gold1,golfvr6,quicksan,irochka,froglegs,shortsto,caleb1,tishka,bigtitts,smurfy,bosto,dropzone,nocode,jazzbass,digdug,green7,saltlake,therat,dmitriev,lunita,deaddog,summer0,1212qq,bobbyg,mty3rh,isaac1,gusher,helloman,sugarbear,corvair,extrem,teatime,tujazopi,titanik,efyreg,jo9k2jw2,counchac,tivoli,utjvtnhbz,bebit,jacob6,clayton1,incubus1,flash123,squirter,dima2010,cock1,rawks,komatsu,forty2,98741236,cajun1,madelein,mudhoney,magomed,q111111,qaswed,consense,12345b,bakayaro,silencer,zoinks,bigdic,werwolf,pinkpuss,96321478,alfie1,ali123,sarit,minette,musics,chato,iaapptfcor,cobaka,strumpf,datnigga,sonic123,yfnecbr,vjzctvmz,pasta1,tribbles,crasher,htlbcrf,1tiger,shock123,bearshar,syphon,a654321,cubbies1,jlhanes,eyespy,fucktheworld,carrie1,bmw325is,suzuk,mander,dorina,mithril,hondo1,vfhnbyb,sachem,newton1,12345x,7777755102q,230857z,xxxsex,scubapro,hayastan,spankit,delasoul,searock6,fallout3,nilrem,24681357,pashka,voluntee,pharoh,willo,india1,badboy69,roflmao,gunslinger,lovergir,mama12,melange,640xwfkv,chaton,darkknig,bigman1,aabbccdd,harleyd,birdhouse,giggsy,hiawatha,tiberium,joker7,hello1234,sloopy,tm371855,greendog,solar1,bignose,djohn11,espanol,oswego,iridium,kavitha,pavell,mirjam,cyjdsvujljv,alpha5,deluge,hamme,luntik,turismo,stasya,kjkbnf,caeser,schnecke,tweety1,tralfaz,lambrett,prodigy1,trstno1,pimpshit,werty1,karman,bigboob,pastel,blackmen,matthew8,moomin,q1w2e,gilly,primaver,jimmyg,house2,elviss,15975321,1jessica,monaliza,salt55,vfylfhbyrf,harley11,tickleme,murder1,nurgle,kickass1,theresa1,fordtruck,pargolf,managua,inkognito,sherry1,gotit,friedric,metro2033,slk230,freeport,cigarett,492529,vfhctkm,thebeach,twocats,bakugan,yzerman1,charlieb,motoko,skiman,1234567w,pussy3,love77,asenna,buffie,260zntpc,kinkos,access20,mallard1,fuckyou69,monami,rrrrr1,bigdog69,mikola,1boomer,godzila,ginger2,dima2000,skorpion39,dima1234,hawkdog79,warrior2,ltleirf,supra1,jerusale,monkey01,333z333,666888,kelsey1,w8gkz2x1,fdfnfh,msnxbi,qwe123rty,mach1,monkey3,123456789qq,c123456,nezabudka,barclays,nisse,dasha1,12345678987654321,dima1993,oldspice,frank2,rabbitt,prettyboy,ov3ajy,iamthema,kawasak,banjo1,gtivr6,collants,gondor,hibees,cowboys2,codfish,buster2,purzel,rubyred,kayaker,bikerboy,qguvyt,masher,sseexx,kenshiro,moonglow,semenova,rosari,eduard1,deltaforce,grouper,bongo1,tempgod,1taylor,goldsink,qazxsw1,1jesus,m69fg2w,maximili,marysia,husker1,kokanee,sideout,googl,south1,plumber1,trillian,00001,1357900,farkle,1xxxxx,pascha,emanuela,bagheera,hound1,mylov,newjersey,swampfox,sakic19,torey,geforce,wu4etd,conrail,pigman,martin2,ber02,nascar2,angel69,barty,kitsune,cornet,yes90125,goomba,daking,anthea,sivart,weather1,ndaswf,scoubidou,masterchief,rectum,3364068,oranges1,copter,1samanth,eddies,mimoza,ahfywbz,celtic88,86mets,applemac,amanda11,taliesin,1angel,imhere,london11,bandit12,killer666,beer1,06225930,psylocke,james69,schumach,24pnz6kc,endymion,wookie1,poiu123,birdland,smoochie,lastone,rclaki,olive1,pirat,thunder7,chris69,rocko,151617,djg4bb4b,lapper,ajcuivd289,colole57,shadow7,dallas21,ajtdmw,executiv,dickies,omegaman,jason12,newhaven,aaaaaas,pmdmscts,s456123789,beatri,applesauce,levelone,strapon,benladen,creaven,ttttt1,saab95,f123456,pitbul,54321a,sex12345,robert3,atilla,mevefalkcakk,1johnny,veedub,lilleke,nitsuj,5t6y7u8i,teddys,bluefox,nascar20,vwjetta,buffy123,playstation3,loverr,qweasd12,lover2,telekom,benjamin1,alemania,neutrino,rockz,valjean,testicle,trinity3,realty,firestarter,794613852,ardvark,guadalup,philmont,arnold1,holas,zw6syj,birthday299,dover1,sexxy1,gojets,741236985,cance,blue77,xzibit,qwerty88,komarova,qweszxc,footer,rainger,silverst,ghjcnb,catmando,tatooine,31217221027711,amalgam,69dude,qwerty321,roscoe1,74185,cubby,alfa147,perry1,darock,katmandu,darknight,knicks1,freestuff,45454,kidman,4tlved,axlrose,cutie1,quantum1,joseph10,ichigo,pentium3,rfhectkm,rowdy1,woodsink,justforfun,sveta123,pornografia,mrbean,bigpig,tujheirf,delta9,portsmou,hotbod,kartal,10111213,fkbyf001,pavel1,pistons1,necromancer,verga,c7lrwu,doober,thegame1,hatesyou,sexisfun,1melissa,tuczno18,bowhunte,gobama,scorch,campeon,bruce2,fudge1,herpderp,bacon1,redsky,blackeye,19966991,19992000,ripken8,masturba,34524815,primax,paulina1,vp6y38,427cobra,4dwvjj,dracon,fkg7h4f3v6,longview,arakis,panama1,honda2,lkjhgfdsaz,razors,steels,fqkw5m,dionysus,mariajos,soroka,enriqu,nissa,barolo,king1234,hshfd4n279,holland1,flyer1,tbones,343104ky,modems,tk421,ybrbnrf,pikapp,sureshot,wooddoor,florida2,mrbungle,vecmrf,catsdogs,axolotl,nowayout,francoi,chris21,toenail,hartland,asdjkl,nikkii,onlyyou,buckskin,fnord,flutie,holen1,rincewind,lefty1,ducky1,199000,fvthbrf,redskin1,ryno23,lostlove,19mtpgam19,abercrom,benhur,jordan11,roflcopter,ranma,phillesh,avondale,igromania,p4ssword,jenny123,tttttt1,spycams,cardigan,2112yyz,sleepy1,paris123,mopars,lakers34,hustler1,james99,matrix3,popimp,12pack,eggbert,medvedev,testit,performa,logitec,marija,sexybeast,supermanboy,iwantit,rjktcj,jeffer,svarog,halo123,whdbtp,nokia3230,heyjoe,marilyn1,speeder,ibxnsm,prostock,bennyboy,charmin,codydog,parol999,ford9402,jimmer,crayola,159357258,alex77,joey1,cayuga,phish420,poligon,specops,tarasova,caramelo,draconis,dimon,cyzkhw,june29,getbent,1guitar,jimjam,dictiona,shammy,flotsam,0okm9ijn,crapper,technic,fwsadn,rhfdxtyrj,zaq11qaz,anfield1,159753q,curious1,hip-hop,1iiiii,gfhjkm2,cocteau,liveevil,friskie,crackhead,b1afra,elektrik,lancer1,b0ll0cks,jasond,z1234567,tempest1,alakazam,asdfasd,duffy1,oneday,dinkle,qazedctgb,kasimir,happy7,salama,hondaciv,nadezda,andretti,cannondale,sparticu,znbvjd,blueice,money01,finster,eldar,moosie,pappa,delta123,neruda,bmw330ci,jeanpaul,malibu1,alevtina,sobeit,travolta,fullmetal,enamorad,mausi,boston12,greggy,smurf1,ratrace,ichiban,ilovepus,davidg,wolf69,villa1,cocopuff,football12,starfury,zxc12345,forfree,fairfiel,dreams1,tayson,mike2,dogday,hej123,oldtimer,sanpedro,clicker,mollycat,roadstar,golfe,lvbnhbq1,topdevice,a1b2c,sevastopol,calli,milosc,fire911,pink123,team3x,nolimit5,snickers1,annies,09877890,jewel1,steve69,justin11,autechre,killerbe,browncow,slava1,christer,fantomen,redcloud,elenberg,beautiful1,passw0rd1,nazira,advantag,cockring,chaka,rjpzdrf,99941,az123456,biohazar,energie,bubble1,bmw323,tellme,printer1,glavine,1starwar,coolbeans,april17,carly1,quagmire,admin2,djkujuhfl,pontoon,texmex,carlos12,thermo,vaz2106,nougat,bob666,1hockey,1john,cricke,qwerty10,twinz,totalwar,underwoo,tijger,lildevil,123q321,germania,freddd,1scott,beefy,5t4r3e2w1q,fishbait,nobby,hogger,dnstuff,jimmyc,redknapp,flame1,tinfloor,balla,nfnfhby,yukon1,vixens,batata,danny123,1zxcvbnm,gaetan,homewood,greats,tester1,green99,1fucker,sc0tland,starss,glori,arnhem,goatman,1234asd,supertra,bill123,elguapo,sexylegs,jackryan,usmc69,innow,roaddog,alukard,winter11,crawler,gogiants,rvd420,alessandr,homegrow,gobbler,esteba,valeriy,happy12,1joshua,hawking,sicnarf,waynes,iamhappy,bayadera,august2,sashas,gotti,dragonfire,pencil1,halogen,borisov,bassingw,15975346,zachar,sweetp,soccer99,sky123,flipyou,spots3,xakepy,cyclops1,dragon77,rattolo58,motorhea,piligrim,helloween,dmb2010,supermen,shad0w,eatcum,sandokan,pinga,ufkfrnbrf,roksana,amista,pusser,sony1234,azerty1,1qasw2,ghbdt,q1w2e3r4t5y6u7i8,ktutylf,brehznev,zaebali,shitass,creosote,gjrtvjy,14938685,naughtyboy,pedro123,21crack,maurice1,joesakic,nicolas1,matthew9,lbyfhf,elocin,hfcgbplzq,pepper123,tiktak,mycroft,ryan11,firefly1,arriva,cyecvevhbr,loreal,peedee,jessica8,lisa01,anamari,pionex,ipanema,airbag,frfltvbz,123456789aa,epwr49,casper12,sweethear,sanandreas,wuschel,cocodog,france1,119911,redroses,erevan,xtvgbjy,bigfella,geneve,volvo850,evermore,amy123,moxie,celebs,geeman,underwor,haslo1,joy123,hallow,chelsea0,12435687,abarth,12332145,tazman1,roshan,yummie,genius1,chrisd,ilovelife,seventy7,qaz1wsx2,rocket88,gaurav,bobbyboy,tauchen,roberts1,locksmit,masterof,www111,d9ungl,volvos40,asdasd1,golfers,jillian1,7xm5rq,arwpls4u,gbhcf2,elloco,football2,muerte,bob101,sabbath1,strider1,killer66,notyou,lawnboy,de7mdf,johnnyb,voodoo2,sashaa,homedepo,bravos,nihao123,braindea,weedhead,rajeev,artem1,camille1,rockss,bobbyb,aniston,frnhbcf,oakridge,biscayne,cxfcnm,dressage,jesus3,kellyann,king69,juillet,holliste,h00ters,ripoff,123645,1999ar,eric12,123777,tommi,dick12,bilder,chris99,rulezz,getpaid,chicubs,ender1,byajhvfnbrf,milkshak,sk8board,freakshow,antonella,monolit,shelb,hannah01,masters1,pitbull1,1matthew,luvpussy,agbdlcid,panther2,alphas,euskadi,8318131,ronnie1,7558795,sweetgirl,cookie59,sequoia,5552555,ktyxbr,4500455,money7,severus,shinobu,dbityrf,phisig,rogue2,fractal,redfred,sebastian1,nelli,b00mer,cyberman,zqjphsyf6ctifgu,oldsmobile,redeemer,pimpi,lovehurts,1slayer,black13,rtynfdh,airmax,g00gle,1panther,artemon,nopasswo,fuck1234,luke1,trinit,666000,ziadma,oscardog,davex,hazel1,isgood,demond,james5,construc,555551,january2,m1911a1,flameboy,merda,nathan12,nicklaus,dukester,hello99,scorpio7,leviathan,dfcbktr,pourquoi,vfrcbv123,shlomo,rfcgth,rocky3,ignatz,ajhneyf,roger123,squeek,4815162342a,biskit,mossimo,soccer21,gridlock,lunker,popstar,ghhh47hj764,chutney,nitehawk,vortec,gamma1,codeman,dragula,kappasig,rainbow2,milehigh,blueballs,ou8124me,rulesyou,collingw,mystere,aster,astrovan,firetruck,fische,crawfish,hornydog,morebeer,tigerpaw,radost,144000,1chance,1234567890qwe,gracie1,myopia,oxnard,seminoles,evgeni,edvard,partytim,domani,tuffy1,jaimatadi,blackmag,kzueirf,peternor,mathew1,maggie12,henrys,k1234567,fasted,pozitiv,cfdtkbq,jessica7,goleafs,bandito,girl78,sharingan,skyhigh,bigrob,zorros,poopers,oldschoo,pentium2,gripper,norcal,kimba,artiller,moneymak,00197400,272829,shadow1212,thebull,handbags,all4u2c,bigman2,civics,godisgoo,section8,bandaid,suzanne1,zorba,159123,racecars,i62gbq,rambo123,ironroad,johnson2,knobby,twinboys,sausage1,kelly69,enter2,rhjirf,yessss,james12,anguilla,boutit,iggypop,vovochka,06060,budwiser,romuald,meditate,good1,sandrin,herkules,lakers8,honeybea,11111111a,miche,rangers9,lobster1,seiko,belova,midcon,mackdadd,bigdaddy1,daddie,sepultur,freddy12,damon1,stormy1,hockey2,bailey12,hedimaptfcor,dcowboys,sadiedog,thuggin,horny123,josie1,nikki2,beaver69,peewee1,mateus,viktorija,barrys,cubswin1,matt1234,timoxa,rileydog,sicilia,luckycat,candybar,julian1,abc456,pussylip,phase1,acadia,catty,246800,evertonf,bojangle,qzwxec,nikolaj,fabrizi,kagome,noncapa0,marle,popol,hahaha1,cossie,carla10,diggers,spankey,sangeeta,cucciolo,breezer,starwar1,cornholio,rastafari,spring99,yyyyyyy1,webstar,72d5tn,sasha1234,inhouse,gobuffs,civic1,redstone,234523,minnie1,rivaldo,angel5,sti2000,xenocide,11qq11,1phoenix,herman1,holly123,tallguy,sharks1,madri,superbad,ronin,jalal123,hardbody,1234567r,assman1,vivahate,buddylee,38972091,bonds25,40028922,qrhmis,wp2005,ceejay,pepper01,51842543,redrum1,renton,varadero,tvxtjk7r,vetteman,djhvbrc,curly1,fruitcak,jessicas,maduro,popmart,acuari,dirkpitt,buick1,bergerac,golfcart,pdtpljxrf,hooch1,dudelove,d9ebk7,123452000,afdjhbn,greener,123455432,parachut,mookie12,123456780,jeepcj5,potatoe,sanya,qwerty2010,waqw3p,gotika,freaky1,chihuahu,buccanee,ecstacy,crazyboy,slickric,blue88,fktdnbyf,2004rj,delta4,333222111,calient,ptbdhw,1bailey,blitz1,sheila1,master23,hoagie,pyf8ah,orbita,daveyboy,prono1,delta2,heman,1horny,tyrik123,ostrov,md2020,herve,rockfish,el546218,rfhbyjxrf,chessmaster,redmoon,lenny1,215487,tomat,guppy,amekpass,amoeba,my3girls,nottingh,kavita,natalia1,puccini,fabiana,8letters,romeos,netgear,casper2,taters,gowings,iforgot1,pokesmot,pollit,lawrun,petey1,rosebuds,007jr,gthtcnhjqrf,k9dls02a,neener,azertyu,duke11,manyak,tiger01,petros,supermar,mangas,twisty,spotter,takagi,dlanod,qcmfd454,tusymo,zz123456,chach,navyblue,gilbert1,2kash6zq,avemaria,1hxboqg2s,viviane,lhbjkjubz2957704,nowwowtg,1a2b3c4,m0rn3,kqigb7,superpuper,juehtw,gethigh,theclown,makeme,pradeep,sergik,deion21,nurik,devo2706,nbvibt,roman222,kalima,nevaeh,martin7,anathema,florian1,tamwsn3sja,dinmamma,133159,123654q,slicks,pnp0c08,yojimbo,skipp,kiran,pussyfuck,teengirl,apples12,myballs,angeli,1234a,125678,opelastra,blind1,armagedd,fish123,pitufo,chelseaf,thedevil,nugget1,cunt69,beetle1,carter15,apolon,collant,password00,fishboy,djkrjdf,deftone,celti,three11,cyrus1,lefthand,skoal1,ferndale,aries1,fred01,roberta1,chucks,cornbread,lloyd1,icecrea,cisco123,newjerse,vfhrbpf,passio,volcom1,rikimaru,yeah11,djembe,facile,a1l2e3x4,batman7,nurbol,lorenzo1,monica69,blowjob1,998899,spank1,233391,n123456,1bear,bellsout,999998,celtic67,sabre1,putas,y9enkj,alfabeta,heatwave,honey123,hard4u,insane1,xthysq,magnum1,lightsaber,123qweqwe,fisher1,pixie1,precios,benfic,thegirls,bootsman,4321rewq,nabokov,hightime,djghjc,1chelsea,junglist,august16,t3fkvkmj,1232123,lsdlsd12,chuckie1,pescado,granit,toogood,cathouse,natedawg,bmw530,123kid,hajime,198400,engine1,wessonnn,kingdom1,novembre,1rocks,kingfisher,qwerty89,jordan22,zasranec,megat,sucess,installutil,fetish01,yanshi1982,1313666,1314520,clemence,wargod,time1,newzealand,snaker,13324124,cfrehf,hepcat,mazahaka,bigjay,denisov,eastwest,1yellow,mistydog,cheetos,1596357,ginger11,mavrik,bubby1,bhbyf,pyramide,giusepp,luthien,honda250,andrewjackie,kentavr,lampoon,zaq123wsx,sonicx,davidh,1ccccc,gorodok,windsong,programm,blunt420,vlad1995,zxcvfdsa,tarasov,mrskin,sachas,mercedes1,koteczek,rawdog,honeybear,stuart1,kaktys,richard7,55555n,azalia,hockey10,scouter,francy,1xxxxxx,julie456,tequilla,penis123,schmoe,tigerwoods,1ferrari,popov,snowdrop,matthieu,smolensk,cornflak,jordan01,love2000,23wesdxc,kswiss,anna2000,geniusnet,baby2000,33ds5x,waverly,onlyone4,networkingpe,raven123,blesse,gocards,wow123,pjflkork,juicey,poorboy,freeee,billybo,shaheen,zxcvbnm.,berlit,truth1,gepard,ludovic,gunther1,bobby2,bob12345,sunmoon,septembr,bigmac1,bcnjhbz,seaking,all4u,12qw34er56ty,bassie,nokia5228,7355608,sylwia,charvel,billgate,davion,chablis,catsmeow,kjiflrf,amylynn,rfvbkkf,mizredhe,handjob,jasper12,erbol,solara,bagpipe,biffer,notime,erlan,8543852,sugaree,oshkosh,fedora,bangbus,5lyedn,longball,teresa1,bootyman,aleksand,qazwsxedc12,nujbhc,tifosi,zpxvwy,lights1,slowpoke,tiger12,kstate,password10,alex69,collins1,9632147,doglover,baseball2,security1,grunts,orange2,godloves,213qwe879,julieb,1qazxsw23edcvfr4,noidea,8uiazp,betsy1,junior2,parol123,123456zz,piehonkii,kanker,bunky,hingis,reese1,qaz123456,sidewinder,tonedup,footsie,blackpoo,jalapeno,mummy1,always1,josh1,rockyboy,plucky,chicag,nadroj,blarney,blood123,wheaties,packer1,ravens1,mrjones,gfhjkm007,anna2010,awatar,guitar12,hashish,scale1,tomwaits,amrita,fantasma,rfpfym,pass2,tigris,bigair,slicker,sylvi,shilpa,cindylou,archie1,bitches1,poppys,ontime,horney1,camaroz28,alladin,bujhm,cq2kph,alina1,wvj5np,1211123a,tetons,scorelan,concordi,morgan2,awacs,shanty,tomcat14,andrew123,bear69,vitae,fred99,chingy,octane,belgario,fatdaddy,rhodan,password23,sexxes,boomtown,joshua01,war3demo,my2kids,buck1,hot4you,monamour,12345aa,yumiko,parool,carlton1,neverland,rose12,right1,sociald,grouse,brandon0,cat222,alex00,civicex,bintang,malkav,arschloc,dodgeviper,qwerty666,goduke,dante123,boss1,ontheroc,corpsman,love14,uiegu451,hardtail,irondoor,ghjrehfnehf,36460341,konijn,h2slca,kondom25,123456ss,cfytxrf,btnjey,nando,freemail,comander,natas666,siouxsie,hummer1,biomed,dimsum,yankees0,diablo666,lesbian1,pot420,jasonm,glock23,jennyb,itsmine,lena2010,whattheh,beandip,abaddon,kishore,signup,apogee,biteme12,suzieq,vgfun4,iseeyou,rifleman,qwerta,4pussy,hawkman,guest1,june17,dicksuck,bootay,cash12,bassale,ktybyuhfl,leetch,nescafe,7ovtgimc,clapton1,auror,boonie,tracker1,john69,bellas,cabinboy,yonkers,silky1,ladyffesta,drache,kamil1,davidp,bad123,snoopy12,sanche,werthvfy,achille,nefertiti,gerald1,slage33,warszawa,macsan26,mason123,kotopes,welcome8,nascar99,kiril,77778888,hairy1,monito,comicsans,81726354,killabee,arclight,yuo67,feelme,86753099,nnssnn,monday12,88351132,88889999,websters,subito,asdf12345,vaz2108,zvbxrpl,159753456852,rezeda,multimed,noaccess,henrique,tascam,captiva,zadrot,hateyou,sophie12,123123456,snoop1,charlie8,birmingh,hardline,libert,azsxdcf,89172735872,rjpthju,bondar,philips1,olegnaruto,myword,yakman,stardog,banana12,1234567890w,farout,annick,duke01,rfj422,billard,glock19,shaolin1,master10,cinderel,deltaone,manning1,biggreen,sidney1,patty1,goforit1,766rglqy,sevendus,aristotl,armagedo,blumen,gfhfyjz,kazakov,lekbyxxx,accord1,idiota,soccer16,texas123,victoire,ololo,chris01,bobbbb,299792458,eeeeeee1,confiden,07070,clarks,techno1,kayley,stang1,wwwwww1,uuuuu1,neverdie,jasonr,cavscout,481516234,mylove1,shaitan,1qazxcvb,barbaros,123456782000,123wer,thissucks,7seven,227722,faerie,hayduke,dbacks,snorkel,zmxncbv,tiger99,unknown1,melmac,polo1234,sssssss1,1fire,369147,bandung,bluejean,nivram,stanle,ctcnhf,soccer20,blingbli,dirtball,alex2112,183461,skylin,boobman,geronto,brittany1,yyz2112,gizmo69,ktrcec,dakota12,chiken,sexy11,vg08k714,bernadet,1bulldog,beachs,hollyb,maryjoy,margo1,danielle1,chakra,alexand,hullcity,matrix12,sarenna,pablos,antler,supercar,chomsky,german1,airjordan,545ettvy,camaron,flight1,netvideo,tootall,valheru,481516,1234as,skimmer,redcross,inuyash,uthvfy,1012nw,edoardo,bjhgfi,golf11,9379992a,lagarto,socball,boopie,krazy,.adgjmptw,gaydar,kovalev,geddylee,firstone,turbodog,loveee,135711,badbo,trapdoor,opopop11,danny2,max2000,526452,kerry1,leapfrog,daisy2,134kzbip,1andrea,playa1,peekab00,heskey,pirrello,gsewfmck,dimon4ik,puppie,chelios,554433,hypnodanny,fantik,yhwnqc,ghbdtngjrf,anchorag,buffett1,fanta,sappho,024680,vialli,chiva,lucylu,hashem,exbntkm,thema,23jordan,jake11,wildside,smartie,emerica,2wj2k9oj,ventrue,timoth,lamers,baerchen,suspende,boobis,denman85,1adam12,otello,king12,dzakuni,qsawbbs,isgay,porno123,jam123,daytona1,tazzie,bunny123,amaterasu,jeffre,crocus,mastercard,bitchedup,chicago7,aynrand,intel1,tamila,alianza,mulch,merlin12,rose123,alcapone,mircea,loveher,joseph12,chelsea6,dorothy1,wolfgar,unlimite,arturik,qwerty3,paddy1,piramid,linda123,cooool,millie1,warlock1,forgotit,tort02,ilikeyou,avensis,loveislife,dumbass1,clint1,2110se,drlove,olesia,kalinina,sergey123,123423,alicia1,markova,tri5a3,media1,willia1,xxxxxxx1,beercan,smk7366,jesusislord,motherfuck,smacker,birthday5,jbaby,harley2,hyper1,a9387670a,honey2,corvet,gjmptw,rjhjkmbien,apollon,madhuri,3a5irt,cessna17,saluki,digweed,tamia1,yja3vo,cfvlehfr,1111111q,martyna,stimpy1,anjana,yankeemp,jupiler,idkfa,1blue,fromv,afric,3xbobobo,liverp00l,nikon1,amadeus1,acer123,napoleo,david7,vbhjckfdf,mojo69,percy1,pirates1,grunt1,alenushka,finbar,zsxdcf,mandy123,1fred,timewarp,747bbb,druids,julia123,123321qq,spacebar,dreads,fcbarcelona,angela12,anima,christopher1,stargazer,123123s,hockey11,brewski,marlbor,blinker,motorhead,damngood,werthrf,letmein3,moremoney,killer99,anneke,eatit,pilatus,andrew01,fiona1,maitai,blucher,zxgdqn,e5pftu,nagual,panic1,andron,openwide,alphabeta,alison1,chelsea8,fende,mmm666,1shot2,a19l1980,123456@,1black,m1chael,vagner,realgood,maxxx,vekmnbr,stifler,2509mmh,tarkan,sherzod,1234567b,gunners1,artem2010,shooby,sammie1,p123456,piggie,abcde12345,nokia6230,moldir,piter,1qaz3edc,frequenc,acuransx,1star,nikeair,alex21,dapimp,ranjan,ilovegirls,anastasiy,berbatov,manso,21436587,leafs1,106666,angelochek,ingodwetrust,123456aaa,deano,korsar,pipetka,thunder9,minka,himura,installdevic,1qqqqq,digitalprodu,suckmeoff,plonker,headers,vlasov,ktr1996,windsor1,mishanya,garfield1,korvin,littlebit,azaz09,vandamme,scripto,s4114d,passward,britt1,r1chard,ferrari5,running1,7xswzaq,falcon2,pepper76,trademan,ea53g5,graham1,volvos80,reanimator,micasa,1234554321q,kairat,escorpion,sanek94,karolina1,kolovrat,karen2,1qaz@wsx,racing1,splooge,sarah2,deadman1,creed1,nooner,minicoop,oceane,room112,charme,12345ab,summer00,wetcunt,drewman,nastyman,redfire,appels,merlin69,dolfin,bornfree,diskette,ohwell,12345678qwe,jasont,madcap,cobra2,dolemit1,whatthehell,juanit,voldemar,rocke,bianc,elendil,vtufgjkbc,hotwheels,spanis,sukram,pokerface,k1ller,freakout,dontae,realmadri,drumss,gorams,258789,snakey,jasonn,whitewolf,befree,johnny99,pooka,theghost,kennys,vfvektxrf,toby1,jumpman23,deadlock,barbwire,stellina,alexa1,dalamar,mustanggt,northwes,tesoro,chameleo,sigtau,satoshi,george11,hotcum,cornell1,golfer12,geek01d,trololo,kellym,megapolis,pepsi2,hea666,monkfish,blue52,sarajane,bowler1,skeets,ddgirls,hfccbz,bailey01,isabella1,dreday,moose123,baobab,crushme,000009,veryhot,roadie,meanone,mike18,henriett,dohcvtec,moulin,gulnur,adastra,angel9,western1,natura,sweetpe,dtnfkm,marsbar,daisys,frogger1,virus1,redwood1,streetball,fridolin,d78unhxq,midas,michelob,cantik,sk2000,kikker,macanudo,rambone,fizzle,20000,peanuts1,cowpie,stone32,astaroth,dakota01,redso,mustard1,sexylove,giantess,teaparty,bobbin,beerbong,monet1,charles3,anniedog,anna1988,cameleon,longbeach,tamere,qpful542,mesquite,waldemar,12345zx,iamhere,lowboy,canard,granp,daisymay,love33,moosejaw,nivek,ninjaman,shrike01,aaa777,88002000600,vodolei,bambush,falcor,harley69,alphaomega,severine,grappler,bosox,twogirls,gatorman,vettes,buttmunch,chyna,excelsio,crayfish,birillo,megumi,lsia9dnb9y,littlebo,stevek,hiroyuki,firehous,master5,briley2,gangste,chrisk,camaleon,bulle,troyboy,froinlaven,mybutt,sandhya,rapala,jagged,crazycat,lucky12,jetman,wavmanuk,1heather,beegee,negril,mario123,funtime1,conehead,abigai,mhorgan,patagoni,travel1,backspace,frenchfr,mudcat,dashenka,baseball3,rustys,741852kk,dickme,baller23,griffey1,suckmycock,fuhrfzgc,jenny2,spuds,berlin1,justfun,icewind,bumerang,pavlusha,minecraft123,shasta1,ranger12,123400,twisters,buthead,miked,finance1,dignity7,hello9,lvjdp383,jgthfnjh,dalmatio,paparoach,miller31,2bornot2b,fathe,monterre,theblues,satans,schaap,jasmine2,sibelius,manon,heslo,jcnhjd,shane123,natasha2,pierrot,bluecar,iloveass,harriso,red12,london20,job314,beholder,reddawg,fuckyou!,pussylick,bologna1,austintx,ole4ka,blotto,onering,jearly,balbes,lightbul,bighorn,crossfir,lee123,prapor,1ashley,gfhjkm22,wwe123,09090,sexsite,marina123,jagua,witch1,schmoo,parkview,dragon3,chilango,ultimo,abramova,nautique,2bornot2,duende,1arthur,nightwing,surfboar,quant4307,15s9pu03,karina1,shitball,walleye1,wildman1,whytesha,1morgan,my2girls,polic,baranova,berezuckiy,kkkkkk1,forzima,fornow,qwerty02,gokart,suckit69,davidlee,whatnow,edgard,tits1,bayshore,36987412,ghbphfr,daddyy,explore1,zoidberg,5qnzjx,morgane,danilov,blacksex,mickey12,balsam,83y6pv,sarahc,slaye,all4u2,slayer69,nadia1,rlzwp503,4cranker,kaylie,numberon,teremok,wolf12,deeppurple,goodbeer,aaa555,66669999,whatif,harmony1,ue8fpw,3tmnej,254xtpss,dusty197,wcksdypk,zerkalo,dfnheirf,motorol,digita,whoareyou,darksoul,manics,rounders,killer11,d2000lb,cegthgfhjkm,catdog1,beograd,pepsico,julius1,123654987,softbal,killer23,weasel1,lifeson,q123456q,444555666,bunches,andy1,darby1,service01,bear11,jordan123,amega,duncan21,yensid,lerxst,rassvet,bronco2,fortis,pornlove,paiste,198900,asdflkjh,1236547890,futur,eugene1,winnipeg261,fk8bhydb,seanjohn,brimston,matthe1,bitchedu,crisco,302731,roxydog,woodlawn,volgograd,ace1210,boy4u2ownnyc,laura123,pronger,parker12,z123456z,andrew13,longlife,sarang,drogba,gobruins,soccer4,holida,espace,almira,murmansk,green22,safina,wm00022,1chevy,schlumpf,doroth,ulises,golf99,hellyes,detlef,mydog,erkina,bastardo,mashenka,sucram,wehttam,generic1,195000,spaceboy,lopas123,scammer,skynyrd,daddy2,titani,ficker,cr250r,kbnthfnehf,takedown,sticky1,davidruiz,desant,nremtp,painter1,bogies,agamemno,kansas1,smallfry,archi,2b4dnvsx,1player,saddie,peapod,6458zn7a,qvw6n2,gfxqx686,twice2,sh4d0w3d,mayfly,375125,phitau,yqmbevgk,89211375759,kumar1,pfhfpf,toyboy,way2go,7pvn4t,pass69,chipster,spoony,buddycat,diamond3,rincewin,hobie,david01,billbo,hxp4life,matild,pokemon2,dimochka,clown1,148888,jenmt3,cuxldv,cqnwhy,cde34rfv,simone1,verynice,toobig,pasha123,mike00,maria2,lolpop,firewire,dragon9,martesana,a1234567890,birthday3,providen,kiska,pitbulls,556655,misawa,damned69,martin11,goldorak,gunship,glory1,winxclub,sixgun,splodge,agent1,splitter,dome69,ifghjb,eliza1,snaiper,wutang36,phoenix7,666425,arshavin,paulaner,namron,m69fg1w,qwert1234,terrys,zesyrmvu,joeman,scoots,dwml9f,625vrobg,sally123,gostoso,symow8,pelota,c43qpul5rz,majinbuu,lithium1,bigstuff,horndog1,kipelov,kringle,1beavis,loshara,octobe,jmzacf,12342000,qw12qw,runescape1,chargers1,krokus,piknik,jessy,778811,gjvbljh,474jdvff,pleaser,misskitty,breaker1,7f4df451,dayan,twinky,yakumo,chippers,matia,tanith,len2ski1,manni,nichol1,f00b4r,nokia3110,standart,123456789i,shami,steffie,larrywn,chucker,john99,chamois,jjjkkk,penmouse,ktnj2010,gooners,hemmelig,rodney1,merlin01,bearcat1,1yyyyy,159753z,1fffff,1ddddd,thomas11,gjkbyrf,ivanka,f1f2f3,petrovna,phunky,conair,brian2,creative1,klipsch,vbitymrf,freek,breitlin,cecili,westwing,gohabsgo,tippmann,1steve,quattro6,fatbob,sp00ky,rastas,1123581,redsea,rfnmrf,jerky1,1aaaaaa,spk666,simba123,qwert54321,123abcd,beavis69,fyfyfc,starr1,1236547,peanutbutter,sintra,12345abcde,1357246,abcde1,climbon,755dfx,mermaids,monte1,serkan,geilesau,777win,jasonc,parkside,imagine1,rockhead,producti,playhard,principa,spammer,gagher,escada,tsv1860,dbyjuhfl,cruiser1,kennyg,montgome,2481632,pompano,cum123,angel6,sooty,bear01,april6,bodyhamm,pugsly,getrich,mikes,pelusa,fosgate,jasonp,rostislav,kimberly1,128mo,dallas11,gooner1,manuel1,cocacola1,imesh,5782790,password8,daboys,1jones,intheend,e3w2q1,whisper1,madone,pjcgujrat,1p2o3i,jamesp,felicida,nemrac,phikap,firecat,jrcfyjxrf,matt12,bigfan,doedel,005500,jasonx,1234567k,badfish,goosey,utjuhfabz,wilco,artem123,igor123,spike123,jor23dan,dga9la,v2jmsz,morgan12,avery1,dogstyle,natasa,221195ws,twopac,oktober7,karthik,poop1,mightymo,davidr,zermatt,jehova,aezakmi1,dimwit,monkey5,serega123,qwerty111,blabl,casey22,boy123,1clutch,asdfjkl1,hariom,bruce10,jeep95,1smith,sm9934,karishma,bazzzz,aristo,669e53e1,nesterov,kill666,fihdfv,1abc2,anna1,silver11,mojoman,telefono,goeagles,sd3lpgdr,rfhfynby,melinda1,llcoolj,idteul,bigchief,rocky13,timberwo,ballers,gatekeep,kashif,hardass,anastasija,max777,vfuyjkbz,riesling,agent99,kappas,dalglish,tincan,orange3,turtoise,abkbvjy,mike24,hugedick,alabala,geolog,aziza,devilboy,habanero,waheguru,funboy,freedom5,natwest,seashore,impaler,qwaszx1,pastas,bmw535,tecktonik,mika00,jobsearc,pinche,puntang,aw96b6,1corvett,skorpio,foundati,zzr1100,gembird,vfnhjcrby,soccer18,vaz2110,peterp,archer1,cross1,samedi,dima1992,hunter99,lipper,hotbody,zhjckfdf,ducati1,trailer1,04325956,cheryl1,benetton,kononenko,sloneczko,rfgtkmrf,nashua,balalaika,ampere,eliston,dorsai,digge,flyrod,oxymoron,minolta,ironmike,majortom,karimov,fortun,putaria,an83546921an13,blade123,franchis,mxaigtg5,dynxyu,devlt4,brasi,terces,wqmfuh,nqdgxz,dale88,minchia,seeyou,housepen,1apple,1buddy,mariusz,bighouse,tango2,flimflam,nicola1,qwertyasd,tomek1,shumaher,kartoshka,bassss,canaries,redman1,123456789as,preciosa,allblacks,navidad,tommaso,beaudog,forrest1,green23,ryjgjxrf,go4it,ironman2,badnews,butterba,1grizzly,isaeva,rembrand,toront,1richard,bigjon,yfltymrf,1kitty,4ng62t,littlejo,wolfdog,ctvtyjd,spain1,megryan,tatertot,raven69,4809594q,tapout,stuntman,a131313,lagers,hotstuf,lfdbl11,stanley2,advokat,boloto,7894561,dooker,adxel187,cleodog,4play,0p9o8i,masterb,bimota,charlee,toystory,6820055,6666667,crevette,6031769,corsa,bingoo,dima1990,tennis11,samuri,avocado,melissa6,unicor,habari,metart,needsex,cockman,hernan,3891576,3334444,amigo1,gobuffs2,mike21,allianz,2835493,179355,midgard,joey123,oneluv,ellis1,towncar,shonuff,scouse,tool69,thomas19,chorizo,jblaze,lisa1,dima1999,sophia1,anna1989,vfvekbxrf,krasavica,redlegs,jason25,tbontb,katrine,eumesmo,vfhufhbnrf,1654321,asdfghj1,motdepas,booga,doogle,1453145,byron1,158272,kardinal,tanne,fallen1,abcd12345,ufyljy,n12345,kucing,burberry,bodger,1234578,februar,1234512,nekkid,prober,harrison1,idlewild,rfnz90,foiegras,pussy21,bigstud,denzel,tiffany2,bigwill,1234567890zzz,hello69,compute1,viper9,hellspaw,trythis,gococks,dogballs,delfi,lupine,millenia,newdelhi,charlest,basspro,1mike,joeblack,975310,1rosebud,batman11,misterio,fucknut,charlie0,august11,juancho,ilonka,jigei743ks,adam1234,889900,goonie,alicat,ggggggg1,1zzzzzzz,sexywife,northstar,chris23,888111,containe,trojan1,jason5,graikos,1ggggg,1eeeee,tigers01,indigo1,hotmale,jacob123,mishima,richard3,cjxb2014,coco123,meagain,thaman,wallst,edgewood,bundas,1power,matilda1,maradon,hookedup,jemima,r3vi3wpass,2004-10-,mudman,taz123,xswzaq,emerson1,anna21,warlord1,toering,pelle,tgwdvu,masterb8,wallstre,moppel,priora,ghjcnjrdfif,yoland,12332100,1j9e7f6f,jazzzz,yesman,brianm,42qwerty42,12345698,darkmanx,nirmal,john31,bb123456,neuspeed,billgates,moguls,fj1200,hbhlair,shaun1,ghbdfn,305pwzlr,nbu3cd,susanb,pimpdad,mangust6403,joedog,dawidek,gigante,708090,703751,700007,ikalcr,tbivbn,697769,marvi,iyaayas,karen123,jimmyboy,dozer1,e6z8jh,bigtime1,getdown,kevin12,brookly,zjduc3,nolan1,cobber,yr8wdxcq,liebe,m1garand,blah123,616879,action1,600000,sumitomo,albcaz,asian1,557799,dave69,556699,sasa123,streaker,michel1,karate1,buddy7,daulet,koks888,roadtrip,wapiti,oldguy,illini1,1234qq,mrspock,kwiatek,buterfly,august31,jibxhq,jackin,taxicab,tristram,talisker,446655,444666,chrisa,freespace,vfhbfyyf,chevell,444333,notyours,442244,christian1,seemore,sniper12,marlin1,joker666,multik,devilish,crf450,cdfoli,eastern1,asshead,duhast,voyager2,cyberia,1wizard,cybernet,iloveme1,veterok,karandash,392781,looksee,diddy,diabolic,foofight,missey,herbert1,bmw318i,premier1,zsfmpv,eric1234,dun6sm,fuck11,345543,spudman,lurker,bitem,lizzy1,ironsink,minami,339311,s7fhs127,sterne,332233,plankton,galax,azuywe,changepa,august25,mouse123,sikici,killer69,xswqaz,quovadis,gnomik,033028pw,777777a,barrakuda,spawn666,goodgod,slurp,morbius,yelnats,cujo31,norman1,fastone,earwig,aureli,wordlife,bnfkbz,yasmi,austin123,timberla,missy2,legalize,netcom,liljon,takeit,georgin,987654321z,warbird,vitalina,all4u3,mmmmmm1,bichon,ellobo,wahoos,fcazmj,aksarben,lodoss,satnam,vasili,197800,maarten,sam138989,0u812,ankita,walte,prince12,anvils,bestia,hoschi,198300,univer,jack10,ktyecbr,gr00vy,hokie,wolfman1,fuckwit,geyser,emmanue,ybrjkftd,qwerty33,karat,dblock,avocat,bobbym,womersle,1please,nostra,dayana,billyray,alternat,iloveu1,qwerty69,rammstein1,mystikal,winne,drawde,executor,craxxxs,ghjcnjnf,999888777,welshman,access123,963214785,951753852,babe69,fvcnthlfv,****me,666999666,testing2,199200,nintendo64,oscarr,guido8,zhanna,gumshoe,jbird,159357456,pasca,123452345,satan6,mithrand,fhbirf,aa1111aa,viggen,ficktjuv,radial9,davids1,rainbow7,futuro,hipho,platin,poppy123,rhenjq,fulle,rosit,chicano,scrumpy,lumpy1,seifer,uvmrysez,autumn1,xenon,susie1,7u8i9o0p,gamer1,sirene,muffy1,monkeys1,kalinin,olcrackmaster,hotmove,uconn,gshock,merson,lthtdyz,pizzaboy,peggy1,pistache,pinto1,fishka,ladydi,pandor,baileys,hungwell,redboy,rookie1,amanda01,passwrd,clean1,matty1,tarkus,jabba1,bobster,beer30,solomon1,moneymon,sesamo,fred11,sunnysid,jasmine5,thebears,putamadre,workhard,flashbac,counter1,liefde,magnat,corky1,green6,abramov,lordik,univers,shortys,david3,vip123,gnarly,1234567s,billy2,honkey,deathstar,grimmy,govinda,direktor,12345678s,linus1,shoppin,rekbrjdf,santeria,prett,berty75,mohican,daftpunk,uekmyfhf,chupa,strats,ironbird,giants56,salisbur,koldun,summer04,pondscum,jimmyj,miata1,george3,redshoes,weezie,bartman1,0p9o8i7u,s1lver,dorkus,125478,omega9,sexisgood,mancow,patric1,jetta1,074401,ghjuhtcc,gfhjk,bibble,terry2,123213,medicin,rebel2,hen3ry,4freedom,aldrin,lovesyou,browny,renwod,winnie1,belladon,1house,tyghbn,blessme,rfhfrfnbwf,haylee,deepdive,booya,phantasy,gansta,cock69,4mnveh,gazza1,redapple,structur,anakin1,manolito,steve01,poolman,chloe123,vlad1998,qazwsxe,pushit,random123,ontherocks,o236nq,brain1,dimedrol,agape,rovnogod,1balls,knigh,alliso,love01,wolf01,flintstone,beernuts,tuffguy,isengard,highfive,alex23,casper99,rubina,getreal,chinita,italian1,airsoft,qwerty23,muffdiver,willi1,grace123,orioles1,redbull1,chino1,ziggy123,breadman,estefan,ljcneg,gotoit,logan123,wideglid,mancity1,treess,qwe123456,kazumi,qweasdqwe,oddworld,naveed,protos,towson,a801016,godislov,at_asp,bambam1,soccer5,dark123,67vette,carlos123,hoser1,scouser,wesdxc,pelus,dragon25,pflhjn,abdula,1freedom,policema,tarkin,eduardo1,mackdad,gfhjkm11,lfplhfgthvf,adilet,zzzzxxxx,childre,samarkand,cegthgegth,shama,fresher,silvestr,greaser,allout,plmokn,sexdrive,nintendo1,fantasy7,oleander,fe126fd,crumpet,pingzing,dionis,hipster,yfcnz,requin,calliope,jerome1,housecat,abc123456789,doghot,snake123,augus,brillig,chronic1,gfhjkbot,expediti,noisette,master7,caliban,whitetai,favorite3,lisamari,educatio,ghjhjr,saber1,zcegth,1958proman,vtkrbq,milkdud,imajica,thehip,bailey10,hockey19,dkflbdjcnjr,j123456,bernar,aeiouy,gamlet,deltachi,endzone,conni,bcgfybz,brandi1,auckland2010,7653ajl1,mardigra,testuser,bunko18,camaro67,36936,greenie,454dfmcq,6xe8j2z4,mrgreen,ranger5,headhunt,banshee1,moonunit,zyltrc,hello3,pussyboy,stoopid,tigger11,yellow12,drums1,blue02,kils123,junkman,banyan,jimmyjam,tbbucs,sportster,badass1,joshie,braves10,lajolla,1amanda,antani,78787,antero,19216801,chich,rhett32,sarahm,beloit,sucker69,corkey,nicosnn,rccola,caracol,daffyduc,bunny2,mantas,monkies,hedonist,cacapipi,ashton1,sid123,19899891,patche,greekgod,cbr1000,leader1,19977991,ettore,chongo,113311,picass,cfif123,rhtfnbd,frances1,andy12,minnette,bigboy12,green69,alices,babcia,partyboy,javabean,freehand,qawsed123,xxx111,harold1,passwo,jonny1,kappa1,w2dlww3v5p,1merlin,222999,tomjones,jakeman,franken,markhegarty,john01,carole1,daveman,caseys,apeman,mookey,moon123,claret,titans1,residentevil,campari,curitiba,dovetail,aerostar,jackdaniels,basenji,zaq12w,glencoe,biglove,goober12,ncc170,far7766,monkey21,eclipse9,1234567v,vanechka,aristote,grumble,belgorod,abhishek,neworleans,pazzword,dummie,sashadog,diablo11,mst3000,koala1,maureen1,jake99,isaiah1,funkster,gillian1,ekaterina20,chibears,astra123,4me2no,winte,skippe,necro,windows9,vinograd,demolay,vika2010,quiksilver,19371ayj,dollar1,shecky,qzwxecrv,butterfly1,merrill1,scoreland,1crazy,megastar,mandragora,track1,dedhed,jacob2,newhope,qawsedrftgyh,shack1,samvel,gatita,shyster,clara1,telstar,office1,crickett,truls,nirmala,joselito,chrisl,lesnik,aaaabbbb,austin01,leto2010,bubbie,aaa12345,widder,234432,salinger,mrsmith,qazsedcft,newshoes,skunks,yt1300,bmw316,arbeit,smoove,123321qweewq,123qazwsx,22221111,seesaw,0987654321a,peach1,1029384756q,sereda,gerrard8,shit123,batcave,energy1,peterb,mytruck,peter12,alesya,tomato1,spirou,laputaxx,magoo1,omgkremidia,knight12,norton1,vladislava,shaddy,austin11,jlbyjxrf,kbdthgekm,punheta,fetish69,exploiter,roger2,manstein,gtnhjd,32615948worms,dogbreath,ujkjdjkjvrf,vodka1,ripcord,fatrat,kotek1,tiziana,larrybir,thunder3,nbvfnb,9kyq6fge,remembe,likemike,gavin1,shinigam,yfcnfcmz,13245678,jabbar,vampyr,ane4ka,lollipo,ashwin,scuderia,limpdick,deagle,3247562,vishenka,fdhjhf,alex02,volvov70,mandys,bioshock,caraca,tombraider,matrix69,jeff123,13579135,parazit,black3,noway1,diablos,hitmen,garden1,aminor,decembe,august12,b00ger,006900,452073t,schach,hitman1,mariner1,vbnmrf,paint1,742617000027,bitchboy,pfqxjyjr,5681392,marryher,sinnet,malik1,muffin12,aninha,piolin,lady12,traffic1,cbvjyf,6345789,june21,ivan2010,ryan123,honda99,gunny,coorslight,asd321,hunter69,7224763,sonofgod,dolphins1,1dolphin,pavlenko,woodwind,lovelov,pinkpant,gblfhfcbyf,hotel1,justinbiebe,vinter,jeff1234,mydogs,1pizza,boats1,parrothe,shawshan,brooklyn1,cbrown,1rocky,hemi426,dragon64,redwings1,porsches,ghostly,hubbahub,buttnut,b929ezzh,sorokina,flashg,fritos,b7mguk,metatron,treehous,vorpal,8902792,marcu,free123,labamba,chiefs1,zxc123zxc,keli_14,hotti,1steeler,money4,rakker,foxwoods,free1,ahjkjd,sidorova,snowwhit,neptune1,mrlover,trader1,nudelamb,baloo,power7,deltasig,bills1,trevo,7gorwell,nokia6630,nokia5320,madhatte,1cowboys,manga1,namtab,sanjar,fanny1,birdman1,adv12775,carlo1,dude1998,babyhuey,nicole11,madmike,ubvyfpbz,qawsedr,lifetec,skyhook,stalker123,toolong,robertso,ripazha,zippy123,1111111a,manol,dirtyman,analslut,jason3,dutches,minhasenha,cerise,fenrir,jayjay1,flatbush,franka,bhbyjxrf,26429vadim,lawntrax,198700,fritzy,nikhil,ripper1,harami,truckman,nemvxyheqdd5oqxyxyzi,gkfytnf,bugaboo,cableman,hairpie,xplorer,movado,hotsex69,mordred,ohyeah1,patrick3,frolov,katieh,4311111q,mochaj,presari,bigdo,753951852,freedom4,kapitan,tomas1,135795,sweet123,pokers,shagme,tane4ka,sentinal,ufgyndmv,jonnyb,skate123,123456798,123456788,very1,gerrit,damocles,dollarbi,caroline1,lloyds,pizdets,flatland,92702689,dave13,meoff,ajnjuhfabz,achmed,madison9,744744z,amonte,avrillavigne,elaine1,norma1,asseater,everlong,buddy23,cmgang1,trash1,mitsu,flyman,ulugbek,june27,magistr,fittan,sebora64,dingos,sleipnir,caterpil,cindys,212121qaz,partys,dialer,gjytltkmybr,qweqaz,janvier,rocawear,lostboy,aileron,sweety1,everest1,pornman,boombox,potter1,blackdic,44448888,eric123,112233aa,2502557i,novass,nanotech,yourname,x12345,indian1,15975300,1234567l,carla51,chicago0,coleta,cxzdsaewq,qqwweerr,marwan,deltic,hollys,qwerasd,pon32029,rainmake,nathan0,matveeva,legioner,kevink,riven,tombraid,blitzen,a54321,jackyl,chinese1,shalimar,oleg1995,beaches1,tommylee,eknock,berli,monkey23,badbob,pugwash,likewhoa,jesus2,yujyd360,belmar,shadow22,utfp5e,angelo1,minimax,pooder,cocoa1,moresex,tortue,lesbia,panthe,snoopy2,drumnbass,alway,gmcz71,6jhwmqku,leppard,dinsdale,blair1,boriqua,money111,virtuagirl,267605,rattlesn,1sunshin,monica12,veritas1,newmexic,millertime,turandot,rfvxfnrf,jaydog,kakawka,bowhunter,booboo12,deerpark,erreway,taylorma,rfkbybyf,wooglin,weegee,rexdog,iamhorny,cazzo1,vhou812,bacardi1,dctktyyfz,godpasi,peanut12,bertha1,fuckyoubitch,ghosty,altavista,jertoot,smokeit,ghjcnbvtyz,fhnehxbr,rolsen,qazxcdews,maddmaxx,redrocke,qazokm,spencer2,thekiller,asdf11,123sex,tupac1,p1234567,dbrown,1biteme,tgo4466,316769,sunghi,shakespe,frosty1,gucci1,arcana,bandit01,lyubov,poochy,dartmout,magpies1,sunnyd,mouseman,summer07,chester7,shalini,danbury,pigboy,dave99,deniss,harryb,ashley11,pppppp1,01081988m,balloon1,tkachenko,bucks1,master77,pussyca,tricky1,zzxxccvv,zoulou,doomer,mukesh,iluv69,supermax,todays,thefox,don123,dontask,diplom,piglett,shiney,fahbrf,qaz12wsx,temitope,reggin,project1,buffy2,inside1,lbpfqyth,vanilla1,lovecock,u4slpwra,fylh.irf,123211,7ertu3ds,necroman,chalky,artist1,simpso,4x7wjr,chaos666,lazyacres,harley99,ch33s3,marusa,eagle7,dilligas,computadora,lucky69,denwer,nissan350z,unforgiv,oddball,schalke0,aztec1,borisova,branden1,parkave,marie123,germa,lafayett,878kckxy,405060,cheeseca,bigwave,fred22,andreea,poulet,mercutio,psycholo,andrew88,o4izdmxu,sanctuar,newhome,milion,suckmydi,rjvgm.nth,warior,goodgame,1qwertyuiop,6339cndh,scorpio2,macker,southbay,crabcake,toadie,paperclip,fatkid,maddo,cliff1,rastafar,maries,twins1,geujdrf,anjela,wc4fun,dolina,mpetroff,rollout,zydeco,shadow3,pumpki,steeda,volvo240,terras,blowjo,blue2000,incognit,badmojo,gambit1,zhukov,station1,aaronb,graci,duke123,clipper1,qazxsw2,ledzeppe,kukareku,sexkitte,cinco,007008,lakers12,a1234b,acmilan1,afhfjy,starrr,slutty3,phoneman,kostyan,bonzo1,sintesi07,ersatz,cloud1,nephilim,nascar03,rey619,kairos,123456789e,hardon1,boeing1,juliya,hfccdtn,vgfun8,polizei,456838,keithb,minouche,ariston,savag,213141,clarkken,microwav,london2,santacla,campeo,qr5mx7,464811,mynuts,bombo,1mickey,lucky8,danger1,ironside,carter12,wyatt1,borntorun,iloveyou123,jose1,pancake1,tadmichaels,monsta,jugger,hunnie,triste,heat7777,ilovejesus,queeny,luckycharm,lieben,gordolee85,jtkirk,forever21,jetlag,skylane,taucher,neworlea,holera,000005,anhnhoem,melissa7,mumdad,massimiliano,dima1994,nigel1,madison3,slicky,shokolad,serenit,jmh1978,soccer123,chris3,drwho,rfpzdrf,1qasw23ed,free4me,wonka,sasquatc,sanan,maytag,verochka,bankone,molly12,monopoli,xfqybr,lamborgini,gondolin,candycane,needsome,jb007,scottie1,brigit,0147258369,kalamazo,lololyo123,bill1234,ilovejes,lol123123,popkorn,april13,567rntvm,downunde,charle1,angelbab,guildwars,homeworld,qazxcvbnm,superma1,dupa123,kryptoni,happyy,artyom,stormie,cool11,calvin69,saphir,konovalov,jansport,october8,liebling,druuna,susans,megans,tujhjdf,wmegrfux,jumbo1,ljb4dt7n,012345678910,kolesnik,speculum,at4gftlw,kurgan,93pn75,cahek0980,dallas01,godswill,fhifdby,chelsea4,jump23,barsoom,catinhat,urlacher,angel99,vidadi1,678910,lickme69,topaz1,westend,loveone,c12345,gold12,alex1959,mamon,barney12,1maggie,alex12345,lp2568cskt,s1234567,gjikbdctyf,anthony0,browns99,chips1,sunking,widespre,lalala1,tdutif,fucklife,master00,alino4ka,stakan,blonde1,phoebus,tenore,bvgthbz,brunos,suzjv8,uvdwgt,revenant,1banana,veroniqu,sexfun,sp1der,4g3izhox,isakov,shiva1,scooba,bluefire,wizard12,dimitris,funbags,perseus,hoodoo,keving,malboro,157953,a32tv8ls,latics,animate,mossad,yejntb,karting,qmpq39zr,busdrive,jtuac3my,jkne9y,sr20dett,4gxrzemq,keylargo,741147,rfktylfhm,toast1,skins1,xcalibur,gattone,seether,kameron,glock9mm,julio1,delenn,gameday,tommyd,str8edge,bulls123,66699,carlsberg,woodbird,adnama,45auto,codyman,truck2,1w2w3w4w,pvjegu,method1,luetdi,41d8cd98f00b,bankai,5432112345,94rwpe,reneee,chrisx,melvins,775577,sam2000,scrappy1,rachid,grizzley,margare,morgan01,winstons,gevorg,gonzal,crawdad,gfhfdjp,babilon,noneya,pussy11,barbell,easyride,c00li0,777771,311music,karla1,golions,19866891,peejay,leadfoot,hfvbkm,kr9z40sy,cobra123,isotwe,grizz,sallys,****you,aaa123a,dembel,foxs14,hillcres,webman,mudshark,alfredo1,weeded,lester1,hovepark,ratface,000777fffa,huskie,wildthing,elbarto,waikiki,masami,call911,goose2,regin,dovajb,agricola,cjytxrj,andy11,penny123,family01,a121212,1braves,upupa68,happy100,824655,cjlove,firsttim,kalel,redhair,dfhtymt,sliders,bananna,loverbo,fifa2008,crouton,chevy350,panties2,kolya1,alyona,hagrid,spagetti,q2w3e4r,867530,narkoman,nhfdvfnjkju123,1ccccccc,napolean,0072563,allay,w8sted,wigwam,jamesk,state1,parovoz,beach69,kevinb,rossella,logitech1,celula,gnocca,canucks1,loginova,marlboro1,aaaa1,kalleanka,mester,mishutka,milenko,alibek,jersey1,peterc,1mouse,nedved,blackone,ghfplybr,682regkh,beejay,newburgh,ruffian,clarets,noreaga,xenophon,hummerh2,tenshi,smeagol,soloyo,vfhnby,ereiamjh,ewq321,goomie,sportin,cellphone,sonnie,jetblack,saudan,gblfhfc,matheus,uhfvjnf,alicja,jayman1,devon1,hexagon,bailey2,vtufajy,yankees7,salty1,908070,killemal,gammas,eurocard,sydney12,tuesday1,antietam,wayfarer,beast666,19952009sa,aq12ws,eveli,hockey21,haloreach,dontcare,xxxx1,andrea11,karlmarx,jelszo,tylerb,protools,timberwolf,ruffneck,pololo,1bbbbb,waleed,sasami,twinss,fairlady,illuminati,alex007,sucks1,homerjay,scooter7,tarbaby,barmaley,amistad,vanes,randers,tigers12,dreamer2,goleafsg,googie,bernie1,as12345,godeep,james3,phanto,gwbush,cumlover,2196dc,studioworks,995511,golf56,titova,kaleka,itali,socks1,kurwamac,daisuke,hevonen,woody123,daisie,wouter,henry123,gostosa,guppie,porpoise,iamsexy,276115,paula123,1020315,38gjgeuftd,rjrfrjkf,knotty,idiot1,sasha12345,matrix13,securit,radical1,ag764ks,jsmith,coolguy1,secretar,juanas,sasha1988,itout,00000001,tiger11,1butthea,putain,cavalo,basia1,kobebryant,1232323,12345asdfg,sunsh1ne,cyfqgth,tomkat,dorota,dashit,pelmen,5t6y7u,whipit,smokeone,helloall,bonjour1,snowshoe,nilknarf,x1x2x3,lammas,1234599,lol123456,atombomb,ironchef,noclue,alekseev,gwbush1,silver2,12345678m,yesican,fahjlbnf,chapstic,alex95,open1,tiger200,lisichka,pogiako,cbr929,searchin,tanya123,alex1973,phil413,alex1991,dominati,geckos,freddi,silenthill,egroeg,vorobey,antoxa,dark666,shkola,apple22,rebellio,shamanking,7f8srt,cumsucker,partagas,bill99,22223333,arnster55,fucknuts,proxima,silversi,goblues,parcells,vfrcbvjdf,piloto,avocet,emily2,1597530,miniskir,himitsu,pepper2,juiceman,venom1,bogdana,jujube,quatro,botafogo,mama2010,junior12,derrickh,asdfrewq,miller2,chitarra,silverfox,napol,prestigio,devil123,mm111qm,ara123,max33484,sex2000,primo1,sephan,anyuta,alena2010,viborg,verysexy,hibiscus,terps,josefin,oxcart,spooker,speciali,raffaello,partyon,vfhvtkflrf,strela,a123456z,worksuck,glasss,lomonosov,dusty123,dukeblue,1winter,sergeeva,lala123,john22,cmc09,sobolev,bettylou,dannyb,gjkrjdybr,hagakure,iecnhbr,awsedr,pmdmsctsk,costco,alekseeva,fktrcttd,bazuka,flyingv,garuda,buffy16,gutierre,beer12,stomatolog,ernies,palmeiras,golf123,love269,n.kmgfy,gjkysqgbpltw,youare,joeboo,baksik,lifeguar,111a111,nascar8,mindgame,dude1,neopets,frdfkfyu,june24,phoenix8,penelopa,merlin99,mercenar,badluck,mishel,bookert,deadsexy,power9,chinchil,1234567m,alex10,skunk1,rfhkcjy,sammycat,wright1,randy2,marakesh,temppassword,elmer251,mooki,patrick0,bonoedge,1tits,chiar,kylie1,graffix,milkman1,cornel,mrkitty,nicole12,ticketmaster,beatles4,number20,ffff1,terps1,superfre,yfdbufnjh,jake1234,flblfc,1111qq,zanuda,jmol01,wpoolejr,polopol,nicolett,omega13,cannonba,123456789.,sandy69,ribeye,bo243ns,marilena,bogdan123,milla,redskins1,19733791,alias1,movie1,ducat,marzena,shadowru,56565,coolman1,pornlover,teepee,spiff,nafanya,gateway3,fuckyou0,hasher,34778,booboo69,staticx,hang10,qq12345,garnier,bosco123,1234567qw,carson1,samso,1xrg4kcq,cbr929rr,allan123,motorbik,andrew22,pussy101,miroslava,cytujdbr,camp0017,cobweb,snusmumrik,salmon1,cindy2,aliya,serendipity,co437at,tincouch,timmy123,hunter22,st1100,vvvvvv1,blanka,krondor,sweeti,nenit,kuzmich,gustavo1,bmw320i,alex2010,trees1,kyliem,essayons,april26,kumari,sprin,fajita,appletre,fghbjhb,1green,katieb,steven2,corrado1,satelite,1michell,123456789c,cfkfvfylhf,acurarsx,slut543,inhere,bob2000,pouncer,k123456789,fishie,aliso,audia8,bluetick,soccer69,jordan99,fromhell,mammoth1,fighting54,mike25,pepper11,extra1,worldwid,chaise,vfr800,sordfish,almat,nofate,listopad,hellgate,dctvghbdf,jeremia,qantas,lokiju,honker,sprint1,maral,triniti,compaq3,sixsix6,married1,loveman,juggalo1,repvtyrj,zxcasdqw,123445,whore1,123678,monkey6,west123,warcraf,pwnage,mystery1,creamyou,ant123,rehjgfnrf,corona1,coleman1,steve121,alderaan,barnaul,celeste1,junebug1,bombshel,gretzky9,tankist,targa,cachou,vaz2101,playgolf,boneyard,strateg,romawka,iforgotit,pullup,garbage1,irock,archmage,shaft1,oceano,sadies,alvin1,135135ab,psalm69,lmfao,ranger02,zaharova,33334444,perkman,realman,salguod,cmoney,astonmartin,glock1,greyfox,viper99,helpm,blackdick,46775575,family5,shazbot,dewey1,qwertyas,shivani,black22,mailman1,greenday1,57392632,red007,stanky,sanchez1,tysons,daruma,altosax,krayzie,85852008,1forever,98798798,irock.,123456654,142536789,ford22,brick1,michela,preciou,crazy4u,01telemike01,nolife,concac,safety1,annie123,brunswic,destini,123456qwer,madison0,snowball1,137946,1133557799,jarule,scout2,songohan,thedead,00009999,murphy01,spycam,hirsute,aurinko,associat,1miller,baklan,hermes1,2183rm,martie,kangoo,shweta,yvonne1,westsid,jackpot1,rotciv,maratik,fabrika,claude1,nursultan,noentry,ytnhjufnm,electra1,ghjcnjnfr1,puneet,smokey01,integrit,bugeye,trouble2,14071789,paul01,omgwtf,dmh415,ekilpool,yourmom1,moimeme,sparky11,boludo,ruslan123,kissme1,demetrio,appelsin,asshole3,raiders2,bunns,fynjybj,billygoa,p030710p$e4o,macdonal,248ujnfk,acorns,schmidt1,sparrow1,vinbylrj,weasle,jerom,ycwvrxxh,skywalk,gerlinde,solidus,postal1,poochie1,1charles,rhianna,terorist,rehnrf,omgwtfbbq,assfucke,deadend,zidan,jimboy,vengence,maroon5,7452tr,dalejr88,sombra,anatole,elodi,amazonas,147789,q12345q,gawker1,juanma,kassidy,greek1,bruces,bilbob,mike44,0o9i8u7y6t,kaligula,agentx,familie,anders1,pimpjuice,0128um,birthday10,lawncare,hownow,grandorgue,juggerna,scarfac,kensai,swatteam,123four,motorbike,repytxbr,other1,celicagt,pleomax,gen0303,godisgreat,icepick,lucifer666,heavy1,tea4two,forsure,02020,shortdog,webhead,chris13,palenque,3techsrl,knights1,orenburg,prong,nomarg,wutang1,80637852730,laika,iamfree,12345670,pillow1,12343412,bigears,peterg,stunna,rocky5,12123434,damir,feuerwehr,7418529630,danone,yanina,valenci,andy69,111222q,silvia1,1jjjjj,loveforever,passwo1,stratocaster,8928190a,motorolla,lateralu,ujujkm,chubba,ujkjdf,signon,123456789zx,serdce,stevo,wifey200,ololo123,popeye1,1pass,central1,melena,luxor,nemezida,poker123,ilovemusic,qaz1234,noodles1,lakeshow,amarill,ginseng,billiam,trento,321cba,fatback,soccer33,master13,marie2,newcar,bigtop,dark1,camron,nosgoth,155555,biglou,redbud,jordan7,159789,diversio,actros,dazed,drizzit,hjcnjd,wiktoria,justic,gooses,luzifer,darren1,chynna,tanuki,11335577,icculus,boobss,biggi,firstson,ceisi123,gatewa,hrothgar,jarhead1,happyjoy,felipe1,bebop1,medman,athena1,boneman,keiths,djljgfl,dicklick,russ120,mylady,zxcdsa,rock12,bluesea,kayaks,provista,luckies,smile4me,bootycal,enduro,123123f,heartbre,ern3sto,apple13,bigpappa,fy.njxrf,bigtom,cool69,perrito,quiet1,puszek,cious,cruella,temp1,david26,alemap,aa123123,teddies,tricolor,smokey12,kikiriki,mickey01,robert01,super5,ranman,stevenso,deliciou,money777,degauss,mozar,susanne1,asdasd12,shitbag,mommy123,wrestle1,imfree,fuckyou12,barbaris,florent,ujhijr,f8yruxoj,tefjps,anemone,toltec,2gether,left4dead2,ximen,gfkmvf,dunca,emilys,diana123,16473a,mark01,bigbro,annarbor,nikita2000,11aa11,tigres,llllll1,loser2,fbi11213,jupite,qwaszxqw,macabre,123ert,rev2000,mooooo,klapaucius,bagel1,chiquit,iyaoyas,bear101,irocz28,vfktymrfz,smokey2,love99,rfhnbyf,dracul,keith123,slicko,peacock1,orgasmic,thesnake,solder,wetass,doofer,david5,rhfcyjlfh,swanny,tammys,turkiye,tubaman,estefani,firehose,funnyguy,servo,grace17,pippa1,arbiter,jimmy69,nfymrf,asdf67nm,rjcnzy,demon123,thicknes,sexysex,kristall,michail,encarta,banderos,minty,marchenko,de1987ma,mo5kva,aircav,naomi1,bonni,tatoo,cronaldo,49ers1,mama1963,1truck,telecaster,punksnotdead,erotik,1eagles,1fender,luv269,acdeehan,tanner1,freema,1q3e5t7u,linksys,tiger6,megaman1,neophyte,australia1,mydaddy,1jeffrey,fgdfgdfg,gfgekz,1986irachka,keyman,m0b1l3,dfcz123,mikeyg,playstation2,abc125,slacker1,110491g,lordsoth,bhavani,ssecca,dctvghbdtn,niblick,hondacar,baby01,worldcom,4034407,51094didi,3657549,3630000,3578951,sweetpussy,majick,supercoo,robert11,abacabb,panda123,gfhjkm13,ford4x4,zippo1,lapin,1726354,lovesong,dude11,moebius,paravoz,1357642,matkhau,solnyshko,daniel4,multiplelog,starik,martusia,iamtheman,greentre,jetblue,motorrad,vfrcbvev,redoak,dogma1,gnorman,komlos,tonka1,1010220,666satan,losenord,lateralus,absinthe,command1,jigga1,iiiiiii1,pants1,jungfrau,926337,ufhhbgjnnth,yamakasi,888555,sunny7,gemini69,alone1,zxcvbnmz,cabezon,skyblues,zxc1234,456123a,zero00,caseih,azzurra,legolas1,menudo,murcielago,785612,779977,benidorm,viperman,dima1985,piglet1,hemligt,hotfeet,7elephants,hardup,gamess,a000000,267ksyjf,kaitlynn,sharkie,sisyphus,yellow22,667766,redvette,666420,mets69,ac2zxdty,hxxrvwcy,cdavis,alan1,noddy,579300,druss,eatshit1,555123,appleseed,simpleplan,kazak,526282,fynfyfyfhbde,birthday6,dragon6,1pookie,bluedevils,omg123,hj8z6e,x5dxwp,455445,batman23,termin,chrisbrown,animals1,lucky9,443322,kzktxrf,takayuki,fermer,assembler,zomu9q,sissyboy,sergant,felina,nokia6230i,eminem12,croco,hunt4red,festina,darknigh,cptnz062,ndshnx4s,twizzler,wnmaz7sd,aamaax,gfhfcjkmrf,alabama123,barrynov,happy5,punt0it,durandal,8xuuobe4,cmu9ggzh,bruno12,316497,crazyfrog,vfvfktyf,apple3,kasey1,mackdaddy,anthon1,sunnys,angel3,cribbage,moon1,donal,bryce1,pandabear,mwss474,whitesta,freaker,197100,bitche,p2ssw0rd,turnb,tiktonik,moonlite,ferret1,jackas,ferrum,bearclaw,liberty2,1diablo,caribe,snakeeyes,janbam,azonic,rainmaker,vetalik,bigeasy,baby1234,sureno13,blink1,kluivert,calbears,lavanda,198600,dhtlbyf,medvedeva,fox123,whirling,bonscott,freedom9,october3,manoman,segredo,cerulean,robinso,bsmith,flatus,dannon,password21,rrrrrr1,callista,romai,rainman1,trantor,mickeymo,bulldog7,g123456,pavlin,pass22,snowie,hookah,7ofnine,bubba22,cabible,nicerack,moomoo1,summer98,yoyo123,milan1,lieve27,mustang69,jackster,exocet,nadege,qaz12,bahama,watson1,libras,eclipse2,bahram,bapezm,up9x8rww,ghjcnjz,themaste,deflep27,ghost16,gattaca,fotograf,junior123,gilber,gbjyth,8vjzus,rosco1,begonia,aldebara,flower12,novastar,buzzman,manchild,lopez1,mama11,william7,yfcnz1,blackstar,spurs123,moom4242,1amber,iownyou,tightend,07931505,paquito,1johnson,smokepot,pi31415,snowmass,ayacdc,jessicam,giuliana,5tgbnhy6,harlee,giuli,bigwig,tentacle,scoubidou2,benelli,vasilina,nimda,284655,jaihind,lero4ka,1tommy,reggi,ididit,jlbyjxtcndj,mike26,qbert,wweraw,lukasz,loosee123,palantir,flint1,mapper,baldie,saturne,virgin1,meeeee,elkcit,iloveme2,blue15,themoon,radmir,number3,shyanne,missle,hannelor,jasmina,karin1,lewie622,ghjcnjqgfhjkm,blasters,oiseau,sheela,grinders,panget,rapido,positiv,twink,fltkbyf,kzsfj874,daniel01,enjoyit,nofags,doodad,rustler,squealer,fortunat,peace123,khushi,devils2,7inches,candlebo,topdawg,armen,soundman,zxcqweasd,april7,gazeta,netman,hoppers,bear99,ghbjhbntn,mantle7,bigbo,harpo,jgordon,bullshi,vinny1,krishn,star22,thunderc,galinka,phish123,tintable,nightcrawler,tigerboy,rbhgbx,messi,basilisk,masha1998,nina123,yomamma,kayla123,geemoney,0000000000d,motoman,a3jtni,ser123,owen10,italien,vintelok,12345rewq,nightime,jeepin,ch1tt1ck,mxyzptlk,bandido,ohboy,doctorj,hussar,superted,parfilev,grundle,1jack,livestrong,chrisj,matthew3,access22,moikka,fatone,miguelit,trivium,glenn1,smooches,heiko,dezember,spaghett,stason,molokai,bossdog,guitarma,waderh,boriska,photosho,path13,hfrtnf,audre,junior24,monkey24,silke,vaz21093,bigblue1,trident1,candide,arcanum,klinker,orange99,bengals1,rosebu,mjujuj,nallepuh,mtwapa1a,ranger69,level1,bissjop,leica,1tiffany,rutabega,elvis77,kellie1,sameas,barada,karabas,frank12,queenb,toutoune,surfcity,samanth1,monitor1,littledo,kazakova,fodase,mistral1,april22,carlit,shakal,batman123,fuckoff2,alpha01,5544332211,buddy3,towtruck,kenwood1,vfiekmrf,jkl123,pypsik,ranger75,sitges,toyman,bartek1,ladygirl,booman,boeing77,installsqlst,222666,gosling,bigmack,223311,bogos,kevin2,gomez1,xohzi3g4,kfnju842,klubnika,cubalibr,123456789101,kenpo,0147852369,raptor1,tallulah,boobys,jjones,1q2s3c,moogie,vid2600,almas,wombat1,extra300,xfiles1,green77,sexsex1,heyjude,sammyy,missy123,maiyeuem,nccpl25282,thicluv,sissie,raven3,fldjrfn,buster22,broncos2,laurab,letmein4,harrydog,solovey,fishlips,asdf4321,ford123,superjet,norwegen,movieman,psw333333,intoit,postbank,deepwate,ola123,geolog323,murphys,eshort,a3eilm2s2y,kimota,belous,saurus,123321qaz,i81b4u,aaa12,monkey20,buckwild,byabybnb,mapleleafs,yfcnzyfcnz,baby69,summer03,twista,246890,246824,ltcnhjth,z1z2z3,monika1,sad123,uto29321,bathory,villan,funkey,poptarts,spam967888,705499fh,sebast,porn1234,earn381,1porsche,whatthef,123456789y,polo12,brillo,soreilly,waters1,eudora,allochka,is_a_bot,winter00,bassplay,531879fiz,onemore,bjarne,red911,kot123,artur1,qazxdr,c0rvette,diamond7,matematica,klesko,beaver12,2enter,seashell,panam,chaching,edward2,browni,xenogear,cornfed,aniram,chicco22,darwin1,ancella2,sophie2,vika1998,anneli,shawn41,babie,resolute,pandora2,william8,twoone,coors1,jesusis1,teh012,cheerlea,renfield,tessa1,anna1986,madness1,bkmlfh,19719870,liebherr,ck6znp42,gary123,123654z,alsscan,eyedoc,matrix7,metalgea,chinito,4iter,falcon11,7jokx7b9du,bigfeet,tassadar,retnuh,muscle1,klimova,darion,batistuta,bigsur,1herbier,noonie,ghjrehjh,karimova,faustus,snowwhite,1manager,dasboot,michael12,analfuck,inbed,dwdrums,jaysoncj,maranell,bsheep75,164379,rolodex,166666,rrrrrrr1,almaz666,167943,russel1,negrito,alianz,goodpussy,veronik,1w2q3r4e,efremov,emb377,sdpass,william6,alanfahy,nastya1995,panther5,automag,123qwe12,vfvf2011,fishe,1peanut,speedie,qazwsx1234,pass999,171204j,ketamine,sheena1,energizer,usethis1,123abc123,buster21,thechamp,flvbhfk,frank69,chane,hopeful1,claybird,pander,anusha,bigmaxxx,faktor,housebed,dimidrol,bigball,shashi,derby1,fredy,dervish,bootycall,80988218126,killerb,cheese2,pariss,mymail,dell123,catbert,christa1,chevytru,gjgjdf,00998877,overdriv,ratten,golf01,nyyanks,dinamite,bloembol,gismo,magnus1,march2,twinkles,ryan22,duckey,118a105b,kitcat,brielle,poussin,lanzarot,youngone,ssvegeta,hero63,battle1,kiler,fktrcfylh1,newera,vika1996,dynomite,oooppp,beer4me,foodie,ljhjuf,sonshine,godess,doug1,constanc,thinkbig,steve2,damnyou,autogod,www333,kyle1,ranger7,roller1,harry2,dustin1,hopalong,tkachuk,b00bies,bill2,deep111,stuffit,fire69,redfish1,andrei123,graphix,1fishing,kimbo1,mlesp31,ifufkbyf,gurkan,44556,emily123,busman,and123,8546404,paladine,1world,bulgakov,4294967296,bball23,1wwwww,mycats,elain,delta6,36363,emilyb,color1,6060842,cdtnkfyrf,hedonism,gfgfrfhkj,5551298,scubad,gostate,sillyme,hdbiker,beardown,fishers,sektor,00000007,newbaby,rapid1,braves95,gator2,nigge,anthony3,sammmy,oou812,heffer,phishin,roxanne1,yourass,hornet1,albator,2521659,underwat,tanusha,dianas,3f3fpht7op,dragon20,bilbobag,cheroke,radiatio,dwarf1,majik,33st33,dochka,garibald,robinh,sham69,temp01,wakeboar,violet1,1w2w3w,registr,tonite,maranello,1593570,parolamea,galatasara,loranthos,1472583,asmodean,1362840,scylla,doneit,jokerr,porkypig,kungen,mercator,koolhaas,come2me,debbie69,calbear,liverpoolfc,yankees4,12344321a,kennyb,madma,85200258,dustin23,thomas13,tooling,mikasa,mistic,crfnbyf,112233445,sofia1,heinz57,colts1,price1,snowey,joakim,mark11,963147,cnhfcnm,kzinti,1bbbbbbb,rubberdu,donthate,rupert1,sasha1992,regis1,nbuhbwf,fanboy,sundial,sooner1,wayout,vjnjhjkf,deskpro,arkangel,willie12,mikeyb,celtic1888,luis1,buddy01,duane1,grandma1,aolcom,weeman,172839456,basshead,hornball,magnu,pagedown,molly2,131517,rfvtgbyhn,astonmar,mistery,madalina,cash1,1happy,shenlong,matrix01,nazarova,369874125,800500,webguy,rse2540,ashley2,briank,789551,786110,chunli,j0nathan,greshnik,courtne,suckmyco,mjollnir,789632147,asdfg1234,754321,odelay,ranma12,zebedee,artem777,bmw318is,butt1,rambler1,yankees9,alabam,5w76rnqp,rosies,mafioso,studio1,babyruth,tranzit,magical123,gfhjkm135,12345$,soboleva,709394,ubique,drizzt1,elmers,teamster,pokemons,1472583690,1597532486,shockers,merckx,melanie2,ttocs,clarisse,earth1,dennys,slobber,flagman,farfalla,troika,4fa82hyx,hakan,x4ww5qdr,cumsuck,leather1,forum1,july20,barbel,zodiak,samuel12,ford01,rushfan,bugsy1,invest1,tumadre,screwme,a666666,money5,henry8,tiddles,sailaway,starburs,100years,killer01,comando,hiromi,ranetka,thordog,blackhole,palmeira,verboten,solidsna,q1w1e1,humme,kevinc,gbrfxe,gevaudan,hannah11,peter2,vangar,sharky7,talktome,jesse123,chuchi,pammy,!qazxsw2,siesta,twenty1,wetwilly,477041,natural1,sun123,daniel3,intersta,shithead1,hellyea,bonethugs,solitair,bubbles2,father1,nick01,444000,adidas12,dripik,cameron2,442200,a7nz8546,respublika,fkojn6gb,428054,snoppy,rulez1,haslo,rachael1,purple01,zldej102,ab12cd34,cytuehjxrf,madhu,astroman,preteen,handsoff,mrblonde,biggio,testin,vfdhif,twolves,unclesam,asmara,kpydskcw,lg2wmgvr,grolsch,biarritz,feather1,williamm,s62i93,bone1,penske,337733,336633,taurus1,334433,billet,diamondd,333000,nukem,fishhook,godogs,thehun,lena1982,blue00,smelly1,unb4g9ty,65pjv22,applegat,mikehunt,giancarlo,krillin,felix123,december1,soapy,46doris,nicole23,bigsexy1,justin10,pingu,bambou,falcon12,dgthtl,1surfer,qwerty01,estrellit,nfqcjy,easygo,konica,qazqwe,1234567890m,stingers,nonrev,3e4r5t,champio,bbbbbb99,196400,allen123,seppel,simba2,rockme,zebra3,tekken3,endgame,sandy2,197300,fitte,monkey00,eldritch,littleone,rfyfgkz,1member,66chevy,oohrah,cormac,hpmrbm41,197600,grayfox,elvis69,celebrit,maxwell7,rodders,krist,1camaro,broken1,kendall1,silkcut,katenka,angrick,maruni,17071994a,tktyf,kruemel,snuffles,iro4ka,baby12,alexis01,marryme,vlad1994,forward1,culero,badaboom,malvin,hardtoon,hatelove,molley,knopo4ka,duchess1,mensuck,cba321,kickbutt,zastava,wayner,fuckyou6,eddie123,cjkysir,john33,dragonfi,cody1,jabell,cjhjrf,badseed,sweden1,marihuana,brownlov,elland,nike1234,kwiettie,jonnyboy,togepi,billyk,robert123,bb334,florenci,ssgoku,198910,bristol1,bob007,allister,yjdujhjl,gauloise,198920,bellaboo,9lives,aguilas,wltfg4ta,foxyroxy,rocket69,fifty50,babalu,master21,malinois,kaluga,gogosox,obsessio,yeahrigh,panthers1,capstan,liza2000,leigh1,paintball1,blueskie,cbr600f3,bagdad,jose98,mandreki,shark01,wonderbo,muledeer,xsvnd4b2,hangten,200001,grenden,anaell,apa195,model1,245lufpq,zip100,ghjcgtrn,wert1234,misty2,charro,juanjose,fkbcrf,frostbit,badminto,buddyy,1doctor,vanya,archibal,parviz,spunky1,footboy,dm6tzsgp,legola,samadhi,poopee,ytdxz2ca,hallowboy,dposton,gautie,theworm,guilherme,dopehead,iluvtits,bobbob1,ranger6,worldwar,lowkey,chewbaca,oooooo99,ducttape,dedalus,celular,8i9o0p,borisenko,taylor01,111111z,arlingto,p3nnywiz,rdgpl3ds,boobless,kcmfwesg,blacksab,mother2,markus1,leachim,secret2,s123456789,1derful,espero,russell2,tazzer,marykate,freakme,mollyb,lindros8,james00,gofaster,stokrotka,kilbosik,aquamann,pawel1,shedevil,mousie,slot2009,october6,146969,mm259up,brewcrew,choucho,uliana,sexfiend,fktirf,pantss,vladimi,starz,sheeps,12341234q,bigun,tiggers,crjhjcnm,libtech,pudge1,home12,zircon,klaus1,jerry2,pink1,lingus,monkey66,dumass,polopolo09,feuerweh,rjyatnf,chessy,beefer,shamen,poohbear1,4jjcho,bennevis,fatgirls,ujnbrf,cdexswzaq,9noize9,rich123,nomoney,racecar1,hacke,clahay,acuario,getsum,hondacrv,william0,cheyenn,techdeck,atljhjdf,wtcacq,suger,fallenangel,bammer,tranquil,carla123,relayer,lespaul1,portvale,idontno,bycnbnen,trooper2,gennadiy,pompon,billbob,amazonka,akitas,chinatow,atkbrc,busters,fitness1,cateye,selfok2013,1murphy,fullhous,mucker,bajskorv,nectarin,littlebitch,love24,feyenoor,bigal37,lambo1,pussybitch,icecube1,biged,kyocera,ltybcjdf,boodle,theking1,gotrice,sunset1,abm1224,fromme,sexsells,inheat,kenya1,swinger1,aphrodit,kurtcobain,rhind101,poidog,poiulkjh,kuzmina,beantown,tony88,stuttgar,drumer,joaqui,messenge,motorman,amber2,nicegirl,rachel69,andreia,faith123,studmuffin,jaiden,red111,vtkmybr,gamecocks,gumper,bosshogg,4me2know,tokyo1,kleaner,roadhog,fuckmeno,phoenix3,seeme,buttnutt,boner69,andreyka,myheart,katerin,rugburn,jvtuepip,dc3ubn,chile1,ashley69,happy99,swissair,balls2,fylhttdf,jimboo,55555d,mickey11,voronin,m7hsqstm,stufff,merete,weihnachte,dowjones,baloo1,freeones,bears34,auburn1,beverl,timberland,1elvis,guinness1,bombadil,flatron1,logging7,telefoon,merl1n,masha1,andrei1,cowabung,yousuck1,1matrix,peopl,asd123qwe,sweett,mirror1,torrente,joker12,diamond6,jackaroo,00000a,millerlite,ironhorse,2twins,stryke,gggg1,zzzxxxccc,roosevel,8363eddy,angel21,depeche1,d0ct0r,blue14,areyou,veloce,grendal,frederiksberg,cbcntvf,cb207sl,sasha2000,was.here,fritzz,rosedale,spinoza,cokeisit,gandalf3,skidmark,ashley01,12345j,1234567890qaz,sexxxxxx,beagles,lennart,12345789,pass10,politic,max007,gcheckou,12345611,tiffy,lightman,mushin,velosiped,brucewayne,gauthie,elena123,greenegg,h2oski,clocker,nitemare,123321s,megiddo,cassidy1,david13,boywonde,flori,peggy12,pgszt6md,batterie,redlands,scooter6,bckhere,trueno,bailey11,maxwell2,bandana,timoth1,startnow,ducati74,tiern,maxine1,blackmetal,suzyq,balla007,phatfarm,kirsten1,titmouse,benhogan,culito,forbin,chess1,warren1,panman,mickey7,24lover,dascha,speed2,redlion,andrew10,johnwayn,nike23,chacha1,bendog,bullyboy,goldtree,spookie,tigger99,1cookie,poutine,cyclone1,woodpony,camaleun,bluesky1,dfadan,eagles20,lovergirl,peepshow,mine1,dima1989,rjdfkmxer,11111aaaaa,machina,august17,1hhhhh,0773417k,1monster,freaksho,jazzmin,davidw,kurupt,chumly,huggies,sashenka,ccccccc1,bridge1,giggalo,cincinna,pistol1,hello22,david77,lightfoo,lucky6,jimmy12,261397,lisa12,tabaluga,mysite,belo4ka,greenn,eagle99,punkrawk,salvado,slick123,wichsen,knight99,dummys,fefolico,contrera,kalle1,anna1984,delray,robert99,garena,pretende,racefan,alons,serenada,ludmilla,cnhtkjr,l0swf9gx,hankster,dfktynbyrf,sheep1,john23,cv141ab,kalyani,944turbo,crystal2,blackfly,zrjdktdf,eus1sue1,mario5,riverplate,harddriv,melissa3,elliott1,sexybitc,cnhfyybr,jimdavis,bollix,beta1,amberlee,skywalk1,natala,1blood,brattax,shitty1,gb15kv99,ronjon,rothmans,thedoc,joey21,hotboi,firedawg,bimbo38,jibber,aftermat,nomar,01478963,phishing,domodo,anna13,materia,martha1,budman1,gunblade,exclusiv,sasha1997,anastas,rebecca2,fackyou,kallisti,fuckmyass,norseman,ipswich1,151500,1edward,intelinside,darcy1,bcrich,yjdjcnbf,failte,buzzzz,cream1,tatiana1,7eleven,green8,153351,1a2s3d4f5g6h,154263,milano1,bambi1,bruins77,rugby2,jamal1,bolita,sundaypunch,bubba12,realmadr,vfyxtcnth,iwojima,notlob,black666,valkiria,nexus1,millerti,birthday100,swiss1,appollo,gefest,greeneyes,celebrat,tigerr,slava123,izumrud,bubbabub,legoman,joesmith,katya123,sweetdream,john44,wwwwwww1,oooooo1,socal,lovespor,s5r8ed67s,258147,heidis,cowboy22,wachovia,michaelb,qwe1234567,i12345,255225,goldie1,alfa155,45colt,safeu851,antonova,longtong,1sparky,gfvznm,busen,hjlbjy,whateva,rocky4,cokeman,joshua3,kekskek1,sirocco,jagman,123456qwert,phinupi,thomas10,loller,sakur,vika2011,fullred,mariska,azucar,ncstate,glenn74,halima,aleshka,ilovemylife,verlaat,baggie,scoubidou6,phatboy,jbruton,scoop1,barney11,blindman,def456,maximus2,master55,nestea,11223355,diego123,sexpistols,sniffy,philip1,f12345,prisonbreak,nokia2700,ajnjuhfa,yankees3,colfax,ak470000,mtnman,bdfyeirf,fotball,ichbin,trebla,ilusha,riobravo,beaner1,thoradin,polkaudi,kurosawa,honda123,ladybu,valerik,poltava,saviola,fuckyouguys,754740g0,anallove,microlab1,juris01,ncc1864,garfild,shania1,qagsud,makarenko,cindy69,lebedev,andrew11,johnnybo,groovy1,booster1,sanders1,tommyb,johnson4,kd189nlcih,hondaman,vlasova,chick1,sokada,sevisgur,bear2327,chacho,sexmania,roma1993,hjcnbckfd,valley1,howdie,tuppence,jimandanne,strike3,y4kuz4,nhfnfnf,tsubasa,19955991,scabby,quincunx,dima1998,uuuuuu1,logica,skinner1,pinguino,lisa1234,xpressmusic,getfucked,qqqq1,bbbb1,matulino,ulyana,upsman,johnsmith,123579,co2000,spanner1,todiefor,mangoes,isabel1,123852,negra,snowdon,nikki123,bronx1,booom,ram2500,chuck123,fireboy,creek1,batman13,princesse,az12345,maksat,1knight,28infern,241455,r7112s,muselman,mets1986,katydid,vlad777,playme,kmfdm1,asssex,1prince,iop890,bigbroth,mollymoo,waitron,lizottes,125412,juggler,quinta,0sister0,zanardi,nata123,heckfyxbr,22q04w90e,engine2,nikita95,zamira,hammer22,lutscher,carolina1,zz6319,sanman,vfuflfy,buster99,rossco,kourniko,aggarwal,tattoo1,janice1,finger1,125521,19911992,shdwlnds,rudenko,vfvfgfgf123,galatea,monkeybu,juhani,premiumcash,classact,devilmay,helpme2,knuddel,hardpack,ramil,perrit,basil1,zombie13,stockcar,tos8217,honeypie,nowayman,alphadog,melon1,talula,125689,tiribon12,tornike,haribol,telefone,tiger22,sucka,lfytxrf,chicken123,muggins,a23456,b1234567,lytdybr,otter1,pippa,vasilisk,cooking1,helter,78978,bestboy,viper7,ahmed1,whitewol,mommys,apple5,shazam1,chelsea7,kumiko,masterma,rallye,bushmast,jkz123,entrar,andrew6,nathan01,alaric,tavasz,heimdall,gravy1,jimmy99,cthlwt,powerr,gthtrhtcnjr,canesfan,sasha11,ybrbnf_25,august9,brucie,artichok,arnie1,superdude,tarelka,mickey22,dooper,luners,holeshot,good123,gettysbu,bicho,hammer99,divine5,1zxcvbn,stronzo,q22222,disne,bmw750il,godhead,hallodu,aerith,nastik,differen,cestmoi,amber69,5string,pornosta,dirtygirl,ginger123,formel1,scott12,honda200,hotspurs,johnatha,firstone123,lexmark1,msconfig,karlmasc,l123456,123qweasdzx,baldman,sungod,furka,retsub,9811020,ryder1,tcglyued,astron,lbvfcbr,minddoc,dirt49,baseball12,tbear,simpl,schuey,artimus,bikman,plat1num,quantex,gotyou,hailey1,justin01,ellada,8481068,000002,manimal,dthjybxrf,buck123,dick123,6969696,nospam,strong1,kodeord,bama12,123321w,superman123,gladiolus,nintend,5792076,dreamgirl,spankme1,gautam,arianna1,titti,tetas,cool1234,belladog,importan,4206969,87e5nclizry,teufelo7,doller,yfl.irf,quaresma,3440172,melis,bradle,nnmaster,fast1,iverso,blargh,lucas12,chrisg,iamsam,123321az,tomjerry,kawika,2597174,standrew,billyg,muskan,gizmodo2,rz93qpmq,870621345,sathya,qmezrxg4,januari,marthe,moom4261,cum2me,hkger286,lou1988,suckit1,croaker,klaudia1,753951456,aidan1,fsunoles,romanenko,abbydog,isthebes,akshay,corgi,fuck666,walkman555,ranger98,scorpian,hardwareid,bluedragon,fastman,2305822q,iddqdiddqd,1597532,gopokes,zvfrfcb,w1234567,sputnik1,tr1993,pa$$w0rd,2i5fdruv,havvoc,1357913,1313131,bnm123,cowd00d,flexscan,thesims2,boogiema,bigsexxy,powerstr,ngc4565,joshman,babyboy1,123jlb,funfunfu,qwe456,honor1,puttana,bobbyj,daniel21,pussy12,shmuck,1232580,123578951,maxthedo,hithere1,bond0007,gehenna,nomames,blueone,r1234567,bwana,gatinho,1011111,torrents,cinta,123451234,tiger25,money69,edibey,pointman,mmcm19,wales1,caffreys,phaedra,bloodlus,321ret32,rufuss,tarbit,joanna1,102030405,stickboy,lotrfotr34,jamshid,mclarenf1,ataman,99ford,yarrak,logan2,ironlung,pushistik,dragoon1,unclebob,tigereye,pinokio,tylerj,mermaid1,stevie1,jaylen,888777,ramana,roman777,brandon7,17711771s,thiago,luigi1,edgar1,brucey,videogam,classi,birder,faramir,twiddle,cubalibre,grizzy,fucky,jjvwd4,august15,idinahui,ranita,nikita1998,123342,w1w2w3,78621323,4cancel,789963,(null,vassago,jaydog472,123452,timt42,canada99,123589,rebenok,htyfnf,785001,osipov,maks123,neverwinter,love2010,777222,67390436,eleanor1,bykemo,aquemini,frogg,roboto,thorny,shipmate,logcabin,66005918,nokian,gonzos,louisian,1abcdefg,triathlo,ilovemar,couger,letmeino,supera,runvs,fibonacci,muttly,58565254,5thgbqi,vfnehsv,electr,jose12,artemis1,newlove,thd1shr,hawkey,grigoryan,saisha,tosca,redder,lifesux,temple1,bunnyman,thekids,sabbeth,tarzan1,182838,158uefas,dell50,1super,666222,47ds8x,jackhamm,mineonly,rfnfhbyf,048ro,665259,kristina1,bombero,52545856,secure1,bigloser,peterk,alex2,51525354,anarchy1,superx,teenslut,money23,sigmapi,sanfrancisco,acme34,private5,eclips,qwerttrewq,axelle,kokain,hardguy,peter69,jesuschr,dyanna,dude69,sarah69,toyota91,amberr,45645645,bugmenot,bigted,44556677,556644,wwr8x9pu,alphaome,harley13,kolia123,wejrpfpu,revelati,nairda,sodoff,cityboy,pinkpussy,dkalis,miami305,wow12345,triplet,tannenbau,asdfasdf1,darkhors,527952,retired1,soxfan,nfyz123,37583867,goddes,515069,gxlmxbewym,1warrior,36925814,dmb2011,topten,karpova,89876065093rax,naturals,gateway9,cepseoun,turbot,493949,cock22,italia1,sasafras,gopnik,stalke,1qazxdr5,wm2006,ace1062,alieva,blue28,aracel,sandia,motoguzz,terri1,emmajane,conej,recoba,alex1995,jerkyboy,cowboy12,arenrone,precisio,31415927,scsa316,panzer1,studly1,powerhou,bensam,mashoutq,billee,eeyore1,reape,thebeatl,rul3z,montesa,doodle1,cvzefh1gk,424365,a159753,zimmerma,gumdrop,ashaman,grimreap,icandoit,borodina,branca,dima2009,keywest1,vaders,bubluk,diavolo,assss,goleta,eatass,napster1,382436,369741,5411pimo,lenchik,pikach,gilgamesh,kalimera,singer1,gordon2,rjycnbnewbz,maulwurf,joker13,2much4u,bond00,alice123,robotec,fuckgirl,zgjybz,redhorse,margaret1,brady1,pumpkin2,chinky,fourplay,1booger,roisin,1brandon,sandan,blackheart,cheez,blackfin,cntgfyjdf,mymoney1,09080706,goodboss,sebring1,rose1,kensingt,bigboner,marcus12,ym3cautj,struppi,thestone,lovebugs,stater,silver99,forest99,qazwsx12345,vasile,longboar,mkonji,huligan,rhfcbdfz,airmail,porn11,1ooooo,sofun,snake2,msouthwa,dougla,1iceman,shahrukh,sharona,dragon666,france98,196800,196820,ps253535,zjses9evpa,sniper01,design1,konfeta,jack99,drum66,good4you,station2,brucew,regedit,school12,mvtnr765,pub113,fantas,tiburon1,king99,ghjcnjgbpltw,checkito,308win,1ladybug,corneliu,svetasveta,197430,icicle,imaccess,ou81269,jjjdsl,brandon6,bimbo1,smokee,piccolo1,3611jcmg,children2,cookie2,conor1,darth1,margera,aoi856,paully,ou812345,sklave,eklhigcz,30624700,amazing1,wahooo,seau55,1beer,apples2,chulo,dolphin9,heather6,198206,198207,hergood,miracle1,njhyflj,4real,milka,silverfi,fabfive,spring12,ermine,mammy,jumpjet,adilbek,toscana,caustic,hotlove,sammy69,lolita1,byoung,whipme,barney01,mistys,tree1,buster3,kaylin,gfccgjhn,132333,aishiteru,pangaea,fathead1,smurph,198701,ryslan,gasto,xexeylhf,anisimov,chevyss,saskatoo,brandy12,tweaker,irish123,music2,denny1,palpatin,outlaw1,lovesuck,woman1,mrpibb,diadora,hfnfneq,poulette,harlock,mclaren1,cooper12,newpass3,bobby12,rfgecnfcerf,alskdjfh,mini14,dukers,raffael,199103,cleo123,1234567qwertyu,mossberg,scoopy,dctulf,starline,hjvjxrf,misfits1,rangers2,bilbos,blackhea,pappnase,atwork,purple2,daywalker,summoner,1jjjjjjj,swansong,chris10,laluna,12345qqq,charly1,lionsden,money99,silver33,hoghead,bdaddy,199430,saisg002,nosaints,tirpitz,1gggggg,jason13,kingss,ernest1,0cdh0v99ue,pkunzip,arowana,spiri,deskjet1,armine,lances,magic2,thetaxi,14159265,cacique,14142135,orange10,richard0,backdraf,255ooo,humtum,kohsamui,c43dae874d,wrestling1,cbhtym,sorento,megha,pepsiman,qweqwe12,bliss7,mario64,korolev,balls123,schlange,gordit,optiquest,fatdick,fish99,richy,nottoday,dianne1,armyof1,1234qwerasdfzxcv,bbonds,aekara,lidiya,baddog1,yellow5,funkie,ryan01,greentree,gcheckout,marshal1,liliput,000000z,rfhbyrf,gtogto43,rumpole,tarado,marcelit,aqwzsxedc,kenshin1,sassydog,system12,belly1,zilla,kissfan,tools1,desember,donsdad,nick11,scorpio6,poopoo1,toto99,steph123,dogfuck,rocket21,thx113,dude12,sanek,sommar,smacky,pimpsta,letmego,k1200rs,lytghjgtnhjdcr,abigale,buddog,deles,baseball9,roofus,carlsbad,hamzah,hereiam,genial,schoolgirlie,yfz450,breads,piesek,washear,chimay,apocalyp,nicole18,gfgf1234,gobulls,dnevnik,wonderwall,beer1234,1moose,beer69,maryann1,adpass,mike34,birdcage,hottuna,gigant,penquin,praveen,donna123,123lol123,thesame,fregat,adidas11,selrahc,pandoras,test3,chasmo,111222333000,pecos,daniel11,ingersol,shana1,mama12345,cessna15,myhero,1simpson,nazarenko,cognit,seattle2,irina1,azfpc310,rfycthdf,hardy1,jazmyn,sl1200,hotlanta,jason22,kumar123,sujatha,fsd9shtyu,highjump,changer,entertai,kolding,mrbig,sayuri,eagle21,qwertzu,jorge1,0101dd,bigdong,ou812a,sinatra1,htcnjhfy,oleg123,videoman,pbyfblf,tv612se,bigbird1,kenaidog,gunite,silverma,ardmore,123123qq,hotbot,cascada,cbr600f4,harakiri,chico123,boscos,aaron12,glasgow1,kmn5hc,lanfear,1light,liveoak,fizika,ybrjkftdyf,surfside,intermilan,multipas,redcard,72chevy,balata,coolio1,schroede,kanat,testerer,camion,kierra,hejmeddig,antonio2,tornados,isidor,pinkey,n8skfswa,ginny1,houndog,1bill,chris25,hastur,1marine,greatdan,french1,hatman,123qqq,z1z2z3z4,kicker1,katiedog,usopen,smith22,mrmagoo,1234512i,assa123,7seven7,monster7,june12,bpvtyf,149521,guenter,alex1985,voronina,mbkugegs,zaqwsxcderfv,rusty5,mystic1,master0,abcdef12,jndfkb,r4zpm3,cheesey,skripka,blackwhite,sharon69,dro8smwq,lektor,techman,boognish,deidara,heckfyf,quietkey,authcode,monkey4,jayboy,pinkerto,merengue,chulita,bushwick,turambar,kittykit,joseph2,dad123,kristo,pepote,scheiss,hambone1,bigballa,restaura,tequil,111luzer,euro2000,motox,denhaag,chelsi,flaco1,preeti,lillo,1001sin,passw,august24,beatoff,555555d,willis1,kissthis,qwertyz,rvgmw2gl,iloveboobies,timati,kimbo,msinfo,dewdrop,sdbaker,fcc5nky2,messiah1,catboy,small1,chode,beastie1,star77,hvidovre,short1,xavie,dagobah,alex1987,papageno,dakota2,toonami,fuerte,jesus33,lawina,souppp,dirtybir,chrish,naturist,channel1,peyote,flibble,gutentag,lactate,killem,zucchero,robinho,ditka,grumpy1,avr7000,boxxer,topcop,berry1,mypass1,beverly1,deuce1,9638527410,cthuttdf,kzkmrf,lovethem,band1t,cantona1,purple11,apples123,wonderwo,123a456,fuzzie,lucky99,dancer2,hoddling,rockcity,winner12,spooty,mansfiel,aimee1,287hf71h,rudiger,culebra,god123,agent86,daniel0,bunky1,notmine,9ball,goofus,puffy1,xyh28af4,kulikov,bankshot,vurdf5i2,kevinm,ercole,sexygirls,razvan,october7,goater,lollie,raissa,thefrog,mdmaiwa3,mascha,jesussaves,union1,anthony9,crossroa,brother2,areyuke,rodman91,toonsex,dopeman,gericom,vaz2115,cockgobbler,12356789,12345699,signatur,alexandra1,coolwhip,erwin1,awdrgyjilp,pens66,ghjrjgtyrj,linkinpark,emergenc,psych0,blood666,bootmort,wetworks,piroca,johnd,iamthe1,supermario,homer69,flameon,image1,bebert,fylhtq1,annapoli,apple11,hockey22,10048,indahouse,mykiss,1penguin,markp,misha123,foghat,march11,hank1,santorin,defcon4,tampico,vbnhjafy,robert22,bunkie,athlon64,sex777,nextdoor,koskesh,lolnoob,seemnemaailm,black23,march15,yeehaa,chiqui,teagan,siegheil,monday2,cornhusk,mamusia,chilis,sthgrtst,feldspar,scottm,pugdog,rfghjy,micmac,gtnhjdyf,terminato,1jackson,kakosja,bogomol,123321aa,rkbvtyrj,tresor,tigertig,fuckitall,vbkkbjy,caramon,zxc12,balin,dildo1,soccer09,avata,abby123,cheetah1,marquise,jennyc,hondavfr,tinti,anna1985,dennis2,jorel,mayflowe,icema,hal2000,nikkis,bigmouth,greenery,nurjan,leonov,liberty7,fafnir,larionov,sat321321,byteme1,nausicaa,hjvfynbrf,everto,zebra123,sergio1,titone,wisdom1,kahala,104328q,marcin1,salima,pcitra,1nnnnn,nalini,galvesto,neeraj,rick1,squeeky,agnes1,jitterbu,agshar,maria12,0112358,traxxas,stivone,prophet1,bananza,sommer1,canoneos,hotfun,redsox11,1bigmac,dctdjkjl,legion1,everclea,valenok,black9,danny001,roxie1,1theman,mudslide,july16,lechef,chula,glamis,emilka,canbeef,ioanna,cactus1,rockshox,im2cool,ninja9,thvfrjdf,june28,milo17,missyou,micky1,nbibyf,nokiaa,goldi,mattias,fuckthem,asdzxc123,ironfist,junior01,nesta,crazzy,killswit,hygge,zantac,kazama,melvin1,allston,maandag,hiccup,prototyp,specboot,dwl610,hello6,159456,baldhead,redwhite,calpoly,whitetail,agile1,cousteau,matt01,aust1n,malcolmx,gjlfhjr,semperf1,ferarri,a1b2c3d,vangelis,mkvdari,bettis36,andzia,comand,tazzman,morgaine,pepluv,anna1990,inandout,anetka,anna1997,wallpape,moonrake,huntress,hogtie,cameron7,sammy7,singe11,clownboy,newzeala,wilmar,safrane,rebeld,poopi,granat,hammertime,nermin,11251422,xyzzy1,bogeys,jkmxbr,fktrcfyl,11223311,nfyrbcn,11223300,powerpla,zoedog,ybrbnbyf,zaphod42,tarawa,jxfhjdfirf,dude1234,g5wks9,goobe,czekolada,blackros,amaranth,medical1,thereds,julija,nhecsyfujkjdt,promopas,buddy4,marmalad,weihnachten,tronic,letici,passthief,67mustan,ds7zamnw,morri,w8woord,cheops,pinarell,sonofsam,av473dv,sf161pn,5c92v5h6,purple13,tango123,plant1,1baby,xufrgemw,fitta,1rangers,spawns,kenned,taratata,19944991,11111118,coronas,4ebouux8,roadrash,corvette1,dfyjdf846,marley12,qwaszxerdfcv,68stang,67stang,racin,ellehcim,sofiko,nicetry,seabass1,jazzman1,zaqwsx1,laz2937,uuuuuuu1,vlad123,rafale,j1234567,223366,nnnnnn1,226622,junkfood,asilas,cer980,daddymac,persepho,neelam,00700,shithappens,255555,qwertyy,xbox36,19755791,qweasd1,bearcub,jerryb,a1b1c1,polkaudio,basketball1,456rty,1loveyou,marcus2,mama1961,palace1,transcend,shuriken,sudhakar,teenlove,anabelle,matrix99,pogoda,notme,bartend,jordana,nihaoma,ataris,littlegi,ferraris,redarmy,giallo,fastdraw,accountbloc,peludo,pornostar,pinoyako,cindee,glassjaw,dameon,johnnyd,finnland,saudade,losbravo,slonko,toplay,smalltit,nicksfun,stockhol,penpal,caraj,divedeep,cannibus,poppydog,pass88,viktory,walhalla,arisia,lucozade,goldenbo,tigers11,caball,ownage123,tonna,handy1,johny,capital5,faith2,stillher,brandan,pooky1,antananarivu,hotdick,1justin,lacrimos,goathead,bobrik,cgtwbfkbcn,maywood,kamilek,gbplf123,gulnar,beanhead,vfvjyn,shash,viper69,ttttttt1,hondacr,kanako,muffer,dukies,justin123,agapov58,mushka,bad11bad,muleman,jojo123,andreika,makeit,vanill,boomers,bigals,merlin11,quacker,aurelien,spartak1922,ligeti,diana2,lawnmowe,fortune1,awesom,rockyy,anna1994,oinker,love88,eastbay,ab55484,poker0,ozzy666,papasmurf,antihero,photogra,ktm250,painkill,jegr2d2,p3orion,canman,dextur,qwest123,samboy,yomismo,sierra01,herber,vfrcbvvfrcbv,gloria1,llama1,pie123,bobbyjoe,buzzkill,skidrow,grabber,phili,javier1,9379992q,geroin,oleg1994,sovereig,rollover,zaq12qaz,battery1,killer13,alina123,groucho1,mario12,peter22,butterbean,elise1,lucycat,neo123,ferdi,golfer01,randie,gfhfyjbr,ventura1,chelsea3,pinoy,mtgox,yrrim7,shoeman,mirko,ffggyyo,65mustan,ufdibyjd,john55,suckfuck,greatgoo,fvfnjhb,mmmnnn,love20,1bullshi,sucesso,easy1234,robin123,rockets1,diamondb,wolfee,nothing0,joker777,glasnost,richar1,guille,sayan,koresh,goshawk,alexx,batman21,a123456b,hball,243122,rockandr,coolfool,isaia,mary1,yjdbrjdf,lolopc,cleocat,cimbo,lovehina,8vfhnf,passking,bonapart,diamond2,bigboys,kreator,ctvtyjdf,sassy123,shellac,table54781,nedkelly,philbert,sux2bu,nomis,sparky99,python1,littlebear,numpty,silmaril,sweeet,jamesw,cbufhtnf,peggysue,wodahs,luvsex,wizardry,venom123,love4you,bama1,samat,reviewpass,ned467,cjkjdtq,mamula,gijoe,amersham,devochka,redhill,gisel,preggo,polock,cando,rewster,greenlantern,panasonik,dave1234,mikeee,1carlos,miledi,darkness1,p0o9i8u7y6,kathryn1,happyguy,dcp500,assmaster,sambuka,sailormo,antonio3,logans,18254288,nokiax2,qwertzuiop,zavilov,totti,xenon1,edward11,targa1,something1,tony_t,q1w2e3r4t5y6u7i8o9p0,02551670,vladimir1,monkeybutt,greenda,neel21,craiger,saveliy,dei008,honda450,fylhtq95,spike2,fjnq8915,passwordstandard,vova12345,talonesi,richi,gigemags,pierre1,westin,trevoga,dorothee,bastogne,25563o,brandon3,truegrit,krimml,iamgreat,servis,a112233,paulinka,azimuth,corperfmonsy,358hkyp,homerun1,dogbert1,eatmyass,cottage1,savina,baseball7,bigtex,gimmesum,asdcxz,lennon1,a159357,1bastard,413276191q,pngfilt,pchealth,netsnip,bodiroga,1matt,webtvs,ravers,adapters,siddis,mashamasha,coffee2,myhoney,anna1982,marcia1,fairchil,maniek,iloveluc,batmonh,wildon,bowie1,netnwlnk,fancy1,tom204,olga1976,vfif123,queens1,ajax01,lovess,mockba,icam4usb,triada,odinthor,rstlne,exciter,sundog,anchorat,girls69,nfnmzyrf,soloma,gti16v,shadowman,ottom,rataros,tonchin,vishal,chicken0,pornlo,christiaan,volante,likesit,mariupol,runfast,gbpltw123,missys,villevalo,kbpjxrf,ghibli,calla,cessna172,kinglear,dell11,swift1,walera,1cricket,pussy5,turbo911,tucke,maprchem56458,rosehill,thekiwi1,ygfxbkgt,mandarinka,98xa29,magnit,cjfrf,paswoord,grandam1,shenmue,leedsuni,hatrick,zagadka,angeldog,michaell,dance123,koichi,bballs,29palms,xanth,228822,ppppppp1,1kkkkk,1lllll,mynewbots,spurss,madmax1,224455,city1,mmmmmmm1,nnnnnnn1,biedronka,thebeatles,elessar,f14tomcat,jordan18,bobo123,ayi000,tedbear,86chevyx,user123,bobolink,maktub,elmer1,flyfishi,franco1,gandalf0,traxdata,david21,enlighte,dmitrij,beckys,1giants,flippe,12345678w,jossie,rugbyman,snowcat,rapeme,peanut11,gemeni,udders,techn9ne,armani1,chappie,war123,vakantie,maddawg,sewanee,jake5253,tautt1,anthony5,letterma,jimbo2,kmdtyjr,hextall,jessica6,amiga500,hotcunt,phoenix9,veronda,saqartvelo,scubas,sixer3,williamj,nightfal,shihan,melnikova,kosssss,handily,killer77,jhrl0821,march17,rushman,6gcf636i,metoyou,irina123,mine11,primus1,formatters,matthew5,infotech,gangster1,jordan45,moose69,kompas,motoxxx,greatwhi,cobra12,kirpich,weezer1,hello23,montse,tracy123,connecte,cjymrf,hemingwa,azreal,gundam00,mobila,boxman,slayers1,ravshan,june26,fktrcfylhjd,bermuda1,tylerd,maersk,qazwsx11,eybdthcbntn,ash123,camelo,kat123,backd00r,cheyenne1,1king,jerkin,tnt123,trabant,warhammer40k,rambos,punto,home77,pedrito,1frank,brille,guitarman,george13,rakas,tgbxtcrbq,flute1,bananas1,lovezp1314,thespot,postie,buster69,sexytime,twistys,zacharia,sportage,toccata,denver7,terry123,bogdanova,devil69,higgins1,whatluck,pele10,kkk666,jeffery1,1qayxsw2,riptide1,chevy11,munchy,lazer1,hooker1,ghfgjh,vergesse,playgrou,4077mash,gusev,humpin,oneputt,hydepark,monster9,tiger8,tangsoo,guy123,hesoyam1,uhtqneyu,thanku,lomond,ortezza,kronik,geetha,rabbit66,killas,qazxswe,alabaste,1234567890qwerty,capone1,andrea12,geral,beatbox,slutfuck,booyaka,jasmine7,ostsee,maestro1,beatme,tracey1,buster123,donaldduck,ironfish,happy6,konnichi,gintonic,momoney1,dugan1,today2,enkidu,destiny2,trim7gun,katuha,fractals,morganstanley,polkadot,gotime,prince11,204060,fifa2010,bobbyt,seemee,amanda10,airbrush,bigtitty,heidie,layla1,cotton1,5speed,fyfnjkmtdyf,flynavy,joxury8f,meeko,akuma,dudley1,flyboy1,moondog1,trotters,mariami,signin,chinna,legs11,pussy4,1s1h1e1f1,felici,optimus1,iluvu,marlins1,gavaec,balance1,glock40,london01,kokot,southwes,comfort1,sammy11,rockbottom,brianc,litebeer,homero,chopsuey,greenlan,charit,freecell,hampster,smalldog,viper12,blofeld,1234567890987654321,realsex,romann,cartman2,cjdthitycndj,nelly1,bmw528,zwezda,masterba,jeep99,turtl,america2,sunburst,sanyco,auntjudy,125wm,blue10,qwsazx,cartma,toby12,robbob,red222,ilovecock,losfix16,1explore,helge,vaz2114,whynotme,baba123,mugen,1qazwsxedc,albertjr,0101198,sextime,supras,nicolas2,wantsex,pussy6,checkm8,winam,24gordon,misterme,curlew,gbljhfcs,medtech,franzi,butthea,voivod,blackhat,egoiste,pjkeirf,maddog69,pakalolo,hockey4,igor1234,rouges,snowhite,homefree,sexfreak,acer12,dsmith,blessyou,199410,vfrcbvjd,falco02,belinda1,yaglasph,april21,groundho,jasmin1,nevergiveup,elvir,gborv526,c00kie,emma01,awesome2,larina,mike12345,maximu,anupam,bltynbabrfwbz,tanushka,sukkel,raptor22,josh12,schalke04,cosmodog,fuckyou8,busybee,198800,bijoux,frame1,blackmor,giveit,issmall,bear13,123-123,bladez,littlegirl,ultra123,fletch1,flashnet,loploprock,rkelly,12step,lukas1,littlewhore,cuntfinger,stinkyfinger,laurenc,198020,n7td4bjl,jackie69,camel123,ben1234,1gateway,adelheid,fatmike,thuglove,zzaaqq,chivas1,4815162342q,mamadou,nadano,james22,benwin,andrea99,rjirf,michou,abkbgg,d50gnn,aaazzz,a123654,blankman,booboo11,medicus,bigbone,197200,justine1,bendix,morphius,njhvjp,44mag,zsecyus56,goodbye1,nokiadermo,a333444,waratsea,4rzp8ab7,fevral,brillian,kirbys,minim,erathia,grazia,zxcvb1234,dukey,snaggle,poppi,hymen,1video,dune2000,jpthjdf,cvbn123,zcxfcnkbdfz,astonv,ginnie,316271,engine3,pr1ncess,64chevy,glass1,laotzu,hollyy,comicbooks,assasins,nuaddn9561,scottsda,hfcnfvfy,accobra,7777777z,werty123,metalhead,romanson,redsand,365214,shalo,arsenii,1989cc,sissi,duramax,382563,petera,414243,mamapap,jollymon,field1,fatgirl,janets,trompete,matchbox20,rambo2,nepenthe,441232,qwertyuiop10,bozo123,phezc419hv,romantika,lifestyl,pengui,decembre,demon6,panther6,444888,scanman,ghjcnjabkz,pachanga,buzzword,indianer,spiderman3,tony12,startre,frog1,fyutk,483422,tupacshakur,albert12,1drummer,bmw328i,green17,aerdna,invisibl,summer13,calimer,mustaine,lgnu9d,morefun,hesoyam123,escort1,scrapland,stargat,barabbas,dead13,545645,mexicali,sierr,gfhfpbn,gonchar,moonstafa,searock,counte,foster1,jayhawk1,floren,maremma,nastya2010,softball1,adaptec,halloo,barrabas,zxcasd123,hunny,mariana1,kafedra,freedom0,green420,vlad1234,method7,665566,tooting,hallo12,davinchi,conducto,medias,666444,invernes,madhatter,456asd,12345678i,687887,le33px,spring00,help123,bellybut,billy5,vitalik1,river123,gorila,bendis,power666,747200,footslav,acehigh,qazxswedc123,q1a1z1,richard9,peterburg,tabletop,gavrilov,123qwe1,kolosov,fredrau,run4fun,789056,jkbvgbflf,chitra,87654321q,steve22,wideopen,access88,surfe,tdfyutkbjy,impossib,kevin69,880888,cantina,887766,wxcvb,dontforg,qwer1209,asslicke,mamma123,indig,arkasha,scrapp,morelia,vehxbr,jones2,scratch1,cody11,cassie12,gerbera,dontgotm,underhil,maks2010,hollywood1,hanibal,elena2010,jason11,1010321,stewar,elaman,fireplug,goodby,sacrific,babyphat,bobcat12,bruce123,1233215,tony45,tiburo,love15,bmw750,wallstreet,2h0t4me,1346795,lamerz,munkee,134679q,granvill,1512198,armastus,aiden1,pipeutvj,g1234567,angeleyes,usmc1,102030q,putangina,brandnew,shadowfax,eagles12,1falcon,brianw,lokomoti,2022958,scooper,pegas,jabroni1,2121212,buffal,siffredi,wewiz,twotone,rosebudd,nightwis,carpet1,mickey2,2525252,sleddog,red333,jamesm,2797349,jeff12,onizuka,felixxxx,rf6666,fine1,ohlala,forplay,chicago5,muncho,scooby11,ptichka,johnnn,19851985p,dogphil3650,totenkopf,monitor2,macross7,3816778,dudder,semaj1,bounder,racerx1,5556633,7085506,ofclr278,brody1,7506751,nantucke,hedj2n4q,drew1,aessedai,trekbike,pussykat,samatron,imani,9124852,wiley1,dukenukem,iampurehaha2,9556035,obvious1,mccool24,apache64,kravchenko,justforf,basura,jamese,s0ccer,safado,darksta,surfer69,damian1,gjpbnbd,gunny1,wolley,sananton,zxcvbn123456,odt4p6sv8,sergei1,modem1,mansikka,zzzz1,rifraf,dima777,mary69,looking4,donttell,red100,ninjutsu,uaeuaeman,bigbri,brasco,queenas8151,demetri,angel007,bubbl,kolort,conny,antonia1,avtoritet,kaka22,kailayu,sassy2,wrongway,chevy3,1nascar,patriots1,chrisrey,mike99,sexy22,chkdsk,sd3utre7,padawan,a6pihd,doming,mesohorny,tamada,donatello,emma22,eather,susan69,pinky123,stud69,fatbitch,pilsbury,thc420,lovepuss,1creativ,golf1234,hurryup,1honda,huskerdu,marino1,gowron,girl1,fucktoy,gtnhjpfdjlcr,dkjfghdk,pinkfl,loreli,7777777s,donkeykong,rockytop,staples1,sone4ka,xxxjay,flywheel,toppdogg,bigbubba,aaa123456,2letmein,shavkat,paule,dlanor,adamas,0147852,aassaa,dixon1,bmw328,mother12,ilikepussy,holly2,tsmith,excaliber,fhutynbyf,nicole3,tulipan,emanue,flyvholm,currahee,godsgift,antonioj,torito,dinky1,sanna,yfcnzvjz,june14,anime123,123321456654,hanswurst,bandman,hello101,xxxyyy,chevy69,technica,tagada,arnol,v00d00,lilone,filles,drumandbass,dinamit,a1234a,eatmeat,elway07,inout,james6,dawid1,thewolf,diapason,yodaddy,qscwdv,fuckit1,liljoe,sloeber,simbacat,sascha1,qwe1234,1badger,prisca,angel17,gravedig,jakeyboy,longboard,truskawka,golfer11,pyramid7,highspee,pistola,theriver,hammer69,1packers,dannyd,alfonse,qwertgfdsa,11119999,basket1,ghjtrn,saralee,12inches,paolo1,zse4xdr5,taproot,sophieh6,grizzlie,hockey69,danang,biggums,hotbitch,5alive,beloved1,bluewave,dimon95,koketka,multiscan,littleb,leghorn,poker2,delite,skyfir,bigjake,persona1,amberdog,hannah12,derren,ziffle,1sarah,1assword,sparky01,seymur,tomtom1,123321qw,goskins,soccer19,luvbekki,bumhole,2balls,1muffin,borodin,monkey9,yfeiybrb,1alex,betmen,freder,nigger123,azizbek,gjkzrjdf,lilmike,1bigdadd,1rock,taganrog,snappy1,andrey1,kolonka,bunyan,gomango,vivia,clarkkent,satur,gaudeamus,mantaray,1month,whitehea,fargus,andrew99,ray123,redhawks,liza2009,qw12345,den12345,vfhnsyjdf,147258369a,mazepa,newyorke,1arsenal,hondas2000,demona,fordgt,steve12,birthday2,12457896,dickster,edcwsxqaz,sahalin,pantyman,skinny1,hubertus,cumshot1,chiro,kappaman,mark3434,canada12,lichking,bonkers1,ivan1985,sybase,valmet,doors1,deedlit,kyjelly,bdfysx,ford11,throatfuck,backwood,fylhsq,lalit,boss429,kotova,bricky,steveh,joshua19,kissa,imladris,star1234,lubimka,partyman,crazyd,tobias1,ilike69,imhome,whome,fourstar,scanner1,ujhjl312,anatoli,85bears,jimbo69,5678ytr,potapova,nokia7070,sunday1,kalleank,1996gta,refinnej,july1,molodec,nothanks,enigm,12play,sugardog,nhfkbdfkb,larousse,cannon1,144444,qazxcdew,stimorol,jhereg,spawn7,143000,fearme,hambur,merlin21,dobie,is3yeusc,partner1,dekal,varsha,478jfszk,flavi,hippo1,9hmlpyjd,july21,7imjfstw,lexxus,truelov,nokia5200,carlos6,anais,mudbone,anahit,taylorc,tashas,larkspur,animal2000,nibiru,jan123,miyvarxar,deflep,dolore,communit,ifoptfcor,laura2,anadrol,mamaliga,mitzi1,blue92,april15,matveev,kajlas,wowlook1,1flowers,shadow14,alucard1,1golf,bantha,scotlan,singapur,mark13,manchester1,telus01,superdav,jackoff1,madnes,bullnuts,world123,clitty,palmer1,david10,spider10,sargsyan,rattlers,david4,windows2,sony12,visigoth,qqqaaa,penfloor,cabledog,camilla1,natasha123,eagleman,softcore,bobrov,dietmar,divad,sss123,d1234567,tlbyjhju,1q1q1q1,paraiso,dav123,lfiekmrf,drachen,lzhan16889,tplate,gfghbrf,casio1,123boots1,123test,sys64738,heavymetal,andiamo,meduza,soarer,coco12,negrita,amigas,heavymet,bespin,1asdfghj,wharfrat,wetsex,tight1,janus1,sword123,ladeda,dragon98,austin2,atep1,jungle1,12345abcd,lexus300,pheonix1,alex1974,123qw123,137955,bigtim,shadow88,igor1994,goodjob,arzen,champ123,121ebay,changeme1,brooksie,frogman1,buldozer,morrowin,achim,trish1,lasse,festiva,bubbaman,scottb,kramit,august22,tyson123,passsword,oompah,al123456,fucking1,green45,noodle1,looking1,ashlynn,al1716,stang50,coco11,greese,bob111,brennan1,jasonj,1cherry,1q2345,1xxxxxxx,fifa2011,brondby,zachar1,satyam,easy1,magic7,1rainbow,cheezit,1eeeeeee,ashley123,assass1,amanda123,jerbear,1bbbbbb,azerty12,15975391,654321z,twinturb,onlyone1,denis1988,6846kg3r,jumbos,pennydog,dandelion,haileris,epervier,snoopy69,afrodite,oldpussy,green55,poopypan,verymuch,katyusha,recon7,mine69,tangos,contro,blowme2,jade1,skydive1,fiveiron,dimo4ka,bokser,stargirl,fordfocus,tigers2,platina,baseball11,raque,pimper,jawbreak,buster88,walter34,chucko,penchair,horizon1,thecure1,scc1975,adrianna1,kareta,duke12,krille,dumbfuck,cunt1,aldebaran,laverda,harumi,knopfler,pongo1,pfhbyf,dogman1,rossigno,1hardon,scarlets,nuggets1,ibelieve,akinfeev,xfhkbr,athene,falcon69,happie,billly,nitsua,fiocco,qwerty09,gizmo2,slava2,125690,doggy123,craigs,vader123,silkeborg,124365,peterm,123978,krakatoa,123699,123592,kgvebmqy,pensacol,d1d2d3,snowstor,goldenboy,gfg65h7,ev700,church1,orange11,g0dz1ll4,chester3,acheron,cynthi,hotshot1,jesuschris,motdepass,zymurgy,one2one,fietsbel,harryp,wisper,pookster,nn527hp,dolla,milkmaid,rustyboy,terrell1,epsilon1,lillian1,dale3,crhbgrf,maxsim,selecta,mamada,fatman1,ufkjxrf,shinchan,fuckuall,women1,000008,bossss,greta1,rbhjxrf,mamasboy,purple69,felicidade,sexy21,cathay,hunglow,splatt,kahless,shopping1,1gandalf,themis,delta7,moon69,blue24,parliame,mamma1,miyuki,2500hd,jackmeof,razer,rocker1,juvis123,noremac,boing747,9z5ve9rrcz,icewater,titania,alley1,moparman,christo1,oliver2,vinicius,tigerfan,chevyy,joshua99,doda99,matrixx,ekbnrf,jackfrost,viper01,kasia,cnfhsq,triton1,ssbt8ae2,rugby8,ramman,1lucky,barabash,ghtlfntkm,junaid,apeshit,enfant,kenpo1,shit12,007000,marge1,shadow10,qwerty789,richard8,vbitkm,lostboys,jesus4me,richard4,hifive,kolawole,damilola,prisma,paranoya,prince2,lisaann,happyness,cardss,methodma,supercop,a8kd47v5,gamgee,polly123,irene1,number8,hoyasaxa,1digital,matthew0,dclxvi,lisica,roy123,2468013579,sparda,queball,vaffanculo,pass1wor,repmvbx,999666333,freedom8,botanik,777555333,marcos1,lubimaya,flash2,einstei,08080,123456789j,159951159,159357123,carrot1,alina1995,sanjos,dilara,mustang67,wisteria,jhnjgtl12,98766789,darksun,arxangel,87062134,creativ1,malyshka,fuckthemall,barsic,rocksta,2big4u,5nizza,genesis2,romance1,ofcourse,1horse,latenite,cubana,sactown,789456123a,milliona,61808861,57699434,imperia,bubba11,yellow3,change12,55495746,flappy,jimbo123,19372846,19380018,cutlass1,craig123,klepto,beagle1,solus,51502112,pasha1,19822891,46466452,19855891,petshop,nikolaevna,119966,nokia6131,evenpar,hoosier1,contrasena,jawa350,gonzo123,mouse2,115511,eetfuk,gfhfvgfvgfv,1crystal,sofaking,coyote1,kwiatuszek,fhrflbq,valeria1,anthro,0123654789,alltheway,zoltar,maasikas,wildchil,fredonia,earlgrey,gtnhjczy,matrix123,solid1,slavko,12monkeys,fjdksl,inter1,nokia6500,59382113kevinp,spuddy,cachero,coorslit,password!,kiba1z,karizma,vova1994,chicony,english1,bondra12,1rocket,hunden,jimbob1,zpflhjn1,th0mas,deuce22,meatwad,fatfree,congas,sambora,cooper2,janne,clancy1,stonie,busta,kamaz,speedy2,jasmine3,fahayek,arsenal0,beerss,trixie1,boobs69,luansantana,toadman,control2,ewing33,maxcat,mama1964,diamond4,tabaco,joshua0,piper2,music101,guybrush,reynald,pincher,katiebug,starrs,pimphard,frontosa,alex97,cootie,clockwor,belluno,skyeseth,booty69,chaparra,boochie,green4,bobcat1,havok,saraann,pipeman,aekdb,jumpshot,wintermu,chaika,1chester,rjnjatq,emokid,reset1,regal1,j0shua,134679a,asmodey,sarahh,zapidoo,ciccione,sosexy,beckham23,hornets1,alex1971,delerium,manageme,connor11,1rabbit,sane4ek,caseyboy,cbljhjdf,redsox20,tttttt99,haustool,ander,pantera6,passwd1,journey1,9988776655,blue135,writerspace,xiaoyua123,justice2,niagra,cassis,scorpius,bpgjldsgjldthnf,gamemaster,bloody1,retrac,stabbin,toybox,fight1,ytpyf.,glasha,va2001,taylor11,shameles,ladylove,10078,karmann,rodeos,eintritt,lanesra,tobasco,jnrhjqcz,navyman,pablit,leshka,jessica3,123vika,alena1,platinu,ilford,storm7,undernet,sasha777,1legend,anna2002,kanmax1994,porkpie,thunder0,gundog,pallina,easypass,duck1,supermom,roach1,twincam,14028,tiziano,qwerty32,123654789a,evropa,shampoo1,yfxfkmybr,cubby1,tsunami1,fktrcttdf,yasacrac,17098,happyhap,bullrun,rodder,oaktown,holde,isbest,taylor9,reeper,hammer11,julias,rolltide1,compaq123,fourx4,subzero1,hockey9,7mary3,busines,ybrbnjcbr,wagoneer,danniash,portishead,digitex,alex1981,david11,infidel,1snoopy,free30,jaden,tonto1,redcar27,footie,moskwa,thomas21,hammer12,burzum,cosmo123,50000,burltree,54343,54354,vwpassat,jack5225,cougars1,burlpony,blackhorse,alegna,petert,katemoss,ram123,nels0n,ferrina,angel77,cstock,1christi,dave55,abc123a,alex1975,av626ss,flipoff,folgore,max1998,science1,si711ne,yams7,wifey1,sveiks,cabin1,volodia,ox3ford,cartagen,platini,picture1,sparkle1,tiedomi,service321,wooody,christi1,gnasher,brunob,hammie,iraffert,bot2010,dtcyeirf,1234567890p,cooper11,alcoholi,savchenko,adam01,chelsea5,niewiem,icebear,lllooottt,ilovedick,sweetpus,money8,cookie13,rfnthbyf1988,booboo2,angus123,blockbus,david9,chica1,nazaret,samsung9,smile4u,daystar,skinnass,john10,thegirl,sexybeas,wasdwasd1,sigge1,1qa2ws3ed4rf5tg,czarny,ripley1,chris5,ashley19,anitha,pokerman,prevert,trfnthby,tony69,georgia2,stoppedb,qwertyuiop12345,miniclip,franky1,durdom,cabbages,1234567890o,delta5,liudmila,nhfycajhvths,court1,josiew,abcd1,doghead,diman,masiania,songline,boogle,triston,deepika,sexy4me,grapple,spacebal,ebonee,winter0,smokewee,nargiza,dragonla,sassys,andy2000,menards,yoshio,massive1,suckmy1k,passat99,sexybo,nastya1996,isdead,stratcat,hokuto,infix,pidoras,daffyduck,cumhard,baldeagl,kerberos,yardman,shibainu,guitare,cqub6553,tommyy,bk.irf,bigfoo,hecto,july27,james4,biggus,esbjerg,isgod,1irish,phenmarr,jamaic,roma1990,diamond0,yjdbrjd,girls4me,tampa1,kabuto,vaduz,hanse,spieng,dianochka,csm101,lorna1,ogoshi,plhy6hql,2wsx4rfv,cameron0,adebayo,oleg1996,sharipov,bouboule,hollister1,frogss,yeababy,kablam,adelante,memem,howies,thering,cecilia1,onetwo12,ojp123456,jordan9,msorcloledbr,neveraga,evh5150,redwin,1august,canno,1mercede,moody1,mudbug,chessmas,tiikeri,stickdaddy77,alex15,kvartira,7654321a,lollol123,qwaszxedc,algore,solana,vfhbyfvfhbyf,blue72,misha1111,smoke20,junior13,mogli,threee,shannon2,fuckmylife,kevinh,saransk,karenw,isolde,sekirarr,orion123,thomas0,debra1,laketaho,alondra,curiva,jazz1234,1tigers,jambos,lickme2,suomi,gandalf7,028526,zygote,brett123,br1ttany,supafly,159000,kingrat,luton1,cool-ca,bocman,thomasd,skiller,katter,mama777,chanc,tomass,1rachel,oldno7,rfpfyjdf,bigkev,yelrah,primas,osito,kipper1,msvcr71,bigboy11,thesun,noskcaj,chicc,sonja1,lozinka,mobile1,1vader,ummagumma,waves1,punter12,tubgtn,server1,irina1991,magic69,dak001,pandemonium,dead1,berlingo,cherrypi,1montana,lohotron,chicklet,asdfgh123456,stepside,ikmvw103,icebaby,trillium,1sucks,ukrnet,glock9,ab12345,thepower,robert8,thugstools,hockey13,buffon,livefree,sexpics,dessar,ja0000,rosenrot,james10,1fish,svoloch,mykitty,muffin11,evbukb,shwing,artem1992,andrey1992,sheldon1,passpage,nikita99,fubar123,vannasx,eight888,marial,max2010,express2,violentj,2ykn5ccf,spartan11,brenda69,jackiech,abagail,robin2,grass1,andy76,bell1,taison,superme,vika1995,xtr451,fred20,89032073168,denis1984,2000jeep,weetabix,199020,daxter,tevion,panther8,h9iymxmc,bigrig,kalambur,tsalagi,12213443,racecar02,jeffrey4,nataxa,bigsam,purgator,acuracl,troutbum,potsmoke,jimmyz,manutd1,nytimes,pureevil,bearss,cool22,dragonage,nodnarb,dbrbyu,4seasons,freude,elric1,werule,hockey14,12758698,corkie,yeahright,blademan,tafkap,clave,liziko,hofner,jeffhardy,nurich,runne,stanisla,lucy1,monk3y,forzaroma,eric99,bonaire,blackwoo,fengshui,1qaz0okm,newmoney,pimpin69,07078,anonymer,laptop1,cherry12,ace111,salsa1,wilbur1,doom12,diablo23,jgtxzbhr,under1,honda01,breadfan,megan2,juancarlos,stratus1,ackbar,love5683,happytim,lambert1,cbljhtyrj,komarov,spam69,nfhtkrf,brownn,sarmat,ifiksr,spike69,hoangen,angelz,economia,tanzen,avogadro,1vampire,spanners,mazdarx,queequeg,oriana,hershil,sulaco,joseph11,8seconds,aquariu,cumberla,heather9,anthony8,burton12,crystal0,maria3,qazwsxc,snow123,notgood,198520,raindog,heehaw,consulta,dasein,miller01,cthulhu1,dukenuke,iubire,baytown,hatebree,198505,sistem,lena12,welcome01,maraca,middleto,sindhu,mitsou,phoenix5,vovan,donaldo,dylandog,domovoy,lauren12,byrjuybnj,123llll,stillers,sanchin,tulpan,smallvill,1mmmmm,patti1,folgers,mike31,colts18,123456rrr,njkmrjz,phoenix0,biene,ironcity,kasperok,password22,fitnes,matthew6,spotligh,bujhm123,tommycat,hazel5,guitar11,145678,vfcmrf,compass1,willee,1barney,jack2000,littleminge,shemp,derrek,xxx12345,littlefuck,spuds1,karolinka,camneely,qwertyu123,142500,brandon00,munson15,falcon3,passssap,z3cn2erv,goahead,baggio10,141592,denali1,37kazoo,copernic,123456789asd,orange88,bravada,rush211,197700,pablo123,uptheass,samsam1,demoman,mattylad10,heydude,mister2,werken,13467985,marantz,a22222,f1f2f3f4,fm12mn12,gerasimova,burrito1,sony1,glenny,baldeagle,rmfidd,fenomen,verbati,forgetme,5element,wer138,chanel1,ooicu812,10293847qp,minicooper,chispa,myturn,deisel,vthrehbq,boredboi4u,filatova,anabe,poiuyt1,barmalei,yyyy1,fourkids,naumenko,bangbros,pornclub,okaykk,euclid90,warrior3,kornet,palevo,patatina,gocart,antanta,jed1054,clock1,111111w,dewars,mankind1,peugeot406,liten,tahira,howlin,naumov,rmracing,corone,cunthole,passit,rock69,jaguarxj,bumsen,197101,sweet2,197010,whitecat,sawadee,money100,yfhrjnbrb,andyboy,9085603566,trace1,fagget,robot1,angel20,6yhn7ujm,specialinsta,kareena,newblood,chingada,boobies2,bugger1,squad51,133andre,call06,ashes1,ilovelucy,success2,kotton,cavalla,philou,deebee,theband,nine09,artefact,196100,kkkkkkk1,nikolay9,onelov,basia,emilyann,sadman,fkrjujkbr,teamomuch,david777,padrino,money21,firdaus,orion3,chevy01,albatro,erdfcv,2legit,sarah7,torock,kevinn,holio,soloy,enron714,starfleet,qwer11,neverman,doctorwh,lucy11,dino12,trinity7,seatleon,o123456,pimpman,1asdfgh,snakebit,chancho,prorok,bleacher,ramire,darkseed,warhorse,michael123,1spanky,1hotdog,34erdfcv,n0th1ng,dimanche,repmvbyf,michaeljackson,login1,icequeen,toshiro,sperme,racer2,veget,birthday26,daniel9,lbvekmrf,charlus,bryan123,wspanic,schreibe,1andonly,dgoins,kewell,apollo12,egypt1,fernie,tiger21,aa123456789,blowj,spandau,bisquit,12345678d,deadmau5,fredie,311420,happyface,samant,gruppa,filmstar,andrew17,bakesale,sexy01,justlook,cbarkley,paul11,bloodred,rideme,birdbath,nfkbcvfy,jaxson,sirius1,kristof,virgos,nimrod1,hardc0re,killerbee,1abcdef,pitcher1,justonce,vlada,dakota99,vespucci,wpass,outside1,puertori,rfvbkf,teamlosi,vgfun2,porol777,empire11,20091989q,jasong,webuivalidat,escrima,lakers08,trigger2,addpass,342500,mongini,dfhtybr,horndogg,palermo1,136900,babyblu,alla98,dasha2010,jkelly,kernow,yfnecz,rockhopper,toeman,tlaloc,silver77,dave01,kevinr,1234567887654321,135642,me2you,8096468644q,remmus,spider7,jamesa,jilly,samba1,drongo,770129ji,supercat,juntas,tema1234,esthe,1234567892000,drew11,qazqaz123,beegees,blome,rattrace,howhigh,tallboy,rufus2,sunny2,sou812,miller12,indiana7,irnbru,patch123,letmeon,welcome5,nabisco,9hotpoin,hpvteb,lovinit,stormin,assmonke,trill,atlanti,money1234,cubsfan,mello1,stars2,ueptkm,agate,dannym88,lover123,wordz,worldnet,julemand,chaser1,s12345678,pissword,cinemax,woodchuc,point1,hotchkis,packers2,bananana,kalender,420666,penguin8,awo8rx3wa8t,hoppie,metlife,ilovemyfamily,weihnachtsbau,pudding1,luckystr,scully1,fatboy1,amizade,dedham,jahbless,blaat,surrende,****er,1panties,bigasses,ghjuhfvbcn,asshole123,dfktyrb,likeme,nickers,plastik,hektor,deeman,muchacha,cerebro,santana5,testdrive,dracula1,canalc,l1750sq,savannah1,murena,1inside,pokemon00,1iiiiiii,jordan20,sexual1,mailliw,calipso,014702580369,1zzzzzz,1jjjjjj,break1,15253545,yomama1,katinka,kevin11,1ffffff,martijn,sslazio,daniel5,porno2,nosmas,leolion,jscript,15975312,pundai,kelli1,kkkddd,obafgkm,marmaris,lilmama,london123,rfhfnt,elgordo,talk87,daniel7,thesims3,444111,bishkek,afrika2002,toby22,1speedy,daishi,2children,afroman,qqqqwwww,oldskool,hawai,v55555,syndicat,pukimak,fanatik,tiger5,parker01,bri5kev6,timexx,wartburg,love55,ecosse,yelena03,madinina,highway1,uhfdbwfgf,karuna,buhjvfybz,wallie,46and2,khalif,europ,qaz123wsx456,bobbybob,wolfone,falloutboy,manning18,scuba10,schnuff,ihateyou1,lindam,sara123,popcor,fallengun,divine1,montblanc,qwerty8,rooney10,roadrage,bertie1,latinus,lexusis,rhfvfnjhcr,opelgt,hitme,agatka,1yamaha,dmfxhkju,imaloser,michell1,sb211st,silver22,lockedup,andrew9,monica01,sassycat,dsobwick,tinroof,ctrhtnyj,bultaco,rhfcyjzhcr,aaaassss,14ss88,joanne1,momanddad,ahjkjdf,yelhsa,zipdrive,telescop,500600,1sexsex,facial1,motaro,511647,stoner1,temujin,elephant1,greatman,honey69,kociak,ukqmwhj6,altezza,cumquat,zippos,kontiki,123max,altec1,bibigon,tontos,qazsew,nopasaran,militar,supratt,oglala,kobayash,agathe,yawetag,dogs1,cfiekmrf,megan123,jamesdea,porosenok,tiger23,berger1,hello11,seemann,stunner1,walker2,imissu,jabari,minfd,lollol12,hjvfy,1-oct,stjohns,2278124q,123456789qwer,alex1983,glowworm,chicho,mallards,bluedevil,explorer1,543211,casita,1time,lachesis,alex1982,airborn1,dubesor,changa,lizzie1,captaink,socool,bidule,march23,1861brr,k.ljxrf,watchout,fotze,1brian,keksa2,aaaa1122,matrim,providian,privado,dreame,merry1,aregdone,davidt,nounour,twenty2,play2win,artcast2,zontik,552255,shit1,sluggy,552861,dr8350,brooze,alpha69,thunder6,kamelia2011,caleb123,mmxxmm,jamesh,lfybkjd,125267,125000,124536,bliss1,dddsss,indonesi,bob69,123888,tgkbxfgy,gerar,themack,hijodeputa,good4now,ddd123,clk430,kalash,tolkien1,132forever,blackb,whatis,s1s2s3s4,lolkin09,yamahar,48n25rcc,djtiesto,111222333444555,bigbull,blade55,coolbree,kelse,ichwill,yamaha12,sakic,bebeto,katoom,donke,sahar,wahine,645202,god666,berni,starwood,june15,sonoio,time123,llbean,deadsoul,lazarev,cdtnf,ksyusha,madarchod,technik,jamesy,4speed,tenorsax,legshow,yoshi1,chrisbl,44e3ebda,trafalga,heather7,serafima,favorite4,havefun1,wolve,55555r,james13,nosredna,bodean,jlettier,borracho,mickael,marinus,brutu,sweet666,kiborg,rollrock,jackson6,macross1,ousooner,9085084232,takeme,123qwaszx,firedept,vfrfhjd,jackfros,123456789000,briane,cookie11,baby22,bobby18,gromova,systemofadown,martin01,silver01,pimaou,darthmaul,hijinx,commo,chech,skyman,sunse,2vrd6,vladimirovna,uthvfybz,nicole01,kreker,bobo1,v123456789,erxtgb,meetoo,drakcap,vfvf12,misiek1,butane,network2,flyers99,riogrand,jennyk,e12345,spinne,avalon11,lovejone,studen,maint,porsche2,qwerty100,chamberl,bluedog1,sungam,just4u,andrew23,summer22,ludic,musiclover,aguil,beardog1,libertin,pippo1,joselit,patito,bigberth,digler,sydnee,jockstra,poopo,jas4an,nastya123,profil,fuesse,default1,titan2,mendoz,kpcofgs,anamika,brillo021,bomberman,guitar69,latching,69pussy,blues2,phelge,ninja123,m7n56xo,qwertasd,alex1976,cunningh,estrela,gladbach,marillion,mike2000,258046,bypop,muffinman,kd5396b,zeratul,djkxbwf,john77,sigma2,1linda,selur,reppep,quartz1,teen1,freeclus,spook1,kudos4ever,clitring,sexiness,blumpkin,macbook,tileman,centra,escaflowne,pentable,shant,grappa,zverev,1albert,lommerse,coffee11,777123,polkilo,muppet1,alex74,lkjhgfdsazx,olesica,april14,ba25547,souths,jasmi,arashi,smile2,2401pedro,mybabe,alex111,quintain,pimp1,tdeir8b2,makenna,122333444455555,%e2%82%ac,tootsie1,pass111,zaqxsw123,gkfdfybt,cnfnbcnbrf,usermane,iloveyou12,hard69,osasuna,firegod,arvind,babochka,kiss123,cookie123,julie123,kamakazi,dylan2,223355,tanguy,nbhtqa,tigger13,tubby1,makavel,asdflkj,sambo1,mononoke,mickeys,gayguy,win123,green33,wcrfxtvgbjy,bigsmall,1newlife,clove,babyfac,bigwaves,mama1970,shockwav,1friday,bassey,yarddog,codered1,victory7,bigrick,kracker,gulfstre,chris200,sunbanna,bertuzzi,begemotik,kuolema,pondus,destinee,123456789zz,abiodun,flopsy,amadeusptfcor,geronim,yggdrasi,contex,daniel6,suck1,adonis1,moorea,el345612,f22raptor,moviebuf,raunchy,6043dkf,zxcvbnm123456789,eric11,deadmoin,ratiug,nosliw,fannies,danno,888889,blank1,mikey2,gullit,thor99,mamiya,ollieb,thoth,dagger1,websolutionssu,bonker,prive,1346798520,03038,q1234q,mommy2,contax,zhipo,gwendoli,gothic1,1234562000,lovedick,gibso,digital2,space199,b26354,987654123,golive,serious1,pivkoo,better1,824358553,794613258,nata1980,logout,fishpond,buttss,squidly,good4me,redsox19,jhonny,zse45rdx,matrixxx,honey12,ramina,213546879,motzart,fall99,newspape,killit,gimpy,photowiz,olesja,thebus,marco123,147852963,bedbug,147369258,hellbound,gjgjxrf,123987456,lovehurt,five55,hammer01,1234554321a,alina2011,peppino,ang238,questor,112358132,alina1994,alina1998,money77,bobjones,aigerim,cressida,madalena,420smoke,tinchair,raven13,mooser,mauric,lovebu,adidas69,krypton1,1111112,loveline,divin,voshod,michaelm,cocotte,gbkbuhbv,76689295,kellyj,rhonda1,sweetu70,steamforums,geeque,nothere,124c41,quixotic,steam181,1169900,rfcgthcrbq,rfvbkm,sexstuff,1231230,djctvm,rockstar1,fulhamfc,bhecbr,rfntyf,quiksilv,56836803,jedimaster,pangit,gfhjkm777,tocool,1237654,stella12,55378008,19216811,potte,fender12,mortalkombat,ball1,nudegirl,palace22,rattrap,debeers,lickpussy,jimmy6,not4u2c,wert12,bigjuggs,sadomaso,1357924,312mas,laser123,arminia,branford,coastie,mrmojo,19801982,scott11,banaan123,ingres,300zxtt,hooters6,sweeties,19821983,19831985,19833891,sinnfein,welcome4,winner69,killerman,tachyon,tigre1,nymets1,kangol,martinet,sooty1,19921993,789qwe,harsingh,1597535,thecount,phantom3,36985214,lukas123,117711,pakistan1,madmax11,willow01,19932916,fucker12,flhrci,opelagila,theword,ashley24,tigger3,crazyj,rapide,deadfish,allana,31359092,sasha1993,sanders2,discman,zaq!2wsx,boilerma,mickey69,jamesg,babybo,jackson9,orion7,alina2010,indien,breeze1,atease,warspite,bazongaz,1celtic,asguard,mygal,fitzgera,1secret,duke33,cyklone,dipascuc,potapov,1escobar2,c0l0rad0,kki177hk,1little,macondo,victoriya,peter7,red666,winston6,kl?benhavn,muneca,jackme,jennan,happylife,am4h39d8nh,bodybuil,201980,dutchie,biggame,lapo4ka,rauchen,black10,flaquit,water12,31021364,command2,lainth88,mazdamx5,typhon,colin123,rcfhlfc,qwaszx11,g0away,ramir,diesirae,hacked1,cessna1,woodfish,enigma2,pqnr67w5,odgez8j3,grisou,hiheels,5gtgiaxm,2580258,ohotnik,transits,quackers,serjik,makenzie,mdmgatew,bryana,superman12,melly,lokit,thegod,slickone,fun4all,netpass,penhorse,1cooper,nsync,asdasd22,otherside,honeydog,herbie1,chiphi,proghouse,l0nd0n,shagg,select1,frost1996,casper123,countr,magichat,greatzyo,jyothi,3bears,thefly,nikkita,fgjcnjk,nitros,hornys,san123,lightspe,maslova,kimber1,newyork2,spammm,mikejone,pumpk1n,bruiser1,bacons,prelude9,boodie,dragon4,kenneth2,love98,power5,yodude,pumba,thinline,blue30,sexxybj,2dumb2live,matt21,forsale,1carolin,innova,ilikeporn,rbgtkjd,a1s2d3f,wu9942,ruffus,blackboo,qwerty999,draco1,marcelin,hideki,gendalf,trevon,saraha,cartmen,yjhbkmcr,time2go,fanclub,ladder1,chinni,6942987,united99,lindac,quadra,paolit,mainstre,beano002,lincoln7,bellend,anomie,8520456,bangalor,goodstuff,chernov,stepashka,gulla,mike007,frasse,harley03,omnislash,8538622,maryjan,sasha2011,gineok,8807031,hornier,gopinath,princesit,bdr529,godown,bosslady,hakaone,1qwe2,madman1,joshua11,lovegame,bayamon,jedi01,stupid12,sport123,aaa666,tony44,collect1,charliem,chimaira,cx18ka,trrim777,chuckd,thedream,redsox99,goodmorning,delta88,iloveyou11,newlife2,figvam,chicago3,jasonk,12qwer,9875321,lestat1,satcom,conditio,capri50,sayaka,9933162,trunks1,chinga,snooch,alexand1,findus,poekie,cfdbyf,kevind,mike1969,fire13,leftie,bigtuna,chinnu,silence1,celos1,blackdra,alex24,gfgfif,2boobs,happy8,enolagay,sataniv1993,turner1,dylans,peugeo,sasha1994,hoppel,conno,moonshot,santa234,meister1,008800,hanako,tree123,qweras,gfitymrf,reggie31,august29,supert,joshua10,akademia,gbljhfc,zorro123,nathalia,redsox12,hfpdjl,mishmash,nokiae51,nyyankees,tu190022,strongbo,none1,not4u2no,katie2,popart,harlequi,santan,michal1,1therock,screwu,csyekmrf,olemiss1,tyrese,hoople,sunshin1,cucina,starbase,topshelf,fostex,california1,castle1,symantec,pippolo,babare,turntabl,1angela,moo123,ipvteb,gogolf,alex88,cycle1,maxie1,phase2,selhurst,furnitur,samfox,fromvermine,shaq34,gators96,captain2,delonge,tomatoe,bisous,zxcvbnma,glacius,pineapple1,cannelle,ganibal,mko09ijn,paraklast1974,hobbes12,petty43,artema,junior8,mylover,1234567890d,fatal1ty,prostreet,peruan,10020,nadya,caution1,marocas,chanel5,summer08,metal123,111lox,scrapy,thatguy,eddie666,washingto,yannis,minnesota_hp,lucky4,playboy6,naumova,azzurro,patat,dale33,pa55wd,speedster,zemanova,saraht,newto,tony22,qscesz,arkady,1oliver,death6,vkfwx046,antiflag,stangs,jzf7qf2e,brianp,fozzy,cody123,startrek1,yoda123,murciela,trabajo,lvbnhbtdf,canario,fliper,adroit,henry5,goducks,papirus,alskdj,soccer6,88mike,gogetter,tanelorn,donking,marky1,leedsu,badmofo,al1916,wetdog,akmaral,pallet,april24,killer00,nesterova,rugby123,coffee12,browseui,ralliart,paigow,calgary1,armyman,vtldtltd,frodo2,frxtgb,iambigal,benno,jaytee,2hot4you,askar,bigtee,brentwoo,palladin,eddie2,al1916w,horosho,entrada,ilovetits,venture1,dragon19,jayde,chuvak,jamesl,fzr600,brandon8,vjqvbh,snowbal,snatch1,bg6njokf,pudder,karolin,candoo,pfuflrf,satchel1,manteca,khongbiet,critter1,partridg,skyclad,bigdon,ginger69,brave1,anthony4,spinnake,chinadol,passout,cochino,nipples1,15058,lopesk,sixflags,lloo999,parkhead,breakdance,cia123,fidodido,yuitre12,fooey,artem1995,gayathri,medin,nondriversig,l12345,bravo7,happy13,kazuya,camster,alex1998,luckyy,zipcode,dizzle,boating1,opusone,newpassw,movies23,kamikazi,zapato,bart316,cowboys0,corsair1,kingshit,hotdog12,rolyat,h200svrm,qwerty4,boofer,rhtyltkm,chris999,vaz21074,simferopol,pitboss,love3,britania,tanyshka,brause,123qwerty123,abeille,moscow1,ilkaev,manut,process1,inetcfg,dragon05,fortknox,castill,rynner,mrmike,koalas,jeebus,stockpor,longman,juanpabl,caiman,roleplay,jeremi,26058,prodojo,002200,magical1,black5,bvlgari,doogie1,cbhtqa,mahina,a1s2d3f4g5h6,jblpro,usmc01,bismilah,guitar01,april9,santana1,1234aa,monkey14,sorokin,evan1,doohan,animalsex,pfqxtyjr,dimitry,catchme,chello,silverch,glock45,dogleg,litespee,nirvana9,peyton18,alydar,warhamer,iluvme,sig229,minotavr,lobzik,jack23,bushwack,onlin,football123,joshua5,federov,winter2,bigmax,fufnfrhbcnb,hfpldfnhb,1dakota,f56307,chipmonk,4nick8,praline,vbhjh123,king11,22tango,gemini12,street1,77879,doodlebu,homyak,165432,chuluthu,trixi,karlito,salom,reisen,cdtnkzxjr,pookie11,tremendo,shazaam,welcome0,00000ty,peewee51,pizzle,gilead,bydand,sarvar,upskirt,legends1,freeway1,teenfuck,ranger9,darkfire,dfymrf,hunt0802,justme1,buffy1ma,1harry,671fsa75yt,burrfoot,budster,pa437tu,jimmyp,alina2006,malacon,charlize,elway1,free12,summer02,gadina,manara,gomer1,1cassie,sanja,kisulya,money3,pujols,ford50,midiland,turga,orange6,demetriu,freakboy,orosie1,radio123,open12,vfufpby,mustek,chris33,animes,meiling,nthtvjr,jasmine9,gfdkjd,oligarh,marimar,chicago9,.kzirf,bugssgub,samuraix,jackie01,pimpjuic,macdad,cagiva,vernost,willyboy,fynjyjdf,tabby1,privet123,torres9,retype,blueroom,raven11,q12we3,alex1989,bringiton,ridered,kareltje,ow8jtcs8t,ciccia,goniners,countryb,24688642,covingto,24861793,beyblade,vikin,badboyz,wlafiga,walstib,mirand,needajob,chloes,balaton,kbpfdtnf,freyja,bond9007,gabriel12,stormbri,hollage,love4eve,fenomeno,darknite,dragstar,kyle123,milfhunter,ma123123123,samia,ghislain,enrique1,ferien12,xjy6721,natalie2,reglisse,wilson2,wesker,rosebud7,amazon1,robertr,roykeane,xtcnth,mamatata,crazyc,mikie,savanah,blowjob69,jackie2,forty1,1coffee,fhbyjxrf,bubbah,goteam,hackedit,risky1,logoff,h397pnvr,buck13,robert23,bronc,st123st,godflesh,pornog,iamking,cisco69,septiembr,dale38,zhongguo,tibbar,panther9,buffa1,bigjohn1,mypuppy,vehvfycr,april16,shippo,fire1234,green15,q123123,gungadin,steveg,olivier1,chinaski,magnoli,faithy,storm12,toadfrog,paul99,78791,august20,automati,squirtle,cheezy,positano,burbon,nunya,llebpmac,kimmi,turtle2,alan123,prokuror,violin1,durex,pussygal,visionar,trick1,chicken6,29024,plowboy,rfybreks,imbue,sasha13,wagner1,vitalogy,cfymrf,thepro,26028,gorbunov,dvdcom,letmein5,duder,fastfun,pronin,libra1,conner1,harley20,stinker1,20068,20038,amitech,syoung,dugway,18068,welcome7,jimmypag,anastaci,kafka1,pfhfnecnhf,catsss,campus100,shamal,nacho1,fire12,vikings2,brasil1,rangerover,mohamma,peresvet,14058,cocomo,aliona,14038,qwaser,vikes,cbkmdf,skyblue1,ou81234,goodlove,dfkmltvfh,108888,roamer,pinky2,static1,zxcv4321,barmen,rock22,shelby2,morgans,1junior,pasword1,logjam,fifty5,nhfrnjhbcn,chaddy,philli,nemesis2,ingenier,djkrjd,ranger3,aikman8,knothead,daddy69,love007,vsythb,ford350,tiger00,renrut,owen11,energy12,march14,alena123,robert19,carisma,orange22,murphy11,podarok,prozak,kfgeirf,wolf13,lydia1,shazza,parasha,akimov,tobbie,pilote,heather4,baster,leones,gznfxjr,megama,987654321g,bullgod,boxster1,minkey,wombats,vergil,colegiata,lincol,smoothe,pride1,carwash1,latrell,bowling3,fylhtq123,pickwick,eider,bubblebox,bunnies1,loquit,slipper1,nutsac,purina,xtutdfhf,plokiju,1qazxs,uhjpysq,zxcvbasdfg,enjoy1,1pumpkin,phantom7,mama22,swordsma,wonderbr,dogdays,milker,u23456,silvan,dfkthbr,slagelse,yeahman,twothree,boston11,wolf100,dannyg,troll1,fynjy123,ghbcnfd,bftest,ballsdeep,bobbyorr,alphasig,cccdemo,fire123,norwest,claire2,august10,lth1108,problemas,sapito,alex06,1rusty,maccom,goirish1,ohyes,bxdumb,nabila,boobear1,rabbit69,princip,alexsander,travail,chantal1,dogggy,greenpea,diablo69,alex2009,bergen09,petticoa,classe,ceilidh,vlad2011,kamakiri,lucidity,qaz321,chileno,cexfhf,99ranger,mcitra,estoppel,volvos60,carter80,webpass,temp12,touareg,fcgbhby,bubba8,sunitha,200190ru,bitch2,shadow23,iluvit,nicole0,ruben1,nikki69,butttt,shocker1,souschef,lopotok01,kantot,corsano,cfnfyf,riverat,makalu,swapna,all4u9,cdtnkfy,ntktgepbr,ronaldo99,thomasj,bmw540i,chrisw,boomba,open321,z1x2c3v4b5n6m7,gaviota,iceman44,frosya,chris100,chris24,cosette,clearwat,micael,boogyman,pussy9,camus1,chumpy,heccrbq,konoplya,chester8,scooter5,ghjgfufylf,giotto,koolkat,zero000,bonita1,ckflrbq,j1964,mandog,18n28n24a,renob,head1,shergar,ringo123,tanita,sex4free,johnny12,halberd,reddevils,biolog,dillinge,fatb0y,c00per,hyperlit,wallace2,spears1,vitamine,buheirf,sloboda,alkash,mooman,marion1,arsenal7,sunder,nokia5610,edifier,pippone,fyfnjkmtdbx,fujimo,pepsi12,kulikova,bolat,duetto,daimon,maddog01,timoshka,ezmoney,desdemon,chesters,aiden,hugues,patrick5,aikman08,robert4,roenick,nyranger,writer1,36169544,foxmulder,118801,kutter,shashank,jamjar,118811,119955,aspirina,dinkus,1sailor,nalgene,19891959,snarf,allie1,cracky,resipsa,45678912,kemerovo,19841989,netware1,alhimik,19801984,nicole123,19761977,51501984,malaka1,montella,peachfuz,jethro1,cypress1,henkie,holdon,esmith,55443322,1friend,quique,bandicoot,statistika,great123,death13,ucht36,master4,67899876,bobsmith,nikko1,jr1234,hillary1,78978978,rsturbo,lzlzdfcz,bloodlust,shadow00,skagen,bambina,yummies,88887777,91328378,matthew4,itdoes,98256518,102938475,alina2002,123123789,fubared,dannys,123456321,nikifor,suck69,newmexico,scubaman,rhbcnb,fifnfy,puffdadd,159357852,dtheyxbr,theman22,212009164,prohor,shirle,nji90okm,newmedia,goose5,roma1995,letssee,iceman11,aksana,wirenut,pimpdady,1212312121,tamplier,pelican1,domodedovo,1928374655,fiction6,duckpond,ybrecz,thwack,onetwo34,gunsmith,murphydo,fallout1,spectre1,jabberwo,jgjesq,turbo6,bobo12,redryder,blackpus,elena1971,danilova,antoin,bobo1234,bobob,bobbobbo,dean1,222222a,jesusgod,matt23,musical1,darkmage,loppol,werrew,josepha,rebel12,toshka,gadfly,hawkwood,alina12,dnomyar,sexaddict,dangit,cool23,yocrack,archimed,farouk,nhfkzkz,lindalou,111zzzzz,ghjatccjh,wethepeople,m123456789,wowsers,kbkbxrf,bulldog5,m_roesel,sissinit,yamoon6,123ewqasd,dangel,miruvor79,kaytee,falcon7,bandit11,dotnet,dannii,arsenal9,miatamx5,1trouble,strip4me,dogpile,sexyred1,rjdfktdf,google10,shortman,crystal7,awesome123,cowdog,haruka,birthday28,jitter,diabolik,boomer12,dknight,bluewate,hockey123,crm0624,blueboys,willy123,jumpup,google2,cobra777,llabesab,vicelord,hopper1,gerryber,remmah,j10e5d4,qqqqqqw,agusti,fre_ak8yj,nahlik,redrobin,scott3,epson1,dumpy,bundao,aniolek,hola123,jergens,itsasecret,maxsam,bluelight,mountai1,bongwater,1london,pepper14,freeuse,dereks,qweqw,fordgt40,rfhfdfy,raider12,hunnybun,compac,splicer,megamon,tuffgong,gymnast1,butter11,modaddy,wapbbs_1,dandelio,soccer77,ghjnbdjcnjzybt,123xyi2,fishead,x002tp00,whodaman,555aaa,oussama,brunodog,technici,pmtgjnbl,qcxdw8ry,schweden,redsox3,throbber,collecto,japan10,dbm123dm,hellhoun,tech1,deadzone,kahlan,wolf123,dethklok,xzsawq,bigguy1,cybrthc,chandle,buck01,qq123123,secreta,williams1,c32649135,delta12,flash33,123joker,spacejam,polopo,holycrap,daman1,tummybed,financia,nusrat,euroline,magicone,jimkirk,ameritec,daniel26,sevenn,topazz,kingpins,dima1991,macdog,spencer5,oi812,geoffre,music11,baffle,123569,usagi,cassiope,polla,lilcrowe,thecakeisalie,vbhjndjhtw,vthokies,oldmans,sophie01,ghoster,penny2,129834,locutus1,meesha,magik,jerry69,daddysgirl,irondesk,andrey12,jasmine123,vepsrfyn,likesdick,1accord,jetboat,grafix,tomuch,showit,protozoa,mosias98,taburetka,blaze420,esenin,anal69,zhv84kv,puissant,charles0,aishwarya,babylon6,bitter1,lenina,raleigh1,lechat,access01,kamilka,fynjy,sparkplu,daisy3112,choppe,zootsuit,1234567j,rubyrose,gorilla9,nightshade,alternativa,cghfdjxybr,snuggles1,10121v,vova1992,leonardo1,dave2,matthewd,vfhfnbr,1986mets,nobull,bacall,mexican1,juanjo,mafia1,boomer22,soylent,edwards1,jordan10,blackwid,alex86,gemini13,lunar2,dctvcjcfnm,malaki,plugger,eagles11,snafu2,1shelly,cintaku,hannah22,tbird1,maks5843,irish88,homer22,amarok,fktrcfylhjdf,lincoln2,acess,gre69kik,need4speed,hightech,core2duo,blunt1,ublhjgjybrf,dragon33,1autopas,autopas1,wwww1,15935746,daniel20,2500aa,massim,1ggggggg,96ford,hardcor1,cobra5,blackdragon,vovan_lt,orochimaru,hjlbntkb,qwertyuiop12,tallen,paradoks,frozenfish,ghjuhfvvbcn,gerri1,nuggett,camilit,doright,trans1,serena1,catch2,bkmyeh,fireston,afhvfwtdn,purple3,figure8,fuckya,scamp1,laranja,ontheoutside,louis123,yellow7,moonwalk,mercury2,tolkein,raide,amenra,a13579,dranreb,5150vh,harish,tracksta,sexking,ozzmosis,katiee,alomar,matrix19,headroom,jahlove,ringding,apollo8,132546,132613,12345672000,saretta,135798,136666,thomas7,136913,onetwothree,hockey33,calida,nefertit,bitwise,tailhook,boop4,kfgecbr,bujhmbujhm,metal69,thedark,meteoro,felicia1,house12,tinuviel,istina,vaz2105,pimp13,toolfan,nina1,tuesday2,maxmotives,lgkp500,locksley,treech,darling1,kurama,aminka,ramin,redhed,dazzler,jager1,stpiliot,cardman,rfvtym,cheeser,14314314,paramoun,samcat,plumpy,stiffie,vsajyjr,panatha,qqq777,car12345,098poi,asdzx,keegan1,furelise,kalifornia,vbhjckfd,beast123,zcfvfzkexifz,harry5,1birdie,96328i,escola,extra330,henry12,gfhfyjqz,14u2nv,max1234,templar1,1dave,02588520,catrin,pangolin,marhaba,latin1,amorcito,dave22,escape1,advance1,yasuhiro,grepw,meetme,orange01,ernes,erdna,zsergn,nautica1,justinb,soundwav,miasma,greg78,nadine1,sexmad,lovebaby,promo1,excel1,babys,dragonma,camry1,sonnenschein,farooq,wazzkaprivet,magal,katinas,elvis99,redsox24,rooney1,chiefy,peggys,aliev,pilsung,mudhen,dontdoit,dennis12,supercal,energia,ballsout,funone,claudiu,brown2,amoco,dabl1125,philos,gjdtkbntkm,servette,13571113,whizzer,nollie,13467982,upiter,12string,bluejay1,silkie,william4,kosta1,143333,connor12,sustanon,06068,corporat,ssnake,laurita,king10,tahoes,arsenal123,sapato,charless,jeanmarc,levent,algerie,marine21,jettas,winsome,dctvgbplf,1701ab,xxxp455w0rd5,lllllll1,ooooooo1,monalis,koufax32,anastasya,debugger,sarita2,jason69,ufkxjyjr,gjlcnfdf,1jerry,daniel10,balinor,sexkitten,death2,qwertasdfgzxcvb,s9te949f,vegeta1,sysman,maxxam,dimabilan,mooose,ilovetit,june23,illest,doesit,mamou,abby12,longjump,transalp,moderato,littleguy,magritte,dilnoza,hawaiiguy,winbig,nemiroff,kokaine,admira,myemail,dream2,browneyes,destiny7,dragonss,suckme1,asa123,andranik,suckem,fleshbot,dandie,timmys,scitra,timdog,hasbeen,guesss,smellyfe,arachne,deutschl,harley88,birthday27,nobody1,papasmur,home1,jonass,bunia3,epatb1,embalm,vfvekmrf,apacer,12345656,estreet,weihnachtsbaum,mrwhite,admin12,kristie1,kelebek,yoda69,socken,tima123,bayern1,fktrcfylth,tamiya,99strenght,andy01,denis2011,19delta,stokecit,aotearoa,stalker2,nicnac,conrad1,popey,agusta,bowl36,1bigfish,mossyoak,1stunner,getinnow,jessejames,gkfnjy,drako,1nissan,egor123,hotness,1hawaii,zxc123456,cantstop,1peaches,madlen,west1234,jeter1,markis,judit,attack1,artemi,silver69,153246,crazy2,green9,yoshimi,1vette,chief123,jasper2,1sierra,twentyon,drstrang,aspirant,yannic,jenna123,bongtoke,slurpy,1sugar,civic97,rusty21,shineon,james19,anna12345,wonderwoman,1kevin,karol1,kanabis,wert21,fktif6115,evil1,kakaha,54gv768,826248s,tyrone1,1winston,sugar2,falcon01,adelya,mopar440,zasxcd,leecher,kinkysex,mercede1,travka,11234567,rebon,geekboy".split(","),
45758english_wikipedia:"the,of,and,in,was,is,for,as,on,with,by,he,at,from,his,an,were,are,which,doc,https,also,or,has,had,first,one,their,its,after,new,who,they,two,her,she,been,other,when,time,during,there,into,school,more,may,years,over,only,year,most,would,world,city,some,where,between,later,three,state,such,then,national,used,made,known,under,many,university,united,while,part,season,team,these,american,than,film,second,born,south,became,states,war,through,being,including,both,before,north,high,however,people,family,early,history,album,area,them,series,against,until,since,district,county,name,work,life,group,music,following,number,company,several,four,called,played,released,career,league,game,government,house,each,based,day,same,won,use,station,club,international,town,located,population,general,college,east,found,age,march,end,september,began,home,public,church,line,june,river,member,system,place,century,band,july,york,january,october,song,august,best,former,british,party,named,held,village,show,local,november,took,service,december,built,another,major,within,along,members,five,single,due,although,small,old,left,final,large,include,building,served,president,received,games,death,february,main,third,set,children,own,order,species,park,law,air,published,road,died,book,men,women,army,often,according,education,central,country,division,english,top,included,development,french,community,among,water,play,side,list,times,near,late,form,original,different,center,power,led,students,german,moved,court,six,land,council,island,u.s.,record,million,research,art,established,award,street,military,television,given,region,support,western,production,non,political,point,cup,period,business,title,started,various,election,using,england,role,produced,become,program,works,field,total,office,class,written,association,radio,union,level,championship,director,few,force,created,department,founded,services,married,though,per,n't,site,open,act,short,society,version,royal,present,northern,worked,professional,full,returned,joined,story,france,european,currently,language,social,california,india,days,design,st.,further,round,australia,wrote,san,project,control,southern,railway,board,popular,continued,free,battle,considered,video,common,position,living,half,playing,recorded,red,post,described,average,records,special,modern,appeared,announced,areas,rock,release,elected,others,example,term,opened,similar,formed,route,census,current,schools,originally,lake,developed,race,himself,forces,addition,information,upon,province,match,event,songs,result,events,win,eastern,track,lead,teams,science,human,construction,minister,germany,awards,available,throughout,training,style,body,museum,australian,health,seven,signed,chief,eventually,appointed,sea,centre,debut,tour,points,media,light,range,character,across,features,families,largest,indian,network,less,performance,players,refer,europe,sold,festival,usually,taken,despite,designed,committee,process,return,official,episode,institute,stage,followed,performed,japanese,personal,thus,arts,space,low,months,includes,china,study,middle,magazine,leading,japan,groups,aircraft,featured,federal,civil,rights,model,coach,canadian,books,remained,eight,type,independent,completed,capital,academy,instead,kingdom,organization,countries,studies,competition,sports,size,above,section,finished,gold,involved,reported,management,systems,industry,directed,market,fourth,movement,technology,bank,ground,campaign,base,lower,sent,rather,added,provided,coast,grand,historic,valley,conference,bridge,winning,approximately,films,chinese,awarded,degree,russian,shows,native,female,replaced,municipality,square,studio,medical,data,african,successful,mid,bay,attack,previous,operations,spanish,theatre,student,republic,beginning,provide,ship,primary,owned,writing,tournament,culture,introduced,texas,related,natural,parts,governor,reached,ireland,units,senior,decided,italian,whose,higher,africa,standard,income,professor,placed,regional,los,buildings,championships,active,novel,energy,generally,interest,via,economic,previously,stated,itself,channel,below,operation,leader,traditional,trade,structure,limited,runs,prior,regular,famous,saint,navy,foreign,listed,artist,catholic,airport,results,parliament,collection,unit,officer,goal,attended,command,staff,commission,lived,location,plays,commercial,places,foundation,significant,older,medal,self,scored,companies,highway,activities,programs,wide,musical,notable,library,numerous,paris,towards,individual,allowed,plant,property,annual,contract,whom,highest,initially,required,earlier,assembly,artists,rural,seat,practice,defeated,ended,soviet,length,spent,manager,press,associated,author,issues,additional,characters,lord,zealand,policy,engine,township,noted,historical,complete,financial,religious,mission,contains,nine,recent,represented,pennsylvania,administration,opening,secretary,lines,report,executive,youth,closed,theory,writer,italy,angeles,appearance,feature,queen,launched,legal,terms,entered,issue,edition,singer,greek,majority,background,source,anti,cultural,complex,changes,recording,stadium,islands,operated,particularly,basketball,month,uses,port,castle,mostly,names,fort,selected,increased,status,earth,subsequently,pacific,cover,variety,certain,goals,remains,upper,congress,becoming,studied,irish,nature,particular,loss,caused,chart,dr.,forced,create,era,retired,material,review,rate,singles,referred,larger,individuals,shown,provides,products,speed,democratic,poland,parish,olympics,cities,themselves,temple,wing,genus,households,serving,cost,wales,stations,passed,supported,view,cases,forms,actor,male,matches,males,stars,tracks,females,administrative,median,effect,biography,train,engineering,camp,offered,chairman,houses,mainly,19th,surface,therefore,nearly,score,ancient,subject,prime,seasons,claimed,experience,specific,jewish,failed,overall,believed,plot,troops,greater,spain,consists,broadcast,heavy,increase,raised,separate,campus,1980s,appears,presented,lies,composed,recently,influence,fifth,nations,creek,references,elections,britain,double,cast,meaning,earned,carried,producer,latter,housing,brothers,attempt,article,response,border,remaining,nearby,direct,ships,value,workers,politician,academic,label,1970s,commander,rule,fellow,residents,authority,editor,transport,dutch,projects,responsible,covered,territory,flight,races,defense,tower,emperor,albums,facilities,daily,stories,assistant,managed,primarily,quality,function,proposed,distribution,conditions,prize,journal,code,vice,newspaper,corps,highly,constructed,mayor,critical,secondary,corporation,rugby,regiment,ohio,appearances,serve,allow,nation,multiple,discovered,directly,scene,levels,growth,elements,acquired,1990s,officers,physical,20th,latin,host,jersey,graduated,arrived,issued,literature,metal,estate,vote,immediately,quickly,asian,competed,extended,produce,urban,1960s,promoted,contemporary,global,formerly,appear,industrial,types,opera,ministry,soldiers,commonly,mass,formation,smaller,typically,drama,shortly,density,senate,effects,iran,polish,prominent,naval,settlement,divided,basis,republican,languages,distance,treatment,continue,product,mile,sources,footballer,format,clubs,leadership,initial,offers,operating,avenue,officially,columbia,grade,squadron,fleet,percent,farm,leaders,agreement,likely,equipment,website,mount,grew,method,transferred,intended,renamed,iron,asia,reserve,capacity,politics,widely,activity,advanced,relations,scottish,dedicated,crew,founder,episodes,lack,amount,build,efforts,concept,follows,ordered,leaves,positive,economy,entertainment,affairs,memorial,ability,illinois,communities,color,text,railroad,scientific,focus,comedy,serves,exchange,environment,cars,direction,organized,firm,description,agency,analysis,purpose,destroyed,reception,planned,revealed,infantry,architecture,growing,featuring,household,candidate,removed,situated,models,knowledge,solo,technical,organizations,assigned,conducted,participated,largely,purchased,register,gained,combined,headquarters,adopted,potential,protection,scale,approach,spread,independence,mountains,titled,geography,applied,safety,mixed,accepted,continues,captured,rail,defeat,principal,recognized,lieutenant,mentioned,semi,owner,joint,liberal,actress,traffic,creation,basic,notes,unique,supreme,declared,simply,plants,sales,massachusetts,designated,parties,jazz,compared,becomes,resources,titles,concert,learning,remain,teaching,versions,content,alongside,revolution,sons,block,premier,impact,champions,districts,generation,estimated,volume,image,sites,account,roles,sport,quarter,providing,zone,yard,scoring,classes,presence,performances,representatives,hosted,split,taught,origin,olympic,claims,critics,facility,occurred,suffered,municipal,damage,defined,resulted,respectively,expanded,platform,draft,opposition,expected,educational,ontario,climate,reports,atlantic,surrounding,performing,reduced,ranked,allows,birth,nominated,younger,newly,kong,positions,theater,philadelphia,heritage,finals,disease,sixth,laws,reviews,constitution,tradition,swedish,theme,fiction,rome,medicine,trains,resulting,existing,deputy,environmental,labour,classical,develop,fans,granted,receive,alternative,begins,nuclear,fame,buried,connected,identified,palace,falls,letters,combat,sciences,effort,villages,inspired,regions,towns,conservative,chosen,animals,labor,attacks,materials,yards,steel,representative,orchestra,peak,entitled,officials,returning,reference,northwest,imperial,convention,examples,ocean,publication,painting,subsequent,frequently,religion,brigade,fully,sides,acts,cemetery,relatively,oldest,suggested,succeeded,achieved,application,programme,cells,votes,promotion,graduate,armed,supply,flying,communist,figures,literary,netherlands,korea,worldwide,citizens,1950s,faculty,draw,stock,seats,occupied,methods,unknown,articles,claim,holds,authorities,audience,sweden,interview,obtained,covers,settled,transfer,marked,allowing,funding,challenge,southeast,unlike,crown,rise,portion,transportation,sector,phase,properties,edge,tropical,standards,institutions,philosophy,legislative,hills,brand,fund,conflict,unable,founding,refused,attempts,metres,permanent,starring,applications,creating,effective,aired,extensive,employed,enemy,expansion,billboard,rank,battalion,multi,vehicle,fought,alliance,category,perform,federation,poetry,bronze,bands,entry,vehicles,bureau,maximum,billion,trees,intelligence,greatest,screen,refers,commissioned,gallery,injury,confirmed,setting,treaty,adult,americans,broadcasting,supporting,pilot,mobile,writers,programming,existence,squad,minnesota,copies,korean,provincial,sets,defence,offices,agricultural,internal,core,northeast,retirement,factory,actions,prevent,communications,ending,weekly,containing,functions,attempted,interior,weight,bowl,recognition,incorporated,increasing,ultimately,documentary,derived,attacked,lyrics,mexican,external,churches,centuries,metropolitan,selling,opposed,personnel,mill,visited,presidential,roads,pieces,norwegian,controlled,18th,rear,influenced,wrestling,weapons,launch,composer,locations,developing,circuit,specifically,studios,shared,canal,wisconsin,publishing,approved,domestic,consisted,determined,comic,establishment,exhibition,southwest,fuel,electronic,cape,converted,educated,melbourne,hits,wins,producing,norway,slightly,occur,surname,identity,represent,constituency,funds,proved,links,structures,athletic,birds,contest,users,poet,institution,display,receiving,rare,contained,guns,motion,piano,temperature,publications,passenger,contributed,toward,cathedral,inhabitants,architect,exist,athletics,muslim,courses,abandoned,signal,successfully,disambiguation,tennessee,dynasty,heavily,maryland,jews,representing,budget,weather,missouri,introduction,faced,pair,chapel,reform,height,vietnam,occurs,motor,cambridge,lands,focused,sought,patients,shape,invasion,chemical,importance,communication,selection,regarding,homes,voivodeship,maintained,borough,failure,aged,passing,agriculture,oregon,teachers,flow,philippines,trail,seventh,portuguese,resistance,reaching,negative,fashion,scheduled,downtown,universities,trained,skills,scenes,views,notably,typical,incident,candidates,engines,decades,composition,commune,chain,inc.,austria,sale,values,employees,chamber,regarded,winners,registered,task,investment,colonial,swiss,user,entirely,flag,stores,closely,entrance,laid,journalist,coal,equal,causes,turkish,quebec,techniques,promote,junction,easily,dates,kentucky,singapore,residence,violence,advance,survey,humans,expressed,passes,streets,distinguished,qualified,folk,establish,egypt,artillery,visual,improved,actual,finishing,medium,protein,switzerland,productions,operate,poverty,neighborhood,organisation,consisting,consecutive,sections,partnership,extension,reaction,factor,costs,bodies,device,ethnic,racial,flat,objects,chapter,improve,musicians,courts,controversy,membership,merged,wars,expedition,interests,arab,comics,gain,describes,mining,bachelor,crisis,joining,decade,1930s,distributed,habitat,routes,arena,cycle,divisions,briefly,vocals,directors,degrees,object,recordings,installed,adjacent,demand,voted,causing,businesses,ruled,grounds,starred,drawn,opposite,stands,formal,operates,persons,counties,compete,wave,israeli,ncaa,resigned,brief,greece,combination,demographics,historian,contain,commonwealth,musician,collected,argued,louisiana,session,cabinet,parliamentary,electoral,loan,profit,regularly,conservation,islamic,purchase,17th,charts,residential,earliest,designs,paintings,survived,moth,items,goods,grey,anniversary,criticism,images,discovery,observed,underground,progress,additionally,participate,thousands,reduce,elementary,owners,stating,iraq,resolution,capture,tank,rooms,hollywood,finance,queensland,reign,maintain,iowa,landing,broad,outstanding,circle,path,manufacturing,assistance,sequence,gmina,crossing,leads,universal,shaped,kings,attached,medieval,ages,metro,colony,affected,scholars,oklahoma,coastal,soundtrack,painted,attend,definition,meanwhile,purposes,trophy,require,marketing,popularity,cable,mathematics,mississippi,represents,scheme,appeal,distinct,factors,acid,subjects,roughly,terminal,economics,senator,diocese,prix,contrast,argentina,czech,wings,relief,stages,duties,16th,novels,accused,whilst,equivalent,charged,measure,documents,couples,request,danish,defensive,guide,devices,statistics,credited,tries,passengers,allied,frame,puerto,peninsula,concluded,instruments,wounded,differences,associate,forests,afterwards,replace,requirements,aviation,solution,offensive,ownership,inner,legislation,hungarian,contributions,actors,translated,denmark,steam,depending,aspects,assumed,injured,severe,admitted,determine,shore,technique,arrival,measures,translation,debuted,delivered,returns,rejected,separated,visitors,damaged,storage,accompanied,markets,industries,losses,gulf,charter,strategy,corporate,socialist,somewhat,significantly,physics,mounted,satellite,experienced,constant,relative,pattern,restored,belgium,connecticut,partners,harvard,retained,networks,protected,mode,artistic,parallel,collaboration,debate,involving,journey,linked,salt,authors,components,context,occupation,requires,occasionally,policies,tamil,ottoman,revolutionary,hungary,poem,versus,gardens,amongst,audio,makeup,frequency,meters,orthodox,continuing,suggests,legislature,coalition,guitarist,eighth,classification,practices,soil,tokyo,instance,limit,coverage,considerable,ranking,colleges,cavalry,centers,daughters,twin,equipped,broadway,narrow,hosts,rates,domain,boundary,arranged,12th,whereas,brazilian,forming,rating,strategic,competitions,trading,covering,baltimore,commissioner,infrastructure,origins,replacement,praised,disc,collections,expression,ukraine,driven,edited,austrian,solar,ensure,premiered,successor,wooden,operational,hispanic,concerns,rapid,prisoners,childhood,meets,influential,tunnel,employment,tribe,qualifying,adapted,temporary,celebrated,appearing,increasingly,depression,adults,cinema,entering,laboratory,script,flows,romania,accounts,fictional,pittsburgh,achieve,monastery,franchise,formally,tools,newspapers,revival,sponsored,processes,vienna,springs,missions,classified,13th,annually,branches,lakes,gender,manner,advertising,normally,maintenance,adding,characteristics,integrated,decline,modified,strongly,critic,victims,malaysia,arkansas,nazi,restoration,powered,monument,hundreds,depth,15th,controversial,admiral,criticized,brick,honorary,initiative,output,visiting,birmingham,progressive,existed,carbon,1920s,credits,colour,rising,hence,defeating,superior,filmed,listing,column,surrounded,orleans,principles,territories,struck,participation,indonesia,movements,index,commerce,conduct,constitutional,spiritual,ambassador,vocal,completion,edinburgh,residing,tourism,finland,bears,medals,resident,themes,visible,indigenous,involvement,basin,electrical,ukrainian,concerts,boats,styles,processing,rival,drawing,vessels,experimental,declined,touring,supporters,compilation,coaching,cited,dated,roots,string,explained,transit,traditionally,poems,minimum,representation,14th,releases,effectively,architectural,triple,indicated,greatly,elevation,clinical,printed,10th,proposal,peaked,producers,romanized,rapidly,stream,innings,meetings,counter,householder,honour,lasted,agencies,document,exists,surviving,experiences,honors,landscape,hurricane,harbor,panel,competing,profile,vessel,farmers,lists,revenue,exception,customers,11th,participants,wildlife,utah,bible,gradually,preserved,replacing,symphony,begun,longest,siege,provinces,mechanical,genre,transmission,agents,executed,videos,benefits,funded,rated,instrumental,ninth,similarly,dominated,destruction,passage,technologies,thereafter,outer,facing,affiliated,opportunities,instrument,governments,scholar,evolution,channels,shares,sessions,widespread,occasions,engineers,scientists,signing,battery,competitive,alleged,eliminated,supplies,judges,hampshire,regime,portrayed,penalty,taiwan,denied,submarine,scholarship,substantial,transition,victorian,http,nevertheless,filed,supports,continental,tribes,ratio,doubles,useful,honours,blocks,principle,retail,departure,ranks,patrol,yorkshire,vancouver,inter,extent,afghanistan,strip,railways,component,organ,symbol,categories,encouraged,abroad,civilian,periods,traveled,writes,struggle,immediate,recommended,adaptation,egyptian,graduating,assault,drums,nomination,historically,voting,allies,detailed,achievement,percentage,arabic,assist,frequent,toured,apply,and/or,intersection,maine,touchdown,throne,produces,contribution,emerged,obtain,archbishop,seek,researchers,remainder,populations,clan,finnish,overseas,fifa,licensed,chemistry,festivals,mediterranean,injuries,animated,seeking,publisher,volumes,limits,venue,jerusalem,generated,trials,islam,youngest,ruling,glasgow,germans,songwriter,persian,municipalities,donated,viewed,belgian,cooperation,posted,tech,dual,volunteer,settlers,commanded,claiming,approval,delhi,usage,terminus,partly,electricity,locally,editions,premiere,absence,belief,traditions,statue,indicate,manor,stable,attributed,possession,managing,viewers,chile,overview,seed,regulations,essential,minority,cargo,segment,endemic,forum,deaths,monthly,playoffs,erected,practical,machines,suburb,relation,mrs.,descent,indoor,continuous,characterized,solutions,caribbean,rebuilt,serbian,summary,contested,psychology,pitch,attending,muhammad,tenure,drivers,diameter,assets,venture,punk,airlines,concentration,athletes,volunteers,pages,mines,influences,sculpture,protest,ferry,behalf,drafted,apparent,furthermore,ranging,romanian,democracy,lanka,significance,linear,d.c.,certified,voters,recovered,tours,demolished,boundaries,assisted,identify,grades,elsewhere,mechanism,1940s,reportedly,aimed,conversion,suspended,photography,departments,beijing,locomotives,publicly,dispute,magazines,resort,conventional,platforms,internationally,capita,settlements,dramatic,derby,establishing,involves,statistical,implementation,immigrants,exposed,diverse,layer,vast,ceased,connections,belonged,interstate,uefa,organised,abuse,deployed,cattle,partially,filming,mainstream,reduction,automatic,rarely,subsidiary,decides,merger,comprehensive,displayed,amendment,guinea,exclusively,manhattan,concerning,commons,radical,serbia,baptist,buses,initiated,portrait,harbour,choir,citizen,sole,unsuccessful,manufactured,enforcement,connecting,increases,patterns,sacred,muslims,clothing,hindu,unincorporated,sentenced,advisory,tanks,campaigns,fled,repeated,remote,rebellion,implemented,texts,fitted,tribute,writings,sufficient,ministers,21st,devoted,jurisdiction,coaches,interpretation,pole,businessman,peru,sporting,prices,cuba,relocated,opponent,arrangement,elite,manufacturer,responded,suitable,distinction,calendar,dominant,tourist,earning,prefecture,ties,preparation,anglo,pursue,worship,archaeological,chancellor,bangladesh,scores,traded,lowest,horror,outdoor,biology,commented,specialized,loop,arriving,farming,housed,historians,'the,patent,pupils,christianity,opponents,athens,northwestern,maps,promoting,reveals,flights,exclusive,lions,norfolk,hebrew,extensively,eldest,shops,acquisition,virtual,renowned,margin,ongoing,essentially,iranian,alternate,sailed,reporting,conclusion,originated,temperatures,exposure,secured,landed,rifle,framework,identical,martial,focuses,topics,ballet,fighters,belonging,wealthy,negotiations,evolved,bases,oriented,acres,democrat,heights,restricted,vary,graduation,aftermath,chess,illness,participating,vertical,collective,immigration,demonstrated,leaf,completing,organic,missile,leeds,eligible,grammar,confederate,improvement,congressional,wealth,cincinnati,spaces,indicates,corresponding,reaches,repair,isolated,taxes,congregation,ratings,leagues,diplomatic,submitted,winds,awareness,photographs,maritime,nigeria,accessible,animation,restaurants,philippine,inaugural,dismissed,armenian,illustrated,reservoir,speakers,programmes,resource,genetic,interviews,camps,regulation,computers,preferred,travelled,comparison,distinctive,recreation,requested,southeastern,dependent,brisbane,breeding,playoff,expand,bonus,gauge,departed,qualification,inspiration,shipping,slaves,variations,shield,theories,munich,recognised,emphasis,favour,variable,seeds,undergraduate,territorial,intellectual,qualify,mini,banned,pointed,democrats,assessment,judicial,examination,attempting,objective,partial,characteristic,hardware,pradesh,execution,ottawa,metre,drum,exhibitions,withdrew,attendance,phrase,journalism,logo,measured,error,christians,trio,protestant,theology,respective,atmosphere,buddhist,substitute,curriculum,fundamental,outbreak,rabbi,intermediate,designation,globe,liberation,simultaneously,diseases,experiments,locomotive,difficulties,mainland,nepal,relegated,contributing,database,developments,veteran,carries,ranges,instruction,lodge,protests,obama,newcastle,experiment,physician,describing,challenges,corruption,delaware,adventures,ensemble,succession,renaissance,tenth,altitude,receives,approached,crosses,syria,croatia,warsaw,professionals,improvements,worn,airline,compound,permitted,preservation,reducing,printing,scientist,activist,comprises,sized,societies,enters,ruler,gospel,earthquake,extend,autonomous,croatian,serial,decorated,relevant,ideal,grows,grass,tier,towers,wider,welfare,columns,alumni,descendants,interface,reserves,banking,colonies,manufacturers,magnetic,closure,pitched,vocalist,preserve,enrolled,cancelled,equation,2000s,nickname,bulgaria,heroes,exile,mathematical,demands,input,structural,tube,stem,approaches,argentine,axis,manuscript,inherited,depicted,targets,visits,veterans,regard,removal,efficiency,organisations,concepts,lebanon,manga,petersburg,rally,supplied,amounts,yale,tournaments,broadcasts,signals,pilots,azerbaijan,architects,enzyme,literacy,declaration,placing,batting,incumbent,bulgarian,consistent,poll,defended,landmark,southwestern,raid,resignation,travels,casualties,prestigious,namely,aims,recipient,warfare,readers,collapse,coached,controls,volleyball,coup,lesser,verse,pairs,exhibited,proteins,molecular,abilities,integration,consist,aspect,advocate,administered,governing,hospitals,commenced,coins,lords,variation,resumed,canton,artificial,elevated,palm,difficulty,civic,efficient,northeastern,inducted,radiation,affiliate,boards,stakes,byzantine,consumption,freight,interaction,oblast,numbered,seminary,contracts,extinct,predecessor,bearing,cultures,functional,neighboring,revised,cylinder,grants,narrative,reforms,athlete,tales,reflect,presidency,compositions,specialist,cricketer,founders,sequel,widow,disbanded,associations,backed,thereby,pitcher,commanding,boulevard,singers,crops,militia,reviewed,centres,waves,consequently,fortress,tributary,portions,bombing,excellence,nest,payment,mars,plaza,unity,victories,scotia,farms,nominations,variant,attacking,suspension,installation,graphics,estates,comments,acoustic,destination,venues,surrender,retreat,libraries,quarterback,customs,berkeley,collaborated,gathered,syndrome,dialogue,recruited,shanghai,neighbouring,psychological,saudi,moderate,exhibit,innovation,depot,binding,brunswick,situations,certificate,actively,shakespeare,editorial,presentation,ports,relay,nationalist,methodist,archives,experts,maintains,collegiate,bishops,maintaining,temporarily,embassy,essex,wellington,connects,reformed,bengal,recalled,inches,doctrine,deemed,legendary,reconstruction,statements,palestinian,meter,achievements,riders,interchange,spots,auto,accurate,chorus,dissolved,missionary,thai,operators,e.g.,generations,failing,delayed,cork,nashville,perceived,venezuela,cult,emerging,tomb,abolished,documented,gaining,canyon,episcopal,stored,assists,compiled,kerala,kilometers,mosque,grammy,theorem,unions,segments,glacier,arrives,theatrical,circulation,conferences,chapters,displays,circular,authored,conductor,fewer,dimensional,nationwide,liga,yugoslavia,peer,vietnamese,fellowship,armies,regardless,relating,dynamic,politicians,mixture,serie,somerset,imprisoned,posts,beliefs,beta,layout,independently,electronics,provisions,fastest,logic,headquartered,creates,challenged,beaten,appeals,plains,protocol,graphic,accommodate,iraqi,midfielder,span,commentary,freestyle,reflected,palestine,lighting,burial,virtually,backing,prague,tribal,heir,identification,prototype,criteria,dame,arch,tissue,footage,extending,procedures,predominantly,updated,rhythm,preliminary,cafe,disorder,prevented,suburbs,discontinued,retiring,oral,followers,extends,massacre,journalists,conquest,larvae,pronounced,behaviour,diversity,sustained,addressed,geographic,restrictions,voiced,milwaukee,dialect,quoted,grid,nationally,nearest,roster,twentieth,separation,indies,manages,citing,intervention,guidance,severely,migration,artwork,focusing,rivals,trustees,varied,enabled,committees,centered,skating,slavery,cardinals,forcing,tasks,auckland,youtube,argues,colored,advisor,mumbai,requiring,theological,registration,refugees,nineteenth,survivors,runners,colleagues,priests,contribute,variants,workshop,concentrated,creator,lectures,temples,exploration,requirement,interactive,navigation,companion,perth,allegedly,releasing,citizenship,observation,stationed,ph.d.,sheep,breed,discovers,encourage,kilometres,journals,performers,isle,saskatchewan,hybrid,hotels,lancashire,dubbed,airfield,anchor,suburban,theoretical,sussex,anglican,stockholm,permanently,upcoming,privately,receiver,optical,highways,congo,colours,aggregate,authorized,repeatedly,varies,fluid,innovative,transformed,praise,convoy,demanded,discography,attraction,export,audiences,ordained,enlisted,occasional,westminster,syrian,heavyweight,bosnia,consultant,eventual,improving,aires,wickets,epic,reactions,scandal,i.e.,discrimination,buenos,patron,investors,conjunction,testament,construct,encountered,celebrity,expanding,georgian,brands,retain,underwent,algorithm,foods,provision,orbit,transformation,associates,tactical,compact,varieties,stability,refuge,gathering,moreover,manila,configuration,gameplay,discipline,entity,comprising,composers,skill,monitoring,ruins,museums,sustainable,aerial,altered,codes,voyage,friedrich,conflicts,storyline,travelling,conducting,merit,indicating,referendum,currency,encounter,particles,automobile,workshops,acclaimed,inhabited,doctorate,cuban,phenomenon,dome,enrollment,tobacco,governance,trend,equally,manufacture,hydrogen,grande,compensation,download,pianist,grain,shifted,neutral,evaluation,define,cycling,seized,array,relatives,motors,firms,varying,automatically,restore,nicknamed,findings,governed,investigate,manitoba,administrator,vital,integral,indonesian,confusion,publishers,enable,geographical,inland,naming,civilians,reconnaissance,indianapolis,lecturer,deer,tourists,exterior,rhode,bassist,symbols,scope,ammunition,yuan,poets,punjab,nursing,cent,developers,estimates,presbyterian,nasa,holdings,generate,renewed,computing,cyprus,arabia,duration,compounds,gastropod,permit,valid,touchdowns,facade,interactions,mineral,practiced,allegations,consequence,goalkeeper,baronet,copyright,uprising,carved,targeted,competitors,mentions,sanctuary,fees,pursued,tampa,chronicle,capabilities,specified,specimens,toll,accounting,limestone,staged,upgraded,philosophical,streams,guild,revolt,rainfall,supporter,princeton,terrain,hometown,probability,assembled,paulo,surrey,voltage,developer,destroyer,floors,lineup,curve,prevention,potentially,onwards,trips,imposed,hosting,striking,strict,admission,apartments,solely,utility,proceeded,observations,euro,incidents,vinyl,profession,haven,distant,expelled,rivalry,runway,torpedo,zones,shrine,dimensions,investigations,lithuania,idaho,pursuit,copenhagen,considerably,locality,wireless,decrease,genes,thermal,deposits,hindi,habitats,withdrawn,biblical,monuments,casting,plateau,thesis,managers,flooding,assassination,acknowledged,interim,inscription,guided,pastor,finale,insects,transported,activists,marshal,intensity,airing,cardiff,proposals,lifestyle,prey,herald,capitol,aboriginal,measuring,lasting,interpreted,occurring,desired,drawings,healthcare,panels,elimination,oslo,ghana,blog,sabha,intent,superintendent,governors,bankruptcy,p.m.,equity,disk,layers,slovenia,prussia,quartet,mechanics,graduates,politically,monks,screenplay,nato,absorbed,topped,petition,bold,morocco,exhibits,canterbury,publish,rankings,crater,dominican,enhanced,planes,lutheran,governmental,joins,collecting,brussels,unified,streak,strategies,flagship,surfaces,oval,archive,etymology,imprisonment,instructor,noting,remix,opposing,servant,rotation,width,trans,maker,synthesis,excess,tactics,snail,ltd.,lighthouse,sequences,cornwall,plantation,mythology,performs,foundations,populated,horizontal,speedway,activated,performer,diving,conceived,edmonton,subtropical,environments,prompted,semifinals,caps,bulk,treasury,recreational,telegraph,continent,portraits,relegation,catholics,graph,velocity,rulers,endangered,secular,observer,learns,inquiry,idol,dictionary,certification,estimate,cluster,armenia,observatory,revived,nadu,consumers,hypothesis,manuscripts,contents,arguments,editing,trails,arctic,essays,belfast,acquire,promotional,undertaken,corridor,proceedings,antarctic,millennium,labels,delegates,vegetation,acclaim,directing,substance,outcome,diploma,philosopher,malta,albanian,vicinity,degc,legends,regiments,consent,terrorist,scattered,presidents,gravity,orientation,deployment,duchy,refuses,estonia,crowned,separately,renovation,rises,wilderness,objectives,agreements,empress,slopes,inclusion,equality,decree,ballot,criticised,rochester,recurring,struggled,disabled,henri,poles,prussian,convert,bacteria,poorly,sudan,geological,wyoming,consistently,minimal,withdrawal,interviewed,proximity,repairs,initiatives,pakistani,republicans,propaganda,viii,abstract,commercially,availability,mechanisms,naples,discussions,underlying,lens,proclaimed,advised,spelling,auxiliary,attract,lithuanian,editors,o'brien,accordance,measurement,novelist,ussr,formats,councils,contestants,indie,facebook,parishes,barrier,battalions,sponsor,consulting,terrorism,implement,uganda,crucial,unclear,notion,distinguish,collector,attractions,filipino,ecology,investments,capability,renovated,iceland,albania,accredited,scouts,armor,sculptor,cognitive,errors,gaming,condemned,successive,consolidated,baroque,entries,regulatory,reserved,treasurer,variables,arose,technological,rounded,provider,rhine,agrees,accuracy,genera,decreased,frankfurt,ecuador,edges,particle,rendered,calculated,careers,faction,rifles,americas,gaelic,portsmouth,resides,merchants,fiscal,premises,coin,draws,presenter,acceptance,ceremonies,pollution,consensus,membrane,brigadier,nonetheless,genres,supervision,predicted,magnitude,finite,differ,ancestry,vale,delegation,removing,proceeds,placement,emigrated,siblings,molecules,payments,considers,demonstration,proportion,newer,valve,achieving,confederation,continuously,luxury,notre,introducing,coordinates,charitable,squadrons,disorders,geometry,winnipeg,ulster,loans,longtime,receptor,preceding,belgrade,mandate,wrestler,neighbourhood,factories,buddhism,imported,sectors,protagonist,steep,elaborate,prohibited,artifacts,prizes,pupil,cooperative,sovereign,subspecies,carriers,allmusic,nationals,settings,autobiography,neighborhoods,analog,facilitate,voluntary,jointly,newfoundland,organizing,raids,exercises,nobel,machinery,baltic,crop,granite,dense,websites,mandatory,seeks,surrendered,anthology,comedian,bombs,slot,synopsis,critically,arcade,marking,equations,halls,indo,inaugurated,embarked,speeds,clause,invention,premiership,likewise,presenting,demonstrate,designers,organize,examined,km/h,bavaria,troop,referee,detection,zurich,prairie,rapper,wingspan,eurovision,luxembourg,slovakia,inception,disputed,mammals,entrepreneur,makers,evangelical,yield,clergy,trademark,defunct,allocated,depicting,volcanic,batted,conquered,sculptures,providers,reflects,armoured,locals,walt,herzegovina,contracted,entities,sponsorship,prominence,flowing,ethiopia,marketed,corporations,withdraw,carnegie,induced,investigated,portfolio,flowering,opinions,viewing,classroom,donations,bounded,perception,leicester,fruits,charleston,academics,statute,complaints,smallest,deceased,petroleum,resolved,commanders,algebra,southampton,modes,cultivation,transmitter,spelled,obtaining,sizes,acre,pageant,bats,abbreviated,correspondence,barracks,feast,tackles,raja,derives,geology,disputes,translations,counted,constantinople,seating,macedonia,preventing,accommodation,homeland,explored,invaded,provisional,transform,sphere,unsuccessfully,missionaries,conservatives,highlights,traces,organisms,openly,dancers,fossils,absent,monarchy,combining,lanes,stint,dynamics,chains,missiles,screening,module,tribune,generating,miners,nottingham,seoul,unofficial,owing,linking,rehabilitation,citation,louisville,mollusk,depicts,differential,zimbabwe,kosovo,recommendations,responses,pottery,scorer,aided,exceptions,dialects,telecommunications,defines,elderly,lunar,coupled,flown,25th,espn,formula_1,bordered,fragments,guidelines,gymnasium,valued,complexity,papal,presumably,maternal,challenging,reunited,advancing,comprised,uncertain,favorable,twelfth,correspondent,nobility,livestock,expressway,chilean,tide,researcher,emissions,profits,lengths,accompanying,witnessed,itunes,drainage,slope,reinforced,feminist,sanskrit,develops,physicians,outlets,isbn,coordinator,averaged,termed,occupy,diagnosed,yearly,humanitarian,prospect,spacecraft,stems,enacted,linux,ancestors,karnataka,constitute,immigrant,thriller,ecclesiastical,generals,celebrations,enhance,heating,advocated,evident,advances,bombardment,watershed,shuttle,wicket,twitter,adds,branded,teaches,schemes,pension,advocacy,conservatory,cairo,varsity,freshwater,providence,seemingly,shells,cuisine,specially,peaks,intensive,publishes,trilogy,skilled,nacional,unemployment,destinations,parameters,verses,trafficking,determination,infinite,savings,alignment,linguistic,countryside,dissolution,measurements,advantages,licence,subfamily,highlands,modest,regent,algeria,crest,teachings,knockout,brewery,combine,conventions,descended,chassis,primitive,fiji,explicitly,cumberland,uruguay,laboratories,bypass,elect,informal,preceded,holocaust,tackle,minneapolis,quantity,securities,console,doctoral,religions,commissioners,expertise,unveiled,precise,diplomat,standings,infant,disciplines,sicily,endorsed,systematic,charted,armored,mild,lateral,townships,hurling,prolific,invested,wartime,compatible,galleries,moist,battlefield,decoration,convent,tubes,terrestrial,nominee,requests,delegate,leased,dubai,polar,applying,addresses,munster,sings,commercials,teamed,dances,eleventh,midland,cedar,flee,sandstone,snails,inspection,divide,asset,themed,comparable,paramount,dairy,archaeology,intact,institutes,rectangular,instances,phases,reflecting,substantially,applies,vacant,lacked,copa,coloured,encounters,sponsors,encoded,possess,revenues,ucla,chaired,a.m.,enabling,playwright,stoke,sociology,tibetan,frames,motto,financing,illustrations,gibraltar,chateau,bolivia,transmitted,enclosed,persuaded,urged,folded,suffolk,regulated,bros.,submarines,myth,oriental,malaysian,effectiveness,narrowly,acute,sunk,replied,utilized,tasmania,consortium,quantities,gains,parkway,enlarged,sided,employers,adequate,accordingly,assumption,ballad,mascot,distances,peaking,saxony,projected,affiliation,limitations,metals,guatemala,scots,theaters,kindergarten,verb,employer,differs,discharge,controller,seasonal,marching,guru,campuses,avoided,vatican,maori,excessive,chartered,modifications,caves,monetary,sacramento,mixing,institutional,celebrities,irrigation,shapes,broadcaster,anthem,attributes,demolition,offshore,specification,surveys,yugoslav,contributor,auditorium,lebanese,capturing,airports,classrooms,chennai,paths,tendency,determining,lacking,upgrade,sailors,detected,kingdoms,sovereignty,freely,decorative,momentum,scholarly,georges,gandhi,speculation,transactions,undertook,interact,similarities,cove,teammate,constituted,painters,tends,madagascar,partnerships,afghan,personalities,attained,rebounds,masses,synagogue,reopened,asylum,embedded,imaging,catalogue,defenders,taxonomy,fiber,afterward,appealed,communists,lisbon,rica,judaism,adviser,batsman,ecological,commands,lgbt,cooling,accessed,wards,shiva,employs,thirds,scenic,worcester,tallest,contestant,humanities,economist,textile,constituencies,motorway,tram,percussion,cloth,leisure,1880s,baden,flags,resemble,riots,coined,sitcom,composite,implies,daytime,tanzania,penalties,optional,competitor,excluded,steering,reversed,autonomy,reviewer,breakthrough,professionally,damages,pomeranian,deputies,valleys,ventures,highlighted,electorate,mapping,shortened,executives,tertiary,specimen,launching,bibliography,sank,pursuing,binary,descendant,marched,natives,ideology,turks,adolf,archdiocese,tribunal,exceptional,nigerian,preference,fails,loading,comeback,vacuum,favored,alter,remnants,consecrated,spectators,trends,patriarch,feedback,paved,sentences,councillor,astronomy,advocates,broader,commentator,commissions,identifying,revealing,theatres,incomplete,enables,constituent,reformation,tract,haiti,atmospheric,screened,explosive,czechoslovakia,acids,symbolic,subdivision,liberals,incorporate,challenger,erie,filmmaker,laps,kazakhstan,organizational,evolutionary,chemicals,dedication,riverside,fauna,moths,maharashtra,annexed,gen.,resembles,underwater,garnered,timeline,remake,suited,educator,hectares,automotive,feared,latvia,finalist,narrator,portable,airways,plaque,designing,villagers,licensing,flank,statues,struggles,deutsche,migrated,cellular,jacksonville,wimbledon,defining,highlight,preparatory,planets,cologne,employ,frequencies,detachment,readily,libya,resign,halt,helicopters,reef,landmarks,collaborative,irregular,retaining,helsinki,folklore,weakened,viscount,interred,professors,memorable,mega,repertoire,rowing,dorsal,albeit,progressed,operative,coronation,liner,telugu,domains,philharmonic,detect,bengali,synthetic,tensions,atlas,dramatically,paralympics,xbox,shire,kiev,lengthy,sued,notorious,seas,screenwriter,transfers,aquatic,pioneers,unesco,radius,abundant,tunnels,syndicated,inventor,accreditation,janeiro,exeter,ceremonial,omaha,cadet,predators,resided,prose,slavic,precision,abbot,deity,engaging,cambodia,estonian,compliance,demonstrations,protesters,reactor,commodore,successes,chronicles,mare,extant,listings,minerals,tonnes,parody,cultivated,traders,pioneering,supplement,slovak,preparations,collision,partnered,vocational,atoms,malayalam,welcomed,documentation,curved,functioning,presently,formations,incorporates,nazis,botanical,nucleus,ethical,greeks,metric,automated,whereby,stance,europeans,duet,disability,purchasing,email,telescope,displaced,sodium,comparative,processor,inning,precipitation,aesthetic,import,coordination,feud,alternatively,mobility,tibet,regained,succeeding,hierarchy,apostolic,catalog,reproduction,inscriptions,vicar,clusters,posthumously,rican,loosely,additions,photographic,nowadays,selective,derivative,keyboards,guides,collectively,affecting,combines,operas,networking,decisive,terminated,continuity,finishes,ancestor,consul,heated,simulation,leipzig,incorporating,georgetown,formula_2,circa,forestry,portrayal,councillors,advancement,complained,forewings,confined,transaction,definitions,reduces,televised,1890s,rapids,phenomena,belarus,alps,landscapes,quarterly,specifications,commemorate,continuation,isolation,antenna,downstream,patents,ensuing,tended,saga,lifelong,columnist,labeled,gymnastics,papua,anticipated,demise,encompasses,madras,antarctica,interval,icon,rams,midlands,ingredients,priory,strengthen,rouge,explicit,gaza,aging,securing,anthropology,listeners,adaptations,underway,vista,malay,fortified,lightweight,violations,concerto,financed,jesuit,observers,trustee,descriptions,nordic,resistant,opted,accepts,prohibition,andhra,inflation,negro,wholly,imagery,spur,instructed,gloucester,cycles,middlesex,destroyers,statewide,evacuated,hyderabad,peasants,mice,shipyard,coordinate,pitching,colombian,exploring,numbering,compression,countess,hiatus,exceed,raced,archipelago,traits,soils,o'connor,vowel,android,facto,angola,amino,holders,logistics,circuits,emergence,kuwait,partition,emeritus,outcomes,submission,promotes,barack,negotiated,loaned,stripped,50th,excavations,treatments,fierce,participant,exports,decommissioned,cameo,remarked,residences,fuselage,mound,undergo,quarry,node,midwest,specializing,occupies,etc.,showcase,molecule,offs,modules,salon,exposition,revision,peers,positioned,hunters,competes,algorithms,reside,zagreb,calcium,uranium,silicon,airs,counterpart,outlet,collectors,sufficiently,canberra,inmates,anatomy,ensuring,curves,aviv,firearms,basque,volcano,thrust,sheikh,extensions,installations,aluminum,darker,sacked,emphasized,aligned,asserted,pseudonym,spanning,decorations,eighteenth,orbital,spatial,subdivided,notation,decay,macedonian,amended,declining,cyclist,feat,unusually,commuter,birthplace,latitude,activation,overhead,30th,finalists,whites,encyclopedia,tenor,qatar,survives,complement,concentrations,uncommon,astronomical,bangalore,pius,genome,memoir,recruit,prosecutor,modification,paired,container,basilica,arlington,displacement,germanic,mongolia,proportional,debates,matched,calcutta,rows,tehran,aerospace,prevalent,arise,lowland,24th,spokesman,supervised,advertisements,clash,tunes,revelation,wanderers,quarterfinals,fisheries,steadily,memoirs,pastoral,renewable,confluence,acquiring,strips,slogan,upstream,scouting,analyst,practitioners,turbine,strengthened,heavier,prehistoric,plural,excluding,isles,persecution,turin,rotating,villain,hemisphere,unaware,arabs,corpus,relied,singular,unanimous,schooling,passive,angles,dominance,instituted,aria,outskirts,balanced,beginnings,financially,structured,parachute,viewer,attitudes,subjected,escapes,derbyshire,erosion,addressing,styled,declaring,originating,colts,adjusted,stained,occurrence,fortifications,baghdad,nitrogen,localities,yemen,galway,debris,lodz,victorious,pharmaceutical,substances,unnamed,dwelling,atop,developmental,activism,voter,refugee,forested,relates,overlooking,genocide,kannada,insufficient,oversaw,partisan,dioxide,recipients,factions,mortality,capped,expeditions,receptors,reorganized,prominently,atom,flooded,flute,orchestral,scripts,mathematician,airplay,detached,rebuilding,dwarf,brotherhood,salvation,expressions,arabian,cameroon,poetic,recruiting,bundesliga,inserted,scrapped,disabilities,evacuation,pasha,undefeated,crafts,rituals,aluminium,norm,pools,submerged,occupying,pathway,exams,prosperity,wrestlers,promotions,basal,permits,nationalism,trim,merge,gazette,tributaries,transcription,caste,porto,emerge,modeled,adjoining,counterparts,paraguay,redevelopment,renewal,unreleased,equilibrium,similarity,minorities,soviets,comprise,nodes,tasked,unrelated,expired,johan,precursor,examinations,electrons,socialism,exiled,admiralty,floods,wigan,nonprofit,lacks,brigades,screens,repaired,hanover,fascist,labs,osaka,delays,judged,statutory,colt,col.,offspring,solving,bred,assisting,retains,somalia,grouped,corresponds,tunisia,chaplain,eminent,chord,22nd,spans,viral,innovations,possessions,mikhail,kolkata,icelandic,implications,introduces,racism,workforce,alto,compulsory,admits,censorship,onset,reluctant,inferior,iconic,progression,liability,turnout,satellites,behavioral,coordinated,exploitation,posterior,averaging,fringe,krakow,mountainous,greenwich,para,plantations,reinforcements,offerings,famed,intervals,constraints,individually,nutrition,1870s,taxation,threshold,tomatoes,fungi,contractor,ethiopian,apprentice,diabetes,wool,gujarat,honduras,norse,bucharest,23rd,arguably,accompany,prone,teammates,perennial,vacancy,polytechnic,deficit,okinawa,functionality,reminiscent,tolerance,transferring,myanmar,concludes,neighbours,hydraulic,economically,slower,plots,charities,synod,investor,catholicism,identifies,bronx,interpretations,adverse,judiciary,hereditary,nominal,sensor,symmetry,cubic,triangular,tenants,divisional,outreach,representations,passages,undergoing,cartridge,testified,exceeded,impacts,limiting,railroads,defeats,regain,rendering,humid,retreated,reliability,governorate,antwerp,infamous,implied,packaging,lahore,trades,billed,extinction,ecole,rejoined,recognizes,projection,qualifications,stripes,forts,socially,lexington,accurately,sexuality,westward,wikipedia,pilgrimage,abolition,choral,stuttgart,nests,expressing,strikeouts,assessed,monasteries,reconstructed,humorous,marxist,fertile,consort,urdu,patronage,peruvian,devised,lyric,baba,nassau,communism,extraction,popularly,markings,inability,litigation,accounted,processed,emirates,tempo,cadets,eponymous,contests,broadly,oxide,courtyard,frigate,directory,apex,outline,regency,chiefly,patrols,secretariat,cliffs,residency,privy,armament,australians,dorset,geometric,genetics,scholarships,fundraising,flats,demographic,multimedia,captained,documentaries,updates,canvas,blockade,guerrilla,songwriting,administrators,intake,drought,implementing,fraction,cannes,refusal,inscribed,meditation,announcing,exported,ballots,formula_3,curator,basel,arches,flour,subordinate,confrontation,gravel,simplified,berkshire,patriotic,tuition,employing,servers,castile,posting,combinations,discharged,miniature,mutations,constellation,incarnation,ideals,necessity,granting,ancestral,crowds,pioneered,mormon,methodology,rama,indirect,complexes,bavarian,patrons,uttar,skeleton,bollywood,flemish,viable,bloc,breeds,triggered,sustainability,tailed,referenced,comply,takeover,latvian,homestead,platoon,communal,nationality,excavated,targeting,sundays,posed,physicist,turret,endowment,marginal,dispatched,commentators,renovations,attachment,collaborations,ridges,barriers,obligations,shareholders,prof.,defenses,presided,rite,backgrounds,arbitrary,affordable,gloucestershire,thirteenth,inlet,miniseries,possesses,detained,pressures,subscription,realism,solidarity,proto,postgraduate,noun,burmese,abundance,homage,reasoning,anterior,robust,fencing,shifting,vowels,garde,profitable,loch,anchored,coastline,samoa,terminology,prostitution,magistrate,venezuelan,speculated,regulate,fixture,colonists,digit,induction,manned,expeditionary,computational,centennial,principally,vein,preserving,engineered,numerical,cancellation,conferred,continually,borne,seeded,advertisement,unanimously,treaties,infections,ions,sensors,lowered,amphibious,lava,fourteenth,bahrain,niagara,nicaragua,squares,congregations,26th,periodic,proprietary,1860s,contributors,seller,overs,emission,procession,presumed,illustrator,zinc,gases,tens,applicable,stretches,reproductive,sixteenth,apparatus,accomplishments,canoe,guam,oppose,recruitment,accumulated,limerick,namibia,staging,remixes,ordnance,uncertainty,pedestrian,temperate,treason,deposited,registry,cerambycidae,attracting,lankan,reprinted,shipbuilding,homosexuality,neurons,eliminating,1900s,resume,ministries,beneficial,blackpool,surplus,northampton,licenses,constructing,announcer,standardized,alternatives,taipei,inadequate,failures,yields,medalist,titular,obsolete,torah,burlington,predecessors,lublin,retailers,castles,depiction,issuing,gubernatorial,propulsion,tiles,damascus,discs,alternating,pomerania,peasant,tavern,redesignated,27th,illustration,focal,mans,codex,specialists,productivity,antiquity,controversies,promoter,pits,companions,behaviors,lyrical,prestige,creativity,swansea,dramas,approximate,feudal,tissues,crude,campaigned,unprecedented,chancel,amendments,surroundings,allegiance,exchanges,align,firmly,optimal,commenting,reigning,landings,obscure,1850s,contemporaries,paternal,devi,endurance,communes,incorporation,denominations,exchanged,routing,resorts,amnesty,slender,explores,suppression,heats,pronunciation,centred,coupe,stirling,freelance,treatise,linguistics,laos,informs,discovering,pillars,encourages,halted,robots,definitive,maturity,tuberculosis,venetian,silesian,unchanged,originates,mali,lincolnshire,quotes,seniors,premise,contingent,distribute,danube,gorge,logging,dams,curling,seventeenth,specializes,wetlands,deities,assess,thickness,rigid,culminated,utilities,substrate,insignia,nile,assam,shri,currents,suffrage,canadians,mortar,asteroid,bosnian,discoveries,enzymes,sanctioned,replica,hymn,investigators,tidal,dominate,derivatives,converting,leinster,verbs,honoured,criticisms,dismissal,discrete,masculine,reorganization,unlimited,wurttemberg,sacks,allocation,bahn,jurisdictions,participates,lagoon,famine,communion,culminating,surveyed,shortage,cables,intersects,cassette,foremost,adopting,solicitor,outright,bihar,reissued,farmland,dissertation,turnpike,baton,photographed,christchurch,kyoto,finances,rails,histories,linebacker,kilkenny,accelerated,dispersed,handicap,absorption,rancho,ceramic,captivity,cites,font,weighed,mater,utilize,bravery,extract,validity,slovenian,seminars,discourse,ranged,duel,ironically,warships,sega,temporal,surpassed,prolonged,recruits,northumberland,greenland,contributes,patented,eligibility,unification,discusses,reply,translates,beirut,relies,torque,northward,reviewers,monastic,accession,neural,tramway,heirs,sikh,subscribers,amenities,taliban,audit,rotterdam,wagons,kurdish,favoured,combustion,meanings,persia,browser,diagnostic,niger,formula_4,denomination,dividing,parameter,branding,badminton,leningrad,sparked,hurricanes,beetles,propeller,mozambique,refined,diagram,exhaust,vacated,readings,markers,reconciliation,determines,concurrent,imprint,primera,organism,demonstrating,filmmakers,vanderbilt,affiliates,traction,evaluated,defendants,megachile,investigative,zambia,assassinated,rewarded,probable,staffordshire,foreigners,directorate,nominees,consolidation,commandant,reddish,differing,unrest,drilling,bohemia,resembling,instrumentation,considerations,haute,promptly,variously,dwellings,clans,tablet,enforced,cockpit,semifinal,hussein,prisons,ceylon,emblem,monumental,phrases,correspond,crossover,outlined,characterised,acceleration,caucus,crusade,protested,composing,rajasthan,habsburg,rhythmic,interception,inherent,cooled,ponds,spokesperson,gradual,consultation,kuala,globally,suppressed,builders,avengers,suffix,integer,enforce,fibers,unionist,proclamation,uncovered,infrared,adapt,eisenhower,utilizing,captains,stretched,observing,assumes,prevents,analyses,saxophone,caucasus,notices,villains,dartmouth,mongol,hostilities,stretching,veterinary,lenses,texture,prompting,overthrow,excavation,islanders,masovian,battleship,biographer,replay,degradation,departing,luftwaffe,fleeing,oversight,immigrated,serbs,fishermen,strengthening,respiratory,italians,denotes,radial,escorted,motif,wiltshire,expresses,accessories,reverted,establishments,inequality,protocols,charting,famously,satirical,entirety,trench,friction,atletico,sampling,subset,weekday,upheld,sharply,correlation,incorrect,mughal,travelers,hasan,earnings,offset,evaluate,specialised,recognizing,flexibility,nagar,postseason,algebraic,capitalism,crystals,melodies,polynomial,racecourse,defences,austro,wembley,attracts,anarchist,resurrection,reviewing,decreasing,prefix,ratified,mutation,displaying,separating,restoring,assemblies,ordinance,priesthood,cruisers,appoint,moldova,imports,directive,epidemic,militant,senegal,signaling,restriction,critique,retrospective,nationalists,undertake,sioux,canals,algerian,redesigned,philanthropist,depict,conceptual,turbines,intellectuals,eastward,applicants,contractors,vendors,undergone,namesake,ensured,tones,substituted,hindwings,arrests,tombs,transitional,principality,reelection,taiwanese,cavity,manifesto,broadcasters,spawned,thoroughbred,identities,generators,proposes,hydroelectric,johannesburg,cortex,scandinavian,killings,aggression,boycott,catalyst,physiology,fifteenth,waterfront,chromosome,organist,costly,calculation,cemeteries,flourished,recognise,juniors,merging,disciples,ashore,workplace,enlightenment,diminished,debated,hailed,podium,educate,mandated,distributor,litre,electromagnetic,flotilla,estuary,peterborough,staircase,selections,melodic,confronts,wholesale,integrate,intercepted,catalonia,unite,immense,palatinate,switches,earthquakes,occupational,successors,praising,concluding,faculties,firstly,overhaul,empirical,metacritic,inauguration,evergreen,laden,winged,philosophers,amalgamated,geoff,centimeters,napoleonic,upright,planting,brewing,fined,sensory,migrants,wherein,inactive,headmaster,warwickshire,siberia,terminals,denounced,academia,divinity,bilateral,clive,omitted,peerage,relics,apartheid,syndicate,fearing,fixtures,desirable,dismantled,ethnicity,valves,biodiversity,aquarium,ideological,visibility,creators,analyzed,tenant,balkan,postwar,supplier,smithsonian,risen,morphology,digits,bohemian,wilmington,vishnu,demonstrates,aforementioned,biographical,mapped,khorasan,phosphate,presentations,ecosystem,processors,calculations,mosaic,clashes,penned,recalls,coding,angular,lattice,macau,accountability,extracted,pollen,therapeutic,overlap,violinist,deposed,candidacy,infants,covenant,bacterial,restructuring,dungeons,ordination,conducts,builds,invasive,customary,concurrently,relocation,cello,statutes,borneo,entrepreneurs,sanctions,packet,rockefeller,piedmont,comparisons,waterfall,receptions,glacial,surge,signatures,alterations,advertised,enduring,somali,botanist,100th,canonical,motifs,longitude,circulated,alloy,indirectly,margins,preserves,internally,besieged,shale,peripheral,drained,baseman,reassigned,tobago,soloist,socio,grazing,contexts,roofs,portraying,ottomans,shrewsbury,noteworthy,lamps,supplying,beams,qualifier,portray,greenhouse,stronghold,hitter,rites,cretaceous,urging,derive,nautical,aiming,fortunes,verde,donors,reliance,exceeding,exclusion,exercised,simultaneous,continents,guiding,pillar,gradient,poznan,eruption,clinics,moroccan,indicator,trams,piers,parallels,fragment,teatro,potassium,satire,compressed,businessmen,influx,seine,perspectives,shelters,decreases,mounting,formula_5,confederacy,equestrian,expulsion,mayors,liberia,resisted,affinity,shrub,unexpectedly,stimulus,amtrak,deported,perpendicular,statesman,wharf,storylines,romanesque,weights,surfaced,interceptions,dhaka,crambidae,orchestras,rwanda,conclude,constitutes,subsidiaries,admissions,prospective,shear,bilingual,campaigning,presiding,domination,commemorative,trailing,confiscated,petrol,acquisitions,polymer,onlyinclude,chloride,elevations,resolutions,hurdles,pledged,likelihood,objected,erect,encoding,databases,aristotle,hindus,marshes,bowled,ministerial,grange,acronym,annexation,squads,ambient,pilgrims,botany,sofla,astronomer,planetary,descending,bestowed,ceramics,diplomacy,metabolism,colonization,potomac,africans,engraved,recycling,commitments,resonance,disciplinary,jamaican,narrated,spectral,tipperary,waterford,stationary,arbitration,transparency,threatens,crossroads,slalom,oversee,centenary,incidence,economies,livery,moisture,newsletter,autobiographical,bhutan,propelled,dependence,moderately,adobe,barrels,subdivisions,outlook,labelled,stratford,arising,diaspora,barony,automobiles,ornamental,slated,norms,primetime,generalized,analysts,vectors,libyan,yielded,certificates,rooted,vernacular,belarusian,marketplace,prediction,fairfax,malawi,viruses,wooded,demos,mauritius,prosperous,coincided,liberties,huddersfield,ascent,warnings,hinduism,glucose,pulitzer,unused,filters,illegitimate,acquitted,protestants,canopy,staple,psychedelic,winding,abbas,pathways,cheltenham,lagos,niche,invaders,proponents,barred,conversely,doncaster,recession,embraced,rematch,concession,emigration,upgrades,bowls,tablets,remixed,loops,kensington,shootout,monarchs,organizers,harmful,punjabi,broadband,exempt,neolithic,profiles,portrays,parma,cyrillic,quasi,attested,regimental,revive,torpedoes,heidelberg,rhythms,spherical,denote,hymns,icons,theologian,qaeda,exceptionally,reinstated,comune,playhouse,lobbying,grossing,viceroy,delivers,visually,armistice,utrecht,syllable,vertices,analogous,annex,refurbished,entrants,knighted,disciple,rhetoric,detailing,inactivated,ballads,algae,intensified,favourable,sanitation,receivers,pornography,commemorated,cannons,entrusted,manifold,photographers,pueblo,textiles,steamer,myths,marquess,onward,liturgical,romney,uzbekistan,consistency,denoted,hertfordshire,convex,hearings,sulfur,universidad,podcast,selecting,emperors,arises,justices,1840s,mongolian,exploited,termination,digitally,infectious,sedan,symmetric,penal,illustrate,formulation,attribute,problematic,modular,inverse,berth,searches,rutgers,leicestershire,enthusiasts,lockheed,upwards,transverse,accolades,backward,archaeologists,crusaders,nuremberg,defects,ferries,vogue,containers,openings,transporting,separates,lumpur,purchases,attain,wichita,topology,woodlands,deleted,periodically,syntax,overturned,musicals,corp.,strasbourg,instability,nationale,prevailing,cache,marathi,versailles,unmarried,grains,straits,antagonist,segregation,assistants,d'etat,contention,dictatorship,unpopular,motorcycles,criterion,analytical,salzburg,militants,hanged,worcestershire,emphasize,paralympic,erupted,convinces,offences,oxidation,nouns,populace,atari,spanned,hazardous,educators,playable,births,baha'i,preseason,generates,invites,meteorological,handbook,foothills,enclosure,diffusion,mirza,convergence,geelong,coefficient,connector,formula_6,cylindrical,disasters,pleaded,knoxville,contamination,compose,libertarian,arrondissement,franciscan,intercontinental,susceptible,initiation,malaria,unbeaten,consonants,waived,saloon,popularized,estadio,pseudo,interdisciplinary,transports,transformers,carriages,bombings,revolves,ceded,collaborator,celestial,exemption,colchester,maltese,oceanic,ligue,crete,shareholder,routed,depictions,ridden,advisors,calculate,lending,guangzhou,simplicity,newscast,scheduling,snout,eliot,undertaking,armenians,nottinghamshire,whitish,consulted,deficiency,salle,cinemas,superseded,rigorous,kerman,convened,landowners,modernization,evenings,pitches,conditional,scandinavia,differed,formulated,cyclists,swami,guyana,dunes,electrified,appalachian,abdomen,scenarios,prototypes,sindh,consonant,adaptive,boroughs,wolverhampton,modelling,cylinders,amounted,minimize,ambassadors,lenin,settler,coincide,approximation,grouping,murals,bullying,registers,rumours,engagements,energetic,vertex,annals,bordering,geologic,yellowish,runoff,converts,allegheny,facilitated,saturdays,colliery,monitored,rainforest,interfaces,geographically,impaired,prevalence,joachim,paperback,slowed,shankar,distinguishing,seminal,categorized,authorised,auspices,bandwidth,asserts,rebranded,balkans,supplemented,seldom,weaving,capsule,apostles,populous,monmouth,payload,symphonic,densely,shoreline,managerial,masonry,antioch,averages,textbooks,royalist,coliseum,tandem,brewers,diocesan,posthumous,walled,incorrectly,distributions,ensued,reasonably,graffiti,propagation,automation,harmonic,augmented,middleweight,limbs,elongated,landfall,comparatively,literal,grossed,koppen,wavelength,1830s,cerebral,boasts,congestion,physiological,practitioner,coasts,cartoonist,undisclosed,frontal,launches,burgundy,qualifiers,imposing,stade,flanked,assyrian,raided,multiplayer,montane,chesapeake,pathology,drains,vineyards,intercollegiate,semiconductor,grassland,convey,citations,predominant,rejects,benefited,yahoo,graphs,busiest,encompassing,hamlets,explorers,suppress,minors,graphical,calculus,sediment,intends,diverted,mainline,unopposed,cottages,initiate,alumnus,towed,autism,forums,darlington,modernist,oxfordshire,lectured,capitalist,suppliers,panchayat,actresses,foundry,southbound,commodity,wesleyan,divides,palestinians,luton,caretaker,nobleman,mutiny,organizer,preferences,nomenclature,splits,unwilling,offenders,timor,relying,halftime,semitic,arithmetic,milestone,jesuits,arctiidae,retrieved,consuming,contender,edged,plagued,inclusive,transforming,khmer,federally,insurgents,distributing,amherst,rendition,prosecutors,viaduct,disqualified,kabul,liturgy,prevailed,reelected,instructors,swimmers,aperture,churchyard,interventions,totals,darts,metropolis,fuels,fluent,northbound,correctional,inflicted,barrister,realms,culturally,aristocratic,collaborating,emphasizes,choreographer,inputs,ensembles,humboldt,practised,endowed,strains,infringement,archaeologist,congregational,magna,relativity,efficiently,proliferation,mixtape,abruptly,regeneration,commissioning,yukon,archaic,reluctantly,retailer,northamptonshire,universally,crossings,boilers,nickelodeon,revue,abbreviation,retaliation,scripture,routinely,medicinal,benedictine,kenyan,retention,deteriorated,glaciers,apprenticeship,coupling,researched,topography,entrances,anaheim,pivotal,compensate,arched,modify,reinforce,dusseldorf,journeys,motorsport,conceded,sumatra,spaniards,quantitative,loire,cinematography,discarded,botswana,morale,engined,zionist,philanthropy,sainte,fatalities,cypriot,motorsports,indicators,pricing,institut,bethlehem,implicated,gravitational,differentiation,rotor,thriving,precedent,ambiguous,concessions,forecast,conserved,fremantle,asphalt,landslide,middlesbrough,formula_7,humidity,overseeing,chronological,diaries,multinational,crimean,turnover,improvised,youths,declares,tasmanian,canadiens,fumble,refinery,weekdays,unconstitutional,upward,guardians,brownish,imminent,hamas,endorsement,naturalist,martyrs,caledonia,chords,yeshiva,reptiles,severity,mitsubishi,fairs,installment,substitution,repertory,keyboardist,interpreter,silesia,noticeable,rhineland,transmit,inconsistent,booklet,academies,epithet,pertaining,progressively,aquatics,scrutiny,prefect,toxicity,rugged,consume,o'donnell,evolve,uniquely,cabaret,mediated,landowner,transgender,palazzo,compilations,albuquerque,induce,sinai,remastered,efficacy,underside,analogue,specify,possessing,advocating,compatibility,liberated,greenville,mecklenburg,header,memorials,sewage,rhodesia,1800s,salaries,atoll,coordinating,partisans,repealed,amidst,subjective,optimization,nectar,evolving,exploits,madhya,styling,accumulation,raion,postage,responds,buccaneers,frontman,brunei,choreography,coated,kinetic,sampled,inflammatory,complementary,eclectic,norte,vijay,a.k.a,mainz,casualty,connectivity,laureate,franchises,yiddish,reputed,unpublished,economical,periodicals,vertically,bicycles,brethren,capacities,unitary,archeological,tehsil,domesday,wehrmacht,justification,angered,mysore,fielded,abuses,nutrients,ambitions,taluk,battleships,symbolism,superiority,neglect,attendees,commentaries,collaborators,predictions,yorker,breeders,investing,libretto,informally,coefficients,memorandum,pounder,collingwood,tightly,envisioned,arbor,mistakenly,captures,nesting,conflicting,enhancing,streetcar,manufactures,buckinghamshire,rewards,commemorating,stony,expenditure,tornadoes,semantic,relocate,weimar,iberian,sighted,intending,ensign,beverages,expectation,differentiate,centro,utilizes,saxophonist,catchment,transylvania,ecosystems,shortest,sediments,socialists,ineffective,kapoor,formidable,heroine,guantanamo,prepares,scattering,pamphlet,verified,elector,barons,totaling,shrubs,pyrenees,amalgamation,mutually,longitudinal,comte,negatively,masonic,envoy,sexes,akbar,mythical,tonga,bishopric,assessments,malaya,warns,interiors,reefs,reflections,neutrality,musically,nomadic,waterways,provence,collaborate,scaled,adulthood,emerges,euros,optics,incentives,overland,periodical,liege,awarding,realization,slang,affirmed,schooner,hokkaido,czechoslovak,protectorate,undrafted,disagreed,commencement,electors,spruce,swindon,fueled,equatorial,inventions,suites,slovene,backdrop,adjunct,energies,remnant,inhabit,alliances,simulcast,reactors,mosques,travellers,outfielder,plumage,migratory,benin,experimented,fibre,projecting,drafting,laude,evidenced,northernmost,indicted,directional,replication,croydon,comedies,jailed,organizes,devotees,reservoirs,turrets,originate,economists,songwriters,junta,trenches,mounds,proportions,comedic,apostle,azerbaijani,farmhouse,resembled,disrupted,playback,mixes,diagonal,relevance,govern,programmer,gdansk,maize,soundtracks,tendencies,mastered,impacted,believers,kilometre,intervene,chairperson,aerodrome,sails,subsidies,ensures,aesthetics,congresses,ratios,sardinia,southernmost,functioned,controllers,downward,randomly,distortion,regents,palatine,disruption,spirituality,vidhan,tracts,compiler,ventilation,anchorage,symposium,assert,pistols,excelled,avenues,convoys,moniker,constructions,proponent,phased,spines,organising,schleswig,policing,campeonato,mined,hourly,croix,lucrative,authenticity,haitian,stimulation,burkina,espionage,midfield,manually,staffed,awakening,metabolic,biographies,entrepreneurship,conspicuous,guangdong,preface,subgroup,mythological,adjutant,feminism,vilnius,oversees,honourable,tripoli,stylized,kinase,societe,notoriety,altitudes,configurations,outward,transmissions,announces,auditor,ethanol,clube,nanjing,mecca,haifa,blogs,postmaster,paramilitary,depart,positioning,potent,recognizable,spire,brackets,remembrance,overlapping,turkic,articulated,scientology,operatic,deploy,readiness,biotechnology,restrict,cinematographer,inverted,synonymous,administratively,westphalia,commodities,replaces,downloads,centralized,munitions,preached,sichuan,fashionable,implementations,matrices,hiv/aids,loyalist,luzon,celebrates,hazards,heiress,mercenaries,synonym,creole,ljubljana,technician,auditioned,technicians,viewpoint,wetland,mongols,princely,sharif,coating,dynasties,southward,doubling,formula_8,mayoral,harvesting,conjecture,goaltender,oceania,spokane,welterweight,bracket,gatherings,weighted,newscasts,mussolini,affiliations,disadvantage,vibrant,spheres,sultanate,distributors,disliked,establishes,marches,drastically,yielding,jewellery,yokohama,vascular,airlift,canons,subcommittee,repression,strengths,graded,outspoken,fused,pembroke,filmography,redundant,fatigue,repeal,threads,reissue,pennant,edible,vapor,corrections,stimuli,commemoration,dictator,anand,secession,amassed,orchards,pontifical,experimentation,greeted,bangor,forwards,decomposition,quran,trolley,chesterfield,traverse,sermons,burials,skier,climbs,consultants,petitioned,reproduce,parted,illuminated,kurdistan,reigned,occupants,packaged,geometridae,woven,regulating,protagonists,crafted,affluent,clergyman,consoles,migrant,supremacy,attackers,caliph,defect,convection,rallies,huron,resin,segunda,quota,warship,overseen,criticizing,shrines,glamorgan,lowering,beaux,hampered,invasions,conductors,collects,bluegrass,surrounds,substrates,perpetual,chronology,pulmonary,executions,crimea,compiling,noctuidae,battled,tumors,minsk,novgorod,serviced,yeast,computation,swamps,theodor,baronetcy,salford,uruguayan,shortages,odisha,siberian,novelty,cinematic,invitational,decks,dowager,oppression,bandits,appellate,state-of-the-art,clade,palaces,signalling,galaxies,industrialist,tensor,learnt,incurred,magistrates,binds,orbits,ciudad,willingness,peninsular,basins,biomedical,shafts,marlborough,bournemouth,withstand,fitzroy,dunedin,variance,steamship,integrating,muscular,fines,akron,bulbophyllum,malmo,disclosed,cornerstone,runways,medicines,twenty20,gettysburg,progresses,frigates,bodied,transformations,transforms,helens,modelled,versatile,regulator,pursuits,legitimacy,amplifier,scriptures,voyages,examines,presenters,octagonal,poultry,formula_9,anatolia,computed,migrate,directorial,hybrids,localized,preferring,guggenheim,persisted,grassroots,inflammation,fishery,otago,vigorous,professions,instructional,inexpensive,insurgency,legislators,sequels,surnames,agrarian,stainless,nairobi,minas,forerunner,aristocracy,transitions,sicilian,showcased,doses,hiroshima,summarized,gearbox,emancipation,limitation,nuclei,seismic,abandonment,dominating,appropriations,occupations,electrification,hilly,contracting,exaggerated,entertainer,kazan,oricon,cartridges,characterization,parcel,maharaja,exceeds,aspiring,obituary,flattened,contrasted,narration,replies,oblique,outpost,fronts,arranger,talmud,keynes,doctrines,endured,confesses,fortification,supervisors,kilometer,academie,jammu,bathurst,piracy,prostitutes,navarre,cumulative,cruises,lifeboat,twinned,radicals,interacting,expenditures,wexford,libre,futsal,curated,clockwise,colloquially,procurement,immaculate,lyricist,enhancement,porcelain,alzheimer,highlighting,judah,disagreements,storytelling,sheltered,wroclaw,vaudeville,contrasts,neoclassical,compares,contrasting,deciduous,francaise,descriptive,cyclic,reactive,antiquities,meiji,repeats,creditors,forcibly,newmarket,picturesque,impending,uneven,bison,raceway,solvent,ecumenical,optic,professorship,harvested,waterway,banjo,pharaoh,geologist,scanning,dissent,recycled,unmanned,retreating,gospels,aqueduct,branched,tallinn,groundbreaking,syllables,hangar,designations,procedural,craters,cabins,encryption,anthropologist,montevideo,outgoing,inverness,chattanooga,fascism,calais,chapels,groundwater,downfall,misleading,robotic,tortricidae,pixel,handel,prohibit,crewe,renaming,reprised,kickoff,leftist,spaced,integers,causeway,pines,authorship,organise,ptolemy,accessibility,virtues,lesions,iroquois,qur'an,atheist,synthesized,biennial,confederates,dietary,skaters,stresses,tariff,koreans,intercity,republics,quintet,baroness,naive,amplitude,insistence,tbilisi,residues,grammatical,diversified,egyptians,accompaniment,vibration,repository,mandal,topological,distinctions,coherent,invariant,batters,nuevo,internationals,implements,follower,bahia,widened,independents,cantonese,totaled,guadalajara,wolverines,befriended,muzzle,surveying,hungarians,medici,deportation,rayon,approx,recounts,attends,clerical,hellenic,furnished,alleging,soluble,systemic,gallantry,bolshevik,intervened,hostel,gunpowder,specialising,stimulate,leiden,removes,thematic,floral,bafta,printers,conglomerate,eroded,analytic,successively,lehigh,thessaloniki,kilda,clauses,ascended,nehru,scripted,tokugawa,competence,diplomats,exclude,consecration,freedoms,assaults,revisions,blacksmith,textual,sparse,concacaf,slain,uploaded,enraged,whaling,guise,stadiums,debuting,dormitory,cardiovascular,yunnan,dioceses,consultancy,notions,lordship,archdeacon,collided,medial,airfields,garment,wrestled,adriatic,reversal,refueling,verification,jakob,horseshoe,intricate,veracruz,sarawak,syndication,synthesizer,anthologies,stature,feasibility,guillaume,narratives,publicized,antrim,intermittent,constituents,grimsby,filmmaking,doping,unlawful,nominally,transmitting,documenting,seater,internationale,ejected,steamboat,alsace,boise,ineligible,geared,vassal,mustered,ville,inline,pairing,eurasian,kyrgyzstan,barnsley,reprise,stereotypes,rushes,conform,firefighters,deportivo,revolutionaries,rabbis,concurrency,charters,sustaining,aspirations,algiers,chichester,falkland,morphological,systematically,volcanoes,designate,artworks,reclaimed,jurist,anglia,resurrected,chaotic,feasible,circulating,simulated,environmentally,confinement,adventist,harrisburg,laborers,ostensibly,universiade,pensions,influenza,bratislava,octave,refurbishment,gothenburg,putin,barangay,annapolis,breaststroke,illustrates,distorted,choreographed,promo,emphasizing,stakeholders,descends,exhibiting,intrinsic,invertebrates,evenly,roundabout,salts,formula_10,strata,inhibition,branching,stylistic,rumored,realises,mitochondrial,commuted,adherents,logos,bloomberg,telenovela,guineas,charcoal,engages,winery,reflective,siena,cambridgeshire,ventral,flashback,installing,engraving,grasses,traveller,rotated,proprietor,nationalities,precedence,sourced,trainers,cambodian,reductions,depleted,saharan,classifications,biochemistry,plaintiffs,arboretum,humanist,fictitious,aleppo,climates,bazaar,his/her,homogeneous,multiplication,moines,indexed,linguist,skeletal,foliage,societal,differentiated,informing,mammal,infancy,archival,cafes,malls,graeme,musee,schizophrenia,fargo,pronouns,derivation,descend,ascending,terminating,deviation,recaptured,confessions,weakening,tajikistan,bahadur,pasture,b/hip,donegal,supervising,sikhs,thinkers,euclidean,reinforcement,friars,portage,fuscous,lucknow,synchronized,assertion,choirs,privatization,corrosion,multitude,skyscraper,royalties,ligament,usable,spores,directs,clashed,stockport,fronted,dependency,contiguous,biologist,backstroke,powerhouse,frescoes,phylogenetic,welding,kildare,gabon,conveyed,augsburg,severn,continuum,sahib,lille,injuring,passeriformesfamily,succeeds,translating,unitarian,startup,turbulent,outlying,philanthropic,stanislaw,idols,claremont,conical,haryana,armagh,blended,implicit,conditioned,modulation,rochdale,labourers,coinage,shortstop,potsdam,gears,obesity,bestseller,advisers,bouts,comedians,jozef,lausanne,taxonomic,correlated,columbian,marne,indications,psychologists,libel,edict,beaufort,disadvantages,renal,finalized,racehorse,unconventional,disturbances,falsely,zoology,adorned,redesign,executing,narrower,commended,appliances,stalls,resurgence,saskatoon,miscellaneous,permitting,epoch,formula_11,cumbria,forefront,vedic,eastenders,disposed,supermarkets,rower,inhibitor,magnesium,colourful,yusuf,harrow,formulas,centrally,balancing,ionic,nocturnal,consolidate,ornate,raiding,charismatic,accelerate,nominate,residual,dhabi,commemorates,attribution,uninhabited,mindanao,atrocities,genealogical,romani,applicant,enactment,abstraction,trough,pulpit,minuscule,misconduct,grenades,timely,supplements,messaging,curvature,ceasefire,telangana,susquehanna,braking,redistribution,shreveport,neighbourhoods,gregorian,widowed,khuzestan,empowerment,scholastic,evangelist,peptide,topical,theorist,historia,thence,sudanese,museo,jurisprudence,masurian,frankish,headlined,recounted,netball,petitions,tolerant,hectare,truncated,southend,methane,captives,reigns,massif,subunit,acidic,weightlifting,footballers,sabah,britannia,tunisian,segregated,sawmill,withdrawing,unpaid,weaponry,somme,perceptions,unicode,alcoholism,durban,wrought,waterfalls,jihad,auschwitz,upland,eastbound,adjective,anhalt,evaluating,regimes,guildford,reproduced,pamphlets,hierarchical,maneuvers,hanoi,fabricated,repetition,enriched,arterial,replacements,tides,globalization,adequately,westbound,satisfactory,fleets,phosphorus,lastly,neuroscience,anchors,xinjiang,membranes,improvisation,shipments,orthodoxy,submissions,bolivian,mahmud,ramps,leyte,pastures,outlines,flees,transmitters,fares,sequential,stimulated,novice,alternately,symmetrical,breakaway,layered,baronets,lizards,blackish,edouard,horsepower,penang,principals,mercantile,maldives,overwhelmingly,hawke,rallied,prostate,conscription,juveniles,maccabi,carvings,strikers,sudbury,spurred,improves,lombardy,macquarie,parisian,elastic,distillery,shetland,humane,brentford,wrexham,warehouses,routines,encompassed,introductory,isfahan,instituto,palais,revolutions,sporadic,impoverished,portico,fellowships,speculative,enroll,dormant,adhere,fundamentally,sculpted,meritorious,template,upgrading,reformer,rectory,uncredited,indicative,creeks,galveston,radically,hezbollah,firearm,educating,prohibits,trondheim,locus,refit,headwaters,screenings,lowlands,wasps,coarse,attaining,sedimentary,perished,pitchfork,interned,cerro,stagecoach,aeronautical,liter,transitioned,haydn,inaccurate,legislatures,bromwich,knesset,spectroscopy,butte,asiatic,degraded,concordia,catastrophic,lobes,wellness,pensacola,periphery,hapoel,theta,horizontally,freiburg,liberalism,pleas,durable,warmian,offenses,mesopotamia,shandong,unsuitable,hospitalized,appropriately,phonetic,encompass,conversions,observes,illnesses,breakout,assigns,crowns,inhibitors,nightly,manifestation,fountains,maximize,alphabetical,sloop,expands,newtown,widening,gaddafi,commencing,camouflage,footprint,tyrol,barangays,universite,highlanders,budgets,query,lobbied,westchester,equator,stipulated,pointe,distinguishes,allotted,embankment,advises,storing,loyalists,fourier,rehearsals,starvation,gland,rihanna,tubular,expressive,baccalaureate,intersections,revered,carbonate,eritrea,craftsmen,cosmopolitan,sequencing,corridors,shortlisted,bangladeshi,persians,mimic,parades,repetitive,recommends,flanks,promoters,incompatible,teaming,ammonia,greyhound,solos,improper,legislator,newsweek,recurrent,vitro,cavendish,eireann,crises,prophets,mandir,strategically,guerrillas,formula_12,ghent,contenders,equivalence,drone,sociological,hamid,castes,statehood,aland,clinched,relaunched,tariffs,simulations,williamsburg,rotate,mediation,smallpox,harmonica,lodges,lavish,restrictive,o'sullivan,detainees,polynomials,echoes,intersecting,learners,elects,charlemagne,defiance,epsom,liszt,facilitating,absorbing,revelations,padua,pieter,pious,penultimate,mammalian,montenegrin,supplementary,widows,aromatic,croats,roanoke,trieste,legions,subdistrict,babylonian,grasslands,volga,violently,sparsely,oldies,telecommunication,respondents,quarries,downloadable,commandos,taxpayer,catalytic,malabar,afforded,copying,declines,nawab,junctions,assessing,filtering,classed,disused,compliant,christoph,gottingen,civilizations,hermitage,caledonian,whereupon,ethnically,springsteen,mobilization,terraces,indus,excel,zoological,enrichment,simulate,guitarists,registrar,cappella,invoked,reused,manchu,configured,uppsala,genealogy,mergers,casts,curricular,rebelled,subcontinent,horticultural,parramatta,orchestrated,dockyard,claudius,decca,prohibiting,turkmenistan,brahmin,clandestine,obligatory,elaborated,parasitic,helix,constraint,spearheaded,rotherham,eviction,adapting,albans,rescues,sociologist,guiana,convicts,occurrences,kamen,antennas,asturias,wheeled,sanitary,deterioration,trier,theorists,baseline,announcements,valea,planners,factual,serialized,serials,bilbao,demoted,fission,jamestown,cholera,alleviate,alteration,indefinite,sulfate,paced,climatic,valuation,artisans,proficiency,aegean,regulators,fledgling,sealing,influencing,servicemen,frequented,cancers,tambon,narayan,bankers,clarified,embodied,engraver,reorganisation,dissatisfied,dictated,supplemental,temperance,ratification,puget,nutrient,pretoria,papyrus,uniting,ascribed,cores,coptic,schoolhouse,barrio,1910s,armory,defected,transatlantic,regulates,ported,artefacts,specifies,boasted,scorers,mollusks,emitted,navigable,quakers,projective,dialogues,reunification,exponential,vastly,banners,unsigned,dissipated,halves,coincidentally,leasing,purported,escorting,estimation,foxes,lifespan,inflorescence,assimilation,showdown,staunch,prologue,ligand,superliga,telescopes,northwards,keynote,heaviest,taunton,redeveloped,vocalists,podlaskie,soyuz,rodents,azores,moravian,outset,parentheses,apparel,domestically,authoritative,polymers,monterrey,inhibit,launcher,jordanian,folds,taxis,mandates,singled,liechtenstein,subsistence,marxism,ousted,governorship,servicing,offseason,modernism,prism,devout,translators,islamist,chromosomes,pitted,bedfordshire,fabrication,authoritarian,javanese,leaflets,transient,substantive,predatory,sigismund,assassinate,diagrams,arrays,rediscovered,reclamation,spawning,fjord,peacekeeping,strands,fabrics,highs,regulars,tirana,ultraviolet,athenian,filly,barnet,naacp,nueva,favourites,terminates,showcases,clones,inherently,interpreting,bjorn,finely,lauded,unspecified,chola,pleistocene,insulation,antilles,donetsk,funnel,nutritional,biennale,reactivated,southport,primate,cavaliers,austrians,interspersed,restarted,suriname,amplifiers,wladyslaw,blockbuster,sportsman,minogue,brightness,benches,bridgeport,initiating,israelis,orbiting,newcomers,externally,scaling,transcribed,impairment,luxurious,longevity,impetus,temperament,ceilings,tchaikovsky,spreads,pantheon,bureaucracy,1820s,heraldic,villas,formula_13,galician,meath,avoidance,corresponded,headlining,connacht,seekers,rappers,solids,monograph,scoreless,opole,isotopes,himalayas,parodies,garments,microscopic,republished,havilland,orkney,demonstrators,pathogen,saturated,hellenistic,facilitates,aerodynamic,relocating,indochina,laval,astronomers,bequeathed,administrations,extracts,nagoya,torquay,demography,medicare,ambiguity,renumbered,pursuant,concave,syriac,electrode,dispersal,henan,bialystok,walsall,crystalline,puebla,janata,illumination,tianjin,enslaved,coloration,championed,defamation,grille,johor,rejoin,caspian,fatally,planck,workings,appointing,institutionalized,wessex,modernized,exemplified,regatta,jacobite,parochial,programmers,blending,eruptions,insurrection,regression,indices,sited,dentistry,mobilized,furnishings,levant,primaries,ardent,nagasaki,conqueror,dorchester,opined,heartland,amman,mortally,wellesley,bowlers,outputs,coveted,orthography,immersion,disrepair,disadvantaged,curate,childless,condensed,codice_1,remodeled,resultant,bolsheviks,superfamily,saxons,2010s,contractual,rivalries,malacca,oaxaca,magnate,vertebrae,quezon,olympiad,yucatan,tyres,macro,specialization,commendation,caliphate,gunnery,exiles,excerpts,fraudulent,adjustable,aramaic,interceptor,drumming,standardization,reciprocal,adolescents,federalist,aeronautics,favorably,enforcing,reintroduced,zhejiang,refining,biplane,banknotes,accordion,intersect,illustrating,summits,classmate,militias,biomass,massacres,epidemiology,reworked,wrestlemania,nantes,auditory,taxon,elliptical,chemotherapy,asserting,avoids,proficient,airmen,yellowstone,multicultural,alloys,utilization,seniority,kuyavian,huntsville,orthogonal,bloomington,cultivars,casimir,internment,repulsed,impedance,revolving,fermentation,parana,shutout,partnering,empowered,islamabad,polled,classify,amphibians,greyish,obedience,4x100,projectile,khyber,halfback,relational,d'ivoire,synonyms,endeavour,padma,customized,mastery,defenceman,berber,purge,interestingly,covent,promulgated,restricting,condemnation,hillsborough,walkers,privateer,intra,captaincy,naturalized,huffington,detecting,hinted,migrating,bayou,counterattack,anatomical,foraging,unsafe,swiftly,outdated,paraguayan,attire,masjid,endeavors,jerseys,triassic,quechua,growers,axial,accumulate,wastewater,cognition,fungal,animator,pagoda,kochi,uniformly,antibody,yerevan,hypotheses,combatants,italianate,draining,fragmentation,snowfall,formative,inversion,kitchener,identifier,additive,lucha,selects,ashland,cambrian,racetrack,trapping,congenital,primates,wavelengths,expansions,yeomanry,harcourt,wealthiest,awaited,punta,intervening,aggressively,vichy,piloted,midtown,tailored,heyday,metadata,guadalcanal,inorganic,hadith,pulses,francais,tangent,scandals,erroneously,tractors,pigment,constabulary,jiangsu,landfill,merton,basalt,astor,forbade,debuts,collisions,exchequer,stadion,roofed,flavour,sculptors,conservancy,dissemination,electrically,undeveloped,existent,surpassing,pentecostal,manifested,amend,formula_14,superhuman,barges,tunis,analytics,argyll,liquids,mechanized,domes,mansions,himalayan,indexing,reuters,nonlinear,purification,exiting,timbers,triangles,decommissioning,departmental,causal,fonts,americana,sept.,seasonally,incomes,razavi,sheds,memorabilia,rotational,terre,sutra,protege,yarmouth,grandmaster,annum,looted,imperialism,variability,liquidation,baptised,isotope,showcasing,milling,rationale,hammersmith,austen,streamlined,acknowledging,contentious,qaleh,breadth,turing,referees,feral,toulon,unofficially,identifiable,standout,labeling,dissatisfaction,jurgen,angrily,featherweight,cantons,constrained,dominates,standalone,relinquished,theologians,markedly,italics,downed,nitrate,likened,gules,craftsman,singaporean,pixels,mandela,moray,parity,departement,antigen,academically,burgh,brahma,arranges,wounding,triathlon,nouveau,vanuatu,banded,acknowledges,unearthed,stemming,authentication,byzantines,converge,nepali,commonplace,deteriorating,recalling,palette,mathematicians,greenish,pictorial,ahmedabad,rouen,validation,u.s.a.,'best,malvern,archers,converter,undergoes,fluorescent,logistical,notification,transvaal,illicit,symphonies,stabilization,worsened,fukuoka,decrees,enthusiast,seychelles,blogger,louvre,dignitaries,burundi,wreckage,signage,pinyin,bursts,federer,polarization,urbana,lazio,schism,nietzsche,venerable,administers,seton,kilograms,invariably,kathmandu,farmed,disqualification,earldom,appropriated,fluctuations,kermanshah,deployments,deformation,wheelbase,maratha,psalm,bytes,methyl,engravings,skirmish,fayette,vaccines,ideally,astrology,breweries,botanic,opposes,harmonies,irregularities,contended,gaulle,prowess,constants,aground,filipinos,fresco,ochreous,jaipur,willamette,quercus,eastwards,mortars,champaign,braille,reforming,horned,hunan,spacious,agitation,draught,specialties,flourishing,greensboro,necessitated,swedes,elemental,whorls,hugely,structurally,plurality,synthesizers,embassies,assad,contradictory,inference,discontent,recreated,inspectors,unicef,commuters,embryo,modifying,stints,numerals,communicated,boosted,trumpeter,brightly,adherence,remade,leases,restrained,eucalyptus,dwellers,planar,grooves,gainesville,daimler,anzac,szczecin,cornerback,prized,peking,mauritania,khalifa,motorized,lodging,instrumentalist,fortresses,cervical,formula_15,passerine,sectarian,researches,apprenticed,reliefs,disclose,gliding,repairing,queue,kyushu,literate,canoeing,sacrament,separatist,calabria,parkland,flowed,investigates,statistically,visionary,commits,dragoons,scrolls,premieres,revisited,subdued,censored,patterned,elective,outlawed,orphaned,leyland,richly,fujian,miniatures,heresy,plaques,countered,nonfiction,exponent,moravia,dispersion,marylebone,midwestern,enclave,ithaca,federated,electronically,handheld,microscopy,tolls,arrivals,climbers,continual,cossacks,moselle,deserts,ubiquitous,gables,forecasts,deforestation,vertebrates,flanking,drilled,superstructure,inspected,consultative,bypassed,ballast,subsidy,socioeconomic,relic,grenada,journalistic,administering,accommodated,collapses,appropriation,reclassified,foreword,porte,assimilated,observance,fragmented,arundel,thuringia,gonzaga,shenzhen,shipyards,sectional,ayrshire,sloping,dependencies,promenade,ecuadorian,mangrove,constructs,goalscorer,heroism,iteration,transistor,omnibus,hampstead,cochin,overshadowed,chieftain,scalar,finishers,ghanaian,abnormalities,monoplane,encyclopaedia,characterize,travancore,baronetage,bearers,biking,distributes,paving,christened,inspections,banco,humber,corinth,quadratic,albanians,lineages,majored,roadside,inaccessible,inclination,darmstadt,fianna,epilepsy,propellers,papacy,montagu,bhutto,sugarcane,optimized,pilasters,contend,batsmen,brabant,housemates,sligo,ascot,aquinas,supervisory,accorded,gerais,echoed,nunavut,conservatoire,carniola,quartermaster,gminas,impeachment,aquitaine,reformers,quarterfinal,karlsruhe,accelerator,coeducational,archduke,gelechiidae,seaplane,dissident,frenchman,palau,depots,hardcover,aachen,darreh,denominational,groningen,parcels,reluctance,drafts,elliptic,counters,decreed,airship,devotional,contradiction,formula_16,undergraduates,qualitative,guatemalan,slavs,southland,blackhawks,detrimental,abolish,chechen,manifestations,arthritis,perch,fated,hebei,peshawar,palin,immensely,havre,totalling,rampant,ferns,concourse,triples,elites,olympian,larva,herds,lipid,karabakh,distal,monotypic,vojvodina,batavia,multiplied,spacing,spellings,pedestrians,parchment,glossy,industrialization,dehydrogenase,patriotism,abolitionist,mentoring,elizabethan,figurative,dysfunction,abyss,constantin,middletown,stigma,mondays,gambia,gaius,israelites,renounced,nepalese,overcoming,buren,sulphur,divergence,predation,looting,iberia,futuristic,shelved,anthropological,innsbruck,escalated,clermont,entrepreneurial,benchmark,mechanically,detachments,populist,apocalyptic,exited,embryonic,stanza,readership,chiba,landlords,expansive,boniface,therapies,perpetrators,whitehall,kassel,masts,carriageway,clinch,pathogens,mazandaran,undesirable,teutonic,miocene,nagpur,juris,cantata,compile,diffuse,dynastic,reopening,comptroller,o'neal,flourish,electing,scientifically,departs,welded,modal,cosmology,fukushima,libertadores,chang'an,asean,generalization,localization,afrikaans,cricketers,accompanies,emigrants,esoteric,southwards,shutdown,prequel,fittings,innate,wrongly,equitable,dictionaries,senatorial,bipolar,flashbacks,semitism,walkway,lyrically,legality,sorbonne,vigorously,durga,samoan,karel,interchanges,patna,decider,registering,electrodes,anarchists,excursion,overthrown,gilan,recited,michelangelo,advertiser,kinship,taboo,cessation,formula_17,premiers,traversed,madurai,poorest,torneo,exerted,replicate,spelt,sporadically,horde,landscaping,razed,hindered,esperanto,manchuria,propellant,jalan,baha'is,sikkim,linguists,pandit,racially,ligands,dowry,francophone,escarpment,behest,magdeburg,mainstay,villiers,yangtze,grupo,conspirators,martyrdom,noticeably,lexical,kazakh,unrestricted,utilised,sired,inhabits,proofs,joseon,pliny,minted,buddhists,cultivate,interconnected,reuse,viability,australasian,derelict,resolving,overlooks,menon,stewardship,playwrights,thwarted,filmfare,disarmament,protections,bundles,sidelined,hypothesized,singer/songwriter,forage,netted,chancery,townshend,restructured,quotation,hyperbolic,succumbed,parliaments,shenandoah,apical,kibbutz,storeys,pastors,lettering,ukrainians,hardships,chihuahua,avail,aisles,taluka,antisemitism,assent,ventured,banksia,seamen,hospice,faroe,fearful,woreda,outfield,chlorine,transformer,tatar,panoramic,pendulum,haarlem,styria,cornice,importing,catalyzes,subunits,enamel,bakersfield,realignment,sorties,subordinates,deanery,townland,gunmen,tutelage,evaluations,allahabad,thrace,veneto,mennonite,sharia,subgenus,satisfies,puritan,unequal,gastrointestinal,ordinances,bacterium,horticulture,argonauts,adjectives,arable,duets,visualization,woolwich,revamped,euroleague,thorax,completes,originality,vasco,freighter,sardar,oratory,sects,extremes,signatories,exporting,arisen,exacerbated,departures,saipan,furlongs,d'italia,goring,dakar,conquests,docked,offshoot,okrug,referencing,disperse,netting,summed,rewritten,articulation,humanoid,spindle,competitiveness,preventive,facades,westinghouse,wycombe,synthase,emulate,fostering,abdel,hexagonal,myriad,caters,arjun,dismay,axiom,psychotherapy,colloquial,complemented,martinique,fractures,culmination,erstwhile,atrium,electronica,anarchism,nadal,montpellier,algebras,submitting,adopts,stemmed,overcame,internacional,asymmetric,gallipoli,gliders,flushing,extermination,hartlepool,tesla,interwar,patriarchal,hitherto,ganges,combatant,marred,philology,glastonbury,reversible,isthmus,undermined,southwark,gateshead,andalusia,remedies,hastily,optimum,smartphone,evade,patrolled,beheaded,dopamine,waivers,ugandan,gujarati,densities,predicting,intestinal,tentative,interstellar,kolonia,soloists,penetrated,rebellions,qeshlaq,prospered,colegio,deficits,konigsberg,deficient,accessing,relays,kurds,politburo,codified,incarnations,occupancy,cossack,metaphysical,deprivation,chopra,piccadilly,formula_18,makeshift,protestantism,alaskan,frontiers,faiths,tendon,dunkirk,durability,autobots,bonuses,coinciding,emails,gunboat,stucco,magma,neutrons,vizier,subscriptions,visuals,envisaged,carpets,smoky,schema,parliamentarian,immersed,domesticated,parishioners,flinders,diminutive,mahabharata,ballarat,falmouth,vacancies,gilded,twigs,mastering,clerics,dalmatia,islington,slogans,compressor,iconography,congolese,sanction,blends,bulgarians,moderator,outflow,textures,safeguard,trafalgar,tramways,skopje,colonialism,chimneys,jazeera,organisers,denoting,motivations,ganga,longstanding,deficiencies,gwynedd,palladium,holistic,fascia,preachers,embargo,sidings,busan,ignited,artificially,clearwater,cemented,northerly,salim,equivalents,crustaceans,oberliga,quadrangle,historiography,romanians,vaults,fiercely,incidental,peacetime,tonal,bhopal,oskar,radha,pesticides,timeslot,westerly,cathedrals,roadways,aldershot,connectors,brahmins,paler,aqueous,gustave,chromatic,linkage,lothian,specialises,aggregation,tributes,insurgent,enact,hampden,ghulam,federations,instigated,lyceum,fredrik,chairmanship,floated,consequent,antagonists,intimidation,patriarchate,warbler,heraldry,entrenched,expectancy,habitation,partitions,widest,launchers,nascent,ethos,wurzburg,lycee,chittagong,mahatma,merseyside,asteroids,yokosuka,cooperatives,quorum,redistricting,bureaucratic,yachts,deploying,rustic,phonology,chorale,cellist,stochastic,crucifixion,surmounted,confucian,portfolios,geothermal,crested,calibre,tropics,deferred,nasir,iqbal,persistence,essayist,chengdu,aborigines,fayetteville,bastion,interchangeable,burlesque,kilmarnock,specificity,tankers,colonels,fijian,quotations,enquiry,quito,palmerston,delle,multidisciplinary,polynesian,iodine,antennae,emphasised,manganese,baptists,galilee,jutland,latent,excursions,skepticism,tectonic,precursors,negligible,musique,misuse,vitoria,expressly,veneration,sulawesi,footed,mubarak,chongqing,chemically,midday,ravaged,facets,varma,yeovil,ethnographic,discounted,physicists,attache,disbanding,essen,shogunate,cooperated,waikato,realising,motherwell,pharmacology,sulfide,inward,expatriate,devoid,cultivar,monde,andean,groupings,goran,unaffected,moldovan,postdoctoral,coleophora,delegated,pronoun,conductivity,coleridge,disapproval,reappeared,microbial,campground,olsztyn,fostered,vaccination,rabbinical,champlain,milestones,viewership,caterpillar,effected,eupithecia,financier,inferred,uzbek,bundled,bandar,balochistan,mysticism,biosphere,holotype,symbolizes,lovecraft,photons,abkhazia,swaziland,subgroups,measurable,falkirk,valparaiso,ashok,discriminatory,rarity,tabernacle,flyweight,jalisco,westernmost,antiquarian,extracellular,margrave,colspan=9,midsummer,digestive,reversing,burgeoning,substitutes,medallist,khrushchev,guerre,folio,detonated,partido,plentiful,aggregator,medallion,infiltration,shaded,santander,fared,auctioned,permian,ramakrishna,andorra,mentors,diffraction,bukit,potentials,translucent,feminists,tiers,protracted,coburg,wreath,guelph,adventurer,he/she,vertebrate,pipelines,celsius,outbreaks,australasia,deccan,garibaldi,unionists,buildup,biochemical,reconstruct,boulders,stringent,barbed,wording,furnaces,pests,befriends,organises,popes,rizal,tentacles,cadre,tallahassee,punishments,occidental,formatted,mitigation,rulings,rubens,cascades,inducing,choctaw,volta,synagogues,movable,altarpiece,mitigate,practise,intermittently,encountering,memberships,earns,signify,retractable,amounting,pragmatic,wilfrid,dissenting,divergent,kanji,reconstituted,devonian,constitutions,levied,hendrik,starch,costal,honduran,ditches,polygon,eindhoven,superstars,salient,argus,punitive,purana,alluvial,flaps,inefficient,retracted,advantageous,quang,andersson,danville,binghamton,symbolize,conclave,shaanxi,silica,interpersonal,adept,frans,pavilions,lubbock,equip,sunken,limburg,activates,prosecutions,corinthian,venerated,shootings,retreats,parapet,orissa,riviere,animations,parodied,offline,metaphysics,bluffs,plume,piety,fruition,subsidized,steeplechase,shanxi,eurasia,angled,forecasting,suffragan,ashram,larval,labyrinth,chronicler,summaries,trailed,merges,thunderstorms,filtered,formula_19,advertisers,alpes,informatics,parti,constituting,undisputed,certifications,javascript,molten,sclerosis,rumoured,boulogne,hmong,lewes,breslau,notts,bantu,ducal,messengers,radars,nightclubs,bantamweight,carnatic,kaunas,fraternal,triggering,controversially,londonderry,visas,scarcity,offaly,uprisings,repelled,corinthians,pretext,kuomintang,kielce,empties,matriculated,pneumatic,expos,agile,treatises,midpoint,prehistory,oncology,subsets,hydra,hypertension,axioms,wabash,reiterated,swapped,achieves,premio,ageing,overture,curricula,challengers,subic,selangor,liners,frontline,shutter,validated,normalized,entertainers,molluscs,maharaj,allegation,youngstown,synth,thoroughfare,regionally,pillai,transcontinental,pedagogical,riemann,colonia,easternmost,tentatively,profiled,herefordshire,nativity,meuse,nucleotide,inhibits,huntingdon,throughput,recorders,conceding,domed,homeowners,centric,gabled,canoes,fringes,breeder,subtitled,fluoride,haplogroup,zionism,izmir,phylogeny,kharkiv,romanticism,adhesion,usaaf,delegations,lorestan,whalers,biathlon,vaulted,mathematically,pesos,skirmishes,heisman,kalamazoo,gesellschaft,launceston,interacts,quadruple,kowloon,psychoanalysis,toothed,ideologies,navigational,valence,induces,lesotho,frieze,rigging,undercarriage,explorations,spoof,eucharist,profitability,virtuoso,recitals,subterranean,sizeable,herodotus,subscriber,huxley,pivot,forewing,warring,boleslaw,bharatiya,suffixes,trois,percussionist,downturn,garrisons,philosophies,chants,mersin,mentored,dramatist,guilds,frameworks,thermodynamic,venomous,mehmed,assembling,rabbinic,hegemony,replicas,enlargement,claimant,retitled,utica,dumfries,metis,deter,assortment,tubing,afflicted,weavers,rupture,ornamentation,transept,salvaged,upkeep,callsign,rajput,stevenage,trimmed,intracellular,synchronization,consular,unfavorable,royalists,goldwyn,fasting,hussars,doppler,obscurity,currencies,amiens,acorn,tagore,townsville,gaussian,migrations,porta,anjou,graphite,seaport,monographs,gladiators,metrics,calligraphy,sculptural,swietokrzyskie,tolombeh,eredivisie,shoals,queries,carts,exempted,fiberglass,mirrored,bazar,progeny,formalized,mukherjee,professed,amazon.com,cathode,moreton,removable,mountaineers,nagano,transplantation,augustinian,steeply,epilogue,adapter,decisively,accelerating,mediaeval,substituting,tasman,devonshire,litres,enhancements,himmler,nephews,bypassing,imperfect,argentinian,reims,integrates,sochi,ascii,licences,niches,surgeries,fables,versatility,indra,footpath,afonso,crore,evaporation,encodes,shelling,conformity,simplify,updating,quotient,overt,firmware,umpires,architectures,eocene,conservatism,secretion,embroidery,f.c..,tuvalu,mosaics,shipwreck,prefectural,cohort,grievances,garnering,centerpiece,apoptosis,djibouti,bethesda,formula_20,shonen,richland,justinian,dormitories,meteorite,reliably,obtains,pedagogy,hardness,cupola,manifolds,amplification,steamers,familial,dumbarton,jerzy,genital,maidstone,salinity,grumman,signifies,presbytery,meteorology,procured,aegis,streamed,deletion,nuestra,mountaineering,accords,neuronal,khanate,grenoble,axles,dispatches,tokens,turku,auctions,propositions,planters,proclaiming,recommissioned,stravinsky,obverse,bombarded,waged,saviour,massacred,reformist,purportedly,resettlement,ravenna,embroiled,minden,revitalization,hikers,bridging,torpedoed,depletion,nizam,affectionately,latitudes,lubeck,spore,polymerase,aarhus,nazism,101st,buyout,galerie,diets,overflow,motivational,renown,brevet,deriving,melee,goddesses,demolish,amplified,tamworth,retake,brokerage,beneficiaries,henceforth,reorganised,silhouette,browsers,pollutants,peron,lichfield,encircled,defends,bulge,dubbing,flamenco,coimbatore,refinement,enshrined,grizzlies,capacitor,usefulness,evansville,interscholastic,rhodesian,bulletins,diamondbacks,rockers,platted,medalists,formosa,transporter,slabs,guadeloupe,disparate,concertos,violins,regaining,mandible,untitled,agnostic,issuance,hamiltonian,brampton,srpska,homology,downgraded,florentine,epitaph,kanye,rallying,analysed,grandstand,infinitely,antitrust,plundered,modernity,colspan=3|total,amphitheatre,doric,motorists,yemeni,carnivorous,probabilities,prelate,struts,scrapping,bydgoszcz,pancreatic,signings,predicts,compendium,ombudsman,apertura,appoints,rebbe,stereotypical,valladolid,clustered,touted,plywood,inertial,kettering,curving,d'honneur,housewives,grenadier,vandals,barbarossa,necked,waltham,reputedly,jharkhand,cistercian,pursues,viscosity,organiser,cloister,islet,stardom,moorish,himachal,strives,scripps,staggered,blasts,westwards,millimeters,angolan,hubei,agility,admirals,mordellistena,coincides,platte,vehicular,cordillera,riffs,schoolteacher,canaan,acoustics,tinged,reinforcing,concentrates,daleks,monza,selectively,musik,polynesia,exporter,reviving,macclesfield,bunkers,ballets,manors,caudal,microbiology,primes,unbroken,outcry,flocks,pakhtunkhwa,abelian,toowoomba,luminous,mould,appraisal,leuven,experimentally,interoperability,hideout,perak,specifying,knighthood,vasily,excerpt,computerized,niels,networked,byzantium,reaffirmed,geographer,obscured,fraternities,mixtures,allusion,accra,lengthened,inquest,panhandle,pigments,revolts,bluetooth,conjugate,overtaken,foray,coils,breech,streaks,impressionist,mendelssohn,intermediary,panned,suggestive,nevis,upazila,rotunda,mersey,linnaeus,anecdotes,gorbachev,viennese,exhaustive,moldavia,arcades,irrespective,orator,diminishing,predictive,cohesion,polarized,montage,avian,alienation,conus,jaffna,urbanization,seawater,extremity,editorials,scrolling,dreyfus,traverses,topographic,gunboats,extratropical,normans,correspondents,recognises,millennia,filtration,ammonium,voicing,complied,prefixes,diplomas,figurines,weakly,gated,oscillator,lucerne,embroidered,outpatient,airframe,fractional,disobedience,quarterbacks,formula_21,shinto,chiapas,epistle,leakage,pacifist,avignon,penrith,renders,mantua,screenplays,gustaf,tesco,alphabetically,rations,discharges,headland,tapestry,manipur,boolean,mediator,ebenezer,subchannel,fable,bestselling,ateneo,trademarks,recurrence,dwarfs,britannica,signifying,vikram,mediate,condensation,censuses,verbandsgemeinde,cartesian,sprang,surat,britons,chelmsford,courtenay,statistic,retina,abortions,liabilities,closures,mississauga,skyscrapers,saginaw,compounded,aristocrat,msnbc,stavanger,septa,interpretive,hinder,visibly,seeding,shutouts,irregularly,quebecois,footbridge,hydroxide,implicitly,lieutenants,simplex,persuades,midshipman,heterogeneous,officiated,crackdown,lends,tartu,altars,fractions,dissidents,tapered,modernisation,scripting,blazon,aquaculture,thermodynamics,sistan,hasidic,bellator,pavia,propagated,theorized,bedouin,transnational,mekong,chronicled,declarations,kickstarter,quotas,runtime,duquesne,broadened,clarendon,brownsville,saturation,tatars,electorates,malayan,replicated,observable,amphitheater,endorsements,referral,allentown,mormons,pantomime,eliminates,typeface,allegorical,varna,conduction,evoke,interviewer,subordinated,uyghur,landscaped,conventionally,ascend,edifice,postulated,hanja,whitewater,embarking,musicologist,tagalog,frontage,paratroopers,hydrocarbons,transliterated,nicolae,viewpoints,surrealist,asheville,falklands,hacienda,glide,opting,zimbabwean,discal,mortgages,nicaraguan,yadav,ghosh,abstracted,castilian,compositional,cartilage,intergovernmental,forfeited,importation,rapping,artes,republika,narayana,condominium,frisian,bradman,duality,marche,extremist,phosphorylation,genomes,allusions,valencian,habeas,ironworks,multiplex,harpsichord,emigrate,alternated,breda,waffen,smartphones,familiarity,regionalliga,herbaceous,piping,dilapidated,carboniferous,xviii,critiques,carcinoma,sagar,chippewa,postmodern,neapolitan,excludes,notoriously,distillation,tungsten,richness,installments,monoxide,chand,privatisation,molded,maths,projectiles,luoyang,epirus,lemma,concentric,incline,erroneous,sideline,gazetted,leopards,fibres,renovate,corrugated,unilateral,repatriation,orchestration,saeed,rockingham,loughborough,formula_22,bandleader,appellation,openness,nanotechnology,massively,tonnage,dunfermline,exposes,moored,ridership,motte,eurobasket,majoring,feats,silla,laterally,playlist,downwards,methodologies,eastbourne,daimyo,cellulose,leyton,norwalk,oblong,hibernian,opaque,insular,allegory,camogie,inactivation,favoring,masterpieces,rinpoche,serotonin,portrayals,waverley,airliner,longford,minimalist,outsourcing,excise,meyrick,qasim,organisational,synaptic,farmington,gorges,scunthorpe,zoned,tohoku,librarians,davao,decor,theatrically,brentwood,pomona,acquires,planter,capacitors,synchronous,skateboarding,coatings,turbocharged,ephraim,capitulation,scoreboard,hebrides,ensues,cereals,ailing,counterpoint,duplication,antisemitic,clique,aichi,oppressive,transcendental,incursions,rename,renumbering,powys,vestry,bitterly,neurology,supplanted,affine,susceptibility,orbiter,activating,overlaps,ecoregion,raman,canoer,darfur,microorganisms,precipitated,protruding,torun,anthropologists,rennes,kangaroos,parliamentarians,edits,littoral,archived,begum,rensselaer,microphones,ypres,empower,etruscan,wisden,montfort,calibration,isomorphic,rioting,kingship,verbally,smyrna,cohesive,canyons,fredericksburg,rahul,relativistic,micropolitan,maroons,industrialized,henchmen,uplift,earthworks,mahdi,disparity,cultured,transliteration,spiny,fragmentary,extinguished,atypical,inventors,biosynthesis,heralded,curacao,anomalies,aeroplane,surya,mangalore,maastricht,ashkenazi,fusiliers,hangzhou,emitting,monmouthshire,schwarzenegger,ramayana,peptides,thiruvananthapuram,alkali,coimbra,budding,reasoned,epithelial,harbors,rudimentary,classically,parque,ealing,crusades,rotations,riparian,pygmy,inertia,revolted,microprocessor,calendars,solvents,kriegsmarine,accademia,cheshmeh,yoruba,ardabil,mitra,genomic,notables,propagate,narrates,univision,outposts,polio,birkenhead,urinary,crocodiles,pectoral,barrymore,deadliest,rupees,chaim,protons,comical,astrophysics,unifying,formula_23,vassals,cortical,audubon,pedals,tenders,resorted,geophysical,lenders,recognising,tackling,lanarkshire,doctrinal,annan,combating,guangxi,estimating,selectors,tribunals,chambered,inhabiting,exemptions,curtailed,abbasid,kandahar,boron,bissau,150th,codenamed,wearer,whorl,adhered,subversive,famer,smelting,inserting,mogadishu,zoologist,mosul,stumps,almanac,olympiacos,stamens,participatory,cults,honeycomb,geologists,dividend,recursive,skiers,reprint,pandemic,liber,percentages,adversely,stoppage,chieftains,tubingen,southerly,overcrowding,unorganized,hangars,fulfil,hails,cantilever,woodbridge,pinus,wiesbaden,fertilization,fluorescence,enhances,plenary,troublesome,episodic,thrissur,kickboxing,allele,staffing,garda,televisions,philatelic,spacetime,bullpen,oxides,leninist,enrolling,inventive,truro,compatriot,ruskin,normative,assay,gotha,murad,illawarra,gendarmerie,strasse,mazraeh,rebounded,fanfare,liaoning,rembrandt,iranians,emirate,governs,latency,waterfowl,chairmen,katowice,aristocrats,eclipsed,sentient,sonatas,interplay,sacking,decepticons,dynamical,arbitrarily,resonant,petar,velocities,alludes,wastes,prefectures,belleville,sensibility,salvadoran,consolidating,medicaid,trainees,vivekananda,molar,porous,upload,youngster,infused,doctorates,wuhan,annihilation,enthusiastically,gamespot,kanpur,accumulating,monorail,operetta,tiling,sapporo,finns,calvinist,hydrocarbon,sparrows,orienteering,cornelis,minster,vuelta,plebiscite,embraces,panchayats,focussed,remediation,brahman,olfactory,reestablished,uniqueness,northumbria,rwandan,predominately,abode,ghats,balances,californian,uptake,bruges,inert,westerns,reprints,cairn,yarra,resurfaced,audible,rossini,regensburg,italiana,fleshy,irrigated,alerts,yahya,varanasi,marginalized,expatriates,cantonment,normandie,sahitya,directives,rounder,hulls,fictionalized,constables,inserts,hipped,potosi,navies,biologists,canteen,husbandry,augment,fortnight,assamese,kampala,o'keefe,paleolithic,bluish,promontory,consecutively,striving,niall,reuniting,dipole,friendlies,disapproved,thrived,netflix,liberian,dielectric,medway,strategist,sankt,pickups,hitters,encode,rerouted,claimants,anglesey,partitioned,cavan,flutes,reared,repainted,armaments,bowed,thoracic,balliol,piero,chaplains,dehestan,sender,junkers,sindhi,sickle,dividends,metallurgy,honorific,berths,namco,springboard,resettled,gansu,copyrighted,criticizes,utopian,bendigo,ovarian,binomial,spaceflight,oratorio,proprietors,supergroup,duplicated,foreground,strongholds,revolved,optimize,layouts,westland,hurler,anthropomorphic,excelsior,merchandising,reeds,vetoed,cryptography,hollyoaks,monash,flooring,ionian,resilience,johnstown,resolves,lawmakers,alegre,wildcards,intolerance,subculture,selector,slums,formulate,bayonet,istvan,restitution,interchangeably,awakens,rostock,serpentine,oscillation,reichstag,phenotype,recessed,piotr,annotated,preparedness,consultations,clausura,preferential,euthanasia,genoese,outcrops,freemasonry,geometrical,genesee,islets,prometheus,panamanian,thunderbolt,terraced,stara,shipwrecks,futebol,faroese,sharqi,aldermen,zeitung,unify,formula_24,humanism,syntactic,earthen,blyth,taxed,rescinded,suleiman,cymru,dwindled,vitality,superieure,resupply,adolphe,ardennes,rajiv,profiling,olympique,gestation,interfaith,milosevic,tagline,funerary,druze,silvery,plough,shrubland,relaunch,disband,nunatak,minimizing,excessively,waned,attaching,luminosity,bugle,encampment,electrostatic,minesweeper,dubrovnik,rufous,greenock,hochschule,assyrians,extracting,malnutrition,priya,attainment,anhui,connotations,predicate,seabirds,deduced,pseudonyms,gopal,plovdiv,refineries,imitated,kwazulu,terracotta,tenets,discourses,brandeis,whigs,dominions,pulmonate,landslides,tutors,determinant,richelieu,farmstead,tubercles,technicolor,hegel,redundancy,greenpeace,shortening,mules,distilled,xxiii,fundamentalist,acrylic,outbuildings,lighted,corals,signaled,transistors,cavite,austerity,76ers,exposures,dionysius,outlining,commutative,permissible,knowledgeable,howrah,assemblage,inhibited,crewmen,mbit/s,pyramidal,aberdeenshire,bering,rotates,atheism,howitzer,saone,lancet,fermented,contradicted,materiel,ofsted,numeric,uniformity,josephus,nazarene,kuwaiti,noblemen,pediment,emergent,campaigner,akademi,murcia,perugia,gallen,allsvenskan,finned,cavities,matriculation,rosters,twickenham,signatory,propel,readable,contends,artisan,flamboyant,reggio,italo,fumbles,widescreen,rectangle,centimetres,collaborates,envoys,rijeka,phonological,thinly,refractive,civilisation,reductase,cognate,dalhousie,monticello,lighthouses,jitsu,luneburg,socialite,fermi,collectible,optioned,marquee,jokingly,architecturally,kabir,concubine,nationalisation,watercolor,wicklow,acharya,pooja,leibniz,rajendra,nationalized,stalemate,bloggers,glutamate,uplands,shivaji,carolingian,bucuresti,dasht,reappears,muscat,functionally,formulations,hinged,hainan,catechism,autosomal,incremental,asahi,coeur,diversification,multilateral,fewest,recombination,finisher,harrogate,hangul,feasts,photovoltaic,paget,liquidity,alluded,incubation,applauded,choruses,malagasy,hispanics,bequest,underparts,cassava,kazimierz,gastric,eradication,mowtowr,tyrosine,archbishopric,e9e9e9,unproductive,uxbridge,hydrolysis,harbours,officio,deterministic,devonport,kanagawa,breaches,freetown,rhinoceros,chandigarh,janos,sanatorium,liberator,inequalities,agonist,hydrophobic,constructors,nagorno,snowboarding,welcomes,subscribed,iloilo,resuming,catalysts,stallions,jawaharlal,harriers,definitively,roughriders,hertford,inhibiting,elgar,randomized,incumbents,episcopate,rainforests,yangon,improperly,kemal,interpreters,diverged,uttarakhand,umayyad,phnom,panathinaikos,shabbat,diode,jiangxi,forbidding,nozzle,artistry,licensee,processions,staffs,decimated,expressionism,shingle,palsy,ontology,mahayana,maribor,sunil,hostels,edwardian,jetty,freehold,overthrew,eukaryotic,schuylkill,rawalpindi,sheath,recessive,ferenc,mandibles,berlusconi,confessor,convergent,ababa,slugging,rentals,sephardic,equivalently,collagen,markov,dynamically,hailing,depressions,sprawling,fairgrounds,indistinguishable,plutarch,pressurized,banff,coldest,braunschweig,mackintosh,sociedad,wittgenstein,tromso,airbase,lecturers,subtitle,attaches,purified,contemplated,dreamworks,telephony,prophetic,rockland,aylesbury,biscay,coherence,aleksandar,judoka,pageants,theses,homelessness,luthor,sitcoms,hinterland,fifths,derwent,privateers,enigmatic,nationalistic,instructs,superimposed,conformation,tricycle,dusan,attributable,unbeknownst,laptops,etching,archbishops,ayatollah,cranial,gharbi,interprets,lackawanna,abingdon,saltwater,tories,lender,minaj,ancillary,ranching,pembrokeshire,topographical,plagiarism,murong,marque,chameleon,assertions,infiltrated,guildhall,reverence,schenectady,formula_25,kollam,notary,mexicana,initiates,abdication,basra,theorems,ionization,dismantling,eared,censors,budgetary,numeral,verlag,excommunicated,distinguishable,quarried,cagliari,hindustan,symbolizing,watertown,descartes,relayed,enclosures,militarily,sault,devolved,dalian,djokovic,filaments,staunton,tumour,curia,villainous,decentralized,galapagos,moncton,quartets,onscreen,necropolis,brasileiro,multipurpose,alamos,comarca,jorgen,concise,mercia,saitama,billiards,entomologist,montserrat,lindbergh,commuting,lethbridge,phoenician,deviations,anaerobic,denouncing,redoubt,fachhochschule,principalities,negros,announcers,seconded,parrots,konami,revivals,approving,devotee,riyadh,overtook,morecambe,lichen,expressionist,waterline,silverstone,geffen,sternites,aspiration,behavioural,grenville,tripura,mediums,genders,pyotr,charlottesville,sacraments,programmable,ps100,shackleton,garonne,sumerian,surpass,authorizing,interlocking,lagoons,voiceless,advert,steeple,boycotted,alouettes,yosef,oxidative,sassanid,benefiting,sayyid,nauru,predetermined,idealism,maxillary,polymerization,semesters,munchen,conor,outfitted,clapham,progenitor,gheorghe,observational,recognitions,numerically,colonized,hazrat,indore,contaminants,fatality,eradicate,assyria,convocation,cameos,skillful,skoda,corfu,confucius,overtly,ramadan,wollongong,placements,d.c..,permutation,contemporaneous,voltages,elegans,universitat,samar,plunder,dwindling,neuter,antonin,sinhala,campania,solidified,stanzas,fibrous,marburg,modernize,sorcery,deutscher,florets,thakur,disruptive,infielder,disintegration,internazionale,vicariate,effigy,tripartite,corrective,klamath,environs,leavenworth,sandhurst,workmen,compagnie,hoseynabad,strabo,palisades,ordovician,sigurd,grandsons,defection,viacom,sinhalese,innovator,uncontrolled,slavonic,indexes,refrigeration,aircrew,superbike,resumption,neustadt,confrontations,arras,hindenburg,ripon,embedding,isomorphism,dwarves,matchup,unison,lofty,argos,louth,constitutionally,transitive,newington,facelift,degeneration,perceptual,aviators,enclosing,igneous,symbolically,academician,constitutionality,iso/iec,sacrificial,maturation,apprentices,enzymology,naturalistic,hajji,arthropods,abbess,vistula,scuttled,gradients,pentathlon,etudes,freedmen,melaleuca,thrice,conductive,sackville,franciscans,stricter,golds,kites,worshiped,monsignor,trios,orally,tiered,primacy,bodywork,castleford,epidemics,alveolar,chapelle,chemists,hillsboro,soulful,warlords,ngati,huguenot,diurnal,remarking,luger,motorways,gauss,jahan,cutoff,proximal,bandai,catchphrase,jonubi,ossetia,codename,codice_2,throated,itinerant,chechnya,riverfront,leela,evoked,entailed,zamboanga,rejoining,circuitry,haymarket,khartoum,feuds,braced,miyazaki,mirren,lubusz,caricature,buttresses,attrition,characterizes,widnes,evanston,materialism,contradictions,marist,midrash,gainsborough,ulithi,turkmen,vidya,escuela,patrician,inspirations,reagent,premierships,humanistic,euphrates,transitioning,belfry,zedong,adaption,kaliningrad,lobos,epics,waiver,coniferous,polydor,inductee,refitted,moraine,unsatisfactory,worsening,polygamy,rajya,nested,subgenre,broadside,stampeders,lingua,incheon,pretender,peloton,persuading,excitation,multan,predates,tonne,brackish,autoimmune,insulated,podcasts,iraqis,bodybuilding,condominiums,midlothian,delft,debtor,asymmetrical,lycaenidae,forcefully,pathogenic,tamaulipas,andaman,intravenous,advancements,senegalese,chronologically,realigned,inquirer,eusebius,dekalb,additives,shortlist,goldwater,hindustani,auditing,caterpillars,pesticide,nakhon,ingestion,lansdowne,traditionalist,northland,thunderbirds,josip,nominating,locale,ventricular,animators,verandah,epistles,surveyors,anthems,dredd,upheaval,passaic,anatolian,svalbard,associative,floodplain,taranaki,estuaries,irreducible,beginners,hammerstein,allocate,coursework,secreted,counteract,handwritten,foundational,passover,discoverer,decoding,wares,bourgeoisie,playgrounds,nazionale,abbreviations,seanad,golan,mishra,godavari,rebranding,attendances,backstory,interrupts,lettered,hasbro,ultralight,hormozgan,armee,moderne,subdue,disuse,improvisational,enrolment,persists,moderated,carinthia,hatchback,inhibitory,capitalized,anatoly,abstracts,albemarle,bergamo,insolvency,sentai,cellars,walloon,joked,kashmiri,dirac,materialized,renomination,homologous,gusts,eighteens,centrifugal,storied,baluchestan,formula_26,poincare,vettel,infuriated,gauges,streetcars,vedanta,stately,liquidated,goguryeo,swifts,accountancy,levee,acadian,hydropower,eustace,comintern,allotment,designating,torsion,molding,irritation,aerobic,halen,concerted,plantings,garrisoned,gramophone,cytoplasm,onslaught,requisitioned,relieving,genitive,centrist,jeong,espanola,dissolving,chatterjee,sparking,connaught,varese,arjuna,carpathian,empowering,meteorologist,decathlon,opioid,hohenzollern,fenced,ibiza,avionics,footscray,scrum,discounts,filament,directories,a.f.c,stiffness,quaternary,adventurers,transmits,harmonious,taizong,radiating,germantown,ejection,projectors,gaseous,nahuatl,vidyalaya,nightlife,redefined,refuted,destitute,arista,potters,disseminated,distanced,jamboree,kaohsiung,tilted,lakeshore,grained,inflicting,kreis,novelists,descendents,mezzanine,recast,fatah,deregulation,ac/dc,australis,kohgiluyeh,boreal,goths,authoring,intoxicated,nonpartisan,theodosius,pyongyang,shree,boyhood,sanfl,plenipotentiary,photosynthesis,presidium,sinaloa,honshu,texan,avenida,transmembrane,malays,acropolis,catalunya,vases,inconsistencies,methodists,quell,suisse,banat,simcoe,cercle,zealanders,discredited,equine,sages,parthian,fascists,interpolation,classifying,spinoff,yehuda,cruised,gypsum,foaled,wallachia,saraswati,imperialist,seabed,footnotes,nakajima,locales,schoolmaster,drosophila,bridgehead,immanuel,courtier,bookseller,niccolo,stylistically,portmanteau,superleague,konkani,millimetres,arboreal,thanjavur,emulation,sounders,decompression,commoners,infusion,methodological,osage,rococo,anchoring,bayreuth,formula_27,abstracting,symbolized,bayonne,electrolyte,rowed,corvettes,traversing,editorship,sampler,presidio,curzon,adirondack,swahili,rearing,bladed,lemur,pashtun,behaviours,bottling,zaire,recognisable,systematics,leeward,formulae,subdistricts,smithfield,vijaya,buoyancy,boosting,cantonal,rishi,airflow,kamakura,adana,emblems,aquifer,clustering,husayn,woolly,wineries,montessori,turntable,exponentially,caverns,espoused,pianists,vorpommern,vicenza,latterly,o'rourke,williamstown,generale,kosice,duisburg,poirot,marshy,mismanagement,mandalay,dagenham,universes,chiral,radiated,stewards,vegan,crankshaft,kyrgyz,amphibian,cymbals,infrequently,offenbach,environmentalist,repatriated,permutations,midshipmen,loudoun,refereed,bamberg,ornamented,nitric,selim,translational,dorsum,annunciation,gippsland,reflector,informational,regia,reactionary,ahmet,weathering,erlewine,legalized,berne,occupant,divas,manifests,analyzes,disproportionate,mitochondria,totalitarian,paulista,interscope,anarcho,correlate,brookfield,elongate,brunel,ordinal,precincts,volatility,equaliser,hittite,somaliland,ticketing,monochrome,ubuntu,chhattisgarh,titleholder,ranches,referendums,blooms,accommodates,merthyr,religiously,ryukyu,tumultuous,checkpoints,anode,mi'kmaq,cannonball,punctuation,remodelled,assassinations,criminology,alternates,yonge,pixar,namibian,piraeus,trondelag,hautes,lifeboats,shoal,atelier,vehemently,sadat,postcode,jainism,lycoming,undisturbed,lutherans,genomics,popmatters,tabriz,isthmian,notched,autistic,horsham,mites,conseil,bloomsbury,seung,cybertron,idris,overhauled,disbandment,idealized,goldfields,worshippers,lobbyist,ailments,paganism,herbarium,athenians,messerschmitt,faraday,entangled,'olya,untreated,criticising,howitzers,parvati,lobed,debussy,atonement,tadeusz,permeability,mueang,sepals,degli,optionally,fuelled,follies,asterisk,pristina,lewiston,congested,overpass,affixed,pleads,telecasts,stanislaus,cryptographic,friesland,hamstring,selkirk,antisubmarine,inundated,overlay,aggregates,fleur,trolleybus,sagan,ibsen,inductees,beltway,tiled,ladders,cadbury,laplace,ascetic,micronesia,conveying,bellingham,cleft,batches,usaid,conjugation,macedon,assisi,reappointed,brine,jinnah,prairies,screenwriting,oxidized,despatches,linearly,fertilizers,brazilians,absorbs,wagga,modernised,scorsese,ashraf,charlestown,esque,habitable,nizhny,lettres,tuscaloosa,esplanade,coalitions,carbohydrates,legate,vermilion,standardised,galleria,psychoanalytic,rearrangement,substation,competency,nationalised,reshuffle,reconstructions,mehdi,bougainville,receivership,contraception,enlistment,conducive,aberystwyth,solicitors,dismisses,fibrosis,montclair,homeowner,surrealism,s.h.i.e.l.d,peregrine,compilers,1790s,parentage,palmas,rzeszow,worldview,eased,svenska,housemate,bundestag,originator,enlisting,outwards,reciprocity,formula_28,carbohydrate,democratically,firefighting,romagna,acknowledgement,khomeini,carbide,quests,vedas,characteristically,guwahati,brixton,unintended,brothels,parietal,namur,sherbrooke,moldavian,baruch,milieu,undulating,laurier,entre,dijon,ethylene,abilene,heracles,paralleling,ceres,dundalk,falun,auspicious,chisinau,polarity,foreclosure,templates,ojibwe,punic,eriksson,biden,bachchan,glaciation,spitfires,norsk,nonviolent,heidegger,algonquin,capacitance,cassettes,balconies,alleles,airdate,conveys,replays,classifies,infrequent,amine,cuttings,rarer,woking,olomouc,amritsar,rockabilly,illyrian,maoist,poignant,tempore,stalinist,segmented,bandmate,mollusc,muhammed,totalled,byrds,tendered,endogenous,kottayam,aisne,oxidase,overhears,illustrators,verve,commercialization,purplish,directv,moulded,lyttelton,baptismal,captors,saracens,georgios,shorten,polity,grids,fitzwilliam,sculls,impurities,confederations,akhtar,intangible,oscillations,parabolic,harlequin,maulana,ovate,tanzanian,singularity,confiscation,qazvin,speyer,phonemes,overgrown,vicarage,gurion,undocumented,niigata,thrones,preamble,stave,interment,liiga,ataturk,aphrodite,groupe,indentured,habsburgs,caption,utilitarian,ozark,slovenes,reproductions,plasticity,serbo,dulwich,castel,barbuda,salons,feuding,lenape,wikileaks,swamy,breuning,shedding,afield,superficially,operationally,lamented,okanagan,hamadan,accolade,furthering,adolphus,fyodor,abridged,cartoonists,pinkish,suharto,cytochrome,methylation,debit,colspan=9|,refine,taoist,signalled,herding,leaved,bayan,fatherland,rampart,sequenced,negation,storyteller,occupiers,barnabas,pelicans,nadir,conscripted,railcars,prerequisite,furthered,columba,carolinas,markup,gwalior,franche,chaco,eglinton,ramparts,rangoon,metabolites,pollination,croat,televisa,holyoke,testimonial,setlist,safavid,sendai,georgians,shakespearean,galleys,regenerative,krzysztof,overtones,estado,barbary,cherbourg,obispo,sayings,composites,sainsbury,deliberation,cosmological,mahalleh,embellished,ascap,biala,pancras,calumet,grands,canvases,antigens,marianas,defenseman,approximated,seedlings,soren,stele,nuncio,immunology,testimonies,glossary,recollections,suitability,tampere,venous,cohomology,methanol,echoing,ivanovich,warmly,sterilization,imran,multiplying,whitechapel,undersea,xuanzong,tacitus,bayesian,roundhouse,correlations,rioters,molds,fiorentina,bandmates,mezzo,thani,guerilla,200th,premiums,tamils,deepwater,chimpanzees,tribesmen,selwyn,globo,turnovers,punctuated,erode,nouvelle,banbury,exponents,abolishing,helical,maimonides,endothelial,goteborg,infield,encroachment,cottonwood,mazowiecki,parable,saarbrucken,reliever,epistemology,artistes,enrich,rationing,formula_29,palmyra,subfamilies,kauai,zoran,fieldwork,arousal,creditor,friuli,celts,comoros,equated,escalation,negev,tallied,inductive,anion,netanyahu,mesoamerican,lepidoptera,aspirated,remit,westmorland,italic,crosse,vaclav,fuego,owain,balmain,venetians,ethnicities,deflected,ticino,apulia,austere,flycatcher,reprising,repressive,hauptbahnhof,subtype,ophthalmology,summarizes,eniwetok,colonisation,subspace,nymphalidae,earmarked,tempe,burnet,crests,abbots,norwegians,enlarge,ashoka,frankfort,livorno,malware,renters,singly,iliad,moresby,rookies,gustavus,affirming,alleges,legume,chekhov,studded,abdicated,suzhou,isidore,townsite,repayment,quintus,yankovic,amorphous,constructor,narrowing,industrialists,tanganyika,capitalization,connective,mughals,rarities,aerodynamics,worthing,antalya,diagnostics,shaftesbury,thracian,obstetrics,benghazi,multiplier,orbitals,livonia,roscommon,intensify,ravel,oaths,overseer,locomotion,necessities,chickasaw,strathclyde,treviso,erfurt,aortic,contemplation,accrington,markazi,predeceased,hippocampus,whitecaps,assemblyman,incursion,ethnography,extraliga,reproducing,directorship,benzene,byway,stupa,taxable,scottsdale,onondaga,favourably,countermeasures,lithuanians,thatched,deflection,tarsus,consuls,annuity,paralleled,contextual,anglian,klang,hoisted,multilingual,enacting,samaj,taoiseach,carthaginian,apologised,hydrology,entrant,seamless,inflorescences,mugabe,westerners,seminaries,wintering,penzance,mitre,sergeants,unoccupied,delimitation,discriminate,upriver,abortive,nihon,bessarabia,calcareous,buffaloes,patil,daegu,streamline,berks,chaparral,laity,conceptions,typified,kiribati,threaded,mattel,eccentricity,signified,patagonia,slavonia,certifying,adnan,astley,sedition,minimally,enumerated,nikos,goalless,walid,narendra,causa,missoula,coolant,dalek,outcrop,hybridization,schoolchildren,peasantry,afghans,confucianism,shahr,gallic,tajik,kierkegaard,sauvignon,commissar,patriarchs,tuskegee,prussians,laois,ricans,talmudic,officiating,aesthetically,baloch,antiochus,separatists,suzerainty,arafat,shading,u.s.c,chancellors,inc..,toolkit,nepenthes,erebidae,solicited,pratap,kabbalah,alchemist,caltech,darjeeling,biopic,spillway,kaiserslautern,nijmegen,bolstered,neath,pahlavi,eugenics,bureaus,retook,northfield,instantaneous,deerfield,humankind,selectivity,putative,boarders,cornhuskers,marathas,raikkonen,aliabad,mangroves,garages,gulch,karzai,poitiers,chernobyl,thane,alexios,belgrano,scion,solubility,urbanized,executable,guizhou,nucleic,tripled,equalled,harare,houseguests,potency,ghazi,repeater,overarching,regrouped,broward,ragtime,d'art,nandi,regalia,campsites,mamluk,plating,wirral,presumption,zenit,archivist,emmerdale,decepticon,carabidae,kagoshima,franconia,guarani,formalism,diagonally,submarginal,denys,walkways,punts,metrolink,hydrographic,droplets,upperside,martyred,hummingbird,antebellum,curiously,mufti,friary,chabad,czechs,shaykh,reactivity,berklee,turbonilla,tongan,sultans,woodville,unlicensed,enmity,dominicans,operculum,quarrying,watercolour,catalyzed,gatwick,'what,mesozoic,auditors,shizuoka,footballing,haldane,telemundo,appended,deducted,disseminate,o'shea,pskov,abrasive,entente,gauteng,calicut,lemurs,elasticity,suffused,scopula,staining,upholding,excesses,shostakovich,loanwords,naidu,championnat,chromatography,boasting,goaltenders,engulfed,salah,kilogram,morristown,shingles,shi'a,labourer,renditions,frantisek,jekyll,zonal,nanda,sheriffs,eigenvalues,divisione,endorsing,ushered,auvergne,cadres,repentance,freemasons,utilising,laureates,diocletian,semiconductors,o'grady,vladivostok,sarkozy,trackage,masculinity,hydroxyl,mervyn,muskets,speculations,gridiron,opportunistic,mascots,aleutian,fillies,sewerage,excommunication,borrowers,capillary,trending,sydenham,synthpop,rajah,cagayan,deportes,kedah,faure,extremism,michoacan,levski,culminates,occitan,bioinformatics,unknowingly,inciting,emulated,footpaths,piacenza,dreadnought,viceroyalty,oceanographic,scouted,combinatorial,ornithologist,cannibalism,mujahideen,independiente,cilicia,hindwing,minimized,odeon,gyorgy,rubles,purchaser,collieries,kickers,interurban,coiled,lynchburg,respondent,plzen,detractors,etchings,centering,intensification,tomography,ranjit,warblers,retelling,reinstatement,cauchy,modulus,redirected,evaluates,beginner,kalateh,perforated,manoeuvre,scrimmage,internships,megawatts,mottled,haakon,tunbridge,kalyan,summarised,sukarno,quetta,canonized,henryk,agglomeration,coahuila,diluted,chiropractic,yogyakarta,talladega,sheik,cation,halting,reprisals,sulfuric,musharraf,sympathizers,publicised,arles,lectionary,fracturing,startups,sangha,latrobe,rideau,ligaments,blockading,cremona,lichens,fabaceae,modulated,evocative,embodies,battersea,indistinct,altai,subsystem,acidity,somatic,formula_30,tariq,rationality,sortie,ashlar,pokal,cytoplasmic,valour,bangla,displacing,hijacking,spectrometry,westmeath,weill,charing,goias,revolvers,individualized,tenured,nawaz,piquet,chanted,discard,bernd,phalanx,reworking,unilaterally,subclass,yitzhak,piloting,circumvent,disregarded,semicircular,viscous,tibetans,endeavours,retaliated,cretan,vienne,workhouse,sufficiency,aurangzeb,legalization,lipids,expanse,eintracht,sanjak,megas,125th,bahraini,yakima,eukaryotes,thwart,affirmation,peloponnese,retailing,carbonyl,chairwoman,macedonians,dentate,rockaway,correctness,wealthier,metamorphic,aragonese,fermanagh,pituitary,schrodinger,evokes,spoiler,chariots,akita,genitalia,combe,confectionery,desegregation,experiential,commodores,persepolis,viejo,restorations,virtualization,hispania,printmaking,stipend,yisrael,theravada,expended,radium,tweeted,polygonal,lippe,charente,leveraged,cutaneous,fallacy,fragrant,bypasses,elaborately,rigidity,majid,majorca,kongo,plasmodium,skits,audiovisual,eerste,staircases,prompts,coulthard,northwestward,riverdale,beatrix,copyrights,prudential,communicates,mated,obscenity,asynchronous,analyse,hansa,searchlight,farnborough,patras,asquith,qarah,contours,fumbled,pasteur,redistributed,almeria,sanctuaries,jewry,israelite,clinicians,koblenz,bookshop,affective,goulburn,panelist,sikorsky,cobham,mimics,ringed,portraiture,probabilistic,girolamo,intelligible,andalusian,jalal,athenaeum,eritrean,auxiliaries,pittsburg,devolution,sangam,isolating,anglers,cronulla,annihilated,kidderminster,synthesize,popularised,theophilus,bandstand,innumerable,chagrin,retroactively,weser,multiples,birdlife,goryeo,pawnee,grosser,grappling,tactile,ahmadinejad,turboprop,erdogan,matchday,proletarian,adhering,complements,austronesian,adverts,luminaries,archeology,impressionism,conifer,sodomy,interracial,platoons,lessen,postings,pejorative,registrations,cookery,persecutions,microbes,audits,idiosyncratic,subsp,suspensions,restricts,colouring,ratify,instrumentals,nucleotides,sulla,posits,bibliotheque,diameters,oceanography,instigation,subsumed,submachine,acceptor,legation,borrows,sedge,discriminated,loaves,insurers,highgate,detectable,abandons,kilns,sportscaster,harwich,iterations,preakness,arduous,tensile,prabhu,shortwave,philologist,shareholding,vegetative,complexities,councilors,distinctively,revitalize,automaton,amassing,montreux,khanh,surabaya,nurnberg,pernambuco,cuisines,charterhouse,firsts,tercera,inhabitant,homophobia,naturalism,einar,powerplant,coruna,entertainments,whedon,rajputs,raton,democracies,arunachal,oeuvre,wallonia,jeddah,trolleybuses,evangelism,vosges,kiowa,minimise,encirclement,undertakes,emigrant,beacons,deepened,grammars,publius,preeminent,seyyed,repechage,crafting,headingley,osteopathic,lithography,hotly,bligh,inshore,betrothed,olympians,formula_31,dissociation,trivandrum,arran,petrovic,stettin,disembarked,simplification,bronzes,philo,acrobatic,jonsson,conjectured,supercharged,kanto,detects,cheeses,correlates,harmonics,lifecycle,sudamericana,reservists,decayed,elitserien,parametric,113th,dusky,hogarth,modulo,symbiotic,monopolies,discontinuation,converges,southerners,tucuman,eclipses,enclaves,emits,famicom,caricatures,artistically,levelled,mussels,erecting,mouthparts,cunard,octaves,crucible,guardia,unusable,lagrangian,droughts,ephemeral,pashto,canis,tapering,sasebo,silurian,metallurgical,outscored,evolves,reissues,sedentary,homotopy,greyhawk,reagents,inheriting,onshore,tilting,rebuffed,reusable,naturalists,basingstoke,insofar,offensives,dravidian,curators,planks,rajan,isoforms,flagstaff,preside,globular,egalitarian,linkages,biographers,goalscorers,molybdenum,centralised,nordland,jurists,ellesmere,rosberg,hideyoshi,restructure,biases,borrower,scathing,redress,tunnelling,workflow,magnates,mahendra,dissenters,plethora,transcriptions,handicrafts,keyword,xi'an,petrograd,unser,prokofiev,90deg,madan,bataan,maronite,kearny,carmarthen,termini,consulates,disallowed,rockville,bowery,fanzine,docklands,bests,prohibitions,yeltsin,selassie,naturalization,realisation,dispensary,tribeca,abdulaziz,pocahontas,stagnation,pamplona,cuneiform,propagating,subsurface,christgau,epithelium,schwerin,lynching,routledge,hanseatic,upanishad,glebe,yugoslavian,complicity,endowments,girona,mynetworktv,entomology,plinth,ba'ath,supercup,torus,akkadian,salted,englewood,commandery,belgaum,prefixed,colorless,dartford,enthroned,caesarea,nominative,sandown,safeguards,hulled,formula_32,leamington,dieppe,spearhead,generalizations,demarcation,llanelli,masque,brickwork,recounting,sufism,strikingly,petrochemical,onslow,monologues,emigrating,anderlecht,sturt,hossein,sakhalin,subduction,novices,deptford,zanjan,airstrikes,coalfield,reintroduction,timbaland,hornby,messianic,stinging,universalist,situational,radiocarbon,strongman,rowling,saloons,traffickers,overran,fribourg,cambrai,gravesend,discretionary,finitely,archetype,assessor,pilipinas,exhumed,invocation,interacted,digitized,timisoara,smelter,teton,sexism,precepts,srinagar,pilsudski,carmelite,hanau,scoreline,hernando,trekking,blogging,fanbase,wielded,vesicles,nationalization,banja,rafts,motoring,luang,takeda,girder,stimulates,histone,sunda,nanoparticles,attains,jumpers,catalogued,alluding,pontus,ancients,examiners,shinkansen,ribbentrop,reimbursement,pharmacological,ramat,stringed,imposes,cheaply,transplanted,taiping,mizoram,looms,wallabies,sideman,kootenay,encased,sportsnet,revolutionized,tangier,benthic,runic,pakistanis,heatseekers,shyam,mishnah,presbyterians,stadt,sutras,straddles,zoroastrian,infer,fueling,gymnasts,ofcom,gunfight,journeyman,tracklist,oshawa,ps500,pa'in,mackinac,xiongnu,mississippian,breckinridge,freemason,bight,autoroute,liberalization,distantly,thrillers,solomons,presumptive,romanization,anecdotal,bohemians,unpaved,milder,concurred,spinners,alphabets,strenuous,rivieres,kerrang,mistreatment,dismounted,intensively,carlist,dancehall,shunting,pluralism,trafficked,brokered,bonaventure,bromide,neckar,designates,malian,reverses,sotheby,sorghum,serine,environmentalists,languedoc,consulship,metering,bankstown,handlers,militiamen,conforming,regularity,pondicherry,armin,capsized,consejo,capitalists,drogheda,granular,purged,acadians,endocrine,intramural,elicit,terns,orientations,miklos,omitting,apocryphal,slapstick,brecon,pliocene,affords,typography,emigre,tsarist,tomasz,beset,nishi,necessitating,encyclical,roleplaying,journeyed,inflow,sprints,progressives,novosibirsk,cameroonian,ephesus,speckled,kinshasa,freiherr,burnaby,dalmatian,torrential,rigor,renegades,bhakti,nurburgring,cosimo,convincingly,reverting,visayas,lewisham,charlottetown,charadriiformesfamily,transferable,jodhpur,converters,deepening,camshaft,underdeveloped,protease,polonia,uterine,quantify,tobruk,dealerships,narasimha,fortran,inactivity,1780s,victors,categorised,naxos,workstation,skink,sardinian,chalice,precede,dammed,sondheim,phineas,tutored,sourcing,uncompromising,placer,tyneside,courtiers,proclaims,pharmacies,hyogo,booksellers,sengoku,kursk,spectrometer,countywide,wielkopolski,bobsleigh,shetty,llywelyn,consistory,heretics,guinean,cliches,individualism,monolithic,imams,usability,bursa,deliberations,railings,torchwood,inconsistency,balearic,stabilizer,demonstrator,facet,radioactivity,outboard,educates,d'oyly,heretical,handover,jurisdictional,shockwave,hispaniola,conceptually,routers,unaffiliated,trentino,formula_33,cypriots,intervenes,neuchatel,formulating,maggiore,delisted,alcohols,thessaly,potable,estimator,suborder,fluency,mimicry,clergymen,infrastructures,rivals.com,baroda,subplot,majlis,plano,clinching,connotation,carinae,savile,intercultural,transcriptional,sandstones,ailerons,annotations,impresario,heinkel,scriptural,intermodal,astrological,ribbed,northeastward,posited,boers,utilise,kalmar,phylum,breakwater,skype,textured,guideline,azeri,rimini,massed,subsidence,anomalous,wolfsburg,polyphonic,accrediting,vodacom,kirov,captaining,kelantan,logie,fervent,eamon,taper,bundeswehr,disproportionately,divination,slobodan,pundits,hispano,kinetics,reunites,makati,ceasing,statistician,amending,chiltern,eparchy,riverine,melanoma,narragansett,pagans,raged,toppled,breaching,zadar,holby,dacian,ochre,velodrome,disparities,amphoe,sedans,webpage,williamsport,lachlan,groton,baring,swastika,heliport,unwillingness,razorbacks,exhibitors,foodstuffs,impacting,tithe,appendages,dermot,subtypes,nurseries,balinese,simulating,stary,remakes,mundi,chautauqua,geologically,stockade,hakka,dilute,kalimantan,pahang,overlapped,fredericton,baha'u'llah,jahangir,damping,benefactors,shomali,triumphal,cieszyn,paradigms,shielded,reggaeton,maharishi,zambian,shearing,golestan,mirroring,partitioning,flyover,songbook,incandescent,merrimack,huguenots,sangeet,vulnerabilities,trademarked,drydock,tantric,honoris,queenstown,labelling,iterative,enlists,statesmen,anglicans,herge,qinghai,burgundian,islami,delineated,zhuge,aggregated,banknote,qatari,suitably,tapestries,asymptotic,charleroi,majorities,pyramidellidae,leanings,climactic,tahir,ramsar,suppressor,revisionist,trawler,ernakulam,penicillium,categorization,slits,entitlement,collegium,earths,benefice,pinochet,puritans,loudspeaker,stockhausen,eurocup,roskilde,alois,jaroslav,rhondda,boutiques,vigor,neurotransmitter,ansar,malden,ferdinando,sported,relented,intercession,camberwell,wettest,thunderbolts,positional,oriel,cloverleaf,penalized,shoshone,rajkumar,completeness,sharjah,chromosomal,belgians,woolen,ultrasonic,sequentially,boleyn,mordella,microsystems,initiator,elachista,mineralogy,rhododendron,integrals,compostela,hamza,sawmills,stadio,berlioz,maidens,stonework,yachting,tappeh,myocardial,laborer,workstations,costumed,nicaea,lanark,roundtable,mashhad,nablus,algonquian,stuyvesant,sarkar,heroines,diwan,laments,intonation,intrigues,almaty,feuded,grandes,algarve,rehabilitate,macrophages,cruciate,dismayed,heuristic,eliezer,kozhikode,covalent,finalised,dimorphism,yaroslavl,overtaking,leverkusen,middlebury,feeders,brookings,speculates,insoluble,lodgings,jozsef,cysteine,shenyang,habilitation,spurious,brainchild,mtdna,comique,albedo,recife,partick,broadening,shahi,orientated,himalaya,swabia,palme,mennonites,spokeswoman,conscripts,sepulchre,chartres,eurozone,scaffold,invertebrate,parishad,bagan,heian,watercolors,basse,supercomputer,commences,tarragona,plainfield,arthurian,functor,identically,murex,chronicling,pressings,burrowing,histoire,guayaquil,goalkeeping,differentiable,warburg,machining,aeneas,kanawha,holocene,ramesses,reprisal,qingdao,avatars,turkestan,cantatas,besieging,repudiated,teamsters,equipping,hydride,ahmadiyya,euston,bottleneck,computations,terengganu,kalinga,stela,rediscovery,'this,azhar,stylised,karelia,polyethylene,kansai,motorised,lounges,normalization,calculators,1700s,goalkeepers,unfolded,commissary,cubism,vignettes,multiverse,heaters,briton,sparingly,childcare,thorium,plock,riksdag,eunuchs,catalysis,limassol,perce,uncensored,whitlam,ulmus,unites,mesopotamian,refraction,biodiesel,forza,fulda,unseated,mountbatten,shahrak,selenium,osijek,mimicking,antimicrobial,axons,simulcasting,donizetti,swabian,sportsmen,hafiz,neared,heraclius,locates,evaded,subcarpathian,bhubaneswar,negeri,jagannath,thaksin,aydin,oromo,lateran,goldsmiths,multiculturalism,cilia,mihai,evangelists,lorient,qajar,polygons,vinod,mechanised,anglophone,prefabricated,mosses,supervillain,airliners,biofuels,iodide,innovators,valais,wilberforce,logarithm,intelligentsia,dissipation,sanctioning,duchies,aymara,porches,simulators,mostar,telepathic,coaxial,caithness,burghs,fourths,stratification,joaquim,scribes,meteorites,monarchist,germination,vries,desiring,replenishment,istria,winemaking,tammany,troupes,hetman,lanceolate,pelagic,triptych,primeira,scant,outbound,hyphae,denser,bentham,basie,normale,executes,ladislaus,kontinental,herat,cruiserweight,activision,customization,manoeuvres,inglewood,northwood,waveform,investiture,inpatient,alignments,kiryat,rabat,archimedes,ustad,monsanto,archetypal,kirkby,sikhism,correspondingly,catskill,overlaid,petrels,widowers,unicameral,federalists,metalcore,gamerankings,mussel,formula_34,lymphocytes,cystic,southgate,vestiges,immortals,kalam,strove,amazons,pocono,sociologists,sopwith,adheres,laurens,caregivers,inspecting,transylvanian,rebroadcast,rhenish,miserables,pyrams,blois,newtonian,carapace,redshirt,gotland,nazir,unilever,distortions,linebackers,federalism,mombasa,lumen,bernoulli,favouring,aligarh,denounce,steamboats,dnieper,stratigraphic,synths,bernese,umass,icebreaker,guanajuato,heisenberg,boldly,diodes,ladakh,dogmatic,scriptwriter,maritimes,battlestar,symposia,adaptable,toluca,bhavan,nanking,ieyasu,picardy,soybean,adalbert,brompton,deutsches,brezhnev,glandular,laotian,hispanicized,ibadan,personification,dalit,yamuna,regio,dispensed,yamagata,zweibrucken,revising,fandom,stances,participle,flavours,khitan,vertebral,crores,mayaguez,dispensation,guntur,undefined,harpercollins,unionism,meena,leveling,philippa,refractory,telstra,judea,attenuation,pylons,elaboration,elegy,edging,gracillariidae,residencies,absentia,reflexive,deportations,dichotomy,stoves,sanremo,shimon,menachem,corneal,conifers,mordellidae,facsimile,diagnoses,cowper,citta,viticulture,divisive,riverview,foals,mystics,polyhedron,plazas,airspeed,redgrave,motherland,impede,multiplicity,barrichello,airships,pharmacists,harvester,clays,payloads,differentiating,popularize,caesars,tunneling,stagnant,circadian,indemnity,sensibilities,musicology,prefects,serfs,metra,lillehammer,carmarthenshire,kiosks,welland,barbican,alkyl,tillandsia,gatherers,asociacion,showings,bharati,brandywine,subversion,scalable,pfizer,dawla,barium,dardanelles,nsdap,konig,ayutthaya,hodgkin,sedimentation,completions,purchasers,sponsorships,maximizing,banked,taoism,minot,enrolls,fructose,aspired,capuchin,outages,artois,carrollton,totality,osceola,pawtucket,fontainebleau,converged,queretaro,competencies,botha,allotments,sheaf,shastri,obliquely,banding,catharines,outwardly,monchengladbach,driest,contemplative,cassini,ranga,pundit,kenilworth,tiananmen,disulfide,formula_35,townlands,codice_3,looping,caravans,rachmaninoff,segmentation,fluorine,anglicised,gnostic,dessau,discern,reconfigured,altrincham,rebounding,battlecruiser,ramblers,1770s,convective,triomphe,miyagi,mourners,instagram,aloft,breastfeeding,courtyards,folkestone,changsha,kumamoto,saarland,grayish,provisionally,appomattox,uncial,classicism,mahindra,elapsed,supremes,monophyletic,cautioned,formula_36,noblewoman,kernels,sucre,swaps,bengaluru,grenfell,epicenter,rockhampton,worshipful,licentiate,metaphorical,malankara,amputated,wattle,palawan,tankobon,nobunaga,polyhedra,transduction,jilin,syrians,affinities,fluently,emanating,anglicized,sportscar,botanists,altona,dravida,chorley,allocations,kunming,luanda,premiering,outlived,mesoamerica,lingual,dissipating,impairments,attenborough,balustrade,emulator,bakhsh,cladding,increments,ascents,workington,qal'eh,winless,categorical,petrel,emphasise,dormer,toros,hijackers,telescopic,solidly,jankovic,cession,gurus,madoff,newry,subsystems,northside,talib,englishmen,farnese,holographic,electives,argonne,scrivener,predated,brugge,nauvoo,catalyses,soared,siddeley,graphically,powerlifting,funicular,sungai,coercive,fusing,uncertainties,locos,acetic,diverge,wedgwood,dressings,tiebreaker,didactic,vyacheslav,acreage,interplanetary,battlecruisers,sunbury,alkaloids,hairpin,automata,wielkie,interdiction,plugins,monkees,nudibranch,esporte,approximations,disabling,powering,characterisation,ecologically,martinsville,termen,perpetuated,lufthansa,ascendancy,motherboard,bolshoi,athanasius,prunus,dilution,invests,nonzero,mendocino,charan,banque,shaheed,counterculture,unita,voivode,hospitalization,vapour,supermarine,resistor,steppes,osnabruck,intermediates,benzodiazepines,sunnyside,privatized,geopolitical,ponta,beersheba,kievan,embody,theoretic,sangh,cartographer,blige,rotors,thruway,battlefields,discernible,demobilized,broodmare,colouration,sagas,policymakers,serialization,augmentation,hoare,frankfurter,transnistria,kinases,detachable,generational,converging,antiaircraft,khaki,bimonthly,coadjutor,arkhangelsk,kannur,buffers,livonian,northwich,enveloped,cysts,yokozuna,herne,beeching,enron,virginian,woollen,excepting,competitively,outtakes,recombinant,hillcrest,clearances,pathe,cumbersome,brasov,u.s.a,likud,christiania,cruciform,hierarchies,wandsworth,lupin,resins,voiceover,sitar,electrochemical,mediacorp,typhus,grenadiers,hepatic,pompeii,weightlifter,bosniak,oxidoreductase,undersecretary,rescuers,ranji,seleucid,analysing,exegesis,tenancy,toure,kristiansand,110th,carillon,minesweepers,poitou,acceded,palladian,redevelop,naismith,rifled,proletariat,shojo,hackensack,harvests,endpoint,kuban,rosenborg,stonehenge,authorisation,jacobean,revocation,compatriots,colliding,undetermined,okayama,acknowledgment,angelou,fresnel,chahar,ethereal,mg/kg,emmet,mobilised,unfavourable,cultura,characterizing,parsonage,skeptics,expressways,rabaul,medea,guardsmen,visakhapatnam,caddo,homophobic,elmwood,encircling,coexistence,contending,seljuk,mycologist,infertility,moliere,insolvent,covenants,underpass,holme,landesliga,workplaces,delinquency,methamphetamine,contrived,tableau,tithes,overlying,usurped,contingents,spares,oligocene,molde,beatification,mordechai,balloting,pampanga,navigators,flowered,debutant,codec,orogeny,newsletters,solon,ambivalent,ubisoft,archdeaconry,harpers,kirkus,jabal,castings,kazhagam,sylhet,yuwen,barnstaple,amidships,causative,isuzu,watchtower,granules,canaveral,remuneration,insurer,payout,horizonte,integrative,attributing,kiwis,skanderbeg,asymmetry,gannett,urbanism,disassembled,unaltered,precluded,melodifestivalen,ascends,plugin,gurkha,bisons,stakeholder,industrialisation,abbotsford,sextet,bustling,uptempo,slavia,choreographers,midwives,haram,javed,gazetteer,subsection,natively,weighting,lysine,meera,redbridge,muchmusic,abruzzo,adjoins,unsustainable,foresters,kbit/s,cosmopterigidae,secularism,poetics,causality,phonograph,estudiantes,ceausescu,universitario,adjoint,applicability,gastropods,nagaland,kentish,mechelen,atalanta,woodpeckers,lombards,gatineau,romansh,avraham,acetylcholine,perturbation,galois,wenceslaus,fuzhou,meandering,dendritic,sacristy,accented,katha,therapeutics,perceives,unskilled,greenhouses,analogues,chaldean,timbre,sloped,volodymyr,sadiq,maghreb,monogram,rearguard,caucuses,mures,metabolite,uyezd,determinism,theosophical,corbet,gaels,disruptions,bicameral,ribosomal,wolseley,clarksville,watersheds,tarsi,radon,milanese,discontinuous,aristotelian,whistleblower,representational,hashim,modestly,localised,atrial,hazara,ravana,troyes,appointees,rubus,morningside,amity,aberdare,ganglia,wests,zbigniew,aerobatic,depopulated,corsican,introspective,twinning,hardtop,shallower,cataract,mesolithic,emblematic,graced,lubrication,republicanism,voronezh,bastions,meissen,irkutsk,oboes,hokkien,sprites,tenet,individualist,capitulated,oakville,dysentery,orientalist,hillsides,keywords,elicited,incised,lagging,apoel,lengthening,attractiveness,marauders,sportswriter,decentralization,boltzmann,contradicts,draftsman,precipitate,solihull,norske,consorts,hauptmann,riflemen,adventists,syndromes,demolishing,customize,continuo,peripherals,seamlessly,linguistically,bhushan,orphanages,paraul,lessened,devanagari,quarto,responders,patronymic,riemannian,altoona,canonization,honouring,geodetic,exemplifies,republica,enzymatic,porters,fairmount,pampa,sufferers,kamchatka,conjugated,coachella,uthman,repositories,copious,headteacher,awami,phoneme,homomorphism,franconian,moorland,davos,quantified,kamloops,quarks,mayoralty,weald,peacekeepers,valerian,particulate,insiders,perthshire,caches,guimaraes,piped,grenadines,kosciuszko,trombonist,artemisia,covariance,intertidal,soybeans,beatified,ellipse,fruiting,deafness,dnipropetrovsk,accrued,zealous,mandala,causation,junius,kilowatt,bakeries,montpelier,airdrie,rectified,bungalows,toleration,debian,pylon,trotskyist,posteriorly,two-and-a-half,herbivorous,islamists,poetical,donne,wodehouse,frome,allium,assimilate,phonemic,minaret,unprofitable,darpa,untenable,leaflet,bitcoin,zahir,thresholds,argentino,jacopo,bespoke,stratified,wellbeing,shiite,basaltic,timberwolves,secrete,taunts,marathons,isomers,carre,consecrators,penobscot,pitcairn,sakha,crosstown,inclusions,impassable,fenders,indre,uscgc,jordi,retinue,logarithmic,pilgrimages,railcar,cashel,blackrock,macroscopic,aligning,tabla,trestle,certify,ronson,palps,dissolves,thickened,silicate,taman,walsingham,hausa,lowestoft,rondo,oleksandr,cuyahoga,retardation,countering,cricketing,holborn,identifiers,hells,geophysics,infighting,sculpting,balaji,webbed,irradiation,runestone,trusses,oriya,sojourn,forfeiture,colonize,exclaimed,eucharistic,lackluster,glazing,northridge,gutenberg,stipulates,macroeconomic,priori,outermost,annular,udinese,insulating,headliner,godel,polytope,megalithic,salix,sharapova,derided,muskegon,braintree,plateaus,confers,autocratic,isomer,interstitial,stamping,omits,kirtland,hatchery,evidences,intifada,111th,podgorica,capua,motivating,nuneaton,jakub,korsakov,amitabh,mundial,monrovia,gluten,predictor,marshalling,d'orleans,levers,touchscreen,brantford,fricative,banishment,descendent,antagonism,ludovico,loudspeakers,formula_37,livelihoods,manassas,steamships,dewsbury,uppermost,humayun,lures,pinnacles,dependents,lecce,clumps,observatories,paleozoic,dedicating,samiti,draughtsman,gauls,incite,infringing,nepean,pythagorean,convents,triumvirate,seigneur,gaiman,vagrant,fossa,byproduct,serrated,renfrewshire,sheltering,achaemenid,dukedom,catchers,sampdoria,platelet,bielefeld,fluctuating,phenomenology,strikeout,ethnology,prospectors,woodworking,tatra,wildfires,meditations,agrippa,fortescue,qureshi,wojciech,methyltransferase,accusative,saatchi,amerindian,volcanism,zeeland,toyama,vladimirovich,allege,polygram,redox,budgeted,advisories,nematode,chipset,starscream,tonbridge,hardening,shales,accompanist,paraded,phonographic,whitefish,sportive,audiobook,kalisz,hibernation,latif,duels,ps200,coxeter,nayak,safeguarding,cantabria,minesweeping,zeiss,dunams,catholicos,sawtooth,ontological,nicobar,bridgend,unclassified,intrinsically,hanoverian,rabbitohs,kenseth,alcalde,northumbrian,raritan,septuagint,presse,sevres,origen,dandenong,peachtree,intersected,impeded,usages,hippodrome,novara,trajectories,customarily,yardage,inflected,yanow,kalan,taverns,liguria,librettist,intermarriage,1760s,courant,gambier,infanta,ptolemaic,ukulele,haganah,sceptical,manchukuo,plexus,implantation,hilal,intersex,efficiencies,arbroath,hagerstown,adelphi,diario,marais,matti,lifes,coining,modalities,divya,bletchley,conserving,ivorian,mithridates,generative,strikeforce,laymen,toponymy,pogrom,satya,meticulously,agios,dufferin,yaakov,fortnightly,cargoes,deterrence,prefrontal,przemysl,mitterrand,commemorations,chatsworth,gurdwara,abuja,chakraborty,badajoz,geometries,artiste,diatonic,ganglion,presides,marymount,nanak,cytokines,feudalism,storks,rowers,widens,politico,evangelicals,assailants,pittsfield,allowable,bijapur,telenovelas,dichomeris,glenelg,herbivores,keita,inked,radom,fundraisers,constantius,boheme,portability,komnenos,crystallography,derrida,moderates,tavistock,fateh,spacex,disjoint,bristles,commercialized,interwoven,empirically,regius,bulacan,newsday,showa,radicalism,yarrow,pleura,sayed,structuring,cotes,reminiscences,acetyl,edicts,escalators,aomori,encapsulated,legacies,bunbury,placings,fearsome,postscript,powerfully,keighley,hildesheim,amicus,crevices,deserters,benelux,aurangabad,freeware,ioannis,carpathians,chirac,seceded,prepaid,landlocked,naturalised,yanukovych,soundscan,blotch,phenotypic,determinants,twente,dictatorial,giessen,composes,recherche,pathophysiology,inventories,ayurveda,elevating,gravestone,degeneres,vilayet,popularizing,spartanburg,bloemfontein,previewed,renunciation,genotype,ogilvy,tracery,blacklisted,emissaries,diploid,disclosures,tupolev,shinjuku,antecedents,pennine,braganza,bhattacharya,countable,spectroscopic,ingolstadt,theseus,corroborated,compounding,thrombosis,extremadura,medallions,hasanabad,lambton,perpetuity,glycol,besancon,palaiologos,pandey,caicos,antecedent,stratum,laserdisc,novitiate,crowdfunding,palatal,sorceress,dassault,toughness,celle,cezanne,vientiane,tioga,hander,crossbar,gisborne,cursor,inspectorate,serif,praia,sphingidae,nameplate,psalter,ivanovic,sitka,equalised,mutineers,sergius,outgrowth,creationism,haredi,rhizomes,predominate,undertakings,vulgate,hydrothermal,abbeville,geodesic,kampung,physiotherapy,unauthorised,asteraceae,conservationist,minoan,supersport,mohammadabad,cranbrook,mentorship,legitimately,marshland,datuk,louvain,potawatomi,carnivores,levies,lyell,hymnal,regionals,tinto,shikoku,conformal,wanganui,beira,lleida,standstill,deloitte,formula_40,corbusier,chancellery,mixtapes,airtime,muhlenberg,formula_39,bracts,thrashers,prodigious,gironde,chickamauga,uyghurs,substitutions,pescara,batangas,gregarious,gijon,paleo,mathura,pumas,proportionally,hawkesbury,yucca,kristiania,funimation,fluted,eloquence,mohun,aftermarket,chroniclers,futurist,nonconformist,branko,mannerisms,lesnar,opengl,altos,retainers,ashfield,shelbourne,sulaiman,divisie,gwent,locarno,lieder,minkowski,bivalve,redeployed,cartography,seaway,bookings,decays,ostend,antiquaries,pathogenesis,formula_38,chrysalis,esperance,valli,motogp,homelands,bridged,bloor,ghazal,vulgaris,baekje,prospector,calculates,debtors,hesperiidae,titian,returner,landgrave,frontenac,kelowna,pregame,castelo,caius,canoeist,watercolours,winterthur,superintendents,dissonance,dubstep,adorn,matic,salih,hillel,swordsman,flavoured,emitter,assays,monongahela,deeded,brazzaville,sufferings,babylonia,fecal,umbria,astrologer,gentrification,frescos,phasing,zielona,ecozone,candido,manoj,quadrilateral,gyula,falsetto,prewar,puntland,infinitive,contraceptive,bakhtiari,ohrid,socialization,tailplane,evoking,havelock,macapagal,plundering,104th,keynesian,templars,phrasing,morphologically,czestochowa,humorously,catawba,burgas,chiswick,ellipsoid,kodansha,inwards,gautama,katanga,orthopaedic,heilongjiang,sieges,outsourced,subterminal,vijayawada,hares,oration,leitrim,ravines,manawatu,cryogenic,tracklisting,about.com,ambedkar,degenerated,hastened,venturing,lobbyists,shekhar,typefaces,northcote,rugen,'good,ornithology,asexual,hemispheres,unsupported,glyphs,spoleto,epigenetic,musicianship,donington,diogo,kangxi,bisected,polymorphism,megawatt,salta,embossed,cheetahs,cruzeiro,unhcr,aristide,rayleigh,maturing,indonesians,noire,llano,ffffff,camus,purges,annales,convair,apostasy,algol,phage,apaches,marketers,aldehyde,pompidou,kharkov,forgeries,praetorian,divested,retrospectively,gornji,scutellum,bitumen,pausanias,magnification,imitations,nyasaland,geographers,floodlights,athlone,hippolyte,expositions,clarinetist,razak,neutrinos,rotax,sheykh,plush,interconnect,andalus,cladogram,rudyard,resonator,granby,blackfriars,placido,windscreen,sahel,minamoto,haida,cations,emden,blackheath,thematically,blacklist,pawel,disseminating,academical,undamaged,raytheon,harsher,powhatan,ramachandran,saddles,paderborn,capping,zahra,prospecting,glycine,chromatin,profane,banska,helmand,okinawan,dislocation,oscillators,insectivorous,foyle,gilgit,autonomic,tuareg,sluice,pollinated,multiplexed,granary,narcissus,ranchi,staines,nitra,goalscoring,midwifery,pensioners,algorithmic,meetinghouse,biblioteca,besar,narva,angkor,predate,lohan,cyclical,detainee,occipital,eventing,faisalabad,dartmoor,kublai,courtly,resigns,radii,megachilidae,cartels,shortfall,xhosa,unregistered,benchmarks,dystopian,bulkhead,ponsonby,jovanovic,accumulates,papuan,bhutanese,intuitively,gotaland,headliners,recursion,dejan,novellas,diphthongs,imbued,withstood,analgesic,amplify,powertrain,programing,maidan,alstom,affirms,eradicated,summerslam,videogame,molla,severing,foundered,gallium,atmospheres,desalination,shmuel,howmeh,catolica,bossier,reconstructing,isolates,lyase,tweets,unconnected,tidewater,divisible,cohorts,orebro,presov,furnishing,folklorist,simplifying,centrale,notations,factorization,monarchies,deepen,macomb,facilitation,hennepin,declassified,redrawn,microprocessors,preliminaries,enlarging,timeframe,deutschen,shipbuilders,patiala,ferrous,aquariums,genealogies,vieux,unrecognized,bridgwater,tetrahedral,thule,resignations,gondwana,registries,agder,dataset,felled,parva,analyzer,worsen,coleraine,columella,blockaded,polytechnique,reassembled,reentry,narvik,greys,nigra,knockouts,bofors,gniezno,slotted,hamasaki,ferrers,conferring,thirdly,domestication,photojournalist,universality,preclude,ponting,halved,thereupon,photosynthetic,ostrava,mismatch,pangasinan,intermediaries,abolitionists,transited,headings,ustase,radiological,interconnection,dabrowa,invariants,honorius,preferentially,chantilly,marysville,dialectical,antioquia,abstained,gogol,dirichlet,muricidae,symmetries,reproduces,brazos,fatwa,bacillus,ketone,paribas,chowk,multiplicative,dermatitis,mamluks,devotes,adenosine,newbery,meditative,minefields,inflection,oxfam,conwy,bystrica,imprints,pandavas,infinitesimal,conurbation,amphetamine,reestablish,furth,edessa,injustices,frankston,serjeant,4x200,khazar,sihanouk,longchamp,stags,pogroms,coups,upperparts,endpoints,infringed,nuanced,summing,humorist,pacification,ciaran,jamaat,anteriorly,roddick,springboks,faceted,hypoxia,rigorously,cleves,fatimid,ayurvedic,tabled,ratna,senhora,maricopa,seibu,gauguin,holomorphic,campgrounds,amboy,coordinators,ponderosa,casemates,ouachita,nanaimo,mindoro,zealander,rimsky,cluny,tomaszow,meghalaya,caetano,tilak,roussillon,landtag,gravitation,dystrophy,cephalopods,trombones,glens,killarney,denominated,anthropogenic,pssas,roubaix,carcasses,montmorency,neotropical,communicative,rabindranath,ordinated,separable,overriding,surged,sagebrush,conciliation,codice_4,durrani,phosphatase,qadir,votive,revitalized,taiyuan,tyrannosaurus,graze,slovaks,nematodes,environmentalism,blockhouse,illiteracy,schengen,ecotourism,alternation,conic,wields,hounslow,blackfoot,kwame,ambulatory,volhynia,hordaland,croton,piedras,rohit,drava,conceptualized,birla,illustrative,gurgaon,barisal,tutsi,dezong,nasional,polje,chanson,clarinets,krasnoyarsk,aleksandrovich,cosmonaut,d'este,palliative,midseason,silencing,wardens,durer,girders,salamanders,torrington,supersonics,lauda,farid,circumnavigation,embankments,funnels,bajnoksag,lorries,cappadocia,jains,warringah,retirees,burgesses,equalization,cusco,ganesan,algal,amazonian,lineups,allocating,conquerors,usurper,mnemonic,predating,brahmaputra,ahmadabad,maidenhead,numismatic,subregion,encamped,reciprocating,freebsd,irgun,tortoises,governorates,zionists,airfoil,collated,ajmer,fiennes,etymological,polemic,chadian,clerestory,nordiques,fluctuated,calvados,oxidizing,trailhead,massena,quarrels,dordogne,tirunelveli,pyruvate,pulsed,athabasca,sylar,appointee,serer,japonica,andronikos,conferencing,nicolaus,chemin,ascertained,incited,woodbine,helices,hospitalised,emplacements,to/from,orchestre,tyrannical,pannonia,methodism,pop/rock,shibuya,berbers,despot,seaward,westpac,separator,perpignan,alamein,judeo,publicize,quantization,ethniki,gracilis,menlo,offside,oscillating,unregulated,succumbing,finnmark,metrical,suleyman,raith,sovereigns,bundesstrasse,kartli,fiduciary,darshan,foramen,curler,concubines,calvinism,larouche,bukhara,sophomores,mohanlal,lutheranism,monomer,eamonn,'black,uncontested,immersive,tutorials,beachhead,bindings,permeable,postulates,comite,transformative,indiscriminate,hofstra,associacao,amarna,dermatology,lapland,aosta,babur,unambiguous,formatting,schoolboys,gwangju,superconducting,replayed,adherent,aureus,compressors,forcible,spitsbergen,boulevards,budgeting,nossa,annandale,perumal,interregnum,sassoon,kwajalein,greenbrier,caldas,triangulation,flavius,increment,shakhtar,nullified,pinfall,nomen,microfinance,depreciation,cubist,steeper,splendour,gruppe,everyman,chasers,campaigners,bridle,modality,percussive,darkly,capes,velar,picton,triennial,factional,padang,toponym,betterment,norepinephrine,112th,estuarine,diemen,warehousing,morphism,ideologically,pairings,immunization,crassus,exporters,sefer,flocked,bulbous,deseret,booms,calcite,bohol,elven,groot,pulau,citigroup,wyeth,modernizing,layering,pastiche,complies,printmaker,condenser,theropod,cassino,oxyrhynchus,akademie,trainings,lowercase,coxae,parte,chetniks,pentagonal,keselowski,monocoque,morsi,reticulum,meiosis,clapboard,recoveries,tinge,an/fps,revista,sidon,livre,epidermis,conglomerates,kampong,congruent,harlequins,tergum,simplifies,epidemiological,underwriting,tcp/ip,exclusivity,multidimensional,mysql,columbine,ecologist,hayat,sicilies,levees,handset,aesop,usenet,pacquiao,archiving,alexandrian,compensatory,broadsheet,annotation,bahamian,d'affaires,interludes,phraya,shamans,marmara,customizable,immortalized,ambushes,chlorophyll,diesels,emulsion,rheumatoid,voluminous,screenwriters,tailoring,sedis,runcorn,democratization,bushehr,anacostia,constanta,antiquary,sixtus,radiate,advaita,antimony,acumen,barristers,reichsbahn,ronstadt,symbolist,pasig,cursive,secessionist,afrikaner,munnetra,inversely,adsorption,syllabic,moltke,idioms,midline,olimpico,diphosphate,cautions,radziwill,mobilisation,copelatus,trawlers,unicron,bhaskar,financiers,minimalism,derailment,marxists,oireachtas,abdicate,eigenvalue,zafar,vytautas,ganguly,chelyabinsk,telluride,subordination,ferried,dived,vendee,pictish,dimitrov,expiry,carnation,cayley,magnitudes,lismore,gretna,sandwiched,unmasked,sandomierz,swarthmore,tetra,nanyang,pevsner,dehradun,mormonism,rashi,complying,seaplanes,ningbo,cooperates,strathcona,mornington,mestizo,yulia,edgbaston,palisade,ethno,polytopes,espirito,tymoshenko,pronunciations,paradoxical,taichung,chipmunks,erhard,maximise,accretion,kanda,`abdu'l,narrowest,umpiring,mycenaean,divisor,geneticist,ceredigion,barque,hobbyists,equates,auxerre,spinose,cheil,sweetwater,guano,carboxylic,archiv,tannery,cormorant,agonists,fundacion,anbar,tunku,hindrance,meerut,concordat,secunderabad,kachin,achievable,murfreesboro,comprehensively,forges,broadest,synchronised,speciation,scapa,aliyev,conmebol,tirelessly,subjugated,pillaged,udaipur,defensively,lakhs,stateless,haasan,headlamps,patterning,podiums,polyphony,mcmurdo,mujer,vocally,storeyed,mucosa,multivariate,scopus,minimizes,formalised,certiorari,bourges,populate,overhanging,gaiety,unreserved,borromeo,woolworths,isotopic,bashar,purify,vertebra,medan,juxtaposition,earthwork,elongation,chaudhary,schematic,piast,steeped,nanotubes,fouls,achaea,legionnaires,abdur,qmjhl,embraer,hardback,centerville,ilocos,slovan,whitehorse,mauritian,moulding,mapuche,donned,provisioning,gazprom,jonesboro,audley,lightest,calyx,coldwater,trigonometric,petroglyphs,psychoanalyst,congregate,zambezi,fissure,supervises,bexley,etobicoke,wairarapa,tectonics,emphasises,formula_41,debugging,linfield,spatially,ionizing,ungulates,orinoco,clades,erlangen,news/talk,vols.,ceara,yakovlev,finsbury,entanglement,fieldhouse,graphene,intensifying,grigory,keyong,zacatecas,ninian,allgemeine,keswick,societa,snorri,femininity,najib,monoclonal,guyanese,postulate,huntly,abbeys,machinist,yunus,emphasising,ishaq,urmia,bremerton,pretenders,lumiere,thoroughfares,chikara,dramatized,metathorax,taiko,transcendence,wycliffe,retrieves,umpired,steuben,racehorses,taylors,kuznetsov,montezuma,precambrian,canopies,gaozong,propodeum,disestablished,retroactive,shoreham,rhizome,doubleheader,clinician,diwali,quartzite,shabaab,agassiz,despatched,stormwater,luxemburg,callao,universidade,courland,skane,glyph,dormers,witwatersrand,curacy,qualcomm,nansen,entablature,lauper,hausdorff,lusaka,ruthenian,360deg,cityscape,douai,vaishnava,spars,vaulting,rationalist,gygax,sequestration,typology,pollinates,accelerators,leben,colonials,cenotaph,imparted,carthaginians,equaled,rostrum,gobind,bodhisattva,oberst,bicycling,arabi,sangre,biophysics,hainaut,vernal,lunenburg,apportioned,finches,lajos,nenad,repackaged,zayed,nikephoros,r.e.m,swaminarayan,gestalt,unplaced,crags,grohl,sialkot,unsaturated,gwinnett,linemen,forays,palakkad,writs,instrumentalists,aircrews,badged,terrapins,180deg,oneness,commissariat,changi,pupation,circumscribed,contador,isotropic,administrated,fiefs,nimes,intrusions,minoru,geschichte,nadph,tainan,changchun,carbondale,frisia,swapo,evesham,hawai'i,encyclopedic,transporters,dysplasia,formula_42,onsite,jindal,guetta,judgements,narbonne,permissions,paleogene,rationalism,vilna,isometric,subtracted,chattahoochee,lamina,missa,greville,pervez,lattices,persistently,crystallization,timbered,hawaiians,fouling,interrelated,masood,ripening,stasi,gamal,visigothic,warlike,cybernetics,tanjung,forfar,cybernetic,karelian,brooklands,belfort,greifswald,campeche,inexplicably,refereeing,understory,uninterested,prius,collegiately,sefid,sarsfield,categorize,biannual,elsevier,eisteddfod,declension,autonoma,procuring,misrepresentation,novelization,bibliographic,shamanism,vestments,potash,eastleigh,ionized,turan,lavishly,scilly,balanchine,importers,parlance,'that,kanyakumari,synods,mieszko,crossovers,serfdom,conformational,legislated,exclave,heathland,sadar,differentiates,propositional,konstantinos,photoshop,manche,vellore,appalachia,orestes,taiga,exchanger,grozny,invalidated,baffin,spezia,staunchly,eisenach,robustness,virtuosity,ciphers,inlets,bolagh,understandings,bosniaks,parser,typhoons,sinan,luzerne,webcomic,subtraction,jhelum,businessweek,ceske,refrained,firebox,mitigated,helmholtz,dilip,eslamabad,metalwork,lucan,apportionment,provident,gdynia,schooners,casement,danse,hajjiabad,benazir,buttress,anthracite,newsreel,wollaston,dispatching,cadastral,riverboat,provincetown,nantwich,missal,irreverent,juxtaposed,darya,ennobled,electropop,stereoscopic,maneuverability,laban,luhansk,udine,collectibles,haulage,holyrood,materially,supercharger,gorizia,shkoder,townhouses,pilate,layoffs,folkloric,dialectic,exuberant,matures,malla,ceuta,citizenry,crewed,couplet,stopover,transposition,tradesmen,antioxidant,amines,utterance,grahame,landless,isere,diction,appellant,satirist,urbino,intertoto,subiaco,antonescu,nehemiah,ubiquitin,emcee,stourbridge,fencers,103rd,wranglers,monteverdi,watertight,expounded,xiamen,manmohan,pirie,threefold,antidepressant,sheboygan,grieg,cancerous,diverging,bernini,polychrome,fundamentalism,bihari,critiqued,cholas,villers,tendulkar,dafydd,vastra,fringed,evangelization,episcopalian,maliki,sana'a,ashburton,trianon,allegany,heptathlon,insufficiently,panelists,pharrell,hexham,amharic,fertilized,plumes,cistern,stratigraphy,akershus,catalans,karoo,rupee,minuteman,quantification,wigmore,leutnant,metanotum,weeknights,iridescent,extrasolar,brechin,deuterium,kuching,lyricism,astrakhan,brookhaven,euphorbia,hradec,bhagat,vardar,aylmer,positron,amygdala,speculators,unaccompanied,debrecen,slurry,windhoek,disaffected,rapporteur,mellitus,blockers,fronds,yatra,sportsperson,precession,physiologist,weeknight,pidgin,pharma,condemns,standardize,zetian,tibor,glycoprotein,emporia,cormorants,amalie,accesses,leonhard,denbighshire,roald,116th,will.i.am,symbiosis,privatised,meanders,chemnitz,jabalpur,shing,secede,ludvig,krajina,homegrown,snippets,sasanian,euripides,peder,cimarron,streaked,graubunden,kilimanjaro,mbeki,middleware,flensburg,bukovina,lindwall,marsalis,profited,abkhaz,polis,camouflaged,amyloid,morgantown,ovoid,bodleian,morte,quashed,gamelan,juventud,natchitoches,storyboard,freeview,enumeration,cielo,preludes,bulawayo,1600s,olympiads,multicast,faunal,asura,reinforces,puranas,ziegfeld,handicraft,seamount,kheil,noche,hallmarks,dermal,colorectal,encircle,hessen,umbilicus,sunnis,leste,unwin,disclosing,superfund,montmartre,refuelling,subprime,kolhapur,etiology,bismuth,laissez,vibrational,mazar,alcoa,rumsfeld,recurve,ticonderoga,lionsgate,onlookers,homesteads,filesystem,barometric,kingswood,biofuel,belleza,moshav,occidentalis,asymptomatic,northeasterly,leveson,huygens,numan,kingsway,primogeniture,toyotomi,yazoo,limpets,greenbelt,booed,concurrence,dihedral,ventrites,raipur,sibiu,plotters,kitab,109th,trackbed,skilful,berthed,effendi,fairing,sephardi,mikhailovich,lockyer,wadham,invertible,paperbacks,alphabetic,deuteronomy,constitutive,leathery,greyhounds,estoril,beechcraft,poblacion,cossidae,excreted,flamingos,singha,olmec,neurotransmitters,ascoli,nkrumah,forerunners,dualism,disenchanted,benefitted,centrum,undesignated,noida,o'donoghue,collages,egrets,egmont,wuppertal,cleave,montgomerie,pseudomonas,srinivasa,lymphatic,stadia,resold,minima,evacuees,consumerism,ronde,biochemist,automorphism,hollows,smuts,improvisations,vespasian,bream,pimlico,eglin,colne,melancholic,berhad,ousting,saale,notaulices,ouest,hunslet,tiberias,abdomina,ramsgate,stanislas,donbass,pontefract,sucrose,halts,drammen,chelm,l'arc,taming,trolleys,konin,incertae,licensees,scythian,giorgos,dative,tanglewood,farmlands,o'keeffe,caesium,romsdal,amstrad,corte,oglethorpe,huntingdonshire,magnetization,adapts,zamosc,shooto,cuttack,centrepiece,storehouse,winehouse,morbidity,woodcuts,ryazan,buddleja,buoyant,bodmin,estero,austral,verifiable,periyar,christendom,curtail,shura,kaifeng,cotswold,invariance,seafaring,gorica,androgen,usman,seabird,forecourt,pekka,juridical,audacious,yasser,cacti,qianlong,polemical,d'amore,espanyol,distrito,cartographers,pacifism,serpents,backa,nucleophilic,overturning,duplicates,marksman,oriente,vuitton,oberleutnant,gielgud,gesta,swinburne,transfiguration,1750s,retaken,celje,fredrikstad,asuka,cropping,mansard,donates,blacksmiths,vijayanagara,anuradhapura,germinate,betis,foreshore,jalandhar,bayonets,devaluation,frazione,ablaze,abidjan,approvals,homeostasis,corollary,auden,superfast,redcliffe,luxembourgish,datum,geraldton,printings,ludhiana,honoree,synchrotron,invercargill,hurriedly,108th,three-and-a-half,colonist,bexar,limousin,bessemer,ossetian,nunataks,buddhas,rebuked,thais,tilburg,verdicts,interleukin,unproven,dordrecht,solent,acclamation,muammar,dahomey,operettas,4x400,arrears,negotiators,whitehaven,apparitions,armoury,psychoactive,worshipers,sculptured,elphinstone,airshow,kjell,o'callaghan,shrank,professorships,predominance,subhash,coulomb,sekolah,retrofitted,samos,overthrowing,vibrato,resistors,palearctic,datasets,doordarshan,subcutaneous,compiles,immorality,patchwork,trinidadian,glycogen,pronged,zohar,visigoths,freres,akram,justo,agora,intakes,craiova,playwriting,bukhari,militarism,iwate,petitioners,harun,wisla,inefficiency,vendome,ledges,schopenhauer,kashi,entombed,assesses,tenn.,noumea,baguio,carex,o'donovan,filings,hillsdale,conjectures,blotches,annuals,lindisfarne,negated,vivek,angouleme,trincomalee,cofactor,verkhovna,backfield,twofold,automaker,rudra,freighters,darul,gharana,busway,formula_43,plattsburgh,portuguesa,showrunner,roadmap,valenciennes,erdos,biafra,spiritualism,transactional,modifies,carne,107th,cocos,gcses,tiverton,radiotherapy,meadowlands,gunma,srebrenica,foxtel,authenticated,enslavement,classicist,klaipeda,minstrels,searchable,infantrymen,incitement,shiga,nadp+,urals,guilders,banquets,exteriors,counterattacks,visualized,diacritics,patrimony,svensson,transepts,prizren,telegraphy,najaf,emblazoned,coupes,effluent,ragam,omani,greensburg,taino,flintshire,cd/dvd,lobbies,narrating,cacao,seafarers,bicolor,collaboratively,suraj,floodlit,sacral,puppetry,tlingit,malwa,login,motionless,thien,overseers,vihar,golem,specializations,bathhouse,priming,overdubs,winningest,archetypes,uniao,acland,creamery,slovakian,lithographs,maryborough,confidently,excavating,stillborn,ramallah,audiencia,alava,ternary,hermits,rostam,bauxite,gawain,lothair,captions,gulfstream,timelines,receded,mediating,petain,bastia,rudbar,bidders,disclaimer,shrews,tailings,trilobites,yuriy,jamil,demotion,gynecology,rajinikanth,madrigals,ghazni,flycatchers,vitebsk,bizet,computationally,kashgar,refinements,frankford,heralds,europe/africa,levante,disordered,sandringham,queues,ransacked,trebizond,verdes,comedie,primitives,figurine,organists,culminate,gosport,coagulation,ferrying,hoyas,polyurethane,prohibitive,midfielders,ligase,progesterone,defectors,sweetened,backcountry,diodorus,waterside,nieuport,khwaja,jurong,decried,gorkha,ismaili,300th,octahedral,kindergartens,paseo,codification,notifications,disregarding,risque,reconquista,shortland,atolls,texarkana,perceval,d'etudes,kanal,herbicides,tikva,nuova,gatherer,dissented,soweto,dexterity,enver,bacharach,placekicker,carnivals,automate,maynooth,symplectic,chetnik,militaire,upanishads,distributive,strafing,championing,moiety,miliband,blackadder,enforceable,maung,dimer,stadtbahn,diverges,obstructions,coleophoridae,disposals,shamrocks,aural,banca,bahru,coxed,grierson,vanadium,watermill,radiative,ecoregions,berets,hariri,bicarbonate,evacuations,mallee,nairn,rushden,loggia,slupsk,satisfactorily,milliseconds,cariboo,reine,cyclo,pigmentation,postmodernism,aqueducts,vasari,bourgogne,dilemmas,liquefied,fluminense,alloa,ibaraki,tenements,kumasi,humerus,raghu,labours,putsch,soundcloud,bodybuilder,rakyat,domitian,pesaro,translocation,sembilan,homeric,enforcers,tombstones,lectureship,rotorua,salamis,nikolaos,inferences,superfortress,lithgow,surmised,undercard,tarnow,barisan,stingrays,federacion,coldstream,haverford,ornithological,heerenveen,eleazar,jyoti,murali,bamako,riverbed,subsidised,theban,conspicuously,vistas,conservatorium,madrasa,kingfishers,arnulf,credential,syndicalist,sheathed,discontinuity,prisms,tsushima,coastlines,escapees,vitis,optimizing,megapixel,overground,embattled,halide,sprinters,buoys,mpumalanga,peculiarities,106th,roamed,menezes,macao,prelates,papyri,freemen,dissertations,irishmen,pooled,sverre,reconquest,conveyance,subjectivity,asturian,circassian,formula_45,comdr,thickets,unstressed,monro,passively,harmonium,moveable,dinar,carlsson,elysees,chairing,b'nai,confusingly,kaoru,convolution,godolphin,facilitator,saxophones,eelam,jebel,copulation,anions,livres,licensure,pontypridd,arakan,controllable,alessandria,propelling,stellenbosch,tiber,wolka,liberators,yarns,d'azur,tsinghua,semnan,amhara,ablation,melies,tonality,historique,beeston,kahne,intricately,sonoran,robespierre,gyrus,boycotts,defaulted,infill,maranhao,emigres,framingham,paraiba,wilhelmshaven,tritium,skyway,labial,supplementation,possessor,underserved,motets,maldivian,marrakech,quays,wikimedia,turbojet,demobilization,petrarch,encroaching,sloops,masted,karbala,corvallis,agribusiness,seaford,stenosis,hieronymus,irani,superdraft,baronies,cortisol,notability,veena,pontic,cyclin,archeologists,newham,culled,concurring,aeolian,manorial,shouldered,fords,philanthropists,105th,siddharth,gotthard,halim,rajshahi,jurchen,detritus,practicable,earthenware,discarding,travelogue,neuromuscular,elkhart,raeder,zygmunt,metastasis,internees,102nd,vigour,upmarket,summarizing,subjunctive,offsets,elizabethtown,udupi,pardubice,repeaters,instituting,archaea,substandard,technische,linga,anatomist,flourishes,velika,tenochtitlan,evangelistic,fitchburg,springbok,cascading,hydrostatic,avars,occasioned,filipina,perceiving,shimbun,africanus,consternation,tsing,optically,beitar,45deg,abutments,roseville,monomers,huelva,lotteries,hypothalamus,internationalist,electromechanical,hummingbirds,fibreglass,salaried,dramatists,uncovers,invokes,earners,excretion,gelding,ancien,aeronautica,haverhill,stour,ittihad,abramoff,yakov,ayodhya,accelerates,industrially,aeroplanes,deleterious,dwelt,belvoir,harpalus,atpase,maluku,alasdair,proportionality,taran,epistemological,interferometer,polypeptide,adjudged,villager,metastatic,marshalls,madhavan,archduchess,weizmann,kalgoorlie,balan,predefined,sessile,sagaing,brevity,insecticide,psychosocial,africana,steelworks,aether,aquifers,belem,mineiro,almagro,radiators,cenozoic,solute,turbocharger,invicta,guested,buccaneer,idolatry,unmatched,paducah,sinestro,dispossessed,conforms,responsiveness,cyanobacteria,flautist,procurator,complementing,semifinalist,rechargeable,permafrost,cytokine,refuges,boomed,gelderland,franchised,jinan,burnie,doubtless,randomness,colspan=12,angra,ginebra,famers,nuestro,declarative,roughness,lauenburg,motile,rekha,issuer,piney,interceptors,napoca,gipsy,formulaic,formula_44,viswanathan,ebrahim,thessalonica,galeria,muskogee,unsold,html5,taito,mobutu,icann,carnarvon,fairtrade,morphisms,upsilon,nozzles,fabius,meander,murugan,strontium,episcopacy,sandinista,parasol,attenuated,bhima,primeval,panay,ordinator,negara,osteoporosis,glossop,ebook,paradoxically,grevillea,modoc,equating,phonetically,legumes,covariant,dorje,quatre,bruxelles,pyroclastic,shipbuilder,zhaozong,obscuring,sveriges,tremolo,extensible,barrack,multnomah,hakon,chaharmahal,parsing,volumetric,astrophysical,glottal,combinatorics,freestanding,encoder,paralysed,cavalrymen,taboos,heilbronn,orientalis,lockport,marvels,ozawa,dispositions,waders,incurring,saltire,modulate,papilio,phenol,intermedia,rappahannock,plasmid,fortify,phenotypes,transiting,correspondences,leaguer,larnaca,incompatibility,mcenroe,deeming,endeavoured,aboriginals,helmed,salar,arginine,werke,ferrand,expropriated,delimited,couplets,phoenicians,petioles,ouster,anschluss,protectionist,plessis,urchins,orquesta,castleton,juniata,bittorrent,fulani,donji,mykola,rosemont,chandos,scepticism,signer,chalukya,wicketkeeper,coquitlam,programmatic,o'brian,carteret,urology,steelhead,paleocene,konkan,bettered,venkatesh,surfacing,longitudinally,centurions,popularization,yazid,douro,widths,premios,leonards,gristmill,fallujah,arezzo,leftists,ecliptic,glycerol,inaction,disenfranchised,acrimonious,depositing,parashah,cockatoo,marechal,bolzano,chios,cablevision,impartiality,pouches,thickly,equities,bentinck,emotive,boson,ashdown,conquistadors,parsi,conservationists,reductive,newlands,centerline,ornithologists,waveguide,nicene,philological,hemel,setanta,masala,aphids,convening,casco,matrilineal,chalcedon,orthographic,hythe,replete,damming,bolivarian,admixture,embarks,borderlands,conformed,nagarjuna,blenny,chaitanya,suwon,shigeru,tatarstan,lingayen,rejoins,grodno,merovingian,hardwicke,puducherry,prototyping,laxmi,upheavals,headquarter,pollinators,bromine,transom,plantagenet,arbuthnot,chidambaram,woburn,osamu,panelling,coauthored,zhongshu,hyaline,omissions,aspergillus,offensively,electrolytic,woodcut,sodom,intensities,clydebank,piotrkow,supplementing,quipped,focke,harbinger,positivism,parklands,wolfenbuttel,cauca,tryptophan,taunus,curragh,tsonga,remand,obscura,ashikaga,eltham,forelimbs,analogs,trnava,observances,kailash,antithesis,ayumi,abyssinia,dorsally,tralee,pursuers,misadventures,padova,perot,mahadev,tarim,granth,licenced,compania,patuxent,baronial,korda,cochabamba,codices,karna,memorialized,semaphore,playlists,mandibular,halal,sivaji,scherzinger,stralsund,foundries,ribosome,mindfulness,nikolayevich,paraphyletic,newsreader,catalyze,ioannina,thalamus,gbit/s,paymaster,sarab,500th,replenished,gamepro,cracow,formula_46,gascony,reburied,lessing,easement,transposed,meurthe,satires,proviso,balthasar,unbound,cuckoos,durbar,louisbourg,cowes,wholesalers,manet,narita,xiaoping,mohamad,illusory,cathal,reuptake,alkaloid,tahrir,mmorpg,underlies,anglicanism,repton,aharon,exogenous,buchenwald,indigent,odostomia,milled,santorum,toungoo,nevsky,steyr,urbanisation,darkseid,subsonic,canaanite,akiva,eglise,dentition,mediators,cirencester,peloponnesian,malmesbury,durres,oerlikon,tabulated,saens,canaria,ischemic,esterhazy,ringling,centralization,walthamstow,nalanda,lignite,takht,leninism,expiring,circe,phytoplankton,promulgation,integrable,breeches,aalto,menominee,borgo,scythians,skrull,galleon,reinvestment,raglan,reachable,liberec,airframes,electrolysis,geospatial,rubiaceae,interdependence,symmetrically,simulcasts,keenly,mauna,adipose,zaidi,fairport,vestibular,actuators,monochromatic,literatures,congestive,sacramental,atholl,skytrain,tycho,tunings,jamia,catharina,modifier,methuen,tapings,infiltrating,colima,grafting,tauranga,halides,pontificate,phonetics,koper,hafez,grooved,kintetsu,extrajudicial,linkoping,cyberpunk,repetitions,laurentian,parnu,bretton,darko,sverdlovsk,foreshadowed,akhenaten,rehnquist,gosford,coverts,pragmatism,broadleaf,ethiopians,instated,mediates,sodra,opulent,descriptor,enugu,shimla,leesburg,officership,giffard,refectory,lusitania,cybermen,fiume,corus,tydfil,lawrenceville,ocala,leviticus,burghers,ataxia,richthofen,amicably,acoustical,watling,inquired,tiempo,multiracial,parallelism,trenchard,tokyopop,germanium,usisl,philharmonia,shapur,jacobites,latinized,sophocles,remittances,o'farrell,adder,dimitrios,peshwa,dimitar,orlov,outstretched,musume,satish,dimensionless,serialised,baptisms,pagasa,antiviral,1740s,quine,arapaho,bombardments,stratosphere,ophthalmic,injunctions,carbonated,nonviolence,asante,creoles,sybra,boilermakers,abington,bipartite,permissive,cardinality,anheuser,carcinogenic,hohenlohe,surinam,szeged,infanticide,generically,floorball,'white,automakers,cerebellar,homozygous,remoteness,effortlessly,allude,'great,headmasters,minting,manchurian,kinabalu,wemyss,seditious,widgets,marbled,almshouses,bards,subgenres,tetsuya,faulting,kickboxer,gaulish,hoseyn,malton,fluvial,questionnaires,mondale,downplayed,traditionalists,vercelli,sumatran,landfills,gamesradar,exerts,franciszek,unlawfully,huesca,diderot,libertarians,professorial,laane,piecemeal,conidae,taiji,curatorial,perturbations,abstractions,szlachta,watercraft,mullah,zoroastrianism,segmental,khabarovsk,rectors,affordability,scuola,diffused,stena,cyclonic,workpiece,romford,'little,jhansi,stalag,zhongshan,skipton,maracaibo,bernadotte,thanet,groening,waterville,encloses,sahrawi,nuffield,moorings,chantry,annenberg,islay,marchers,tenses,wahid,siegen,furstenberg,basques,resuscitation,seminarians,tympanum,gentiles,vegetarianism,tufted,venkata,fantastical,pterophoridae,machined,superposition,glabrous,kaveri,chicane,executors,phyllonorycter,bidirectional,jasta,undertones,touristic,majapahit,navratilova,unpopularity,barbadian,tinian,webcast,hurdler,rigidly,jarrah,staphylococcus,igniting,irrawaddy,stabilised,airstrike,ragas,wakayama,energetically,ekstraklasa,minibus,largemouth,cultivators,leveraging,waitangi,carnaval,weaves,turntables,heydrich,sextus,excavate,govind,ignaz,pedagogue,uriah,borrowings,gemstones,infractions,mycobacterium,batavian,massing,praetor,subalpine,massoud,passers,geostationary,jalil,trainsets,barbus,impair,budejovice,denbigh,pertain,historicity,fortaleza,nederlandse,lamenting,masterchef,doubs,gemara,conductance,ploiesti,cetaceans,courthouses,bhagavad,mihailovic,occlusion,bremerhaven,bulwark,morava,kaine,drapery,maputo,conquistador,kaduna,famagusta,first-past-the-post,erudite,galton,undated,tangential,filho,dismembered,dashes,criterium,darwen,metabolized,blurring,everard,randwick,mohave,impurity,acuity,ansbach,chievo,surcharge,plantain,algoma,porosity,zirconium,selva,sevenoaks,venizelos,gwynne,golgi,imparting,separatism,courtesan,idiopathic,gravestones,hydroelectricity,babar,orford,purposeful,acutely,shard,ridgewood,viterbo,manohar,expropriation,placenames,brevis,cosine,unranked,richfield,newnham,recoverable,flightless,dispersing,clearfield,abu'l,stranraer,kempe,streamlining,goswami,epidermal,pieta,conciliatory,distilleries,electrophoresis,bonne,tiago,curiosities,candidature,picnicking,perihelion,lintel,povoa,gullies,configure,excision,facies,signers,1730s,insufficiency,semiotics,streatham,deactivation,entomological,skippers,albacete,parodying,escherichia,honorees,singaporeans,counterterrorism,tiruchirappalli,omnivorous,metropole,globalisation,athol,unbounded,codice_5,landforms,classifier,farmhouses,reaffirming,reparation,yomiuri,technologists,mitte,medica,viewable,steampunk,konya,kshatriya,repelling,edgewater,lamiinae,devas,potteries,llandaff,engendered,submits,virulence,uplifted,educationist,metropolitans,frontrunner,dunstable,forecastle,frets,methodius,exmouth,linnean,bouchet,repulsion,computable,equalling,liceo,tephritidae,agave,hydrological,azarenka,fairground,l'homme,enforces,xinhua,cinematographers,cooperstown,sa'id,paiute,christianization,tempos,chippenham,insulator,kotor,stereotyped,dello,cours,hisham,d'souza,eliminations,supercars,passau,rebrand,natures,coote,persephone,rededicated,cleaved,plenum,blistering,indiscriminately,cleese,safed,recursively,compacted,revues,hydration,shillong,echelons,garhwal,pedimented,grower,zwolle,wildflower,annexing,methionine,petah,valens,famitsu,petiole,specialities,nestorian,shahin,tokaido,shearwater,barberini,kinsmen,experimenter,alumnae,cloisters,alumina,pritzker,hardiness,soundgarden,julich,ps300,watercourse,cementing,wordplay,olivet,demesne,chasseurs,amide,zapotec,gaozu,porphyry,absorbers,indium,analogies,devotions,engravers,limestones,catapulted,surry,brickworks,gotra,rodham,landline,paleontologists,shankara,islip,raucous,trollope,arpad,embarkation,morphemes,recites,picardie,nakhchivan,tolerances,formula_47,khorramabad,nichiren,adrianople,kirkuk,assemblages,collider,bikaner,bushfires,roofline,coverings,reredos,bibliotheca,mantras,accentuated,commedia,rashtriya,fluctuation,serhiy,referential,fittipaldi,vesicle,geeta,iraklis,immediacy,chulalongkorn,hunsruck,bingen,dreadnoughts,stonemason,meenakshi,lebesgue,undergrowth,baltistan,paradoxes,parlement,articled,tiflis,dixieland,meriden,tejano,underdogs,barnstable,exemplify,venter,tropes,wielka,kankakee,iskandar,zilina,pharyngeal,spotify,materialised,picts,atlantique,theodoric,prepositions,paramilitaries,pinellas,attlee,actuated,piedmontese,grayling,thucydides,multifaceted,unedited,autonomously,universelle,utricularia,mooted,preto,incubated,underlie,brasenose,nootka,bushland,sensu,benzodiazepine,esteghlal,seagoing,amenhotep,azusa,sappers,culpeper,smokeless,thoroughbreds,dargah,gorda,alumna,mankato,zdroj,deleting,culvert,formula_49,punting,wushu,hindering,immunoglobulin,standardisation,birger,oilfield,quadrangular,ulama,recruiters,netanya,1630s,communaute,istituto,maciej,pathan,meher,vikas,characterizations,playmaker,interagency,intercepts,assembles,horthy,introspection,narada,matra,testes,radnicki,estonians,csiro,instar,mitford,adrenergic,crewmembers,haaretz,wasatch,lisburn,rangefinder,ordre,condensate,reforestation,corregidor,spvgg,modulator,mannerist,faulted,aspires,maktoum,squarepants,aethelred,piezoelectric,mulatto,dacre,progressions,jagiellonian,norge,samaria,sukhoi,effingham,coxless,hermetic,humanists,centrality,litters,stirlingshire,beaconsfield,sundanese,geometrically,caretakers,habitually,bandra,pashtuns,bradenton,arequipa,laminar,brickyard,hitchin,sustains,shipboard,ploughing,trechus,wheelers,bracketed,ilyushin,subotica,d'hondt,reappearance,bridgestone,intermarried,fulfilment,aphasia,birkbeck,transformational,strathmore,hornbill,millstone,lacan,voids,solothurn,gymnasiums,laconia,viaducts,peduncle,teachta,edgware,shinty,supernovae,wilfried,exclaim,parthia,mithun,flashpoint,moksha,cumbia,metternich,avalanches,militancy,motorist,rivadavia,chancellorsville,federals,gendered,bounding,footy,gauri,caliphs,lingam,watchmaker,unrecorded,riverina,unmodified,seafloor,droit,pfalz,chrysostom,gigabit,overlordship,besiege,espn2,oswestry,anachronistic,ballymena,reactivation,duchovny,ghani,abacetus,duller,legio,watercourses,nord-pas-de-calais,leiber,optometry,swarms,installer,sancti,adverbs,iheartmedia,meiningen,zeljko,kakheti,notional,circuses,patrilineal,acrobatics,infrastructural,sheva,oregonian,adjudication,aamir,wloclawek,overfishing,obstructive,subtracting,aurobindo,archeologist,newgate,'cause,secularization,tehsils,abscess,fingal,janacek,elkhorn,trims,kraftwerk,mandating,irregulars,faintly,congregationalist,sveti,kasai,mishaps,kennebec,provincially,durkheim,scotties,aicte,rapperswil,imphal,surrenders,morphs,nineveh,hoxha,cotabato,thuringian,metalworking,retold,shogakukan,anthers,proteasome,tippeligaen,disengagement,mockumentary,palatial,erupts,flume,corrientes,masthead,jaroslaw,rereleased,bharti,labors,distilling,tusks,varzim,refounded,enniskillen,melkite,semifinalists,vadodara,bermudian,capstone,grasse,origination,populus,alesi,arrondissements,semigroup,verein,opossum,messrs.,portadown,bulbul,tirupati,mulhouse,tetrahedron,roethlisberger,nonverbal,connexion,warangal,deprecated,gneiss,octet,vukovar,hesketh,chambre,despatch,claes,kargil,hideo,gravelly,tyndale,aquileia,tuners,defensible,tutte,theotokos,constructivist,ouvrage,dukla,polisario,monasticism,proscribed,commutation,testers,nipissing,codon,mesto,olivine,concomitant,exoskeleton,purports,coromandel,eyalet,dissension,hippocrates,purebred,yaounde,composting,oecophoridae,procopius,o'day,angiogenesis,sheerness,intelligencer,articular,felixstowe,aegon,endocrinology,trabzon,licinius,pagodas,zooplankton,hooghly,satie,drifters,sarthe,mercian,neuilly,tumours,canal+,scheldt,inclinations,counteroffensive,roadrunners,tuzla,shoreditch,surigao,predicates,carnot,algeciras,militaries,generalize,bulkheads,gawler,pollutant,celta,rundgren,microrna,gewog,olimpija,placental,lubelski,roxburgh,discerned,verano,kikuchi,musicale,l'enfant,ferocity,dimorphic,antigonus,erzurum,prebendary,recitative,discworld,cyrenaica,stigmella,totnes,sutta,pachuca,ulsan,downton,landshut,castellan,pleural,siedlce,siecle,catamaran,cottbus,utilises,trophic,freeholders,holyhead,u.s.s,chansons,responder,waziristan,suzuka,birding,shogi,asker,acetone,beautification,cytotoxic,dixit,hunterdon,cobblestone,formula_48,kossuth,devizes,sokoto,interlaced,shuttered,kilowatts,assiniboine,isaak,salto,alderney,sugarloaf,franchising,aggressiveness,toponyms,plaintext,antimatter,henin,equidistant,salivary,bilingualism,mountings,obligate,extirpated,irenaeus,misused,pastoralists,aftab,immigrating,warping,tyrolean,seaforth,teesside,soundwave,oligarchy,stelae,pairwise,iupac,tezuka,posht,orchestrations,landmass,ironstone,gallia,hjalmar,carmelites,strafford,elmhurst,palladio,fragility,teleplay,gruffudd,karoly,yerba,potok,espoo,inductance,macaque,nonprofits,pareto,rock'n'roll,spiritualist,shadowed,skateboarder,utterances,generality,congruence,prostrate,deterred,yellowknife,albarn,maldon,battlements,mohsen,insecticides,khulna,avellino,menstruation,glutathione,springdale,parlophone,confraternity,korps,countrywide,bosphorus,preexisting,damodar,astride,alexandrovich,sprinting,crystallized,botev,leaching,interstates,veers,angevin,undaunted,yevgeni,nishapur,northerners,alkmaar,bethnal,grocers,sepia,tornus,exemplar,trobe,charcot,gyeonggi,larne,tournai,lorain,voided,genji,enactments,maxilla,adiabatic,eifel,nazim,transducer,thelonious,pyrite,deportiva,dialectal,bengt,rosettes,labem,sergeyevich,synoptic,conservator,statuette,biweekly,adhesives,bifurcation,rajapaksa,mammootty,republique,yusef,waseda,marshfield,yekaterinburg,minnelli,fundy,fenian,matchups,dungannon,supremacist,panelled,drenthe,iyengar,fibula,narmada,homeport,oceanside,precept,antibacterial,altarpieces,swath,ospreys,lillooet,legnica,lossless,formula_50,galvatron,iorga,stormont,rsfsr,loggers,kutno,phenomenological,medallists,cuatro,soissons,homeopathy,bituminous,injures,syndicates,typesetting,displacements,dethroned,makassar,lucchese,abergavenny,targu,alborz,akb48,boldface,gastronomy,sacra,amenity,accumulator,myrtaceae,cornices,mourinho,denunciation,oxbow,diddley,aargau,arbitrage,bedchamber,gruffydd,zamindar,klagenfurt,caernarfon,slowdown,stansted,abrasion,tamaki,suetonius,dukakis,individualistic,ventrally,hotham,perestroika,ketones,fertilisation,sobriquet,couplings,renderings,misidentified,rundfunk,sarcastically,braniff,concours,dismissals,elegantly,modifiers,crediting,combos,crucially,seafront,lieut,ischemia,manchus,derivations,proteases,aristophanes,adenauer,porting,hezekiah,sante,trulli,hornblower,foreshadowing,ypsilanti,dharwad,khani,hohenstaufen,distillers,cosmodrome,intracranial,turki,salesian,gorzow,jihlava,yushchenko,leichhardt,venables,cassia,eurogamer,airtel,curative,bestsellers,timeform,sortied,grandview,massillon,ceding,pilbara,chillicothe,heredity,elblag,rogaland,ronne,millennial,batley,overuse,bharata,fille,campbelltown,abeyance,counterclockwise,250cc,neurodegenerative,consigned,electromagnetism,sunnah,saheb,exons,coxswain,gleaned,bassoons,worksop,prismatic,immigrate,pickets,takeo,bobsledder,stosur,fujimori,merchantmen,stiftung,forli,endorses,taskforce,thermally,atman,gurps,floodplains,enthalpy,extrinsic,setubal,kennesaw,grandis,scalability,durations,showrooms,prithvi,outro,overruns,andalucia,amanita,abitur,hipper,mozambican,sustainment,arsene,chesham,palaeolithic,reportage,criminality,knowsley,haploid,atacama,shueisha,ridgefield,astern,getafe,lineal,timorese,restyled,hollies,agincourt,unter,justly,tannins,mataram,industrialised,tarnovo,mumtaz,mustapha,stretton,synthetase,condita,allround,putra,stjepan,troughs,aechmea,specialisation,wearable,kadokawa,uralic,aeros,messiaen,existentialism,jeweller,effigies,gametes,fjordane,cochlear,interdependent,demonstrative,unstructured,emplacement,famines,spindles,amplitudes,actuator,tantalum,psilocybe,apnea,monogatari,expulsions,seleucus,tsuen,hospitaller,kronstadt,eclipsing,olympiakos,clann,canadensis,inverter,helio,egyptologist,squamous,resonate,munir,histology,torbay,khans,jcpenney,veterinarians,aintree,microscopes,colonised,reflectors,phosphorylated,pristimantis,tulare,corvinus,multiplexing,midweek,demosthenes,transjordan,ecija,tengku,vlachs,anamorphic,counterweight,radnor,trinitarian,armidale,maugham,njsiaa,futurism,stairways,avicenna,montebello,bridgetown,wenatchee,lyonnais,amass,surinamese,streptococcus,m*a*s*h,hydrogenation,frazioni,proscenium,kalat,pennsylvanian,huracan,tallying,kralove,nucleolar,phrygian,seaports,hyacinthe,ignace,donning,instalment,regnal,fonds,prawn,carell,folktales,goaltending,bracknell,vmware,patriarchy,mitsui,kragujevac,pythagoras,soult,thapa,disproved,suwalki,secures,somoza,l'ecole,divizia,chroma,herders,technologist,deduces,maasai,rampur,paraphrase,raimi,imaged,magsaysay,ivano,turmeric,formula_51,subcommittees,axillary,ionosphere,organically,indented,refurbishing,pequot,violinists,bearn,colle,contralto,silverton,mechanization,etruscans,wittelsbach,pasir,redshirted,marrakesh,scarp,plein,wafers,qareh,teotihuacan,frobenius,sinensis,rehoboth,bundaberg,newbridge,hydrodynamic,traore,abubakar,adjusts,storytellers,dynamos,verbandsliga,concertmaster,exxonmobil,appreciable,sieradz,marchioness,chaplaincy,rechristened,cunxu,overpopulation,apolitical,sequencer,beaked,nemanja,binaries,intendant,absorber,filamentous,indebtedness,nusra,nashik,reprises,psychedelia,abwehr,ligurian,isoform,resistive,pillaging,mahathir,reformatory,lusatia,allerton,ajaccio,tepals,maturin,njcaa,abyssinian,objector,fissures,sinuous,ecclesiastic,dalits,caching,deckers,phosphates,wurlitzer,navigated,trofeo,berea,purefoods,solway,unlockable,grammys,kostroma,vocalizations,basilan,rebuke,abbasi,douala,helsingborg,ambon,bakar,runestones,cenel,tomislav,pigmented,northgate,excised,seconda,kirke,determinations,dedicates,vilas,pueblos,reversion,unexploded,overprinted,ekiti,deauville,masato,anaesthesia,endoplasmic,transponders,aguascalientes,hindley,celluloid,affording,bayeux,piaget,rickshaws,eishockey,camarines,zamalek,undersides,hardwoods,hermitian,mutinied,monotone,blackmails,affixes,jpmorgan,habermas,mitrovica,paleontological,polystyrene,thana,manas,conformist,turbofan,decomposes,logano,castration,metamorphoses,patroness,herbicide,mikolaj,rapprochement,macroeconomics,barranquilla,matsudaira,lintels,femina,hijab,spotsylvania,morpheme,bitola,baluchistan,kurukshetra,otway,extrusion,waukesha,menswear,helder,trung,bingley,protester,boars,overhang,differentials,exarchate,hejaz,kumara,unjustified,timings,sharpness,nuovo,taisho,sundar,etc..,jehan,unquestionably,muscovy,daltrey,canute,paneled,amedeo,metroplex,elaborates,telus,tetrapods,dragonflies,epithets,saffir,parthenon,lucrezia,refitting,pentateuch,hanshin,montparnasse,lumberjacks,sanhedrin,erectile,odors,greenstone,resurgent,leszek,amory,substituents,prototypical,viewfinder,monck,universiteit,joffre,revives,chatillon,seedling,scherzo,manukau,ashdod,gympie,homolog,stalwarts,ruinous,weibo,tochigi,wallenberg,gayatri,munda,satyagraha,storefronts,heterogeneity,tollway,sportswriters,binocular,gendarmes,ladysmith,tikal,ortsgemeinde,ja'far,osmotic,linlithgow,bramley,telecoms,pugin,repose,rupaul,sieur,meniscus,garmisch,reintroduce,400th,shoten,poniatowski,drome,kazakhstani,changeover,astronautics,husserl,herzl,hypertext,katakana,polybius,antananarivo,seong,breguet,reliquary,utada,aggregating,liangshan,sivan,tonawanda,audiobooks,shankill,coulee,phenolic,brockton,bookmakers,handsets,boaters,wylde,commonality,mappings,silhouettes,pennines,maurya,pratchett,singularities,eschewed,pretensions,vitreous,ibero,totalitarianism,poulenc,lingered,directx,seasoning,deputation,interdict,illyria,feedstock,counterbalance,muzik,buganda,parachuted,violist,homogeneity,comix,fjords,corsairs,punted,verandahs,equilateral,laoghaire,magyars,117th,alesund,televoting,mayotte,eateries,refurbish,nswrl,yukio,caragiale,zetas,dispel,codecs,inoperable,outperformed,rejuvenation,elstree,modernise,contributory,pictou,tewkesbury,chechens,ashina,psionic,refutation,medico,overdubbed,nebulae,sandefjord,personages,eccellenza,businessperson,placename,abenaki,perryville,threshing,reshaped,arecibo,burslem,colspan=3|turnout,rebadged,lumia,erinsborough,interactivity,bitmap,indefatigable,theosophy,excitatory,gleizes,edsel,bermondsey,korce,saarinen,wazir,diyarbakir,cofounder,liberalisation,onsen,nighthawks,siting,retirements,semyon,d'histoire,114th,redditch,venetia,praha,'round,valdosta,hieroglyphic,postmedial,edirne,miscellany,savona,cockpits,minimization,coupler,jacksonian,appeasement,argentines,saurashtra,arkwright,hesiod,folios,fitzalan,publica,rivaled,civitas,beermen,constructivism,ribeira,zeitschrift,solanum,todos,deformities,chilliwack,verdean,meagre,bishoprics,gujrat,yangzhou,reentered,inboard,mythologies,virtus,unsurprisingly,rusticated,museu,symbolise,proportionate,thesaban,symbian,aeneid,mitotic,veliki,compressive,cisterns,abies,winemaker,massenet,bertolt,ahmednagar,triplemania,armorial,administracion,tenures,smokehouse,hashtag,fuerza,regattas,gennady,kanazawa,mahmudabad,crustal,asaph,valentinian,ilaiyaraaja,honeyeater,trapezoidal,cooperatively,unambiguously,mastodon,inhospitable,harnesses,riverton,renewables,djurgardens,haitians,airings,humanoids,boatswain,shijiazhuang,faints,veera,punjabis,steepest,narain,karlovy,serre,sulcus,collectives,1500m,arion,subarctic,liberally,apollonius,ostia,droplet,headstones,norra,robusta,maquis,veronese,imola,primers,luminance,escadrille,mizuki,irreconcilable,stalybridge,temur,paraffin,stuccoed,parthians,counsels,fundamentalists,vivendi,polymath,sugababes,mikko,yonne,fermions,vestfold,pastoralist,kigali,unseeded,glarus,cusps,amasya,northwesterly,minorca,astragalus,verney,trevelyan,antipathy,wollstonecraft,bivalves,boulez,royle,divisao,quranic,bareilly,coronal,deviates,lulea,erectus,petronas,chandan,proxies,aeroflot,postsynaptic,memoriam,moyne,gounod,kuznetsova,pallava,ordinating,reigate,'first,lewisburg,exploitative,danby,academica,bailiwick,brahe,injective,stipulations,aeschylus,computes,gulden,hydroxylase,liveries,somalis,underpinnings,muscovite,kongsberg,domus,overlain,shareware,variegated,jalalabad,agence,ciphertext,insectivores,dengeki,menuhin,cladistic,baerum,betrothal,tokushima,wavelet,expansionist,pottsville,siyuan,prerequisites,carpi,nemzeti,nazar,trialled,eliminator,irrorated,homeward,redwoods,undeterred,strayed,lutyens,multicellular,aurelian,notated,lordships,alsatian,idents,foggia,garros,chalukyas,lillestrom,podlaski,pessimism,hsien,demilitarized,whitewashed,willesden,kirkcaldy,sanctorum,lamia,relaying,escondido,paediatric,contemplates,demarcated,bluestone,betula,penarol,capitalise,kreuznach,kenora,115th,hold'em,reichswehr,vaucluse,m.i.a,windings,boys/girls,cajon,hisar,predictably,flemington,ysgol,mimicked,clivina,grahamstown,ionia,glyndebourne,patrese,aquaria,sleaford,dayal,sportscenter,malappuram,m.b.a.,manoa,carbines,solvable,designator,ramanujan,linearity,academicians,sayid,lancastrian,factorial,strindberg,vashem,delos,comyn,condensing,superdome,merited,kabaddi,intransitive,bideford,neuroimaging,duopoly,scorecards,ziggler,heriot,boyars,virology,marblehead,microtubules,westphalian,anticipates,hingham,searchers,harpist,rapides,morricone,convalescent,mises,nitride,metrorail,matterhorn,bicol,drivetrain,marketer,snippet,winemakers,muban,scavengers,halberstadt,herkimer,peten,laborious,stora,montgomeryshire,booklist,shamir,herault,eurostar,anhydrous,spacewalk,ecclesia,calliostoma,highschool,d'oro,suffusion,imparts,overlords,tagus,rectifier,counterinsurgency,ministered,eilean,milecastle,contre,micromollusk,okhotsk,bartoli,matroid,hasidim,thirunal,terme,tarlac,lashkar,presque,thameslink,flyby,troopship,renouncing,fatih,messrs,vexillum,bagration,magnetite,bornholm,androgynous,vehement,tourette,philosophic,gianfranco,tuileries,codice_6,radially,flexion,hants,reprocessing,setae,burne,palaeographically,infantryman,shorebirds,tamarind,moderna,threading,militaristic,crohn,norrkoping,125cc,stadtholder,troms,klezmer,alphanumeric,brome,emmanuelle,tiwari,alchemical,formula_52,onassis,bleriot,bipedal,colourless,hermeneutics,hosni,precipitating,turnstiles,hallucinogenic,panhellenic,wyandotte,elucidated,chita,ehime,generalised,hydrophilic,biota,niobium,rnzaf,gandhara,longueuil,logics,sheeting,bielsko,cuvier,kagyu,trefoil,docent,pancrase,stalinism,postures,encephalopathy,monckton,imbalances,epochs,leaguers,anzio,diminishes,pataki,nitrite,amuro,nabil,maybach,l'aquila,babbler,bacolod,thutmose,evora,gaudi,breakage,recur,preservative,60deg,mendip,functionaries,columnar,maccabiah,chert,verden,bromsgrove,clijsters,dengue,pastorate,phuoc,principia,viareggio,kharagpur,scharnhorst,anyang,bosons,l'art,criticises,ennio,semarang,brownian,mirabilis,asperger,calibers,typographical,cartooning,minos,disembark,supranational,undescribed,etymologically,alappuzha,vilhelm,lanao,pakenham,bhagavata,rakoczi,clearings,astrologers,manitowoc,bunuel,acetylene,scheduler,defamatory,trabzonspor,leaded,scioto,pentathlete,abrahamic,minigames,aldehydes,peerages,legionary,1640s,masterworks,loudness,bryansk,likeable,genocidal,vegetated,towpath,declination,pyrrhus,divinely,vocations,rosebery,associazione,loaders,biswas,oeste,tilings,xianzong,bhojpuri,annuities,relatedness,idolator,psers,constriction,chuvash,choristers,hanafi,fielders,grammarian,orpheum,asylums,millbrook,gyatso,geldof,stabilise,tableaux,diarist,kalahari,panini,cowdenbeath,melanin,4x100m,resonances,pinar,atherosclerosis,sheringham,castlereagh,aoyama,larks,pantograph,protrude,natak,gustafsson,moribund,cerevisiae,cleanly,polymeric,holkar,cosmonauts,underpinning,lithosphere,firuzabad,languished,mingled,citrate,spadina,lavas,daejeon,fibrillation,porgy,pineville,ps1000,cobbled,emamzadeh,mukhtar,dampers,indelible,salonika,nanoscale,treblinka,eilat,purporting,fluctuate,mesic,hagiography,cutscenes,fondation,barrens,comically,accrue,ibrox,makerere,defections,'there,hollandia,skene,grosseto,reddit,objectors,inoculation,rowdies,playfair,calligrapher,namor,sibenik,abbottabad,propellants,hydraulically,chloroplasts,tablelands,tecnico,schist,klasse,shirvan,bashkortostan,bullfighting,north/south,polski,hanns,woodblock,kilmore,ejecta,ignacy,nanchang,danubian,commendations,snohomish,samaritans,argumentation,vasconcelos,hedgehogs,vajrayana,barents,kulkarni,kumbakonam,identifications,hillingdon,weirs,nayanar,beauvoir,messe,divisors,atlantiques,broods,affluence,tegucigalpa,unsuited,autodesk,akash,princeps,culprits,kingstown,unassuming,goole,visayan,asceticism,blagojevich,irises,paphos,unsound,maurier,pontchartrain,desertification,sinfonietta,latins,especial,limpet,valerenga,glial,brainstem,mitral,parables,sauropod,judean,iskcon,sarcoma,venlo,justifications,zhuhai,blavatsky,alleviated,usafe,steppenwolf,inversions,janko,chagall,secretory,basildon,saguenay,pergamon,hemispherical,harmonized,reloading,franjo,domaine,extravagance,relativism,metamorphosed,labuan,baloncesto,gmail,byproducts,calvinists,counterattacked,vitus,bubonic,120th,strachey,ritually,brookwood,selectable,savinja,incontinence,meltwater,jinja,1720s,brahmi,morgenthau,sheaves,sleeved,stratovolcano,wielki,utilisation,avoca,fluxus,panzergrenadier,philately,deflation,podlaska,prerogatives,kuroda,theophile,zhongzong,gascoyne,magus,takao,arundell,fylde,merdeka,prithviraj,venkateswara,liepaja,daigo,dreamland,reflux,sunnyvale,coalfields,seacrest,soldering,flexor,structuralism,alnwick,outweighed,unaired,mangeshkar,batons,glaad,banshees,irradiated,organelles,biathlete,cabling,chairlift,lollapalooza,newsnight,capacitive,succumbs,flatly,miramichi,burwood,comedienne,charteris,biotic,workspace,aficionados,sokolka,chatelet,o'shaughnessy,prosthesis,neoliberal,refloated,oppland,hatchlings,econometrics,loess,thieu,androids,appalachians,jenin,pterostichinae,downsized,foils,chipsets,stencil,danza,narrate,maginot,yemenite,bisects,crustacean,prescriptive,melodious,alleviation,empowers,hansson,autodromo,obasanjo,osmosis,daugava,rheumatism,moraes,leucine,etymologies,chepstow,delaunay,bramall,bajaj,flavoring,approximates,marsupials,incisive,microcomputer,tactically,waals,wilno,fisichella,ursus,hindmarsh,mazarin,lomza,xenophobia,lawlessness,annecy,wingers,gornja,gnaeus,superieur,tlaxcala,clasps,symbolises,slats,rightist,effector,blighted,permanence,divan,progenitors,kunsthalle,anointing,excelling,coenzyme,indoctrination,dnipro,landholdings,adriaan,liturgies,cartan,ethmia,attributions,sanctus,trichy,chronicon,tancred,affinis,kampuchea,gantry,pontypool,membered,distrusted,fissile,dairies,hyposmocoma,craigie,adarsh,martinsburg,taxiway,30deg,geraint,vellum,bencher,khatami,formula_53,zemun,teruel,endeavored,palmares,pavements,u.s..,internationalization,satirized,carers,attainable,wraparound,muang,parkersburg,extinctions,birkenfeld,wildstorm,payers,cohabitation,unitas,culloden,capitalizing,clwyd,daoist,campinas,emmylou,orchidaceae,halakha,orientales,fealty,domnall,chiefdom,nigerians,ladislav,dniester,avowed,ergonomics,newsmagazine,kitsch,cantilevered,benchmarking,remarriage,alekhine,coldfield,taupo,almirante,substations,apprenticeships,seljuq,levelling,eponym,symbolising,salyut,opioids,underscore,ethnologue,mohegan,marikina,libro,bassano,parse,semantically,disjointed,dugdale,padraig,tulsi,modulating,xfinity,headlands,mstislav,earthworms,bourchier,lgbtq,embellishments,pennants,rowntree,betel,motet,mulla,catenary,washoe,mordaunt,dorking,colmar,girardeau,glentoran,grammatically,samad,recreations,technion,staccato,mikoyan,spoilers,lyndhurst,victimization,chertsey,belafonte,tondo,tonsberg,narrators,subcultures,malformations,edina,augmenting,attests,euphemia,cabriolet,disguising,1650s,navarrese,demoralized,cardiomyopathy,welwyn,wallachian,smoothness,planktonic,voles,issuers,sardasht,survivability,cuauhtemoc,thetis,extruded,signet,raghavan,lombok,eliyahu,crankcase,dissonant,stolberg,trencin,desktops,bursary,collectivization,charlottenburg,triathlete,curvilinear,involuntarily,mired,wausau,invades,sundaram,deletions,bootstrap,abellio,axiomatic,noguchi,setups,malawian,visalia,materialist,kartuzy,wenzong,plotline,yeshivas,parganas,tunica,citric,conspecific,idlib,superlative,reoccupied,blagoevgrad,masterton,immunological,hatta,courbet,vortices,swallowtail,delves,haridwar,diptera,boneh,bahawalpur,angering,mardin,equipments,deployable,guanine,normality,rimmed,artisanal,boxset,chandrasekhar,jools,chenar,tanakh,carcassonne,belatedly,millville,anorthosis,reintegration,velde,surfactant,kanaan,busoni,glyphipterix,personas,fullness,rheims,tisza,stabilizers,bharathi,joost,spinola,mouldings,perching,esztergom,afzal,apostate,lustre,s.league,motorboat,monotheistic,armature,barat,asistencia,bloomsburg,hippocampal,fictionalised,defaults,broch,hexadecimal,lusignan,ryanair,boccaccio,breisgau,southbank,bskyb,adjoined,neurobiology,aforesaid,sadhu,langue,headship,wozniacki,hangings,regulus,prioritized,dynamism,allier,hannity,shimin,antoninus,gymnopilus,caledon,preponderance,melayu,electrodynamics,syncopated,ibises,krosno,mechanistic,morpeth,harbored,albini,monotheism,'real,hyperactivity,haveli,writer/director,minato,nimoy,caerphilly,chitral,amirabad,fanshawe,l'oreal,lorde,mukti,authoritarianism,valuing,spyware,hanbury,restarting,stato,embed,suiza,empiricism,stabilisation,stari,castlemaine,orbis,manufactory,mauritanian,shoji,taoyuan,prokaryotes,oromia,ambiguities,embodying,slims,frente,innovate,ojibwa,powdery,gaeltacht,argentinos,quatermass,detergents,fijians,adaptor,tokai,chileans,bulgars,oxidoreductases,bezirksliga,conceicao,myosin,nellore,500cc,supercomputers,approximating,glyndwr,polypropylene,haugesund,cockerell,tudman,ashbourne,hindemith,bloodlines,rigveda,etruria,romanos,steyn,oradea,deceleration,manhunter,laryngeal,fraudulently,janez,wendover,haplotype,janaki,naoki,belizean,mellencamp,cartographic,sadhana,tricolour,pseudoscience,satara,bytow,s.p.a.,jagdgeschwader,arcot,omagh,sverdrup,masterplan,surtees,apocrypha,ahvaz,d'amato,socratic,leumit,unnumbered,nandini,witold,marsupial,coalesced,interpolated,gimnasia,karadzic,keratin,mamoru,aldeburgh,speculator,escapement,irfan,kashyap,satyajit,haddington,solver,rothko,ashkelon,kickapoo,yeomen,superbly,bloodiest,greenlandic,lithic,autofocus,yardbirds,poona,keble,javan,sufis,expandable,tumblr,ursuline,swimwear,winwood,counsellors,aberrations,marginalised,befriending,workouts,predestination,varietal,siddhartha,dunkeld,judaic,esquimalt,shabab,ajith,telefonica,stargard,hoysala,radhakrishnan,sinusoidal,strada,hiragana,cebuano,monoid,independencia,floodwaters,mildura,mudflats,ottokar,translit,radix,wigner,philosophically,tephritid,synthesizing,castletown,installs,stirner,resettle,bushfire,choirmaster,kabbalistic,shirazi,lightship,rebus,colonizers,centrifuge,leonean,kristofferson,thymus,clackamas,ratnam,rothesay,municipally,centralia,thurrock,gulfport,bilinear,desirability,merite,psoriasis,macaw,erigeron,consignment,mudstone,distorting,karlheinz,ramen,tailwheel,vitor,reinsurance,edifices,superannuation,dormancy,contagion,cobden,rendezvoused,prokaryotic,deliberative,patricians,feigned,degrades,starlings,sopot,viticultural,beaverton,overflowed,convener,garlands,michiel,ternopil,naturelle,biplanes,bagot,gamespy,ventspils,disembodied,flattening,profesional,londoners,arusha,scapular,forestall,pyridine,ulema,eurodance,aruna,callus,periodontal,coetzee,immobilized,o'meara,maharani,katipunan,reactants,zainab,microgravity,saintes,britpop,carrefour,constrain,adversarial,firebirds,brahmo,kashima,simca,surety,surpluses,superconductivity,gipuzkoa,cumans,tocantins,obtainable,humberside,roosting,'king,formula_54,minelayer,bessel,sulayman,cycled,biomarkers,annealing,shusha,barda,cassation,djing,polemics,tuple,directorates,indomitable,obsolescence,wilhelmine,pembina,bojan,tambo,dioecious,pensioner,magnificat,1660s,estrellas,southeasterly,immunodeficiency,railhead,surreptitiously,codeine,encores,religiosity,tempera,camberley,efendi,boardings,malleable,hagia,input/output,lucasfilm,ujjain,polymorphisms,creationist,berners,mickiewicz,irvington,linkedin,endures,kinect,munition,apologetics,fairlie,predicated,reprinting,ethnographer,variances,levantine,mariinsky,jadid,jarrow,asia/oceania,trinamool,waveforms,bisexuality,preselection,pupae,buckethead,hieroglyph,lyricists,marionette,dunbartonshire,restorer,monarchical,pazar,kickoffs,cabildo,savannas,gliese,dench,spoonbills,novelette,diliman,hypersensitivity,authorising,montefiore,mladen,qu'appelle,theistic,maruti,laterite,conestoga,saare,californica,proboscis,carrickfergus,imprecise,hadassah,baghdadi,jolgeh,deshmukh,amusements,heliopolis,berle,adaptability,partenkirchen,separations,baikonur,cardamom,southeastward,southfield,muzaffar,adequacy,metropolitana,rajkot,kiyoshi,metrobus,evictions,reconciles,librarianship,upsurge,knightley,badakhshan,proliferated,spirituals,burghley,electroacoustic,professing,featurette,reformists,skylab,descriptors,oddity,greyfriars,injects,salmond,lanzhou,dauntless,subgenera,underpowered,transpose,mahinda,gatos,aerobatics,seaworld,blocs,waratahs,joris,giggs,perfusion,koszalin,mieczyslaw,ayyubid,ecologists,modernists,sant'angelo,quicktime,him/her,staves,sanyo,melaka,acrocercops,qigong,iterated,generalizes,recuperation,vihara,circassians,psychical,chavo,memoires,infiltrates,notaries,pelecaniformesfamily,strident,chivalric,pierrepont,alleviating,broadsides,centipede,b.tech,reinterpreted,sudetenland,hussite,covenanters,radhika,ironclads,gainsbourg,testis,penarth,plantar,azadegan,beano,espn.com,leominster,autobiographies,nbcuniversal,eliade,khamenei,montferrat,undistinguished,ethnological,wenlock,fricatives,polymorphic,biome,joule,sheaths,astrophysicist,salve,neoclassicism,lovat,downwind,belisarius,forma,usurpation,freie,depopulation,backbench,ascenso,'high,aagpbl,gdanski,zalman,mouvement,encapsulation,bolshevism,statny,voyageurs,hywel,vizcaya,mazra'eh,narthex,azerbaijanis,cerebrospinal,mauretania,fantail,clearinghouse,bolingbroke,pequeno,ansett,remixing,microtubule,wrens,jawahar,palembang,gambian,hillsong,fingerboard,repurposed,sundry,incipient,veolia,theologically,ulaanbaatar,atsushi,foundling,resistivity,myeloma,factbook,mazowiecka,diacritic,urumqi,clontarf,provokes,intelsat,professes,materialise,portobello,benedictines,panionios,introverted,reacquired,bridport,mammary,kripke,oratorios,vlore,stoning,woredas,unreported,antti,togolese,fanzines,heuristics,conservatories,carburetors,clitheroe,cofounded,formula_57,erupting,quinnipiac,bootle,ghostface,sittings,aspinall,sealift,transferase,boldklub,siskiyou,predominated,francophonie,ferruginous,castrum,neogene,sakya,madama,precipitous,'love,posix,bithynia,uttara,avestan,thrushes,seiji,memorably,septimius,libri,cibernetico,hyperinflation,dissuaded,cuddalore,peculiarity,vaslui,grojec,albumin,thurles,casks,fasteners,fluidity,buble,casals,terek,gnosticism,cognates,ulnar,radwanska,babylonians,majuro,oxidizer,excavators,rhythmically,liffey,gorakhpur,eurydice,underscored,arborea,lumumba,tuber,catholique,grama,galilei,scrope,centreville,jacobin,bequests,ardeche,polygamous,montauban,terai,weatherboard,readability,attainder,acraea,transversely,rivets,winterbottom,reassures,bacteriology,vriesea,chera,andesite,dedications,homogenous,reconquered,bandon,forrestal,ukiyo,gurdjieff,tethys,sparc,muscogee,grebes,belchatow,mansa,blantyre,palliser,sokolow,fibroblasts,exmoor,misaki,soundscapes,housatonic,middelburg,convenor,leyla,antipope,histidine,okeechobee,alkenes,sombre,alkene,rubik,macaques,calabar,trophee,pinchot,'free,frusciante,chemins,falaise,vasteras,gripped,schwarzenberg,cumann,kanchipuram,acoustically,silverbacks,fangio,inset,plympton,kuril,vaccinations,recep,theropods,axils,stavropol,encroached,apoptotic,papandreou,wailers,moonstone,assizes,micrometers,hornchurch,truncation,annapurna,egyptologists,rheumatic,promiscuity,satiric,fleche,caloptilia,anisotropy,quaternions,gruppo,viscounts,awardees,aftershocks,sigint,concordance,oblasts,gaumont,stent,commissars,kesteven,hydroxy,vijayanagar,belorussian,fabricius,watermark,tearfully,mamet,leukaemia,sorkh,milepost,tattooing,vosta,abbasids,uncompleted,hedong,woodwinds,extinguishing,malus,multiplexes,francoist,pathet,responsa,bassists,'most,postsecondary,ossory,grampian,saakashvili,alito,strasberg,impressionistic,volador,gelatinous,vignette,underwing,campanian,abbasabad,albertville,hopefuls,nieuwe,taxiways,reconvened,recumbent,pathologists,unionized,faversham,asymptotically,romulo,culling,donja,constricted,annesley,duomo,enschede,lovech,sharpshooter,lansky,dhamma,papillae,alanine,mowat,delius,wrest,mcluhan,podkarpackie,imitators,bilaspur,stunting,pommel,casemate,handicaps,nagas,testaments,hemings,necessitate,rearward,locative,cilla,klitschko,lindau,merion,consequential,antic,soong,copula,berthing,chevrons,rostral,sympathizer,budokan,ranulf,beria,stilt,replying,conflated,alcibiades,painstaking,yamanashi,calif.,arvid,ctesiphon,xizong,rajas,caxton,downbeat,resurfacing,rudders,miscegenation,deathmatch,foregoing,arthropod,attestation,karts,reapportionment,harnessing,eastlake,schola,dosing,postcolonial,imtiaz,formula_55,insulators,gunung,accumulations,pampas,llewelyn,bahnhof,cytosol,grosjean,teaneck,briarcliff,arsenio,canara,elaborating,passchendaele,searchlights,holywell,mohandas,preventable,gehry,mestizos,ustinov,cliched,'national,heidfeld,tertullian,jihadist,tourer,miletus,semicircle,outclassed,bouillon,cardinalate,clarifies,dakshina,bilayer,pandyan,unrwa,chandragupta,formula_56,portola,sukumaran,lactation,islamia,heikki,couplers,misappropriation,catshark,montt,ploughs,carib,stator,leaderboard,kenrick,dendrites,scape,tillamook,molesworth,mussorgsky,melanesia,restated,troon,glycoside,truckee,headwater,mashup,sectoral,gangwon,docudrama,skirting,psychopathology,dramatised,ostroleka,infestations,thabo,depolarization,wideroe,eisenbahn,thomond,kumaon,upendra,foreland,acronyms,yaqui,retaking,raphaelite,specie,dupage,villars,lucasarts,chloroplast,werribee,balsa,ascribe,havant,flava,khawaja,tyumen,subtract,interrogators,reshaping,buzzcocks,eesti,campanile,potemkin,apertures,snowboarder,registrars,handbooks,boyar,contaminant,depositors,proximate,jeunesse,zagora,pronouncements,mists,nihilism,deified,margraviate,pietersen,moderators,amalfi,adjectival,copepods,magnetosphere,pallets,clemenceau,castra,perforation,granitic,troilus,grzegorz,luthier,dockyards,antofagasta,ffestiniog,subroutine,afterword,waterwheel,druce,nitin,undifferentiated,emacs,readmitted,barneveld,tapers,hittites,infomercials,infirm,braathens,heligoland,carpark,geomagnetic,musculoskeletal,nigerien,machinima,harmonize,repealing,indecency,muskoka,verite,steubenville,suffixed,cytoskeleton,surpasses,harmonia,imereti,ventricles,heterozygous,envisions,otsego,ecoles,warrnambool,burgenland,seria,rawat,capistrano,welby,kirin,enrollments,caricom,dragonlance,schaffhausen,expanses,photojournalism,brienne,etude,referent,jamtland,schemas,xianbei,cleburne,bicester,maritima,shorelines,diagonals,bjelke,nonpublic,aliasing,m.f.a,ovals,maitreya,skirmishing,grothendieck,sukhothai,angiotensin,bridlington,durgapur,contras,gakuen,skagit,rabbinate,tsunamis,haphazard,tyldesley,microcontroller,discourages,hialeah,compressing,septimus,larvik,condoleezza,psilocybin,protectionism,songbirds,clandestinely,selectmen,wargame,cinemascope,khazars,agronomy,melzer,latifah,cherokees,recesses,assemblymen,basescu,banaras,bioavailability,subchannels,adenine,o'kelly,prabhakar,leonese,dimethyl,testimonials,geoffroy,oxidant,universiti,gheorghiu,bohdan,reversals,zamorin,herbivore,jarre,sebastiao,infanterie,dolmen,teddington,radomsko,spaceships,cuzco,recapitulation,mahoning,bainimarama,myelin,aykroyd,decals,tokelau,nalgonda,rajasthani,121st,quelled,tambov,illyrians,homilies,illuminations,hypertrophy,grodzisk,inundation,incapacity,equilibria,combats,elihu,steinitz,berengar,gowda,canwest,khosrau,maculata,houten,kandinsky,onside,leatherhead,heritable,belvidere,federative,chukchi,serling,eruptive,patan,entitlements,suffragette,evolutions,migrates,demobilisation,athleticism,trope,sarpsborg,kensal,translink,squamish,concertgebouw,energon,timestamp,competences,zalgiris,serviceman,codice_7,spoofing,assange,mahadevan,skien,suceava,augustan,revisionism,unconvincing,hollande,drina,gottlob,lippi,broglie,darkening,tilapia,eagerness,nacht,kolmogorov,photometric,leeuwarden,jrotc,haemorrhage,almanack,cavalli,repudiation,galactose,zwickau,cetinje,houbraken,heavyweights,gabonese,ordinals,noticias,museveni,steric,charaxes,amjad,resection,joinville,leczyca,anastasius,purbeck,subtribe,dalles,leadoff,monoamine,jettisoned,kaori,anthologized,alfreton,indic,bayezid,tottori,colonizing,assassinating,unchanging,eusebian,d'estaing,tsingtao,toshio,transferases,peronist,metrology,equus,mirpur,libertarianism,kovil,indole,'green,abstention,quantitatively,icebreakers,tribals,mainstays,dryandra,eyewear,nilgiri,chrysanthemum,inositol,frenetic,merchantman,hesar,physiotherapist,transceiver,dancefloor,rankine,neisse,marginalization,lengthen,unaided,rework,pageantry,savio,striated,funen,witton,illuminates,frass,hydrolases,akali,bistrita,copywriter,firings,handballer,tachinidae,dmytro,coalesce,neretva,menem,moraines,coatbridge,crossrail,spoofed,drosera,ripen,protour,kikuyu,boleslav,edwardes,troubadours,haplogroups,wrasse,educationalist,sroda,khaneh,dagbladet,apennines,neuroscientist,deplored,terje,maccabees,daventry,spaceport,lessening,ducats,singer/guitarist,chambersburg,yeong,configurable,ceremonially,unrelenting,caffe,graaf,denizens,kingsport,ingush,panhard,synthesised,tumulus,homeschooled,bozorg,idiomatic,thanhouser,queensway,radek,hippolytus,inking,banovina,peacocks,piaui,handsworth,pantomimes,abalone,thera,kurzweil,bandura,augustinians,bocelli,ferrol,jiroft,quadrature,contravention,saussure,rectification,agrippina,angelis,matanzas,nidaros,palestrina,latium,coriolis,clostridium,ordain,uttering,lanchester,proteolytic,ayacucho,merseburg,holbein,sambalpur,algebraically,inchon,ostfold,savoia,calatrava,lahiri,judgeship,ammonite,masaryk,meyerbeer,hemorrhagic,superspeedway,ningxia,panicles,encircles,khmelnytsky,profusion,esher,babol,inflationary,anhydride,gaspe,mossy,periodicity,nacion,meteorologists,mahjong,interventional,sarin,moult,enderby,modell,palgrave,warners,montcalm,siddha,functionalism,rilke,politicized,broadmoor,kunste,orden,brasileira,araneta,eroticism,colquhoun,mamba,blacktown,tubercle,seagrass,manoel,camphor,neoregelia,llandudno,annexe,enplanements,kamien,plovers,statisticians,iturbide,madrasah,nontrivial,publican,landholders,manama,uninhabitable,revivalist,trunkline,friendliness,gurudwara,rocketry,unido,tripos,besant,braque,evolutionarily,abkhazian,staffel,ratzinger,brockville,bohemond,intercut,djurgarden,utilitarianism,deploys,sastri,absolutism,subhas,asghar,fictions,sepinwall,proportionately,titleholders,thereon,foursquare,machinegun,knightsbridge,siauliai,aqaba,gearboxes,castaways,weakens,phallic,strzelce,buoyed,ruthenia,pharynx,intractable,neptunes,koine,leakey,netherlandish,preempted,vinay,terracing,instigating,alluvium,prosthetics,vorarlberg,politiques,joinery,reduplication,nebuchadnezzar,lenticular,banka,seaborne,pattinson,helpline,aleph,beckenham,californians,namgyal,franziska,aphid,branagh,transcribe,appropriateness,surakarta,takings,propagates,juraj,b0d3fb,brera,arrayed,tailback,falsehood,hazleton,prosody,egyptology,pinnate,tableware,ratan,camperdown,ethnologist,tabari,classifiers,biogas,126th,kabila,arbitron,apuestas,membranous,kincardine,oceana,glories,natick,populism,synonymy,ghalib,mobiles,motherboards,stationers,germinal,patronised,formula_58,gaborone,torts,jeezy,interleague,novaya,batticaloa,offshoots,wilbraham,filename,nswrfl,'well,trilobite,pythons,optimally,scientologists,rhesus,pilsen,backdrops,batang,unionville,hermanos,shrikes,fareham,outlawing,discontinuing,boisterous,shamokin,scanty,southwestward,exchangers,unexpired,mewar,h.m.s,saldanha,pawan,condorcet,turbidity,donau,indulgences,coincident,cliques,weeklies,bardhaman,violators,kenai,caspase,xperia,kunal,fistula,epistemic,cammell,nephi,disestablishment,rotator,germaniawerft,pyaar,chequered,jigme,perlis,anisotropic,popstars,kapil,appendices,berat,defecting,shacks,wrangel,panchayath,gorna,suckling,aerosols,sponheim,talal,borehole,encodings,enlai,subduing,agong,nadar,kitsap,syrmia,majumdar,pichilemu,charleville,embryology,booting,literati,abutting,basalts,jussi,repubblica,hertogenbosch,digitization,relents,hillfort,wiesenthal,kirche,bhagwan,bactrian,oases,phyla,neutralizing,helsing,ebooks,spearheading,margarine,'golden,phosphor,picea,stimulants,outliers,timescale,gynaecology,integrator,skyrocketed,bridgnorth,senecio,ramachandra,suffragist,arrowheads,aswan,inadvertent,microelectronics,118th,sofer,kubica,melanesian,tuanku,balkh,vyborg,crystallographic,initiators,metamorphism,ginzburg,looters,unimproved,finistere,newburyport,norges,immunities,franchisees,asterism,kortrijk,camorra,komsomol,fleurs,draughts,patagonian,voracious,artin,collaborationist,revolucion,revitalizing,xaver,purifying,antipsychotic,disjunct,pompeius,dreamwave,juvenal,beinn,adiyaman,antitank,allama,boletus,melanogaster,dumitru,caproni,aligns,athabaskan,stobart,phallus,veikkausliiga,hornsey,buffering,bourbons,dobruja,marga,borax,electrics,gangnam,motorcyclist,whidbey,draconian,lodger,galilean,sanctification,imitates,boldness,underboss,wheatland,cantabrian,terceira,maumee,redefining,uppercase,ostroda,characterise,universalism,equalized,syndicalism,haringey,masovia,deleuze,funkadelic,conceals,thuan,minsky,pluralistic,ludendorff,beekeeping,bonfires,endoscopic,abuts,prebend,jonkoping,amami,tribunes,yup'ik,awadh,gasification,pforzheim,reforma,antiwar,vaishnavism,maryville,inextricably,margrethe,empresa,neutrophils,sanctified,ponca,elachistidae,curiae,quartier,mannar,hyperplasia,wimax,busing,neologism,florins,underrepresented,digitised,nieuw,cooch,howards,frege,hughie,plied,swale,kapellmeister,vajpayee,quadrupled,aeronautique,dushanbe,custos,saltillo,kisan,tigray,manaus,epigrams,shamanic,peppered,frosts,promotion/relegation,concedes,zwingli,charentes,whangarei,hyung,spring/summer,sobre,eretz,initialization,sawai,ephemera,grandfathered,arnaldo,customised,permeated,parapets,growths,visegrad,estudios,altamont,provincia,apologises,stoppard,carburettor,rifts,kinematic,zhengzhou,eschatology,prakrit,folate,yvelines,scapula,stupas,rishon,reconfiguration,flutist,1680s,apostolate,proudhon,lakshman,articulating,stortford,faithfull,bitterns,upwelling,qur'anic,lidar,interferometry,waterlogged,koirala,ditton,wavefunction,fazal,babbage,antioxidants,lemberg,deadlocked,tolled,ramapo,mathematica,leiria,topologies,khali,photonic,balti,1080p,corrects,recommenced,polyglot,friezes,tiebreak,copacabana,cholmondeley,armband,abolishment,sheamus,buttes,glycolysis,cataloged,warrenton,sassari,kishan,foodservice,cryptanalysis,holmenkollen,cosplay,machi,yousuf,mangal,allying,fertiliser,otomi,charlevoix,metallurg,parisians,bottlenose,oakleigh,debug,cidade,accede,ligation,madhava,pillboxes,gatefold,aveyron,sorin,thirsk,immemorial,menelik,mehra,domingos,underpinned,fleshed,harshness,diphthong,crestwood,miskolc,dupri,pyrausta,muskingum,tuoba,prodi,incidences,waynesboro,marquesas,heydar,artesian,calinescu,nucleation,funders,covalently,compaction,derbies,seaters,sodor,tabular,amadou,peckinpah,o'halloran,zechariah,libyans,kartik,daihatsu,chandran,erzhu,heresies,superheated,yarder,dorde,tanjore,abusers,xuanwu,juniperus,moesia,trusteeship,birdwatching,beatz,moorcock,harbhajan,sanga,choreographic,photonics,boylston,amalgamate,prawns,electrifying,sarath,inaccurately,exclaims,powerpoint,chaining,cpusa,adulterous,saccharomyces,glogow,vfl/afl,syncretic,simla,persisting,functors,allosteric,euphorbiaceae,juryo,mlada,moana,gabala,thornycroft,kumanovo,ostrovsky,sitio,tutankhamun,sauropods,kardzhali,reinterpretation,sulpice,rosyth,originators,halesowen,delineation,asesoria,abatement,gardai,elytra,taillights,overlays,monsoons,sandpipers,ingmar,henrico,inaccuracy,irwell,arenabowl,elche,pressburg,signalman,interviewees,sinkhole,pendle,ecommerce,cellos,nebria,organometallic,surrealistic,propagandist,interlaken,canandaigua,aerials,coutinho,pascagoula,tonopah,letterkenny,gropius,carbons,hammocks,childe,polities,hosiery,donitz,suppresses,diaghilev,stroudsburg,bagram,pistoia,regenerating,unitarians,takeaway,offstage,vidin,glorification,bakunin,yavapai,lutzow,sabercats,witney,abrogated,gorlitz,validating,dodecahedron,stubbornly,telenor,glaxosmithkline,solapur,undesired,jellicoe,dramatization,four-and-a-half,seawall,waterpark,artaxerxes,vocalization,typographic,byung,sachsenhausen,shepparton,kissimmee,konnan,belsen,dhawan,khurd,mutagenesis,vejle,perrot,estradiol,formula_60,saros,chiloe,misiones,lamprey,terrains,speke,miasto,eigenvectors,haydock,reservist,corticosteroids,savitri,shinawatra,developmentally,yehudi,berates,janissaries,recapturing,rancheria,subplots,gresley,nikkatsu,oryol,cosmas,boavista,formula_59,playfully,subsections,commentated,kathakali,dorid,vilaine,seepage,hylidae,keiji,kazakhs,triphosphate,1620s,supersede,monarchists,falla,miyako,notching,bhumibol,polarizing,secularized,shingled,bronislaw,lockerbie,soleyman,bundesbahn,latakia,redoubts,boult,inwardly,invents,ondrej,minangkabau,newquay,permanente,alhaji,madhav,malini,ellice,bookmaker,mankiewicz,etihad,o'dea,interrogative,mikawa,wallsend,canisius,bluesy,vitruvius,noord,ratifying,mixtec,gujranwala,subprefecture,keelung,goiania,nyssa,shi'ite,semitone,ch'uan,computerised,pertuan,catapults,nepomuk,shruti,millstones,buskerud,acolytes,tredegar,sarum,armia,dell'arte,devises,custodians,upturned,gallaudet,disembarking,thrashed,sagrada,myeon,undeclared,qumran,gaiden,tepco,janesville,showground,condense,chalon,unstaffed,pasay,undemocratic,hauts,viridis,uninjured,escutcheon,gymkhana,petaling,hammam,dislocations,tallaght,rerum,shias,indios,guaranty,simplicial,benares,benediction,tajiri,prolifically,huawei,onerous,grantee,ferencvaros,otranto,carbonates,conceit,digipak,qadri,masterclasses,swamiji,cradock,plunket,helmsman,119th,salutes,tippecanoe,murshidabad,intelligibility,mittal,diversifying,bidar,asansol,crowdsourcing,rovere,karakoram,grindcore,skylights,tulagi,furrows,ligne,stuka,sumer,subgraph,amata,regionalist,bulkeley,teletext,glorify,readied,lexicographer,sabadell,predictability,quilmes,phenylalanine,bandaranaike,pyrmont,marksmen,quisling,viscountess,sociopolitical,afoul,pediments,swazi,martyrology,nullify,panagiotis,superconductors,veldenz,jujuy,l'isle,hematopoietic,shafi,subsea,hattiesburg,jyvaskyla,kebir,myeloid,landmine,derecho,amerindians,birkenau,scriabin,milhaud,mucosal,nikaya,freikorps,theoretician,proconsul,o'hanlon,clerked,bactria,houma,macular,topologically,shrubby,aryeh,ghazali,afferent,magalhaes,moduli,ashtabula,vidarbha,securitate,ludwigsburg,adoor,varun,shuja,khatun,chengde,bushels,lascelles,professionnelle,elfman,rangpur,unpowered,citytv,chojnice,quaternion,stokowski,aschaffenburg,commutes,subramaniam,methylene,satrap,gharb,namesakes,rathore,helier,gestational,heraklion,colliers,giannis,pastureland,evocation,krefeld,mahadeva,churchmen,egret,yilmaz,galeazzo,pudukkottai,artigas,generalitat,mudslides,frescoed,enfeoffed,aphorisms,melilla,montaigne,gauliga,parkdale,mauboy,linings,prema,sapir,xylophone,kushan,rockne,sequoyah,vasyl,rectilinear,vidyasagar,microcosm,san'a,carcinogen,thicknesses,aleut,farcical,moderating,detested,hegemonic,instalments,vauban,verwaltungsgemeinschaft,picayune,razorback,magellanic,moluccas,pankhurst,exportation,waldegrave,sufferer,bayswater,1up.com,rearmament,orangutans,varazdin,b.o.b,elucidate,harlingen,erudition,brankovic,lapis,slipway,urraca,shinde,unwell,elwes,euboea,colwyn,srivijaya,grandstands,hortons,generalleutnant,fluxes,peterhead,gandhian,reals,alauddin,maximized,fairhaven,endow,ciechanow,perforations,darters,panellist,manmade,litigants,exhibitor,tirol,caracalla,conformance,hotelier,stabaek,hearths,borac,frisians,ident,veliko,emulators,schoharie,uzbeks,samarra,prestwick,wadia,universita,tanah,bucculatrix,predominates,genotypes,denounces,roadsides,ganassi,keokuk,philatelist,tomic,ingots,conduits,samplers,abdus,johar,allegories,timaru,wolfpacks,secunda,smeaton,sportivo,inverting,contraindications,whisperer,moradabad,calamities,bakufu,soundscape,smallholders,nadeem,crossroad,xenophobic,zakir,nationalliga,glazes,retroflex,schwyz,moroder,rubra,quraysh,theodoros,endemol,infidels,km/hr,repositioned,portraitist,lluis,answerable,arges,mindedness,coarser,eyewall,teleported,scolds,uppland,vibraphone,ricoh,isenburg,bricklayer,cuttlefish,abstentions,communicable,cephalopod,stockyards,balto,kinston,armbar,bandini,elphaba,maxims,bedouins,sachsen,friedkin,tractate,pamir,ivanovo,mohini,kovalainen,nambiar,melvyn,orthonormal,matsuyama,cuernavaca,veloso,overstated,streamer,dravid,informers,analyte,sympathized,streetscape,gosta,thomasville,grigore,futuna,depleting,whelks,kiedis,armadale,earner,wynyard,dothan,animating,tridentine,sabri,immovable,rivoli,ariege,parley,clinker,circulates,junagadh,fraunhofer,congregants,180th,buducnost,formula_62,olmert,dedekind,karnak,bayernliga,mazes,sandpiper,ecclestone,yuvan,smallmouth,decolonization,lemmy,adjudicated,retiro,legia,benue,posit,acidification,wahab,taconic,floatplane,perchlorate,atria,wisbech,divestment,dallara,phrygia,palustris,cybersecurity,rebates,facie,mineralogical,substituent,proteges,fowey,mayenne,smoothbore,cherwell,schwarzschild,junin,murrumbidgee,smalltalk,d'orsay,emirati,calaveras,titusville,theremin,vikramaditya,wampanoag,burra,plaines,onegin,emboldened,whampoa,langa,soderbergh,arnaz,sowerby,arendal,godunov,pathanamthitta,damselfly,bestowing,eurosport,iconoclasm,outfitters,acquiesced,badawi,hypotension,ebbsfleet,annulus,sohrab,thenceforth,chagatai,necessitates,aulus,oddities,toynbee,uniontown,innervation,populaire,indivisible,rossellini,minuet,cyrene,gyeongju,chania,cichlids,harrods,1690s,plunges,abdullahi,gurkhas,homebuilt,sortable,bangui,rediff,incrementally,demetrios,medaille,sportif,svend,guttenberg,tubules,carthusian,pleiades,torii,hoppus,phenyl,hanno,conyngham,teschen,cronenberg,wordless,melatonin,distinctiveness,autos,freising,xuanzang,dunwich,satanism,sweyn,predrag,contractually,pavlovic,malaysians,micrometres,expertly,pannonian,abstaining,capensis,southwesterly,catchphrases,commercialize,frankivsk,normanton,hibernate,verso,deportees,dubliners,codice_8,condors,zagros,glosses,leadville,conscript,morrisons,usury,ossian,oulton,vaccinium,civet,ayman,codrington,hadron,nanometers,geochemistry,extractor,grigori,tyrrhenian,neocollyris,drooping,falsification,werft,courtauld,brigantine,orhan,chapultepec,supercopa,federalized,praga,havering,encampments,infallibility,sardis,pawar,undirected,reconstructionist,ardrossan,varuna,pastimes,archdiocesan,fledging,shenhua,molise,secondarily,stagnated,replicates,ciencias,duryodhana,marauding,ruislip,ilyich,intermixed,ravenswood,shimazu,mycorrhizal,icosahedral,consents,dunblane,follicular,pekin,suffield,muromachi,kinsale,gauche,businesspeople,thereto,watauga,exaltation,chelmno,gorse,proliferate,drainages,burdwan,kangra,transducers,inductor,duvalier,maguindanao,moslem,uncaf,givenchy,plantarum,liturgics,telegraphs,lukashenko,chenango,andante,novae,ironwood,faubourg,torme,chinensis,ambala,pietermaritzburg,virginians,landform,bottlenecks,o'driscoll,darbhanga,baptistery,ameer,needlework,naperville,auditoriums,mullingar,starrer,animatronic,topsoil,madura,cannock,vernet,santurce,catocala,ozeki,pontevedra,multichannel,sundsvall,strategists,medio,135th,halil,afridi,trelawny,caloric,ghraib,allendale,hameed,ludwigshafen,spurned,pavlo,palmar,strafed,catamarca,aveiro,harmonization,surah,predictors,solvay,mande,omnipresent,parenthesis,echolocation,equaling,experimenters,acyclic,lithographic,sepoys,katarzyna,sridevi,impoundment,khosrow,caesarean,nacogdoches,rockdale,lawmaker,caucasians,bahman,miyan,rubric,exuberance,bombastic,ductile,snowdonia,inlays,pinyon,anemones,hurries,hospitallers,tayyip,pulleys,treme,photovoltaics,testbed,polonium,ryszard,osgoode,profiting,ironwork,unsurpassed,nepticulidae,makai,lumbini,preclassic,clarksburg,egremont,videography,rehabilitating,ponty,sardonic,geotechnical,khurasan,solzhenitsyn,henna,phoenicia,rhyolite,chateaux,retorted,tomar,deflections,repressions,harborough,renan,brumbies,vandross,storia,vodou,clerkenwell,decking,universo,salon.com,imprisoning,sudwest,ghaziabad,subscribing,pisgah,sukhumi,econometric,clearest,pindar,yildirim,iulia,atlases,cements,remaster,dugouts,collapsible,resurrecting,batik,unreliability,thiers,conjunctions,colophon,marcher,placeholder,flagella,wolds,kibaki,viviparous,twelver,screenshots,aroostook,khadr,iconographic,itasca,jaume,basti,propounded,varro,be'er,jeevan,exacted,shrublands,creditable,brocade,boras,bittern,oneonta,attentional,herzliya,comprehensible,lakeville,discards,caxias,frankland,camerata,satoru,matlab,commutator,interprovincial,yorkville,benefices,nizami,edwardsville,amigaos,cannabinoid,indianola,amateurliga,pernicious,ubiquity,anarchic,novelties,precondition,zardari,symington,sargodha,headphone,thermopylae,mashonaland,zindagi,thalberg,loewe,surfactants,dobro,crocodilians,samhita,diatoms,haileybury,berwickshire,supercritical,sofie,snorna,slatina,intramolecular,agung,osteoarthritis,obstetric,teochew,vakhtang,connemara,deformations,diadem,ferruccio,mainichi,qualitatively,refrigerant,rerecorded,methylated,karmapa,krasinski,restatement,rouvas,cubitt,seacoast,schwarzkopf,homonymous,shipowner,thiamine,approachable,xiahou,160th,ecumenism,polistes,internazionali,fouad,berar,biogeography,texting,inadequately,'when,4kids,hymenoptera,emplaced,cognomen,bellefonte,supplant,michaelmas,uriel,tafsir,morazan,schweinfurt,chorister,ps400,nscaa,petipa,resolutely,ouagadougou,mascarene,supercell,konstanz,bagrat,harmonix,bergson,shrimps,resonators,veneta,camas,mynydd,rumford,generalmajor,khayyam,web.com,pappus,halfdan,tanana,suomen,yutaka,bibliographical,traian,silat,noailles,contrapuntal,agaricus,'special,minibuses,1670s,obadiah,deepa,rorschach,malolos,lymington,valuations,imperials,caballeros,ambroise,judicature,elegiac,sedaka,shewa,checksum,gosforth,legionaries,corneille,microregion,friedrichshafen,antonis,surnamed,mycelium,cantus,educations,topmost,outfitting,ivica,nankai,gouda,anthemic,iosif,supercontinent,antifungal,belarusians,mudaliar,mohawks,caversham,glaciated,basemen,stevan,clonmel,loughton,deventer,positivist,manipuri,tensors,panipat,changeup,impermeable,dubbo,elfsborg,maritimo,regimens,bikram,bromeliad,substratum,norodom,gaultier,queanbeyan,pompeo,redacted,eurocopter,mothballed,centaurs,borno,copra,bemidji,'home,sopron,neuquen,passo,cineplex,alexandrov,wysokie,mammoths,yossi,sarcophagi,congreve,petkovic,extraneous,waterbirds,slurs,indias,phaeton,discontented,prefaced,abhay,prescot,interoperable,nordisk,bicyclists,validly,sejong,litovsk,zanesville,kapitanleutnant,kerch,changeable,mcclatchy,celebi,attesting,maccoll,sepahan,wayans,veined,gaudens,markt,dansk,soane,quantized,petersham,forebears,nayarit,frenzied,queuing,bygone,viggo,ludwik,tanka,hanssen,brythonic,cornhill,primorsky,stockpiles,conceptualization,lampeter,hinsdale,mesoderm,bielsk,rosenheim,ultron,joffrey,stanwyck,khagan,tiraspol,pavelic,ascendant,empoli,metatarsal,descentralizado,masada,ligier,huseyin,ramadi,waratah,tampines,ruthenium,statoil,mladost,liger,grecian,multiparty,digraph,maglev,reconsideration,radiography,cartilaginous,taizu,wintered,anabaptist,peterhouse,shoghi,assessors,numerator,paulet,painstakingly,halakhic,rocroi,motorcycling,gimel,kryptonian,emmeline,cheeked,drawdown,lelouch,dacians,brahmana,reminiscence,disinfection,optimizations,golders,extensor,tsugaru,tolling,liman,gulzar,unconvinced,crataegus,oppositional,dvina,pyrolysis,mandan,alexius,prion,stressors,loomed,moated,dhivehi,recyclable,relict,nestlings,sarandon,kosovar,solvers,czeslaw,kenta,maneuverable,middens,berkhamsted,comilla,folkways,loxton,beziers,batumi,petrochemicals,optimised,sirjan,rabindra,musicality,rationalisation,drillers,subspaces,'live,bbwaa,outfielders,tsung,danske,vandalised,norristown,striae,kanata,gastroenterology,steadfastly,equalising,bootlegging,mannerheim,notodontidae,lagoa,commentating,peninsulas,chishti,seismology,modigliani,preceptor,canonically,awardee,boyaca,hsinchu,stiffened,nacelle,bogor,dryness,unobstructed,yaqub,scindia,peeters,irritant,ammonites,ferromagnetic,speechwriter,oxygenated,walesa,millais,canarian,faience,calvinistic,discriminant,rasht,inker,annexes,howth,allocates,conditionally,roused,regionalism,regionalbahn,functionary,nitrates,bicentenary,recreates,saboteurs,koshi,plasmids,thinned,124th,plainview,kardashian,neuville,victorians,radiates,127th,vieques,schoolmates,petru,tokusatsu,keying,sunaina,flamethrower,'bout,demersal,hosokawa,corelli,omniscient,o'doherty,niksic,reflectivity,transdev,cavour,metronome,temporally,gabba,nsaids,geert,mayport,hematite,boeotia,vaudreuil,torshavn,sailplane,mineralogist,eskisehir,practises,gallifrey,takumi,unease,slipstream,hedmark,paulinus,ailsa,wielkopolska,filmworks,adamantly,vinaya,facelifted,franchisee,augustana,toppling,velvety,crispa,stonington,histological,genealogist,tactician,tebow,betjeman,nyingma,overwinter,oberoi,rampal,overwinters,petaluma,lactarius,stanmore,balikpapan,vasant,inclines,laminate,munshi,sociedade,rabbah,septal,boyband,ingrained,faltering,inhumans,nhtsa,affix,l'ordre,kazuki,rossendale,mysims,latvians,slaveholders,basilicata,neuburg,assize,manzanillo,scrobipalpa,formula_61,belgique,pterosaurs,privateering,vaasa,veria,northport,pressurised,hobbyist,austerlitz,sahih,bhadra,siliguri,bistrica,bursaries,wynton,corot,lepidus,lully,libor,libera,olusegun,choline,mannerism,lymphocyte,chagos,duxbury,parasitism,ecowas,morotai,cancion,coniston,aggrieved,sputnikmusic,parle,ammonian,civilisations,malformation,cattaraugus,skyhawks,d'arc,demerara,bronfman,midwinter,piscataway,jogaila,threonine,matins,kohlberg,hubli,pentatonic,camillus,nigam,potro,unchained,chauvel,orangeville,cistercians,redeployment,xanthi,manju,carabinieri,pakeha,nikolaevich,kantakouzenos,sesquicentennial,gunships,symbolised,teramo,ballo,crusading,l'oeil,bharatpur,lazier,gabrovo,hysteresis,rothbard,chaumont,roundel,ma'mun,sudhir,queried,newts,shimane,presynaptic,playfield,taxonomists,sensitivities,freleng,burkinabe,orfeo,autovia,proselytizing,bhangra,pasok,jujutsu,heung,pivoting,hominid,commending,formula_64,epworth,christianized,oresund,hantuchova,rajputana,hilversum,masoretic,dayak,bakri,assen,magog,macromolecules,waheed,qaida,spassky,rumped,protrudes,preminger,misogyny,glencairn,salafi,lacunae,grilles,racemes,areva,alighieri,inari,epitomized,photoshoot,one-of-a-kind,tring,muralist,tincture,backwaters,weaned,yeasts,analytically,smaland,caltrans,vysocina,jamuna,mauthausen,175th,nouvelles,censoring,reggina,christology,gilad,amplifying,mehmood,johnsons,redirects,eastgate,sacrum,meteoric,riverbanks,guidebooks,ascribes,scoparia,iconoclastic,telegraphic,chine,merah,mistico,lectern,sheung,aethelstan,capablanca,anant,uspto,albatrosses,mymensingh,antiretroviral,clonal,coorg,vaillant,liquidator,gigas,yokai,eradicating,motorcyclists,waitakere,tandon,nears,montenegrins,250th,tatsuya,yassin,atheistic,syncretism,nahum,berisha,transcended,owensboro,lakshmana,abteilung,unadorned,nyack,overflows,harrisonburg,complainant,uematsu,frictional,worsens,sangguniang,abutment,bulwer,sarma,apollinaire,shippers,lycia,alentejo,porpoises,optus,trawling,augustow,blackwall,workbench,westmount,leaped,sikandar,conveniences,stornoway,culverts,zoroastrians,hristo,ansgar,assistive,reassert,fanned,compasses,delgada,maisons,arima,plonsk,verlaine,starstruck,rakhine,befell,spirally,wyclef,expend,colloquium,formula_63,albertus,bellarmine,handedness,holon,introns,movimiento,profitably,lohengrin,discoverers,awash,erste,pharisees,dwarka,oghuz,hashing,heterodox,uloom,vladikavkaz,linesman,rehired,nucleophile,germanicus,gulshan,songz,bayerische,paralympian,crumlin,enjoined,khanum,prahran,penitent,amersfoort,saranac,semisimple,vagrants,compositing,tualatin,oxalate,lavra,ironi,ilkeston,umpqua,calum,stretford,zakat,guelders,hydrazine,birkin,spurring,modularity,aspartate,sodermanland,hopital,bellary,legazpi,clasico,cadfael,hypersonic,volleys,pharmacokinetics,carotene,orientale,pausini,bataille,lunga,retailed,m.phil,mazowieckie,vijayan,rawal,sublimation,promissory,estimators,ploughed,conflagration,penda,segregationist,otley,amputee,coauthor,sopra,pellew,wreckers,tollywood,circumscription,permittivity,strabane,landward,articulates,beaverbrook,rutherglen,coterminous,whistleblowers,colloidal,surbiton,atlante,oswiecim,bhasa,lampooned,chanter,saarc,landkreis,tribulation,tolerates,daiichi,hatun,cowries,dyschirius,abercromby,attock,aldwych,inflows,absolutist,l'histoire,committeeman,vanbrugh,headstock,westbourne,appenzell,hoxton,oculus,westfalen,roundabouts,nickelback,trovatore,quenching,summarises,conservators,transmutation,talleyrand,barzani,unwillingly,axonal,'blue,opining,enveloping,fidesz,rafah,colborne,flickr,lozenge,dulcimer,ndebele,swaraj,oxidize,gonville,resonated,gilani,superiore,endeared,janakpur,shepperton,solidifying,memoranda,sochaux,kurnool,rewari,emirs,kooning,bruford,unavailability,kayseri,judicious,negating,pterosaur,cytosolic,chernihiv,variational,sabretooth,seawolves,devalued,nanded,adverb,volunteerism,sealers,nemours,smederevo,kashubian,bartin,animax,vicomte,polotsk,polder,archiepiscopal,acceptability,quidditch,tussock,seminaire,immolation,belge,coves,wellingborough,khaganate,mckellen,nayaka,brega,kabhi,pontoons,bascule,newsreels,injectors,cobol,weblog,diplo,biggar,wheatbelt,erythrocytes,pedra,showgrounds,bogdanovich,eclecticism,toluene,elegies,formalize,andromedae,airworthiness,springville,mainframes,overexpression,magadha,bijelo,emlyn,glutamine,accenture,uhuru,metairie,arabidopsis,patanjali,peruvians,berezovsky,accion,astrolabe,jayanti,earnestly,sausalito,recurved,1500s,ramla,incineration,galleons,laplacian,shiki,smethwick,isomerase,dordevic,janow,jeffersonville,internationalism,penciled,styrene,ashur,nucleoside,peristome,horsemanship,sedges,bachata,medes,kristallnacht,schneerson,reflectance,invalided,strutt,draupadi,destino,partridges,tejas,quadrennial,aurel,halych,ethnomusicology,autonomist,radyo,rifting,shi'ar,crvena,telefilm,zawahiri,plana,sultanates,theodorus,subcontractors,pavle,seneschal,teleports,chernivtsi,buccal,brattleboro,stankovic,safar,dunhuang,electrocution,chastised,ergonomic,midsomer,130th,zomba,nongovernmental,escapist,localize,xuzhou,kyrie,carinthian,karlovac,nisan,kramnik,pilipino,digitisation,khasi,andronicus,highwayman,maior,misspelling,sebastopol,socon,rhaetian,archimandrite,partway,positivity,otaku,dingoes,tarski,geopolitics,disciplinarian,zulfikar,kenzo,globose,electrophilic,modele,storekeeper,pohang,wheldon,washers,interconnecting,digraphs,intrastate,campy,helvetic,frontispiece,ferrocarril,anambra,petraeus,midrib,endometrial,dwarfism,mauryan,endocytosis,brigs,percussionists,furtherance,synergistic,apocynaceae,krona,berthier,circumvented,casal,siltstone,precast,ethnikos,realists,geodesy,zarzuela,greenback,tripathi,persevered,interments,neutralization,olbermann,departements,supercomputing,demobilised,cassavetes,dunder,ministering,veszprem,barbarism,'world,pieve,apologist,frentzen,sulfides,firewalls,pronotum,staatsoper,hachette,makhachkala,oberland,phonon,yoshihiro,instars,purnima,winslet,mutsu,ergative,sajid,nizamuddin,paraphrased,ardeidae,kodagu,monooxygenase,skirmishers,sportiva,o'byrne,mykolaiv,ophir,prieta,gyllenhaal,kantian,leche,copan,herero,ps250,gelsenkirchen,shalit,sammarinese,chetwynd,wftda,travertine,warta,sigmaringen,concerti,namespace,ostergotland,biomarker,universals,collegio,embarcadero,wimborne,fiddlers,likening,ransomed,stifled,unabated,kalakaua,khanty,gongs,goodrem,countermeasure,publicizing,geomorphology,swedenborg,undefended,catastrophes,diverts,storyboards,amesbury,contactless,placentia,festivity,authorise,terrane,thallium,stradivarius,antonine,consortia,estimations,consecrate,supergiant,belichick,pendants,butyl,groza,univac,afire,kavala,studi,teletoon,paucity,gonbad,koninklijke,128th,stoichiometric,multimodal,facundo,anatomic,melamine,creuse,altan,brigands,mcguinty,blomfield,tsvangirai,protrusion,lurgan,warminster,tenzin,russellville,discursive,definable,scotrail,lignin,reincorporated,o'dell,outperform,redland,multicolored,evaporates,dimitrie,limbic,patapsco,interlingua,surrogacy,cutty,potrero,masud,cahiers,jintao,ardashir,centaurus,plagiarized,minehead,musings,statuettes,logarithms,seaview,prohibitively,downforce,rivington,tomorrowland,microbiologist,ferric,morag,capsid,kucinich,clairvaux,demotic,seamanship,cicada,painterly,cromarty,carbonic,tupou,oconee,tehuantepec,typecast,anstruther,internalized,underwriters,tetrahedra,flagrant,quakes,pathologies,ulrik,nahal,tarquini,dongguan,parnassus,ryoko,senussi,seleucia,airasia,einer,sashes,d'amico,matriculating,arabesque,honved,biophysical,hardinge,kherson,mommsen,diels,icbms,reshape,brasiliensis,palmach,netaji,oblate,functionalities,grigor,blacksburg,recoilless,melanchthon,reales,astrodome,handcrafted,memes,theorizes,isma'il,aarti,pirin,maatschappij,stabilizes,honiara,ashbury,copts,rootes,defensed,queiroz,mantegna,galesburg,coraciiformesfamily,cabrillo,tokio,antipsychotics,kanon,173rd,apollonia,finial,lydian,hadamard,rangi,dowlatabad,monolingual,platformer,subclasses,chiranjeevi,mirabeau,newsgroup,idmanyurdu,kambojas,walkover,zamoyski,generalist,khedive,flanges,knowle,bande,157th,alleyn,reaffirm,pininfarina,zuckerberg,hakodate,131st,aditi,bellinzona,vaulter,planking,boscombe,colombians,lysis,toppers,metered,nahyan,queensryche,minho,nagercoil,firebrand,foundress,bycatch,mendota,freeform,antena,capitalisation,martinus,overijssel,purists,interventionist,zgierz,burgundians,hippolyta,trompe,umatilla,moroccans,dictionnaire,hydrography,changers,chota,rimouski,aniline,bylaw,grandnephew,neamt,lemnos,connoisseurs,tractive,rearrangements,fetishism,finnic,apalachicola,landowning,calligraphic,circumpolar,mansfeld,legible,orientalism,tannhauser,blamey,maximization,noinclude,blackbirds,angara,ostersund,pancreatitis,glabra,acleris,juried,jungian,triumphantly,singlet,plasmas,synesthesia,yellowhead,unleashes,choiseul,quanzhong,brookville,kaskaskia,igcse,skatepark,jatin,jewellers,scaritinae,techcrunch,tellurium,lachaise,azuma,codeshare,dimensionality,unidirectional,scolaire,macdill,camshafts,unassisted,verband,kahlo,eliya,prelature,chiefdoms,saddleback,sockers,iommi,coloratura,llangollen,biosciences,harshest,maithili,k'iche,plical,multifunctional,andreu,tuskers,confounding,sambre,quarterdeck,ascetics,berdych,transversal,tuolumne,sagami,petrobras,brecker,menxia,instilling,stipulating,korra,oscillate,deadpan,v/line,pyrotechnic,stoneware,prelims,intracoastal,retraining,ilija,berwyn,encrypt,achievers,zulfiqar,glycoproteins,khatib,farmsteads,occultist,saman,fionn,derulo,khilji,obrenovic,argosy,toowong,dementieva,sociocultural,iconostasis,craigslist,festschrift,taifa,intercalated,tanjong,penticton,sharad,marxian,extrapolation,guises,wettin,prabang,exclaiming,kosta,famas,conakry,wanderings,'aliabad,macleay,exoplanet,bancorp,besiegers,surmounting,checkerboard,rajab,vliet,tarek,operable,wargaming,haldimand,fukuyama,uesugi,aggregations,erbil,brachiopods,tokyu,anglais,unfavorably,ujpest,escorial,armagnac,nagara,funafuti,ridgeline,cocking,o'gorman,compactness,retardant,krajowa,barua,coking,bestows,thampi,chicagoland,variably,o'loughlin,minnows,schwa,shaukat,polycarbonate,chlorinated,godalming,gramercy,delved,banqueting,enlil,sarada,prasanna,domhnall,decadal,regressive,lipoprotein,collectable,surendra,zaporizhia,cycliste,suchet,offsetting,formula_65,pudong,d'arte,blyton,quonset,osmania,tientsin,manorama,proteomics,bille,jalpaiguri,pertwee,barnegat,inventiveness,gollancz,euthanized,henricus,shortfalls,wuxia,chlorides,cerrado,polyvinyl,folktale,straddled,bioengineering,eschewing,greendale,recharged,olave,ceylonese,autocephalous,peacebuilding,wrights,guyed,rosamund,abitibi,bannockburn,gerontology,scutari,souness,seagram,codice_9,'open,xhtml,taguig,purposed,darbar,orthopedics,unpopulated,kisumu,tarrytown,feodor,polyhedral,monadnock,gottorp,priam,redesigning,gasworks,elfin,urquiza,homologation,filipovic,bohun,manningham,gornik,soundness,shorea,lanus,gelder,darke,sandgate,criticality,paranaense,153rd,vieja,lithograph,trapezoid,tiebreakers,convalescence,yan'an,actuaries,balad,altimeter,thermoelectric,trailblazer,previn,tenryu,ancaster,endoscopy,nicolet,discloses,fracking,plaine,salado,americanism,placards,absurdist,propylene,breccia,jirga,documenta,ismailis,161st,brentano,dallas/fort,embellishment,calipers,subscribes,mahavidyalaya,wednesbury,barnstormers,miwok,schembechler,minigame,unterberger,dopaminergic,inacio,nizamabad,overridden,monotype,cavernous,stichting,sassafras,sotho,argentinean,myrrh,rapidity,flatts,gowrie,dejected,kasaragod,cyprinidae,interlinked,arcseconds,degeneracy,infamously,incubate,substructure,trigeminal,sectarianism,marshlands,hooliganism,hurlers,isolationist,urania,burrard,switchover,lecco,wilts,interrogator,strived,ballooning,volterra,raciborz,relegating,gilding,cybele,dolomites,parachutist,lochaber,orators,raeburn,backend,benaud,rallycross,facings,banga,nuclides,defencemen,futurity,emitters,yadkin,eudonia,zambales,manasseh,sirte,meshes,peculiarly,mcminnville,roundly,boban,decrypt,icelanders,sanam,chelan,jovian,grudgingly,penalised,subscript,gambrinus,poaceae,infringements,maleficent,runciman,148th,supersymmetry,granites,liskeard,eliciting,involution,hallstatt,kitzbuhel,shankly,sandhills,inefficiencies,yishuv,psychotropic,nightjars,wavell,sangamon,vaikundar,choshu,retrospectives,pitesti,gigantea,hashemi,bosna,gakuin,siochana,arrangers,baronetcies,narayani,temecula,creston,koscierzyna,autochthonous,wyandot,anniston,igreja,mobilise,buzau,dunster,musselburgh,wenzhou,khattak,detoxification,decarboxylase,manlius,campbells,coleoptera,copyist,sympathisers,suisun,eminescu,defensor,transshipment,thurgau,somerton,fluctuates,ambika,weierstrass,lukow,giambattista,volcanics,romanticized,innovated,matabeleland,scotiabank,garwolin,purine,d'auvergne,borderland,maozhen,pricewaterhousecoopers,testator,pallium,scout.com,mv/pi,nazca,curacies,upjohn,sarasvati,monegasque,ketrzyn,malory,spikelets,biomechanics,haciendas,rapped,dwarfed,stews,nijinsky,subjection,matsu,perceptible,schwarzburg,midsection,entertains,circuitous,epiphytic,wonsan,alpini,bluefield,sloths,transportable,braunfels,dictum,szczecinek,jukka,wielun,wejherowo,hucknall,grameen,duodenum,ribose,deshpande,shahar,nexstar,injurious,dereham,lithographer,dhoni,structuralist,progreso,deschutes,christus,pulteney,quoins,yitzchak,gyeongsang,breviary,makkah,chiyoda,jutting,vineland,angiosperms,necrotic,novelisation,redistribute,tirumala,140th,featureless,mafic,rivaling,toyline,2/1st,martius,saalfeld,monthan,texian,kathak,melodramas,mithila,regierungsbezirk,509th,fermenting,schoolmate,virtuosic,briain,kokoda,heliocentric,handpicked,kilwinning,sonically,dinars,kasim,parkways,bogdanov,luxembourgian,halland,avesta,bardic,daugavpils,excavator,qwest,frustrate,physiographic,majoris,'ndrangheta,unrestrained,firmness,montalban,abundances,preservationists,adare,executioners,guardsman,bonnaroo,neglects,nazrul,pro12,hoorn,abercorn,refuting,kabud,cationic,parapsychology,troposphere,venezuelans,malignancy,khoja,unhindered,accordionist,medak,visby,ejercito,laparoscopic,dinas,umayyads,valmiki,o'dowd,saplings,stranding,incisions,illusionist,avocets,buccleuch,amazonia,fourfold,turboprops,roosts,priscus,turnstile,areal,certifies,pocklington,spoofs,viseu,commonalities,dabrowka,annam,homesteaders,daredevils,mondrian,negotiates,fiestas,perennials,maximizes,lubavitch,ravindra,scrapers,finials,kintyre,violas,snoqualmie,wilders,openbsd,mlawa,peritoneal,devarajan,congke,leszno,mercurial,fakir,joannes,bognor,overloading,unbuilt,gurung,scuttle,temperaments,bautzen,jardim,tradesman,visitations,barbet,sagamore,graaff,forecasters,wilsons,assis,l'air,shariah,sochaczew,russa,dirge,biliary,neuve,heartbreakers,strathearn,jacobian,overgrazing,edrich,anticline,parathyroid,petula,lepanto,decius,channelled,parvathi,puppeteers,communicators,francorchamps,kahane,longus,panjang,intron,traite,xxvii,matsuri,amrit,katyn,disheartened,cacak,omonia,alexandrine,partaking,wrangling,adjuvant,haskovo,tendrils,greensand,lammermoor,otherworld,volusia,stabling,one-and-a-half,bresson,zapatista,eotvos,ps150,webisodes,stepchildren,microarray,braganca,quanta,dolne,superoxide,bellona,delineate,ratha,lindenwood,bruhl,cingulate,tallies,bickerton,helgi,bevin,takoma,tsukuba,statuses,changeling,alister,bytom,dibrugarh,magnesia,duplicating,outlier,abated,goncalo,strelitz,shikai,mardan,musculature,ascomycota,springhill,tumuli,gabaa,odenwald,reformatted,autocracy,theresienstadt,suplex,chattopadhyay,mencken,congratulatory,weatherfield,systema,solemnity,projekt,quanzhou,kreuzberg,postbellum,nobuo,mediaworks,finisterre,matchplay,bangladeshis,kothen,oocyte,hovered,aromas,afshar,browed,teases,chorlton,arshad,cesaro,backbencher,iquique,vulcans,padmini,unabridged,cyclase,despotic,kirilenko,achaean,queensberry,debre,octahedron,iphigenia,curbing,karimnagar,sagarmatha,smelters,surrealists,sanada,shrestha,turridae,leasehold,jiedushi,eurythmics,appropriating,correze,thimphu,amery,musicomh,cyborgs,sandwell,pushcart,retorts,ameliorate,deteriorates,stojanovic,spline,entrenchments,bourse,chancellorship,pasolini,lendl,personage,reformulated,pubescens,loiret,metalurh,reinvention,nonhuman,eilema,tarsal,complutense,magne,broadview,metrodome,outtake,stouffville,seinen,bataillon,phosphoric,ostensible,opatow,aristides,beefheart,glorifying,banten,romsey,seamounts,fushimi,prophylaxis,sibylla,ranjith,goslar,balustrades,georgiev,caird,lafitte,peano,canso,bankura,halfpenny,segregate,caisson,bizerte,jamshedpur,euromaidan,philosophie,ridged,cheerfully,reclassification,aemilius,visionaries,samoans,wokingham,chemung,wolof,unbranched,cinerea,bhosle,ourense,immortalised,cornerstones,sourcebook,khufu,archimedean,universitatea,intermolecular,fiscally,suffices,metacomet,adjudicator,stablemate,specks,glace,inowroclaw,patristic,muharram,agitating,ashot,neurologic,didcot,gamla,ilves,putouts,siraj,laski,coaling,diarmuid,ratnagiri,rotulorum,liquefaction,morbihan,harel,aftershock,gruiformesfamily,bonnier,falconiformesfamily,adorns,wikis,maastrichtian,stauffenberg,bishopsgate,fakhr,sevenfold,ponders,quantifying,castiel,opacity,depredations,lenten,gravitated,o'mahony,modulates,inuktitut,paston,kayfabe,vagus,legalised,balked,arianism,tendering,sivas,birthdate,awlaki,khvajeh,shahab,samtgemeinde,bridgeton,amalgamations,biogenesis,recharging,tsukasa,mythbusters,chamfered,enthronement,freelancers,maharana,constantia,sutil,messines,monkton,okanogan,reinvigorated,apoplexy,tanahashi,neues,valiants,harappan,russes,carding,volkoff,funchal,statehouse,imitative,intrepidity,mellotron,samaras,turkana,besting,longitudes,exarch,diarrhoea,transcending,zvonareva,darna,ramblin,disconnection,137th,refocused,diarmait,agricole,ba'athist,turenne,contrabass,communis,daviess,fatimids,frosinone,fittingly,polyphyletic,qanat,theocratic,preclinical,abacha,toorak,marketplaces,conidia,seiya,contraindicated,retford,bundesautobahn,rebuilds,climatology,seaworthy,starfighter,qamar,categoria,malai,hellinsia,newstead,airworthy,catenin,avonmouth,arrhythmias,ayyavazhi,downgrade,ashburnham,ejector,kinematics,petworth,rspca,filmation,accipitridae,chhatrapati,g/mol,bacau,agama,ringtone,yudhoyono,orchestrator,arbitrators,138th,powerplants,cumbernauld,alderley,misamis,hawai`i,cuando,meistriliiga,jermyn,alans,pedigrees,ottavio,approbation,omnium,purulia,prioress,rheinland,lymphoid,lutsk,oscilloscope,ballina,iliac,motorbikes,modernising,uffizi,phylloxera,kalevala,bengalis,amravati,syntheses,interviewers,inflectional,outflank,maryhill,unhurt,profiler,nacelles,heseltine,personalised,guarda,herpetologist,airpark,pigot,margaretha,dinos,peleliu,breakbeat,kastamonu,shaivism,delamere,kingsville,epigram,khlong,phospholipids,journeying,lietuvos,congregated,deviance,celebes,subsoil,stroma,kvitova,lubricating,layoff,alagoas,olafur,doron,interuniversity,raycom,agonopterix,uzice,nanna,springvale,raimundo,wrested,pupal,talat,skinheads,vestige,unpainted,handan,odawara,ammar,attendee,lapped,myotis,gusty,ciconiiformesfamily,traversal,subfield,vitaphone,prensa,hasidism,inwood,carstairs,kropotkin,turgenev,dobra,remittance,purim,tannin,adige,tabulation,lethality,pacha,micronesian,dhruva,defensemen,tibeto,siculus,radioisotope,sodertalje,phitsanulok,euphonium,oxytocin,overhangs,skinks,fabrica,reinterred,emulates,bioscience,paragliding,raekwon,perigee,plausibility,frolunda,erroll,aznar,vyasa,albinus,trevally,confederacion,terse,sixtieth,1530s,kendriya,skateboarders,frontieres,muawiyah,easements,shehu,conservatively,keystones,kasem,brutalist,peekskill,cowry,orcas,syllabary,paltz,elisabetta,denticles,hampering,dolni,eidos,aarau,lermontov,yankton,shahbaz,barrages,kongsvinger,reestablishment,acetyltransferase,zulia,mrnas,slingsby,eucalypt,efficacious,weybridge,gradation,cinematheque,malthus,bampton,coexisted,cisse,hamdi,cupertino,saumarez,chionodes,libertine,formers,sakharov,pseudonymous,vol.1,mcduck,gopalakrishnan,amberley,jorhat,grandmasters,rudiments,dwindle,param,bukidnon,menander,americanus,multipliers,pulawy,homoerotic,pillbox,cd+dvd,epigraph,aleksandrow,extrapolated,horseshoes,contemporain,angiography,hasselt,shawinigan,memorization,legitimized,cyclades,outsold,rodolphe,kelis,powerball,dijkstra,analyzers,incompressible,sambar,orangeburg,osten,reauthorization,adamawa,sphagnum,hypermarket,millipedes,zoroaster,madea,ossuary,murrayfield,pronominal,gautham,resellers,ethers,quarrelled,dolna,stragglers,asami,tangut,passos,educacion,sharaf,texel,berio,bethpage,bezalel,marfa,noronha,36ers,genteel,avram,shilton,compensates,sweetener,reinstalled,disables,noether,1590s,balakrishnan,kotaro,northallerton,cataclysm,gholam,cancellara,schiphol,commends,longinus,albinism,gemayel,hamamatsu,volos,islamism,sidereal,pecuniary,diggings,townsquare,neosho,lushan,chittoor,akhil,disputation,desiccation,cambodians,thwarting,deliberated,ellipsis,bahini,susumu,separators,kohneh,plebeians,kultur,ogaden,pissarro,trypeta,latur,liaodong,vetting,datong,sohail,alchemists,lengthwise,unevenly,masterly,microcontrollers,occupier,deviating,farringdon,baccalaureat,theocracy,chebyshev,archivists,jayaram,ineffectiveness,scandinavians,jacobins,encomienda,nambu,g/cm3,catesby,paavo,heeded,rhodium,idealised,10deg,infective,mecyclothorax,halevy,sheared,minbari,audax,lusatian,rebuffs,hitfix,fastener,subjugate,tarun,binet,compuserve,synthesiser,keisuke,amalric,ligatures,tadashi,ignazio,abramovich,groundnut,otomo,maeve,mortlake,ostrogoths,antillean,todor,recto,millimetre,espousing,inaugurate,paracetamol,galvanic,harpalinae,jedrzejow,reassessment,langlands,civita,mikan,stikine,bijar,imamate,istana,kaiserliche,erastus,federale,cytosine,expansionism,hommes,norrland,smriti,snapdragon,gulab,taleb,lossy,khattab,urbanised,sesto,rekord,diffuser,desam,morganatic,silting,pacts,extender,beauharnais,purley,bouches,halfpipe,discontinuities,houthi,farmville,animism,horni,saadi,interpretative,blockades,symeon,biogeographic,transcaucasian,jetties,landrieu,astrocytes,conjunto,stumpings,weevils,geysers,redux,arching,romanus,tazeh,marcellinus,casein,opava,misrata,anare,sattar,declarer,dreux,oporto,venta,vallis,icosahedron,cortona,lachine,mohammedan,sandnes,zynga,clarin,diomedes,tsuyoshi,pribram,gulbarga,chartist,superettan,boscawen,altus,subang,gating,epistolary,vizianagaram,ogdensburg,panna,thyssen,tarkovsky,dzogchen,biograph,seremban,unscientific,nightjar,legco,deism,n.w.a,sudha,siskel,sassou,flintlock,jovial,montbeliard,pallida,formula_66,tranquillity,nisei,adornment,'people,yamhill,hockeyallsvenskan,adopters,appian,lowicz,haplotypes,succinctly,starogard,presidencies,kheyrabad,sobibor,kinesiology,cowichan,militum,cromwellian,leiningen,ps1.5,concourses,dalarna,goldfield,brzeg,faeces,aquarii,matchless,harvesters,181st,numismatics,korfball,sectioned,transpires,facultative,brandishing,kieron,forages,menai,glutinous,debarge,heathfield,1580s,malang,photoelectric,froome,semiotic,alwar,grammophon,chiaroscuro,mentalist,maramures,flacco,liquors,aleutians,marvell,sutlej,patnaik,qassam,flintoff,bayfield,haeckel,sueno,avicii,exoplanets,hoshi,annibale,vojislav,honeycombs,celebrant,rendsburg,veblen,quails,141st,carronades,savar,narrations,jeeva,ontologies,hedonistic,marinette,godot,munna,bessarabian,outrigger,thame,gravels,hoshino,falsifying,stereochemistry,nacionalista,medially,radula,ejecting,conservatorio,odile,ceiba,jaina,essonne,isometry,allophones,recidivism,iveco,ganda,grammarians,jagan,signposted,uncompressed,facilitators,constancy,ditko,propulsive,impaling,interbank,botolph,amlaib,intergroup,sorbus,cheka,debye,praca,adorning,presbyteries,dormition,strategos,qarase,pentecostals,beehives,hashemite,goldust,euronext,egress,arpanet,soames,jurchens,slovenska,copse,kazim,appraisals,marischal,mineola,sharada,caricaturist,sturluson,galba,faizabad,overwintering,grete,uyezds,didsbury,libreville,ablett,microstructure,anadolu,belenenses,elocution,cloaks,timeslots,halden,rashidun,displaces,sympatric,germanus,tuples,ceska,equalize,disassembly,krautrock,babangida,memel,deild,gopala,hematology,underclass,sangli,wawrinka,assur,toshack,refrains,nicotinic,bhagalpur,badami,racetracks,pocatello,walgreens,nazarbayev,occultation,spinnaker,geneon,josias,hydrolyzed,dzong,corregimiento,waistcoat,thermoplastic,soldered,anticancer,lactobacillus,shafi'i,carabus,adjournment,schlumberger,triceratops,despotate,mendicant,krishnamurti,bahasa,earthworm,lavoisier,noetherian,kalki,fervently,bhawan,saanich,coquille,gannet,motagua,kennels,mineralization,fitzherbert,svein,bifurcated,hairdressing,felis,abounded,dimers,fervour,hebdo,bluffton,aetna,corydon,clevedon,carneiro,subjectively,deutz,gastropoda,overshot,concatenation,varman,carolla,maharshi,mujib,inelastic,riverhead,initialized,safavids,rohini,caguas,bulges,fotbollforbund,hefei,spithead,westville,maronites,lytham,americo,gediminas,stephanus,chalcolithic,hijra,gnu/linux,predilection,rulership,sterility,haidar,scarlatti,saprissa,sviatoslav,pointedly,sunroof,guarantor,thevar,airstrips,pultusk,sture,129th,divinities,daizong,dolichoderus,cobourg,maoists,swordsmanship,uprated,bohme,tashi,largs,chandi,bluebeard,householders,richardsonian,drepanidae,antigonish,elbasan,occultism,marca,hypergeometric,oirat,stiglitz,ignites,dzungar,miquelon,pritam,d'automne,ulidiid,niamey,vallecano,fondo,billiton,incumbencies,raceme,chambery,cadell,barenaked,kagame,summerside,haussmann,hatshepsut,apothecaries,criollo,feint,nasals,timurid,feltham,plotinus,oxygenation,marginata,officinalis,salat,participations,ising,downe,izumo,unguided,pretence,coursed,haruna,viscountcy,mainstage,justicia,powiat,takara,capitoline,implacable,farben,stopford,cosmopterix,tuberous,kronecker,galatians,kweli,dogmas,exhorted,trebinje,skanda,newlyn,ablative,basidia,bhiwani,encroachments,stranglers,regrouping,tubal,shoestring,wawel,anionic,mesenchymal,creationists,pyrophosphate,moshi,despotism,powerbook,fatehpur,rupiah,segre,ternate,jessore,b.i.g,shevardnadze,abounds,gliwice,densest,memoria,suborbital,vietcong,ratepayers,karunanidhi,toolbar,descents,rhymney,exhortation,zahedan,carcinomas,hyperbaric,botvinnik,billets,neuropsychological,tigranes,hoards,chater,biennially,thistles,scotus,wataru,flotillas,hungama,monopolistic,payouts,vetch,generalissimo,caries,naumburg,piran,blizzards,escalates,reactant,shinya,theorize,rizzoli,transitway,ecclesiae,streptomyces,cantal,nisibis,superconductor,unworkable,thallus,roehampton,scheckter,viceroys,makuuchi,ilkley,superseding,takuya,klodzko,borbon,raspberries,operand,w.a.k.o,sarabande,factionalism,egalitarianism,temasek,torbat,unscripted,jorma,westerner,perfective,vrije,underlain,goldfrapp,blaenau,jomon,barthes,drivetime,bassa,bannock,umaga,fengxiang,zulus,sreenivasan,farces,codice_10,freeholder,poddebice,imperialists,deregulated,wingtip,o'hagan,pillared,overtone,hofstadter,149th,kitano,saybrook,standardizing,aldgate,staveley,o'flaherty,hundredths,steerable,soltan,empted,cruyff,intramuros,taluks,cotonou,marae,karur,figueres,barwon,lucullus,niobe,zemlya,lathes,homeported,chaux,amyotrophic,opines,exemplars,bhamo,homomorphisms,gauleiter,ladin,mafiosi,airdrieonians,b/soul,decal,transcaucasia,solti,defecation,deaconess,numidia,sampradaya,normalised,wingless,schwaben,alnus,cinerama,yakutsk,ketchikan,orvieto,unearned,monferrato,rotem,aacsb,loong,decoders,skerries,cardiothoracic,repositioning,pimpernel,yohannan,tenebrionoidea,nargis,nouvel,costliest,interdenominational,noize,redirecting,zither,morcha,radiometric,frequenting,irtysh,gbagbo,chakri,litvinenko,infotainment,ravensbruck,harith,corbels,maegashira,jousting,natan,novus,falcao,minis,railed,decile,rauma,ramaswamy,cavitation,paranaque,berchtesgaden,reanimated,schomberg,polysaccharides,exclusionary,cleon,anurag,ravaging,dhanush,mitchells,granule,contemptuous,keisei,rolleston,atlantean,yorkist,daraa,wapping,micrometer,keeneland,comparably,baranja,oranje,schlafli,yogic,dinajpur,unimpressive,masashi,recreativo,alemannic,petersfield,naoko,vasudeva,autosport,rajat,marella,busko,wethersfield,ssris,soulcalibur,kobani,wildland,rookery,hoffenheim,kauri,aliphatic,balaclava,ferrite,publicise,victorias,theism,quimper,chapbook,functionalist,roadbed,ulyanovsk,cupen,purpurea,calthorpe,teofilo,mousavi,cochlea,linotype,detmold,ellerslie,gakkai,telkom,southsea,subcontractor,inguinal,philatelists,zeebrugge,piave,trochidae,dempo,spoilt,saharanpur,mihrab,parasympathetic,barbarous,chartering,antiqua,katsina,bugis,categorizes,altstadt,kandyan,pambansa,overpasses,miters,assimilating,finlandia,uneconomic,am/fm,harpsichordist,dresdner,luminescence,authentically,overpowers,magmatic,cliftonville,oilfields,skirted,berthe,cuman,oakham,frelimo,glockenspiel,confection,saxophonists,piaseczno,multilevel,antipater,levying,maltreatment,velho,opoczno,harburg,pedophilia,unfunded,palettes,plasterwork,breve,dharmendra,auchinleck,nonesuch,blackmun,libretti,rabbani,145th,hasselbeck,kinnock,malate,vanden,cloverdale,ashgabat,nares,radians,steelworkers,sabor,possums,catterick,hemispheric,ostra,outpaced,dungeness,almshouse,penryn,texians,1000m,franchitti,incumbency,texcoco,newar,tramcars,toroidal,meitetsu,spellbound,agronomist,vinifera,riata,bunko,pinas,ba'al,github,vasilyevich,obsolescent,geodesics,ancestries,tujue,capitalised,unassigned,throng,unpaired,psychometric,skegness,exothermic,buffered,kristiansund,tongued,berenger,basho,alitalia,prolongation,archaeologically,fractionation,cyprinid,echinoderms,agriculturally,justiciar,sonam,ilium,baits,danceable,grazer,ardahan,grassed,preemption,glassworks,hasina,ugric,umbra,wahhabi,vannes,tinnitus,capitaine,tikrit,lisieux,scree,hormuz,despenser,jagiellon,maisonneuve,gandaki,santarem,basilicas,lancing,landskrona,weilburg,fireside,elysian,isleworth,krishnamurthy,filton,cynon,tecmo,subcostal,scalars,triglycerides,hyperplane,farmingdale,unione,meydan,pilings,mercosur,reactivate,akiba,fecundity,jatra,natsume,zarqawi,preta,masao,presbyter,oakenfold,rhodri,ferran,ruizong,cloyne,nelvana,epiphanius,borde,scutes,strictures,troughton,whitestone,sholom,toyah,shingon,kutuzov,abelard,passant,lipno,cafeterias,residuals,anabaptists,paratransit,criollos,pleven,radiata,destabilizing,hadiths,bazaars,mannose,taiyo,crookes,welbeck,baoding,archelaus,nguesso,alberni,wingtips,herts,viasat,lankans,evreux,wigram,fassbinder,ryuichi,storting,reducible,olesnica,znojmo,hyannis,theophanes,flatiron,mustering,rajahmundry,kadir,wayang,prome,lethargy,zubin,illegality,conall,dramedy,beerbohm,hipparchus,ziarat,ryuji,shugo,glenorchy,microarchitecture,morne,lewinsky,cauvery,battenberg,hyksos,wayanad,hamilcar,buhari,brazo,bratianu,solms,aksaray,elamite,chilcotin,bloodstock,sagara,dolny,reunified,umlaut,proteaceae,camborne,calabrian,dhanbad,vaxjo,cookware,potez,rediffusion,semitones,lamentations,allgau,guernica,suntory,pleated,stationing,urgell,gannets,bertelsmann,entryway,raphitomidae,acetaldehyde,nephrology,categorizing,beiyang,permeate,tourney,geosciences,khana,masayuki,crucis,universitaria,slaskie,khaimah,finno,advani,astonishingly,tubulin,vampiric,jeolla,sociale,cleethorpes,badri,muridae,suzong,debater,decimation,kenyans,mutualism,pontifex,middlemen,insee,halevi,lamentation,psychopathy,brassey,wenders,kavya,parabellum,prolactin,inescapable,apses,malignancies,rinzai,stigmatized,menahem,comox,ateliers,welshpool,setif,centimetre,truthfulness,downfield,drusus,woden,glycosylation,emanated,agulhas,dalkeith,jazira,nucky,unifil,jobim,operon,oryzomys,heroically,seances,supernumerary,backhouse,hashanah,tatler,imago,invert,hayato,clockmaker,kingsmill,swiecie,analogously,golconda,poste,tacitly,decentralised,ge'ez,diplomatically,fossiliferous,linseed,mahavira,pedestals,archpriest,byelection,domiciled,jeffersonian,bombus,winegrowing,waukegan,uncultivated,haverfordwest,saumur,communally,disbursed,cleeve,zeljeznicar,speciosa,vacationers,sigur,vaishali,zlatko,iftikhar,cropland,transkei,incompleteness,bohra,subantarctic,slieve,physiologic,similis,klerk,replanted,'right,chafee,reproducible,bayburt,regicide,muzaffarpur,plurals,hanyu,orthologs,diouf,assailed,kamui,tarik,dodecanese,gorne,on/off,179th,shimoga,granaries,carlists,valar,tripolitania,sherds,simmern,dissociated,isambard,polytechnical,yuvraj,brabazon,antisense,pubmed,glans,minutely,masaaki,raghavendra,savoury,podcasting,tachi,bienville,gongsun,ridgely,deform,yuichi,binders,canna,carcetti,llobregat,implored,berri,njegos,intermingled,offload,athenry,motherhouse,corpora,kakinada,dannebrog,imperio,prefaces,musicologists,aerospatiale,shirai,nagapattinam,servius,cristoforo,pomfret,reviled,entebbe,stane,east/west,thermometers,matriarchal,siglo,bodil,legionnaire,ze'ev,theorizing,sangeetha,horticulturist,uncountable,lookalike,anoxic,ionospheric,genealogists,chicopee,imprinting,popish,crematoria,diamondback,cyathea,hanzhong,cameramen,halogaland,naklo,waclaw,storehouses,flexed,comuni,frits,glauca,nilgiris,compresses,nainital,continuations,albay,hypoxic,samajwadi,dunkerque,nanticoke,sarwar,interchanged,jubal,corba,jalgaon,derleth,deathstroke,magny,vinnytsia,hyphenated,rimfire,sawan,boehner,disrepute,normalize,aromanian,dualistic,approximant,chama,karimabad,barnacles,sanok,stipends,dyfed,rijksmuseum,reverberation,suncorp,fungicides,reverie,spectrograph,stereophonic,niazi,ordos,alcan,karaite,lautrec,tableland,lamellar,rieti,langmuir,russula,webern,tweaks,hawick,southerner,morphy,naturalisation,enantiomer,michinoku,barbettes,relieves,carburettors,redruth,oblates,vocabularies,mogilev,bagmati,galium,reasserted,extolled,symon,eurosceptic,inflections,tirtha,recompense,oruro,roping,gouverneur,pared,yayoi,watermills,retooled,leukocytes,jubilant,mazhar,nicolau,manheim,touraine,bedser,hambledon,kohat,powerhouses,tlemcen,reuven,sympathetically,afrikaners,interes,handcrafts,etcher,baddeley,wodonga,amaury,155th,vulgarity,pompadour,automorphisms,1540s,oppositions,prekmurje,deryni,fortifying,arcuate,mahila,bocage,uther,nozze,slashes,atlantica,hadid,rhizomatous,azeris,'with,osmena,lewisville,innervated,bandmaster,outcropping,parallelogram,dominicana,twang,ingushetia,extensional,ladino,sastry,zinoviev,relatable,nobilis,cbeebies,hitless,eulima,sporangia,synge,longlisted,criminalized,penitential,weyden,tubule,volyn,priestesses,glenbrook,kibbutzim,windshaft,canadair,falange,zsolt,bonheur,meine,archangels,safeguarded,jamaicans,malarial,teasers,badging,merseyrail,operands,pulsars,gauchos,biotin,bambara,necaxa,egmond,tillage,coppi,anxiolytic,preah,mausoleums,plautus,feroz,debunked,187th,belediyespor,mujibur,wantage,carboxyl,chettiar,murnau,vagueness,racemic,backstretch,courtland,municipio,palpatine,dezful,hyperbola,sreekumar,chalons,altay,arapahoe,tudors,sapieha,quilon,burdensome,kanya,xxviii,recension,generis,siphuncle,repressor,bitrate,mandals,midhurst,dioxin,democratique,upholds,rodez,cinematographic,epoque,jinping,rabelais,zhytomyr,glenview,rebooted,khalidi,reticulata,122nd,monnaie,passersby,ghazals,europaea,lippmann,earthbound,tadic,andorran,artvin,angelicum,banksy,epicentre,resemblances,shuttled,rathaus,bernt,stonemasons,balochi,siang,tynemouth,cygni,biosynthetic,precipitates,sharecroppers,d'annunzio,softbank,shiji,apeldoorn,polycyclic,wenceslas,wuchang,samnites,tamarack,silmarillion,madinah,palaeontology,kirchberg,sculpin,rohtak,aquabats,oviparous,thynne,caney,blimps,minimalistic,whatcom,palatalization,bardstown,direct3d,paramagnetic,kamboja,khash,globemaster,lengua,matej,chernigov,swanage,arsenals,cascadia,cundinamarca,tusculum,leavers,organics,warplanes,'three,exertions,arminius,gandharva,inquires,comercio,kuopio,chabahar,plotlines,mersenne,anquetil,paralytic,buckminster,ambit,acrolophus,quantifiers,clacton,ciliary,ansaldo,fergana,egoism,thracians,chicoutimi,northbrook,analgesia,brotherhoods,hunza,adriaen,fluoridation,snowfalls,soundboard,fangoria,cannibalistic,orthogonius,chukotka,dindigul,manzoni,chainz,macromedia,beltline,muruga,schistura,provable,litex,initio,pneumoniae,infosys,cerium,boonton,cannonballs,d'une,solvency,mandurah,houthis,dolmens,apologists,radioisotopes,blaxploitation,poroshenko,stawell,coosa,maximilien,tempelhof,espouse,declaratory,hambro,xalapa,outmoded,mihiel,benefitting,desirous,archeparchy,repopulated,telescoping,captor,mackaye,disparaged,ramanathan,crowne,tumbled,technetium,silted,chedi,nievre,hyeon,cartoonish,interlock,infocom,rediff.com,dioramas,timekeeping,concertina,kutaisi,cesky,lubomirski,unapologetic,epigraphic,stalactites,sneha,biofilm,falconry,miraflores,catena,'outstanding,prospekt,apotheosis,o'odham,pacemakers,arabica,gandhinagar,reminisces,iroquoian,ornette,tilling,neoliberalism,chameleons,pandava,prefontaine,haiyan,gneisenau,utama,bando,reconstitution,azaria,canola,paratroops,ayckbourn,manistee,stourton,manifestos,lympne,denouement,tractatus,rakim,bellflower,nanometer,sassanids,turlough,presbyterianism,varmland,20deg,phool,nyerere,almohad,manipal,vlaanderen,quickness,removals,makow,circumflex,eatery,morane,fondazione,alkylation,unenforceable,galliano,silkworm,junior/senior,abducts,phlox,konskie,lofoten,buuren,glyphosate,faired,naturae,cobbles,taher,skrulls,dostoevsky,walkout,wagnerian,orbited,methodically,denzil,sarat,extraterritorial,kohima,d'armor,brinsley,rostropovich,fengtian,comitatus,aravind,moche,wrangell,giscard,vantaa,viljandi,hakoah,seabees,muscatine,ballade,camanachd,sothern,mullioned,durad,margraves,maven,arete,chandni,garifuna,142nd,reading/literature,thickest,intensifies,trygve,khaldun,perinatal,asana,powerline,acetylation,nureyev,omiya,montesquieu,riverwalk,marly,correlating,intermountain,bulgar,hammerheads,underscores,wiretapping,quatrain,ruisseau,newsagent,tuticorin,polygyny,hemsworth,partisanship,banna,istrian,evaporator".split(","),
45759female_names:"mary,patricia,linda,barbara,elizabeth,jennifer,maria,susan,margaret,dorothy,lisa,nancy,karen,betty,helen,sandra,donna,carol,ruth,sharon,michelle,laura,sarah,kimberly,deborah,jessica,shirley,cynthia,angela,melissa,brenda,amy,anna,rebecca,virginia,kathleen,pamela,martha,debra,amanda,stephanie,carolyn,christine,marie,janet,catherine,frances,ann,joyce,diane,alice,julie,heather,teresa,doris,gloria,evelyn,jean,cheryl,mildred,katherine,joan,ashley,judith,rose,janice,kelly,nicole,judy,christina,kathy,theresa,beverly,denise,tammy,irene,jane,lori,rachel,marilyn,andrea,kathryn,louise,sara,anne,jacqueline,wanda,bonnie,julia,ruby,lois,tina,phyllis,norma,paula,diana,annie,lillian,emily,robin,peggy,crystal,gladys,rita,dawn,connie,florence,tracy,edna,tiffany,carmen,rosa,cindy,grace,wendy,victoria,edith,kim,sherry,sylvia,josephine,thelma,shannon,sheila,ethel,ellen,elaine,marjorie,carrie,charlotte,monica,esther,pauline,emma,juanita,anita,rhonda,hazel,amber,eva,debbie,april,leslie,clara,lucille,jamie,joanne,eleanor,valerie,danielle,megan,alicia,suzanne,michele,gail,bertha,darlene,veronica,jill,erin,geraldine,lauren,cathy,joann,lorraine,lynn,sally,regina,erica,beatrice,dolores,bernice,audrey,yvonne,annette,marion,dana,stacy,ana,renee,ida,vivian,roberta,holly,brittany,melanie,loretta,yolanda,jeanette,laurie,katie,kristen,vanessa,alma,sue,elsie,beth,jeanne,vicki,carla,tara,rosemary,eileen,terri,gertrude,lucy,tonya,ella,stacey,wilma,gina,kristin,jessie,natalie,agnes,vera,charlene,bessie,delores,melinda,pearl,arlene,maureen,colleen,allison,tamara,joy,georgia,constance,lillie,claudia,jackie,marcia,tanya,nellie,minnie,marlene,heidi,glenda,lydia,viola,courtney,marian,stella,caroline,dora,vickie,mattie,maxine,irma,mabel,marsha,myrtle,lena,christy,deanna,patsy,hilda,gwendolyn,jennie,nora,margie,nina,cassandra,leah,penny,kay,priscilla,naomi,carole,olga,billie,dianne,tracey,leona,jenny,felicia,sonia,miriam,velma,becky,bobbie,violet,kristina,toni,misty,mae,shelly,daisy,ramona,sherri,erika,katrina,claire,lindsey,lindsay,geneva,guadalupe,belinda,margarita,sheryl,cora,faye,ada,sabrina,isabel,marguerite,hattie,harriet,molly,cecilia,kristi,brandi,blanche,sandy,rosie,joanna,iris,eunice,angie,inez,lynda,madeline,amelia,alberta,genevieve,monique,jodi,janie,kayla,sonya,jan,kristine,candace,fannie,maryann,opal,alison,yvette,melody,luz,susie,olivia,flora,shelley,kristy,mamie,lula,lola,verna,beulah,antoinette,candice,juana,jeannette,pam,kelli,whitney,bridget,karla,celia,latoya,patty,shelia,gayle,della,vicky,lynne,sheri,marianne,kara,jacquelyn,erma,blanca,myra,leticia,pat,krista,roxanne,angelica,robyn,adrienne,rosalie,alexandra,brooke,bethany,sadie,bernadette,traci,jody,kendra,nichole,rachael,mable,ernestine,muriel,marcella,elena,krystal,angelina,nadine,kari,estelle,dianna,paulette,lora,mona,doreen,rosemarie,desiree,antonia,janis,betsy,christie,freda,meredith,lynette,teri,cristina,eula,leigh,meghan,sophia,eloise,rochelle,gretchen,cecelia,raquel,henrietta,alyssa,jana,gwen,jenna,tricia,laverne,olive,tasha,silvia,elvira,delia,kate,patti,lorena,kellie,sonja,lila,lana,darla,mindy,essie,mandy,lorene,elsa,josefina,jeannie,miranda,dixie,lucia,marta,faith,lela,johanna,shari,camille,tami,shawna,elisa,ebony,melba,ora,nettie,tabitha,ollie,winifred,kristie,alisha,aimee,rena,myrna,marla,tammie,latasha,bonita,patrice,ronda,sherrie,addie,francine,deloris,stacie,adriana,cheri,abigail,celeste,jewel,cara,adele,rebekah,lucinda,dorthy,effie,trina,reba,sallie,aurora,lenora,etta,lottie,kerri,trisha,nikki,estella,francisca,josie,tracie,marissa,karin,brittney,janelle,lourdes,laurel,helene,fern,elva,corinne,kelsey,ina,bettie,elisabeth,aida,caitlin,ingrid,iva,eugenia,christa,goldie,maude,jenifer,therese,dena,lorna,janette,latonya,candy,consuelo,tamika,rosetta,debora,cherie,polly,dina,jewell,fay,jillian,dorothea,nell,trudy,esperanza,patrica,kimberley,shanna,helena,cleo,stefanie,rosario,ola,janine,mollie,lupe,alisa,lou,maribel,susanne,bette,susana,elise,cecile,isabelle,lesley,jocelyn,paige,joni,rachelle,leola,daphne,alta,ester,petra,graciela,imogene,jolene,keisha,lacey,glenna,gabriela,keri,ursula,lizzie,kirsten,shana,adeline,mayra,jayne,jaclyn,gracie,sondra,carmela,marisa,rosalind,charity,tonia,beatriz,marisol,clarice,jeanine,sheena,angeline,frieda,lily,shauna,millie,claudette,cathleen,angelia,gabrielle,autumn,katharine,jodie,staci,lea,christi,justine,elma,luella,margret,dominique,socorro,martina,margo,mavis,callie,bobbi,maritza,lucile,leanne,jeannine,deana,aileen,lorie,ladonna,willa,manuela,gale,selma,dolly,sybil,abby,ivy,dee,winnie,marcy,luisa,jeri,magdalena,ofelia,meagan,audra,matilda,leila,cornelia,bianca,simone,bettye,randi,virgie,latisha,barbra,georgina,eliza,leann,bridgette,rhoda,haley,adela,nola,bernadine,flossie,ila,greta,ruthie,nelda,minerva,lilly,terrie,letha,hilary,estela,valarie,brianna,rosalyn,earline,catalina,ava,mia,clarissa,lidia,corrine,alexandria,concepcion,tia,sharron,rae,dona,ericka,jami,elnora,chandra,lenore,neva,marylou,melisa,tabatha,serena,avis,allie,sofia,jeanie,odessa,nannie,harriett,loraine,penelope,milagros,emilia,benita,allyson,ashlee,tania,esmeralda,eve,pearlie,zelma,malinda,noreen,tameka,saundra,hillary,amie,althea,rosalinda,lilia,alana,clare,alejandra,elinor,lorrie,jerri,darcy,earnestine,carmella,noemi,marcie,liza,annabelle,louisa,earlene,mallory,carlene,nita,selena,tanisha,katy,julianne,lakisha,edwina,maricela,margery,kenya,dollie,roxie,roslyn,kathrine,nanette,charmaine,lavonne,ilene,tammi,suzette,corine,kaye,chrystal,lina,deanne,lilian,juliana,aline,luann,kasey,maryanne,evangeline,colette,melva,lawanda,yesenia,nadia,madge,kathie,ophelia,valeria,nona,mitzi,mari,georgette,claudine,fran,alissa,roseann,lakeisha,susanna,reva,deidre,chasity,sheree,elvia,alyce,deirdre,gena,briana,araceli,katelyn,rosanne,wendi,tessa,berta,marva,imelda,marietta,marci,leonor,arline,sasha,madelyn,janna,juliette,deena,aurelia,josefa,augusta,liliana,lessie,amalia,savannah,anastasia,vilma,natalia,rosella,lynnette,corina,alfreda,leanna,amparo,coleen,tamra,aisha,wilda,karyn,maura,mai,evangelina,rosanna,hallie,erna,enid,mariana,lacy,juliet,jacklyn,freida,madeleine,mara,cathryn,lelia,casandra,bridgett,angelita,jannie,dionne,annmarie,katina,beryl,millicent,katheryn,diann,carissa,maryellen,liz,lauri,helga,gilda,rhea,marquita,hollie,tisha,tamera,angelique,francesca,kaitlin,lolita,florine,rowena,reyna,twila,fanny,janell,ines,concetta,bertie,alba,brigitte,alyson,vonda,pansy,elba,noelle,letitia,deann,brandie,louella,leta,felecia,sharlene,lesa,beverley,isabella,herminia,terra,celina,tori,octavia,jade,denice,germaine,michell,cortney,nelly,doretha,deidra,monika,lashonda,judi,chelsey,antionette,margot,adelaide,leeann,elisha,dessie,libby,kathi,gayla,latanya,mina,mellisa,kimberlee,jasmin,renae,zelda,elda,justina,gussie,emilie,camilla,abbie,rocio,kaitlyn,edythe,ashleigh,selina,lakesha,geri,allene,pamala,michaela,dayna,caryn,rosalia,jacquline,rebeca,marybeth,krystle,iola,dottie,belle,griselda,ernestina,elida,adrianne,demetria,delma,jaqueline,arleen,virgina,retha,fatima,tillie,eleanore,cari,treva,wilhelmina,rosalee,maurine,latrice,jena,taryn,elia,debby,maudie,jeanna,delilah,catrina,shonda,hortencia,theodora,teresita,robbin,danette,delphine,brianne,nilda,danna,cindi,bess,iona,winona,vida,rosita,marianna,racheal,guillermina,eloisa,celestine,caren,malissa,lona,chantel,shellie,marisela,leora,agatha,soledad,migdalia,ivette,christen,athena,janel,veda,pattie,tessie,tera,marilynn,lucretia,karrie,dinah,daniela,alecia,adelina,vernice,shiela,portia,merry,lashawn,dara,tawana,verda,alene,zella,sandi,rafaela,maya,kira,candida,alvina,suzan,shayla,lettie,samatha,oralia,matilde,larissa,vesta,renita,delois,shanda,phillis,lorri,erlinda,cathrine,barb,isabell,ione,gisela,roxanna,mayme,kisha,ellie,mellissa,dorris,dalia,bella,annetta,zoila,reta,reina,lauretta,kylie,christal,pilar,charla,elissa,tiffani,tana,paulina,leota,breanna,jayme,carmel,vernell,tomasa,mandi,dominga,santa,melodie,lura,alexa,tamela,mirna,kerrie,venus,felicita,cristy,carmelita,berniece,annemarie,tiara,roseanne,missy,cori,roxana,pricilla,kristal,jung,elyse,haydee,aletha,bettina,marge,gillian,filomena,zenaida,harriette,caridad,vada,aretha,pearline,marjory,marcela,flor,evette,elouise,alina,damaris,catharine,belva,nakia,marlena,luanne,lorine,karon,dorene,danita,brenna,tatiana,louann,julianna,andria,philomena,lucila,leonora,dovie,romona,mimi,jacquelin,gaye,tonja,misti,chastity,stacia,roxann,micaela,velda,marlys,johnna,aura,ivonne,hayley,nicki,majorie,herlinda,yadira,perla,gregoria,antonette,shelli,mozelle,mariah,joelle,cordelia,josette,chiquita,trista,laquita,georgiana,candi,shanon,hildegard,stephany,magda,karol,gabriella,tiana,roma,richelle,oleta,jacque,idella,alaina,suzanna,jovita,tosha,nereida,marlyn,kyla,delfina,tena,stephenie,sabina,nathalie,marcelle,gertie,darleen,thea,sharonda,shantel,belen,venessa,rosalina,genoveva,clementine,rosalba,renate,renata,georgianna,floy,dorcas,ariana,tyra,theda,mariam,juli,jesica,vikki,verla,roselyn,melvina,jannette,ginny,debrah,corrie,violeta,myrtis,latricia,collette,charleen,anissa,viviana,twyla,nedra,latonia,hellen,fabiola,annamarie,adell,sharyn,chantal,niki,maud,lizette,lindy,kesha,jeana,danelle,charline,chanel,valorie,dortha,cristal,sunny,leone,leilani,gerri,debi,andra,keshia,eulalia,easter,dulce,natividad,linnie,kami,georgie,catina,brook,alda,winnifred,sharla,ruthann,meaghan,magdalene,lissette,adelaida,venita,trena,shirlene,shameka,elizebeth,dian,shanta,latosha,carlotta,windy,rosina,mariann,leisa,jonnie,dawna,cathie,astrid,laureen,janeen,holli,fawn,vickey,teressa,shante,rubye,marcelina,chanda,terese,scarlett,marnie,lulu,lisette,jeniffer,elenor,dorinda,donita,carman,bernita,altagracia,aleta,adrianna,zoraida,lyndsey,janina,starla,phylis,phuong,kyra,charisse,blanch,sanjuanita,rona,nanci,marilee,maranda,brigette,sanjuana,marita,kassandra,joycelyn,felipa,chelsie,bonny,mireya,lorenza,kyong,ileana,candelaria,sherie,lucie,leatrice,lakeshia,gerda,edie,bambi,marylin,lavon,hortense,garnet,evie,tressa,shayna,lavina,kyung,jeanetta,sherrill,shara,phyliss,mittie,anabel,alesia,thuy,tawanda,joanie,tiffanie,lashanda,karissa,enriqueta,daria,daniella,corinna,alanna,abbey,roxane,roseanna,magnolia,lida,joellen,coral,carleen,tresa,peggie,novella,nila,maybelle,jenelle,carina,nova,melina,marquerite,margarette,josephina,evonne,cinthia,albina,toya,tawnya,sherita,myriam,lizabeth,lise,keely,jenni,giselle,cheryle,ardith,ardis,alesha,adriane,shaina,linnea,karolyn,felisha,dori,darci,artie,armida,zola,xiomara,vergie,shamika,nena,nannette,maxie,lovie,jeane,jaimie,inge,farrah,elaina,caitlyn,felicitas,cherly,caryl,yolonda,yasmin,teena,prudence,pennie,nydia,mackenzie,orpha,marvel,lizbeth,laurette,jerrie,hermelinda,carolee,tierra,mirian,meta,melony,kori,jennette,jamila,yoshiko,susannah,salina,rhiannon,joleen,cristine,ashton,aracely,tomeka,shalonda,marti,lacie,kala,jada,ilse,hailey,brittani,zona,syble,sherryl,nidia,marlo,kandice,kandi,alycia,ronna,norene,mercy,ingeborg,giovanna,gemma,christel,audry,zora,vita,trish,stephaine,shirlee,shanika,melonie,mazie,jazmin,inga,hettie,geralyn,fonda,estrella,adella,sarita,rina,milissa,maribeth,golda,evon,ethelyn,enedina,cherise,chana,velva,tawanna,sade,mirta,karie,jacinta,elna,davina,cierra,ashlie,albertha,tanesha,nelle,mindi,lorinda,larue,florene,demetra,dedra,ciara,chantelle,ashly,suzy,rosalva,noelia,lyda,leatha,krystyna,kristan,karri,darline,darcie,cinda,cherrie,awilda,almeda,rolanda,lanette,jerilyn,gisele,evalyn,cyndi,cleta,carin,zina,zena,velia,tanika,charissa,talia,margarete,lavonda,kaylee,kathlene,jonna,irena,ilona,idalia,candis,candance,brandee,anitra,alida,sigrid,nicolette,maryjo,linette,hedwig,christiana,alexia,tressie,modesta,lupita,lita,gladis,evelia,davida,cherri,cecily,ashely,annabel,agustina,wanita,shirly,rosaura,hulda,yetta,verona,thomasina,sibyl,shannan,mechelle,leandra,lani,kylee,kandy,jolynn,ferne,eboni,corene,alysia,zula,nada,moira,lyndsay,lorretta,jammie,hortensia,gaynell,adria,vina,vicenta,tangela,stephine,norine,nella,liana,leslee,kimberely,iliana,glory,felica,emogene,elfriede,eden,eartha,carma,ocie,lennie,kiara,jacalyn,carlota,arielle,otilia,kirstin,kacey,johnetta,joetta,jeraldine,jaunita,elana,dorthea,cami,amada,adelia,vernita,tamar,siobhan,renea,rashida,ouida,nilsa,meryl,kristyn,julieta,danica,breanne,aurea,anglea,sherron,odette,malia,lorelei,leesa,kenna,kathlyn,fiona,charlette,suzie,shantell,sabra,racquel,myong,mira,martine,lucienne,lavada,juliann,elvera,delphia,christiane,charolette,carri,asha,angella,paola,ninfa,leda,stefani,shanell,palma,machelle,lissa,kecia,kathryne,karlene,julissa,jettie,jenniffer,corrina,carolann,alena,rosaria,myrtice,marylee,liane,kenyatta,judie,janey,elmira,eldora,denna,cristi,cathi,zaida,vonnie,viva,vernie,rosaline,mariela,luciana,lesli,karan,felice,deneen,adina,wynona,tarsha,sheron,shanita,shani,shandra,randa,pinkie,nelida,marilou,lyla,laurene,laci,janene,dorotha,daniele,dani,carolynn,carlyn,berenice,ayesha,anneliese,alethea,thersa,tamiko,rufina,oliva,mozell,marylyn,kristian,kathyrn,kasandra,kandace,janae,domenica,debbra,dannielle,chun,arcelia,zenobia,sharen,sharee,lavinia,kacie,jackeline,huong,felisa,emelia,eleanora,cythia,cristin,claribel,anastacia,zulma,zandra,yoko,tenisha,susann,sherilyn,shay,shawanda,romana,mathilda,linsey,keiko,joana,isela,gretta,georgetta,eugenie,desirae,delora,corazon,antonina,anika,willene,tracee,tamatha,nichelle,mickie,maegan,luana,lanita,kelsie,edelmira,bree,afton,teodora,tamie,shena,linh,keli,kaci,danyelle,arlette,albertine,adelle,tiffiny,simona,nicolasa,nichol,nakisha,maira,loreen,kizzy,fallon,christene,bobbye,ying,vincenza,tanja,rubie,roni,queenie,margarett,kimberli,irmgard,idell,hilma,evelina,esta,emilee,dennise,dania,carie,risa,rikki,particia,masako,luvenia,loree,loni,lien,gigi,florencia,denita,billye,tomika,sharita,rana,nikole,neoma,margarite,madalyn,lucina,laila,kali,jenette,gabriele,evelyne,elenora,clementina,alejandrina,zulema,violette,vannessa,thresa,retta,patience,noella,nickie,jonell,chaya,camelia,bethel,anya,suzann,mila,lilla,laverna,keesha,kattie,georgene,eveline,estell,elizbeth,vivienne,vallie,trudie,stephane,magaly,madie,kenyetta,karren,janetta,hermine,drucilla,debbi,celestina,candie,britni,beckie,amina,zita,yolande,vivien,vernetta,trudi,pearle,patrina,ossie,nicolle,loyce,letty,katharina,joselyn,jonelle,jenell,iesha,heide,florinda,florentina,elodia,dorine,brunilda,brigid,ashli,ardella,twana,tarah,shavon,serina,rayna,ramonita,margurite,lucrecia,kourtney,kati,jesenia,crista,ayana,alica,alia,vinnie,suellen,romelia,rachell,olympia,michiko,kathaleen,jolie,jessi,janessa,hana,elease,carletta,britany,shona,salome,rosamond,regena,raina,ngoc,nelia,louvenia,lesia,latrina,laticia,larhonda,jina,jacki,emmy,deeann,coretta,arnetta,thalia,shanice,neta,mikki,micki,lonna,leana,lashunda,kiley,joye,jacqulyn,ignacia,hyun,hiroko,henriette,elayne,delinda,dahlia,coreen,consuela,conchita,babette,ayanna,anette,albertina,shawnee,shaneka,quiana,pamelia,merri,merlene,margit,kiesha,kiera,kaylene,jodee,jenise,erlene,emmie,dalila,daisey,casie,belia,babara,versie,vanesa,shelba,shawnda,nikia,naoma,marna,margeret,madaline,lawana,kindra,jutta,jazmine,janett,hannelore,glendora,gertrud,garnett,freeda,frederica,florance,flavia,carline,beverlee,anjanette,valda,tamala,shonna,sarina,oneida,merilyn,marleen,lurline,lenna,katherin,jeni,gracia,glady,farah,enola,dominque,devona,delana,cecila,caprice,alysha,alethia,vena,theresia,tawny,shakira,samara,sachiko,rachele,pamella,marni,mariel,maren,malisa,ligia,lera,latoria,larae,kimber,kathern,karey,jennefer,janeth,halina,fredia,delisa,debroah,ciera,angelika,andree,altha,vivan,terresa,tanna,sudie,signe,salena,ronni,rebbecca,myrtie,malika,maida,leonarda,kayleigh,ethyl,ellyn,dayle,cammie,brittni,birgit,avelina,asuncion,arianna,akiko,venice,tyesha,tonie,tiesha,takisha,steffanie,sindy,meghann,manda,macie,kellye,kellee,joslyn,inger,indira,glinda,glennis,fernanda,faustina,eneida,elicia,digna,dell,arletta,willia,tammara,tabetha,sherrell,sari,rebbeca,pauletta,natosha,nakita,mammie,kenisha,kazuko,kassie,earlean,daphine,corliss,clotilde,carolyne,bernetta,augustina,audrea,annis,annabell,tennille,tamica,selene,rosana,regenia,qiana,markita,macy,leeanne,laurine,jessenia,janita,georgine,genie,emiko,elvie,deandra,dagmar,corie,collen,cherish,romaine,porsha,pearlene,micheline,merna,margorie,margaretta,lore,jenine,hermina,fredericka,elke,drusilla,dorathy,dione,celena,brigida,allegra,tamekia,synthia,sook,slyvia,rosann,reatha,raye,marquetta,margart,ling,layla,kymberly,kiana,kayleen,katlyn,karmen,joella,emelda,eleni,detra,clemmie,cheryll,chantell,cathey,arnita,arla,angle,angelic,alyse,zofia,thomasine,tennie,sherly,sherley,sharyl,remedios,petrina,nickole,myung,myrle,mozella,louanne,lisha,latia,krysta,julienne,jeanene,jacqualine,isaura,gwenda,earleen,cleopatra,carlie,audie,antonietta,alise,verdell,tomoko,thao,talisha,shemika,savanna,santina,rosia,raeann,odilia,nana,minna,magan,lynelle,karma,joeann,ivana,inell,ilana,gudrun,dreama,crissy,chante,carmelina,arvilla,annamae,alvera,aleida,yanira,vanda,tianna,stefania,shira,nicol,nancie,monserrate,melynda,melany,lovella,laure,kacy,jacquelynn,hyon,gertha,eliana,christena,christeen,charise,caterina,carley,candyce,arlena,ammie,willette,vanita,tuyet,syreeta,penney,nyla,maryam,marya,magen,ludie,loma,livia,lanell,kimberlie,julee,donetta,diedra,denisha,deane,dawne,clarine,cherryl,bronwyn,alla,valery,tonda,sueann,soraya,shoshana,shela,sharleen,shanelle,nerissa,meridith,mellie,maye,maple,magaret,lili,leonila,leonie,leeanna,lavonia,lavera,kristel,kathey,kathe,jann,ilda,hildred,hildegarde,genia,fumiko,evelin,ermelinda,elly,dung,doloris,dionna,danae,berneice,annice,alix,verena,verdie,shawnna,shawana,shaunna,rozella,randee,ranae,milagro,lynell,luise,loida,lisbeth,karleen,junita,jona,isis,hyacinth,hedy,gwenn,ethelene,erline,donya,domonique,delicia,dannette,cicely,branda,blythe,bethann,ashlyn,annalee,alline,yuko,vella,trang,towanda,tesha,sherlyn,narcisa,miguelina,meri,maybell,marlana,marguerita,madlyn,lory,loriann,leonore,leighann,laurice,latesha,laronda,katrice,kasie,kaley,jadwiga,glennie,gearldine,francina,epifania,dyan,dorie,diedre,denese,demetrice,delena,cristie,cleora,catarina,carisa,barbera,almeta,trula,tereasa,solange,sheilah,shavonne,sanora,rochell,mathilde,margareta,maia,lynsey,lawanna,launa,kena,keena,katia,glynda,gaylene,elvina,elanor,danuta,danika,cristen,cordie,coletta,clarita,carmon,brynn,azucena,aundrea,angele,verlie,verlene,tamesha,silvana,sebrina,samira,reda,raylene,penni,norah,noma,mireille,melissia,maryalice,laraine,kimbery,karyl,karine,jolanda,johana,jesusa,jaleesa,jacquelyne,iluminada,hilaria,hanh,gennie,francie,floretta,exie,edda,drema,delpha,barbar,assunta,ardell,annalisa,alisia,yukiko,yolando,wonda,waltraud,veta,temeka,tameika,shirleen,shenita,piedad,ozella,mirtha,marilu,kimiko,juliane,jenice,janay,jacquiline,hilde,elois,echo,devorah,chau,brinda,betsey,arminda,aracelis,apryl,annett,alishia,veola,usha,toshiko,theola,tashia,talitha,shery,renetta,reiko,rasheeda,obdulia,mika,melaine,meggan,marlen,marget,marceline,mana,magdalen,librada,lezlie,latashia,lasandra,kelle,isidra,inocencia,gwyn,francoise,erminia,erinn,dimple,devora,criselda,armanda,arie,ariane,angelena,aliza,adriene,adaline,xochitl,twanna,tomiko,tamisha,taisha,susy,rutha,rhona,noriko,natashia,merrie,marinda,mariko,margert,loris,lizzette,leisha,kaila,joannie,jerrica,jene,jannet,janee,jacinda,herta,elenore,doretta,delaine,daniell,claudie,britta,apolonia,amberly,alease,yuri,waneta,tomi,sharri,sandie,roselle,reynalda,raguel,phylicia,patria,olimpia,odelia,mitzie,minda,mignon,mica,mendy,marivel,maile,lynetta,lavette,lauryn,latrisha,lakiesha,kiersten,kary,josphine,jolyn,jetta,janise,jacquie,ivelisse,glynis,gianna,gaynelle,danyell,danille,dacia,coralee,cher,ceola,arianne,aleshia,yung,williemae,trinh,thora,sherika,shemeka,shaunda,roseline,ricki,melda,mallie,lavonna,latina,laquanda,lala,lachelle,klara,kandis,johna,jeanmarie,jaye,grayce,gertude,emerita,ebonie,clorinda,ching,chery,carola,breann,blossom,bernardine,becki,arletha,argelia,alita,yulanda,yessenia,tobi,tasia,sylvie,shirl,shirely,shella,shantelle,sacha,rebecka,providencia,paulene,misha,miki,marline,marica,lorita,latoyia,lasonya,kerstin,kenda,keitha,kathrin,jaymie,gricelda,ginette,eryn,elina,elfrieda,danyel,cheree,chanelle,barrie,aurore,annamaria,alleen,ailene,aide,yasmine,vashti,treasa,tiffaney,sheryll,sharie,shanae,raisa,neda,mitsuko,mirella,milda,maryanna,maragret,mabelle,luetta,lorina,letisha,latarsha,lanelle,lajuana,krissy,karly,karena,jessika,jerica,jeanelle,jalisa,jacelyn,izola,euna,etha,domitila,dominica,daina,creola,carli,camie,brittny,ashanti,anisha,aleen,adah,yasuko,valrie,tona,tinisha,terisa,taneka,simonne,shalanda,serita,ressie,refugia,olene,margherita,mandie,maire,lyndia,luci,lorriane,loreta,leonia,lavona,lashawnda,lakia,kyoko,krystina,krysten,kenia,kelsi,jeanice,isobel,georgiann,genny,felicidad,eilene,deloise,deedee,conception,clora,cherilyn,calandra,armandina,anisa,tiera,theressa,stephania,sima,shyla,shonta,shera,shaquita,shala,rossana,nohemi,nery,moriah,melita,melida,melani,marylynn,marisha,mariette,malorie,madelene,ludivina,loria,lorette,loralee,lianne,lavenia,laurinda,lashon,kimi,keila,katelynn,jone,joane,jayna,janella,hertha,francene,elinore,despina,delsie,deedra,clemencia,carolin,bulah,brittanie,blondell,bibi,beaulah,beata,annita,agripina,virgen,valene,twanda,tommye,tarra,tari,tammera,shakia,sadye,ruthanne,rochel,rivka,pura,nenita,natisha,ming,merrilee,melodee,marvis,lucilla,leena,laveta,larita,lanie,keren,ileen,georgeann,genna,frida,eufemia,emely,edyth,deonna,deadra,darlena,chanell,cathern,cassondra,cassaundra,bernarda,berna,arlinda,anamaria,vertie,valeri,torri,stasia,sherise,sherill,sanda,ruthe,rosy,robbi,ranee,quyen,pearly,palmira,onita,nisha,niesha,nida,merlyn,mayola,marylouise,marth,margene,madelaine,londa,leontine,leoma,leia,lauralee,lanora,lakita,kiyoko,keturah,katelin,kareen,jonie,johnette,jenee,jeanett,izetta,hiedi,heike,hassie,giuseppina,georgann,fidela,fernande,elwanda,ellamae,eliz,dusti,dotty,cyndy,coralie,celesta,alverta,xenia,wava,vanetta,torrie,tashina,tandy,tambra,tama,stepanie,shila,shaunta,sharan,shaniqua,shae,setsuko,serafina,sandee,rosamaria,priscila,olinda,nadene,muoi,michelina,mercedez,maryrose,marcene,magali,mafalda,lannie,kayce,karoline,kamilah,kamala,justa,joline,jennine,jacquetta,iraida,georgeanna,franchesca,emeline,elane,ehtel,earlie,dulcie,dalene,classie,chere,charis,caroyln,carmina,carita,bethanie,ayako,arica,alysa,alessandra,akilah,adrien,zetta,youlanda,yelena,yahaira,xuan,wendolyn,tijuana,terina,teresia,suzi,sherell,shavonda,shaunte,sharda,shakita,sena,ryann,rubi,riva,reginia,rachal,parthenia,pamula,monnie,monet,michaele,melia,malka,maisha,lisandra,lekisha,lean,lakendra,krystin,kortney,kizzie,kittie,kera,kendal,kemberly,kanisha,julene,jule,johanne,jamee,halley,gidget,fredricka,fleta,fatimah,eusebia,elza,eleonore,dorthey,doria,donella,dinorah,delorse,claretha,christinia,charlyn,bong,belkis,azzie,andera,aiko,adena,yajaira,vania,ulrike,toshia,tifany,stefany,shizue,shenika,shawanna,sharolyn,sharilyn,shaquana,shantay,rozanne,roselee,remona,reanna,raelene,phung,petronila,natacha,nancey,myrl,miyoko,miesha,merideth,marvella,marquitta,marhta,marchelle,lizeth,libbie,lahoma,ladawn,kina,katheleen,katharyn,karisa,kaleigh,junie,julieann,johnsie,janean,jaimee,jackqueline,hisako,herma,helaine,gwyneth,gita,eustolia,emelina,elin,edris,donnette,donnetta,dierdre,denae,darcel,clarisa,cinderella,chia,charlesetta,charita,celsa,cassy,cassi,carlee,bruna,brittaney,brande,billi,antonetta,angla,angelyn,analisa,alane,wenona,wendie,veronique,vannesa,tobie,tempie,sumiko,sulema,somer,sheba,sharice,shanel,shalon,rosio,roselia,renay,rema,reena,ozie,oretha,oralee,ngan,nakesha,milly,marybelle,margrett,maragaret,manie,lurlene,lillia,lieselotte,lavelle,lashaunda,lakeesha,kaycee,kalyn,joya,joette,jenae,janiece,illa,grisel,glayds,genevie,gala,fredda,eleonor,debera,deandrea,corrinne,cordia,contessa,colene,cleotilde,chantay,cecille,beatris,azalee,arlean,ardath,anjelica,anja,alfredia,aleisha,zada,yuonne,xiao,willodean,vennie,vanna,tyisha,tova,torie,tonisha,tilda,tien,sirena,sherril,shanti,shan,senaida,samella,robbyn,renda,reita,phebe,paulita,nobuko,nguyet,neomi,mikaela,melania,maximina,marg,maisie,lynna,lilli,lashaun,lakenya,lael,kirstie,kathline,kasha,karlyn,karima,jovan,josefine,jennell,jacqui,jackelyn,hien,grazyna,florrie,floria,eleonora,dwana,dorla,delmy,deja,dede,dann,crysta,clelia,claris,chieko,cherlyn,cherelle,charmain,chara,cammy,arnette,ardelle,annika,amiee,amee,allena,yvone,yuki,yoshie,yevette,yael,willetta,voncile,venetta,tula,tonette,timika,temika,telma,teisha,taren,stacee,shawnta,saturnina,ricarda,pasty,onie,nubia,marielle,mariella,marianela,mardell,luanna,loise,lisabeth,lindsy,lilliana,lilliam,lelah,leigha,leanora,kristeen,khalilah,keeley,kandra,junko,joaquina,jerlene,jani,jamika,hsiu,hermila,genevive,evia,eugena,emmaline,elfreda,elene,donette,delcie,deeanna,darcey,clarinda,cira,chae,celinda,catheryn,casimira,carmelia,camellia,breana,bobette,bernardina,bebe,basilia,arlyne,amal,alayna,zonia,zenia,yuriko,yaeko,wynell,willena,vernia,tora,terrilyn,terica,tenesha,tawna,tajuana,taina,stephnie,sona,sina,shondra,shizuko,sherlene,sherice,sharika,rossie,rosena,rima,rheba,renna,natalya,nancee,melodi,meda,matha,marketta,maricruz,marcelene,malvina,luba,louetta,leida,lecia,lauran,lashawna,laine,khadijah,katerine,kasi,kallie,julietta,jesusita,jestine,jessia,jeffie,janyce,isadora,georgianne,fidelia,evita,eura,eulah,estefana,elsy,eladia,dodie,denisse,deloras,delila,daysi,crystle,concha,claretta,charlsie,charlena,carylon,bettyann,asley,ashlea,amira,agueda,agnus,yuette,vinita,victorina,tynisha,treena,toccara,tish,thomasena,tegan,soila,shenna,sharmaine,shantae,shandi,saran,sarai,sana,rosette,rolande,regine,otelia,olevia,nicholle,necole,naida,myrta,myesha,mitsue,minta,mertie,margy,mahalia,madalene,loura,lorean,lesha,leonida,lenita,lavone,lashell,lashandra,lamonica,kimbra,katherina,karry,kanesha,jong,jeneva,jaquelyn,gilma,ghislaine,gertrudis,fransisca,fermina,ettie,etsuko,ellan,elidia,edra,dorethea,doreatha,denyse,deetta,daine,cyrstal,corrin,cayla,carlita,camila,burma,bula,buena,barabara,avril,alaine,zana,wilhemina,wanetta,verline,vasiliki,tonita,tisa,teofila,tayna,taunya,tandra,takako,sunni,suanne,sixta,sharell,seema,rosenda,robena,raymonde,pamila,ozell,neida,mistie,micha,merissa,maurita,maryln,maryetta,marcell,malena,makeda,lovetta,lourie,lorrine,lorilee,laurena,lashay,larraine,laree,lacresha,kristle,keva,keira,karole,joie,jinny,jeannetta,jama,heidy,gilberte,gema,faviola,evelynn,enda,elli,ellena,divina,dagny,collene,codi,cindie,chassidy,chasidy,catrice,catherina,cassey,caroll,carlena,candra,calista,bryanna,britteny,beula,bari,audrie,audria,ardelia,annelle,angila,alona,allyn".split(","),surnames:"smith,johnson,williams,jones,brown,davis,miller,wilson,moore,taylor,anderson,jackson,white,harris,martin,thompson,garcia,martinez,robinson,clark,rodriguez,lewis,lee,walker,hall,allen,young,hernandez,king,wright,lopez,hill,green,adams,baker,gonzalez,nelson,carter,mitchell,perez,roberts,turner,phillips,campbell,parker,evans,edwards,collins,stewart,sanchez,morris,rogers,reed,cook,morgan,bell,murphy,bailey,rivera,cooper,richardson,cox,howard,ward,torres,peterson,gray,ramirez,watson,brooks,sanders,price,bennett,wood,barnes,ross,henderson,coleman,jenkins,perry,powell,long,patterson,hughes,flores,washington,butler,simmons,foster,gonzales,bryant,alexander,griffin,diaz,hayes,myers,ford,hamilton,graham,sullivan,wallace,woods,cole,west,owens,reynolds,fisher,ellis,harrison,gibson,mcdonald,cruz,marshall,ortiz,gomez,murray,freeman,wells,webb,simpson,stevens,tucker,porter,hicks,crawford,boyd,mason,morales,kennedy,warren,dixon,ramos,reyes,burns,gordon,shaw,holmes,rice,robertson,hunt,black,daniels,palmer,mills,nichols,grant,knight,ferguson,stone,hawkins,dunn,perkins,hudson,spencer,gardner,stephens,payne,pierce,berry,matthews,arnold,wagner,willis,watkins,olson,carroll,duncan,snyder,hart,cunningham,lane,andrews,ruiz,harper,fox,riley,armstrong,carpenter,weaver,greene,elliott,chavez,sims,peters,kelley,franklin,lawson,fields,gutierrez,schmidt,carr,vasquez,castillo,wheeler,chapman,montgomery,richards,williamson,johnston,banks,meyer,bishop,mccoy,howell,alvarez,morrison,hansen,fernandez,garza,harvey,burton,nguyen,jacobs,reid,fuller,lynch,garrett,romero,welch,larson,frazier,burke,hanson,mendoza,moreno,bowman,medina,fowler,brewer,hoffman,carlson,silva,pearson,holland,fleming,jensen,vargas,byrd,davidson,hopkins,herrera,wade,soto,walters,neal,caldwell,lowe,jennings,barnett,graves,jimenez,horton,shelton,barrett,obrien,castro,sutton,mckinney,lucas,miles,rodriquez,chambers,holt,lambert,fletcher,watts,bates,hale,rhodes,pena,beck,newman,haynes,mcdaniel,mendez,bush,vaughn,parks,dawson,santiago,norris,hardy,steele,curry,powers,schultz,barker,guzman,page,munoz,ball,keller,chandler,weber,walsh,lyons,ramsey,wolfe,schneider,mullins,benson,sharp,bowen,barber,cummings,hines,baldwin,griffith,valdez,hubbard,salazar,reeves,warner,stevenson,burgess,santos,tate,cross,garner,mann,mack,moss,thornton,mcgee,farmer,delgado,aguilar,vega,glover,manning,cohen,harmon,rodgers,robbins,newton,blair,higgins,ingram,reese,cannon,strickland,townsend,potter,goodwin,walton,rowe,hampton,ortega,patton,swanson,goodman,maldonado,yates,becker,erickson,hodges,rios,conner,adkins,webster,malone,hammond,flowers,cobb,moody,quinn,pope,osborne,mccarthy,guerrero,estrada,sandoval,gibbs,gross,fitzgerald,stokes,doyle,saunders,wise,colon,gill,alvarado,greer,padilla,waters,nunez,ballard,schwartz,mcbride,houston,christensen,klein,pratt,briggs,parsons,mclaughlin,zimmerman,buchanan,moran,copeland,pittman,brady,mccormick,holloway,brock,poole,logan,bass,marsh,drake,wong,jefferson,morton,abbott,sparks,norton,huff,massey,figueroa,carson,bowers,roberson,barton,tran,lamb,harrington,boone,cortez,clarke,mathis,singleton,wilkins,cain,underwood,hogan,mckenzie,collier,luna,phelps,mcguire,bridges,wilkerson,nash,summers,atkins,wilcox,pitts,conley,marquez,burnett,cochran,chase,davenport,hood,gates,ayala,sawyer,vazquez,dickerson,hodge,acosta,flynn,espinoza,nicholson,monroe,wolf,morrow,whitaker,oconnor,skinner,ware,molina,kirby,huffman,gilmore,dominguez,oneal,lang,combs,kramer,hancock,gallagher,gaines,shaffer,wiggins,mathews,mcclain,fischer,wall,melton,hensley,bond,dyer,grimes,contreras,wyatt,baxter,snow,mosley,shepherd,larsen,hoover,beasley,petersen,whitehead,meyers,garrison,shields,horn,savage,olsen,schroeder,hartman,woodard,mueller,kemp,deleon,booth,patel,calhoun,wiley,eaton,cline,navarro,harrell,humphrey,parrish,duran,hutchinson,hess,dorsey,bullock,robles,beard,dalton,avila,rich,blackwell,johns,blankenship,trevino,salinas,campos,pruitt,callahan,montoya,hardin,guerra,mcdowell,stafford,gallegos,henson,wilkinson,booker,merritt,atkinson,orr,decker,hobbs,tanner,knox,pacheco,stephenson,glass,rojas,serrano,marks,hickman,sweeney,strong,mcclure,conway,roth,maynard,farrell,lowery,hurst,nixon,weiss,trujillo,ellison,sloan,juarez,winters,mclean,boyer,villarreal,mccall,gentry,carrillo,ayers,lara,sexton,pace,hull,leblanc,browning,velasquez,leach,chang,sellers,herring,noble,foley,bartlett,mercado,landry,durham,walls,barr,mckee,bauer,rivers,bradshaw,pugh,velez,rush,estes,dodson,morse,sheppard,weeks,camacho,bean,barron,livingston,middleton,spears,branch,blevins,chen,kerr,mcconnell,hatfield,harding,solis,frost,giles,blackburn,pennington,woodward,finley,mcintosh,koch,mccullough,blanchard,rivas,brennan,mejia,kane,benton,buckley,valentine,maddox,russo,mcknight,buck,moon,mcmillan,crosby,berg,dotson,mays,roach,chan,richmond,meadows,faulkner,oneill,knapp,kline,ochoa,jacobson,gay,hendricks,horne,shepard,hebert,cardenas,mcintyre,waller,holman,donaldson,cantu,morin,gillespie,fuentes,tillman,bentley,peck,key,salas,rollins,gamble,dickson,santana,cabrera,cervantes,howe,hinton,hurley,spence,zamora,yang,mcneil,suarez,petty,gould,mcfarland,sampson,carver,bray,macdonald,stout,hester,melendez,dillon,farley,hopper,galloway,potts,joyner,stein,aguirre,osborn,mercer,bender,franco,rowland,sykes,pickett,sears,mayo,dunlap,hayden,wilder,mckay,coffey,mccarty,ewing,cooley,vaughan,bonner,cotton,holder,stark,ferrell,cantrell,fulton,lott,calderon,pollard,hooper,burch,mullen,fry,riddle,levy,duke,odonnell,britt,daugherty,berger,dillard,alston,frye,riggs,chaney,odom,duffy,fitzpatrick,valenzuela,mayer,alford,mcpherson,acevedo,barrera,cote,reilly,compton,mooney,mcgowan,craft,clemons,wynn,nielsen,baird,stanton,snider,rosales,bright,witt,hays,holden,rutledge,kinney,clements,castaneda,slater,hahn,burks,delaney,pate,lancaster,sharpe,whitfield,talley,macias,burris,ratliff,mccray,madden,kaufman,beach,goff,cash,bolton,mcfadden,levine,byers,kirkland,kidd,workman,carney,mcleod,holcomb,finch,sosa,haney,franks,sargent,nieves,downs,rasmussen,bird,hewitt,foreman,valencia,oneil,delacruz,vinson,dejesus,hyde,forbes,gilliam,guthrie,wooten,huber,barlow,boyle,mcmahon,buckner,rocha,puckett,langley,knowles,cooke,velazquez,whitley,vang,shea,rouse,hartley,mayfield,elder,rankin,hanna,cowan,lucero,arroyo,slaughter,haas,oconnell,minor,boucher,archer,boggs,dougherty,andersen,newell,crowe,wang,friedman,bland,swain,holley,pearce,childs,yarbrough,galvan,proctor,meeks,lozano,mora,rangel,bacon,villanueva,schaefer,rosado,helms,boyce,goss,stinson,ibarra,hutchins,covington,crowley,hatcher,mackey,bunch,womack,polk,dodd,childress,childers,villa,springer,mahoney,dailey,belcher,lockhart,griggs,costa,brandt,walden,moser,tatum,mccann,akers,lutz,pryor,orozco,mcallister,lugo,davies,shoemaker,rutherford,newsome,magee,chamberlain,blanton,simms,godfrey,flanagan,crum,cordova,escobar,downing,sinclair,donahue,krueger,mcginnis,gore,farris,webber,corbett,andrade,starr,lyon,yoder,hastings,mcgrath,spivey,krause,harden,crabtree,kirkpatrick,arrington,ritter,mcghee,bolden,maloney,gagnon,dunbar,ponce,pike,mayes,beatty,mobley,kimball,butts,montes,eldridge,braun,hamm,gibbons,moyer,manley,herron,plummer,elmore,cramer,rucker,pierson,fontenot,rubio,goldstein,elkins,wills,novak,hickey,worley,gorman,katz,dickinson,broussard,woodruff,crow,britton,nance,lehman,bingham,zuniga,whaley,shafer,coffman,steward,delarosa,neely,mata,davila,mccabe,kessler,hinkle,welsh,pagan,goldberg,goins,crouch,cuevas,quinones,mcdermott,hendrickson,samuels,denton,bergeron,ivey,locke,haines,snell,hoskins,byrne,arias,corbin,beltran,chappell,downey,dooley,tuttle,couch,payton,mcelroy,crockett,groves,cartwright,dickey,mcgill,dubois,muniz,tolbert,dempsey,cisneros,sewell,latham,vigil,tapia,rainey,norwood,stroud,meade,tipton,kuhn,hilliard,bonilla,teague,gunn,greenwood,correa,reece,pineda,phipps,frey,kaiser,ames,gunter,schmitt,milligan,espinosa,bowden,vickers,lowry,pritchard,costello,piper,mcclellan,lovell,sheehan,hatch,dobson,singh,jeffries,hollingsworth,sorensen,meza,fink,donnelly,burrell,tomlinson,colbert,billings,ritchie,helton,sutherland,peoples,mcqueen,thomason,givens,crocker,vogel,robison,dunham,coker,swartz,keys,ladner,richter,hargrove,edmonds,brantley,albright,murdock,boswell,muller,quintero,padgett,kenney,daly,connolly,inman,quintana,lund,barnard,villegas,simons,huggins,tidwell,sanderson,bullard,mcclendon,duarte,draper,marrero,dwyer,abrams,stover,goode,fraser,crews,bernal,godwin,conklin,mcneal,baca,esparza,crowder,bower,brewster,mcneill,rodrigues,leal,coates,raines,mccain,mccord,miner,holbrook,swift,dukes,carlisle,aldridge,ackerman,starks,ricks,holliday,ferris,hairston,sheffield,lange,fountain,doss,betts,kaplan,carmichael,bloom,ruffin,penn,kern,bowles,sizemore,larkin,dupree,seals,metcalf,hutchison,henley,farr,mccauley,hankins,gustafson,curran,waddell,ramey,cates,pollock,cummins,messer,heller,funk,cornett,palacios,galindo,cano,hathaway,pham,enriquez,salgado,pelletier,painter,wiseman,blount,feliciano,houser,doherty,mead,mcgraw,swan,capps,blanco,blackmon,thomson,mcmanus,burkett,gleason,dickens,cormier,voss,rushing,rosenberg,hurd,dumas,benitez,arellano,marin,caudill,bragg,jaramillo,huerta,gipson,colvin,biggs,vela,platt,cassidy,tompkins,mccollum,dolan,daley,crump,sneed,kilgore,grove,grimm,davison,brunson,prater,marcum,devine,dodge,stratton,rosas,choi,tripp,ledbetter,hightower,feldman,epps,yeager,posey,scruggs,cope,stubbs,richey,overton,trotter,sprague,cordero,butcher,stiles,burgos,woodson,horner,bassett,purcell,haskins,akins,ziegler,spaulding,hadley,grubbs,sumner,murillo,zavala,shook,lockwood,driscoll,dahl,thorpe,redmond,putnam,mcwilliams,mcrae,romano,joiner,sadler,hedrick,hager,hagen,fitch,coulter,thacker,mansfield,langston,guidry,ferreira,corley,conn,rossi,lackey,baez,saenz,mcnamara,mcmullen,mckenna,mcdonough,link,engel,browne,roper,peacock,eubanks,drummond,stringer,pritchett,parham,mims,landers,grayson,schafer,egan,timmons,ohara,keen,hamlin,finn,cortes,mcnair,nadeau,moseley,michaud,rosen,oakes,kurtz,jeffers,calloway,beal,bautista,winn,suggs,stern,stapleton,lyles,laird,montano,dawkins,hagan,goldman,bryson,barajas,lovett,segura,metz,lockett,langford,hinson,eastman,hooks,smallwood,shapiro,crowell,whalen,triplett,chatman,aldrich,cahill,youngblood,ybarra,stallings,sheets,reeder,connelly,bateman,abernathy,winkler,wilkes,masters,hackett,granger,gillis,schmitz,sapp,napier,souza,lanier,gomes,weir,otero,ledford,burroughs,babcock,ventura,siegel,dugan,bledsoe,atwood,wray,varner,spangler,anaya,staley,kraft,fournier,belanger,wolff,thorne,bynum,burnette,boykin,swenson,purvis,pina,khan,duvall,darby,xiong,kauffman,healy,engle,benoit,valle,steiner,spicer,shaver,randle,lundy,chin,calvert,staton,neff,kearney,darden,oakley,medeiros,mccracken,crenshaw,perdue,dill,whittaker,tobin,washburn,hogue,goodrich,easley,bravo,dennison,shipley,kerns,jorgensen,crain,villalobos,maurer,longoria,keene,coon,witherspoon,staples,pettit,kincaid,eason,madrid,echols,lusk,stahl,currie,thayer,shultz,mcnally,seay,maher,gagne,barrow,nava,moreland,honeycutt,hearn,diggs,caron,whitten,westbrook,stovall,ragland,munson,meier,looney,kimble,jolly,hobson,goddard,culver,burr,presley,negron,connell,tovar,huddleston,ashby,salter,root,pendleton,oleary,nickerson,myrick,judd,jacobsen,bain,adair,starnes,matos,busby,herndon,hanley,bellamy,doty,bartley,yazzie,rowell,parson,gifford,cullen,christiansen,benavides,barnhart,talbot,mock,crandall,connors,bonds,whitt,gage,bergman,arredondo,addison,lujan,dowdy,jernigan,huynh,bouchard,dutton,rhoades,ouellette,kiser,herrington,hare,blackman,babb,allred,rudd,paulson,ogden,koenig,geiger,begay,parra,lassiter,hawk,esposito,waldron,ransom,prather,chacon,vick,sands,roark,parr,mayberry,greenberg,coley,bruner,whitman,skaggs,shipman,leary,hutton,romo,medrano,ladd,kruse,askew,schulz,alfaro,tabor,mohr,gallo,bermudez,pereira,bliss,reaves,flint,comer,woodall,naquin,guevara,delong,carrier,pickens,tilley,schaffer,knutson,fenton,doran,vogt,vann,prescott,mclain,landis,corcoran,zapata,hyatt,hemphill,faulk,dove,boudreaux,aragon,whitlock,trejo,tackett,shearer,saldana,hanks,mckinnon,koehler,bourgeois,keyes,goodson,foote,lunsford,goldsmith,flood,winslow,sams,reagan,mccloud,hough,esquivel,naylor,loomis,coronado,ludwig,braswell,bearden,huang,fagan,ezell,edmondson,cronin,nunn,lemon,guillory,grier,dubose,traylor,ryder,dobbins,coyle,aponte,whitmore,smalls,rowan,malloy,cardona,braxton,borden,humphries,carrasco,ruff,metzger,huntley,hinojosa,finney,madsen,ernst,dozier,burkhart,bowser,peralta,daigle,whittington,sorenson,saucedo,roche,redding,fugate,avalos,waite,lind,huston,hawthorne,hamby,boyles,boles,regan,faust,crook,beam,barger,hinds,gallardo,willoughby,willingham,eckert,busch,zepeda,worthington,tinsley,hoff,hawley,carmona,varela,rector,newcomb,kinsey,dube,whatley,ragsdale,bernstein,becerra,yost,mattson,felder,cheek,handy,grossman,gauthier,escobedo,braden,beckman,mott,hillman,flaherty,dykes,stockton,stearns,lofton,coats,cavazos,beavers,barrios,tang,mosher,cardwell,coles,burnham,weller,lemons,beebe,aguilera,parnell,harman,couture,alley,schumacher,redd,dobbs,blum,blalock,merchant,ennis,denson,cottrell,brannon,bagley,aviles,watt,sousa,rosenthal,rooney,dietz,blank,paquette,mcclelland,duff,velasco,lentz,grubb,burrows,barbour,ulrich,shockley,rader,beyer,mixon,layton,altman,weathers,stoner,squires,shipp,priest,lipscomb,cutler,caballero,zimmer,willett,thurston,storey,medley,epperson,shah,mcmillian,baggett,torrez,hirsch,dent,poirier,peachey,farrar,creech,barth,trimble,dupre,albrecht,sample,lawler,crisp,conroy,wetzel,nesbitt,murry,jameson,wilhelm,patten,minton,matson,kimbrough,guinn,croft,toth,pulliam,nugent,newby,littlejohn,dias,canales,bernier,baron,singletary,renteria,pruett,mchugh,mabry,landrum,brower,stoddard,cagle,stjohn,scales,kohler,kellogg,hopson,gant,tharp,gann,zeigler,pringle,hammons,fairchild,deaton,chavis,carnes,rowley,matlock,kearns,irizarry,carrington,starkey,lopes,jarrell,craven,baum,littlefield,linn,humphreys,etheridge,cuellar,chastain,bundy,speer,skelton,quiroz,pyle,portillo,ponder,moulton,machado,killian,hutson,hitchcock,dowling,cloud,burdick,spann,pedersen,levin,leggett,hayward,dietrich,beaulieu,barksdale,wakefield,snowden,briscoe,bowie,berman,ogle,mcgregor,laughlin,helm,burden,wheatley,schreiber,pressley,parris,alaniz,agee,swann,snodgrass,schuster,radford,monk,mattingly,harp,girard,cheney,yancey,wagoner,ridley,lombardo,hudgins,gaskins,duckworth,coburn,willey,prado,newberry,magana,hammonds,elam,whipple,slade,serna,ojeda,liles,dorman,diehl,upton,reardon,michaels,goetz,eller,bauman,baer,layne,hummel,brenner,amaya,adamson,ornelas,dowell,cloutier,castellanos,wellman,saylor,orourke,moya,montalvo,kilpatrick,durbin,shell,oldham,kang,garvin,foss,branham,bartholomew,templeton,maguire,holton,rider,monahan,mccormack,beaty,anders,streeter,nieto,nielson,moffett,lankford,keating,heck,gatlin,delatorre,callaway,adcock,worrell,unger,robinette,nowak,jeter,brunner,steen,parrott,overstreet,nobles,montanez,clevenger,brinkley,trahan,quarles,pickering,pederson,jansen,grantham,gilchrist,crespo,aiken,schell,schaeffer,lorenz,leyva,harms,dyson,wallis,pease,leavitt,cheng,cavanaugh,batts,warden,seaman,rockwell,quezada,paxton,linder,houck,fontaine,durant,caruso,adler,pimentel,mize,lytle,cleary,cason,acker,switzer,isaacs,higginbotham,waterman,vandyke,stamper,sisk,shuler,riddick,mcmahan,levesque,hatton,bronson,bollinger,arnett,okeefe,gerber,gannon,farnsworth,baughman,silverman,satterfield,mccrary,kowalski,grigsby,greco,cabral,trout,rinehart,mahon,linton,gooden,curley,baugh,wyman,weiner,schwab,schuler,morrissey,mahan,bunn,thrasher,spear,waggoner,qualls,purdy,mcwhorter,mauldin,gilman,perryman,newsom,menard,martino,graf,billingsley,artis,simpkins,salisbury,quintanilla,gilliland,fraley,foust,crouse,scarborough,grissom,fultz,marlow,markham,madrigal,lawton,barfield,whiting,varney,schwarz,gooch,arce,wheat,truong,poulin,hurtado,selby,gaither,fortner,culpepper,coughlin,brinson,boudreau,bales,stepp,holm,schilling,morrell,kahn,heaton,gamez,causey,turpin,shanks,schrader,meek,isom,hardison,carranza,yanez,scroggins,schofield,runyon,ratcliff,murrell,moeller,irby,currier,butterfield,ralston,pullen,pinson,estep,carbone,hawks,ellington,casillas,spurlock,sikes,motley,mccartney,kruger,isbell,houle,burk,tomlin,quigley,neumann,lovelace,fennell,cheatham,bustamante,skidmore,hidalgo,forman,culp,bowens,betancourt,aquino,robb,milner,martel,gresham,wiles,ricketts,dowd,collazo,bostic,blakely,sherrod,kenyon,gandy,ebert,deloach,allard,sauer,robins,olivares,gillette,chestnut,bourque,paine,hite,hauser,devore,crawley,chapa,talbert,poindexter,meador,mcduffie,mattox,kraus,harkins,choate,wren,sledge,sanborn,kinder,geary,cornwell,barclay,abney,seward,rhoads,howland,fortier,benner,vines,tubbs,troutman,rapp,mccurdy,deluca,westmoreland,havens,guajardo,clary,seal,meehan,herzog,guillen,ashcraft,waugh,renner,milam,elrod,churchill,breaux,bolin,asher,windham,tirado,pemberton,nolen,noland,knott,emmons,cornish,christenson,brownlee,barbee,waldrop,pitt,olvera,lombardi,gruber,gaffney,eggleston,banda,archuleta,slone,prewitt,pfeiffer,nettles,mena,mcadams,henning,gardiner,cromwell,chisholm,burleson,vest,oglesby,mccarter,lumpkin,wofford,vanhorn,thorn,teel,swafford,stclair,stanfield,ocampo,herrmann,hannon,arsenault,roush,mcalister,hiatt,gunderson,forsythe,duggan,delvalle,cintron,wilks,weinstein,uribe,rizzo,noyes,mclendon,gurley,bethea,winstead,maples,guyton,giordano,alderman,valdes,polanco,pappas,lively,grogan,griffiths,bobo,arevalo,whitson,sowell,rendon,fernandes,farrow,benavidez,ayres,alicea,stump,smalley,seitz,schulte,gilley,gallant,canfield,wolford,omalley,mcnutt,mcnulty,mcgovern,hardman,harbin,cowart,chavarria,brink,beckett,bagwell,armstead,anglin,abreu,reynoso,krebs,jett,hoffmann,greenfield,forte,burney,broome,sisson,trammell,partridge,mace,lomax,lemieux,gossett,frantz,fogle,cooney,broughton,pence,paulsen,muncy,mcarthur,hollins,beauchamp,withers,osorio,mulligan,hoyle,dockery,cockrell,begley,amador,roby,rains,lindquist,gentile,everhart,bohannon,wylie,sommers,purnell,fortin,dunning,breeden,vail,phelan,phan,marx,cosby,colburn,boling,biddle,ledesma,gaddis,denney,chow,bueno,berrios,wicker,tolliver,thibodeaux,nagle,lavoie,fisk,crist,barbosa,reedy,locklear,kolb,himes,behrens,beckwith,weems,wahl,shorter,shackelford,rees,muse,cerda,valadez,thibodeau,saavedra,ridgeway,reiter,mchenry,majors,lachance,keaton,ferrara,clemens,blocker,applegate,needham,mojica,kuykendall,hamel,escamilla,doughty,burchett,ainsworth,vidal,upchurch,thigpen,strauss,spruill,sowers,riggins,ricker,mccombs,harlow,buffington,sotelo,olivas,negrete,morey,macon,logsdon,lapointe,bigelow,bello,westfall,stubblefield,lindley,hein,hawes,farrington,breen,birch,wilde,steed,sepulveda,reinhardt,proffitt,minter,messina,mcnabb,maier,keeler,gamboa,donohue,basham,shinn,crooks,cota,borders,bills,bachman,tisdale,tavares,schmid,pickard,gulley,fonseca,delossantos,condon,batista,wicks,wadsworth,martell,littleton,ison,haag,folsom,brumfield,broyles,brito,mireles,mcdonnell,leclair,hamblin,gough,fanning,binder,winfield,whitworth,soriano,palumbo,newkirk,mangum,hutcherson,comstock,carlin,beall,bair,wendt,watters,walling,putman,otoole,morley,mares,lemus,keener,hundley,dial,damico,billups,strother,mcfarlane,lamm,eaves,crutcher,caraballo,canty,atwell,taft,siler,rust,rawls,rawlings,prieto,mcneely,mcafee,hulsey,hackney,galvez,escalante,delagarza,crider,bandy,wilbanks,stowe,steinberg,renfro,masterson,massie,lanham,haskell,hamrick,dehart,burdette,branson,bourne,babin,aleman,worthy,tibbs,smoot,slack,paradis,mull,luce,houghton,gantt,furman,danner,christianson,burge,ashford,arndt,almeida,stallworth,shade,searcy,sager,noonan,mclemore,mcintire,maxey,lavigne,jobe,ferrer,falk,coffin,byrnes,aranda,apodaca,stamps,rounds,peek,olmstead,lewandowski,kaminski,dunaway,bruns,brackett,amato,reich,mcclung,lacroix,koontz,herrick,hardesty,flanders,cousins,cato,cade,vickery,shank,nagel,dupuis,croteau,cotter,stuckey,stine,porterfield,pauley,moffitt,knudsen,hardwick,goforth,dupont,blunt,barrows,barnhill,shull,rash,loftis,lemay,kitchens,horvath,grenier,fuchs,fairbanks,culbertson,calkins,burnside,beattie,ashworth,albertson,wertz,vaught,vallejo,turk,tuck,tijerina,sage,peterman,marroquin,marr,lantz,hoang,demarco,cone,berube,barnette,wharton,stinnett,slocum,scanlon,sander,pinto,mancuso,lima,headley,epstein,counts,clarkson,carnahan,boren,arteaga,adame,zook,whittle,whitehurst,wenzel,saxton,reddick,puente,handley,haggerty,earley,devlin,chaffin,cady,acuna,solano,sigler,pollack,pendergrass,ostrander,janes,francois,crutchfield,chamberlin,brubaker,baptiste,willson,reis,neeley,mullin,mercier,lira,layman,keeling,higdon,espinal,chapin,warfield,toledo,pulido,peebles,nagy,montague,mello,lear,jaeger,hogg,graff,furr,soliz,poore,mendenhall,mclaurin,maestas,gable,barraza,tillery,snead,pond,neill,mcculloch,mccorkle,lightfoot,hutchings,holloman,harness,dorn,bock,zielinski,turley,treadwell,stpierre,starling,somers,oswald,merrick,easterling,bivens,truitt,poston,parry,ontiveros,olivarez,moreau,medlin,lenz,knowlton,fairley,cobbs,chisolm,bannister,woodworth,toler,ocasio,noriega,neuman,moye,milburn,mcclanahan,lilley,hanes,flannery,dellinger,danielson,conti,blodgett,beers,weatherford,strain,karr,hitt,denham,custer,coble,clough,casteel,bolduc,batchelor,ammons,whitlow,tierney,staten,sibley,seifert,schubert,salcedo,mattison,laney,haggard,grooms,dees,cromer,cooks,colson,caswell,zarate,swisher,shin,ragan,pridgen,mcvey,matheny,lafleur,franz,ferraro,dugger,whiteside,rigsby,mcmurray,lehmann,jacoby,hildebrand,hendrick,headrick,goad,fincher,drury,borges,archibald,albers,woodcock,trapp,soares,seaton,monson,luckett,lindberg,kopp,keeton,healey,garvey,gaddy,fain,burchfield,wentworth,strand,stack,spooner,saucier,ricci,plunkett,pannell,ness,leger,freitas,fong,elizondo,duval,beaudoin,urbina,rickard,partin,mcgrew,mcclintock,ledoux,forsyth,faison,devries,bertrand,wasson,tilton,scarbrough,leung,irvine,garber,denning,corral,colley,castleberry,bowlin,bogan,beale,baines,trice,rayburn,parkinson,nunes,mcmillen,leahy,kimmel,higgs,fulmer,carden,bedford,taggart,spearman,prichard,morrill,koonce,heinz,hedges,guenther,grice,findley,dover,creighton,boothe,bayer,arreola,vitale,valles,raney,osgood,hanlon,burley,bounds,worden,weatherly,vetter,tanaka,stiltner,nevarez,mosby,montero,melancon,harter,hamer,goble,gladden,gist,ginn,akin,zaragoza,tarver,sammons,royster,oreilly,muir,morehead,luster,kingsley,kelso,grisham,glynn,baumann,alves,yount,tamayo,paterson,oates,menendez,longo,hargis,gillen,desantis,conover,breedlove,sumpter,scherer,rupp,reichert,heredia,creel,cohn,clemmons,casas,bickford,belton,bach,williford,whitcomb,tennant,sutter,stull,mccallum,langlois,keel,keegan,dangelo,dancy,damron,clapp,clanton,bankston,oliveira,mintz,mcinnis,martens,mabe,laster,jolley,hildreth,hefner,glaser,duckett,demers,brockman,blais,alcorn,agnew,toliver,tice,seeley,najera,musser,mcfall,laplante,galvin,fajardo,doan,coyne,copley,clawson,cheung,barone,wynne,woodley,tremblay,stoll,sparrow,sparkman,schweitzer,sasser,samples,roney,legg,heim,farias,colwell,christman,bratcher,winchester,upshaw,southerland,sorrell,sells,mccloskey,martindale,luttrell,loveless,lovejoy,linares,latimer,embry,coombs,bratton,bostick,venable,tuggle,toro,staggs,sandlin,jefferies,heckman,griffis,crayton,clem,browder,thorton,sturgill,sprouse,royer,rousseau,ridenour,pogue,perales,peeples,metzler,mesa,mccutcheon,mcbee,hornsby,heffner,corrigan,armijo,plante,peyton,paredes,macklin,hussey,hodgson,granados,frias,becnel,batten,almanza,turney,teal,sturgeon,meeker,mcdaniels,limon,keeney,hutto,holguin,gorham,fishman,fierro,blanchette,rodrigue,reddy,osburn,oden,lerma,kirkwood,keefer,haugen,hammett,chalmers,brinkman,baumgartner,zhang,valerio,tellez,steffen,shumate,sauls,ripley,kemper,guffey,evers,craddock,carvalho,blaylock,banuelos,balderas,wheaton,turnbull,shuman,pointer,mosier,mccue,ligon,kozlowski,johansen,ingle,herr,briones,snipes,rickman,pipkin,pantoja,orosco,moniz,lawless,kunkel,hibbard,galarza,enos,bussey,schott,salcido,perreault,mcdougal,mccool,haight,garris,easton,conyers,atherton,wimberly,utley,spellman,smithson,slagle,ritchey,rand,petit,osullivan,oaks,nutt,mcvay,mccreary,mayhew,knoll,jewett,harwood,cardoza,ashe,arriaga,zeller,wirth,whitmire,stauffer,rountree,redden,mccaffrey,martz,larose,langdon,humes,gaskin,faber,devito,cass,almond,wingfield,wingate,villareal,tyner,smothers,severson,reno,pennell,maupin,leighton,janssen,hassell,hallman,halcomb,folse,fitzsimmons,fahey,cranford,bolen,battles,battaglia,wooldridge,trask,rosser,regalado,mcewen,keefe,fuqua,echevarria,caro,boynton,andrus,viera,vanmeter,taber,spradlin,seibert,provost,prentice,oliphant,laporte,hwang,hatchett,hass,greiner,freedman,covert,chilton,byars,wiese,venegas,swank,shrader,roberge,mullis,mortensen,mccune,marlowe,kirchner,keck,isaacson,hostetler,halverson,gunther,griswold,fenner,durden,blackwood,ahrens,sawyers,savoy,nabors,mcswain,mackay,lavender,lash,labbe,jessup,fullerton,cruse,crittenden,correia,centeno,caudle,canady,callender,alarcon,ahern,winfrey,tribble,salley,roden,musgrove,minnick,fortenberry,carrion,bunting,batiste,whited,underhill,stillwell,rauch,pippin,perrin,messenger,mancini,lister,kinard,hartmann,fleck,wilt,treadway,thornhill,spalding,rafferty,pitre,patino,ordonez,linkous,kelleher,homan,galbraith,feeney,curtin,coward,camarillo,buss,bunnell,bolt,beeler,autry,alcala,witte,wentz,stidham,shively,nunley,meacham,martins,lemke,lefebvre,hynes,horowitz,hoppe,holcombe,dunne,derr,cochrane,brittain,bedard,beauregard,torrence,strunk,soria,simonson,shumaker,scoggins,oconner,moriarty,kuntz,ives,hutcheson,horan,hales,garmon,fitts,bohn,atchison,wisniewski,vanwinkle,sturm,sallee,prosser,moen,lundberg,kunz,kohl,keane,jorgenson,jaynes,funderburk,freed,durr,creamer,cosgrove,batson,vanhoose,thomsen,teeter,smyth,redmon,orellana,maness,heflin,goulet,frick,forney,bunker,asbury,aguiar,talbott,southard,mowery,mears,lemmon,krieger,hickson,elston,duong,delgadillo,dayton,dasilva,conaway,catron,bruton,bradbury,bordelon,bivins,bittner,bergstrom,beals,abell,whelan,tejada,pulley,pino,norfleet,nealy,maes,loper,gatewood,frierson,freund,finnegan,cupp,covey,catalano,boehm,bader,yoon,walston,tenney,sipes,rawlins,medlock,mccaskill,mccallister,marcotte,maclean,hughey,henke,harwell,gladney,gilson,chism,caskey,brandenburg,baylor,villasenor,veal,thatcher,stegall,petrie,nowlin,navarrete,lombard,loftin,lemaster,kroll,kovach,kimbrell,kidwell,hershberger,fulcher,cantwell,bustos,boland,bobbitt,binkley,wester,weis,verdin,tong,tiller,sisco,sharkey,seymore,rosenbaum,rohr,quinonez,pinkston,malley,logue,lessard,lerner,lebron,krauss,klinger,halstead,haller,getz,burrow,alger,shores,pfeifer,perron,nelms,munn,mcmaster,mckenney,manns,knudson,hutchens,huskey,goebel,flagg,cushman,click,castellano,carder,bumgarner,wampler,spinks,robson,neel,mcreynolds,mathias,maas,loera,jenson,florez,coons,buckingham,brogan,berryman,wilmoth,wilhite,thrash,shephard,seidel,schulze,roldan,pettis,obryan,maki,mackie,hatley,frazer,fiore,chesser,bottoms,bisson,benefield,allman,wilke,trudeau,timm,shifflett,mundy,milliken,mayers,leake,kohn,huntington,horsley,hermann,guerin,fryer,frizzell,foret,flemming,fife,criswell,carbajal,bozeman,boisvert,angulo,wallen,tapp,silvers,ramsay,oshea,orta,moll,mckeever,mcgehee,linville,kiefer,ketchum,howerton,groce,gass,fusco,corbitt,betz,bartels,amaral,aiello,weddle,sperry,seiler,runyan,raley,overby,osteen,olds,mckeown,matney,lauer,lattimore,hindman,hartwell,fredrickson,fredericks,espino,clegg,carswell,cambell,burkholder,woodbury,welker,totten,thornburg,theriault,stitt,stamm,stackhouse,scholl,saxon,rife,razo,quinlan,pinkerton,olivo,nesmith,nall,mattos,lafferty,justus,giron,geer,fielder,drayton,dortch,conners,conger,boatwright,billiot,barden,armenta,tibbetts,steadman,slattery,rinaldi,raynor,pinckney,pettigrew,milne,matteson,halsey,gonsalves,fellows,durand,desimone,cowley,cowles,brill,barham,barela,barba,ashmore,withrow,valenti,tejeda,spriggs,sayre,salerno,peltier,peel,merriman,matheson,lowman,lindstrom,hyland,giroux,earls,dugas,dabney,collado,briseno,baxley,whyte,wenger,vanover,vanburen,thiel,schindler,schiller,rigby,pomeroy,passmore,marble,manzo,mahaffey,lindgren,laflamme,greathouse,fite,calabrese,bayne,yamamoto,wick,townes,thames,reinhart,peeler,naranjo,montez,mcdade,mast,markley,marchand,leeper,kellum,hudgens,hennessey,hadden,gainey,coppola,borrego,bolling,beane,ault,slaton,pape,null,mulkey,lightner,langer,hillard,ethridge,enright,derosa,baskin,weinberg,turman,somerville,pardo,noll,lashley,ingraham,hiller,hendon,glaze,cothran,cooksey,conte,carrico,abner,wooley,swope,summerlin,sturgis,sturdivant,stott,spurgeon,spillman,speight,roussel,popp,nutter,mckeon,mazza,magnuson,lanning,kozak,jankowski,heyward,forster,corwin,callaghan,bays,wortham,usher,theriot,sayers,sabo,poling,loya,lieberman,laroche,labelle,howes,harr,garay,fogarty,everson,durkin,dominquez,chaves,chambliss,witcher,vieira,vandiver,terrill,stoker,schreiner,moorman,liddell,lawhorn,krug,irons,hylton,hollenbeck,herrin,hembree,goolsby,goodin,gilmer,foltz,dinkins,daughtry,caban,brim,briley,bilodeau,wyant,vergara,tallent,swearingen,stroup,scribner,quillen,pitman,mccants,maxfield,martinson,holtz,flournoy,brookins,brody,baumgardner,straub,sills,roybal,roundtree,oswalt,mcgriff,mcdougall,mccleary,maggard,gragg,gooding,godinez,doolittle,donato,cowell,cassell,bracken,appel,zambrano,reuter,perea,nakamura,monaghan,mickens,mcclinton,mcclary,marler,kish,judkins,gilbreath,freese,flanigan,felts,erdmann,dodds,chew,brownell,boatright,barreto,slayton,sandberg,saldivar,pettway,odum,narvaez,moultrie,montemayor,merrell,lees,keyser,hoke,hardaway,hannan,gilbertson,fogg,dumont,deberry,coggins,buxton,bucher,broadnax,beeson,araujo,appleton,amundson,aguayo,ackley,yocum,worsham,shivers,sanches,sacco,robey,rhoden,pender,ochs,mccurry,madera,luong,knotts,jackman,heinrich,hargrave,gault,comeaux,chitwood,caraway,boettcher,bernhardt,barrientos,zink,wickham,whiteman,thorp,stillman,settles,schoonover,roque,riddell,pilcher,phifer,novotny,macleod,hardee,haase,grider,doucette,clausen,bevins,beamon,badillo,tolley,tindall,soule,snook,seale,pinkney,pellegrino,nowell,nemeth,mondragon,mclane,lundgren,ingalls,hudspeth,hixson,gearhart,furlong,downes,dibble,deyoung,cornejo,camara,brookshire,boyette,wolcott,surratt,sellars,segal,salyer,reeve,rausch,labonte,haro,gower,freeland,fawcett,eads,driggers,donley,collett,bromley,boatman,ballinger,baldridge,volz,trombley,stonge,shanahan,rivard,rhyne,pedroza,matias,jamieson,hedgepeth,hartnett,estevez,eskridge,denman,chiu,chinn,catlett,carmack,buie,bechtel,beardsley,bard,ballou,ulmer,skeen,robledo,rincon,reitz,piazza,munger,moten,mcmichael,loftus,ledet,kersey,groff,fowlkes,crumpton,clouse,bettis,villagomez,timmerman,strom,santoro,roddy,penrod,musselman,macpherson,leboeuf,harless,haddad,guido,golding,fulkerson,fannin,dulaney,dowdell,cottle,ceja,cate,bosley,benge,albritton,voigt,trowbridge,soileau,seely,rohde,pearsall,paulk,orth,nason,mota,mcmullin,marquardt,madigan,hoag,gillum,gabbard,fenwick,danforth,cushing,cress,creed,cazares,bettencourt,barringer,baber,stansberry,schramm,rutter,rivero,oquendo,necaise,mouton,montenegro,miley,mcgough,marra,macmillan,lamontagne,jasso,horst,hetrick,heilman,gaytan,gall,fortney,dingle,desjardins,dabbs,burbank,brigham,breland,beaman,arriola,yarborough,wallin,toscano,stowers,reiss,pichardo,orton,michels,mcnamee,mccrory,leatherman,kell,keister,horning,hargett,guay,ferro,deboer,dagostino,carper,blanks,beaudry,towle,tafoya,stricklin,strader,soper,sonnier,sigmon,schenk,saddler,pedigo,mendes,lunn,lohr,lahr,kingsbury,jarman,hume,holliman,hofmann,haworth,harrelson,hambrick,flick,edmunds,dacosta,crossman,colston,chaplin,carrell,budd,weiler,waits,valentino,trantham,tarr,solorio,roebuck,powe,plank,pettus,pagano,mink,luker,leathers,joslin,hartzell,gambrell,cepeda,carty,caputo,brewington,bedell,ballew,applewhite,warnock,walz,urena,tudor,reel,pigg,parton,mickelson,meagher,mclellan,mcculley,mandel,leech,lavallee,kraemer,kling,kipp,kehoe,hochstetler,harriman,gregoire,grabowski,gosselin,gammon,fancher,edens,desai,brannan,armendariz,woolsey,whitehouse,whetstone,ussery,towne,testa,tallman,studer,strait,steinmetz,sorrells,sauceda,rolfe,paddock,mitchem,mcginn,mccrea,lovato,hazen,gilpin,gaynor,fike,devoe,delrio,curiel,burkhardt,bode,backus,zinn,watanabe,wachter,vanpelt,turnage,shaner,schroder,sato,riordan,quimby,portis,natale,mckoy,mccown,kilmer,hotchkiss,hesse,halbert,gwinn,godsey,delisle,chrisman,canter,arbogast,angell,acree,yancy,woolley,wesson,weatherspoon,trainor,stockman,spiller,sipe,rooks,reavis,propst,porras,neilson,mullens,loucks,llewellyn,kumar,koester,klingensmith,kirsch,kester,honaker,hodson,hennessy,helmick,garrity,garibay,drain,casarez,callis,botello,aycock,avant,wingard,wayman,tully,theisen,szymanski,stansbury,segovia,rainwater,preece,pirtle,padron,mincey,mckelvey,mathes,larrabee,kornegay,klug,ingersoll,hecht,germain,eggers,dykstra,deering,decoteau,deason,dearing,cofield,carrigan,bonham,bahr,aucoin,appleby,almonte,yager,womble,wimmer,weimer,vanderpool,stancil,sprinkle,romine,remington,pfaff,peckham,olivera,meraz,maze,lathrop,koehn,hazelton,halvorson,hallock,haddock,ducharme,dehaven,caruthers,brehm,bosworth,bost,bias,beeman,basile,bane,aikens,wold,walther,tabb,suber,strawn,stocker,shirey,schlosser,riedel,rembert,reimer,pyles,peele,merriweather,letourneau,latta,kidder,hixon,hillis,hight,herbst,henriquez,haygood,hamill,gabel,fritts,eubank,dawes,correll,bushey,buchholz,brotherton,botts,barnwell,auger,atchley,westphal,veilleux,ulloa,stutzman,shriver,ryals,pilkington,moyers,marrs,mangrum,maddux,lockard,laing,kuhl,harney,hammock,hamlett,felker,doerr,depriest,carrasquillo,carothers,bogle,bischoff,bergen,albanese,wyckoff,vermillion,vansickle,thibault,tetreault,stickney,shoemake,ruggiero,rawson,racine,philpot,paschal,mcelhaney,mathison,legrand,lapierre,kwan,kremer,jiles,hilbert,geyer,faircloth,ehlers,egbert,desrosiers,dalrymple,cotten,cashman,cadena,boardman,alcaraz,wyrick,therrien,tankersley,strickler,puryear,plourde,pattison,pardue,mcginty,mcevoy,landreth,kuhns,koon,hewett,giddens,emerick,eades,deangelis,cosme,ceballos,birdsong,benham,bemis,armour,anguiano,welborn,tsosie,storms,shoup,sessoms,samaniego,rood,rojo,rhinehart,raby,northcutt,myer,munguia,morehouse,mcdevitt,mallett,lozada,lemoine,kuehn,hallett,grim,gillard,gaylor,garman,gallaher,feaster,faris,darrow,dardar,coney,carreon,braithwaite,boylan,boyett,bixler,bigham,benford,barragan,barnum,zuber,wyche,westcott,vining,stoltzfus,simonds,shupe,sabin,ruble,rittenhouse,richman,perrone,mulholland,millan,lomeli,kite,jemison,hulett,holler,hickerson,herold,hazelwood,griffen,gause,forde,eisenberg,dilworth,charron,chaisson,bristow,breunig,brace,boutwell,bentz,belk,bayless,batchelder,baran,baeza,zimmermann,weathersby,volk,toole,theis,tedesco,searle,schenck,satterwhite,ruelas,rankins,partida,nesbit,morel,menchaca,levasseur,kaylor,johnstone,hulse,hollar,hersey,harrigan,harbison,guyer,gish,giese,gerlach,geller,geisler,falcone,elwell,doucet,deese,darr,corder,chafin,byler,bussell,burdett,brasher,bowe,bellinger,bastian,barner,alleyne,wilborn,weil,wegner,tatro,spitzer,smithers,schoen,resendez,parisi,overman,obrian,mudd,mahler,maggio,lindner,lalonde,lacasse,laboy,killion,kahl,jessen,jamerson,houk,henshaw,gustin,graber,durst,duenas,davey,cundiff,conlon,colunga,coakley,chiles,capers,buell,bricker,bissonnette,bartz,bagby,zayas,volpe,treece,toombs,thom,terrazas,swinney,skiles,silveira,shouse,senn,ramage,moua,langham,kyles,holston,hoagland,herd,feller,denison,carraway,burford,bickel,ambriz,abercrombie,yamada,weidner,waddle,verduzco,thurmond,swindle,schrock,sanabria,rosenberger,probst,peabody,olinger,nazario,mccafferty,mcbroom,mcabee,mazur,matherne,mapes,leverett,killingsworth,heisler,griego,gosnell,frankel,franke,ferrante,fenn,ehrlich,christopherso,chasse,caton,brunelle,bloomfield,babbitt,azevedo,abramson,ables,abeyta,youmans,wozniak,wainwright,stowell,smitherman,samuelson,runge,rothman,rosenfeld,peake,owings,olmos,munro,moreira,leatherwood,larkins,krantz,kovacs,kizer,kindred,karnes,jaffe,hubbell,hosey,hauck,goodell,erdman,dvorak,doane,cureton,cofer,buehler,bierman,berndt,banta,abdullah,warwick,waltz,turcotte,torrey,stith,seger,sachs,quesada,pinder,peppers,pascual,paschall,parkhurst,ozuna,oster,nicholls,lheureux,lavalley,kimura,jablonski,haun,gourley,gilligan,croy,cotto,cargill,burwell,burgett,buckman,booher,adorno,wrenn,whittemore,urias,szabo,sayles,saiz,rutland,rael,pharr,pelkey,ogrady,nickell,musick,moats,mather,massa,kirschner,kieffer,kellar,hendershot,gott,godoy,gadson,furtado,fiedler,erskine,dutcher,dever,daggett,chevalier,brake,ballesteros,amerson,wingo,waldon,trott,silvey,showers,schlegel,ritz,pepin,pelayo,parsley,palermo,moorehead,mchale,lett,kocher,kilburn,iglesias,humble,hulbert,huckaby,hartford,hardiman,gurney,grigg,grasso,goings,fillmore,farber,depew,dandrea,cowen,covarrubias,burrus,bracy,ardoin,thompkins,standley,radcliffe,pohl,persaud,parenteau,pabon,newson,newhouse,napolitano,mulcahy,malave,keim,hooten,hernandes,heffernan,hearne,greenleaf,glick,fuhrman,fetter,faria,dishman,dickenson,crites,criss,clapper,chenault,castor,casto,bugg,bove,bonney,anderton,allgood,alderson,woodman,warrick,toomey,tooley,tarrant,summerville,stebbins,sokol,searles,schutz,schumann,scheer,remillard,raper,proulx,palmore,monroy,messier,melo,melanson,mashburn,manzano,lussier,jenks,huneycutt,hartwig,grimsley,fulk,fielding,fidler,engstrom,eldred,dantzler,crandell,calder,brumley,breton,brann,bramlett,boykins,bianco,bancroft,almaraz,alcantar,whitmer,whitener,welton,vineyard,rahn,paquin,mizell,mcmillin,mckean,marston,maciel,lundquist,liggins,lampkin,kranz,koski,kirkham,jiminez,hazzard,harrod,graziano,grammer,gendron,garrido,fordham,englert,dryden,demoss,deluna,crabb,comeau,brummett,blume,benally,wessel,vanbuskirk,thorson,stumpf,stockwell,reams,radtke,rackley,pelton,niemi,newland,nelsen,morrissette,miramontes,mcginley,mccluskey,marchant,luevano,lampe,lail,jeffcoat,infante,hinman,gaona,eady,desmarais,decosta,dansby,cisco,choe,breckenridge,bostwick,borg,bianchi,alberts,wilkie,whorton,vargo,tait,soucy,schuman,ousley,mumford,lippert,leath,lavergne,laliberte,kirksey,kenner,johnsen,izzo,hiles,gullett,greenwell,gaspar,galbreath,gaitan,ericson,delapaz,croom,cottingham,clift,bushnell,bice,beason,arrowood,waring,voorhees,truax,shreve,shockey,schatz,sandifer,rubino,rozier,roseberry,pieper,peden,nester,nave,murphey,malinowski,macgregor,lafrance,kunkle,kirkman,hipp,hasty,haddix,gervais,gerdes,gamache,fouts,fitzwater,dillingham,deming,deanda,cedeno,cannady,burson,bouldin,arceneaux,woodhouse,whitford,wescott,welty,weigel,torgerson,toms,surber,sunderland,sterner,setzer,riojas,pumphrey,puga,metts,mcgarry,mccandless,magill,lupo,loveland,llamas,leclerc,koons,kahler,huss,holbert,heintz,haupt,grimmett,gaskill,ellingson,dorr,dingess,deweese,desilva,crossley,cordeiro,converse,conde,caldera,cairns,burmeister,burkhalter,brawner,bott,youngs,vierra,valladares,shrum,shropshire,sevilla,rusk,rodarte,pedraza,nino,merino,mcminn,markle,mapp,lajoie,koerner,kittrell,kato,hyder,hollifield,heiser,hazlett,greenwald,fant,eldredge,dreher,delafuente,cravens,claypool,beecher,aronson,alanis,worthen,wojcik,winger,whitacre,valverde,valdivia,troupe,thrower,swindell,suttles,stroman,spires,slate,shealy,sarver,sartin,sadowski,rondeau,rolon,rascon,priddy,paulino,nolte,munroe,molloy,mciver,lykins,loggins,lenoir,klotz,kempf,hupp,hollowell,hollander,haynie,harkness,harker,gottlieb,frith,eddins,driskell,doggett,densmore,charette,cassady,byrum,burcham,buggs,benn,whitted,warrington,vandusen,vaillancourt,steger,siebert,scofield,quirk,purser,plumb,orcutt,nordstrom,mosely,michalski,mcphail,mcdavid,mccraw,marchese,mannino,lefevre,largent,lanza,kress,isham,hunsaker,hoch,hildebrandt,guarino,grijalva,graybill,fick,ewell,ewald,cusick,crumley,coston,cathcart,carruthers,bullington,bowes,blain,blackford,barboza,yingling,wert,weiland,varga,silverstein,sievers,shuster,shumway,runnels,rumsey,renfroe,provencher,polley,mohler,middlebrooks,kutz,koster,groth,glidden,fazio,deen,chipman,chenoweth,champlin,cedillo,carrero,carmody,buckles,brien,boutin,bosch,berkowitz,altamirano,wilfong,wiegand,waites,truesdale,toussaint,tobey,tedder,steelman,sirois,schnell,robichaud,richburg,plumley,pizarro,piercy,ortego,oberg,neace,mertz,mcnew,matta,lapp,lair,kibler,howlett,hollister,hofer,hatten,hagler,falgoust,engelhardt,eberle,dombrowski,dinsmore,daye,casares,braud,balch,autrey,wendel,tyndall,strobel,stoltz,spinelli,serrato,reber,rathbone,palomino,nickels,mayle,mathers,mach,loeffler,littrell,levinson,leong,lemire,lejeune,lazo,lasley,koller,kennard,hoelscher,hintz,hagerman,greaves,fore,eudy,engler,corrales,cordes,brunet,bidwell,bennet,tyrrell,tharpe,swinton,stribling,southworth,sisneros,savoie,samons,ruvalcaba,ries,ramer,omara,mosqueda,millar,mcpeak,macomber,luckey,litton,lehr,lavin,hubbs,hoard,hibbs,hagans,futrell,exum,evenson,culler,carbaugh,callen,brashear,bloomer,blakeney,bigler,addington,woodford,unruh,tolentino,sumrall,stgermain,smock,sherer,rayner,pooler,oquinn,nero,mcglothlin,linden,kowal,kerrigan,ibrahim,harvell,hanrahan,goodall,geist,fussell,fung,ferebee,eley,eggert,dorsett,dingman,destefano,colucci,clemmer,burnell,brumbaugh,boddie,berryhill,avelar,alcantara,winder,winchell,vandenberg,trotman,thurber,thibeault,stlouis,stilwell,sperling,shattuck,sarmiento,ruppert,rumph,renaud,randazzo,rademacher,quiles,pearman,palomo,mercurio,lowrey,lindeman,lawlor,larosa,lander,labrecque,hovis,holifield,henninger,hawkes,hartfield,hann,hague,genovese,garrick,fudge,frink,eddings,dinh,cribbs,calvillo,bunton,brodeur,bolding,blanding,agosto,zahn,wiener,trussell,tello,teixeira,speck,sharma,shanklin,sealy,scanlan,santamaria,roundy,robichaux,ringer,rigney,prevost,polson,nord,moxley,medford,mccaslin,mcardle,macarthur,lewin,lasher,ketcham,keiser,heine,hackworth,grose,grizzle,gillman,gartner,frazee,fleury,edson,edmonson,derry,cronk,conant,burress,burgin,broom,brockington,bolick,boger,birchfield,billington,baily,bahena,armbruster,anson,yoho,wilcher,tinney,timberlake,thielen,sutphin,stultz,sikora,serra,schulman,scheffler,santillan,rego,preciado,pinkham,mickle,lomas,lizotte,lent,kellerman,keil,johanson,hernadez,hartsfield,haber,gorski,farkas,eberhardt,duquette,delano,cropper,cozart,cockerham,chamblee,cartagena,cahoon,buzzell,brister,brewton,blackshear,benfield,aston,ashburn,arruda,wetmore,weise,vaccaro,tucci,sudduth,stromberg,stoops,showalter,shears,runion,rowden,rosenblum,riffle,renfrow,peres,obryant,leftwich,lark,landeros,kistler,killough,kerley,kastner,hoggard,hartung,guertin,govan,gatling,gailey,fullmer,fulford,flatt,esquibel,endicott,edmiston,edelstein,dufresne,dressler,dickman,chee,busse,bonnett,berard,yoshida,velarde,veach,vanhouten,vachon,tolson,tolman,tennyson,stites,soler,shutt,ruggles,rhone,pegues,neese,muro,moncrief,mefford,mcphee,mcmorris,mceachern,mcclurg,mansour,mader,leija,lecompte,lafountain,labrie,jaquez,heald,hash,hartle,gainer,frisby,farina,eidson,edgerton,dyke,durrett,duhon,cuomo,cobos,cervantez,bybee,brockway,borowski,binion,beery,arguello,amaro,acton,yuen,winton,wigfall,weekley,vidrine,vannoy,tardiff,shoop,shilling,schick,safford,prendergast,pilgrim,pellerin,osuna,nissen,nalley,moller,messner,messick,merrifield,mcguinness,matherly,marcano,mahone,lemos,lebrun,jara,hoffer,herren,hecker,haws,haug,gwin,gober,gilliard,fredette,favela,echeverria,downer,donofrio,desrochers,crozier,corson,bechtold,argueta,aparicio,zamudio,westover,westerman,utter,troyer,thies,tapley,slavin,shirk,sandler,roop,rimmer,raymer,radcliff,otten,moorer,millet,mckibben,mccutchen,mcavoy,mcadoo,mayorga,mastin,martineau,marek,madore,leflore,kroeger,kennon,jimerson,hostetter,hornback,hendley,hance,guardado,granado,gowen,goodale,flinn,fleetwood,fitz,durkee,duprey,dipietro,dilley,clyburn,brawley,beckley,arana,weatherby,vollmer,vestal,tunnell,trigg,tingle,takahashi,sweatt,storer,snapp,shiver,rooker,rathbun,poisson,perrine,perri,parmer,parke,pare,papa,palmieri,midkiff,mecham,mccomas,mcalpine,lovelady,lillard,lally,knopp,kile,kiger,haile,gupta,goldsberry,gilreath,fulks,friesen,franzen,flack,findlay,ferland,dreyer,dore,dennard,deckard,debose,crim,coulombe,chancey,cantor,branton,bissell,barns,woolard,witham,wasserman,spiegel,shoffner,scholz,ruch,rossman,petry,palacio,paez,neary,mortenson,millsap,miele,menke,mckim,mcanally,martines,lemley,larochelle,klaus,klatt,kaufmann,kapp,helmer,hedge,halloran,glisson,frechette,fontana,eagan,distefano,danley,creekmore,chartier,chaffee,carillo,burg,bolinger,berkley,benz,basso,bash,zelaya,woodring,witkowski,wilmot,wilkens,wieland,verdugo,urquhart,tsai,timms,swiger,swaim,sussman,pires,molnar,mcatee,lowder,loos,linker,landes,kingery,hufford,higa,hendren,hammack,hamann,gillam,gerhardt,edelman,delk,deans,curl,constantine,cleaver,claar,casiano,carruth,carlyle,brophy,bolanos,bibbs,bessette,beggs,baugher,bartel,averill,andresen,amin,adames,valente,turnbow,swink,sublett,stroh,stringfellow,ridgway,pugliese,poteat,ohare,neubauer,murchison,mingo,lemmons,kwon,kellam,kean,jarmon,hyden,hudak,hollinger,henkel,hemingway,hasson,hansel,halter,haire,ginsberg,gillispie,fogel,flory,etter,elledge,eckman,deas,currin,crafton,coomer,colter,claxton,bulter,braddock,bowyer,binns,bellows,baskerville,barros,ansley,woolf,wight,waldman,wadley,tull,trull,tesch,stouffer,stadler,slay,shubert,sedillo,santacruz,reinke,poynter,neri,neale,mowry,moralez,monger,mitchum,merryman,manion,macdougall,litchfield,levitt,lepage,lasalle,khoury,kavanagh,karns,ivie,huebner,hodgkins,halpin,garica,eversole,dutra,dunagan,duffey,dillman,dillion,deville,dearborn,damato,courson,coulson,burdine,bousquet,bonin,bish,atencio,westbrooks,wages,vaca,toner,tillis,swett,struble,stanfill,solorzano,slusher,sipple,silvas,shults,schexnayder,saez,rodas,rager,pulver,penton,paniagua,meneses,mcfarlin,mcauley,matz,maloy,magruder,lohman,landa,lacombe,jaimes,holzer,holst,heil,hackler,grundy,gilkey,farnham,durfee,dunton,dunston,duda,dews,craver,corriveau,conwell,colella,chambless,bremer,boutte,bourassa,blaisdell,backman,babineaux,audette,alleman,towner,taveras,tarango,sullins,suiter,stallard,solberg,schlueter,poulos,pimental,owsley,okelley,moffatt,metcalfe,meekins,medellin,mcglynn,mccowan,marriott,marable,lennox,lamoureux,koss,kerby,karp,isenberg,howze,hockenberry,highsmith,hallmark,gusman,greeley,giddings,gaudet,gallup,fleenor,eicher,edington,dimaggio,dement,demello,decastro,bushman,brundage,brooker,bourg,blackstock,bergmann,beaton,banister,argo,appling,wortman,watterson,villalpando,tillotson,tighe,sundberg,sternberg,stamey,shipe,seeger,scarberry,sattler,sain,rothstein,poteet,plowman,pettiford,penland,partain,pankey,oyler,ogletree,ogburn,moton,merkel,lucier,lakey,kratz,kinser,kershaw,josephson,imhoff,hendry,hammon,frisbie,frawley,fraga,forester,eskew,emmert,drennan,doyon,dandridge,cawley,carvajal,bracey,belisle,batey,ahner,wysocki,weiser,veliz,tincher,sansone,sankey,sandstrom,rohrer,risner,pridemore,pfeffer,persinger,peery,oubre,nowicki,musgrave,murdoch,mullinax,mccary,mathieu,livengood,kyser,klink,kimes,kellner,kavanaugh,kasten,imes,hoey,hinshaw,hake,gurule,grube,grillo,geter,gatto,garver,garretson,farwell,eiland,dunford,decarlo,corso,colman,collard,cleghorn,chasteen,cavender,carlile,calvo,byerly,brogdon,broadwater,breault,bono,bergin,behr,ballenger,amick,tamez,stiffler,steinke,simmon,shankle,schaller,salmons,sackett,saad,rideout,ratcliffe,ranson,plascencia,petterson,olszewski,olney,olguin,nilsson,nevels,morelli,montiel,monge,michaelson,mertens,mcchesney,mcalpin,mathewson,loudermilk,lineberry,liggett,kinlaw,kight,jost,hereford,hardeman,halpern,halliday,hafer,gaul,friel,freitag,forsberg,evangelista,doering,dicarlo,dendy,delp,deguzman,dameron,curtiss,cosper,cauthen,bradberry,bouton,bonnell,bixby,bieber,beveridge,bedwell,barhorst,bannon,baltazar,baier,ayotte,attaway,arenas,abrego,turgeon,tunstall,thaxton,tenorio,stotts,sthilaire,shedd,seabolt,scalf,salyers,ruhl,rowlett,robinett,pfister,perlman,pepe,parkman,nunnally,norvell,napper,modlin,mckellar,mcclean,mascarenas,leibowitz,ledezma,kuhlman,kobayashi,hunley,holmquist,hinkley,hazard,hartsell,gribble,gravely,fifield,eliason,doak,crossland,carleton,bridgeman,bojorquez,boggess,auten,woosley,whiteley,wexler,twomey,tullis,townley,standridge,santoyo,rueda,riendeau,revell,pless,ottinger,nigro,nickles,mulvey,menefee,mcshane,mcloughlin,mckinzie,markey,lockridge,lipsey,knisley,knepper,kitts,kiel,jinks,hathcock,godin,gallego,fikes,fecteau,estabrook,ellinger,dunlop,dudek,countryman,chauvin,chatham,bullins,brownfield,boughton,bloodworth,bibb,baucom,barbieri,aubin,armitage,alessi,absher,abbate,zito,woolery,wiggs,wacker,tynes,tolle,telles,tarter,swarey,strode,stockdale,stalnaker,spina,schiff,saari,risley,rameriz,rakes,pettaway,penner,paulus,palladino,omeara,montelongo,melnick,mehta,mcgary,mccourt,mccollough,marchetti,manzanares,lowther,leiva,lauderdale,lafontaine,kowalczyk,knighton,joubert,jaworski,huth,hurdle,housley,hackman,gulick,gordy,gilstrap,gehrke,gebhart,gaudette,foxworth,endres,dunkle,cimino,caddell,brauer,braley,bodine,blackmore,belden,backer,ayer,andress,wisner,vuong,valliere,twigg,tavarez,strahan,steib,staub,sowder,seiber,schutt,scharf,schade,rodriques,risinger,renshaw,rahman,presnell,piatt,nieman,nevins,mcilwain,mcgaha,mccully,mccomb,massengale,macedo,lesher,kearse,jauregui,husted,hudnall,holmberg,hertel,hardie,glidewell,frausto,fassett,dalessandro,dahlgren,corum,constantino,conlin,colquitt,colombo,claycomb,cardin,buller,boney,bocanegra,biggers,benedetto,araiza,andino,albin,zorn,werth,weisman,walley,vanegas,ulibarri,towe,tedford,teasley,suttle,steffens,stcyr,squire,singley,sifuentes,shuck,schram,sass,rieger,ridenhour,rickert,richerson,rayborn,rabe,raab,pendley,pastore,ordway,moynihan,mellott,mckissick,mcgann,mccready,mauney,marrufo,lenhart,lazar,lafave,keele,kautz,jardine,jahnke,jacobo,hord,hardcastle,hageman,giglio,gehring,fortson,duque,duplessis,dicken,derosier,deitz,dalessio,cram,castleman,candelario,callison,caceres,bozarth,biles,bejarano,bashaw,avina,armentrout,alverez,acord,waterhouse,vereen,vanlandingham,strawser,shotwell,severance,seltzer,schoonmaker,schock,schaub,schaffner,roeder,rodrigez,riffe,rasberry,rancourt,railey,quade,pursley,prouty,perdomo,oxley,osterman,nickens,murphree,mounts,merida,maus,mattern,masse,martinelli,mangan,lutes,ludwick,loney,laureano,lasater,knighten,kissinger,kimsey,kessinger,honea,hollingshead,hockett,heyer,heron,gurrola,gove,glasscock,gillett,galan,featherstone,eckhardt,duron,dunson,dasher,culbreth,cowden,cowans,claypoole,churchwell,chabot,caviness,cater,caston,callan,byington,burkey,boden,beckford,atwater,archambault,alvey,alsup,whisenant,weese,voyles,verret,tsang,tessier,sweitzer,sherwin,shaughnessy,revis,remy,prine,philpott,peavy,paynter,parmenter,ovalle,offutt,nightingale,newlin,nakano,myatt,muth,mohan,mcmillon,mccarley,mccaleb,maxson,marinelli,maley,liston,letendre,kain,huntsman,hirst,hagerty,gulledge,greenway,grajeda,gorton,goines,gittens,frederickson,fanelli,embree,eichelberger,dunkin,dixson,dillow,defelice,chumley,burleigh,borkowski,binette,biggerstaff,berglund,beller,audet,arbuckle,allain,alfano,youngman,wittman,weintraub,vanzant,vaden,twitty,stollings,standifer,sines,shope,scalise,saville,posada,pisano,otte,nolasco,mier,merkle,mendiola,melcher,mejias,mcmurry,mccalla,markowitz,manis,mallette,macfarlane,lough,looper,landin,kittle,kinsella,kinnard,hobart,helman,hellman,hartsock,halford,hage,gordan,glasser,gayton,gattis,gastelum,gaspard,frisch,fitzhugh,eckstein,eberly,dowden,despain,crumpler,crotty,cornelison,chouinard,chamness,catlin,cann,bumgardner,budde,branum,bradfield,braddy,borst,birdwell,bazan,banas,bade,arango,ahearn,addis,zumwalt,wurth,wilk,widener,wagstaff,urrutia,terwilliger,tart,steinman,staats,sloat,rives,riggle,revels,reichard,prickett,poff,pitzer,petro,pell,northrup,nicks,moline,mielke,maynor,mallon,magness,lingle,lindell,lieb,lesko,lebeau,lammers,lafond,kiernan,ketron,jurado,holmgren,hilburn,hayashi,hashimoto,harbaugh,guillot,gard,froehlich,feinberg,falco,dufour,drees,doney,diep,delao,daves,dail,crowson,coss,congdon,carner,camarena,butterworth,burlingame,bouffard,bloch,bilyeu,barta,bakke,baillargeon,avent,aquilar,zeringue,yarber,wolfson,vogler,voelker,truss,troxell,thrift,strouse,spielman,sistrunk,sevigny,schuller,schaaf,ruffner,routh,roseman,ricciardi,peraza,pegram,overturf,olander,odaniel,millner,melchor,maroney,machuca,macaluso,livesay,layfield,laskowski,kwiatkowski,kilby,hovey,heywood,hayman,havard,harville,haigh,hagood,grieco,glassman,gebhardt,fleischer,fann,elson,eccles,cunha,crumb,blakley,bardwell,abshire,woodham,wines,welter,wargo,varnado,tutt,traynor,swaney,stricker,stoffel,stambaugh,sickler,shackleford,selman,seaver,sansom,sanmiguel,royston,rourke,rockett,rioux,puleo,pitchford,nardi,mulvaney,middaugh,malek,leos,lathan,kujawa,kimbro,killebrew,houlihan,hinckley,herod,hepler,hamner,hammel,hallowell,gonsalez,gingerich,gambill,funkhouser,fricke,fewell,falkner,endsley,dulin,drennen,deaver,dambrosio,chadwell,castanon,burkes,brune,brisco,brinker,bowker,boldt,berner,beaumont,beaird,bazemore,barrick,albano,younts,wunderlich,weidman,vanness,toland,theobald,stickler,steiger,stanger,spies,spector,sollars,smedley,seibel,scoville,saito,rummel,rowles,rouleau,roos,rogan,roemer,ream,raya,purkey,priester,perreira,penick,paulin,parkins,overcash,oleson,neves,muldrow,minard,midgett,michalak,melgar,mcentire,mcauliffe,marte,lydon,lindholm,leyba,langevin,lagasse,lafayette,kesler,kelton,kaminsky,jaggers,humbert,huck,howarth,hinrichs,higley,gupton,guimond,gravois,giguere,fretwell,fontes,feeley,faucher,eichhorn,ecker,earp,dole,dinger,derryberry,demars,deel,copenhaver,collinsworth,colangelo,cloyd,claiborne,caulfield,carlsen,calzada,caffey,broadus,brenneman,bouie,bodnar,blaney,blanc,beltz,behling,barahona,yockey,winkle,windom,wimer,villatoro,trexler,teran,taliaferro,sydnor,swinson,snelling,smtih,simonton,simoneaux,simoneau,sherrer,seavey,scheel,rushton,rupe,ruano,rippy,reiner,reiff,rabinowitz,quach,penley,odle,nock,minnich,mckown,mccarver,mcandrew,longley,laux,lamothe,lafreniere,kropp,krick,kates,jepson,huie,howse,howie,henriques,haydon,haught,hatter,hartzog,harkey,grimaldo,goshorn,gormley,gluck,gilroy,gillenwater,giffin,fluker,feder,eyre,eshelman,eakins,detwiler,delrosario,davisson,catalan,canning,calton,brammer,botelho,blakney,bartell,averett,askins,aker,witmer,winkelman,widmer,whittier,weitzel,wardell,wagers,ullman,tupper,tingley,tilghman,talton,simard,seda,scheller,sala,rundell,rost,ribeiro,rabideau,primm,pinon,peart,ostrom,ober,nystrom,nussbaum,naughton,murr,moorhead,monti,monteiro,melson,meissner,mclin,mcgruder,marotta,makowski,majewski,madewell,lunt,lukens,leininger,lebel,lakin,kepler,jaques,hunnicutt,hungerford,hoopes,hertz,heins,halliburton,grosso,gravitt,glasper,gallman,gallaway,funke,fulbright,falgout,eakin,dostie,dorado,dewberry,derose,cutshall,crampton,costanzo,colletti,cloninger,claytor,chiang,campagna,burd,brokaw,broaddus,bretz,brainard,binford,bilbrey,alpert,aitken,ahlers,zajac,woolfolk,witten,windle,wayland,tramel,tittle,talavera,suter,straley,specht,sommerville,soloman,skeens,sigman,sibert,shavers,schuck,schmit,sartain,sabol,rosenblatt,rollo,rashid,rabb,polston,nyberg,northrop,navarra,muldoon,mikesell,mcdougald,mcburney,mariscal,lozier,lingerfelt,legere,latour,lagunas,lacour,kurth,killen,kiely,kayser,kahle,isley,huertas,hower,hinz,haugh,gumm,galicia,fortunato,flake,dunleavy,duggins,doby,digiovanni,devaney,deltoro,cribb,corpuz,coronel,coen,charbonneau,caine,burchette,blakey,blakemore,bergquist,beene,beaudette,bayles,ballance,bakker,bailes,asberry,arwood,zucker,willman,whitesell,wald,walcott,vancleave,trump,strasser,simas,shick,schleicher,schaal,saleh,rotz,resnick,rainer,partee,ollis,oller,oday,noles,munday,mong,millican,merwin,mazzola,mansell,magallanes,llanes,lewellen,lepore,kisner,keesee,jeanlouis,ingham,hornbeck,hawn,hartz,harber,haffner,gutshall,guth,grays,gowan,finlay,finkelstein,eyler,enloe,dungan,diez,dearman,cull,crosson,chronister,cassity,campion,callihan,butz,breazeale,blumenthal,berkey,batty,batton,arvizu,alderete,aldana,albaugh,abernethy,wolter,wille,tweed,tollefson,thomasson,teter,testerman,sproul,spates,southwick,soukup,skelly,senter,sealey,sawicki,sargeant,rossiter,rosemond,repp,pifer,ormsby,nickelson,naumann,morabito,monzon,millsaps,millen,mcelrath,marcoux,mantooth,madson,macneil,mackinnon,louque,leister,lampley,kushner,krouse,kirwan,jessee,janson,jahn,jacquez,islas,hutt,holladay,hillyer,hepburn,hensel,harrold,gingrich,geis,gales,fults,finnell,ferri,featherston,epley,ebersole,eames,dunigan,drye,dismuke,devaughn,delorenzo,damiano,confer,collum,clower,clow,claussen,clack,caylor,cawthon,casias,carreno,bluhm,bingaman,bewley,belew,beckner,auld,amey,wolfenbarger,wilkey,wicklund,waltman,villalba,valero,valdovinos,ullrich,tyus,twyman,trost,tardif,tanguay,stripling,steinbach,shumpert,sasaki,sappington,sandusky,reinhold,reinert,quijano,placencia,pinkard,phinney,perrotta,pernell,parrett,oxendine,owensby,orman,nuno,mori,mcroberts,mcneese,mckamey,mccullum,markel,mardis,maines,lueck,lubin,lefler,leffler,larios,labarbera,kershner,josey,jeanbaptiste,izaguirre,hermosillo,haviland,hartshorn,hafner,ginter,getty,franck,fiske,dufrene,doody,davie,dangerfield,dahlberg,cuthbertson,crone,coffelt,chidester,chesson,cauley,caudell,cantara,campo,caines,bullis,bucci,brochu,bogard,bickerstaff,benning,arzola,antonelli,adkinson,zellers,wulf,worsley,woolridge,whitton,westerfield,walczak,vassar,truett,trueblood,trawick,townsley,topping,tobar,telford,steverson,stagg,sitton,sill,sergent,schoenfeld,sarabia,rutkowski,rubenstein,rigdon,prentiss,pomerleau,plumlee,philbrick,patnode,oloughlin,obregon,nuss,morell,mikell,mele,mcinerney,mcguigan,mcbrayer,lollar,kuehl,kinzer,kamp,joplin,jacobi,howells,holstein,hedden,hassler,harty,halle,greig,gouge,goodrum,gerhart,geier,geddes,gast,forehand,ferree,fendley,feltner,esqueda,encarnacion,eichler,egger,edmundson,eatmon,doud,donohoe,donelson,dilorenzo,digiacomo,diggins,delozier,dejong,danford,crippen,coppage,cogswell,clardy,cioffi,cabe,brunette,bresnahan,blomquist,blackstone,biller,bevis,bevan,bethune,benbow,baty,basinger,balcom,andes,aman,aguero,adkisson,yandell,wilds,whisenhunt,weigand,weeden,voight,villar,trottier,tillett,suazo,setser,scurry,schuh,schreck,schauer,samora,roane,rinker,reimers,ratchford,popovich,parkin,natal,melville,mcbryde,magdaleno,loehr,lockman,lingo,leduc,larocca,lamere,laclair,krall,korte,koger,jalbert,hughs,higbee,henton,heaney,haith,gump,greeson,goodloe,gholston,gasper,gagliardi,fregoso,farthing,fabrizio,ensor,elswick,elgin,eklund,eaddy,drouin,dorton,dizon,derouen,deherrera,davy,dampier,cullum,culley,cowgill,cardoso,cardinale,brodsky,broadbent,brimmer,briceno,branscum,bolyard,boley,bennington,beadle,baur,ballentine,azure,aultman,arciniega,aguila,aceves,yepez,woodrum,wethington,weissman,veloz,trusty,troup,trammel,tarpley,stivers,steck,sprayberry,spraggins,spitler,spiers,sohn,seagraves,schiffman,rudnick,rizo,riccio,rennie,quackenbush,puma,plott,pearcy,parada,paiz,munford,moskowitz,mease,mcnary,mccusker,lozoya,longmire,loesch,lasky,kuhlmann,krieg,koziol,kowalewski,konrad,kindle,jowers,jolin,jaco,horgan,hine,hileman,hepner,heise,heady,hawkinson,hannigan,haberman,guilford,grimaldi,garton,gagliano,fruge,follett,fiscus,ferretti,ebner,easterday,eanes,dirks,dimarco,depalma,deforest,cruce,craighead,christner,candler,cadwell,burchell,buettner,brinton,brazier,brannen,brame,bova,bomar,blakeslee,belknap,bangs,balzer,athey,armes,alvis,alverson,alvardo,yeung,wheelock,westlund,wessels,volkman,threadgill,thelen,tague,symons,swinford,sturtevant,straka,stier,stagner,segarra,seawright,rutan,roux,ringler,riker,ramsdell,quattlebaum,purifoy,poulson,permenter,peloquin,pasley,pagel,osman,obannon,nygaard,newcomer,munos,motta,meadors,mcquiston,mcniel,mcmann,mccrae,mayne,matte,legault,lechner,kucera,krohn,kratzer,koopman,jeske,horrocks,hock,hibbler,hesson,hersh,harvin,halvorsen,griner,grindle,gladstone,garofalo,frampton,forbis,eddington,diorio,dingus,dewar,desalvo,curcio,creasy,cortese,cordoba,connally,cluff,cascio,capuano,canaday,calabro,bussard,brayton,borja,bigley,arnone,arguelles,acuff,zamarripa,wooton,widner,wideman,threatt,thiele,templin,teeters,synder,swint,swick,sturges,stogner,stedman,spratt,siegfried,shetler,scull,savino,sather,rothwell,rook,rone,rhee,quevedo,privett,pouliot,poche,pickel,petrillo,pellegrini,peaslee,partlow,otey,nunnery,morelock,morello,meunier,messinger,mckie,mccubbin,mccarron,lerch,lavine,laverty,lariviere,lamkin,kugler,krol,kissel,keeter,hubble,hickox,hetzel,hayner,hagy,hadlock,groh,gottschalk,goodsell,gassaway,garrard,galligan,firth,fenderson,feinstein,etienne,engleman,emrick,ellender,drews,doiron,degraw,deegan,dart,crissman,corr,cookson,coil,cleaves,charest,chapple,chaparro,castano,carpio,byer,bufford,bridgewater,bridgers,brandes,borrero,bonanno,aube,ancheta,abarca,abad,wooster,wimbush,willhite,willams,wigley,weisberg,wardlaw,vigue,vanhook,unknow,torre,tasker,tarbox,strachan,slover,shamblin,semple,schuyler,schrimsher,sayer,salzman,rubalcava,riles,reneau,reichel,rayfield,rabon,pyatt,prindle,poss,polito,plemmons,pesce,perrault,pereyra,ostrowski,nilsen,niemeyer,munsey,mundell,moncada,miceli,meader,mcmasters,mckeehan,matsumoto,marron,marden,lizarraga,lingenfelter,lewallen,langan,lamanna,kovac,kinsler,kephart,keown,kass,kammerer,jeffreys,hysell,hosmer,hardnett,hanner,guyette,greening,glazer,ginder,fromm,fluellen,finkle,fessler,essary,eisele,duren,dittmer,crochet,cosentino,cogan,coelho,cavin,carrizales,campuzano,brough,bopp,bookman,bobb,blouin,beesley,battista,bascom,bakken,badgett,arneson,anselmo,albino,ahumada,woodyard,wolters,wireman,willison,warman,waldrup,vowell,vantassel,twombly,toomer,tennison,teets,tedeschi,swanner,stutz,stelly,sheehy,schermerhorn,scala,sandidge,salters,salo,saechao,roseboro,rolle,ressler,renz,renn,redford,raposa,rainbolt,pelfrey,orndorff,oney,nolin,nimmons,nardone,myhre,morman,menjivar,mcglone,mccammon,maxon,marciano,manus,lowrance,lorenzen,lonergan,lollis,littles,lindahl,lamas,lach,kuster,krawczyk,knuth,knecht,kirkendall,keitt,keever,kantor,jarboe,hoye,houchens,holter,holsinger,hickok,helwig,helgeson,hassett,harner,hamman,hames,hadfield,goree,goldfarb,gaughan,gaudreau,gantz,gallion,frady,foti,flesher,ferrin,faught,engram,donegan,desouza,degroot,cutright,crowl,criner,coan,clinkscales,chewning,chavira,catchings,carlock,bulger,buenrostro,bramblett,brack,boulware,bookout,bitner,birt,baranowski,baisden,allmon,acklin,yoakum,wilbourn,whisler,weinberger,washer,vasques,vanzandt,vanatta,troxler,tomes,tindle,tims,throckmorton,thach,stpeter,stlaurent,stenson,spry,spitz,songer,snavely,shroyer,shortridge,shenk,sevier,seabrook,scrivner,saltzman,rosenberry,rockwood,robeson,roan,reiser,ramires,raber,posner,popham,piotrowski,pinard,peterkin,pelham,peiffer,peay,nadler,musso,millett,mestas,mcgowen,marques,marasco,manriquez,manos,mair,lipps,leiker,krumm,knorr,kinslow,kessel,kendricks,kelm,irick,ickes,hurlburt,horta,hoekstra,heuer,helmuth,heatherly,hampson,hagar,haga,greenlaw,grau,godbey,gingras,gillies,gibb,gayden,gauvin,garrow,fontanez,florio,finke,fasano,ezzell,ewers,eveland,eckenrode,duclos,drumm,dimmick,delancey,defazio,dashiell,cusack,crowther,crigger,cray,coolidge,coldiron,cleland,chalfant,cassel,camire,cabrales,broomfield,brittingham,brisson,brickey,braziel,brazell,bragdon,boulanger,boman,bohannan,beem,barre,azar,ashbaugh,armistead,almazan,adamski,zendejas,winburn,willaims,wilhoit,westberry,wentzel,wendling,visser,vanscoy,vankirk,vallee,tweedy,thornberry,sweeny,spradling,spano,smelser,shim,sechrist,schall,scaife,rugg,rothrock,roesler,riehl,ridings,render,ransdell,radke,pinero,petree,pendergast,peluso,pecoraro,pascoe,panek,oshiro,navarrette,murguia,moores,moberg,michaelis,mcwhirter,mcsweeney,mcquade,mccay,mauk,mariani,marceau,mandeville,maeda,lunde,ludlow,loeb,lindo,linderman,leveille,leith,larock,lambrecht,kulp,kinsley,kimberlin,kesterson,hoyos,helfrich,hanke,grisby,goyette,gouveia,glazier,gile,gerena,gelinas,gasaway,funches,fujimoto,flynt,fenske,fellers,fehr,eslinger,escalera,enciso,duley,dittman,dineen,diller,devault,collings,clymer,clowers,chavers,charland,castorena,castello,camargo,bunce,bullen,boyes,borchers,borchardt,birnbaum,birdsall,billman,benites,bankhead,ange,ammerman,adkison,winegar,wickman,warr,warnke,villeneuve,veasey,vassallo,vannatta,vadnais,twilley,towery,tomblin,tippett,theiss,talkington,talamantes,swart,swanger,streit,stines,stabler,spurling,sobel,sine,simmers,shippy,shiflett,shearin,sauter,sanderlin,rusch,runkle,ruckman,rorie,roesch,richert,rehm,randel,ragin,quesenberry,puentes,plyler,plotkin,paugh,oshaughnessy,ohalloran,norsworthy,niemann,nader,moorefield,mooneyham,modica,miyamoto,mickel,mebane,mckinnie,mazurek,mancilla,lukas,lovins,loughlin,lotz,lindsley,liddle,levan,lederman,leclaire,lasseter,lapoint,lamoreaux,lafollette,kubiak,kirtley,keffer,kaczmarek,housman,hiers,hibbert,herrod,hegarty,hathorn,greenhaw,grafton,govea,futch,furst,franko,forcier,foran,flickinger,fairfield,eure,emrich,embrey,edgington,ecklund,eckard,durante,deyo,delvecchio,dade,currey,creswell,cottrill,casavant,cartier,cargile,capel,cammack,calfee,burse,burruss,brust,brousseau,bridwell,braaten,borkholder,bloomquist,bjork,bartelt,amburgey,yeary,whitefield,vinyard,vanvalkenburg,twitchell,timmins,tapper,stringham,starcher,spotts,slaugh,simonsen,sheffer,sequeira,rosati,rhymes,quint,pollak,peirce,patillo,parkerson,paiva,nilson,nevin,narcisse,mitton,merriam,merced,meiners,mckain,mcelveen,mcbeth,marsden,marez,manke,mahurin,mabrey,luper,krull,hunsicker,hornbuckle,holtzclaw,hinnant,heston,hering,hemenway,hegwood,hearns,halterman,guiterrez,grote,granillo,grainger,glasco,gilder,garren,garlock,garey,fryar,fredricks,fraizer,foshee,ferrel,felty,everitt,evens,esser,elkin,eberhart,durso,duguay,driskill,doster,dewall,deveau,demps,demaio,delreal,deleo,darrah,cumberbatch,culberson,cranmer,cordle,colgan,chesley,cavallo,castellon,castelli,carreras,carnell,carlucci,bontrager,blumberg,blasingame,becton,artrip,andujar,alkire,alder,zukowski,zuckerman,wroblewski,wrigley,woodside,wigginton,westman,westgate,werts,washam,wardlow,walser,waiters,tadlock,stringfield,stimpson,stickley,standish,spurlin,spindler,speller,spaeth,sotomayor,sluder,shryock,shepardson,shatley,scannell,santistevan,rosner,resto,reinhard,rathburn,prisco,poulsen,pinney,phares,pennock,pastrana,oviedo,ostler,nauman,mulford,moise,moberly,mirabal,metoyer,metheny,mentzer,meldrum,mcinturff,mcelyea,mcdougle,massaro,lumpkins,loveday,lofgren,lirette,lesperance,lefkowitz,ledger,lauzon,lachapelle,klassen,keough,kempton,kaelin,jeffords,hsieh,hoyer,horwitz,hoeft,hennig,haskin,gourdine,golightly,girouard,fulgham,fritsch,freer,frasher,foulk,firestone,fiorentino,fedor,ensley,englehart,eells,dunphy,donahoe,dileo,dibenedetto,dabrowski,crick,coonrod,conder,coddington,chunn,chaput,cerna,carreiro,calahan,braggs,bourdon,bollman,bittle,bauder,barreras,aubuchon,anzalone,adamo,zerbe,willcox,westberg,weikel,waymire,vroman,vinci,vallejos,truesdell,troutt,trotta,tollison,toles,tichenor,symonds,surles,strayer,stgeorge,sroka,sorrentino,solares,snelson,silvestri,sikorski,shawver,schumaker,schorr,schooley,scates,satterlee,satchell,rymer,roselli,robitaille,riegel,regis,reames,provenzano,priestley,plaisance,pettey,palomares,nowakowski,monette,minyard,mclamb,mchone,mccarroll,masson,magoon,maddy,lundin,licata,leonhardt,landwehr,kircher,kinch,karpinski,johannsen,hussain,houghtaling,hoskinson,hollaway,holeman,hobgood,hiebert,goggin,geissler,gadbois,gabaldon,fleshman,flannigan,fairman,eilers,dycus,dunmire,duffield,dowler,deloatch,dehaan,deemer,clayborn,christofferso,chilson,chesney,chatfield,carron,canale,brigman,branstetter,bosse,borton,bonar,biron,barroso,arispe,zacharias,zabel,yaeger,woolford,whetzel,weakley,veatch,vandeusen,tufts,troxel,troche,traver,townsel,talarico,swilley,sterrett,stenger,speakman,sowards,sours,souders,souder,soles,sobers,snoddy,smither,shute,shoaf,shahan,schuetz,scaggs,santini,rosson,rolen,robidoux,rentas,recio,pixley,pawlowski,pawlak,paull,overbey,orear,oliveri,oldenburg,nutting,naugle,mossman,misner,milazzo,michelson,mcentee,mccullar,mccree,mcaleer,mazzone,mandell,manahan,malott,maisonet,mailloux,lumley,lowrie,louviere,lipinski,lindemann,leppert,leasure,labarge,kubik,knisely,knepp,kenworthy,kennelly,kelch,kanter,houchin,hosley,hosler,hollon,holleman,heitman,haggins,gwaltney,goulding,gorden,geraci,gathers,frison,feagin,falconer,espada,erving,erikson,eisenhauer,ebeling,durgin,dowdle,dinwiddie,delcastillo,dedrick,crimmins,covell,cournoyer,coria,cohan,cataldo,carpentier,canas,campa,brode,brashears,blaser,bicknell,bednar,barwick,ascencio,althoff,almodovar,alamo,zirkle,zabala,wolverton,winebrenner,wetherell,westlake,wegener,weddington,tuten,trosclair,tressler,theroux,teske,swinehart,swensen,sundquist,southall,socha,sizer,silverberg,shortt,shimizu,sherrard,shaeffer,scheid,scheetz,saravia,sanner,rubinstein,rozell,romer,rheaume,reisinger,randles,pullum,petrella,payan,nordin,norcross,nicoletti,nicholes,newbold,nakagawa,monteith,milstead,milliner,mellen,mccardle,liptak,leitch,latimore,larrison,landau,laborde,koval,izquierdo,hymel,hoskin,holte,hoefer,hayworth,hausman,harrill,harrel,hardt,gully,groover,grinnell,greenspan,graver,grandberry,gorrell,goldenberg,goguen,gilleland,fuson,feldmann,everly,dyess,dunnigan,downie,dolby,deatherage,cosey,cheever,celaya,caver,cashion,caplinger,cansler,byrge,bruder,breuer,breslin,brazelton,botkin,bonneau,bondurant,bohanan,bogue,bodner,boatner,blatt,bickley,belliveau,beiler,beier,beckstead,bachmann,atkin,altizer,alloway,allaire,albro,abron,zellmer,yetter,yelverton,wiens,whidden,viramontes,vanwormer,tarantino,tanksley,sumlin,strauch,strang,stice,spahn,sosebee,sigala,shrout,seamon,schrum,schneck,schantz,ruddy,romig,roehl,renninger,reding,polak,pohlman,pasillas,oldfield,oldaker,ohanlon,ogilvie,norberg,nolette,neufeld,nellis,mummert,mulvihill,mullaney,monteleone,mendonca,meisner,mcmullan,mccluney,mattis,massengill,manfredi,luedtke,lounsbury,liberatore,lamphere,laforge,jourdan,iorio,iniguez,ikeda,hubler,hodgdon,hocking,heacock,haslam,haralson,hanshaw,hannum,hallam,haden,garnes,garces,gammage,gambino,finkel,faucett,ehrhardt,eggen,dusek,durrant,dubay,dones,depasquale,delucia,degraff,decamp,davalos,cullins,conard,clouser,clontz,cifuentes,chappel,chaffins,celis,carwile,byram,bruggeman,bressler,brathwaite,brasfield,bradburn,boose,bodie,blosser,bertsch,bernardi,bernabe,bengtson,barrette,astorga,alday,albee,abrahamson,yarnell,wiltse,wiebe,waguespack,vasser,upham,turek,traxler,torain,tomaszewski,tinnin,tiner,tindell,styron,stahlman,staab,skiba,sheperd,seidl,secor,schutte,sanfilippo,ruder,rondon,rearick,procter,prochaska,pettengill,pauly,neilsen,nally,mullenax,morano,meads,mcnaughton,mcmurtry,mcmath,mckinsey,matthes,massenburg,marlar,margolis,malin,magallon,mackin,lovette,loughran,loring,longstreet,loiselle,lenihan,kunze,koepke,kerwin,kalinowski,kagan,innis,innes,holtzman,heinemann,harshman,haider,haack,grondin,grissett,greenawalt,goudy,goodlett,goldston,gokey,gardea,galaviz,gafford,gabrielson,furlow,fritch,fordyce,folger,elizalde,ehlert,eckhoff,eccleston,ealey,dubin,diemer,deschamps,delapena,decicco,debolt,cullinan,crittendon,crase,cossey,coppock,coots,colyer,cluck,chamberland,burkhead,bumpus,buchan,borman,birkholz,berardi,benda,behnke,barter,amezquita,wotring,wirtz,wingert,wiesner,whitesides,weyant,wainscott,venezia,varnell,tussey,thurlow,tabares,stiver,stell,starke,stanhope,stanek,sisler,sinnott,siciliano,shehan,selph,seager,scurlock,scranton,santucci,santangelo,saltsman,rogge,rettig,renwick,reidy,reider,redfield,premo,parente,paolucci,palmquist,ohler,netherton,mutchler,morita,mistretta,minnis,middendorf,menzel,mendosa,mendelson,meaux,mcspadden,mcquaid,mcnatt,manigault,maney,mager,lukes,lopresti,liriano,letson,lechuga,lazenby,lauria,larimore,krupp,krupa,kopec,kinchen,kifer,kerney,kerner,kennison,kegley,karcher,justis,johson,jellison,janke,huskins,holzman,hinojos,hefley,hatmaker,harte,halloway,hallenbeck,goodwyn,glaspie,geise,fullwood,fryman,frakes,fraire,farrer,enlow,engen,ellzey,eckles,earles,dunkley,drinkard,dreiling,draeger,dinardo,dills,desroches,desantiago,curlee,crumbley,critchlow,coury,courtright,coffield,cleek,charpentier,cardone,caples,cantin,buntin,bugbee,brinkerhoff,brackin,bourland,blassingame,beacham,banning,auguste,andreasen,amann,almon,alejo,adelman,abston,yerger,wymer,woodberry,windley,whiteaker,westfield,weibel,wanner,waldrep,villani,vanarsdale,utterback,updike,triggs,topete,tolar,tigner,thoms,tauber,tarvin,tally,swiney,sweatman,studebaker,stennett,starrett,stannard,stalvey,sonnenberg,smithey,sieber,sickles,shinault,segars,sanger,salmeron,rothe,rizzi,restrepo,ralls,ragusa,quiroga,papenfuss,oropeza,okane,mudge,mozingo,molinaro,mcvicker,mcgarvey,mcfalls,mccraney,matus,magers,llanos,livermore,linehan,leitner,laymon,lawing,lacourse,kwong,kollar,kneeland,kennett,kellett,kangas,janzen,hutter,huling,hofmeister,hewes,harjo,habib,guice,grullon,greggs,grayer,granier,grable,gowdy,giannini,getchell,gartman,garnica,ganey,gallimore,fetters,fergerson,farlow,fagundes,exley,esteves,enders,edenfield,easterwood,drakeford,dipasquale,desousa,deshields,deeter,dedmon,debord,daughtery,cutts,courtemanche,coursey,copple,coomes,collis,cogburn,clopton,choquette,chaidez,castrejon,calhoon,burbach,bulloch,buchman,bruhn,bohon,blough,baynes,barstow,zeman,zackery,yardley,yamashita,wulff,wilken,wiliams,wickersham,wible,whipkey,wedgeworth,walmsley,walkup,vreeland,verrill,umana,traub,swingle,summey,stroupe,stockstill,steffey,stefanski,statler,stapp,speights,solari,soderberg,shunk,shorey,shewmaker,sheilds,schiffer,schank,schaff,sagers,rochon,riser,rickett,reale,raglin,polen,plata,pitcock,percival,palen,orona,oberle,nocera,navas,nault,mullings,montejano,monreal,minick,middlebrook,meece,mcmillion,mccullen,mauck,marshburn,maillet,mahaney,magner,maclin,lucey,litteral,lippincott,leite,leaks,lamarre,jurgens,jerkins,jager,hurwitz,hughley,hotaling,horstman,hohman,hocker,hively,hipps,hessler,hermanson,hepworth,helland,hedlund,harkless,haigler,gutierez,grindstaff,glantz,giardina,gerken,gadsden,finnerty,farnum,encinas,drakes,dennie,cutlip,curtsinger,couto,cortinas,corby,chiasson,carle,carballo,brindle,borum,bober,blagg,berthiaume,beahm,batres,basnight,backes,axtell,atterberry,alvares,alegria,woodell,wojciechowski,winfree,winbush,wiest,wesner,wamsley,wakeman,verner,truex,trafton,toman,thorsen,theus,tellier,tallant,szeto,strope,stills,simkins,shuey,shaul,servin,serio,serafin,salguero,ryerson,rudder,ruark,rother,rohrbaugh,rohrbach,rohan,rogerson,risher,reeser,pryce,prokop,prins,priebe,prejean,pinheiro,petrone,petri,penson,pearlman,parikh,natoli,murakami,mullikin,mullane,motes,morningstar,mcveigh,mcgrady,mcgaughey,mccurley,marchan,manske,lusby,linde,likens,licon,leroux,lemaire,legette,laskey,laprade,laplant,kolar,kittredge,kinley,kerber,kanagy,jetton,janik,ippolito,inouye,hunsinger,howley,howery,horrell,holthaus,hiner,hilson,hilderbrand,hartzler,harnish,harada,hansford,halligan,hagedorn,gwynn,gudino,greenstein,greear,gracey,goudeau,goodner,ginsburg,gerth,gerner,fujii,frier,frenette,folmar,fleisher,fleischmann,fetzer,eisenman,earhart,dupuy,dunkelberger,drexler,dillinger,dilbeck,dewald,demby,deford,craine,chesnut,casady,carstens,carrick,carino,carignan,canchola,bushong,burman,buono,brownlow,broach,britten,brickhouse,boyden,boulton,borland,bohrer,blubaugh,bever,berggren,benevides,arocho,arends,amezcua,almendarez,zalewski,witzel,winkfield,wilhoite,vangundy,vanfleet,vanetten,vandergriff,urbanski,troiano,thibodaux,straus,stoneking,stjean,stillings,stange,speicher,speegle,smeltzer,slawson,simmonds,shuttleworth,serpa,senger,seidman,schweiger,schloss,schimmel,schechter,sayler,sabatini,ronan,rodiguez,riggleman,richins,reamer,prunty,porath,plunk,piland,philbrook,pettitt,perna,peralez,pascale,padula,oboyle,nivens,nickols,mundt,munden,montijo,mcmanis,mcgrane,mccrimmon,manzi,mangold,malick,mahar,maddock,losey,litten,leedy,leavell,ladue,krahn,kluge,junker,iversen,imler,hurtt,huizar,hubbert,howington,hollomon,holdren,hoisington,heiden,hauge,hartigan,gutirrez,griffie,greenhill,gratton,granata,gottfried,gertz,gautreaux,furry,furey,funderburg,flippen,fitzgibbon,drucker,donoghue,dildy,devers,detweiler,despres,denby,degeorge,cueto,cranston,courville,clukey,cirillo,chivers,caudillo,butera,bulluck,buckmaster,braunstein,bracamonte,bourdeau,bonnette".split(","),
45760us_tv_and_film:"you,i,to,that,it,me,what,this,know,i'm,no,have,my,don't,just,not,do,be,your,we,it's,so,but,all,well,oh,about,right,you're,get,here,out,going,like,yeah,if,can,up,want,think,that's,now,go,him,how,got,did,why,see,come,good,really,look,will,okay,back,can't,mean,tell,i'll,hey,he's,could,didn't,yes,something,because,say,take,way,little,make,need,gonna,never,we're,too,she's,i've,sure,our,sorry,what's,let,thing,maybe,down,man,very,there's,should,anything,said,much,any,even,off,please,doing,thank,give,thought,help,talk,god,still,wait,find,nothing,again,things,let's,doesn't,call,told,great,better,ever,night,away,believe,feel,everything,you've,fine,last,keep,does,put,around,stop,they're,i'd,guy,isn't,always,listen,wanted,guys,huh,those,big,lot,happened,thanks,won't,trying,kind,wrong,talking,guess,care,bad,mom,remember,getting,we'll,together,dad,leave,understand,wouldn't,actually,hear,baby,nice,father,else,stay,done,wasn't,course,might,mind,every,enough,try,hell,came,someone,you'll,whole,yourself,idea,ask,must,coming,looking,woman,room,knew,tonight,real,son,hope,went,hmm,happy,pretty,saw,girl,sir,friend,already,saying,next,job,problem,minute,thinking,haven't,heard,honey,matter,myself,couldn't,exactly,having,probably,happen,we've,hurt,boy,dead,gotta,alone,excuse,start,kill,hard,you'd,today,car,ready,without,wants,hold,wanna,yet,seen,deal,once,gone,morning,supposed,friends,head,stuff,worry,live,truth,face,forget,true,cause,soon,knows,telling,wife,who's,chance,run,move,anyone,person,bye,somebody,heart,miss,making,meet,anyway,phone,reason,damn,lost,looks,bring,case,turn,wish,tomorrow,kids,trust,check,change,anymore,least,aren't,working,makes,taking,means,brother,hate,ago,says,beautiful,gave,fact,crazy,sit,afraid,important,rest,fun,kid,word,watch,glad,everyone,sister,minutes,everybody,bit,couple,whoa,either,mrs,feeling,daughter,wow,gets,asked,break,promise,door,close,hand,easy,question,tried,far,walk,needs,mine,killed,hospital,anybody,alright,wedding,shut,able,die,perfect,stand,comes,hit,waiting,dinner,funny,husband,almost,pay,answer,cool,eyes,news,child,shouldn't,yours,moment,sleep,read,where's,sounds,sonny,pick,sometimes,bed,date,plan,hours,lose,hands,serious,shit,behind,inside,ahead,week,wonderful,fight,past,cut,quite,he'll,sick,it'll,eat,nobody,goes,save,seems,finally,lives,worried,upset,carly,met,brought,seem,sort,safe,weren't,leaving,front,shot,loved,asking,running,clear,figure,hot,felt,parents,drink,absolutely,how's,daddy,sweet,alive,sense,meant,happens,bet,blood,ain't,kidding,lie,meeting,dear,seeing,sound,fault,ten,buy,hour,speak,lady,jen,thinks,christmas,outside,hang,possible,worse,mistake,ooh,handle,spend,totally,giving,here's,marriage,realize,unless,sex,send,needed,scared,picture,talked,ass,hundred,changed,completely,explain,certainly,sign,boys,relationship,loves,hair,lying,choice,anywhere,future,weird,luck,she'll,turned,touch,kiss,crane,questions,obviously,wonder,pain,calling,somewhere,throw,straight,cold,fast,words,food,none,drive,feelings,they'll,marry,drop,cannot,dream,protect,twenty,surprise,sweetheart,poor,looked,mad,except,gun,y'know,dance,takes,appreciate,especially,situation,besides,pull,hasn't,worth,sheridan,amazing,expect,swear,piece,busy,happening,movie,we'd,catch,perhaps,step,fall,watching,kept,darling,dog,honor,moving,till,admit,problems,murder,he'd,evil,definitely,feels,honest,eye,broke,missed,longer,dollars,tired,evening,starting,entire,trip,niles,suppose,calm,imagine,fair,caught,blame,sitting,favor,apartment,terrible,clean,learn,frasier,relax,accident,wake,prove,smart,message,missing,forgot,interested,table,nbsp,mouth,pregnant,ring,careful,shall,dude,ride,figured,wear,shoot,stick,follow,angry,write,stopped,ran,standing,forgive,jail,wearing,ladies,kinda,lunch,cristian,greenlee,gotten,hoping,phoebe,thousand,ridge,paper,tough,tape,count,boyfriend,proud,agree,birthday,they've,share,offer,hurry,feet,wondering,decision,ones,finish,voice,herself,would've,mess,deserve,evidence,cute,dress,interesting,hotel,enjoy,quiet,concerned,staying,beat,sweetie,mention,clothes,fell,neither,mmm,fix,respect,prison,attention,holding,calls,surprised,bar,keeping,gift,hadn't,putting,dark,owe,ice,helping,normal,aunt,lawyer,apart,plans,jax,girlfriend,floor,whether,everything's,box,judge,upstairs,sake,mommy,possibly,worst,acting,accept,blow,strange,saved,conversation,plane,mama,yesterday,lied,quick,lately,stuck,difference,store,she'd,bought,doubt,listening,walking,cops,deep,dangerous,buffy,sleeping,chloe,rafe,join,card,crime,gentlemen,willing,window,walked,guilty,likes,fighting,difficult,soul,joke,favorite,uncle,promised,bother,seriously,cell,knowing,broken,advice,somehow,paid,losing,push,helped,killing,boss,liked,innocent,rules,learned,thirty,risk,letting,speaking,ridiculous,afternoon,apologize,nervous,charge,patient,boat,how'd,hide,detective,planning,huge,breakfast,horrible,awful,pleasure,driving,hanging,picked,sell,quit,apparently,dying,notice,congratulations,visit,could've,c'mon,letter,decide,forward,fool,showed,smell,seemed,spell,memory,pictures,slow,seconds,hungry,hearing,kitchen,ma'am,should've,realized,kick,grab,discuss,fifty,reading,idiot,suddenly,agent,destroy,bucks,shoes,peace,arms,demon,livvie,consider,papers,incredible,witch,drunk,attorney,tells,knock,ways,gives,nose,skye,turns,keeps,jealous,drug,sooner,cares,plenty,extra,outta,weekend,matters,gosh,opportunity,impossible,waste,pretend,jump,eating,proof,slept,arrest,breathe,perfectly,warm,pulled,twice,easier,goin,dating,suit,romantic,drugs,comfortable,finds,checked,divorce,begin,ourselves,closer,ruin,smile,laugh,treat,fear,what'd,otherwise,excited,mail,hiding,stole,pacey,noticed,fired,excellent,bringing,bottom,note,sudden,bathroom,honestly,sing,foot,remind,charges,witness,finding,tree,dare,hardly,that'll,steal,silly,contact,teach,shop,plus,colonel,fresh,trial,invited,roll,reach,dirty,choose,emergency,dropped,butt,credit,obvious,locked,loving,nuts,agreed,prue,goodbye,condition,guard,fuckin,grow,cake,mood,crap,crying,belong,partner,trick,pressure,dressed,taste,neck,nurse,raise,lots,carry,whoever,drinking,they'd,breaking,file,lock,wine,spot,paying,assume,asleep,turning,viki,bedroom,shower,nikolas,camera,fill,reasons,forty,bigger,nope,breath,doctors,pants,freak,movies,folks,cream,wild,truly,desk,convince,client,threw,hurts,spending,answers,shirt,chair,rough,doin,sees,ought,empty,wind,aware,dealing,pack,tight,hurting,guest,arrested,salem,confused,surgery,expecting,deacon,unfortunately,goddamn,bottle,beyond,whenever,pool,opinion,starts,jerk,secrets,falling,necessary,barely,dancing,tests,copy,cousin,ahem,twelve,tess,skin,fifteen,speech,orders,complicated,nowhere,escape,biggest,restaurant,grateful,usual,burn,address,someplace,screw,everywhere,regret,goodness,mistakes,details,responsibility,suspect,corner,hero,dumb,terrific,whoo,hole,memories,o'clock,teeth,ruined,bite,stenbeck,liar,showing,cards,desperate,search,pathetic,spoke,scare,marah,afford,settle,stayed,checking,hired,heads,concern,blew,alcazar,champagne,connection,tickets,happiness,saving,kissing,hated,personally,suggest,prepared,onto,downstairs,ticket,it'd,loose,holy,duty,convinced,throwing,kissed,legs,loud,saturday,babies,where'd,warning,miracle,carrying,blind,ugly,shopping,hates,sight,bride,coat,clearly,celebrate,brilliant,wanting,forrester,lips,custody,screwed,buying,toast,thoughts,reality,lexie,attitude,advantage,grandfather,sami,grandma,someday,roof,marrying,powerful,grown,grandmother,fake,must've,ideas,exciting,familiar,bomb,bout,harmony,schedule,capable,practically,correct,clue,forgotten,appointment,deserves,threat,bloody,lonely,shame,jacket,hook,scary,investigation,invite,shooting,lesson,criminal,victim,funeral,considering,burning,strength,harder,sisters,pushed,shock,pushing,heat,chocolate,miserable,corinthos,nightmare,brings,zander,crash,chances,sending,recognize,healthy,boring,feed,engaged,headed,treated,knife,drag,badly,hire,paint,pardon,behavior,closet,warn,gorgeous,milk,survive,ends,dump,rent,remembered,thanksgiving,rain,revenge,prefer,spare,pray,disappeared,aside,statement,sometime,meat,fantastic,breathing,laughing,stood,affair,ours,depends,protecting,jury,brave,fingers,murdered,explanation,picking,blah,stronger,handsome,unbelievable,anytime,shake,oakdale,wherever,pulling,facts,waited,lousy,circumstances,disappointed,weak,trusted,license,nothin,trash,understanding,slip,sounded,awake,friendship,stomach,weapon,threatened,mystery,vegas,understood,basically,switch,frankly,cheap,lifetime,deny,clock,garbage,why'd,tear,ears,indeed,changing,singing,tiny,decent,avoid,messed,filled,touched,disappear,exact,pills,kicked,harm,fortune,pretending,insurance,fancy,drove,cared,belongs,nights,lorelai,lift,timing,guarantee,chest,woke,burned,watched,heading,selfish,drinks,doll,committed,elevator,freeze,noise,wasting,ceremony,uncomfortable,staring,files,bike,stress,permission,thrown,possibility,borrow,fabulous,doors,screaming,bone,xander,what're,meal,apology,anger,honeymoon,bail,parking,fixed,wash,stolen,sensitive,stealing,photo,chose,lets,comfort,worrying,pocket,mateo,bleeding,shoulder,ignore,talent,tied,garage,dies,demons,dumped,witches,rude,crack,bothering,radar,soft,meantime,gimme,kinds,fate,concentrate,throat,prom,messages,intend,ashamed,somethin,manage,guilt,interrupt,guts,tongue,shoe,basement,sentence,purse,glasses,cabin,universe,repeat,mirror,wound,travers,tall,engagement,therapy,emotional,jeez,decisions,soup,thrilled,stake,chef,moves,extremely,moments,expensive,counting,shots,kidnapped,cleaning,shift,plate,impressed,smells,trapped,aidan,knocked,charming,attractive,argue,puts,whip,embarrassed,package,hitting,bust,stairs,alarm,pure,nail,nerve,incredibly,walks,dirt,stamp,terribly,friendly,damned,jobs,suffering,disgusting,stopping,deliver,riding,helps,disaster,bars,crossed,trap,talks,eggs,chick,threatening,spoken,introduce,confession,embarrassing,bags,impression,gate,reputation,presents,chat,suffer,argument,talkin,crowd,homework,coincidence,cancel,pride,solve,hopefully,pounds,pine,mate,illegal,generous,outfit,maid,bath,punch,freaked,begging,recall,enjoying,prepare,wheel,defend,signs,painful,yourselves,maris,that'd,suspicious,cooking,button,warned,sixty,pity,yelling,awhile,confidence,offering,pleased,panic,hers,gettin,refuse,grandpa,testify,choices,cruel,mental,gentleman,coma,cutting,proteus,guests,expert,benefit,faces,jumped,toilet,sneak,halloween,privacy,smoking,reminds,twins,swing,solid,options,commitment,crush,ambulance,wallet,gang,eleven,option,laundry,assure,stays,skip,fail,discussion,clinic,betrayed,sticking,bored,mansion,soda,sheriff,suite,handled,busted,load,happier,studying,romance,procedure,commit,assignment,suicide,minds,swim,yell,llanview,chasing,proper,believes,humor,hopes,lawyers,giant,latest,escaped,parent,tricks,insist,dropping,cheer,medication,flesh,routine,sandwich,handed,false,beating,warrant,awfully,odds,treating,thin,suggesting,fever,sweat,silent,clever,sweater,mall,sharing,assuming,judgment,goodnight,divorced,surely,steps,confess,math,listened,comin,answered,vulnerable,bless,dreaming,chip,zero,pissed,nate,kills,tears,knees,chill,brains,unusual,packed,dreamed,cure,lookin,grave,cheating,breaks,locker,gifts,awkward,thursday,joking,reasonable,dozen,curse,quartermaine,millions,dessert,rolling,detail,alien,delicious,closing,vampires,wore,tail,secure,salad,murderer,spit,offense,dust,conscience,bread,answering,lame,invitation,grief,smiling,pregnancy,prisoner,delivery,guards,virus,shrink,freezing,wreck,massimo,wire,technically,blown,anxious,cave,holidays,cleared,wishes,caring,candles,bound,charm,pulse,jumping,jokes,boom,occasion,silence,nonsense,frightened,slipped,dimera,blowing,relationships,kidnapping,spin,tool,roxy,packing,blaming,wrap,obsessed,fruit,torture,personality,there'll,fairy,necessarily,seventy,print,motel,underwear,grams,exhausted,believing,freaking,carefully,trace,touching,messing,recovery,intention,consequences,belt,sacrifice,courage,enjoyed,attracted,remove,testimony,intense,heal,defending,unfair,relieved,loyal,slowly,buzz,alcohol,surprises,psychiatrist,plain,attic,who'd,uniform,terrified,cleaned,zach,threaten,fella,enemies,satisfied,imagination,hooked,headache,forgetting,counselor,andie,acted,badge,naturally,frozen,sakes,appropriate,trunk,dunno,costume,sixteen,impressive,kicking,junk,grabbed,understands,describe,clients,owns,affect,witnesses,starving,instincts,happily,discussing,deserved,strangers,surveillance,admire,questioning,dragged,barn,deeply,wrapped,wasted,tense,hoped,fellas,roommate,mortal,fascinating,stops,arrangements,agenda,literally,propose,honesty,underneath,sauce,promises,lecture,eighty,torn,shocked,backup,differently,ninety,deck,biological,pheebs,ease,creep,waitress,telephone,ripped,raising,scratch,rings,prints,thee,arguing,ephram,asks,oops,diner,annoying,taggert,sergeant,blast,towel,clown,habit,creature,bermuda,snap,react,paranoid,handling,eaten,therapist,comment,sink,reporter,nurses,beats,priority,interrupting,warehouse,loyalty,inspector,pleasant,excuses,threats,guessing,tend,praying,motive,unconscious,mysterious,unhappy,tone,switched,rappaport,sookie,neighbor,loaded,swore,piss,balance,toss,misery,thief,squeeze,lobby,goa'uld,geez,exercise,forth,booked,sandburg,poker,eighteen,d'you,bury,everyday,digging,creepy,wondered,liver,hmmm,magical,fits,discussed,moral,helpful,searching,flew,depressed,aisle,cris,amen,vows,neighbors,darn,cents,arrange,annulment,useless,adventure,resist,fourteen,celebrating,inch,debt,violent,sand,teal'c,celebration,reminded,phones,paperwork,emotions,stubborn,pound,tension,stroke,steady,overnight,chips,beef,suits,boxes,cassadine,collect,tragedy,spoil,realm,wipe,surgeon,stretch,stepped,nephew,neat,limo,confident,perspective,climb,punishment,finest,springfield,hint,furniture,blanket,twist,proceed,fries,worries,niece,gloves,soap,signature,disappoint,crawl,convicted,flip,counsel,doubts,crimes,accusing,shaking,remembering,hallway,halfway,bothered,madam,gather,cameras,blackmail,symptoms,rope,ordinary,imagined,cigarette,supportive,explosion,trauma,ouch,furious,cheat,avoiding,whew,thick,oooh,boarding,approve,urgent,shhh,misunderstanding,drawer,phony,interfere,catching,bargain,tragic,respond,punish,penthouse,thou,rach,ohhh,insult,bugs,beside,begged,absolute,strictly,socks,senses,sneaking,reward,polite,checks,tale,physically,instructions,fooled,blows,tabby,bitter,adorable,y'all,tested,suggestion,jewelry,alike,jacks,distracted,shelter,lessons,constable,circus,audition,tune,shoulders,mask,helpless,feeding,explains,sucked,robbery,objection,behave,valuable,shadows,courtroom,confusing,talented,smarter,mistaken,customer,bizarre,scaring,motherfucker,alert,vecchio,reverend,foolish,compliment,bastards,worker,wheelchair,protective,gentle,reverse,picnic,knee,cage,wives,wednesday,voices,toes,stink,scares,pour,cheated,slide,ruining,filling,exit,cottage,upside,proves,parked,diary,complaining,confessed,pipe,merely,massage,chop,spill,prayer,betray,waiter,scam,rats,fraud,brush,tables,sympathy,pill,filthy,seventeen,employee,bracelet,pays,fairly,deeper,arrive,tracking,spite,shed,recommend,oughta,nanny,menu,diet,corn,roses,patch,dime,devastated,subtle,bullets,beans,pile,confirm,strings,parade,borrowed,toys,straighten,steak,premonition,planted,honored,exam,convenient,traveling,laying,insisted,dish,aitoro,kindly,grandson,donor,temper,teenager,proven,mothers,denial,backwards,tent,swell,noon,happiest,drives,thinkin,spirits,potion,holes,fence,whatsoever,rehearsal,overheard,lemme,hostage,bench,tryin,taxi,shove,moron,impress,needle,intelligent,instant,disagree,stinks,rianna,recover,groom,gesture,constantly,bartender,suspects,sealed,legally,hears,dresses,sheet,psychic,teenage,knocking,judging,accidentally,waking,rumor,manners,homeless,hollow,desperately,tapes,referring,item,genoa,gear,majesty,cried,tons,spells,instinct,quote,motorcycle,convincing,fashioned,aids,accomplished,grip,bump,upsetting,needing,invisible,forgiveness,feds,compare,bothers,tooth,inviting,earn,compromise,cocktail,tramp,jabot,intimate,dignity,dealt,souls,informed,gods,dressing,cigarettes,alistair,leak,fond,corky,seduce,liquor,fingerprints,enchantment,butters,stuffed,stavros,emotionally,transplant,tips,oxygen,nicely,lunatic,drill,complain,announcement,unfortunate,slap,prayers,plug,opens,oath,o'neill,mutual,yacht,remembers,fried,extraordinary,bait,warton,sworn,stare,safely,reunion,burst,might've,dive,aboard,expose,buddies,trusting,booze,sweep,sore,scudder,properly,parole,ditch,canceled,speaks,glow,wears,thirsty,skull,ringing,dorm,dining,bend,unexpected,pancakes,harsh,flattered,ahhh,troubles,fights,favourite,eats,rage,undercover,spoiled,sloane,shine,destroying,deliberately,conspiracy,thoughtful,sandwiches,plates,nails,miracles,fridge,drank,contrary,beloved,allergic,washed,stalking,solved,sack,misses,forgiven,bent,maciver,involve,dragging,cooked,pointing,foul,dull,beneath,heels,faking,deaf,stunt,jealousy,hopeless,fears,cuts,scenario,necklace,crashed,accuse,restraining,homicide,helicopter,firing,safer,auction,videotape,tore,reservations,pops,appetite,wounds,vanquish,ironic,fathers,excitement,anyhow,tearing,sends,rape,laughed,belly,dealer,cooperate,accomplish,wakes,spotted,sorts,reservation,ashes,tastes,supposedly,loft,intentions,integrity,wished,towels,suspected,investigating,inappropriate,lipstick,lawn,compassion,cafeteria,scarf,precisely,obsession,loses,lighten,infection,granddaughter,explode,balcony,this'll,spying,publicity,depend,cracked,conscious,ally,absurd,vicious,invented,forbid,directions,defendant,bare,announce,screwing,salesman,robbed,leap,lakeview,insanity,reveal,possibilities,kidnap,gown,chairs,wishing,setup,punished,criminals,regrets,raped,quarters,lamp,dentist,anyways,anonymous,semester,risks,owes,lungs,explaining,delicate,tricked,eager,doomed,adoption,stab,sickness,scum,floating,envelope,vault,sorel,pretended,potatoes,plea,photograph,payback,misunderstood,kiddo,healing,cascade,capeside,stabbed,remarkable,brat,privilege,passionate,nerves,lawsuit,kidney,disturbed,cozy,tire,shirts,oven,ordering,delay,risky,monsters,honorable,grounded,closest,breakdown,bald,abandon,scar,collar,worthless,sucking,enormous,disturbing,disturb,distract,deals,conclusions,vodka,dishes,crawling,briefcase,wiped,whistle,sits,roast,rented,pigs,flirting,deposit,bottles,topic,riot,overreacting,logical,hostile,embarrass,casual,beacon,amusing,altar,claus,survival,skirt,shave,porch,ghosts,favors,drops,dizzy,chili,advise,strikes,rehab,photographer,peaceful,leery,heavens,fortunately,fooling,expectations,cigar,weakness,ranch,practicing,examine,cranes,bribe,sail,prescription,hush,fragile,forensics,expense,drugged,cows,bells,visitor,suitcase,sorta,scan,manticore,insecure,imagining,hardest,clerk,wrist,what'll,starters,silk,pump,pale,nicer,haul,flies,boot,thumb,there'd,how're,elders,quietly,pulls,idiots,erase,denying,ankle,amnesia,accepting,heartbeat,devane,confront,minus,legitimate,fixing,arrogant,tuna,supper,slightest,sins,sayin,recipe,pier,paternity,humiliating,genuine,snack,rational,minded,guessed,weddings,tumor,humiliated,aspirin,spray,picks,eyed,drowning,contacts,ritual,perfume,hiring,hating,docks,creatures,visions,thanking,thankful,sock,nineteen,fork,throws,teenagers,stressed,slice,rolls,plead,ladder,kicks,detectives,assured,tellin,shallow,responsibilities,repay,howdy,girlfriends,deadly,comforting,ceiling,verdict,insensitive,spilled,respected,messy,interrupted,halliwell,blond,bleed,wardrobe,takin,murders,backs,underestimate,justify,harmless,frustrated,fold,enzo,communicate,bugging,arson,whack,salary,rumors,obligation,liking,dearest,congratulate,vengeance,rack,puzzle,fires,courtesy,caller,blamed,tops,quiz,prep,curiosity,circles,barbecue,sunnydale,spinning,psychotic,cough,accusations,resent,laughs,freshman,envy,drown,bartlet,asses,sofa,poster,highness,dock,apologies,theirs,stat,stall,realizes,psych,mmmm,fools,understandable,treats,succeed,stir,relaxed,makin,gratitude,faithful,accent,witter,wandering,locate,inevitable,gretel,deed,crushed,controlling,smelled,robe,gossip,gambling,cosmetics,accidents,surprising,stiff,sincere,rushed,refrigerator,preparing,nightmares,mijo,ignoring,hunch,fireworks,drowned,brass,whispering,sophisticated,luggage,hike,explore,emotion,crashing,contacted,complications,shining,rolled,righteous,reconsider,goody,geek,frightening,ethics,creeps,courthouse,camping,affection,smythe,haircut,essay,baked,apologized,vibe,respects,receipt,mami,hats,destructive,adore,adopt,tracked,shorts,reminding,dough,creations,cabot,barrel,snuck,slight,reporters,pressing,magnificent,madame,lazy,glorious,fiancee,bits,visitation,sane,kindness,shoulda,rescued,mattress,lounge,lifted,importantly,glove,enterprises,disappointment,condo,beings,admitting,yelled,waving,spoon,screech,satisfaction,reads,nailed,worm,tick,resting,marvelous,fuss,cortlandt,chased,pockets,luckily,lilith,filing,conversations,consideration,consciousness,worlds,innocence,forehead,aggressive,trailer,slam,quitting,inform,delighted,daylight,danced,confidential,aunts,washing,tossed,spectra,marrow,lined,implying,hatred,grill,corpse,clues,sober,offended,morgue,infected,humanity,distraction,cart,wired,violation,promising,harassment,glue,d'angelo,cursed,brutal,warlocks,wagon,unpleasant,proving,priorities,mustn't,lease,flame,disappearance,depressing,thrill,sitter,ribs,flush,earrings,deadline,corporal,collapsed,update,snapped,smack,melt,figuring,delusional,coulda,burnt,tender,sperm,realise,pork,popped,interrogation,esteem,choosing,undo,pres,prayed,plague,manipulate,insulting,detention,delightful,coffeehouse,betrayal,apologizing,adjust,wrecked,wont,whipped,rides,reminder,monsieur,faint,bake,distress,correctly,complaint,blocked,tortured,risking,pointless,handing,dumping,cups,alibi,struggling,shiny,risked,mummy,mint,hose,hobby,fortunate,fleischman,fitting,curtain,counseling,rode,puppet,modeling,memo,irresponsible,humiliation,hiya,freakin,felony,choke,blackmailing,appreciated,tabloid,suspicion,recovering,pledge,panicked,nursery,louder,jeans,investigator,homecoming,frustrating,buys,busting,buff,sleeve,irony,dope,declare,autopsy,workin,torch,prick,limb,hysterical,goddamnit,fetch,dimension,crowded,clip,climbing,bonding,woah,trusts,negotiate,lethal,iced,fantasies,deeds,bore,babysitter,questioned,outrageous,kiriakis,insulted,grudge,driveway,deserted,definite,beep,wires,suggestions,searched,owed,lend,drunken,demanding,costanza,conviction,bumped,weigh,touches,tempted,shout,resolve,relate,poisoned,meals,invitations,haunted,bogus,autograph,affects,tolerate,stepping,spontaneous,sleeps,probation,manny,fist,spectacular,hostages,heroin,havin,habits,encouraging,consult,burgers,boyfriends,bailed,baggage,watches,troubled,torturing,teasing,sweetest,qualities,postpone,overwhelmed,malkovich,impulse,classy,charging,amazed,policeman,hypocrite,humiliate,hideous,d'ya,costumes,bluffing,betting,bein,bedtime,alcoholic,vegetable,tray,suspicions,spreading,splendid,shrimp,shouting,pressed,nooo,grieving,gladly,fling,eliminate,cereal,aaah,sonofabitch,paralyzed,lotta,locks,guaranteed,dummy,despise,dental,briefing,bluff,batteries,whatta,sounding,servants,presume,handwriting,fainted,dried,allright,acknowledge,whacked,toxic,reliable,quicker,overwhelming,lining,harassing,fatal,endless,dolls,convict,whatcha,unlikely,shutting,positively,overcome,goddam,essence,dose,diagnosis,cured,bully,ahold,yearbook,tempting,shelf,prosecution,pouring,possessed,greedy,wonders,thorough,spine,rath,psychiatric,meaningless,latte,jammed,ignored,fiance,evidently,contempt,compromised,cans,weekends,urge,theft,suing,shipment,scissors,responding,proposition,noises,matching,hormones,hail,grandchildren,gently,smashed,sexually,sentimental,nicest,manipulated,intern,handcuffs,framed,errands,entertaining,crib,carriage,barge,spends,slipping,seated,rubbing,rely,reject,recommendation,reckon,headaches,float,embrace,corners,whining,sweating,skipped,mountie,motives,listens,cristobel,cleaner,cheerleader,balsom,unnecessary,stunning,scent,quartermaines,pose,montega,loosen,info,hottest,haunt,gracious,forgiving,errand,cakes,blames,abortion,sketch,shifts,plotting,perimeter,pals,mere,mattered,lonigan,interference,eyewitness,enthusiasm,diapers,strongest,shaken,punched,portal,catches,backyard,terrorists,sabotage,organs,needy,cuff,civilization,woof,who'll,prank,obnoxious,mates,hereby,gabby,faked,cellar,whitelighter,void,strangle,sour,muffins,interfering,demonic,clearing,boutique,barrington,terrace,smoked,righty,quack,petey,pact,knot,ketchup,disappearing,cordy,uptight,ticking,terrifying,tease,swamp,secretly,rejection,reflection,realizing,rays,mentally,marone,doubted,deception,congressman,cheesy,toto,stalling,scoop,ribbon,immune,expects,destined,bets,bathing,appreciation,accomplice,wander,shoved,sewer,scroll,retire,lasts,fugitive,freezer,discount,cranky,crank,clearance,bodyguard,anxiety,accountant,whoops,volunteered,talents,stinking,remotely,garlic,decency,cord,beds,altogether,uniforms,tremendous,popping,outa,observe,lung,hangs,feelin,dudes,donation,disguise,curb,bites,antique,toothbrush,realistic,predict,landlord,hourglass,hesitate,consolation,babbling,tipped,stranded,smartest,repeating,puke,psst,paycheck,overreacted,macho,juvenile,grocery,freshen,disposal,cuffs,caffeine,vanished,unfinished,ripping,pinch,flattering,expenses,dinners,colleague,ciao,belthazor,attorneys,woulda,whereabouts,waitin,truce,tripped,tasted,steer,poisoning,manipulative,immature,husbands,heel,granddad,delivering,condoms,addict,trashed,raining,pasta,needles,leaning,detector,coolest,batch,appointments,almighty,vegetables,spark,perfection,pains,momma,mole,meow,hairs,getaway,cracking,compliments,behold,verge,tougher,timer,tapped,taped,specialty,snooping,shoots,rendezvous,pentagon,leverage,jeopardize,janitor,grandparents,forbidden,clueless,bidding,ungrateful,unacceptable,tutor,serum,scuse,pajamas,mouths,lure,irrational,doom,cries,beautifully,arresting,approaching,traitor,sympathetic,smug,smash,rental,prostitute,premonitions,jumps,inventory,darlin,committing,banging,asap,worms,violated,vent,traumatic,traced,sweaty,shaft,overboard,insight,healed,grasp,experiencing,crappy,crab,chunk,awww,stain,shack,reacted,pronounce,poured,moms,marriages,jabez,handful,flipped,fireplace,embarrassment,disappears,concussion,bruises,brakes,twisting,swept,summon,splitting,sloppy,settling,reschedule,notch,hooray,grabbing,exquisite,disrespect,thornhart,straw,slapped,shipped,shattered,ruthless,refill,payroll,numb,mourning,manly,hunk,entertain,drift,dreadful,doorstep,confirmation,chops,appreciates,vague,tires,stressful,stashed,stash,sensed,preoccupied,predictable,noticing,madly,gunshot,dozens,dork,confuse,cleaners,charade,chalk,cappuccino,bouquet,amulet,addiction,who've,warming,unlock,satisfy,sacrificed,relaxing,lone,blocking,blend,blankets,addicted,yuck,hunger,hamburger,greeting,greet,gravy,gram,dreamt,dice,caution,backpack,agreeing,whale,taller,supervisor,sacrifices,phew,ounce,irrelevant,gran,felon,favorites,farther,fade,erased,easiest,convenience,compassionate,cane,backstage,agony,adores,veins,tweek,thieves,surgical,strangely,stetson,recital,proposing,productive,meaningful,immunity,hassle,goddamned,frighten,dearly,cease,ambition,wage,unstable,salvage,richer,refusing,raging,pumping,pressuring,mortals,lowlife,intimidated,intentionally,inspire,forgave,devotion,despicable,deciding,dash,comfy,breach,bark,aaaah,switching,swallowed,stove,screamed,scars,russians,pounding,poof,pipes,pawn,legit,invest,farewell,curtains,civilized,caviar,boost,token,superstition,supernatural,sadness,recorder,psyched,motivated,microwave,hallelujah,fraternity,dryer,cocoa,chewing,acceptable,unbelievably,smiled,smelling,simpler,respectable,remarks,khasinau,indication,gutter,grabs,fulfill,flashlight,ellenor,blooded,blink,blessings,beware,uhhh,turf,swings,slips,shovel,shocking,puff,mirrors,locking,heartless,fras,childish,cardiac,utterly,tuscany,ticked,stunned,statesville,sadly,purely,kiddin,jerks,hitch,flirt,fare,equals,dismiss,christening,casket,c'mere,breakup,biting,antibiotics,accusation,abducted,witchcraft,thread,runnin,punching,paramedics,newest,murdering,masks,lawndale,initials,grampa,choking,charms,careless,bushes,buns,bummed,shred,saves,saddle,rethink,regards,precinct,persuade,meds,manipulating,llanfair,leash,hearted,guarantees,fucks,disgrace,deposition,bookstore,boil,vitals,veil,trespassing,sidewalk,sensible,punishing,overtime,optimistic,obsessing,notify,mornin,jeopardy,jaffa,injection,hilarious,desires,confide,cautious,yada,where're,vindictive,vial,teeny,stroll,sittin,scrub,rebuild,posters,ordeal,nuns,intimacy,inheritance,exploded,donate,distracting,despair,crackers,wildwind,virtue,thoroughly,tails,spicy,sketches,sights,sheer,shaving,seize,scarecrow,refreshing,prosecute,platter,napkin,misplaced,merchandise,loony,jinx,heroic,frankenstein,ambitious,syrup,solitary,resemblance,reacting,premature,lavery,flashes,cheque,awright,acquainted,wrapping,untie,salute,realised,priceless,partying,lightly,lifting,kasnoff,insisting,glowing,generator,explosives,cutie,confronted,buts,blouse,ballistic,antidote,analyze,allowance,adjourned,unto,understatement,tucked,touchy,subconscious,screws,sarge,roommates,rambaldi,offend,nerd,knives,irresistible,incapable,hostility,goddammit,fuse,frat,curfew,blackmailed,walkin,starve,sleigh,sarcastic,recess,rebound,pinned,parlor,outfits,livin,heartache,haired,fundraiser,doorman,discreet,dilucca,cracks,considerate,climbed,catering,apophis,zoey,urine,strung,stitches,sordid,sark,protector,phoned,pets,hostess,flaw,flavor,deveraux,consumed,confidentiality,bourbon,straightened,specials,spaghetti,prettier,powerless,playin,playground,paranoia,instantly,havoc,exaggerating,eavesdropping,doughnuts,diversion,deepest,cutest,comb,bela,behaving,anyplace,accessory,workout,translate,stuffing,speeding,slime,royalty,polls,marital,lurking,lottery,imaginary,greetings,fairwinds,elegant,elbow,credibility,credentials,claws,chopped,bridal,bedside,babysitting,witty,unforgivable,underworld,tempt,tabs,sophomore,selfless,secrecy,restless,okey,movin,metaphor,messes,meltdown,lecter,incoming,gasoline,diefenbaker,buckle,admired,adjustment,warmth,throats,seduced,queer,parenting,noses,luckiest,graveyard,gifted,footsteps,dimeras,cynical,wedded,verbal,unpredictable,tuned,stoop,slides,sinking,rigged,plumbing,lingerie,hankey,greed,everwood,elope,dresser,chauffeur,bulletin,bugged,bouncing,temptation,strangest,slammed,sarcasm,pending,packages,orderly,obsessive,murderers,meteor,inconvenience,glimpse,froze,execute,courageous,consulate,closes,bosses,bees,amends,wuss,wolfram,wacky,unemployed,testifying,syringe,stew,startled,sorrow,sleazy,shaky,screams,rsquo,remark,poke,nutty,mentioning,mend,inspiring,impulsive,housekeeper,foam,fingernails,conditioning,baking,whine,thug,starved,sniffing,sedative,programmed,picket,paged,hound,homosexual,homo,hips,forgets,flipping,flea,flatter,dwell,dumpster,choo,assignments,ants,vile,unreasonable,tossing,thanked,steals,souvenir,scratched,psychopath,outs,obstruction,obey,lump,insists,harass,gloat,filth,edgy,didn,coroner,confessing,bruise,betraying,bailing,appealing,adebisi,wrath,wandered,waist,vain,traps,stepfather,poking,obligated,heavenly,dilemma,crazed,contagious,coaster,cheering,bundle,vomit,thingy,speeches,robbing,raft,pumped,pillows,peep,packs,neglected,m'kay,loneliness,intrude,helluva,gardener,forresters,drooling,betcha,vase,supermarket,squat,spitting,rhyme,relieve,receipts,racket,pictured,pause,overdue,motivation,morgendorffer,kidnapper,insect,horns,feminine,eyeballs,dumps,disappointing,crock,convertible,claw,clamp,canned,cambias,bathtub,avanya,artery,weep,warmer,suspense,summoned,spiders,reiber,raving,pushy,postponed,ohhhh,noooo,mold,laughter,incompetent,hugging,groceries,drip,communicating,auntie,adios,wraps,wiser,willingly,weirdest,timmih,thinner,swelling,swat,steroids,sensitivity,scrape,rehearse,prophecy,ledge,justified,insults,hateful,handles,doorway,chatting,buyer,buckaroo,bedrooms,askin,ammo,tutoring,subpoena,scratching,privileges,pager,mart,intriguing,idiotic,grape,enlighten,corrupt,brunch,bridesmaid,barking,applause,acquaintance,wretched,superficial,soak,smoothly,sensing,restraint,posing,pleading,payoff,oprah,nemo,morals,loaf,jumpy,ignorant,herbal,hangin,germs,generosity,flashing,doughnut,clumsy,chocolates,captive,behaved,apologise,vanity,stumbled,preview,poisonous,perjury,parental,onboard,mugged,minding,linen,knots,interviewing,humour,grind,greasy,goons,drastic,coop,comparing,cocky,clearer,bruised,brag,bind,worthwhile,whoop,vanquishing,tabloids,sprung,spotlight,sentencing,racist,provoke,pining,overly,locket,imply,impatient,hovering,hotter,fest,endure,dots,doren,debts,crawled,chained,brit,breaths,weirdo,warmed,wand,troubling,tok'ra,strapped,soaked,skipping,scrambled,rattle,profound,musta,mocking,misunderstand,limousine,kacl,hustle,forensic,enthusiastic,duct,drawers,devastating,conquer,clarify,chores,cheerleaders,cheaper,callin,blushing,barging,abused,yoga,wrecking,wits,waffles,virginity,vibes,uninvited,unfaithful,teller,strangled,scheming,ropes,rescuing,rave,postcard,o'reily,morphine,lotion,lads,kidneys,judgement,itch,indefinitely,grenade,glamorous,genetically,freud,discretion,delusions,crate,competent,bakery,argh,ahhhh,wedge,wager,unfit,tripping,torment,superhero,stirring,spinal,sorority,seminar,scenery,rabble,pneumonia,perks,override,ooooh,mija,manslaughter,mailed,lime,lettuce,intimidate,guarded,grieve,grad,frustration,doorbell,chinatown,authentic,arraignment,annulled,allergies,wanta,verify,vegetarian,tighter,telegram,stalk,spared,shoo,satisfying,saddam,requesting,pens,overprotective,obstacles,notified,nasedo,grandchild,genuinely,flushed,fluids,floss,escaping,ditched,cramp,corny,bunk,bitten,billions,bankrupt,yikes,wrists,ultrasound,ultimatum,thirst,sniff,shakes,salsa,retrieve,reassuring,pumps,neurotic,negotiating,needn't,monitors,millionaire,lydecker,limp,incriminating,hatchet,gracias,gordie,fills,feeds,doubting,decaf,biopsy,whiz,voluntarily,ventilator,unpack,unload,toad,spooked,snitch,schillinger,reassure,persuasive,mystical,mysteries,matrimony,mails,jock,headline,explanations,dispatch,curly,cupid,condolences,comrade,cassadines,bulb,bragging,awaits,assaulted,ambush,adolescent,abort,yank,whit,vaguely,undermine,tying,swamped,stabbing,slippers,slash,sincerely,sigh,setback,secondly,rotting,precaution,pcpd,melting,liaison,hots,hooking,headlines,haha,ganz,fury,felicity,fangs,encouragement,earring,dreidel,dory,donut,dictate,decorating,cocktails,bumps,blueberry,believable,backfired,backfire,apron,adjusting,vous,vouch,vitamins,ummm,tattoos,slimy,sibling,shhhh,renting,peculiar,parasite,paddington,marries,mailbox,magically,lovebirds,knocks,informant,exits,drazen,distractions,disconnected,dinosaurs,dashwood,crooked,conveniently,wink,warped,underestimated,tacky,shoving,seizure,reset,pushes,opener,mornings,mash,invent,indulge,horribly,hallucinating,festive,eyebrows,enjoys,desperation,dealers,darkest,daph,boragora,belts,bagel,authorization,auditions,agitated,wishful,wimp,vanish,unbearable,tonic,suffice,suction,slaying,safest,rocking,relive,puttin,prettiest,noisy,newlyweds,nauseous,misguided,mildly,midst,liable,judgmental,indy,hunted,givin,fascinated,elephants,dislike,deluded,decorate,crummy,contractions,carve,bottled,bonded,bahamas,unavailable,twenties,trustworthy,surgeons,stupidity,skies,remorse,preferably,pies,nausea,napkins,mule,mourn,melted,mashed,inherit,greatness,golly,excused,dumbo,drifting,delirious,damaging,cubicle,compelled,comm,chooses,checkup,boredom,bandages,alarms,windshield,who're,whaddya,transparent,surprisingly,sunglasses,slit,roar,reade,prognosis,probe,pitiful,persistent,peas,nosy,nagging,morons,masterpiece,martinis,limbo,liars,irritating,inclined,hump,hoynes,fiasco,eatin,cubans,concentrating,colorful,clam,cider,brochure,barto,bargaining,wiggle,welcoming,weighing,vanquished,stains,sooo,snacks,smear,sire,resentment,psychologist,pint,overhear,morality,landingham,kisser,hoot,holling,handshake,grilled,formality,elevators,depths,confirms,boathouse,accidental,westbridge,wacko,ulterior,thugs,thighs,tangled,stirred,snag,sling,sleaze,rumour,ripe,remarried,puddle,pins,perceptive,miraculous,longing,lockup,librarian,impressions,immoral,hypothetically,guarding,gourmet,gabe,faxed,extortion,downright,digest,cranberry,bygones,buzzing,burying,bikes,weary,taping,takeout,sweeping,stepmother,stale,senor,seaborn,pros,pepperoni,newborn,ludicrous,injected,geeks,forged,faults,drue,dire,dief,desi,deceiving,caterer,calmed,budge,ankles,vending,typing,tribbiani,there're,squared,snowing,shades,sexist,rewrite,regretted,raises,picky,orphan,mural,misjudged,miscarriage,memorize,leaking,jitters,invade,interruption,illegally,handicapped,glitch,gittes,finer,distraught,dispose,dishonest,digs,dads,cruelty,circling,canceling,butterflies,belongings,barbrady,amusement,alias,zombies,where've,unborn,swearing,stables,squeezed,sensational,resisting,radioactive,questionable,privileged,portofino,owning,overlook,orson,oddly,interrogate,imperative,impeccable,hurtful,hors,heap,graders,glance,disgust,devious,destruct,crazier,countdown,chump,cheeseburger,burglar,berries,ballroom,assumptions,annoyed,allergy,admirer,admirable,activate,underpants,twit,tack,strokes,stool,sham,scrap,retarded,resourceful,remarkably,refresh,pressured,precautions,pointy,nightclub,mustache,maui,lace,hunh,hubby,flare,dont,dokey,dangerously,crushing,clinging,choked,chem,cheerleading,checkbook,cashmere,calmly,blush,believer,amazingly,alas,what've,toilets,tacos,stairwell,spirited,sewing,rubbed,punches,protects,nuisance,motherfuckers,mingle,kynaston,knack,kinkle,impose,gullible,godmother,funniest,friggin,folding,fashions,eater,dysfunctional,drool,dripping,ditto,cruising,criticize,conceive,clone,cedars,caliber,brighter,blinded,birthdays,banquet,anticipate,annoy,whim,whichever,volatile,veto,vested,shroud,rests,reindeer,quarantine,pleases,painless,orphans,orphanage,offence,obliged,negotiation,narcotics,mistletoe,meddling,manifest,lookit,lilah,intrigued,injustice,homicidal,gigantic,exposing,elves,disturbance,disastrous,depended,demented,correction,cooped,cheerful,buyers,brownies,beverage,basics,arvin,weighs,upsets,unethical,swollen,sweaters,stupidest,sensation,scalpel,props,prescribed,pompous,objections,mushrooms,mulwray,manipulation,lured,internship,insignificant,inmate,incentive,fulfilled,disagreement,crypt,cornered,copied,brightest,beethoven,attendant,amaze,yogurt,wyndemere,vocabulary,tulsa,tactic,stuffy,respirator,pretends,polygraph,pennies,ordinarily,olives,necks,morally,martyr,leftovers,joints,hopping,homey,hints,heartbroken,forge,florist,firsthand,fiend,dandy,crippled,corrected,conniving,conditioner,clears,chemo,bubbly,bladder,beeper,baptism,wiring,wench,weaknesses,volunteering,violating,unlocked,tummy,surrogate,subid,stray,startle,specifics,slowing,scoot,robbers,rightful,richest,qfxmjrie,puffs,pierced,pencils,paralysis,makeover,luncheon,linksynergy,jerky,jacuzzi,hitched,hangover,fracture,flock,firemen,disgusted,darned,clams,borrowing,banged,wildest,weirder,unauthorized,stunts,sleeves,sixties,shush,shalt,retro,quits,pegged,painfully,paging,omelet,memorized,lawfully,jackets,intercept,ingredient,grownup,glued,fulfilling,enchanted,delusion,daring,compelling,carton,bridesmaids,bribed,boiling,bathrooms,bandage,awaiting,assign,arrogance,antiques,ainsley,turkeys,trashing,stockings,stalked,stabilized,skates,sedated,robes,respecting,psyche,presumptuous,prejudice,paragraph,mocha,mints,mating,mantan,lorne,loads,listener,itinerary,hepatitis,heave,guesses,fading,examining,dumbest,dishwasher,deceive,cunning,cripple,convictions,confided,compulsive,compromising,burglary,bumpy,brainwashed,benes,arnie,affirmative,adrenaline,adamant,watchin,waitresses,transgenic,toughest,tainted,surround,stormed,spree,spilling,spectacle,soaking,shreds,sewers,severed,scarce,scamming,scalp,rewind,rehearsing,pretentious,potions,overrated,obstacle,nerds,meems,mcmurphy,maternity,maneuver,loathe,fertility,eloping,ecstatic,ecstasy,divorcing,dignan,costing,clubhouse,clocks,candid,bursting,breather,braces,bending,arsonist,adored,absorb,valiant,uphold,unarmed,topolsky,thrilling,thigh,terminate,sustain,spaceship,snore,sneeze,smuggling,salty,quaint,patronize,patio,morbid,mamma,kettle,joyous,invincible,interpret,insecurities,impulses,illusions,holed,exploit,drivin,defenseless,dedicate,cradle,coupon,countless,conjure,cardboard,booking,backseat,accomplishment,wordsworth,wisely,valet,vaccine,urges,unnatural,unlucky,truths,traumatized,tasting,swears,strawberries,steaks,stats,skank,seducing,secretive,scumbag,screwdriver,schedules,rooting,rightfully,rattled,qualifies,puppets,prospects,pronto,posse,polling,pedestal,palms,muddy,morty,microscope,merci,lecturing,inject,incriminate,hygiene,grapefruit,gazebo,funnier,cuter,bossy,booby,aides,zende,winthrop,warrants,valentines,undressed,underage,truthfully,tampered,suffers,speechless,sparkling,sidelines,shrek,railing,puberty,pesky,outrage,outdoors,motions,moods,lunches,litter,kidnappers,itching,intuition,imitation,humility,hassling,gallons,drugstore,dosage,disrupt,dipping,deranged,debating,cuckoo,cremated,craziness,cooperating,circumstantial,chimney,blinking,biscuits,admiring,weeping,triad,trashy,soothing,slumber,slayers,skirts,siren,shindig,sentiment,rosco,riddance,quaid,purity,proceeding,pretzels,panicking,mckechnie,lovin,leaked,intruding,impersonating,ignorance,hamburgers,footprints,fluke,fleas,festivities,fences,feisty,evacuate,emergencies,deceived,creeping,craziest,corpses,conned,coincidences,bounced,bodyguards,blasted,bitterness,baloney,ashtray,apocalypse,zillion,watergate,wallpaper,telesave,sympathize,sweeter,startin,spades,sodas,snowed,sleepover,signor,seein,retainer,restroom,rested,repercussions,reliving,reconcile,prevail,preaching,overreact,o'neil,noose,moustache,manicure,maids,landlady,hypothetical,hopped,homesick,hives,hesitation,herbs,hectic,heartbreak,haunting,gangs,frown,fingerprint,exhausting,everytime,disregard,cling,chevron,chaperone,blinding,bitty,beads,battling,badgering,anticipation,upstanding,unprofessional,unhealthy,turmoil,truthful,toothpaste,tippin,thoughtless,tagataya,shooters,senseless,rewarding,propane,preposterous,pigeons,pastry,overhearing,obscene,negotiable,loner,jogging,itchy,insinuating,insides,hospitality,hormone,hearst,forthcoming,fists,fifties,etiquette,endings,destroys,despises,deprived,cuddy,crust,cloak,circumstance,chewed,casserole,bidder,bearer,artoo,applaud,appalling,vowed,virgins,vigilante,undone,throttle,testosterone,tailor,symptom,swoop,suitcases,stomp,sticker,stakeout,spoiling,snatched,smoochy,smitten,shameless,restraints,researching,renew,refund,reclaim,raoul,puzzles,purposely,punks,prosecuted,plaid,picturing,pickin,parasites,mysteriously,multiply,mascara,jukebox,interruptions,gunfire,furnace,elbows,duplicate,drapes,deliberate,decoy,cryptic,coupla,condemn,complicate,colossal,clerks,clarity,brushed,banished,argon,alarmed,worships,versa,uncanny,technicality,sundae,stumble,stripping,shuts,schmuck,satin,saliva,robber,relentless,reconnect,recipes,rearrange,rainy,psychiatrists,policemen,plunge,plugged,patched,overload,o'malley,mindless,menus,lullaby,lotte,leavin,killin,karinsky,invalid,hides,grownups,griff,flaws,flashy,flaming,fettes,evicted,dread,degrassi,dealings,dangers,cushion,bowel,barged,abide,abandoning,wonderfully,wait'll,violate,suicidal,stayin,sorted,slamming,sketchy,shoplifting,raiser,quizmaster,prefers,needless,motherhood,momentarily,migraine,lifts,leukemia,leftover,keepin,hinks,hellhole,gowns,goodies,gallon,futures,entertained,eighties,conspiring,cheery,benign,apiece,adjustments,abusive,abduction,wiping,whipping,welles,unspeakable,unidentified,trivial,transcripts,textbook,supervise,superstitious,stricken,stimulating,spielberg,slices,shelves,scratches,sabotaged,retrieval,repressed,rejecting,quickie,ponies,peeking,outraged,o'connell,moping,moaning,mausoleum,licked,kovich,klutz,interrogating,interfered,insulin,infested,incompetence,hyper,horrified,handedly,gekko,fraid,fractured,examiner,eloped,disoriented,dashing,crashdown,courier,cockroach,chipped,brushing,bombed,bolts,baths,baptized,astronaut,assurance,anemia,abuela,abiding,withholding,weave,wearin,weaker,suffocating,straws,straightforward,stench,steamed,starboard,sideways,shrinks,shortcut,scram,roasted,roaming,riviera,respectfully,repulsive,psychiatry,provoked,penitentiary,painkillers,ninotchka,mitzvah,milligrams,midge,marshmallows,looky,lapse,kubelik,intellect,improvise,implant,goa'ulds,giddy,geniuses,fruitcake,footing,fightin,drinkin,doork,detour,cuddle,crashes,combo,colonnade,cheats,cetera,bailiff,auditioning,assed,amused,alienate,aiding,aching,unwanted,topless,tongues,tiniest,superiors,soften,sheldrake,rawley,raisins,presses,plaster,nessa,narrowed,minions,merciful,lawsuits,intimidating,infirmary,inconvenient,imposter,hugged,honoring,holdin,hades,godforsaken,fumes,forgery,foolproof,folder,flattery,fingertips,exterminator,explodes,eccentric,dodging,disguised,crave,constructive,concealed,compartment,chute,chinpokomon,bodily,astronauts,alimony,accustomed,abdominal,wrinkle,wallow,valium,untrue,uncover,trembling,treasures,torched,toenails,timed,termites,telly,taunting,taransky,talker,succubus,smarts,sliding,sighting,semen,seizures,scarred,savvy,sauna,saddest,sacrificing,rubbish,riled,ratted,rationally,provenance,phonse,perky,pedal,overdose,nasal,nanites,mushy,movers,missus,midterm,merits,melodramatic,manure,knitting,invading,interpol,incapacitated,hotline,hauling,gunpoint,grail,ganza,framing,flannel,faded,eavesdrop,desserts,calories,breathtaking,bleak,blacked,batter,aggravated,yanked,wigand,whoah,unwind,undoubtedly,unattractive,twitch,trimester,torrance,timetable,taxpayers,strained,stared,slapping,sincerity,siding,shenanigans,shacking,sappy,samaritan,poorer,politely,paste,oysters,overruled,nightcap,mosquito,millimeter,merrier,manhood,lucked,kilos,ignition,hauled,harmed,goodwill,freshmen,fenmore,fasten,farce,exploding,erratic,drunks,ditching,d'artagnan,cramped,contacting,closets,clientele,chimp,bargained,arranging,anesthesia,amuse,altering,afternoons,accountable,abetting,wolek,waved,uneasy,toddy,tattooed,spauldings,sliced,sirens,schibetta,scatter,rinse,remedy,redemption,pleasures,optimism,oblige,mmmmm,masked,malicious,mailing,kosher,kiddies,judas,isolate,insecurity,incidentally,heals,headlights,growl,grilling,glazed,flunk,floats,fiery,fairness,exercising,excellency,disclosure,cupboard,counterfeit,condescending,conclusive,clicked,cleans,cholesterol,cashed,broccoli,brats,blueprints,blindfold,billing,attach,appalled,alrighty,wynant,unsolved,unreliable,toots,tighten,sweatshirt,steinbrenner,steamy,spouse,sonogram,slots,sleepless,shines,retaliate,rephrase,redeem,rambling,quilt,quarrel,prying,proverbial,priced,prescribe,prepped,pranks,possessive,plaintiff,pediatrics,overlooked,outcast,nightgown,mumbo,mediocre,mademoiselle,lunchtime,lifesaver,leaned,lambs,interns,hounding,hellmouth,hahaha,goner,ghoul,gardening,frenzy,foyer,extras,exaggerate,everlasting,enlightened,dialed,devote,deceitful,d'oeuvres,cosmetic,contaminated,conspired,conning,cavern,carving,butting,boiled,blurry,babysit,ascension,aaaaah,wildly,whoopee,whiny,weiskopf,walkie,vultures,vacations,upfront,unresolved,tampering,stockholders,snaps,sleepwalking,shrunk,sermon,seduction,scams,revolve,phenomenal,patrolling,paranormal,ounces,omigod,nightfall,lashing,innocents,infierno,incision,humming,haunts,gloss,gloating,frannie,fetal,feeny,entrapment,discomfort,detonator,dependable,concede,complication,commotion,commence,chulak,caucasian,casually,brainer,bolie,ballpark,anwar,analyzing,accommodations,youse,wring,wallowing,transgenics,thrive,tedious,stylish,strippers,sterile,squeezing,squeaky,sprained,solemn,snoring,shattering,shabby,seams,scrawny,revoked,residue,reeks,recite,ranting,quoting,predicament,plugs,pinpoint,petrified,pathological,passports,oughtta,nighter,navigate,kippie,intrigue,intentional,insufferable,hunky,how've,horrifying,hearty,hamptons,grazie,funerals,forks,fetched,excruciating,enjoyable,endanger,dumber,drying,diabolical,crossword,corry,comprehend,clipped,classmates,candlelight,brutally,brutality,boarded,bathrobe,authorize,assemble,aerobics,wholesome,whiff,vermin,trophies,trait,tragically,toying,testy,tasteful,stocked,spinach,sipping,sidetracked,scrubbing,scraping,sanctity,robberies,ridin,retribution,refrain,realities,radiant,protesting,projector,plutonium,payin,parting,o'reilly,nooooo,motherfucking,measly,manic,lalita,juggling,jerking,intro,inevitably,hypnosis,huddle,horrendous,hobbies,heartfelt,harlin,hairdresser,gonorrhea,fussing,furtwangler,fleeting,flawless,flashed,fetus,eulogy,distinctly,disrespectful,denies,crossbow,cregg,crabs,cowardly,contraction,contingency,confirming,condone,coffins,cleansing,cheesecake,certainty,cages,c'est,briefed,bravest,bosom,boils,binoculars,bachelorette,appetizer,ambushed,alerted,woozy,withhold,vulgar,utmost,unleashed,unholy,unhappiness,unconditional,typewriter,typed,twists,supermodel,subpoenaed,stringing,skeptical,schoolgirl,romantically,rocked,revoir,reopen,puncture,preach,polished,planetarium,penicillin,peacefully,nurturing,more'n,mmhmm,midgets,marklar,lodged,lifeline,jellyfish,infiltrate,hutch,horseback,heist,gents,frickin,freezes,forfeit,flakes,flair,fathered,eternally,epiphany,disgruntled,discouraged,delinquent,decipher,danvers,cubes,credible,coping,chills,cherished,catastrophe,bombshell,birthright,billionaire,ample,affections,admiration,abbotts,whatnot,watering,vinegar,unthinkable,unseen,unprepared,unorthodox,underhanded,uncool,timeless,thump,thermometer,theoretically,tapping,tagged,swung,stares,spiked,solves,smuggle,scarier,saucer,quitter,prudent,powdered,poked,pointers,peril,penetrate,penance,opium,nudge,nostrils,neurological,mockery,mobster,medically,loudly,insights,implicate,hypocritical,humanly,holiness,healthier,hammered,haldeman,gunman,gloom,freshly,francs,flunked,flawed,emptiness,drugging,dozer,derevko,deprive,deodorant,cryin,crocodile,coloring,colder,cognac,clocked,clippings,charades,chanting,certifiable,caterers,brute,brochures,botched,blinders,bitchin,banter,woken,ulcer,tread,thankfully,swine,swimsuit,swans,stressing,steaming,stamped,stabilize,squirm,snooze,shuffle,shredded,seafood,scratchy,savor,sadistic,rhetorical,revlon,realist,prosecuting,prophecies,polyester,petals,persuasion,paddles,o'leary,nuthin,neighbour,negroes,muster,meningitis,matron,lockers,letterman,legged,indictment,hypnotized,housekeeping,hopelessly,hallucinations,grader,goldilocks,girly,flask,envelopes,downside,doves,dissolve,discourage,disapprove,diabetic,deliveries,decorator,crossfire,criminally,containment,comrades,complimentary,chatter,catchy,cashier,cartel,caribou,cardiologist,brawl,booted,barbershop,aryan,angst,administer,zellie,wreak,whistles,vandalism,vamps,uterus,upstate,unstoppable,understudy,tristin,transcript,tranquilizer,toxins,tonsils,stempel,spotting,spectator,spatula,softer,snotty,slinging,showered,sexiest,sensual,sadder,rimbaud,restrain,resilient,remission,reinstate,rehash,recollection,rabies,popsicle,plausible,pediatric,patronizing,ostrich,ortolani,oooooh,omelette,mistrial,marseilles,loophole,laughin,kevvy,irritated,infidelity,hypothermia,horrific,groupie,grinding,graceful,goodspeed,gestures,frantic,extradition,echelon,disks,dawnie,dared,damsel,curled,collateral,collage,chant,calculating,bumping,bribes,boardwalk,blinds,blindly,bleeds,bickering,beasts,backside,avenge,apprehended,anguish,abusing,youthful,yells,yanking,whomever,when'd,vomiting,vengeful,unpacking,unfamiliar,undying,tumble,trolls,treacherous,tipping,tantrum,tanked,summons,straps,stomped,stinkin,stings,staked,squirrels,sprinkles,speculate,sorting,skinned,sicko,sicker,shootin,shatter,seeya,schnapps,s'posed,ronee,respectful,regroup,regretting,reeling,reckoned,ramifications,puddy,projections,preschool,plissken,platonic,permalash,outdone,outburst,mutants,mugging,misfortune,miserably,miraculously,medications,margaritas,manpower,lovemaking,logically,leeches,latrine,kneel,inflict,impostor,hypocrisy,hippies,heterosexual,heightened,hecuba,healer,gunned,grooming,groin,gooey,gloomy,frying,friendships,fredo,firepower,fathom,exhaustion,evils,endeavor,eggnog,dreaded,d'arcy,crotch,coughing,coronary,cookin,consummate,congrats,companionship,caved,caspar,bulletproof,brilliance,breakin,brash,blasting,aloud,airtight,advising,advertise,adultery,aches,wronged,upbeat,trillion,thingies,tending,tarts,surreal,specs,specialize,spade,shrew,shaping,selves,schoolwork,roomie,recuperating,rabid,quart,provocative,proudly,pretenses,prenatal,pharmaceuticals,pacing,overworked,originals,nicotine,murderous,mileage,mayonnaise,massages,losin,interrogated,injunction,impartial,homing,heartbreaker,hacks,glands,giver,fraizh,flips,flaunt,englishman,electrocuted,dusting,ducking,drifted,donating,cylon,crutches,crates,cowards,comfortably,chummy,chitchat,childbirth,businesswoman,brood,blatant,bethy,barring,bagged,awakened,asbestos,airplanes,worshipped,winnings,why're,visualize,unprotected,unleash,trays,thicker,therapists,takeoff,streisand,storeroom,stethoscope,stacked,spiteful,sneaks,snapping,slaughtered,slashed,simplest,silverware,shits,secluded,scruples,scrubs,scraps,ruptured,roaring,receptionist,recap,raditch,radiator,pushover,plastered,pharmacist,perverse,perpetrator,ornament,ointment,nineties,napping,nannies,mousse,moors,momentary,misunderstandings,manipulator,malfunction,laced,kivar,kickin,infuriating,impressionable,holdup,hires,hesitated,headphones,hammering,groundwork,grotesque,graces,gauze,gangsters,frivolous,freeing,fours,forwarding,ferrars,faulty,fantasizing,extracurricular,empathy,divorces,detonate,depraved,demeaning,deadlines,dalai,cursing,cufflink,crows,coupons,comforted,claustrophobic,casinos,camped,busboy,bluth,bennetts,baskets,attacker,aplastic,angrier,affectionate,zapped,wormhole,weaken,unrealistic,unravel,unimportant,unforgettable,twain,suspend,superbowl,stutter,stewardess,stepson,standin,spandex,souvenirs,sociopath,skeletons,shivering,sexier,selfishness,scrapbook,ritalin,ribbons,reunite,remarry,relaxation,rattling,rapist,psychosis,prepping,poses,pleasing,pisses,piling,persecuted,padded,operatives,negotiator,natty,menopause,mennihan,martimmys,loyalties,laynie,lando,justifies,intimately,inexperienced,impotent,immortality,horrors,hooky,hinges,heartbreaking,handcuffed,gypsies,guacamole,grovel,graziella,goggles,gestapo,fussy,ferragamo,feeble,eyesight,explosions,experimenting,enchanting,doubtful,dizziness,dismantle,detectors,deserving,defective,dangling,dancin,crumble,creamed,cramping,conceal,clockwork,chrissakes,chrissake,chopping,cabinets,brooding,bonfire,blurt,bloated,blackmailer,beforehand,bathed,bathe,barcode,banish,badges,babble,await,attentive,aroused,antibodies,animosity,ya'll,wrinkled,wonderland,willed,whisk,waltzing,waitressing,vigilant,upbringing,unselfish,uncles,trendy,trajectory,striped,stamina,stalled,staking,stacks,spoils,snuff,snooty,snide,shrinking,senora,secretaries,scoundrel,saline,salads,rundown,riddles,relapse,recommending,raspberry,plight,pecan,pantry,overslept,ornaments,niner,negligent,negligence,nailing,mucho,mouthed,monstrous,malpractice,lowly,loitering,logged,lingering,lettin,lattes,kamal,juror,jillefsky,jacked,irritate,intrusion,insatiable,infect,impromptu,icing,hmmmm,hefty,gasket,frightens,flapping,firstborn,faucet,estranged,envious,dopey,doesn,disposition,disposable,disappointments,dipped,dignified,deceit,dealership,deadbeat,curses,coven,counselors,concierge,clutches,casbah,callous,cahoots,brotherly,britches,brides,bethie,beige,autographed,attendants,attaboy,astonishing,appreciative,antibiotic,aneurysm,afterlife,affidavit,zoning,whats,whaddaya,vasectomy,unsuspecting,toula,topanga,tonio,toasted,tiring,terrorized,tenderness,tailing,sweats,suffocated,sucky,subconsciously,starvin,sprouts,spineless,sorrows,snowstorm,smirk,slicery,sledding,slander,simmer,signora,sigmund,seventies,sedate,scented,sandals,rollers,retraction,resigning,recuperate,receptive,racketeering,queasy,provoking,priors,prerogative,premed,pinched,pendant,outsiders,orbing,opportunist,olanov,neurologist,nanobot,mommies,molested,misread,mannered,laundromat,intercom,inspect,insanely,infatuation,indulgent,indiscretion,inconsiderate,hurrah,howling,herpes,hasta,harassed,hanukkah,groveling,groosalug,gander,galactica,futile,fridays,flier,fixes,exploiting,exorcism,evasive,endorse,emptied,dreary,dreamy,downloaded,dodged,doctored,disobeyed,disneyland,disable,dehydrated,contemplating,coconuts,cockroaches,clogged,chilling,chaperon,cameraman,bulbs,bucklands,bribing,brava,bracelets,bowels,bluepoint,appetizers,appendix,antics,anointed,analogy,almonds,yammering,winch,weirdness,wangler,vibrations,vendor,unmarked,unannounced,twerp,trespass,travesty,transfusion,trainee,towelie,tiresome,straightening,staggering,sonar,socializing,sinus,sinners,shambles,serene,scraped,scones,scepter,sarris,saberhagen,ridiculously,ridicule,rents,reconciled,radios,publicist,pubes,prune,prude,precrime,postponing,pluck,perish,peppermint,peeled,overdo,nutshell,nostalgic,mulan,mouthing,mistook,meddle,maybourne,martimmy,lobotomy,livelihood,lippman,likeness,kindest,kaffee,jocks,jerked,jeopardizing,jazzed,insured,inquisition,inhale,ingenious,holier,helmets,heirloom,heinous,haste,harmsway,hardship,hanky,gutters,gruesome,groping,goofing,godson,glare,finesse,figuratively,ferrie,endangerment,dreading,dozed,dorky,dmitri,divert,discredit,dialing,cufflinks,crutch,craps,corrupted,cocoon,cleavage,cannery,bystander,brushes,bruising,bribery,brainstorm,bolted,binge,ballistics,astute,arroway,adventurous,adoptive,addicts,addictive,yadda,whitelighters,wematanye,weeds,wedlock,wallets,vulnerability,vroom,vents,upped,unsettling,unharmed,trippin,trifle,tracing,tormenting,thats,syphilis,subtext,stickin,spices,sores,smacked,slumming,sinks,signore,shitting,shameful,shacked,septic,seedy,righteousness,relish,rectify,ravishing,quickest,phoebs,perverted,peeing,pedicure,pastrami,passionately,ozone,outnumbered,oregano,offender,nukes,nosed,nighty,nifty,mounties,motivate,moons,misinterpreted,mercenary,mentality,marsellus,lupus,lumbar,lovesick,lobsters,leaky,laundering,latch,jafar,instinctively,inspires,indoors,incarcerated,hundredth,handkerchief,gynecologist,guittierez,groundhog,grinning,goodbyes,geese,fullest,eyelashes,eyelash,enquirer,endlessly,elusive,disarm,detest,deluding,dangle,cotillion,corsage,conjugal,confessional,cones,commandment,coded,coals,chuckle,christmastime,cheeseburgers,chardonnay,celery,campfire,calming,burritos,brundle,broflovski,brighten,borderline,blinked,bling,beauties,bauers,battered,articulate,alienated,ahhhhh,agamemnon,accountants,y'see,wrongful,wrapper,workaholic,winnebago,whispered,warts,vacate,unworthy,unanswered,tonane,tolerated,throwin,throbbing,thrills,thorns,thereof,there've,tarot,sunscreen,stretcher,stereotype,soggy,sobbing,sizable,sightings,shucks,shrapnel,sever,senile,seaboard,scorned,saver,rebellious,rained,putty,prenup,pores,pinching,pertinent,peeping,paints,ovulating,opposites,occult,nutcracker,nutcase,newsstand,newfound,mocked,midterms,marshmallow,marbury,maclaren,leans,krudski,knowingly,keycard,junkies,juilliard,jolinar,irritable,invaluable,inuit,intoxicating,instruct,insolent,inexcusable,incubator,illustrious,hunsecker,houseguest,homosexuals,homeroom,hernia,harming,handgun,hallways,hallucination,gunshots,groupies,groggy,goiter,gingerbread,giggling,frigging,fledged,fedex,fairies,exchanging,exaggeration,esteemed,enlist,drags,dispense,disloyal,disconnect,desks,dentists,delacroix,degenerate,daydreaming,cushions,cuddly,corroborate,complexion,compensated,cobbler,closeness,chilled,checkmate,channing,carousel,calms,bylaws,benefactor,ballgame,baiting,backstabbing,artifact,airspace,adversary,actin,accuses,accelerant,abundantly,abstinence,zissou,zandt,yapping,witchy,willows,whadaya,vilandra,veiled,undress,undivided,underestimating,ultimatums,twirl,truckload,tremble,toasting,tingling,tents,tempered,sulking,stunk,sponges,spills,softly,snipers,scourge,rooftop,riana,revolting,revisit,refreshments,redecorating,recapture,raysy,pretense,prejudiced,precogs,pouting,poofs,pimple,piles,pediatrician,padre,packets,paces,orvelle,oblivious,objectivity,nighttime,nervosa,mexicans,meurice,melts,matchmaker,maeby,lugosi,lipnik,leprechaun,kissy,kafka,introductions,intestines,inspirational,insightful,inseparable,injections,inadvertently,hussy,huckabees,hittin,hemorrhaging,headin,haystack,hallowed,grudges,granilith,grandkids,grading,gracefully,godsend,gobbles,fragrance,fliers,finchley,farts,eyewitnesses,expendable,existential,dorms,delaying,degrading,deduction,darlings,danes,cylons,counsellor,contraire,consciously,conjuring,congratulating,cokes,buffay,brooch,bitching,bistro,bijou,bewitched,benevolent,bends,bearings,barren,aptitude,amish,amazes,abomination,worldly,whispers,whadda,wayward,wailing,vanishing,upscale,untouchable,unspoken,uncontrollable,unavoidable,unattended,trite,transvestite,toupee,timid,timers,terrorizing,swana,stumped,strolling,storybook,storming,stomachs,stoked,stationery,springtime,spontaneity,spits,spins,soaps,sentiments,scramble,scone,rooftops,retract,reflexes,rawdon,ragged,quirky,quantico,psychologically,prodigal,pounce,potty,pleasantries,pints,petting,perceive,onstage,notwithstanding,nibble,newmans,neutralize,mutilated,millionaires,mayflower,masquerade,mangy,macreedy,lunatics,lovable,locating,limping,lasagna,kwang,keepers,juvie,jaded,ironing,intuitive,intensely,insure,incantation,hysteria,hypnotize,humping,happenin,griet,grasping,glorified,ganging,g'night,focker,flunking,flimsy,flaunting,fixated,fitzwallace,fainting,eyebrow,exonerated,ether,electrician,egotistical,earthly,dusted,dignify,detonation,debrief,dazzling,dan'l,damnedest,daisies,crushes,crucify,contraband,confronting,collapsing,cocked,clicks,cliche,circled,chandelier,carburetor,callers,broads,breathes,bloodshed,blindsided,blabbing,bialystock,bashing,ballerina,aviva,arteries,anomaly,airstrip,agonizing,adjourn,aaaaa,yearning,wrecker,witnessing,whence,warhead,unsure,unheard,unfreeze,unfold,unbalanced,ugliest,troublemaker,toddler,tiptoe,threesome,thirties,thermostat,swipe,surgically,subtlety,stung,stumbling,stubs,stride,strangling,sprayed,socket,smuggled,showering,shhhhh,sabotaging,rumson,rounding,risotto,repairman,rehearsed,ratty,ragging,radiology,racquetball,racking,quieter,quicksand,prowl,prompt,premeditated,prematurely,prancing,porcupine,plated,pinocchio,peeked,peddle,panting,overweight,overrun,outing,outgrown,obsess,nursed,nodding,negativity,negatives,musketeers,mugger,motorcade,merrily,matured,masquerading,marvellous,maniacs,lovey,louse,linger,lilies,lawful,kudos,knuckle,juices,judgments,itches,intolerable,intermission,inept,incarceration,implication,imaginative,huckleberry,holster,heartburn,gunna,groomed,graciously,fulfillment,fugitives,forsaking,forgives,foreseeable,flavors,flares,fixation,fickle,fantasize,famished,fades,expiration,exclamation,erasing,eiffel,eerie,earful,duped,dulles,dissing,dissect,dispenser,dilated,detergent,desdemona,debriefing,damper,curing,crispina,crackpot,courting,cordial,conflicted,comprehension,commie,cleanup,chiropractor,charmer,chariot,cauldron,catatonic,bullied,buckets,brilliantly,breathed,booths,boardroom,blowout,blindness,blazing,biologically,bibles,biased,beseech,barbaric,balraj,audacity,anticipating,alcoholics,airhead,agendas,admittedly,absolution,youre,yippee,wittlesey,withheld,willful,whammy,weakest,washes,virtuous,videotapes,vials,unplugged,unpacked,unfairly,turbulence,tumbling,tricking,tremendously,traitors,torches,tinga,thyroid,teased,tawdry,taker,sympathies,swiped,sundaes,suave,strut,stepdad,spewing,spasm,socialize,slither,simulator,shutters,shrewd,shocks,semantics,schizophrenic,scans,savages,rya'c,runny,ruckus,royally,roadblocks,rewriting,revoke,repent,redecorate,recovers,recourse,ratched,ramali,racquet,quince,quiche,puppeteer,puking,puffed,problemo,praises,pouch,postcards,pooped,poised,piled,phoney,phobia,patching,parenthood,pardner,oozing,ohhhhh,numbing,nostril,nosey,neatly,nappa,nameless,mortuary,moronic,modesty,midwife,mcclane,matuka,maitre,lumps,lucid,loosened,loins,lawnmower,lamotta,kroehner,jinxy,jessep,jamming,jailhouse,jacking,intruders,inhuman,infatuated,indigestion,implore,implanted,hormonal,hoboken,hillbilly,heartwarming,headway,hatched,hartmans,harping,grapevine,gnome,forties,flyin,flirted,fingernail,exhilarating,enjoyment,embark,dumper,dubious,drell,docking,disillusioned,dishonor,disbarred,dicey,custodial,counterproductive,corned,cords,contemplate,concur,conceivable,cobblepot,chickened,checkout,carpe,cap'n,campers,buyin,bullies,braid,boxed,bouncy,blueberries,blubbering,bloodstream,bigamy,beeped,bearable,autographs,alarming,wretch,wimps,widower,whirlwind,whirl,warms,vandelay,unveiling,undoing,unbecoming,turnaround,touche,togetherness,tickles,ticker,teensy,taunt,sweethearts,stitched,standpoint,staffers,spotless,soothe,smothered,sickening,shouted,shepherds,shawl,seriousness,schooled,schoolboy,s'mores,roped,reminders,raggedy,preemptive,plucked,pheromones,particulars,pardoned,overpriced,overbearing,outrun,ohmigod,nosing,nicked,neanderthal,mosquitoes,mortified,milky,messin,mecha,markinson,marivellas,mannequin,manderley,madder,macready,lookie,locusts,lifetimes,lanna,lakhi,kholi,impersonate,hyperdrive,horrid,hopin,hogging,hearsay,harpy,harboring,hairdo,hafta,grasshopper,gobble,gatehouse,foosball,floozy,fished,firewood,finalize,felons,euphemism,entourage,elitist,elegance,drokken,drier,dredge,dossier,diseased,diarrhea,diagnose,despised,defuse,d'amour,contesting,conserve,conscientious,conjured,collars,clogs,chenille,chatty,chamomile,casing,calculator,brittle,breached,blurted,birthing,bikinis,astounding,assaulting,aroma,appliance,antsy,amnio,alienating,aliases,adolescence,xerox,wrongs,workload,willona,whistling,werewolves,wallaby,unwelcome,unseemly,unplug,undermining,ugliness,tyranny,tuesdays,trumpets,transference,ticks,tangible,tagging,swallowing,superheroes,studs,strep,stowed,stomping,steffy,sprain,spouting,sponsoring,sneezing,smeared,slink,shakin,sewed,seatbelt,scariest,scammed,sanctimonious,roasting,rightly,retinal,rethinking,resented,reruns,remover,racks,purest,progressing,presidente,preeclampsia,postponement,portals,poppa,pliers,pinning,pelvic,pampered,padding,overjoyed,ooooo,one'll,octavius,nonono,nicknames,neurosurgeon,narrows,misled,mislead,mishap,milltown,milking,meticulous,mediocrity,meatballs,machete,lurch,layin,knockin,khruschev,jurors,jumpin,jugular,jeweler,intellectually,inquiries,indulging,indestructible,indebted,imitate,ignores,hyperventilating,hyenas,hurrying,hermano,hellish,heheh,harshly,handout,grunemann,glances,giveaway,getup,gerome,furthest,frosting,frail,forwarded,forceful,flavored,flammable,flaky,fingered,fatherly,ethic,embezzlement,duffel,dotted,distressed,disobey,disappearances,dinky,diminish,diaphragm,deuces,creme,courteous,comforts,coerced,clots,clarification,chunks,chickie,chases,chaperoning,cartons,caper,calves,caged,bustin,bulging,bringin,boomhauer,blowin,blindfolded,biscotti,ballplayer,bagging,auster,assurances,aschen,arraigned,anonymity,alters,albatross,agreeable,adoring,abduct,wolfi,weirded,watchers,washroom,warheads,vincennes,urgency,understandably,uncomplicated,uhhhh,twitching,treadmill,thermos,tenorman,tangle,talkative,swarm,surrendering,summoning,strive,stilts,stickers,squashed,spraying,sparring,soaring,snort,sneezed,slaps,skanky,singin,sidle,shreck,shortness,shorthand,sharper,shamed,sadist,rydell,rusik,roulette,resumes,respiration,recount,reacts,purgatory,princesses,presentable,ponytail,plotted,pinot,pigtails,phillippe,peddling,paroled,orbed,offends,o'hara,moonlit,minefield,metaphors,malignant,mainframe,magicks,maggots,maclaine,loathing,leper,leaps,leaping,lashed,larch,larceny,lapses,ladyship,juncture,jiffy,jakov,invoke,infantile,inadmissible,horoscope,hinting,hideaway,hesitating,heddy,heckles,hairline,gripe,gratifying,governess,goebbels,freddo,foresee,fascination,exemplary,executioner,etcetera,escorts,endearing,eaters,earplugs,draped,disrupting,disagrees,dimes,devastate,detain,depositions,delicacy,darklighter,cynicism,cyanide,cutters,cronus,continuance,conquering,confiding,compartments,combing,cofell,clingy,cleanse,christmases,cheered,cheekbones,buttle,burdened,bruenell,broomstick,brained,bozos,bontecou,bluntman,blazes,blameless,bizarro,bellboy,beaucoup,barkeep,awaken,astray,assailant,appease,aphrodisiac,alleys,yesss,wrecks,woodpecker,wondrous,wimpy,willpower,wheeling,weepy,waxing,waive,videotaped,veritable,untouched,unlisted,unfounded,unforeseen,twinge,triggers,traipsing,toxin,tombstone,thumping,therein,testicles,telephones,tarmac,talby,tackled,swirling,suicides,suckered,subtitles,sturdy,strangler,stockbroker,stitching,steered,standup,squeal,sprinkler,spontaneously,splendor,spiking,spender,snipe,snagged,skimming,siddown,showroom,shovels,shotguns,shoelaces,shitload,shellfish,sharpest,shadowy,seizing,scrounge,scapegoat,sayonara,saddled,rummaging,roomful,renounce,reconsidered,recharge,realistically,radioed,quirks,quadrant,punctual,practising,pours,poolhouse,poltergeist,pocketbook,plainly,picnics,pesto,pawing,passageway,partied,oneself,numero,nostalgia,nitwit,neuro,mixer,meanest,mcbeal,matinee,margate,marce,manipulations,manhunt,manger,magicians,loafers,litvack,lightheaded,lifeguard,lawns,laughingstock,ingested,indignation,inconceivable,imposition,impersonal,imbecile,huddled,housewarming,horizons,homicides,hiccups,hearse,hardened,gushing,gushie,greased,goddamit,freelancer,forging,fondue,flustered,flung,flinch,flicker,fixin,festivus,fertilizer,farted,faggots,exonerate,evict,enormously,encrypted,emdash,embracing,duress,dupres,dowser,doormat,disfigured,disciplined,dibbs,depository,deathbed,dazzled,cuttin,cures,crowding,crepe,crammed,copycat,contradict,confidant,condemning,conceited,commute,comatose,clapping,circumference,chuppah,chore,choksondik,chestnuts,briault,bottomless,bonnet,blokes,berluti,beret,beggars,bankroll,bania,athos,arsenic,apperantly,ahhhhhh,afloat,accents,zipped,zeros,zeroes,zamir,yuppie,youngsters,yorkers,wisest,wipes,wield,whyn't,weirdos,wednesdays,vicksburg,upchuck,untraceable,unsupervised,unpleasantness,unhook,unconscionable,uncalled,trappings,tragedies,townie,thurgood,things'll,thine,tetanus,terrorize,temptations,tanning,tampons,swarming,straitjacket,steroid,startling,starry,squander,speculating,sollozzo,sneaked,slugs,skedaddle,sinker,silky,shortcomings,sellin,seasoned,scrubbed,screwup,scrapes,scarves,sandbox,salesmen,rooming,romances,revere,reproach,reprieve,rearranging,ravine,rationalize,raffle,punchy,psychobabble,provocation,profoundly,prescriptions,preferable,polishing,poached,pledges,pirelli,perverts,oversized,overdressed,outdid,nuptials,nefarious,mouthpiece,motels,mopping,mongrel,missin,metaphorically,mertin,memos,melodrama,melancholy,measles,meaner,mantel,maneuvering,mailroom,luring,listenin,lifeless,licks,levon,legwork,kneecaps,kippur,kiddie,kaput,justifiable,insistent,insidious,innuendo,innit,indecent,imaginable,horseshit,hemorrhoid,hella,healthiest,haywire,hamsters,hairbrush,grouchy,grisly,gratuitous,glutton,glimmer,gibberish,ghastly,gentler,generously,geeky,fuhrer,fronting,foolin,faxes,faceless,extinguisher,expel,etched,endangering,ducked,dodgeball,dives,dislocated,discrepancy,devour,derail,dementia,daycare,cynic,crumbling,cowardice,covet,cornwallis,corkscrew,cookbook,commandments,coincidental,cobwebs,clouded,clogging,clicking,clasp,chopsticks,chefs,chaps,cashing,carat,calmer,brazen,brainwashing,bradys,bowing,boned,bloodsucking,bleachers,bleached,bedpan,bearded,barrenger,bachelors,awwww,assures,assigning,asparagus,apprehend,anecdote,amoral,aggravation,afoot,acquaintances,accommodating,yakking,worshipping,wladek,willya,willies,wigged,whoosh,whisked,watered,warpath,volts,violates,valuables,uphill,unwise,untimely,unsavory,unresponsive,unpunished,unexplained,tubby,trolling,toxicology,tormented,toothache,tingly,timmiihh,thursdays,thoreau,terrifies,temperamental,telegrams,talkie,takers,symbiote,swirl,suffocate,stupider,strapping,steckler,springing,someway,sleepyhead,sledgehammer,slant,slams,showgirl,shoveling,shmoopy,sharkbait,shan't,scrambling,schematics,sandeman,sabbatical,rummy,reykjavik,revert,responsive,rescheduled,requisition,relinquish,rejoice,reckoning,recant,rebadow,reassurance,rattlesnake,ramble,primed,pricey,prance,pothole,pocus,persist,perpetrated,pekar,peeling,pastime,parmesan,pacemaker,overdrive,ominous,observant,nothings,noooooo,nonexistent,nodded,nieces,neglecting,nauseating,mutated,musket,mumbling,mowing,mouthful,mooseport,monologue,mistrust,meetin,masseuse,mantini,mailer,madre,lowlifes,locksmith,livid,liven,limos,liberating,lhasa,leniency,leering,laughable,lashes,lasagne,laceration,korben,katan,kalen,jittery,jammies,irreplaceable,intubate,intolerant,inhaler,inhaled,indifferent,indifference,impound,impolite,humbly,heroics,heigh,guillotine,guesthouse,grounding,grips,gossiping,goatee,gnomes,gellar,frutt,frobisher,freudian,foolishness,flagged,femme,fatso,fatherhood,fantasized,fairest,faintest,eyelids,extravagant,extraterrestrial,extraordinarily,escalator,elevate,drivel,dissed,dismal,disarray,dinnertime,devastation,dermatologist,delicately,defrost,debutante,debacle,damone,dainty,cuvee,culpa,crucified,creeped,crayons,courtship,convene,congresswoman,concocted,compromises,comprende,comma,coleslaw,clothed,clinically,chickenshit,checkin,cesspool,caskets,calzone,brothel,boomerang,bodega,blasphemy,bitsy,bicentennial,berlini,beatin,beards,barbas,barbarians,backpacking,arrhythmia,arousing,arbitrator,antagonize,angling,anesthetic,altercation,aggressor,adversity,acathla,aaahhh,wreaking,workup,wonderin,wither,wielding,what'm,what'cha,waxed,vibrating,veterinarian,venting,vasey,valor,validate,upholstery,untied,unscathed,uninterrupted,unforgiving,undies,uncut,twinkies,tucking,treatable,treasured,tranquility,townspeople,torso,tomei,tipsy,tinsel,tidings,thirtieth,tantrums,tamper,talky,swayed,swapping,suitor,stylist,stirs,standoff,sprinklers,sparkly,snobby,snatcher,smoother,sleepin,shrug,shoebox,sheesh,shackles,setbacks,sedatives,screeching,scorched,scanned,satyr,roadblock,riverbank,ridiculed,resentful,repellent,recreate,reconvene,rebuttal,realmedia,quizzes,questionnaire,punctured,pucker,prolong,professionalism,pleasantly,pigsty,penniless,paychecks,patiently,parading,overactive,ovaries,orderlies,oracles,oiled,offending,nudie,neonatal,neighborly,moops,moonlighting,mobilize,mmmmmm,milkshake,menial,meats,mayan,maxed,mangled,magua,lunacy,luckier,liters,lansbury,kooky,knowin,jeopardized,inkling,inhalation,inflated,infecting,incense,inbound,impractical,impenetrable,idealistic,i'mma,hypocrites,hurtin,humbled,hologram,hokey,hocus,hitchhiking,hemorrhoids,headhunter,hassled,harts,hardworking,haircuts,hacksaw,genitals,gazillion,gammy,gamesphere,fugue,footwear,folly,flashlights,fives,filet,extenuating,estrogen,entails,embezzled,eloquent,egomaniac,ducts,drowsy,drones,doree,donovon,disguises,diggin,deserting,depriving,defying,deductible,decorum,decked,daylights,daybreak,dashboard,damnation,cuddling,crunching,crickets,crazies,councilman,coughed,conundrum,complimented,cohaagen,clutching,clued,clader,cheques,checkpoint,chats,channeling,ceases,carasco,capisce,cantaloupe,cancelling,campsite,burglars,breakfasts,bra'tac,blueprint,bleedin,blabbed,beneficiary,basing,avert,atone,arlyn,approves,apothecary,antiseptic,aleikuum,advisement,zadir,wobbly,withnail,whattaya,whacking,wedged,wanders,vaginal,unimaginable,undeniable,unconditionally,uncharted,unbridled,tweezers,tvmegasite,trumped,triumphant,trimming,treading,tranquilizers,toontown,thunk,suture,suppressing,strays,stonewall,stogie,stepdaughter,stace,squint,spouses,splashed,speakin,sounder,sorrier,sorrel,sombrero,solemnly,softened,snobs,snippy,snare,smoothing,slump,slimeball,slaving,silently,shiller,shakedown,sensations,scrying,scrumptious,screamin,saucy,santoses,roundup,roughed,rosary,robechaux,retrospect,rescind,reprehensible,repel,remodeling,reconsidering,reciprocate,railroaded,psychics,promos,prob'ly,pristine,printout,priestess,prenuptial,precedes,pouty,phoning,peppy,pariah,parched,panes,overloaded,overdoing,nymphs,nother,notebooks,nearing,nearer,monstrosity,milady,mieke,mephesto,medicated,marshals,manilow,mammogram,m'lady,lotsa,loopy,lesion,lenient,learner,laszlo,kross,kinks,jinxed,involuntary,insubordination,ingrate,inflatable,incarnate,inane,hypoglycemia,huntin,humongous,hoodlum,honking,hemorrhage,helpin,hathor,hatching,grotto,grandmama,gorillas,godless,girlish,ghouls,gershwin,frosted,flutter,flagpole,fetching,fatter,faithfully,exert,evasion,escalate,enticing,enchantress,elopement,drills,downtime,downloading,dorks,doorways,divulge,dissociative,disgraceful,disconcerting,deteriorate,destinies,depressive,dented,denim,decruz,decidedly,deactivate,daydreams,curls,culprit,cruelest,crippling,cranberries,corvis,copped,commend,coastguard,cloning,cirque,churning,chock,chivalry,catalogues,cartwheels,carols,canister,buttered,bundt,buljanoff,bubbling,brokers,broaden,brimstone,brainless,bores,badmouthing,autopilot,ascertain,aorta,ampata,allenby,accosted,absolve,aborted,aaagh,aaaaaah,yonder,yellin,wyndham,wrongdoing,woodsboro,wigging,wasteland,warranty,waltzed,walnuts,vividly,veggie,unnecessarily,unloaded,unicorns,understated,unclean,umbrellas,twirling,turpentine,tupperware,triage,treehouse,tidbit,tickled,threes,thousandth,thingie,terminally,teething,tassel,talkies,swoon,switchboard,swerved,suspiciously,subsequentlyne,subscribe,strudel,stroking,strictest,stensland,starin,stannart,squirming,squealing,sorely,softie,snookums,sniveling,smidge,sloth,skulking,simian,sightseeing,siamese,shudder,shoppers,sharpen,shannen,semtex,secondhand,seance,scowl,scorn,safekeeping,russe,rummage,roshman,roomies,roaches,rinds,retrace,retires,resuscitate,rerun,reputations,rekall,refreshment,reenactment,recluse,ravioli,raves,raking,purses,punishable,punchline,puked,prosky,previews,poughkeepsie,poppins,polluted,placenta,pissy,petulant,perseverance,pears,pawns,pastries,partake,panky,palate,overzealous,orchids,obstructing,objectively,obituaries,obedient,nothingness,musty,motherly,mooning,momentous,mistaking,minutemen,milos,microchip,meself,merciless,menelaus,mazel,masturbate,mahogany,lysistrata,lillienfield,likable,liberate,leveled,letdown,larynx,lardass,lainey,lagged,klorel,kidnappings,keyed,karmic,jeebies,irate,invulnerable,intrusive,insemination,inquire,injecting,informative,informants,impure,impasse,imbalance,illiterate,hurled,hunts,hematoma,headstrong,handmade,handiwork,growling,gorky,getcha,gesundheit,gazing,galley,foolishly,fondness,floris,ferocious,feathered,fateful,fancies,fakes,faker,expire,ever'body,essentials,eskimos,enlightening,enchilada,emissary,embolism,elsinore,ecklie,drenched,drazi,doped,dogging,doable,dislikes,dishonesty,disengage,discouraging,derailed,deformed,deflect,defer,deactivated,crips,constellations,congressmen,complimenting,clubbing,clawing,chromium,chimes,chews,cheatin,chaste,cellblock,caving,catered,catacombs,calamari,bucking,brulee,brits,brisk,breezes,bounces,boudoir,binks,better'n,bellied,behrani,behaves,bedding,balmy,badmouth,backers,avenging,aromatherapy,armpit,armoire,anythin,anonymously,anniversaries,aftershave,affliction,adrift,admissible,adieu,acquittal,yucky,yearn,whitter,whirlpool,wendigo,watchdog,wannabes,wakey,vomited,voicemail,valedictorian,uttered,unwed,unrequited,unnoticed,unnerving,unkind,unjust,uniformed,unconfirmed,unadulterated,unaccounted,uglier,turnoff,trampled,tramell,toads,timbuktu,throwback,thimble,tasteless,tarantula,tamale,takeovers,swish,supposing,streaking,stargher,stanzi,stabs,squeamish,splattered,spiritually,spilt,speciality,smacking,skywire,skips,skaara,simpatico,shredding,showin,shortcuts,shite,shielding,shamelessly,serafine,sentimentality,seasick,schemer,scandalous,sainted,riedenschneider,rhyming,revel,retractor,retards,resurrect,remiss,reminiscing,remanded,reiben,regains,refuel,refresher,redoing,redheaded,reassured,rearranged,rapport,qumar,prowling,prejudices,precarious,powwow,pondering,plunger,plunged,pleasantville,playpen,phlegm,perfected,pancreas,paley,ovary,outbursts,oppressed,ooohhh,omoroca,offed,o'toole,nurture,nursemaid,nosebleed,necktie,muttering,munchies,mucking,mogul,mitosis,misdemeanor,miscarried,millionth,migraines,midler,manicurist,mandelbaum,manageable,malfunctioned,magnanimous,loudmouth,longed,lifestyles,liddy,lickety,leprechauns,komako,klute,kennel,justifying,irreversible,inventing,intergalactic,insinuate,inquiring,ingenuity,inconclusive,incessant,improv,impersonation,hyena,humperdinck,hubba,housework,hoffa,hither,hissy,hippy,hijacked,heparin,hellooo,hearth,hassles,hairstyle,hahahaha,hadda,guys'll,gutted,gulls,gritty,grievous,graft,gossamer,gooder,gambled,gadgets,fundamentals,frustrations,frolicking,frock,frilly,foreseen,footloose,fondly,flirtation,flinched,flatten,farthest,exposer,evading,escrow,empathize,embryos,embodiment,ellsberg,ebola,dulcinea,dreamin,drawbacks,doting,doose,doofy,disturbs,disorderly,disgusts,detox,denominator,demeanor,deliriously,decode,debauchery,croissant,cravings,cranked,coworkers,councilor,confuses,confiscate,confines,conduit,compress,combed,clouding,clamps,cinch,chinnery,celebratory,catalogs,carpenters,carnal,canin,bundys,bulldozer,buggers,bueller,brainy,booming,bookstores,bloodbath,bittersweet,bellhop,beeping,beanstalk,beady,baudelaire,bartenders,bargains,averted,armadillo,appreciating,appraised,antlers,aloof,allowances,alleyway,affleck,abject,zilch,youore,xanax,wrenching,wouldn,witted,wicca,whorehouse,whooo,whips,vouchers,victimized,vicodin,untested,unsolicited,unfocused,unfettered,unfeeling,unexplainable,understaffed,underbelly,tutorial,tryst,trampoline,towering,tirade,thieving,thang,swimmin,swayzak,suspecting,superstitions,stubbornness,streamers,strattman,stonewalling,stiffs,stacking,spout,splice,sonrisa,smarmy,slows,slicing,sisterly,shrill,shined,seeming,sedley,seatbelts,scour,scold,schoolyard,scarring,salieri,rustling,roxbury,rewire,revved,retriever,reputable,remodel,reins,reincarnation,rance,rafters,rackets,quail,pumbaa,proclaim,probing,privates,pried,prewedding,premeditation,posturing,posterity,pleasurable,pizzeria,pimps,penmanship,penchant,pelvis,overturn,overstepped,overcoat,ovens,outsmart,outed,ooohh,oncologist,omission,offhand,odour,nyazian,notarized,nobody'll,nightie,navel,nabbed,mystique,mover,mortician,morose,moratorium,mockingbird,mobsters,mingling,methinks,messengered,merde,masochist,martouf,martians,marinara,manray,majorly,magnifying,mackerel,lurid,lugging,lonnegan,loathsome,llantano,liberace,leprosy,latinos,lanterns,lamest,laferette,kraut,intestine,innocencia,inhibitions,ineffectual,indisposed,incurable,inconvenienced,inanimate,improbable,implode,hydrant,hustling,hustled,huevos,how'm,hooey,hoods,honcho,hinge,hijack,heimlich,hamunaptra,haladki,haiku,haggle,gutsy,grunting,grueling,gribbs,greevy,grandstanding,godparents,glows,glistening,gimmick,gaping,fraiser,formalities,foreigner,folders,foggy,fitty,fiends,fe'nos,favours,eyeing,extort,expedite,escalating,epinephrine,entitles,entice,eminence,eights,earthlings,eagerly,dunville,dugout,doublemeat,doling,dispensing,dispatcher,discoloration,diners,diddly,dictates,diazepam,derogatory,delights,defies,decoder,dealio,danson,cutthroat,crumbles,croissants,crematorium,craftsmanship,could'a,cordless,cools,conked,confine,concealing,complicates,communique,cockamamie,coasters,clobbered,clipping,clipboard,clemenza,cleanser,circumcision,chanukah,certainaly,cellmate,cancels,cadmium,buzzed,bumstead,bucko,browsing,broth,braver,boggling,bobbing,blurred,birkhead,benet,belvedere,bellies,begrudge,beckworth,banky,baldness,baggy,babysitters,aversion,astonished,assorted,appetites,angina,amiss,ambulances,alibis,airway,admires,adhesive,yoyou,xxxxxx,wreaked,wracking,woooo,wooing,wised,wilshire,wedgie,waging,violets,vincey,uplifting,untrustworthy,unmitigated,uneventful,undressing,underprivileged,unburden,umbilical,tweaking,turquoise,treachery,tosses,torching,toothpick,toasts,thickens,tereza,tenacious,teldar,taint,swill,sweatin,subtly,subdural,streep,stopwatch,stockholder,stillwater,stalkers,squished,squeegee,splinters,spliced,splat,spied,spackle,sophistication,snapshots,smite,sluggish,slithered,skeeters,sidewalks,sickly,shrugs,shrubbery,shrieking,shitless,settin,sentinels,selfishly,scarcely,sangria,sanctum,sahjhan,rustle,roving,rousing,rosomorf,riddled,responsibly,renoir,remoray,remedial,refundable,redirect,recheck,ravenwood,rationalizing,ramus,ramelle,quivering,pyjamas,psychos,provocations,prouder,protestors,prodded,proctologist,primordial,pricks,prickly,precedents,pentangeli,pathetically,parka,parakeet,panicky,overthruster,outsmarted,orthopedic,oncoming,offing,nutritious,nuthouse,nourishment,nibbling,newlywed,narcissist,mutilation,mundane,mummies,mumble,mowed,morvern,mortem,mopes,molasses,misplace,miscommunication,miney,midlife,menacing,memorizing,massaging,masking,magnets,luxuries,lounging,lothario,liposuction,lidocaine,libbets,levitate,leeway,launcelot,larek,lackeys,kumbaya,kryptonite,knapsack,keyhole,katarangura,juiced,jakey,ironclad,invoice,intertwined,interlude,interferes,injure,infernal,indeedy,incur,incorrigible,incantations,impediment,igloo,hysterectomy,hounded,hollering,hindsight,heebie,havesham,hasenfuss,hankering,hangers,hakuna,gutless,gusto,grubbing,grrrr,grazed,gratification,grandeur,gorak,godammit,gnawing,glanced,frostbite,frees,frazzled,fraulein,fraternizing,fortuneteller,formaldehyde,followup,foggiest,flunky,flickering,firecrackers,figger,fetuses,fates,eyeliner,extremities,extradited,expires,exceedingly,evaporate,erupt,epileptic,entrails,emporium,egregious,eggshells,easing,duwayne,droll,dreyfuss,dovey,doubly,doozy,donkeys,donde,distrust,distressing,disintegrate,discreetly,decapitated,dealin,deader,dashed,darkroom,dares,daddies,dabble,cushy,cupcakes,cuffed,croupier,croak,crapped,coursing,coolers,contaminate,consummated,construed,condos,concoction,compulsion,commish,coercion,clemency,clairvoyant,circulate,chesterton,checkered,charlatan,chaperones,categorically,cataracts,carano,capsules,capitalize,burdon,bullshitting,brewed,breathless,breasted,brainstorming,bossing,borealis,bonsoir,bobka,boast,blimp,bleep,bleeder,blackouts,bisque,billboards,beatings,bayberry,bashed,bamboozled,balding,baklava,baffled,backfires,babak,awkwardness,attest,attachments,apologizes,anyhoo,antiquated,alcante,advisable,aahhh,aaahh,zatarc,yearbooks,wuddya,wringing,womanhood,witless,winging,whatsa,wetting,waterproof,wastin,vogelman,vocation,vindicated,vigilance,vicariously,venza,vacuuming,utensils,uplink,unveil,unloved,unloading,uninhibited,unattached,tweaked,turnips,trinkets,toughen,toting,topside,terrors,terrify,technologically,tarnish,tagliati,szpilman,surly,supple,summation,suckin,stepmom,squeaking,splashmore,souffle,solitaire,solicitation,solarium,smokers,slugged,slobbering,skylight,skimpy,sinuses,silenced,sideburns,shrinkage,shoddy,shhhhhh,shelled,shareef,shangri,seuss,serenade,scuffle,scoff,scanners,sauerkraut,sardines,sarcophagus,salvy,rusted,russells,rowboat,rolfsky,ringside,respectability,reparations,renegotiate,reminisce,reimburse,regimen,raincoat,quibble,puzzled,purposefully,pubic,proofing,prescribing,prelim,poisons,poaching,personalized,personable,peroxide,pentonville,payphone,payoffs,paleontology,overflowing,oompa,oddest,objecting,o'hare,o'daniel,notches,nobody'd,nightstand,neutralized,nervousness,nerdy,needlessly,naquadah,nappy,nantucket,nambla,mountaineer,motherfuckin,morrie,monopolizing,mohel,mistreated,misreading,misbehave,miramax,minivan,milligram,milkshakes,metamorphosis,medics,mattresses,mathesar,matchbook,matata,marys,malucci,magilla,lymphoma,lowers,lordy,linens,lindenmeyer,limelight,leapt,laxative,lather,lapel,lamppost,laguardia,kindling,kegger,kawalsky,juries,jokin,jesminder,interning,innermost,injun,infallible,industrious,indulgence,incinerator,impossibility,impart,illuminate,iguanas,hypnotic,hyped,hospitable,hoses,homemaker,hirschmuller,helpers,headset,guardianship,guapo,grubby,granola,granddaddy,goren,goblet,gluttony,globes,giorno,getter,geritol,gassed,gaggle,foxhole,fouled,foretold,floorboards,flippers,flaked,fireflies,feedings,fashionably,farragut,fallback,facials,exterminate,excites,everything'll,evenin,ethically,ensue,enema,empath,eluded,eloquently,eject,edema,dumpling,droppings,dolled,distasteful,disputing,displeasure,disdain,deterrent,dehydration,defied,decomposing,dawned,dailies,custodian,crusts,crucifix,crowning,crier,crept,craze,crawls,couldn,correcting,corkmaster,copperfield,cooties,contraption,consumes,conspire,consenting,consented,conquers,congeniality,complains,communicator,commendable,collide,coladas,colada,clout,clooney,classifieds,clammy,civility,cirrhosis,chink,catskills,carvers,carpool,carelessness,cardio,carbs,capades,butabi,busmalis,burping,burdens,bunks,buncha,bulldozers,browse,brockovich,breakthroughs,bravado,boogety,blossoms,blooming,bloodsucker,blight,betterton,betrayer,belittle,beeps,bawling,barts,bartending,bankbooks,babish,atropine,assertive,armbrust,anyanka,annoyance,anemic,anago,airwaves,aimlessly,aaargh,aaand,yoghurt,writhing,workable,winking,winded,widen,whooping,whiter,whatya,wazoo,voila,virile,vests,vestibule,versed,vanishes,urkel,uproot,unwarranted,unscheduled,unparalleled,undergrad,tweedle,turtleneck,turban,trickery,transponder,toyed,townhouse,thyself,thunderstorm,thinning,thawed,tether,technicalities,tau'ri,tarnished,taffeta,tacked,systolic,swerve,sweepstakes,swabs,suspenders,superwoman,sunsets,succulent,subpoenas,stumper,stosh,stomachache,stewed,steppin,stepatech,stateside,spicoli,sparing,soulless,sonnets,sockets,snatching,smothering,slush,sloman,slashing,sitters,simpleton,sighs,sidra,sickens,shunned,shrunken,showbiz,shopped,shimmering,shagging,semblance,segue,sedation,scuzzlebutt,scumbags,screwin,scoundrels,scarsdale,scabs,saucers,saintly,saddened,runaways,runaround,rheya,resenting,rehashing,rehabilitated,regrettable,refreshed,redial,reconnecting,ravenous,raping,rafting,quandary,pylea,putrid,puffing,psychopathic,prunes,probate,prayin,pomegranate,plummeting,planing,plagues,pinata,pithy,perversion,personals,perched,peeps,peckish,pavarotti,pajama,packin,pacifier,overstepping,okama,obstetrician,nutso,nuance,normalcy,nonnegotiable,nomak,ninny,nines,nicey,newsflash,neutered,nether,negligee,necrosis,navigating,narcissistic,mylie,muses,momento,moisturizer,moderation,misinformed,misconception,minnifield,mikkos,methodical,mebbe,meager,maybes,matchmaking,masry,markovic,malakai,luzhin,lusting,lumberjack,loopholes,loaning,lightening,leotard,launder,lamaze,kubla,kneeling,kibosh,jumpsuit,joliet,jogger,janover,jakovasaurs,irreparable,innocently,inigo,infomercial,inexplicable,indispensable,impregnated,impossibly,imitating,hunches,hummus,houmfort,hothead,hostiles,hooves,hooligans,homos,homie,hisself,heyyy,hesitant,hangout,handsomest,handouts,hairless,gwennie,guzzling,guinevere,grungy,goading,glaring,gavel,gardino,gangrene,fruitful,friendlier,freckle,freakish,forthright,forearm,footnote,flops,fixer,firecracker,finito,figgered,fezzik,fastened,farfetched,fanciful,familiarize,faire,fahrenheit,extravaganza,exploratory,explanatory,everglades,eunuch,estas,escapade,erasers,emptying,embarassing,dweeb,dutiful,dumplings,dries,drafty,dollhouse,dismissing,disgraced,discrepancies,disbelief,disagreeing,digestion,didnt,deviled,deviated,demerol,delectable,decaying,decadent,dears,dateless,d'algout,cultivating,cryto,crumpled,crumbled,cronies,crease,craves,cozying,corduroy,congratulated,confidante,compressions,complicating,compadre,coerce,classier,chums,chumash,chivalrous,chinpoko,charred,chafing,celibacy,carted,carryin,carpeting,carotid,cannibals,candor,butterscotch,busts,busier,bullcrap,buggin,brookside,brodski,brassiere,brainwash,brainiac,botrelle,bonbon,boatload,blimey,blaring,blackness,bipartisan,bimbos,bigamist,biebe,biding,betrayals,bestow,bellerophon,bedpans,bassinet,basking,barzini,barnyard,barfed,backups,audited,asinine,asalaam,arouse,applejack,annoys,anchovies,ampule,alameida,aggravate,adage,accomplices,yokel,y'ever,wringer,witwer,withdrawals,windward,willfully,whorfin,whimsical,whimpering,weddin,weathered,warmest,wanton,volant,visceral,vindication,veggies,urinate,uproar,unwritten,unwrap,unsung,unsubstantiated,unspeakably,unscrupulous,unraveling,unquote,unqualified,unfulfilled,undetectable,underlined,unattainable,unappreciated,ummmm,ulcers,tylenol,tweak,turnin,tuatha,tropez,trellis,toppings,tootin,toodle,tinkering,thrives,thespis,theatrics,thatherton,tempers,tavington,tartar,tampon,swelled,sutures,sustenance,sunflowers,sublet,stubbins,strutting,strewn,stowaway,stoic,sternin,stabilizing,spiraling,spinster,speedometer,speakeasy,soooo,soiled,sneakin,smithereens,smelt,smacks,slaughterhouse,slacks,skids,sketching,skateboards,sizzling,sixes,sirree,simplistic,shouts,shorted,shoelace,sheeit,shards,shackled,sequestered,selmak,seduces,seclusion,seamstress,seabeas,scoops,scooped,scavenger,satch,s'more,rudeness,romancing,rioja,rifkin,rieper,revise,reunions,repugnant,replicating,repaid,renewing,relaxes,rekindle,regrettably,regenerate,reels,reciting,reappear,readin,ratting,rapes,rancher,rammed,rainstorm,railroading,queers,punxsutawney,punishes,pssst,prudy,proudest,protectors,procrastinating,proactive,priss,postmortem,pompoms,poise,pickings,perfectionist,peretti,people'll,pecking,patrolman,paralegal,paragraphs,paparazzi,pankot,pampering,overstep,overpower,outweigh,omnipotent,odious,nuwanda,nurtured,newsroom,neeson,needlepoint,necklaces,neato,muggers,muffler,mousy,mourned,mosey,mopey,mongolians,moldy,misinterpret,minibar,microfilm,mendola,mended,melissande,masturbating,masbath,manipulates,maimed,mailboxes,magnetism,m'lord,m'honey,lymph,lunge,lovelier,lefferts,leezak,ledgers,larraby,laloosh,kundun,kozinski,knockoff,kissin,kiosk,kennedys,kellman,karlo,kaleidoscope,jeffy,jaywalking,instructing,infraction,informer,infarction,impulsively,impressing,impersonated,impeach,idiocy,hyperbole,hurray,humped,huhuh,hsing,hordes,hoodlums,honky,hitchhiker,hideously,heaving,heathcliff,headgear,headboard,hazing,harem,handprint,hairspray,gutiurrez,goosebumps,gondola,glitches,gasping,frolic,freeways,frayed,fortitude,forgetful,forefathers,fonder,foiled,foaming,flossing,flailing,fitzgeralds,firehouse,finders,fiftieth,fellah,fawning,farquaad,faraway,fancied,extremists,exorcist,exhale,ethros,entrust,ennui,energized,encephalitis,embezzling,elster,elixir,electrolytes,duplex,dryers,drexl,dredging,drawback,don'ts,dobisch,divorcee,disrespected,disprove,disobeying,disinfectant,dingy,digress,dieting,dictating,devoured,devise,detonators,desist,deserter,derriere,deron,deceptive,debilitating,deathwok,daffodils,curtsy,cursory,cuppa,cumin,cronkite,cremation,credence,cranking,coverup,courted,countin,counselling,cornball,contentment,consensual,compost,cluett,cleverly,cleansed,cleanliness,chopec,chomp,chins,chime,cheswick,chessler,cheapest,chatted,cauliflower,catharsis,catchin,caress,camcorder,calorie,cackling,bystanders,buttoned,buttering,butted,buries,burgel,buffoon,brogna,bragged,boutros,bogeyman,blurting,blurb,blowup,bloodhound,blissful,birthmark,bigot,bestest,belted,belligerent,beggin,befall,beeswax,beatnik,beaming,barricade,baggoli,badness,awoke,artsy,artful,aroun,armpits,arming,annihilate,anise,angiogram,anaesthetic,amorous,ambiance,alligators,adoration,admittance,adama,abydos,zonked,zhivago,yorkin,wrongfully,writin,wrappers,worrywart,woops,wonderfalls,womanly,wickedness,whoopie,wholeheartedly,whimper,which'll,wheelchairs,what'ya,warranted,wallop,wading,wacked,virginal,vermouth,vermeil,verger,ventriss,veneer,vampira,utero,ushers,urgently,untoward,unshakable,unsettled,unruly,unlocks,ungodly,undue,uncooperative,uncontrollably,unbeatable,twitchy,tumbler,truest,triumphs,triplicate,tribbey,tortures,tongaree,tightening,thorazine,theres,testifies,teenaged,tearful,taxing,taldor,syllabus,swoops,swingin,suspending,sunburn,stuttering,stupor,strides,strategize,strangulation,stooped,stipulation,stingy,stapled,squeaks,squawking,spoilsport,splicing,spiel,spencers,spasms,spaniard,softener,sodding,soapbox,smoldering,smithbauer,skittish,sifting,sickest,sicilians,shuffling,shrivel,segretti,seeping,securely,scurrying,scrunch,scrote,screwups,schenkman,sawing,savin,satine,sapiens,salvaging,salmonella,sacrilege,rumpus,ruffle,roughing,rotted,rondall,ridding,rickshaw,rialto,rhinestone,restrooms,reroute,requisite,repress,rednecks,redeeming,rayed,ravell,raked,raincheck,raffi,racked,pushin,profess,prodding,procure,presuming,preppy,prednisone,potted,posttraumatic,poorhouse,podiatrist,plowed,pledging,playroom,plait,placate,pinback,picketing,photographing,pharoah,petrak,petal,persecuting,perchance,pellets,peeved,peerless,payable,pauses,pathologist,pagliacci,overwrought,overreaction,overqualified,overheated,outcasts,otherworldly,opinionated,oodles,oftentimes,occured,obstinate,nutritionist,numbness,nubile,nooooooo,nobodies,nepotism,neanderthals,mushu,mucus,mothering,mothballs,monogrammed,molesting,misspoke,misspelled,misconstrued,miscalculated,minimums,mince,mildew,mighta,middleman,mementos,mellowed,mayol,mauled,massaged,marmalade,mardi,makings,lundegaard,lovingly,loudest,lotto,loosing,loompa,looming,longs,loathes,littlest,littering,lifelike,legalities,laundered,lapdog,lacerations,kopalski,knobs,knitted,kittridge,kidnaps,kerosene,karras,jungles,jockeys,iranoff,invoices,invigorating,insolence,insincere,insectopia,inhumane,inhaling,ingrates,infestation,individuality,indeterminate,incomprehensible,inadequacy,impropriety,importer,imaginations,illuminating,ignite,hysterics,hypodermic,hyperventilate,hyperactive,humoring,honeymooning,honed,hoist,hoarding,hitching,hiker,hightail,hemoglobin,hell'd,heinie,growin,grasped,grandparent,granddaughters,gouged,goblins,gleam,glades,gigantor,get'em,geriatric,gatekeeper,gargoyles,gardenias,garcon,garbo,gallows,gabbing,futon,fulla,frightful,freshener,fortuitous,forceps,fogged,fodder,foamy,flogging,flaun,flared,fireplaces,feverish,favell,fattest,fattening,fallow,extraordinaire,evacuating,errant,envied,enchant,enamored,egocentric,dussander,dunwitty,dullest,dropout,dredged,dorsia,doornail,donot,dongs,dogged,dodgy,ditty,dishonorable,discriminating,discontinue,dings,dilly,dictation,dialysis,delly,delightfully,daryll,dandruff,cruddy,croquet,cringe,crimp,credo,crackling,courtside,counteroffer,counterfeiting,corrupting,copping,conveyor,contusions,contusion,conspirator,consoling,connoisseur,confetti,composure,compel,colic,coddle,cocksuckers,coattails,cloned,claustrophobia,clamoring,churn,chugga,chirping,chasin,chapped,chalkboard,centimeter,caymans,catheter,casings,caprica,capelli,cannolis,cannoli,camogli,camembert,butchers,butchered,busboys,bureaucrats,buckled,bubbe,brownstone,bravely,brackley,bouquets,botox,boozing,boosters,bodhi,blunders,blunder,blockage,biocyte,betrays,bested,beryllium,beheading,beggar,begbie,beamed,bastille,barstool,barricades,barbecues,barbecued,bandwagon,backfiring,bacarra,avenged,autopsies,aunties,associating,artichoke,arrowhead,appendage,apostrophe,antacid,ansel,annul,amuses,amped,amicable,amberg,alluring,adversaries,admirers,adlai,acupuncture,abnormality,aaaahhhh,zooming,zippity,zipping,zeroed,yuletide,yoyodyne,yengeese,yeahhh,wrinkly,wracked,withered,winks,windmills,whopping,wendle,weigart,waterworks,waterbed,watchful,wantin,wagging,waaah,vying,ventricle,varnish,vacuumed,unreachable,unprovoked,unmistakable,unfriendly,unfolding,underpaid,uncuff,unappealing,unabomber,typhoid,tuxedos,tushie,turds,tumnus,troubadour,trinium,treaters,treads,transpired,transgression,tought,thready,thins,thinners,techs,teary,tattaglia,tassels,tarzana,tanking,tablecloths,synchronize,symptomatic,sycophant,swimmingly,sweatshop,surfboard,superpowers,sunroom,sunblock,sugarplum,stupidly,strumpet,strapless,stooping,stools,stealthy,stalks,stairmaster,staffer,sshhh,squatting,squatters,spectacularly,sorbet,socked,sociable,snubbed,snorting,sniffles,snazzy,snakebite,smuggler,smorgasbord,smooching,slurping,slouch,slingshot,slaved,skimmed,sisterhood,silliest,sidarthur,sheraton,shebang,sharpening,shanghaied,shakers,sendoff,scurvy,scoliosis,scaredy,scagnetti,sawchuk,saugus,sasquatch,sandbag,saltines,s'pose,roston,rostle,riveting,ristle,rifling,revulsion,reverently,retrograde,restful,resents,reptilian,reorganize,renovating,reiterate,reinvent,reinmar,reibers,reechard,recuse,reconciling,recognizance,reclaiming,recitation,recieved,rebate,reacquainted,rascals,railly,quintuplets,quahog,pygmies,puzzling,punctuality,prosthetic,proms,probie,preys,preserver,preppie,poachers,plummet,plumbers,plannin,pitying,pitfalls,piqued,pinecrest,pinches,pillage,pigheaded,physique,pessimistic,persecute,perjure,percentile,pentothal,pensky,penises,peini,pazzi,pastels,parlour,paperweight,pamper,pained,overwhelm,overalls,outrank,outpouring,outhouse,outage,ouija,obstructed,obsessions,obeying,obese,o'riley,o'higgins,nosebleeds,norad,noooooooo,nononono,nonchalant,nippy,neurosis,nekhorvich,necronomicon,naquada,n'est,mystik,mystified,mumps,muddle,mothership,moped,monumentally,monogamous,mondesi,misogynistic,misinterpreting,mindlock,mending,megaphone,meeny,medicating,meanie,masseur,markstrom,marklars,margueritas,manifesting,maharajah,lukewarm,loveliest,loran,lizardo,liquored,lipped,lingers,limey,lemkin,leisurely,lathe,latched,lapping,ladle,krevlorneswath,kosygin,khakis,kenaru,keats,kaitlan,julliard,jollies,jaundice,jargon,jackals,invisibility,insipid,inflamed,inferiority,inexperience,incinerated,incinerate,incendiary,incan,inbred,implicating,impersonator,hunks,horsing,hooded,hippopotamus,hiked,hetson,hetero,hessian,henslowe,hendler,hellstrom,headstone,hayloft,harbucks,handguns,hallucinate,haldol,haggling,gynaecologist,gulag,guilder,guaranteeing,groundskeeper,grindstone,grimoir,grievance,griddle,gribbit,greystone,graceland,gooders,goeth,gentlemanly,gelatin,gawking,ganged,fukes,fromby,frenchmen,foursome,forsley,forbids,footwork,foothold,floater,flinging,flicking,fittest,fistfight,fireballs,fillings,fiddling,fennyman,felonious,felonies,feces,favoritism,fatten,fanatics,faceman,excusing,excepted,entwined,entree,ensconced,eladio,ehrlichman,easterland,dueling,dribbling,drape,downtrodden,doused,dosed,dorleen,dokie,distort,displeased,disown,dismount,disinherited,disarmed,disapproves,diperna,dined,diligent,dicaprio,depress,decoded,debatable,dealey,darsh,damsels,damning,dad'll,d'oeuvre,curlers,curie,cubed,crikey,crepes,countrymen,cornfield,coppers,copilot,copier,cooing,conspiracies,consigliere,condoning,commoner,commies,combust,comas,colds,clawed,clamped,choosy,chomping,chimps,chigorin,chianti,cheep,checkups,cheaters,celibate,cautiously,cautionary,castell,carpentry,caroling,carjacking,caritas,caregiver,cardiology,candlesticks,canasta,cain't,burro,burnin,bunking,bumming,bullwinkle,brummel,brooms,brews,breathin,braslow,bracing,botulism,boorish,bloodless,blayne,blatantly,blankie,bedbugs,becuase,barmaid,bared,baracus,banal,bakes,backpacks,attentions,atrocious,ativan,athame,asunder,astound,assuring,aspirins,asphyxiation,ashtrays,aryans,arnon,apprehension,applauding,anvil,antiquing,antidepressants,annoyingly,amputate,altruistic,alotta,alerting,afterthought,affront,affirm,actuality,abysmal,absentee,yeller,yakushova,wuzzy,wriggle,worrier,woogyman,womanizer,windpipe,windbag,willin,whisking,whimsy,wendall,weeny,weensy,weasels,watery,watcha,wasteful,waski,washcloth,waaay,vouched,viznick,ventriloquist,vendettas,veils,vayhue,vamanos,vadimus,upstage,uppity,unsaid,unlocking,unintentionally,undetected,undecided,uncaring,unbearably,tween,tryout,trotting,trini,trimmings,trickier,treatin,treadstone,trashcan,transcendent,tramps,townsfolk,torturous,torrid,toothpicks,tolerable,tireless,tiptoeing,timmay,tillinghouse,tidying,tibia,thumbing,thrusters,thrashing,these'll,thatos,testicular,teriyaki,tenors,tenacity,tellers,telemetry,tarragon,switchblade,swicker,swells,sweatshirts,swatches,surging,supremely,sump'n,succumb,subsidize,stumbles,stuffs,stoppin,stipulate,stenographer,steamroll,stasis,stagger,squandered,splint,splendidly,splashy,splashing,specter,sorcerers,somewheres,somber,snuggled,snowmobile,sniffed,snags,smugglers,smudged,smirking,smearing,slings,sleet,sleepovers,sleek,slackers,siree,siphoning,singed,sincerest,sickened,shuffled,shriveled,shorthanded,shittin,shish,shipwrecked,shins,sheetrock,shawshank,shamu,sha're,servitude,sequins,seascape,scrapings,scoured,scorching,sandpaper,saluting,salud,ruffled,roughnecks,rougher,rosslyn,rosses,roost,roomy,romping,revolutionize,reprimanded,refute,refrigerated,reeled,redundancies,rectal,recklessly,receding,reassignment,reapers,readout,ration,raring,ramblings,raccoons,quarantined,purging,punters,psychically,premarital,pregnancies,predisposed,precautionary,pollute,podunk,plums,plaything,pixilated,pitting,piranhas,pieced,piddles,pickled,photogenic,phosphorous,pffft,pestilence,pessimist,perspiration,perps,penticoff,passageways,pardons,panics,pancamo,paleontologist,overwhelms,overstating,overpaid,overdid,outlive,orthodontist,orgies,oreos,ordover,ordinates,ooooooh,oooohhh,omelettes,officiate,obtuse,obits,nymph,novocaine,noooooooooo,nipping,nilly,nightstick,negate,neatness,natured,narcotic,narcissism,namun,nakatomi,murky,muchacho,mouthwash,motzah,morsel,morph,morlocks,mooch,moloch,molest,mohra,modus,modicum,mockolate,misdemeanors,miscalculation,middies,meringue,mercilessly,meditating,mayakovsky,maximillian,marlee,markovski,maniacal,maneuvered,magnificence,maddening,lutze,lunged,lovelies,lorry,loosening,lookee,littered,lilac,lightened,laces,kurzon,kurtzweil,kind've,kimono,kenji,kembu,keanu,kazuo,jonesing,jilted,jiggling,jewelers,jewbilee,jacqnoud,jacksons,ivories,insurmountable,innocuous,innkeeper,infantery,indulged,indescribable,incoherent,impervious,impertinent,imperfections,hunnert,huffy,horsies,horseradish,hollowed,hogwash,hockley,hissing,hiromitsu,hidin,hereafter,helpmann,hehehe,haughty,happenings,hankie,handsomely,halliwells,haklar,haise,gunsights,grossly,grope,grocer,grits,gripping,grabby,glorificus,gizzard,gilardi,gibarian,geminon,gasses,garnish,galloping,gairwyn,futterman,futility,fumigated,fruitless,friendless,freon,foregone,forego,floored,flighty,flapjacks,fizzled,ficus,festering,farbman,fabricate,eyghon,extricate,exalted,eventful,esophagus,enterprising,entail,endor,emphatically,embarrasses,electroshock,easel,duffle,drumsticks,dissection,dissected,disposing,disparaging,disorientation,disintegrated,disarming,devoting,dessaline,deprecating,deplorable,delve,degenerative,deduct,decomposed,deathly,dearie,daunting,dankova,cyclotron,cyberspace,cutbacks,culpable,cuddled,crumpets,cruelly,crouching,cranium,cramming,cowering,couric,cordesh,conversational,conclusively,clung,clotting,cleanest,chipping,chimpanzee,chests,cheapen,chainsaws,censure,catapult,caravaggio,carats,captivating,calrissian,butlers,busybody,bussing,bunion,bulimic,budging,brung,browbeat,brokenhearted,brecher,breakdowns,bracebridge,boning,blowhard,blisters,blackboard,bigotry,bialy,bhamra,bended,begat,battering,baste,basquiat,barricaded,barometer,balled,baited,badenweiler,backhand,ascenscion,argumentative,appendicitis,apparition,anxiously,antagonistic,angora,anacott,amniotic,ambience,alonna,aleck,akashic,ageless,abouts,aawwww,aaaaarrrrrrggghhh,aaaaaa,zendi,yuppies,yodel,y'hear,wrangle,wombosi,wittle,withstanding,wisecracks,wiggling,wierd,whittlesley,whipper,whattya,whatsamatter,whatchamacallit,whassup,whad'ya,weakling,warfarin,waponis,wampum,wadn't,vorash,vizzini,virtucon,viridiana,veracity,ventilated,varicose,varcon,vandalized,vamos,vamoose,vaccinated,vacationing,usted,urinal,uppers,unwittingly,unsealed,unplanned,unhinged,unhand,unfathomable,unequivocally,unbreakable,unadvisedly,udall,tynacorp,tuxes,tussle,turati,tunic,tsavo,trussed,troublemakers,trollop,tremors,transsexual,transfusions,toothbrushes,toned,toddlers,tinted,tightened,thundering,thorpey,this'd,thespian,thaddius,tenuous,tenths,tenement,telethon,teleprompter,teaspoon,taunted,tattle,tardiness,taraka,tappy,tapioca,tapeworm,talcum,tacks,swivel,swaying,superpower,summarize,sumbitch,sultry,suburbia,styrofoam,stylings,strolls,strobe,stockpile,stewardesses,sterilized,sterilize,stealin,stakeouts,squawk,squalor,squabble,sprinkled,sportsmanship,spokes,spiritus,sparklers,spareribs,sowing,sororities,sonovabitch,solicit,softy,softness,softening,snuggling,snatchers,snarling,snarky,snacking,smears,slumped,slowest,slithering,sleazebag,slayed,slaughtering,skidded,skated,sivapathasundaram,sissies,silliness,silences,sidecar,sicced,shylock,shtick,shrugged,shriek,shoves,should'a,shortcake,shockingly,shirking,shaves,shatner,sharpener,shapely,shafted,sexless,septum,selflessness,seabea,scuff,screwball,scoping,scooch,scolding,schnitzel,schemed,scalper,santy,sankara,sanest,salesperson,sakulos,safehouse,sabers,runes,rumblings,rumbling,ruijven,ringers,righto,rhinestones,retrieving,reneging,remodelling,relentlessly,regurgitate,refills,reeking,reclusive,recklessness,recanted,ranchers,rafer,quaking,quacks,prophesied,propensity,profusely,problema,prided,prays,postmark,popsicles,poodles,pollyanna,polaroids,pokes,poconos,pocketful,plunging,plugging,pleeease,platters,pitied,pinetti,piercings,phooey,phonies,pestering,periscope,pentagram,pelts,patronized,paramour,paralyze,parachutes,pales,paella,paducci,owatta,overdone,overcrowded,overcompensating,ostracized,ordinate,optometrist,operandi,omens,okayed,oedipal,nuttier,nuptial,nunheim,noxious,nourish,notepad,nitroglycerin,nibblet,neuroses,nanosecond,nabbit,mythic,munchkins,multimillion,mulroney,mucous,muchas,mountaintop,morlin,mongorians,moneybags,mom'll,molto,mixup,misgivings,mindset,michalchuk,mesmerized,merman,mensa,meaty,mbwun,materialize,materialistic,masterminded,marginally,mapuhe,malfunctioning,magnify,macnamara,macinerney,machinations,macadamia,lysol,lurks,lovelorn,lopsided,locator,litback,litany,linea,limousines,limes,lighters,liebkind,levity,levelheaded,letterhead,lesabre,leron,lepers,lefts,leftenant,laziness,layaway,laughlan,lascivious,laryngitis,lapsed,landok,laminated,kurten,kobol,knucklehead,knowed,knotted,kirkeby,kinsa,karnovsky,jolla,jimson,jettison,jeric,jawed,jankis,janitors,jango,jalopy,jailbreak,jackers,jackasses,invalidate,intercepting,intercede,insinuations,infertile,impetuous,impaled,immerse,immaterial,imbeciles,imagines,idyllic,idolized,icebox,i'd've,hypochondriac,hyphen,hurtling,hurried,hunchback,hullo,horsting,hoooo,homeboys,hollandaise,hoity,hijinks,hesitates,herrero,herndorff,helplessly,heeyy,heathen,hearin,headband,harrassment,harpies,halstrom,hahahahaha,hacer,grumbling,grimlocks,grift,greets,grandmothers,grander,grafts,gordievsky,gondorff,godorsky,glscripts,gaudy,gardeners,gainful,fuses,fukienese,frizzy,freshness,freshening,fraught,frantically,foxbooks,fortieth,forked,foibles,flunkies,fleece,flatbed,fisted,firefight,fingerpaint,filibuster,fhloston,fenceline,femur,fatigues,fanucci,fantastically,familiars,falafel,fabulously,eyesore,expedient,ewwww,eviscerated,erogenous,epidural,enchante,embarassed,embarass,embalming,elude,elspeth,electrocute,eigth,eggshell,echinacea,eases,earpiece,earlobe,dumpsters,dumbshit,dumbasses,duloc,duisberg,drummed,drinkers,dressy,dorma,doily,divvy,diverting,dissuade,disrespecting,displace,disorganized,disgustingly,discord,disapproving,diligence,didja,diced,devouring,detach,destructing,desolate,demerits,delude,delirium,degrade,deevak,deemesa,deductions,deduce,debriefed,deadbeats,dateline,darndest,damnable,dalliance,daiquiri,d'agosta,cussing,cryss,cripes,cretins,crackerjack,cower,coveting,couriers,countermission,cotswolds,convertibles,conversationalist,consorting,consoled,consarn,confides,confidentially,commited,commiserate,comme,comforter,comeuppance,combative,comanches,colosseum,colling,coexist,coaxing,cliffside,chutes,chucked,chokes,childlike,childhoods,chickening,chenowith,charmingly,changin,catsup,captioning,capsize,cappucino,capiche,candlewell,cakewalk,cagey,caddie,buxley,bumbling,bulky,buggered,brussel,brunettes,brumby,brotha,bronck,brisket,bridegroom,braided,bovary,bookkeeper,bluster,bloodline,blissfully,blase,billionaires,bicker,berrisford,bereft,berating,berate,bendy,belive,belated,beikoku,beens,bedspread,bawdy,barreling,baptize,banya,balthazar,balmoral,bakshi,bails,badgered,backstreet,awkwardly,auras,attuned,atheists,astaire,assuredly,arrivederci,appetit,appendectomy,apologetic,antihistamine,anesthesiologist,amulets,albie,alarmist,aiight,adstream,admirably,acquaint,abound,abominable,aaaaaaah,zekes,zatunica,wussy,worded,wooed,woodrell,wiretap,windowsill,windjammer,windfall,whisker,whims,whatiya,whadya,weirdly,weenies,waunt,washout,wanto,waning,victimless,verdad,veranda,vandaley,vancomycin,valise,vaguest,upshot,unzip,unwashed,untrained,unstuck,unprincipled,unmentionables,unjustly,unfolds,unemployable,uneducated,unduly,undercut,uncovering,unconsciousness,unconsciously,tyndareus,turncoat,turlock,tulle,tryouts,trouper,triplette,trepkos,tremor,treeger,trapeze,traipse,tradeoff,trach,torin,tommorow,tollan,toity,timpani,thumbprint,thankless,tell'em,telepathy,telemarketing,telekinesis,teevee,teeming,tarred,tambourine,talentless,swooped,switcheroo,swirly,sweatpants,sunstroke,suitors,sugarcoat,subways,subterfuge,subservient,subletting,stunningly,strongbox,striptease,stravanavitch,stradling,stoolie,stodgy,stocky,stifle,stealer,squeezes,squatter,squarely,sprouted,spool,spindly,speedos,soups,soundly,soulmates,somebody'll,soliciting,solenoid,sobering,snowflakes,snowballs,snores,slung,slimming,skulk,skivvies,skewered,skewer,sizing,sistine,sidebar,sickos,shushing,shunt,shugga,shone,shol'va,sharpened,shapeshifter,shadowing,shadoe,selectman,sefelt,seared,scrounging,scribbling,scooping,scintillating,schmoozing,scallops,sapphires,sanitarium,sanded,safes,rudely,roust,rosebush,rosasharn,rondell,roadhouse,riveted,rewrote,revamp,retaliatory,reprimand,replicators,replaceable,remedied,relinquishing,rejoicing,reincarnated,reimbursed,reevaluate,redid,redefine,recreating,reconnected,rebelling,reassign,rearview,rayne,ravings,ratso,rambunctious,radiologist,quiver,quiero,queef,qualms,pyrotechnics,pulsating,psychosomatic,proverb,promiscuous,profanity,prioritize,preying,predisposition,precocious,precludes,prattling,prankster,povich,potting,postpartum,porridge,polluting,plowing,pistachio,pissin,pickpocket,physicals,peruse,pertains,personified,personalize,perjured,perfecting,pepys,pepperdine,pembry,peering,peels,pedophile,patties,passkey,paratrooper,paraphernalia,paralyzing,pandering,paltry,palpable,pagers,pachyderm,overstay,overestimated,overbite,outwit,outgrow,outbid,ooops,oomph,oohhh,oldie,obliterate,objectionable,nygma,notting,noches,nitty,nighters,newsstands,newborns,neurosurgery,nauseated,nastiest,narcolepsy,mutilate,muscled,murmur,mulva,mulling,mukada,muffled,morgues,moonbeams,monogamy,molester,molestation,molars,moans,misprint,mismatched,mirth,mindful,mimosas,millander,mescaline,menstrual,menage,mellowing,medevac,meddlesome,matey,manicures,malevolent,madmen,macaroons,lydell,lycra,lunchroom,lunching,lozenges,looped,litigious,liquidate,linoleum,lingk,limitless,limber,lilacs,ligature,liftoff,lemmiwinks,leggo,learnin,lazarre,lawyered,lactose,knelt,kenosha,kemosabe,jussy,junky,jordy,jimmies,jeriko,jakovasaur,issacs,isabela,irresponsibility,ironed,intoxication,insinuated,inherits,ingest,ingenue,inflexible,inflame,inevitability,inedible,inducement,indignant,indictments,indefensible,incomparable,incommunicado,improvising,impounded,illogical,ignoramus,hydrochloric,hydrate,hungover,humorless,humiliations,hugest,hoverdrone,hovel,hmmph,hitchhike,hibernating,henchman,helloooo,heirlooms,heartsick,headdress,hatches,harebrained,hapless,hanen,handsomer,hallows,habitual,guten,gummy,guiltier,guidebook,gstaad,gruff,griss,grieved,grata,gorignak,goosed,goofed,glowed,glitz,glimpses,glancing,gilmores,gianelli,geraniums,garroway,gangbusters,gamblers,galls,fuddy,frumpy,frowning,frothy,fro'tak,frere,fragrances,forgettin,follicles,flowery,flophouse,floatin,flirts,flings,flatfoot,fingerprinting,fingerprinted,fingering,finald,fillet,fianc,femoral,federales,fawkes,fascinates,farfel,fambly,falsified,fabricating,exterminators,expectant,excusez,excrement,excercises,evian,etins,esophageal,equivalency,equate,equalizer,entrees,enquire,endearment,empathetic,emailed,eggroll,earmuffs,dyslexic,duper,duesouth,drunker,druggie,dreadfully,dramatics,dragline,downplay,downers,dominatrix,doers,docket,docile,diversify,distracts,disloyalty,disinterested,discharging,disagreeable,dirtier,dinghy,dimwitted,dimoxinil,dimmy,diatribe,devising,deviate,detriment,desertion,depressants,depravity,deniability,delinquents,defiled,deepcore,deductive,decimate,deadbolt,dauthuille,dastardly,daiquiris,daggers,dachau,curiouser,curdled,cucamonga,cruller,cruces,crosswalk,crinkle,crescendo,cremate,counseled,couches,cornea,corday,copernicus,contrition,contemptible,constipated,conjoined,confounded,condescend,concoct,conch,compensating,committment,commandeered,comely,coddled,cockfight,cluttered,clunky,clownfish,cloaked,clenched,cleanin,civilised,circumcised,cimmeria,cilantro,chutzpah,chucking,chiseled,chicka,chattering,cervix,carrey,carpal,carnations,cappuccinos,candied,calluses,calisthenics,bushy,burners,budington,buchanans,brimming,braids,boycotting,bouncers,botticelli,botherin,bookkeeping,bogyman,bogged,bloodthirsty,blintzes,blanky,binturong,billable,bigboote,bewildered,betas,bequeath,behoove,befriend,bedpost,bedded,baudelaires,barreled,barboni,barbeque,bangin,baltus,bailout,backstabber,baccarat,awning,augie,arguillo,archway,apricots,apologising,annyong,anchorman,amenable,amazement,allspice,alannis,airfare,airbags,ahhhhhhhhh,ahhhhhhhh,ahhhhhhh,agitator,adrenal,acidosis,achoo,accessorizing,accentuate,abrasions,abductor,aaaahhh,aaaaaaaa,aaaaaaa,zeroing,zelner,zeldy,yevgeny,yeska,yellows,yeesh,yeahh,yamuri,wouldn't've,workmanship,woodsman,winnin,winked,wildness,whoring,whitewash,whiney,when're,wheezer,wheelman,wheelbarrow,westerburg,weeding,watermelons,washboard,waltzes,wafting,voulez,voluptuous,vitone,vigilantes,videotaping,viciously,vices,veruca,vermeer,verifying,vasculitis,valets,upholstered,unwavering,untold,unsympathetic,unromantic,unrecognizable,unpredictability,unmask,unleashing,unintentional,unglued,unequivocal,underrated,underfoot,unchecked,unbutton,unbind,unbiased,unagi,uhhhhh,tugging,triads,trespasses,treehorn,traviata,trappers,transplants,trannie,tramping,tracheotomy,tourniquet,tooty,toothless,tomarrow,toasters,thruster,thoughtfulness,thornwood,tengo,tenfold,telltale,telephoto,telephoned,telemarketer,tearin,tastic,tastefully,tasking,taser,tamed,tallow,taketh,taillight,tadpoles,tachibana,syringes,sweated,swarthy,swagger,surges,supermodels,superhighway,sunup,sun'll,sulfa,sugarless,sufficed,subside,strolled,stringy,strengthens,straightest,straightens,storefront,stopper,stockpiling,stimulant,stiffed,steyne,sternum,stepladder,stepbrother,steers,steelheads,steakhouse,stathis,stankylecartmankennymr,standoffish,stalwart,squirted,spritz,sprig,sprawl,spousal,sphincter,spenders,spearmint,spatter,spangled,southey,soured,sonuvabitch,somethng,snuffed,sniffs,smokescreen,smilin,slobs,sleepwalker,sleds,slays,slayage,skydiving,sketched,skanks,sixed,siphoned,siphon,simpering,sigfried,sidearm,siddons,sickie,shuteye,shuffleboard,shrubberies,shrouded,showmanship,shouldn't've,shoplift,shiatsu,sentries,sentance,sensuality,seething,secretions,searing,scuttlebutt,sculpt,scowling,scouring,scorecard,schoolers,schmucks,scepters,scaly,scalps,scaffolding,sauces,sartorius,santen,salivating,sainthood,saget,saddens,rygalski,rusting,ruination,rueland,rudabaga,rottweiler,roofies,romantics,rollerblading,roldy,roadshow,rickets,rible,rheza,revisiting,retentive,resurface,restores,respite,resounding,resorting,resists,repulse,repressing,repaying,reneged,refunds,rediscover,redecorated,reconstructive,recommitted,recollect,receptacle,reassess,reanimation,realtors,razinin,rationalization,ratatouille,rashum,rasczak,rancheros,rampler,quizzing,quips,quartered,purring,pummeling,puede,proximo,prospectus,pronouncing,prolonging,procreation,proclamations,principled,prides,preoccupation,prego,precog,prattle,pounced,potshots,potpourri,porque,pomegranates,polenta,plying,pluie,plesac,playmates,plantains,pillowcase,piddle,pickers,photocopied,philistine,perpetuate,perpetually,perilous,pawned,pausing,pauper,parter,parlez,parlay,pally,ovulation,overtake,overstate,overpowering,overpowered,overconfident,overbooked,ovaltine,outweighs,outings,ottos,orrin,orifice,orangutan,oopsy,ooooooooh,oooooo,ooohhhh,ocular,obstruct,obscenely,o'dwyer,nutjob,nunur,notifying,nostrand,nonny,nonfat,noblest,nimble,nikes,nicht,newsworthy,nestled,nearsighted,ne'er,nastier,narco,nakedness,muted,mummified,mudda,mozzarella,moxica,motivator,motility,mothafucka,mortmain,mortgaged,mores,mongers,mobbed,mitigating,mistah,misrepresented,mishke,misfortunes,misdirection,mischievous,mineshaft,millaney,microwaves,metzenbaum,mccovey,masterful,masochistic,marliston,marijawana,manya,mantumbi,malarkey,magnifique,madrona,madox,machida,m'hidi,lullabies,loveliness,lotions,looka,lompoc,litterbug,litigator,lithe,liquorice,linds,limericks,lightbulb,lewises,letch,lemec,layover,lavatory,laurels,lateness,laparotomy,laboring,kuato,kroff,krispy,krauts,knuckleheads,kitschy,kippers,kimbrow,keypad,keepsake,kebab,karloff,junket,judgemental,jointed,jezzie,jetting,jeeze,jeeter,jeesus,jeebs,janeane,jails,jackhammer,ixnay,irritates,irritability,irrevocable,irrefutable,irked,invoking,intricacies,interferon,intents,insubordinate,instructive,instinctive,inquisitive,inlay,injuns,inebriated,indignity,indecisive,incisors,incacha,inalienable,impresses,impregnate,impregnable,implosion,idolizes,hypothyroidism,hypoglycemic,huseni,humvee,huddling,honing,hobnobbing,hobnob,histrionics,histamine,hirohito,hippocratic,hindquarters,hikita,hikes,hightailed,hieroglyphics,heretofore,herbalist,hehey,hedriks,heartstrings,headmistress,headlight,hardheaded,happend,handlebars,hagitha,habla,gyroscope,guys'd,guy'd,guttersnipe,grump,growed,grovelling,groan,greenbacks,gravedigger,grating,grasshoppers,grandiose,grandest,grafted,gooood,goood,gooks,godsakes,goaded,glamorama,giveth,gingham,ghostbusters,germane,georgy,gazzo,gazelles,gargle,garbled,galgenstein,gaffe,g'day,fyarl,furnish,furies,fulfills,frowns,frowned,frighteningly,freebies,freakishly,forewarned,foreclose,forearms,fordson,fonics,flushes,flitting,flemmer,flabby,fishbowl,fidgeting,fevers,feigning,faxing,fatigued,fathoms,fatherless,fancier,fanatical,factored,eyelid,eyeglasses,expresso,expletive,expectin,excruciatingly,evidentiary,ever'thing,eurotrash,eubie,estrangement,erlich,epitome,entrap,enclose,emphysema,embers,emasculating,eighths,eardrum,dyslexia,duplicitous,dumpty,dumbledore,dufus,duddy,duchamp,drunkenness,drumlin,drowns,droid,drinky,drifts,drawbridge,dramamine,douggie,douchebag,dostoyevsky,doodling,don'tcha,domineering,doings,dogcatcher,doctoring,ditzy,dissimilar,dissecting,disparage,disliking,disintegrating,dishwalla,dishonored,dishing,disengaged,disavowed,dippy,diorama,dimmed,dilate,digitalis,diggory,dicing,diagnosing,devola,desolation,dennings,denials,deliverance,deliciously,delicacies,degenerates,degas,deflector,defile,deference,decrepit,deciphered,dawdle,dauphine,daresay,dangles,dampen,damndest,cucumbers,cucaracha,cryogenically,croaks,croaked,criticise,crisper,creepiest,creams,crackle,crackin,covertly,counterintelligence,corrosive,cordially,cops'll,convulsions,convoluted,conversing,conga,confrontational,confab,condolence,condiments,complicit,compiegne,commodus,comings,cometh,collusion,collared,cockeyed,clobber,clemonds,clarithromycin,cienega,christmasy,christmassy,chloroform,chippie,chested,cheeco,checklist,chauvinist,chandlers,chambermaid,chakras,cellophane,caveat,cataloguing,cartmanland,carples,carny,carded,caramels,cappy,caped,canvassing,callback,calibrated,calamine,buttermilk,butterfingers,bunsen,bulimia,bukatari,buildin,budged,brobich,bringer,brendell,brawling,bratty,braised,boyish,boundless,botch,boosh,bookies,bonbons,bodes,bobunk,bluntly,blossoming,bloomers,bloodstains,bloodhounds,blech,biter,biometric,bioethics,bijan,bigoted,bicep,bereaved,bellowing,belching,beholden,beached,batmobile,barcodes,barch,barbecuing,bandanna,backwater,backtrack,backdraft,augustino,atrophy,atrocity,atley,atchoo,asthmatic,assoc,armchair,arachnids,aptly,appetizing,antisocial,antagonizing,anorexia,anini,andersons,anagram,amputation,alleluia,airlock,aimless,agonized,agitate,aggravating,aerosol,acing,accomplishing,accidently,abuser,abstain,abnormally,aberration,aaaaahh,zlotys,zesty,zerzura,zapruder,zantopia,yelburton,yeess,y'knowwhati'msayin,wwhat,wussies,wrenched,would'a,worryin,wormser,wooooo,wookiee,wolchek,wishin,wiseguys,windbreaker,wiggy,wieners,wiedersehen,whoopin,whittled,wherefore,wharvey,welts,wellstone,wedges,wavered,watchit,wastebasket,wango,waken,waitressed,wacquiem,vrykolaka,voula,vitally,visualizing,viciousness,vespers,vertes,verily,vegetarians,vater,vaporize,vannacutt,vallens,ussher,urinating,upping,unwitting,untangle,untamed,unsanitary,unraveled,unopened,unisex,uninvolved,uninteresting,unintelligible,unimaginative,undeserving,undermines,undergarments,unconcerned,tyrants,typist,tykes,tybalt,twosome,twits,tutti,turndown,tularemia,tuberculoma,tsimshian,truffaut,truer,truant,trove,triumphed,tripe,trigonometry,trifled,trifecta,tribulations,tremont,tremoille,transcends,trafficker,touchin,tomfoolery,tinkered,tinfoil,tightrope,thousan,thoracotomy,thesaurus,thawing,thatta,tessio,temps,taxidermist,tator,tachycardia,t'akaya,swelco,sweetbreads,swatting,supercollider,sunbathing,summarily,suffocation,sueleen,succinct,subsided,submissive,subjecting,subbing,subatomic,stupendous,stunted,stubble,stubbed,streetwalker,strategizing,straining,straightaway,stoli,stiffer,stickup,stens,steamroller,steadwell,steadfast,stateroom,stans,sshhhh,squishing,squinting,squealed,sprouting,sprimp,spreadsheets,sprawled,spotlights,spooning,spirals,speedboat,spectacles,speakerphone,southglen,souse,soundproof,soothsayer,sommes,somethings,solidify,soars,snorted,snorkeling,snitches,sniping,snifter,sniffin,snickering,sneer,snarl,smila,slinking,slanted,slanderous,slammin,skimp,skilosh,siteid,sirloin,singe,sighing,sidekicks,sicken,showstopper,shoplifter,shimokawa,sherborne,shavadai,sharpshooters,sharking,shagged,shaddup,senorita,sesterces,sensuous,seahaven,scullery,scorcher,schotzie,schnoz,schmooze,schlep,schizo,scents,scalping,scalped,scallop,scalding,sayeth,saybrooke,sawed,savoring,sardine,sandstorm,sandalwood,salutations,sagman,s'okay,rsvp'd,rousted,rootin,romper,romanovs,rollercoaster,rolfie,robinsons,ritzy,ritualistic,ringwald,rhymed,rheingold,rewrites,revoking,reverts,retrofit,retort,retinas,respirations,reprobate,replaying,repaint,renquist,renege,relapsing,rekindled,rejuvenating,rejuvenated,reinstating,recriminations,rechecked,reassemble,rears,reamed,reacquaint,rayanne,ravish,rathole,raspail,rarest,rapists,rants,racketeer,quittin,quitters,quintessential,queremos,quellek,quelle,quasimodo,pyromaniac,puttanesca,puritanical,purer,puree,pungent,pummel,puedo,psychotherapist,prosecutorial,prosciutto,propositioning,procrastination,probationary,primping,preventative,prevails,preservatives,preachy,praetorians,practicality,powders,potus,postop,positives,poser,portolano,portokalos,poolside,poltergeists,pocketed,poach,plummeted,plucking,plimpton,playthings,plastique,plainclothes,pinpointed,pinkus,pinks,pigskin,piffle,pictionary,piccata,photocopy,phobias,perignon,perfumes,pecks,pecked,patently,passable,parasailing,paramus,papier,paintbrush,pacer,paaiint,overtures,overthink,overstayed,overrule,overestimate,overcooked,outlandish,outgrew,outdoorsy,outdo,orchestrate,oppress,opposable,oooohh,oomupwah,okeydokey,okaaay,ohashi,of'em,obscenities,oakie,o'gar,nurection,nostradamus,norther,norcom,nooch,nonsensical,nipped,nimbala,nervously,neckline,nebbleman,narwhal,nametag,n'n't,mycenae,muzak,muumuu,mumbled,mulvehill,muggings,muffet,mouthy,motivates,motaba,moocher,mongi,moley,moisturize,mohair,mocky,mmkay,mistuh,missis,misdeeds,mincemeat,miggs,miffed,methadone,messieur,menopausal,menagerie,mcgillicuddy,mayflowers,matrimonial,matick,masai,marzipan,maplewood,manzelle,mannequins,manhole,manhandle,malfunctions,madwoman,machiavelli,lynley,lynched,lurconis,lujack,lubricant,looove,loons,loofah,lonelyhearts,lollipops,lineswoman,lifers,lexter,lepner,lemony,leggy,leafy,leadeth,lazerus,lazare,lawford,languishing,lagoda,ladman,kundera,krinkle,krendler,kreigel,kowolski,knockdown,knifed,kneed,kneecap,kids'll,kennie,kenmore,keeled,kazootie,katzenmoyer,kasdan,karak,kapowski,kakistos,julyan,jockstrap,jobless,jiggly,jaunt,jarring,jabbering,irrigate,irrevocably,irrationally,ironies,invitro,intimated,intently,intentioned,intelligently,instill,instigator,instep,inopportune,innuendoes,inflate,infects,infamy,indiscretions,indiscreet,indio,indignities,indict,indecision,inconspicuous,inappropriately,impunity,impudent,impotence,implicates,implausible,imperfection,impatience,immutable,immobilize,idealist,iambic,hysterically,hyperspace,hygienist,hydraulics,hydrated,huzzah,husks,hunched,huffed,hubris,hubbub,hovercraft,houngan,hosed,horoscopes,hopelessness,hoodwinked,honorably,honeysuckle,homegirl,holiest,hippity,hildie,hieroglyphs,hexton,herein,heckle,heaping,healthilizer,headfirst,hatsue,harlot,hardwired,halothane,hairstyles,haagen,haaaaa,gutting,gummi,groundless,groaning,gristle,grills,graynamore,grabbin,goodes,goggle,glittering,glint,gleaming,glassy,girth,gimbal,giblets,gellers,geezers,geeze,garshaw,gargantuan,garfunkel,gangway,gandarium,gamut,galoshes,gallivanting,gainfully,gachnar,fusionlips,fusilli,furiously,frugal,fricking,frederika,freckling,frauds,fountainhead,forthwith,forgo,forgettable,foresight,foresaw,fondling,fondled,fondle,folksy,fluttering,fluffing,floundering,flirtatious,flexing,flatterer,flaring,fixating,finchy,figurehead,fiendish,fertilize,ferment,fending,fellahs,feelers,fascinate,fantabulous,falsify,fallopian,faithless,fairer,fainter,failings,facetious,eyepatch,exxon,extraterrestrials,extradite,extracurriculars,extinguish,expunged,expelling,exorbitant,exhilarated,exertion,exerting,excercise,everbody,evaporated,escargot,escapee,erases,epizootics,epithelials,ephrum,entanglements,enslave,engrossed,emphatic,emeralds,ember,emancipated,elevates,ejaculate,effeminate,eccentricities,easygoing,earshot,dunks,dullness,dulli,dulled,drumstick,dropper,driftwood,dregs,dreck,dreamboat,draggin,downsizing,donowitz,dominoes,diversions,distended,dissipate,disraeli,disqualify,disowned,dishwashing,disciplining,discerning,disappoints,dinged,digested,dicking,detonating,despising,depressor,depose,deport,dents,defused,deflecting,decryption,decoys,decoupage,decompress,decibel,decadence,deafening,dawning,dater,darkened,dappy,dallying,dagon,czechoslovakians,cuticles,cuteness,cupboards,culottes,cruisin,crosshairs,cronyn,criminalistics,creatively,creaming,crapping,cranny,cowed,contradicting,constipation,confining,confidences,conceiving,conceivably,concealment,compulsively,complainin,complacent,compels,communing,commode,comming,commensurate,columnists,colonoscopy,colchicine,coddling,clump,clubbed,clowning,cliffhanger,clang,cissy,choosers,choker,chiffon,channeled,chalet,cellmates,cathartic,caseload,carjack,canvass,canisters,candlestick,candlelit,camry,calzones,calitri,caldy,byline,butterball,bustier,burlap,bureaucrat,buffoons,buenas,brookline,bronzed,broiled,broda,briss,brioche,briar,breathable,brays,brassieres,boysenberry,bowline,boooo,boonies,booklets,bookish,boogeyman,boogey,bogas,boardinghouse,bluuch,blundering,bluer,blowed,blotchy,blossomed,bloodwork,bloodied,blithering,blinks,blathering,blasphemous,blacking,birdson,bings,bfmid,bfast,bettin,berkshires,benjamins,benevolence,benched,benatar,bellybutton,belabor,behooves,beddy,beaujolais,beattle,baxworth,baseless,barfing,bannish,bankrolled,banek,ballsy,ballpoint,baffling,badder,badda,bactine,backgammon,baako,aztreonam,authoritah,auctioning,arachtoids,apropos,aprons,apprised,apprehensive,anythng,antivenin,antichrist,anorexic,anoint,anguished,angioplasty,angio,amply,ampicillin,amphetamines,alternator,alcove,alabaster,airlifted,agrabah,affidavits,admonished,admonish,addled,addendum,accuser,accompli,absurdity,absolved,abrusso,abreast,aboot,abductions,abducting,aback,ababwa,aaahhhh,zorin,zinthar,zinfandel,zillions,zephyrs,zatarcs,zacks,youuu,yokels,yardstick,yammer,y'understand,wynette,wrung,wreaths,wowed,wouldn'ta,worming,wormed,workday,woodsy,woodshed,woodchuck,wojadubakowski,withering,witching,wiseass,wiretaps,wining,willoby,wiccaning,whupped,whoopi,whoomp,wholesaler,whiteness,whiner,whatchya,wharves,wenus,weirdoes,weaning,watusi,waponi,waistband,wackos,vouching,votre,vivica,viveca,vivant,vivacious,visor,visitin,visage,vicrum,vetted,ventriloquism,venison,varnsen,vaporized,vapid,vanstock,uuuuh,ushering,urologist,urination,upstart,uprooted,unsubtitled,unspoiled,unseat,unseasonably,unseal,unsatisfying,unnerve,unlikable,unleaded,uninsured,uninspired,unicycle,unhooked,unfunny,unfreezing,unflattering,unfairness,unexpressed,unending,unencumbered,unearth,undiscovered,undisciplined,understan,undershirt,underlings,underline,undercurrent,uncivilized,uncharacteristic,umpteenth,uglies,tuney,trumps,truckasaurus,trubshaw,trouser,tringle,trifling,trickster,trespassers,trespasser,traumas,trattoria,trashes,transgressions,trampling,tp'ed,toxoplasmosis,tounge,tortillas,topsy,topple,topnotch,tonsil,tions,timmuh,timithious,tilney,tighty,tightness,tightens,tidbits,ticketed,thyme,threepio,thoughtfully,thorkel,thommo,thing'll,thefts,that've,thanksgivings,tetherball,testikov,terraforming,tepid,tendonitis,tenboom,telex,teenybopper,tattered,tattaglias,tanneke,tailspin,tablecloth,swooping,swizzle,swiping,swindled,swilling,swerving,sweatshops,swaddling,swackhammer,svetkoff,supossed,superdad,sumptuous,sugary,sugai,subvert,substantiate,submersible,sublimating,subjugation,stymied,strychnine,streetlights,strassmans,stranglehold,strangeness,straddling,straddle,stowaways,stotch,stockbrokers,stifling,stepford,steerage,steena,statuary,starlets,staggeringly,ssshhh,squaw,spurt,spungeon,spritzer,sprightly,sprays,sportswear,spoonful,splittin,splitsville,speedily,specialise,spastic,sparrin,souvlaki,southie,sourpuss,soupy,soundstage,soothes,somebody'd,softest,sociopathic,socialized,snyders,snowmobiles,snowballed,snatches,smugness,smoothest,smashes,sloshed,sleight,skyrocket,skied,skewed,sixpence,sipowicz,singling,simulates,shyness,shuvanis,showoff,shortsighted,shopkeeper,shoehorn,shithouse,shirtless,shipshape,shifu,shelve,shelbyville,sheepskin,sharpens,shaquille,shanshu,servings,sequined,seizes,seashells,scrambler,scopes,schnauzer,schmo,schizoid,scampered,savagely,saudis,santas,sandovals,sanding,saleswoman,sagging,s'cuse,rutting,ruthlessly,runneth,ruffians,rubes,rosalita,rollerblades,rohypnol,roasts,roadies,ritten,rippling,ripples,rigoletto,richardo,rethought,reshoot,reserving,reseda,rescuer,reread,requisitions,repute,reprogram,replenish,repetitious,reorganizing,reinventing,reinvented,reheat,refrigerators,reenter,recruiter,recliner,rawdy,rashes,rajeski,raison,raisers,rages,quinine,questscape,queller,pygmalion,pushers,pusan,purview,pumpin,pubescent,prudes,provolone,propriety,propped,procrastinate,processional,preyed,pretrial,portent,pooling,poofy,polloi,policia,poacher,pluses,pleasuring,platitudes,plateaued,plaguing,pittance,pinheads,pincushion,pimply,pimped,piggyback,piecing,phillipe,philipse,philby,pharaohs,petyr,petitioner,peshtigo,pesaram,persnickety,perpetrate,percolating,pepto,penne,penell,pemmican,peeks,pedaling,peacemaker,pawnshop,patting,pathologically,patchouli,pasts,pasties,passin,parlors,paltrow,palamon,padlock,paddling,oversleep,overheating,overdosed,overcharge,overblown,outrageously,ornery,opportune,oooooooooh,oohhhh,ohhhhhh,ogres,odorless,obliterated,nyong,nymphomaniac,ntozake,novocain,nough,nonnie,nonissue,nodules,nightmarish,nightline,niceties,newsman,needra,nedry,necking,navour,nauseam,nauls,narim,namath,nagged,naboo,n'sync,myslexia,mutator,mustafi,musketeer,murtaugh,murderess,munching,mumsy,muley,mouseville,mortifying,morgendorffers,moola,montel,mongoloid,molestered,moldings,mocarbies,mo'ss,mixers,misrell,misnomer,misheard,mishandled,miscreant,misconceptions,miniscule,millgate,mettle,metricconverter,meteors,menorah,mengele,melding,meanness,mcgruff,mcarnold,matzoh,matted,mastectomy,massager,marveling,marooned,marmaduke,marick,manhandled,manatees,man'll,maltin,maliciously,malfeasance,malahide,maketh,makeovers,maiming,machismo,lumpectomy,lumbering,lucci,lording,lorca,lookouts,loogie,loners,loathed,lissen,lighthearted,lifer,lickin,lewen,levitation,lestercorp,lessee,lentils,legislate,legalizing,lederhosen,lawmen,lasskopf,lardner,lambeau,lamagra,ladonn,lactic,lacquer,labatier,krabappel,kooks,knickknacks,klutzy,kleynach,klendathu,kinross,kinkaid,kind'a,ketch,kesher,karikos,karenina,kanamits,junshi,jumbled,joust,jotted,jobson,jingling,jigalong,jerries,jellies,jeeps,javna,irresistable,internist,intercranial,inseminated,inquisitor,infuriate,inflating,infidelities,incessantly,incensed,incase,incapacitate,inasmuch,inaccuracies,imploding,impeding,impediments,immaturity,illegible,iditarod,icicles,ibuprofen,i'i'm,hymie,hydrolase,hunker,humps,humons,humidor,humdinger,humbling,huggin,huffing,housecleaning,hothouse,hotcakes,hosty,hootenanny,hootchie,hoosegow,honks,honeymooners,homily,homeopathic,hitchhikers,hissed,hillnigger,hexavalent,hewwo,hershe,hermey,hergott,henny,hennigans,henhouse,hemolytic,helipad,heifer,hebrews,hebbing,heaved,headlock,harrowing,harnessed,hangovers,handi,handbasket,halfrek,hacene,gyges,guys're,gundersons,gumption,gruntmaster,grubs,grossie,groped,grins,greaseball,gravesite,gratuity,granma,grandfathers,grandbaby,gradski,gracing,gossips,gooble,goners,golitsyn,gofer,godsake,goddaughter,gnats,gluing,glares,givers,ginza,gimmie,gimmee,gennero,gemme,gazpacho,gazed,gassy,gargling,gandhiji,galvanized,gallbladder,gaaah,furtive,fumigation,fucka,fronkonsteen,frills,freezin,freewald,freeloader,frailty,forger,foolhardy,fondest,fomin,followin,follicle,flotation,flopping,floodgates,flogged,flicked,flenders,fleabag,fixings,fixable,fistful,firewater,firelight,fingerbang,finalizing,fillin,filipov,fiderer,felling,feldberg,feign,faunia,fatale,farkus,fallible,faithfulness,factoring,eyeful,extramarital,exterminated,exhume,exasperated,eviscerate,estoy,esmerelda,escapades,epoxy,enticed,enthused,entendre,engrossing,endorphins,emptive,emmys,eminently,embezzler,embarressed,embarrassingly,embalmed,eludes,eling,elated,eirie,egotitis,effecting,eerily,eecom,eczema,earthy,earlobes,eally,dyeing,dwells,duvet,duncans,dulcet,droves,droppin,drools,drey'auc,downriver,domesticity,dollop,doesnt,dobler,divulged,diversionary,distancing,dispensers,disorienting,disneyworld,dismissive,disingenuous,disheveled,disfiguring,dinning,dimming,diligently,dilettante,dilation,dickensian,diaphragms,devastatingly,destabilize,desecrate,deposing,deniece,demony,delving,delicates,deigned,defraud,deflower,defibrillator,defiantly,defenceless,defacing,deconstruction,decompose,deciphering,decibels,deceptively,deceptions,decapitation,debutantes,debonair,deadlier,dawdling,davic,darwinism,darnit,darks,danke,danieljackson,dangled,cytoxan,cutout,cutlery,curveball,curfews,cummerbund,crunches,crouched,crisps,cripples,crilly,cribs,crewman,creepin,creeds,credenza,creak,crawly,crawlin,crawlers,crated,crackheads,coworker,couldn't've,corwins,coriander,copiously,convenes,contraceptives,contingencies,contaminating,conniption,condiment,concocting,comprehending,complacency,commendatore,comebacks,com'on,collarbone,colitis,coldly,coiffure,coffers,coeds,codependent,cocksucking,cockney,cockles,clutched,closeted,cloistered,cleve,cleats,clarifying,clapped,cinnabar,chunnel,chumps,cholinesterase,choirboy,chocolatey,chlamydia,chigliak,cheesie,chauvinistic,chasm,chartreuse,charo,charnier,chapil,chalked,chadway,certifiably,cellulite,celled,cavalcade,cataloging,castrated,cassio,cashews,cartouche,carnivore,carcinogens,capulet,captivated,capt'n,cancellations,campin,callate,callar,caffeinated,cadavers,cacophony,cackle,buzzes,buttoning,busload,burglaries,burbs,buona,bunions,bullheaded,buffs,bucyk,buckling,bruschetta,browbeating,broomsticks,broody,bromly,brolin,briefings,brewskies,breathalyzer,breakups,bratwurst,brania,braiding,brags,braggin,bradywood,bottomed,bossa,bordello,bookshelf,boogida,bondsman,bolder,boggles,bludgeoned,blowtorch,blotter,blips,blemish,bleaching,blainetologists,blading,blabbermouth,birdseed,bimmel,biloxi,biggly,bianchinni,betadine,berenson,belus,belloq,begets,befitting,beepers,beelzebub,beefed,bedridden,bedevere,beckons,beaded,baubles,bauble,battleground,bathrobes,basketballs,basements,barroom,barnacle,barkin,barked,baretta,bangles,bangler,banality,bambang,baltar,ballplayers,bagman,baffles,backroom,babysat,baboons,averse,audiotape,auctioneer,atten,atcha,astonishment,arugula,arroz,antihistamines,annoyances,anesthesiology,anatomically,anachronism,amiable,amaretto,allahu,alight,aimin,ailment,afterglow,affronte,advil,adrenals,actualization,acrost,ached,accursed,accoutrements,absconded,aboveboard,abetted,aargh,aaaahh,zuwicky,zolda,ziploc,zakamatak,youve,yippie,yesterdays,yella,yearns,yearnings,yearned,yawning,yalta,yahtzee,y'mean,y'are,wuthering,wreaks,worrisome,workiiing,wooooooo,wonky,womanizing,wolodarsky,wiwith,withdraws,wishy,wisht,wipers,wiper,winos,windthorne,windsurfing,windermere,wiggled,wiggen,whwhat,whodunit,whoaaa,whittling,whitesnake,whereof,wheezing,wheeze,whatd'ya,whataya,whammo,whackin,wellll,weightless,weevil,wedgies,webbing,weasly,wayside,waxes,waturi,washy,washrooms,wandell,waitaminute,waddya,waaaah,vornac,vishnoor,virulent,vindictiveness,vinceres,villier,vigeous,vestigial,ventilate,vented,venereal,veering,veered,veddy,vaslova,valosky,vailsburg,vaginas,vagas,urethra,upstaged,uploading,unwrapping,unwieldy,untapped,unsatisfied,unquenchable,unnerved,unmentionable,unlovable,unknowns,uninformed,unimpressed,unhappily,unguarded,unexplored,undergarment,undeniably,unclench,unclaimed,uncharacteristically,unbuttoned,unblemished,ululd,uhhhm,tweeze,tutsami,tushy,tuscarora,turkle,turghan,turbinium,tubers,trucoat,troxa,tropicana,triquetra,trimmers,triceps,trespassed,traya,traumatizing,transvestites,trainors,tradin,trackers,townies,tourelles,toucha,tossin,tortious,topshop,topes,tonics,tongs,tomsk,tomorrows,toiling,toddle,tizzy,tippers,timmi,thwap,thusly,ththe,thrusts,throwers,throwed,throughway,thickening,thermonuclear,thelwall,thataway,terrifically,tendons,teleportation,telepathically,telekinetic,teetering,teaspoons,tarantulas,tapas,tanned,tangling,tamales,tailors,tahitian,tactful,tachy,tablespoon,syrah,synchronicity,synch,synapses,swooning,switchman,swimsuits,sweltering,sweetly,suvolte,suslov,surfed,supposition,suppertime,supervillains,superfluous,superego,sunspots,sunning,sunless,sundress,suckah,succotash,sublevel,subbasement,studious,striping,strenuously,straights,stonewalled,stillness,stilettos,stevesy,steno,steenwyck,stargates,stammering,staedert,squiggly,squiggle,squashing,squaring,spreadsheet,spramp,spotters,sporto,spooking,splendido,spittin,spirulina,spiky,spate,spartacus,spacerun,soonest,something'll,someth,somepin,someone'll,sofas,soberly,sobered,snowmen,snowbank,snowballing,snivelling,sniffling,snakeskin,snagging,smush,smooter,smidgen,smackers,slumlord,slossum,slimmer,slighted,sleepwalk,sleazeball,skokie,skeptic,sitarides,sistah,sipped,sindell,simpletons,simony,silkwood,silks,silken,sightless,sideboard,shuttles,shrugging,shrouds,showy,shoveled,shouldn'ta,shoplifters,shitstorm,sheeny,shapetype,shaming,shallows,shackle,shabbily,shabbas,seppuku,senility,semite,semiautomatic,selznick,secretarial,sebacio,scuzzy,scummy,scrutinized,scrunchie,scribbled,scotches,scolded,scissor,schlub,scavenging,scarin,scarfing,scallions,scald,savour,savored,saute,sarcoidosis,sandbar,saluted,salish,saith,sailboats,sagittarius,sacre,saccharine,sacamano,rushdie,rumpled,rumba,rulebook,rubbers,roughage,rotisserie,rootie,roofy,roofie,romanticize,rittle,ristorante,rippin,rinsing,ringin,rincess,rickety,reveling,retest,retaliating,restorative,reston,restaurateur,reshoots,resetting,resentments,reprogramming,repossess,repartee,renzo,remore,remitting,remeber,relaxants,rejuvenate,rejections,regenerated,refocus,referrals,reeno,recycles,recrimination,reclining,recanting,reattach,reassigning,razgul,raved,rattlesnakes,rattles,rashly,raquetball,ransack,raisinettes,raheem,radisson,radishes,raban,quoth,qumari,quints,quilts,quilting,quien,quarreled,purty,purblind,punchbowl,publically,psychotics,psychopaths,psychoanalyze,pruning,provasik,protectin,propping,proportioned,prophylactic,proofed,prompter,procreate,proclivities,prioritizing,prinze,pricked,press'll,presets,prescribes,preocupe,prejudicial,prefex,preconceived,precipice,pralines,pragmatist,powerbar,pottie,pottersville,potsie,potholes,posses,posies,portkey,porterhouse,pornographers,poring,poppycock,poppers,pomponi,pokin,poitier,podiatry,pleeze,pleadings,playbook,platelets,plane'arium,placebos,place'll,pistachios,pirated,pinochle,pineapples,pinafore,pimples,piggly,piddling,picon,pickpockets,picchu,physiologically,physic,phobic,philandering,phenomenally,pheasants,pewter,petticoat,petronis,petitioning,perturbed,perpetuating,permutat,perishable,perimeters,perfumed,percocet,per'sus,pepperjack,penalize,pelting,pellet,peignoir,pedicures,peckers,pecans,pawning,paulsson,pattycake,patrolmen,patois,pathos,pasted,parishioner,parcheesi,parachuting,papayas,pantaloons,palpitations,palantine,paintballing,overtired,overstress,oversensitive,overnights,overexcited,overanxious,overachiever,outwitted,outvoted,outnumber,outlast,outlander,out've,orphey,orchestrating,openers,ooooooo,okies,ohhhhhhhhh,ohhhhhhhh,ogling,offbeat,obsessively,obeyed,o'hana,o'bannon,o'bannion,numpce,nummy,nuked,nuances,nourishing,nosedive,norbu,nomlies,nomine,nixed,nihilist,nightshift,newmeat,neglectful,neediness,needin,naphthalene,nanocytes,nanite,naivete,n'yeah,mystifying,myhnegon,mutating,musing,mulled,muggy,muerto,muckraker,muchachos,mountainside,motherless,mosquitos,morphed,mopped,moodoo,moncho,mollem,moisturiser,mohicans,mocks,mistresses,misspent,misinterpretation,miscarry,minuses,mindee,mimes,millisecond,milked,mightn't,mightier,mierzwiak,microchips,meyerling,mesmerizing,mershaw,meecrob,medicate,meddled,mckinnons,mcgewan,mcdunnough,mcats,mbien,matzah,matriarch,masturbated,masselin,martialed,marlboros,marksmanship,marinate,marchin,manicured,malnourished,malign,majorek,magnon,magnificently,macking,machiavellian,macdougal,macchiato,macaws,macanaw,m'self,lydells,lusts,lucite,lubricants,lopper,lopped,loneliest,lonelier,lomez,lojack,loath,liquefy,lippy,limps,likin,lightness,liesl,liebchen,licious,libris,libation,lhamo,leotards,leanin,laxatives,lavished,latka,lanyard,lanky,landmines,lameness,laddies,lacerated,labored,l'amour,kreskin,kovitch,kournikova,kootchy,konoss,knknow,knickety,knackety,kmart,klicks,kiwanis,kissable,kindergartners,kilter,kidnet,kid'll,kicky,kickbacks,kickback,kholokov,kewpie,kendo,katra,kareoke,kafelnikov,kabob,junjun,jumba,julep,jordie,jondy,jolson,jenoff,jawbone,janitorial,janiro,ipecac,invigorated,intruded,intros,intravenously,interruptus,interrogations,interject,interfacing,interestin,insuring,instilled,insensitivity,inscrutable,inroads,innards,inlaid,injector,ingratitude,infuriates,infra,infliction,indelicate,incubators,incrimination,inconveniencing,inconsolable,incestuous,incas,incarcerate,inbreeding,impudence,impressionists,impeached,impassioned,imipenem,idling,idiosyncrasies,icebergs,hypotensive,hydrochloride,hushed,humus,humph,hummm,hulking,hubcaps,hubald,howya,howbout,how'll,housebroken,hotwire,hotspots,hotheaded,horrace,hopsfield,honto,honkin,honeymoons,homewrecker,hombres,hollers,hollerin,hoedown,hoboes,hobbling,hobble,hoarse,hinky,highlighters,hexes,heru'ur,hernias,heppleman,hell're,heighten,heheheheheh,heheheh,hedging,heckling,heckled,heavyset,heatshield,heathens,heartthrob,headpiece,hayseed,haveo,hauls,hasten,harridan,harpoons,hardens,harcesis,harbouring,hangouts,halkein,haleh,halberstam,hairnet,hairdressers,hacky,haaaa,h'yah,gusta,gushy,gurgling,guilted,gruel,grudging,grrrrrr,grosses,groomsmen,griping,gravest,gratified,grated,goulash,goopy,goona,goodly,godliness,godawful,godamn,glycerin,glutes,glowy,globetrotters,glimpsed,glenville,glaucoma,girlscout,giraffes,gilbey,gigglepuss,ghora,gestating,gelato,geishas,gearshift,gayness,gasped,gaslighting,garretts,garba,gablyczyck,g'head,fumigating,fumbling,fudged,fuckwad,fuck're,fuchsia,fretting,freshest,frenchies,freezers,fredrica,fraziers,fraidy,foxholes,fourty,fossilized,forsake,forfeits,foreclosed,foreal,footsies,florists,flopped,floorshow,floorboard,flinching,flecks,flaubert,flatware,flatulence,flatlined,flashdance,flail,flagging,fiver,fitzy,fishsticks,finetti,finelli,finagle,filko,fieldstone,fibber,ferrini,feedin,feasting,favore,fathering,farrouhk,farmin,fairytale,fairservice,factoid,facedown,fabled,eyeballin,extortionist,exquisitely,expedited,exorcise,existentialist,execs,exculpatory,exacerbate,everthing,eventuality,evander,euphoric,euphemisms,estamos,erred,entitle,enquiries,enormity,enfants,endive,encyclopedias,emulating,embittered,effortless,ectopic,ecirc,easely,earphones,earmarks,dweller,durslar,durned,dunois,dunking,dunked,dumdum,dullard,dudleys,druthers,druggist,drossos,drooled,driveways,drippy,dreamless,drawstring,drang,drainpipe,dozing,dotes,dorkface,doorknobs,doohickey,donnatella,doncha,domicile,dokos,dobermans,dizzying,divola,ditsy,distaste,disservice,dislodged,dislodge,disinherit,disinformation,discounting,dinka,dimly,digesting,diello,diddling,dictatorships,dictators,diagnostician,devours,devilishly,detract,detoxing,detours,detente,destructs,desecrated,derris,deplore,deplete,demure,demolitions,demean,delish,delbruck,delaford,degaulle,deftly,deformity,deflate,definatly,defector,decrypted,decontamination,decapitate,decanter,dardis,dampener,damme,daddy'll,dabbling,dabbled,d'etre,d'argent,d'alene,d'agnasti,czechoslovakian,cymbal,cyberdyne,cutoffs,cuticle,curvaceous,curiousity,crowing,crowed,croutons,cropped,criminy,crescentis,crashers,cranwell,coverin,courtrooms,countenance,cosmically,cosign,corroboration,coroners,cornflakes,copperpot,copperhead,copacetic,coordsize,convulsing,consults,conjures,congenial,concealer,compactor,commercialism,cokey,cognizant,clunkers,clumsily,clucking,cloves,cloven,cloths,clothe,clods,clocking,clings,clavicle,classless,clashing,clanking,clanging,clamping,civvies,citywide,circulatory,circuited,chronisters,chromic,choos,chloroformed,chillun,cheesed,chatterbox,chaperoned,channukah,cerebellum,centerpieces,centerfold,ceecee,ccedil,cavorting,cavemen,cauterized,cauldwell,catting,caterine,cassiopeia,carves,cartwheel,carpeted,carob,caressing,carelessly,careening,capricious,capitalistic,capillaries,candidly,camaraderie,callously,calfskin,caddies,buttholes,busywork,busses,burps,burgomeister,bunkhouse,bungchow,bugler,buffets,buffed,brutish,brusque,bronchitis,bromden,brolly,broached,brewskis,brewin,brean,breadwinner,brana,bountiful,bouncin,bosoms,borgnine,bopping,bootlegs,booing,bombosity,bolting,boilerplate,bluey,blowback,blouses,bloodsuckers,bloodstained,bloat,bleeth,blackface,blackest,blackened,blacken,blackballed,blabs,blabbering,birdbrain,bipartisanship,biodegradable,biltmore,bilked,big'uns,bidet,besotted,bernheim,benegas,bendiga,belushi,bellboys,belittling,behinds,begone,bedsheets,beckoning,beaute,beaudine,beastly,beachfront,bathes,batak,baser,baseballs,barbella,bankrolling,bandaged,baerly,backlog,backin,babying,azkaban,awwwww,aviary,authorizes,austero,aunty,attics,atreus,astounded,astonish,artemus,arses,arintero,appraiser,apathetic,anybody'd,anxieties,anticlimactic,antar,anglos,angleman,anesthetist,androscoggin,andolini,andale,amway,amuck,amniocentesis,amnesiac,americano,amara,alvah,altruism,alternapalooza,alphabetize,alpaca,allus,allergist,alexandros,alaikum,akimbo,agoraphobia,agides,aggrhh,aftertaste,adoptions,adjuster,addictions,adamantium,activator,accomplishes,aberrant,aaaaargh,aaaaaaaaaaaaa,a'ight,zzzzzzz,zucchini,zookeeper,zirconia,zippers,zequiel,zellary,zeitgeist,zanuck,zagat,you'n,ylang,yes'm,yenta,yecchh,yecch,yawns,yankin,yahdah,yaaah,y'got,xeroxed,wwooww,wristwatch,wrangled,wouldst,worthiness,worshiping,wormy,wormtail,wormholes,woosh,wollsten,wolfing,woefully,wobbling,wintry,wingding,windstorm,windowtext,wiluna,wilting,wilted,willick,willenholly,wildflowers,wildebeest,whyyy,whoppers,whoaa,whizzing,whizz,whitest,whistled,whist,whinny,wheelies,whazzup,whatwhatwhaaat,whato,whatdya,what'dya,whacks,wewell,wetsuit,welluh,weeps,waylander,wavin,wassail,wasnt,warneford,warbucks,waltons,wallbanger,waiving,waitwait,vowing,voucher,vornoff,vorhees,voldemort,vivre,vittles,vindaloo,videogames,vichyssoise,vicarious,vesuvius,verguenza,ven't,velveteen,velour,velociraptor,vastness,vasectomies,vapors,vanderhof,valmont,validates,valiantly,vacuums,usurp,usernum,us'll,urinals,unyielding,unvarnished,unturned,untouchables,untangled,unsecured,unscramble,unreturned,unremarkable,unpretentious,unnerstand,unmade,unimpeachable,unfashionable,underwrite,underlining,underling,underestimates,underappreciated,uncouth,uncork,uncommonly,unclog,uncircumcised,unchallenged,uncas,unbuttoning,unapproved,unamerican,unafraid,umpteen,umhmm,uhwhy,ughuh,typewriters,twitches,twitched,twirly,twinkling,twinges,twiddling,turners,turnabout,tumblin,tryed,trowel,trousseau,trivialize,trifles,tribianni,trenchcoat,trembled,traumatize,transitory,transients,transfuse,transcribing,tranq,trampy,traipsed,trainin,trachea,traceable,touristy,toughie,toscanini,tortola,tortilla,torreon,toreador,tommorrow,tollbooth,tollans,toidy,togas,tofurkey,toddling,toddies,toasties,toadstool,to've,tingles,timin,timey,timetables,tightest,thuggee,thrusting,thrombus,throes,thrifty,thornharts,thinnest,thicket,thetas,thesulac,tethered,testaburger,tersenadine,terrif,terdlington,tepui,temping,tector,taxidermy,tastebuds,tartlets,tartabull,tar'd,tantamount,tangy,tangles,tamer,tabula,tabletops,tabithia,szechwan,synthedyne,svenjolly,svengali,survivalists,surmise,surfboards,surefire,suprise,supremacists,suppositories,superstore,supercilious,suntac,sunburned,summercliff,sullied,sugared,suckle,subtleties,substantiated,subsides,subliminal,subhuman,strowman,stroked,stroganoff,streetlight,straying,strainer,straighter,straightener,stoplight,stirrups,stewing,stereotyping,stepmommy,stephano,stashing,starshine,stairwells,squatsie,squandering,squalid,squabbling,squab,sprinkling,spreader,spongy,spokesmen,splintered,spittle,spitter,spiced,spews,spendin,spect,spearchucker,spatulas,southtown,soused,soshi,sorter,sorrowful,sooth,some'in,soliloquy,soiree,sodomized,sobriki,soaping,snows,snowcone,snitching,snitched,sneering,snausages,snaking,smoothed,smoochies,smarten,smallish,slushy,slurring,sluman,slithers,slippin,sleuthing,sleeveless,skinless,skillfully,sketchbook,skagnetti,sista,sinning,singularly,sinewy,silverlake,siguto,signorina,sieve,sidearms,shying,shunning,shtud,shrieks,shorting,shortbread,shopkeepers,shmancy,shizzit,shitheads,shitfaced,shipmates,shiftless,shelving,shedlow,shavings,shatters,sharifa,shampoos,shallots,shafter,sha'nauc,sextant,serviceable,sepsis,senores,sendin,semis,semanski,selflessly,seinfelds,seers,seeps,seductress,secaucus,sealant,scuttling,scusa,scrunched,scissorhands,schreber,schmancy,scamps,scalloped,savoir,savagery,sarong,sarnia,santangel,samool,sallow,salino,safecracker,sadism,sacrilegious,sabrini,sabath,s'aright,ruttheimer,rudest,rubbery,rousting,rotarian,roslin,roomed,romari,romanica,rolltop,rolfski,rockettes,roared,ringleader,riffing,ribcage,rewired,retrial,reting,resuscitated,restock,resale,reprogrammed,replicant,repentant,repellant,repays,repainting,renegotiating,rendez,remem,relived,relinquishes,relearn,relaxant,rekindling,rehydrate,refueled,refreshingly,refilling,reexamine,reeseman,redness,redeemable,redcoats,rectangles,recoup,reciprocated,reassessing,realy,realer,reachin,re'kali,rawlston,ravages,rappaports,ramoray,ramming,raindrops,rahesh,radials,racists,rabartu,quiches,quench,quarreling,quaintly,quadrants,putumayo,put'em,purifier,pureed,punitis,pullout,pukin,pudgy,puddings,puckering,pterodactyl,psychodrama,psats,protestations,protectee,prosaic,propositioned,proclivity,probed,printouts,prevision,pressers,preset,preposition,preempt,preemie,preconceptions,prancan,powerpuff,potties,potpie,poseur,porthole,poops,pooping,pomade,polyps,polymerized,politeness,polisher,polack,pocketknife,poatia,plebeian,playgroup,platonically,platitude,plastering,plasmapheresis,plaids,placemats,pizzazz,pintauro,pinstripes,pinpoints,pinkner,pincer,pimento,pileup,pilates,pigmen,pieeee,phrased,photocopies,phoebes,philistines,philanderer,pheromone,phasers,pfeffernuesse,pervs,perspire,personify,perservere,perplexed,perpetrating,perkiness,perjurer,periodontist,perfunctory,perdido,percodan,pentameter,pentacle,pensive,pensione,pennybaker,pennbrooke,penhall,pengin,penetti,penetrates,pegnoir,peeve,peephole,pectorals,peckin,peaky,peaksville,paxcow,paused,patted,parkishoff,parkers,pardoning,paraplegic,paraphrasing,paperers,papered,pangs,paneling,palooza,palmed,palmdale,palatable,pacify,pacified,owwwww,oversexed,overrides,overpaying,overdrawn,overcompensate,overcomes,overcharged,outmaneuver,outfoxed,oughtn't,ostentatious,oshun,orthopedist,or'derves,ophthalmologist,operagirl,oozes,oooooooh,onesie,omnis,omelets,oktoberfest,okeydoke,ofthe,ofher,obstetrical,obeys,obeah,o'henry,nyquil,nyanyanyanyah,nuttin,nutsy,nutball,nurhachi,numbskull,nullifies,nullification,nucking,nubbin,nourished,nonspecific,noing,noinch,nohoho,nobler,nitwits,newsprint,newspaperman,newscaster,neuropathy,netherworld,neediest,navasky,narcissists,napped,nafta,mache,mykonos,mutilating,mutherfucker,mutha,mutates,mutate,musn't,murchy,multitasking,mujeeb,mudslinging,muckraking,mousetrap,mourns,mournful,motherf,mostro,morphing,morphate,moralistic,moochy,mooching,monotonous,monopolize,monocle,molehill,moland,mofet,mockup,mobilizing,mmmmmmm,mitzvahs,mistreating,misstep,misjudge,misinformation,misdirected,miscarriages,miniskirt,mindwarped,minced,milquetoast,miguelito,mightily,midstream,midriff,mideast,microbe,methuselah,mesdames,mescal,men'll,memma,megaton,megara,megalomaniac,meeee,medulla,medivac,meaninglessness,mcnuggets,mccarthyism,maypole,may've,mauve,mateys,marshack,markles,marketable,mansiere,manservant,manse,manhandling,mallomars,malcontent,malaise,majesties,mainsail,mailmen,mahandra,magnolias,magnified,magev,maelstrom,machu,macado,m'boy,m'appelle,lustrous,lureen,lunges,lumped,lumberyard,lulled,luego,lucks,lubricated,loveseat,loused,lounger,loski,lorre,loora,looong,loonies,loincloth,lofts,lodgers,lobbing,loaner,livered,liqueur,ligourin,lifesaving,lifeguards,lifeblood,liaisons,let'em,lesbianism,lence,lemonlyman,legitimize,leadin,lazars,lazarro,lawyering,laugher,laudanum,latrines,lations,laters,lapels,lakefront,lahit,lafortunata,lachrymose,l'italien,kwaini,kruczynski,kramerica,kowtow,kovinsky,korsekov,kopek,knowakowski,knievel,knacks,kiowas,killington,kickball,keyworth,keymaster,kevie,keveral,kenyons,keggers,keepsakes,kechner,keaty,kavorka,karajan,kamerev,kaggs,jujyfruit,jostled,jonestown,jokey,joists,jocko,jimmied,jiggled,jests,jenzen,jenko,jellyman,jedediah,jealitosis,jaunty,jarmel,jankle,jagoff,jagielski,jackrabbits,jabbing,jabberjaw,izzat,irresponsibly,irrepressible,irregularity,irredeemable,inuvik,intuitions,intubated,intimates,interminable,interloper,intercostal,instyle,instigate,instantaneously,ining,ingrown,ingesting,infusing,infringe,infinitum,infact,inequities,indubitably,indisputable,indescribably,indentation,indefinable,incontrovertible,inconsequential,incompletes,incoherently,inclement,incidentals,inarticulate,inadequacies,imprudent,improprieties,imprison,imprinted,impressively,impostors,importante,imperious,impale,immodest,immobile,imbedded,imbecilic,illegals,idn't,hysteric,hypotenuse,hygienic,hyeah,hushpuppies,hunhh,humpback,humored,hummed,humiliates,humidifier,huggy,huggers,huckster,hotbed,hosing,hosers,horsehair,homebody,homebake,holing,holies,hoisting,hogwallop,hocks,hobbits,hoaxes,hmmmmm,hisses,hippest,hillbillies,hilarity,heurh,herniated,hermaphrodite,hennifer,hemlines,hemline,hemery,helplessness,helmsley,hellhound,heheheheh,heeey,hedda,heartbeats,heaped,healers,headstart,headsets,headlong,hawkland,havta,haulin,harvey'll,hanta,hansom,hangnail,handstand,handrail,handoff,hallucinogen,hallor,halitosis,haberdashery,gypped,guy'll,gumbel,guerillas,guava,guardrail,grunther,grunick,groppi,groomer,grodin,gripes,grinds,grifters,gretch,greevey,greasing,graveyards,grandkid,grainy,gouging,gooney,googly,goldmuff,goldenrod,goingo,godly,gobbledygook,gobbledegook,glues,gloriously,glengarry,glassware,glamor,gimmicks,giggly,giambetti,ghoulish,ghettos,ghali,gether,geriatrics,gerbils,geosynchronous,georgio,gente,gendarme,gelbman,gazillionth,gayest,gauging,gastro,gaslight,gasbag,garters,garish,garas,gantu,gangy,gangly,gangland,galling,gadda,furrowed,funnies,funkytown,fugimotto,fudging,fuckeen,frustrates,froufrou,froot,fromberge,frizzies,fritters,frightfully,friendliest,freeloading,freelancing,freakazoid,fraternization,framers,fornication,fornicating,forethought,footstool,foisting,focussing,focking,flurries,fluffed,flintstones,fledermaus,flayed,flawlessly,flatters,flashbang,flapped,fishies,firmer,fireproof,firebug,fingerpainting,finessed,findin,financials,finality,fillets,fiercest,fiefdom,fibbing,fervor,fentanyl,fenelon,fedorchuk,feckless,feathering,faucets,farewells,fantasyland,fanaticism,faltered,faggy,faberge,extorting,extorted,exterminating,exhumation,exhilaration,exhausts,exfoliate,excels,exasperating,exacting,everybody'd,evasions,espressos,esmail,errrr,erratically,eroding,ernswiler,epcot,enthralled,ensenada,enriching,enrage,enhancer,endear,encrusted,encino,empathic,embezzle,emanates,electricians,eking,egomaniacal,egging,effacing,ectoplasm,eavesdropped,dummkopf,dugray,duchaisne,drunkard,drudge,droop,droids,drips,dripped,dribbles,drazens,downy,downsize,downpour,dosages,doppelganger,dopes,doohicky,dontcha,doneghy,divining,divest,diuretics,diuretic,distrustful,disrupts,dismemberment,dismember,disinfect,disillusionment,disheartening,discourteous,discotheque,discolored,dirtiest,diphtheria,dinks,dimpled,didya,dickwad,diatribes,diathesis,diabetics,deviants,detonates,detests,detestable,detaining,despondent,desecration,derision,derailing,deputized,depressors,dependant,dentures,denominators,demur,demonology,delts,dellarte,delacour,deflated,defib,defaced,decorators,deaqon,davola,datin,darwinian,darklighters,dandelions,dampened,damaskinos,dalrimple,d'peshu,d'hoffryn,d'astier,cynics,cutesy,cutaway,curmudgeon,curdle,culpability,cuisinart,cuffing,crypts,cryptid,crunched,crumblers,crudely,crosscheck,croon,crissake,crevasse,creswood,creepo,creases,creased,creaky,cranks,crabgrass,coveralls,couple'a,coughs,coslaw,corporeal,cornucopia,cornering,corks,cordoned,coolly,coolin,cookbooks,contrite,contented,constrictor,confound,confit,confiscating,condoned,conditioners,concussions,comprendo,comers,combustible,combusted,collingswood,coldness,coitus,codicil,coasting,clydesdale,cluttering,clunker,clunk,clumsiness,clotted,clothesline,clinches,clincher,cleverness,clench,clein,cleanses,claymores,clammed,chugging,chronically,christsakes,choque,chompers,chiseling,chirpy,chirp,chinks,chingachgook,chickenpox,chickadee,chewin,chessboard,chargin,chanteuse,chandeliers,chamdo,chagrined,chaff,certs,certainties,cerreno,cerebrum,censured,cemetary,caterwauling,cataclysmic,casitas,cased,carvel,carting,carrear,carolling,carolers,carnie,cardiogram,carbuncle,capulets,canines,candaules,canape,caldecott,calamitous,cadillacs,cachet,cabeza,cabdriver,buzzards,butai,businesswomen,bungled,bumpkins,bummers,bulldoze,buffybot,bubut,bubbies,brrrrr,brownout,brouhaha,bronzing,bronchial,broiler,briskly,briefcases,bricked,breezing,breeher,breakable,breadstick,bravenet,braved,brandies,brainwaves,brainiest,braggart,bradlee,boys're,boys'll,boys'd,boutonniere,bossed,bosomy,borans,boosts,bookshelves,bookends,boneless,bombarding,bollo,boinked,boink,bluest,bluebells,bloodshot,blockhead,blockbusters,blithely,blather,blankly,bladders,blackbeard,bitte,bippy,biogenetics,bilge,bigglesworth,bicuspids,beususe,betaseron,besmirch,bernece,bereavement,bentonville,benchley,benching,bembe,bellyaching,bellhops,belie,beleaguered,behrle,beginnin,begining,beenie,beefs,beechwood,becau,beaverhausen,beakers,bazillion,baudouin,barrytown,barringtons,barneys,barbs,barbers,barbatus,bankrupted,bailiffs,backslide,baby'd,baaad,b'fore,awwwk,aways,awakes,automatics,authenticate,aught,aubyn,attired,attagirl,atrophied,asystole,astroturf,assertiveness,artichokes,arquillians,aright,archenemy,appraise,appeased,antin,anspaugh,anesthetics,anaphylactic,amscray,ambivalence,amalio,alriiight,alphabetized,alpena,alouette,allora,alliteration,allenwood,allegiances,algerians,alcerro,alastor,ahaha,agitators,aforethought,advertises,admonition,adirondacks,adenoids,acupuncturist,acula,actuarial,activators,actionable,achingly,accusers,acclimated,acclimate,absurdly,absorbent,absolvo,absolutes,absences,abdomenizer,aaaaaaaaah,aaaaaaaaaa,a'right".split(","),
45761male_names:"james,john,robert,michael,william,david,richard,charles,joseph,thomas,christopher,daniel,paul,mark,donald,george,kenneth,steven,edward,brian,ronald,anthony,kevin,jason,matthew,gary,timothy,jose,larry,jeffrey,frank,scott,eric,stephen,andrew,raymond,gregory,joshua,jerry,dennis,walter,patrick,peter,harold,douglas,henry,carl,arthur,ryan,roger,joe,juan,jack,albert,jonathan,justin,terry,gerald,keith,samuel,willie,ralph,lawrence,nicholas,roy,benjamin,bruce,brandon,adam,harry,fred,wayne,billy,steve,louis,jeremy,aaron,randy,eugene,carlos,russell,bobby,victor,ernest,phillip,todd,jesse,craig,alan,shawn,clarence,sean,philip,chris,johnny,earl,jimmy,antonio,danny,bryan,tony,luis,mike,stanley,leonard,nathan,dale,manuel,rodney,curtis,norman,marvin,vincent,glenn,jeffery,travis,jeff,chad,jacob,melvin,alfred,kyle,francis,bradley,jesus,herbert,frederick,ray,joel,edwin,don,eddie,ricky,troy,randall,barry,bernard,mario,leroy,francisco,marcus,micheal,theodore,clifford,miguel,oscar,jay,jim,tom,calvin,alex,jon,ronnie,bill,lloyd,tommy,leon,derek,darrell,jerome,floyd,leo,alvin,tim,wesley,dean,greg,jorge,dustin,pedro,derrick,dan,zachary,corey,herman,maurice,vernon,roberto,clyde,glen,hector,shane,ricardo,sam,rick,lester,brent,ramon,tyler,gilbert,gene,marc,reginald,ruben,brett,nathaniel,rafael,edgar,milton,raul,ben,cecil,duane,andre,elmer,brad,gabriel,ron,roland,jared,adrian,karl,cory,claude,erik,darryl,neil,christian,javier,fernando,clinton,ted,mathew,tyrone,darren,lonnie,lance,cody,julio,kurt,allan,clayton,hugh,max,dwayne,dwight,armando,felix,jimmie,everett,ian,ken,bob,jaime,casey,alfredo,alberto,dave,ivan,johnnie,sidney,byron,julian,isaac,clifton,willard,daryl,virgil,andy,salvador,kirk,sergio,seth,kent,terrance,rene,eduardo,terrence,enrique,freddie,stuart,fredrick,arturo,alejandro,joey,nick,luther,wendell,jeremiah,evan,julius,donnie,otis,trevor,luke,homer,gerard,doug,kenny,hubert,angelo,shaun,lyle,matt,alfonso,orlando,rex,carlton,ernesto,pablo,lorenzo,omar,wilbur,blake,horace,roderick,kerry,abraham,rickey,ira,andres,cesar,johnathan,malcolm,rudolph,damon,kelvin,rudy,preston,alton,archie,marco,pete,randolph,garry,geoffrey,jonathon,felipe,bennie,gerardo,dominic,loren,delbert,colin,guillermo,earnest,benny,noel,rodolfo,myron,edmund,salvatore,cedric,lowell,gregg,sherman,devin,sylvester,roosevelt,israel,jermaine,forrest,wilbert,leland,simon,irving,owen,rufus,woodrow,sammy,kristopher,levi,marcos,gustavo,jake,lionel,marty,gilberto,clint,nicolas,laurence,ismael,orville,drew,ervin,dewey,wilfred,josh,hugo,ignacio,caleb,tomas,sheldon,erick,frankie,darrel,rogelio,terence,alonzo,elias,bert,elbert,ramiro,conrad,noah,grady,phil,cornelius,lamar,rolando,clay,percy,bradford,merle,darin,amos,terrell,moses,irvin,saul,roman,darnell,randal,tommie,timmy,darrin,brendan,toby,van,abel,dominick,emilio,elijah,cary,domingo,aubrey,emmett,marlon,emanuel,jerald,edmond,emil,dewayne,otto,teddy,reynaldo,bret,jess,trent,humberto,emmanuel,stephan,louie,vicente,lamont,garland,micah,efrain,heath,rodger,demetrius,ethan,eldon,rocky,pierre,eli,bryce,antoine,robbie,kendall,royce,sterling,grover,elton,cleveland,dylan,chuck,damian,reuben,stan,leonardo,russel,erwin,benito,hans,monte,blaine,ernie,curt,quentin,agustin,jamal,devon,adolfo,tyson,wilfredo,bart,jarrod,vance,denis,damien,joaquin,harlan,desmond,elliot,darwin,gregorio,kermit,roscoe,esteban,anton,solomon,norbert,elvin,nolan,carey,rod,quinton,hal,brain,rob,elwood,kendrick,darius,moises,marlin,fidel,thaddeus,cliff,marcel,ali,raphael,bryon,armand,alvaro,jeffry,dane,joesph,thurman,ned,sammie,rusty,michel,monty,rory,fabian,reggie,kris,isaiah,gus,avery,loyd,diego,adolph,millard,rocco,gonzalo,derick,rodrigo,gerry,rigoberto,alphonso,rickie,noe,vern,elvis,bernardo,mauricio,hiram,donovan,basil,nickolas,scot,vince,quincy,eddy,sebastian,federico,ulysses,heriberto,donnell,denny,gavin,emery,romeo,jayson,dion,dante,clement,coy,odell,jarvis,bruno,issac,dudley,sanford,colby,carmelo,nestor,hollis,stefan,donny,linwood,beau,weldon,galen,isidro,truman,delmar,johnathon,silas,frederic,irwin,merrill,charley,marcelino,carlo,trenton,kurtis,aurelio,winfred,vito,collin,denver,leonel,emory,pasquale,mohammad,mariano,danial,landon,dirk,branden,adan,numbers,clair,buford,bernie,wilmer,emerson,zachery,jacques,errol,josue,edwardo,wilford,theron,raymundo,daren,tristan,robby,lincoln,jame,genaro,octavio,cornell,hung,arron,antony,herschel,alva,giovanni,garth,cyrus,cyril,ronny,stevie,lon,kennith,carmine,augustine,erich,chadwick,wilburn,russ,myles,jonas,mitchel,mervin,zane,jamel,lazaro,alphonse,randell,johnie,jarrett,ariel,abdul,dusty,luciano,seymour,scottie,eugenio,mohammed,arnulfo,lucien,ferdinand,thad,ezra,aldo,rubin,mitch,earle,abe,marquis,lanny,kareem,jamar,boris,isiah,emile,elmo,aron,leopoldo,everette,josef,eloy,dorian,rodrick,reinaldo,lucio,jerrod,weston,hershel,lemuel,lavern,burt,jules,gil,eliseo,ahmad,nigel,efren,antwan,alden,margarito,refugio,dino,osvaldo,les,deandre,normand,kieth,ivory,trey,norberto,napoleon,jerold,fritz,rosendo,milford,sang,deon,christoper,alfonzo,lyman,josiah,brant,wilton,rico,jamaal,dewitt,brenton,yong,olin,faustino,claudio,judson,gino,edgardo,alec,jarred,donn,trinidad,tad,porfirio,odis,lenard,chauncey,tod,mel,marcelo,kory,augustus,keven,hilario,bud,sal,orval,mauro,dannie,zachariah,olen,anibal,milo,jed,thanh,amado,lenny,tory,richie,horacio,brice,mohamed,delmer,dario,mac,jonah,jerrold,robt,hank,sung,rupert,rolland,kenton,damion,chi,antone,waldo,fredric,bradly,kip,burl,tyree,jefferey,ahmed,willy,stanford,oren,moshe,mikel,enoch,brendon,quintin,jamison,florencio,darrick,tobias,minh,hassan,giuseppe,demarcus,cletus,tyrell,lyndon,keenan,werner,theo,geraldo,columbus,chet,bertram,markus,huey,hilton,dwain,donte,tyron,omer,isaias,hipolito,fermin,chung,adalberto,jamey,teodoro,mckinley,maximo,raleigh,lawerence,abram,rashad,emmitt,daron,chong,samual,otha,miquel,eusebio,dong,domenic,darron,wilber,renato,hoyt,haywood,ezekiel,chas,florentino,elroy,clemente,arden,neville,edison,deshawn,carrol,shayne,nathanial,jordon,danilo,claud,sherwood,raymon,rayford,cristobal,ambrose,titus,hyman,felton,ezequiel,erasmo,lonny,milan,lino,jarod,herb,andreas,rhett,jude,douglass,cordell,oswaldo,ellsworth,virgilio,toney,nathanael,benedict,mose,hong,isreal,garret,fausto,arlen,zack,modesto,francesco,manual,gaylord,gaston,filiberto,deangelo,michale,granville,malik,zackary,tuan,nicky,cristopher,antione,malcom,korey,jospeh,colton,waylon,hosea,shad,santo,rudolf,rolf,renaldo,marcellus,lucius,kristofer,harland,arnoldo,rueben,leandro,kraig,jerrell,jeromy,hobert,cedrick,arlie,winford,wally,luigi,keneth,jacinto,graig,franklyn,edmundo,leif,jeramy,willian,vincenzo,shon,michal,lynwood,jere,elden,darell,broderick,alonso".split(",")},module.exports=frequency_lists;
45762
45763},{}],4:[function(require,module,exports){
45764var feedback,matching,scoring,time,time_estimates,zxcvbn;matching=require("./matching"),scoring=require("./scoring"),time_estimates=require("./time_estimates"),feedback=require("./feedback"),time=function(){return(new Date).getTime()},zxcvbn=function(e,t){var i,n,c,s,a,r,m,o,u,g,_;for(null==t&&(t=[]),g=time(),u=[],c=0,s=t.length;c<s;c++)i=t[c],"string"!=(m=typeof i)&&"number"!==m&&"boolean"!==m||u.push(i.toString().toLowerCase());matching.set_user_input_dictionary(u),a=matching.omnimatch(e),o=scoring.most_guessable_match_sequence(e,a),o.calc_time=time()-g,n=time_estimates.estimate_attack_times(o.guesses);for(r in n)_=n[r],o[r]=_;return o.feedback=feedback.get_feedback(o.score,o.sequence),o},module.exports=zxcvbn;
45765
45766},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
45767var DATE_MAX_YEAR,DATE_MIN_YEAR,DATE_SPLITS,GRAPHS,L33T_TABLE,RANKED_DICTIONARIES,REGEXEN,adjacency_graphs,build_ranked_dict,frequency_lists,lst,matching,name,scoring;frequency_lists=require("./frequency_lists"),adjacency_graphs=require("./adjacency_graphs"),scoring=require("./scoring"),build_ranked_dict=function(e){var t,n,r,i,a;for(i={},t=1,r=0,n=e.length;r<n;r++)a=e[r],i[a]=t,t+=1;return i},RANKED_DICTIONARIES={};for(name in frequency_lists)lst=frequency_lists[name],RANKED_DICTIONARIES[name]=build_ranked_dict(lst);GRAPHS={qwerty:adjacency_graphs.qwerty,dvorak:adjacency_graphs.dvorak,keypad:adjacency_graphs.keypad,mac_keypad:adjacency_graphs.mac_keypad},L33T_TABLE={a:["4","@"],b:["8"],c:["(","{","[","<"],e:["3"],g:["6","9"],i:["1","!","|"],l:["1","|","7"],o:["0"],s:["$","5"],t:["+","7"],x:["%"],z:["2"]},REGEXEN={recent_year:/19\d\d|200\d|201\d/g},DATE_MAX_YEAR=2050,DATE_MIN_YEAR=1e3,DATE_SPLITS={4:[[1,2],[2,3]],5:[[1,3],[2,3]],6:[[1,2],[2,4],[4,5]],7:[[1,3],[2,3],[4,5],[4,6]],8:[[2,4],[4,6]]},matching={empty:function(e){var t;return 0===function(){var n;n=[];for(t in e)n.push(t);return n}().length},extend:function(e,t){return e.push.apply(e,t)},translate:function(e,t){var n;return function(){var r,i,a,s;for(a=e.split(""),s=[],i=0,r=a.length;i<r;i++)n=a[i],s.push(t[n]||n);return s}().join("")},mod:function(e,t){return(e%t+t)%t},sorted:function(e){return e.sort(function(e,t){return e.i-t.i||e.j-t.j})},omnimatch:function(e){var t,n,r,i,a;for(i=[],r=[this.dictionary_match,this.reverse_dictionary_match,this.l33t_match,this.spatial_match,this.repeat_match,this.sequence_match,this.regex_match,this.date_match],a=0,t=r.length;a<t;a++)n=r[a],this.extend(i,n.call(this,e));return this.sorted(i)},dictionary_match:function(e,t){var n,r,i,a,s,o,h,u,c,l,_,f,d,p;null==t&&(t=RANKED_DICTIONARIES),s=[],a=e.length,u=e.toLowerCase();for(n in t)for(l=t[n],r=o=0,_=a;0<=_?o<_:o>_;r=0<=_?++o:--o)for(i=h=f=r,d=a;f<=d?h<d:h>d;i=f<=d?++h:--h)u.slice(r,+i+1||9e9)in l&&(p=u.slice(r,+i+1||9e9),c=l[p],s.push({pattern:"dictionary",i:r,j:i,token:e.slice(r,+i+1||9e9),matched_word:p,rank:c,dictionary_name:n,reversed:!1,l33t:!1}));return this.sorted(s)},reverse_dictionary_match:function(e,t){var n,r,i,a,s,o;for(null==t&&(t=RANKED_DICTIONARIES),o=e.split("").reverse().join(""),i=this.dictionary_match(o,t),a=0,n=i.length;a<n;a++)r=i[a],r.token=r.token.split("").reverse().join(""),r.reversed=!0,s=[e.length-1-r.j,e.length-1-r.i],r.i=s[0],r.j=s[1];return this.sorted(i)},set_user_input_dictionary:function(e){return RANKED_DICTIONARIES.user_inputs=build_ranked_dict(e.slice())},relevant_l33t_subtable:function(e,t){var n,r,i,a,s,o,h,u,c,l;for(s={},o=e.split(""),a=0,r=o.length;a<r;a++)n=o[a],s[n]=!0;l={};for(i in t)c=t[i],h=function(){var e,t,n;for(n=[],t=0,e=c.length;t<e;t++)u=c[t],u in s&&n.push(u);return n}(),h.length>0&&(l[i]=h);return l},enumerate_l33t_subs:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;a=function(){var t;t=[];for(i in e)t.push(i);return t}(),p=[[]],n=function(e){var t,n,r,a,s,o,h,u;for(n=[],s={},o=0,a=e.length;o<a;o++)h=e[o],t=function(){var e,t,n;for(n=[],u=t=0,e=h.length;t<e;u=++t)i=h[u],n.push([i,u]);return n}(),t.sort(),r=function(){var e,n,r;for(r=[],u=n=0,e=t.length;n<e;u=++n)i=t[u],r.push(i+","+u);return r}().join("-"),r in s||(s[r]=!0,n.push(h));return n},r=function(t){var i,a,s,o,h,u,c,l,_,f,d,g,m,A,E,y;if(t.length){for(a=t[0],m=t.slice(1),c=[],d=e[a],l=0,h=d.length;l<h;l++)for(o=d[l],_=0,u=p.length;_<u;_++){for(A=p[_],i=-1,s=f=0,g=A.length;0<=g?f<g:f>g;s=0<=g?++f:--f)if(A[s][0]===o){i=s;break}i===-1?(y=A.concat([[o,a]]),c.push(y)):(E=A.slice(0),E.splice(i,1),E.push([o,a]),c.push(A),c.push(E))}return p=n(c),r(m)}},r(a),d=[];for(u=0,o=p.length;u<o;u++){for(_=p[u],f={},c=0,h=_.length;c<h;c++)l=_[c],s=l[0],t=l[1],f[s]=t;d.push(f)}return d},l33t_match:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A;for(null==t&&(t=RANKED_DICTIONARIES),null==n&&(n=L33T_TABLE),u=[],_=this.enumerate_l33t_subs(this.relevant_l33t_subtable(e,n)),c=0,a=_.length;c<a&&(d=_[c],!this.empty(d));c++)for(g=this.translate(e,d),f=this.dictionary_match(g,t),l=0,s=f.length;l<s;l++)if(o=f[l],m=e.slice(o.i,+o.j+1||9e9),m.toLowerCase()!==o.matched_word){h={};for(p in d)r=d[p],m.indexOf(p)!==-1&&(h[p]=r);o.l33t=!0,o.token=m,o.sub=h,o.sub_display=function(){var e;e=[];for(i in h)A=h[i],e.push(i+" -> "+A);return e}().join(", "),u.push(o)}return this.sorted(u.filter(function(e){return e.token.length>1}))},spatial_match:function(e,t){var n,r,i;null==t&&(t=GRAPHS),i=[];for(r in t)n=t[r],this.extend(i,this.spatial_match_helper(e,n,r));return this.sorted(i)},SHIFTED_RX:/[~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?]/,spatial_match_helper:function(e,t,n){var r,i,a,s,o,h,u,c,l,_,f,d,p,g,m;for(f=[],u=0;u<e.length-1;)for(c=u+1,l=null,m=0,g="qwerty"!==n&&"dvorak"!==n||!this.SHIFTED_RX.exec(e.charAt(u))?0:1;;){if(p=e.charAt(c-1),o=!1,h=-1,s=-1,i=t[p]||[],c<e.length)for(a=e.charAt(c),d=0,_=i.length;d<_;d++)if(r=i[d],s+=1,r&&r.indexOf(a)!==-1){o=!0,h=s,1===r.indexOf(a)&&(g+=1),l!==h&&(m+=1,l=h);break}if(!o){c-u>2&&f.push({pattern:"spatial",i:u,j:c-1,token:e.slice(u,c),graph:n,turns:m,shifted_count:g}),u=c;break}c+=1}return f},repeat_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p;for(d=[],a=/(.+)\1+/g,c=/(.+?)\1+/g,l=/^(.+?)\1+$/,u=0;u<e.length&&(a.lastIndex=c.lastIndex=u,s=a.exec(e),_=c.exec(e),null!=s);)s[0].length>_[0].length?(f=s,i=l.exec(f[0])[1]):(f=_,i=f[1]),p=[f.index,f.index+f[0].length-1],o=p[0],h=p[1],t=scoring.most_guessable_match_sequence(i,this.omnimatch(i)),r=t.sequence,n=t.guesses,d.push({pattern:"repeat",i:o,j:h,token:f[0],base_token:i,base_guesses:n,base_matches:r,repeat_count:f[0].length/i.length}),u=h+1;return d},MAX_DELTA:5,sequence_match:function(e){var t,n,r,i,a,s,o,h,u;if(1===e.length)return[];for(u=function(t){return function(n,r,i){var a,s,o,u;if((r-n>1||1===Math.abs(i))&&0<(a=Math.abs(i))&&a<=t.MAX_DELTA)return u=e.slice(n,+r+1||9e9),/^[a-z]+$/.test(u)?(s="lower",o=26):/^[A-Z]+$/.test(u)?(s="upper",o=26):/^\d+$/.test(u)?(s="digits",o=10):(s="unicode",o=26),h.push({pattern:"sequence",i:n,j:r,token:e.slice(n,+r+1||9e9),sequence_name:s,sequence_space:o,ascending:i>0})}}(this),h=[],n=0,a=null,i=s=1,o=e.length;1<=o?s<o:s>o;i=1<=o?++s:--s)t=e.charCodeAt(i)-e.charCodeAt(i-1),null==a&&(a=t),t!==a&&(r=i-1,u(n,r,a),n=r,a=t);return u(n,e.length-1,a),h},regex_match:function(e,t){var n,r,i,a;null==t&&(t=REGEXEN),n=[];for(name in t)for(r=t[name],r.lastIndex=0;i=r.exec(e);)a=i[0],n.push({pattern:"regex",token:a,i:i.index,j:i.index+i[0].length-1,regex_name:name,regex_match:i});return this.sorted(n)},date_match:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g,m,A,E,y,v,I,R,T,D,k,x,j,b,N,S,q,L,M;for(_=[],f=/^\d{4,8}$/,d=/^(\d{1,4})([\s\/\\_.-])(\d{1,2})\2(\d{1,4})$/,s=m=0,v=e.length-4;0<=v?m<=v:m>=v;s=0<=v?++m:--m)for(o=A=I=s+3,R=s+7;(I<=R?A<=R:A>=R)&&!(o>=e.length);o=I<=R?++A:--A)if(M=e.slice(s,+o+1||9e9),f.exec(M)){for(r=[],T=DATE_SPLITS[M.length],E=0,c=T.length;E<c;E++)D=T[E],h=D[0],u=D[1],a=this.map_ints_to_dmy([parseInt(M.slice(0,h)),parseInt(M.slice(h,u)),parseInt(M.slice(u))]),null!=a&&r.push(a);if(r.length>0){for(t=r[0],p=function(e){return Math.abs(e.year-scoring.REFERENCE_YEAR)},g=p(r[0]),k=r.slice(1),y=0,l=k.length;y<l;y++)n=k[y],i=p(n),i<g&&(x=[n,i],t=x[0],g=x[1]);_.push({pattern:"date",token:M,i:s,j:o,separator:"",year:t.year,month:t.month,day:t.day})}}for(s=q=0,j=e.length-6;0<=j?q<=j:q>=j;s=0<=j?++q:--q)for(o=L=b=s+5,N=s+9;(b<=N?L<=N:L>=N)&&!(o>=e.length);o=b<=N?++L:--L)M=e.slice(s,+o+1||9e9),S=d.exec(M),null!=S&&(a=this.map_ints_to_dmy([parseInt(S[1]),parseInt(S[3]),parseInt(S[4])]),null!=a&&_.push({pattern:"date",token:M,i:s,j:o,separator:S[2],year:a.year,month:a.month,day:a.day}));return this.sorted(_.filter(function(e){var t,n,r,i;for(t=!1,i=0,n=_.length;i<n;i++)if(r=_[i],e!==r&&r.i<=e.i&&r.j>=e.j){t=!0;break}return!t}))},map_ints_to_dmy:function(e){var t,n,r,i,a,s,o,h,u,c,l,_,f,d,p,g;if(!(e[1]>31||e[1]<=0)){for(o=0,h=0,p=0,s=0,r=e.length;s<r;s++){if(n=e[s],99<n&&n<DATE_MIN_YEAR||n>DATE_MAX_YEAR)return;n>31&&(h+=1),n>12&&(o+=1),n<=0&&(p+=1)}if(!(h>=2||3===o||p>=2)){for(c=[[e[2],e.slice(0,2)],[e[0],e.slice(1,3)]],u=0,i=c.length;u<i;u++)if(_=c[u],g=_[0],d=_[1],DATE_MIN_YEAR<=g&&g<=DATE_MAX_YEAR)return t=this.map_ints_to_dm(d),null!=t?{year:g,month:t.month,day:t.day}:void 0;for(l=0,a=c.length;l<a;l++)if(f=c[l],g=f[0],d=f[1],t=this.map_ints_to_dm(d),null!=t)return g=this.two_to_four_digit_year(g),{year:g,month:t.month,day:t.day}}}},map_ints_to_dm:function(e){var t,n,r,i,a,s;for(a=[e,e.slice().reverse()],i=0,n=a.length;i<n;i++)if(s=a[i],t=s[0],r=s[1],1<=t&&t<=31&&1<=r&&r<=12)return{day:t,month:r}},two_to_four_digit_year:function(e){return e>99?e:e>50?e+1900:e+2e3}},module.exports=matching;
45768
45769},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
45770var BRUTEFORCE_CARDINALITY,MIN_GUESSES_BEFORE_GROWING_SEQUENCE,MIN_SUBMATCH_GUESSES_MULTI_CHAR,MIN_SUBMATCH_GUESSES_SINGLE_CHAR,adjacency_graphs,calc_average_degree,k,scoring,v;adjacency_graphs=require("./adjacency_graphs"),calc_average_degree=function(e){var t,r,n,s,a,u;t=0;for(n in e)a=e[n],t+=function(){var e,t,r;for(r=[],t=0,e=a.length;t<e;t++)s=a[t],s&&r.push(s);return r}().length;return t/=function(){var t;t=[];for(r in e)u=e[r],t.push(r);return t}().length},BRUTEFORCE_CARDINALITY=10,MIN_GUESSES_BEFORE_GROWING_SEQUENCE=1e4,MIN_SUBMATCH_GUESSES_SINGLE_CHAR=10,MIN_SUBMATCH_GUESSES_MULTI_CHAR=50,scoring={nCk:function(e,t){var r,n,s,a;if(t>e)return 0;if(0===t)return 1;for(s=1,r=n=1,a=t;1<=a?n<=a:n>=a;r=1<=a?++n:--n)s*=e,s/=r,e-=1;return s},log10:function(e){return Math.log(e)/Math.log(10)},log2:function(e){return Math.log(e)/Math.log(2)},factorial:function(e){var t,r,n,s;if(e<2)return 1;for(t=1,r=n=2,s=e;2<=s?n<=s:n>=s;r=2<=s?++n:--n)t*=r;return t},most_guessable_match_sequence:function(e,t,r){var n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S,R,v,I,M,N,C,U,T;for(null==r&&(r=!1),l=e.length,f=function(){var e,t,r;for(r=[],n=e=0,t=l;0<=t?e<t:e>t;n=0<=t?++e:--e)r.push([]);return r}(),p=0,_=t.length;p<_;p++)c=t[p],f[c.j].push(c);for(v=0,o=f.length;v<o;v++)E=f[v],E.sort(function(e,t){return e.i-t.i});for(A={m:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),pi:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}(),g:function(){var e,t,r;for(t=[],n=r=0,e=l;0<=e?r<e:r>e;n=0<=e?++r:--r)t.push({});return t}()},U=function(t){return function(n,s){var a,u,i,_,o,h;_=n.j,o=t.estimate_guesses(n,e),s>1&&(o*=A.pi[n.i-1][s-1]),i=t.factorial(s)*o,r||(i+=Math.pow(MIN_GUESSES_BEFORE_GROWING_SEQUENCE,s-1)),h=A.g[_];for(u in h)if(a=h[u],!(u>s)&&a<=i)return;return A.g[_][s]=i,A.m[_][s]=n,A.pi[_][s]=o}}(this),s=function(e){return function(e){var t,r,n,s,a,u;for(c=g(0,e),U(c,1),a=[],t=u=1,s=e;1<=s?u<=s:u>=s;t=1<=s?++u:--u)c=g(t,e),a.push(function(){var e,s;e=A.m[t-1],s=[];for(r in e)n=e[r],r=parseInt(r),"bruteforce"!==n.pattern&&s.push(U(c,r+1));return s}());return a}}(this),g=function(t){return function(t,r){return{pattern:"bruteforce",token:e.slice(t,+r+1||9e9),i:t,j:r}}}(this),C=function(e){return function(e){var t,r,n,s,a,u,i;u=[],s=e-1,a=void 0,n=1/0,i=A.g[s];for(r in i)t=i[r],t<n&&(a=r,n=t);for(;s>=0;)c=A.m[s][a],u.unshift(c),s=c.i-1,a--;return u}}(this),u=N=0,I=l;0<=I?N<I:N>I;u=0<=I?++N:--N){for(M=f[u],T=0,h=M.length;T<h;T++)if(c=M[T],c.i>0)for(i in A.m[c.i-1])i=parseInt(i),U(c,i+1);else U(c,1);s(u)}return R=C(l),S=R.length,a=0===e.length?1:A.g[l-1][S],{password:e,guesses:a,guesses_log10:this.log10(a),sequence:R}},estimate_guesses:function(e,t){var r,n,s;return null!=e.guesses?e.guesses:(s=1,e.token.length<t.length&&(s=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR:MIN_SUBMATCH_GUESSES_MULTI_CHAR),r={bruteforce:this.bruteforce_guesses,dictionary:this.dictionary_guesses,spatial:this.spatial_guesses,repeat:this.repeat_guesses,sequence:this.sequence_guesses,regex:this.regex_guesses,date:this.date_guesses},n=r[e.pattern].call(this,e),e.guesses=Math.max(n,s),e.guesses_log10=this.log10(e.guesses),e.guesses)},bruteforce_guesses:function(e){var t,r;return t=Math.pow(BRUTEFORCE_CARDINALITY,e.token.length),r=1===e.token.length?MIN_SUBMATCH_GUESSES_SINGLE_CHAR+1:MIN_SUBMATCH_GUESSES_MULTI_CHAR+1,Math.max(t,r)},repeat_guesses:function(e){return e.base_guesses*e.repeat_count},sequence_guesses:function(e){var t,r;return r=e.token.charAt(0),t="a"===r||"A"===r||"z"===r||"Z"===r||"0"===r||"1"===r||"9"===r?4:r.match(/\d/)?10:26,e.ascending||(t*=2),t*e.token.length},MIN_YEAR_SPACE:20,REFERENCE_YEAR:2016,regex_guesses:function(e){var t,r;if(t={alpha_lower:26,alpha_upper:26,alpha:52,alphanumeric:62,digits:10,symbols:33},e.regex_name in t)return Math.pow(t[e.regex_name],e.token.length);switch(e.regex_name){case"recent_year":return r=Math.abs(parseInt(e.regex_match[0])-this.REFERENCE_YEAR),r=Math.max(r,this.MIN_YEAR_SPACE)}},date_guesses:function(e){var t,r;return r=Math.max(Math.abs(e.year-this.REFERENCE_YEAR),this.MIN_YEAR_SPACE),t=365*r,e.separator&&(t*=4),t},KEYBOARD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.qwerty),KEYPAD_AVERAGE_DEGREE:calc_average_degree(adjacency_graphs.keypad),KEYBOARD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.qwerty,t=[];for(k in e)v=e[k],t.push(k);return t}().length,KEYPAD_STARTING_POSITIONS:function(){var e,t;e=adjacency_graphs.keypad,t=[];for(k in e)v=e[k],t.push(k);return t}().length,spatial_guesses:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g,f,l,p,A,S;for("qwerty"===(E=e.graph)||"dvorak"===E?(l=this.KEYBOARD_STARTING_POSITIONS,s=this.KEYBOARD_AVERAGE_DEGREE):(l=this.KEYPAD_STARTING_POSITIONS,s=this.KEYPAD_AVERAGE_DEGREE),a=0,t=e.token.length,A=e.turns,u=_=2,c=t;2<=c?_<=c:_>=c;u=2<=c?++_:--_)for(o=Math.min(A,u-1),i=h=1,g=o;1<=g?h<=g:h>=g;i=1<=g?++h:--h)a+=this.nCk(u-1,i-1)*l*Math.pow(s,i);if(e.shifted_count)if(r=e.shifted_count,n=e.token.length-e.shifted_count,0===r||0===n)a*=2;else{for(p=0,u=S=1,f=Math.min(r,n);1<=f?S<=f:S>=f;u=1<=f?++S:--S)p+=this.nCk(r+n,u);a*=p}return a},dictionary_guesses:function(e){var t;return e.base_guesses=e.rank,e.uppercase_variations=this.uppercase_variations(e),e.l33t_variations=this.l33t_variations(e),t=e.reversed&&2||1,e.base_guesses*e.uppercase_variations*e.l33t_variations*t},START_UPPER:/^[A-Z][^A-Z]+$/,END_UPPER:/^[^A-Z]+[A-Z]$/,ALL_UPPER:/^[^a-z]+$/,ALL_LOWER:/^[^A-Z]+$/,uppercase_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c;if(c=e.token,c.match(this.ALL_LOWER)||c.toLowerCase()===c)return 1;for(_=[this.START_UPPER,this.END_UPPER,this.ALL_UPPER],u=0,a=_.length;u<a;u++)if(h=_[u],c.match(h))return 2;for(r=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[A-Z]/)&&s.push(n);return s}().length,t=function(){var e,t,r,s;for(r=c.split(""),s=[],t=0,e=r.length;t<e;t++)n=r[t],n.match(/[a-z]/)&&s.push(n);return s}().length,E=0,s=i=1,o=Math.min(r,t);1<=o?i<=o:i>=o;s=1<=o?++i:--i)E+=this.nCk(r+t,s);return E},l33t_variations:function(e){var t,r,n,s,a,u,i,_,o,h,E,c,g;if(!e.l33t)return 1;g=1,o=e.sub;for(E in o)if(c=o[E],s=e.token.toLowerCase().split(""),t=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===E&&r.push(n);return r}().length,r=function(){var e,t,r;for(r=[],t=0,e=s.length;t<e;t++)n=s[t],n===c&&r.push(n);return r}().length,0===t||0===r)g*=2;else{for(i=Math.min(r,t),_=0,a=u=1,h=i;1<=h?u<=h:u>=h;a=1<=h?++u:--u)_+=this.nCk(r+t,a);g*=_}return g}},module.exports=scoring;
45771
45772},{"./adjacency_graphs":1}],7:[function(require,module,exports){
45773var time_estimates;time_estimates={estimate_attack_times:function(e){var t,n,s,o;n={online_throttling_100_per_hour:e/(100/3600),online_no_throttling_10_per_second:e/10,offline_slow_hashing_1e4_per_second:e/1e4,offline_fast_hashing_1e10_per_second:e/1e10},t={};for(s in n)o=n[s],t[s]=this.display_time(o);return{crack_times_seconds:n,crack_times_display:t,score:this.guesses_to_score(e)}},guesses_to_score:function(e){var t;return t=5,e<1e3+t?0:e<1e6+t?1:e<1e8+t?2:e<1e10+t?3:4},display_time:function(e){var t,n,s,o,_,r,i,a,u,c;return i=60,r=60*i,s=24*r,a=31*s,c=12*a,n=100*c,u=e<1?[null,"less than a second"]:e<i?(t=Math.round(e),[t,t+" second"]):e<r?(t=Math.round(e/i),[t,t+" minute"]):e<s?(t=Math.round(e/r),[t,t+" hour"]):e<a?(t=Math.round(e/s),[t,t+" day"]):e<c?(t=Math.round(e/a),[t,t+" month"]):e<n?(t=Math.round(e/c),[t,t+" year"]):[null,"centuries"],o=u[0],_=u[1],null!=o&&1!==o&&(_+="s"),_}},module.exports=time_estimates;
45774
45775},{}]},{},[4])(4)
45776});
45777//# sourceMappingURL=zxcvbn.js.map
45778</script>
45779 <script>/*
45780 * Detects entropy from a string.
45781 *
45782 * Formats include:
45783 * binary [0-1]
45784 * base 6 [0-5]
45785 * dice 6 [1-6]
45786 * decimal [0-9]
45787 * hexadecimal [0-9A-F]
9e97eb76 45788 * card [A2-9TJQK][CDHS]
95f04905
IC
45789 *
45790 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
45791 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
45792 * entropy.
45793 */
45794
45795window.Entropy = new (function() {
45796
78b8d604
IC
45797 var TWO = new BigInteger(2);
45798
95f04905
IC
45799 // matchers returns an array of the matched events for each type of entropy.
45800 // eg
45801 // matchers.binary("010") returns ["0", "1", "0"]
45802 // matchers.binary("a10") returns ["1", "0"]
45803 // matchers.hex("a10") returns ["a", "1", "0"]
45804 var matchers = {
45805 binary: function(str) {
45806 return str.match(/[0-1]/gi) || [];
45807 },
45808 base6: function(str) {
45809 return str.match(/[0-5]/gi) || [];
45810 },
45811 dice: function(str) {
45812 return str.match(/[1-6]/gi) || []; // ie dice numbers
45813 },
45814 base10: function(str) {
45815 return str.match(/[0-9]/gi) || [];
45816 },
45817 hex: function(str) {
45818 return str.match(/[0-9A-F]/gi) || [];
45819 },
45820 card: function(str) {
45821 // Format is NumberSuit, eg
45822 // AH ace of hearts
45823 // 8C eight of clubs
45824 // TD ten of diamonds
45825 // JS jack of spades
45826 // QH queen of hearts
45827 // KC king of clubs
45828 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
45829 }
45830 }
45831
45832 // Convert array of cards from ["ac", "4d", "ks"]
45833 // to numbers between 0 and 51 [0, 16, 51]
45834 function convertCardsToInts(cards) {
45835 var ints = [];
45836 var values = "a23456789tjqk";
45837 var suits = "cdhs";
45838 for (var i=0; i<cards.length; i++) {
45839 var card = cards[i].toLowerCase();
45840 var value = card[0];
45841 var suit = card[1];
45842 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
45843 ints.push(asInt);
45844 }
45845 return ints;
45846 }
45847
45848 this.fromString = function(rawEntropyStr) {
45849 // Find type of entropy being used (binary, hex, dice etc)
45850 var base = getBase(rawEntropyStr);
45851 // Convert dice to base6 entropy (ie 1-6 to 0-5)
45852 // This is done by changing all 6s to 0s
45853 if (base.str == "dice") {
45854 var newParts = [];
45855 var newInts = [];
45856 for (var i=0; i<base.parts.length; i++) {
45857 var c = base.parts[i];
45858 if ("12345".indexOf(c) > -1) {
45859 newParts[i] = base.parts[i];
45860 newInts[i] = base.ints[i];
45861 }
45862 else {
45863 newParts[i] = "0";
45864 newInts[i] = 0;
45865 }
45866 }
45867 base.str = "base 6 (dice)";
45868 base.ints = newInts;
45869 base.parts = newParts;
45870 base.matcher = matchers.base6;
45871 }
45872 // Detect empty entropy
45873 if (base.parts.length == 0) {
45874 return {
45875 binaryStr: "",
45876 cleanStr: "",
45877 cleanHtml: "",
45878 base: base,
45879 };
45880 }
45881 // Convert base.ints to BigInteger.
45882 // Due to using unusual bases, eg cards of base52, this is not as simple as
45883 // using BigInteger.parse()
45884 var entropyInt = BigInteger.ZERO;
45885 for (var i=base.ints.length-1; i>=0; i--) {
45886 var thisInt = BigInteger.parse(base.ints[i]);
45887 var power = (base.ints.length - 1) - i;
45888 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
45889 entropyInt = entropyInt.add(additionalEntropy);
45890 }
45891 // Convert entropy to binary
45892 var entropyBin = entropyInt.toString(2);
45893 // If the first integer is small, it must be padded with zeros.
45894 // Otherwise the chance of the first bit being 1 is 100%, which is
45895 // obviously incorrect.
45896 // This is not perfect for non-2^n bases.
45897 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
45898 while (entropyBin.length < expectedBits) {
45899 entropyBin = "0" + entropyBin;
45900 }
94959756
IC
45901 // Calculate the number of bits per event
45902 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 45903 // Cards binary must be handled differently, since they're not replaced
9e97eb76 45904 if (base.asInt == 52) {
94959756
IC
45905 var cardEntropy = processCardEntropy(base.parts);
45906 entropyBin = cardEntropy.binaryStr;
45907 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 45908 }
95f04905
IC
45909 // Supply a 'filtered' entropy string for display purposes
45910 var entropyClean = base.parts.join("");
45911 var entropyHtml = base.parts.join("");
45912 if (base.asInt == 52) {
45913 entropyClean = base.parts.join(" ").toUpperCase();
45914 entropyClean = entropyClean.replace(/C/g, "\u2663");
45915 entropyClean = entropyClean.replace(/D/g, "\u2666");
45916 entropyClean = entropyClean.replace(/H/g, "\u2665");
45917 entropyClean = entropyClean.replace(/S/g, "\u2660");
45918 entropyHtml = base.parts.join(" ").toUpperCase();
45919 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
45920 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
45921 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
45922 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
45923 }
9e97eb76 45924 // Return the result
95f04905
IC
45925 var e = {
45926 binaryStr: entropyBin,
45927 cleanStr: entropyClean,
45928 cleanHtml: entropyHtml,
94959756 45929 bitsPerEvent: bitsPerEvent,
95f04905
IC
45930 base: base,
45931 }
45932 return e;
45933 }
45934
78b8d604
IC
45935 function getSortedDeck() {
45936 var s = [];
45937 var suits = "CDHS";
45938 var values = "A23456789TJQK";
45939 for (var i=0; i<suits.length; i++) {
45940 for (var j=0; j<values.length; j++) {
45941 s.push(values[j]+suits[i]);
45942 }
45943 }
45944 return s;
45945 }
45946
95f04905
IC
45947 function getBase(str) {
45948 // Need to get the lowest base for the supplied entropy.
45949 // This prevents interpreting, say, dice rolls as hexadecimal.
45950 var binaryMatches = matchers.binary(str);
45951 var hexMatches = matchers.hex(str);
45952 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
45953 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
45954 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
45955 return {
45956 ints: ints,
45957 parts: binaryMatches,
45958 matcher: matchers.binary,
45959 asInt: 2,
45960 str: "binary",
45961 }
45962 }
45963 var cardMatches = matchers.card(str);
45964 if (cardMatches.length >= hexMatches.length / 2) {
45965 var ints = convertCardsToInts(cardMatches);
45966 return {
45967 ints: ints,
45968 parts: cardMatches,
45969 matcher: matchers.card,
45970 asInt: 52,
45971 str: "card",
45972 }
45973 }
45974 var diceMatches = matchers.dice(str);
45975 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
45976 var ints = diceMatches.map(function(i) { return parseInt(i) });
45977 return {
45978 ints: ints,
45979 parts: diceMatches,
45980 matcher: matchers.dice,
45981 asInt: 6,
45982 str: "dice",
45983 }
45984 }
45985 var base6Matches = matchers.base6(str);
45986 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
45987 var ints = base6Matches.map(function(i) { return parseInt(i) });
45988 return {
45989 ints: ints,
45990 parts: base6Matches,
45991 matcher: matchers.base6,
45992 asInt: 6,
45993 str: "base 6",
45994 }
45995 }
45996 var base10Matches = matchers.base10(str);
45997 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
45998 var ints = base10Matches.map(function(i) { return parseInt(i) });
45999 return {
46000 ints: ints,
46001 parts: base10Matches,
46002 matcher: matchers.base10,
46003 asInt: 10,
46004 str: "base 10",
46005 }
46006 }
46007 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
46008 return {
46009 ints: ints,
46010 parts: hexMatches,
46011 matcher: matchers.hex,
46012 asInt: 16,
46013 str: "hexadecimal",
46014 }
46015 }
46016
ea87f1d3
IC
46017 // Assume cards are NOT replaced.
46018 // Additional entropy decreases as more cards are used. This means
46019 // total possible entropy is measured using n!, not base^n.
46020 // eg the second last card can be only one of two, not one of fifty two
46021 // so the added entropy for that card is only one bit at most
94959756 46022 function processCardEntropy(cards) {
ea87f1d3
IC
46023 // Track how many instances of each card have been used, and thus
46024 // how many decks are in use.
46025 var cardCounts = {};
46026 var numberOfDecks = 0;
46027 // Work out number of decks by max(duplicates)
46028 for (var i=0; i<cards.length; i++) {
46029 // Get the card that was drawn
46030 var cardLower = cards[i];
46031 var card = cardLower.toUpperCase();
46032 // Initialize the count for this card if needed
46033 if (!(card in cardCounts)) {
46034 cardCounts[card] = 0;
46035 }
46036 cardCounts[card] += 1;
46037 // See if this is max(duplicates)
46038 if (cardCounts[card] > numberOfDecks) {
46039 numberOfDecks = cardCounts[card];
46040 }
46041 }
46042 // Work out the total number of bits for this many decks
46043 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
46044 var gainedBits = 0;
46045 // Equivalent of Math.log2(factorial(52*numberOfDecks))
46046 // which becomes infinity for numberOfDecks > 4
46047 for (var i=1; i<=52*numberOfDecks; i++) {
46048 gainedBits = gainedBits + Math.log2(i);
46049 }
ea87f1d3
IC
46050 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
46051 var maxBits = gainedBits - lostBits;
46052 // Convert the drawn cards to a binary representation.
46053 // The exact technique for doing this is unclear.
46054 // See
46055 // http://crypto.stackexchange.com/a/41896
46056 // "I even doubt that this is well defined (only the average entropy
46057 // is, I believe)."
46058 // See
46059 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
46060 // "The binary representation can be the first log(permutations,2) bits
46061 // of the sha-2 hash of the normalized deck string."
46062 //
46063 // In this specific implementation, the first N bits of the hash of the
46064 // normalized cards string is being used. Uppercase, no spaces; eg
46065 // sha256("AH8DQSTC2H")
46066 var totalCards = numberOfDecks * 52;
46067 var percentUsed = cards.length / totalCards;
46068 // Calculate the average number of bits of entropy for the number of
46069 // cards drawn.
46070 var numberOfBits = Math.floor(maxBits * percentUsed);
46071 // Create a normalized string of the selected cards
46072 var normalizedCards = cards.join("").toUpperCase();
46073 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 46074 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
46075 // are used until the required number of bits is reached.
46076 var entropyBin = "";
46077 var iterations = 0;
46078 while (entropyBin.length < numberOfBits) {
434caecd 46079 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
46080 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
46081 for (var i=0; i<hashHex.length; i++) {
46082 var decimal = parseInt(hashHex[i], 16);
46083 var binary = decimal.toString(2);
46084 while (binary.length < 4) {
46085 binary = "0" + binary;
46086 }
46087 entropyBin = entropyBin + binary;
46088 }
46089 iterations = iterations + 1;
46090 }
46091 // Truncate to the appropriate number of bits.
46092 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
46093 // Get the number of bits per event
46094 bitsPerEvent = maxBits / totalCards;
46095 return {
46096 binaryStr: entropyBin,
46097 bitsPerEvent: bitsPerEvent,
46098 }
ea87f1d3
IC
46099 }
46100
95f04905
IC
46101 // Polyfill for Math.log2
46102 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
46103 Math.log2 = Math.log2 || function(x) {
46104 // The polyfill isn't good enough because of the poor accuracy of
46105 // Math.LOG2E
46106 // log2(8) gave 2.9999999999999996 which when floored causes issues.
46107 // So instead use the BigInteger library to get it right.
46108 return BigInteger.log(x) / BigInteger.log(2);
46109 };
46110
9e97eb76
IC
46111 // Depends on BigInteger
46112 function factorial(n) {
46113 if (n == 0) {
46114 return 1;
46115 }
46116 f = BigInteger.ONE;
46117 for (var i=1; i<=n; i++) {
46118 f = f.multiply(new BigInteger(i));
46119 }
46120 return f;
46121 }
46122
95f04905 46123})();
c6624d51
IC
46124</script>
46125 <script>(function() {
46126
46127 // mnemonics is populated as required by getLanguage
46128 var mnemonics = { "english": new Mnemonic("english") };
46129 var mnemonic = mnemonics["english"];
3725abb5 46130 var seed = null;
c6624d51
IC
46131 var bip32RootKey = null;
46132 var bip32ExtendedKey = null;
9987f0c1 46133 var network = bitcoinjs.bitcoin.networks.bitcoin;
c6624d51
IC
46134 var addressRowTemplate = $("#address-row-template");
46135
46136 var showIndex = true;
46137 var showAddress = true;
46138 var showPubKey = true;
46139 var showPrivKey = true;
52da415f 46140 var showQr = false;
8d18f379 46141 var litecoinUseLtub = false;
c6624d51
IC
46142
46143 var entropyChangeTimeoutEvent = null;
46144 var phraseChangeTimeoutEvent = null;
46145 var rootKeyChangedTimeoutEvent = null;
46146
40892aba
IC
46147 var generationProcesses = [];
46148
c6624d51
IC
46149 var DOM = {};
46150 DOM.network = $(".network");
56530adc 46151 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
46152 DOM.phraseNetwork = $("#network-phrase");
46153 DOM.useEntropy = $(".use-entropy");
46154 DOM.entropyContainer = $(".entropy-container");
46155 DOM.entropy = $(".entropy");
2a6dd137
IC
46156 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
46157 DOM.entropyType = DOM.entropyContainer.find(".type");
f1e5d484 46158 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
2a6dd137
IC
46159 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
46160 DOM.entropyBits = DOM.entropyContainer.find(".bits");
46161 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
46162 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
46163 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
46164 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
c6624d51
IC
46165 DOM.phrase = $(".phrase");
46166 DOM.passphrase = $(".passphrase");
46167 DOM.generateContainer = $(".generate-container");
46168 DOM.generate = $(".generate");
46169 DOM.seed = $(".seed");
46170 DOM.rootKey = $(".root-key");
8d18f379
IC
46171 DOM.litecoinLtubContainer = $(".litecoin-ltub-container");
46172 DOM.litecoinUseLtub = $(".litecoin-use-ltub");
c6624d51
IC
46173 DOM.extendedPrivKey = $(".extended-priv-key");
46174 DOM.extendedPubKey = $(".extended-pub-key");
46175 DOM.bip32tab = $("#bip32-tab");
46176 DOM.bip44tab = $("#bip44-tab");
9987f0c1 46177 DOM.bip49tab = $("#bip49-tab");
c6624d51
IC
46178 DOM.bip32panel = $("#bip32");
46179 DOM.bip44panel = $("#bip44");
9987f0c1 46180 DOM.bip49panel = $("#bip49");
c6624d51
IC
46181 DOM.bip32path = $("#bip32-path");
46182 DOM.bip44path = $("#bip44-path");
46183 DOM.bip44purpose = $("#bip44 .purpose");
46184 DOM.bip44coin = $("#bip44 .coin");
46185 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
46186 DOM.bip44accountXprv = $("#bip44 .account-xprv");
46187 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 46188 DOM.bip44change = $("#bip44 .change");
9987f0c1
IC
46189 DOM.bip49unavailable = $("#bip49 .unavailable");
46190 DOM.bip49available = $("#bip49 .available");
46191 DOM.bip49path = $("#bip49-path");
46192 DOM.bip49purpose = $("#bip49 .purpose");
46193 DOM.bip49coin = $("#bip49 .coin");
46194 DOM.bip49account = $("#bip49 .account");
46195 DOM.bip49accountXprv = $("#bip49 .account-xprv");
46196 DOM.bip49accountXpub = $("#bip49 .account-xpub");
46197 DOM.bip49change = $("#bip49 .change");
18abe53b 46198 DOM.generatedStrength = $(".generate-container .strength");
c6624d51 46199 DOM.hardenedAddresses = $(".hardened-addresses");
0a8d06d0 46200 DOM.useP2wpkhNestedInP2sh = $(".p2wpkh-nested-in-p2sh");
c6624d51
IC
46201 DOM.addresses = $(".addresses");
46202 DOM.rowsToAdd = $(".rows-to-add");
46203 DOM.more = $(".more");
46204 DOM.feedback = $(".feedback");
46205 DOM.tab = $(".derivation-type a");
46206 DOM.indexToggle = $(".index-toggle");
46207 DOM.addressToggle = $(".address-toggle");
46208 DOM.publicKeyToggle = $(".public-key-toggle");
46209 DOM.privateKeyToggle = $(".private-key-toggle");
46210 DOM.languages = $(".languages a");
e00964cc 46211 DOM.qrContainer = $(".qr-container");
52da415f 46212 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
46213 DOM.qrImage = DOM.qrContainer.find(".qr-image");
46214 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
46215 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
46216
46217 function init() {
46218 // Events
46219 DOM.network.on("change", networkChanged);
56530adc 46220 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
46221 DOM.useEntropy.on("change", setEntropyVisibility);
46222 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 46223 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
46224 DOM.phrase.on("input", delayedPhraseChanged);
46225 DOM.passphrase.on("input", delayedPhraseChanged);
46226 DOM.generate.on("click", generateClicked);
46227 DOM.more.on("click", showMore);
46228 DOM.rootKey.on("input", delayedRootKeyChanged);
8d18f379 46229 DOM.litecoinUseLtub.on("change", litecoinUseLtubChanged);
c6624d51 46230 DOM.bip32path.on("input", calcForDerivationPath);
c6624d51
IC
46231 DOM.bip44account.on("input", calcForDerivationPath);
46232 DOM.bip44change.on("input", calcForDerivationPath);
9987f0c1
IC
46233 DOM.bip49account.on("input", calcForDerivationPath);
46234 DOM.bip49change.on("input", calcForDerivationPath);
c6624d51
IC
46235 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
46236 DOM.hardenedAddresses.on("change", calcForDerivationPath);
0a8d06d0 46237 DOM.useP2wpkhNestedInP2sh.on("change", calcForDerivationPath);
c6624d51
IC
46238 DOM.indexToggle.on("click", toggleIndexes);
46239 DOM.addressToggle.on("click", toggleAddresses);
46240 DOM.publicKeyToggle.on("click", togglePublicKeys);
46241 DOM.privateKeyToggle.on("click", togglePrivateKeys);
46242 DOM.languages.on("click", languageChanged);
e00964cc 46243 setQrEvents(DOM.showQrEls);
c6624d51
IC
46244 disableForms();
46245 hidePending();
46246 hideValidationError();
46247 populateNetworkSelect();
56530adc 46248 populateClientSelect();
c6624d51
IC
46249 }
46250
46251 // Event handlers
46252
46253 function networkChanged(e) {
9987f0c1
IC
46254 clearDerivedKeys();
46255 clearAddressesList();
8d18f379 46256 DOM.litecoinLtubContainer.addClass("hidden");
c6624d51 46257 var networkIndex = e.target.value;
9987f0c1
IC
46258 var network = networks[networkIndex];
46259 network.onSelect();
0a8d06d0
IC
46260 if (network.p2wpkhNestedInP2shAvailable) {
46261 showP2wpkhNestedInP2shAvailable();
9987f0c1
IC
46262 }
46263 else {
0a8d06d0 46264 showP2wpkhNestedInP2shUnavailable();
9987f0c1 46265 }
c6624d51
IC
46266 if (seed != null) {
46267 phraseChanged();
46268 }
46269 else {
46270 rootKeyChanged();
46271 }
46272 }
46273
56530adc
IC
46274 function bip32ClientChanged(e) {
46275 var clientIndex = DOM.bip32Client.val();
46276 if (clientIndex == "custom") {
46277 DOM.bip32path.prop("readonly", false);
46278 }
46279 else {
46280 DOM.bip32path.prop("readonly", true);
46281 clients[clientIndex].onSelect();
46282 if (seed != null) {
46283 phraseChanged();
46284 }
46285 else {
46286 rootKeyChanged();
46287 }
46288 }
46289 }
46290
c6624d51
IC
46291 function setEntropyVisibility() {
46292 if (isUsingOwnEntropy()) {
46293 DOM.entropyContainer.removeClass("hidden");
46294 DOM.generateContainer.addClass("hidden");
46295 DOM.phrase.prop("readonly", true);
46296 DOM.entropy.focus();
46297 entropyChanged();
46298 }
46299 else {
46300 DOM.entropyContainer.addClass("hidden");
46301 DOM.generateContainer.removeClass("hidden");
46302 DOM.phrase.prop("readonly", false);
18abe53b 46303 hidePending();
c6624d51
IC
46304 }
46305 }
46306
46307 function delayedPhraseChanged() {
46308 hideValidationError();
f128bd58
IC
46309 seed = null;
46310 bip32RootKey = null;
46311 bip32ExtendedKey = null;
46312 clearAddressesList();
c6624d51
IC
46313 showPending();
46314 if (phraseChangeTimeoutEvent != null) {
46315 clearTimeout(phraseChangeTimeoutEvent);
46316 }
46317 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
46318 }
46319
46320 function phraseChanged() {
46321 showPending();
c6624d51
IC
46322 setMnemonicLanguage();
46323 // Get the mnemonic phrase
46324 var phrase = DOM.phrase.val();
46325 var errorText = findPhraseErrors(phrase);
46326 if (errorText) {
46327 showValidationError(errorText);
46328 return;
46329 }
46330 // Calculate and display
46331 var passphrase = DOM.passphrase.val();
46332 calcBip32RootKeyFromSeed(phrase, passphrase);
46333 calcForDerivationPath();
c6624d51
IC
46334 }
46335
46336 function delayedEntropyChanged() {
46337 hideValidationError();
46338 showPending();
46339 if (entropyChangeTimeoutEvent != null) {
46340 clearTimeout(entropyChangeTimeoutEvent);
46341 }
46342 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
46343 }
46344
46345 function entropyChanged() {
18abe53b
IC
46346 // If blank entropy, clear mnemonic, addresses, errors
46347 if (DOM.entropy.val().trim().length == 0) {
46348 clearDisplay();
2a6dd137 46349 clearEntropyFeedback();
18abe53b
IC
46350 DOM.phrase.val("");
46351 showValidationError("Blank entropy");
46352 return;
46353 }
46354 // Get the current phrase to detect changes
46355 var phrase = DOM.phrase.val();
46356 // Set the phrase from the entropy
c6624d51 46357 setMnemonicFromEntropy();
18abe53b
IC
46358 // Recalc addresses if the phrase has changed
46359 var newPhrase = DOM.phrase.val();
46360 if (newPhrase != phrase) {
46361 if (newPhrase.length == 0) {
46362 clearDisplay();
46363 }
46364 else {
46365 phraseChanged();
46366 }
46367 }
46368 else {
46369 hidePending();
46370 }
c6624d51
IC
46371 }
46372
46373 function delayedRootKeyChanged() {
46374 // Warn if there is an existing mnemonic or passphrase.
46375 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
46376 if (!confirm("This will clear existing mnemonic and passphrase")) {
46377 DOM.rootKey.val(bip32RootKey);
46378 return
46379 }
46380 }
46381 hideValidationError();
46382 showPending();
46383 // Clear existing mnemonic and passphrase
46384 DOM.phrase.val("");
46385 DOM.passphrase.val("");
46386 seed = null;
46387 if (rootKeyChangedTimeoutEvent != null) {
46388 clearTimeout(rootKeyChangedTimeoutEvent);
46389 }
46390 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
46391 }
46392
46393 function rootKeyChanged() {
46394 showPending();
46395 hideValidationError();
c6624d51
IC
46396 var rootKeyBase58 = DOM.rootKey.val();
46397 var errorText = validateRootKey(rootKeyBase58);
46398 if (errorText) {
46399 showValidationError(errorText);
46400 return;
46401 }
46402 // Calculate and display
46403 calcBip32RootKeyFromBase58(rootKeyBase58);
46404 calcForDerivationPath();
c6624d51
IC
46405 }
46406
8d18f379
IC
46407 function litecoinUseLtubChanged() {
46408 litecoinUseLtub = DOM.litecoinUseLtub.prop("checked");
46409 if (litecoinUseLtub) {
46410 network = bitcoinjs.bitcoin.networks.litecoinLtub;
46411 }
46412 else {
46413 network = bitcoinjs.bitcoin.networks.litecoin;
46414 }
46415 phraseChanged();
46416 }
46417
c6624d51 46418 function calcForDerivationPath() {
9987f0c1 46419 clearDerivedKeys();
ba3cb9ec 46420 clearAddressesList();
f128bd58 46421 showPending();
9987f0c1
IC
46422 // Don't show bip49 if it's selected but network doesn't support it
46423 if (bip49TabSelected() && !networkHasBip49()) {
46424 return;
46425 }
c6624d51
IC
46426 // Get the derivation path
46427 var derivationPath = getDerivationPath();
46428 var errorText = findDerivationPathErrors(derivationPath);
46429 if (errorText) {
46430 showValidationError(errorText);
46431 return;
46432 }
20083ab9
IC
46433 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
46434 if (bip44TabSelected()) {
46435 displayBip44Info();
46436 }
9987f0c1
IC
46437 if (bip49TabSelected()) {
46438 displayBip49Info();
46439 }
c6624d51 46440 displayBip32Info();
c6624d51
IC
46441 }
46442
46443 function generateClicked() {
46444 if (isUsingOwnEntropy()) {
46445 return;
46446 }
46447 clearDisplay();
46448 showPending();
46449 setTimeout(function() {
46450 setMnemonicLanguage();
46451 var phrase = generateRandomPhrase();
46452 if (!phrase) {
46453 return;
46454 }
46455 phraseChanged();
46456 }, 50);
46457 }
46458
46459 function languageChanged() {
46460 setTimeout(function() {
46461 setMnemonicLanguage();
46462 if (DOM.phrase.val().length > 0) {
46463 var newPhrase = convertPhraseToNewLanguage();
46464 DOM.phrase.val(newPhrase);
46465 phraseChanged();
46466 }
46467 else {
46468 DOM.generate.trigger("click");
46469 }
46470 }, 50);
46471 }
46472
46473 function toggleIndexes() {
46474 showIndex = !showIndex;
46475 $("td.index span").toggleClass("invisible");
46476 }
46477
46478 function toggleAddresses() {
46479 showAddress = !showAddress;
46480 $("td.address span").toggleClass("invisible");
46481 }
46482
46483 function togglePublicKeys() {
46484 showPubKey = !showPubKey;
46485 $("td.pubkey span").toggleClass("invisible");
46486 }
46487
46488 function togglePrivateKeys() {
46489 showPrivKey = !showPrivKey;
46490 $("td.privkey span").toggleClass("invisible");
46491 }
46492
46493 // Private methods
46494
46495 function generateRandomPhrase() {
46496 if (!hasStrongRandom()) {
46497 var errorText = "This browser does not support strong randomness";
46498 showValidationError(errorText);
46499 return;
46500 }
18abe53b 46501 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
46502 var strength = numWords / 3 * 32;
46503 var words = mnemonic.generate(strength);
46504 DOM.phrase.val(words);
46505 return words;
46506 }
46507
46508 function calcBip32RootKeyFromSeed(phrase, passphrase) {
46509 seed = mnemonic.toSeed(phrase, passphrase);
9987f0c1 46510 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromSeedHex(seed, network);
c6624d51
IC
46511 }
46512
46513 function calcBip32RootKeyFromBase58(rootKeyBase58) {
9987f0c1 46514 bip32RootKey = bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
c6624d51
IC
46515 }
46516
46517 function calcBip32ExtendedKey(path) {
0a1f0259
IC
46518 // Check there's a root key to derive from
46519 if (!bip32RootKey) {
46520 return bip32RootKey;
46521 }
20083ab9 46522 var extendedKey = bip32RootKey;
c6624d51
IC
46523 // Derive the key from the path
46524 var pathBits = path.split("/");
ebd8d4e8
IC
46525 for (var i=0; i<pathBits.length; i++) {
46526 var bit = pathBits[i];
46527 var index = parseInt(bit);
46528 if (isNaN(index)) {
46529 continue;
46530 }
46531 var hardened = bit[bit.length-1] == "'";
9987f0c1 46532 var isPriv = !(extendedKey.isNeutered());
ba3cb9ec
IC
46533 var invalidDerivationPath = hardened && !isPriv;
46534 if (invalidDerivationPath) {
46535 extendedKey = null;
46536 }
46537 else if (hardened) {
20083ab9 46538 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
46539 }
46540 else {
20083ab9 46541 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
46542 }
46543 }
20083ab9 46544 return extendedKey
ebd8d4e8
IC
46545 }
46546
46547 function showValidationError(errorText) {
46548 DOM.feedback
46549 .text(errorText)
46550 .show();
46551 }
46552
46553 function hideValidationError() {
46554 DOM.feedback
46555 .text("")
46556 .hide();
46557 }
46558
46559 function findPhraseErrors(phrase) {
ebd8d4e8 46560 // Preprocess the words
783981de 46561 phrase = mnemonic.normalizeString(phrase);
0515eeec 46562 var words = phraseToWordArray(phrase);
18abe53b
IC
46563 // Detect blank phrase
46564 if (words.length == 0) {
46565 return "Blank mnemonic";
46566 }
563e401a 46567 // Check each word
0515eeec
IC
46568 for (var i=0; i<words.length; i++) {
46569 var word = words[i];
46570 var language = getLanguage();
46571 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
46572 console.log("Finding closest match to " + word);
46573 var nearestWord = findNearestWord(word);
46574 return word + " not in wordlist, did you mean " + nearestWord + "?";
46575 }
46576 }
ebd8d4e8 46577 // Check the words are valid
0515eeec 46578 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
46579 var isValid = mnemonic.check(properPhrase);
46580 if (!isValid) {
46581 return "Invalid mnemonic";
46582 }
46583 return false;
46584 }
46585
efe41586
IC
46586 function validateRootKey(rootKeyBase58) {
46587 try {
0a8d06d0 46588 bitcoinjs.bitcoin.HDNode.fromBase58(rootKeyBase58, network);
efe41586
IC
46589 }
46590 catch (e) {
46591 return "Invalid root key";
46592 }
46593 return "";
46594 }
46595
38523d36 46596 function getDerivationPath() {
20083ab9 46597 if (bip44TabSelected()) {
38523d36
IC
46598 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46599 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46600 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46601 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
46602 var path = "m/";
46603 path += purpose + "'/";
46604 path += coin + "'/";
46605 path += account + "'/";
46606 path += change;
46607 DOM.bip44path.val(path);
46608 var derivationPath = DOM.bip44path.val();
46609 console.log("Using derivation path from BIP44 tab: " + derivationPath);
46610 return derivationPath;
46611 }
9987f0c1
IC
46612 if (bip49TabSelected()) {
46613 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46614 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46615 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46616 var change = parseIntNoNaN(DOM.bip49change.val(), 0);
46617 var path = "m/";
46618 path += purpose + "'/";
46619 path += coin + "'/";
46620 path += account + "'/";
46621 path += change;
46622 DOM.bip49path.val(path);
46623 var derivationPath = DOM.bip49path.val();
46624 console.log("Using derivation path from BIP49 tab: " + derivationPath);
46625 return derivationPath;
46626 }
20083ab9 46627 else if (bip32TabSelected()) {
38523d36
IC
46628 var derivationPath = DOM.bip32path.val();
46629 console.log("Using derivation path from BIP32 tab: " + derivationPath);
46630 return derivationPath;
46631 }
46632 else {
46633 console.log("Unknown derivation path");
46634 }
46635 }
46636
ebd8d4e8 46637 function findDerivationPathErrors(path) {
30c9e79d
IC
46638 // TODO is not perfect but is better than nothing
46639 // Inspired by
46640 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
46641 // and
46642 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
46643 var maxDepth = 255; // TODO verify this!!
46644 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
46645 if (path[0] != "m") {
46646 return "First character must be 'm'";
46647 }
46648 if (path.length > 1) {
46649 if (path[1] != "/") {
46650 return "Separator must be '/'";
46651 }
46652 var indexes = path.split("/");
46653 if (indexes.length > maxDepth) {
46654 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
46655 }
46656 for (var depth = 1; depth<indexes.length; depth++) {
46657 var index = indexes[depth];
46658 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
46659 if (invalidChars.length > 0) {
46660 return "Invalid characters " + invalidChars + " found at depth " + depth;
46661 }
46662 var indexValue = parseInt(index.replace("'", ""));
46663 if (isNaN(depth)) {
46664 return "Invalid number at depth " + depth;
46665 }
46666 if (indexValue > maxIndexValue) {
46667 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
46668 }
46669 }
46670 }
0a1f0259
IC
46671 // Check root key exists or else derivation path is useless!
46672 if (!bip32RootKey) {
46673 return "No root key";
46674 }
ba3cb9ec 46675 // Check no hardened derivation path when using xpub keys
8d18f379
IC
46676 var hardenedPath = path.indexOf("'") > -1;
46677 var hardenedAddresses = bip32TabSelected() && DOM.hardenedAddresses.prop("checked");
46678 var hardened = hardenedPath || hardenedAddresses;
9987f0c1 46679 var isXpubkey = bip32RootKey.isNeutered();
ba3cb9ec
IC
46680 if (hardened && isXpubkey) {
46681 return "Hardened derivation path is invalid with xpub key";
46682 }
ebd8d4e8
IC
46683 return false;
46684 }
46685
20083ab9
IC
46686 function displayBip44Info() {
46687 // Get the derivation path for the account
46688 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
46689 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
46690 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
46691 var path = "m/";
46692 path += purpose + "'/";
46693 path += coin + "'/";
46694 path += account + "'/";
46695 // Calculate the account extended keys
46696 var accountExtendedKey = calcBip32ExtendedKey(path);
46697 var accountXprv = accountExtendedKey.toBase58();
9987f0c1 46698 var accountXpub = accountExtendedKey.neutered().toBase58();
20083ab9
IC
46699 // Display the extended keys
46700 DOM.bip44accountXprv.val(accountXprv);
46701 DOM.bip44accountXpub.val(accountXpub);
46702 }
46703
9987f0c1
IC
46704 function displayBip49Info() {
46705 // Get the derivation path for the account
46706 var purpose = parseIntNoNaN(DOM.bip49purpose.val(), 49);
46707 var coin = parseIntNoNaN(DOM.bip49coin.val(), 0);
46708 var account = parseIntNoNaN(DOM.bip49account.val(), 0);
46709 var path = "m/";
46710 path += purpose + "'/";
46711 path += coin + "'/";
46712 path += account + "'/";
46713 // Calculate the account extended keys
46714 var accountExtendedKey = calcBip32ExtendedKey(path);
46715 var accountXprv = accountExtendedKey.toBase58();
46716 var accountXpub = accountExtendedKey.neutered().toBase58();
46717 // Display the extended keys
46718 DOM.bip49accountXprv.val(accountXprv);
46719 DOM.bip49accountXpub.val(accountXpub);
46720 }
46721
ebd8d4e8
IC
46722 function displayBip32Info() {
46723 // Display the key
73161a92 46724 DOM.seed.val(seed);
ebd8d4e8
IC
46725 var rootKey = bip32RootKey.toBase58();
46726 DOM.rootKey.val(rootKey);
ba3cb9ec 46727 var xprvkeyB58 = "NA";
9987f0c1 46728 if (!bip32ExtendedKey.isNeutered()) {
ba3cb9ec
IC
46729 xprvkeyB58 = bip32ExtendedKey.toBase58();
46730 }
46731 var extendedPrivKey = xprvkeyB58;
ebd8d4e8 46732 DOM.extendedPrivKey.val(extendedPrivKey);
9987f0c1 46733 var extendedPubKey = bip32ExtendedKey.neutered().toBase58();
ebd8d4e8
IC
46734 DOM.extendedPubKey.val(extendedPubKey);
46735 // Display the addresses and privkeys
46736 clearAddressesList();
46737 displayAddresses(0, 20);
46738 }
46739
46740 function displayAddresses(start, total) {
40892aba
IC
46741 generationProcesses.push(new (function() {
46742
46743 var rows = [];
46744
46745 this.stop = function() {
46746 for (var i=0; i<rows.length; i++) {
46747 rows[i].shouldGenerate = false;
46748 }
f128bd58 46749 hidePending();
40892aba
IC
46750 }
46751
46752 for (var i=0; i<total; i++) {
46753 var index = i + start;
f128bd58
IC
46754 var isLast = i == total - 1;
46755 rows.push(new TableRow(index, isLast));
40892aba
IC
46756 }
46757
46758 })());
80c4dd2a
IC
46759 }
46760
f128bd58 46761 function TableRow(index, isLast) {
80c4dd2a 46762
40892aba
IC
46763 var self = this;
46764 this.shouldGenerate = true;
1975bfbc 46765 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
0a8d06d0
IC
46766 var isP2wpkhNestedInP2sh = bip49TabSelected() || (bip32TabSelected() && useP2wpkhNestedInP2sh());
46767 var p2wpkhNestedInP2shAvailable = networkHasBip49();
1975bfbc 46768
80c4dd2a
IC
46769 function init() {
46770 calculateValues();
46771 }
46772
46773 function calculateValues() {
46774 setTimeout(function() {
40892aba
IC
46775 if (!self.shouldGenerate) {
46776 return;
46777 }
9987f0c1 46778 var key = "NA";
1975bfbc
IC
46779 if (useHardenedAddresses) {
46780 key = bip32ExtendedKey.deriveHardened(index);
46781 }
46782 else {
46783 key = bip32ExtendedKey.derive(index);
46784 }
80c4dd2a 46785 var address = key.getAddress().toString();
ba3cb9ec 46786 var privkey = "NA";
9987f0c1
IC
46787 if (!key.isNeutered()) {
46788 privkey = key.keyPair.toWIF(network);
ba3cb9ec 46789 }
9987f0c1 46790 var pubkey = key.getPublicKeyBuffer().toString('hex');
38523d36 46791 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
46792 if (useHardenedAddresses) {
46793 indexText = indexText + "'";
46794 }
8b095871 46795 // Ethereum values are different
534481b6 46796 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
9987f0c1 46797 var privKeyBuffer = key.keyPair.d.toBuffer();
8b095871
IC
46798 privkey = privKeyBuffer.toString('hex');
46799 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
46800 var hexAddress = addressBuffer.toString('hex');
46801 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
46802 address = ethUtil.addHexPrefix(checksumAddress);
920eb591
IC
46803 privkey = ethUtil.addHexPrefix(privkey);
46804 pubkey = ethUtil.addHexPrefix(pubkey);
8b095871 46805 }
8a1f452d 46806 // Ripple values are different
534481b6 46807 if (networks[DOM.network.val()].name == "XRP - Ripple") {
8a1f452d 46808 privkey = convertRipplePriv(privkey);
46809 address = convertRippleAdrr(address);
46810 }
9987f0c1 46811 // BIP49 addresses are different
0a8d06d0
IC
46812 if (isP2wpkhNestedInP2sh) {
46813 if (!p2wpkhNestedInP2shAvailable) {
9987f0c1
IC
46814 return;
46815 }
46816 var keyhash = bitcoinjs.bitcoin.crypto.hash160(key.getPublicKeyBuffer());
46817 var scriptsig = bitcoinjs.bitcoin.script.witnessPubKeyHash.output.encode(keyhash);
46818 var addressbytes = bitcoinjs.bitcoin.crypto.hash160(scriptsig);
46819 var scriptpubkey = bitcoinjs.bitcoin.script.scriptHash.output.encode(addressbytes);
46820 address = bitcoinjs.bitcoin.address.fromOutputScript(scriptpubkey, network)
46821 }
1b12b2f5 46822 addAddressToList(indexText, address, pubkey, privkey);
f128bd58
IC
46823 if (isLast) {
46824 hidePending();
46825 }
80c4dd2a 46826 }, 50)
ebd8d4e8 46827 }
80c4dd2a
IC
46828
46829 init();
46830
ebd8d4e8
IC
46831 }
46832
46833 function showMore() {
46834 var start = DOM.addresses.children().length;
46835 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
46836 if (isNaN(rowsToAdd)) {
46837 rowsToAdd = 20;
46838 DOM.rowsToAdd.val("20");
46839 }
46840 if (rowsToAdd > 200) {
46841 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
46842 msg += "Do you want to continue?";
46843 if (!confirm(msg)) {
46844 return;
46845 }
46846 }
ebd8d4e8 46847 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
46848 }
46849
46850 function clearDisplay() {
46851 clearAddressesList();
9987f0c1 46852 clearKeys();
ebd8d4e8
IC
46853 hideValidationError();
46854 }
46855
46856 function clearAddressesList() {
46857 DOM.addresses.empty();
40892aba
IC
46858 stopGenerating();
46859 }
46860
46861 function stopGenerating() {
46862 while (generationProcesses.length > 0) {
46863 var generation = generationProcesses.shift();
46864 generation.stop();
46865 }
ebd8d4e8
IC
46866 }
46867
9987f0c1
IC
46868 function clearKeys() {
46869 clearRootKey();
46870 clearDerivedKeys();
46871 }
46872
46873 function clearRootKey() {
ebd8d4e8 46874 DOM.rootKey.val("");
9987f0c1
IC
46875 }
46876
46877 function clearDerivedKeys() {
ebd8d4e8
IC
46878 DOM.extendedPrivKey.val("");
46879 DOM.extendedPubKey.val("");
9987f0c1
IC
46880 DOM.bip44accountXprv.val("");
46881 DOM.bip44accountXpub.val("");
ebd8d4e8
IC
46882 }
46883
1b12b2f5 46884 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 46885 var row = $(addressRowTemplate.html());
80c4dd2a
IC
46886 // Elements
46887 var indexCell = row.find(".index span");
46888 var addressCell = row.find(".address span");
1b12b2f5 46889 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
46890 var privkeyCell = row.find(".privkey span");
46891 // Content
ae30fed8 46892 indexCell.text(indexText);
80c4dd2a 46893 addressCell.text(address);
1b12b2f5 46894 pubkeyCell.text(pubkey);
80c4dd2a
IC
46895 privkeyCell.text(privkey);
46896 // Visibility
46897 if (!showIndex) {
46898 indexCell.addClass("invisible");
46899 }
46900 if (!showAddress) {
46901 addressCell.addClass("invisible");
46902 }
1b12b2f5
IC
46903 if (!showPubKey) {
46904 pubkeyCell.addClass("invisible");
46905 }
80c4dd2a 46906 if (!showPrivKey) {
6d628db7 46907 privkeyCell.addClass("invisible");
80c4dd2a 46908 }
ebd8d4e8 46909 DOM.addresses.append(row);
e00964cc
IC
46910 var rowShowQrEls = row.find("[data-show-qr]");
46911 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
46912 }
46913
46914 function hasStrongRandom() {
46915 return 'crypto' in window && window['crypto'] !== null;
46916 }
46917
46918 function disableForms() {
46919 $("form").on("submit", function(e) {
46920 e.preventDefault();
46921 });
46922 }
46923
ebd8d4e8
IC
46924 function parseIntNoNaN(val, defaultVal) {
46925 var v = parseInt(val);
46926 if (isNaN(v)) {
46927 return defaultVal;
46928 }
46929 return v;
46930 }
46931
46932 function showPending() {
46933 DOM.feedback
46934 .text("Calculating...")
46935 .show();
46936 }
46937
563e401a 46938 function findNearestWord(word) {
0515eeec
IC
46939 var language = getLanguage();
46940 var words = WORDLISTS[language];
563e401a
IC
46941 var minDistance = 99;
46942 var closestWord = words[0];
46943 for (var i=0; i<words.length; i++) {
46944 var comparedTo = words[i];
6ea15134
IC
46945 if (comparedTo.indexOf(word) == 0) {
46946 return comparedTo;
46947 }
563e401a
IC
46948 var distance = Levenshtein.get(word, comparedTo);
46949 if (distance < minDistance) {
46950 closestWord = comparedTo;
46951 minDistance = distance;
46952 }
46953 }
46954 return closestWord;
46955 }
46956
ebd8d4e8
IC
46957 function hidePending() {
46958 DOM.feedback
46959 .text("")
46960 .hide();
46961 }
46962
ab78acc6
IC
46963 function populateNetworkSelect() {
46964 for (var i=0; i<networks.length; i++) {
46965 var network = networks[i];
46966 var option = $("<option>");
46967 option.attr("value", i);
46968 option.text(network.name);
b3cc3930
IC
46969 if (network.name == "BTC - Bitcoin") {
46970 option.prop("selected", true);
46971 }
ab78acc6
IC
46972 DOM.phraseNetwork.append(option);
46973 }
46974 }
46975
56530adc
IC
46976 function populateClientSelect() {
46977 for (var i=0; i<clients.length; i++) {
46978 var client = clients[i];
46979 var option = $("<option>");
46980 option.attr("value", i);
46981 option.text(client.name);
46982 DOM.bip32Client.append(option);
46983 }
46984 }
46985
0515eeec
IC
46986 function getLanguage() {
46987 var defaultLanguage = "english";
46988 // Try to get from existing phrase
46989 var language = getLanguageFromPhrase();
46990 // Try to get from url if not from phrase
46991 if (language.length == 0) {
46992 language = getLanguageFromUrl();
46993 }
46994 // Default to English if no other option
46995 if (language.length == 0) {
46996 language = defaultLanguage;
46997 }
46998 return language;
46999 }
47000
47001 function getLanguageFromPhrase(phrase) {
47002 // Check if how many words from existing phrase match a language.
47003 var language = "";
47004 if (!phrase) {
47005 phrase = DOM.phrase.val();
47006 }
47007 if (phrase.length > 0) {
47008 var words = phraseToWordArray(phrase);
47009 var languageMatches = {};
47010 for (l in WORDLISTS) {
47011 // Track how many words match in this language
47012 languageMatches[l] = 0;
47013 for (var i=0; i<words.length; i++) {
47014 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
47015 if (wordInLanguage) {
47016 languageMatches[l]++;
47017 }
47018 }
47019 // Find languages with most word matches.
47020 // This is made difficult due to commonalities between Chinese
47021 // simplified vs traditional.
47022 var mostMatches = 0;
47023 var mostMatchedLanguages = [];
47024 for (var l in languageMatches) {
47025 var numMatches = languageMatches[l];
47026 if (numMatches > mostMatches) {
47027 mostMatches = numMatches;
47028 mostMatchedLanguages = [l];
47029 }
47030 else if (numMatches == mostMatches) {
47031 mostMatchedLanguages.push(l);
47032 }
47033 }
47034 }
47035 if (mostMatchedLanguages.length > 0) {
47036 // Use first language and warn if multiple detected
47037 language = mostMatchedLanguages[0];
47038 if (mostMatchedLanguages.length > 1) {
47039 console.warn("Multiple possible languages");
47040 console.warn(mostMatchedLanguages);
47041 }
47042 }
47043 }
47044 return language;
47045 }
47046
47047 function getLanguageFromUrl() {
c6624d51
IC
47048 for (var language in WORDLISTS) {
47049 if (window.location.hash.indexOf(language) > -1) {
47050 return language;
47051 }
47052 }
47053 return "";
0515eeec
IC
47054 }
47055
47056 function setMnemonicLanguage() {
47057 var language = getLanguage();
47058 // Load the bip39 mnemonic generator for this language if required
47059 if (!(language in mnemonics)) {
47060 mnemonics[language] = new Mnemonic(language);
47061 }
47062 mnemonic = mnemonics[language];
47063 }
47064
47065 function convertPhraseToNewLanguage() {
47066 var oldLanguage = getLanguageFromPhrase();
47067 var newLanguage = getLanguageFromUrl();
47068 var oldPhrase = DOM.phrase.val();
47069 var oldWords = phraseToWordArray(oldPhrase);
47070 var newWords = [];
47071 for (var i=0; i<oldWords.length; i++) {
47072 var oldWord = oldWords[i];
47073 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
47074 var newWord = WORDLISTS[newLanguage][index];
47075 newWords.push(newWord);
47076 }
47077 newPhrase = wordArrayToPhrase(newWords);
47078 return newPhrase;
47079 }
47080
47081 // TODO look at jsbip39 - mnemonic.splitWords
47082 function phraseToWordArray(phrase) {
47083 var words = phrase.split(/\s/g);
47084 var noBlanks = [];
47085 for (var i=0; i<words.length; i++) {
47086 var word = words[i];
47087 if (word.length > 0) {
47088 noBlanks.push(word);
47089 }
47090 }
47091 return noBlanks;
47092 }
47093
47094 // TODO look at jsbip39 - mnemonic.joinWords
47095 function wordArrayToPhrase(words) {
47096 var phrase = words.join(" ");
47097 var language = getLanguageFromPhrase(phrase);
47098 if (language == "japanese") {
47099 phrase = words.join("\u3000");
47100 }
47101 return phrase;
47102 }
47103
c6624d51
IC
47104 function isUsingOwnEntropy() {
47105 return DOM.useEntropy.prop("checked");
47106 }
47107
47108 function setMnemonicFromEntropy() {
2a6dd137 47109 clearEntropyFeedback();
18abe53b 47110 // Get entropy value
c6624d51 47111 var entropyStr = DOM.entropy.val();
18abe53b 47112 // Work out minimum base for entropy
c6624d51 47113 var entropy = Entropy.fromString(entropyStr);
18abe53b 47114 if (entropy.binaryStr.length == 0) {
c6624d51
IC
47115 return;
47116 }
47117 // Show entropy details
18abe53b
IC
47118 showEntropyFeedback(entropy);
47119 // Use entropy hash if not using raw entropy
47120 var bits = entropy.binaryStr;
47121 var mnemonicLength = DOM.entropyMnemonicLength.val();
47122 if (mnemonicLength != "raw") {
47123 // Get bits by hashing entropy with SHA256
47124 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
47125 var hex = sjcl.codec.hex.fromBits(hash);
47126 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 47127 while (bits.length % 256 != 0) {
18abe53b
IC
47128 bits = "0" + bits;
47129 }
47130 // Truncate hash to suit number of words
47131 mnemonicLength = parseInt(mnemonicLength);
47132 var numberOfBits = 32 * mnemonicLength / 3;
47133 bits = bits.substring(0, numberOfBits);
c6624d51 47134 }
c6624d51 47135 // Discard trailing entropy
18abe53b 47136 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
47137 var start = bits.length - bitsToUse;
47138 var binaryStr = bits.substring(start);
c6624d51
IC
47139 // Convert entropy string to numeric array
47140 var entropyArr = [];
18abe53b
IC
47141 for (var i=0; i<binaryStr.length / 8; i++) {
47142 var byteAsBits = binaryStr.substring(i*8, i*8+8);
47143 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
47144 entropyArr.push(entropyByte)
47145 }
47146 // Convert entropy array to mnemonic
47147 var phrase = mnemonic.toMnemonic(entropyArr);
47148 // Set the mnemonic in the UI
47149 DOM.phrase.val(phrase);
47150 }
47151
2a6dd137 47152 function clearEntropyFeedback() {
f1e5d484 47153 DOM.entropyCrackTime.text("...");
18abe53b 47154 DOM.entropyType.text("");
2a6dd137
IC
47155 DOM.entropyWordCount.text("0");
47156 DOM.entropyEventCount.text("0");
47157 DOM.entropyBitsPerEvent.text("0");
47158 DOM.entropyBits.text("0");
47159 DOM.entropyFiltered.html("&nbsp;");
47160 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
47161 }
47162
18abe53b 47163 function showEntropyFeedback(entropy) {
9e97eb76 47164 var numberOfBits = entropy.binaryStr.length;
f1e5d484 47165 var timeToCrack = "unknown";
95f04905
IC
47166 try {
47167 var z = zxcvbn(entropy.base.parts.join(""));
f1e5d484
IC
47168 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
47169 if (z.feedback.warning != "") {
47170 timeToCrack = timeToCrack + " - " + z.feedback.warning;
47171 };
18abe53b 47172 }
95f04905 47173 catch (e) {
95f04905
IC
47174 console.log("Error detecting entropy strength with zxcvbn:");
47175 console.log(e);
47176 }
95f04905 47177 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 47178 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 47179 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 47180 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 47181 DOM.entropyType.text(entropyTypeStr);
f1e5d484 47182 DOM.entropyCrackTime.text(timeToCrack);
18abe53b 47183 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 47184 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
47185 DOM.entropyWordCount.text(wordCount);
47186 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 47187 DOM.entropyBitsPerEvent.text(bitsPerEvent);
95f04905
IC
47188 }
47189
47190 function getEntropyTypeStr(entropy) {
47191 var typeStr = entropy.base.str;
47192 // Add some detail if these are cards
47193 if (entropy.base.asInt == 52) {
47194 var cardDetail = []; // array of message strings
47195 // Detect duplicates
47196 var dupes = [];
47197 var dupeTracker = {};
47198 for (var i=0; i<entropy.base.parts.length; i++) {
47199 var card = entropy.base.parts[i];
9e97eb76
IC
47200 var cardUpper = card.toUpperCase();
47201 if (cardUpper in dupeTracker) {
95f04905
IC
47202 dupes.push(card);
47203 }
9e97eb76 47204 dupeTracker[cardUpper] = true;
95f04905
IC
47205 }
47206 if (dupes.length > 0) {
47207 var dupeWord = "duplicates";
47208 if (dupes.length == 1) {
47209 dupeWord = "duplicate";
47210 }
47211 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
47212 if (dupes.length > 3) {
47213 msg += "...";
47214 }
47215 cardDetail.push(msg);
47216 }
47217 // Detect full deck
47218 var uniqueCards = [];
47219 for (var uniqueCard in dupeTracker) {
47220 uniqueCards.push(uniqueCard);
47221 }
47222 if (uniqueCards.length == 52) {
47223 cardDetail.unshift("full deck");
47224 }
9e97eb76
IC
47225 // Detect missing cards
47226 var values = "A23456789TJQK";
47227 var suits = "CDHS";
47228 var missingCards = [];
47229 for (var i=0; i<suits.length; i++) {
47230 for (var j=0; j<values.length; j++) {
47231 var card = values[j] + suits[i];
47232 if (!(card in dupeTracker)) {
47233 missingCards.push(card);
47234 }
47235 }
47236 }
47237 // Display missing cards if six or less, ie clearly going for full deck
47238 if (missingCards.length > 0 && missingCards.length <= 6) {
47239 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
47240 if (missingCards.length > 3) {
47241 msg += "...";
47242 }
47243 cardDetail.push(msg);
47244 }
95f04905
IC
47245 // Add card details to typeStr
47246 if (cardDetail.length > 0) {
47247 typeStr += " (" + cardDetail.join(", ") + ")";
47248 }
47249 }
47250 return typeStr;
47251 }
47252
e00964cc
IC
47253 function setQrEvents(els) {
47254 els.on("mouseenter", createQr);
47255 els.on("mouseleave", destroyQr);
47256 els.on("click", toggleQr);
47257 }
47258
47259 function createQr(e) {
47260 var content = e.target.textContent || e.target.value;
47261 if (content) {
47262 var size = 130;
47263 DOM.qrImage.qrcode({width: size, height: size, text: content});
47264 if (!showQr) {
52da415f
IC
47265 DOM.qrHider.addClass("hidden");
47266 }
47267 else {
47268 DOM.qrHider.removeClass("hidden");
e00964cc
IC
47269 }
47270 DOM.qrContainer.removeClass("hidden");
47271 }
47272 }
47273
47274 function destroyQr() {
47275 DOM.qrImage.text("");
47276 DOM.qrContainer.addClass("hidden");
47277 }
47278
47279 function toggleQr() {
47280 showQr = !showQr;
52da415f 47281 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
47282 DOM.qrHint.toggleClass("hidden");
47283 }
47284
20083ab9
IC
47285 function bip44TabSelected() {
47286 return DOM.bip44tab.hasClass("active");
47287 }
47288
47289 function bip32TabSelected() {
47290 return DOM.bip32tab.hasClass("active");
47291 }
47292
0a8d06d0
IC
47293 function useP2wpkhNestedInP2sh() {
47294 return DOM.useP2wpkhNestedInP2sh.prop("checked");
47295 }
47296
9987f0c1 47297 function networkHasBip49() {
0a8d06d0 47298 return networks[DOM.network.val()].p2wpkhNestedInP2shAvailable;
9987f0c1
IC
47299 }
47300
47301 function bip49TabSelected() {
47302 return DOM.bip49tab.hasClass("active");
47303 }
47304
47305 function setHdCoin(coinValue) {
47306 DOM.bip44coin.val(coinValue);
47307 DOM.bip49coin.val(coinValue);
47308 }
47309
0a8d06d0 47310 function showP2wpkhNestedInP2shAvailable() {
9987f0c1
IC
47311 DOM.bip49unavailable.addClass("hidden");
47312 DOM.bip49available.removeClass("hidden");
0a8d06d0 47313 DOM.useP2wpkhNestedInP2sh.prop("disabled", false);
9987f0c1
IC
47314 }
47315
0a8d06d0 47316 function showP2wpkhNestedInP2shUnavailable() {
9987f0c1
IC
47317 DOM.bip49available.addClass("hidden");
47318 DOM.bip49unavailable.removeClass("hidden");
0a8d06d0
IC
47319 DOM.useP2wpkhNestedInP2sh.prop("disabled", true);
47320 DOM.useP2wpkhNestedInP2sh.prop("checked", false);
9987f0c1
IC
47321 }
47322
ab78acc6 47323 var networks = [
b3cc3930
IC
47324 {
47325 name: "BCH - Bitcoin Cash",
0a8d06d0 47326 p2wpkhNestedInP2shAvailable: false,
b3cc3930
IC
47327 onSelect: function() {
47328 network = bitcoinjs.bitcoin.networks.bitcoin;
47329 setHdCoin(145);
47330 },
47331 },
ab78acc6 47332 {
534481b6 47333 name: "BTC - Bitcoin",
0a8d06d0 47334 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47335 onSelect: function() {
9987f0c1
IC
47336 network = bitcoinjs.bitcoin.networks.bitcoin;
47337 setHdCoin(0);
ab78acc6
IC
47338 },
47339 },
47340 {
534481b6 47341 name: "BTC - Bitcoin Testnet",
0a8d06d0 47342 p2wpkhNestedInP2shAvailable: true,
ab78acc6 47343 onSelect: function() {
9987f0c1
IC
47344 network = bitcoinjs.bitcoin.networks.testnet;
47345 setHdCoin(1);
ab78acc6
IC
47346 },
47347 },
47348 {
534481b6 47349 name: "CLAM - Clams",
0a8d06d0 47350 p2wpkhNestedInP2shAvailable: false,
ab78acc6 47351 onSelect: function() {
9987f0c1
IC
47352 network = bitcoinjs.bitcoin.networks.clam;
47353 setHdCoin(23);
ab78acc6
IC
47354 },
47355 },
0921f370 47356 {
47357 name: "CRW - Crown",
0a8d06d0 47358 p2wpkhNestedInP2shAvailable: false,
0921f370 47359 onSelect: function() {
9987f0c1
IC
47360 network = bitcoinjs.bitcoin.networks.crown;
47361 setHdCoin(72);
0921f370 47362 },
47363 },
ab78acc6 47364 {
534481b6 47365 name: "DASH - Dash",
0a8d06d0 47366 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47367 onSelect: function() {
9987f0c1
IC
47368 network = bitcoinjs.bitcoin.networks.dash;
47369 setHdCoin(5);
d5dc92fd
IC
47370 },
47371 },
c0386f3b 47372 {
534481b6 47373 name: "DASH - Dash Testnet",
0a8d06d0 47374 p2wpkhNestedInP2shAvailable: false,
c0386f3b 47375 onSelect: function() {
9987f0c1
IC
47376 network = bitcoinjs.bitcoin.networks.dashtn;
47377 setHdCoin(1);
c0386f3b
KR
47378 },
47379 },
d5dc92fd 47380 {
534481b6 47381 name: "DOGE - Dogecoin",
0a8d06d0 47382 p2wpkhNestedInP2shAvailable: false,
534481b6 47383 onSelect: function() {
9987f0c1
IC
47384 network = bitcoinjs.bitcoin.networks.dogecoin;
47385 setHdCoin(3);
534481b6 47386 },
47387 },
47388 {
47389 name: "ETH - Ethereum",
0a8d06d0 47390 p2wpkhNestedInP2shAvailable: false,
d5dc92fd 47391 onSelect: function() {
9987f0c1
IC
47392 network = bitcoinjs.bitcoin.networks.bitcoin;
47393 setHdCoin(60);
d5dc92fd
IC
47394 },
47395 },
f88fab20 47396 {
534481b6 47397 name: "GAME - GameCredits",
0a8d06d0 47398 p2wpkhNestedInP2shAvailable: false,
f88fab20 47399 onSelect: function() {
9987f0c1
IC
47400 network = bitcoinjs.bitcoin.networks.game;
47401 setHdCoin(101);
f88fab20 47402 },
47403 },
a3baa26e 47404 {
534481b6 47405 name: "JBS - Jumbucks",
0a8d06d0 47406 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47407 onSelect: function() {
9987f0c1
IC
47408 network = bitcoinjs.bitcoin.networks.jumbucks;
47409 setHdCoin(26);
a3baa26e
IC
47410 },
47411 },
47412 {
534481b6 47413 name: "LTC - Litecoin",
0a8d06d0 47414 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47415 onSelect: function() {
9987f0c1
IC
47416 network = bitcoinjs.bitcoin.networks.litecoin;
47417 setHdCoin(2);
8d18f379 47418 DOM.litecoinLtubContainer.removeClass("hidden");
a3baa26e
IC
47419 },
47420 },
56ad9601
JS
47421 {
47422 name: "MAZA - Maza",
0a8d06d0 47423 p2wpkhNestedInP2shAvailable: false,
56ad9601
JS
47424 onSelect: function() {
47425 network = bitcoinjs.bitcoin.networks.maza;
47426 setHdCoin(13);
47427 },
47428 },
47429
a3baa26e 47430 {
534481b6 47431 name: "NMC - Namecoin",
0a8d06d0 47432 p2wpkhNestedInP2shAvailable: false,
a3baa26e 47433 onSelect: function() {
9987f0c1
IC
47434 network = bitcoinjs.bitcoin.networks.namecoin;
47435 setHdCoin(7);
a3baa26e
IC
47436 },
47437 },
f128bd58
IC
47438 {
47439 name: "PIVX - PIVX",
0a8d06d0 47440 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47441 onSelect: function() {
47442 network = bitcoinjs.bitcoin.networks.pivx;
47443 setHdCoin(119);
47444 },
47445 },
47446 {
47447 name: "PIVX - PIVX Testnet",
0a8d06d0 47448 p2wpkhNestedInP2shAvailable: false,
f128bd58
IC
47449 onSelect: function() {
47450 network = bitcoinjs.bitcoin.networks.pivxtestnet;
47451 setHdCoin(1);
47452 },
47453 },
5c434a8a 47454 {
534481b6 47455 name: "PPC - Peercoin",
0a8d06d0 47456 p2wpkhNestedInP2shAvailable: false,
5c434a8a 47457 onSelect: function() {
9987f0c1
IC
47458 network = bitcoinjs.bitcoin.networks.peercoin;
47459 setHdCoin(6);
5c434a8a
CM
47460 },
47461 },
8a1f452d 47462 {
534481b6 47463 name: "SDC - ShadowCash",
0a8d06d0 47464 p2wpkhNestedInP2shAvailable: false,
5493efc3 47465 onSelect: function() {
9987f0c1
IC
47466 network = bitcoinjs.bitcoin.networks.shadow;
47467 setHdCoin(35);
5493efc3 47468 },
47469 },
07ac4350 47470 {
534481b6 47471 name: "SDC - ShadowCash Testnet",
0a8d06d0 47472 p2wpkhNestedInP2shAvailable: false,
07ac4350 47473 onSelect: function() {
9987f0c1
IC
47474 network = bitcoinjs.bitcoin.networks.shadowtn;
47475 setHdCoin(1);
07ac4350 47476 },
47477 },
01e81e53 47478 {
534481b6 47479 name: "SLM - Slimcoin",
0a8d06d0 47480 p2wpkhNestedInP2shAvailable: false,
01e81e53 47481 onSelect: function() {
9987f0c1
IC
47482 network = bitcoinjs.bitcoin.networks.slimcoin;
47483 setHdCoin(63);
01e81e53
GH
47484 },
47485 },
47486 {
534481b6 47487 name: "SLM - Slimcoin Testnet",
0a8d06d0 47488 p2wpkhNestedInP2shAvailable: false,
01e81e53 47489 onSelect: function() {
9987f0c1
IC
47490 network = bitcoinjs.bitcoin.networks.slimcointn;
47491 setHdCoin(111);
01e81e53
GH
47492 },
47493 },
07ac4350 47494 {
534481b6 47495 name: "VIA - Viacoin",
0a8d06d0 47496 p2wpkhNestedInP2shAvailable: false,
07ac4350 47497 onSelect: function() {
9987f0c1
IC
47498 network = bitcoinjs.bitcoin.networks.viacoin;
47499 setHdCoin(14);
07ac4350 47500 },
47501 },
8b095871 47502 {
534481b6 47503 name: "VIA - Viacoin Testnet",
0a8d06d0 47504 p2wpkhNestedInP2shAvailable: false,
8b095871 47505 onSelect: function() {
9987f0c1
IC
47506 network = bitcoinjs.bitcoin.networks.viacointestnet;
47507 setHdCoin(1);
8b095871
IC
47508 },
47509 },
b3cc3930
IC
47510 {
47511 name: "XMY - Myriadcoin",
0a8d06d0 47512 p2wpkhNestedInP2shAvailable: false,
b3cc3930
IC
47513 onSelect: function() {
47514 network = bitcoinjs.bitcoin.networks.myriadcoin;
47515 setHdCoin(90);
47516 },
47517 },
534481b6 47518 {
47519 name: "XRP - Ripple",
0a8d06d0 47520 p2wpkhNestedInP2shAvailable: false,
534481b6 47521 onSelect: function() {
9987f0c1
IC
47522 network = bitcoinjs.bitcoin.networks.bitcoin;
47523 setHdCoin(144);
534481b6 47524 },
47525 }
ab78acc6
IC
47526 ]
47527
56530adc
IC
47528 var clients = [
47529 {
47530 name: "Bitcoin Core",
47531 onSelect: function() {
47532 DOM.bip32path.val("m/0'/0'");
47533 DOM.hardenedAddresses.prop('checked', true);
47534 },
47535 },
47536 {
47537 name: "blockchain.info",
47538 onSelect: function() {
47539 DOM.bip32path.val("m/44'/0'/0'");
47540 DOM.hardenedAddresses.prop('checked', false);
47541 },
47542 },
47543 {
47544 name: "MultiBit HD",
47545 onSelect: function() {
47546 DOM.bip32path.val("m/0'/0");
47547 DOM.hardenedAddresses.prop('checked', false);
47548 },
47549 }
47550 ]
47551
ebd8d4e8
IC
47552 init();
47553
47554})();
dc55c6b0 47555</script>
ebd8d4e8
IC
47556 </body>
47557</html>