]> git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/BIP39.git/blame - bip39-standalone.html
Merge pull request #81 from mikeyb/naming
[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>
f1e5d484 121 <p class="version">v0.1.1</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>
273 </form>
274 </div>
275 </div>
3af2954a 276
ab78acc6 277 <hr>
3af2954a 278
ab78acc6
IC
279 <div class="row">
280 <div class="col-md-12">
281 <h2>Derivation Path</h2>
282 <ul class="derivation-type nav nav-tabs" role="tablist">
d5dc92fd 283 <li id="bip44-tab" class="active">
ab78acc6
IC
284 <a href="#bip44" role="tab" data-toggle="tab">BIP44</a>
285 </li>
286 <li id="bip32-tab">
287 <a href="#bip32" role="tab" data-toggle="tab">BIP32</a>
288 </li>
289 </ul>
290 <div class="derivation-type tab-content">
d5dc92fd 291 <div id="bip44" class="tab-pane active">
ab78acc6
IC
292 <form class="form-horizontal" role="form">
293 <br>
294 <div class="col-sm-2"></div>
295 <div class="col-sm-10">
ea87f1d3
IC
296 <p data-translate-html>
297 For more info see the
298 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">BIP44 spec</a>.
299 </p>
ab78acc6
IC
300 </div>
301 <div class="form-group">
302 <label for="purpose" class="col-sm-2 control-label">
ea87f1d3 303 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#purpose" target="_blank" data-translate>Purpose</a>
ab78acc6
IC
304 </label>
305 <div class="col-sm-10">
306 <input id="purpose" type="text" class="purpose form-control" value="44">
307 </div>
308 </div>
309 <div class="form-group">
310 <label for="coin" class="col-sm-2 control-label">
ea87f1d3 311 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#registered-coin-types" target="_blank" data-translate>Coin</a>
ab78acc6
IC
312 </label>
313 <div class="col-sm-10">
314 <input id="coin" type="text" class="coin form-control" value="0">
315 </div>
316 </div>
317 <div class="form-group">
318 <label for="account" class="col-sm-2 control-label">
ea87f1d3 319 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#account" target="_blank" data-translate>Account</a>
ab78acc6
IC
320 </label>
321 <div class="col-sm-10">
322 <input id="account" type="text" class="account form-control" value="0">
323 </div>
324 </div>
325 <div class="form-group">
326 <label for="change" class="col-sm-2 control-label">
ea87f1d3 327 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki#change" target="_blank" data-translate>External / Internal</a>
ab78acc6
IC
328 </label>
329 <div class="col-sm-10">
330 <input id="change" type="text" class="change form-control" value="0">
331 </div>
332 </div>
20083ab9
IC
333 <div class="form-group">
334 <label class="col-sm-2 control-label">
335 </label>
336 <div class="col-sm-10">
f3bfd2a5 337 <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
338 </div>
339 </div>
340 <div class="form-group">
341 <label for="account-xprv" class="col-sm-2 control-label">
342 <span data-translate>Account Extended Private Key</span>
343 </label>
344 <div class="col-sm-10">
345 <textarea id="account-xprv" type="text" class="account-xprv form-control" readonly data-show-qr></textarea>
346 </div>
347 </div>
348 <div class="form-group">
349 <label for="account-xpub" class="col-sm-2 control-label">
350 <span data-translate>Account Extended Public Key</span>
351 </label>
352 <div class="col-sm-10">
353 <textarea id="account-xpub" type="text" class="account-xpub form-control" readonly data-show-qr></textarea>
354 </div>
355 </div>
356 <div class="form-group">
357 <label class="col-sm-2 control-label">
358 </label>
359 <div class="col-sm-10">
360 <p data-translate>The BIP32 derivation path and extended keys are the basis for the derived addresses.</p>
361 </div>
362 </div>
ab78acc6 363 <div class="form-group">
ea87f1d3 364 <label for="bip44-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
365 <div class="col-sm-10">
366 <input id="bip44-path" type="text" class="path form-control" value="m/44'/0'/0'/0" readonly="readonly">
367 </div>
368 </div>
369 </form>
370 </div>
371 <div id="bip32" class="tab-pane">
372 <form class="form-horizontal" role="form">
373 <br>
374 <div class="col-sm-2"></div>
375 <div class="col-sm-10">
ea87f1d3
IC
376 <p data-translate>
377 For more info see the
378 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">BIP32 spec</a>
379 </p>
ab78acc6 380 </div>
56530adc
IC
381 <div class="form-group">
382 <label for="bip32-client" class="col-sm-2 control-label" data-translate>Client</label>
383 <div class="col-sm-10">
384 <select id="bip32-client" class="client form-control">
385 <option value="custom">Custom derivation path</option>
386 <!-- populated by javascript -->
387 </select>
388 </div>
389 </div>
ab78acc6 390 <div class="form-group">
ea87f1d3 391 <label for="bip32-path" class="col-sm-2 control-label" data-translate>BIP32 Derivation Path</label>
ab78acc6
IC
392 <div class="col-sm-10">
393 <input id="bip32-path" type="text" class="path form-control" value="m/0">
394 </div>
395 </div>
1975bfbc
IC
396 <div class="form-group">
397 <div class="col-sm-2"></div>
398 <label class="col-sm-10">
399 <input class="hardened-addresses" type="checkbox">
ea87f1d3 400 <span data-translate>Use hardened addresses</span>
1975bfbc
IC
401 </label>
402 </div>
1975bfbc 403 <div class="form-group">
ea87f1d3 404 <label for="core-path" class="col-sm-2 control-label" data-translate>Bitcoin Core</label>
1975bfbc 405 <div class="col-sm-10">
ea87f1d3 406 <p class="form-control no-border" data-translate-html>
1975bfbc 407 Use path <code>m/0'/0'</code> with hardened addresses.
c866242d 408 </p>
ea87f1d3
IC
409 <p class="form-control no-border" data-translate-html>
410 For more info see the
411 <a href="https://github.com/bitcoin/bitcoin/pull/8035" target="_blank">Bitcoin Core BIP32 implementation</a>
1975bfbc
IC
412 </p>
413 </div>
414 </div>
56530adc
IC
415 <div class="form-group">
416 <label for="core-path" class="col-sm-2 control-label" data-translate>Multibit</label>
417 <div class="col-sm-10">
418 <p class="form-control no-border">
419 <span data-translate-html>Use path <code>m/0'/0</code>.</span>
420 </p>
421 <p class="form-control no-border">
422 <span data-translate>For more info see</span>
423 <a href="https://multibit.org/" target="_blank">MultiBit HD</a>
424 </p>
425 </div>
426 </div>
aa51da11 427 <div class="form-group">
ea87f1d3 428 <label class="col-sm-2 control-label" data-translate>Block Explorers</label>
aa51da11
IC
429 <div class="col-sm-10">
430 <p class="form-control no-border">
ea87f1d3
IC
431 <span data-translate-html>Use path <code>m/44'/0'/0'</code>.</span>
432 <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
433 </p>
434 <p class="form-control no-border">
ea87f1d3
IC
435 <span data-translate>Can be used with</span>:
436 <a href="https://blockchain.info/" target="_blank">blockchain.info</a>
aa51da11
IC
437 </p>
438 </div>
439 </div>
ab78acc6
IC
440 </form>
441 </div>
442 </div>
443 <form class="form-horizontal" role="form">
444 <div class="form-group">
20083ab9 445 <label for="extended-priv-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Private Key</label>
ab78acc6 446 <div class="col-sm-10">
e00964cc 447 <textarea id="extended-priv-key" class="extended-priv-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
448 </div>
449 </div>
450 <div class="form-group">
20083ab9 451 <label for="extended-pub-key" class="col-sm-2 control-label" data-translate>BIP32 Extended Public Key</label>
ab78acc6 452 <div class="col-sm-10">
e00964cc 453 <textarea id="extended-pub-key" class="extended-pub-key form-control" readonly="readonly" data-show-qr></textarea>
ab78acc6
IC
454 </div>
455 </div>
456 </form>
457 </div>
458 </div>
3af2954a 459
ab78acc6 460 <hr>
3af2954a 461
ab78acc6
IC
462 <div class="row">
463 <div class="col-md-12">
464 <h2>Derived Addresses</h2>
ea87f1d3 465 <p data-translate>Note these addreses are derived from the BIP32 Extended Key</p>
ab78acc6
IC
466 <table class="table table-striped">
467 <thead>
468 <th>
469 <div class="input-group">
ea87f1d3
IC
470 <span data-translate>Path</span>&nbsp;&nbsp;
471 <button class="index-toggle" data-translate>Toggle</button>
ab78acc6
IC
472 </div>
473 </th>
474 <th>
475 <div class="input-group">
ea87f1d3
IC
476 <span data-translate>Address</span>&nbsp;&nbsp;
477 <button class="address-toggle" data-translate>Toggle</button>
ab78acc6
IC
478 </div>
479 </th>
1b12b2f5
IC
480 <th>
481 <div class="input-group">
ea87f1d3
IC
482 <span data-translate>Public Key</span>&nbsp;&nbsp;
483 <button class="public-key-toggle" data-translate>Toggle</button>
1b12b2f5
IC
484 </div>
485 </th>
ab78acc6
IC
486 <th>
487 <div class="input-group">
ea87f1d3
IC
488 <span data-translate>Private Key</span>&nbsp;&nbsp;
489 <button class="private-key-toggle" data-translate>Toggle</button>
ab78acc6
IC
490 </div>
491 </th>
492 </thead>
d737abf6 493 <tbody class="addresses monospace">
c866242d
IC
494 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
495 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
496 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
497 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
498 <tr><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td><td>&nbsp;</td></tr>
ab78acc6
IC
499 </tbody>
500 </table>
501 </div>
502 </div>
ea87f1d3 503 <span data-translate>Show more rows</span>:
ab78acc6 504 <input type="number" class="rows-to-add" value="20">
ea87f1d3 505 <button class="more" data-translate>Show</button>
3af2954a 506
ab78acc6 507 <hr>
3af2954a 508
ab78acc6
IC
509 <div class="row">
510 <div class="col-md-12">
ea87f1d3
IC
511 <h2 data-translate>More info</h2>
512 <h3>BIP39 <span class="small" data-translate>Mnemonic code for generating deterministic keys</span></h3>
513 <p data-translate-html>
ab78acc6
IC
514 Read more at the
515 <a href="https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki">official BIP39 spec</a>
516 </p>
ea87f1d3
IC
517 <h3>BIP32 <span class="small" data-translate>Hierarchical Deterministic Wallets</span></h3>
518 <p data-translate-html>
ab78acc6
IC
519 Read more at the
520 <a href="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki" target="_blank">official BIP32 spec</a>
ea87f1d3
IC
521 </p>
522 <p data-translate-html>
523 See the demo at
ab78acc6
IC
524 <a href="http://bip32.org/" target="_blank">bip32.org</a>
525 </p>
ea87f1d3
IC
526 <h3>BIP44 <span class="small" data-translate>Multi-Account Hierarchy for Deterministic Wallets</span></h3>
527 <p data-translate-html>
ab78acc6
IC
528 Read more at the
529 <a href="https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki" target="_blank">official BIP44 spec</a>
530 </p>
ea87f1d3 531 <h3 data-translate>Private Keys</h3>
ab78acc6 532 <p>
ea87f1d3
IC
533 <span data-translate-html>
534 Use private keys at
535 <a href="https://web.archive.org/web/20150707020924/https://brainwallet.org/" target="_blank">brainwallet.org</a>.
536 </span>
537 <span data-translate>Be careful - it can be easy to make mistakes if you don't know what you're doing.</span>
ab78acc6 538 </p>
ea87f1d3 539 <h3 id="entropy-notes" data-translate>Entropy</h3>
c6624d51 540 <p>
ea87f1d3
IC
541 <span data-translate-html>
542 Entropy values must be sourced from a
543 <a href="https://en.wikipedia.org/wiki/Random_number_generation" target="_blank">strong source of randomness</a>.
544 </span>
545 <span data-translate>This means flipping a fair coin, rolling a fair dice, noise measurements etc.</span>
546 <span data-translate-html>
547 Do <strong>NOT</strong> use phrases from books, lyrics from songs, your birthday or steet address,
548 keyboard mashing, or anything you <i>think</i> is random, because chances are overwhelming it isn't
549 random enough for the needs of this tool.
550 </span>
c6624d51 551 </p>
434caecd
IC
552 <p>
553 <strong><span data-translate>Do not store entropy.</span></strong>
554 </p>
555 <p>
556 <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>
557 <span data-translate>Instead of storing entropy, store the mnemonic generated from the entropy.</span>
558 <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>
559 </p>
c6624d51 560 <p>
ea87f1d3
IC
561 <span data-translate-html>
562 The random mnemonic generator on this page uses a
563 <a href="https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues" target="_blank">cryptographically secure random number generator</a>.
564 </span>
565 <span data-translate>The built in random generator can generally be trusted more than your own intuition about randomness.</span>
566 <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>
567 <span data-translate>In that case you might choose to use your own source of entropy.</span>
c6624d51
IC
568 </p>
569 <p>
ea87f1d3 570 <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 571 </p>
52da415f
IC
572 <h3 data-translate>License</h3>
573 <p>
574 <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.
575 </span>
576 </p>
577 <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
578 </div>
579 </div>
3af2954a 580
ab78acc6 581 <hr>
3af2954a 582
ab78acc6
IC
583 <div class="row">
584 <div class="col-md-12">
3af2954a 585
ea87f1d3 586 <h2 data-translate>Offline Usage</h2>
3af2954a 587
ea87f1d3 588 <p data-translate>
ab78acc6
IC
589 You can use this tool without having to be online.
590 </p>
ea87f1d3 591 <p data-translate>
ab78acc6
IC
592 In your browser, select file save-as, and save this page
593 as a file.
594 </p>
ea87f1d3 595 <p data-translate>
ab78acc6
IC
596 Double-click that file to open it in a browser
597 on any offline computer.
598 </p>
599 <p>
ea87f1d3
IC
600 <span data-translate>Alternatively, download the file from the repository</span>
601 -
602 <a href="https://github.com/iancoleman/bip39">https://github.com/iancoleman/bip39</a>
603 </p>
3af2954a 604
ab78acc6
IC
605 </div>
606 </div>
3af2954a 607
ab78acc6 608 <hr>
3af2954a 609
ab78acc6
IC
610 <div class="row">
611 <div class="col-md-12">
3af2954a 612
ea87f1d3 613 <h2 data-translate>This project is 100% open-source code</h2>
3af2954a 614
ab78acc6 615 <p>
ea87f1d3
IC
616 <span data-translate>Get the source code from the repository</span>
617 -
b630f83d
IC
618 <a href="https://github.com/iancoleman/bip39" target="_blank">
619 https://github.com/iancoleman/bip39
ab78acc6
IC
620 </a>
621 </p>
3af2954a 622
ea87f1d3 623 <h3 data-translate>Libraries</h3>
3af2954a 624
ab78acc6
IC
625 <p>
626 <span>BitcoinJS - </span>
627 <a href="https://github.com/bitcoinjs/bitcoinjs-lib" target="_blank">
628 https://github.com/bitcoinjs/bitcoinjs-lib
629 </a>
630 </p>
3af2954a 631
ab78acc6
IC
632 <p>
633 <span>jsBIP39 - </span>
634 <a href="https://github.com/iancoleman/jsbip39" target="_blank">
635 https://github.com/iancoleman/jsbip39
636 </a>
637 </p>
3af2954a 638
ab78acc6
IC
639 <p>
640 <span>sjcl - </span>
641 <a href="https://github.com/bitwiseshiftleft/sjcl" target="_blank">
642 https://github.com/bitwiseshiftleft/sjcl
643 </a>
644 </p>
3af2954a 645
ab78acc6
IC
646 <p>
647 <span>jQuery - </span>
648 <a href="https://jquery.com/" target="_blank">
649 https://jquery.com/
650 </a>
651 </p>
3af2954a 652
ab78acc6
IC
653 <p>
654 <span>Twitter Bootstrap - </span>
655 <a href="http://getbootstrap.com/" target="_blank">
656 http://getbootstrap.com/
657 </a>
658 </p>
3af2954a 659
ab78acc6
IC
660 </div>
661 </div>
3af2954a 662
ab78acc6 663 </div>
3af2954a 664
e00964cc 665 <div class="qr-container hidden">
52da415f
IC
666 <div class="qr-hint bg-primary hidden" data-translate>Click field to hide QR</div>
667 <div class="qr-hint bg-primary" data-translate>Click field to show QR</div>
668 <div class="qr-hider hidden">
669 <div class="qr-image"></div>
670 <div class="qr-warning bg-primary" data-translate>Caution: Scanner may keep history</div>
671 </div>
e00964cc
IC
672 </div>
673
ab78acc6
IC
674 <div class="feedback-container">
675 <div class="feedback">Loading...</div>
676 </div>
3af2954a 677
ab78acc6
IC
678 <script type="text/template" id="address-row-template">
679 <tr>
680 <td class="index"><span></span></td>
e00964cc
IC
681 <td class="address"><span data-show-qr></span></td>
682 <td class="pubkey"><span data-show-qr></span></td>
683 <td class="privkey"><span data-show-qr></span></td>
ab78acc6
IC
684 </tr>
685 </script>
8b095871
IC
686 <script>// From
687// https://raw.githubusercontent.com/inexorabletash/polyfill/a6bc6ced78160c994f76a909b6ff6bbbab3d43de/es6.js
688// Required for ethereumjs-utils.js when run in phantomjs-2.1.1
689// but is not required in any modern browsers.
690// For more information, see
691// https://www.bountysource.com/issues/38485709-error-rendering-plot-with-phantomjs
692
693//----------------------------------------------------------------------
694//
695// ECMAScript 2015 Polyfills
696//
697//----------------------------------------------------------------------
563e401a 698
8b095871
IC
699(function (global) {
700 "use strict";
701
702 // Set this to always override native implementations, for testing
703 // the polyfill in browsers with partial/full ES2015 support.
704 var OVERRIDE_NATIVE_FOR_TESTING = false;
705
706 var undefined = (void 0); // Paranoia
707
708 // Helpers
709
710 function strict(o) {
711 return o === global ? undefined : o;
712 }
713
714 function hook(o, p, f) {
715 var op = o[p];
716 console.assert(typeof op === 'function', 'Hooking a non-function');
717 o[p] = function() {
718 var o = strict(this);
719 var r = f.apply(o, arguments);
720 return r !== undefined ? r : op.apply(o, arguments);
721 };
722 }
723
724 function isSymbol(s) {
725 return (typeof s === 'symbol') || ('Symbol' in global && s instanceof global.Symbol);
726 }
727
728 function getPropertyDescriptor(target, name) {
729 var desc = Object.getOwnPropertyDescriptor(target, name);
730 var proto = Object.getPrototypeOf(target);
731 while (!desc && proto) {
732 desc = Object.getOwnPropertyDescriptor(proto, name);
733 proto = Object.getPrototypeOf(proto);
563e401a 734 }
8b095871
IC
735 return desc;
736 }
563e401a 737
8b095871
IC
738 var enqueue = (function(nativePromise, nativeSetImmediate) {
739 if (nativePromise)
740 return function(job) { nativePromise.resolve().then(function() { job(); }); };
741 if (nativeSetImmediate)
742 return function(job) { nativeSetImmediate(job); };
743 return function(job) { setTimeout(job, 0); };
744 }(global['Promise'], global['setImmediate']));
563e401a 745
8b095871
IC
746 function define(o, p, v, override) {
747 if (p in o && !override && !OVERRIDE_NATIVE_FOR_TESTING)
748 return;
749
750 if (typeof v === 'function') {
751 // Sanity check that functions are appropriately named (where possible)
752 console.assert(isSymbol(p) || !('name' in v) || v.name === p || v.name === p + '_', 'Expected function name "' + p.toString() + '", was "' + v.name + '"');
753 Object.defineProperty(o, p, {
754 value: v,
755 configurable: true,
756 enumerable: false,
757 writable: true
758 });
563e401a 759 } else {
8b095871
IC
760 Object.defineProperty(o, p, {
761 value: v,
762 configurable: false,
763 enumerable: false,
764 writable: false
765 });
563e401a 766 }
8b095871 767 }
563e401a 768
8b095871
IC
769 function set_internal(o, p, v) {
770 Object.defineProperty(o, p, {
771 value: v,
772 configurable: false,
773 enumerable: false,
774 writable: true
775 });
776 }
563e401a 777
8b095871
IC
778 // Snapshot intrinsic functions
779 var $isNaN = global.isNaN,
780 $parseInt = global.parseInt,
781 $parseFloat = global.parseFloat;
782
783 var E = Math.E,
784 LOG10E = Math.LOG10E,
785 LOG2E = Math.LOG2E,
786 abs = Math.abs,
787 ceil = Math.ceil,
788 exp = Math.exp,
789 floor = Math.floor,
790 log = Math.log,
791 max = Math.max,
792 min = Math.min,
793 pow = Math.pow,
794 random = Math.random,
795 sqrt = Math.sqrt;
796
797 var orig_match = String.prototype.match,
798 orig_replace = String.prototype.replace,
799 orig_search = String.prototype.search,
800 orig_split = String.prototype.split;
801
802 // These are used for implementing the polyfills, but not exported.
803
804 // Inspired by https://gist.github.com/1638059
805 /** @constructor */
806 function EphemeronTable() {
807 var secretKey = ObjectCreate(null);
808
809 function conceal(o) {
810 var oValueOf = o.valueOf, secrets = ObjectCreate(null);
811 Object.defineProperty(o, 'valueOf', {
812 value: (function(secretKey) {
813 return function (k) {
814 return (k === secretKey) ? secrets : oValueOf.apply(o, arguments);
815 };
816 }(secretKey)),
817 configurable: true,
818 writeable: true,
819 enumerable: false
820 });
821 return secrets;
822 }
563e401a 823
8b095871
IC
824 function reveal(o) {
825 var v = typeof o.valueOf === 'function' && o.valueOf(secretKey);
826 return v === o ? null : v;
827 }
828
829 return {
830 clear: function() {
831 secretKey = ObjectCreate(null);
832 },
833 remove: function(key) {
834 var secrets = reveal(key);
835 if (secrets && HasOwnProperty(secrets, 'value')) {
836 delete secrets.value;
837 return true;
838 }
839 return false;
840 },
841 get: function(key, defaultValue) {
842 var secrets = reveal(key);
843 return (secrets && HasOwnProperty(secrets, 'value')) ? secrets.value : defaultValue;
844 },
845 has: function(key) {
846 var secrets = reveal(key);
847 return Boolean(secrets && HasOwnProperty(secrets, 'value'));
848 },
849 set: function(key, value) {
850 var secrets = reveal(key) || conceal(key);
851 secrets.value = value;
563e401a 852 }
8b095871
IC
853 };
854 }
563e401a 855
8b095871 856 var empty = Object.create(null);
563e401a 857
8b095871
IC
858 //----------------------------------------------------------------------
859 //
860 // ECMAScript 2015
861 // http://www.ecma-international.org/ecma-262/6.0/
862 //
863 //----------------------------------------------------------------------
563e401a 864
8b095871
IC
865 // ---------------------------------------
866 // 19.4 Symbol Objects
867 // ---------------------------------------
563e401a 868
8b095871
IC
869 // NOTE: Symbols are defined here - out of spec order - since we need the
870 // properties and prototype to be populated for other polyfills.
563e401a 871
8b095871 872 // NOTE: Not secure, nor is obj[$$symbol] hidden from Object.keys()
563e401a 873
8b095871
IC
874 var symbolForKey;
875 (function() {
876 var secret = Object.create(null);
877 var symbolMap = {};
878 symbolForKey = function(k) {
879 return symbolMap[k];
880 };
563e401a 881
8b095871 882 var GlobalSymbolRegistry = [];
563e401a 883
8b095871
IC
884 function unique(bits) {
885 return Array(bits + 1).join('x').replace(/x/g, function() {
886 return random() < 0.5 ? '\u200C' : '\u200D'; // JWNJ / ZWJ
887 });
888 }
563e401a 889
8b095871
IC
890 // 19.4.1 The Symbol Constructor
891 // 19.4.1.1 Symbol ( description=undefined )
892 function Symbol(description) {
893 if (!(this instanceof Symbol)) return new Symbol(description, secret);
894 if (this instanceof Symbol && arguments[1] !== secret) throw TypeError();
563e401a 895
8b095871
IC
896 var descString = description === undefined ? undefined : String(description);
897
898 set_internal(this, '[[SymbolData]]', unique(128));
899 set_internal(this, '[[Description]]', descString);
900
901 symbolMap[this] = this;
902 return this;
903 }
904
905 if (!('Symbol' in global) || OVERRIDE_NATIVE_FOR_TESTING)
906 global.Symbol = Symbol;
907
908 // 19.4.2 Properties of the Symbol Constructor
909
910 // 19.4.2.1 Symbol.for (key)
911 define(Symbol, 'for', function for_(key) {
912 var stringKey = String(key);
913 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
914 var e = GlobalSymbolRegistry[i];
915 if (SameValue(e['[[key]]'], stringKey)) return e['[[symbol]]'];
563e401a 916 }
8b095871
IC
917 var newSymbol = Symbol(key);
918 GlobalSymbolRegistry.push({'[[key]]': stringKey, '[[symbol]]': newSymbol});
919 return newSymbol;
920 });
563e401a 921
8b095871
IC
922 // 19.4.2.2 Symbol.hasInstance
923 // 19.4.2.3 Symbol.isConcatSpreadable
563e401a 924
8b095871
IC
925 // 19.4.2.4 Symbol.iterator
926 define(global.Symbol, 'iterator', global.Symbol('Symbol.iterator'));
563e401a 927
8b095871
IC
928 // 19.4.2.5 Symbol.keyFor (sym)
929 define(Symbol, 'keyFor', function keyFor(sym) {
930 if (!(sym instanceof Symbol)) throw TypeError();
931 for (var i = 0; i < GlobalSymbolRegistry.length; ++i) {
932 var e = GlobalSymbolRegistry[i];
933 if (SameValue(e['[[symbol]]'], sym)) return e['[[key]]'];
934 }
935 return undefined;
936 });
563e401a 937
8b095871
IC
938 // 19.4.2.6 Symbol.match
939 define(global.Symbol, 'match', global.Symbol('Symbol.match'));
563e401a 940
8b095871 941 // 19.4.2.7 Symbol.prototype
563e401a 942
8b095871
IC
943 // 19.4.2.8 Symbol.replace
944 define(global.Symbol, 'replace', global.Symbol('Symbol.replace'));
563e401a 945
8b095871
IC
946 // 19.4.2.9 Symbol.search
947 define(global.Symbol, 'search', global.Symbol('Symbol.search'));
563e401a 948
8b095871 949 // 19.4.2.10 Symbol.species
563e401a 950
8b095871
IC
951 // 19.4.2.11 Symbol.search
952 define(global.Symbol, 'split', global.Symbol('Symbol.split'));
563e401a 953
8b095871 954 // 19.4.2.12 Symbol.toPrimitive
563e401a 955
8b095871
IC
956 // 19.4.2.13 Symbol.toStringTag
957 define(global.Symbol, 'toStringTag', global.Symbol('Symbol.toStringTag'));
958
959 // 19.4.2.14 Symbol.unscopables
960
961 // 19.4.3 Properties of the Symbol Prototype Object
962 // 19.4.3.1 Symbol.prototype.constructor
963
964 // 19.4.3.2 Symbol.prototype.toString ( )
965 Object.defineProperty(Symbol.prototype, 'toString', {
966 value: function toString() {
967 var s = strict(this);
968 var desc = s['[[Description]]'];
969 return 'Symbol(' + (desc === undefined ? '' : desc) + s['[[SymbolData]]'] + ')';
970 },
971 configurable: true, writeable: true, enumerable: false });
972
973 // 19.4.3.3 Symbol.prototype.valueOf ( )
974 Object.defineProperty(Symbol.prototype, 'valueOf', {
975 value: function valueOf() {
976 // To prevent automatic string conversion:
977 throw TypeError();
978
979 // Spec has approximately the following:
980 //var s = strict(this);
981 //if (Type(s) === 'symbol') return s;
982 //if (Type(s) !== 'object') throw TypeError();
983 //if (!('[[SymbolData]]' in s)) throw TypeError();
984 //return s['[[SymbolData]]'];
985 },
986 configurable: true, writeable: true, enumerable: false });
987
988 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
989 // (Done later to polyfill partial implementations)
990
991 // 19.4.4 Properties of Symbol Instances
992 }());
993
994 console.assert(typeof global.Symbol() === 'symbol' || symbolForKey(String(global.Symbol('x'))));
995
996 // Defined here so that other prototypes can reference it
997 // 25.1.2 The %IteratorPrototype% Object
998 var $IteratorPrototype$ = {};
999
1000 //----------------------------------------
1001 // 6 ECMAScript Data Types and Values
1002 //----------------------------------------
1003
1004 // 6.1 ECMAScript Language Types
1005
1006 // "Type(x)" is used as shorthand for "the type of x"...
1007 function Type(v) {
1008 switch (typeof v) {
1009 case 'undefined': return 'undefined';
1010 case 'boolean': return 'boolean';
1011 case 'number': return 'number';
1012 case 'string': return 'string';
1013 case 'symbol': return 'symbol';
1014 default:
1015 if (v === null) return 'null';
1016 if (v instanceof global.Symbol) return 'symbol';
1017 return 'object';
563e401a 1018 }
8b095871 1019 }
563e401a 1020
8b095871
IC
1021 // 6.1.5.1 Well-Known Symbols
1022 var $$iterator = global.Symbol.iterator,
1023 $$match = global.Symbol.match,
1024 $$replace = global.Symbol.replace,
1025 $$search = global.Symbol.search,
1026 $$split = global.Symbol.split,
1027 $$toStringTag = global.Symbol.toStringTag;
563e401a 1028
8b095871
IC
1029 //----------------------------------------
1030 // 7 Abstract Operations
1031 //----------------------------------------
1032
1033 //----------------------------------------
1034 // 7.1 Type Conversion
1035 //----------------------------------------
1036
1037 // 7.1.1 ToPrimitive ( input [, PreferredType] )
1038 // just use valueOf()
1039
1040 // 7.1.2 ToBoolean ( argument )
1041 // just use Boolean()
1042
1043 // 7.1.3 ToNumber ( argument )
1044 // just use Number()
1045
1046 // 7.1.4 ToInteger ( argument )
1047 function ToInteger(n) {
1048 n = Number(n);
1049 if ($isNaN(n)) return 0;
1050 if (n === 0 || n === Infinity || n === -Infinity) return n;
1051 return ((n < 0) ? -1 : 1) * floor(abs(n));
563e401a 1052 }
8b095871
IC
1053
1054 // 7.1.5 ToInt32 ( argument )
1055 function ToInt32(v) { return v >> 0; }
1056
1057 // 7.1.6 ToUint32 ( argument )
1058 function ToUint32(v) { return v >>> 0; }
1059
1060 // 7.1.7 ToInt16 ( argument )
1061 function ToInt16(v) { return (v << 16) >> 16; }
1062
1063 // 7.1.8 ToUint16 ( argument )
1064 function ToUint16(v) { return v & 0xFFFF; }
1065
1066 // 7.1.9 ToInt8 ( argument )
1067 function ToInt8(v) { return (v << 24) >> 24; }
1068
1069 // 7.1.10 ToUint8 ( argument )
1070 function ToUint8(v) { return v & 0xFF; }
1071
1072 // 7.1.11 ToUint8Clamp ( argument )
1073 function ToUint8Clamp(argument) {
1074 var number = Number(argument);
1075 if ($isNaN(number)) return 0;
1076 if (number <= 0) return 0;
1077 if (number >= 255) return 255;
1078 var f = floor(number);
1079 if ((f + 0.5) < number) return f + 1;
1080 if (number < (f + 0.5)) return f;
1081 if (f % 2) return f + 1;
1082 return f;
563e401a 1083 }
8b095871
IC
1084
1085 // 7.1.12 ToString ( argument )
1086 // just use String()
1087
1088 // 7.1.13 ToObject ( argument )
1089 function ToObject(v) {
1090 if (v === null || v === undefined) throw TypeError();
1091 return Object(v);
563e401a 1092 }
563e401a 1093
8b095871
IC
1094 // 7.1.14 ToPropertyKey ( argument )
1095 function ToPropertyKey(v) {
1096 return String(v);
1097 }
3af2954a 1098
8b095871
IC
1099 // 7.1.15 ToLength ( argument )
1100 function ToLength(v) {
1101 var len = ToInteger(v);
1102 if (len <= 0) return 0;
1103 if (len === Infinity) return 0x20000000000000 - 1; // 2^53-1
1104 return min(len, 0x20000000000000 - 1); // 2^53-1
ab78acc6 1105 }
3af2954a 1106
8b095871 1107 // 7.1.16 CanonicalNumericIndexString ( argument )
3af2954a 1108
8b095871
IC
1109 //----------------------------------------
1110 // 7.2 Testing and Comparison Operations
1111 //----------------------------------------
3af2954a 1112
8b095871
IC
1113 // 7.2.1 RequireObjectCoercible ( argument )
1114 // 7.2.2 IsArray ( argument )
3af2954a 1115
8b095871
IC
1116 // 7.2.3 IsCallable ( argument )
1117 function IsCallable(o) { return typeof o === 'function'; }
3af2954a 1118
8b095871
IC
1119 // 7.2.4 IsConstructor ( argument )
1120 function IsConstructor(o) {
1121 // Hacks for Safari 7 TypedArray XXXConstructor objects
1122 if (/Constructor/.test(Object.prototype.toString.call(o))) return true;
1123 if (/Function/.test(Object.prototype.toString.call(o))) return true;
1124 // TODO: Can this be improved on?
1125 return typeof o === 'function';
3af2954a 1126 }
8b095871
IC
1127
1128 // 7.2.5 IsExtensible (O)
1129 // 7.2.6 IsInteger ( argument )
1130
1131 // 7.2.7 IsPropertyKey ( argument )
1132 function IsPropertyKey(argument) {
1133 if (Type(argument) === 'string') return true;
1134 if (Type(argument) === 'symbol') return true;
1135 return false;
3af2954a
IC
1136 }
1137
8b095871
IC
1138 // 7.2.8 IsRegExp ( argument )
1139 // 7.2.5 IsConstructor ( argument )
3af2954a 1140
8b095871
IC
1141 // 7.2.9 SameValue(x, y)
1142 function SameValue(x, y) {
1143 if (typeof x !== typeof y) return false;
1144 switch (typeof x) {
1145 case 'undefined':
1146 return true;
1147 case 'number':
1148 if (x !== x && y !== y) return true;
1149 if (x === 0 && y === 0) return 1/x === 1/y;
1150 return x === y;
1151 case 'boolean':
1152 case 'string':
1153 case 'object':
1154 default:
1155 return x === y;
1156 }
1157 }
3af2954a 1158
8b095871
IC
1159 // 7.2.10 SameValueZero(x, y)
1160 function SameValueZero(x, y) {
1161 if (typeof x !== typeof y) return false;
1162 switch (typeof x) {
1163 case 'undefined':
1164 return true;
1165 case 'number':
1166 if (x !== x && y !== y) return true;
1167 return x === y;
1168 case 'boolean':
1169 case 'string':
1170 case 'object':
1171 default:
1172 return x === y;
1173 }
1174 }
3af2954a 1175
8b095871
IC
1176 //----------------------------------------
1177 // 7.3 Operations on Objects
1178 //----------------------------------------
3af2954a 1179
8b095871
IC
1180 // 7.3.1 Get (O, P)
1181 // - just use o.p or o[p]
3af2954a 1182
8b095871
IC
1183 // 7.3.2 GetV (V, P)
1184 function GetV(v, p) {
1185 var o = ToObject(v);
1186 return o[p];
1187 }
3af2954a 1188
8b095871
IC
1189 // 7.3.3 Set (O, P, V, Throw)
1190 // - just use o.p = v or o[p] = v
3af2954a 1191
3af2954a 1192
3af2954a 1193
3af2954a 1194
8b095871
IC
1195 // 7.3.9 GetMethod (O, P)
1196 function GetMethod(o, p) {
1197 var func = GetV(o, p);
1198 if (func === undefined || func === null) return undefined;
1199 if (!IsCallable(func)) throw TypeError();
1200 return func;
ab78acc6 1201 }
8b095871
IC
1202
1203 // 7.3.10 HasProperty (O, P)
1204 function HasProperty(o, p) {
1205 while (o) {
1206 if (Object.prototype.hasOwnProperty.call(o, p)) return true;
1207 if (Type(o) !== 'object') return false;
1208 o = Object.getPrototypeOf(o);
ab78acc6 1209 }
8b095871 1210 return false;
ab78acc6 1211 }
8b095871
IC
1212
1213 // 7.3.11 HasOwnProperty (O, P)
1214 function HasOwnProperty(o, p) {
1215 return Object.prototype.hasOwnProperty.call(o, p);
ab78acc6 1216 }
3af2954a 1217
8b095871
IC
1218 //----------------------------------------
1219 // 7.4 Operations on Iterator Objects
1220 //----------------------------------------
3af2954a 1221
8b095871
IC
1222 // 7.4.1 GetIterator ( obj, method )
1223 function GetIterator(obj, method) {
1224 if (arguments.length < 2)
1225 method = GetMethod(obj, $$iterator);
1226 var iterator = method.call(obj);
1227 if (Type(iterator) !== 'object') throw TypeError();
1228 return iterator;
3af2954a
IC
1229 }
1230
8b095871
IC
1231 // 7.4.2 IteratorNext ( iterator, value )
1232 function IteratorNext(iterator, value) {
1233 if (arguments.length < 2)
1234 var result = iterator.next();
1235 else
1236 result = iterator.next(value);
1237 if (Type(result) !== 'object') throw TypeError();
1238 return result;
1239 }
3af2954a 1240
8b095871
IC
1241 // 7.4.3 IteratorComplete ( iterResult )
1242 function IteratorComplete(iterResult) {
1243 console.assert(Type(iterResult) === 'object');
1244 return Boolean(iterResult.done);
1245 }
3af2954a 1246
8b095871
IC
1247 // 7.4.4 IteratorValue ( iterResult )
1248 function IteratorValue(iterResult) {
1249 console.assert(Type(iterResult) === 'object');
1250 return iterResult.value;
1251 }
1252
1253 // 7.4.5 IteratorStep ( iterator )
1254 function IteratorStep( iterator, value ) {
1255 var result = IteratorNext(iterator, value);
1256 var done = result['done'];
1257 if (Boolean(done) === true) return false;
1258 return result;
1259 }
1260
1261 // 7.4.6 IteratorClose( iterator, completion )
1262 function IteratorClose( iterator, completion ) {
1263 console.assert(Type(iterator) === 'object');
1264 var _return = GetMethod(iterator, 'return');
1265 if (_return === undefined) return completion;
1266 try {
1267 var innerResult = _return[iterator]();
1268 } catch (result) {
1269 // TODO: If completion.[[type]] is throw, return completion
1270 return result;
1271 }
1272 if (Type(innerResult) !== 'object') throw TypeError();
1273 return completion;
1274 }
1275
1276 // 7.4.7 CreateIterResultObject (value, done)
1277 function CreateIterResultObject(value, done) {
1278 console.assert(Type(done) === 'boolean');
1279 var obj = {};
1280 obj["value"] = value;
1281 obj["done"] = done;
1282 return obj;
1283 }
1284
1285 // 7.4.8 CreateListIterator (list)
1286 // 7.4.8.1 ListIterator next( )
1287 // 7.4.9 CreateCompoundIterator ( iterator1, iterator2 )
1288 // 7.4.9.1 CompoundIterator next( )
1289
1290 //----------------------------------------
1291 // 8 Executable Code and Execution Contexts
1292 //----------------------------------------
1293
1294 //----------------------------------------
1295 // 8.4 Jobs and Job Queues
1296 //----------------------------------------
1297
1298 // 8.4.1 EnqueueJob ( queueName, job, arguments)
1299 function EnqueueJob(queueName, job, args) {
1300 var fn = function() { job.apply(undefined, args); };
1301 enqueue(fn);
1302 }
1303
1304 // 8.4.2 NextJob result
1305 function NextJob(result) {
1306 // no-op
1307 }
1308
1309 //----------------------------------------
1310 // 9 Ordinary and Exotic Objects Behaviors
1311 //----------------------------------------
1312
1313 // 9.1.11 [[Enumerate]] ()
1314 function Enumerate(obj) {
1315 var e = [];
1316 if (Object(obj) !== obj) return e;
1317 var visited = new Set;
1318 while (obj !== null) {
1319 Object.getOwnPropertyNames(obj).forEach(function(name) {
1320 if (!visited.has(name)) {
1321 var desc = Object.getOwnPropertyDescriptor(obj, name);
1322 if (desc) {
1323 visited.add(name);
1324 if (desc.enumerable) e.push(name);
1325 }
1326 }
1327 });
1328 obj = Object.getPrototypeOf(obj);
1329 }
1330 return e[$$iterator]();
1331 }
1332
1333 // 9.1.12 [[OwnPropertyKeys]] ( )
1334 function OwnPropertyKeys(o) {
1335 return Object.getOwnPropertyNames(o);
1336 }
1337
1338 // 9.1.13 ObjectCreate(proto, internalSlotsList)
1339 function ObjectCreate(proto, internalSlotsList) {
1340 return Object.create(proto, internalSlotsList);
1341 }
1342
1343 // ---------------------------------------
1344 // 19 Fundamental Objects
1345 // ---------------------------------------
1346
1347 // ---------------------------------------
1348 // 19.1 Object Objects
1349 // ---------------------------------------
1350
1351 // 19.1.1 The Object Constructor
1352 // 19.1.1.1 Object ( [ value ] )
1353 // 19.1.2 Properties of the Object Constructor
1354 // 19.1.2.1 Object.assign ( target, ...sources )
1355 define(
1356 Object, 'assign',
1357 function assign(target, /*...*/sources) {
1358 var to = ToObject(target);
1359 if (arguments.length < 2) return to;
1360
1361 var sourcesIndex = 1;
1362 while (sourcesIndex < arguments.length) {
1363 var nextSource = arguments[sourcesIndex++];
1364 if (nextSource === undefined || nextSource === null) {
1365 var keys = [];
1366 } else {
1367 var from = ToObject(nextSource);
1368 keys = OwnPropertyKeys(from);
1369 }
1370 for (var keysIndex = 0; keysIndex < keys.length; ++keysIndex) {
1371 var nextKey = keys[keysIndex];
1372 var desc = Object.getOwnPropertyDescriptor(from, nextKey);
1373 if (desc !== undefined && desc.enumerable) {
1374 var propValue = from[nextKey];
1375 to[nextKey] = propValue;
1376 }
1377 }
1378 }
1379 return to;
1380 });
1381
1382 // 19.1.2.2 Object.create ( O [ , Properties ] )
1383 // 19.1.2.3 Object.defineProperties ( O, Properties )
1384 // 19.1.2.4 Object.defineProperty ( O, P, Attributes )
1385 // 19.1.2.5 Object.freeze ( O )
1386 // 19.1.2.6 Object.getOwnPropertyDescriptor ( O, P )
1387
1388 (function() {
1389 var nativeSymbols = (typeof global.Symbol() === 'symbol'),
1390 $getOwnPropertyNames = Object.getOwnPropertyNames,
1391 $keys = Object.keys,
1392 $window_names = (typeof window === 'object' ? $getOwnPropertyNames(window) : []);
1393
1394 function isStringKey(k) { return !symbolForKey(k); }
1395
1396 // 19.1.2.7 Object.getOwnPropertyNames ( O )
1397 define(
1398 Object, 'getOwnPropertyNames',
1399 function getOwnPropertyNames(o) {
1400 if (Object.prototype.toString.call(o) === '[object Window]') {
1401 // Workaround for cross-realm calling by IE itself.
1402 // https://github.com/inexorabletash/polyfill/issues/96
1403 try {
1404 return $getOwnPropertyNames(o).filter(isStringKey);
1405 } catch (_) {
1406 return $window_names.slice();
1407 }
1408 }
1409 return $getOwnPropertyNames(o).filter(isStringKey);
1410 }, !nativeSymbols);
1411
1412 // 19.1.2.8 Object.getOwnPropertySymbols ( O )
1413 define(
1414 Object, 'getOwnPropertySymbols',
1415 function getOwnPropertySymbols(o) {
1416 return $getOwnPropertyNames(o).filter(symbolForKey).map(symbolForKey);
1417 }, !nativeSymbols);
1418
1419 // 19.1.2.14 Object.keys ( O )
1420 define(
1421 Object, 'keys',
1422 function keys(o) {
1423 return $keys(o).filter(isStringKey);
1424 }, !nativeSymbols);
1425 }());
1426
1427 // 19.1.2.9 Object.getPrototypeOf ( O )
1428 // 19.1.2.10 Object.is ( value1, value2 )
1429 define(
1430 Object, 'is',
1431 function is(value1, value2) {
1432 return SameValue(value1, value2);
1433 });
1434
1435 // 19.1.2.11 Object.isExtensible ( O )
1436 // 19.1.2.12 Object.isFrozen ( O )
1437 // 19.1.2.13 Object.isSealed ( O )
1438
1439 // 19.1.2.14 Object.keys ( O )
1440 // see above
1441
1442 // 19.1.2.15 Object.preventExtensions ( O )
1443 // 19.1.2.16 Object.prototype
1444 // 19.1.2.17 Object.seal ( O )
1445
1446 // 19.1.2.18 Object.setPrototypeOf ( O, proto )
1447 define(
1448 Object, 'setPrototypeOf',
1449 function setPrototypeOf(o, proto) {
1450 if (Type(o) !== 'object') throw TypeError();
1451 if (Type(proto) !== 'object' && Type(proto) !== 'null') throw TypeError();
1452 o.__proto__ = proto;
1453 return o;
1454 }
1455 );
1456
1457 // 19.1.3 Properties of the Object Prototype Object
1458 // 19.1.3.1 Object.prototype.constructor
1459 // 19.1.3.2 Object.prototype.hasOwnProperty ( V )
1460 // 19.1.3.3 Object.prototype.isPrototypeOf ( V )
1461 // 19.1.3.4 Object.prototype.propertyIsEnumerable ( V )
1462 // 19.1.3.5 Object.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1463 // 19.1.3.6 Object.prototype.toString ( )
1464 hook(Object.prototype, 'toString',
1465 function() {
1466 var o = strict(this);
1467 if (o === Object(o) && $$toStringTag in o) {
1468 return '[object ' + o[$$toStringTag] + ']';
1469 }
1470 return undefined;
1471 });
1472
1473 // 19.1.3.7 Object.prototype.valueOf ( )
1474 // 19.1.4 Properties of Object Instances
1475
1476 // ---------------------------------------
1477 // 19.2 Function Objects
1478 // ---------------------------------------
1479
1480 // 19.2.1 The Function Constructor
1481 // 19.2.1.1 Function ( p1, p2, … , pn, body )
1482 // 19.2.2 Properties of the Function Constructor
1483 // 19.2.2.1 Function.length
1484 // 19.2.2.2 Function.prototype
1485 // 19.2.3 Properties of the Function Prototype Object
1486 // 19.2.3.1 Function.prototype.apply ( thisArg, argArray )
1487 // 19.2.3.2 Function.prototype.bind ( thisArg , ...args)
1488 // 19.2.3.3 Function.prototype.call (thisArg , ...args)
1489 // 19.2.3.4 Function.prototype.constructor
1490 // 19.2.3.5 Function.prototype.toString ( )
1491 // 19.2.3.6 Function.prototype[@@hasInstance] ( V )
1492 // 19.2.4 Function Instances
1493 // 19.2.4.1 length
1494 // 19.2.4.2 name
1495 // 19.2.4.3 prototype
1496
1497 // (No polyfillable changes from ES5)
1498
1499 // ---------------------------------------
1500 // 19.3 Boolean Objects
1501 // ---------------------------------------
1502
1503 // 19.3.1 The Boolean Constructor
1504 // 19.3.1.1 Boolean ( value )
1505 // 19.3.2 Properties of the Boolean Constructor
1506 // 19.3.2.1 Boolean.prototype
1507 // 19.3.3 Properties of the Boolean Prototype Object
1508 // 19.3.3.1 Boolean.prototype.constructor
1509 // 19.3.3.2 Boolean.prototype.toString ( )
1510 // 19.3.3.3 Boolean.prototype.valueOf ( )
1511 // 19.3.4 Properties of Boolean Instances
1512
1513 // (No polyfillable changes from ES5)
1514
1515 // ---------------------------------------
1516 // 19.4 Symbol Objects
1517 // ---------------------------------------
1518
1519 // Moved earlier in this script, so that other polyfills can depend on them.
1520
1521 // 19.4.3.4 Symbol.prototype [ @@toStringTag ]
1522 define(global.Symbol.prototype, global.Symbol.toStringTag, 'Symbol');
1523
1524 // ---------------------------------------
1525 // 19.5 Error Objects
1526 // ---------------------------------------
1527
1528 // 19.5.1 The Error Constructor
1529 // 19.5.1.1 Error ( message )
1530 // 19.5.1.2 new Error( ...argumentsList )
1531 // 19.5.2 Properties of the Error Constructor
1532 // 19.5.2.1 Error.prototype
1533 // 19.5.3 Properties of the Error Prototype Object
1534 // 19.5.3.1 Error.prototype.constructor
1535 // 19.5.3.2 Error.prototype.message
1536 // 19.5.3.3 Error.prototype.name
1537 // 19.5.3.4 Error.prototype.toString ( )
1538 // 19.5.4 Properties of Error Instances
1539 // 19.5.5 Native Error Types Used in This Standard
1540 // 19.5.5.1 EvalError
1541 // 19.5.5.2 RangeError
1542 // 19.5.5.3 ReferenceError
1543 // 19.5.5.4 SyntaxError
1544 // 19.5.5.5 TypeError
1545 // 19.5.5.6 URIError
1546 // 19.5.6 NativeError Object Structure
1547 // 19.5.6.1 NativeError Constructors
1548 // 19.5.6.1.1 NativeError ( message )
1549 // 19.5.6.1.2 new NativeError ( ...argumentsList )
1550 // 19.5.6.2 Properties of the NativeError Constructors
1551 // 19.5.6.2.1 NativeError.prototype
1552 // 19.5.6.3 Properties of the NativeError Prototype Objects
1553 // 19.5.6.4 Properties of NativeError Instances
1554
1555 // (No polyfillable changes from ES5)
1556
1557 // ---------------------------------------
1558 // 20 Numbers and Dates
1559 // ---------------------------------------
1560
1561 // ---------------------------------------
1562 // 20.1 Number Objects
1563 // ---------------------------------------
1564
1565 // 20.1.1 The Number Constructor
1566 // 20.1.1.1 Number ( [ value ] )
1567 // 20.1.1.2 new Number ( ...argumentsList )
1568 // 20.1.2 Properties of the Number Constructor
1569
1570 // 20.1.2.1 Number.EPSILON
1571 define(
1572 Number, 'EPSILON',
1573 (function () {
1574 var next, result;
1575 for (next = 1; 1 + next !== 1; next = next / 2)
1576 result = next;
1577 return result;
1578 }()));
1579
1580 // 20.1.2.2 Number.isFinite ( number )
1581 define(
1582 Number, 'isFinite',
1583 function isFinite(number) {
1584 if (Type(number) !== 'number') return false;
1585 if (number !== number || number === +Infinity || number === -Infinity) return false;
1586 return true;
1587 });
1588
1589 // 20.1.2.3 Number.isInteger ( number )
1590 define(
1591 Number, 'isInteger',
1592 function isInteger(number) {
1593 if (Type(number) !== 'number') return false;
1594 if (number !== number || number === +Infinity || number === -Infinity) return false;
1595 var integer = ToInteger(number);
1596 if (integer !== number) return false;
1597 return true;
1598 });
1599
1600 // 20.1.2.4 Number.isNaN ( number )
1601 define(
1602 Number, 'isNaN',
1603 function isNaN(number) {
1604 if (Type(number) !== 'number') return false;
1605 if (number !== number) return true;
1606 return false;
1607 });
1608
1609 // 20.1.2.5 Number.isSafeInteger ( number )
1610 define(
1611 Number, 'isSafeInteger',
1612 function isSafeInteger(number) {
1613 if (Type(number) !== 'number') return false;
1614 if (number !== number || number === +Infinity || number === -Infinity) return false;
1615 var integer = ToInteger(number);
1616 if (integer !== number) return false;
1617 if (abs(integer) <= (0x20000000000000 - 1)) // 2^53-1
1618 return true;
1619 return false;
1620 });
1621
1622 // 20.1.2.6 Number.MAX_SAFE_INTEGER
1623 define(
1624 Number, 'MAX_SAFE_INTEGER',
1625 9007199254740991); // 2^53-1
1626
1627 // 20.1.2.7 Number.MAX_VALUE
1628
1629 // 20.1.2.8 Number.MIN_SAFE_INTEGER
1630 define(
1631 Number, 'MIN_SAFE_INTEGER',
1632 -9007199254740991); // -2^53+1
1633
1634 // 20.1.2.9 Number.MIN_VALUE
1635 // 20.1.2.10 Number.NaN
1636 // 20.1.2.11 Number.NEGATIVE_INFINITY
1637
1638 // 20.1.2.12 Number.parseFloat ( string )
1639 define(Number, 'parseFloat', $parseFloat);
1640
1641 // 20.1.2.13 Number.parseInt ( string, radix )
1642 define(Number, 'parseInt', $parseInt);
1643
1644 // 20.1.2.14 Number.POSITIVE_INFINITY
1645 // 20.1.2.15 Number.prototype
1646
1647 // 20.1.3 Properties of the Number Prototype Object
1648 // 20.1.3.1 Number.prototype.constructor
1649 // 20.1.3.2 Number.prototype.toExponential ( fractionDigits )
1650 // 20.1.3.3 Number.prototype.toFixed ( fractionDigits )
1651 // 20.1.3.4 Number.prototype.toLocaleString( [ reserved1 [ , reserved2 ] ])
1652 // 20.1.3.5 Number.prototype.toPrecision ( precision )
1653 // 20.1.3.6 Number.prototype.toString ( [ radix ] )
1654 // 20.1.3.7 Number.prototype.valueOf ( )
1655 // 20.1.4 Properties of Number Instances
1656
1657 // ---------------------------------------
1658 // 20.2 The Math Object
1659 // ---------------------------------------
1660
1661 // 20.2.1 Value Properties of the Math Object
1662 // 20.2.1.1 Math.E
1663 // 20.2.1.2 Math.LN10
1664 // 20.2.1.3 Math.LN2
1665 // 20.2.1.4 Math.LOG10E
1666 // 20.2.1.5 Math.LOG2E
1667 // 20.2.1.6 Math.PI
1668 // 20.2.1.7 Math.SQRT1_2
1669 // 20.2.1.8 Math.SQRT2
1670
1671 // 20.2.1.9 Math [ @@toStringTag ]
1672 define(Math, $$toStringTag, 'Math');
1673
1674 // 20.2.2 Function Properties of the Math Object
1675 // 20.2.2.1 Math.abs ( x )
1676 // 20.2.2.2 Math.acos ( x )
1677
1678 // 20.2.2.3 Math.acosh(x)
1679 define(
1680 Math, 'acosh',
1681 function acosh(x) {
1682 x = Number(x);
1683 return log(x + sqrt(x * x - 1));
1684 });
1685
1686 // 20.2.2.4 Math.asin ( x )
1687
1688 // 20.2.2.5 Math.asinh( x )
1689 define(
1690 Math, 'asinh',
1691 function asinh(x) {
1692 x = Number(x);
1693 if (SameValue(x, -0)) {
1694 return x;
1695 }
1696 var s = sqrt(x * x + 1);
1697 return (s === -x) ? log(0) : log(x + s);
1698 });
1699
1700 // 20.2.2.6 Math.atan ( x )
1701
1702 // 20.2.2.7 Math.atanh( x )
1703 define(
1704 Math, 'atanh',
1705 function atanh(x) {
1706 x = Number(x);
1707 return (x === 0) ? x : log((1 + x) / (1 - x)) / 2;
1708 });
1709
1710 // 20.2.2.8 Math.atan2 ( y, x )
1711
1712 // 20.2.2.9 Math.cbrt ( x )
1713 define(
1714 Math, 'cbrt',
1715 function cbrt(x) {
1716 x = Number(x);
1717 if ($isNaN(x/x)) {
1718 return x;
1719 }
1720 var r = pow(abs(x), 1/3);
1721 var t = x/r/r;
1722 return r + (r * (t-r) / (2*r + t));
1723 });
1724
1725 // 20.2.2.10 Math.ceil ( x )
1726
1727 // 20.2.2.11 Math.clz32 ( x )
1728 define(
1729 Math, 'clz32',
1730 function clz32(x) {
1731 function clz8(x) {
1732 return (x & 0xf0) ? (x & 0x80 ? 0 : x & 0x40 ? 1 : x & 0x20 ? 2 : 3) :
1733 (x & 0x08 ? 4 : x & 0x04 ? 5 : x & 0x02 ? 6 : x & 0x01 ? 7 : 8);
1734 }
1735 x = ToUint32(x);
1736 return x & 0xff000000 ? clz8(x >> 24) :
1737 x & 0xff0000 ? clz8(x >> 16) + 8 :
1738 x & 0xff00 ? clz8(x >> 8) + 16 : clz8(x) + 24;
1739 });
1740
1741
1742
1743 // 20.2.2.12 Math.cos ( x )
1744
1745 // 20.2.2.13 Math.cosh ( x )
1746 define(
1747 Math, 'cosh',
1748 function cosh(x) {
1749 x = Number(x);
1750 return (pow(E, x) + pow(E, -x)) / 2;
1751 });
1752
1753 // 20.2.2.14 Math.exp ( x )
1754
1755 // 20.2.2.15 Math.expm1 ( x )
1756 define(
1757 Math, 'expm1',
1758 function expm1(x) {
1759 x = Number(x);
1760 // from: http://www.johndcook.com/cpp_log1p.html
1761 if (SameValue(x, -0)) {
1762 return -0;
1763 } else if (abs(x) < 1e-5) {
1764 return x + 0.5 * x * x; // two terms of Taylor expansion
1765 } else {
1766 return exp(x) - 1;
1767 }
1768 });
1769
1770 // 20.2.2.16 Math.floor ( x )
1771
1772 // 20.2.2.17 Math.fround ( x )
1773 define(
1774 Math, 'fround',
1775 function fround(x) {
1776 if ($isNaN(x)) {
1777 return NaN;
1778 }
1779 if (1/x === +Infinity || 1/x === -Infinity || x === +Infinity || x === -Infinity) {
1780 return x;
1781 }
1782 return (new Float32Array([x]))[0];
1783 });
1784
1785 // 20.2.2.18 Math.hypot ( value1 [, value2 [ ... ] ] )
1786 define(
1787 Math, 'hypot',
1788 function hypot() {
1789 var values = [];
1790 var m = 0, sawNaN = false;
1791 for (var i = 0; i < arguments.length; ++i) {
1792 var n = abs(Number(arguments[i]));
1793 if (n === Infinity) return n;
1794 if (n !== n) sawNaN = true;
1795 if (n > m) m = n;
1796 values[i] = n;
1797 }
1798 if (sawNaN) return NaN;
1799 if (m === 0) return +0;
1800 var sum = +0;
1801 for (i = 0; i < values.length; ++i) {
1802 var r = values[i] / m;
1803 sum = sum + r * r;
1804 }
1805 return m * sqrt(sum);
1806 });
1807
1808 // 20.2.2.19 Math.imul ( x, y )
1809 define(
1810 Math, 'imul',
1811 function imul(x, y) {
1812 var a = ToUint32(x);
1813 var b = ToUint32(y);
1814 // (slow but accurate)
1815 var ah = (a >>> 16) & 0xffff;
1816 var al = a & 0xffff;
1817 var bh = (b >>> 16) & 0xffff;
1818 var bl = b & 0xffff;
1819 return ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
1820 }, ('imul' in Math && Math.imul(1, 0x80000000) === 0) // Safari 7 bug
1821 );
1822
1823 // 20.2.2.20 Math.log ( x )
1824
1825 // 20.2.2.21 Math.log1p ( x )
1826 define(
1827 Math, 'log1p',
1828 function log1p(x) {
1829 x = Number(x);
1830 // from: http://www.johndcook.com/cpp_expm1.html
1831 if (x < -1) {
1832 return NaN;
1833 } else if (SameValue(x, -0)) {
1834 return -0;
1835 } else if (abs(x) > 1e-4) {
1836 return log(1 + x);
1837 } else {
1838 return (-0.5 * x + 1) * x;
1839 }
1840 });
1841
1842 // 20.2.2.22 Math.log10 ( x )
1843 define(
1844 Math, 'log10',
1845 function log10(x) {
1846 x = Number(x);
1847 return log(x) * LOG10E;
1848 });
1849
1850 // 20.2.2.23 Math.log2 ( x )
1851 define(
1852 Math, 'log2',
1853 function log2(x) {
1854 x = Number(x);
1855 return log(x) * LOG2E;
1856 });
1857
1858 // 20.2.2.24 Math.max ( value1, value2 , ...values )
1859 // 20.2.2.25 Math.min ( value1, value2 , ...values )
1860 // 20.2.2.26 Math.pow ( x, y )
1861 // 20.2.2.27 Math.random ( )
1862 // 20.2.2.28 Math.round ( x )
1863
1864 // 20.2.2.29 Math.sign(x)
1865 define(
1866 Math, 'sign',
1867 function sign(x) {
1868 x = Number(x);
1869 return x < 0 ? -1 : x > 0 ? 1 : x;
1870 });
1871
1872 // 20.2.2.30 Math.sin ( x )
1873
1874 // 20.2.2.31 Math.sinh( x )
1875 define(
1876 Math, 'sinh',
1877 function sinh(x) {
1878 x = Number(x);
1879 return SameValue(x, -0) ? x : (pow(E, x) - pow(E, -x)) / 2;
1880 });
1881
1882 // 20.2.2.32 Math.sqrt ( x )
1883 // 20.2.2.33 Math.tan ( x )
1884
1885 // 20.2.2.34 Math.tanh ( x )
1886 define(
1887 Math, 'tanh',
1888 function tanh(x) {
1889 x = Number(x);
1890 var n = pow(E, 2 * x) - 1,
1891 d = pow(E, 2 * x) + 1;
1892 if (SameValue(x, -0))
1893 return x;
1894 return (n === d) ? 1 : n / d; // Handle Infinity/Infinity
1895 });
1896
1897 // 20.2.2.35 Math.trunc ( x )
1898 define(
1899 Math, 'trunc',
1900 function trunc(x) {
1901 x = Number(x);
1902 return $isNaN(x) ? NaN :
1903 x < 0 ? ceil(x) : floor(x);
1904 });
1905
1906 // ---------------------------------------
1907 // 20.3 Date Objects
1908 // ---------------------------------------
1909
1910 // 20.3.1 Overview of Date Objects and Definitions of Abstract Operations
1911 // 20.3.1.1 Time Values and Time Range
1912 // 20.3.1.2 Day Number and Time within Day
1913 // 20.3.1.3 Year Number
1914 // 20.3.1.4 Month Number
1915 // 20.3.1.5 Date Number
1916 // 20.3.1.6 Week Day
1917 // 20.3.1.7 Local Time Zone Adjustment
1918 // 20.3.1.8 Daylight Saving Time Adjustment
1919 // 20.3.1.9 Local Time
1920 // 20.3.1.10 Hours, Minutes, Second, and Milliseconds
1921 // 20.3.1.11 MakeTime (hour, min, sec, ms)
1922 // 20.3.1.12 MakeDay (year, month, date)
1923 // 20.3.1.13 MakeDate (day, time)
1924 // 20.3.1.14 TimeClip (time)
1925 // 20.3.1.15 Date Time String Format
1926 // 20.3.1.15.1 Extended years
1927 // 20.3.2 The Date Constructor
1928 // 20.3.2.1 Date ( year, month [, date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1929 // 20.3.2.2 Date ( value )
1930 // 20.3.2.3 Date ( )
1931 // 20.3.3 Properties of the Date Constructor
1932 // 20.3.3.1 Date.now ( )
1933 // 20.3.3.2 Date.parse (string)
1934 // 20.3.3.3 Date.prototype
1935 // 20.3.3.4 Date.UTC ( year, month [ , date [ , hours [ , minutes [ , seconds [ , ms ] ] ] ] ] )
1936 // 20.3.4 Properties of the Date Prototype Object
1937 // 20.3.4.1 Date.prototype.constructor
1938 // 20.3.4.2 Date.prototype.getDate ( )
1939 // 20.3.4.3 Date.prototype.getDay ( )
1940 // 20.3.4.4 Date.prototype.getFullYear ( )
1941 // 20.3.4.5 Date.prototype.getHours ( )
1942 // 20.3.4.6 Date.prototype.getMilliseconds ( )
1943 // 20.3.4.7 Date.prototype.getMinutes ( )
1944 // 20.3.4.8 Date.prototype.getMonth ( )
1945 // 20.3.4.9 Date.prototype.getSeconds ( )
1946 // 20.3.4.10 Date.prototype.getTime ( )
1947 // 20.3.4.11 Date.prototype.getTimezoneOffset ( )
1948 // 20.3.4.12 Date.prototype.getUTCDate ( )
1949 // 20.3.4.13 Date.prototype.getUTCDay ( )
1950 // 20.3.4.14 Date.prototype.getUTCFullYear ( )
1951 // 20.3.4.15 Date.prototype.getUTCHours ( )
1952 // 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
1953 // 20.3.4.17 Date.prototype.getUTCMinutes ( )
1954 // 20.3.4.18 Date.prototype.getUTCMonth ( )
1955 // 20.3.4.19 Date.prototype.getUTCSeconds ( )
1956 // 20.3.4.20 Date.prototype.setDate ( date )
1957 // 20.3.4.21 Date.prototype.setFullYear ( year [ , month [ , date ] ] )
1958 // 20.3.4.22 Date.prototype.setHours ( hour [ , min [ , sec [ , ms ] ] ] )
1959 // 20.3.4.23 Date.prototype.setMilliseconds ( ms )
1960 // 20.3.4.24 Date.prototype.setMinutes ( min [ , sec [ , ms ] ] )
1961 // 20.3.4.25 Date.prototype.setMonth ( month [ , date ] )
1962 // 20.3.4.26 Date.prototype.setSeconds ( sec [ , ms ] )
1963 // 20.3.4.27 Date.prototype.setTime ( time )
1964 // 20.3.4.28 Date.prototype.setUTCDate ( date )
1965 // 20.3.4.29 Date.prototype.setUTCFullYear ( year [ , month [ , date ] ] )
1966 // 20.3.4.30 Date.prototype.setUTCHours ( hour [ , min [ , sec [ , ms ] ] ] )
1967 // 20.3.4.31 Date.prototype.setUTCMilliseconds ( ms )
1968 // 20.3.4.32 Date.prototype.setUTCMinutes ( min [ , sec [, ms ] ] )
1969 // 20.3.4.33 Date.prototype.setUTCMonth ( month [ , date ] )
1970 // 20.3.4.34 Date.prototype.setUTCSeconds ( sec [ , ms ] )
1971 // 20.3.4.35 Date.prototype.toDateString ( )
1972 // 20.3.4.36 Date.prototype.toISOString ( )
1973 // 20.3.4.37 Date.prototype.toJSON ( key )
1974 // 20.3.4.38 Date.prototype.toLocaleDateString ( [ reserved1 [ , reserved2 ] ] )
1975 // 20.3.4.39 Date.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
1976 // 20.3.4.40 Date.prototype.toLocaleTimeString ( [ reserved1 [ , reserved2 ] ] )
1977 // 20.3.4.41 Date.prototype.toString ( )
1978 // 20.3.4.42 Date.prototype.toTimeString ( )
1979 // 20.3.4.43 Date.prototype.toUTCString ( )
1980 // 20.3.4.44 Date.prototype.valueOf ( )
1981 // 20.3.4.45 Date.prototype [ @@toPrimitive ] ( hint )
1982 // 20.3.5 Properties of Date Instances
1983
1984 // (No polyfillable changes from ES5)
1985
1986 // ---------------------------------------
1987 // 21 Text Processing
1988 // ---------------------------------------
1989
1990 var string_regexp_dispatch = (function() {
1991 var faux = {}, secret = Symbol();
1992 faux[Symbol.match] = function() { return secret; };
1993 return ("").match(faux) === secret;
1994 }());
1995
1996 // 21.1 String Objects
1997 // 21.1.1 The String Constructor
1998 // 21.1.1.1 String ( value )
1999 // 21.1.2 Properties of the String Constructor
2000 // 21.1.2.1 String.fromCharCode ( ...codeUnits )
2001
2002 // 21.1.2.2 String.fromCodePoint ( ...codePoints )
2003 define(
2004 String, 'fromCodePoint',
2005 function fromCodePoint(/*...codePoints*/) {
2006 var codePoints = arguments,
2007 length = codePoints.length,
2008 elements = [],
2009 nextIndex = 0;
2010 while (nextIndex < length) {
2011 var next = codePoints[nextIndex];
2012 var nextCP = Number(next);
2013 if (!SameValue(nextCP, ToInteger(nextCP)) ||
2014 nextCP < 0 || nextCP > 0x10FFFF) {
2015 throw RangeError('Invalid code point ' + nextCP);
2016 }
2017 if (nextCP < 0x10000) {
2018 elements.push(String.fromCharCode(nextCP));
2019 } else {
2020 nextCP -= 0x10000;
2021 elements.push(String.fromCharCode((nextCP >> 10) + 0xD800));
2022 elements.push(String.fromCharCode((nextCP % 0x400) + 0xDC00));
2023 }
2024 nextIndex += 1;
2025 }
2026 return elements.join('');
2027 });
2028
2029 // 21.1.2.3 String.prototype
2030
2031 // 21.1.2.4 String.raw ( template , ...substitutions )
2032 define(
2033 String, 'raw',
2034 function raw(template /*, ...substitutions*/) {
2035 var substitutions = [].slice.call(arguments, 1);
2036
2037 var cooked = Object(template);
2038 var rawValue = cooked['raw'];
2039 var raw = Object(rawValue);
2040 var len = raw['length'];
2041 var literalSegments = ToLength(len);
2042 if (literalSegments <= 0) return '';
2043 var stringElements = [];
2044 var nextIndex = 0;
2045 while (true) {
2046 var next = raw[nextIndex];
2047 var nextSeg = String(next);
2048 stringElements.push(nextSeg);
2049 if (nextIndex + 1 === literalSegments)
2050 return stringElements.join('');
2051 next = substitutions[nextIndex];
2052 var nextSub = String(next);
2053 stringElements.push(nextSub);
2054 nextIndex = nextIndex + 1;
2055 }
2056 });
2057
2058 // See https://githib.com/inexorabletash/uate for a more useful version.
2059
2060 // 21.1.3 Properties of the String Prototype Object
2061 // 21.1.3.1 String.prototype.charAt ( pos )
2062 // 21.1.3.2 String.prototype.charCodeAt ( pos )
2063
2064 // 21.1.3.3 String.prototype.codePointAt ( pos )
2065 define(
2066 String.prototype, 'codePointAt',
2067 function codePointAt(pos) {
2068 var o = strict(this);
2069 var s = String(o);
2070 var position = ToInteger(pos);
2071 var size = s.length;
2072 if (position < 0 || position >= size) return undefined;
2073 var first = s.charCodeAt(position);
2074 if (first < 0xD800 || first > 0xDBFF || position + 1 === size) return first;
2075 var second = s.charCodeAt(position + 1);
2076 if (second < 0xDC00 || second > 0xDFFF) return first;
2077 return ((first - 0xD800) * 1024) + (second - 0xDC00) + 0x10000;
2078 });
2079
2080 // 21.1.3.4 String.prototype.concat ( ...args )
2081 // 21.1.3.5 String.prototype.constructor
2082
2083 // 21.1.3.6 String.prototype.endsWith ( searchString [ , endPosition] )
2084 define(
2085 String.prototype, 'endsWith',
2086 function endsWith(searchString) {
2087 var endPosition = arguments[1];
2088
2089 var o = strict(this);
2090 var s = String(o);
2091 var searchStr = String(searchString);
2092 var len = s.length;
2093 var pos = (endPosition === undefined) ? len : ToInteger(endPosition);
2094 var end = min(max(pos, 0), len);
2095 var searchLength = searchStr.length;
2096 var start = end - searchLength;
2097 if (start < 0) return false;
2098 if (s.substring(start, start + searchLength) === searchStr) return true;
2099 return false;
2100 });
2101
2102 // 21.1.3.7 String.prototype.includes ( searchString [ , position ] )
2103 define(
2104 String.prototype, 'includes',
2105 function includes(searchString) {
2106 var position = arguments[1];
2107
2108 var o = strict(this);
2109 var s = String(o);
2110 var searchStr = String(searchString);
2111 var pos = ToInteger(position);
2112 var len = s.length;
2113 var start = min(max(pos, 0), len);
2114 return s.indexOf(searchStr, start) !== -1;
2115 });
2116
2117 // 21.1.3.8 String.prototype.indexOf ( searchString [ , position ] )
2118 // 21.1.3.9 String.prototype.lastIndexOf ( searchString [ , position ] )
2119 // 21.1.3.10 String.prototype.localeCompare ( that [, reserved1 [ , reserved2 ] ] )
2120 // 21.1.3.11 String.prototype.match ( regexp )
2121 define(
2122 String.prototype, 'match',
2123 function match(regexp) {
2124 var o = strict(this);
2125 var s = String(o);
2126 if (HasProperty(regexp, $$match)) var rx = regexp;
2127 else rx = new RegExp(regexp);
2128 return rx[$$match](s);
2129 }, !string_regexp_dispatch);
2130
2131 // 21.1.3.12 String.prototype.normalize ( [ form ] )
2132
2133 // Not practical due to table sizes; if needed, pull in:
2134 // https://github.com/walling/unorm/
2135
2136 // 21.1.3.13 String.prototype.repeat ( count )
2137 define(
2138 String.prototype, 'repeat',
2139 function repeat(count) {
2140 var o = strict(this);
2141 var s = String(o);
2142 var n = ToInteger(count);
2143 if (n < 0) throw RangeError();
2144 if (n === Infinity) throw RangeError();
2145 var t = new Array(n + 1).join(s);
2146 return t;
2147 });
2148
2149 // 21.1.3.14 String.prototype.replace (searchValue, replaceValue )
2150 define(
2151 String.prototype, 'replace',
2152 function replace(searchValue, replaceValue) {
2153 var o = strict(this);
2154 if (HasProperty(searchValue, $$replace))
2155 return searchValue[$$replace](o, replaceValue);
2156 return orig_replace.call(o, searchValue, replaceValue);
2157 }, !string_regexp_dispatch);
2158
2159 // 21.1.3.15 String.prototype.search ( regexp )
2160 define(
2161 String.prototype, 'search',
2162 function search(regexp) {
2163 var o = strict(this);
2164 var string = String(o);
2165 if (HasProperty(regexp, $$search)) var rx = regexp;
2166 else rx = new RegExp(regexp);
2167 return rx[$$search](string);
2168 }, !string_regexp_dispatch);
2169
2170 // 21.1.3.16 String.prototype.slice ( start, end )
2171 // 21.1.3.17 String.prototype.split ( separator, limit )
2172 define(
2173 String.prototype, 'split',
2174 function split(separator, limit) {
2175 var o = strict(this);
2176 if (HasProperty(separator, $$split))
2177 return separator[$$split](o, limit);
2178 return orig_split.call(o, separator, limit);
2179 }, !string_regexp_dispatch);
2180
2181 // 21.1.3.18 String.prototype.startsWith ( searchString [, position ] )
2182 define(
2183 String.prototype, 'startsWith',
2184 function startsWith(searchString) {
2185 var position = arguments[1];
2186
2187 var o = strict(this);
2188 var s = String(o);
2189 var searchStr = String(searchString);
2190 var pos = ToInteger(position);
2191 var len = s.length;
2192 var start = min(max(pos, 0), len);
2193 var searchLength = searchStr.length;
2194 if (searchLength + start > len) return false;
2195 if (s.substring(start, start + searchLength) === searchStr) return true;
2196 return false;
2197 });
2198
2199 // 21.1.3.19 String.prototype.substring ( start, end )
2200 // 21.1.3.20 String.prototype.toLocaleLowerCase ( [ reserved1 [ , reserved2 ] ] )
2201 // 21.1.3.21 String.prototype.toLocaleUpperCase ([ reserved1 [ , reserved2 ] ] )
2202 // 21.1.3.22 String.prototype.toLowerCase ( )
2203 // 21.1.3.23 String.prototype.toString ( )
2204 // 21.1.3.24 String.prototype.toUpperCase ( )
2205 // 21.1.3.25 String.prototype.trim ( )
2206 // 21.1.3.26 String.prototype.valueOf ( )
2207
2208 // 21.1.3.27 String.prototype [ @@iterator ]( )
2209 define(
2210 String.prototype, $$iterator,
2211 function entries() {
2212 return CreateStringIterator(this, 'value');
2213 });
2214
2215 // 21.1.4 Properties of String Instances
2216 // 21.1.4.1 length
2217
2218 // 21.1.5 String Iterator Objects
2219 /** @constructor */
2220 function StringIterator() {}
2221
2222 // 21.1.5.1 CreateStringIterator Abstract Operation
2223 function CreateStringIterator(string, kind) {
2224 var s = String(string);
2225 var iterator = new StringIterator;
2226 set_internal(iterator, '[[IteratedString]]', s);
2227 set_internal(iterator, '[[StringIteratorNextIndex]]', 0);
2228 set_internal(iterator, '[[StringIterationKind]]', kind);
2229 return iterator;
2230 }
2231
2232 // 21.1.5.2 The %StringIteratorPrototype% Object
2233 var $StringIteratorPrototype$ = Object.create($IteratorPrototype$);
2234 StringIterator.prototype = $StringIteratorPrototype$;
2235
2236 // 21.1.5.2.1 %StringIteratorPrototype%.next ( )
2237 define(
2238 $StringIteratorPrototype$, 'next',
2239 function next() {
2240 var o = ToObject(this);
2241 var s = String(o['[[IteratedString]]']),
2242 index = o['[[StringIteratorNextIndex]]'],
2243 len = s.length;
2244 if (index >= len) {
2245 set_internal(o, '[[StringIteratorNextIndex]]', Infinity);
2246 return CreateIterResultObject(undefined, true);
2247 }
2248 var cp = s.codePointAt(index);
2249 set_internal(o, '[[StringIteratorNextIndex]]', index + (cp > 0xFFFF ? 2 : 1));
2250 return CreateIterResultObject(String.fromCodePoint(cp), false);
2251 });
2252
2253 // 21.1.5.2.2 %StringIteratorPrototype% [ @@toStringTag ]
2254 define($StringIteratorPrototype$, $$toStringTag, 'String Iterator');
2255
2256 // 21.1.5.3 Properties of String Iterator Instances
2257
2258 // ---------------------------------------
2259 // 21.2 RegExp (Regular Expression) Objects
2260 // ---------------------------------------
2261
2262 // 21.2.1 Patterns
2263 // 21.2.2 Pattern Semantics
2264 // 21.2.2.1 Notation
2265 // 21.2.2.2 Pattern
2266 // 21.2.2.3 Disjunction
2267 // 21.2.2.4 Alternative
2268 // 21.2.2.5 Term
2269 // 21.2.2.6 Assertion
2270 // 21.2.2.7 Quantifier
2271 // 21.2.2.8 Atom
2272 // 21.2.2.9 AtomEscape
2273 // 21.2.2.10 CharacterEscape
2274 // 21.2.2.11 DecimalEscape
2275 // 21.2.2.12 CharacterClassEscape
2276 // 21.2.2.13 CharacterClass
2277 // 21.2.2.14 ClassRanges
2278 // 21.2.2.15 NonemptyClassRanges
2279 // 21.2.2.16 NonemptyClassRangesNoDash
2280 // 21.2.2.17 ClassAtom
2281 // 21.2.2.18 ClassAtomNoDash
2282 // 21.2.2.19 ClassEscape
2283 // 21.2.3 The RegExp Constructor
2284 // 21.2.3.1 RegExp ( pattern, flags )
2285 // 21.2.3.2 new RegExp( ...argumentsList )
2286 // 21.2.3.3 Abstract Operations for the RegExp Constructor
2287 // 21.2.4 Properties of the RegExp Constructor
2288 // 21.2.4.1 RegExp.prototype
2289 // 21.2.5 Properties of the RegExp Prototype Object
2290 // 21.2.5.1 RegExp.prototype.constructor
2291 // 21.2.5.2 RegExp.prototype.exec ( string )
2292
2293 // 21.2.5.3 get RegExp.prototype.flags
2294 if (!('flags' in RegExp.prototype)) {
2295 Object.defineProperty(
2296 RegExp.prototype, 'flags', {
2297 get: function() {
2298 var s = String(this);
2299 return s.substring(s.lastIndexOf('/') + 1);
2300 }
2301 });
2302 }
2303
2304 // 21.2.5.4 get RegExp.prototype.global
2305 // 21.2.5.5 get RegExp.prototype.ignoreCase
2306
2307 // 21.2.5.6 RegExp.prototype [ @@match ] ( string )
2308 define(RegExp.prototype, $$match, function(string) {
2309 var o = strict(this);
2310 return orig_match.call(string, o);
2311 });
2312
2313 // 21.2.5.7 get RegExp.prototype.multiline
2314
2315 // 21.2.5.8 RegExp.prototype [ @@replace ] ( string, replaceValue )
2316 define(RegExp.prototype, $$replace, function(string, replaceValue) {
2317 var o = strict(this);
2318 return orig_replace.call(string, o, replaceValue);
2319 });
2320
2321 // 21.2.5.9 RegExp.prototype [ @@search ] ( string )
2322 define(RegExp.prototype, $$search, function(string) {
2323 var o = strict(this);
2324 return orig_search.call(string, o);
2325 });
2326
2327 // 21.2.5.10 get RegExp.prototype.source
2328
2329 // 21.2.5.11 RegExp.prototype [ @@split ] ( string, limit )
2330 define(RegExp.prototype, $$split, function(string, limit) {
2331 var o = strict(this);
2332 return orig_split.call(string, o, limit);
2333 });
2334
2335 // 21.2.5.12 get RegExp.prototype.sticky
2336 // 21.2.5.13 RegExp.prototype.test( S )
2337 // 21.2.5.14 RegExp.prototype.toString ( )
2338 // 21.2.5.15 get RegExp.prototype.unicode
2339
2340 // 21.2.6 Properties of RegExp Instances
2341 // 21.2.6.1 lastIndex
2342
2343 // (No polyfillable changes from ES5)
2344
2345 // ---------------------------------------
2346 // 22 Indexed Collections
2347 // ---------------------------------------
2348
2349 // ---------------------------------------
2350 // 22.1 Array Objects
2351 // ---------------------------------------
2352
2353 // 22.1.1 The Array Constructor
2354 // 22.1.1.1 Array ( )
2355 // 22.1.1.2 Array (len)
2356 // 22.1.1.3 Array (...items )
2357
2358 // 22.1.2 Properties of the Array Constructor
2359
2360 // 22.1.2.1 Array.from ( items [ , mapfn [ , thisArg ] ] )
2361 define(
2362 Array, 'from',
2363 function from(items) {
2364 var mapfn = arguments[1];
2365 var thisArg = arguments[2];
2366
2367 var c = strict(this);
2368 if (mapfn === undefined) {
2369 var mapping = false;
2370 } else {
2371 if (!IsCallable(mapfn)) throw TypeError();
2372 var t = thisArg;
2373 mapping = true;
2374 }
2375 var usingIterator = GetMethod(items, $$iterator);
2376 if (usingIterator !== undefined) {
2377 if (IsConstructor(c)) {
2378 var a = new c();
2379 } else {
2380 a = new Array(0);
2381 }
2382 var iterator = GetIterator(items, usingIterator);
2383 var k = 0;
2384 while (true) {
2385 var next = IteratorStep(iterator);
2386 if (next === false) {
2387 a.length = k;
2388 return a;
2389 }
2390 var nextValue = IteratorValue(next);
2391 if (mapping)
2392 var mappedValue = mapfn.call(t, nextValue);
2393 else
2394 mappedValue = nextValue;
2395 a[k] = mappedValue;
2396 k += 1;
2397 }
2398 }
2399 var arrayLike = ToObject(items);
2400 var lenValue = arrayLike.length;
2401 var len = ToLength(lenValue);
2402 if (IsConstructor(c)) {
2403 a = new c(len);
2404 } else {
2405 a = new Array(len);
2406 }
2407 k = 0;
2408 while (k < len) {
2409 var kValue = arrayLike[k];
2410 if (mapping)
2411 mappedValue = mapfn.call(t, kValue, k);
2412 else
2413 mappedValue = kValue;
2414 a[k] = mappedValue;
2415 k += 1;
2416 }
2417 a.length = len;
2418 return a;
2419 });
2420
2421 // 22.1.2.2 Array.isArray ( arg )
2422
2423 // 22.1.2.3 Array.of ( ...items )
2424 define(
2425 Array, 'of',
2426 function of() {
2427 var items = arguments;
2428
2429 var lenValue = items.length;
2430 var len = ToUint32(lenValue);
2431 var c = strict(this), a;
2432 if (IsConstructor(c)) {
2433 a = new c(len);
2434 a = ToObject(a);
2435 } else {
2436 a = new Array(len);
2437 }
2438 var k = 0;
2439 while (k < len) {
2440 a[k] = items[k];
2441 k += 1;
2442 }
2443 a.length = len;
2444 return a;
2445 });
2446
2447 // 22.1.2.4 Array.prototype
2448 // 22.1.2.5 get Array [ @@species ]
2449 // 22.1.3 Properties of the Array Prototype Object
2450 // 22.1.3.1 Array.prototype.concat ( ...arguments )
2451 // 22.1.3.1.1 Runtime Semantics: IsConcatSpreadable ( O )
2452 // 22.1.3.2 Array.prototype.constructor
2453 // 22.1.3.3 Array.prototype.copyWithin (target, start [ , end ] )
2454 define(
2455 Array.prototype, 'copyWithin',
2456 function copyWithin(target, start/*, end*/) {
2457 var end = arguments[2];
2458
2459 var o = ToObject(this);
2460 var lenVal = o.length;
2461 var len = ToLength(lenVal);
2462 len = max(len, 0);
2463 var relativeTarget = ToInteger(target);
2464 var to;
2465 if (relativeTarget < 0)
2466 to = max(len + relativeTarget, 0);
2467 else
2468 to = min(relativeTarget, len);
2469 var relativeStart = ToInteger(start);
2470 var from;
2471 if (relativeStart < 0)
2472 from = max(len + relativeStart, 0);
2473 else
2474 from = min(relativeStart, len);
2475 var relativeEnd;
2476 if (end === undefined)
2477 relativeEnd = len;
2478 else
2479 relativeEnd = ToInteger(end);
2480 var final;
2481 if (relativeEnd < 0)
2482 final = max(len + relativeEnd, 0);
2483 else
2484 final = min(relativeEnd, len);
2485 var count = min(final - from, len - to);
2486 var direction;
2487 if (from < to && to < from + count) {
2488 direction = -1;
2489 from = from + count - 1;
2490 to = to + count - 1;
2491 } else {
2492 direction = 1;
2493 }
2494 while (count > 0) {
2495 var fromKey = String(from);
2496 var toKey = String(to);
2497 var fromPresent = HasProperty(o, fromKey);
2498 if (fromPresent) {
2499 var fromVal = o[fromKey];
2500 o[toKey] = fromVal;
2501 } else {
2502 delete o[toKey];
2503 }
2504 from = from + direction;
2505 to = to + direction;
2506 count = count - 1;
2507 }
2508 return o;
2509 });
2510
2511 // 22.1.3.4 Array.prototype.entries ( )
2512 var nativeArrayIteratorMethods =
2513 ('entries' in Array.prototype && 'next' in [].entries());
2514
2515 define(
2516 Array.prototype, 'entries',
2517 function entries() {
2518 return CreateArrayIterator(this, 'key+value');
2519 }, !nativeArrayIteratorMethods);
2520
2521 // 22.1.3.5 Array.prototype.every ( callbackfn [ , thisArg] )
2522
2523 // 22.1.3.6 Array.prototype.fill (value [ , start [ , end ] ] )
2524 define(
2525 Array.prototype, 'fill',
2526 function fill(value/*, start, end*/) {
2527 var start = arguments[1],
2528 end = arguments[2];
2529
2530 var o = ToObject(this);
2531 var lenVal = o.length;
2532 var len = ToLength(lenVal);
2533 len = max(len, 0);
2534 var relativeStart = ToInteger(start);
2535 var k;
2536 if (relativeStart < 0)
2537 k = max((len + relativeStart), 0);
2538 else
2539 k = min(relativeStart, len);
2540 var relativeEnd;
2541 if (end === undefined)
2542 relativeEnd = len;
2543 else
2544 relativeEnd = ToInteger(end);
2545 var final;
2546 if (relativeEnd < 0)
2547 final = max((len + relativeEnd), 0);
2548 else
2549 final = min(relativeEnd, len);
2550 while (k < final) {
2551 var pk = String(k);
2552 o[pk] = value;
2553 k += 1;
2554 }
2555 return o;
2556 });
2557
2558 // 22.1.3.7 Array.prototype.filter ( callbackfn [ , thisArg ] )
2559
2560 // 22.1.3.8 Array.prototype.find ( predicate [ , thisArg ] )
2561 define(
2562 Array.prototype, 'find',
2563 function find(predicate) {
2564 var o = ToObject(this);
2565 var lenValue = o.length;
2566 var len = ToInteger(lenValue);
2567 if (!IsCallable(predicate)) throw TypeError();
2568 var t = arguments.length > 1 ? arguments[1] : undefined;
2569 var k = 0;
2570 while (k < len) {
2571 var pk = String(k);
2572 var kPresent = HasProperty(o, pk);
2573 if (kPresent) {
2574 var kValue = o[pk];
2575 var testResult = predicate.call(t, kValue, k, o);
2576 if (Boolean(testResult)) {
2577 return kValue;
2578 }
2579 }
2580 ++k;
2581 }
2582 return undefined;
2583 });
2584
2585 // 22.1.3.9 Array.prototype.findIndex ( predicate [ , thisArg ] )
2586 define(
2587 Array.prototype, 'findIndex',
2588 function findIndex(predicate) {
2589 var o = ToObject(this);
2590 var lenValue = o.length;
2591 var len = ToLength(lenValue);
2592 if (!IsCallable(predicate)) throw TypeError();
2593 var t = arguments.length > 1 ? arguments[1] : undefined;
2594 var k = 0;
2595 while (k < len) {
2596 var pk = String(k);
2597 var kPresent = HasProperty(o, pk);
2598 if (kPresent) {
2599 var kValue = o[pk];
2600 var testResult = predicate.call(t, kValue, k, o);
2601 if (Boolean(testResult)) {
2602 return k;
2603 }
2604 }
2605 ++k;
2606 }
2607 return -1;
2608 });
2609
2610 // 22.1.3.10 Array.prototype.forEach ( callbackfn [ , thisArg ] )
2611 // 22.1.3.11 Array.prototype.indexOf ( searchElement [ , fromIndex ] )
2612 // 22.1.3.12 Array.prototype.join (separator)
2613
2614 // 22.1.3.13 Array.prototype.keys ( )
2615 define(
2616 Array.prototype, 'keys',
2617 function keys() {
2618 return CreateArrayIterator(this, 'key');
2619 }, !nativeArrayIteratorMethods);
2620
2621 // 22.1.3.14 Array.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2622 // 22.1.3.15 Array.prototype.map ( callbackfn [ , thisArg ] )
2623 // 22.1.3.16 Array.prototype.pop ( )
2624 // 22.1.3.17 Array.prototype.push ( ...items )
2625 // 22.1.3.18 Array.prototype.reduce ( callbackfn [ , initialValue ] )
2626 // 22.1.3.19 Array.prototype.reduceRight ( callbackfn [ , initialValue ] )
2627 // 22.1.3.20 Array.prototype.reverse ( )
2628 // 22.1.3.21 Array.prototype.shift ( )
2629 // 22.1.3.22 Array.prototype.slice (start, end)
2630 // 22.1.3.23 Array.prototype.some ( callbackfn [ , thisArg ] )
2631 // 22.1.3.24 Array.prototype.sort (comparefn)
2632 // 22.1.3.25 Array.prototype.splice (start, deleteCount , ...items )
2633 // 22.1.3.26 Array.prototype.toLocaleString ( [ reserved1 [ , reserved2 ] ] )
2634 // 22.1.3.27 Array.prototype.toString ( )
2635 // 22.1.3.28 Array.prototype.unshift ( ...items )
2636
2637 // 22.1.3.29 Array.prototype.values ( )
2638 define(
2639 Array.prototype, 'values',
2640 function values() {
2641 return CreateArrayIterator(this, 'value');
2642 }, !nativeArrayIteratorMethods);
2643
2644 // 22.1.3.30 Array.prototype [ @@iterator ] ( )
2645 define(
2646 Array.prototype, $$iterator,
2647 Array.prototype.values
2648 );
2649
2650 // 22.1.3.31 Array.prototype [ @@unscopables ]
2651 // 22.1.4 Properties of Array Instances
2652 // 22.1.4.1 length
2653
2654 // 22.1.5 Array Iterator Objects
2655 function ArrayIterator() {}
2656
2657 // 22.1.5.1 CreateArrayIterator Abstract Operation
2658 function CreateArrayIterator(array, kind) {
2659 var o = ToObject(array);
2660 var iterator = new ArrayIterator;
2661 set_internal(iterator, '[[IteratedObject]]', o);
2662 set_internal(iterator, '[[ArrayIteratorNextIndex]]', 0);
2663 set_internal(iterator, '[[ArrayIterationKind]]', kind);
2664 return iterator;
2665 }
2666
2667 // 22.1.5.2 The %ArrayIteratorPrototype% Object
2668 var $ArrayIteratorPrototype$ = Object.create($IteratorPrototype$);
2669 ArrayIterator.prototype = $ArrayIteratorPrototype$;
2670
2671 // 22.1.5.2.1 %ArrayIteratorPrototype%. next( )
2672 define(
2673 $ArrayIteratorPrototype$, 'next',
2674 function next() {
2675 var o = strict(this);
2676 if (Type(o) !== 'object') throw TypeError();
2677 var a = o['[[IteratedObject]]'],
2678 index = o['[[ArrayIteratorNextIndex]]'],
2679 itemKind = o['[[ArrayIterationKind]]'],
2680 lenValue = a.length,
2681 len = ToUint32(lenValue),
2682 elementKey,
2683 elementValue;
2684 if (itemKind.indexOf('sparse') !== -1) {
2685 var found = false;
2686 while (!found && index < len) {
2687 elementKey = String(index);
2688 found = HasProperty(a, elementKey);
2689 if (!found) {
2690 index += 1;
2691 }
2692 }
2693 }
2694 if (index >= len) {
2695 set_internal(o, '[[ArrayIteratorNextIndex]]', Infinity);
2696 return CreateIterResultObject(undefined, true);
2697 }
2698 elementKey = index;
2699 set_internal(o, '[[ArrayIteratorNextIndex]]', index + 1);
2700 if (itemKind.indexOf('value') !== -1)
2701 elementValue = a[elementKey];
2702 if (itemKind.indexOf('key+value') !== -1)
2703 return CreateIterResultObject([elementKey, elementValue], false);
2704 if (itemKind.indexOf('key') !== -1)
2705 return CreateIterResultObject(elementKey, false);
2706 if (itemKind === 'value')
2707 return CreateIterResultObject(elementValue, false);
2708 throw Error('Internal error');
2709 });
2710
2711 // 22.1.5.2.2 %ArrayIteratorPrototype% [ @@toStringTag ]
2712 define($ArrayIteratorPrototype$, $$toStringTag, 'Array Iterator');
2713
2714 // 22.1.5.3 Properties of Array Iterator Instances
2715
2716
2717 // ---------------------------------------
2718 // 22.2 TypedArray Objects
2719 // ---------------------------------------
2720
2721 // See typedarray.js for TypedArray polyfill
2722
2723 ['Int8Array', 'Uint8Array', 'Uint8ClampedArray',
2724 'Int16Array', 'Uint16Array',
2725 'Int32Array', 'Uint32Array',
2726 'Float32Array', 'Float64Array'].forEach(function ($TypedArrayName$) {
2727 if (!($TypedArrayName$ in global))
2728 return;
2729 var $TypedArray$ = global[$TypedArrayName$];
2730
2731 // 22.2.1 The %TypedArray% Intrinsic Object
2732 // 22.2.1.1 %TypedArray% ( length )
2733 // 22.2.1.2 %TypedArray% ( typedArray )
2734 // 22.2.1.3 %TypedArray% ( object )
2735 // 22.2.1.4 %TypedArray% ( buffer [ , byteOffset [ , length ] ] )
2736 // 22.2.1.5 %TypedArray% ( all other argument combinations )
2737 // 22.2.2 Properties of the %TypedArray% Intrinsic Object
2738
2739 // 22.2.2.1 %TypedArray%.from ( source [ , mapfn [ , thisArg ] ] )
2740 define(
2741 $TypedArray$, 'from',
2742 function from(source) {
2743 var mapfn = arguments[1];
2744 var thisArg = arguments[2];
2745
2746 var c = strict(this);
2747 if (!IsConstructor(c)) throw TypeError();
2748 if (mapfn === undefined) {
2749 var mapping = false;
2750 } else {
2751 if (IsCallable(mapfn)) throw TypeError();
2752 var t = thisArg;
2753 mapping = true;
2754 }
2755 var usingIterator = GetMethod(source, $$iterator);
2756 if (usingIterator !== undefined) {
2757 var iterator = GetIterator(source, usingIterator);
2758 var values = [];
2759 var next = true;
2760 while (next !== false) {
2761 next = IteratorStep(iterator);
2762 if (next !== false) {
2763 var nextValue = IteratorValue(next);
2764 values.push(nextValue);
2765 }
2766 }
2767 var len = values.length;
2768 var newObj = new c(len);
2769 var k = 0;
2770 while (k < len) {
2771 var kValue = values.shift();
2772 if (mapping) {
2773 var mappedValue = mapfn.call(t, kValue);
2774 } else {
2775 mappedValue = kValue;
2776 }
2777 newObj[k] = mappedValue;
2778 ++k;
2779 }
2780 console.assert(values.length === 0);
2781 return newObj;
2782 }
2783 var arrayLike = ToObject(source);
2784 var lenValue = arrayLike.length;
2785 len = ToLength(lenValue);
2786 newObj = new c(len);
2787 k = 0;
2788 while (k < len) {
2789 kValue = arrayLike[k];
2790 if (mapping) {
2791 mappedValue = mapfn.call(t, kValue, k);
2792 } else {
2793 mappedValue = kValue;
2794 }
2795 newObj[k] = mappedValue;
2796 ++k;
2797 }
2798 return newObj;
2799 });
2800
2801 // 22.2.2.2 %TypedArray%.of ( ...items )
2802 define(
2803 $TypedArray$, 'of',
2804 function of() {
2805 var items = arguments;
2806
2807 var len = items.length;
2808 var c = strict(this);
2809 var newObj = new c(len);
2810 var k = 0;
2811 while (k < len) {
2812 newObj[k] = items[k];
2813 ++k;
2814 }
2815 return newObj;
2816 });
2817
2818 // 22.2.2.3 %TypedArray%.prototype
2819 // 22.2.2.4 get %TypedArray% [ @@species ]
2820 // 22.2.3 Properties of the %TypedArrayPrototype% Object
2821 // 22.2.3.1 get %TypedArray%.prototype.buffer
2822 // 22.2.3.2 get %TypedArray%.prototype.byteLength
2823 // 22.2.3.3 get %TypedArray%.prototype.byteOffset
2824 // 22.2.3.4 %TypedArray%.prototype.constructor
2825
2826 // 22.2.3.5 %TypedArray%.prototype.copyWithin (target, start [, end ] )
2827 define($TypedArray$.prototype, 'copyWithin', Array.prototype.copyWithin);
2828
2829 // 22.2.3.6 %TypedArray%.prototype.entries ( )
2830 define($TypedArray$.prototype, 'entries', Array.prototype.entries);
2831
2832 // 22.2.3.7 %TypedArray%.prototype.every ( callbackfn [ , thisArg ] )
2833 define($TypedArray$.prototype, 'every', Array.prototype.every);
2834
2835 // 22.2.3.8 %TypedArray%.prototype.fill (value [ , start [ , end ] ] )
2836 define(
2837 $TypedArray$.prototype, 'fill',
2838 //Array.prototype.fill // Doesn't work in Safari 7
2839 function fill(value/*, start, end*/) {
2840 var start = arguments[1],
2841 end = arguments[2];
2842
2843 var o = ToObject(this);
2844 var lenVal = o.length;
2845 var len = ToLength(lenVal);
2846 len = max(len, 0);
2847 var relativeStart = ToInteger(start);
2848 var k;
2849 if (relativeStart < 0) k = max((len + relativeStart), 0);
2850 else k = min(relativeStart, len);
2851 var relativeEnd;
2852 if (end === undefined) relativeEnd = len;
2853 else relativeEnd = ToInteger(end);
2854 var final;
2855 if (relativeEnd < 0) final = max((len + relativeEnd), 0);
2856 else final = min(relativeEnd, len);
2857 while (k < final) {
2858 var pk = String(k);
2859 o[pk] = value;
2860 k += 1;
2861 }
2862 return o;
2863 });
2864
2865 // 22.2.3.9 %TypedArray%.prototype.filter ( callbackfn [ , thisArg ] )
2866 define(
2867 $TypedArray$.prototype, 'filter',
2868 function filter(callbackfn) {
2869 var thisArg = arguments[1];
2870
2871 var o = ToObject(this);
2872 var lenVal = o.length;
2873 var len = ToLength(lenVal);
2874 if (!IsCallable(callbackfn)) throw TypeError();
2875 var t = thisArg;
2876 var c = o.constructor;
2877 var kept = [];
2878 var k = 0;
2879 var captured = 0;
2880 while (k < len) {
2881 var kValue = o[k];
2882 var selected = callbackfn.call(t, kValue, k, o);
2883 if (selected) {
2884 kept.push(kValue);
2885 ++captured;
2886 }
2887 ++k;
2888 }
2889 var a = new c(captured);
2890 var n = 0;
2891 for (var i = 0; i < kept.length; ++i) {
2892 var e = kept[i];
2893 a[n] = e;
2894 ++n;
2895 }
2896 return a;
2897 });
2898
2899 // 22.2.3.10 %TypedArray%.prototype.find (predicate [ , thisArg ] )
2900 define($TypedArray$.prototype, 'find', Array.prototype.find);
2901
2902 // 22.2.3.11 %TypedArray%.prototype.findIndex ( predicate [ , thisArg ] )
2903 define($TypedArray$.prototype, 'findIndex', Array.prototype.findIndex);
2904
2905 // 22.2.3.12 %TypedArray%.prototype.forEach ( callbackfn [ , thisArg ] )
2906 define($TypedArray$.prototype, 'forEach', Array.prototype.forEach);
2907
2908 // 22.2.3.13 %TypedArray%.prototype.indexOf (searchElement [ , fromIndex ] )
2909 define($TypedArray$.prototype, 'indexOf', Array.prototype.indexOf);
2910
2911 // 22.2.3.14 %TypedArray%.prototype.join ( separator )
2912 define($TypedArray$.prototype, 'join', Array.prototype.join);
2913
2914 // 22.2.3.15 %TypedArray%.prototype.keys ( )
2915 define($TypedArray$.prototype, 'keys', Array.prototype.keys);
2916
2917 // 22.2.3.16 %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] )
2918 define($TypedArray$.prototype, 'lastIndexOf', Array.prototype.lastIndexOf);
2919
2920 // 22.2.3.17 get %TypedArray%.prototype.length
2921
2922 // 22.2.3.18 %TypedArray%.prototype.map ( callbackfn [ , thisArg ] )
2923 define(
2924 $TypedArray$.prototype, 'map',
2925 function map(callbackfn) {
2926 var thisArg = arguments[1];
2927
2928 var o = ToObject(this);
2929 var lenValue = o.length;
2930 var len = ToLength(lenValue);
2931 if (!IsCallable(callbackfn)) throw TypeError();
2932 var t = thisArg;
2933 var a = undefined;
2934 var c = o.constructor;
2935 if (IsConstructor(c))
2936 a = new c(len);
2937 if (a === undefined)
2938 a = new Array(len);
2939 var k = 0;
2940 while (k < len) {
2941 var kPresent = HasProperty(o, k);
2942 if (kPresent) {
2943 var kValue = o[k];
2944 var mappedValue = callbackfn.call(t, kValue, k, o);
2945 a[k] = mappedValue;
2946 }
2947 ++k;
2948 }
2949 return a;
2950 });
2951
2952 // 22.2.3.19 %TypedArray%.prototype.reduce ( callbackfn [, initialValue] )
2953 define($TypedArray$.prototype, 'reduce', Array.prototype.reduce);
2954
2955 // 22.2.3.20 %TypedArray%.prototype.reduceRight ( callbackfn [, initialValue] )
2956 define($TypedArray$.prototype, 'reduceRight', Array.prototype.reduceRight);
2957
2958 // 22.2.3.21 %TypedArray%.prototype.reverse ( )
2959 define($TypedArray$.prototype, 'reverse', Array.prototype.reverse);
2960
2961 // 22.2.3.22 %TypedArray%.prototype.set ( overloaded [ , offset ])
2962 // 22.2.3.22.1 %TypedArray%.prototype.set (array [ , offset ] )
2963 // 22.2.3.22.2 %TypedArray%.prototype.set(typedArray [, offset ] )
2964
2965 // 22.2.3.23 %TypedArray%.prototype.slice ( start, end )
2966 define(
2967 $TypedArray$.prototype, 'slice',
2968 function slice(start, end) {
2969 var o = ToObject(this);
2970 var lenVal = o.length;
2971 var len = ToLength(lenVal);
2972 var relativeStart = ToInteger(start);
2973 var k = (relativeStart < 0) ? max(len + relativeStart, 0) : min(relativeStart, len);
2974 var relativeEnd = (end === undefined) ? len : ToInteger(end);
2975 var final = (relativeEnd < 0) ? max(len + relativeEnd, 0) : min(relativeEnd, len);
2976 var count = final - k;
2977 var c = o.constructor;
2978 if (IsConstructor(c)) {
2979 var a = new c(count);
2980 } else {
2981 throw TypeError();
2982 }
2983 var n = 0;
2984 while (k < final) {
2985 var kValue = o[k];
2986 a[n] = kValue;
2987 ++k;
2988 ++n;
2989 }
2990 return a;
2991 });
2992
2993 // 22.2.3.24 %TypedArray%.prototype.some ( callbackfn [ , thisArg ] )
2994 define($TypedArray$.prototype, 'some', Array.prototype.some);
2995
2996 // 22.2.3.25 %TypedArray%.prototype.sort ( comparefn )
2997 define(
2998 $TypedArray$.prototype, 'sort',
2999 function sort() {
3000 var comparefn = arguments[0];
3001
3002 function sortCompare(x, y) {
3003 console.assert(Type(x) === 'number' && Type(y) === 'number');
3004 if (x !== x && y !== y) return +0;
3005 if (x !== x) return 1;
3006 if (y !== y) return -1;
3007 if (comparefn !== undefined) {
3008 return comparefn(x, y);
3009 }
3010 if (x < y) return -1;
3011 if (x > y) return 1;
3012 return +0;
3013 }
3014 return Array.prototype.sort.call(this, sortCompare);
3015 });
3016
3017 // 22.2.3.26 %TypedArray%.prototype.subarray( [ begin [ , end ] ] )
3018 // 22.2.3.27 %TypedArray%.prototype.toLocaleString ([ reserved1 [ , reserved2 ] ])
3019 // 22.2.3.28 %TypedArray%.prototype.toString ( )
3020
3021 // 22.2.3.29 %TypedArray%.prototype.values ( )
3022 define($TypedArray$.prototype, 'values', Array.prototype.values);
3023
3024 // 22.2.3.30 %TypedArray%.prototype [ @@iterator ] ( )
3025 define(
3026 $TypedArray$.prototype, $$iterator,
3027 $TypedArray$.prototype.values
3028 );
3029
3030 // 22.2.3.31 get %TypedArray%.prototype [ @@toStringTag ]
3031 define($TypedArray$.prototype, $$toStringTag, $TypedArrayName$);
3032
3033 // 22.2.4 The TypedArray Constructors
3034 // 22.2.4.1TypedArray( ... argumentsList)
3035 // 22.2.5 Properties of the TypedArray Constructors
3036 // 22.2.5.1 TypedArray.BYTES_PER_ELEMENT
3037 // 22.2.5.2 TypedArray.prototype
3038 // 22.2.6 Properties of TypedArray Prototype Objects
3039 // 22.2.6.1 TypedArray.prototype.BYTES_PER_ELEMENT
3040 // 22.2.6.2 TypedArray.prototype.constructor
3041 // 22.2.7 Properties of TypedArray Instances
3042 });
3043
3044 // ---------------------------------------
3045 // 23 Keyed Collection
3046 // ---------------------------------------
3047
3048 // ---------------------------------------
3049 // 23.1 Map Objects
3050 // ---------------------------------------
3051
3052 (function() {
3053 // 23.1.1 The Map Constructor
3054
3055 // 23.1.1.1 Map ( [ iterable ] )
3056 /** @constructor */
3057 function Map(/*iterable*/) {
3058 var map = strict(this);
3059 var iterable = arguments[0];
3060
3061 if (Type(map) !== 'object') throw TypeError();
3062 if ('[[MapData]]' in map) throw TypeError();
3063
3064 if (iterable !== undefined) {
3065 var adder = map['set'];
3066 if (!IsCallable(adder)) throw TypeError();
3067 var iter = GetIterator(ToObject(iterable));
3068 }
3069 set_internal(map, '[[MapData]]', { keys: [], values: [] });
3070 if (iter === undefined) return map;
3071 while (true) {
3072 var next = IteratorStep(iter);
3073 if (next === false)
3074 return map;
3075 var nextItem = IteratorValue(next);
3076 if (Type(nextItem) !== 'object') throw TypeError();
3077 var k = nextItem[0];
3078 var v = nextItem[1];
3079 adder.call(map, k, v);
3080 }
3081
3082 return map;
3083 }
3084
3085 if (!('Map' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3086 (function() { try { new global.Map([]); return false; } catch (_) { return true; } }()) ||
3087 (function() { try { return !new global.Map().entries().next; } catch (_) { return true; } }()) ||
3088 (new global.Map([['a', 1]]).size !== 1))
3089 global.Map = Map;
3090
3091
3092 function MapDataIndexOf(mapData, key) {
3093 var i;
3094 if (key === key) return mapData.keys.indexOf(key);
3095 // Slow case for NaN
3096 for (i = 0; i < mapData.keys.length; i += 1)
3097 if (SameValueZero(mapData.keys[i], key)) return i;
3098 return -1;
3099 }
3100
3101 // 23.1.1.2 new Map ( ... argumentsList )
3102 // 23.1.2 Properties of the Map Constructor
3103 // 23.1.2.1 Map.prototype
3104 var $MapPrototype$ = {};
3105 Map.prototype = $MapPrototype$;
3106
3107 // 23.1.2.2 get Map [ @@species ]
3108
3109 // 23.1.3 Properties of the Map Prototype Object
3110 // 23.1.3.1 Map.prototype.clear ()
3111 define(
3112 Map.prototype, 'clear',
3113 function clear() {
3114 var m = strict(this);
3115 if (Type(m) !== 'object') throw TypeError();
3116 if (!('[[MapData]]' in m)) throw TypeError();
3117 if (m['[[MapData]]'] === undefined) throw TypeError();
3118 var entries = m['[[MapData]]'];
3119 entries.keys.length = 0;
3120 entries.values.length = 0;
3121 return undefined;
3122 });
3123
3124 // 23.1.3.2 Map.prototype.constructor
3125
3126 // 23.1.3.3 Map.prototype.delete ( key )
3127 define(
3128 Map.prototype, 'delete',
3129 function delete_(key) {
3130 var m = strict(this);
3131 if (Type(m) !== 'object') throw TypeError();
3132 if (!('[[MapData]]' in m)) throw TypeError();
3133 if (m['[[MapData]]'] === undefined) throw TypeError();
3134 var entries = m['[[MapData]]'];
3135 var i = MapDataIndexOf(entries, key);
3136 if (i < 0) return false;
3137 entries.keys[i] = empty;
3138 entries.values[i] = empty;
3139 return true;
3140 });
3141
3142 // 23.1.3.4 Map.prototype.entries ( )
3143 define(
3144 Map.prototype, 'entries',
3145 function entries() {
3146 var m = strict(this);
3147 if (Type(m) !== 'object') throw TypeError();
3148 return CreateMapIterator(m, 'key+value');
3149 });
3150
3151 // 23.1.3.5 Map.prototype.forEach ( callbackfn [ , thisArg ] )
3152 define(
3153 Map.prototype, 'forEach',
3154 function forEach(callbackfn /*, thisArg*/) {
3155 var thisArg = arguments[1];
3156
3157 var m = strict(this);
3158 if (Type(m) !== 'object') throw TypeError();
3159 if (!('[[MapData]]' in m)) throw TypeError();
3160 if (m['[[MapData]]'] === undefined) throw TypeError();
3161 var entries = m['[[MapData]]'];
3162
3163 if (!IsCallable(callbackfn)) {
3164 throw TypeError('First argument to forEach is not callable.');
3165 }
3166 for (var i = 0; i < entries.keys.length; ++i) {
3167 if (entries.keys[i] !== empty) {
3168 callbackfn.call(thisArg, entries.values[i], entries.keys[i], m);
3169 }
3170 }
3171 return undefined;
3172 });
3173
3174 // 23.1.3.6 Map.prototype.get ( key )
3175 define(
3176 Map.prototype, 'get',
3177 function get(key) {
3178 var m = strict(this);
3179 if (Type(m) !== 'object') throw TypeError();
3180 if (!('[[MapData]]' in m)) throw TypeError();
3181 if (m['[[MapData]]'] === undefined) throw TypeError();
3182 var entries = m['[[MapData]]'];
3183 var i = MapDataIndexOf(entries, key);
3184 if (i >= 0) return entries.values[i];
3185 return undefined;
3186 });
3187
3188 // 23.1.3.7 Map.prototype.has ( key )
3189 define(
3190 Map.prototype, 'has',
3191 function has(key) {
3192 var m = strict(this);
3193 if (Type(m) !== 'object') throw TypeError();
3194 if (!('[[MapData]]' in m)) throw TypeError();
3195 if (m['[[MapData]]'] === undefined) throw TypeError();
3196 var entries = m['[[MapData]]'];
3197 if (MapDataIndexOf(entries, key) >= 0) return true;
3198 return false;
3199 });
3200
3201 // 23.1.3.8 Map.prototype.keys ( )
3202 define(
3203 Map.prototype, 'keys',
3204 function keys() {
3205 var m = strict(this);
3206 if (Type(m) !== 'object') throw TypeError();
3207 return CreateMapIterator(m, 'key');
3208 });
3209
3210 // 23.1.3.9 Map.prototype.set ( key , value )
3211 define(
3212 Map.prototype, 'set',
3213 function set(key, value) {
3214 var m = strict(this);
3215 if (Type(m) !== 'object') throw TypeError();
3216 if (!('[[MapData]]' in m)) throw TypeError();
3217 if (m['[[MapData]]'] === undefined) throw TypeError();
3218 var entries = m['[[MapData]]'];
3219 var i = MapDataIndexOf(entries, key);
3220 if (i < 0) i = entries.keys.length;
3221 if (SameValue(key, -0)) key = 0;
3222 entries.keys[i] = key;
3223 entries.values[i] = value;
3224 return m;
3225 });
3226
3227 // 23.1.3.10 get Map.prototype.size
3228 Object.defineProperty(
3229 Map.prototype, 'size', {
3230 get: function() {
3231 var m = strict(this);
3232 if (Type(m) !== 'object') throw TypeError();
3233 if (!('[[MapData]]' in m)) throw TypeError();
3234 if (m['[[MapData]]'] === undefined) throw TypeError();
3235 var entries = m['[[MapData]]'];
3236 var count = 0;
3237 for (var i = 0; i < entries.keys.length; ++i) {
3238 if (entries.keys[i] !== empty)
3239 count = count + 1;
3240 }
3241 return count;
3242 }
3243 });
3244
3245 // 23.1.3.11 Map.prototype.values ( )
3246 define(
3247 Map.prototype, 'values',
3248 function values() {
3249 var m = strict(this);
3250 if (Type(m) !== 'object') throw TypeError();
3251 return CreateMapIterator(m, 'value');
3252 });
3253
3254 // 23.1.3.12 Map.prototype [ @@iterator ]( )
3255 define(
3256 Map.prototype, $$iterator,
3257 function() {
3258 var m = strict(this);
3259 if (Type(m) !== 'object') throw TypeError();
3260 return CreateMapIterator(m, 'key+value');
3261 });
3262
3263 // 23.1.3.13 Map.prototype [ @@toStringTag ]
3264 define(global.Map.prototype, $$toStringTag, 'Map');
3265
3266 // 23.1.4 Properties of Map Instances
3267 // 23.1.5 Map Iterator Objects
3268
3269 /** @constructor */
3270 function MapIterator() {}
3271
3272 // 23.1.5.1 CreateMapIterator Abstract Operation
3273 function CreateMapIterator(map, kind) {
3274 if (Type(map) !== 'object') throw TypeError();
3275 if (!('[[MapData]]' in map)) throw TypeError();
3276 if (map['[[MapData]]'] === undefined) throw TypeError();
3277 var iterator = new MapIterator;
3278 set_internal(iterator, '[[Map]]', map);
3279 set_internal(iterator, '[[MapNextIndex]]', 0);
3280 set_internal(iterator, '[[MapIterationKind]]', kind);
3281 return iterator;
3282 }
3283
3284 // 23.1.5.2 The %MapIteratorPrototype% Object
3285 var $MapIteratorPrototype$ = Object.create($IteratorPrototype$);
3286 MapIterator.prototype = $MapIteratorPrototype$;
3287
3288 // 23.1.5.2.1 %MapIteratorPrototype%.next ( )
3289 define(
3290 $MapIteratorPrototype$, 'next',
3291 function next() {
3292 var o = strict(this);
3293 if (Type(o) !== 'object') throw TypeError();
3294 var m = o['[[Map]]'],
3295 index = o['[[MapNextIndex]]'],
3296 itemKind = o['[[MapIterationKind]]'],
3297 entries = m['[[MapData]]'];
3298 while (index < entries.keys.length) {
3299 var e = {key: entries.keys[index], value: entries.values[index]};
3300 index = index += 1;
3301 set_internal(o, '[[MapNextIndex]]', index);
3302 if (e.key !== empty) {
3303 if (itemKind === 'key') {
3304 return CreateIterResultObject(e.key, false);
3305 } else if (itemKind === 'value') {
3306 return CreateIterResultObject(e.value, false);
3307 } else {
3308 return CreateIterResultObject([e.key, e.value], false);
3309 }
3310 }
3311 }
3312 return CreateIterResultObject(undefined, true);
3313 });
3314
3315 // 23.1.5.2.2 %MapIteratorPrototype% [ @@toStringTag ]
3316 define($MapIteratorPrototype$, $$toStringTag, 'Map Iterator');
3317
3318 // 23.1.5.3 Properties of Map Iterator Instances
3319 }());
3320
3321 // ---------------------------------------
3322 // 23.2 Set Objects
3323 // ---------------------------------------
3324
3325 (function() {
3326 // 23.2.1 The Set Constructor
3327 // 23.2.1.1 Set ( [ iterable ] )
3328
3329 /** @constructor */
3330 function Set(/*iterable*/) {
3331 var set = strict(this);
3332 var iterable = arguments[0];
3333
3334 if (Type(set) !== 'object') throw TypeError();
3335 if ('[[SetData]]' in set) throw TypeError();
3336
3337 if (iterable !== undefined) {
3338 var adder = set['add'];
3339 if (!IsCallable(adder)) throw TypeError();
3340 var iter = GetIterator(ToObject(iterable));
3341 }
3342 set_internal(set, '[[SetData]]', []);
3343 if (iter === undefined) return set;
3344 while (true) {
3345 var next = IteratorStep(iter);
3346 if (next === false)
3347 return set;
3348 var nextValue = IteratorValue(next);
3349 adder.call(set, nextValue);
3350 }
3351
3352 return set;
3353 }
3354
3355 if (!('Set' in global) || OVERRIDE_NATIVE_FOR_TESTING ||
3356 (function() { try { return !new global.Set().entries().next; } catch (_) { return true; } }()) ||
3357 (new global.Set([1]).size !== 1))
3358 global.Set = Set;
3359
3360 function SetDataIndexOf(setData, key) {
3361 var i;
3362 if (key === key)
3363 return setData.indexOf(key);
3364 // Slow case for NaN
3365 for (i = 0; i < setData.length; i += 1)
3366 if (SameValueZero(setData[i], key)) return i;
3367 return -1;
3368 }
3369
3370 // 23.2.1.2 new Set ( ...argumentsList )
3371 // 23.2.2 Properties of the Set Constructor
3372
3373 // 23.2.2.1 Set.prototype
3374 var $SetPrototype$ = {};
3375 Set.prototype = $SetPrototype$;
3376
3377 // 23.2.2.2 get Set [ @@species ]
3378 // 23.2.3 Properties of the Set Prototype Object
3379
3380 // 23.2.3.1 Set.prototype.add (value )
3381 define(
3382 Set.prototype, 'add',
3383 function add(value) {
3384 var s = strict(this);
3385 if (Type(s) !== 'object') throw TypeError();
3386 if (!('[[SetData]]' in s)) throw TypeError();
3387 if (s['[[SetData]]'] === undefined) throw TypeError();
3388 if (SameValue(value, -0)) value = 0;
3389 var entries = s['[[SetData]]'];
3390 var i = SetDataIndexOf(entries, value);
3391 if (i < 0) i = s['[[SetData]]'].length;
3392 s['[[SetData]]'][i] = value;
3393
3394 return s;
3395 });
3396
3397 // 23.2.3.2 Set.prototype.clear ()
3398 define(
3399 Set.prototype, 'clear',
3400 function clear() {
3401 var s = strict(this);
3402 if (Type(s) !== 'object') throw TypeError();
3403 if (!('[[SetData]]' in s)) throw TypeError();
3404 if (s['[[SetData]]'] === undefined) throw TypeError();
3405 var entries = s['[[SetData]]'];
3406 entries.length = 0;
3407 return undefined;
3408 });
3409
3410 // 23.2.3.3 Set.prototype.constructor
3411 // 23.2.3.4 Set.prototype.delete ( value )
3412 define(
3413 Set.prototype, 'delete',
3414 function delete_(value) {
3415 var s = strict(this);
3416 if (Type(s) !== 'object') throw TypeError();
3417 if (!('[[SetData]]' in s)) throw TypeError();
3418 if (s['[[SetData]]'] === undefined) throw TypeError();
3419 var entries = s['[[SetData]]'];
3420 var i = SetDataIndexOf(entries, value);
3421 if (i < 0) return false;
3422 entries[i] = empty;
3423 return true;
3424 });
3425
3426 // 23.2.3.5 Set.prototype.entries ( )
3427 define(
3428 Set.prototype, 'entries',
3429 function entries() {
3430 var s = strict(this);
3431 if (Type(s) !== 'object') throw TypeError();
3432 return CreateSetIterator(s, 'key+value');
3433 });
3434
3435 // 23.2.3.6 Set.prototype.forEach ( callbackfn [ , thisArg ] )
3436 define(
3437 Set.prototype, 'forEach',
3438 function forEach(callbackfn/*, thisArg*/) {
3439 var thisArg = arguments[1];
3440
3441 var s = strict(this);
3442 if (Type(s) !== 'object') throw TypeError();
3443 if (!('[[SetData]]' in s)) throw TypeError();
3444 if (s['[[SetData]]'] === undefined) throw TypeError();
3445 var entries = s['[[SetData]]'];
3446
3447 if (!IsCallable(callbackfn)) {
3448 throw TypeError('First argument to forEach is not callable.');
3449 }
3450 for (var i = 0; i < entries.length; ++i) {
3451 if (entries[i] !== empty) {
3452 callbackfn.call(thisArg, entries[i], entries[i], s);
3453 }
3454 }
3455 });
3456
3457 // 23.2.3.7 Set.prototype.has ( value )
3458 define(
3459 Set.prototype, 'has',
3460 function has(key) {
3461 var s = strict(this);
3462 if (Type(s) !== 'object') throw TypeError();
3463 if (!('[[SetData]]' in s)) throw TypeError();
3464 if (s['[[SetData]]'] === undefined) throw TypeError();
3465 var entries = s['[[SetData]]'];
3466 return SetDataIndexOf(entries, key) !== -1;
3467 });
3468
3469 // 23.2.3.8 Set.prototype.keys ( )
3470 // See Set.prototype.values
3471
3472 // 23.2.3.9 get Set.prototype.size
3473 Object.defineProperty(
3474 Set.prototype, 'size', {
3475 get: function() {
3476 var s = strict(this);
3477 if (Type(s) !== 'object') throw TypeError();
3478 if (!('[[SetData]]' in s)) throw TypeError();
3479 if (s['[[SetData]]'] === undefined) throw TypeError();
3480 var entries = s['[[SetData]]'];
3481 var count = 0;
3482 for (var i = 0; i < entries.length; ++i) {
3483 if (entries[i] !== empty)
3484 count = count + 1;
3485 }
3486 return count;
3487 }
3488 });
3489
3490 // 23.2.3.10 Set.prototype.values ( )
3491 define(
3492 Set.prototype, 'values',
3493 function values() {
3494 var s = strict(this);
3495 if (Type(s) !== 'object') throw TypeError();
3496 return CreateSetIterator(s, 'value');
3497 });
3498 // NOTE: function name is still 'values':
3499 Set.prototype.keys = Set.prototype.values;
3500
3501 // 23.2.3.11 Set.prototype [@@iterator ] ( )
3502 define(
3503 Set.prototype, $$iterator,
3504 function() {
3505 var s = strict(this);
3506 if (Type(s) !== 'object') throw TypeError();
3507 return CreateSetIterator(s);
3508 });
3509
3510 // 23.2.3.12 Set.prototype [ @@toStringTag ]
3511 define(global.Set.prototype, $$toStringTag, 'Set');
3512
3513 // 23.2.4 Properties of Set Instances
3514 // 23.2.5 Set Iterator Objects
3515 /** @constructor */
3516 function SetIterator() {}
3517
3518 // 23.2.5.1 CreateSetIterator Abstract Operation
3519 function CreateSetIterator(set, kind) {
3520 if (Type(set) !== 'object') throw TypeError();
3521 if (!('[[SetData]]' in set)) throw TypeError();
3522 if (set['[[SetData]]'] === undefined) throw TypeError();
3523 var iterator = new SetIterator;
3524 set_internal(iterator, '[[IteratedSet]]', set);
3525 set_internal(iterator, '[[SetNextIndex]]', 0);
3526 set_internal(iterator, '[[SetIterationKind]]', kind);
3527 return iterator;
3528 }
3529
3530 // 23.2.5.2 The %SetIteratorPrototype% Object
3531 var $SetIteratorPrototype$ = Object.create($IteratorPrototype$);
3532 SetIterator.prototype = $SetIteratorPrototype$;
3533
3534 // 23.2.5.2.1 %SetIteratorPrototype%.next( )
3535 define(
3536 $SetIteratorPrototype$, 'next',
3537 function next() {
3538 var o = strict(this);
3539 if (Type(o) !== 'object') throw TypeError();
3540 var s = o['[[IteratedSet]]'],
3541 index = o['[[SetNextIndex]]'],
3542 itemKind = o['[[SetIterationKind]]'],
3543 entries = s['[[SetData]]'];
3544 while (index < entries.length) {
3545 var e = entries[index];
3546 index = index += 1;
3547 set_internal(o, '[[SetNextIndex]]', index);
3548 if (e !== empty) {
3549 if (itemKind === 'key+value')
3550 return CreateIterResultObject([e, e], false);
3551 return CreateIterResultObject(e, false);
3552 }
3553 }
3554 return CreateIterResultObject(undefined, true);
3555 });
3556
3557 // 23.2.5.2.2 %SetIteratorPrototype% [ @@toStringTag ]
3558 define($SetIteratorPrototype$, $$toStringTag, 'Set Iterator');
3559
3560 // 23.2.5.3 Properties of Set Iterator Instances
3561
3562 }());
3563
3564 // ---------------------------------------
3565 // 23.3 WeakMap Objects
3566 // ---------------------------------------
3567
3568 (function() {
3569 // 23.3.1 The WeakMap Constructor
3570 // 23.3.1.1 WeakMap ( [ iterable ] )
3571 /** @constructor */
3572 function WeakMap(/*iterable*/) {
3573 var map = strict(this);
3574 var iterable = arguments[0];
3575
3576 if (Type(map) !== 'object') throw TypeError();
3577 if ('[[WeakMapData]]' in map) throw TypeError();
3578
3579 if (iterable !== undefined) {
3580 var adder = map['set'];
3581 if (!IsCallable(adder)) throw TypeError();
3582 var iter = GetIterator(ToObject(iterable));
3583 }
3584 set_internal(map, '[[WeakMapData]]', new EphemeronTable);
3585 if (iter === undefined) return map;
3586 while (true) {
3587 var next = IteratorStep(iter);
3588 if (next === false)
3589 return map;
3590 var nextValue = IteratorValue(next);
3591 if (Type(nextValue) !== 'object') throw TypeError();
3592 var k = nextValue[0];
3593 var v = nextValue[1];
3594 adder.call(map, k, v);
3595 }
3596
3597 return map;
3598 }
3599
3600 if (!('WeakMap' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3601 global.WeakMap = WeakMap;
3602
3603 // 23.3.2 Properties of the WeakMap Constructor
3604 // 23.3.2.1 WeakMap.prototype
3605 var $WeakMapPrototype$ = {};
3606 WeakMap.prototype = $WeakMapPrototype$;
3607
3608
3609
3610 // 23.3.2.2 WeakMap[ @@create ] ( )
3611 // 23.3.3 Properties of the WeakMap Prototype Object
3612
3613 // 23.3.3.1 WeakMap.prototype.constructor
3614
3615 // 23.3.3.2 WeakMap.prototype.delete ( key )
3616 define(
3617 WeakMap.prototype, 'delete',
3618 function delete_(key) {
3619 var M = strict(this);
3620 if (Type(M) !== 'object') throw TypeError();
3621 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3622 if (Type(key) !== 'object') throw TypeError('Expected object');
3623 return M['[[WeakMapData]]'].remove(key);
3624 });
3625
3626 // 23.3.3.3 WeakMap.prototype.get ( key )
3627 define(
3628 WeakMap.prototype, 'get',
3629 function get(key, defaultValue) {
3630 var M = strict(this);
3631 if (Type(M) !== 'object') throw TypeError();
3632 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3633 if (Type(key) !== 'object') throw TypeError('Expected object');
3634 return M['[[WeakMapData]]'].get(key, defaultValue);
3635 });
3636
3637 // 23.3.3.4 WeakMap.prototype.has ( key )
3638 define(
3639 WeakMap.prototype, 'has',
3640 function has(key) {
3641 var M = strict(this);
3642 if (Type(M) !== 'object') throw TypeError();
3643 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3644 if (Type(key) !== 'object') throw TypeError('Expected object');
3645 return M['[[WeakMapData]]'].has(key);
3646 });
3647
3648 // 23.3.3.5 WeakMap.prototype.set ( key , value )
3649 define(
3650 WeakMap.prototype, 'set',
3651 function set(key, value) {
3652 var M = strict(this);
3653 if (Type(M) !== 'object') throw TypeError();
3654 if (M['[[WeakMapData]]'] === undefined) throw TypeError();
3655 if (Type(key) !== 'object') throw TypeError('Expected object');
3656 M['[[WeakMapData]]'].set(key, value);
3657 return M;
3658 });
3659
3660 // 23.3.3.6 WeakMap.prototype [ @@toStringTag ]
3661 define(global.WeakMap.prototype, $$toStringTag, 'WeakMap');
3662
3663 // 23.3.4 Properties of WeakMap Instances
3664
3665 // Polyfills for incomplete native implementations:
3666 (function() {
3667 var wm = new global.WeakMap();
3668 var orig = global.WeakMap.prototype.set;
3669 define(global.WeakMap.prototype, 'set', function set() {
3670 orig.apply(this, arguments);
3671 return this;
3672 }, wm.set({}, 0) !== wm);
3673 }());
3674 }());
3675
3676 // ---------------------------------------
3677 // 23.4 WeakSet Objects
3678 // ---------------------------------------
3679
3680 (function() {
3681 // 23.4.1 The WeakSet Constructor
3682 // 23.4.1.1 WeakSet ( [ iterable ] )
3683 /** @constructor */
3684 function WeakSet(/*iterable*/) {
3685 var set = strict(this);
3686 var iterable = arguments[0];
3687
3688 if (Type(set) !== 'object') throw TypeError();
3689 if ('[[WeakSetData]]' in set) throw TypeError();
3690
3691 if (iterable !== undefined) {
3692 var adder = set['add'];
3693 if (!IsCallable(adder)) throw TypeError();
3694 var iter = GetIterator(ToObject(iterable));
3695 }
3696 set_internal(set, '[[WeakSetData]]', new EphemeronTable);
3697 if (iter === undefined) return set;
3698 while (true) {
3699 var next = IteratorStep(iter);
3700 if (next === false)
3701 return set;
3702 var nextValue = IteratorValue(next);
3703 adder.call(set, nextValue);
3704 }
3705
3706 return set;
3707 }
3708
3709 if (!('WeakSet' in global) || OVERRIDE_NATIVE_FOR_TESTING)
3710 global.WeakSet = WeakSet;
3711
3712 // 23.4.2 Properties of the WeakSet Constructor
3713 // 23.4.2.1 WeakSet.prototype
3714 var $WeakSetPrototype$ = {};
3715 WeakSet.prototype = $WeakSetPrototype$;
3716
3717 // 23.4.3 Properties of the WeakSet Prototype Object
3718 // 23.4.3.1 WeakSet.prototype.add (value )
3719 define(
3720 WeakSet.prototype, 'add',
3721 function add(value) {
3722 var S = strict(this);
3723 if (Type(S) !== 'object') throw TypeError();
3724 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3725 if (Type(value) !== 'object') throw TypeError('Expected object');
3726 S['[[WeakSetData]]'].set(value, true);
3727 return S;
3728 });
3729
3730 // 23.4.3.2 WeakSet.prototype.constructor
3731 // 23.4.3.3 WeakSet.prototype.delete ( value )
3732 define(
3733 WeakSet.prototype, 'delete',
3734 function delete_(value) {
3735 var S = strict(this);
3736 if (Type(S) !== 'object') throw TypeError();
3737 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3738 if (Type(value) !== 'object') throw TypeError('Expected object');
3739 return S['[[WeakSetData]]'].remove(value);
3740 });
3741
3742 // 23.4.3.4 WeakSet.prototype.has ( value )
3743 define(
3744 WeakSet.prototype, 'has',
3745 function has(key) {
3746 var S = strict(this);
3747 if (Type(S) !== 'object') throw TypeError();
3748 if (S['[[WeakSetData]]'] === undefined) throw TypeError();
3749 if (Type(key) !== 'object') throw TypeError('Expected object');
3750 return S['[[WeakSetData]]'].has(key);
3751 });
3752
3753 // 23.4.3.5 WeakSet.prototype [ @@toStringTag ]
3754 define(global.WeakSet.prototype, $$toStringTag, 'WeakSet');
3755
3756 // 23.4.4 Properties of WeakSet Instances
3757
3758 // Polyfills for incomplete native implementations:
3759 (function() {
3760 var ws = new global.WeakSet();
3761 var orig = global.WeakSet.prototype.add;
3762 define(global.WeakSet.prototype, 'add', function add() {
3763 orig.apply(this, arguments);
3764 return this;
3765 }, ws.add({}) !== ws);
3766 }());
3767 }());
3768
3769 // ---------------------------------------
3770 // 24 Structured Data
3771 // ---------------------------------------
3772
3773 // ---------------------------------------
3774 // 24.1 ArrayBuffer Objects
3775 // ---------------------------------------
3776
3777 // See typedarray.js for TypedArray polyfill
3778
3779 (function() {
3780 if (!('ArrayBuffer' in global))
3781 return;
3782
3783 // 24.1.1 Abstract Operations For ArrayBuffer Objects
3784 // 24.1.1.1 AllocateArrayBuffer( constructor, byteLength )
3785 // 24.1.1.2 IsDetachedBuffer( arrayBuffer )
3786 // 24.1.1.3 DetachArrayBuffer( arrayBuffer )
3787 // 24.1.1.4 CloneArrayBuffer( srcBuffer, srcByteOffset [, cloneConstructor] )
3788 // 24.1.1.5 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isLittleEndian )
3789 // 24.1.1.6 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isLittleEndian )
3790 // 24.1.2 The ArrayBuffer Constructor
3791 // 24.1.2.1 ArrayBuffer( length )
3792 // 24.1.3 Properties of the ArrayBuffer Constructor
3793
3794 // 24.1.3.1 ArrayBuffer.isView ( arg )
3795 define(
3796 ArrayBuffer, 'isView',
3797 function isView(arg) {
3798 if (Type(arg) !== 'object') return false;
3799 if ('buffer' in arg && arg.buffer instanceof ArrayBuffer) return true;
3800 return false;
3801 });
3802
3803 // 24.1.3.2 ArrayBuffer.prototype
3804 // 24.1.3.3 get ArrayBuffer [ @@species ]
3805 // 24.1.4 Properties of the ArrayBuffer Prototype Object
3806 // 24.1.4.1 get ArrayBuffer.prototype.byteLength
3807 // 24.1.4.2 ArrayBuffer.prototype.constructor
3808 // 24.1.4.3 ArrayBuffer.prototype.slice ( start , end)
3809
3810 // 24.1.4.4 ArrayBuffer.prototype [ @@toStringTag ]
3811 define(ArrayBuffer.prototype, $$toStringTag, 'ArrayBuffer');
3812
3813 // 24.1.5 Properties of the ArrayBuffer Instances
3814 }());
3815
3816 // ---------------------------------------
3817 // 24.2 DataView Objects
3818 // ---------------------------------------
3819
3820 // See typedarray.js for TypedArray polyfill
3821
3822 (function() {
3823 if (!('DataView' in global))
3824 return;
3825
3826 // 24.2.1 Abstract Operations For DataView Objects
3827 // 24.2.1.1 GetViewValue(view, requestIndex, isLittleEndian, type)
3828 // 24.2.1.2 SetViewValue(view, requestIndex, isLittleEndian, type, value)
3829 // 24.2.2 The DataView Constructor
3830 // 24.2.2.1 DataView (buffer [ , byteOffset [ , byteLength ] ] )
3831 // 24.2.3 Properties of the DataView Constructor
3832 // 24.2.3.1 DataView.prototype
3833 // 24.2.4 Properties of the DataView Prototype Object
3834 // 24.2.4.1 get DataView.prototype.buffer
3835 // 24.2.4.2 get DataView.prototype.byteLength
3836 // 24.2.4.3 get DataView.prototype.byteOffset
3837 // 24.2.4.4 DataView.prototype.constructor
3838 // 24.2.4.5 DataView.prototype.getFloat32 ( byteOffset [ , littleEndian ] )
3839 // 24.2.4.6 DataView.prototype.getFloat64 ( byteOffset [ , littleEndian ] )
3840 // 24.2.4.7 DataView.prototype.getInt8 ( byteOffset )
3841 // 24.2.4.8 DataView.prototype.getInt16 ( byteOffset [ , littleEndian ] )
3842 // 24.2.4.9 DataView.prototype.getInt32 ( byteOffset [ , littleEndian ] )
3843 // 24.2.4.10 DataView.prototype.getUint8 ( byteOffset )
3844 // 24.2.4.11 DataView.prototype.getUint16 ( byteOffset [ , littleEndian ] )
3845 // 24.2.4.12 DataView.prototype.getUint32 ( byteOffset [ , littleEndian ] )
3846 // 24.2.4.13 DataView.prototype.setFloat32 ( byteOffset, value [ , littleEndian ] )
3847 // 24.2.4.14 DataView.prototype.setFloat64 ( byteOffset, value [ , littleEndian ] )
3848 // 24.2.4.15 DataView.prototype.setInt8 ( byteOffset, value )
3849 // 24.2.4.16 DataView.prototype.setInt16 ( byteOffset, value [ , littleEndian ] )
3850 // 24.2.4.17 DataView.prototype.setInt32 ( byteOffset, value [ , littleEndian ] )
3851 // 24.2.4.18 DataView.prototype.setUint8 ( byteOffset, value )
3852 // 24.2.4.19 DataView.prototype.setUint16 ( byteOffset, value [ , littleEndian ] )
3853 // 24.2.4.20 DataView.prototype.setUint32 ( byteOffset, value [ , littleEndian ] )
3854
3855 // 24.2.4.21 DataView.prototype[ @@toStringTag ]
3856 define(DataView.prototype, $$toStringTag, 'DataView');
3857
3858 // 24.2.5 Properties of DataView Instances
3859 }());
3860
3861 // ---------------------------------------
3862 // 24.3 The JSON Object
3863 // ---------------------------------------
3864
3865 // 24.3.1 JSON.parse ( text [ , reviver ] )
3866 // 24.3.2 JSON.stringify ( value [ , replacer [ , space ] ] )
3867 // 24.3.3 JSON [ @@toStringTag ]
3868 define(JSON, $$toStringTag, 'JSON');
3869
3870 // ---------------------------------------
3871 // 25.1 Iteration
3872 // ---------------------------------------
3873
3874 // 25.1.1 Common Iteration Interfaces
3875 // 25.1.1.1 The Iterable Interface
3876 // 25.1.1.2 The Iterator Interface
3877 // 25.1.1.3 The IteratorResult Interface
3878
3879 // 25.1.2 The %IteratorPrototype% Object
3880 // Defined earlier, so other prototypes can reference it.
3881 // 25.1.2.1 %IteratorPrototype% [ @@iterator ] ( )
3882 define($IteratorPrototype$, $$iterator, function() {
3883 return this;
3884 });
3885
3886
3887 // ---------------------------------------
3888 // 25.4 Promise Objects
3889 // ---------------------------------------
3890
3891 (function() {
3892 // 25.4 Promise Objects
3893
3894 // 25.4.1 Promise Abstract Operations
3895
3896 // 25.4.1.1 PromiseCapability Records
3897 // 25.4.1.1.1 IfAbruptRejectPromise ( value, capability )
3898
3899 function IfAbruptRejectPromise(value, capability) {
3900 var rejectResult = capability['[[Reject]]'].call(undefined, value);
3901 return capability['[[Promise]]'];
3902 }
3903
3904 // 25.4.1.2 PromiseReaction Records
3905
3906 // 25.4.1.3 CreateResolvingFunctions ( promise )
3907
3908 function CreateResolvingFunctions(promise) {
3909 var alreadyResolved = {'[[value]]': false};
3910 var resolve = PromiseResolveFunction();
3911 set_internal(resolve, '[[Promise]]', promise);
3912 set_internal(resolve, '[[AlreadyResolved]]', alreadyResolved);
3913 var reject = PromiseRejectFunction();
3914 set_internal(reject, '[[Promise]]', promise);
3915 set_internal(reject, '[[AlreadyResolved]]', alreadyResolved);
3916 return { '[[Resolve]]': resolve, '[[Reject]]': reject};
3917 }
3918
3919 // 25.4.1.3.1 Promise Reject Functions
3920
3921 function PromiseRejectFunction() {
3922 var F = function(reason) {
3923 console.assert(Type(F['[[Promise]]']) === 'object');
3924 var promise = F['[[Promise]]'];
3925 var alreadyResolved = F['[[AlreadyResolved]]'];
3926 if (alreadyResolved['[[value]]']) return undefined;
3927 set_internal(alreadyResolved, '[[value]]', true);
3928 return RejectPromise(promise, reason);
3929 };
3930 return F;
3931 }
3932
3933 // 25.4.1.3.2 Promise Resolve Functions
3934
3935 function PromiseResolveFunction() {
3936 var F = function(resolution) {
3937 console.assert(Type(F['[[Promise]]']) === 'object');
3938 var promise = F['[[Promise]]'];
3939 var alreadyResolved = F['[[AlreadyResolved]]'];
3940 if (alreadyResolved['[[value]]']) return undefined;
3941 set_internal(alreadyResolved, '[[value]]', true);
3942
3943 if (SameValue(resolution, promise)) {
3944 var selfResolutionError = TypeError();
3945 return RejectPromise(promise, selfResolutionError);
3946 }
3947 if (Type(resolution) !== 'object')
3948 return FulfillPromise(promise, resolution);
3949 try {
3950 var then = resolution['then'];
3951 } catch(then) {
3952 return RejectPromise(promise, then);
3953 }
3954 if (!IsCallable(then))
3955 return FulfillPromise(promise, resolution);
3956 EnqueueJob('PromiseJobs', PromiseResolveThenableJob, [promise, resolution, then]);
3957 return undefined;
3958 };
3959 return F;
3960 }
3961
3962 // 25.4.1.4 FulfillPromise ( promise, value )
3963
3964 function FulfillPromise(promise, value) {
3965 console.assert(promise['[[PromiseState]]'] === 'pending');
3966 var reactions = promise['[[PromiseFulfillReactions]]'];
3967 set_internal(promise, '[[PromiseResult]]', value);
3968 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
3969 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
3970 set_internal(promise, '[[PromiseState]]', 'fulfilled');
3971 return TriggerPromiseReactions(reactions, value);
3972 }
3973
3974 // 25.4.1.5 NewPromiseCapability ( C )
3975
3976 function NewPromiseCapability(c) {
3977 // To keep Promise hermetic, this doesn't look much like the spec.
3978 return CreatePromiseCapabilityRecord(undefined, c);
3979 }
3980
3981 // 25.4.1.5.1 CreatePromiseCapabilityRecord ( promise, constructor )
3982
3983 function CreatePromiseCapabilityRecord(promise, constructor) {
3984 // To keep Promise hermetic, this doesn't look much like the spec.
3985 console.assert(IsConstructor(constructor));
3986 var promiseCapability = {};
3987 set_internal(promiseCapability, '[[Promise]]', promise);
3988 set_internal(promiseCapability, '[[Resolve]]', undefined);
3989 set_internal(promiseCapability, '[[Reject]]', undefined);
3990 var executor = GetCapabilitiesExecutor();
3991 set_internal(executor, '[[Capability]]', promiseCapability);
3992
3993 // NOTE: Differs from spec; object is constructed here
3994 var constructorResult = promise = new constructor(executor);
3995 set_internal(promiseCapability, '[[Promise]]', promise);
3996
3997 if (!IsCallable(promiseCapability['[[Resolve]]'])) throw TypeError();
3998 if (!IsCallable(promiseCapability['[[Reject]]'])) throw TypeError();
3999 if (Type(constructorResult) === 'object' && !SameValue(promise, constructorResult)) throw TypeError();
4000 return promiseCapability;
4001 }
4002
4003 // 25.4.1.5.2 GetCapabilitiesExecutor Functions
4004
4005 function GetCapabilitiesExecutor() {
4006 var F = function(resolve, reject) {
4007 console.assert(F['[[Capability]]']);
4008 var promiseCapability = F['[[Capability]]'];
4009 if (promiseCapability['[[Resolve]]'] !== undefined) throw TypeError();
4010 if (promiseCapability['[[Reject]]'] !== undefined) throw TypeError();
4011 set_internal(promiseCapability, '[[Resolve]]', resolve);
4012 set_internal(promiseCapability, '[[Reject]]', reject);
4013 return undefined;
4014 };
4015 return F;
4016 }
4017
4018 // 25.4.1.6 IsPromise ( x )
4019
4020 function IsPromise(x) {
4021 if (Type(x) !== 'object') return false;
4022 if (!('[[PromiseState]]' in x)) return false;
4023 if (x['[[PromiseState]]'] === undefined) return false;
4024 return true;
4025 }
4026
4027 // 25.4.1.7 RejectPromise ( promise, reason )
4028
4029 function RejectPromise(promise, reason) {
4030 console.assert(promise['[[PromiseState]]'] === 'pending');
4031 var reactions = promise['[[PromiseRejectReactions]]'];
4032 set_internal(promise, '[[PromiseResult]]', reason);
4033 set_internal(promise, '[[PromiseFulfillReactions]]', undefined);
4034 set_internal(promise, '[[PromiseRejectReactions]]', undefined);
4035 set_internal(promise, '[[PromiseState]]', 'rejected');
4036 return TriggerPromiseReactions(reactions, reason);
4037 }
4038
4039 // 25.4.1.8 TriggerPromiseReactions ( reactions, argument )
4040
4041 function TriggerPromiseReactions(reactions, argument) {
4042 for (var i = 0, len = reactions.length; i < len; ++i)
4043 EnqueueJob('PromiseJobs', PromiseReactionJob, [reactions[i], argument]);
4044 return undefined;
4045 }
4046
4047 // 25.4.2 Promise Jobs
4048
4049 // 25.4.2.1 PromiseReactionJob ( reaction, argument )
4050
4051 function PromiseReactionJob(reaction, argument) {
4052 var promiseCapability = reaction['[[Capabilities]]'];
4053 var handler = reaction['[[Handler]]'];
4054 var handlerResult, status;
4055 try {
4056 if (handler === 'Identity') handlerResult = argument;
4057 else if (handler === 'Thrower') throw argument;
4058 else handlerResult = handler.call(undefined, argument);
4059 } catch (handlerResult) {
4060 status = promiseCapability['[[Reject]]'].call(undefined, handlerResult);
4061 NextJob(status); return;
4062 }
4063 status = promiseCapability['[[Resolve]]'].call(undefined, handlerResult);
4064 NextJob(status);
4065 }
4066
4067 // 25.4.2.2 PromiseResolveThenableJob ( promiseToResolve, thenable, then)
4068
4069 function PromiseResolveThenableJob(promiseToResolve, thenable, then) {
4070 // SPEC BUG: promise vs. promiseToResolve
4071 var resolvingFunctions = CreateResolvingFunctions(promiseToResolve);
4072 try {
4073 var thenCallResult = then.call(thenable, resolvingFunctions['[[Resolve]]'],
4074 resolvingFunctions['[[Reject]]']);
4075 } catch (thenCallResult) {
4076 var status = resolvingFunctions['[[Reject]]'].call(undefined, thenCallResult);
4077 NextJob(status); return;
4078 }
4079 NextJob(thenCallResult);
4080 }
4081
4082 // 25.4.3 The Promise Constructor
4083
4084 // 25.4.3.1 Promise ( executor )
4085
4086 function Promise(executor) {
4087 var config = { configurable: false, enumerable: false, writable: true, value: undefined };
4088 Object.defineProperty(this, '[[PromiseState]]', config);
4089 Object.defineProperty(this, '[[PromiseConstructor]]', config);
4090 Object.defineProperty(this, '[[PromiseResult]]', config);
4091 Object.defineProperty(this, '[[PromiseFulfillReactions]]', config);
4092 Object.defineProperty(this, '[[PromiseRejectReactions]]', config);
4093
4094 var promise = this;
4095 if (Type(promise) !== 'object') throw new TypeError();
4096 if (!('[[PromiseState]]' in promise)) throw TypeError();
4097 if (promise['[[PromiseState]]'] !== undefined) throw TypeError();
4098 if (!IsCallable(executor)) throw TypeError();
4099
4100 set_internal(promise, '[[PromiseConstructor]]', Promise);
4101
4102 return InitializePromise(promise, executor);
4103 }
4104
4105 // 25.4.3.1.1 InitializePromise ( promise, executor )
4106
4107 function InitializePromise(promise, executor) {
4108 console.assert('[[PromiseState]]' in promise);
4109 console.assert(IsCallable(executor));
4110 set_internal(promise, '[[PromiseState]]', 'pending');
4111 set_internal(promise, '[[PromiseFulfillReactions]]', []);
4112 set_internal(promise, '[[PromiseRejectReactions]]', []);
4113 var resolvingFunctions = CreateResolvingFunctions(promise);
4114 try {
4115 var completion = executor.call(undefined, resolvingFunctions['[[Resolve]]'],
4116 resolvingFunctions['[[Reject]]']);
4117 } catch (completion) {
4118 var status = resolvingFunctions['[[Reject]]'].call(undefined, completion);
4119 }
4120 return promise;
4121 }
4122
4123 // 25.4.4 Properties of the Promise Constructor
4124 // 25.4.4.1 Promise.all ( iterable )
4125
4126 define(Promise, 'all', function all(iterable) {
4127 var c = strict(this);
4128 var promiseCapability = NewPromiseCapability(c);
4129 try {
4130 var iterator = GetIterator(iterable);
4131 } catch (value) {
4132 promiseCapability['[[Reject]]'].call(undefined, value);
4133 return promiseCapability['[[Promise]]'];
4134 }
4135 var values = [];
4136 var remainingElementsCount = { value: 1 };
4137 var index = 0;
4138 while (true) {
4139 try {
4140 var next = IteratorStep(iterator);
4141 } catch (value) {
4142 promiseCapability['[[Reject]]'].call(undefined, value);
4143 return promiseCapability['[[Promise]]'];
4144 }
4145 if (!next) {
4146 remainingElementsCount.value -= 1;
4147 if (remainingElementsCount.value === 0) {
4148 var resolveResult = promiseCapability['[[Resolve]]'].apply(undefined, values);
4149
4150
4151 }
4152 return promiseCapability['[[Promise]]'];
4153 }
4154 try {
4155 var nextValue = IteratorValue(next);
4156 } catch (value) {
4157 promiseCapability['[[Reject]]'].call(undefined, value);
4158 return promiseCapability['[[Promise]]'];
4159 }
4160 try {
4161 var nextPromise = c.resolve(nextValue);
4162 } catch (value) {
4163 promiseCapability['[[Reject]]'].call(undefined, value);
4164 return promiseCapability['[[Promise]]'];
4165 }
4166 var resolveElement = PromiseAllResolveElementFunction();
4167 set_internal(resolveElement, '[[AlreadyCalled]]', { value: false });
4168 set_internal(resolveElement, '[[Index]]', index);
4169 set_internal(resolveElement, '[[Values]]', values);
4170 set_internal(resolveElement, '[[Capabilities]]', promiseCapability);
4171 set_internal(resolveElement, '[[RemainingElements]]', remainingElementsCount);
4172 remainingElementsCount.value += 1;
4173 try {
4174 var result = nextPromise.then(resolveElement, promiseCapability['[[Reject]]']);
4175 } catch (value) {
4176 promiseCapability['[[Reject]]'].call(undefined, value);
4177 return promiseCapability['[[Promise]]'];
4178 }
4179 index += 1;
4180 }
4181 });
4182
4183 // 25.4.4.1.1 Promise.all Resolve Element Functions
4184
4185 function PromiseAllResolveElementFunction() {
4186 var F = function(x) {
4187 var alreadyCalled = F['[[AlreadyCalled]]'];
4188 if (alreadyCalled.value) return undefined;
4189 alreadyCalled.value = true;
4190 var index = F['[[Index]]'];
4191 var values = F['[[Values]]'];
4192 var promiseCapability = F['[[Capabilities]]'];
4193 var remainingElementsCount = F['[[RemainingElements]]'];
4194 try {
4195 values[index] = x;
4196 } catch (result) {
4197 promiseCapability['[[Reject]]'].call(undefined, result);
4198 return promiseCapability['[[Promise]]'];
4199 }
4200 remainingElementsCount.value -= 1;
4201 if (remainingElementsCount.value === 0)
4202 return promiseCapability['[[Resolve]]'].call(undefined, values);
4203 return undefined;
4204 };
4205 return F;
4206 }
4207
4208 // 25.4.4.2 Promise.prototype
4209
4210 Promise.prototype = {};
4211
4212 // 25.4.4.3 Promise.race ( iterable )
4213
4214 define(Promise, 'race', function race(iterable) {
4215 var c = strict(this);
4216 var promiseCapability = NewPromiseCapability(c);
4217 try {
4218 var iterator = GetIterator(iterable);
4219 } catch (value) {
4220 promiseCapability['[[Reject]]'].call(undefined, value);
4221 return promiseCapability['[[Promise]]'];
4222 }
4223 while (true) {
4224 try {
4225 var next = IteratorStep(iterator);
4226 } catch (value) {
4227 promiseCapability['[[Reject]]'].call(undefined, value);
4228 return promiseCapability['[[Promise]]'];
4229 }
4230 if (!next) return promiseCapability['[[Promise]]'];
4231 try {
4232 var nextValue = IteratorValue(next);
4233 } catch (value) {
4234 promiseCapability['[[Reject]]'].call(undefined, value);
4235 return promiseCapability['[[Promise]]'];
4236 }
4237 try {
4238 var nextPromise = c.resolve(nextValue);
4239 } catch (value) {
4240 promiseCapability['[[Reject]]'].call(undefined, value);
4241 return promiseCapability['[[Promise]]'];
4242 }
4243 try {
4244 nextPromise.then(promiseCapability['[[Resolve]]'], promiseCapability['[[Reject]]']);
4245 } catch (value) {
4246 promiseCapability['[[Reject]]'].call(undefined, value);
4247 return promiseCapability['[[Promise]]'];
4248 }
4249 }
4250 });
4251
4252 // 25.4.4.4 Promise.reject ( r )
4253
4254 define(Promise, 'reject', function reject(r) {
4255 var c = strict(this);
4256 var promiseCapability = NewPromiseCapability(c);
4257 var rejectResult = promiseCapability['[[Reject]]'].call(undefined, r);
4258 return promiseCapability['[[Promise]]'];
4259 });
4260
4261 // 25.4.4.5 Promise.resolve ( x )
4262
4263 define(Promise, 'resolve', function resolve(x) {
4264 var c = strict(this);
4265 if (IsPromise(x)) {
4266 var constructor = x['[[PromiseConstructor]]'];
4267 if (SameValue(constructor, c)) return x;
4268 }
4269 var promiseCapability = NewPromiseCapability(c);
4270 var resolveResult = promiseCapability['[[Resolve]]'].call(undefined, x);
4271 return promiseCapability['[[Promise]]'];
4272 });
4273
4274 // 25.4.4.6 Promise [ @@create ] ( )
4275 // 25.4.4.6.1 AllocatePromise ( constructor )
4276 // 25.4.5 Properties of the Promise Prototype Object
4277 // 25.4.5.1 Promise.prototype.catch ( onRejected )
4278
4279 define(Promise.prototype, 'catch', function catch_(onRejected) {
4280 var promise = this;
4281 return promise.then(undefined, onRejected);
4282 });
4283
4284 // 25.4.5.2 Promise.prototype.constructor
4285
4286 Promise.prototype.constructor = Promise;
4287
4288 // 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
4289
4290 define(Promise.prototype, 'then', function then(onFulfilled, onRejected) {
4291 var promise = this;
4292 if (!IsPromise(promise)) throw TypeError();
4293 if (!IsCallable(onFulfilled)) onFulfilled = 'Identity';
4294 if (!IsCallable(onRejected)) onRejected = 'Thrower';
4295 var c = promise.constructor;
4296 var promiseCapability = NewPromiseCapability(c);
4297 var fulfillReaction = { '[[Capabilities]]': promiseCapability,
4298 '[[Handler]]': onFulfilled };
4299 var rejectReaction = { '[[Capabilities]]': promiseCapability,
4300 '[[Handler]]': onRejected };
4301 if (promise['[[PromiseState]]'] === 'pending') {
4302 promise['[[PromiseFulfillReactions]]'].push(fulfillReaction);
4303 promise['[[PromiseRejectReactions]]'].push(rejectReaction);
4304 } else if (promise['[[PromiseState]]'] === 'fulfilled') {
4305 var value = promise['[[PromiseResult]]'];
4306 EnqueueJob('PromiseJobs', PromiseReactionJob, [fulfillReaction, value]);
4307 } else if (promise['[[PromiseState]]'] === 'rejected') {
4308 var reason = promise['[[PromiseResult]]'];
4309 EnqueueJob('PromiseJobs', PromiseReactionJob, [rejectReaction, reason]);
4310 }
4311 return promiseCapability['[[Promise]]'];
4312 });
4313
4314 // 25.4.6 Properties of Promise Instances
4315
4316 if (!('Promise' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4317 global.Promise = Promise;
4318
4319 // Patch early Promise.cast vs. Promise.resolve implementations
4320 if ('cast' in global.Promise) global.Promise.resolve = global.Promise.cast;
4321 }());
4322
4323 // 25.4.5.1 Promise.prototype [ @@toStringTag ]
4324 define(Promise.prototype, $$toStringTag, 'Promise');
4325
4326 // ---------------------------------------
4327 // 26 Reflection
4328 // ---------------------------------------
4329
4330 (function() {
4331 // 26.1 The Reflect Object
4332 if (!('Reflect' in global) || OVERRIDE_NATIVE_FOR_TESTING)
4333 global.Reflect = {};
4334
4335 // 26.1.1 Reflect.apply ( target, thisArgument, argumentsList )
4336 define(
4337 Reflect, 'apply',
4338 function apply(target, thisArgument, argumentsList) {
4339 if (!IsCallable(target)) throw TypeError();
4340 return Function.prototype.apply.call(target, thisArgument, argumentsList);
4341 });
4342
4343 // 26.1.2 Reflect.construct ( target, argumentsList [, newTarget] )
4344 define(
4345 Reflect, 'construct',
4346 function construct(target, argumentsList) {
4347 return __cons(target, argumentsList);
4348 });
4349
4350 // 26.1.3 Reflect.defineProperty ( target, propertyKey, attributes )
4351 define(
4352 Reflect, 'defineProperty',
4353 function defineProperty(target, propertyKey, attributes) {
4354 try {
4355 Object.defineProperty(target, propertyKey, attributes);
4356 return true;
4357 } catch (_) {
4358 return false;
4359 }
4360 });
4361
4362 // 26.1.4 Reflect.deleteProperty ( target, propertyKey )
4363 define(
4364 Reflect, 'deleteProperty',
4365 function deleteProperty(target,name) {
4366 try {
4367 delete target[name];
4368 return !HasOwnProperty(target, name);
4369 } catch (_) {
4370 return false;
4371 }
4372 });
4373
4374 // 26.1.5 Reflect.enumerate ( target )
4375 define(
4376 Reflect, 'enumerate',
4377 function enumerate(target) {
4378 target = ToObject(target);
4379 var iterator = Enumerate(target);
4380 return iterator;
4381 });
4382
4383 // 26.1.6 Reflect.get ( target, propertyKey [ , receiver ])
4384 define(
4385 Reflect, 'get',
4386 function get(target, name, receiver) {
4387 target = ToObject(target);
4388 name = String(name);
4389 receiver = (receiver === undefined) ? target : ToObject(receiver);
4390 var desc = getPropertyDescriptor(target, name);
4391 if (desc && 'get' in desc)
4392 return Function.prototype.call.call(desc['get'], receiver);
4393 return target[name];
4394 });
4395
4396 // 26.1.7 Reflect.getOwnPropertyDescriptor ( target, propertyKey )
4397 define(
4398 Reflect, 'getOwnPropertyDescriptor',
4399 Object.getOwnPropertyDescriptor);
4400
4401 // 26.1.8 Reflect.getPrototypeOf ( target )
4402 define(
4403 Reflect, 'getPrototypeOf',
4404 Object.getPrototypeOf);
4405
4406 // 26.1.9 Reflect.has ( target, propertyKey )
4407 define(
4408 Reflect, 'has',
4409 function has(target,name) {
4410 return String(name) in ToObject(target);
4411 });
4412
4413 // 26.1.10 Reflect.isExtensible (target)
4414 define(
4415 Reflect, 'isExtensible',
4416 Object.isExtensible);
4417
4418 // 26.1.11 Reflect.ownKeys ( target )
4419 define(
4420 Reflect, 'ownKeys',
4421 function ownKeys(target) {
4422 var obj = ToObject(target);
4423 return Object.getOwnPropertyNames(obj);
4424 });
4425
4426 // 26.1.12 Reflect.preventExtensions ( target )
4427 define(
4428 Reflect, 'preventExtensions',
4429 function preventExtensions(target) {
4430 try { Object.preventExtensions(target); return true; } catch (_) { return false; }
4431 });
4432
4433 // 26.1.13 Reflect.set ( target, propertyKey, V [ , receiver ] )
4434 define(
4435 Reflect, 'set',
4436 function set(target, name, value, receiver) {
4437 target = ToObject(target);
4438 name = String(name);
4439 receiver = (receiver === undefined) ? target : ToObject(receiver);
4440 var desc = getPropertyDescriptor(target, name);
4441 try {
4442 if (desc && 'set' in desc)
4443 Function.prototype.call.call(desc['set'], receiver, value);
4444 else
4445 target[name] = value;
4446 return true;
4447 } catch (_) {
4448 return false;
4449 }
4450 });
4451
4452 // 26.1.14 Reflect.setPrototypeOf ( target, proto )
4453 define(
4454 Reflect, 'setPrototypeOf',
4455 function setPrototypeOf(target, proto) {
4456 try {
4457 target.__proto__ = proto;
4458 return Reflect.getPrototypeOf(target) === proto;
4459 } catch(_) {
4460 return false;
4461 }
4462 });
4463
4464 }());
4465
4466 // ---------------------------------------
4467 // 26.2 Proxy Objects
4468 // ---------------------------------------
4469
4470 // Not polyfillable.
4471
4472}(self));
4473
4474// This helper is defined outside the main scope so that the use of
4475// 'eval' does not taint the scope for minifiers.
4476function __cons(t, a) {
4477 return eval('new t(' + a.map(function(_, i) { return 'a[' + i + ']'; }).join(',') + ')');
4478}
6e0f24b1 4479</script>
8a1f452d 4480 <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){
4481'use strict'
4482
4483exports.byteLength = byteLength
4484exports.toByteArray = toByteArray
4485exports.fromByteArray = fromByteArray
4486
4487var lookup = []
4488var revLookup = []
4489var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
4490
4491var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
4492for (var i = 0, len = code.length; i < len; ++i) {
4493 lookup[i] = code[i]
4494 revLookup[code.charCodeAt(i)] = i
4495}
4496
4497revLookup['-'.charCodeAt(0)] = 62
4498revLookup['_'.charCodeAt(0)] = 63
4499
4500function placeHoldersCount (b64) {
4501 var len = b64.length
4502 if (len % 4 > 0) {
4503 throw new Error('Invalid string. Length must be a multiple of 4')
4504 }
4505
4506 // the number of equal signs (place holders)
4507 // if there are two placeholders, than the two characters before it
4508 // represent one byte
4509 // if there is only one, then the three characters before it represent 2 bytes
4510 // this is just a cheap hack to not do indexOf twice
4511 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
4512}
4513
4514function byteLength (b64) {
4515 // base64 is 4/3 + up to two characters of the original data
4516 return b64.length * 3 / 4 - placeHoldersCount(b64)
4517}
4518
4519function toByteArray (b64) {
4520 var i, j, l, tmp, placeHolders, arr
4521 var len = b64.length
4522 placeHolders = placeHoldersCount(b64)
4523
4524 arr = new Arr(len * 3 / 4 - placeHolders)
4525
4526 // if there are placeholders, only get up to the last complete 4 chars
4527 l = placeHolders > 0 ? len - 4 : len
4528
4529 var L = 0
4530
4531 for (i = 0, j = 0; i < l; i += 4, j += 3) {
4532 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
4533 arr[L++] = (tmp >> 16) & 0xFF
4534 arr[L++] = (tmp >> 8) & 0xFF
4535 arr[L++] = tmp & 0xFF
4536 }
4537
4538 if (placeHolders === 2) {
4539 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
4540 arr[L++] = tmp & 0xFF
4541 } else if (placeHolders === 1) {
4542 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
4543 arr[L++] = (tmp >> 8) & 0xFF
4544 arr[L++] = tmp & 0xFF
4545 }
4546
4547 return arr
4548}
4549
4550function tripletToBase64 (num) {
4551 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
4552}
4553
4554function encodeChunk (uint8, start, end) {
4555 var tmp
4556 var output = []
4557 for (var i = start; i < end; i += 3) {
4558 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
4559 output.push(tripletToBase64(tmp))
4560 }
4561 return output.join('')
4562}
4563
4564function fromByteArray (uint8) {
4565 var tmp
4566 var len = uint8.length
4567 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
4568 var output = ''
4569 var parts = []
4570 var maxChunkLength = 16383 // must be multiple of 3
4571
4572 // go through the array every three bytes, we'll deal with trailing stuff later
4573 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
4574 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
4575 }
4576
4577 // pad the end with zeros, but make sure to not forget the extra bytes
4578 if (extraBytes === 1) {
4579 tmp = uint8[len - 1]
4580 output += lookup[tmp >> 2]
4581 output += lookup[(tmp << 4) & 0x3F]
4582 output += '=='
4583 } else if (extraBytes === 2) {
4584 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
4585 output += lookup[tmp >> 10]
4586 output += lookup[(tmp >> 4) & 0x3F]
4587 output += lookup[(tmp << 2) & 0x3F]
4588 output += '='
4589 }
4590
4591 parts.push(output)
4592
4593 return parts.join('')
4594}
4595
4596},{}],2:[function(require,module,exports){
4597/*!
4598 * The buffer module from node.js, for the browser.
4599 *
4600 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
4601 * @license MIT
4602 */
4603/* eslint-disable no-proto */
4604
4605'use strict'
4606
4607var base64 = require('base64-js')
4608var ieee754 = require('ieee754')
4609
4610exports.Buffer = Buffer
4611exports.SlowBuffer = SlowBuffer
4612exports.INSPECT_MAX_BYTES = 50
4613
4614var K_MAX_LENGTH = 0x7fffffff
4615exports.kMaxLength = K_MAX_LENGTH
4616
4617/**
4618 * If `Buffer.TYPED_ARRAY_SUPPORT`:
4619 * === true Use Uint8Array implementation (fastest)
4620 * === false Print warning and recommend using `buffer` v4.x which has an Object
4621 * implementation (most compatible, even IE6)
4622 *
4623 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
4624 * Opera 11.6+, iOS 4.2+.
4625 *
4626 * We report that the browser does not support typed arrays if the are not subclassable
4627 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
4628 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
4629 * for __proto__ and has a buggy typed array implementation.
4630 */
4631Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
4632
4633if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
4634 typeof console.error === 'function') {
4635 console.error(
4636 'This browser lacks typed array (Uint8Array) support which is required by ' +
4637 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
4638 )
4639}
4640
4641function typedArraySupport () {
4642 // Can typed array instances can be augmented?
4643 try {
4644 var arr = new Uint8Array(1)
4645 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
4646 return arr.foo() === 42
4647 } catch (e) {
4648 return false
4649 }
4650}
4651
4652function createBuffer (length) {
4653 if (length > K_MAX_LENGTH) {
4654 throw new RangeError('Invalid typed array length')
4655 }
4656 // Return an augmented `Uint8Array` instance
4657 var buf = new Uint8Array(length)
4658 buf.__proto__ = Buffer.prototype
4659 return buf
4660}
4661
4662/**
4663 * The Buffer constructor returns instances of `Uint8Array` that have their
4664 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
4665 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
4666 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
4667 * returns a single octet.
4668 *
4669 * The `Uint8Array` prototype remains unmodified.
4670 */
4671
4672function Buffer (arg, encodingOrOffset, length) {
4673 // Common case.
4674 if (typeof arg === 'number') {
4675 if (typeof encodingOrOffset === 'string') {
4676 throw new Error(
4677 'If encoding is specified then the first argument must be a string'
4678 )
4679 }
4680 return allocUnsafe(arg)
4681 }
4682 return from(arg, encodingOrOffset, length)
4683}
4684
4685// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
4686if (typeof Symbol !== 'undefined' && Symbol.species &&
4687 Buffer[Symbol.species] === Buffer) {
4688 Object.defineProperty(Buffer, Symbol.species, {
4689 value: null,
4690 configurable: true,
4691 enumerable: false,
4692 writable: false
4693 })
4694}
4695
4696Buffer.poolSize = 8192 // not used by this implementation
4697
4698function from (value, encodingOrOffset, length) {
4699 if (typeof value === 'number') {
4700 throw new TypeError('"value" argument must not be a number')
4701 }
4702
4703 if (value instanceof ArrayBuffer) {
4704 return fromArrayBuffer(value, encodingOrOffset, length)
4705 }
4706
4707 if (typeof value === 'string') {
4708 return fromString(value, encodingOrOffset)
4709 }
4710
4711 return fromObject(value)
4712}
4713
4714/**
4715 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
4716 * if value is a number.
4717 * Buffer.from(str[, encoding])
4718 * Buffer.from(array)
4719 * Buffer.from(buffer)
4720 * Buffer.from(arrayBuffer[, byteOffset[, length]])
4721 **/
4722Buffer.from = function (value, encodingOrOffset, length) {
4723 return from(value, encodingOrOffset, length)
4724}
4725
4726// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
4727// https://github.com/feross/buffer/pull/148
4728Buffer.prototype.__proto__ = Uint8Array.prototype
4729Buffer.__proto__ = Uint8Array
4730
4731function assertSize (size) {
4732 if (typeof size !== 'number') {
4733 throw new TypeError('"size" argument must be a number')
4734 } else if (size < 0) {
4735 throw new RangeError('"size" argument must not be negative')
4736 }
4737}
4738
4739function alloc (size, fill, encoding) {
4740 assertSize(size)
4741 if (size <= 0) {
4742 return createBuffer(size)
4743 }
4744 if (fill !== undefined) {
4745 // Only pay attention to encoding if it's a string. This
4746 // prevents accidentally sending in a number that would
4747 // be interpretted as a start offset.
4748 return typeof encoding === 'string'
4749 ? createBuffer(size).fill(fill, encoding)
4750 : createBuffer(size).fill(fill)
4751 }
4752 return createBuffer(size)
4753}
4754
4755/**
4756 * Creates a new filled Buffer instance.
4757 * alloc(size[, fill[, encoding]])
4758 **/
4759Buffer.alloc = function (size, fill, encoding) {
4760 return alloc(size, fill, encoding)
4761}
4762
4763function allocUnsafe (size) {
4764 assertSize(size)
4765 return createBuffer(size < 0 ? 0 : checked(size) | 0)
4766}
4767
4768/**
4769 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
4770 * */
4771Buffer.allocUnsafe = function (size) {
4772 return allocUnsafe(size)
4773}
4774/**
4775 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
4776 */
4777Buffer.allocUnsafeSlow = function (size) {
4778 return allocUnsafe(size)
4779}
4780
4781function fromString (string, encoding) {
4782 if (typeof encoding !== 'string' || encoding === '') {
4783 encoding = 'utf8'
4784 }
4785
4786 if (!Buffer.isEncoding(encoding)) {
4787 throw new TypeError('"encoding" must be a valid string encoding')
4788 }
4789
4790 var length = byteLength(string, encoding) | 0
4791 var buf = createBuffer(length)
4792
4793 var actual = buf.write(string, encoding)
4794
4795 if (actual !== length) {
4796 // Writing a hex string, for example, that contains invalid characters will
4797 // cause everything after the first invalid character to be ignored. (e.g.
4798 // 'abxxcd' will be treated as 'ab')
4799 buf = buf.slice(0, actual)
4800 }
4801
4802 return buf
4803}
4804
4805function fromArrayLike (array) {
4806 var length = array.length < 0 ? 0 : checked(array.length) | 0
4807 var buf = createBuffer(length)
4808 for (var i = 0; i < length; i += 1) {
4809 buf[i] = array[i] & 255
4810 }
4811 return buf
4812}
4813
4814function fromArrayBuffer (array, byteOffset, length) {
4815 if (byteOffset < 0 || array.byteLength < byteOffset) {
4816 throw new RangeError('\'offset\' is out of bounds')
4817 }
4818
4819 if (array.byteLength < byteOffset + (length || 0)) {
4820 throw new RangeError('\'length\' is out of bounds')
4821 }
4822
4823 var buf
4824 if (byteOffset === undefined && length === undefined) {
4825 buf = new Uint8Array(array)
4826 } else if (length === undefined) {
4827 buf = new Uint8Array(array, byteOffset)
4828 } else {
4829 buf = new Uint8Array(array, byteOffset, length)
4830 }
4831
4832 // Return an augmented `Uint8Array` instance
4833 buf.__proto__ = Buffer.prototype
4834 return buf
4835}
4836
4837function fromObject (obj) {
4838 if (Buffer.isBuffer(obj)) {
4839 var len = checked(obj.length) | 0
4840 var buf = createBuffer(len)
4841
4842 if (buf.length === 0) {
4843 return buf
4844 }
4845
4846 obj.copy(buf, 0, 0, len)
4847 return buf
4848 }
4849
4850 if (obj) {
4851 if (isArrayBufferView(obj) || 'length' in obj) {
4852 if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
4853 return createBuffer(0)
4854 }
4855 return fromArrayLike(obj)
4856 }
4857
4858 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
4859 return fromArrayLike(obj.data)
4860 }
4861 }
4862
4863 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
4864}
4865
4866function checked (length) {
4867 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
4868 // length is NaN (which is otherwise coerced to zero.)
4869 if (length >= K_MAX_LENGTH) {
4870 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
4871 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
4872 }
4873 return length | 0
4874}
4875
4876function SlowBuffer (length) {
4877 if (+length != length) { // eslint-disable-line eqeqeq
4878 length = 0
4879 }
4880 return Buffer.alloc(+length)
4881}
4882
4883Buffer.isBuffer = function isBuffer (b) {
4884 return b != null && b._isBuffer === true
4885}
4886
4887Buffer.compare = function compare (a, b) {
4888 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
4889 throw new TypeError('Arguments must be Buffers')
4890 }
4891
4892 if (a === b) return 0
4893
4894 var x = a.length
4895 var y = b.length
4896
4897 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
4898 if (a[i] !== b[i]) {
4899 x = a[i]
4900 y = b[i]
4901 break
4902 }
4903 }
4904
4905 if (x < y) return -1
4906 if (y < x) return 1
4907 return 0
4908}
4909
4910Buffer.isEncoding = function isEncoding (encoding) {
4911 switch (String(encoding).toLowerCase()) {
4912 case 'hex':
4913 case 'utf8':
4914 case 'utf-8':
4915 case 'ascii':
4916 case 'latin1':
4917 case 'binary':
4918 case 'base64':
4919 case 'ucs2':
4920 case 'ucs-2':
4921 case 'utf16le':
4922 case 'utf-16le':
4923 return true
4924 default:
4925 return false
4926 }
4927}
4928
4929Buffer.concat = function concat (list, length) {
4930 if (!Array.isArray(list)) {
4931 throw new TypeError('"list" argument must be an Array of Buffers')
4932 }
4933
4934 if (list.length === 0) {
4935 return Buffer.alloc(0)
4936 }
4937
4938 var i
4939 if (length === undefined) {
4940 length = 0
4941 for (i = 0; i < list.length; ++i) {
4942 length += list[i].length
4943 }
4944 }
4945
4946 var buffer = Buffer.allocUnsafe(length)
4947 var pos = 0
4948 for (i = 0; i < list.length; ++i) {
4949 var buf = list[i]
4950 if (!Buffer.isBuffer(buf)) {
4951 throw new TypeError('"list" argument must be an Array of Buffers')
4952 }
4953 buf.copy(buffer, pos)
4954 pos += buf.length
4955 }
4956 return buffer
4957}
4958
4959function byteLength (string, encoding) {
4960 if (Buffer.isBuffer(string)) {
4961 return string.length
4962 }
4963 if (isArrayBufferView(string) || string instanceof ArrayBuffer) {
4964 return string.byteLength
4965 }
4966 if (typeof string !== 'string') {
4967 string = '' + string
4968 }
4969
4970 var len = string.length
4971 if (len === 0) return 0
4972
4973 // Use a for loop to avoid recursion
4974 var loweredCase = false
4975 for (;;) {
4976 switch (encoding) {
4977 case 'ascii':
4978 case 'latin1':
4979 case 'binary':
4980 return len
4981 case 'utf8':
4982 case 'utf-8':
4983 case undefined:
4984 return utf8ToBytes(string).length
4985 case 'ucs2':
4986 case 'ucs-2':
4987 case 'utf16le':
4988 case 'utf-16le':
4989 return len * 2
4990 case 'hex':
4991 return len >>> 1
4992 case 'base64':
4993 return base64ToBytes(string).length
4994 default:
4995 if (loweredCase) return utf8ToBytes(string).length // assume utf8
4996 encoding = ('' + encoding).toLowerCase()
4997 loweredCase = true
4998 }
4999 }
5000}
5001Buffer.byteLength = byteLength
5002
5003function slowToString (encoding, start, end) {
5004 var loweredCase = false
5005
5006 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
5007 // property of a typed array.
5008
5009 // This behaves neither like String nor Uint8Array in that we set start/end
5010 // to their upper/lower bounds if the value passed is out of range.
5011 // undefined is handled specially as per ECMA-262 6th Edition,
5012 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
5013 if (start === undefined || start < 0) {
5014 start = 0
5015 }
5016 // Return early if start > this.length. Done here to prevent potential uint32
5017 // coercion fail below.
5018 if (start > this.length) {
5019 return ''
5020 }
5021
5022 if (end === undefined || end > this.length) {
5023 end = this.length
5024 }
5025
5026 if (end <= 0) {
5027 return ''
5028 }
5029
5030 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
5031 end >>>= 0
5032 start >>>= 0
5033
5034 if (end <= start) {
5035 return ''
5036 }
5037
5038 if (!encoding) encoding = 'utf8'
5039
5040 while (true) {
5041 switch (encoding) {
5042 case 'hex':
5043 return hexSlice(this, start, end)
5044
5045 case 'utf8':
5046 case 'utf-8':
5047 return utf8Slice(this, start, end)
5048
5049 case 'ascii':
5050 return asciiSlice(this, start, end)
5051
5052 case 'latin1':
5053 case 'binary':
5054 return latin1Slice(this, start, end)
5055
5056 case 'base64':
5057 return base64Slice(this, start, end)
5058
5059 case 'ucs2':
5060 case 'ucs-2':
5061 case 'utf16le':
5062 case 'utf-16le':
5063 return utf16leSlice(this, start, end)
5064
5065 default:
5066 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5067 encoding = (encoding + '').toLowerCase()
5068 loweredCase = true
5069 }
5070 }
5071}
5072
5073// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
5074// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
5075// reliably in a browserify context because there could be multiple different
5076// copies of the 'buffer' package in use. This method works even for Buffer
5077// instances that were created from another copy of the `buffer` package.
5078// See: https://github.com/feross/buffer/issues/154
5079Buffer.prototype._isBuffer = true
5080
5081function swap (b, n, m) {
5082 var i = b[n]
5083 b[n] = b[m]
5084 b[m] = i
5085}
5086
5087Buffer.prototype.swap16 = function swap16 () {
5088 var len = this.length
5089 if (len % 2 !== 0) {
5090 throw new RangeError('Buffer size must be a multiple of 16-bits')
5091 }
5092 for (var i = 0; i < len; i += 2) {
5093 swap(this, i, i + 1)
5094 }
5095 return this
5096}
5097
5098Buffer.prototype.swap32 = function swap32 () {
5099 var len = this.length
5100 if (len % 4 !== 0) {
5101 throw new RangeError('Buffer size must be a multiple of 32-bits')
5102 }
5103 for (var i = 0; i < len; i += 4) {
5104 swap(this, i, i + 3)
5105 swap(this, i + 1, i + 2)
5106 }
5107 return this
5108}
5109
5110Buffer.prototype.swap64 = function swap64 () {
5111 var len = this.length
5112 if (len % 8 !== 0) {
5113 throw new RangeError('Buffer size must be a multiple of 64-bits')
5114 }
5115 for (var i = 0; i < len; i += 8) {
5116 swap(this, i, i + 7)
5117 swap(this, i + 1, i + 6)
5118 swap(this, i + 2, i + 5)
5119 swap(this, i + 3, i + 4)
5120 }
5121 return this
5122}
5123
5124Buffer.prototype.toString = function toString () {
5125 var length = this.length
5126 if (length === 0) return ''
5127 if (arguments.length === 0) return utf8Slice(this, 0, length)
5128 return slowToString.apply(this, arguments)
5129}
5130
5131Buffer.prototype.equals = function equals (b) {
5132 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
5133 if (this === b) return true
5134 return Buffer.compare(this, b) === 0
5135}
5136
5137Buffer.prototype.inspect = function inspect () {
5138 var str = ''
5139 var max = exports.INSPECT_MAX_BYTES
5140 if (this.length > 0) {
5141 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
5142 if (this.length > max) str += ' ... '
5143 }
5144 return '<Buffer ' + str + '>'
5145}
5146
5147Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
5148 if (!Buffer.isBuffer(target)) {
5149 throw new TypeError('Argument must be a Buffer')
5150 }
5151
5152 if (start === undefined) {
5153 start = 0
5154 }
5155 if (end === undefined) {
5156 end = target ? target.length : 0
5157 }
5158 if (thisStart === undefined) {
5159 thisStart = 0
5160 }
5161 if (thisEnd === undefined) {
5162 thisEnd = this.length
5163 }
5164
5165 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
5166 throw new RangeError('out of range index')
5167 }
5168
5169 if (thisStart >= thisEnd && start >= end) {
5170 return 0
5171 }
5172 if (thisStart >= thisEnd) {
5173 return -1
5174 }
5175 if (start >= end) {
5176 return 1
5177 }
5178
5179 start >>>= 0
5180 end >>>= 0
5181 thisStart >>>= 0
5182 thisEnd >>>= 0
5183
5184 if (this === target) return 0
5185
5186 var x = thisEnd - thisStart
5187 var y = end - start
5188 var len = Math.min(x, y)
5189
5190 var thisCopy = this.slice(thisStart, thisEnd)
5191 var targetCopy = target.slice(start, end)
5192
5193 for (var i = 0; i < len; ++i) {
5194 if (thisCopy[i] !== targetCopy[i]) {
5195 x = thisCopy[i]
5196 y = targetCopy[i]
5197 break
5198 }
5199 }
5200
5201 if (x < y) return -1
5202 if (y < x) return 1
5203 return 0
5204}
5205
5206// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
5207// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
5208//
5209// Arguments:
5210// - buffer - a Buffer to search
5211// - val - a string, Buffer, or number
5212// - byteOffset - an index into `buffer`; will be clamped to an int32
5213// - encoding - an optional encoding, relevant is val is a string
5214// - dir - true for indexOf, false for lastIndexOf
5215function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
5216 // Empty buffer means no match
5217 if (buffer.length === 0) return -1
5218
5219 // Normalize byteOffset
5220 if (typeof byteOffset === 'string') {
5221 encoding = byteOffset
5222 byteOffset = 0
5223 } else if (byteOffset > 0x7fffffff) {
5224 byteOffset = 0x7fffffff
5225 } else if (byteOffset < -0x80000000) {
5226 byteOffset = -0x80000000
5227 }
5228 byteOffset = +byteOffset // Coerce to Number.
5229 if (numberIsNaN(byteOffset)) {
5230 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
5231 byteOffset = dir ? 0 : (buffer.length - 1)
5232 }
5233
5234 // Normalize byteOffset: negative offsets start from the end of the buffer
5235 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
5236 if (byteOffset >= buffer.length) {
5237 if (dir) return -1
5238 else byteOffset = buffer.length - 1
5239 } else if (byteOffset < 0) {
5240 if (dir) byteOffset = 0
5241 else return -1
5242 }
5243
5244 // Normalize val
5245 if (typeof val === 'string') {
5246 val = Buffer.from(val, encoding)
5247 }
5248
5249 // Finally, search either indexOf (if dir is true) or lastIndexOf
5250 if (Buffer.isBuffer(val)) {
5251 // Special case: looking for empty string/buffer always fails
5252 if (val.length === 0) {
5253 return -1
5254 }
5255 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
5256 } else if (typeof val === 'number') {
5257 val = val & 0xFF // Search for a byte value [0-255]
5258 if (typeof Uint8Array.prototype.indexOf === 'function') {
5259 if (dir) {
5260 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
5261 } else {
5262 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
5263 }
5264 }
5265 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
5266 }
5267
5268 throw new TypeError('val must be string, number or Buffer')
5269}
5270
5271function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
5272 var indexSize = 1
5273 var arrLength = arr.length
5274 var valLength = val.length
5275
5276 if (encoding !== undefined) {
5277 encoding = String(encoding).toLowerCase()
5278 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
5279 encoding === 'utf16le' || encoding === 'utf-16le') {
5280 if (arr.length < 2 || val.length < 2) {
5281 return -1
5282 }
5283 indexSize = 2
5284 arrLength /= 2
5285 valLength /= 2
5286 byteOffset /= 2
5287 }
5288 }
5289
5290 function read (buf, i) {
5291 if (indexSize === 1) {
5292 return buf[i]
5293 } else {
5294 return buf.readUInt16BE(i * indexSize)
5295 }
5296 }
5297
5298 var i
5299 if (dir) {
5300 var foundIndex = -1
5301 for (i = byteOffset; i < arrLength; i++) {
5302 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
5303 if (foundIndex === -1) foundIndex = i
5304 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
5305 } else {
5306 if (foundIndex !== -1) i -= i - foundIndex
5307 foundIndex = -1
5308 }
5309 }
5310 } else {
5311 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
5312 for (i = byteOffset; i >= 0; i--) {
5313 var found = true
5314 for (var j = 0; j < valLength; j++) {
5315 if (read(arr, i + j) !== read(val, j)) {
5316 found = false
5317 break
5318 }
5319 }
5320 if (found) return i
5321 }
5322 }
5323
5324 return -1
5325}
5326
5327Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
5328 return this.indexOf(val, byteOffset, encoding) !== -1
5329}
5330
5331Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
5332 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
5333}
5334
5335Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
5336 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
5337}
5338
5339function hexWrite (buf, string, offset, length) {
5340 offset = Number(offset) || 0
5341 var remaining = buf.length - offset
5342 if (!length) {
5343 length = remaining
5344 } else {
5345 length = Number(length)
5346 if (length > remaining) {
5347 length = remaining
5348 }
5349 }
5350
5351 // must be an even number of digits
5352 var strLen = string.length
5353 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
5354
5355 if (length > strLen / 2) {
5356 length = strLen / 2
5357 }
5358 for (var i = 0; i < length; ++i) {
5359 var parsed = parseInt(string.substr(i * 2, 2), 16)
5360 if (numberIsNaN(parsed)) return i
5361 buf[offset + i] = parsed
5362 }
5363 return i
5364}
5365
5366function utf8Write (buf, string, offset, length) {
5367 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
5368}
5369
5370function asciiWrite (buf, string, offset, length) {
5371 return blitBuffer(asciiToBytes(string), buf, offset, length)
5372}
5373
5374function latin1Write (buf, string, offset, length) {
5375 return asciiWrite(buf, string, offset, length)
5376}
5377
5378function base64Write (buf, string, offset, length) {
5379 return blitBuffer(base64ToBytes(string), buf, offset, length)
5380}
5381
5382function ucs2Write (buf, string, offset, length) {
5383 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
5384}
5385
5386Buffer.prototype.write = function write (string, offset, length, encoding) {
5387 // Buffer#write(string)
5388 if (offset === undefined) {
5389 encoding = 'utf8'
5390 length = this.length
5391 offset = 0
5392 // Buffer#write(string, encoding)
5393 } else if (length === undefined && typeof offset === 'string') {
5394 encoding = offset
5395 length = this.length
5396 offset = 0
5397 // Buffer#write(string, offset[, length][, encoding])
5398 } else if (isFinite(offset)) {
5399 offset = offset >>> 0
5400 if (isFinite(length)) {
5401 length = length >>> 0
5402 if (encoding === undefined) encoding = 'utf8'
5403 } else {
5404 encoding = length
5405 length = undefined
5406 }
5407 } else {
5408 throw new Error(
5409 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
5410 )
5411 }
5412
5413 var remaining = this.length - offset
5414 if (length === undefined || length > remaining) length = remaining
5415
5416 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
5417 throw new RangeError('Attempt to write outside buffer bounds')
5418 }
5419
5420 if (!encoding) encoding = 'utf8'
5421
5422 var loweredCase = false
5423 for (;;) {
5424 switch (encoding) {
5425 case 'hex':
5426 return hexWrite(this, string, offset, length)
5427
5428 case 'utf8':
5429 case 'utf-8':
5430 return utf8Write(this, string, offset, length)
5431
5432 case 'ascii':
5433 return asciiWrite(this, string, offset, length)
5434
5435 case 'latin1':
5436 case 'binary':
5437 return latin1Write(this, string, offset, length)
5438
5439 case 'base64':
5440 // Warning: maxLength not taken into account in base64Write
5441 return base64Write(this, string, offset, length)
5442
5443 case 'ucs2':
5444 case 'ucs-2':
5445 case 'utf16le':
5446 case 'utf-16le':
5447 return ucs2Write(this, string, offset, length)
5448
5449 default:
5450 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
5451 encoding = ('' + encoding).toLowerCase()
5452 loweredCase = true
5453 }
5454 }
5455}
5456
5457Buffer.prototype.toJSON = function toJSON () {
5458 return {
5459 type: 'Buffer',
5460 data: Array.prototype.slice.call(this._arr || this, 0)
5461 }
5462}
5463
5464function base64Slice (buf, start, end) {
5465 if (start === 0 && end === buf.length) {
5466 return base64.fromByteArray(buf)
5467 } else {
5468 return base64.fromByteArray(buf.slice(start, end))
5469 }
5470}
5471
5472function utf8Slice (buf, start, end) {
5473 end = Math.min(buf.length, end)
5474 var res = []
5475
5476 var i = start
5477 while (i < end) {
5478 var firstByte = buf[i]
5479 var codePoint = null
5480 var bytesPerSequence = (firstByte > 0xEF) ? 4
5481 : (firstByte > 0xDF) ? 3
5482 : (firstByte > 0xBF) ? 2
5483 : 1
5484
5485 if (i + bytesPerSequence <= end) {
5486 var secondByte, thirdByte, fourthByte, tempCodePoint
5487
5488 switch (bytesPerSequence) {
5489 case 1:
5490 if (firstByte < 0x80) {
5491 codePoint = firstByte
5492 }
5493 break
5494 case 2:
5495 secondByte = buf[i + 1]
5496 if ((secondByte & 0xC0) === 0x80) {
5497 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
5498 if (tempCodePoint > 0x7F) {
5499 codePoint = tempCodePoint
5500 }
5501 }
5502 break
5503 case 3:
5504 secondByte = buf[i + 1]
5505 thirdByte = buf[i + 2]
5506 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
5507 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
5508 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
5509 codePoint = tempCodePoint
5510 }
5511 }
5512 break
5513 case 4:
5514 secondByte = buf[i + 1]
5515 thirdByte = buf[i + 2]
5516 fourthByte = buf[i + 3]
5517 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
5518 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
5519 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
5520 codePoint = tempCodePoint
5521 }
5522 }
5523 }
5524 }
5525
5526 if (codePoint === null) {
5527 // we did not generate a valid codePoint so insert a
5528 // replacement char (U+FFFD) and advance only 1 byte
5529 codePoint = 0xFFFD
5530 bytesPerSequence = 1
5531 } else if (codePoint > 0xFFFF) {
5532 // encode to utf16 (surrogate pair dance)
5533 codePoint -= 0x10000
5534 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
5535 codePoint = 0xDC00 | codePoint & 0x3FF
5536 }
5537
5538 res.push(codePoint)
5539 i += bytesPerSequence
5540 }
5541
5542 return decodeCodePointsArray(res)
5543}
5544
5545// Based on http://stackoverflow.com/a/22747272/680742, the browser with
5546// the lowest limit is Chrome, with 0x10000 args.
5547// We go 1 magnitude less, for safety
5548var MAX_ARGUMENTS_LENGTH = 0x1000
5549
5550function decodeCodePointsArray (codePoints) {
5551 var len = codePoints.length
5552 if (len <= MAX_ARGUMENTS_LENGTH) {
5553 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
5554 }
5555
5556 // Decode in chunks to avoid "call stack size exceeded".
5557 var res = ''
5558 var i = 0
5559 while (i < len) {
5560 res += String.fromCharCode.apply(
5561 String,
5562 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
5563 )
5564 }
5565 return res
5566}
5567
5568function asciiSlice (buf, start, end) {
5569 var ret = ''
5570 end = Math.min(buf.length, end)
5571
5572 for (var i = start; i < end; ++i) {
5573 ret += String.fromCharCode(buf[i] & 0x7F)
5574 }
5575 return ret
5576}
5577
5578function latin1Slice (buf, start, end) {
5579 var ret = ''
5580 end = Math.min(buf.length, end)
5581
5582 for (var i = start; i < end; ++i) {
5583 ret += String.fromCharCode(buf[i])
5584 }
5585 return ret
5586}
5587
5588function hexSlice (buf, start, end) {
5589 var len = buf.length
5590
5591 if (!start || start < 0) start = 0
5592 if (!end || end < 0 || end > len) end = len
5593
5594 var out = ''
5595 for (var i = start; i < end; ++i) {
5596 out += toHex(buf[i])
5597 }
5598 return out
5599}
5600
5601function utf16leSlice (buf, start, end) {
5602 var bytes = buf.slice(start, end)
5603 var res = ''
5604 for (var i = 0; i < bytes.length; i += 2) {
5605 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
5606 }
5607 return res
5608}
5609
5610Buffer.prototype.slice = function slice (start, end) {
5611 var len = this.length
5612 start = ~~start
5613 end = end === undefined ? len : ~~end
5614
5615 if (start < 0) {
5616 start += len
5617 if (start < 0) start = 0
5618 } else if (start > len) {
5619 start = len
5620 }
5621
5622 if (end < 0) {
5623 end += len
5624 if (end < 0) end = 0
5625 } else if (end > len) {
5626 end = len
5627 }
5628
5629 if (end < start) end = start
5630
5631 var newBuf = this.subarray(start, end)
5632 // Return an augmented `Uint8Array` instance
5633 newBuf.__proto__ = Buffer.prototype
5634 return newBuf
5635}
5636
5637/*
5638 * Need to make sure that buffer isn't trying to write out of bounds.
5639 */
5640function checkOffset (offset, ext, length) {
5641 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
5642 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
5643}
5644
5645Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
5646 offset = offset >>> 0
5647 byteLength = byteLength >>> 0
5648 if (!noAssert) checkOffset(offset, byteLength, this.length)
5649
5650 var val = this[offset]
5651 var mul = 1
5652 var i = 0
5653 while (++i < byteLength && (mul *= 0x100)) {
5654 val += this[offset + i] * mul
5655 }
5656
5657 return val
5658}
5659
5660Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
5661 offset = offset >>> 0
5662 byteLength = byteLength >>> 0
5663 if (!noAssert) {
5664 checkOffset(offset, byteLength, this.length)
5665 }
5666
5667 var val = this[offset + --byteLength]
5668 var mul = 1
5669 while (byteLength > 0 && (mul *= 0x100)) {
5670 val += this[offset + --byteLength] * mul
5671 }
5672
5673 return val
5674}
5675
5676Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
5677 offset = offset >>> 0
5678 if (!noAssert) checkOffset(offset, 1, this.length)
5679 return this[offset]
5680}
5681
5682Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
5683 offset = offset >>> 0
5684 if (!noAssert) checkOffset(offset, 2, this.length)
5685 return this[offset] | (this[offset + 1] << 8)
5686}
5687
5688Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
5689 offset = offset >>> 0
5690 if (!noAssert) checkOffset(offset, 2, this.length)
5691 return (this[offset] << 8) | this[offset + 1]
5692}
5693
5694Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
5695 offset = offset >>> 0
5696 if (!noAssert) checkOffset(offset, 4, this.length)
5697
5698 return ((this[offset]) |
5699 (this[offset + 1] << 8) |
5700 (this[offset + 2] << 16)) +
5701 (this[offset + 3] * 0x1000000)
5702}
5703
5704Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
5705 offset = offset >>> 0
5706 if (!noAssert) checkOffset(offset, 4, this.length)
5707
5708 return (this[offset] * 0x1000000) +
5709 ((this[offset + 1] << 16) |
5710 (this[offset + 2] << 8) |
5711 this[offset + 3])
5712}
5713
5714Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
5715 offset = offset >>> 0
5716 byteLength = byteLength >>> 0
5717 if (!noAssert) checkOffset(offset, byteLength, this.length)
5718
5719 var val = this[offset]
5720 var mul = 1
5721 var i = 0
5722 while (++i < byteLength && (mul *= 0x100)) {
5723 val += this[offset + i] * mul
5724 }
5725 mul *= 0x80
5726
5727 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5728
5729 return val
5730}
5731
5732Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
5733 offset = offset >>> 0
5734 byteLength = byteLength >>> 0
5735 if (!noAssert) checkOffset(offset, byteLength, this.length)
5736
5737 var i = byteLength
5738 var mul = 1
5739 var val = this[offset + --i]
5740 while (i > 0 && (mul *= 0x100)) {
5741 val += this[offset + --i] * mul
5742 }
5743 mul *= 0x80
5744
5745 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
5746
5747 return val
5748}
5749
5750Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
5751 offset = offset >>> 0
5752 if (!noAssert) checkOffset(offset, 1, this.length)
5753 if (!(this[offset] & 0x80)) return (this[offset])
5754 return ((0xff - this[offset] + 1) * -1)
5755}
5756
5757Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
5758 offset = offset >>> 0
5759 if (!noAssert) checkOffset(offset, 2, this.length)
5760 var val = this[offset] | (this[offset + 1] << 8)
5761 return (val & 0x8000) ? val | 0xFFFF0000 : val
5762}
5763
5764Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
5765 offset = offset >>> 0
5766 if (!noAssert) checkOffset(offset, 2, this.length)
5767 var val = this[offset + 1] | (this[offset] << 8)
5768 return (val & 0x8000) ? val | 0xFFFF0000 : val
5769}
5770
5771Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
5772 offset = offset >>> 0
5773 if (!noAssert) checkOffset(offset, 4, this.length)
5774
5775 return (this[offset]) |
5776 (this[offset + 1] << 8) |
5777 (this[offset + 2] << 16) |
5778 (this[offset + 3] << 24)
5779}
5780
5781Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
5782 offset = offset >>> 0
5783 if (!noAssert) checkOffset(offset, 4, this.length)
5784
5785 return (this[offset] << 24) |
5786 (this[offset + 1] << 16) |
5787 (this[offset + 2] << 8) |
5788 (this[offset + 3])
5789}
5790
5791Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
5792 offset = offset >>> 0
5793 if (!noAssert) checkOffset(offset, 4, this.length)
5794 return ieee754.read(this, offset, true, 23, 4)
5795}
5796
5797Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
5798 offset = offset >>> 0
5799 if (!noAssert) checkOffset(offset, 4, this.length)
5800 return ieee754.read(this, offset, false, 23, 4)
5801}
5802
5803Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
5804 offset = offset >>> 0
5805 if (!noAssert) checkOffset(offset, 8, this.length)
5806 return ieee754.read(this, offset, true, 52, 8)
5807}
5808
5809Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
5810 offset = offset >>> 0
5811 if (!noAssert) checkOffset(offset, 8, this.length)
5812 return ieee754.read(this, offset, false, 52, 8)
5813}
5814
5815function checkInt (buf, value, offset, ext, max, min) {
5816 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
5817 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
5818 if (offset + ext > buf.length) throw new RangeError('Index out of range')
5819}
5820
5821Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
5822 value = +value
5823 offset = offset >>> 0
5824 byteLength = byteLength >>> 0
5825 if (!noAssert) {
5826 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5827 checkInt(this, value, offset, byteLength, maxBytes, 0)
5828 }
5829
5830 var mul = 1
5831 var i = 0
5832 this[offset] = value & 0xFF
5833 while (++i < byteLength && (mul *= 0x100)) {
5834 this[offset + i] = (value / mul) & 0xFF
5835 }
5836
5837 return offset + byteLength
5838}
5839
5840Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
5841 value = +value
5842 offset = offset >>> 0
5843 byteLength = byteLength >>> 0
5844 if (!noAssert) {
5845 var maxBytes = Math.pow(2, 8 * byteLength) - 1
5846 checkInt(this, value, offset, byteLength, maxBytes, 0)
5847 }
5848
5849 var i = byteLength - 1
5850 var mul = 1
5851 this[offset + i] = value & 0xFF
5852 while (--i >= 0 && (mul *= 0x100)) {
5853 this[offset + i] = (value / mul) & 0xFF
5854 }
5855
5856 return offset + byteLength
5857}
5858
5859Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
5860 value = +value
5861 offset = offset >>> 0
5862 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
5863 this[offset] = (value & 0xff)
5864 return offset + 1
5865}
5866
5867Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
5868 value = +value
5869 offset = offset >>> 0
5870 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5871 this[offset] = (value & 0xff)
5872 this[offset + 1] = (value >>> 8)
5873 return offset + 2
5874}
5875
5876Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
5877 value = +value
5878 offset = offset >>> 0
5879 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
5880 this[offset] = (value >>> 8)
5881 this[offset + 1] = (value & 0xff)
5882 return offset + 2
5883}
5884
5885Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
5886 value = +value
5887 offset = offset >>> 0
5888 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
5889 this[offset + 3] = (value >>> 24)
5890 this[offset + 2] = (value >>> 16)
5891 this[offset + 1] = (value >>> 8)
5892 this[offset] = (value & 0xff)
5893 return offset + 4
5894}
5895
5896Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
5897 value = +value
5898 offset = offset >>> 0
5899 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
5900 this[offset] = (value >>> 24)
5901 this[offset + 1] = (value >>> 16)
5902 this[offset + 2] = (value >>> 8)
5903 this[offset + 3] = (value & 0xff)
5904 return offset + 4
5905}
5906
5907Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
5908 value = +value
5909 offset = offset >>> 0
5910 if (!noAssert) {
5911 var limit = Math.pow(2, (8 * byteLength) - 1)
5912
5913 checkInt(this, value, offset, byteLength, limit - 1, -limit)
5914 }
5915
5916 var i = 0
5917 var mul = 1
5918 var sub = 0
5919 this[offset] = value & 0xFF
5920 while (++i < byteLength && (mul *= 0x100)) {
5921 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
5922 sub = 1
5923 }
5924 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
5925 }
5926
5927 return offset + byteLength
5928}
5929
5930Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
5931 value = +value
5932 offset = offset >>> 0
5933 if (!noAssert) {
5934 var limit = Math.pow(2, (8 * byteLength) - 1)
5935
5936 checkInt(this, value, offset, byteLength, limit - 1, -limit)
5937 }
5938
5939 var i = byteLength - 1
5940 var mul = 1
5941 var sub = 0
5942 this[offset + i] = value & 0xFF
5943 while (--i >= 0 && (mul *= 0x100)) {
5944 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
5945 sub = 1
5946 }
5947 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
5948 }
5949
5950 return offset + byteLength
5951}
5952
5953Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
5954 value = +value
5955 offset = offset >>> 0
5956 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
5957 if (value < 0) value = 0xff + value + 1
5958 this[offset] = (value & 0xff)
5959 return offset + 1
5960}
5961
5962Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
5963 value = +value
5964 offset = offset >>> 0
5965 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
5966 this[offset] = (value & 0xff)
5967 this[offset + 1] = (value >>> 8)
5968 return offset + 2
5969}
5970
5971Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
5972 value = +value
5973 offset = offset >>> 0
5974 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
5975 this[offset] = (value >>> 8)
5976 this[offset + 1] = (value & 0xff)
5977 return offset + 2
5978}
5979
5980Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
5981 value = +value
5982 offset = offset >>> 0
5983 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
5984 this[offset] = (value & 0xff)
5985 this[offset + 1] = (value >>> 8)
5986 this[offset + 2] = (value >>> 16)
5987 this[offset + 3] = (value >>> 24)
5988 return offset + 4
5989}
5990
5991Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
5992 value = +value
5993 offset = offset >>> 0
5994 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
5995 if (value < 0) value = 0xffffffff + value + 1
5996 this[offset] = (value >>> 24)
5997 this[offset + 1] = (value >>> 16)
5998 this[offset + 2] = (value >>> 8)
5999 this[offset + 3] = (value & 0xff)
6000 return offset + 4
6001}
6002
6003function checkIEEE754 (buf, value, offset, ext, max, min) {
6004 if (offset + ext > buf.length) throw new RangeError('Index out of range')
6005 if (offset < 0) throw new RangeError('Index out of range')
6006}
6007
6008function writeFloat (buf, value, offset, littleEndian, noAssert) {
6009 value = +value
6010 offset = offset >>> 0
6011 if (!noAssert) {
6012 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
6013 }
6014 ieee754.write(buf, value, offset, littleEndian, 23, 4)
6015 return offset + 4
6016}
6017
6018Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
6019 return writeFloat(this, value, offset, true, noAssert)
6020}
6021
6022Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
6023 return writeFloat(this, value, offset, false, noAssert)
6024}
6025
6026function writeDouble (buf, value, offset, littleEndian, noAssert) {
6027 value = +value
6028 offset = offset >>> 0
6029 if (!noAssert) {
6030 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
6031 }
6032 ieee754.write(buf, value, offset, littleEndian, 52, 8)
6033 return offset + 8
6034}
6035
6036Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
6037 return writeDouble(this, value, offset, true, noAssert)
6038}
6039
6040Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
6041 return writeDouble(this, value, offset, false, noAssert)
6042}
6043
6044// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
6045Buffer.prototype.copy = function copy (target, targetStart, start, end) {
6046 if (!start) start = 0
6047 if (!end && end !== 0) end = this.length
6048 if (targetStart >= target.length) targetStart = target.length
6049 if (!targetStart) targetStart = 0
6050 if (end > 0 && end < start) end = start
6051
6052 // Copy 0 bytes; we're done
6053 if (end === start) return 0
6054 if (target.length === 0 || this.length === 0) return 0
6055
6056 // Fatal error conditions
6057 if (targetStart < 0) {
6058 throw new RangeError('targetStart out of bounds')
6059 }
6060 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
6061 if (end < 0) throw new RangeError('sourceEnd out of bounds')
6062
6063 // Are we oob?
6064 if (end > this.length) end = this.length
6065 if (target.length - targetStart < end - start) {
6066 end = target.length - targetStart + start
6067 }
6068
6069 var len = end - start
6070 var i
6071
6072 if (this === target && start < targetStart && targetStart < end) {
6073 // descending copy from end
6074 for (i = len - 1; i >= 0; --i) {
6075 target[i + targetStart] = this[i + start]
6076 }
6077 } else if (len < 1000) {
6078 // ascending copy from start
6079 for (i = 0; i < len; ++i) {
6080 target[i + targetStart] = this[i + start]
6081 }
6082 } else {
6083 Uint8Array.prototype.set.call(
6084 target,
6085 this.subarray(start, start + len),
6086 targetStart
6087 )
6088 }
6089
6090 return len
6091}
6092
6093// Usage:
6094// buffer.fill(number[, offset[, end]])
6095// buffer.fill(buffer[, offset[, end]])
6096// buffer.fill(string[, offset[, end]][, encoding])
6097Buffer.prototype.fill = function fill (val, start, end, encoding) {
6098 // Handle string cases:
6099 if (typeof val === 'string') {
6100 if (typeof start === 'string') {
6101 encoding = start
6102 start = 0
6103 end = this.length
6104 } else if (typeof end === 'string') {
6105 encoding = end
6106 end = this.length
6107 }
6108 if (val.length === 1) {
6109 var code = val.charCodeAt(0)
6110 if (code < 256) {
6111 val = code
6112 }
6113 }
6114 if (encoding !== undefined && typeof encoding !== 'string') {
6115 throw new TypeError('encoding must be a string')
6116 }
6117 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
6118 throw new TypeError('Unknown encoding: ' + encoding)
6119 }
6120 } else if (typeof val === 'number') {
6121 val = val & 255
6122 }
6123
6124 // Invalid ranges are not set to a default, so can range check early.
6125 if (start < 0 || this.length < start || this.length < end) {
6126 throw new RangeError('Out of range index')
6127 }
6128
6129 if (end <= start) {
6130 return this
6131 }
6132
6133 start = start >>> 0
6134 end = end === undefined ? this.length : end >>> 0
6135
6136 if (!val) val = 0
6137
6138 var i
6139 if (typeof val === 'number') {
6140 for (i = start; i < end; ++i) {
6141 this[i] = val
6142 }
6143 } else {
6144 var bytes = Buffer.isBuffer(val)
6145 ? val
6146 : new Buffer(val, encoding)
6147 var len = bytes.length
6148 for (i = 0; i < end - start; ++i) {
6149 this[i + start] = bytes[i % len]
6150 }
6151 }
6152
6153 return this
6154}
6155
6156// HELPER FUNCTIONS
6157// ================
6158
6159var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
6160
6161function base64clean (str) {
6162 // Node strips out invalid characters like \n and \t from the string, base64-js does not
6163 str = str.trim().replace(INVALID_BASE64_RE, '')
6164 // Node converts strings with length < 2 to ''
6165 if (str.length < 2) return ''
6166 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
6167 while (str.length % 4 !== 0) {
6168 str = str + '='
6169 }
6170 return str
6171}
6172
6173function toHex (n) {
6174 if (n < 16) return '0' + n.toString(16)
6175 return n.toString(16)
6176}
6177
6178function utf8ToBytes (string, units) {
6179 units = units || Infinity
6180 var codePoint
6181 var length = string.length
6182 var leadSurrogate = null
6183 var bytes = []
6184
6185 for (var i = 0; i < length; ++i) {
6186 codePoint = string.charCodeAt(i)
6187
6188 // is surrogate component
6189 if (codePoint > 0xD7FF && codePoint < 0xE000) {
6190 // last char was a lead
6191 if (!leadSurrogate) {
6192 // no lead yet
6193 if (codePoint > 0xDBFF) {
6194 // unexpected trail
6195 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6196 continue
6197 } else if (i + 1 === length) {
6198 // unpaired lead
6199 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6200 continue
6201 }
6202
6203 // valid lead
6204 leadSurrogate = codePoint
6205
6206 continue
6207 }
6208
6209 // 2 leads in a row
6210 if (codePoint < 0xDC00) {
6211 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6212 leadSurrogate = codePoint
6213 continue
6214 }
6215
6216 // valid surrogate pair
6217 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
6218 } else if (leadSurrogate) {
6219 // valid bmp char, but last char was a lead
6220 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
6221 }
6222
6223 leadSurrogate = null
6224
6225 // encode utf8
6226 if (codePoint < 0x80) {
6227 if ((units -= 1) < 0) break
6228 bytes.push(codePoint)
6229 } else if (codePoint < 0x800) {
6230 if ((units -= 2) < 0) break
6231 bytes.push(
6232 codePoint >> 0x6 | 0xC0,
6233 codePoint & 0x3F | 0x80
6234 )
6235 } else if (codePoint < 0x10000) {
6236 if ((units -= 3) < 0) break
6237 bytes.push(
6238 codePoint >> 0xC | 0xE0,
6239 codePoint >> 0x6 & 0x3F | 0x80,
6240 codePoint & 0x3F | 0x80
6241 )
6242 } else if (codePoint < 0x110000) {
6243 if ((units -= 4) < 0) break
6244 bytes.push(
6245 codePoint >> 0x12 | 0xF0,
6246 codePoint >> 0xC & 0x3F | 0x80,
6247 codePoint >> 0x6 & 0x3F | 0x80,
6248 codePoint & 0x3F | 0x80
6249 )
6250 } else {
6251 throw new Error('Invalid code point')
6252 }
6253 }
6254
6255 return bytes
6256}
6257
6258function asciiToBytes (str) {
6259 var byteArray = []
6260 for (var i = 0; i < str.length; ++i) {
6261 // Node's code seems to be doing this and not & 0x7F..
6262 byteArray.push(str.charCodeAt(i) & 0xFF)
6263 }
6264 return byteArray
6265}
6266
6267function utf16leToBytes (str, units) {
6268 var c, hi, lo
6269 var byteArray = []
6270 for (var i = 0; i < str.length; ++i) {
6271 if ((units -= 2) < 0) break
6272
6273 c = str.charCodeAt(i)
6274 hi = c >> 8
6275 lo = c % 256
6276 byteArray.push(lo)
6277 byteArray.push(hi)
6278 }
6279
6280 return byteArray
6281}
6282
6283function base64ToBytes (str) {
6284 return base64.toByteArray(base64clean(str))
6285}
6286
6287function blitBuffer (src, dst, offset, length) {
6288 for (var i = 0; i < length; ++i) {
6289 if ((i + offset >= dst.length) || (i >= src.length)) break
6290 dst[i + offset] = src[i]
6291 }
6292 return i
6293}
6294
6295// Node 0.10 supports `ArrayBuffer` but lacks `ArrayBuffer.isView`
6296function isArrayBufferView (obj) {
6297 return (typeof ArrayBuffer.isView === 'function') && ArrayBuffer.isView(obj)
6298}
6299
6300function numberIsNaN (obj) {
6301 return obj !== obj // eslint-disable-line no-self-compare
6302}
6303
6304},{"base64-js":1,"ieee754":3}],3:[function(require,module,exports){
6305exports.read = function (buffer, offset, isLE, mLen, nBytes) {
6306 var e, m
6307 var eLen = nBytes * 8 - mLen - 1
6308 var eMax = (1 << eLen) - 1
6309 var eBias = eMax >> 1
6310 var nBits = -7
6311 var i = isLE ? (nBytes - 1) : 0
6312 var d = isLE ? -1 : 1
6313 var s = buffer[offset + i]
6314
6315 i += d
6316
6317 e = s & ((1 << (-nBits)) - 1)
6318 s >>= (-nBits)
6319 nBits += eLen
6320 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6321
6322 m = e & ((1 << (-nBits)) - 1)
6323 e >>= (-nBits)
6324 nBits += mLen
6325 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
6326
6327 if (e === 0) {
6328 e = 1 - eBias
6329 } else if (e === eMax) {
6330 return m ? NaN : ((s ? -1 : 1) * Infinity)
6331 } else {
6332 m = m + Math.pow(2, mLen)
6333 e = e - eBias
6334 }
6335 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
6336}
6337
6338exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
6339 var e, m, c
6340 var eLen = nBytes * 8 - mLen - 1
6341 var eMax = (1 << eLen) - 1
6342 var eBias = eMax >> 1
6343 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
6344 var i = isLE ? 0 : (nBytes - 1)
6345 var d = isLE ? 1 : -1
6346 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
6347
6348 value = Math.abs(value)
6349
6350 if (isNaN(value) || value === Infinity) {
6351 m = isNaN(value) ? 1 : 0
6352 e = eMax
6353 } else {
6354 e = Math.floor(Math.log(value) / Math.LN2)
6355 if (value * (c = Math.pow(2, -e)) < 1) {
6356 e--
6357 c *= 2
6358 }
6359 if (e + eBias >= 1) {
6360 value += rt / c
6361 } else {
6362 value += rt * Math.pow(2, 1 - eBias)
6363 }
6364 if (value * c >= 2) {
6365 e++
6366 c /= 2
6367 }
6368
6369 if (e + eBias >= eMax) {
6370 m = 0
6371 e = eMax
6372 } else if (e + eBias >= 1) {
6373 m = (value * c - 1) * Math.pow(2, mLen)
6374 e = e + eBias
6375 } else {
6376 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
6377 e = 0
6378 }
6379 }
6380
6381 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
6382
6383 e = (e << mLen) | m
6384 eLen += mLen
6385 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
6386
6387 buffer[offset + i - d] |= s * 128
6388}
6389
6390},{}],4:[function(require,module,exports){
6391window.basex = require('base-x')
6392},{"base-x":5}],5:[function(require,module,exports){
6393// base-x encoding
6394// Forked from https://github.com/cryptocoinjs/bs58
6395// Originally written by Mike Hearn for BitcoinJ
6396// Copyright (c) 2011 Google Inc
6397// Ported to JavaScript by Stefan Thomas
6398// Merged Buffer refactorings from base58-native by Stephen Pair
6399// Copyright (c) 2013 BitPay Inc
6400
6401var Buffer = require('safe-buffer').Buffer
6402
6403module.exports = function base (ALPHABET) {
6404 var ALPHABET_MAP = {}
6405 var BASE = ALPHABET.length
6406 var LEADER = ALPHABET.charAt(0)
6407
6408 // pre-compute lookup table
6409 for (var z = 0; z < ALPHABET.length; z++) {
6410 var x = ALPHABET.charAt(z)
6411
6412 if (ALPHABET_MAP[x] !== undefined) throw new TypeError(x + ' is ambiguous')
6413 ALPHABET_MAP[x] = z
6414 }
6415
6416 function encode (source) {
6417 if (source.length === 0) return ''
6418
6419 var digits = [0]
6420 for (var i = 0; i < source.length; ++i) {
6421 for (var j = 0, carry = source[i]; j < digits.length; ++j) {
6422 carry += digits[j] << 8
6423 digits[j] = carry % BASE
6424 carry = (carry / BASE) | 0
6425 }
6426
6427 while (carry > 0) {
6428 digits.push(carry % BASE)
6429 carry = (carry / BASE) | 0
6430 }
6431 }
6432
6433 var string = ''
6434
6435 // deal with leading zeros
6436 for (var k = 0; source[k] === 0 && k < source.length - 1; ++k) string += ALPHABET[0]
6437 // convert digits to a string
6438 for (var q = digits.length - 1; q >= 0; --q) string += ALPHABET[digits[q]]
6439
6440 return string
6441 }
6442
6443 function decodeUnsafe (string) {
6444 if (string.length === 0) return Buffer.allocUnsafe(0)
6445
6446 var bytes = [0]
6447 for (var i = 0; i < string.length; i++) {
6448 var value = ALPHABET_MAP[string[i]]
6449 if (value === undefined) return
6450
6451 for (var j = 0, carry = value; j < bytes.length; ++j) {
6452 carry += bytes[j] * BASE
6453 bytes[j] = carry & 0xff
6454 carry >>= 8
6455 }
6456
6457 while (carry > 0) {
6458 bytes.push(carry & 0xff)
6459 carry >>= 8
6460 }
6461 }
6462
6463 // deal with leading zeros
6464 for (var k = 0; string[k] === LEADER && k < string.length - 1; ++k) {
6465 bytes.push(0)
6466 }
6467
6468 return Buffer.from(bytes.reverse())
6469 }
6470
6471 function decode (string) {
6472 var buffer = decodeUnsafe(string)
6473 if (buffer) return buffer
6474
6475 throw new Error('Non-base' + BASE + ' character')
6476 }
6477
6478 return {
6479 encode: encode,
6480 decodeUnsafe: decodeUnsafe,
6481 decode: decode
6482 }
6483}
6484
6485},{"safe-buffer":6}],6:[function(require,module,exports){
6486module.exports = require('buffer')
6487
6488},{"buffer":2}]},{},[4])(4)
6489});</script>
6e0f24b1
IC
6490 <script>(function (root) {
6491 "use strict";
6492
6493/***** unorm.js *****/
6494
6495/*
6496 * UnicodeNormalizer 1.0.0
6497 * Copyright (c) 2008 Matsuza
6498 * Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses.
6499 * $Date: 2008-06-05 16:44:17 +0200 (Thu, 05 Jun 2008) $
6500 * $Rev: 13309 $
6501 */
6502
6503 var DEFAULT_FEATURE = [null, 0, {}];
6504 var CACHE_THRESHOLD = 10;
6505 var SBase = 0xAC00, LBase = 0x1100, VBase = 0x1161, TBase = 0x11A7, LCount = 19, VCount = 21, TCount = 28;
6506 var NCount = VCount * TCount; // 588
6507 var SCount = LCount * NCount; // 11172
6508
6509 var UChar = function(cp, feature){
6510 this.codepoint = cp;
6511 this.feature = feature;
6512 };
6513
6514 // Strategies
6515 var cache = {};
6516 var cacheCounter = [];
6517 for (var i = 0; i <= 0xFF; ++i){
6518 cacheCounter[i] = 0;
6519 }
6520
6521 function fromCache(next, cp, needFeature){
6522 var ret = cache[cp];
6523 if(!ret){
6524 ret = next(cp, needFeature);
6525 if(!!ret.feature && ++cacheCounter[(cp >> 8) & 0xFF] > CACHE_THRESHOLD){
6526 cache[cp] = ret;
6527 }
6528 }
6529 return ret;
6530 }
6531
6532 function fromData(next, cp, needFeature){
6533 var hash = cp & 0xFF00;
6534 var dunit = UChar.udata[hash] || {};
6535 var f = dunit[cp];
6536 return f ? new UChar(cp, f) : new UChar(cp, DEFAULT_FEATURE);
6537 }
6538 function fromCpOnly(next, cp, needFeature){
6539 return !!needFeature ? next(cp, needFeature) : new UChar(cp, null);
6540 }
6541 function fromRuleBasedJamo(next, cp, needFeature){
6542 var j;
6543 if(cp < LBase || (LBase + LCount <= cp && cp < SBase) || (SBase + SCount < cp)){
6544 return next(cp, needFeature);
6545 }
6546 if(LBase <= cp && cp < LBase + LCount){
6547 var c = {};
6548 var base = (cp - LBase) * VCount;
6549 for (j = 0; j < VCount; ++j){
6550 c[VBase + j] = SBase + TCount * (j + base);
6551 }
6552 return new UChar(cp, [,,c]);
6553 }
6554
6555 var SIndex = cp - SBase;
6556 var TIndex = SIndex % TCount;
6557 var feature = [];
6558 if(TIndex !== 0){
6559 feature[0] = [SBase + SIndex - TIndex, TBase + TIndex];
6560 } else {
6561 feature[0] = [LBase + Math.floor(SIndex / NCount), VBase + Math.floor((SIndex % NCount) / TCount)];
6562 feature[2] = {};
6563 for (j = 1; j < TCount; ++j){
6564 feature[2][TBase + j] = cp + j;
6565 }
6566 }
6567 return new UChar(cp, feature);
6568 }
6569 function fromCpFilter(next, cp, needFeature){
6570 return cp < 60 || 13311 < cp && cp < 42607 ? new UChar(cp, DEFAULT_FEATURE) : next(cp, needFeature);
6571 }
6572
6573 var strategies = [fromCpFilter, fromCache, fromCpOnly, fromRuleBasedJamo, fromData];
6574
6575 UChar.fromCharCode = strategies.reduceRight(function (next, strategy) {
6576 return function (cp, needFeature) {
6577 return strategy(next, cp, needFeature);
6578 };
6579 }, null);
6580
6581 UChar.isHighSurrogate = function(cp){
6582 return cp >= 0xD800 && cp <= 0xDBFF;
6583 };
6584 UChar.isLowSurrogate = function(cp){
6585 return cp >= 0xDC00 && cp <= 0xDFFF;
6586 };
6587
6588 UChar.prototype.prepFeature = function(){
6589 if(!this.feature){
6590 this.feature = UChar.fromCharCode(this.codepoint, true).feature;
6591 }
6592 };
6593
6594 UChar.prototype.toString = function(){
6595 if(this.codepoint < 0x10000){
6596 return String.fromCharCode(this.codepoint);
6597 } else {
6598 var x = this.codepoint - 0x10000;
6599 return String.fromCharCode(Math.floor(x / 0x400) + 0xD800, x % 0x400 + 0xDC00);
6600 }
6601 };
6602
6603 UChar.prototype.getDecomp = function(){
6604 this.prepFeature();
6605 return this.feature[0] || null;
6606 };
6607
6608 UChar.prototype.isCompatibility = function(){
6609 this.prepFeature();
6610 return !!this.feature[1] && (this.feature[1] & (1 << 8));
6611 };
6612 UChar.prototype.isExclude = function(){
6613 this.prepFeature();
6614 return !!this.feature[1] && (this.feature[1] & (1 << 9));
6615 };
6616 UChar.prototype.getCanonicalClass = function(){
6617 this.prepFeature();
6618 return !!this.feature[1] ? (this.feature[1] & 0xff) : 0;
6619 };
6620 UChar.prototype.getComposite = function(following){
6621 this.prepFeature();
6622 if(!this.feature[2]){
6623 return null;
6624 }
6625 var cp = this.feature[2][following.codepoint];
6626 return cp ? UChar.fromCharCode(cp) : null;
6627 };
6628
6629 var UCharIterator = function(str){
6630 this.str = str;
6631 this.cursor = 0;
6632 };
6633 UCharIterator.prototype.next = function(){
6634 if(!!this.str && this.cursor < this.str.length){
6635 var cp = this.str.charCodeAt(this.cursor++);
6636 var d;
6637 if(UChar.isHighSurrogate(cp) && this.cursor < this.str.length && UChar.isLowSurrogate((d = this.str.charCodeAt(this.cursor)))){
6638 cp = (cp - 0xD800) * 0x400 + (d -0xDC00) + 0x10000;
6639 ++this.cursor;
6640 }
6641 return UChar.fromCharCode(cp);
6642 } else {
6643 this.str = null;
6644 return null;
6645 }
6646 };
6647
6648 var RecursDecompIterator = function(it, cano){
6649 this.it = it;
6650 this.canonical = cano;
6651 this.resBuf = [];
6652 };
6653
6654 RecursDecompIterator.prototype.next = function(){
6655 function recursiveDecomp(cano, uchar){
6656 var decomp = uchar.getDecomp();
6657 if(!!decomp && !(cano && uchar.isCompatibility())){
6658 var ret = [];
6659 for(var i = 0; i < decomp.length; ++i){
6660 var a = recursiveDecomp(cano, UChar.fromCharCode(decomp[i]));
6661 ret = ret.concat(a);
6662 }
6663 return ret;
6664 } else {
6665 return [uchar];
6666 }
6667 }
6668 if(this.resBuf.length === 0){
6669 var uchar = this.it.next();
6670 if(!uchar){
6671 return null;
6672 }
6673 this.resBuf = recursiveDecomp(this.canonical, uchar);
6674 }
6675 return this.resBuf.shift();
6676 };
6677
6678 var DecompIterator = function(it){
6679 this.it = it;
6680 this.resBuf = [];
6681 };
6682
6683 DecompIterator.prototype.next = function(){
6684 var cc;
6685 if(this.resBuf.length === 0){
6686 do{
6687 var uchar = this.it.next();
6688 if(!uchar){
6689 break;
6690 }
6691 cc = uchar.getCanonicalClass();
6692 var inspt = this.resBuf.length;
6693 if(cc !== 0){
6694 for(; inspt > 0; --inspt){
6695 var uchar2 = this.resBuf[inspt - 1];
6696 var cc2 = uchar2.getCanonicalClass();
6697 if(cc2 <= cc){
6698 break;
6699 }
6700 }
6701 }
6702 this.resBuf.splice(inspt, 0, uchar);
6703 } while(cc !== 0);
6704 }
6705 return this.resBuf.shift();
6706 };
6707
6708 var CompIterator = function(it){
6709 this.it = it;
6710 this.procBuf = [];
6711 this.resBuf = [];
6712 this.lastClass = null;
6713 };
6714
6715 CompIterator.prototype.next = function(){
6716 while(this.resBuf.length === 0){
6717 var uchar = this.it.next();
6718 if(!uchar){
6719 this.resBuf = this.procBuf;
6720 this.procBuf = [];
6721 break;
6722 }
6723 if(this.procBuf.length === 0){
6724 this.lastClass = uchar.getCanonicalClass();
6725 this.procBuf.push(uchar);
6726 } else {
6727 var starter = this.procBuf[0];
6728 var composite = starter.getComposite(uchar);
6729 var cc = uchar.getCanonicalClass();
6730 if(!!composite && (this.lastClass < cc || this.lastClass === 0)){
6731 this.procBuf[0] = composite;
6732 } else {
6733 if(cc === 0){
6734 this.resBuf = this.procBuf;
6735 this.procBuf = [];
6736 }
6737 this.lastClass = cc;
6738 this.procBuf.push(uchar);
6739 }
6740 }
6741 }
6742 return this.resBuf.shift();
6743 };
6744
6745 var createIterator = function(mode, str){
6746 switch(mode){
6747 case "NFD":
6748 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true));
6749 case "NFKD":
6750 return new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false));
6751 case "NFC":
6752 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), true)));
6753 case "NFKC":
6754 return new CompIterator(new DecompIterator(new RecursDecompIterator(new UCharIterator(str), false)));
6755 }
6756 throw mode + " is invalid";
6757 };
6758 var normalize = function(mode, str){
6759 var it = createIterator(mode, str);
6760 var ret = "";
6761 var uchar;
6762 while(!!(uchar = it.next())){
6763 ret += uchar.toString();
6764 }
6765 return ret;
6766 };
6767
6768 /* API functions */
6769 function nfd(str){
6770 return normalize("NFD", str);
6771 }
6772
6773 function nfkd(str){
6774 return normalize("NFKD", str);
6775 }
6776
6777 function nfc(str){
6778 return normalize("NFC", str);
6779 }
6780
6781 function nfkc(str){
6782 return normalize("NFKC", str);
6783 }
6784
6785/* Unicode data */
6786UChar.udata={
67870:{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]]},
6788256:{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]},
6789512:{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]},
6790768:{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]},
67911024:{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]]},
67921280:{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]},
67931536:{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]},
67941792:{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]},
67952048:{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]},
67962304:{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]},
67972560:{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]},
67982816:{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]},
67993072:{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]},
68003328:{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]]},
68013584:{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]},
68023840:{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]},
68034096:{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]},
68044352:{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]},
68054608:{70197:[,9],70198:[,7],70377:[,7],70378:[,9]},
68064864:{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]},
68075120:{70841:[,,{70832:70844,70842:70843,70845:70846}],70843:[[70841,70842]],70844:[[70841,70832]],70846:[[70841,70845]],70850:[,9],70851:[,7]},
68085376:{71096:[,,{71087:71098}],71097:[,,{71087:71099}],71098:[[71096,71087]],71099:[[71097,71087]],71103:[,9],71104:[,7]},
68095632:{71231:[,9],71350:[,9],71351:[,7]},
68105888:{5908:[,9],5940:[,9],6098:[,9],6109:[,230]},
68116144:{6313:[,228]},
68126400:{6457:[,222],6458:[,230],6459:[,220]},
68136656:{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]},
68146912:{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]},
68157168:{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]},
68167424:{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]},
68177680:{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]]},
68187936:{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}]},
68198192:{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]},
68208448:{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}]},
68218704:{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]]},
68228960:{9001:[[12296]],9002:[[12297]]},
68239216:{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]},
682410752:{10764:[[8747,8747,8747,8747],256],10868:[[58,58,61],256],10869:[[61,61],256],10870:[[61,61,61],256],10972:[[10973,824],512]},
682511264:{11388:[[106],256],11389:[[86],256],11503:[,230],11504:[,230],11505:[,230]},
682611520:{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]},
682711776:{11935:[[27597],256],12019:[[40863],256]},
682812032:{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]},
682912288:{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]},
683012544:{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]},
683112800:{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]},
683213056:{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]},
683327136:{92912:[,1],92913:[,1],92914:[,1],92915:[,1],92916:[,1]},
683427392:{92976:[,230],92977:[,230],92978:[,230],92979:[,230],92980:[,230],92981:[,230],92982:[,230]},
683542496:{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]},
683642752:{42864:[[42863],256],43000:[[294],256],43001:[[339],256]},
683743008:{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]},
683843264:{43307:[,220],43308:[,220],43309:[,220],43347:[,9],43443:[,7],43456:[,9]},
683943520:{43696:[,230],43698:[,230],43699:[,230],43700:[,220],43703:[,230],43704:[,230],43710:[,230],43711:[,230],43713:[,230],43766:[,9]},
684043776:{43868:[[42791],256],43869:[[43831],256],43870:[[619],256],43871:[[43858],256],44013:[,9]},
684148128:{113822:[,1]},
684253504:{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]},
684353760:{119362:[,230],119363:[,230],119364:[,230]},
684454272:{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]},
684554528:{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]},
684654784:{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]},
684755040:{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]},
684859392:{125136:[,220],125137:[,220],125138:[,220],125139:[,220],125140:[,220],125141:[,220],125142:[,220]},
684960928:{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]},
685061696:{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]},
685161952:{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]},
685263488:{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]]},
685363744:{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]]},
685464000:{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]]},
685564256:{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]},
685664512:{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]},
685764768:{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]},
685865024:{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]},
685965280:{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]}
6860
6861};
6862
6863 /***** Module to export */
6864 var unorm = {
6865 nfc: nfc,
6866 nfd: nfd,
6867 nfkc: nfkc,
6868 nfkd: nfkd
6869 };
6870
6871 /*globals module:true,define:true*/
6872
6873 // CommonJS
6874 if (typeof module === "object") {
6875 module.exports = unorm;
6876
6877 // AMD
6878 } else if (typeof define === "function" && define.amd) {
6879 define("unorm", function () {
6880 return unorm;
6881 });
6882
6883 // Global
6884 } else {
6885 root.unorm = unorm;
6886 }
6887
6888 /***** Export as shim for String::normalize method *****/
6889 /*
6890 http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts#november_8_2013_draft_rev_21
6891
6892 21.1.3.12 String.prototype.normalize(form="NFC")
6893 When the normalize method is called with one argument form, the following steps are taken:
6894
6895 1. Let O be CheckObjectCoercible(this value).
6896 2. Let S be ToString(O).
6897 3. ReturnIfAbrupt(S).
6898 4. If form is not provided or undefined let form be "NFC".
6899 5. Let f be ToString(form).
6900 6. ReturnIfAbrupt(f).
6901 7. If f is not one of "NFC", "NFD", "NFKC", or "NFKD", then throw a RangeError Exception.
6902 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.
6903 9. Return ns.
6904
6905 The length property of the normalize method is 0.
6906
6907 *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.
6908 */
6909 unorm.shimApplied = false;
6910
6911 if (!String.prototype.normalize) {
6912 String.prototype.normalize = function(form) {
6913 var str = "" + this;
6914 form = form === undefined ? "NFC" : form;
6915
6916 if (form === "NFC") {
6917 return unorm.nfc(str);
6918 } else if (form === "NFD") {
6919 return unorm.nfd(str);
6920 } else if (form === "NFKC") {
6921 return unorm.nfkc(str);
6922 } else if (form === "NFKD") {
6923 return unorm.nfkd(str);
6924 } else {
6925 throw new RangeError("Invalid normalization form: " + form);
6926 }
6927 };
6928
6929 unorm.shimApplied = true;
6930 }
6931}(this));
8b095871
IC
6932</script>
6933 <script>/*! jQuery v2.1.1 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */
6934!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)
6935},_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))
6936},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});
6937</script>
6938 <script>/*!
6939 * Bootstrap v3.2.0 (http://getbootstrap.com)
6940 * Copyright 2011-2014 Twitter, Inc.
6941 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
6942 */
6943if("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>
6944 <script>(function() {
6945 'use strict';
6946
6947 /**
6948 * Extend an Object with another Object's properties.
6949 *
6950 * The source objects are specified as additional arguments.
6951 *
6952 * @param dst Object the object to extend.
6953 *
6954 * @return Object the final object.
6955 */
6956 var _extend = function(dst) {
6957 var sources = Array.prototype.slice.call(arguments, 1);
6958 for (var i=0; i<sources.length; ++i) {
6959 var src = sources[i];
6960 for (var p in src) {
6961 if (src.hasOwnProperty(p)) dst[p] = src[p];
6962 }
6963 }
6964 return dst;
6965 };
6966
6967
6968 /**
6969 * Defer execution of given function.
6970 * @param {Function} func
6971 */
6972 var _defer = function(func) {
6973 if (typeof setImmediate === 'function') {
6974 return setImmediate(func);
6975 } else {
6976 return setTimeout(func, 0);
6977 }
6978 };
6979
6980 /**
6981 * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance.
6982 */
6983 var Levenshtein = {
6984 /**
6985 * Calculate levenshtein distance of the two strings.
6986 *
6987 * @param str1 String the first string.
6988 * @param str2 String the second string.
6989 * @return Integer the levenshtein distance (0 and above).
6990 */
6991 get: function(str1, str2) {
6992 // base cases
6993 if (str1 === str2) return 0;
6994 if (str1.length === 0) return str2.length;
6995 if (str2.length === 0) return str1.length;
6996
6997 // two rows
6998 var prevRow = new Array(str2.length + 1),
6999 curCol, nextCol, i, j, tmp;
7000
7001 // initialise previous row
7002 for (i=0; i<prevRow.length; ++i) {
7003 prevRow[i] = i;
7004 }
7005
7006 // calculate current row distance from previous row
7007 for (i=0; i<str1.length; ++i) {
7008 nextCol = i + 1;
7009
7010 for (j=0; j<str2.length; ++j) {
7011 curCol = nextCol;
7012
7013 // substution
7014 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7015 // insertion
7016 tmp = curCol + 1;
7017 if (nextCol > tmp) {
7018 nextCol = tmp;
7019 }
7020 // deletion
7021 tmp = prevRow[j + 1] + 1;
7022 if (nextCol > tmp) {
7023 nextCol = tmp;
7024 }
7025
7026 // copy current col value into previous (in preparation for next iteration)
7027 prevRow[j] = curCol;
7028 }
7029
7030 // copy last col value into previous (in preparation for next iteration)
7031 prevRow[j] = nextCol;
7032 }
7033
7034 return nextCol;
7035 },
7036
7037 /**
7038 * Asynchronously calculate levenshtein distance of the two strings.
7039 *
7040 * @param str1 String the first string.
7041 * @param str2 String the second string.
7042 * @param cb Function callback function with signature: function(Error err, int distance)
7043 * @param [options] Object additional options.
7044 * @param [options.progress] Function progress callback with signature: function(percentComplete)
7045 */
7046 getAsync: function(str1, str2, cb, options) {
7047 options = _extend({}, {
7048 progress: null
7049 }, options);
7050
7051 // base cases
7052 if (str1 === str2) return cb(null, 0);
7053 if (str1.length === 0) return cb(null, str2.length);
7054 if (str2.length === 0) return cb(null, str1.length);
7055
7056 // two rows
7057 var prevRow = new Array(str2.length + 1),
7058 curCol, nextCol,
7059 i, j, tmp,
7060 startTime, currentTime;
7061
7062 // initialise previous row
7063 for (i=0; i<prevRow.length; ++i) {
7064 prevRow[i] = i;
7065 }
7066
7067 nextCol = 1;
7068 i = 0;
7069 j = -1;
7070
7071 var __calculate = function() {
7072 // reset timer
7073 startTime = new Date().valueOf();
7074 currentTime = startTime;
7075
7076 // keep going until one second has elapsed
7077 while (currentTime - startTime < 1000) {
7078 // reached end of current row?
7079 if (str2.length <= (++j)) {
7080 // copy current into previous (in preparation for next iteration)
7081 prevRow[j] = nextCol;
7082
7083 // if already done all chars
7084 if (str1.length <= (++i)) {
7085 return cb(null, nextCol);
7086 }
7087 // else if we have more left to do
7088 else {
7089 nextCol = i + 1;
7090 j = 0;
7091 }
7092 }
7093
7094 // calculation
7095 curCol = nextCol;
7096
7097 // substution
7098 nextCol = prevRow[j] + ( (str1.charAt(i) === str2.charAt(j)) ? 0 : 1 );
7099 // insertion
7100 tmp = curCol + 1;
7101 if (nextCol > tmp) {
7102 nextCol = tmp;
7103 }
7104 // deletion
7105 tmp = prevRow[j + 1] + 1;
7106 if (nextCol > tmp) {
7107 nextCol = tmp;
7108 }
7109
7110 // copy current into previous (in preparation for next iteration)
7111 prevRow[j] = curCol;
7112
7113 // get current time
7114 currentTime = new Date().valueOf();
7115 }
7116
7117 // send a progress update?
7118 if (null !== options.progress) {
7119 try {
7120 options.progress.call(null, (i * 100.0/ str1.length));
7121 } catch (err) {
7122 return cb('Progress callback: ' + err.toString());
7123 }
7124 }
7125
7126 // next iteration
7127 _defer(__calculate);
7128 };
7129
7130 __calculate();
7131 }
7132
7133 };
7134
7135 // amd
7136 if (typeof define !== "undefined" && define !== null && define.amd) {
7137 define(function() {
7138 return Levenshtein;
7139 });
7140 }
7141 // commonjs
7142 else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) {
7143 module.exports = Levenshtein;
7144 }
7145 // web worker
7146 else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') {
7147 self.Levenshtein = Levenshtein;
7148 }
7149 // browser main thread
7150 else if (typeof window !== "undefined" && window !== null) {
7151 window.Levenshtein = Levenshtein;
7152 }
7153}());
7154
7155</script>
7156 <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},
7157write: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;
7158for(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-
71597,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]=
71600<=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},
7161setupTimingPattern: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=
7162j.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-
7163b-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,
7164c),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=
71650,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&&
7166(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,
716778,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)-
7168j.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:"+
7169a);}},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:"+
7170a);}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+
71712)&&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),
7172LOG_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>
7173this.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],
7174[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,
7175116],[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,
717643,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,
71773,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,
717855,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,
717945,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*
7180(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,
7181correctLevel: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),
7182j=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",
7183d+"px").css("background-color",a.isDark(e,i)?h.foreground:h.background).appendTo(f)}}a=c;$(a).appendTo(this)})}})($);
7184</script>
7185 <script>(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.bitcoin = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
7186// (public) Constructor
7187function BigInteger(a, b, c) {
7188 if (!(this instanceof BigInteger))
7189 return new BigInteger(a, b, c)
7190
7191 if (a != null) {
7192 if ("number" == typeof a) this.fromNumber(a, b, c)
7193 else if (b == null && "string" != typeof a) this.fromString(a, 256)
7194 else this.fromString(a, b)
7195 }
7196}
7197
7198var proto = BigInteger.prototype
7199
7200// duck-typed isBigInteger
7201proto.__bigi = require('../package.json').version
7202BigInteger.isBigInteger = function (obj, check_ver) {
7203 return obj && obj.__bigi && (!check_ver || obj.__bigi === proto.__bigi)
7204}
7205
7206// Bits per digit
7207var dbits
7208
7209// am: Compute w_j += (x*this_i), propagate carries,
7210// c is initial carry, returns final carry.
7211// c < 3*dvalue, x < 2*dvalue, this_i < dvalue
7212// We need to select the fastest one that works in this environment.
7213
7214// am1: use a single mult and divide to get the high bits,
7215// max digit bits should be 26 because
7216// max internal value = 2*dvalue^2-2*dvalue (< 2^53)
7217function am1(i, x, w, j, c, n) {
7218 while (--n >= 0) {
7219 var v = x * this[i++] + w[j] + c
7220 c = Math.floor(v / 0x4000000)
7221 w[j++] = v & 0x3ffffff
7222 }
7223 return c
7224}
7225// am2 avoids a big mult-and-extract completely.
7226// Max digit bits should be <= 30 because we do bitwise ops
7227// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)
7228function am2(i, x, w, j, c, n) {
7229 var xl = x & 0x7fff,
7230 xh = x >> 15
7231 while (--n >= 0) {
7232 var l = this[i] & 0x7fff
7233 var h = this[i++] >> 15
7234 var m = xh * l + h * xl
7235 l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff)
7236 c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30)
7237 w[j++] = l & 0x3fffffff
7238 }
7239 return c
7240}
7241// Alternately, set max digit bits to 28 since some
7242// browsers slow down when dealing with 32-bit numbers.
7243function am3(i, x, w, j, c, n) {
7244 var xl = x & 0x3fff,
7245 xh = x >> 14
7246 while (--n >= 0) {
7247 var l = this[i] & 0x3fff
7248 var h = this[i++] >> 14
7249 var m = xh * l + h * xl
7250 l = xl * l + ((m & 0x3fff) << 14) + w[j] + c
7251 c = (l >> 28) + (m >> 14) + xh * h
7252 w[j++] = l & 0xfffffff
7253 }
7254 return c
7255}
7256
7257// wtf?
7258BigInteger.prototype.am = am1
7259dbits = 26
7260
7261BigInteger.prototype.DB = dbits
7262BigInteger.prototype.DM = ((1 << dbits) - 1)
7263var DV = BigInteger.prototype.DV = (1 << dbits)
7264
7265var BI_FP = 52
7266BigInteger.prototype.FV = Math.pow(2, BI_FP)
7267BigInteger.prototype.F1 = BI_FP - dbits
7268BigInteger.prototype.F2 = 2 * dbits - BI_FP
7269
7270// Digit conversions
7271var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"
7272var BI_RC = new Array()
7273var rr, vv
7274rr = "0".charCodeAt(0)
7275for (vv = 0; vv <= 9; ++vv) BI_RC[rr++] = vv
7276rr = "a".charCodeAt(0)
7277for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
7278rr = "A".charCodeAt(0)
7279for (vv = 10; vv < 36; ++vv) BI_RC[rr++] = vv
7280
7281function int2char(n) {
7282 return BI_RM.charAt(n)
7283}
7284
7285function intAt(s, i) {
7286 var c = BI_RC[s.charCodeAt(i)]
7287 return (c == null) ? -1 : c
7288}
7289
7290// (protected) copy this to r
7291function bnpCopyTo(r) {
7292 for (var i = this.t - 1; i >= 0; --i) r[i] = this[i]
7293 r.t = this.t
7294 r.s = this.s
7295}
7296
7297// (protected) set from integer value x, -DV <= x < DV
7298function bnpFromInt(x) {
7299 this.t = 1
7300 this.s = (x < 0) ? -1 : 0
7301 if (x > 0) this[0] = x
7302 else if (x < -1) this[0] = x + DV
7303 else this.t = 0
7304}
7305
7306// return bigint initialized to value
7307function nbv(i) {
7308 var r = new BigInteger()
7309 r.fromInt(i)
7310 return r
7311}
7312
7313// (protected) set from string and radix
7314function bnpFromString(s, b) {
7315 var self = this
7316
7317 var k
7318 if (b == 16) k = 4
7319 else if (b == 8) k = 3
7320 else if (b == 256) k = 8; // byte array
7321 else if (b == 2) k = 1
7322 else if (b == 32) k = 5
7323 else if (b == 4) k = 2
7324 else {
7325 self.fromRadix(s, b)
7326 return
7327 }
7328 self.t = 0
7329 self.s = 0
7330 var i = s.length,
7331 mi = false,
7332 sh = 0
7333 while (--i >= 0) {
7334 var x = (k == 8) ? s[i] & 0xff : intAt(s, i)
7335 if (x < 0) {
7336 if (s.charAt(i) == "-") mi = true
7337 continue
7338 }
7339 mi = false
7340 if (sh == 0)
7341 self[self.t++] = x
7342 else if (sh + k > self.DB) {
7343 self[self.t - 1] |= (x & ((1 << (self.DB - sh)) - 1)) << sh
7344 self[self.t++] = (x >> (self.DB - sh))
7345 } else
7346 self[self.t - 1] |= x << sh
7347 sh += k
7348 if (sh >= self.DB) sh -= self.DB
7349 }
7350 if (k == 8 && (s[0] & 0x80) != 0) {
7351 self.s = -1
7352 if (sh > 0) self[self.t - 1] |= ((1 << (self.DB - sh)) - 1) << sh
7353 }
7354 self.clamp()
7355 if (mi) BigInteger.ZERO.subTo(self, self)
7356}
7357
7358// (protected) clamp off excess high words
7359function bnpClamp() {
7360 var c = this.s & this.DM
7361 while (this.t > 0 && this[this.t - 1] == c)--this.t
7362}
7363
7364// (public) return string representation in given radix
7365function bnToString(b) {
7366 var self = this
7367 if (self.s < 0) return "-" + self.negate()
7368 .toString(b)
7369 var k
7370 if (b == 16) k = 4
7371 else if (b == 8) k = 3
7372 else if (b == 2) k = 1
7373 else if (b == 32) k = 5
7374 else if (b == 4) k = 2
7375 else return self.toRadix(b)
7376 var km = (1 << k) - 1,
7377 d, m = false,
7378 r = "",
7379 i = self.t
7380 var p = self.DB - (i * self.DB) % k
7381 if (i-- > 0) {
7382 if (p < self.DB && (d = self[i] >> p) > 0) {
7383 m = true
7384 r = int2char(d)
7385 }
7386 while (i >= 0) {
7387 if (p < k) {
7388 d = (self[i] & ((1 << p) - 1)) << (k - p)
7389 d |= self[--i] >> (p += self.DB - k)
7390 } else {
7391 d = (self[i] >> (p -= k)) & km
7392 if (p <= 0) {
7393 p += self.DB
7394 --i
7395 }
7396 }
7397 if (d > 0) m = true
7398 if (m) r += int2char(d)
7399 }
7400 }
7401 return m ? r : "0"
7402}
7403
7404// (public) -this
7405function bnNegate() {
7406 var r = new BigInteger()
7407 BigInteger.ZERO.subTo(this, r)
7408 return r
7409}
7410
7411// (public) |this|
7412function bnAbs() {
7413 return (this.s < 0) ? this.negate() : this
7414}
7415
7416// (public) return + if this > a, - if this < a, 0 if equal
7417function bnCompareTo(a) {
7418 var r = this.s - a.s
ab78acc6
IC
7419 if (r != 0) return r
7420 var i = this.t
7421 r = i - a.t
7422 if (r != 0) return (this.s < 0) ? -r : r
7423 while (--i >= 0)
7424 if ((r = this[i] - a[i]) != 0) return r
7425 return 0
7426}
3af2954a 7427
8b095871
IC
7428// returns bit length of the integer x
7429function nbits(x) {
7430 var r = 1,
7431 t
7432 if ((t = x >>> 16) != 0) {
7433 x = t
7434 r += 16
7435 }
7436 if ((t = x >> 8) != 0) {
7437 x = t
7438 r += 8
7439 }
7440 if ((t = x >> 4) != 0) {
7441 x = t
7442 r += 4
7443 }
7444 if ((t = x >> 2) != 0) {
7445 x = t
7446 r += 2
7447 }
7448 if ((t = x >> 1) != 0) {
7449 x = t
7450 r += 1
7451 }
7452 return r
7453}
7454
7455// (public) return the number of bits in "this"
7456function bnBitLength() {
7457 if (this.t <= 0) return 0
7458 return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
7459}
7460
7461// (public) return the number of bytes in "this"
7462function bnByteLength() {
7463 return this.bitLength() >> 3
7464}
7465
7466// (protected) r = this << n*DB
7467function bnpDLShiftTo(n, r) {
7468 var i
7469 for (i = this.t - 1; i >= 0; --i) r[i + n] = this[i]
7470 for (i = n - 1; i >= 0; --i) r[i] = 0
7471 r.t = this.t + n
7472 r.s = this.s
7473}
7474
7475// (protected) r = this >> n*DB
7476function bnpDRShiftTo(n, r) {
7477 for (var i = n; i < this.t; ++i) r[i - n] = this[i]
7478 r.t = Math.max(this.t - n, 0)
7479 r.s = this.s
7480}
7481
7482// (protected) r = this << n
7483function bnpLShiftTo(n, r) {
7484 var self = this
7485 var bs = n % self.DB
7486 var cbs = self.DB - bs
7487 var bm = (1 << cbs) - 1
7488 var ds = Math.floor(n / self.DB),
7489 c = (self.s << bs) & self.DM,
7490 i
7491 for (i = self.t - 1; i >= 0; --i) {
7492 r[i + ds + 1] = (self[i] >> cbs) | c
7493 c = (self[i] & bm) << bs
7494 }
7495 for (i = ds - 1; i >= 0; --i) r[i] = 0
7496 r[ds] = c
7497 r.t = self.t + ds + 1
7498 r.s = self.s
7499 r.clamp()
7500}
7501
7502// (protected) r = this >> n
7503function bnpRShiftTo(n, r) {
7504 var self = this
7505 r.s = self.s
7506 var ds = Math.floor(n / self.DB)
7507 if (ds >= self.t) {
7508 r.t = 0
7509 return
7510 }
7511 var bs = n % self.DB
7512 var cbs = self.DB - bs
7513 var bm = (1 << bs) - 1
7514 r[0] = self[ds] >> bs
7515 for (var i = ds + 1; i < self.t; ++i) {
7516 r[i - ds - 1] |= (self[i] & bm) << cbs
7517 r[i - ds] = self[i] >> bs
7518 }
7519 if (bs > 0) r[self.t - ds - 1] |= (self.s & bm) << cbs
7520 r.t = self.t - ds
7521 r.clamp()
7522}
7523
7524// (protected) r = this - a
7525function bnpSubTo(a, r) {
7526 var self = this
7527 var i = 0,
7528 c = 0,
7529 m = Math.min(a.t, self.t)
7530 while (i < m) {
7531 c += self[i] - a[i]
7532 r[i++] = c & self.DM
7533 c >>= self.DB
7534 }
7535 if (a.t < self.t) {
7536 c -= a.s
7537 while (i < self.t) {
7538 c += self[i]
7539 r[i++] = c & self.DM
7540 c >>= self.DB
7541 }
7542 c += self.s
7543 } else {
7544 c += self.s
7545 while (i < a.t) {
7546 c -= a[i]
7547 r[i++] = c & self.DM
7548 c >>= self.DB
7549 }
7550 c -= a.s
7551 }
7552 r.s = (c < 0) ? -1 : 0
7553 if (c < -1) r[i++] = self.DV + c
7554 else if (c > 0) r[i++] = c
7555 r.t = i
7556 r.clamp()
7557}
7558
7559// (protected) r = this * a, r != this,a (HAC 14.12)
7560// "this" should be the larger one if appropriate.
7561function bnpMultiplyTo(a, r) {
7562 var x = this.abs(),
7563 y = a.abs()
7564 var i = x.t
7565 r.t = i + y.t
7566 while (--i >= 0) r[i] = 0
7567 for (i = 0; i < y.t; ++i) r[i + x.t] = x.am(0, y[i], r, i, 0, x.t)
7568 r.s = 0
7569 r.clamp()
7570 if (this.s != a.s) BigInteger.ZERO.subTo(r, r)
7571}
7572
7573// (protected) r = this^2, r != this (HAC 14.16)
7574function bnpSquareTo(r) {
7575 var x = this.abs()
7576 var i = r.t = 2 * x.t
7577 while (--i >= 0) r[i] = 0
7578 for (i = 0; i < x.t - 1; ++i) {
7579 var c = x.am(i, x[i], r, 2 * i, 0, 1)
7580 if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {
7581 r[i + x.t] -= x.DV
7582 r[i + x.t + 1] = 1
7583 }
7584 }
7585 if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1)
7586 r.s = 0
7587 r.clamp()
7588}
7589
7590// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)
7591// r != q, this != m. q or r may be null.
7592function bnpDivRemTo(m, q, r) {
7593 var self = this
7594 var pm = m.abs()
7595 if (pm.t <= 0) return
7596 var pt = self.abs()
7597 if (pt.t < pm.t) {
7598 if (q != null) q.fromInt(0)
7599 if (r != null) self.copyTo(r)
7600 return
7601 }
7602 if (r == null) r = new BigInteger()
7603 var y = new BigInteger(),
7604 ts = self.s,
7605 ms = m.s
7606 var nsh = self.DB - nbits(pm[pm.t - 1]); // normalize modulus
7607 if (nsh > 0) {
7608 pm.lShiftTo(nsh, y)
7609 pt.lShiftTo(nsh, r)
7610 } else {
7611 pm.copyTo(y)
7612 pt.copyTo(r)
7613 }
7614 var ys = y.t
7615 var y0 = y[ys - 1]
7616 if (y0 == 0) return
7617 var yt = y0 * (1 << self.F1) + ((ys > 1) ? y[ys - 2] >> self.F2 : 0)
7618 var d1 = self.FV / yt,
7619 d2 = (1 << self.F1) / yt,
7620 e = 1 << self.F2
7621 var i = r.t,
7622 j = i - ys,
7623 t = (q == null) ? new BigInteger() : q
7624 y.dlShiftTo(j, t)
7625 if (r.compareTo(t) >= 0) {
7626 r[r.t++] = 1
7627 r.subTo(t, r)
7628 }
7629 BigInteger.ONE.dlShiftTo(ys, t)
7630 t.subTo(y, y); // "negative" y so we can replace sub with am later
7631 while (y.t < ys) y[y.t++] = 0
7632 while (--j >= 0) {
7633 // Estimate quotient digit
7634 var qd = (r[--i] == y0) ? self.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2)
7635 if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out
7636 y.dlShiftTo(j, t)
7637 r.subTo(t, r)
7638 while (r[i] < --qd) r.subTo(t, r)
7639 }
7640 }
7641 if (q != null) {
7642 r.drShiftTo(ys, q)
7643 if (ts != ms) BigInteger.ZERO.subTo(q, q)
7644 }
7645 r.t = ys
7646 r.clamp()
7647 if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder
7648 if (ts < 0) BigInteger.ZERO.subTo(r, r)
7649}
7650
7651// (public) this mod a
7652function bnMod(a) {
7653 var r = new BigInteger()
7654 this.abs()
7655 .divRemTo(a, null, r)
7656 if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r)
7657 return r
7658}
7659
7660// Modular reduction using "classic" algorithm
7661function Classic(m) {
7662 this.m = m
7663}
7664
7665function cConvert(x) {
7666 if (x.s < 0 || x.compareTo(this.m) >= 0) return x.mod(this.m)
7667 else return x
7668}
7669
7670function cRevert(x) {
7671 return x
7672}
7673
7674function cReduce(x) {
7675 x.divRemTo(this.m, null, x)
7676}
7677
7678function cMulTo(x, y, r) {
7679 x.multiplyTo(y, r)
7680 this.reduce(r)
7681}
7682
7683function cSqrTo(x, r) {
7684 x.squareTo(r)
7685 this.reduce(r)
7686}
7687
7688Classic.prototype.convert = cConvert
7689Classic.prototype.revert = cRevert
7690Classic.prototype.reduce = cReduce
7691Classic.prototype.mulTo = cMulTo
7692Classic.prototype.sqrTo = cSqrTo
7693
7694// (protected) return "-1/this % 2^DB"; useful for Mont. reduction
7695// justification:
7696// xy == 1 (mod m)
7697// xy = 1+km
7698// xy(2-xy) = (1+km)(1-km)
7699// x[y(2-xy)] = 1-k^2m^2
7700// x[y(2-xy)] == 1 (mod m^2)
7701// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2
7702// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.
7703// JS multiply "overflows" differently from C/C++, so care is needed here.
7704function bnpInvDigit() {
7705 if (this.t < 1) return 0
7706 var x = this[0]
7707 if ((x & 1) == 0) return 0
7708 var y = x & 3; // y == 1/x mod 2^2
7709 y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4
7710 y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8
7711 y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16
7712 // last step - calculate inverse mod DV directly
7713 // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints
7714 y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits
7715 // we really want the negative inverse, and -DV < y < DV
7716 return (y > 0) ? this.DV - y : -y
7717}
7718
7719// Montgomery reduction
7720function Montgomery(m) {
7721 this.m = m
7722 this.mp = m.invDigit()
7723 this.mpl = this.mp & 0x7fff
7724 this.mph = this.mp >> 15
7725 this.um = (1 << (m.DB - 15)) - 1
7726 this.mt2 = 2 * m.t
7727}
7728
7729// xR mod m
7730function montConvert(x) {
7731 var r = new BigInteger()
7732 x.abs()
7733 .dlShiftTo(this.m.t, r)
7734 r.divRemTo(this.m, null, r)
7735 if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r)
7736 return r
7737}
7738
7739// x/R mod m
7740function montRevert(x) {
7741 var r = new BigInteger()
7742 x.copyTo(r)
7743 this.reduce(r)
7744 return r
7745}
7746
7747// x = x/R mod m (HAC 14.32)
7748function montReduce(x) {
7749 while (x.t <= this.mt2) // pad x so am has enough room later
7750 x[x.t++] = 0
7751 for (var i = 0; i < this.m.t; ++i) {
7752 // faster way of calculating u0 = x[i]*mp mod DV
7753 var j = x[i] & 0x7fff
7754 var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM
7755 // use am to combine the multiply-shift-add into one call
7756 j = i + this.m.t
7757 x[j] += this.m.am(0, u0, x, i, 0, this.m.t)
7758 // propagate carry
7759 while (x[j] >= x.DV) {
7760 x[j] -= x.DV
7761 x[++j]++
7762 }
7763 }
7764 x.clamp()
7765 x.drShiftTo(this.m.t, x)
7766 if (x.compareTo(this.m) >= 0) x.subTo(this.m, x)
7767}
7768
7769// r = "x^2/R mod m"; x != r
7770function montSqrTo(x, r) {
7771 x.squareTo(r)
7772 this.reduce(r)
7773}
7774
7775// r = "xy/R mod m"; x,y != r
7776function montMulTo(x, y, r) {
7777 x.multiplyTo(y, r)
7778 this.reduce(r)
7779}
7780
7781Montgomery.prototype.convert = montConvert
7782Montgomery.prototype.revert = montRevert
7783Montgomery.prototype.reduce = montReduce
7784Montgomery.prototype.mulTo = montMulTo
7785Montgomery.prototype.sqrTo = montSqrTo
7786
7787// (protected) true iff this is even
7788function bnpIsEven() {
7789 return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
7790}
7791
7792// (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79)
7793function bnpExp(e, z) {
7794 if (e > 0xffffffff || e < 1) return BigInteger.ONE
7795 var r = new BigInteger(),
7796 r2 = new BigInteger(),
7797 g = z.convert(this),
7798 i = nbits(e) - 1
7799 g.copyTo(r)
7800 while (--i >= 0) {
7801 z.sqrTo(r, r2)
7802 if ((e & (1 << i)) > 0) z.mulTo(r2, g, r)
7803 else {
7804 var t = r
7805 r = r2
7806 r2 = t
7807 }
7808 }
7809 return z.revert(r)
7810}
7811
7812// (public) this^e % m, 0 <= e < 2^32
7813function bnModPowInt(e, m) {
7814 var z
7815 if (e < 256 || m.isEven()) z = new Classic(m)
7816 else z = new Montgomery(m)
7817 return this.exp(e, z)
7818}
7819
7820// protected
7821proto.copyTo = bnpCopyTo
7822proto.fromInt = bnpFromInt
7823proto.fromString = bnpFromString
7824proto.clamp = bnpClamp
7825proto.dlShiftTo = bnpDLShiftTo
7826proto.drShiftTo = bnpDRShiftTo
7827proto.lShiftTo = bnpLShiftTo
7828proto.rShiftTo = bnpRShiftTo
7829proto.subTo = bnpSubTo
7830proto.multiplyTo = bnpMultiplyTo
7831proto.squareTo = bnpSquareTo
7832proto.divRemTo = bnpDivRemTo
7833proto.invDigit = bnpInvDigit
7834proto.isEven = bnpIsEven
7835proto.exp = bnpExp
7836
7837// public
7838proto.toString = bnToString
7839proto.negate = bnNegate
7840proto.abs = bnAbs
7841proto.compareTo = bnCompareTo
7842proto.bitLength = bnBitLength
7843proto.byteLength = bnByteLength
7844proto.mod = bnMod
7845proto.modPowInt = bnModPowInt
7846
7847// (public)
7848function bnClone() {
7849 var r = new BigInteger()
7850 this.copyTo(r)
7851 return r
7852}
7853
7854// (public) return value as integer
7855function bnIntValue() {
7856 if (this.s < 0) {
7857 if (this.t == 1) return this[0] - this.DV
7858 else if (this.t == 0) return -1
7859 } else if (this.t == 1) return this[0]
7860 else if (this.t == 0) return 0
7861 // assumes 16 < DB < 32
7862 return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
7863}
7864
7865// (public) return value as byte
7866function bnByteValue() {
7867 return (this.t == 0) ? this.s : (this[0] << 24) >> 24
7868}
7869
7870// (public) return value as short (assumes DB>=16)
7871function bnShortValue() {
7872 return (this.t == 0) ? this.s : (this[0] << 16) >> 16
7873}
7874
7875// (protected) return x s.t. r^x < DV
7876function bnpChunkSize(r) {
7877 return Math.floor(Math.LN2 * this.DB / Math.log(r))
7878}
7879
7880// (public) 0 if this == 0, 1 if this > 0
7881function bnSigNum() {
7882 if (this.s < 0) return -1
7883 else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) return 0
7884 else return 1
7885}
7886
7887// (protected) convert to radix string
7888function bnpToRadix(b) {
7889 if (b == null) b = 10
7890 if (this.signum() == 0 || b < 2 || b > 36) return "0"
7891 var cs = this.chunkSize(b)
7892 var a = Math.pow(b, cs)
7893 var d = nbv(a),
7894 y = new BigInteger(),
7895 z = new BigInteger(),
7896 r = ""
7897 this.divRemTo(d, y, z)
7898 while (y.signum() > 0) {
7899 r = (a + z.intValue())
7900 .toString(b)
7901 .substr(1) + r
7902 y.divRemTo(d, y, z)
7903 }
7904 return z.intValue()
7905 .toString(b) + r
7906}
7907
7908// (protected) convert from radix string
7909function bnpFromRadix(s, b) {
7910 var self = this
7911 self.fromInt(0)
7912 if (b == null) b = 10
7913 var cs = self.chunkSize(b)
7914 var d = Math.pow(b, cs),
7915 mi = false,
7916 j = 0,
7917 w = 0
7918 for (var i = 0; i < s.length; ++i) {
7919 var x = intAt(s, i)
7920 if (x < 0) {
7921 if (s.charAt(i) == "-" && self.signum() == 0) mi = true
7922 continue
7923 }
7924 w = b * w + x
7925 if (++j >= cs) {
7926 self.dMultiply(d)
7927 self.dAddOffset(w, 0)
7928 j = 0
7929 w = 0
7930 }
7931 }
7932 if (j > 0) {
7933 self.dMultiply(Math.pow(b, j))
7934 self.dAddOffset(w, 0)
7935 }
7936 if (mi) BigInteger.ZERO.subTo(self, self)
7937}
7938
7939// (protected) alternate constructor
7940function bnpFromNumber(a, b, c) {
7941 var self = this
7942 if ("number" == typeof b) {
7943 // new BigInteger(int,int,RNG)
7944 if (a < 2) self.fromInt(1)
7945 else {
7946 self.fromNumber(a, c)
7947 if (!self.testBit(a - 1)) // force MSB set
7948 self.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, self)
7949 if (self.isEven()) self.dAddOffset(1, 0); // force odd
7950 while (!self.isProbablePrime(b)) {
7951 self.dAddOffset(2, 0)
7952 if (self.bitLength() > a) self.subTo(BigInteger.ONE.shiftLeft(a - 1), self)
7953 }
7954 }
7955 } else {
7956 // new BigInteger(int,RNG)
7957 var x = new Array(),
7958 t = a & 7
7959 x.length = (a >> 3) + 1
7960 b.nextBytes(x)
7961 if (t > 0) x[0] &= ((1 << t) - 1)
7962 else x[0] = 0
7963 self.fromString(x, 256)
7964 }
7965}
7966
7967// (public) convert to bigendian byte array
7968function bnToByteArray() {
7969 var self = this
7970 var i = self.t,
7971 r = new Array()
7972 r[0] = self.s
7973 var p = self.DB - (i * self.DB) % 8,
7974 d, k = 0
7975 if (i-- > 0) {
7976 if (p < self.DB && (d = self[i] >> p) != (self.s & self.DM) >> p)
7977 r[k++] = d | (self.s << (self.DB - p))
7978 while (i >= 0) {
7979 if (p < 8) {
7980 d = (self[i] & ((1 << p) - 1)) << (8 - p)
7981 d |= self[--i] >> (p += self.DB - 8)
7982 } else {
7983 d = (self[i] >> (p -= 8)) & 0xff
7984 if (p <= 0) {
7985 p += self.DB
7986 --i
7987 }
7988 }
7989 if ((d & 0x80) != 0) d |= -256
7990 if (k === 0 && (self.s & 0x80) != (d & 0x80))++k
7991 if (k > 0 || d != self.s) r[k++] = d
7992 }
7993 }
7994 return r
7995}
7996
7997function bnEquals(a) {
7998 return (this.compareTo(a) == 0)
7999}
8000
8001function bnMin(a) {
8002 return (this.compareTo(a) < 0) ? this : a
8003}
8004
8005function bnMax(a) {
8006 return (this.compareTo(a) > 0) ? this : a
8007}
8008
8009// (protected) r = this op a (bitwise)
8010function bnpBitwiseTo(a, op, r) {
8011 var self = this
8012 var i, f, m = Math.min(a.t, self.t)
8013 for (i = 0; i < m; ++i) r[i] = op(self[i], a[i])
8014 if (a.t < self.t) {
8015 f = a.s & self.DM
8016 for (i = m; i < self.t; ++i) r[i] = op(self[i], f)
8017 r.t = self.t
8018 } else {
8019 f = self.s & self.DM
8020 for (i = m; i < a.t; ++i) r[i] = op(f, a[i])
8021 r.t = a.t
8022 }
8023 r.s = op(self.s, a.s)
8024 r.clamp()
8025}
8026
8027// (public) this & a
8028function op_and(x, y) {
8029 return x & y
8030}
8031
8032function bnAnd(a) {
8033 var r = new BigInteger()
8034 this.bitwiseTo(a, op_and, r)
8035 return r
8036}
8037
8038// (public) this | a
8039function op_or(x, y) {
8040 return x | y
8041}
8042
8043function bnOr(a) {
8044 var r = new BigInteger()
8045 this.bitwiseTo(a, op_or, r)
8046 return r
8047}
8048
8049// (public) this ^ a
8050function op_xor(x, y) {
8051 return x ^ y
8052}
8053
8054function bnXor(a) {
8055 var r = new BigInteger()
8056 this.bitwiseTo(a, op_xor, r)
8057 return r
8058}
8059
8060// (public) this & ~a
8061function op_andnot(x, y) {
8062 return x & ~y
8063}
8064
8065function bnAndNot(a) {
8066 var r = new BigInteger()
8067 this.bitwiseTo(a, op_andnot, r)
8068 return r
8069}
8070
8071// (public) ~this
8072function bnNot() {
8073 var r = new BigInteger()
8074 for (var i = 0; i < this.t; ++i) r[i] = this.DM & ~this[i]
8075 r.t = this.t
8076 r.s = ~this.s
8077 return r
8078}
8079
8080// (public) this << n
8081function bnShiftLeft(n) {
8082 var r = new BigInteger()
8083 if (n < 0) this.rShiftTo(-n, r)
8084 else this.lShiftTo(n, r)
8085 return r
8086}
8087
8088// (public) this >> n
8089function bnShiftRight(n) {
8090 var r = new BigInteger()
8091 if (n < 0) this.lShiftTo(-n, r)
8092 else this.rShiftTo(n, r)
8093 return r
8094}
8095
8096// return index of lowest 1-bit in x, x < 2^31
8097function lbit(x) {
8098 if (x == 0) return -1
8099 var r = 0
8100 if ((x & 0xffff) == 0) {
8101 x >>= 16
8102 r += 16
8103 }
8104 if ((x & 0xff) == 0) {
8105 x >>= 8
8106 r += 8
8107 }
8108 if ((x & 0xf) == 0) {
8109 x >>= 4
8110 r += 4
8111 }
8112 if ((x & 3) == 0) {
8113 x >>= 2
8114 r += 2
8115 }
8116 if ((x & 1) == 0)++r
8117 return r
8118}
8119
8120// (public) returns index of lowest 1-bit (or -1 if none)
8121function bnGetLowestSetBit() {
8122 for (var i = 0; i < this.t; ++i)
8123 if (this[i] != 0) return i * this.DB + lbit(this[i])
8124 if (this.s < 0) return this.t * this.DB
8125 return -1
8126}
8127
8128// return number of 1 bits in x
8129function cbit(x) {
8130 var r = 0
8131 while (x != 0) {
8132 x &= x - 1
8133 ++r
8134 }
8135 return r
8136}
8137
8138// (public) return number of set bits
8139function bnBitCount() {
8140 var r = 0,
8141 x = this.s & this.DM
8142 for (var i = 0; i < this.t; ++i) r += cbit(this[i] ^ x)
8143 return r
8144}
8145
8146// (public) true iff nth bit is set
8147function bnTestBit(n) {
8148 var j = Math.floor(n / this.DB)
8149 if (j >= this.t) return (this.s != 0)
8150 return ((this[j] & (1 << (n % this.DB))) != 0)
8151}
8152
8153// (protected) this op (1<<n)
8154function bnpChangeBit(n, op) {
8155 var r = BigInteger.ONE.shiftLeft(n)
8156 this.bitwiseTo(r, op, r)
8157 return r
8158}
8159
8160// (public) this | (1<<n)
8161function bnSetBit(n) {
8162 return this.changeBit(n, op_or)
8163}
8164
8165// (public) this & ~(1<<n)
8166function bnClearBit(n) {
8167 return this.changeBit(n, op_andnot)
8168}
8169
8170// (public) this ^ (1<<n)
8171function bnFlipBit(n) {
8172 return this.changeBit(n, op_xor)
8173}
8174
8175// (protected) r = this + a
8176function bnpAddTo(a, r) {
8177 var self = this
8178
8179 var i = 0,
8180 c = 0,
8181 m = Math.min(a.t, self.t)
8182 while (i < m) {
8183 c += self[i] + a[i]
8184 r[i++] = c & self.DM
8185 c >>= self.DB
8186 }
8187 if (a.t < self.t) {
8188 c += a.s
8189 while (i < self.t) {
8190 c += self[i]
8191 r[i++] = c & self.DM
8192 c >>= self.DB
8193 }
8194 c += self.s
8195 } else {
8196 c += self.s
8197 while (i < a.t) {
8198 c += a[i]
8199 r[i++] = c & self.DM
8200 c >>= self.DB
8201 }
8202 c += a.s
8203 }
8204 r.s = (c < 0) ? -1 : 0
8205 if (c > 0) r[i++] = c
8206 else if (c < -1) r[i++] = self.DV + c
8207 r.t = i
8208 r.clamp()
8209}
8210
8211// (public) this + a
8212function bnAdd(a) {
8213 var r = new BigInteger()
8214 this.addTo(a, r)
8215 return r
8216}
8217
8218// (public) this - a
8219function bnSubtract(a) {
8220 var r = new BigInteger()
8221 this.subTo(a, r)
8222 return r
8223}
8224
8225// (public) this * a
8226function bnMultiply(a) {
8227 var r = new BigInteger()
8228 this.multiplyTo(a, r)
8229 return r
8230}
8231
8232// (public) this^2
8233function bnSquare() {
8234 var r = new BigInteger()
8235 this.squareTo(r)
8236 return r
8237}
8238
8239// (public) this / a
8240function bnDivide(a) {
8241 var r = new BigInteger()
8242 this.divRemTo(a, r, null)
8243 return r
8244}
8245
8246// (public) this % a
8247function bnRemainder(a) {
8248 var r = new BigInteger()
8249 this.divRemTo(a, null, r)
8250 return r
8251}
8252
8253// (public) [this/a,this%a]
8254function bnDivideAndRemainder(a) {
8255 var q = new BigInteger(),
8256 r = new BigInteger()
8257 this.divRemTo(a, q, r)
8258 return new Array(q, r)
8259}
8260
8261// (protected) this *= n, this >= 0, 1 < n < DV
8262function bnpDMultiply(n) {
8263 this[this.t] = this.am(0, n - 1, this, 0, 0, this.t)
8264 ++this.t
8265 this.clamp()
8266}
8267
8268// (protected) this += n << w words, this >= 0
8269function bnpDAddOffset(n, w) {
8270 if (n == 0) return
8271 while (this.t <= w) this[this.t++] = 0
8272 this[w] += n
8273 while (this[w] >= this.DV) {
8274 this[w] -= this.DV
8275 if (++w >= this.t) this[this.t++] = 0
8276 ++this[w]
8277 }
8278}
8279
8280// A "null" reducer
8281function NullExp() {}
8282
8283function nNop(x) {
8284 return x
8285}
8286
8287function nMulTo(x, y, r) {
8288 x.multiplyTo(y, r)
8289}
8290
8291function nSqrTo(x, r) {
8292 x.squareTo(r)
8293}
8294
8295NullExp.prototype.convert = nNop
8296NullExp.prototype.revert = nNop
8297NullExp.prototype.mulTo = nMulTo
8298NullExp.prototype.sqrTo = nSqrTo
8299
8300// (public) this^e
8301function bnPow(e) {
8302 return this.exp(e, new NullExp())
8303}
8304
8305// (protected) r = lower n words of "this * a", a.t <= n
8306// "this" should be the larger one if appropriate.
8307function bnpMultiplyLowerTo(a, n, r) {
8308 var i = Math.min(this.t + a.t, n)
8309 r.s = 0; // assumes a,this >= 0
8310 r.t = i
8311 while (i > 0) r[--i] = 0
8312 var j
8313 for (j = r.t - this.t; i < j; ++i) r[i + this.t] = this.am(0, a[i], r, i, 0, this.t)
8314 for (j = Math.min(a.t, n); i < j; ++i) this.am(0, a[i], r, i, 0, n - i)
8315 r.clamp()
8316}
8317
8318// (protected) r = "this * a" without lower n words, n > 0
8319// "this" should be the larger one if appropriate.
8320function bnpMultiplyUpperTo(a, n, r) {
8321 --n
8322 var i = r.t = this.t + a.t - n
8323 r.s = 0; // assumes a,this >= 0
8324 while (--i >= 0) r[i] = 0
8325 for (i = Math.max(n - this.t, 0); i < a.t; ++i)
8326 r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n)
8327 r.clamp()
8328 r.drShiftTo(1, r)
8329}
8330
8331// Barrett modular reduction
8332function Barrett(m) {
8333 // setup Barrett
8334 this.r2 = new BigInteger()
8335 this.q3 = new BigInteger()
8336 BigInteger.ONE.dlShiftTo(2 * m.t, this.r2)
8337 this.mu = this.r2.divide(m)
8338 this.m = m
8339}
8340
8341function barrettConvert(x) {
8342 if (x.s < 0 || x.t > 2 * this.m.t) return x.mod(this.m)
8343 else if (x.compareTo(this.m) < 0) return x
8344 else {
8345 var r = new BigInteger()
8346 x.copyTo(r)
8347 this.reduce(r)
8348 return r
8349 }
8350}
8351
8352function barrettRevert(x) {
8353 return x
8354}
8355
8356// x = x mod m (HAC 14.42)
8357function barrettReduce(x) {
8358 var self = this
8359 x.drShiftTo(self.m.t - 1, self.r2)
8360 if (x.t > self.m.t + 1) {
8361 x.t = self.m.t + 1
8362 x.clamp()
8363 }
8364 self.mu.multiplyUpperTo(self.r2, self.m.t + 1, self.q3)
8365 self.m.multiplyLowerTo(self.q3, self.m.t + 1, self.r2)
8366 while (x.compareTo(self.r2) < 0) x.dAddOffset(1, self.m.t + 1)
8367 x.subTo(self.r2, x)
8368 while (x.compareTo(self.m) >= 0) x.subTo(self.m, x)
8369}
8370
8371// r = x^2 mod m; x != r
8372function barrettSqrTo(x, r) {
8373 x.squareTo(r)
8374 this.reduce(r)
8375}
8376
8377// r = x*y mod m; x,y != r
8378function barrettMulTo(x, y, r) {
8379 x.multiplyTo(y, r)
8380 this.reduce(r)
8381}
8382
8383Barrett.prototype.convert = barrettConvert
8384Barrett.prototype.revert = barrettRevert
8385Barrett.prototype.reduce = barrettReduce
8386Barrett.prototype.mulTo = barrettMulTo
8387Barrett.prototype.sqrTo = barrettSqrTo
8388
8389// (public) this^e % m (HAC 14.85)
8390function bnModPow(e, m) {
8391 var i = e.bitLength(),
8392 k, r = nbv(1),
8393 z
8394 if (i <= 0) return r
8395 else if (i < 18) k = 1
8396 else if (i < 48) k = 3
8397 else if (i < 144) k = 4
8398 else if (i < 768) k = 5
8399 else k = 6
8400 if (i < 8)
8401 z = new Classic(m)
8402 else if (m.isEven())
8403 z = new Barrett(m)
8404 else
8405 z = new Montgomery(m)
8406
8407 // precomputation
8408 var g = new Array(),
8409 n = 3,
8410 k1 = k - 1,
8411 km = (1 << k) - 1
8412 g[1] = z.convert(this)
8413 if (k > 1) {
8414 var g2 = new BigInteger()
8415 z.sqrTo(g[1], g2)
8416 while (n <= km) {
8417 g[n] = new BigInteger()
8418 z.mulTo(g2, g[n - 2], g[n])
8419 n += 2
8420 }
8421 }
8422
8423 var j = e.t - 1,
8424 w, is1 = true,
8425 r2 = new BigInteger(),
8426 t
8427 i = nbits(e[j]) - 1
8428 while (j >= 0) {
8429 if (i >= k1) w = (e[j] >> (i - k1)) & km
8430 else {
8431 w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i)
8432 if (j > 0) w |= e[j - 1] >> (this.DB + i - k1)
8433 }
8434
8435 n = k
8436 while ((w & 1) == 0) {
8437 w >>= 1
8438 --n
8439 }
8440 if ((i -= n) < 0) {
8441 i += this.DB
8442 --j
8443 }
8444 if (is1) { // ret == 1, don't bother squaring or multiplying it
8445 g[w].copyTo(r)
8446 is1 = false
8447 } else {
8448 while (n > 1) {
8449 z.sqrTo(r, r2)
8450 z.sqrTo(r2, r)
8451 n -= 2
8452 }
8453 if (n > 0) z.sqrTo(r, r2)
8454 else {
8455 t = r
8456 r = r2
8457 r2 = t
8458 }
8459 z.mulTo(r2, g[w], r)
8460 }
8461
8462 while (j >= 0 && (e[j] & (1 << i)) == 0) {
8463 z.sqrTo(r, r2)
8464 t = r
8465 r = r2
8466 r2 = t
8467 if (--i < 0) {
8468 i = this.DB - 1
8469 --j
8470 }
8471 }
8472 }
8473 return z.revert(r)
8474}
8475
8476// (public) gcd(this,a) (HAC 14.54)
8477function bnGCD(a) {
8478 var x = (this.s < 0) ? this.negate() : this.clone()
8479 var y = (a.s < 0) ? a.negate() : a.clone()
8480 if (x.compareTo(y) < 0) {
8481 var t = x
8482 x = y
8483 y = t
8484 }
8485 var i = x.getLowestSetBit(),
8486 g = y.getLowestSetBit()
8487 if (g < 0) return x
8488 if (i < g) g = i
8489 if (g > 0) {
8490 x.rShiftTo(g, x)
8491 y.rShiftTo(g, y)
8492 }
8493 while (x.signum() > 0) {
8494 if ((i = x.getLowestSetBit()) > 0) x.rShiftTo(i, x)
8495 if ((i = y.getLowestSetBit()) > 0) y.rShiftTo(i, y)
8496 if (x.compareTo(y) >= 0) {
8497 x.subTo(y, x)
8498 x.rShiftTo(1, x)
8499 } else {
8500 y.subTo(x, y)
8501 y.rShiftTo(1, y)
8502 }
8503 }
8504 if (g > 0) y.lShiftTo(g, y)
8505 return y
8506}
8507
8508// (protected) this % n, n < 2^26
8509function bnpModInt(n) {
8510 if (n <= 0) return 0
8511 var d = this.DV % n,
8512 r = (this.s < 0) ? n - 1 : 0
8513 if (this.t > 0)
8514 if (d == 0) r = this[0] % n
8515 else
8516 for (var i = this.t - 1; i >= 0; --i) r = (d * r + this[i]) % n
8517 return r
8518}
8519
8520// (public) 1/this % m (HAC 14.61)
8521function bnModInverse(m) {
8522 var ac = m.isEven()
8523 if ((this.isEven() && ac) || m.signum() == 0) return BigInteger.ZERO
8524 var u = m.clone(),
8525 v = this.clone()
8526 var a = nbv(1),
8527 b = nbv(0),
8528 c = nbv(0),
8529 d = nbv(1)
8530 while (u.signum() != 0) {
8531 while (u.isEven()) {
8532 u.rShiftTo(1, u)
8533 if (ac) {
8534 if (!a.isEven() || !b.isEven()) {
8535 a.addTo(this, a)
8536 b.subTo(m, b)
8537 }
8538 a.rShiftTo(1, a)
8539 } else if (!b.isEven()) b.subTo(m, b)
8540 b.rShiftTo(1, b)
8541 }
8542 while (v.isEven()) {
8543 v.rShiftTo(1, v)
8544 if (ac) {
8545 if (!c.isEven() || !d.isEven()) {
8546 c.addTo(this, c)
8547 d.subTo(m, d)
8548 }
8549 c.rShiftTo(1, c)
8550 } else if (!d.isEven()) d.subTo(m, d)
8551 d.rShiftTo(1, d)
8552 }
8553 if (u.compareTo(v) >= 0) {
8554 u.subTo(v, u)
8555 if (ac) a.subTo(c, a)
8556 b.subTo(d, b)
8557 } else {
8558 v.subTo(u, v)
8559 if (ac) c.subTo(a, c)
8560 d.subTo(b, d)
8561 }
8562 }
8563 if (v.compareTo(BigInteger.ONE) != 0) return BigInteger.ZERO
8564 if (d.compareTo(m) >= 0) return d.subtract(m)
8565 if (d.signum() < 0) d.addTo(m, d)
8566 else return d
8567 if (d.signum() < 0) return d.add(m)
8568 else return d
8569}
8570
8571var lowprimes = [
8572 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71,
8573 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151,
8574 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233,
8575 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317,
8576 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419,
8577 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503,
8578 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607,
8579 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701,
8580 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811,
8581 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911,
8582 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
8583]
8584
8585var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]
8586
8587// (public) test primality with certainty >= 1-.5^t
8588function bnIsProbablePrime(t) {
8589 var i, x = this.abs()
8590 if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {
8591 for (i = 0; i < lowprimes.length; ++i)
8592 if (x[0] == lowprimes[i]) return true
8593 return false
8594 }
8595 if (x.isEven()) return false
8596 i = 1
8597 while (i < lowprimes.length) {
8598 var m = lowprimes[i],
8599 j = i + 1
8600 while (j < lowprimes.length && m < lplim) m *= lowprimes[j++]
8601 m = x.modInt(m)
8602 while (i < j) if (m % lowprimes[i++] == 0) return false
8603 }
8604 return x.millerRabin(t)
8605}
8606
8607// (protected) true if probably prime (HAC 4.24, Miller-Rabin)
8608function bnpMillerRabin(t) {
8609 var n1 = this.subtract(BigInteger.ONE)
8610 var k = n1.getLowestSetBit()
8611 if (k <= 0) return false
8612 var r = n1.shiftRight(k)
8613 t = (t + 1) >> 1
8614 if (t > lowprimes.length) t = lowprimes.length
8615 var a = new BigInteger(null)
8616 var j, bases = []
8617 for (var i = 0; i < t; ++i) {
8618 for (;;) {
8619 j = lowprimes[Math.floor(Math.random() * lowprimes.length)]
8620 if (bases.indexOf(j) == -1) break
8621 }
8622 bases.push(j)
8623 a.fromInt(j)
8624 var y = a.modPow(r, this)
8625 if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {
8626 var j = 1
8627 while (j++ < k && y.compareTo(n1) != 0) {
8628 y = y.modPowInt(2, this)
8629 if (y.compareTo(BigInteger.ONE) == 0) return false
8630 }
8631 if (y.compareTo(n1) != 0) return false
8632 }
8633 }
8634 return true
8635}
8636
8637// protected
8638proto.chunkSize = bnpChunkSize
8639proto.toRadix = bnpToRadix
8640proto.fromRadix = bnpFromRadix
8641proto.fromNumber = bnpFromNumber
8642proto.bitwiseTo = bnpBitwiseTo
8643proto.changeBit = bnpChangeBit
8644proto.addTo = bnpAddTo
8645proto.dMultiply = bnpDMultiply
8646proto.dAddOffset = bnpDAddOffset
8647proto.multiplyLowerTo = bnpMultiplyLowerTo
8648proto.multiplyUpperTo = bnpMultiplyUpperTo
8649proto.modInt = bnpModInt
8650proto.millerRabin = bnpMillerRabin
8651
8652// public
8653proto.clone = bnClone
8654proto.intValue = bnIntValue
8655proto.byteValue = bnByteValue
8656proto.shortValue = bnShortValue
8657proto.signum = bnSigNum
8658proto.toByteArray = bnToByteArray
8659proto.equals = bnEquals
8660proto.min = bnMin
8661proto.max = bnMax
8662proto.and = bnAnd
8663proto.or = bnOr
8664proto.xor = bnXor
8665proto.andNot = bnAndNot
8666proto.not = bnNot
8667proto.shiftLeft = bnShiftLeft
8668proto.shiftRight = bnShiftRight
8669proto.getLowestSetBit = bnGetLowestSetBit
8670proto.bitCount = bnBitCount
8671proto.testBit = bnTestBit
8672proto.setBit = bnSetBit
8673proto.clearBit = bnClearBit
8674proto.flipBit = bnFlipBit
8675proto.add = bnAdd
8676proto.subtract = bnSubtract
8677proto.multiply = bnMultiply
8678proto.divide = bnDivide
8679proto.remainder = bnRemainder
8680proto.divideAndRemainder = bnDivideAndRemainder
8681proto.modPow = bnModPow
8682proto.modInverse = bnModInverse
8683proto.pow = bnPow
8684proto.gcd = bnGCD
8685proto.isProbablePrime = bnIsProbablePrime
8686
8687// JSBN-specific extension
8688proto.square = bnSquare
8689
8690// constants
8691BigInteger.ZERO = nbv(0)
8692BigInteger.ONE = nbv(1)
8693BigInteger.valueOf = nbv
8694
8695module.exports = BigInteger
8696
8697},{"../package.json":4}],2:[function(require,module,exports){
8698(function (Buffer){
8699// FIXME: Kind of a weird way to throw exceptions, consider removing
8700var assert = require('assert')
8701var BigInteger = require('./bigi')
8702
8703/**
8704 * Turns a byte array into a big integer.
8705 *
8706 * This function will interpret a byte array as a big integer in big
8707 * endian notation.
8708 */
8709BigInteger.fromByteArrayUnsigned = function(byteArray) {
8710 // BigInteger expects a DER integer conformant byte array
8711 if (byteArray[0] & 0x80) {
8712 return new BigInteger([0].concat(byteArray))
8713 }
8714
8715 return new BigInteger(byteArray)
8716}
8717
8718/**
8719 * Returns a byte array representation of the big integer.
8720 *
8721 * This returns the absolute of the contained value in big endian
8722 * form. A value of zero results in an empty array.
8723 */
8724BigInteger.prototype.toByteArrayUnsigned = function() {
8725 var byteArray = this.toByteArray()
8726 return byteArray[0] === 0 ? byteArray.slice(1) : byteArray
8727}
8728
8729BigInteger.fromDERInteger = function(byteArray) {
8730 return new BigInteger(byteArray)
8731}
8732
8733/*
8734 * Converts BigInteger to a DER integer representation.
8735 *
8736 * The format for this value uses the most significant bit as a sign
8737 * bit. If the most significant bit is already set and the integer is
8738 * positive, a 0x00 is prepended.
8739 *
8740 * Examples:
8741 *
8742 * 0 => 0x00
8743 * 1 => 0x01
8744 * -1 => 0xff
8745 * 127 => 0x7f
8746 * -127 => 0x81
8747 * 128 => 0x0080
8748 * -128 => 0x80
8749 * 255 => 0x00ff
8750 * -255 => 0xff01
8751 * 16300 => 0x3fac
8752 * -16300 => 0xc054
8753 * 62300 => 0x00f35c
8754 * -62300 => 0xff0ca4
8755*/
8756BigInteger.prototype.toDERInteger = BigInteger.prototype.toByteArray
8757
8758BigInteger.fromBuffer = function(buffer) {
8759 // BigInteger expects a DER integer conformant byte array
8760 if (buffer[0] & 0x80) {
8761 var byteArray = Array.prototype.slice.call(buffer)
8762
8763 return new BigInteger([0].concat(byteArray))
8764 }
8765
8766 return new BigInteger(buffer)
8767}
8768
8769BigInteger.fromHex = function(hex) {
8770 if (hex === '') return BigInteger.ZERO
8771
8772 assert.equal(hex, hex.match(/^[A-Fa-f0-9]+/), 'Invalid hex string')
8773 assert.equal(hex.length % 2, 0, 'Incomplete hex')
8774 return new BigInteger(hex, 16)
8775}
8776
8777BigInteger.prototype.toBuffer = function(size) {
8778 var byteArray = this.toByteArrayUnsigned()
8779 var zeros = []
8780
8781 var padding = size - byteArray.length
8782 while (zeros.length < padding) zeros.push(0)
8783
8784 return new Buffer(zeros.concat(byteArray))
8785}
8786
8787BigInteger.prototype.toHex = function(size) {
8788 return this.toBuffer(size).toString('hex')
8789}
8790
8791}).call(this,require("buffer").Buffer)
8792},{"./bigi":1,"assert":5,"buffer":7}],3:[function(require,module,exports){
8793var BigInteger = require('./bigi')
8794
8795//addons
8796require('./convert')
8797
8798module.exports = BigInteger
8799},{"./bigi":1,"./convert":2}],4:[function(require,module,exports){
8800module.exports={
8801 "name": "bigi",
8802 "version": "1.4.0",
8803 "description": "Big integers.",
8804 "keywords": [
8805 "cryptography",
8806 "math",
8807 "bitcoin",
8808 "arbitrary",
8809 "precision",
8810 "arithmetic",
8811 "big",
8812 "integer",
8813 "int",
8814 "number",
8815 "biginteger",
8816 "bigint",
8817 "bignumber",
8818 "decimal",
8819 "float"
8820 ],
8821 "devDependencies": {
8822 "mocha": "^1.20.1",
8823 "jshint": "^2.5.1",
8824 "coveralls": "^2.10.0",
8825 "istanbul": "^0.2.11"
8826 },
8827 "repository": {
8828 "url": "https://github.com/cryptocoinjs/bigi",
8829 "type": "git"
8830 },
8831 "main": "./lib/index.js",
8832 "scripts": {
8833 "test": "_mocha -- test/*.js",
8834 "jshint": "jshint --config jshint.json lib/*.js ; true",
8835 "unit": "mocha",
8836 "coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter list test/*.js",
8837 "coveralls": "npm run-script coverage && node ./node_modules/.bin/coveralls < coverage/lcov.info"
8838 },
8839 "dependencies": {},
8840 "testling": {
8841 "files": "test/*.js",
8842 "harness": "mocha",
8843 "browsers": [
8844 "ie/9..latest",
8845 "firefox/latest",
8846 "chrome/latest",
8847 "safari/6.0..latest",
8848 "iphone/6.0..latest",
8849 "android-browser/4.2..latest"
8850 ]
8851 },
8852 "bugs": {
8853 "url": "https://github.com/cryptocoinjs/bigi/issues"
8854 },
8855 "homepage": "https://github.com/cryptocoinjs/bigi",
8856 "_id": "bigi@1.4.0",
8857 "dist": {
8858 "shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
8859 "tarball": "http://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
8860 },
8861 "_from": "bigi@^1.4.0",
8862 "_npmVersion": "1.4.3",
8863 "_npmUser": {
8864 "name": "jp",
8865 "email": "jprichardson@gmail.com"
8866 },
8867 "maintainers": [
8868 {
8869 "name": "jp",
8870 "email": "jprichardson@gmail.com"
8871 },
8872 {
8873 "name": "midnightlightning",
8874 "email": "boydb@midnightdesign.ws"
8875 },
8876 {
8877 "name": "sidazhang",
8878 "email": "sidazhang89@gmail.com"
8879 },
8880 {
8881 "name": "nadav",
8882 "email": "npm@shesek.info"
8883 }
8884 ],
8885 "directories": {},
8886 "_shasum": "90ac1aeac0a531216463bdb58f42c1e05c8407ac",
8887 "_resolved": "https://registry.npmjs.org/bigi/-/bigi-1.4.0.tgz"
8888}
8889
8890},{}],5:[function(require,module,exports){
8891// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
8892//
8893// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
8894//
8895// Originally from narwhal.js (http://narwhaljs.org)
8896// Copyright (c) 2009 Thomas Robinson <280north.com>
8897//
8898// Permission is hereby granted, free of charge, to any person obtaining a copy
8899// of this software and associated documentation files (the 'Software'), to
8900// deal in the Software without restriction, including without limitation the
8901// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8902// sell copies of the Software, and to permit persons to whom the Software is
8903// furnished to do so, subject to the following conditions:
8904//
8905// The above copyright notice and this permission notice shall be included in
8906// all copies or substantial portions of the Software.
8907//
8908// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
8909// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
8910// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
8911// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
8912// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
8913// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
8914
8915// when used in node, this will actually load the util module we depend on
8916// versus loading the builtin util module as happens otherwise
8917// this is a bug in node module loading as far as I am concerned
8918var util = require('util/');
8919
8920var pSlice = Array.prototype.slice;
8921var hasOwn = Object.prototype.hasOwnProperty;
8922
8923// 1. The assert module provides functions that throw
8924// AssertionError's when particular conditions are not met. The
8925// assert module must conform to the following interface.
8926
8927var assert = module.exports = ok;
8928
8929// 2. The AssertionError is defined in assert.
8930// new assert.AssertionError({ message: message,
8931// actual: actual,
8932// expected: expected })
8933
8934assert.AssertionError = function AssertionError(options) {
8935 this.name = 'AssertionError';
8936 this.actual = options.actual;
8937 this.expected = options.expected;
8938 this.operator = options.operator;
8939 if (options.message) {
8940 this.message = options.message;
8941 this.generatedMessage = false;
8942 } else {
8943 this.message = getMessage(this);
8944 this.generatedMessage = true;
8945 }
8946 var stackStartFunction = options.stackStartFunction || fail;
8947
8948 if (Error.captureStackTrace) {
8949 Error.captureStackTrace(this, stackStartFunction);
8950 }
8951 else {
8952 // non v8 browsers so we can have a stacktrace
8953 var err = new Error();
8954 if (err.stack) {
8955 var out = err.stack;
8956
8957 // try to strip useless frames
8958 var fn_name = stackStartFunction.name;
8959 var idx = out.indexOf('\n' + fn_name);
8960 if (idx >= 0) {
8961 // once we have located the function frame
8962 // we need to strip out everything before it (and its line)
8963 var next_line = out.indexOf('\n', idx + 1);
8964 out = out.substring(next_line + 1);
8965 }
8966
8967 this.stack = out;
8968 }
8969 }
8970};
8971
8972// assert.AssertionError instanceof Error
8973util.inherits(assert.AssertionError, Error);
8974
8975function replacer(key, value) {
8976 if (util.isUndefined(value)) {
8977 return '' + value;
8978 }
8979 if (util.isNumber(value) && !isFinite(value)) {
8980 return value.toString();
8981 }
8982 if (util.isFunction(value) || util.isRegExp(value)) {
8983 return value.toString();
8984 }
8985 return value;
8986}
8987
8988function truncate(s, n) {
8989 if (util.isString(s)) {
8990 return s.length < n ? s : s.slice(0, n);
8991 } else {
8992 return s;
8993 }
8994}
8995
8996function getMessage(self) {
8997 return truncate(JSON.stringify(self.actual, replacer), 128) + ' ' +
8998 self.operator + ' ' +
8999 truncate(JSON.stringify(self.expected, replacer), 128);
9000}
9001
9002// At present only the three keys mentioned above are used and
9003// understood by the spec. Implementations or sub modules can pass
9004// other keys to the AssertionError's constructor - they will be
9005// ignored.
9006
9007// 3. All of the following functions must throw an AssertionError
9008// when a corresponding condition is not met, with a message that
9009// may be undefined if not provided. All assertion methods provide
9010// both the actual and expected values to the assertion error for
9011// display purposes.
9012
9013function fail(actual, expected, message, operator, stackStartFunction) {
9014 throw new assert.AssertionError({
9015 message: message,
9016 actual: actual,
9017 expected: expected,
9018 operator: operator,
9019 stackStartFunction: stackStartFunction
9020 });
9021}
9022
9023// EXTENSION! allows for well behaved errors defined elsewhere.
9024assert.fail = fail;
9025
9026// 4. Pure assertion tests whether a value is truthy, as determined
9027// by !!guard.
9028// assert.ok(guard, message_opt);
9029// This statement is equivalent to assert.equal(true, !!guard,
9030// message_opt);. To test strictly for the value true, use
9031// assert.strictEqual(true, guard, message_opt);.
9032
9033function ok(value, message) {
9034 if (!value) fail(value, true, message, '==', assert.ok);
9035}
9036assert.ok = ok;
9037
9038// 5. The equality assertion tests shallow, coercive equality with
9039// ==.
9040// assert.equal(actual, expected, message_opt);
9041
9042assert.equal = function equal(actual, expected, message) {
9043 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
9044};
9045
9046// 6. The non-equality assertion tests for whether two objects are not equal
9047// with != assert.notEqual(actual, expected, message_opt);
9048
9049assert.notEqual = function notEqual(actual, expected, message) {
9050 if (actual == expected) {
9051 fail(actual, expected, message, '!=', assert.notEqual);
9052 }
9053};
9054
9055// 7. The equivalence assertion tests a deep equality relation.
9056// assert.deepEqual(actual, expected, message_opt);
9057
9058assert.deepEqual = function deepEqual(actual, expected, message) {
9059 if (!_deepEqual(actual, expected)) {
9060 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
9061 }
9062};
9063
9064function _deepEqual(actual, expected) {
9065 // 7.1. All identical values are equivalent, as determined by ===.
9066 if (actual === expected) {
9067 return true;
9068
9069 } else if (util.isBuffer(actual) && util.isBuffer(expected)) {
9070 if (actual.length != expected.length) return false;
9071
9072 for (var i = 0; i < actual.length; i++) {
9073 if (actual[i] !== expected[i]) return false;
9074 }
9075
9076 return true;
9077
9078 // 7.2. If the expected value is a Date object, the actual value is
9079 // equivalent if it is also a Date object that refers to the same time.
9080 } else if (util.isDate(actual) && util.isDate(expected)) {
9081 return actual.getTime() === expected.getTime();
9082
9083 // 7.3 If the expected value is a RegExp object, the actual value is
9084 // equivalent if it is also a RegExp object with the same source and
9085 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
9086 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
9087 return actual.source === expected.source &&
9088 actual.global === expected.global &&
9089 actual.multiline === expected.multiline &&
9090 actual.lastIndex === expected.lastIndex &&
9091 actual.ignoreCase === expected.ignoreCase;
9092
9093 // 7.4. Other pairs that do not both pass typeof value == 'object',
9094 // equivalence is determined by ==.
9095 } else if (!util.isObject(actual) && !util.isObject(expected)) {
9096 return actual == expected;
9097
9098 // 7.5 For all other Object pairs, including Array objects, equivalence is
9099 // determined by having the same number of owned properties (as verified
9100 // with Object.prototype.hasOwnProperty.call), the same set of keys
9101 // (although not necessarily the same order), equivalent values for every
9102 // corresponding key, and an identical 'prototype' property. Note: this
9103 // accounts for both named and indexed properties on Arrays.
9104 } else {
9105 return objEquiv(actual, expected);
9106 }
9107}
9108
9109function isArguments(object) {
9110 return Object.prototype.toString.call(object) == '[object Arguments]';
9111}
9112
9113function objEquiv(a, b) {
9114 if (util.isNullOrUndefined(a) || util.isNullOrUndefined(b))
9115 return false;
9116 // an identical 'prototype' property.
9117 if (a.prototype !== b.prototype) return false;
9118 // if one is a primitive, the other must be same
9119 if (util.isPrimitive(a) || util.isPrimitive(b)) {
9120 return a === b;
9121 }
9122 var aIsArgs = isArguments(a),
9123 bIsArgs = isArguments(b);
9124 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
9125 return false;
9126 if (aIsArgs) {
9127 a = pSlice.call(a);
9128 b = pSlice.call(b);
9129 return _deepEqual(a, b);
9130 }
9131 var ka = objectKeys(a),
9132 kb = objectKeys(b),
9133 key, i;
9134 // having the same number of owned properties (keys incorporates
9135 // hasOwnProperty)
9136 if (ka.length != kb.length)
9137 return false;
9138 //the same set of keys (although not necessarily the same order),
9139 ka.sort();
9140 kb.sort();
9141 //~~~cheap key test
9142 for (i = ka.length - 1; i >= 0; i--) {
9143 if (ka[i] != kb[i])
9144 return false;
9145 }
9146 //equivalent values for every corresponding key, and
9147 //~~~possibly expensive deep test
9148 for (i = ka.length - 1; i >= 0; i--) {
9149 key = ka[i];
9150 if (!_deepEqual(a[key], b[key])) return false;
9151 }
9152 return true;
9153}
9154
9155// 8. The non-equivalence assertion tests for any deep inequality.
9156// assert.notDeepEqual(actual, expected, message_opt);
9157
9158assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
9159 if (_deepEqual(actual, expected)) {
9160 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
9161 }
9162};
9163
9164// 9. The strict equality assertion tests strict equality, as determined by ===.
9165// assert.strictEqual(actual, expected, message_opt);
9166
9167assert.strictEqual = function strictEqual(actual, expected, message) {
9168 if (actual !== expected) {
9169 fail(actual, expected, message, '===', assert.strictEqual);
9170 }
9171};
9172
9173// 10. The strict non-equality assertion tests for strict inequality, as
9174// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
9175
9176assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
9177 if (actual === expected) {
9178 fail(actual, expected, message, '!==', assert.notStrictEqual);
9179 }
9180};
9181
9182function expectedException(actual, expected) {
9183 if (!actual || !expected) {
9184 return false;
9185 }
9186
9187 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
9188 return expected.test(actual);
9189 } else if (actual instanceof expected) {
9190 return true;
9191 } else if (expected.call({}, actual) === true) {
9192 return true;
9193 }
9194
9195 return false;
9196}
9197
9198function _throws(shouldThrow, block, expected, message) {
9199 var actual;
9200
9201 if (util.isString(expected)) {
9202 message = expected;
9203 expected = null;
9204 }
9205
9206 try {
9207 block();
9208 } catch (e) {
9209 actual = e;
9210 }
9211
9212 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
9213 (message ? ' ' + message : '.');
9214
9215 if (shouldThrow && !actual) {
9216 fail(actual, expected, 'Missing expected exception' + message);
9217 }
9218
9219 if (!shouldThrow && expectedException(actual, expected)) {
9220 fail(actual, expected, 'Got unwanted exception' + message);
9221 }
9222
9223 if ((shouldThrow && actual && expected &&
9224 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
9225 throw actual;
9226 }
9227}
9228
9229// 11. Expected to throw an error:
9230// assert.throws(block, Error_opt, message_opt);
9231
9232assert.throws = function(block, /*optional*/error, /*optional*/message) {
9233 _throws.apply(this, [true].concat(pSlice.call(arguments)));
9234};
9235
9236// EXTENSION! This is annoying to write outside this module.
9237assert.doesNotThrow = function(block, /*optional*/message) {
9238 _throws.apply(this, [false].concat(pSlice.call(arguments)));
9239};
9240
9241assert.ifError = function(err) { if (err) {throw err;}};
9242
9243var objectKeys = Object.keys || function (obj) {
9244 var keys = [];
9245 for (var key in obj) {
9246 if (hasOwn.call(obj, key)) keys.push(key);
9247 }
9248 return keys;
9249};
9250
9251},{"util/":29}],6:[function(require,module,exports){
9252
9253},{}],7:[function(require,module,exports){
9254/*!
9255 * The buffer module from node.js, for the browser.
9256 *
9257 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
9258 * @license MIT
9259 */
9260
9261var base64 = require('base64-js')
9262var ieee754 = require('ieee754')
9263var isArray = require('is-array')
9264
9265exports.Buffer = Buffer
9266exports.SlowBuffer = SlowBuffer
9267exports.INSPECT_MAX_BYTES = 50
9268Buffer.poolSize = 8192 // not used by this implementation
9269
9270var rootParent = {}
9271
9272/**
9273 * If `Buffer.TYPED_ARRAY_SUPPORT`:
9274 * === true Use Uint8Array implementation (fastest)
9275 * === false Use Object implementation (most compatible, even IE6)
9276 *
9277 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
9278 * Opera 11.6+, iOS 4.2+.
9279 *
9280 * Due to various browser bugs, sometimes the Object implementation will be used even
9281 * when the browser supports typed arrays.
9282 *
9283 * Note:
9284 *
9285 * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,
9286 * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.
9287 *
9288 * - Safari 5-7 lacks support for changing the `Object.prototype.constructor` property
9289 * on objects.
9290 *
9291 * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.
9292 *
9293 * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of
9294 * incorrect length in some situations.
9295
9296 * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they
9297 * get the Object implementation, which is slower but behaves correctly.
9298 */
9299Buffer.TYPED_ARRAY_SUPPORT = (function () {
9300 function Bar () {}
9301 try {
9302 var arr = new Uint8Array(1)
9303 arr.foo = function () { return 42 }
9304 arr.constructor = Bar
9305 return arr.foo() === 42 && // typed array instances can be augmented
9306 arr.constructor === Bar && // constructor can be set
9307 typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`
9308 arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`
9309 } catch (e) {
9310 return false
9311 }
9312})()
9313
9314function kMaxLength () {
9315 return Buffer.TYPED_ARRAY_SUPPORT
9316 ? 0x7fffffff
9317 : 0x3fffffff
9318}
9319
9320/**
9321 * Class: Buffer
9322 * =============
9323 *
9324 * The Buffer constructor returns instances of `Uint8Array` that are augmented
9325 * with function properties for all the node `Buffer` API functions. We use
9326 * `Uint8Array` so that square bracket notation works as expected -- it returns
9327 * a single octet.
9328 *
9329 * By augmenting the instances, we can avoid modifying the `Uint8Array`
9330 * prototype.
9331 */
9332function Buffer (arg) {
9333 if (!(this instanceof Buffer)) {
9334 // Avoid going through an ArgumentsAdaptorTrampoline in the common case.
9335 if (arguments.length > 1) return new Buffer(arg, arguments[1])
9336 return new Buffer(arg)
9337 }
9338
9339 this.length = 0
9340 this.parent = undefined
9341
9342 // Common case.
9343 if (typeof arg === 'number') {
9344 return fromNumber(this, arg)
9345 }
9346
9347 // Slightly less common case.
9348 if (typeof arg === 'string') {
9349 return fromString(this, arg, arguments.length > 1 ? arguments[1] : 'utf8')
9350 }
9351
9352 // Unusual.
9353 return fromObject(this, arg)
9354}
9355
9356function fromNumber (that, length) {
9357 that = allocate(that, length < 0 ? 0 : checked(length) | 0)
9358 if (!Buffer.TYPED_ARRAY_SUPPORT) {
9359 for (var i = 0; i < length; i++) {
9360 that[i] = 0
9361 }
9362 }
9363 return that
9364}
9365
9366function fromString (that, string, encoding) {
9367 if (typeof encoding !== 'string' || encoding === '') encoding = 'utf8'
9368
9369 // Assumption: byteLength() return value is always < kMaxLength.
9370 var length = byteLength(string, encoding) | 0
9371 that = allocate(that, length)
9372
9373 that.write(string, encoding)
9374 return that
9375}
9376
9377function fromObject (that, object) {
9378 if (Buffer.isBuffer(object)) return fromBuffer(that, object)
9379
9380 if (isArray(object)) return fromArray(that, object)
9381
9382 if (object == null) {
9383 throw new TypeError('must start with number, buffer, array or string')
9384 }
9385
9386 if (typeof ArrayBuffer !== 'undefined') {
9387 if (object.buffer instanceof ArrayBuffer) {
9388 return fromTypedArray(that, object)
9389 }
9390 if (object instanceof ArrayBuffer) {
9391 return fromArrayBuffer(that, object)
9392 }
9393 }
9394
9395 if (object.length) return fromArrayLike(that, object)
9396
9397 return fromJsonObject(that, object)
9398}
9399
9400function fromBuffer (that, buffer) {
9401 var length = checked(buffer.length) | 0
9402 that = allocate(that, length)
9403 buffer.copy(that, 0, 0, length)
9404 return that
9405}
9406
9407function fromArray (that, array) {
9408 var length = checked(array.length) | 0
9409 that = allocate(that, length)
9410 for (var i = 0; i < length; i += 1) {
9411 that[i] = array[i] & 255
9412 }
9413 return that
9414}
9415
9416// Duplicate of fromArray() to keep fromArray() monomorphic.
9417function fromTypedArray (that, array) {
9418 var length = checked(array.length) | 0
9419 that = allocate(that, length)
9420 // Truncating the elements is probably not what people expect from typed
9421 // arrays with BYTES_PER_ELEMENT > 1 but it's compatible with the behavior
9422 // of the old Buffer constructor.
9423 for (var i = 0; i < length; i += 1) {
9424 that[i] = array[i] & 255
9425 }
9426 return that
9427}
9428
9429function fromArrayBuffer (that, array) {
9430 if (Buffer.TYPED_ARRAY_SUPPORT) {
9431 // Return an augmented `Uint8Array` instance, for best performance
9432 array.byteLength
9433 that = Buffer._augment(new Uint8Array(array))
9434 } else {
9435 // Fallback: Return an object instance of the Buffer class
9436 that = fromTypedArray(that, new Uint8Array(array))
9437 }
9438 return that
9439}
9440
9441function fromArrayLike (that, array) {
9442 var length = checked(array.length) | 0
9443 that = allocate(that, length)
9444 for (var i = 0; i < length; i += 1) {
9445 that[i] = array[i] & 255
9446 }
9447 return that
9448}
9449
9450// Deserialize { type: 'Buffer', data: [1,2,3,...] } into a Buffer object.
9451// Returns a zero-length buffer for inputs that don't conform to the spec.
9452function fromJsonObject (that, object) {
9453 var array
9454 var length = 0
9455
9456 if (object.type === 'Buffer' && isArray(object.data)) {
9457 array = object.data
9458 length = checked(array.length) | 0
9459 }
9460 that = allocate(that, length)
9461
9462 for (var i = 0; i < length; i += 1) {
9463 that[i] = array[i] & 255
9464 }
9465 return that
9466}
9467
9468function allocate (that, length) {
9469 if (Buffer.TYPED_ARRAY_SUPPORT) {
9470 // Return an augmented `Uint8Array` instance, for best performance
9471 that = Buffer._augment(new Uint8Array(length))
9472 } else {
9473 // Fallback: Return an object instance of the Buffer class
9474 that.length = length
9475 that._isBuffer = true
9476 }
9477
9478 var fromPool = length !== 0 && length <= Buffer.poolSize >>> 1
9479 if (fromPool) that.parent = rootParent
9480
9481 return that
9482}
9483
9484function checked (length) {
9485 // Note: cannot use `length < kMaxLength` here because that fails when
9486 // length is NaN (which is otherwise coerced to zero.)
9487 if (length >= kMaxLength()) {
9488 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
9489 'size: 0x' + kMaxLength().toString(16) + ' bytes')
9490 }
9491 return length | 0
9492}
9493
9494function SlowBuffer (subject, encoding) {
9495 if (!(this instanceof SlowBuffer)) return new SlowBuffer(subject, encoding)
9496
9497 var buf = new Buffer(subject, encoding)
9498 delete buf.parent
9499 return buf
9500}
9501
9502Buffer.isBuffer = function isBuffer (b) {
9503 return !!(b != null && b._isBuffer)
9504}
9505
9506Buffer.compare = function compare (a, b) {
9507 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
9508 throw new TypeError('Arguments must be Buffers')
9509 }
9510
9511 if (a === b) return 0
9512
9513 var x = a.length
9514 var y = b.length
9515
9516 var i = 0
9517 var len = Math.min(x, y)
9518 while (i < len) {
9519 if (a[i] !== b[i]) break
9520
9521 ++i
9522 }
9523
9524 if (i !== len) {
9525 x = a[i]
9526 y = b[i]
9527 }
9528
9529 if (x < y) return -1
9530 if (y < x) return 1
9531 return 0
9532}
9533
9534Buffer.isEncoding = function isEncoding (encoding) {
9535 switch (String(encoding).toLowerCase()) {
9536 case 'hex':
9537 case 'utf8':
9538 case 'utf-8':
9539 case 'ascii':
9540 case 'binary':
9541 case 'base64':
9542 case 'raw':
9543 case 'ucs2':
9544 case 'ucs-2':
9545 case 'utf16le':
9546 case 'utf-16le':
9547 return true
9548 default:
9549 return false
9550 }
9551}
9552
9553Buffer.concat = function concat (list, length) {
9554 if (!isArray(list)) throw new TypeError('list argument must be an Array of Buffers.')
9555
9556 if (list.length === 0) {
9557 return new Buffer(0)
9558 }
9559
9560 var i
9561 if (length === undefined) {
9562 length = 0
9563 for (i = 0; i < list.length; i++) {
9564 length += list[i].length
9565 }
9566 }
9567
9568 var buf = new Buffer(length)
9569 var pos = 0
9570 for (i = 0; i < list.length; i++) {
9571 var item = list[i]
9572 item.copy(buf, pos)
9573 pos += item.length
9574 }
9575 return buf
9576}
9577
9578function byteLength (string, encoding) {
9579 if (typeof string !== 'string') string = '' + string
9580
9581 var len = string.length
9582 if (len === 0) return 0
9583
9584 // Use a for loop to avoid recursion
9585 var loweredCase = false
9586 for (;;) {
9587 switch (encoding) {
9588 case 'ascii':
9589 case 'binary':
9590 // Deprecated
9591 case 'raw':
9592 case 'raws':
9593 return len
9594 case 'utf8':
9595 case 'utf-8':
9596 return utf8ToBytes(string).length
9597 case 'ucs2':
9598 case 'ucs-2':
9599 case 'utf16le':
9600 case 'utf-16le':
9601 return len * 2
9602 case 'hex':
9603 return len >>> 1
9604 case 'base64':
9605 return base64ToBytes(string).length
9606 default:
9607 if (loweredCase) return utf8ToBytes(string).length // assume utf8
9608 encoding = ('' + encoding).toLowerCase()
9609 loweredCase = true
9610 }
9611 }
9612}
9613Buffer.byteLength = byteLength
9614
9615// pre-set for values that may exist in the future
9616Buffer.prototype.length = undefined
9617Buffer.prototype.parent = undefined
9618
9619function slowToString (encoding, start, end) {
9620 var loweredCase = false
9621
9622 start = start | 0
9623 end = end === undefined || end === Infinity ? this.length : end | 0
9624
9625 if (!encoding) encoding = 'utf8'
9626 if (start < 0) start = 0
9627 if (end > this.length) end = this.length
9628 if (end <= start) return ''
9629
9630 while (true) {
9631 switch (encoding) {
9632 case 'hex':
9633 return hexSlice(this, start, end)
9634
9635 case 'utf8':
9636 case 'utf-8':
9637 return utf8Slice(this, start, end)
9638
9639 case 'ascii':
9640 return asciiSlice(this, start, end)
9641
9642 case 'binary':
9643 return binarySlice(this, start, end)
9644
9645 case 'base64':
9646 return base64Slice(this, start, end)
9647
9648 case 'ucs2':
9649 case 'ucs-2':
9650 case 'utf16le':
9651 case 'utf-16le':
9652 return utf16leSlice(this, start, end)
9653
9654 default:
9655 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
9656 encoding = (encoding + '').toLowerCase()
9657 loweredCase = true
9658 }
9659 }
9660}
9661
9662Buffer.prototype.toString = function toString () {
9663 var length = this.length | 0
9664 if (length === 0) return ''
9665 if (arguments.length === 0) return utf8Slice(this, 0, length)
9666 return slowToString.apply(this, arguments)
9667}
9668
9669Buffer.prototype.equals = function equals (b) {
9670 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
9671 if (this === b) return true
9672 return Buffer.compare(this, b) === 0
9673}
9674
9675Buffer.prototype.inspect = function inspect () {
9676 var str = ''
9677 var max = exports.INSPECT_MAX_BYTES
9678 if (this.length > 0) {
9679 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
9680 if (this.length > max) str += ' ... '
9681 }
9682 return '<Buffer ' + str + '>'
9683}
9684
9685Buffer.prototype.compare = function compare (b) {
9686 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
9687 if (this === b) return 0
9688 return Buffer.compare(this, b)
9689}
9690
9691Buffer.prototype.indexOf = function indexOf (val, byteOffset) {
9692 if (byteOffset > 0x7fffffff) byteOffset = 0x7fffffff
9693 else if (byteOffset < -0x80000000) byteOffset = -0x80000000
9694 byteOffset >>= 0
9695
9696 if (this.length === 0) return -1
9697 if (byteOffset >= this.length) return -1
9698
9699 // Negative offsets start from the end of the buffer
9700 if (byteOffset < 0) byteOffset = Math.max(this.length + byteOffset, 0)
9701
9702 if (typeof val === 'string') {
9703 if (val.length === 0) return -1 // special case: looking for empty string always fails
9704 return String.prototype.indexOf.call(this, val, byteOffset)
9705 }
9706 if (Buffer.isBuffer(val)) {
9707 return arrayIndexOf(this, val, byteOffset)
9708 }
9709 if (typeof val === 'number') {
9710 if (Buffer.TYPED_ARRAY_SUPPORT && Uint8Array.prototype.indexOf === 'function') {
9711 return Uint8Array.prototype.indexOf.call(this, val, byteOffset)
9712 }
9713 return arrayIndexOf(this, [ val ], byteOffset)
9714 }
9715
9716 function arrayIndexOf (arr, val, byteOffset) {
9717 var foundIndex = -1
9718 for (var i = 0; byteOffset + i < arr.length; i++) {
9719 if (arr[byteOffset + i] === val[foundIndex === -1 ? 0 : i - foundIndex]) {
9720 if (foundIndex === -1) foundIndex = i
9721 if (i - foundIndex + 1 === val.length) return byteOffset + foundIndex
9722 } else {
9723 foundIndex = -1
9724 }
9725 }
9726 return -1
9727 }
9728
9729 throw new TypeError('val must be string, number or Buffer')
9730}
9731
9732// `get` is deprecated
9733Buffer.prototype.get = function get (offset) {
9734 console.log('.get() is deprecated. Access using array indexes instead.')
9735 return this.readUInt8(offset)
9736}
9737
9738// `set` is deprecated
9739Buffer.prototype.set = function set (v, offset) {
9740 console.log('.set() is deprecated. Access using array indexes instead.')
9741 return this.writeUInt8(v, offset)
9742}
9743
9744function hexWrite (buf, string, offset, length) {
9745 offset = Number(offset) || 0
9746 var remaining = buf.length - offset
9747 if (!length) {
9748 length = remaining
9749 } else {
9750 length = Number(length)
9751 if (length > remaining) {
9752 length = remaining
9753 }
9754 }
9755
9756 // must be an even number of digits
9757 var strLen = string.length
9758 if (strLen % 2 !== 0) throw new Error('Invalid hex string')
9759
9760 if (length > strLen / 2) {
9761 length = strLen / 2
9762 }
9763 for (var i = 0; i < length; i++) {
9764 var parsed = parseInt(string.substr(i * 2, 2), 16)
9765 if (isNaN(parsed)) throw new Error('Invalid hex string')
9766 buf[offset + i] = parsed
9767 }
9768 return i
9769}
9770
9771function utf8Write (buf, string, offset, length) {
9772 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
9773}
9774
9775function asciiWrite (buf, string, offset, length) {
9776 return blitBuffer(asciiToBytes(string), buf, offset, length)
9777}
9778
9779function binaryWrite (buf, string, offset, length) {
9780 return asciiWrite(buf, string, offset, length)
9781}
9782
9783function base64Write (buf, string, offset, length) {
9784 return blitBuffer(base64ToBytes(string), buf, offset, length)
9785}
9786
9787function ucs2Write (buf, string, offset, length) {
9788 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
9789}
9790
9791Buffer.prototype.write = function write (string, offset, length, encoding) {
9792 // Buffer#write(string)
9793 if (offset === undefined) {
9794 encoding = 'utf8'
9795 length = this.length
9796 offset = 0
9797 // Buffer#write(string, encoding)
9798 } else if (length === undefined && typeof offset === 'string') {
9799 encoding = offset
9800 length = this.length
9801 offset = 0
9802 // Buffer#write(string, offset[, length][, encoding])
9803 } else if (isFinite(offset)) {
9804 offset = offset | 0
9805 if (isFinite(length)) {
9806 length = length | 0
9807 if (encoding === undefined) encoding = 'utf8'
9808 } else {
9809 encoding = length
9810 length = undefined
9811 }
9812 // legacy write(string, encoding, offset, length) - remove in v0.13
9813 } else {
9814 var swap = encoding
9815 encoding = offset
9816 offset = length | 0
9817 length = swap
9818 }
9819
9820 var remaining = this.length - offset
9821 if (length === undefined || length > remaining) length = remaining
9822
9823 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
9824 throw new RangeError('attempt to write outside buffer bounds')
9825 }
9826
9827 if (!encoding) encoding = 'utf8'
9828
9829 var loweredCase = false
9830 for (;;) {
9831 switch (encoding) {
9832 case 'hex':
9833 return hexWrite(this, string, offset, length)
9834
9835 case 'utf8':
9836 case 'utf-8':
9837 return utf8Write(this, string, offset, length)
9838
9839 case 'ascii':
9840 return asciiWrite(this, string, offset, length)
9841
9842 case 'binary':
9843 return binaryWrite(this, string, offset, length)
9844
9845 case 'base64':
9846 // Warning: maxLength not taken into account in base64Write
9847 return base64Write(this, string, offset, length)
9848
9849 case 'ucs2':
9850 case 'ucs-2':
9851 case 'utf16le':
9852 case 'utf-16le':
9853 return ucs2Write(this, string, offset, length)
9854
9855 default:
9856 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
9857 encoding = ('' + encoding).toLowerCase()
9858 loweredCase = true
9859 }
9860 }
9861}
9862
9863Buffer.prototype.toJSON = function toJSON () {
9864 return {
9865 type: 'Buffer',
9866 data: Array.prototype.slice.call(this._arr || this, 0)
9867 }
9868}
9869
9870function base64Slice (buf, start, end) {
9871 if (start === 0 && end === buf.length) {
9872 return base64.fromByteArray(buf)
9873 } else {
9874 return base64.fromByteArray(buf.slice(start, end))
9875 }
9876}
9877
9878function utf8Slice (buf, start, end) {
9879 end = Math.min(buf.length, end)
9880 var firstByte
9881 var secondByte
9882 var thirdByte
9883 var fourthByte
9884 var bytesPerSequence
9885 var tempCodePoint
9886 var codePoint
9887 var res = []
9888 var i = start
9889
9890 for (; i < end; i += bytesPerSequence) {
9891 firstByte = buf[i]
9892 codePoint = 0xFFFD
9893
9894 if (firstByte > 0xEF) {
9895 bytesPerSequence = 4
9896 } else if (firstByte > 0xDF) {
9897 bytesPerSequence = 3
9898 } else if (firstByte > 0xBF) {
9899 bytesPerSequence = 2
9900 } else {
9901 bytesPerSequence = 1
9902 }
9903
9904 if (i + bytesPerSequence <= end) {
9905 switch (bytesPerSequence) {
9906 case 1:
9907 if (firstByte < 0x80) {
9908 codePoint = firstByte
9909 }
9910 break
9911 case 2:
9912 secondByte = buf[i + 1]
9913 if ((secondByte & 0xC0) === 0x80) {
9914 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
9915 if (tempCodePoint > 0x7F) {
9916 codePoint = tempCodePoint
9917 }
9918 }
9919 break
9920 case 3:
9921 secondByte = buf[i + 1]
9922 thirdByte = buf[i + 2]
9923 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
9924 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
9925 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
9926 codePoint = tempCodePoint
9927 }
9928 }
9929 break
9930 case 4:
9931 secondByte = buf[i + 1]
9932 thirdByte = buf[i + 2]
9933 fourthByte = buf[i + 3]
9934 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
9935 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
9936 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
9937 codePoint = tempCodePoint
9938 }
9939 }
9940 }
9941 }
9942
9943 if (codePoint === 0xFFFD) {
9944 // we generated an invalid codePoint so make sure to only advance by 1 byte
9945 bytesPerSequence = 1
9946 } else if (codePoint > 0xFFFF) {
9947 // encode to utf16 (surrogate pair dance)
9948 codePoint -= 0x10000
9949 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
9950 codePoint = 0xDC00 | codePoint & 0x3FF
9951 }
9952
9953 res.push(codePoint)
9954 }
9955
9956 return String.fromCharCode.apply(String, res)
9957}
9958
9959function asciiSlice (buf, start, end) {
9960 var ret = ''
9961 end = Math.min(buf.length, end)
9962
9963 for (var i = start; i < end; i++) {
9964 ret += String.fromCharCode(buf[i] & 0x7F)
9965 }
9966 return ret
9967}
9968
9969function binarySlice (buf, start, end) {
9970 var ret = ''
9971 end = Math.min(buf.length, end)
9972
9973 for (var i = start; i < end; i++) {
9974 ret += String.fromCharCode(buf[i])
9975 }
9976 return ret
9977}
9978
9979function hexSlice (buf, start, end) {
9980 var len = buf.length
9981
9982 if (!start || start < 0) start = 0
9983 if (!end || end < 0 || end > len) end = len
9984
9985 var out = ''
9986 for (var i = start; i < end; i++) {
9987 out += toHex(buf[i])
9988 }
9989 return out
9990}
9991
9992function utf16leSlice (buf, start, end) {
9993 var bytes = buf.slice(start, end)
9994 var res = ''
9995 for (var i = 0; i < bytes.length; i += 2) {
9996 res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)
9997 }
9998 return res
9999}
10000
10001Buffer.prototype.slice = function slice (start, end) {
10002 var len = this.length
10003 start = ~~start
10004 end = end === undefined ? len : ~~end
10005
10006 if (start < 0) {
10007 start += len
10008 if (start < 0) start = 0
10009 } else if (start > len) {
10010 start = len
10011 }
10012
10013 if (end < 0) {
10014 end += len
10015 if (end < 0) end = 0
10016 } else if (end > len) {
10017 end = len
10018 }
10019
10020 if (end < start) end = start
10021
10022 var newBuf
10023 if (Buffer.TYPED_ARRAY_SUPPORT) {
10024 newBuf = Buffer._augment(this.subarray(start, end))
10025 } else {
10026 var sliceLen = end - start
10027 newBuf = new Buffer(sliceLen, undefined)
10028 for (var i = 0; i < sliceLen; i++) {
10029 newBuf[i] = this[i + start]
10030 }
10031 }
10032
10033 if (newBuf.length) newBuf.parent = this.parent || this
10034
10035 return newBuf
10036}
10037
10038/*
10039 * Need to make sure that buffer isn't trying to write out of bounds.
10040 */
10041function checkOffset (offset, ext, length) {
10042 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
10043 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
10044}
10045
10046Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
10047 offset = offset | 0
10048 byteLength = byteLength | 0
10049 if (!noAssert) checkOffset(offset, byteLength, this.length)
10050
10051 var val = this[offset]
10052 var mul = 1
10053 var i = 0
10054 while (++i < byteLength && (mul *= 0x100)) {
10055 val += this[offset + i] * mul
10056 }
10057
10058 return val
10059}
10060
10061Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
10062 offset = offset | 0
10063 byteLength = byteLength | 0
10064 if (!noAssert) {
10065 checkOffset(offset, byteLength, this.length)
10066 }
10067
10068 var val = this[offset + --byteLength]
10069 var mul = 1
10070 while (byteLength > 0 && (mul *= 0x100)) {
10071 val += this[offset + --byteLength] * mul
10072 }
10073
10074 return val
10075}
10076
10077Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
10078 if (!noAssert) checkOffset(offset, 1, this.length)
10079 return this[offset]
10080}
10081
10082Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
10083 if (!noAssert) checkOffset(offset, 2, this.length)
10084 return this[offset] | (this[offset + 1] << 8)
10085}
10086
10087Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
10088 if (!noAssert) checkOffset(offset, 2, this.length)
10089 return (this[offset] << 8) | this[offset + 1]
10090}
10091
10092Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
10093 if (!noAssert) checkOffset(offset, 4, this.length)
10094
10095 return ((this[offset]) |
10096 (this[offset + 1] << 8) |
10097 (this[offset + 2] << 16)) +
10098 (this[offset + 3] * 0x1000000)
10099}
10100
10101Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
10102 if (!noAssert) checkOffset(offset, 4, this.length)
10103
10104 return (this[offset] * 0x1000000) +
10105 ((this[offset + 1] << 16) |
10106 (this[offset + 2] << 8) |
10107 this[offset + 3])
10108}
10109
10110Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
10111 offset = offset | 0
10112 byteLength = byteLength | 0
10113 if (!noAssert) checkOffset(offset, byteLength, this.length)
10114
10115 var val = this[offset]
10116 var mul = 1
10117 var i = 0
10118 while (++i < byteLength && (mul *= 0x100)) {
10119 val += this[offset + i] * mul
10120 }
10121 mul *= 0x80
10122
10123 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
10124
10125 return val
10126}
10127
10128Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
10129 offset = offset | 0
10130 byteLength = byteLength | 0
10131 if (!noAssert) checkOffset(offset, byteLength, this.length)
10132
10133 var i = byteLength
10134 var mul = 1
10135 var val = this[offset + --i]
10136 while (i > 0 && (mul *= 0x100)) {
10137 val += this[offset + --i] * mul
10138 }
10139 mul *= 0x80
10140
10141 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
10142
10143 return val
10144}
10145
10146Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
10147 if (!noAssert) checkOffset(offset, 1, this.length)
10148 if (!(this[offset] & 0x80)) return (this[offset])
10149 return ((0xff - this[offset] + 1) * -1)
10150}
10151
10152Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
10153 if (!noAssert) checkOffset(offset, 2, this.length)
10154 var val = this[offset] | (this[offset + 1] << 8)
10155 return (val & 0x8000) ? val | 0xFFFF0000 : val
10156}
10157
10158Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
10159 if (!noAssert) checkOffset(offset, 2, this.length)
10160 var val = this[offset + 1] | (this[offset] << 8)
10161 return (val & 0x8000) ? val | 0xFFFF0000 : val
10162}
10163
10164Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
10165 if (!noAssert) checkOffset(offset, 4, this.length)
10166
10167 return (this[offset]) |
10168 (this[offset + 1] << 8) |
10169 (this[offset + 2] << 16) |
10170 (this[offset + 3] << 24)
10171}
10172
10173Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
10174 if (!noAssert) checkOffset(offset, 4, this.length)
10175
10176 return (this[offset] << 24) |
10177 (this[offset + 1] << 16) |
10178 (this[offset + 2] << 8) |
10179 (this[offset + 3])
10180}
10181
10182Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
10183 if (!noAssert) checkOffset(offset, 4, this.length)
10184 return ieee754.read(this, offset, true, 23, 4)
10185}
10186
10187Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
10188 if (!noAssert) checkOffset(offset, 4, this.length)
10189 return ieee754.read(this, offset, false, 23, 4)
10190}
10191
10192Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
10193 if (!noAssert) checkOffset(offset, 8, this.length)
10194 return ieee754.read(this, offset, true, 52, 8)
10195}
10196
10197Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
10198 if (!noAssert) checkOffset(offset, 8, this.length)
10199 return ieee754.read(this, offset, false, 52, 8)
10200}
10201
10202function checkInt (buf, value, offset, ext, max, min) {
10203 if (!Buffer.isBuffer(buf)) throw new TypeError('buffer must be a Buffer instance')
10204 if (value > max || value < min) throw new RangeError('value is out of bounds')
10205 if (offset + ext > buf.length) throw new RangeError('index out of range')
10206}
10207
10208Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
10209 value = +value
10210 offset = offset | 0
10211 byteLength = byteLength | 0
10212 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
10213
10214 var mul = 1
10215 var i = 0
10216 this[offset] = value & 0xFF
10217 while (++i < byteLength && (mul *= 0x100)) {
10218 this[offset + i] = (value / mul) & 0xFF
10219 }
10220
10221 return offset + byteLength
10222}
10223
10224Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
10225 value = +value
10226 offset = offset | 0
10227 byteLength = byteLength | 0
10228 if (!noAssert) checkInt(this, value, offset, byteLength, Math.pow(2, 8 * byteLength), 0)
10229
10230 var i = byteLength - 1
10231 var mul = 1
10232 this[offset + i] = value & 0xFF
10233 while (--i >= 0 && (mul *= 0x100)) {
10234 this[offset + i] = (value / mul) & 0xFF
10235 }
10236
10237 return offset + byteLength
10238}
10239
10240Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
10241 value = +value
10242 offset = offset | 0
10243 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
10244 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
10245 this[offset] = value
10246 return offset + 1
10247}
10248
10249function objectWriteUInt16 (buf, value, offset, littleEndian) {
10250 if (value < 0) value = 0xffff + value + 1
10251 for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; i++) {
10252 buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>
10253 (littleEndian ? i : 1 - i) * 8
10254 }
10255}
10256
10257Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
10258 value = +value
10259 offset = offset | 0
10260 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
10261 if (Buffer.TYPED_ARRAY_SUPPORT) {
10262 this[offset] = value
10263 this[offset + 1] = (value >>> 8)
10264 } else {
10265 objectWriteUInt16(this, value, offset, true)
10266 }
10267 return offset + 2
10268}
10269
10270Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
10271 value = +value
10272 offset = offset | 0
10273 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
10274 if (Buffer.TYPED_ARRAY_SUPPORT) {
10275 this[offset] = (value >>> 8)
10276 this[offset + 1] = value
10277 } else {
10278 objectWriteUInt16(this, value, offset, false)
10279 }
10280 return offset + 2
10281}
10282
10283function objectWriteUInt32 (buf, value, offset, littleEndian) {
10284 if (value < 0) value = 0xffffffff + value + 1
10285 for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; i++) {
10286 buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff
10287 }
10288}
10289
10290Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
10291 value = +value
10292 offset = offset | 0
10293 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
10294 if (Buffer.TYPED_ARRAY_SUPPORT) {
10295 this[offset + 3] = (value >>> 24)
10296 this[offset + 2] = (value >>> 16)
10297 this[offset + 1] = (value >>> 8)
10298 this[offset] = value
10299 } else {
10300 objectWriteUInt32(this, value, offset, true)
10301 }
10302 return offset + 4
10303}
10304
10305Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
10306 value = +value
10307 offset = offset | 0
10308 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
10309 if (Buffer.TYPED_ARRAY_SUPPORT) {
10310 this[offset] = (value >>> 24)
10311 this[offset + 1] = (value >>> 16)
10312 this[offset + 2] = (value >>> 8)
10313 this[offset + 3] = value
10314 } else {
10315 objectWriteUInt32(this, value, offset, false)
10316 }
10317 return offset + 4
10318}
10319
10320Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
10321 value = +value
10322 offset = offset | 0
10323 if (!noAssert) {
10324 var limit = Math.pow(2, 8 * byteLength - 1)
10325
10326 checkInt(this, value, offset, byteLength, limit - 1, -limit)
10327 }
10328
10329 var i = 0
10330 var mul = 1
10331 var sub = value < 0 ? 1 : 0
10332 this[offset] = value & 0xFF
10333 while (++i < byteLength && (mul *= 0x100)) {
10334 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
10335 }
10336
10337 return offset + byteLength
10338}
10339
10340Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
10341 value = +value
10342 offset = offset | 0
10343 if (!noAssert) {
10344 var limit = Math.pow(2, 8 * byteLength - 1)
10345
10346 checkInt(this, value, offset, byteLength, limit - 1, -limit)
10347 }
10348
10349 var i = byteLength - 1
10350 var mul = 1
10351 var sub = value < 0 ? 1 : 0
10352 this[offset + i] = value & 0xFF
10353 while (--i >= 0 && (mul *= 0x100)) {
10354 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
10355 }
10356
10357 return offset + byteLength
10358}
10359
10360Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
10361 value = +value
10362 offset = offset | 0
10363 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
10364 if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)
10365 if (value < 0) value = 0xff + value + 1
10366 this[offset] = value
10367 return offset + 1
10368}
10369
10370Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
10371 value = +value
10372 offset = offset | 0
10373 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
10374 if (Buffer.TYPED_ARRAY_SUPPORT) {
10375 this[offset] = value
10376 this[offset + 1] = (value >>> 8)
10377 } else {
10378 objectWriteUInt16(this, value, offset, true)
10379 }
10380 return offset + 2
10381}
10382
10383Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
10384 value = +value
10385 offset = offset | 0
10386 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
10387 if (Buffer.TYPED_ARRAY_SUPPORT) {
10388 this[offset] = (value >>> 8)
10389 this[offset + 1] = value
10390 } else {
10391 objectWriteUInt16(this, value, offset, false)
10392 }
10393 return offset + 2
10394}
10395
10396Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
10397 value = +value
10398 offset = offset | 0
10399 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
10400 if (Buffer.TYPED_ARRAY_SUPPORT) {
10401 this[offset] = value
10402 this[offset + 1] = (value >>> 8)
10403 this[offset + 2] = (value >>> 16)
10404 this[offset + 3] = (value >>> 24)
10405 } else {
10406 objectWriteUInt32(this, value, offset, true)
10407 }
10408 return offset + 4
10409}
10410
10411Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
10412 value = +value
10413 offset = offset | 0
10414 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
10415 if (value < 0) value = 0xffffffff + value + 1
10416 if (Buffer.TYPED_ARRAY_SUPPORT) {
10417 this[offset] = (value >>> 24)
10418 this[offset + 1] = (value >>> 16)
10419 this[offset + 2] = (value >>> 8)
10420 this[offset + 3] = value
10421 } else {
10422 objectWriteUInt32(this, value, offset, false)
10423 }
10424 return offset + 4
10425}
10426
10427function checkIEEE754 (buf, value, offset, ext, max, min) {
10428 if (value > max || value < min) throw new RangeError('value is out of bounds')
10429 if (offset + ext > buf.length) throw new RangeError('index out of range')
10430 if (offset < 0) throw new RangeError('index out of range')
10431}
10432
10433function writeFloat (buf, value, offset, littleEndian, noAssert) {
10434 if (!noAssert) {
10435 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
10436 }
10437 ieee754.write(buf, value, offset, littleEndian, 23, 4)
10438 return offset + 4
10439}
10440
10441Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
10442 return writeFloat(this, value, offset, true, noAssert)
10443}
10444
10445Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
10446 return writeFloat(this, value, offset, false, noAssert)
10447}
10448
10449function writeDouble (buf, value, offset, littleEndian, noAssert) {
10450 if (!noAssert) {
10451 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
10452 }
10453 ieee754.write(buf, value, offset, littleEndian, 52, 8)
10454 return offset + 8
10455}
10456
10457Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
10458 return writeDouble(this, value, offset, true, noAssert)
10459}
10460
10461Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
10462 return writeDouble(this, value, offset, false, noAssert)
10463}
10464
10465// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
10466Buffer.prototype.copy = function copy (target, targetStart, start, end) {
10467 if (!start) start = 0
10468 if (!end && end !== 0) end = this.length
10469 if (targetStart >= target.length) targetStart = target.length
10470 if (!targetStart) targetStart = 0
10471 if (end > 0 && end < start) end = start
10472
10473 // Copy 0 bytes; we're done
10474 if (end === start) return 0
10475 if (target.length === 0 || this.length === 0) return 0
10476
10477 // Fatal error conditions
10478 if (targetStart < 0) {
10479 throw new RangeError('targetStart out of bounds')
10480 }
10481 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
10482 if (end < 0) throw new RangeError('sourceEnd out of bounds')
10483
10484 // Are we oob?
10485 if (end > this.length) end = this.length
10486 if (target.length - targetStart < end - start) {
10487 end = target.length - targetStart + start
10488 }
10489
10490 var len = end - start
10491 var i
10492
10493 if (this === target && start < targetStart && targetStart < end) {
10494 // descending copy from end
10495 for (i = len - 1; i >= 0; i--) {
10496 target[i + targetStart] = this[i + start]
10497 }
10498 } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {
10499 // ascending copy from start
10500 for (i = 0; i < len; i++) {
10501 target[i + targetStart] = this[i + start]
10502 }
10503 } else {
10504 target._set(this.subarray(start, start + len), targetStart)
10505 }
10506
10507 return len
10508}
10509
10510// fill(value, start=0, end=buffer.length)
10511Buffer.prototype.fill = function fill (value, start, end) {
10512 if (!value) value = 0
10513 if (!start) start = 0
10514 if (!end) end = this.length
10515
10516 if (end < start) throw new RangeError('end < start')
10517
10518 // Fill 0 bytes; we're done
10519 if (end === start) return
10520 if (this.length === 0) return
10521
10522 if (start < 0 || start >= this.length) throw new RangeError('start out of bounds')
10523 if (end < 0 || end > this.length) throw new RangeError('end out of bounds')
10524
10525 var i
10526 if (typeof value === 'number') {
10527 for (i = start; i < end; i++) {
10528 this[i] = value
10529 }
10530 } else {
10531 var bytes = utf8ToBytes(value.toString())
10532 var len = bytes.length
10533 for (i = start; i < end; i++) {
10534 this[i] = bytes[i % len]
10535 }
10536 }
10537
10538 return this
10539}
10540
10541/**
10542 * Creates a new `ArrayBuffer` with the *copied* memory of the buffer instance.
10543 * Added in Node 0.12. Only available in browsers that support ArrayBuffer.
10544 */
10545Buffer.prototype.toArrayBuffer = function toArrayBuffer () {
10546 if (typeof Uint8Array !== 'undefined') {
10547 if (Buffer.TYPED_ARRAY_SUPPORT) {
10548 return (new Buffer(this)).buffer
10549 } else {
10550 var buf = new Uint8Array(this.length)
10551 for (var i = 0, len = buf.length; i < len; i += 1) {
10552 buf[i] = this[i]
10553 }
10554 return buf.buffer
10555 }
10556 } else {
10557 throw new TypeError('Buffer.toArrayBuffer not supported in this browser')
10558 }
10559}
10560
10561// HELPER FUNCTIONS
10562// ================
10563
10564var BP = Buffer.prototype
10565
10566/**
10567 * Augment a Uint8Array *instance* (not the Uint8Array class!) with Buffer methods
10568 */
10569Buffer._augment = function _augment (arr) {
10570 arr.constructor = Buffer
10571 arr._isBuffer = true
10572
10573 // save reference to original Uint8Array set method before overwriting
10574 arr._set = arr.set
10575
10576 // deprecated
10577 arr.get = BP.get
10578 arr.set = BP.set
10579
10580 arr.write = BP.write
10581 arr.toString = BP.toString
10582 arr.toLocaleString = BP.toString
10583 arr.toJSON = BP.toJSON
10584 arr.equals = BP.equals
10585 arr.compare = BP.compare
10586 arr.indexOf = BP.indexOf
10587 arr.copy = BP.copy
10588 arr.slice = BP.slice
10589 arr.readUIntLE = BP.readUIntLE
10590 arr.readUIntBE = BP.readUIntBE
10591 arr.readUInt8 = BP.readUInt8
10592 arr.readUInt16LE = BP.readUInt16LE
10593 arr.readUInt16BE = BP.readUInt16BE
10594 arr.readUInt32LE = BP.readUInt32LE
10595 arr.readUInt32BE = BP.readUInt32BE
10596 arr.readIntLE = BP.readIntLE
10597 arr.readIntBE = BP.readIntBE
10598 arr.readInt8 = BP.readInt8
10599 arr.readInt16LE = BP.readInt16LE
10600 arr.readInt16BE = BP.readInt16BE
10601 arr.readInt32LE = BP.readInt32LE
10602 arr.readInt32BE = BP.readInt32BE
10603 arr.readFloatLE = BP.readFloatLE
10604 arr.readFloatBE = BP.readFloatBE
10605 arr.readDoubleLE = BP.readDoubleLE
10606 arr.readDoubleBE = BP.readDoubleBE
10607 arr.writeUInt8 = BP.writeUInt8
10608 arr.writeUIntLE = BP.writeUIntLE
10609 arr.writeUIntBE = BP.writeUIntBE
10610 arr.writeUInt16LE = BP.writeUInt16LE
10611 arr.writeUInt16BE = BP.writeUInt16BE
10612 arr.writeUInt32LE = BP.writeUInt32LE
10613 arr.writeUInt32BE = BP.writeUInt32BE
10614 arr.writeIntLE = BP.writeIntLE
10615 arr.writeIntBE = BP.writeIntBE
10616 arr.writeInt8 = BP.writeInt8
10617 arr.writeInt16LE = BP.writeInt16LE
10618 arr.writeInt16BE = BP.writeInt16BE
10619 arr.writeInt32LE = BP.writeInt32LE
10620 arr.writeInt32BE = BP.writeInt32BE
10621 arr.writeFloatLE = BP.writeFloatLE
10622 arr.writeFloatBE = BP.writeFloatBE
10623 arr.writeDoubleLE = BP.writeDoubleLE
10624 arr.writeDoubleBE = BP.writeDoubleBE
10625 arr.fill = BP.fill
10626 arr.inspect = BP.inspect
10627 arr.toArrayBuffer = BP.toArrayBuffer
10628
10629 return arr
10630}
10631
10632var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g
10633
10634function base64clean (str) {
10635 // Node strips out invalid characters like \n and \t from the string, base64-js does not
10636 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
10637 // Node converts strings with length < 2 to ''
10638 if (str.length < 2) return ''
10639 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
10640 while (str.length % 4 !== 0) {
10641 str = str + '='
10642 }
10643 return str
10644}
10645
10646function stringtrim (str) {
10647 if (str.trim) return str.trim()
10648 return str.replace(/^\s+|\s+$/g, '')
10649}
10650
10651function toHex (n) {
10652 if (n < 16) return '0' + n.toString(16)
10653 return n.toString(16)
10654}
10655
10656function utf8ToBytes (string, units) {
10657 units = units || Infinity
10658 var codePoint
10659 var length = string.length
10660 var leadSurrogate = null
10661 var bytes = []
10662
10663 for (var i = 0; i < length; i++) {
10664 codePoint = string.charCodeAt(i)
10665
10666 // is surrogate component
10667 if (codePoint > 0xD7FF && codePoint < 0xE000) {
10668 // last char was a lead
10669 if (!leadSurrogate) {
10670 // no lead yet
10671 if (codePoint > 0xDBFF) {
10672 // unexpected trail
10673 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
10674 continue
10675
10676 } else if (i + 1 === length) {
10677 // unpaired lead
10678 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
10679 continue
10680 }
10681
10682 // valid lead
10683 leadSurrogate = codePoint
10684
10685 continue
10686 }
10687
10688 // 2 leads in a row
10689 if (codePoint < 0xDC00) {
10690 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
10691 leadSurrogate = codePoint
10692 continue
10693 }
10694
10695 // valid surrogate pair
10696 codePoint = leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00 | 0x10000
10697
10698 } else if (leadSurrogate) {
10699 // valid bmp char, but last char was a lead
10700 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
10701 }
10702
10703 leadSurrogate = null
10704
10705 // encode utf8
10706 if (codePoint < 0x80) {
10707 if ((units -= 1) < 0) break
10708 bytes.push(codePoint)
10709 } else if (codePoint < 0x800) {
10710 if ((units -= 2) < 0) break
10711 bytes.push(
10712 codePoint >> 0x6 | 0xC0,
10713 codePoint & 0x3F | 0x80
10714 )
10715 } else if (codePoint < 0x10000) {
10716 if ((units -= 3) < 0) break
10717 bytes.push(
10718 codePoint >> 0xC | 0xE0,
10719 codePoint >> 0x6 & 0x3F | 0x80,
10720 codePoint & 0x3F | 0x80
10721 )
10722 } else if (codePoint < 0x110000) {
10723 if ((units -= 4) < 0) break
10724 bytes.push(
10725 codePoint >> 0x12 | 0xF0,
10726 codePoint >> 0xC & 0x3F | 0x80,
10727 codePoint >> 0x6 & 0x3F | 0x80,
10728 codePoint & 0x3F | 0x80
10729 )
10730 } else {
10731 throw new Error('Invalid code point')
10732 }
10733 }
10734
10735 return bytes
10736}
10737
10738function asciiToBytes (str) {
10739 var byteArray = []
10740 for (var i = 0; i < str.length; i++) {
10741 // Node's code seems to be doing this and not & 0x7F..
10742 byteArray.push(str.charCodeAt(i) & 0xFF)
10743 }
10744 return byteArray
10745}
10746
10747function utf16leToBytes (str, units) {
10748 var c, hi, lo
10749 var byteArray = []
10750 for (var i = 0; i < str.length; i++) {
10751 if ((units -= 2) < 0) break
10752
10753 c = str.charCodeAt(i)
10754 hi = c >> 8
10755 lo = c % 256
10756 byteArray.push(lo)
10757 byteArray.push(hi)
10758 }
10759
10760 return byteArray
10761}
10762
10763function base64ToBytes (str) {
10764 return base64.toByteArray(base64clean(str))
10765}
10766
10767function blitBuffer (src, dst, offset, length) {
10768 for (var i = 0; i < length; i++) {
10769 if ((i + offset >= dst.length) || (i >= src.length)) break
10770 dst[i + offset] = src[i]
10771 }
10772 return i
10773}
10774
10775},{"base64-js":8,"ieee754":9,"is-array":10}],8:[function(require,module,exports){
10776var lookup = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
10777
10778;(function (exports) {
10779 'use strict';
10780
10781 var Arr = (typeof Uint8Array !== 'undefined')
10782 ? Uint8Array
10783 : Array
10784
10785 var PLUS = '+'.charCodeAt(0)
10786 var SLASH = '/'.charCodeAt(0)
10787 var NUMBER = '0'.charCodeAt(0)
10788 var LOWER = 'a'.charCodeAt(0)
10789 var UPPER = 'A'.charCodeAt(0)
10790 var PLUS_URL_SAFE = '-'.charCodeAt(0)
10791 var SLASH_URL_SAFE = '_'.charCodeAt(0)
10792
10793 function decode (elt) {
10794 var code = elt.charCodeAt(0)
10795 if (code === PLUS ||
10796 code === PLUS_URL_SAFE)
10797 return 62 // '+'
10798 if (code === SLASH ||
10799 code === SLASH_URL_SAFE)
10800 return 63 // '/'
10801 if (code < NUMBER)
10802 return -1 //no match
10803 if (code < NUMBER + 10)
10804 return code - NUMBER + 26 + 26
10805 if (code < UPPER + 26)
10806 return code - UPPER
10807 if (code < LOWER + 26)
10808 return code - LOWER + 26
10809 }
10810
10811 function b64ToByteArray (b64) {
10812 var i, j, l, tmp, placeHolders, arr
10813
10814 if (b64.length % 4 > 0) {
10815 throw new Error('Invalid string. Length must be a multiple of 4')
10816 }
10817
10818 // the number of equal signs (place holders)
10819 // if there are two placeholders, than the two characters before it
10820 // represent one byte
10821 // if there is only one, then the three characters before it represent 2 bytes
10822 // this is just a cheap hack to not do indexOf twice
10823 var len = b64.length
10824 placeHolders = '=' === b64.charAt(len - 2) ? 2 : '=' === b64.charAt(len - 1) ? 1 : 0
10825
10826 // base64 is 4/3 + up to two characters of the original data
10827 arr = new Arr(b64.length * 3 / 4 - placeHolders)
10828
10829 // if there are placeholders, only get up to the last complete 4 chars
10830 l = placeHolders > 0 ? b64.length - 4 : b64.length
10831
10832 var L = 0
10833
10834 function push (v) {
10835 arr[L++] = v
10836 }
10837
10838 for (i = 0, j = 0; i < l; i += 4, j += 3) {
10839 tmp = (decode(b64.charAt(i)) << 18) | (decode(b64.charAt(i + 1)) << 12) | (decode(b64.charAt(i + 2)) << 6) | decode(b64.charAt(i + 3))
10840 push((tmp & 0xFF0000) >> 16)
10841 push((tmp & 0xFF00) >> 8)
10842 push(tmp & 0xFF)
10843 }
10844
10845 if (placeHolders === 2) {
10846 tmp = (decode(b64.charAt(i)) << 2) | (decode(b64.charAt(i + 1)) >> 4)
10847 push(tmp & 0xFF)
10848 } else if (placeHolders === 1) {
10849 tmp = (decode(b64.charAt(i)) << 10) | (decode(b64.charAt(i + 1)) << 4) | (decode(b64.charAt(i + 2)) >> 2)
10850 push((tmp >> 8) & 0xFF)
10851 push(tmp & 0xFF)
10852 }
10853
10854 return arr
10855 }
10856
10857 function uint8ToBase64 (uint8) {
10858 var i,
10859 extraBytes = uint8.length % 3, // if we have 1 byte left, pad 2 bytes
10860 output = "",
10861 temp, length
10862
10863 function encode (num) {
10864 return lookup.charAt(num)
10865 }
10866
10867 function tripletToBase64 (num) {
10868 return encode(num >> 18 & 0x3F) + encode(num >> 12 & 0x3F) + encode(num >> 6 & 0x3F) + encode(num & 0x3F)
10869 }
10870
10871 // go through the array every three bytes, we'll deal with trailing stuff later
10872 for (i = 0, length = uint8.length - extraBytes; i < length; i += 3) {
10873 temp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
10874 output += tripletToBase64(temp)
10875 }
10876
10877 // pad the end with zeros, but make sure to not forget the extra bytes
10878 switch (extraBytes) {
10879 case 1:
10880 temp = uint8[uint8.length - 1]
10881 output += encode(temp >> 2)
10882 output += encode((temp << 4) & 0x3F)
10883 output += '=='
10884 break
10885 case 2:
10886 temp = (uint8[uint8.length - 2] << 8) + (uint8[uint8.length - 1])
10887 output += encode(temp >> 10)
10888 output += encode((temp >> 4) & 0x3F)
10889 output += encode((temp << 2) & 0x3F)
10890 output += '='
10891 break
10892 }
10893
10894 return output
10895 }
10896
10897 exports.toByteArray = b64ToByteArray
10898 exports.fromByteArray = uint8ToBase64
10899}(typeof exports === 'undefined' ? (this.base64js = {}) : exports))
10900
10901},{}],9:[function(require,module,exports){
10902exports.read = function (buffer, offset, isLE, mLen, nBytes) {
10903 var e, m
10904 var eLen = nBytes * 8 - mLen - 1
10905 var eMax = (1 << eLen) - 1
10906 var eBias = eMax >> 1
10907 var nBits = -7
10908 var i = isLE ? (nBytes - 1) : 0
10909 var d = isLE ? -1 : 1
10910 var s = buffer[offset + i]
10911
10912 i += d
10913
10914 e = s & ((1 << (-nBits)) - 1)
10915 s >>= (-nBits)
10916 nBits += eLen
10917 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
10918
10919 m = e & ((1 << (-nBits)) - 1)
10920 e >>= (-nBits)
10921 nBits += mLen
10922 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
10923
10924 if (e === 0) {
10925 e = 1 - eBias
10926 } else if (e === eMax) {
10927 return m ? NaN : ((s ? -1 : 1) * Infinity)
10928 } else {
10929 m = m + Math.pow(2, mLen)
10930 e = e - eBias
10931 }
10932 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
10933}
10934
10935exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
10936 var e, m, c
10937 var eLen = nBytes * 8 - mLen - 1
10938 var eMax = (1 << eLen) - 1
10939 var eBias = eMax >> 1
10940 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
10941 var i = isLE ? 0 : (nBytes - 1)
10942 var d = isLE ? 1 : -1
10943 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
10944
10945 value = Math.abs(value)
10946
10947 if (isNaN(value) || value === Infinity) {
10948 m = isNaN(value) ? 1 : 0
10949 e = eMax
10950 } else {
10951 e = Math.floor(Math.log(value) / Math.LN2)
10952 if (value * (c = Math.pow(2, -e)) < 1) {
10953 e--
10954 c *= 2
10955 }
10956 if (e + eBias >= 1) {
10957 value += rt / c
10958 } else {
10959 value += rt * Math.pow(2, 1 - eBias)
10960 }
10961 if (value * c >= 2) {
10962 e++
10963 c /= 2
10964 }
10965
10966 if (e + eBias >= eMax) {
10967 m = 0
10968 e = eMax
10969 } else if (e + eBias >= 1) {
10970 m = (value * c - 1) * Math.pow(2, mLen)
10971 e = e + eBias
10972 } else {
10973 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
10974 e = 0
10975 }
10976 }
10977
10978 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
10979
10980 e = (e << mLen) | m
10981 eLen += mLen
10982 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
10983
10984 buffer[offset + i - d] |= s * 128
10985}
10986
10987},{}],10:[function(require,module,exports){
10988
10989/**
10990 * isArray
10991 */
10992
10993var isArray = Array.isArray;
10994
10995/**
10996 * toString
10997 */
10998
10999var str = Object.prototype.toString;
11000
11001/**
11002 * Whether or not the given `val`
11003 * is an array.
11004 *
11005 * example:
11006 *
11007 * isArray([]);
11008 * // > true
11009 * isArray(arguments);
11010 * // > false
11011 * isArray('');
11012 * // > false
11013 *
11014 * @param {mixed} val
11015 * @return {bool}
11016 */
11017
11018module.exports = isArray || function (val) {
11019 return !! val && '[object Array]' == str.call(val);
11020};
11021
11022},{}],11:[function(require,module,exports){
11023// Copyright Joyent, Inc. and other Node contributors.
11024//
11025// Permission is hereby granted, free of charge, to any person obtaining a
11026// copy of this software and associated documentation files (the
11027// "Software"), to deal in the Software without restriction, including
11028// without limitation the rights to use, copy, modify, merge, publish,
11029// distribute, sublicense, and/or sell copies of the Software, and to permit
11030// persons to whom the Software is furnished to do so, subject to the
11031// following conditions:
11032//
11033// The above copyright notice and this permission notice shall be included
11034// in all copies or substantial portions of the Software.
11035//
11036// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11037// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11038// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11039// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11040// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11041// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11042// USE OR OTHER DEALINGS IN THE SOFTWARE.
11043
11044function EventEmitter() {
11045 this._events = this._events || {};
11046 this._maxListeners = this._maxListeners || undefined;
11047}
11048module.exports = EventEmitter;
11049
11050// Backwards-compat with node 0.10.x
11051EventEmitter.EventEmitter = EventEmitter;
11052
11053EventEmitter.prototype._events = undefined;
11054EventEmitter.prototype._maxListeners = undefined;
11055
11056// By default EventEmitters will print a warning if more than 10 listeners are
11057// added to it. This is a useful default which helps finding memory leaks.
11058EventEmitter.defaultMaxListeners = 10;
11059
11060// Obviously not all Emitters should be limited to 10. This function allows
11061// that to be increased. Set to zero for unlimited.
11062EventEmitter.prototype.setMaxListeners = function(n) {
11063 if (!isNumber(n) || n < 0 || isNaN(n))
11064 throw TypeError('n must be a positive number');
11065 this._maxListeners = n;
11066 return this;
11067};
11068
11069EventEmitter.prototype.emit = function(type) {
11070 var er, handler, len, args, i, listeners;
11071
11072 if (!this._events)
11073 this._events = {};
11074
11075 // If there is no 'error' event listener then throw.
11076 if (type === 'error') {
11077 if (!this._events.error ||
11078 (isObject(this._events.error) && !this._events.error.length)) {
11079 er = arguments[1];
11080 if (er instanceof Error) {
11081 throw er; // Unhandled 'error' event
11082 }
11083 throw TypeError('Uncaught, unspecified "error" event.');
11084 }
11085 }
11086
11087 handler = this._events[type];
11088
11089 if (isUndefined(handler))
11090 return false;
11091
11092 if (isFunction(handler)) {
11093 switch (arguments.length) {
11094 // fast cases
11095 case 1:
11096 handler.call(this);
11097 break;
11098 case 2:
11099 handler.call(this, arguments[1]);
11100 break;
11101 case 3:
11102 handler.call(this, arguments[1], arguments[2]);
11103 break;
11104 // slower
11105 default:
11106 len = arguments.length;
11107 args = new Array(len - 1);
11108 for (i = 1; i < len; i++)
11109 args[i - 1] = arguments[i];
11110 handler.apply(this, args);
11111 }
11112 } else if (isObject(handler)) {
11113 len = arguments.length;
11114 args = new Array(len - 1);
11115 for (i = 1; i < len; i++)
11116 args[i - 1] = arguments[i];
11117
11118 listeners = handler.slice();
11119 len = listeners.length;
11120 for (i = 0; i < len; i++)
11121 listeners[i].apply(this, args);
11122 }
11123
11124 return true;
11125};
11126
11127EventEmitter.prototype.addListener = function(type, listener) {
11128 var m;
11129
11130 if (!isFunction(listener))
11131 throw TypeError('listener must be a function');
11132
11133 if (!this._events)
11134 this._events = {};
11135
11136 // To avoid recursion in the case that type === "newListener"! Before
11137 // adding it to the listeners, first emit "newListener".
11138 if (this._events.newListener)
11139 this.emit('newListener', type,
11140 isFunction(listener.listener) ?
11141 listener.listener : listener);
11142
11143 if (!this._events[type])
11144 // Optimize the case of one listener. Don't need the extra array object.
11145 this._events[type] = listener;
11146 else if (isObject(this._events[type]))
11147 // If we've already got an array, just append.
11148 this._events[type].push(listener);
11149 else
11150 // Adding the second element, need to change to array.
11151 this._events[type] = [this._events[type], listener];
11152
11153 // Check for listener leak
11154 if (isObject(this._events[type]) && !this._events[type].warned) {
11155 var m;
11156 if (!isUndefined(this._maxListeners)) {
11157 m = this._maxListeners;
11158 } else {
11159 m = EventEmitter.defaultMaxListeners;
11160 }
11161
11162 if (m && m > 0 && this._events[type].length > m) {
11163 this._events[type].warned = true;
11164 console.error('(node) warning: possible EventEmitter memory ' +
11165 'leak detected. %d listeners added. ' +
11166 'Use emitter.setMaxListeners() to increase limit.',
11167 this._events[type].length);
11168 if (typeof console.trace === 'function') {
11169 // not supported in IE 10
11170 console.trace();
11171 }
11172 }
11173 }
11174
11175 return this;
11176};
11177
11178EventEmitter.prototype.on = EventEmitter.prototype.addListener;
11179
11180EventEmitter.prototype.once = function(type, listener) {
11181 if (!isFunction(listener))
11182 throw TypeError('listener must be a function');
11183
11184 var fired = false;
11185
11186 function g() {
11187 this.removeListener(type, g);
11188
11189 if (!fired) {
11190 fired = true;
11191 listener.apply(this, arguments);
11192 }
11193 }
11194
11195 g.listener = listener;
11196 this.on(type, g);
11197
11198 return this;
11199};
11200
11201// emits a 'removeListener' event iff the listener was removed
11202EventEmitter.prototype.removeListener = function(type, listener) {
11203 var list, position, length, i;
11204
11205 if (!isFunction(listener))
11206 throw TypeError('listener must be a function');
11207
11208 if (!this._events || !this._events[type])
11209 return this;
11210
11211 list = this._events[type];
11212 length = list.length;
11213 position = -1;
11214
11215 if (list === listener ||
11216 (isFunction(list.listener) && list.listener === listener)) {
11217 delete this._events[type];
11218 if (this._events.removeListener)
11219 this.emit('removeListener', type, listener);
11220
11221 } else if (isObject(list)) {
11222 for (i = length; i-- > 0;) {
11223 if (list[i] === listener ||
11224 (list[i].listener && list[i].listener === listener)) {
11225 position = i;
11226 break;
11227 }
11228 }
11229
11230 if (position < 0)
11231 return this;
11232
11233 if (list.length === 1) {
11234 list.length = 0;
11235 delete this._events[type];
11236 } else {
11237 list.splice(position, 1);
11238 }
11239
11240 if (this._events.removeListener)
11241 this.emit('removeListener', type, listener);
11242 }
11243
11244 return this;
11245};
11246
11247EventEmitter.prototype.removeAllListeners = function(type) {
11248 var key, listeners;
11249
11250 if (!this._events)
11251 return this;
11252
11253 // not listening for removeListener, no need to emit
11254 if (!this._events.removeListener) {
11255 if (arguments.length === 0)
11256 this._events = {};
11257 else if (this._events[type])
11258 delete this._events[type];
11259 return this;
11260 }
11261
11262 // emit removeListener for all listeners on all events
11263 if (arguments.length === 0) {
11264 for (key in this._events) {
11265 if (key === 'removeListener') continue;
11266 this.removeAllListeners(key);
11267 }
11268 this.removeAllListeners('removeListener');
11269 this._events = {};
11270 return this;
11271 }
11272
11273 listeners = this._events[type];
11274
11275 if (isFunction(listeners)) {
11276 this.removeListener(type, listeners);
11277 } else {
11278 // LIFO order
11279 while (listeners.length)
11280 this.removeListener(type, listeners[listeners.length - 1]);
11281 }
11282 delete this._events[type];
11283
11284 return this;
11285};
11286
11287EventEmitter.prototype.listeners = function(type) {
11288 var ret;
11289 if (!this._events || !this._events[type])
11290 ret = [];
11291 else if (isFunction(this._events[type]))
11292 ret = [this._events[type]];
11293 else
11294 ret = this._events[type].slice();
11295 return ret;
11296};
11297
11298EventEmitter.listenerCount = function(emitter, type) {
11299 var ret;
11300 if (!emitter._events || !emitter._events[type])
11301 ret = 0;
11302 else if (isFunction(emitter._events[type]))
11303 ret = 1;
11304 else
11305 ret = emitter._events[type].length;
11306 return ret;
11307};
11308
11309function isFunction(arg) {
11310 return typeof arg === 'function';
11311}
11312
11313function isNumber(arg) {
11314 return typeof arg === 'number';
11315}
11316
11317function isObject(arg) {
11318 return typeof arg === 'object' && arg !== null;
11319}
11320
11321function isUndefined(arg) {
11322 return arg === void 0;
11323}
11324
11325},{}],12:[function(require,module,exports){
11326if (typeof Object.create === 'function') {
11327 // implementation from standard node.js 'util' module
11328 module.exports = function inherits(ctor, superCtor) {
11329 ctor.super_ = superCtor
11330 ctor.prototype = Object.create(superCtor.prototype, {
11331 constructor: {
11332 value: ctor,
11333 enumerable: false,
11334 writable: true,
11335 configurable: true
11336 }
11337 });
11338 };
11339} else {
11340 // old school shim for old browsers
11341 module.exports = function inherits(ctor, superCtor) {
11342 ctor.super_ = superCtor
11343 var TempCtor = function () {}
11344 TempCtor.prototype = superCtor.prototype
11345 ctor.prototype = new TempCtor()
11346 ctor.prototype.constructor = ctor
11347 }
11348}
11349
11350},{}],13:[function(require,module,exports){
11351module.exports = Array.isArray || function (arr) {
11352 return Object.prototype.toString.call(arr) == '[object Array]';
11353};
11354
11355},{}],14:[function(require,module,exports){
11356// shim for using process in browser
11357
11358var process = module.exports = {};
11359var queue = [];
11360var draining = false;
11361var currentQueue;
11362var queueIndex = -1;
11363
11364function cleanUpNextTick() {
11365 draining = false;
11366 if (currentQueue.length) {
11367 queue = currentQueue.concat(queue);
11368 } else {
11369 queueIndex = -1;
11370 }
11371 if (queue.length) {
11372 drainQueue();
11373 }
11374}
11375
11376function drainQueue() {
11377 if (draining) {
11378 return;
11379 }
11380 var timeout = setTimeout(cleanUpNextTick);
11381 draining = true;
11382
11383 var len = queue.length;
11384 while(len) {
11385 currentQueue = queue;
11386 queue = [];
11387 while (++queueIndex < len) {
11388 currentQueue[queueIndex].run();
11389 }
11390 queueIndex = -1;
11391 len = queue.length;
11392 }
11393 currentQueue = null;
11394 draining = false;
11395 clearTimeout(timeout);
11396}
11397
11398process.nextTick = function (fun) {
11399 var args = new Array(arguments.length - 1);
11400 if (arguments.length > 1) {
11401 for (var i = 1; i < arguments.length; i++) {
11402 args[i - 1] = arguments[i];
11403 }
11404 }
11405 queue.push(new Item(fun, args));
11406 if (queue.length === 1 && !draining) {
11407 setTimeout(drainQueue, 0);
11408 }
11409};
11410
11411// v8 likes predictible objects
11412function Item(fun, array) {
11413 this.fun = fun;
11414 this.array = array;
11415}
11416Item.prototype.run = function () {
11417 this.fun.apply(null, this.array);
11418};
11419process.title = 'browser';
11420process.browser = true;
11421process.env = {};
11422process.argv = [];
11423process.version = ''; // empty string to avoid regexp issues
11424process.versions = {};
11425
11426function noop() {}
11427
11428process.on = noop;
11429process.addListener = noop;
11430process.once = noop;
11431process.off = noop;
11432process.removeListener = noop;
11433process.removeAllListeners = noop;
11434process.emit = noop;
11435
11436process.binding = function (name) {
11437 throw new Error('process.binding is not supported');
11438};
11439
11440// TODO(shtylman)
11441process.cwd = function () { return '/' };
11442process.chdir = function (dir) {
11443 throw new Error('process.chdir is not supported');
11444};
11445process.umask = function() { return 0; };
11446
11447},{}],15:[function(require,module,exports){
11448module.exports = require("./lib/_stream_duplex.js")
11449
11450},{"./lib/_stream_duplex.js":16}],16:[function(require,module,exports){
11451(function (process){
11452// Copyright Joyent, Inc. and other Node contributors.
11453//
11454// Permission is hereby granted, free of charge, to any person obtaining a
11455// copy of this software and associated documentation files (the
11456// "Software"), to deal in the Software without restriction, including
11457// without limitation the rights to use, copy, modify, merge, publish,
11458// distribute, sublicense, and/or sell copies of the Software, and to permit
11459// persons to whom the Software is furnished to do so, subject to the
11460// following conditions:
11461//
11462// The above copyright notice and this permission notice shall be included
11463// in all copies or substantial portions of the Software.
11464//
11465// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11466// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11467// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11468// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11469// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11470// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11471// USE OR OTHER DEALINGS IN THE SOFTWARE.
11472
11473// a duplex stream is just a stream that is both readable and writable.
11474// Since JS doesn't have multiple prototypal inheritance, this class
11475// prototypally inherits from Readable, and then parasitically from
11476// Writable.
11477
11478module.exports = Duplex;
11479
11480/*<replacement>*/
11481var objectKeys = Object.keys || function (obj) {
11482 var keys = [];
11483 for (var key in obj) keys.push(key);
11484 return keys;
11485}
11486/*</replacement>*/
11487
11488
11489/*<replacement>*/
11490var util = require('core-util-is');
11491util.inherits = require('inherits');
11492/*</replacement>*/
11493
11494var Readable = require('./_stream_readable');
11495var Writable = require('./_stream_writable');
11496
11497util.inherits(Duplex, Readable);
11498
11499forEach(objectKeys(Writable.prototype), function(method) {
11500 if (!Duplex.prototype[method])
11501 Duplex.prototype[method] = Writable.prototype[method];
11502});
11503
11504function Duplex(options) {
11505 if (!(this instanceof Duplex))
11506 return new Duplex(options);
11507
11508 Readable.call(this, options);
11509 Writable.call(this, options);
11510
11511 if (options && options.readable === false)
11512 this.readable = false;
11513
11514 if (options && options.writable === false)
11515 this.writable = false;
11516
11517 this.allowHalfOpen = true;
11518 if (options && options.allowHalfOpen === false)
11519 this.allowHalfOpen = false;
11520
11521 this.once('end', onend);
11522}
11523
11524// the no-half-open enforcer
11525function onend() {
11526 // if we allow half-open state, or if the writable side ended,
11527 // then we're ok.
11528 if (this.allowHalfOpen || this._writableState.ended)
11529 return;
11530
11531 // no more data can be written.
11532 // But allow more writes to happen in this tick.
11533 process.nextTick(this.end.bind(this));
11534}
11535
11536function forEach (xs, f) {
11537 for (var i = 0, l = xs.length; i < l; i++) {
11538 f(xs[i], i);
11539 }
11540}
11541
11542}).call(this,require('_process'))
11543},{"./_stream_readable":18,"./_stream_writable":20,"_process":14,"core-util-is":21,"inherits":12}],17:[function(require,module,exports){
11544// Copyright Joyent, Inc. and other Node contributors.
11545//
11546// Permission is hereby granted, free of charge, to any person obtaining a
11547// copy of this software and associated documentation files (the
11548// "Software"), to deal in the Software without restriction, including
11549// without limitation the rights to use, copy, modify, merge, publish,
11550// distribute, sublicense, and/or sell copies of the Software, and to permit
11551// persons to whom the Software is furnished to do so, subject to the
11552// following conditions:
11553//
11554// The above copyright notice and this permission notice shall be included
11555// in all copies or substantial portions of the Software.
11556//
11557// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11558// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11559// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11560// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11561// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11562// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11563// USE OR OTHER DEALINGS IN THE SOFTWARE.
11564
11565// a passthrough stream.
11566// basically just the most minimal sort of Transform stream.
11567// Every written chunk gets output as-is.
11568
11569module.exports = PassThrough;
11570
11571var Transform = require('./_stream_transform');
11572
11573/*<replacement>*/
11574var util = require('core-util-is');
11575util.inherits = require('inherits');
11576/*</replacement>*/
11577
11578util.inherits(PassThrough, Transform);
11579
11580function PassThrough(options) {
11581 if (!(this instanceof PassThrough))
11582 return new PassThrough(options);
11583
11584 Transform.call(this, options);
11585}
11586
11587PassThrough.prototype._transform = function(chunk, encoding, cb) {
11588 cb(null, chunk);
11589};
11590
11591},{"./_stream_transform":19,"core-util-is":21,"inherits":12}],18:[function(require,module,exports){
11592(function (process){
11593// Copyright Joyent, Inc. and other Node contributors.
11594//
11595// Permission is hereby granted, free of charge, to any person obtaining a
11596// copy of this software and associated documentation files (the
11597// "Software"), to deal in the Software without restriction, including
11598// without limitation the rights to use, copy, modify, merge, publish,
11599// distribute, sublicense, and/or sell copies of the Software, and to permit
11600// persons to whom the Software is furnished to do so, subject to the
11601// following conditions:
11602//
11603// The above copyright notice and this permission notice shall be included
11604// in all copies or substantial portions of the Software.
11605//
11606// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11607// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
11608// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
11609// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
11610// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
11611// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
11612// USE OR OTHER DEALINGS IN THE SOFTWARE.
11613
11614module.exports = Readable;
11615
11616/*<replacement>*/
11617var isArray = require('isarray');
11618/*</replacement>*/
11619
11620
11621/*<replacement>*/
11622var Buffer = require('buffer').Buffer;
11623/*</replacement>*/
11624
11625Readable.ReadableState = ReadableState;
11626
11627var EE = require('events').EventEmitter;
11628
11629/*<replacement>*/
11630if (!EE.listenerCount) EE.listenerCount = function(emitter, type) {
11631 return emitter.listeners(type).length;
11632};
11633/*</replacement>*/
11634
11635var Stream = require('stream');
11636
11637/*<replacement>*/
11638var util = require('core-util-is');
11639util.inherits = require('inherits');
11640/*</replacement>*/
11641
11642var StringDecoder;
11643
11644
11645/*<replacement>*/
11646var debug = require('util');
11647if (debug && debug.debuglog) {
11648 debug = debug.debuglog('stream');
11649} else {
11650 debug = function () {};
11651}
11652/*</replacement>*/
11653
11654
11655util.inherits(Readable, Stream);
11656
11657function ReadableState(options, stream) {
11658 var Duplex = require('./_stream_duplex');
11659
11660 options = options || {};
11661
11662 // the point at which it stops calling _read() to fill the buffer
11663 // Note: 0 is a valid value, means "don't call _read preemptively ever"
11664 var hwm = options.highWaterMark;
11665 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
11666 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
11667
11668 // cast to ints.
11669 this.highWaterMark = ~~this.highWaterMark;
11670
11671 this.buffer = [];
11672 this.length = 0;
11673 this.pipes = null;
11674 this.pipesCount = 0;
11675 this.flowing = null;
11676 this.ended = false;
11677 this.endEmitted = false;
11678 this.reading = false;
11679
11680 // a flag to be able to tell if the onwrite cb is called immediately,
11681 // or on a later tick. We set this to true at first, because any
11682 // actions that shouldn't happen until "later" should generally also
11683 // not happen before the first write call.
11684 this.sync = true;
11685
11686 // whenever we return null, then we set a flag to say
11687 // that we're awaiting a 'readable' event emission.
11688 this.needReadable = false;
11689 this.emittedReadable = false;
11690 this.readableListening = false;
11691
11692
11693 // object stream flag. Used to make read(n) ignore n and to
11694 // make all the buffer merging and length checks go away
11695 this.objectMode = !!options.objectMode;
11696
11697 if (stream instanceof Duplex)
11698 this.objectMode = this.objectMode || !!options.readableObjectMode;
11699
11700 // Crypto is kind of old and crusty. Historically, its default string
11701 // encoding is 'binary' so we have to make this configurable.
11702 // Everything else in the universe uses 'utf8', though.
11703 this.defaultEncoding = options.defaultEncoding || 'utf8';
11704
11705 // when piping, we only care about 'readable' events that happen
11706 // after read()ing all the bytes and not getting any pushback.
11707 this.ranOut = false;
11708
11709 // the number of writers that are awaiting a drain event in .pipe()s
11710 this.awaitDrain = 0;
11711
11712 // if true, a maybeReadMore has been scheduled
11713 this.readingMore = false;
11714
11715 this.decoder = null;
11716 this.encoding = null;
11717 if (options.encoding) {
11718 if (!StringDecoder)
11719 StringDecoder = require('string_decoder/').StringDecoder;
11720 this.decoder = new StringDecoder(options.encoding);
11721 this.encoding = options.encoding;
11722 }
11723}
11724
11725function Readable(options) {
11726 var Duplex = require('./_stream_duplex');
11727
11728 if (!(this instanceof Readable))
11729 return new Readable(options);
11730
11731 this._readableState = new ReadableState(options, this);
11732
11733 // legacy
11734 this.readable = true;
11735
11736 Stream.call(this);
11737}
11738
11739// Manually shove something into the read() buffer.
11740// This returns true if the highWaterMark has not been hit yet,
11741// similar to how Writable.write() returns true if you should
11742// write() some more.
11743Readable.prototype.push = function(chunk, encoding) {
11744 var state = this._readableState;
11745
11746 if (util.isString(chunk) && !state.objectMode) {
11747 encoding = encoding || state.defaultEncoding;
11748 if (encoding !== state.encoding) {
11749 chunk = new Buffer(chunk, encoding);
11750 encoding = '';
11751 }
11752 }
11753
11754 return readableAddChunk(this, state, chunk, encoding, false);
11755};
11756
11757// Unshift should *always* be something directly out of read()
11758Readable.prototype.unshift = function(chunk) {
11759 var state = this._readableState;
11760 return readableAddChunk(this, state, chunk, '', true);
11761};
11762
11763function readableAddChunk(stream, state, chunk, encoding, addToFront) {
11764 var er = chunkInvalid(state, chunk);
11765 if (er) {
11766 stream.emit('error', er);
11767 } else if (util.isNullOrUndefined(chunk)) {
11768 state.reading = false;
11769 if (!state.ended)
11770 onEofChunk(stream, state);
11771 } else if (state.objectMode || chunk && chunk.length > 0) {
11772 if (state.ended && !addToFront) {
11773 var e = new Error('stream.push() after EOF');
11774 stream.emit('error', e);
11775 } else if (state.endEmitted && addToFront) {
11776 var e = new Error('stream.unshift() after end event');
11777 stream.emit('error', e);
11778 } else {
11779 if (state.decoder && !addToFront && !encoding)
11780 chunk = state.decoder.write(chunk);
11781
11782 if (!addToFront)
11783 state.reading = false;
11784
11785 // if we want the data now, just emit it.
11786 if (state.flowing && state.length === 0 && !state.sync) {
11787 stream.emit('data', chunk);
11788 stream.read(0);
11789 } else {
11790 // update the buffer info.
11791 state.length += state.objectMode ? 1 : chunk.length;
11792 if (addToFront)
11793 state.buffer.unshift(chunk);
11794 else
11795 state.buffer.push(chunk);
11796
11797 if (state.needReadable)
11798 emitReadable(stream);
11799 }
11800
11801 maybeReadMore(stream, state);
11802 }
11803 } else if (!addToFront) {
11804 state.reading = false;
11805 }
11806
11807 return needMoreData(state);
11808}
11809
11810
11811
11812// if it's past the high water mark, we can push in some more.
11813// Also, if we have no data yet, we can stand some
11814// more bytes. This is to work around cases where hwm=0,
11815// such as the repl. Also, if the push() triggered a
11816// readable event, and the user called read(largeNumber) such that
11817// needReadable was set, then we ought to push more, so that another
11818// 'readable' event will be triggered.
11819function needMoreData(state) {
11820 return !state.ended &&
11821 (state.needReadable ||
11822 state.length < state.highWaterMark ||
11823 state.length === 0);
11824}
11825
11826// backwards compatibility.
11827Readable.prototype.setEncoding = function(enc) {
11828 if (!StringDecoder)
11829 StringDecoder = require('string_decoder/').StringDecoder;
11830 this._readableState.decoder = new StringDecoder(enc);
11831 this._readableState.encoding = enc;
11832 return this;
11833};
11834
11835// Don't raise the hwm > 128MB
11836var MAX_HWM = 0x800000;
11837function roundUpToNextPowerOf2(n) {
11838 if (n >= MAX_HWM) {
11839 n = MAX_HWM;
11840 } else {
11841 // Get the next highest power of 2
11842 n--;
11843 for (var p = 1; p < 32; p <<= 1) n |= n >> p;
11844 n++;
11845 }
11846 return n;
11847}
11848
11849function howMuchToRead(n, state) {
11850 if (state.length === 0 && state.ended)
11851 return 0;
11852
11853 if (state.objectMode)
11854 return n === 0 ? 0 : 1;
11855
11856 if (isNaN(n) || util.isNull(n)) {
11857 // only flow one buffer at a time
11858 if (state.flowing && state.buffer.length)
11859 return state.buffer[0].length;
11860 else
11861 return state.length;
11862 }
11863
11864 if (n <= 0)
11865 return 0;
11866
11867 // If we're asking for more than the target buffer level,
11868 // then raise the water mark. Bump up to the next highest
11869 // power of 2, to prevent increasing it excessively in tiny
11870 // amounts.
11871 if (n > state.highWaterMark)
11872 state.highWaterMark = roundUpToNextPowerOf2(n);
11873
11874 // don't have that much. return null, unless we've ended.
11875 if (n > state.length) {
11876 if (!state.ended) {
11877 state.needReadable = true;
11878 return 0;
11879 } else
11880 return state.length;
11881 }
11882
11883 return n;
11884}
11885
11886// you can override either this method, or the async _read(n) below.
11887Readable.prototype.read = function(n) {
11888 debug('read', n);
11889 var state = this._readableState;
11890 var nOrig = n;
11891
11892 if (!util.isNumber(n) || n > 0)
11893 state.emittedReadable = false;
11894
11895 // if we're doing read(0) to trigger a readable event, but we
11896 // already have a bunch of data in the buffer, then just trigger
11897 // the 'readable' event and move on.
11898 if (n === 0 &&
11899 state.needReadable &&
11900 (state.length >= state.highWaterMark || state.ended)) {
11901 debug('read: emitReadable', state.length, state.ended);
11902 if (state.length === 0 && state.ended)
11903 endReadable(this);
11904 else
11905 emitReadable(this);
11906 return null;
11907 }
11908
11909 n = howMuchToRead(n, state);
11910
11911 // if we've ended, and we're now clear, then finish it up.
11912 if (n === 0 && state.ended) {
11913 if (state.length === 0)
11914 endReadable(this);
11915 return null;
11916 }
11917
11918 // All the actual chunk generation logic needs to be
11919 // *below* the call to _read. The reason is that in certain
11920 // synthetic stream cases, such as passthrough streams, _read
11921 // may be a completely synchronous operation which may change
11922 // the state of the read buffer, providing enough data when
11923 // before there was *not* enough.
11924 //
11925 // So, the steps are:
11926 // 1. Figure out what the state of things will be after we do
11927 // a read from the buffer.
11928 //
11929 // 2. If that resulting state will trigger a _read, then call _read.
11930 // Note that this may be asynchronous, or synchronous. Yes, it is
11931 // deeply ugly to write APIs this way, but that still doesn't mean
11932 // that the Readable class should behave improperly, as streams are
11933 // designed to be sync/async agnostic.
11934 // Take note if the _read call is sync or async (ie, if the read call
11935 // has returned yet), so that we know whether or not it's safe to emit
11936 // 'readable' etc.
11937 //
11938 // 3. Actually pull the requested chunks out of the buffer and return.
11939
11940 // if we need a readable event, then we need to do some reading.
11941 var doRead = state.needReadable;
11942 debug('need readable', doRead);
11943
11944 // if we currently have less than the highWaterMark, then also read some
11945 if (state.length === 0 || state.length - n < state.highWaterMark) {
11946 doRead = true;
11947 debug('length less than watermark', doRead);
11948 }
11949
11950 // however, if we've ended, then there's no point, and if we're already
11951 // reading, then it's unnecessary.
11952 if (state.ended || state.reading) {
11953 doRead = false;
11954 debug('reading or ended', doRead);
11955 }
11956
11957 if (doRead) {
11958 debug('do read');
11959 state.reading = true;
11960 state.sync = true;
11961 // if the length is currently zero, then we *need* a readable event.
11962 if (state.length === 0)
11963 state.needReadable = true;
11964 // call internal read method
11965 this._read(state.highWaterMark);
11966 state.sync = false;
11967 }
11968
11969 // If _read pushed data synchronously, then `reading` will be false,
11970 // and we need to re-evaluate how much data we can return to the user.
11971 if (doRead && !state.reading)
11972 n = howMuchToRead(nOrig, state);
11973
11974 var ret;
11975 if (n > 0)
11976 ret = fromList(n, state);
11977 else
11978 ret = null;
11979
11980 if (util.isNull(ret)) {
11981 state.needReadable = true;
11982 n = 0;
11983 }
11984
11985 state.length -= n;
11986
11987 // If we have nothing in the buffer, then we want to know
11988 // as soon as we *do* get something into the buffer.
11989 if (state.length === 0 && !state.ended)
11990 state.needReadable = true;
11991
11992 // If we tried to read() past the EOF, then emit end on the next tick.
11993 if (nOrig !== n && state.ended && state.length === 0)
11994 endReadable(this);
11995
11996 if (!util.isNull(ret))
11997 this.emit('data', ret);
11998
11999 return ret;
12000};
12001
12002function chunkInvalid(state, chunk) {
12003 var er = null;
12004 if (!util.isBuffer(chunk) &&
12005 !util.isString(chunk) &&
12006 !util.isNullOrUndefined(chunk) &&
12007 !state.objectMode) {
12008 er = new TypeError('Invalid non-string/buffer chunk');
12009 }
12010 return er;
12011}
12012
12013
12014function onEofChunk(stream, state) {
12015 if (state.decoder && !state.ended) {
12016 var chunk = state.decoder.end();
12017 if (chunk && chunk.length) {
12018 state.buffer.push(chunk);
12019 state.length += state.objectMode ? 1 : chunk.length;
12020 }
12021 }
12022 state.ended = true;
12023
12024 // emit 'readable' now to make sure it gets picked up.
12025 emitReadable(stream);
12026}
12027
12028// Don't emit readable right away in sync mode, because this can trigger
12029// another read() call => stack overflow. This way, it might trigger
12030// a nextTick recursion warning, but that's not so bad.
12031function emitReadable(stream) {
12032 var state = stream._readableState;
12033 state.needReadable = false;
12034 if (!state.emittedReadable) {
12035 debug('emitReadable', state.flowing);
12036 state.emittedReadable = true;
12037 if (state.sync)
12038 process.nextTick(function() {
12039 emitReadable_(stream);
12040 });
12041 else
12042 emitReadable_(stream);
12043 }
12044}
12045
12046function emitReadable_(stream) {
12047 debug('emit readable');
12048 stream.emit('readable');
12049 flow(stream);
12050}
12051
12052
12053// at this point, the user has presumably seen the 'readable' event,
12054// and called read() to consume some data. that may have triggered
12055// in turn another _read(n) call, in which case reading = true if
12056// it's in progress.
12057// However, if we're not ended, or reading, and the length < hwm,
12058// then go ahead and try to read some more preemptively.
12059function maybeReadMore(stream, state) {
12060 if (!state.readingMore) {
12061 state.readingMore = true;
12062 process.nextTick(function() {
12063 maybeReadMore_(stream, state);
12064 });
12065 }
12066}
12067
12068function maybeReadMore_(stream, state) {
12069 var len = state.length;
12070 while (!state.reading && !state.flowing && !state.ended &&
12071 state.length < state.highWaterMark) {
12072 debug('maybeReadMore read 0');
12073 stream.read(0);
12074 if (len === state.length)
12075 // didn't get any data, stop spinning.
12076 break;
12077 else
12078 len = state.length;
12079 }
12080 state.readingMore = false;
12081}
12082
12083// abstract method. to be overridden in specific implementation classes.
12084// call cb(er, data) where data is <= n in length.
12085// for virtual (non-string, non-buffer) streams, "length" is somewhat
12086// arbitrary, and perhaps not very meaningful.
12087Readable.prototype._read = function(n) {
12088 this.emit('error', new Error('not implemented'));
12089};
12090
12091Readable.prototype.pipe = function(dest, pipeOpts) {
12092 var src = this;
12093 var state = this._readableState;
12094
12095 switch (state.pipesCount) {
12096 case 0:
12097 state.pipes = dest;
12098 break;
12099 case 1:
12100 state.pipes = [state.pipes, dest];
12101 break;
12102 default:
12103 state.pipes.push(dest);
12104 break;
12105 }
12106 state.pipesCount += 1;
12107 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
12108
12109 var doEnd = (!pipeOpts || pipeOpts.end !== false) &&
12110 dest !== process.stdout &&
12111 dest !== process.stderr;
12112
12113 var endFn = doEnd ? onend : cleanup;
12114 if (state.endEmitted)
12115 process.nextTick(endFn);
12116 else
12117 src.once('end', endFn);
12118
12119 dest.on('unpipe', onunpipe);
12120 function onunpipe(readable) {
12121 debug('onunpipe');
12122 if (readable === src) {
12123 cleanup();
12124 }
12125 }
12126
12127 function onend() {
12128 debug('onend');
12129 dest.end();
12130 }
12131
12132 // when the dest drains, it reduces the awaitDrain counter
12133 // on the source. This would be more elegant with a .once()
12134 // handler in flow(), but adding and removing repeatedly is
12135 // too slow.
12136 var ondrain = pipeOnDrain(src);
12137 dest.on('drain', ondrain);
12138
12139 function cleanup() {
12140 debug('cleanup');
12141 // cleanup event handlers once the pipe is broken
12142 dest.removeListener('close', onclose);
12143 dest.removeListener('finish', onfinish);
12144 dest.removeListener('drain', ondrain);
12145 dest.removeListener('error', onerror);
12146 dest.removeListener('unpipe', onunpipe);
12147 src.removeListener('end', onend);
12148 src.removeListener('end', cleanup);
12149 src.removeListener('data', ondata);
12150
12151 // if the reader is waiting for a drain event from this
12152 // specific writer, then it would cause it to never start
12153 // flowing again.
12154 // So, if this is awaiting a drain, then we just call it now.
12155 // If we don't know, then assume that we are waiting for one.
12156 if (state.awaitDrain &&
12157 (!dest._writableState || dest._writableState.needDrain))
12158 ondrain();
12159 }
12160
12161 src.on('data', ondata);
12162 function ondata(chunk) {
12163 debug('ondata');
12164 var ret = dest.write(chunk);
12165 if (false === ret) {
12166 debug('false write response, pause',
12167 src._readableState.awaitDrain);
12168 src._readableState.awaitDrain++;
12169 src.pause();
12170 }
12171 }
12172
12173 // if the dest has an error, then stop piping into it.
12174 // however, don't suppress the throwing behavior for this.
12175 function onerror(er) {
12176 debug('onerror', er);
12177 unpipe();
12178 dest.removeListener('error', onerror);
12179 if (EE.listenerCount(dest, 'error') === 0)
12180 dest.emit('error', er);
12181 }
12182 // This is a brutally ugly hack to make sure that our error handler
12183 // is attached before any userland ones. NEVER DO THIS.
12184 if (!dest._events || !dest._events.error)
12185 dest.on('error', onerror);
12186 else if (isArray(dest._events.error))
12187 dest._events.error.unshift(onerror);
12188 else
12189 dest._events.error = [onerror, dest._events.error];
12190
12191
12192
12193 // Both close and finish should trigger unpipe, but only once.
12194 function onclose() {
12195 dest.removeListener('finish', onfinish);
12196 unpipe();
12197 }
12198 dest.once('close', onclose);
12199 function onfinish() {
12200 debug('onfinish');
12201 dest.removeListener('close', onclose);
12202 unpipe();
12203 }
12204 dest.once('finish', onfinish);
12205
12206 function unpipe() {
12207 debug('unpipe');
12208 src.unpipe(dest);
12209 }
12210
12211 // tell the dest that it's being piped to
12212 dest.emit('pipe', src);
12213
12214 // start the flow if it hasn't been started already.
12215 if (!state.flowing) {
12216 debug('pipe resume');
12217 src.resume();
12218 }
12219
12220 return dest;
12221};
12222
12223function pipeOnDrain(src) {
12224 return function() {
12225 var state = src._readableState;
12226 debug('pipeOnDrain', state.awaitDrain);
12227 if (state.awaitDrain)
12228 state.awaitDrain--;
12229 if (state.awaitDrain === 0 && EE.listenerCount(src, 'data')) {
12230 state.flowing = true;
12231 flow(src);
12232 }
12233 };
12234}
12235
12236
12237Readable.prototype.unpipe = function(dest) {
12238 var state = this._readableState;
12239
12240 // if we're not piping anywhere, then do nothing.
12241 if (state.pipesCount === 0)
12242 return this;
12243
12244 // just one destination. most common case.
12245 if (state.pipesCount === 1) {
12246 // passed in one, but it's not the right one.
12247 if (dest && dest !== state.pipes)
12248 return this;
12249
12250 if (!dest)
12251 dest = state.pipes;
12252
12253 // got a match.
12254 state.pipes = null;
12255 state.pipesCount = 0;
12256 state.flowing = false;
12257 if (dest)
12258 dest.emit('unpipe', this);
12259 return this;
12260 }
12261
12262 // slow case. multiple pipe destinations.
12263
12264 if (!dest) {
12265 // remove all.
12266 var dests = state.pipes;
12267 var len = state.pipesCount;
12268 state.pipes = null;
12269 state.pipesCount = 0;
12270 state.flowing = false;
12271
12272 for (var i = 0; i < len; i++)
12273 dests[i].emit('unpipe', this);
12274 return this;
12275 }
12276
12277 // try to find the right one.
12278 var i = indexOf(state.pipes, dest);
12279 if (i === -1)
12280 return this;
12281
12282 state.pipes.splice(i, 1);
12283 state.pipesCount -= 1;
12284 if (state.pipesCount === 1)
12285 state.pipes = state.pipes[0];
12286
12287 dest.emit('unpipe', this);
12288
12289 return this;
12290};
12291
12292// set up data events if they are asked for
12293// Ensure readable listeners eventually get something
12294Readable.prototype.on = function(ev, fn) {
12295 var res = Stream.prototype.on.call(this, ev, fn);
12296
12297 // If listening to data, and it has not explicitly been paused,
12298 // then call resume to start the flow of data on the next tick.
12299 if (ev === 'data' && false !== this._readableState.flowing) {
12300 this.resume();
12301 }
12302
12303 if (ev === 'readable' && this.readable) {
12304 var state = this._readableState;
12305 if (!state.readableListening) {
12306 state.readableListening = true;
12307 state.emittedReadable = false;
12308 state.needReadable = true;
12309 if (!state.reading) {
12310 var self = this;
12311 process.nextTick(function() {
12312 debug('readable nexttick read 0');
12313 self.read(0);
12314 });
12315 } else if (state.length) {
12316 emitReadable(this, state);
12317 }
12318 }
12319 }
12320
12321 return res;
12322};
12323Readable.prototype.addListener = Readable.prototype.on;
12324
12325// pause() and resume() are remnants of the legacy readable stream API
12326// If the user uses them, then switch into old mode.
12327Readable.prototype.resume = function() {
12328 var state = this._readableState;
12329 if (!state.flowing) {
12330 debug('resume');
12331 state.flowing = true;
12332 if (!state.reading) {
12333 debug('resume read 0');
12334 this.read(0);
12335 }
12336 resume(this, state);
12337 }
12338 return this;
12339};
12340
12341function resume(stream, state) {
12342 if (!state.resumeScheduled) {
12343 state.resumeScheduled = true;
12344 process.nextTick(function() {
12345 resume_(stream, state);
12346 });
12347 }
12348}
12349
12350function resume_(stream, state) {
12351 state.resumeScheduled = false;
12352 stream.emit('resume');
12353 flow(stream);
12354 if (state.flowing && !state.reading)
12355 stream.read(0);
12356}
12357
12358Readable.prototype.pause = function() {
12359 debug('call pause flowing=%j', this._readableState.flowing);
12360 if (false !== this._readableState.flowing) {
12361 debug('pause');
12362 this._readableState.flowing = false;
12363 this.emit('pause');
12364 }
12365 return this;
12366};
12367
12368function flow(stream) {
12369 var state = stream._readableState;
12370 debug('flow', state.flowing);
12371 if (state.flowing) {
12372 do {
12373 var chunk = stream.read();
12374 } while (null !== chunk && state.flowing);
12375 }
12376}
12377
12378// wrap an old-style stream as the async data source.
12379// This is *not* part of the readable stream interface.
12380// It is an ugly unfortunate mess of history.
12381Readable.prototype.wrap = function(stream) {
12382 var state = this._readableState;
12383 var paused = false;
12384
12385 var self = this;
12386 stream.on('end', function() {
12387 debug('wrapped end');
12388 if (state.decoder && !state.ended) {
12389 var chunk = state.decoder.end();
12390 if (chunk && chunk.length)
12391 self.push(chunk);
12392 }
12393
12394 self.push(null);
12395 });
12396
12397 stream.on('data', function(chunk) {
12398 debug('wrapped data');
12399 if (state.decoder)
12400 chunk = state.decoder.write(chunk);
12401 if (!chunk || !state.objectMode && !chunk.length)
12402 return;
12403
12404 var ret = self.push(chunk);
12405 if (!ret) {
12406 paused = true;
12407 stream.pause();
12408 }
12409 });
12410
12411 // proxy all the other methods.
12412 // important when wrapping filters and duplexes.
12413 for (var i in stream) {
12414 if (util.isFunction(stream[i]) && util.isUndefined(this[i])) {
12415 this[i] = function(method) { return function() {
12416 return stream[method].apply(stream, arguments);
12417 }}(i);
12418 }
12419 }
12420
12421 // proxy certain important events.
12422 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
12423 forEach(events, function(ev) {
12424 stream.on(ev, self.emit.bind(self, ev));
12425 });
12426
12427 // when we try to consume some more bytes, simply unpause the
12428 // underlying stream.
12429 self._read = function(n) {
12430 debug('wrapped _read', n);
12431 if (paused) {
12432 paused = false;
12433 stream.resume();
12434 }
12435 };
12436
12437 return self;
12438};
12439
12440
12441
12442// exposed for testing purposes only.
12443Readable._fromList = fromList;
12444
12445// Pluck off n bytes from an array of buffers.
12446// Length is the combined lengths of all the buffers in the list.
12447function fromList(n, state) {
12448 var list = state.buffer;
12449 var length = state.length;
12450 var stringMode = !!state.decoder;
12451 var objectMode = !!state.objectMode;
12452 var ret;
12453
12454 // nothing in the list, definitely empty.
12455 if (list.length === 0)
12456 return null;
12457
12458 if (length === 0)
12459 ret = null;
12460 else if (objectMode)
12461 ret = list.shift();
12462 else if (!n || n >= length) {
12463 // read it all, truncate the array.
12464 if (stringMode)
12465 ret = list.join('');
12466 else
12467 ret = Buffer.concat(list, length);
12468 list.length = 0;
12469 } else {
12470 // read just some of it.
12471 if (n < list[0].length) {
12472 // just take a part of the first list item.
12473 // slice is the same for buffers and strings.
12474 var buf = list[0];
12475 ret = buf.slice(0, n);
12476 list[0] = buf.slice(n);
12477 } else if (n === list[0].length) {
12478 // first list is a perfect match
12479 ret = list.shift();
12480 } else {
12481 // complex case.
12482 // we have enough to cover it, but it spans past the first buffer.
12483 if (stringMode)
12484 ret = '';
12485 else
12486 ret = new Buffer(n);
12487
12488 var c = 0;
12489 for (var i = 0, l = list.length; i < l && c < n; i++) {
12490 var buf = list[0];
12491 var cpy = Math.min(n - c, buf.length);
12492
12493 if (stringMode)
12494 ret += buf.slice(0, cpy);
12495 else
12496 buf.copy(ret, c, 0, cpy);
12497
12498 if (cpy < buf.length)
12499 list[0] = buf.slice(cpy);
12500 else
12501 list.shift();
12502
12503 c += cpy;
12504 }
12505 }
12506 }
12507
12508 return ret;
12509}
12510
12511function endReadable(stream) {
12512 var state = stream._readableState;
12513
12514 // If we get here before consuming all the bytes, then that is a
12515 // bug in node. Should never happen.
12516 if (state.length > 0)
12517 throw new Error('endReadable called on non-empty stream');
12518
12519 if (!state.endEmitted) {
12520 state.ended = true;
12521 process.nextTick(function() {
12522 // Check that we didn't get one last unshift.
12523 if (!state.endEmitted && state.length === 0) {
12524 state.endEmitted = true;
12525 stream.readable = false;
12526 stream.emit('end');
12527 }
12528 });
12529 }
12530}
12531
12532function forEach (xs, f) {
12533 for (var i = 0, l = xs.length; i < l; i++) {
12534 f(xs[i], i);
12535 }
12536}
12537
12538function indexOf (xs, x) {
12539 for (var i = 0, l = xs.length; i < l; i++) {
12540 if (xs[i] === x) return i;
12541 }
12542 return -1;
12543}
12544
12545}).call(this,require('_process'))
12546},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"events":11,"inherits":12,"isarray":13,"stream":26,"string_decoder/":27,"util":6}],19:[function(require,module,exports){
12547// Copyright Joyent, Inc. and other Node contributors.
12548//
12549// Permission is hereby granted, free of charge, to any person obtaining a
12550// copy of this software and associated documentation files (the
12551// "Software"), to deal in the Software without restriction, including
12552// without limitation the rights to use, copy, modify, merge, publish,
12553// distribute, sublicense, and/or sell copies of the Software, and to permit
12554// persons to whom the Software is furnished to do so, subject to the
12555// following conditions:
12556//
12557// The above copyright notice and this permission notice shall be included
12558// in all copies or substantial portions of the Software.
12559//
12560// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12561// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12562// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12563// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12564// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12565// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12566// USE OR OTHER DEALINGS IN THE SOFTWARE.
12567
12568
12569// a transform stream is a readable/writable stream where you do
12570// something with the data. Sometimes it's called a "filter",
12571// but that's not a great name for it, since that implies a thing where
12572// some bits pass through, and others are simply ignored. (That would
12573// be a valid example of a transform, of course.)
12574//
12575// While the output is causally related to the input, it's not a
12576// necessarily symmetric or synchronous transformation. For example,
12577// a zlib stream might take multiple plain-text writes(), and then
12578// emit a single compressed chunk some time in the future.
12579//
12580// Here's how this works:
12581//
12582// The Transform stream has all the aspects of the readable and writable
12583// stream classes. When you write(chunk), that calls _write(chunk,cb)
12584// internally, and returns false if there's a lot of pending writes
12585// buffered up. When you call read(), that calls _read(n) until
12586// there's enough pending readable data buffered up.
12587//
12588// In a transform stream, the written data is placed in a buffer. When
12589// _read(n) is called, it transforms the queued up data, calling the
12590// buffered _write cb's as it consumes chunks. If consuming a single
12591// written chunk would result in multiple output chunks, then the first
12592// outputted bit calls the readcb, and subsequent chunks just go into
12593// the read buffer, and will cause it to emit 'readable' if necessary.
12594//
12595// This way, back-pressure is actually determined by the reading side,
12596// since _read has to be called to start processing a new chunk. However,
12597// a pathological inflate type of transform can cause excessive buffering
12598// here. For example, imagine a stream where every byte of input is
12599// interpreted as an integer from 0-255, and then results in that many
12600// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
12601// 1kb of data being output. In this case, you could write a very small
12602// amount of input, and end up with a very large amount of output. In
12603// such a pathological inflating mechanism, there'd be no way to tell
12604// the system to stop doing the transform. A single 4MB write could
12605// cause the system to run out of memory.
12606//
12607// However, even in such a pathological case, only a single written chunk
12608// would be consumed, and then the rest would wait (un-transformed) until
12609// the results of the previous transformed chunk were consumed.
12610
12611module.exports = Transform;
12612
12613var Duplex = require('./_stream_duplex');
12614
12615/*<replacement>*/
12616var util = require('core-util-is');
12617util.inherits = require('inherits');
12618/*</replacement>*/
12619
12620util.inherits(Transform, Duplex);
12621
12622
12623function TransformState(options, stream) {
12624 this.afterTransform = function(er, data) {
12625 return afterTransform(stream, er, data);
12626 };
12627
12628 this.needTransform = false;
12629 this.transforming = false;
12630 this.writecb = null;
12631 this.writechunk = null;
12632}
12633
12634function afterTransform(stream, er, data) {
12635 var ts = stream._transformState;
12636 ts.transforming = false;
12637
12638 var cb = ts.writecb;
12639
12640 if (!cb)
12641 return stream.emit('error', new Error('no writecb in Transform class'));
12642
12643 ts.writechunk = null;
12644 ts.writecb = null;
12645
12646 if (!util.isNullOrUndefined(data))
12647 stream.push(data);
12648
12649 if (cb)
12650 cb(er);
12651
12652 var rs = stream._readableState;
12653 rs.reading = false;
12654 if (rs.needReadable || rs.length < rs.highWaterMark) {
12655 stream._read(rs.highWaterMark);
12656 }
12657}
12658
12659
12660function Transform(options) {
12661 if (!(this instanceof Transform))
12662 return new Transform(options);
12663
12664 Duplex.call(this, options);
12665
12666 this._transformState = new TransformState(options, this);
12667
12668 // when the writable side finishes, then flush out anything remaining.
12669 var stream = this;
12670
12671 // start out asking for a readable event once data is transformed.
12672 this._readableState.needReadable = true;
12673
12674 // we have implemented the _read method, and done the other things
12675 // that Readable wants before the first _read call, so unset the
12676 // sync guard flag.
12677 this._readableState.sync = false;
12678
12679 this.once('prefinish', function() {
12680 if (util.isFunction(this._flush))
12681 this._flush(function(er) {
12682 done(stream, er);
12683 });
12684 else
12685 done(stream);
12686 });
12687}
12688
12689Transform.prototype.push = function(chunk, encoding) {
12690 this._transformState.needTransform = false;
12691 return Duplex.prototype.push.call(this, chunk, encoding);
12692};
12693
12694// This is the part where you do stuff!
12695// override this function in implementation classes.
12696// 'chunk' is an input chunk.
12697//
12698// Call `push(newChunk)` to pass along transformed output
12699// to the readable side. You may call 'push' zero or more times.
12700//
12701// Call `cb(err)` when you are done with this chunk. If you pass
12702// an error, then that'll put the hurt on the whole operation. If you
12703// never call cb(), then you'll never get another chunk.
12704Transform.prototype._transform = function(chunk, encoding, cb) {
12705 throw new Error('not implemented');
12706};
12707
12708Transform.prototype._write = function(chunk, encoding, cb) {
12709 var ts = this._transformState;
12710 ts.writecb = cb;
12711 ts.writechunk = chunk;
12712 ts.writeencoding = encoding;
12713 if (!ts.transforming) {
12714 var rs = this._readableState;
12715 if (ts.needTransform ||
12716 rs.needReadable ||
12717 rs.length < rs.highWaterMark)
12718 this._read(rs.highWaterMark);
12719 }
12720};
12721
12722// Doesn't matter what the args are here.
12723// _transform does all the work.
12724// That we got here means that the readable side wants more data.
12725Transform.prototype._read = function(n) {
12726 var ts = this._transformState;
12727
12728 if (!util.isNull(ts.writechunk) && ts.writecb && !ts.transforming) {
12729 ts.transforming = true;
12730 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
12731 } else {
12732 // mark that we need a transform, so that any data that comes in
12733 // will get processed, now that we've asked for it.
12734 ts.needTransform = true;
12735 }
12736};
12737
12738
12739function done(stream, er) {
12740 if (er)
12741 return stream.emit('error', er);
12742
12743 // if there's nothing in the write buffer, then that means
12744 // that nothing more will ever be provided
12745 var ws = stream._writableState;
12746 var ts = stream._transformState;
12747
12748 if (ws.length)
12749 throw new Error('calling transform done when ws.length != 0');
12750
12751 if (ts.transforming)
12752 throw new Error('calling transform done when still transforming');
12753
12754 return stream.push(null);
12755}
12756
12757},{"./_stream_duplex":16,"core-util-is":21,"inherits":12}],20:[function(require,module,exports){
12758(function (process){
12759// Copyright Joyent, Inc. and other Node contributors.
12760//
12761// Permission is hereby granted, free of charge, to any person obtaining a
12762// copy of this software and associated documentation files (the
12763// "Software"), to deal in the Software without restriction, including
12764// without limitation the rights to use, copy, modify, merge, publish,
12765// distribute, sublicense, and/or sell copies of the Software, and to permit
12766// persons to whom the Software is furnished to do so, subject to the
12767// following conditions:
12768//
12769// The above copyright notice and this permission notice shall be included
12770// in all copies or substantial portions of the Software.
12771//
12772// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12773// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
12774// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
12775// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
12776// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
12777// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
12778// USE OR OTHER DEALINGS IN THE SOFTWARE.
12779
12780// A bit simpler than readable streams.
12781// Implement an async ._write(chunk, cb), and it'll handle all
12782// the drain event emission and buffering.
12783
12784module.exports = Writable;
12785
12786/*<replacement>*/
12787var Buffer = require('buffer').Buffer;
12788/*</replacement>*/
12789
12790Writable.WritableState = WritableState;
12791
12792
12793/*<replacement>*/
12794var util = require('core-util-is');
12795util.inherits = require('inherits');
12796/*</replacement>*/
12797
12798var Stream = require('stream');
12799
12800util.inherits(Writable, Stream);
12801
12802function WriteReq(chunk, encoding, cb) {
12803 this.chunk = chunk;
12804 this.encoding = encoding;
12805 this.callback = cb;
12806}
12807
12808function WritableState(options, stream) {
12809 var Duplex = require('./_stream_duplex');
12810
12811 options = options || {};
12812
12813 // the point at which write() starts returning false
12814 // Note: 0 is a valid value, means that we always return false if
12815 // the entire buffer is not flushed immediately on write()
12816 var hwm = options.highWaterMark;
12817 var defaultHwm = options.objectMode ? 16 : 16 * 1024;
12818 this.highWaterMark = (hwm || hwm === 0) ? hwm : defaultHwm;
12819
12820 // object stream flag to indicate whether or not this stream
12821 // contains buffers or objects.
12822 this.objectMode = !!options.objectMode;
12823
12824 if (stream instanceof Duplex)
12825 this.objectMode = this.objectMode || !!options.writableObjectMode;
12826
12827 // cast to ints.
12828 this.highWaterMark = ~~this.highWaterMark;
12829
12830 this.needDrain = false;
12831 // at the start of calling end()
12832 this.ending = false;
12833 // when end() has been called, and returned
12834 this.ended = false;
12835 // when 'finish' is emitted
12836 this.finished = false;
12837
12838 // should we decode strings into buffers before passing to _write?
12839 // this is here so that some node-core streams can optimize string
12840 // handling at a lower level.
12841 var noDecode = options.decodeStrings === false;
12842 this.decodeStrings = !noDecode;
12843
12844 // Crypto is kind of old and crusty. Historically, its default string
12845 // encoding is 'binary' so we have to make this configurable.
12846 // Everything else in the universe uses 'utf8', though.
12847 this.defaultEncoding = options.defaultEncoding || 'utf8';
12848
12849 // not an actual buffer we keep track of, but a measurement
12850 // of how much we're waiting to get pushed to some underlying
12851 // socket or file.
12852 this.length = 0;
12853
12854 // a flag to see when we're in the middle of a write.
12855 this.writing = false;
12856
12857 // when true all writes will be buffered until .uncork() call
12858 this.corked = 0;
12859
12860 // a flag to be able to tell if the onwrite cb is called immediately,
12861 // or on a later tick. We set this to true at first, because any
12862 // actions that shouldn't happen until "later" should generally also
12863 // not happen before the first write call.
12864 this.sync = true;
12865
12866 // a flag to know if we're processing previously buffered items, which
12867 // may call the _write() callback in the same tick, so that we don't
12868 // end up in an overlapped onwrite situation.
12869 this.bufferProcessing = false;
12870
12871 // the callback that's passed to _write(chunk,cb)
12872 this.onwrite = function(er) {
12873 onwrite(stream, er);
12874 };
12875
12876 // the callback that the user supplies to write(chunk,encoding,cb)
12877 this.writecb = null;
12878
12879 // the amount that is being written when _write is called.
12880 this.writelen = 0;
12881
12882 this.buffer = [];
12883
12884 // number of pending user-supplied write callbacks
12885 // this must be 0 before 'finish' can be emitted
12886 this.pendingcb = 0;
12887
12888 // emit prefinish if the only thing we're waiting for is _write cbs
12889 // This is relevant for synchronous Transform streams
12890 this.prefinished = false;
12891
12892 // True if the error was already emitted and should not be thrown again
12893 this.errorEmitted = false;
12894}
12895
12896function Writable(options) {
12897 var Duplex = require('./_stream_duplex');
12898
12899 // Writable ctor is applied to Duplexes, though they're not
12900 // instanceof Writable, they're instanceof Readable.
12901 if (!(this instanceof Writable) && !(this instanceof Duplex))
12902 return new Writable(options);
12903
12904 this._writableState = new WritableState(options, this);
12905
12906 // legacy.
12907 this.writable = true;
12908
12909 Stream.call(this);
12910}
12911
12912// Otherwise people can pipe Writable streams, which is just wrong.
12913Writable.prototype.pipe = function() {
12914 this.emit('error', new Error('Cannot pipe. Not readable.'));
12915};
12916
12917
12918function writeAfterEnd(stream, state, cb) {
12919 var er = new Error('write after end');
12920 // TODO: defer error events consistently everywhere, not just the cb
12921 stream.emit('error', er);
12922 process.nextTick(function() {
12923 cb(er);
12924 });
12925}
12926
12927// If we get something that is not a buffer, string, null, or undefined,
12928// and we're not in objectMode, then that's an error.
12929// Otherwise stream chunks are all considered to be of length=1, and the
12930// watermarks determine how many objects to keep in the buffer, rather than
12931// how many bytes or characters.
12932function validChunk(stream, state, chunk, cb) {
12933 var valid = true;
12934 if (!util.isBuffer(chunk) &&
12935 !util.isString(chunk) &&
12936 !util.isNullOrUndefined(chunk) &&
12937 !state.objectMode) {
12938 var er = new TypeError('Invalid non-string/buffer chunk');
12939 stream.emit('error', er);
12940 process.nextTick(function() {
12941 cb(er);
12942 });
12943 valid = false;
12944 }
12945 return valid;
12946}
12947
12948Writable.prototype.write = function(chunk, encoding, cb) {
12949 var state = this._writableState;
12950 var ret = false;
12951
12952 if (util.isFunction(encoding)) {
12953 cb = encoding;
12954 encoding = null;
12955 }
12956
12957 if (util.isBuffer(chunk))
12958 encoding = 'buffer';
12959 else if (!encoding)
12960 encoding = state.defaultEncoding;
12961
12962 if (!util.isFunction(cb))
12963 cb = function() {};
12964
12965 if (state.ended)
12966 writeAfterEnd(this, state, cb);
12967 else if (validChunk(this, state, chunk, cb)) {
12968 state.pendingcb++;
12969 ret = writeOrBuffer(this, state, chunk, encoding, cb);
12970 }
12971
12972 return ret;
12973};
12974
12975Writable.prototype.cork = function() {
12976 var state = this._writableState;
12977
12978 state.corked++;
12979};
12980
12981Writable.prototype.uncork = function() {
12982 var state = this._writableState;
12983
12984 if (state.corked) {
12985 state.corked--;
12986
12987 if (!state.writing &&
12988 !state.corked &&
12989 !state.finished &&
12990 !state.bufferProcessing &&
12991 state.buffer.length)
12992 clearBuffer(this, state);
12993 }
12994};
12995
12996function decodeChunk(state, chunk, encoding) {
12997 if (!state.objectMode &&
12998 state.decodeStrings !== false &&
12999 util.isString(chunk)) {
13000 chunk = new Buffer(chunk, encoding);
13001 }
13002 return chunk;
13003}
13004
13005// if we're already writing something, then just put this
13006// in the queue, and wait our turn. Otherwise, call _write
13007// If we return false, then we need a drain event, so set that flag.
13008function writeOrBuffer(stream, state, chunk, encoding, cb) {
13009 chunk = decodeChunk(state, chunk, encoding);
13010 if (util.isBuffer(chunk))
13011 encoding = 'buffer';
13012 var len = state.objectMode ? 1 : chunk.length;
13013
13014 state.length += len;
13015
13016 var ret = state.length < state.highWaterMark;
13017 // we must ensure that previous needDrain will not be reset to false.
13018 if (!ret)
13019 state.needDrain = true;
13020
13021 if (state.writing || state.corked)
13022 state.buffer.push(new WriteReq(chunk, encoding, cb));
13023 else
13024 doWrite(stream, state, false, len, chunk, encoding, cb);
13025
13026 return ret;
13027}
13028
13029function doWrite(stream, state, writev, len, chunk, encoding, cb) {
13030 state.writelen = len;
13031 state.writecb = cb;
13032 state.writing = true;
13033 state.sync = true;
13034 if (writev)
13035 stream._writev(chunk, state.onwrite);
13036 else
13037 stream._write(chunk, encoding, state.onwrite);
13038 state.sync = false;
13039}
13040
13041function onwriteError(stream, state, sync, er, cb) {
13042 if (sync)
13043 process.nextTick(function() {
13044 state.pendingcb--;
13045 cb(er);
13046 });
13047 else {
13048 state.pendingcb--;
13049 cb(er);
13050 }
13051
13052 stream._writableState.errorEmitted = true;
13053 stream.emit('error', er);
13054}
13055
13056function onwriteStateUpdate(state) {
13057 state.writing = false;
13058 state.writecb = null;
13059 state.length -= state.writelen;
13060 state.writelen = 0;
13061}
13062
13063function onwrite(stream, er) {
13064 var state = stream._writableState;
13065 var sync = state.sync;
13066 var cb = state.writecb;
13067
13068 onwriteStateUpdate(state);
13069
13070 if (er)
13071 onwriteError(stream, state, sync, er, cb);
13072 else {
13073 // Check if we're actually ready to finish, but don't emit yet
13074 var finished = needFinish(stream, state);
13075
13076 if (!finished &&
13077 !state.corked &&
13078 !state.bufferProcessing &&
13079 state.buffer.length) {
13080 clearBuffer(stream, state);
13081 }
13082
13083 if (sync) {
13084 process.nextTick(function() {
13085 afterWrite(stream, state, finished, cb);
13086 });
13087 } else {
13088 afterWrite(stream, state, finished, cb);
13089 }
13090 }
13091}
13092
13093function afterWrite(stream, state, finished, cb) {
13094 if (!finished)
13095 onwriteDrain(stream, state);
13096 state.pendingcb--;
13097 cb();
13098 finishMaybe(stream, state);
13099}
13100
13101// Must force callback to be called on nextTick, so that we don't
13102// emit 'drain' before the write() consumer gets the 'false' return
13103// value, and has a chance to attach a 'drain' listener.
13104function onwriteDrain(stream, state) {
13105 if (state.length === 0 && state.needDrain) {
13106 state.needDrain = false;
13107 stream.emit('drain');
13108 }
13109}
13110
13111
13112// if there's something in the buffer waiting, then process it
13113function clearBuffer(stream, state) {
13114 state.bufferProcessing = true;
13115
13116 if (stream._writev && state.buffer.length > 1) {
13117 // Fast case, write everything using _writev()
13118 var cbs = [];
13119 for (var c = 0; c < state.buffer.length; c++)
13120 cbs.push(state.buffer[c].callback);
13121
13122 // count the one we are adding, as well.
13123 // TODO(isaacs) clean this up
13124 state.pendingcb++;
13125 doWrite(stream, state, true, state.length, state.buffer, '', function(err) {
13126 for (var i = 0; i < cbs.length; i++) {
13127 state.pendingcb--;
13128 cbs[i](err);
13129 }
13130 });
13131
13132 // Clear buffer
13133 state.buffer = [];
13134 } else {
13135 // Slow case, write chunks one-by-one
13136 for (var c = 0; c < state.buffer.length; c++) {
13137 var entry = state.buffer[c];
13138 var chunk = entry.chunk;
13139 var encoding = entry.encoding;
13140 var cb = entry.callback;
13141 var len = state.objectMode ? 1 : chunk.length;
13142
13143 doWrite(stream, state, false, len, chunk, encoding, cb);
13144
13145 // if we didn't call the onwrite immediately, then
13146 // it means that we need to wait until it does.
13147 // also, that means that the chunk and cb are currently
13148 // being processed, so move the buffer counter past them.
13149 if (state.writing) {
13150 c++;
13151 break;
13152 }
13153 }
13154
13155 if (c < state.buffer.length)
13156 state.buffer = state.buffer.slice(c);
13157 else
13158 state.buffer.length = 0;
13159 }
13160
13161 state.bufferProcessing = false;
13162}
13163
13164Writable.prototype._write = function(chunk, encoding, cb) {
13165 cb(new Error('not implemented'));
13166
13167};
13168
13169Writable.prototype._writev = null;
13170
13171Writable.prototype.end = function(chunk, encoding, cb) {
13172 var state = this._writableState;
13173
13174 if (util.isFunction(chunk)) {
13175 cb = chunk;
13176 chunk = null;
13177 encoding = null;
13178 } else if (util.isFunction(encoding)) {
13179 cb = encoding;
13180 encoding = null;
13181 }
13182
13183 if (!util.isNullOrUndefined(chunk))
13184 this.write(chunk, encoding);
13185
13186 // .end() fully uncorks
13187 if (state.corked) {
13188 state.corked = 1;
13189 this.uncork();
13190 }
13191
13192 // ignore unnecessary end() calls.
13193 if (!state.ending && !state.finished)
13194 endWritable(this, state, cb);
13195};
13196
13197
13198function needFinish(stream, state) {
13199 return (state.ending &&
13200 state.length === 0 &&
13201 !state.finished &&
13202 !state.writing);
13203}
13204
13205function prefinish(stream, state) {
13206 if (!state.prefinished) {
13207 state.prefinished = true;
13208 stream.emit('prefinish');
13209 }
13210}
13211
13212function finishMaybe(stream, state) {
13213 var need = needFinish(stream, state);
13214 if (need) {
13215 if (state.pendingcb === 0) {
13216 prefinish(stream, state);
13217 state.finished = true;
13218 stream.emit('finish');
13219 } else
13220 prefinish(stream, state);
13221 }
13222 return need;
13223}
13224
13225function endWritable(stream, state, cb) {
13226 state.ending = true;
13227 finishMaybe(stream, state);
13228 if (cb) {
13229 if (state.finished)
13230 process.nextTick(cb);
13231 else
13232 stream.once('finish', cb);
13233 }
13234 state.ended = true;
13235}
13236
13237}).call(this,require('_process'))
13238},{"./_stream_duplex":16,"_process":14,"buffer":7,"core-util-is":21,"inherits":12,"stream":26}],21:[function(require,module,exports){
13239(function (Buffer){
13240// Copyright Joyent, Inc. and other Node contributors.
13241//
13242// Permission is hereby granted, free of charge, to any person obtaining a
13243// copy of this software and associated documentation files (the
13244// "Software"), to deal in the Software without restriction, including
13245// without limitation the rights to use, copy, modify, merge, publish,
13246// distribute, sublicense, and/or sell copies of the Software, and to permit
13247// persons to whom the Software is furnished to do so, subject to the
13248// following conditions:
13249//
13250// The above copyright notice and this permission notice shall be included
13251// in all copies or substantial portions of the Software.
13252//
13253// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13254// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13255// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13256// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13257// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13258// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13259// USE OR OTHER DEALINGS IN THE SOFTWARE.
13260
13261// NOTE: These type checking functions intentionally don't use `instanceof`
13262// because it is fragile and can be easily faked with `Object.create()`.
13263function isArray(ar) {
13264 return Array.isArray(ar);
13265}
13266exports.isArray = isArray;
13267
13268function isBoolean(arg) {
13269 return typeof arg === 'boolean';
13270}
13271exports.isBoolean = isBoolean;
13272
13273function isNull(arg) {
13274 return arg === null;
13275}
13276exports.isNull = isNull;
13277
13278function isNullOrUndefined(arg) {
13279 return arg == null;
13280}
13281exports.isNullOrUndefined = isNullOrUndefined;
13282
13283function isNumber(arg) {
13284 return typeof arg === 'number';
13285}
13286exports.isNumber = isNumber;
13287
13288function isString(arg) {
13289 return typeof arg === 'string';
13290}
13291exports.isString = isString;
13292
13293function isSymbol(arg) {
13294 return typeof arg === 'symbol';
13295}
13296exports.isSymbol = isSymbol;
13297
13298function isUndefined(arg) {
13299 return arg === void 0;
13300}
13301exports.isUndefined = isUndefined;
13302
13303function isRegExp(re) {
13304 return isObject(re) && objectToString(re) === '[object RegExp]';
13305}
13306exports.isRegExp = isRegExp;
13307
13308function isObject(arg) {
13309 return typeof arg === 'object' && arg !== null;
13310}
13311exports.isObject = isObject;
13312
13313function isDate(d) {
13314 return isObject(d) && objectToString(d) === '[object Date]';
13315}
13316exports.isDate = isDate;
13317
13318function isError(e) {
13319 return isObject(e) &&
13320 (objectToString(e) === '[object Error]' || e instanceof Error);
13321}
13322exports.isError = isError;
13323
13324function isFunction(arg) {
13325 return typeof arg === 'function';
13326}
13327exports.isFunction = isFunction;
13328
13329function isPrimitive(arg) {
13330 return arg === null ||
13331 typeof arg === 'boolean' ||
13332 typeof arg === 'number' ||
13333 typeof arg === 'string' ||
13334 typeof arg === 'symbol' || // ES6 symbol
13335 typeof arg === 'undefined';
13336}
13337exports.isPrimitive = isPrimitive;
13338
13339function isBuffer(arg) {
13340 return Buffer.isBuffer(arg);
13341}
13342exports.isBuffer = isBuffer;
13343
13344function objectToString(o) {
13345 return Object.prototype.toString.call(o);
13346}
13347}).call(this,require("buffer").Buffer)
13348},{"buffer":7}],22:[function(require,module,exports){
13349module.exports = require("./lib/_stream_passthrough.js")
13350
13351},{"./lib/_stream_passthrough.js":17}],23:[function(require,module,exports){
13352exports = module.exports = require('./lib/_stream_readable.js');
13353exports.Stream = require('stream');
13354exports.Readable = exports;
13355exports.Writable = require('./lib/_stream_writable.js');
13356exports.Duplex = require('./lib/_stream_duplex.js');
13357exports.Transform = require('./lib/_stream_transform.js');
13358exports.PassThrough = require('./lib/_stream_passthrough.js');
13359
13360},{"./lib/_stream_duplex.js":16,"./lib/_stream_passthrough.js":17,"./lib/_stream_readable.js":18,"./lib/_stream_transform.js":19,"./lib/_stream_writable.js":20,"stream":26}],24:[function(require,module,exports){
13361module.exports = require("./lib/_stream_transform.js")
13362
13363},{"./lib/_stream_transform.js":19}],25:[function(require,module,exports){
13364module.exports = require("./lib/_stream_writable.js")
13365
13366},{"./lib/_stream_writable.js":20}],26:[function(require,module,exports){
13367// Copyright Joyent, Inc. and other Node contributors.
13368//
13369// Permission is hereby granted, free of charge, to any person obtaining a
13370// copy of this software and associated documentation files (the
13371// "Software"), to deal in the Software without restriction, including
13372// without limitation the rights to use, copy, modify, merge, publish,
13373// distribute, sublicense, and/or sell copies of the Software, and to permit
13374// persons to whom the Software is furnished to do so, subject to the
13375// following conditions:
13376//
13377// The above copyright notice and this permission notice shall be included
13378// in all copies or substantial portions of the Software.
13379//
13380// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13381// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13382// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13383// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13384// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13385// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13386// USE OR OTHER DEALINGS IN THE SOFTWARE.
13387
13388module.exports = Stream;
13389
13390var EE = require('events').EventEmitter;
13391var inherits = require('inherits');
13392
13393inherits(Stream, EE);
13394Stream.Readable = require('readable-stream/readable.js');
13395Stream.Writable = require('readable-stream/writable.js');
13396Stream.Duplex = require('readable-stream/duplex.js');
13397Stream.Transform = require('readable-stream/transform.js');
13398Stream.PassThrough = require('readable-stream/passthrough.js');
13399
13400// Backwards-compat with node 0.4.x
13401Stream.Stream = Stream;
13402
13403
13404
13405// old-style streams. Note that the pipe method (the only relevant
13406// part of this class) is overridden in the Readable class.
13407
13408function Stream() {
13409 EE.call(this);
13410}
13411
13412Stream.prototype.pipe = function(dest, options) {
13413 var source = this;
13414
13415 function ondata(chunk) {
13416 if (dest.writable) {
13417 if (false === dest.write(chunk) && source.pause) {
13418 source.pause();
13419 }
13420 }
13421 }
13422
13423 source.on('data', ondata);
13424
13425 function ondrain() {
13426 if (source.readable && source.resume) {
13427 source.resume();
13428 }
13429 }
13430
13431 dest.on('drain', ondrain);
13432
13433 // If the 'end' option is not supplied, dest.end() will be called when
13434 // source gets the 'end' or 'close' events. Only dest.end() once.
13435 if (!dest._isStdio && (!options || options.end !== false)) {
13436 source.on('end', onend);
13437 source.on('close', onclose);
13438 }
13439
13440 var didOnEnd = false;
13441 function onend() {
13442 if (didOnEnd) return;
13443 didOnEnd = true;
13444
13445 dest.end();
13446 }
13447
13448
13449 function onclose() {
13450 if (didOnEnd) return;
13451 didOnEnd = true;
13452
13453 if (typeof dest.destroy === 'function') dest.destroy();
13454 }
13455
13456 // don't leave dangling pipes when there are errors.
13457 function onerror(er) {
13458 cleanup();
13459 if (EE.listenerCount(this, 'error') === 0) {
13460 throw er; // Unhandled stream error in pipe.
13461 }
13462 }
13463
13464 source.on('error', onerror);
13465 dest.on('error', onerror);
13466
13467 // remove all the event listeners that were added.
13468 function cleanup() {
13469 source.removeListener('data', ondata);
13470 dest.removeListener('drain', ondrain);
13471
13472 source.removeListener('end', onend);
13473 source.removeListener('close', onclose);
13474
13475 source.removeListener('error', onerror);
13476 dest.removeListener('error', onerror);
13477
13478 source.removeListener('end', cleanup);
13479 source.removeListener('close', cleanup);
13480
13481 dest.removeListener('close', cleanup);
13482 }
13483
13484 source.on('end', cleanup);
13485 source.on('close', cleanup);
13486
13487 dest.on('close', cleanup);
13488
13489 dest.emit('pipe', source);
13490
13491 // Allow for unix-like usage: A.pipe(B).pipe(C)
13492 return dest;
13493};
13494
13495},{"events":11,"inherits":12,"readable-stream/duplex.js":15,"readable-stream/passthrough.js":22,"readable-stream/readable.js":23,"readable-stream/transform.js":24,"readable-stream/writable.js":25}],27:[function(require,module,exports){
13496// Copyright Joyent, Inc. and other Node contributors.
13497//
13498// Permission is hereby granted, free of charge, to any person obtaining a
13499// copy of this software and associated documentation files (the
13500// "Software"), to deal in the Software without restriction, including
13501// without limitation the rights to use, copy, modify, merge, publish,
13502// distribute, sublicense, and/or sell copies of the Software, and to permit
13503// persons to whom the Software is furnished to do so, subject to the
13504// following conditions:
13505//
13506// The above copyright notice and this permission notice shall be included
13507// in all copies or substantial portions of the Software.
13508//
13509// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13510// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13511// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13512// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13513// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13514// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13515// USE OR OTHER DEALINGS IN THE SOFTWARE.
13516
13517var Buffer = require('buffer').Buffer;
13518
13519var isBufferEncoding = Buffer.isEncoding
13520 || function(encoding) {
13521 switch (encoding && encoding.toLowerCase()) {
13522 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;
13523 default: return false;
13524 }
13525 }
13526
13527
13528function assertEncoding(encoding) {
13529 if (encoding && !isBufferEncoding(encoding)) {
13530 throw new Error('Unknown encoding: ' + encoding);
13531 }
13532}
13533
13534// StringDecoder provides an interface for efficiently splitting a series of
13535// buffers into a series of JS strings without breaking apart multi-byte
13536// characters. CESU-8 is handled as part of the UTF-8 encoding.
13537//
13538// @TODO Handling all encodings inside a single object makes it very difficult
13539// to reason about this code, so it should be split up in the future.
13540// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
13541// points as used by CESU-8.
13542var StringDecoder = exports.StringDecoder = function(encoding) {
13543 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
13544 assertEncoding(encoding);
13545 switch (this.encoding) {
13546 case 'utf8':
13547 // CESU-8 represents each of Surrogate Pair by 3-bytes
13548 this.surrogateSize = 3;
13549 break;
13550 case 'ucs2':
13551 case 'utf16le':
13552 // UTF-16 represents each of Surrogate Pair by 2-bytes
13553 this.surrogateSize = 2;
13554 this.detectIncompleteChar = utf16DetectIncompleteChar;
13555 break;
13556 case 'base64':
13557 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
13558 this.surrogateSize = 3;
13559 this.detectIncompleteChar = base64DetectIncompleteChar;
13560 break;
13561 default:
13562 this.write = passThroughWrite;
13563 return;
13564 }
13565
13566 // Enough space to store all bytes of a single character. UTF-8 needs 4
13567 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
13568 this.charBuffer = new Buffer(6);
13569 // Number of bytes received for the current incomplete multi-byte character.
13570 this.charReceived = 0;
13571 // Number of bytes expected for the current incomplete multi-byte character.
13572 this.charLength = 0;
13573};
13574
13575
13576// write decodes the given buffer and returns it as JS string that is
13577// guaranteed to not contain any partial multi-byte characters. Any partial
13578// character found at the end of the buffer is buffered up, and will be
13579// returned when calling write again with the remaining bytes.
13580//
13581// Note: Converting a Buffer containing an orphan surrogate to a String
13582// currently works, but converting a String to a Buffer (via `new Buffer`, or
13583// Buffer#write) will replace incomplete surrogates with the unicode
13584// replacement character. See https://codereview.chromium.org/121173009/ .
13585StringDecoder.prototype.write = function(buffer) {
13586 var charStr = '';
13587 // if our last write ended with an incomplete multibyte character
13588 while (this.charLength) {
13589 // determine how many remaining bytes this buffer has to offer for this char
13590 var available = (buffer.length >= this.charLength - this.charReceived) ?
13591 this.charLength - this.charReceived :
13592 buffer.length;
13593
13594 // add the new bytes to the char buffer
13595 buffer.copy(this.charBuffer, this.charReceived, 0, available);
13596 this.charReceived += available;
13597
13598 if (this.charReceived < this.charLength) {
13599 // still not enough chars in this buffer? wait for more ...
13600 return '';
13601 }
13602
13603 // remove bytes belonging to the current character from the buffer
13604 buffer = buffer.slice(available, buffer.length);
13605
13606 // get the character that was split
13607 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
13608
13609 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
13610 var charCode = charStr.charCodeAt(charStr.length - 1);
13611 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
13612 this.charLength += this.surrogateSize;
13613 charStr = '';
13614 continue;
13615 }
13616 this.charReceived = this.charLength = 0;
13617
13618 // if there are no more bytes in this buffer, just emit our char
13619 if (buffer.length === 0) {
13620 return charStr;
13621 }
13622 break;
13623 }
13624
13625 // determine and set charLength / charReceived
13626 this.detectIncompleteChar(buffer);
13627
13628 var end = buffer.length;
13629 if (this.charLength) {
13630 // buffer the incomplete character bytes we got
13631 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
13632 end -= this.charReceived;
13633 }
13634
13635 charStr += buffer.toString(this.encoding, 0, end);
13636
13637 var end = charStr.length - 1;
13638 var charCode = charStr.charCodeAt(end);
13639 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
13640 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
13641 var size = this.surrogateSize;
13642 this.charLength += size;
13643 this.charReceived += size;
13644 this.charBuffer.copy(this.charBuffer, size, 0, size);
13645 buffer.copy(this.charBuffer, 0, 0, size);
13646 return charStr.substring(0, end);
13647 }
13648
13649 // or just emit the charStr
13650 return charStr;
13651};
13652
13653// detectIncompleteChar determines if there is an incomplete UTF-8 character at
13654// the end of the given buffer. If so, it sets this.charLength to the byte
13655// length that character, and sets this.charReceived to the number of bytes
13656// that are available for this character.
13657StringDecoder.prototype.detectIncompleteChar = function(buffer) {
13658 // determine how many bytes we have to check at the end of this buffer
13659 var i = (buffer.length >= 3) ? 3 : buffer.length;
13660
13661 // Figure out if one of the last i bytes of our buffer announces an
13662 // incomplete char.
13663 for (; i > 0; i--) {
13664 var c = buffer[buffer.length - i];
13665
13666 // See http://en.wikipedia.org/wiki/UTF-8#Description
13667
13668 // 110XXXXX
13669 if (i == 1 && c >> 5 == 0x06) {
13670 this.charLength = 2;
13671 break;
13672 }
13673
13674 // 1110XXXX
13675 if (i <= 2 && c >> 4 == 0x0E) {
13676 this.charLength = 3;
13677 break;
13678 }
13679
13680 // 11110XXX
13681 if (i <= 3 && c >> 3 == 0x1E) {
13682 this.charLength = 4;
13683 break;
13684 }
13685 }
13686 this.charReceived = i;
13687};
13688
13689StringDecoder.prototype.end = function(buffer) {
13690 var res = '';
13691 if (buffer && buffer.length)
13692 res = this.write(buffer);
13693
13694 if (this.charReceived) {
13695 var cr = this.charReceived;
13696 var buf = this.charBuffer;
13697 var enc = this.encoding;
13698 res += buf.slice(0, cr).toString(enc);
13699 }
13700
13701 return res;
13702};
13703
13704function passThroughWrite(buffer) {
13705 return buffer.toString(this.encoding);
13706}
13707
13708function utf16DetectIncompleteChar(buffer) {
13709 this.charReceived = buffer.length % 2;
13710 this.charLength = this.charReceived ? 2 : 0;
13711}
13712
13713function base64DetectIncompleteChar(buffer) {
13714 this.charReceived = buffer.length % 3;
13715 this.charLength = this.charReceived ? 3 : 0;
13716}
13717
13718},{"buffer":7}],28:[function(require,module,exports){
13719module.exports = function isBuffer(arg) {
13720 return arg && typeof arg === 'object'
13721 && typeof arg.copy === 'function'
13722 && typeof arg.fill === 'function'
13723 && typeof arg.readUInt8 === 'function';
13724}
13725},{}],29:[function(require,module,exports){
13726(function (process,global){
13727// Copyright Joyent, Inc. and other Node contributors.
13728//
13729// Permission is hereby granted, free of charge, to any person obtaining a
13730// copy of this software and associated documentation files (the
13731// "Software"), to deal in the Software without restriction, including
13732// without limitation the rights to use, copy, modify, merge, publish,
13733// distribute, sublicense, and/or sell copies of the Software, and to permit
13734// persons to whom the Software is furnished to do so, subject to the
13735// following conditions:
13736//
13737// The above copyright notice and this permission notice shall be included
13738// in all copies or substantial portions of the Software.
13739//
13740// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13741// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
13742// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
13743// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
13744// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
13745// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
13746// USE OR OTHER DEALINGS IN THE SOFTWARE.
13747
13748var formatRegExp = /%[sdj%]/g;
13749exports.format = function(f) {
13750 if (!isString(f)) {
13751 var objects = [];
13752 for (var i = 0; i < arguments.length; i++) {
13753 objects.push(inspect(arguments[i]));
13754 }
13755 return objects.join(' ');
13756 }
13757
13758 var i = 1;
13759 var args = arguments;
13760 var len = args.length;
13761 var str = String(f).replace(formatRegExp, function(x) {
13762 if (x === '%%') return '%';
13763 if (i >= len) return x;
13764 switch (x) {
13765 case '%s': return String(args[i++]);
13766 case '%d': return Number(args[i++]);
13767 case '%j':
13768 try {
13769 return JSON.stringify(args[i++]);
13770 } catch (_) {
13771 return '[Circular]';
13772 }
13773 default:
13774 return x;
13775 }
13776 });
13777 for (var x = args[i]; i < len; x = args[++i]) {
13778 if (isNull(x) || !isObject(x)) {
13779 str += ' ' + x;
13780 } else {
13781 str += ' ' + inspect(x);
13782 }
13783 }
13784 return str;
13785};
13786
13787
13788// Mark that a method should not be used.
13789// Returns a modified function which warns once by default.
13790// If --no-deprecation is set, then it is a no-op.
13791exports.deprecate = function(fn, msg) {
13792 // Allow for deprecating things in the process of starting up.
13793 if (isUndefined(global.process)) {
13794 return function() {
13795 return exports.deprecate(fn, msg).apply(this, arguments);
13796 };
13797 }
13798
13799 if (process.noDeprecation === true) {
13800 return fn;
13801 }
13802
13803 var warned = false;
13804 function deprecated() {
13805 if (!warned) {
13806 if (process.throwDeprecation) {
13807 throw new Error(msg);
13808 } else if (process.traceDeprecation) {
13809 console.trace(msg);
13810 } else {
13811 console.error(msg);
13812 }
13813 warned = true;
13814 }
13815 return fn.apply(this, arguments);
13816 }
13817
13818 return deprecated;
13819};
13820
13821
13822var debugs = {};
13823var debugEnviron;
13824exports.debuglog = function(set) {
13825 if (isUndefined(debugEnviron))
13826 debugEnviron = process.env.NODE_DEBUG || '';
13827 set = set.toUpperCase();
13828 if (!debugs[set]) {
13829 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
13830 var pid = process.pid;
13831 debugs[set] = function() {
13832 var msg = exports.format.apply(exports, arguments);
13833 console.error('%s %d: %s', set, pid, msg);
13834 };
13835 } else {
13836 debugs[set] = function() {};
13837 }
13838 }
13839 return debugs[set];
13840};
13841
13842
13843/**
13844 * Echos the value of a value. Trys to print the value out
13845 * in the best way possible given the different types.
13846 *
13847 * @param {Object} obj The object to print out.
13848 * @param {Object} opts Optional options object that alters the output.
13849 */
13850/* legacy: obj, showHidden, depth, colors*/
13851function inspect(obj, opts) {
13852 // default options
13853 var ctx = {
13854 seen: [],
13855 stylize: stylizeNoColor
13856 };
13857 // legacy...
13858 if (arguments.length >= 3) ctx.depth = arguments[2];
13859 if (arguments.length >= 4) ctx.colors = arguments[3];
13860 if (isBoolean(opts)) {
13861 // legacy...
13862 ctx.showHidden = opts;
13863 } else if (opts) {
13864 // got an "options" object
13865 exports._extend(ctx, opts);
13866 }
13867 // set default options
13868 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
13869 if (isUndefined(ctx.depth)) ctx.depth = 2;
13870 if (isUndefined(ctx.colors)) ctx.colors = false;
13871 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
13872 if (ctx.colors) ctx.stylize = stylizeWithColor;
13873 return formatValue(ctx, obj, ctx.depth);
13874}
13875exports.inspect = inspect;
13876
13877
13878// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
13879inspect.colors = {
13880 'bold' : [1, 22],
13881 'italic' : [3, 23],
13882 'underline' : [4, 24],
13883 'inverse' : [7, 27],
13884 'white' : [37, 39],
13885 'grey' : [90, 39],
13886 'black' : [30, 39],
13887 'blue' : [34, 39],
13888 'cyan' : [36, 39],
13889 'green' : [32, 39],
13890 'magenta' : [35, 39],
13891 'red' : [31, 39],
13892 'yellow' : [33, 39]
13893};
13894
13895// Don't use 'blue' not visible on cmd.exe
13896inspect.styles = {
13897 'special': 'cyan',
13898 'number': 'yellow',
13899 'boolean': 'yellow',
13900 'undefined': 'grey',
13901 'null': 'bold',
13902 'string': 'green',
13903 'date': 'magenta',
13904 // "name": intentionally not styling
13905 'regexp': 'red'
13906};
13907
13908
13909function stylizeWithColor(str, styleType) {
13910 var style = inspect.styles[styleType];
13911
13912 if (style) {
13913 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
13914 '\u001b[' + inspect.colors[style][1] + 'm';
13915 } else {
13916 return str;
13917 }
13918}
13919
13920
13921function stylizeNoColor(str, styleType) {
13922 return str;
13923}
13924
13925
13926function arrayToHash(array) {
13927 var hash = {};
13928
13929 array.forEach(function(val, idx) {
13930 hash[val] = true;
13931 });
13932
13933 return hash;
13934}
13935
13936
13937function formatValue(ctx, value, recurseTimes) {
13938 // Provide a hook for user-specified inspect functions.
13939 // Check that value is an object with an inspect function on it
13940 if (ctx.customInspect &&
13941 value &&
13942 isFunction(value.inspect) &&
13943 // Filter out the util module, it's inspect function is special
13944 value.inspect !== exports.inspect &&
13945 // Also filter out any prototype objects using the circular check.
13946 !(value.constructor && value.constructor.prototype === value)) {
13947 var ret = value.inspect(recurseTimes, ctx);
13948 if (!isString(ret)) {
13949 ret = formatValue(ctx, ret, recurseTimes);
13950 }
13951 return ret;
13952 }
13953
13954 // Primitive types cannot have properties
13955 var primitive = formatPrimitive(ctx, value);
13956 if (primitive) {
13957 return primitive;
13958 }
13959
13960 // Look up the keys of the object.
13961 var keys = Object.keys(value);
13962 var visibleKeys = arrayToHash(keys);
13963
13964 if (ctx.showHidden) {
13965 keys = Object.getOwnPropertyNames(value);
13966 }
13967
13968 // IE doesn't make error fields non-enumerable
13969 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
13970 if (isError(value)
13971 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
13972 return formatError(value);
13973 }
13974
13975 // Some type of object without properties can be shortcutted.
13976 if (keys.length === 0) {
13977 if (isFunction(value)) {
13978 var name = value.name ? ': ' + value.name : '';
13979 return ctx.stylize('[Function' + name + ']', 'special');
13980 }
13981 if (isRegExp(value)) {
13982 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
13983 }
13984 if (isDate(value)) {
13985 return ctx.stylize(Date.prototype.toString.call(value), 'date');
13986 }
13987 if (isError(value)) {
13988 return formatError(value);
13989 }
13990 }
13991
13992 var base = '', array = false, braces = ['{', '}'];
13993
13994 // Make Array say that they are Array
13995 if (isArray(value)) {
13996 array = true;
13997 braces = ['[', ']'];
13998 }
13999
14000 // Make functions say that they are functions
14001 if (isFunction(value)) {
14002 var n = value.name ? ': ' + value.name : '';
14003 base = ' [Function' + n + ']';
14004 }
14005
14006 // Make RegExps say that they are RegExps
14007 if (isRegExp(value)) {
14008 base = ' ' + RegExp.prototype.toString.call(value);
14009 }
14010
14011 // Make dates with properties first say the date
14012 if (isDate(value)) {
14013 base = ' ' + Date.prototype.toUTCString.call(value);
14014 }
14015
14016 // Make error with message first say the error
14017 if (isError(value)) {
14018 base = ' ' + formatError(value);
14019 }
14020
14021 if (keys.length === 0 && (!array || value.length == 0)) {
14022 return braces[0] + base + braces[1];
14023 }
14024
14025 if (recurseTimes < 0) {
14026 if (isRegExp(value)) {
14027 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
14028 } else {
14029 return ctx.stylize('[Object]', 'special');
14030 }
14031 }
14032
14033 ctx.seen.push(value);
14034
14035 var output;
14036 if (array) {
14037 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
14038 } else {
14039 output = keys.map(function(key) {
14040 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
14041 });
14042 }
14043
14044 ctx.seen.pop();
14045
14046 return reduceToSingleString(output, base, braces);
14047}
14048
14049
14050function formatPrimitive(ctx, value) {
14051 if (isUndefined(value))
14052 return ctx.stylize('undefined', 'undefined');
14053 if (isString(value)) {
14054 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
14055 .replace(/'/g, "\\'")
14056 .replace(/\\"/g, '"') + '\'';
14057 return ctx.stylize(simple, 'string');
14058 }
14059 if (isNumber(value))
14060 return ctx.stylize('' + value, 'number');
14061 if (isBoolean(value))
14062 return ctx.stylize('' + value, 'boolean');
14063 // For some reason typeof null is "object", so special case here.
14064 if (isNull(value))
14065 return ctx.stylize('null', 'null');
14066}
14067
14068
14069function formatError(value) {
14070 return '[' + Error.prototype.toString.call(value) + ']';
14071}
14072
14073
14074function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
14075 var output = [];
14076 for (var i = 0, l = value.length; i < l; ++i) {
14077 if (hasOwnProperty(value, String(i))) {
14078 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
14079 String(i), true));
14080 } else {
14081 output.push('');
14082 }
14083 }
14084 keys.forEach(function(key) {
14085 if (!key.match(/^\d+$/)) {
14086 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
14087 key, true));
14088 }
14089 });
14090 return output;
14091}
14092
14093
14094function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
14095 var name, str, desc;
14096 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
14097 if (desc.get) {
14098 if (desc.set) {
14099 str = ctx.stylize('[Getter/Setter]', 'special');
14100 } else {
14101 str = ctx.stylize('[Getter]', 'special');
14102 }
14103 } else {
14104 if (desc.set) {
14105 str = ctx.stylize('[Setter]', 'special');
14106 }
14107 }
14108 if (!hasOwnProperty(visibleKeys, key)) {
14109 name = '[' + key + ']';
14110 }
14111 if (!str) {
14112 if (ctx.seen.indexOf(desc.value) < 0) {
14113 if (isNull(recurseTimes)) {
14114 str = formatValue(ctx, desc.value, null);
14115 } else {
14116 str = formatValue(ctx, desc.value, recurseTimes - 1);
14117 }
14118 if (str.indexOf('\n') > -1) {
14119 if (array) {
14120 str = str.split('\n').map(function(line) {
14121 return ' ' + line;
14122 }).join('\n').substr(2);
14123 } else {
14124 str = '\n' + str.split('\n').map(function(line) {
14125 return ' ' + line;
14126 }).join('\n');
14127 }
14128 }
14129 } else {
14130 str = ctx.stylize('[Circular]', 'special');
14131 }
14132 }
14133 if (isUndefined(name)) {
14134 if (array && key.match(/^\d+$/)) {
14135 return str;
14136 }
14137 name = JSON.stringify('' + key);
14138 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
14139 name = name.substr(1, name.length - 2);
14140 name = ctx.stylize(name, 'name');
14141 } else {
14142 name = name.replace(/'/g, "\\'")
14143 .replace(/\\"/g, '"')
14144 .replace(/(^"|"$)/g, "'");
14145 name = ctx.stylize(name, 'string');
14146 }
14147 }
14148
14149 return name + ': ' + str;
14150}
14151
14152
14153function reduceToSingleString(output, base, braces) {
14154 var numLinesEst = 0;
14155 var length = output.reduce(function(prev, cur) {
14156 numLinesEst++;
14157 if (cur.indexOf('\n') >= 0) numLinesEst++;
14158 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
14159 }, 0);
14160
14161 if (length > 60) {
14162 return braces[0] +
14163 (base === '' ? '' : base + '\n ') +
14164 ' ' +
14165 output.join(',\n ') +
14166 ' ' +
14167 braces[1];
14168 }
14169
14170 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
14171}
14172
14173
14174// NOTE: These type checking functions intentionally don't use `instanceof`
14175// because it is fragile and can be easily faked with `Object.create()`.
14176function isArray(ar) {
14177 return Array.isArray(ar);
14178}
14179exports.isArray = isArray;
14180
14181function isBoolean(arg) {
14182 return typeof arg === 'boolean';
14183}
14184exports.isBoolean = isBoolean;
14185
14186function isNull(arg) {
14187 return arg === null;
14188}
14189exports.isNull = isNull;
14190
14191function isNullOrUndefined(arg) {
14192 return arg == null;
14193}
14194exports.isNullOrUndefined = isNullOrUndefined;
14195
14196function isNumber(arg) {
14197 return typeof arg === 'number';
14198}
14199exports.isNumber = isNumber;
14200
14201function isString(arg) {
14202 return typeof arg === 'string';
14203}
14204exports.isString = isString;
14205
14206function isSymbol(arg) {
14207 return typeof arg === 'symbol';
14208}
14209exports.isSymbol = isSymbol;
14210
14211function isUndefined(arg) {
14212 return arg === void 0;
14213}
14214exports.isUndefined = isUndefined;
14215
14216function isRegExp(re) {
14217 return isObject(re) && objectToString(re) === '[object RegExp]';
14218}
14219exports.isRegExp = isRegExp;
14220
14221function isObject(arg) {
14222 return typeof arg === 'object' && arg !== null;
14223}
14224exports.isObject = isObject;
14225
14226function isDate(d) {
14227 return isObject(d) && objectToString(d) === '[object Date]';
14228}
14229exports.isDate = isDate;
14230
14231function isError(e) {
14232 return isObject(e) &&
14233 (objectToString(e) === '[object Error]' || e instanceof Error);
14234}
14235exports.isError = isError;
14236
14237function isFunction(arg) {
14238 return typeof arg === 'function';
14239}
14240exports.isFunction = isFunction;
14241
14242function isPrimitive(arg) {
14243 return arg === null ||
14244 typeof arg === 'boolean' ||
14245 typeof arg === 'number' ||
14246 typeof arg === 'string' ||
14247 typeof arg === 'symbol' || // ES6 symbol
14248 typeof arg === 'undefined';
14249}
14250exports.isPrimitive = isPrimitive;
14251
14252exports.isBuffer = require('./support/isBuffer');
14253
14254function objectToString(o) {
14255 return Object.prototype.toString.call(o);
14256}
14257
14258
14259function pad(n) {
14260 return n < 10 ? '0' + n.toString(10) : n.toString(10);
14261}
14262
14263
14264var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
14265 'Oct', 'Nov', 'Dec'];
14266
14267// 26 Feb 16:19:34
14268function timestamp() {
14269 var d = new Date();
14270 var time = [pad(d.getHours()),
14271 pad(d.getMinutes()),
14272 pad(d.getSeconds())].join(':');
14273 return [d.getDate(), months[d.getMonth()], time].join(' ');
14274}
14275
14276
14277// log is just a thin wrapper to console.log that prepends a timestamp
14278exports.log = function() {
14279 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
14280};
14281
14282
14283/**
14284 * Inherit the prototype methods from one constructor into another.
14285 *
14286 * The Function.prototype.inherits from lang.js rewritten as a standalone
14287 * function (not on Function.prototype). NOTE: If this file is to be loaded
14288 * during bootstrapping this function needs to be rewritten using some native
14289 * functions as prototype setup using normal JavaScript does not work as
14290 * expected during bootstrapping (see mirror.js in r114903).
14291 *
14292 * @param {function} ctor Constructor function which needs to inherit the
14293 * prototype.
14294 * @param {function} superCtor Constructor function to inherit prototype from.
14295 */
14296exports.inherits = require('inherits');
14297
14298exports._extend = function(origin, add) {
14299 // Don't do anything if add isn't an object
14300 if (!add || !isObject(add)) return origin;
14301
14302 var keys = Object.keys(add);
14303 var i = keys.length;
14304 while (i--) {
14305 origin[keys[i]] = add[keys[i]];
14306 }
14307 return origin;
14308};
14309
14310function hasOwnProperty(obj, prop) {
14311 return Object.prototype.hasOwnProperty.call(obj, prop);
14312}
14313
14314}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
14315},{"./support/isBuffer":28,"_process":14,"inherits":12}],30:[function(require,module,exports){
14316// Base58 encoding/decoding
14317// Originally written by Mike Hearn for BitcoinJ
14318// Copyright (c) 2011 Google Inc
14319// Ported to JavaScript by Stefan Thomas
14320// Merged Buffer refactorings from base58-native by Stephen Pair
14321// Copyright (c) 2013 BitPay Inc
14322
14323var ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
14324var ALPHABET_MAP = {}
14325for(var i = 0; i < ALPHABET.length; i++) {
14326 ALPHABET_MAP[ALPHABET.charAt(i)] = i
14327}
14328var BASE = 58
14329
14330function encode(buffer) {
14331 if (buffer.length === 0) return ''
14332
14333 var i, j, digits = [0]
14334 for (i = 0; i < buffer.length; i++) {
14335 for (j = 0; j < digits.length; j++) digits[j] <<= 8
14336
14337 digits[0] += buffer[i]
14338
14339 var carry = 0
14340 for (j = 0; j < digits.length; ++j) {
14341 digits[j] += carry
14342
14343 carry = (digits[j] / BASE) | 0
14344 digits[j] %= BASE
14345 }
14346
14347 while (carry) {
14348 digits.push(carry % BASE)
14349
14350 carry = (carry / BASE) | 0
14351 }
14352 }
14353
14354 // deal with leading zeros
14355 for (i = 0; buffer[i] === 0 && i < buffer.length - 1; i++) digits.push(0)
14356
14357 // convert digits to a string
14358 var stringOutput = ""
14359 for (var i = digits.length - 1; i >= 0; i--) {
14360 stringOutput = stringOutput + ALPHABET[digits[i]]
14361 }
14362 return stringOutput
14363}
14364
14365function decode(string) {
14366 if (string.length === 0) return []
14367
14368 var i, j, bytes = [0]
14369 for (i = 0; i < string.length; i++) {
14370 var c = string[i]
14371 if (!(c in ALPHABET_MAP)) throw new Error('Non-base58 character')
14372
14373 for (j = 0; j < bytes.length; j++) bytes[j] *= BASE
14374 bytes[0] += ALPHABET_MAP[c]
14375
14376 var carry = 0
14377 for (j = 0; j < bytes.length; ++j) {
14378 bytes[j] += carry
14379
14380 carry = bytes[j] >> 8
14381 bytes[j] &= 0xff
14382 }
14383
14384 while (carry) {
14385 bytes.push(carry & 0xff)
14386
14387 carry >>= 8
14388 }
14389 }
14390
14391 // deal with leading zeros
14392 for (i = 0; string[i] === '1' && i < string.length - 1; i++) bytes.push(0)
14393
14394 return bytes.reverse()
14395}
14396
14397module.exports = {
14398 encode: encode,
14399 decode: decode
14400}
14401
14402},{}],31:[function(require,module,exports){
14403(function (Buffer){
14404'use strict'
14405
14406var base58 = require('bs58')
14407var createHash = require('create-hash')
14408
14409// SHA256(SHA256(buffer))
14410function sha256x2 (buffer) {
14411 buffer = createHash('sha256').update(buffer).digest()
14412 return createHash('sha256').update(buffer).digest()
14413}
14414
14415// Encode a buffer as a base58-check encoded string
14416function encode (payload) {
14417 var checksum = sha256x2(payload).slice(0, 4)
14418
14419 return base58.encode(Buffer.concat([
14420 payload,
14421 checksum
14422 ]))
14423}
14424
14425// Decode a base58-check encoded string to a buffer
14426function decode (string) {
14427 var buffer = new Buffer(base58.decode(string))
14428
14429 var payload = buffer.slice(0, -4)
14430 var checksum = buffer.slice(-4)
14431 var newChecksum = sha256x2(payload).slice(0, 4)
14432
14433 for (var i = 0; i < newChecksum.length; ++i) {
14434 if (newChecksum[i] === checksum[i]) continue
14435
14436 throw new Error('Invalid checksum')
14437 }
14438
14439 return payload
14440}
14441
14442module.exports = {
14443 encode: encode,
14444 decode: decode
14445}
14446
14447}).call(this,require("buffer").Buffer)
14448},{"bs58":30,"buffer":7,"create-hash":32}],32:[function(require,module,exports){
14449(function (Buffer){
14450'use strict';
14451var inherits = require('inherits')
14452var md5 = require('./md5')
14453var rmd160 = require('ripemd160')
14454var sha = require('sha.js')
14455
14456var Transform = require('stream').Transform
14457
14458function HashNoConstructor(hash) {
14459 Transform.call(this)
14460
14461 this._hash = hash
14462 this.buffers = []
14463}
14464
14465inherits(HashNoConstructor, Transform)
14466
14467HashNoConstructor.prototype._transform = function (data, _, next) {
14468 this.buffers.push(data)
14469
14470 next()
14471}
14472
14473HashNoConstructor.prototype._flush = function (next) {
14474 this.push(this.digest())
14475 next()
14476}
14477
14478HashNoConstructor.prototype.update = function (data, enc) {
14479 if (typeof data === 'string') {
14480 data = new Buffer(data, enc)
14481 }
14482
14483 this.buffers.push(data)
14484 return this
14485}
14486
14487HashNoConstructor.prototype.digest = function (enc) {
14488 var buf = Buffer.concat(this.buffers)
14489 var r = this._hash(buf)
14490 this.buffers = null
14491
14492 return enc ? r.toString(enc) : r
14493}
14494
14495function Hash(hash) {
14496 Transform.call(this)
14497
14498 this._hash = hash
14499}
14500
14501inherits(Hash, Transform)
14502
14503Hash.prototype._transform = function (data, enc, next) {
14504 if (enc) data = new Buffer(data, enc)
14505
14506 this._hash.update(data)
14507
14508 next()
14509}
14510
14511Hash.prototype._flush = function (next) {
14512 this.push(this._hash.digest())
14513 this._hash = null
14514
14515 next()
14516}
14517
14518Hash.prototype.update = function (data, enc) {
14519 if (typeof data === 'string') {
14520 data = new Buffer(data, enc)
14521 }
14522
14523 this._hash.update(data)
14524 return this
14525}
14526
14527Hash.prototype.digest = function (enc) {
14528 var outData = this._hash.digest()
14529
14530 return enc ? outData.toString(enc) : outData
14531}
14532
14533module.exports = function createHash (alg) {
14534 if ('md5' === alg) return new HashNoConstructor(md5)
14535 if ('rmd160' === alg) return new HashNoConstructor(rmd160)
14536
14537 return new Hash(sha(alg))
14538}
14539
14540}).call(this,require("buffer").Buffer)
14541},{"./md5":34,"buffer":7,"inherits":35,"ripemd160":36,"sha.js":38,"stream":26}],33:[function(require,module,exports){
14542(function (Buffer){
14543'use strict';
14544var intSize = 4;
14545var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
14546var chrsz = 8;
14547
14548function toArray(buf, bigEndian) {
14549 if ((buf.length % intSize) !== 0) {
14550 var len = buf.length + (intSize - (buf.length % intSize));
14551 buf = Buffer.concat([buf, zeroBuffer], len);
14552 }
14553
14554 var arr = [];
14555 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
14556 for (var i = 0; i < buf.length; i += intSize) {
14557 arr.push(fn.call(buf, i));
14558 }
14559 return arr;
14560}
14561
14562function toBuffer(arr, size, bigEndian) {
14563 var buf = new Buffer(size);
14564 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
14565 for (var i = 0; i < arr.length; i++) {
14566 fn.call(buf, arr[i], i * 4, true);
14567 }
14568 return buf;
14569}
14570
14571function hash(buf, fn, hashSize, bigEndian) {
14572 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
14573 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
14574 return toBuffer(arr, hashSize, bigEndian);
14575}
14576exports.hash = hash;
14577}).call(this,require("buffer").Buffer)
14578},{"buffer":7}],34:[function(require,module,exports){
14579'use strict';
14580/*
14581 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
14582 * Digest Algorithm, as defined in RFC 1321.
14583 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
14584 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
14585 * Distributed under the BSD License
14586 * See http://pajhome.org.uk/crypt/md5 for more info.
14587 */
14588
14589var helpers = require('./helpers');
14590
14591/*
14592 * Calculate the MD5 of an array of little-endian words, and a bit length
14593 */
14594function core_md5(x, len)
14595{
14596 /* append padding */
14597 x[len >> 5] |= 0x80 << ((len) % 32);
14598 x[(((len + 64) >>> 9) << 4) + 14] = len;
14599
14600 var a = 1732584193;
14601 var b = -271733879;
14602 var c = -1732584194;
14603 var d = 271733878;
14604
14605 for(var i = 0; i < x.length; i += 16)
14606 {
14607 var olda = a;
14608 var oldb = b;
14609 var oldc = c;
14610 var oldd = d;
14611
14612 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
14613 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
14614 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
14615 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
14616 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
14617 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
14618 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
14619 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
14620 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
14621 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
14622 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
14623 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
14624 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
14625 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
14626 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
14627 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
14628
14629 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
14630 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
14631 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
14632 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
14633 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
14634 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
14635 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
14636 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
14637 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
14638 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
14639 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
14640 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
14641 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
14642 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
14643 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
14644 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
14645
14646 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
14647 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
14648 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
14649 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
14650 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
14651 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
14652 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
14653 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
14654 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
14655 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
14656 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
14657 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
14658 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
14659 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
14660 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
14661 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
14662
14663 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
14664 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
14665 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
14666 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
14667 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
14668 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
14669 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
14670 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
14671 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
14672 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
14673 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
14674 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
14675 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
14676 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
14677 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
14678 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
14679
14680 a = safe_add(a, olda);
14681 b = safe_add(b, oldb);
14682 c = safe_add(c, oldc);
14683 d = safe_add(d, oldd);
14684 }
14685 return Array(a, b, c, d);
14686
14687}
14688
14689/*
14690 * These functions implement the four basic operations the algorithm uses.
14691 */
14692function md5_cmn(q, a, b, x, s, t)
14693{
14694 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
14695}
14696function md5_ff(a, b, c, d, x, s, t)
14697{
14698 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
14699}
14700function md5_gg(a, b, c, d, x, s, t)
14701{
14702 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
14703}
14704function md5_hh(a, b, c, d, x, s, t)
14705{
14706 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
14707}
14708function md5_ii(a, b, c, d, x, s, t)
14709{
14710 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
14711}
14712
14713/*
14714 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
14715 * to work around bugs in some JS interpreters.
14716 */
14717function safe_add(x, y)
14718{
14719 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
14720 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
14721 return (msw << 16) | (lsw & 0xFFFF);
14722}
14723
14724/*
14725 * Bitwise rotate a 32-bit number to the left.
14726 */
14727function bit_rol(num, cnt)
14728{
14729 return (num << cnt) | (num >>> (32 - cnt));
14730}
14731
14732module.exports = function md5(buf) {
14733 return helpers.hash(buf, core_md5, 16);
14734};
14735},{"./helpers":33}],35:[function(require,module,exports){
14736arguments[4][12][0].apply(exports,arguments)
14737},{"dup":12}],36:[function(require,module,exports){
14738(function (Buffer){
14739/*
14740CryptoJS v3.1.2
14741code.google.com/p/crypto-js
14742(c) 2009-2013 by Jeff Mott. All rights reserved.
14743code.google.com/p/crypto-js/wiki/License
14744*/
14745/** @preserve
14746(c) 2012 by Cédric Mesnil. All rights reserved.
14747
14748Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
14749
14750 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
14751 - 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.
14752
14753THIS 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.
14754*/
14755
14756// constants table
14757var zl = [
14758 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
14759 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
14760 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
14761 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
14762 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
14763]
14764
14765var zr = [
14766 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
14767 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
14768 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
14769 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
14770 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
14771]
14772
14773var sl = [
14774 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
14775 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
14776 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
14777 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
14778 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
14779]
14780
14781var sr = [
14782 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
14783 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
14784 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
14785 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
14786 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
14787]
14788
14789var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
14790var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
14791
14792function bytesToWords (bytes) {
14793 var words = []
14794 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
14795 words[b >>> 5] |= bytes[i] << (24 - b % 32)
14796 }
14797 return words
14798}
14799
14800function wordsToBytes (words) {
14801 var bytes = []
14802 for (var b = 0; b < words.length * 32; b += 8) {
14803 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
14804 }
14805 return bytes
14806}
14807
14808function processBlock (H, M, offset) {
14809 // swap endian
14810 for (var i = 0; i < 16; i++) {
14811 var offset_i = offset + i
14812 var M_offset_i = M[offset_i]
14813
14814 // Swap
14815 M[offset_i] = (
14816 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
14817 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
14818 )
14819 }
14820
14821 // Working variables
14822 var al, bl, cl, dl, el
14823 var ar, br, cr, dr, er
14824
14825 ar = al = H[0]
14826 br = bl = H[1]
14827 cr = cl = H[2]
14828 dr = dl = H[3]
14829 er = el = H[4]
14830
14831 // computation
14832 var t
14833 for (i = 0; i < 80; i += 1) {
14834 t = (al + M[offset + zl[i]]) | 0
14835 if (i < 16) {
14836 t += f1(bl, cl, dl) + hl[0]
14837 } else if (i < 32) {
14838 t += f2(bl, cl, dl) + hl[1]
14839 } else if (i < 48) {
14840 t += f3(bl, cl, dl) + hl[2]
14841 } else if (i < 64) {
14842 t += f4(bl, cl, dl) + hl[3]
14843 } else {// if (i<80) {
14844 t += f5(bl, cl, dl) + hl[4]
14845 }
14846 t = t | 0
14847 t = rotl(t, sl[i])
14848 t = (t + el) | 0
14849 al = el
14850 el = dl
14851 dl = rotl(cl, 10)
14852 cl = bl
14853 bl = t
14854
14855 t = (ar + M[offset + zr[i]]) | 0
14856 if (i < 16) {
14857 t += f5(br, cr, dr) + hr[0]
14858 } else if (i < 32) {
14859 t += f4(br, cr, dr) + hr[1]
14860 } else if (i < 48) {
14861 t += f3(br, cr, dr) + hr[2]
14862 } else if (i < 64) {
14863 t += f2(br, cr, dr) + hr[3]
14864 } else {// if (i<80) {
14865 t += f1(br, cr, dr) + hr[4]
14866 }
14867
14868 t = t | 0
14869 t = rotl(t, sr[i])
14870 t = (t + er) | 0
14871 ar = er
14872 er = dr
14873 dr = rotl(cr, 10)
14874 cr = br
14875 br = t
14876 }
14877
14878 // intermediate hash value
14879 t = (H[1] + cl + dr) | 0
14880 H[1] = (H[2] + dl + er) | 0
14881 H[2] = (H[3] + el + ar) | 0
14882 H[3] = (H[4] + al + br) | 0
14883 H[4] = (H[0] + bl + cr) | 0
14884 H[0] = t
14885}
14886
14887function f1 (x, y, z) {
14888 return ((x) ^ (y) ^ (z))
14889}
14890
14891function f2 (x, y, z) {
14892 return (((x) & (y)) | ((~x) & (z)))
14893}
14894
14895function f3 (x, y, z) {
14896 return (((x) | (~(y))) ^ (z))
14897}
14898
14899function f4 (x, y, z) {
14900 return (((x) & (z)) | ((y) & (~(z))))
14901}
14902
14903function f5 (x, y, z) {
14904 return ((x) ^ ((y) | (~(z))))
14905}
14906
14907function rotl (x, n) {
14908 return (x << n) | (x >>> (32 - n))
14909}
14910
14911function ripemd160 (message) {
14912 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
14913
14914 if (typeof message === 'string') {
14915 message = new Buffer(message, 'utf8')
14916 }
14917
14918 var m = bytesToWords(message)
14919
14920 var nBitsLeft = message.length * 8
14921 var nBitsTotal = message.length * 8
14922
14923 // Add padding
14924 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
14925 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
14926 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
14927 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
14928 )
14929
14930 for (var i = 0; i < m.length; i += 16) {
14931 processBlock(H, m, i)
14932 }
14933
14934 // swap endian
14935 for (i = 0; i < 5; i++) {
14936 // shortcut
14937 var H_i = H[i]
14938
14939 // Swap
14940 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
14941 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
14942 }
14943
14944 var digestbytes = wordsToBytes(H)
14945 return new Buffer(digestbytes)
14946}
14947
14948module.exports = ripemd160
14949
14950}).call(this,require("buffer").Buffer)
14951},{"buffer":7}],37:[function(require,module,exports){
14952(function (Buffer){
14953// prototype class for hash functions
14954function Hash (blockSize, finalSize) {
14955 this._block = new Buffer(blockSize)
14956 this._finalSize = finalSize
14957 this._blockSize = blockSize
14958 this._len = 0
14959 this._s = 0
14960}
14961
14962Hash.prototype.update = function (data, enc) {
14963 if (typeof data === 'string') {
14964 enc = enc || 'utf8'
14965 data = new Buffer(data, enc)
14966 }
14967
14968 var l = this._len += data.length
14969 var s = this._s || 0
14970 var f = 0
14971 var buffer = this._block
14972
14973 while (s < l) {
14974 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
14975 var ch = (t - f)
14976
14977 for (var i = 0; i < ch; i++) {
14978 buffer[(s % this._blockSize) + i] = data[i + f]
14979 }
14980
14981 s += ch
14982 f += ch
14983
14984 if ((s % this._blockSize) === 0) {
14985 this._update(buffer)
14986 }
14987 }
14988 this._s = s
14989
14990 return this
14991}
14992
14993Hash.prototype.digest = function (enc) {
14994 // Suppose the length of the message M, in bits, is l
14995 var l = this._len * 8
14996
14997 // Append the bit 1 to the end of the message
14998 this._block[this._len % this._blockSize] = 0x80
14999
15000 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
15001 this._block.fill(0, this._len % this._blockSize + 1)
15002
15003 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
15004 this._update(this._block)
15005 this._block.fill(0)
15006 }
15007
15008 // to this append the block which is equal to the number l written in binary
15009 // TODO: handle case where l is > Math.pow(2, 29)
15010 this._block.writeInt32BE(l, this._blockSize - 4)
15011
15012 var hash = this._update(this._block) || this._hash()
15013
15014 return enc ? hash.toString(enc) : hash
15015}
15016
15017Hash.prototype._update = function () {
15018 throw new Error('_update must be implemented by subclass')
15019}
15020
15021module.exports = Hash
15022
15023}).call(this,require("buffer").Buffer)
15024},{"buffer":7}],38:[function(require,module,exports){
15025var exports = module.exports = function SHA (algorithm) {
15026 algorithm = algorithm.toLowerCase()
15027
15028 var Algorithm = exports[algorithm]
15029 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
15030
15031 return new Algorithm()
15032}
15033
15034exports.sha = require('./sha')
15035exports.sha1 = require('./sha1')
15036exports.sha224 = require('./sha224')
15037exports.sha256 = require('./sha256')
15038exports.sha384 = require('./sha384')
15039exports.sha512 = require('./sha512')
15040
15041},{"./sha":39,"./sha1":40,"./sha224":41,"./sha256":42,"./sha384":43,"./sha512":44}],39:[function(require,module,exports){
15042(function (Buffer){
15043/*
15044 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
15045 * in FIPS PUB 180-1
15046 * This source code is derived from sha1.js of the same repository.
15047 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
15048 * operation was added.
15049 */
15050
15051var inherits = require('inherits')
15052var Hash = require('./hash')
15053
15054var W = new Array(80)
15055
15056function Sha () {
15057 this.init()
15058 this._w = W
15059
15060 Hash.call(this, 64, 56)
15061}
15062
15063inherits(Sha, Hash)
15064
15065Sha.prototype.init = function () {
15066 this._a = 0x67452301 | 0
15067 this._b = 0xefcdab89 | 0
15068 this._c = 0x98badcfe | 0
15069 this._d = 0x10325476 | 0
15070 this._e = 0xc3d2e1f0 | 0
15071
15072 return this
15073}
15074
15075/*
15076 * Bitwise rotate a 32-bit number to the left.
15077 */
15078function rol (num, cnt) {
15079 return (num << cnt) | (num >>> (32 - cnt))
15080}
15081
15082Sha.prototype._update = function (M) {
15083 var W = this._w
15084
15085 var a = this._a
15086 var b = this._b
15087 var c = this._c
15088 var d = this._d
15089 var e = this._e
15090
15091 var j = 0, k
15092
15093 /*
15094 * SHA-1 has a bitwise rotate left operation. But, SHA is not
15095 * function calcW() { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
15096 */
15097 function calcW () { return W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16] }
15098 function loop (w, f) {
15099 W[j] = w
15100
15101 var t = rol(a, 5) + f + e + w + k
15102
15103 e = d
15104 d = c
15105 c = rol(b, 30)
15106 b = a
15107 a = t
15108 j++
15109 }
15110
15111 k = 1518500249
15112 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
15113 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
15114 k = 1859775393
15115 while (j < 40) loop(calcW(), b ^ c ^ d)
15116 k = -1894007588
15117 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
15118 k = -899497514
15119 while (j < 80) loop(calcW(), b ^ c ^ d)
15120
15121 this._a = (a + this._a) | 0
15122 this._b = (b + this._b) | 0
15123 this._c = (c + this._c) | 0
15124 this._d = (d + this._d) | 0
15125 this._e = (e + this._e) | 0
15126}
15127
15128Sha.prototype._hash = function () {
15129 var H = new Buffer(20)
15130
15131 H.writeInt32BE(this._a | 0, 0)
15132 H.writeInt32BE(this._b | 0, 4)
15133 H.writeInt32BE(this._c | 0, 8)
15134 H.writeInt32BE(this._d | 0, 12)
15135 H.writeInt32BE(this._e | 0, 16)
15136
15137 return H
15138}
15139
15140module.exports = Sha
15141
15142
15143}).call(this,require("buffer").Buffer)
15144},{"./hash":37,"buffer":7,"inherits":35}],40:[function(require,module,exports){
15145(function (Buffer){
15146/*
15147 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
15148 * in FIPS PUB 180-1
15149 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
15150 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
15151 * Distributed under the BSD License
15152 * See http://pajhome.org.uk/crypt/md5 for details.
15153 */
15154
15155var inherits = require('inherits')
15156var Hash = require('./hash')
15157
15158var W = new Array(80)
15159
15160function Sha1 () {
15161 this.init()
15162 this._w = W
15163
15164 Hash.call(this, 64, 56)
15165}
15166
15167inherits(Sha1, Hash)
15168
15169Sha1.prototype.init = function () {
15170 this._a = 0x67452301 | 0
15171 this._b = 0xefcdab89 | 0
15172 this._c = 0x98badcfe | 0
15173 this._d = 0x10325476 | 0
15174 this._e = 0xc3d2e1f0 | 0
15175
15176 return this
15177}
15178
15179/*
15180 * Bitwise rotate a 32-bit number to the left.
15181 */
15182function rol (num, cnt) {
15183 return (num << cnt) | (num >>> (32 - cnt))
15184}
15185
15186Sha1.prototype._update = function (M) {
15187 var W = this._w
15188
15189 var a = this._a
15190 var b = this._b
15191 var c = this._c
15192 var d = this._d
15193 var e = this._e
15194
15195 var j = 0, k
15196
15197 function calcW () { return rol(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16], 1) }
15198 function loop (w, f) {
15199 W[j] = w
15200
15201 var t = rol(a, 5) + f + e + w + k
15202
15203 e = d
15204 d = c
15205 c = rol(b, 30)
15206 b = a
15207 a = t
15208 j++
15209 }
15210
15211 k = 1518500249
15212 while (j < 16) loop(M.readInt32BE(j * 4), (b & c) | ((~b) & d))
15213 while (j < 20) loop(calcW(), (b & c) | ((~b) & d))
15214 k = 1859775393
15215 while (j < 40) loop(calcW(), b ^ c ^ d)
15216 k = -1894007588
15217 while (j < 60) loop(calcW(), (b & c) | (b & d) | (c & d))
15218 k = -899497514
15219 while (j < 80) loop(calcW(), b ^ c ^ d)
15220
15221 this._a = (a + this._a) | 0
15222 this._b = (b + this._b) | 0
15223 this._c = (c + this._c) | 0
15224 this._d = (d + this._d) | 0
15225 this._e = (e + this._e) | 0
15226}
15227
15228Sha1.prototype._hash = function () {
15229 var H = new Buffer(20)
15230
15231 H.writeInt32BE(this._a | 0, 0)
15232 H.writeInt32BE(this._b | 0, 4)
15233 H.writeInt32BE(this._c | 0, 8)
15234 H.writeInt32BE(this._d | 0, 12)
15235 H.writeInt32BE(this._e | 0, 16)
15236
15237 return H
15238}
15239
15240module.exports = Sha1
15241
15242}).call(this,require("buffer").Buffer)
15243},{"./hash":37,"buffer":7,"inherits":35}],41:[function(require,module,exports){
15244(function (Buffer){
15245/**
15246 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
15247 * in FIPS 180-2
15248 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
15249 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
15250 *
15251 */
15252
15253var inherits = require('inherits')
15254var Sha256 = require('./sha256')
15255var Hash = require('./hash')
15256
15257var W = new Array(64)
15258
15259function Sha224 () {
15260 this.init()
15261
15262 this._w = W // new Array(64)
15263
15264 Hash.call(this, 64, 56)
15265}
15266
15267inherits(Sha224, Sha256)
15268
15269Sha224.prototype.init = function () {
15270 this._a = 0xc1059ed8 | 0
15271 this._b = 0x367cd507 | 0
15272 this._c = 0x3070dd17 | 0
15273 this._d = 0xf70e5939 | 0
15274 this._e = 0xffc00b31 | 0
15275 this._f = 0x68581511 | 0
15276 this._g = 0x64f98fa7 | 0
15277 this._h = 0xbefa4fa4 | 0
15278
15279 return this
15280}
15281
15282Sha224.prototype._hash = function () {
15283 var H = new Buffer(28)
15284
15285 H.writeInt32BE(this._a, 0)
15286 H.writeInt32BE(this._b, 4)
15287 H.writeInt32BE(this._c, 8)
15288 H.writeInt32BE(this._d, 12)
15289 H.writeInt32BE(this._e, 16)
15290 H.writeInt32BE(this._f, 20)
15291 H.writeInt32BE(this._g, 24)
15292
15293 return H
15294}
15295
15296module.exports = Sha224
15297
15298}).call(this,require("buffer").Buffer)
15299},{"./hash":37,"./sha256":42,"buffer":7,"inherits":35}],42:[function(require,module,exports){
15300(function (Buffer){
15301/**
15302 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
15303 * in FIPS 180-2
15304 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
15305 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
15306 *
15307 */
15308
15309var inherits = require('inherits')
15310var Hash = require('./hash')
15311
15312var K = [
15313 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
15314 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
15315 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
15316 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
15317 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
15318 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
15319 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
15320 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
15321 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
15322 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
15323 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
15324 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
15325 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
15326 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
15327 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
15328 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
15329]
15330
15331var W = new Array(64)
15332
15333function Sha256 () {
15334 this.init()
15335
15336 this._w = W // new Array(64)
15337
15338 Hash.call(this, 64, 56)
15339}
15340
15341inherits(Sha256, Hash)
15342
15343Sha256.prototype.init = function () {
15344 this._a = 0x6a09e667 | 0
15345 this._b = 0xbb67ae85 | 0
15346 this._c = 0x3c6ef372 | 0
15347 this._d = 0xa54ff53a | 0
15348 this._e = 0x510e527f | 0
15349 this._f = 0x9b05688c | 0
15350 this._g = 0x1f83d9ab | 0
15351 this._h = 0x5be0cd19 | 0
15352
15353 return this
15354}
15355
15356function S (X, n) {
15357 return (X >>> n) | (X << (32 - n))
15358}
15359
15360function R (X, n) {
15361 return (X >>> n)
15362}
15363
15364function Ch (x, y, z) {
15365 return ((x & y) ^ ((~x) & z))
15366}
15367
15368function Maj (x, y, z) {
15369 return ((x & y) ^ (x & z) ^ (y & z))
15370}
15371
15372function Sigma0256 (x) {
15373 return (S(x, 2) ^ S(x, 13) ^ S(x, 22))
15374}
15375
15376function Sigma1256 (x) {
15377 return (S(x, 6) ^ S(x, 11) ^ S(x, 25))
15378}
15379
15380function Gamma0256 (x) {
15381 return (S(x, 7) ^ S(x, 18) ^ R(x, 3))
15382}
15383
15384function Gamma1256 (x) {
15385 return (S(x, 17) ^ S(x, 19) ^ R(x, 10))
15386}
15387
15388Sha256.prototype._update = function (M) {
15389 var W = this._w
15390
15391 var a = this._a | 0
15392 var b = this._b | 0
15393 var c = this._c | 0
15394 var d = this._d | 0
15395 var e = this._e | 0
15396 var f = this._f | 0
15397 var g = this._g | 0
15398 var h = this._h | 0
15399
15400 var j = 0
15401
15402 function calcW () { return Gamma1256(W[j - 2]) + W[j - 7] + Gamma0256(W[j - 15]) + W[j - 16] }
15403 function loop (w) {
15404 W[j] = w
15405
15406 var T1 = h + Sigma1256(e) + Ch(e, f, g) + K[j] + w
15407 var T2 = Sigma0256(a) + Maj(a, b, c)
15408
15409 h = g
15410 g = f
15411 f = e
15412 e = d + T1
15413 d = c
15414 c = b
15415 b = a
15416 a = T1 + T2
15417
15418 j++
15419 }
15420
15421 while (j < 16) loop(M.readInt32BE(j * 4))
15422 while (j < 64) loop(calcW())
15423
15424 this._a = (a + this._a) | 0
15425 this._b = (b + this._b) | 0
15426 this._c = (c + this._c) | 0
15427 this._d = (d + this._d) | 0
15428 this._e = (e + this._e) | 0
15429 this._f = (f + this._f) | 0
15430 this._g = (g + this._g) | 0
15431 this._h = (h + this._h) | 0
15432}
15433
15434Sha256.prototype._hash = function () {
15435 var H = new Buffer(32)
15436
15437 H.writeInt32BE(this._a, 0)
15438 H.writeInt32BE(this._b, 4)
15439 H.writeInt32BE(this._c, 8)
15440 H.writeInt32BE(this._d, 12)
15441 H.writeInt32BE(this._e, 16)
15442 H.writeInt32BE(this._f, 20)
15443 H.writeInt32BE(this._g, 24)
15444 H.writeInt32BE(this._h, 28)
15445
15446 return H
15447}
15448
15449module.exports = Sha256
15450
15451}).call(this,require("buffer").Buffer)
15452},{"./hash":37,"buffer":7,"inherits":35}],43:[function(require,module,exports){
15453(function (Buffer){
15454var inherits = require('inherits')
15455var SHA512 = require('./sha512')
15456var Hash = require('./hash')
15457
15458var W = new Array(160)
15459
15460function Sha384 () {
15461 this.init()
15462 this._w = W
15463
15464 Hash.call(this, 128, 112)
15465}
15466
15467inherits(Sha384, SHA512)
15468
15469Sha384.prototype.init = function () {
15470 this._a = 0xcbbb9d5d | 0
15471 this._b = 0x629a292a | 0
15472 this._c = 0x9159015a | 0
15473 this._d = 0x152fecd8 | 0
15474 this._e = 0x67332667 | 0
15475 this._f = 0x8eb44a87 | 0
15476 this._g = 0xdb0c2e0d | 0
15477 this._h = 0x47b5481d | 0
15478
15479 this._al = 0xc1059ed8 | 0
15480 this._bl = 0x367cd507 | 0
15481 this._cl = 0x3070dd17 | 0
15482 this._dl = 0xf70e5939 | 0
15483 this._el = 0xffc00b31 | 0
15484 this._fl = 0x68581511 | 0
15485 this._gl = 0x64f98fa7 | 0
15486 this._hl = 0xbefa4fa4 | 0
15487
15488 return this
15489}
15490
15491Sha384.prototype._hash = function () {
15492 var H = new Buffer(48)
15493
15494 function writeInt64BE (h, l, offset) {
15495 H.writeInt32BE(h, offset)
15496 H.writeInt32BE(l, offset + 4)
15497 }
15498
15499 writeInt64BE(this._a, this._al, 0)
15500 writeInt64BE(this._b, this._bl, 8)
15501 writeInt64BE(this._c, this._cl, 16)
15502 writeInt64BE(this._d, this._dl, 24)
15503 writeInt64BE(this._e, this._el, 32)
15504 writeInt64BE(this._f, this._fl, 40)
15505
15506 return H
15507}
15508
15509module.exports = Sha384
15510
15511}).call(this,require("buffer").Buffer)
15512},{"./hash":37,"./sha512":44,"buffer":7,"inherits":35}],44:[function(require,module,exports){
15513(function (Buffer){
15514var inherits = require('inherits')
15515var Hash = require('./hash')
15516
15517var K = [
15518 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
15519 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
15520 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
15521 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
15522 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
15523 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
15524 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
15525 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
15526 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
15527 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
15528 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
15529 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
15530 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
15531 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
15532 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
15533 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
15534 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
15535 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
15536 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
15537 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
15538 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
15539 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
15540 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
15541 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
15542 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
15543 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
15544 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
15545 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
15546 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
15547 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
15548 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
15549 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
15550 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
15551 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
15552 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
15553 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
15554 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
15555 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
15556 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
15557 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
15558]
15559
15560var W = new Array(160)
15561
15562function Sha512 () {
15563 this.init()
15564 this._w = W
15565
15566 Hash.call(this, 128, 112)
15567}
15568
15569inherits(Sha512, Hash)
15570
15571Sha512.prototype.init = function () {
15572 this._a = 0x6a09e667 | 0
15573 this._b = 0xbb67ae85 | 0
15574 this._c = 0x3c6ef372 | 0
15575 this._d = 0xa54ff53a | 0
15576 this._e = 0x510e527f | 0
15577 this._f = 0x9b05688c | 0
15578 this._g = 0x1f83d9ab | 0
15579 this._h = 0x5be0cd19 | 0
15580
15581 this._al = 0xf3bcc908 | 0
15582 this._bl = 0x84caa73b | 0
15583 this._cl = 0xfe94f82b | 0
15584 this._dl = 0x5f1d36f1 | 0
15585 this._el = 0xade682d1 | 0
15586 this._fl = 0x2b3e6c1f | 0
15587 this._gl = 0xfb41bd6b | 0
15588 this._hl = 0x137e2179 | 0
15589
15590 return this
15591}
15592
15593function S (X, Xl, n) {
15594 return (X >>> n) | (Xl << (32 - n))
15595}
15596
15597function Ch (x, y, z) {
15598 return ((x & y) ^ ((~x) & z))
15599}
15600
15601function Maj (x, y, z) {
15602 return ((x & y) ^ (x & z) ^ (y & z))
15603}
15604
15605Sha512.prototype._update = function (M) {
15606 var W = this._w
15607
15608 var a = this._a | 0
15609 var b = this._b | 0
15610 var c = this._c | 0
15611 var d = this._d | 0
15612 var e = this._e | 0
15613 var f = this._f | 0
15614 var g = this._g | 0
15615 var h = this._h | 0
15616
15617 var al = this._al | 0
15618 var bl = this._bl | 0
15619 var cl = this._cl | 0
15620 var dl = this._dl | 0
15621 var el = this._el | 0
15622 var fl = this._fl | 0
15623 var gl = this._gl | 0
15624 var hl = this._hl | 0
15625
15626 var i = 0, j = 0
15627 var Wi, Wil
15628 function calcW () {
15629 var x = W[j - 15 * 2]
15630 var xl = W[j - 15 * 2 + 1]
15631 var gamma0 = S(x, xl, 1) ^ S(x, xl, 8) ^ (x >>> 7)
15632 var gamma0l = S(xl, x, 1) ^ S(xl, x, 8) ^ S(xl, x, 7)
15633
15634 x = W[j - 2 * 2]
15635 xl = W[j - 2 * 2 + 1]
15636 var gamma1 = S(x, xl, 19) ^ S(xl, x, 29) ^ (x >>> 6)
15637 var gamma1l = S(xl, x, 19) ^ S(x, xl, 29) ^ S(xl, x, 6)
15638
15639 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
15640 var Wi7 = W[j - 7 * 2]
15641 var Wi7l = W[j - 7 * 2 + 1]
15642
15643 var Wi16 = W[j - 16 * 2]
15644 var Wi16l = W[j - 16 * 2 + 1]
15645
15646 Wil = gamma0l + Wi7l
15647 Wi = gamma0 + Wi7 + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0)
15648 Wil = Wil + gamma1l
15649 Wi = Wi + gamma1 + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0)
15650 Wil = Wil + Wi16l
15651 Wi = Wi + Wi16 + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0)
15652 }
15653
15654 function loop () {
15655 W[j] = Wi
15656 W[j + 1] = Wil
15657
15658 var maj = Maj(a, b, c)
15659 var majl = Maj(al, bl, cl)
15660
15661 var sigma0h = S(a, al, 28) ^ S(al, a, 2) ^ S(al, a, 7)
15662 var sigma0l = S(al, a, 28) ^ S(a, al, 2) ^ S(a, al, 7)
15663 var sigma1h = S(e, el, 14) ^ S(e, el, 18) ^ S(el, e, 9)
15664 var sigma1l = S(el, e, 14) ^ S(el, e, 18) ^ S(e, el, 9)
15665
15666 // t1 = h + sigma1 + ch + K[i] + W[i]
15667 var Ki = K[j]
15668 var Kil = K[j + 1]
15669
15670 var ch = Ch(e, f, g)
15671 var chl = Ch(el, fl, gl)
15672
15673 var t1l = hl + sigma1l
15674 var t1 = h + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0)
15675 t1l = t1l + chl
15676 t1 = t1 + ch + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0)
15677 t1l = t1l + Kil
15678 t1 = t1 + Ki + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0)
15679 t1l = t1l + Wil
15680 t1 = t1 + Wi + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0)
15681
15682 // t2 = sigma0 + maj
15683 var t2l = sigma0l + majl
15684 var t2 = sigma0h + maj + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0)
15685
15686 h = g
15687 hl = gl
15688 g = f
15689 gl = fl
15690 f = e
15691 fl = el
15692 el = (dl + t1l) | 0
15693 e = (d + t1 + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
15694 d = c
15695 dl = cl
15696 c = b
15697 cl = bl
15698 b = a
15699 bl = al
15700 al = (t1l + t2l) | 0
15701 a = (t1 + t2 + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0
15702
15703 i++
15704 j += 2
15705 }
15706
15707 while (i < 16) {
15708 Wi = M.readInt32BE(j * 4)
15709 Wil = M.readInt32BE(j * 4 + 4)
15710
15711 loop()
15712 }
15713
15714 while (i < 80) {
15715 calcW()
15716 loop()
15717 }
15718
15719 this._al = (this._al + al) | 0
15720 this._bl = (this._bl + bl) | 0
15721 this._cl = (this._cl + cl) | 0
15722 this._dl = (this._dl + dl) | 0
15723 this._el = (this._el + el) | 0
15724 this._fl = (this._fl + fl) | 0
15725 this._gl = (this._gl + gl) | 0
15726 this._hl = (this._hl + hl) | 0
15727
15728 this._a = (this._a + a + ((this._al >>> 0) < (al >>> 0) ? 1 : 0)) | 0
15729 this._b = (this._b + b + ((this._bl >>> 0) < (bl >>> 0) ? 1 : 0)) | 0
15730 this._c = (this._c + c + ((this._cl >>> 0) < (cl >>> 0) ? 1 : 0)) | 0
15731 this._d = (this._d + d + ((this._dl >>> 0) < (dl >>> 0) ? 1 : 0)) | 0
15732 this._e = (this._e + e + ((this._el >>> 0) < (el >>> 0) ? 1 : 0)) | 0
15733 this._f = (this._f + f + ((this._fl >>> 0) < (fl >>> 0) ? 1 : 0)) | 0
15734 this._g = (this._g + g + ((this._gl >>> 0) < (gl >>> 0) ? 1 : 0)) | 0
15735 this._h = (this._h + h + ((this._hl >>> 0) < (hl >>> 0) ? 1 : 0)) | 0
15736}
15737
15738Sha512.prototype._hash = function () {
15739 var H = new Buffer(64)
15740
15741 function writeInt64BE (h, l, offset) {
15742 H.writeInt32BE(h, offset)
15743 H.writeInt32BE(l, offset + 4)
15744 }
15745
15746 writeInt64BE(this._a, this._al, 0)
15747 writeInt64BE(this._b, this._bl, 8)
15748 writeInt64BE(this._c, this._cl, 16)
15749 writeInt64BE(this._d, this._dl, 24)
15750 writeInt64BE(this._e, this._el, 32)
15751 writeInt64BE(this._f, this._fl, 40)
15752 writeInt64BE(this._g, this._gl, 48)
15753 writeInt64BE(this._h, this._hl, 56)
15754
15755 return H
15756}
15757
15758module.exports = Sha512
15759
15760}).call(this,require("buffer").Buffer)
15761},{"./hash":37,"buffer":7,"inherits":35}],45:[function(require,module,exports){
15762(function (Buffer){
15763'use strict';
15764var createHash = require('create-hash/browser');
15765var inherits = require('inherits')
15766
15767var Transform = require('stream').Transform
15768
15769var ZEROS = new Buffer(128)
15770ZEROS.fill(0)
15771
15772function Hmac(alg, key) {
15773 Transform.call(this)
15774
15775 if (typeof key === 'string') {
15776 key = new Buffer(key)
15777 }
15778
15779 var blocksize = (alg === 'sha512' || alg === 'sha384') ? 128 : 64
15780
15781 this._alg = alg
15782 this._key = key
15783
15784 if (key.length > blocksize) {
15785 key = createHash(alg).update(key).digest()
15786
15787 } else if (key.length < blocksize) {
15788 key = Buffer.concat([key, ZEROS], blocksize)
15789 }
15790
15791 var ipad = this._ipad = new Buffer(blocksize)
15792 var opad = this._opad = new Buffer(blocksize)
15793
15794 for (var i = 0; i < blocksize; i++) {
15795 ipad[i] = key[i] ^ 0x36
15796 opad[i] = key[i] ^ 0x5C
15797 }
15798
15799 this._hash = createHash(alg).update(ipad)
15800}
15801
15802inherits(Hmac, Transform)
15803
15804Hmac.prototype.update = function (data, enc) {
15805 this._hash.update(data, enc)
15806
15807 return this
15808}
15809
15810Hmac.prototype._transform = function (data, _, next) {
15811 this._hash.update(data)
15812
15813 next()
15814}
15815
15816Hmac.prototype._flush = function (next) {
15817 this.push(this.digest())
15818
15819 next()
15820}
15821
15822Hmac.prototype.digest = function (enc) {
15823 var h = this._hash.digest()
15824
15825 return createHash(this._alg).update(this._opad).update(h).digest(enc)
15826}
15827
15828module.exports = function createHmac(alg, key) {
15829 return new Hmac(alg, key)
15830}
15831
15832}).call(this,require("buffer").Buffer)
15833},{"buffer":7,"create-hash/browser":32,"inherits":46,"stream":26}],46:[function(require,module,exports){
15834arguments[4][12][0].apply(exports,arguments)
15835},{"dup":12}],47:[function(require,module,exports){
15836var assert = require('assert')
15837var BigInteger = require('bigi')
15838
15839var Point = require('./point')
15840
15841function Curve(p, a, b, Gx, Gy, n, h) {
15842 this.p = p
15843 this.a = a
15844 this.b = b
15845 this.G = Point.fromAffine(this, Gx, Gy)
15846 this.n = n
15847 this.h = h
15848
15849 this.infinity = new Point(this, null, null, BigInteger.ZERO)
15850
15851 // result caching
15852 this.pOverFour = p.add(BigInteger.ONE).shiftRight(2)
15853}
15854
15855Curve.prototype.pointFromX = function(isOdd, x) {
15856 var alpha = x.pow(3).add(this.a.multiply(x)).add(this.b).mod(this.p)
15857 var beta = alpha.modPow(this.pOverFour, this.p) // XXX: not compatible with all curves
15858
15859 var y = beta
15860 if (beta.isEven() ^ !isOdd) {
15861 y = this.p.subtract(y) // -y % p
15862 }
15863
15864 return Point.fromAffine(this, x, y)
15865}
15866
15867Curve.prototype.isInfinity = function(Q) {
15868 if (Q === this.infinity) return true
15869
15870 return Q.z.signum() === 0 && Q.y.signum() !== 0
15871}
15872
15873Curve.prototype.isOnCurve = function(Q) {
15874 if (this.isInfinity(Q)) return true
15875
15876 var x = Q.affineX
15877 var y = Q.affineY
15878 var a = this.a
15879 var b = this.b
15880 var p = this.p
15881
15882 // Check that xQ and yQ are integers in the interval [0, p - 1]
15883 if (x.signum() < 0 || x.compareTo(p) >= 0) return false
15884 if (y.signum() < 0 || y.compareTo(p) >= 0) return false
15885
15886 // and check that y^2 = x^3 + ax + b (mod p)
15887 var lhs = y.square().mod(p)
15888 var rhs = x.pow(3).add(a.multiply(x)).add(b).mod(p)
15889 return lhs.equals(rhs)
15890}
15891
15892/**
15893 * Validate an elliptic curve point.
15894 *
15895 * See SEC 1, section 3.2.2.1: Elliptic Curve Public Key Validation Primitive
15896 */
15897Curve.prototype.validate = function(Q) {
15898 // Check Q != O
15899 assert(!this.isInfinity(Q), 'Point is at infinity')
15900 assert(this.isOnCurve(Q), 'Point is not on the curve')
15901
15902 // Check nQ = O (where Q is a scalar multiple of G)
15903 var nQ = Q.multiply(this.n)
15904 assert(this.isInfinity(nQ), 'Point is not a scalar multiple of G')
15905
15906 return true
15907}
15908
15909module.exports = Curve
15910
15911},{"./point":51,"assert":5,"bigi":3}],48:[function(require,module,exports){
15912module.exports={
15913 "secp128r1": {
15914 "p": "fffffffdffffffffffffffffffffffff",
15915 "a": "fffffffdfffffffffffffffffffffffc",
15916 "b": "e87579c11079f43dd824993c2cee5ed3",
15917 "n": "fffffffe0000000075a30d1b9038a115",
15918 "h": "01",
15919 "Gx": "161ff7528b899b2d0c28607ca52c5b86",
15920 "Gy": "cf5ac8395bafeb13c02da292dded7a83"
15921 },
15922 "secp160k1": {
15923 "p": "fffffffffffffffffffffffffffffffeffffac73",
15924 "a": "00",
15925 "b": "07",
15926 "n": "0100000000000000000001b8fa16dfab9aca16b6b3",
15927 "h": "01",
15928 "Gx": "3b4c382ce37aa192a4019e763036f4f5dd4d7ebb",
15929 "Gy": "938cf935318fdced6bc28286531733c3f03c4fee"
15930 },
15931 "secp160r1": {
15932 "p": "ffffffffffffffffffffffffffffffff7fffffff",
15933 "a": "ffffffffffffffffffffffffffffffff7ffffffc",
15934 "b": "1c97befc54bd7a8b65acf89f81d4d4adc565fa45",
15935 "n": "0100000000000000000001f4c8f927aed3ca752257",
15936 "h": "01",
15937 "Gx": "4a96b5688ef573284664698968c38bb913cbfc82",
15938 "Gy": "23a628553168947d59dcc912042351377ac5fb32"
15939 },
15940 "secp192k1": {
15941 "p": "fffffffffffffffffffffffffffffffffffffffeffffee37",
15942 "a": "00",
15943 "b": "03",
15944 "n": "fffffffffffffffffffffffe26f2fc170f69466a74defd8d",
15945 "h": "01",
15946 "Gx": "db4ff10ec057e9ae26b07d0280b7f4341da5d1b1eae06c7d",
15947 "Gy": "9b2f2f6d9c5628a7844163d015be86344082aa88d95e2f9d"
15948 },
15949 "secp192r1": {
15950 "p": "fffffffffffffffffffffffffffffffeffffffffffffffff",
15951 "a": "fffffffffffffffffffffffffffffffefffffffffffffffc",
15952 "b": "64210519e59c80e70fa7e9ab72243049feb8deecc146b9b1",
15953 "n": "ffffffffffffffffffffffff99def836146bc9b1b4d22831",
15954 "h": "01",
15955 "Gx": "188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012",
15956 "Gy": "07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
15957 },
15958 "secp256k1": {
15959 "p": "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f",
15960 "a": "00",
15961 "b": "07",
15962 "n": "fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141",
15963 "h": "01",
15964 "Gx": "79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798",
15965 "Gy": "483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8"
15966 },
15967 "secp256r1": {
15968 "p": "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff",
15969 "a": "ffffffff00000001000000000000000000000000fffffffffffffffffffffffc",
15970 "b": "5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b",
15971 "n": "ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551",
15972 "h": "01",
15973 "Gx": "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296",
15974 "Gy": "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"
15975 }
15976}
15977
15978},{}],49:[function(require,module,exports){
15979var Point = require('./point')
15980var Curve = require('./curve')
15981
15982var getCurveByName = require('./names')
15983
15984module.exports = {
15985 Curve: Curve,
15986 Point: Point,
15987 getCurveByName: getCurveByName
15988}
15989
15990},{"./curve":47,"./names":50,"./point":51}],50:[function(require,module,exports){
15991var BigInteger = require('bigi')
15992
15993var curves = require('./curves')
15994var Curve = require('./curve')
15995
15996function getCurveByName(name) {
15997 var curve = curves[name]
15998 if (!curve) return null
15999
16000 var p = new BigInteger(curve.p, 16)
16001 var a = new BigInteger(curve.a, 16)
16002 var b = new BigInteger(curve.b, 16)
16003 var n = new BigInteger(curve.n, 16)
16004 var h = new BigInteger(curve.h, 16)
16005 var Gx = new BigInteger(curve.Gx, 16)
16006 var Gy = new BigInteger(curve.Gy, 16)
16007
16008 return new Curve(p, a, b, Gx, Gy, n, h)
16009}
16010
16011module.exports = getCurveByName
16012
16013},{"./curve":47,"./curves":48,"bigi":3}],51:[function(require,module,exports){
16014(function (Buffer){
16015var assert = require('assert')
16016var BigInteger = require('bigi')
16017
16018var THREE = BigInteger.valueOf(3)
16019
16020function Point(curve, x, y, z) {
16021 assert.notStrictEqual(z, undefined, 'Missing Z coordinate')
16022
16023 this.curve = curve
16024 this.x = x
16025 this.y = y
16026 this.z = z
16027 this._zInv = null
16028
16029 this.compressed = true
16030}
16031
16032Object.defineProperty(Point.prototype, 'zInv', {
16033 get: function() {
16034 if (this._zInv === null) {
16035 this._zInv = this.z.modInverse(this.curve.p)
16036 }
16037
16038 return this._zInv
16039 }
16040})
16041
16042Object.defineProperty(Point.prototype, 'affineX', {
16043 get: function() {
16044 return this.x.multiply(this.zInv).mod(this.curve.p)
16045 }
16046})
16047
16048Object.defineProperty(Point.prototype, 'affineY', {
16049 get: function() {
16050 return this.y.multiply(this.zInv).mod(this.curve.p)
16051 }
16052})
16053
16054Point.fromAffine = function(curve, x, y) {
16055 return new Point(curve, x, y, BigInteger.ONE)
16056}
16057
16058Point.prototype.equals = function(other) {
16059 if (other === this) return true
16060 if (this.curve.isInfinity(this)) return this.curve.isInfinity(other)
16061 if (this.curve.isInfinity(other)) return this.curve.isInfinity(this)
16062
16063 // u = Y2 * Z1 - Y1 * Z2
16064 var u = other.y.multiply(this.z).subtract(this.y.multiply(other.z)).mod(this.curve.p)
16065
16066 if (u.signum() !== 0) return false
16067
16068 // v = X2 * Z1 - X1 * Z2
16069 var v = other.x.multiply(this.z).subtract(this.x.multiply(other.z)).mod(this.curve.p)
16070
16071 return v.signum() === 0
16072}
16073
16074Point.prototype.negate = function() {
16075 var y = this.curve.p.subtract(this.y)
16076
16077 return new Point(this.curve, this.x, y, this.z)
16078}
16079
16080Point.prototype.add = function(b) {
16081 if (this.curve.isInfinity(this)) return b
16082 if (this.curve.isInfinity(b)) return this
16083
16084 var x1 = this.x
16085 var y1 = this.y
16086 var x2 = b.x
16087 var y2 = b.y
16088
16089 // u = Y2 * Z1 - Y1 * Z2
16090 var u = y2.multiply(this.z).subtract(y1.multiply(b.z)).mod(this.curve.p)
16091 // v = X2 * Z1 - X1 * Z2
16092 var v = x2.multiply(this.z).subtract(x1.multiply(b.z)).mod(this.curve.p)
16093
16094 if (v.signum() === 0) {
16095 if (u.signum() === 0) {
16096 return this.twice() // this == b, so double
16097 }
16098
16099 return this.curve.infinity // this = -b, so infinity
16100 }
16101
16102 var v2 = v.square()
16103 var v3 = v2.multiply(v)
16104 var x1v2 = x1.multiply(v2)
16105 var zu2 = u.square().multiply(this.z)
16106
16107 // x3 = v * (z2 * (z1 * u^2 - 2 * x1 * v^2) - v^3)
16108 var x3 = zu2.subtract(x1v2.shiftLeft(1)).multiply(b.z).subtract(v3).multiply(v).mod(this.curve.p)
16109 // y3 = z2 * (3 * x1 * u * v^2 - y1 * v^3 - z1 * u^3) + u * v^3
16110 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)
16111 // z3 = v^3 * z1 * z2
16112 var z3 = v3.multiply(this.z).multiply(b.z).mod(this.curve.p)
16113
16114 return new Point(this.curve, x3, y3, z3)
16115}
16116
16117Point.prototype.twice = function() {
16118 if (this.curve.isInfinity(this)) return this
16119 if (this.y.signum() === 0) return this.curve.infinity
16120
16121 var x1 = this.x
16122 var y1 = this.y
16123
16124 var y1z1 = y1.multiply(this.z)
16125 var y1sqz1 = y1z1.multiply(y1).mod(this.curve.p)
16126 var a = this.curve.a
16127
16128 // w = 3 * x1^2 + a * z1^2
16129 var w = x1.square().multiply(THREE)
16130
16131 if (a.signum() !== 0) {
16132 w = w.add(this.z.square().multiply(a))
16133 }
16134
16135 w = w.mod(this.curve.p)
16136 // x3 = 2 * y1 * z1 * (w^2 - 8 * x1 * y1^2 * z1)
16137 var x3 = w.square().subtract(x1.shiftLeft(3).multiply(y1sqz1)).shiftLeft(1).multiply(y1z1).mod(this.curve.p)
16138 // y3 = 4 * y1^2 * z1 * (3 * w * x1 - 2 * y1^2 * z1) - w^3
16139 var y3 = w.multiply(THREE).multiply(x1).subtract(y1sqz1.shiftLeft(1)).shiftLeft(2).multiply(y1sqz1).subtract(w.pow(3)).mod(this.curve.p)
16140 // z3 = 8 * (y1 * z1)^3
16141 var z3 = y1z1.pow(3).shiftLeft(3).mod(this.curve.p)
16142
16143 return new Point(this.curve, x3, y3, z3)
16144}
16145
16146// Simple NAF (Non-Adjacent Form) multiplication algorithm
16147// TODO: modularize the multiplication algorithm
16148Point.prototype.multiply = function(k) {
16149 if (this.curve.isInfinity(this)) return this
16150 if (k.signum() === 0) return this.curve.infinity
16151
16152 var e = k
16153 var h = e.multiply(THREE)
16154
16155 var neg = this.negate()
16156 var R = this
16157
16158 for (var i = h.bitLength() - 2; i > 0; --i) {
16159 R = R.twice()
16160
16161 var hBit = h.testBit(i)
16162 var eBit = e.testBit(i)
16163
16164 if (hBit != eBit) {
16165 R = R.add(hBit ? this : neg)
16166 }
16167 }
16168
16169 return R
16170}
16171
16172// Compute this*j + x*k (simultaneous multiplication)
16173Point.prototype.multiplyTwo = function(j, x, k) {
16174 var i
16175
16176 if (j.bitLength() > k.bitLength())
16177 i = j.bitLength() - 1
16178 else
16179 i = k.bitLength() - 1
16180
16181 var R = this.curve.infinity
16182 var both = this.add(x)
16183
16184 while (i >= 0) {
16185 R = R.twice()
16186
16187 var jBit = j.testBit(i)
16188 var kBit = k.testBit(i)
16189
16190 if (jBit) {
16191 if (kBit) {
16192 R = R.add(both)
16193
16194 } else {
16195 R = R.add(this)
16196 }
16197
16198 } else {
16199 if (kBit) {
16200 R = R.add(x)
16201 }
16202 }
16203 --i
16204 }
16205
16206 return R
16207}
16208
16209Point.prototype.getEncoded = function(compressed) {
16210 if (compressed == undefined) compressed = this.compressed
16211 if (this.curve.isInfinity(this)) return new Buffer('00', 'hex') // Infinity point encoded is simply '00'
16212
16213 var x = this.affineX
16214 var y = this.affineY
16215
16216 var buffer
16217
16218 // Determine size of q in bytes
16219 var byteLength = Math.floor((this.curve.p.bitLength() + 7) / 8)
16220
16221 // 0x02/0x03 | X
16222 if (compressed) {
16223 buffer = new Buffer(1 + byteLength)
16224 buffer.writeUInt8(y.isEven() ? 0x02 : 0x03, 0)
16225
16226 // 0x04 | X | Y
16227 } else {
16228 buffer = new Buffer(1 + byteLength + byteLength)
16229 buffer.writeUInt8(0x04, 0)
16230
16231 y.toBuffer(byteLength).copy(buffer, 1 + byteLength)
16232 }
16233
16234 x.toBuffer(byteLength).copy(buffer, 1)
16235
16236 return buffer
16237}
16238
16239Point.decodeFrom = function(curve, buffer) {
16240 var type = buffer.readUInt8(0)
16241 var compressed = (type !== 4)
16242
16243 var byteLength = Math.floor((curve.p.bitLength() + 7) / 8)
16244 var x = BigInteger.fromBuffer(buffer.slice(1, 1 + byteLength))
16245
16246 var Q
16247 if (compressed) {
16248 assert.equal(buffer.length, byteLength + 1, 'Invalid sequence length')
16249 assert(type === 0x02 || type === 0x03, 'Invalid sequence tag')
16250
16251 var isOdd = (type === 0x03)
16252 Q = curve.pointFromX(isOdd, x)
16253
16254 } else {
16255 assert.equal(buffer.length, 1 + byteLength + byteLength, 'Invalid sequence length')
16256
16257 var y = BigInteger.fromBuffer(buffer.slice(1 + byteLength))
16258 Q = Point.fromAffine(curve, x, y)
16259 }
16260
16261 Q.compressed = compressed
16262 return Q
16263}
16264
16265Point.prototype.toString = function () {
16266 if (this.curve.isInfinity(this)) return '(INFINITY)'
16267
16268 return '(' + this.affineX.toString() + ',' + this.affineY.toString() + ')'
16269}
16270
16271module.exports = Point
16272
16273}).call(this,require("buffer").Buffer)
16274},{"assert":5,"bigi":3,"buffer":7}],52:[function(require,module,exports){
16275(function (process,global,Buffer){
16276'use strict';
16277
16278var crypto = global.crypto || global.msCrypto
16279if(crypto && crypto.getRandomValues) {
16280 module.exports = randomBytes;
16281} else {
16282 module.exports = oldBrowser;
16283}
16284function randomBytes(size, cb) {
16285 var bytes = new Buffer(size); //in browserify, this is an extended Uint8Array
16286 /* This will not work in older browsers.
16287 * See https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues
16288 */
16289
16290 crypto.getRandomValues(bytes);
16291 if (typeof cb === 'function') {
16292 return process.nextTick(function () {
16293 cb(null, bytes);
16294 });
16295 }
16296 return bytes;
16297}
16298function oldBrowser() {
16299 throw new Error(
16300 'secure random number generation not supported by this browser\n'+
16301 'use chrome, FireFox or Internet Explorer 11'
16302 )
16303}
16304
16305}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {},require("buffer").Buffer)
16306},{"_process":14,"buffer":7}],53:[function(require,module,exports){
16307(function (Buffer){
16308'use strict';
16309
16310function getFunctionName(fn) {
16311 return fn.name || fn.toString().match(/function (.*?)\s*\(/)[1];
16312}
16313
16314function getTypeTypeName(type) {
16315 if (nativeTypes.Function(type)) {
16316 type = type.toJSON ? type.toJSON() : getFunctionName(type);
16317 }
16318 if (nativeTypes.Object(type)) return JSON.stringify(type);
16319
16320 return type;
16321}
16322
16323function getValueTypeName(value) {
16324 if (nativeTypes.Null(value)) return '';
16325
16326 return getFunctionName(value.constructor);
16327}
16328
16329function tfErrorString(type, value) {
16330 var typeTypeName = getTypeTypeName(type);
16331 var valueTypeName = getValueTypeName(value);
16332
16333 return 'Expected ' + typeTypeName + ', got ' + (valueTypeName && valueTypeName + ' ') + JSON.stringify(value);
16334}
16335
16336function tfPropertyErrorString(type, name, value) {
16337 return tfErrorString('property \"' + name + '\" of type ' + getTypeTypeName(type), value);
16338}
16339
16340var nativeTypes = {
16341 Array: (function (_Array) {
16342 function Array(_x) {
16343 return _Array.apply(this, arguments);
16344 }
16345
16346 Array.toString = function () {
16347 return _Array.toString();
16348 };
16349
16350 return Array;
16351 })(function (value) {
16352 return value !== null && value !== undefined && value.constructor === Array;
16353 }),
16354 Boolean: function Boolean(value) {
16355 return typeof value === 'boolean';
16356 },
16357 Buffer: (function (_Buffer) {
16358 function Buffer(_x2) {
16359 return _Buffer.apply(this, arguments);
16360 }
16361
16362 Buffer.toString = function () {
16363 return _Buffer.toString();
16364 };
16365
16366 return Buffer;
16367 })(function (value) {
16368 return Buffer.isBuffer(value);
16369 }),
16370 Function: function Function(value) {
16371 return typeof value === 'function';
16372 },
16373 Null: function Null(value) {
16374 return value === undefined || value === null;
16375 },
16376 Number: function Number(value) {
16377 return typeof value === 'number';
16378 },
16379 Object: function Object(value) {
16380 return typeof value === 'object';
16381 },
16382 String: function String(value) {
16383 return typeof value === 'string';
16384 },
16385 '': function _() {
16386 return true;
16387 }
16388};
16389
16390function tJSON(type) {
16391 return type && type.toJSON ? type.toJSON() : type;
16392}
16393
16394function sJSON(type) {
16395 var json = tJSON(type);
16396 return nativeTypes.Object(json) ? JSON.stringify(json) : json;
16397}
16398
16399var otherTypes = {
16400 arrayOf: function arrayOf(type) {
16401 function arrayOf(value, strict) {
16402 try {
16403 return nativeTypes.Array(value) && value.every(function (x) {
16404 return typeforce(type, x, strict);
16405 });
16406 } catch (e) {
16407 return false;
16408 }
16409 }
16410 arrayOf.toJSON = function () {
16411 return [tJSON(type)];
16412 };
16413
16414 return arrayOf;
16415 },
16416
16417 maybe: function maybe(type) {
16418 function maybe(value, strict) {
16419 return nativeTypes.Null(value) || typeforce(type, value, strict);
16420 }
16421 maybe.toJSON = function () {
16422 return '?' + sJSON(type);
16423 };
16424
16425 return maybe;
16426 },
16427
16428 object: function object(type) {
16429 function object(value, strict) {
16430 typeforce(nativeTypes.Object, value, strict);
16431
16432 var propertyName, propertyType, propertyValue;
16433
16434 try {
16435 for (propertyName in type) {
16436 propertyType = type[propertyName];
16437 propertyValue = value[propertyName];
16438
16439 typeforce(propertyType, propertyValue, strict);
16440 }
16441 } catch (e) {
16442 throw new TypeError(tfPropertyErrorString(propertyType, propertyName, propertyValue));
16443 }
16444
16445 if (strict) {
16446 for (propertyName in value) {
16447 if (type[propertyName]) continue;
16448
16449 throw new TypeError('Unexpected property "' + propertyName + '"');
16450 }
16451 }
16452
16453 return true;
16454 }
16455 object.toJSON = function () {
16456 return type;
16457 };
16458
16459 return object;
16460 },
16461
16462 oneOf: function oneOf() {
16463 for (var _len = arguments.length, types = Array(_len), _key = 0; _key < _len; _key++) {
16464 types[_key] = arguments[_key];
16465 }
16466
16467 function oneOf(value, strict) {
16468 return types.some(function (type) {
16469 try {
16470 return typeforce(type, value, strict);
16471 } catch (e) {
16472 return false;
16473 }
16474 });
16475 }
16476 oneOf.toJSON = function () {
16477 return types.map(sJSON).join('|');
16478 };
16479
16480 return oneOf;
16481 },
16482
16483 quacksLike: function quacksLike(type) {
16484 function quacksLike(value, strict) {
16485 return type === getValueTypeName(value);
16486 }
16487 quacksLike.toJSON = function () {
16488 return type;
16489 };
16490
16491 return quacksLike;
16492 },
16493
16494 tuple: function tuple() {
16495 for (var _len2 = arguments.length, types = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
16496 types[_key2] = arguments[_key2];
16497 }
16498
16499 function tuple(value, strict) {
16500 return types.every(function (type, i) {
16501 return typeforce(type, value[i], strict);
16502 });
16503 }
16504 tuple.toJSON = function () {
16505 return '(' + types.map(sJSON).join(', ') + ')';
16506 };
16507
16508 return tuple;
16509 },
16510
16511 value: function value(expected) {
16512 function value(actual) {
16513 return actual === expected;
16514 }
16515 value.toJSON = function () {
16516 return expected;
16517 };
16518
16519 return value;
16520 }
16521};
16522
16523function compile(type) {
16524 if (nativeTypes.String(type)) {
16525 if (type[0] === '?') return otherTypes.maybe(compile(type.slice(1)));
16526
16527 return nativeTypes[type] || otherTypes.quacksLike(type);
16528 } else if (type && nativeTypes.Object(type)) {
16529 if (nativeTypes.Array(type)) return otherTypes.arrayOf(compile(type[0]));
16530
16531 var compiled = {};
16532
16533 for (var propertyName in type) {
16534 compiled[propertyName] = compile(type[propertyName]);
16535 }
16536
16537 return otherTypes.object(compiled);
16538 } else if (nativeTypes.Function(type)) {
16539 return type;
16540 }
16541
16542 return otherTypes.value(type);
16543}
16544
16545function typeforce(_x3, _x4, _x5) {
16546 var _again = true;
16547
16548 _function: while (_again) {
16549 var type = _x3,
16550 value = _x4,
16551 strict = _x5;
16552 _again = false;
16553
16554 if (nativeTypes.Function(type)) {
16555 if (type(value, strict)) return true;
16556
16557 throw new TypeError(tfErrorString(type, value));
16558 }
16559
16560 // JIT
16561 _x3 = compile(type);
16562 _x4 = value;
16563 _x5 = strict;
16564 _again = true;
16565 continue _function;
16566 }
16567}
16568
16569// assign all types to typeforce function
16570var typeName;
16571Object.keys(nativeTypes).forEach(function (typeName) {
16572 var nativeType = nativeTypes[typeName];
16573 nativeType.toJSON = function () {
16574 return typeName;
16575 };
16576
16577 typeforce[typeName] = nativeType;
16578});
16579
16580for (typeName in otherTypes) {
16581 typeforce[typeName] = otherTypes[typeName];
16582}
16583
16584module.exports = typeforce;
16585module.exports.compile = compile;
16586}).call(this,require("buffer").Buffer)
16587},{"buffer":7}],54:[function(require,module,exports){
16588(function (Buffer){
16589var assert = require('assert')
16590var base58check = require('bs58check')
16591var typeForce = require('typeforce')
16592var networks = require('./networks')
16593var scripts = require('./scripts')
16594
16595function findScriptTypeByVersion (version) {
16596 for (var networkName in networks) {
16597 var network = networks[networkName]
16598
16599 if (version === network.pubKeyHash) return 'pubkeyhash'
16600 if (version === network.scriptHash) return 'scripthash'
16601 }
16602}
16603
16604function Address (hash, version) {
16605 typeForce('Buffer', hash)
16606
16607 assert.strictEqual(hash.length, 20, 'Invalid hash length')
16608 assert.strictEqual(version & 0xff, version, 'Invalid version byte')
16609
16610 this.hash = hash
16611 this.version = version
16612}
16613
16614Address.fromBase58Check = function (string) {
16615 var payload = base58check.decode(string)
16616 var version = payload.readUInt8(0)
16617 var hash = payload.slice(1)
16618
16619 return new Address(hash, version)
16620}
16621
16622Address.fromOutputScript = function (script, network) {
16623 network = network || networks.bitcoin
16624
16625 if (scripts.isPubKeyHashOutput(script)) return new Address(script.chunks[2], network.pubKeyHash)
16626 if (scripts.isScriptHashOutput(script)) return new Address(script.chunks[1], network.scriptHash)
16627
16628 assert(false, script.toASM() + ' has no matching Address')
16629}
16630
16631Address.prototype.toBase58Check = function () {
16632 var payload = new Buffer(21)
16633 payload.writeUInt8(this.version, 0)
16634 this.hash.copy(payload, 1)
16635
16636 return base58check.encode(payload)
16637}
16638
16639Address.prototype.toOutputScript = function () {
16640 var scriptType = findScriptTypeByVersion(this.version)
16641
16642 if (scriptType === 'pubkeyhash') return scripts.pubKeyHashOutput(this.hash)
16643 if (scriptType === 'scripthash') return scripts.scriptHashOutput(this.hash)
16644
16645 assert(false, this.toString() + ' has no matching Script')
16646}
16647
16648Address.prototype.toString = Address.prototype.toBase58Check
16649
16650module.exports = Address
16651
16652}).call(this,require("buffer").Buffer)
16653},{"./networks":66,"./scripts":69,"assert":5,"bs58check":31,"buffer":7,"typeforce":53}],55:[function(require,module,exports){
16654var bs58check = require('bs58check')
16655
16656function decode () {
16657 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
16658
16659 return bs58check.decode.apply(undefined, arguments)
16660}
16661
16662function encode () {
16663 console.warn('bs58check will be removed in 2.0.0. require("bs58check") instead.')
16664
16665 return bs58check.encode.apply(undefined, arguments)
16666}
16667
16668module.exports = {
16669 decode: decode,
16670 encode: encode
16671}
16672
16673},{"bs58check":31}],56:[function(require,module,exports){
16674(function (Buffer){
16675var assert = require('assert')
16676var bufferutils = require('./bufferutils')
16677var crypto = require('./crypto')
16678
16679var Transaction = require('./transaction')
16680
16681function Block () {
16682 this.version = 1
16683 this.prevHash = null
16684 this.merkleRoot = null
16685 this.timestamp = 0
16686 this.bits = 0
16687 this.nonce = 0
16688}
16689
16690Block.fromBuffer = function (buffer) {
16691 assert(buffer.length >= 80, 'Buffer too small (< 80 bytes)')
16692
16693 var offset = 0
16694 function readSlice (n) {
16695 offset += n
16696 return buffer.slice(offset - n, offset)
16697 }
16698
16699 function readUInt32 () {
16700 var i = buffer.readUInt32LE(offset)
16701 offset += 4
16702 return i
16703 }
16704
16705 var block = new Block()
16706 block.version = readUInt32()
16707 block.prevHash = readSlice(32)
16708 block.merkleRoot = readSlice(32)
16709 block.timestamp = readUInt32()
16710 block.bits = readUInt32()
16711 block.nonce = readUInt32()
16712
16713 if (buffer.length === 80) return block
16714
16715 function readVarInt () {
16716 var vi = bufferutils.readVarInt(buffer, offset)
16717 offset += vi.size
16718 return vi.number
16719 }
16720
16721 // FIXME: poor performance
16722 function readTransaction () {
16723 var tx = Transaction.fromBuffer(buffer.slice(offset), true)
16724
16725 offset += tx.toBuffer().length
16726 return tx
16727 }
16728
16729 var nTransactions = readVarInt()
16730 block.transactions = []
16731
16732 for (var i = 0; i < nTransactions; ++i) {
16733 var tx = readTransaction()
16734 block.transactions.push(tx)
16735 }
16736
16737 return block
16738}
16739
16740Block.fromHex = function (hex) {
16741 return Block.fromBuffer(new Buffer(hex, 'hex'))
16742}
16743
16744Block.prototype.getHash = function () {
16745 return crypto.hash256(this.toBuffer(true))
16746}
16747
16748Block.prototype.getId = function () {
16749 return bufferutils.reverse(this.getHash()).toString('hex')
16750}
16751
16752Block.prototype.getUTCDate = function () {
16753 var date = new Date(0) // epoch
16754 date.setUTCSeconds(this.timestamp)
16755
16756 return date
16757}
16758
16759Block.prototype.toBuffer = function (headersOnly) {
16760 var buffer = new Buffer(80)
16761
16762 var offset = 0
16763 function writeSlice (slice) {
16764 slice.copy(buffer, offset)
16765 offset += slice.length
16766 }
16767
16768 function writeUInt32 (i) {
16769 buffer.writeUInt32LE(i, offset)
16770 offset += 4
16771 }
16772
16773 writeUInt32(this.version)
16774 writeSlice(this.prevHash)
16775 writeSlice(this.merkleRoot)
16776 writeUInt32(this.timestamp)
16777 writeUInt32(this.bits)
16778 writeUInt32(this.nonce)
16779
16780 if (headersOnly || !this.transactions) return buffer
16781
16782 var txLenBuffer = bufferutils.varIntBuffer(this.transactions.length)
16783 var txBuffers = this.transactions.map(function (tx) {
16784 return tx.toBuffer()
16785 })
16786
16787 return Buffer.concat([buffer, txLenBuffer].concat(txBuffers))
16788}
16789
16790Block.prototype.toHex = function (headersOnly) {
16791 return this.toBuffer(headersOnly).toString('hex')
16792}
16793
16794module.exports = Block
16795
16796}).call(this,require("buffer").Buffer)
16797},{"./bufferutils":57,"./crypto":58,"./transaction":70,"assert":5,"buffer":7}],57:[function(require,module,exports){
16798(function (Buffer){
16799var assert = require('assert')
16800var opcodes = require('./opcodes')
16801
16802// https://github.com/feross/buffer/blob/master/index.js#L1127
16803function verifuint (value, max) {
16804 assert(typeof value === 'number', 'cannot write a non-number as a number')
16805 assert(value >= 0, 'specified a negative value for writing an unsigned value')
16806 assert(value <= max, 'value is larger than maximum value for type')
16807 assert(Math.floor(value) === value, 'value has a fractional component')
16808}
16809
16810function pushDataSize (i) {
16811 return i < opcodes.OP_PUSHDATA1 ? 1
16812 : i < 0xff ? 2
16813 : i < 0xffff ? 3
16814 : 5
16815}
16816
16817function readPushDataInt (buffer, offset) {
16818 var opcode = buffer.readUInt8(offset)
16819 var number, size
16820
16821 // ~6 bit
16822 if (opcode < opcodes.OP_PUSHDATA1) {
16823 number = opcode
16824 size = 1
16825
16826 // 8 bit
16827 } else if (opcode === opcodes.OP_PUSHDATA1) {
16828 if (offset + 2 > buffer.length) return null
16829 number = buffer.readUInt8(offset + 1)
16830 size = 2
16831
16832 // 16 bit
16833 } else if (opcode === opcodes.OP_PUSHDATA2) {
16834 if (offset + 3 > buffer.length) return null
16835 number = buffer.readUInt16LE(offset + 1)
16836 size = 3
16837
16838 // 32 bit
16839 } else {
16840 if (offset + 5 > buffer.length) return null
16841 assert.equal(opcode, opcodes.OP_PUSHDATA4, 'Unexpected opcode')
16842
16843 number = buffer.readUInt32LE(offset + 1)
16844 size = 5
16845 }
16846
16847 return {
16848 opcode: opcode,
16849 number: number,
16850 size: size
16851 }
16852}
16853
16854function readUInt64LE (buffer, offset) {
16855 var a = buffer.readUInt32LE(offset)
16856 var b = buffer.readUInt32LE(offset + 4)
16857 b *= 0x100000000
16858
16859 verifuint(b + a, 0x001fffffffffffff)
16860
16861 return b + a
16862}
16863
16864function readVarInt (buffer, offset) {
16865 var t = buffer.readUInt8(offset)
16866 var number, size
16867
16868 // 8 bit
16869 if (t < 253) {
16870 number = t
16871 size = 1
16872
16873 // 16 bit
16874 } else if (t < 254) {
16875 number = buffer.readUInt16LE(offset + 1)
16876 size = 3
16877
16878 // 32 bit
16879 } else if (t < 255) {
16880 number = buffer.readUInt32LE(offset + 1)
16881 size = 5
16882
16883 // 64 bit
16884 } else {
16885 number = readUInt64LE(buffer, offset + 1)
16886 size = 9
16887 }
16888
16889 return {
16890 number: number,
16891 size: size
16892 }
16893}
16894
16895function writePushDataInt (buffer, number, offset) {
16896 var size = pushDataSize(number)
16897
16898 // ~6 bit
16899 if (size === 1) {
16900 buffer.writeUInt8(number, offset)
16901
16902 // 8 bit
16903 } else if (size === 2) {
16904 buffer.writeUInt8(opcodes.OP_PUSHDATA1, offset)
16905 buffer.writeUInt8(number, offset + 1)
16906
16907 // 16 bit
16908 } else if (size === 3) {
16909 buffer.writeUInt8(opcodes.OP_PUSHDATA2, offset)
16910 buffer.writeUInt16LE(number, offset + 1)
16911
16912 // 32 bit
16913 } else {
16914 buffer.writeUInt8(opcodes.OP_PUSHDATA4, offset)
16915 buffer.writeUInt32LE(number, offset + 1)
16916 }
16917
16918 return size
16919}
16920
16921function writeUInt64LE (buffer, value, offset) {
16922 verifuint(value, 0x001fffffffffffff)
16923
16924 buffer.writeInt32LE(value & -1, offset)
16925 buffer.writeUInt32LE(Math.floor(value / 0x100000000), offset + 4)
16926}
16927
16928function varIntSize (i) {
16929 return i < 253 ? 1
16930 : i < 0x10000 ? 3
16931 : i < 0x100000000 ? 5
16932 : 9
16933}
16934
16935function writeVarInt (buffer, number, offset) {
16936 var size = varIntSize(number)
16937
16938 // 8 bit
16939 if (size === 1) {
16940 buffer.writeUInt8(number, offset)
16941
16942 // 16 bit
16943 } else if (size === 3) {
16944 buffer.writeUInt8(253, offset)
16945 buffer.writeUInt16LE(number, offset + 1)
16946
16947 // 32 bit
16948 } else if (size === 5) {
16949 buffer.writeUInt8(254, offset)
16950 buffer.writeUInt32LE(number, offset + 1)
16951
16952 // 64 bit
16953 } else {
16954 buffer.writeUInt8(255, offset)
16955 writeUInt64LE(buffer, number, offset + 1)
16956 }
16957
16958 return size
16959}
16960
16961function varIntBuffer (i) {
16962 var size = varIntSize(i)
16963 var buffer = new Buffer(size)
16964 writeVarInt(buffer, i, 0)
16965
16966 return buffer
16967}
16968
16969function reverse (buffer) {
16970 var buffer2 = new Buffer(buffer)
16971 Array.prototype.reverse.call(buffer2)
16972 return buffer2
16973}
16974
16975module.exports = {
16976 pushDataSize: pushDataSize,
16977 readPushDataInt: readPushDataInt,
16978 readUInt64LE: readUInt64LE,
16979 readVarInt: readVarInt,
16980 reverse: reverse,
16981 varIntBuffer: varIntBuffer,
16982 varIntSize: varIntSize,
16983 writePushDataInt: writePushDataInt,
16984 writeUInt64LE: writeUInt64LE,
16985 writeVarInt: writeVarInt
16986}
16987
16988}).call(this,require("buffer").Buffer)
16989},{"./opcodes":67,"assert":5,"buffer":7}],58:[function(require,module,exports){
16990var createHash = require('create-hash')
16991
16992function hash160 (buffer) {
16993 return ripemd160(sha256(buffer))
16994}
16995
16996function hash256 (buffer) {
16997 return sha256(sha256(buffer))
16998}
16999
17000function ripemd160 (buffer) {
17001 return createHash('rmd160').update(buffer).digest()
17002}
17003
17004function sha1 (buffer) {
17005 return createHash('sha1').update(buffer).digest()
17006}
17007
17008function sha256 (buffer) {
17009 return createHash('sha256').update(buffer).digest()
17010}
17011
17012// FIXME: Name not consistent with others
17013var createHmac = require('create-hmac')
17014
17015function HmacSHA256 (buffer, secret) {
17016 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
17017 return createHmac('sha256', secret).update(buffer).digest()
17018}
17019
17020function HmacSHA512 (buffer, secret) {
17021 console.warn('Hmac* functions are deprecated for removal in 2.0.0, use node crypto instead')
17022 return createHmac('sha512', secret).update(buffer).digest()
17023}
17024
17025module.exports = {
17026 ripemd160: ripemd160,
17027 sha1: sha1,
17028 sha256: sha256,
17029 hash160: hash160,
17030 hash256: hash256,
17031 HmacSHA256: HmacSHA256,
17032 HmacSHA512: HmacSHA512
17033}
17034
17035},{"create-hash":32,"create-hmac":45}],59:[function(require,module,exports){
17036(function (Buffer){
17037var assert = require('assert')
17038var createHmac = require('create-hmac')
17039var typeForce = require('typeforce')
17040
17041var BigInteger = require('bigi')
17042var ECSignature = require('./ecsignature')
17043
17044var ZERO = new Buffer([0])
17045var ONE = new Buffer([1])
17046
17047// https://tools.ietf.org/html/rfc6979#section-3.2
17048function deterministicGenerateK (curve, hash, d, checkSig) {
17049 typeForce('Buffer', hash)
17050 typeForce('BigInteger', d)
17051
17052 // FIXME: remove/uncomment for 2.0.0
17053 // typeForce('Function', checkSig)
17054
17055 if (typeof checkSig !== 'function') {
17056 console.warn('deterministicGenerateK requires a checkSig callback in 2.0.0, see #337 for more information')
17057
17058 checkSig = function (k) {
17059 var G = curve.G
17060 var n = curve.n
17061 var e = BigInteger.fromBuffer(hash)
17062
17063 var Q = G.multiply(k)
17064
17065 if (curve.isInfinity(Q))
17066 return false
17067
17068 var r = Q.affineX.mod(n)
17069 if (r.signum() === 0)
17070 return false
17071
17072 var s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
17073 if (s.signum() === 0)
17074 return false
17075
17076 return true
17077 }
17078 }
17079
17080 // sanity check
17081 assert.equal(hash.length, 32, 'Hash must be 256 bit')
17082
17083 var x = d.toBuffer(32)
17084 var k = new Buffer(32)
17085 var v = new Buffer(32)
17086
17087 // Step A, ignored as hash already provided
17088 // Step B
17089 v.fill(1)
17090
17091 // Step C
17092 k.fill(0)
17093
17094 // Step D
17095 k = createHmac('sha256', k)
17096 .update(v)
17097 .update(ZERO)
17098 .update(x)
17099 .update(hash)
17100 .digest()
17101
17102 // Step E
17103 v = createHmac('sha256', k).update(v).digest()
17104
17105 // Step F
17106 k = createHmac('sha256', k)
17107 .update(v)
17108 .update(ONE)
17109 .update(x)
17110 .update(hash)
17111 .digest()
17112
17113 // Step G
17114 v = createHmac('sha256', k).update(v).digest()
17115
17116 // Step H1/H2a, ignored as tlen === qlen (256 bit)
17117 // Step H2b
17118 v = createHmac('sha256', k).update(v).digest()
17119
17120 var T = BigInteger.fromBuffer(v)
17121
17122 // Step H3, repeat until T is within the interval [1, n - 1] and is suitable for ECDSA
17123 while ((T.signum() <= 0) || (T.compareTo(curve.n) >= 0) || !checkSig(T)) {
17124 k = createHmac('sha256', k)
17125 .update(v)
17126 .update(ZERO)
17127 .digest()
17128
17129 v = createHmac('sha256', k).update(v).digest()
17130
17131 // Step H1/H2a, again, ignored as tlen === qlen (256 bit)
17132 // Step H2b again
17133 v = createHmac('sha256', k).update(v).digest()
17134 T = BigInteger.fromBuffer(v)
17135 }
17136
17137 return T
17138}
17139
17140function sign (curve, hash, d) {
17141 var r, s
17142
17143 var e = BigInteger.fromBuffer(hash)
17144 var n = curve.n
17145 var G = curve.G
17146
17147 deterministicGenerateK(curve, hash, d, function (k) {
17148 var Q = G.multiply(k)
17149
17150 if (curve.isInfinity(Q))
17151 return false
17152
17153 r = Q.affineX.mod(n)
17154 if (r.signum() === 0)
17155 return false
17156
17157 s = k.modInverse(n).multiply(e.add(d.multiply(r))).mod(n)
17158 if (s.signum() === 0)
17159 return false
17160
17161 return true
17162 })
17163
17164 var N_OVER_TWO = n.shiftRight(1)
17165
17166 // enforce low S values, see bip62: 'low s values in signatures'
17167 if (s.compareTo(N_OVER_TWO) > 0) {
17168 s = n.subtract(s)
17169 }
17170
17171 return new ECSignature(r, s)
17172}
17173
17174function verifyRaw (curve, e, signature, Q) {
17175 var n = curve.n
17176 var G = curve.G
17177
17178 var r = signature.r
17179 var s = signature.s
17180
17181 // 1.4.1 Enforce r and s are both integers in the interval [1, n − 1]
17182 if (r.signum() <= 0 || r.compareTo(n) >= 0) return false
17183 if (s.signum() <= 0 || s.compareTo(n) >= 0) return false
17184
17185 // c = s^-1 mod n
17186 var c = s.modInverse(n)
17187
17188 // 1.4.4 Compute u1 = es^−1 mod n
17189 // u2 = rs^−1 mod n
17190 var u1 = e.multiply(c).mod(n)
17191 var u2 = r.multiply(c).mod(n)
17192
17193 // 1.4.5 Compute R = (xR, yR) = u1G + u2Q
17194 var R = G.multiplyTwo(u1, Q, u2)
17195 var v = R.affineX.mod(n)
17196
17197 // 1.4.5 (cont.) Enforce R is not at infinity
17198 if (curve.isInfinity(R)) return false
17199
17200 // 1.4.8 If v = r, output "valid", and if v != r, output "invalid"
17201 return v.equals(r)
17202}
17203
17204function verify (curve, hash, signature, Q) {
17205 // 1.4.2 H = Hash(M), already done by the user
17206 // 1.4.3 e = H
17207 var e = BigInteger.fromBuffer(hash)
17208
17209 return verifyRaw(curve, e, signature, Q)
17210}
17211
17212/**
17213 * Recover a public key from a signature.
17214 *
17215 * See SEC 1: Elliptic Curve Cryptography, section 4.1.6, "Public
17216 * Key Recovery Operation".
17217 *
17218 * http://www.secg.org/download/aid-780/sec1-v2.pdf
17219 */
17220function recoverPubKey (curve, e, signature, i) {
17221 assert.strictEqual(i & 3, i, 'Recovery param is more than two bits')
17222
17223 var n = curve.n
17224 var G = curve.G
17225
17226 var r = signature.r
17227 var s = signature.s
17228
17229 assert(r.signum() > 0 && r.compareTo(n) < 0, 'Invalid r value')
17230 assert(s.signum() > 0 && s.compareTo(n) < 0, 'Invalid s value')
17231
17232 // A set LSB signifies that the y-coordinate is odd
17233 var isYOdd = i & 1
17234
17235 // The more significant bit specifies whether we should use the
17236 // first or second candidate key.
17237 var isSecondKey = i >> 1
17238
17239 // 1.1 Let x = r + jn
17240 var x = isSecondKey ? r.add(n) : r
17241 var R = curve.pointFromX(isYOdd, x)
17242
17243 // 1.4 Check that nR is at infinity
17244 var nR = R.multiply(n)
17245 assert(curve.isInfinity(nR), 'nR is not a valid curve point')
17246
17247 // Compute -e from e
17248 var eNeg = e.negate().mod(n)
17249
17250 // 1.6.1 Compute Q = r^-1 (sR - eG)
17251 // Q = r^-1 (sR + -eG)
17252 var rInv = r.modInverse(n)
17253
17254 var Q = R.multiplyTwo(s, G, eNeg).multiply(rInv)
17255 curve.validate(Q)
17256
17257 return Q
17258}
17259
17260/**
17261 * Calculate pubkey extraction parameter.
17262 *
17263 * When extracting a pubkey from a signature, we have to
17264 * distinguish four different cases. Rather than putting this
17265 * burden on the verifier, Bitcoin includes a 2-bit value with the
17266 * signature.
17267 *
17268 * This function simply tries all four cases and returns the value
17269 * that resulted in a successful pubkey recovery.
17270 */
17271function calcPubKeyRecoveryParam (curve, e, signature, Q) {
17272 for (var i = 0; i < 4; i++) {
17273 var Qprime = recoverPubKey(curve, e, signature, i)
17274
17275 // 1.6.2 Verify Q
17276 if (Qprime.equals(Q)) {
17277 return i
17278 }
17279 }
17280
17281 throw new Error('Unable to find valid recovery factor')
17282}
17283
17284module.exports = {
17285 calcPubKeyRecoveryParam: calcPubKeyRecoveryParam,
17286 deterministicGenerateK: deterministicGenerateK,
17287 recoverPubKey: recoverPubKey,
17288 sign: sign,
17289 verify: verify,
17290 verifyRaw: verifyRaw
17291}
17292
17293}).call(this,require("buffer").Buffer)
17294},{"./ecsignature":62,"assert":5,"bigi":3,"buffer":7,"create-hmac":45,"typeforce":53}],60:[function(require,module,exports){
17295(function (Buffer){
17296var assert = require('assert')
17297var base58check = require('bs58check')
17298var ecdsa = require('./ecdsa')
17299var networks = require('./networks')
17300var randomBytes = require('randombytes')
17301var typeForce = require('typeforce')
17302
17303var BigInteger = require('bigi')
17304var ECPubKey = require('./ecpubkey')
17305
17306var ecurve = require('ecurve')
17307var secp256k1 = ecurve.getCurveByName('secp256k1')
17308
17309function ECKey (d, compressed) {
17310 assert(d.signum() > 0, 'Private key must be greater than 0')
17311 assert(d.compareTo(ECKey.curve.n) < 0, 'Private key must be less than the curve order')
17312
17313 var Q = ECKey.curve.G.multiply(d)
17314
17315 this.d = d
17316 this.pub = new ECPubKey(Q, compressed)
17317}
17318
17319// Constants
17320ECKey.curve = secp256k1
17321
17322// Static constructors
17323ECKey.fromWIF = function (string) {
17324 var payload = base58check.decode(string)
17325 var compressed = false
17326
17327 // Ignore the version byte
17328 payload = payload.slice(1)
17329
17330 if (payload.length === 33) {
17331 assert.strictEqual(payload[32], 0x01, 'Invalid compression flag')
17332
17333 // Truncate the compression flag
17334 payload = payload.slice(0, -1)
17335 compressed = true
17336 }
17337
17338 assert.equal(payload.length, 32, 'Invalid WIF payload length')
17339
17340 var d = BigInteger.fromBuffer(payload)
17341 return new ECKey(d, compressed)
17342}
17343
17344ECKey.makeRandom = function (compressed, rng) {
17345 rng = rng || randomBytes
17346
17347 var buffer = rng(32)
17348 typeForce('Buffer', buffer)
17349 assert.equal(buffer.length, 32, 'Expected 256-bit Buffer from RNG')
17350
17351 var d = BigInteger.fromBuffer(buffer)
17352 d = d.mod(ECKey.curve.n)
17353
17354 return new ECKey(d, compressed)
17355}
17356
17357// Export functions
17358ECKey.prototype.toWIF = function (network) {
17359 network = network || networks.bitcoin
17360
17361 var bufferLen = this.pub.compressed ? 34 : 33
17362 var buffer = new Buffer(bufferLen)
17363
17364 buffer.writeUInt8(network.wif, 0)
17365 this.d.toBuffer(32).copy(buffer, 1)
17366
17367 if (this.pub.compressed) {
17368 buffer.writeUInt8(0x01, 33)
17369 }
17370
17371 return base58check.encode(buffer)
17372}
17373
17374// Operations
17375ECKey.prototype.sign = function (hash) {
17376 return ecdsa.sign(ECKey.curve, hash, this.d)
17377}
17378
17379module.exports = ECKey
17380
17381}).call(this,require("buffer").Buffer)
17382},{"./ecdsa":59,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"ecurve":49,"randombytes":52,"typeforce":53}],61:[function(require,module,exports){
17383(function (Buffer){
17384var crypto = require('./crypto')
17385var ecdsa = require('./ecdsa')
17386var typeForce = require('typeforce')
17387var networks = require('./networks')
17388
17389var Address = require('./address')
17390
17391var ecurve = require('ecurve')
17392var secp256k1 = ecurve.getCurveByName('secp256k1')
17393
17394function ECPubKey (Q, compressed) {
17395 if (compressed === undefined) {
17396 compressed = true
17397 }
17398
17399 typeForce('Point', Q)
17400 typeForce('Boolean', compressed)
17401
17402 this.compressed = compressed
17403 this.Q = Q
17404}
17405
17406// Constants
17407ECPubKey.curve = secp256k1
17408
17409// Static constructors
17410ECPubKey.fromBuffer = function (buffer) {
17411 var Q = ecurve.Point.decodeFrom(ECPubKey.curve, buffer)
17412 return new ECPubKey(Q, Q.compressed)
17413}
17414
17415ECPubKey.fromHex = function (hex) {
17416 return ECPubKey.fromBuffer(new Buffer(hex, 'hex'))
17417}
17418
17419// Operations
17420ECPubKey.prototype.getAddress = function (network) {
17421 network = network || networks.bitcoin
17422
17423 return new Address(crypto.hash160(this.toBuffer()), network.pubKeyHash)
17424}
17425
17426ECPubKey.prototype.verify = function (hash, signature) {
17427 return ecdsa.verify(ECPubKey.curve, hash, signature, this.Q)
17428}
17429
17430// Export functions
17431ECPubKey.prototype.toBuffer = function () {
17432 return this.Q.getEncoded(this.compressed)
17433}
17434
17435ECPubKey.prototype.toHex = function () {
17436 return this.toBuffer().toString('hex')
17437}
17438
17439module.exports = ECPubKey
17440
17441}).call(this,require("buffer").Buffer)
17442},{"./address":54,"./crypto":58,"./ecdsa":59,"./networks":66,"buffer":7,"ecurve":49,"typeforce":53}],62:[function(require,module,exports){
17443(function (Buffer){
17444var assert = require('assert')
17445var typeForce = require('typeforce')
17446
17447var BigInteger = require('bigi')
17448
17449function ECSignature (r, s) {
17450 typeForce('BigInteger', r)
17451 typeForce('BigInteger', s)
17452
17453 this.r = r
17454 this.s = s
17455}
17456
17457ECSignature.parseCompact = function (buffer) {
17458 assert.equal(buffer.length, 65, 'Invalid signature length')
17459 var i = buffer.readUInt8(0) - 27
17460
17461 // At most 3 bits
17462 assert.equal(i, i & 7, 'Invalid signature parameter')
17463 var compressed = !!(i & 4)
17464
17465 // Recovery param only
17466 i = i & 3
17467
17468 var r = BigInteger.fromBuffer(buffer.slice(1, 33))
17469 var s = BigInteger.fromBuffer(buffer.slice(33))
17470
17471 return {
17472 compressed: compressed,
17473 i: i,
17474 signature: new ECSignature(r, s)
17475 }
17476}
17477
17478ECSignature.fromDER = function (buffer) {
17479 assert.equal(buffer.readUInt8(0), 0x30, 'Not a DER sequence')
17480 assert.equal(buffer.readUInt8(1), buffer.length - 2, 'Invalid sequence length')
17481 assert.equal(buffer.readUInt8(2), 0x02, 'Expected a DER integer')
17482
17483 var rLen = buffer.readUInt8(3)
17484 assert(rLen > 0, 'R length is zero')
17485
17486 var offset = 4 + rLen
17487 assert.equal(buffer.readUInt8(offset), 0x02, 'Expected a DER integer (2)')
17488
17489 var sLen = buffer.readUInt8(offset + 1)
17490 assert(sLen > 0, 'S length is zero')
17491
17492 var rB = buffer.slice(4, offset)
17493 var sB = buffer.slice(offset + 2)
17494 offset += 2 + sLen
17495
17496 if (rLen > 1 && rB.readUInt8(0) === 0x00) {
17497 assert(rB.readUInt8(1) & 0x80, 'R value excessively padded')
17498 }
17499
17500 if (sLen > 1 && sB.readUInt8(0) === 0x00) {
17501 assert(sB.readUInt8(1) & 0x80, 'S value excessively padded')
17502 }
17503
17504 assert.equal(offset, buffer.length, 'Invalid DER encoding')
17505 var r = BigInteger.fromDERInteger(rB)
17506 var s = BigInteger.fromDERInteger(sB)
17507
17508 assert(r.signum() >= 0, 'R value is negative')
17509 assert(s.signum() >= 0, 'S value is negative')
17510
17511 return new ECSignature(r, s)
17512}
17513
17514// BIP62: 1 byte hashType flag (only 0x01, 0x02, 0x03, 0x81, 0x82 and 0x83 are allowed)
17515ECSignature.parseScriptSignature = function (buffer) {
17516 var hashType = buffer.readUInt8(buffer.length - 1)
17517 var hashTypeMod = hashType & ~0x80
17518
17519 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
17520
17521 return {
17522 signature: ECSignature.fromDER(buffer.slice(0, -1)),
17523 hashType: hashType
17524 }
17525}
17526
17527ECSignature.prototype.toCompact = function (i, compressed) {
17528 if (compressed) {
17529 i += 4
17530 }
17531
17532 i += 27
17533
17534 var buffer = new Buffer(65)
17535 buffer.writeUInt8(i, 0)
17536
17537 this.r.toBuffer(32).copy(buffer, 1)
17538 this.s.toBuffer(32).copy(buffer, 33)
17539
17540 return buffer
17541}
17542
17543ECSignature.prototype.toDER = function () {
17544 var rBa = this.r.toDERInteger()
17545 var sBa = this.s.toDERInteger()
17546
17547 var sequence = []
17548
17549 // INTEGER
17550 sequence.push(0x02, rBa.length)
17551 sequence = sequence.concat(rBa)
17552
17553 // INTEGER
17554 sequence.push(0x02, sBa.length)
17555 sequence = sequence.concat(sBa)
17556
17557 // SEQUENCE
17558 sequence.unshift(0x30, sequence.length)
17559
17560 return new Buffer(sequence)
17561}
17562
17563ECSignature.prototype.toScriptSignature = function (hashType) {
17564 var hashTypeMod = hashType & ~0x80
17565 assert(hashTypeMod > 0x00 && hashTypeMod < 0x04, 'Invalid hashType ' + hashType)
17566
17567 var hashTypeBuffer = new Buffer(1)
17568 hashTypeBuffer.writeUInt8(hashType, 0)
17569
17570 return Buffer.concat([this.toDER(), hashTypeBuffer])
17571}
17572
17573module.exports = ECSignature
17574
17575}).call(this,require("buffer").Buffer)
17576},{"assert":5,"bigi":3,"buffer":7,"typeforce":53}],63:[function(require,module,exports){
17577(function (Buffer){
17578var assert = require('assert')
17579var base58check = require('bs58check')
17580var bcrypto = require('./crypto')
17581var createHmac = require('create-hmac')
17582var typeForce = require('typeforce')
17583var networks = require('./networks')
17584
17585var BigInteger = require('bigi')
17586var ECKey = require('./eckey')
17587var ECPubKey = require('./ecpubkey')
17588
17589var ecurve = require('ecurve')
17590var curve = ecurve.getCurveByName('secp256k1')
17591
17592function findBIP32NetworkByVersion (version) {
17593 for (var name in networks) {
17594 var network = networks[name]
17595
17596 if (version === network.bip32.private || version === network.bip32.public) {
17597 return network
17598 }
17599 }
17600
17601 assert(false, 'Could not find network for ' + version.toString(16))
17602}
17603
17604function HDNode (K, chainCode, network) {
17605 network = network || networks.bitcoin
17606
17607 typeForce('Buffer', chainCode)
17608
17609 assert.equal(chainCode.length, 32, 'Expected chainCode length of 32, got ' + chainCode.length)
17610 assert(network.bip32, 'Unknown BIP32 constants for network')
17611
17612 this.chainCode = chainCode
17613 this.depth = 0
17614 this.index = 0
17615 this.parentFingerprint = 0x00000000
17616 this.network = network
17617
17618 if (K instanceof BigInteger) {
17619 this.privKey = new ECKey(K, true)
17620 this.pubKey = this.privKey.pub
17621 } else if (K instanceof ECKey) {
17622 assert(K.pub.compressed, 'ECKey must be compressed')
17623 this.privKey = K
17624 this.pubKey = K.pub
17625 } else if (K instanceof ECPubKey) {
17626 assert(K.compressed, 'ECPubKey must be compressed')
17627 this.pubKey = K
17628 } else {
17629 this.pubKey = new ECPubKey(K, true)
17630 }
17631}
17632
17633HDNode.MASTER_SECRET = new Buffer('Bitcoin seed')
17634HDNode.HIGHEST_BIT = 0x80000000
17635HDNode.LENGTH = 78
17636
17637HDNode.fromSeedBuffer = function (seed, network) {
17638 typeForce('Buffer', seed)
17639
17640 assert(seed.length >= 16, 'Seed should be at least 128 bits')
17641 assert(seed.length <= 64, 'Seed should be at most 512 bits')
17642
17643 var I = createHmac('sha512', HDNode.MASTER_SECRET).update(seed).digest()
17644 var IL = I.slice(0, 32)
17645 var IR = I.slice(32)
17646
17647 // In case IL is 0 or >= n, the master key is invalid
17648 // This is handled by `new ECKey` in the HDNode constructor
17649 var pIL = BigInteger.fromBuffer(IL)
17650
17651 return new HDNode(pIL, IR, network)
17652}
17653
17654HDNode.fromSeedHex = function (hex, network) {
17655 return HDNode.fromSeedBuffer(new Buffer(hex, 'hex'), network)
17656}
17657
17658HDNode.fromBase58 = function (string, network) {
17659 return HDNode.fromBuffer(base58check.decode(string), network, true)
17660}
17661
17662// FIXME: remove in 2.x.y
17663HDNode.fromBuffer = function (buffer, network, __ignoreDeprecation) {
17664 if (!__ignoreDeprecation) {
17665 console.warn('HDNode.fromBuffer() is deprecated for removal in 2.x.y, use fromBase58 instead')
17666 }
17667
17668 assert.strictEqual(buffer.length, HDNode.LENGTH, 'Invalid buffer length')
17669
17670 // 4 byte: version bytes
17671 var version = buffer.readUInt32BE(0)
17672
17673 if (network) {
17674 assert(version === network.bip32.private || version === network.bip32.public, "Network doesn't match")
17675
17676 // auto-detect
17677 } else {
17678 network = findBIP32NetworkByVersion(version)
17679 }
17680
17681 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ...
17682 var depth = buffer.readUInt8(4)
17683
17684 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
17685 var parentFingerprint = buffer.readUInt32BE(5)
17686 if (depth === 0) {
17687 assert.strictEqual(parentFingerprint, 0x00000000, 'Invalid parent fingerprint')
17688 }
17689
17690 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
17691 // This is encoded in MSB order. (0x00000000 if master key)
17692 var index = buffer.readUInt32BE(9)
17693 assert(depth > 0 || index === 0, 'Invalid index')
17694
17695 // 32 bytes: the chain code
17696 var chainCode = buffer.slice(13, 45)
17697 var data, hd
17698
17699 // 33 bytes: private key data (0x00 + k)
17700 if (version === network.bip32.private) {
17701 assert.strictEqual(buffer.readUInt8(45), 0x00, 'Invalid private key')
17702 data = buffer.slice(46, 78)
17703 var d = BigInteger.fromBuffer(data)
17704 hd = new HDNode(d, chainCode, network)
17705
17706 // 33 bytes: public key data (0x02 + X or 0x03 + X)
17707 } else {
17708 data = buffer.slice(45, 78)
17709 var Q = ecurve.Point.decodeFrom(curve, data)
17710 assert.equal(Q.compressed, true, 'Invalid public key')
17711
17712 // Verify that the X coordinate in the public point corresponds to a point on the curve.
17713 // If not, the extended public key is invalid.
17714 curve.validate(Q)
17715
17716 hd = new HDNode(Q, chainCode, network)
17717 }
17718
17719 hd.depth = depth
17720 hd.index = index
17721 hd.parentFingerprint = parentFingerprint
17722
17723 return hd
17724}
17725
17726// FIXME: remove in 2.x.y
17727HDNode.fromHex = function (hex, network) {
17728 return HDNode.fromBuffer(new Buffer(hex, 'hex'), network)
17729}
17730
17731HDNode.prototype.getIdentifier = function () {
17732 return bcrypto.hash160(this.pubKey.toBuffer())
17733}
17734
17735HDNode.prototype.getFingerprint = function () {
17736 return this.getIdentifier().slice(0, 4)
17737}
17738
17739HDNode.prototype.getAddress = function () {
17740 return this.pubKey.getAddress(this.network)
17741}
17742
17743HDNode.prototype.neutered = function () {
17744 var neutered = new HDNode(this.pubKey.Q, this.chainCode, this.network)
17745 neutered.depth = this.depth
17746 neutered.index = this.index
17747 neutered.parentFingerprint = this.parentFingerprint
17748
17749 return neutered
17750}
17751
17752HDNode.prototype.toBase58 = function (isPrivate) {
17753 return base58check.encode(this.toBuffer(isPrivate, true))
17754}
17755
17756// FIXME: remove in 2.x.y
17757HDNode.prototype.toBuffer = function (isPrivate, __ignoreDeprecation) {
17758 if (isPrivate === undefined) {
17759 isPrivate = !!this.privKey
17760
17761 // FIXME: remove in 2.x.y
17762 } else {
17763 console.warn('isPrivate flag is deprecated, please use the .neutered() method instead')
17764 }
17765
17766 if (!__ignoreDeprecation) {
17767 console.warn('HDNode.toBuffer() is deprecated for removal in 2.x.y, use toBase58 instead')
17768 }
17769
17770 // Version
17771 var version = isPrivate ? this.network.bip32.private : this.network.bip32.public
17772 var buffer = new Buffer(HDNode.LENGTH)
17773
17774 // 4 bytes: version bytes
17775 buffer.writeUInt32BE(version, 0)
17776
17777 // Depth
17778 // 1 byte: depth: 0x00 for master nodes, 0x01 for level-1 descendants, ....
17779 buffer.writeUInt8(this.depth, 4)
17780
17781 // 4 bytes: the fingerprint of the parent's key (0x00000000 if master key)
17782 buffer.writeUInt32BE(this.parentFingerprint, 5)
17783
17784 // 4 bytes: child number. This is the number i in xi = xpar/i, with xi the key being serialized.
17785 // This is encoded in Big endian. (0x00000000 if master key)
17786 buffer.writeUInt32BE(this.index, 9)
17787
17788 // 32 bytes: the chain code
17789 this.chainCode.copy(buffer, 13)
17790
17791 // 33 bytes: the public key or private key data
17792 if (isPrivate) {
17793 // FIXME: remove in 2.x.y
17794 assert(this.privKey, 'Missing private key')
17795
17796 // 0x00 + k for private keys
17797 buffer.writeUInt8(0, 45)
17798 this.privKey.d.toBuffer(32).copy(buffer, 46)
17799 } else {
17800 // X9.62 encoding for public keys
17801 this.pubKey.toBuffer().copy(buffer, 45)
17802 }
17803
17804 return buffer
17805}
17806
17807// FIXME: remove in 2.x.y
17808HDNode.prototype.toHex = function (isPrivate) {
17809 return this.toBuffer(isPrivate).toString('hex')
17810}
17811
17812// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#child-key-derivation-ckd-functions
17813HDNode.prototype.derive = function (index) {
17814 var isHardened = index >= HDNode.HIGHEST_BIT
17815 var indexBuffer = new Buffer(4)
17816 indexBuffer.writeUInt32BE(index, 0)
17817
17818 var data
17819
17820 // Hardened child
17821 if (isHardened) {
17822 assert(this.privKey, 'Could not derive hardened child key')
17823
17824 // data = 0x00 || ser256(kpar) || ser32(index)
17825 data = Buffer.concat([
17826 this.privKey.d.toBuffer(33),
17827 indexBuffer
17828 ])
17829
17830 // Normal child
17831 } else {
17832 // data = serP(point(kpar)) || ser32(index)
17833 // = serP(Kpar) || ser32(index)
17834 data = Buffer.concat([
17835 this.pubKey.toBuffer(),
17836 indexBuffer
17837 ])
17838 }
17839
17840 var I = createHmac('sha512', this.chainCode).update(data).digest()
17841 var IL = I.slice(0, 32)
17842 var IR = I.slice(32)
17843
17844 var pIL = BigInteger.fromBuffer(IL)
17845
17846 // In case parse256(IL) >= n, proceed with the next value for i
17847 if (pIL.compareTo(curve.n) >= 0) {
17848 return this.derive(index + 1)
17849 }
17850
17851 // Private parent key -> private child key
17852 var hd
17853 if (this.privKey) {
17854 // ki = parse256(IL) + kpar (mod n)
17855 var ki = pIL.add(this.privKey.d).mod(curve.n)
17856
17857 // In case ki == 0, proceed with the next value for i
17858 if (ki.signum() === 0) {
17859 return this.derive(index + 1)
17860 }
17861
17862 hd = new HDNode(ki, IR, this.network)
17863
17864 // Public parent key -> public child key
17865 } else {
17866 // Ki = point(parse256(IL)) + Kpar
17867 // = G*IL + Kpar
17868 var Ki = curve.G.multiply(pIL).add(this.pubKey.Q)
17869
17870 // In case Ki is the point at infinity, proceed with the next value for i
17871 if (curve.isInfinity(Ki)) {
17872 return this.derive(index + 1)
17873 }
17874
17875 hd = new HDNode(Ki, IR, this.network)
17876 }
17877
17878 hd.depth = this.depth + 1
17879 hd.index = index
17880 hd.parentFingerprint = this.getFingerprint().readUInt32BE(0)
17881
17882 return hd
17883}
17884
17885HDNode.prototype.deriveHardened = function (index) {
17886 // Only derives hardened private keys by default
17887 return this.derive(index + HDNode.HIGHEST_BIT)
17888}
17889
17890HDNode.prototype.toString = HDNode.prototype.toBase58
17891
17892module.exports = HDNode
17893
17894}).call(this,require("buffer").Buffer)
17895},{"./crypto":58,"./eckey":60,"./ecpubkey":61,"./networks":66,"assert":5,"bigi":3,"bs58check":31,"buffer":7,"create-hmac":45,"ecurve":49,"typeforce":53}],64:[function(require,module,exports){
17896module.exports = {
17897 Address: require('./address'),
17898 base58check: require('./base58check'),
17899 Block: require('./block'),
17900 bufferutils: require('./bufferutils'),
17901 crypto: require('./crypto'),
17902 ecdsa: require('./ecdsa'),
17903 ECKey: require('./eckey'),
17904 ECPubKey: require('./ecpubkey'),
17905 ECSignature: require('./ecsignature'),
17906 Message: require('./message'),
17907 opcodes: require('./opcodes'),
17908 HDNode: require('./hdnode'),
17909 Script: require('./script'),
17910 scripts: require('./scripts'),
17911 Transaction: require('./transaction'),
17912 TransactionBuilder: require('./transaction_builder'),
17913 networks: require('./networks'),
17914 Wallet: require('./wallet')
17915}
17916
17917},{"./address":54,"./base58check":55,"./block":56,"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./eckey":60,"./ecpubkey":61,"./ecsignature":62,"./hdnode":63,"./message":65,"./networks":66,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"./transaction_builder":71,"./wallet":72}],65:[function(require,module,exports){
17918(function (Buffer){
17919var bufferutils = require('./bufferutils')
17920var crypto = require('./crypto')
17921var ecdsa = require('./ecdsa')
17922var networks = require('./networks')
17923
17924var BigInteger = require('bigi')
17925var ECPubKey = require('./ecpubkey')
17926var ECSignature = require('./ecsignature')
17927
17928var ecurve = require('ecurve')
17929var ecparams = ecurve.getCurveByName('secp256k1')
17930
17931function magicHash (message, network) {
17932 var magicPrefix = new Buffer(network.magicPrefix)
17933 var messageBuffer = new Buffer(message)
17934 var lengthBuffer = bufferutils.varIntBuffer(messageBuffer.length)
17935
17936 var buffer = Buffer.concat([magicPrefix, lengthBuffer, messageBuffer])
17937 return crypto.hash256(buffer)
17938}
17939
17940function sign (privKey, message, network) {
17941 network = network || networks.bitcoin
17942
17943 var hash = magicHash(message, network)
17944 var signature = privKey.sign(hash)
17945 var e = BigInteger.fromBuffer(hash)
17946 var i = ecdsa.calcPubKeyRecoveryParam(ecparams, e, signature, privKey.pub.Q)
17947
17948 return signature.toCompact(i, privKey.pub.compressed)
17949}
17950
17951// TODO: network could be implied from address
17952function verify (address, signature, message, network) {
17953 if (!Buffer.isBuffer(signature)) {
17954 signature = new Buffer(signature, 'base64')
17955 }
17956
17957 network = network || networks.bitcoin
17958
17959 var hash = magicHash(message, network)
17960 var parsed = ECSignature.parseCompact(signature)
17961 var e = BigInteger.fromBuffer(hash)
17962 var Q = ecdsa.recoverPubKey(ecparams, e, parsed.signature, parsed.i)
17963
17964 var pubKey = new ECPubKey(Q, parsed.compressed)
17965 return pubKey.getAddress(network).toString() === address.toString()
17966}
17967
17968module.exports = {
17969 magicHash: magicHash,
17970 sign: sign,
17971 verify: verify
17972}
17973
17974}).call(this,require("buffer").Buffer)
17975},{"./bufferutils":57,"./crypto":58,"./ecdsa":59,"./ecpubkey":61,"./ecsignature":62,"./networks":66,"bigi":3,"buffer":7,"ecurve":49}],66:[function(require,module,exports){
17976// https://en.bitcoin.it/wiki/List_of_address_prefixes
17977// Dogecoin BIP32 is a proposed standard: https://bitcointalk.org/index.php?topic=409731
17978
17979var networks = {
17980 bitcoin: {
17981 magicPrefix: '\x18Bitcoin Signed Message:\n',
17982 bip32: {
17983 public: 0x0488b21e,
17984 private: 0x0488ade4
17985 },
17986 pubKeyHash: 0x00,
17987 scriptHash: 0x05,
17988 wif: 0x80,
17989 dustThreshold: 546, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/core.h#L151-L162
17990 feePerKb: 10000, // https://github.com/bitcoin/bitcoin/blob/v0.9.2/src/main.cpp#L53
17991 estimateFee: estimateFee('bitcoin')
17992 },
17993 testnet: {
17994 magicPrefix: '\x18Bitcoin Signed Message:\n',
17995 bip32: {
17996 public: 0x043587cf,
17997 private: 0x04358394
17998 },
17999 pubKeyHash: 0x6f,
18000 scriptHash: 0xc4,
18001 wif: 0xef,
18002 dustThreshold: 546,
18003 feePerKb: 10000,
18004 estimateFee: estimateFee('testnet')
18005 },
18006 litecoin: {
18007 magicPrefix: '\x19Litecoin Signed Message:\n',
18008 bip32: {
18009 public: 0x019da462,
18010 private: 0x019d9cfe
18011 },
18012 pubKeyHash: 0x30,
18013 scriptHash: 0x05,
18014 wif: 0xb0,
18015 dustThreshold: 0, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L360-L365
18016 dustSoftThreshold: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.h#L53
18017 feePerKb: 100000, // https://github.com/litecoin-project/litecoin/blob/v0.8.7.2/src/main.cpp#L56
18018 estimateFee: estimateFee('litecoin')
18019 },
18020 dogecoin: {
18021 magicPrefix: '\x19Dogecoin Signed Message:\n',
18022 bip32: {
18023 public: 0x02facafd,
18024 private: 0x02fac398
18025 },
18026 pubKeyHash: 0x1e,
18027 scriptHash: 0x16,
18028 wif: 0x9e,
18029 dustThreshold: 0, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/core.h#L155-L160
18030 dustSoftThreshold: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.h#L62
18031 feePerKb: 100000000, // https://github.com/dogecoin/dogecoin/blob/v1.7.1/src/main.cpp#L58
18032 estimateFee: estimateFee('dogecoin')
18033 },
18034 viacoin: {
18035 magicPrefix: '\x18Viacoin Signed Message:\n',
18036 bip32: {
18037 public: 0x0488b21e,
18038 private: 0x0488ade4
18039 },
18040 pubKeyHash: 0x47,
18041 scriptHash: 0x21,
18042 wif: 0xc7,
18043 dustThreshold: 560,
18044 dustSoftThreshold: 100000,
18045 feePerKb: 100000, //
18046 estimateFee: estimateFee('viacoin')
18047 },
18048 viacointestnet: {
18049 magicPrefix: '\x18Viacoin Signed Message:\n',
18050 bip32: {
18051 public: 0x043587cf,
18052 private: 0x04358394
18053 },
18054 pubKeyHash: 0x7f,
18055 scriptHash: 0xc4,
18056 wif: 0xff,
18057 dustThreshold: 560,
18058 dustSoftThreshold: 100000,
18059 feePerKb: 100000,
18060 estimateFee: estimateFee('viacointestnet')
18061 },
18062 gamerscoin: {
18063 magicPrefix: '\x19Gamerscoin Signed Message:\n',
18064 bip32: {
18065 public: 0x019da462,
18066 private: 0x019d9cfe
18067 },
18068 pubKeyHash: 0x26,
18069 scriptHash: 0x05,
18070 wif: 0xA6,
18071 dustThreshold: 0, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L358-L363
18072 dustSoftThreshold: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L51
18073 feePerKb: 100000, // https://github.com/gamers-coin/gamers-coinv3/blob/master/src/main.cpp#L54
18074 estimateFee: estimateFee('gamerscoin')
18075 },
18076 jumbucks: {
18077 magicPrefix: '\x19Jumbucks Signed Message:\n',
18078 bip32: {
18079 public: 0x037a689a,
18080 private: 0x037a6460
18081 },
18082 pubKeyHash: 0x2b,
18083 scriptHash: 0x05,
18084 wif: 0xab,
18085 dustThreshold: 0,
18086 dustSoftThreshold: 10000,
18087 feePerKb: 10000,
18088 estimateFee: estimateFee('jumbucks')
18089 },
18090 zetacoin: {
18091 magicPrefix: '\x18Zetacoin Signed Message:\n',
18092 bip32: {
18093 public: 0x0488b21e,
18094 private: 0x0488ade4
18095 },
18096 pubKeyHash: 0x50,
18097 scriptHash: 0x09,
18098 wif: 0xe0,
18099 dustThreshold: 546, // https://github.com/zetacoin/zetacoin/blob/master/src/core.h#L159
18100 feePerKb: 10000, // https://github.com/zetacoin/zetacoin/blob/master/src/main.cpp#L54
18101 estimateFee: estimateFee('zetacoin')
18102 }
18103}
18104
18105function estimateFee (type) {
18106 return function (tx) {
18107 var network = networks[type]
18108 var baseFee = network.feePerKb
18109 var byteSize = tx.toBuffer().length
18110
18111 var fee = baseFee * Math.ceil(byteSize / 1000)
18112 if (network.dustSoftThreshold === undefined) return fee
18113
18114 tx.outs.forEach(function (e) {
18115 if (e.value < network.dustSoftThreshold) {
18116 fee += baseFee
18117 }
18118 })
18119
18120 return fee
18121 }
18122}
18123
18124module.exports = networks
18125
18126},{}],67:[function(require,module,exports){
18127module.exports = {
18128 // push value
18129 OP_FALSE: 0,
18130 OP_0: 0,
18131 OP_PUSHDATA1: 76,
18132 OP_PUSHDATA2: 77,
18133 OP_PUSHDATA4: 78,
18134 OP_1NEGATE: 79,
18135 OP_RESERVED: 80,
18136 OP_1: 81,
18137 OP_TRUE: 81,
18138 OP_2: 82,
18139 OP_3: 83,
18140 OP_4: 84,
18141 OP_5: 85,
18142 OP_6: 86,
18143 OP_7: 87,
18144 OP_8: 88,
18145 OP_9: 89,
18146 OP_10: 90,
18147 OP_11: 91,
18148 OP_12: 92,
18149 OP_13: 93,
18150 OP_14: 94,
18151 OP_15: 95,
18152 OP_16: 96,
18153
18154 // control
18155 OP_NOP: 97,
18156 OP_VER: 98,
18157 OP_IF: 99,
18158 OP_NOTIF: 100,
18159 OP_VERIF: 101,
18160 OP_VERNOTIF: 102,
18161 OP_ELSE: 103,
18162 OP_ENDIF: 104,
18163 OP_VERIFY: 105,
18164 OP_RETURN: 106,
18165
18166 // stack ops
18167 OP_TOALTSTACK: 107,
18168 OP_FROMALTSTACK: 108,
18169 OP_2DROP: 109,
18170 OP_2DUP: 110,
18171 OP_3DUP: 111,
18172 OP_2OVER: 112,
18173 OP_2ROT: 113,
18174 OP_2SWAP: 114,
18175 OP_IFDUP: 115,
18176 OP_DEPTH: 116,
18177 OP_DROP: 117,
18178 OP_DUP: 118,
18179 OP_NIP: 119,
18180 OP_OVER: 120,
18181 OP_PICK: 121,
18182 OP_ROLL: 122,
18183 OP_ROT: 123,
18184 OP_SWAP: 124,
18185 OP_TUCK: 125,
18186
18187 // splice ops
18188 OP_CAT: 126,
18189 OP_SUBSTR: 127,
18190 OP_LEFT: 128,
18191 OP_RIGHT: 129,
18192 OP_SIZE: 130,
18193
18194 // bit logic
18195 OP_INVERT: 131,
18196 OP_AND: 132,
18197 OP_OR: 133,
18198 OP_XOR: 134,
18199 OP_EQUAL: 135,
18200 OP_EQUALVERIFY: 136,
18201 OP_RESERVED1: 137,
18202 OP_RESERVED2: 138,
18203
18204 // numeric
18205 OP_1ADD: 139,
18206 OP_1SUB: 140,
18207 OP_2MUL: 141,
18208 OP_2DIV: 142,
18209 OP_NEGATE: 143,
18210 OP_ABS: 144,
18211 OP_NOT: 145,
18212 OP_0NOTEQUAL: 146,
18213
18214 OP_ADD: 147,
18215 OP_SUB: 148,
18216 OP_MUL: 149,
18217 OP_DIV: 150,
18218 OP_MOD: 151,
18219 OP_LSHIFT: 152,
18220 OP_RSHIFT: 153,
18221
18222 OP_BOOLAND: 154,
18223 OP_BOOLOR: 155,
18224 OP_NUMEQUAL: 156,
18225 OP_NUMEQUALVERIFY: 157,
18226 OP_NUMNOTEQUAL: 158,
18227 OP_LESSTHAN: 159,
18228 OP_GREATERTHAN: 160,
18229 OP_LESSTHANOREQUAL: 161,
18230 OP_GREATERTHANOREQUAL: 162,
18231 OP_MIN: 163,
18232 OP_MAX: 164,
18233
18234 OP_WITHIN: 165,
18235
18236 // crypto
18237 OP_RIPEMD160: 166,
18238 OP_SHA1: 167,
18239 OP_SHA256: 168,
18240 OP_HASH160: 169,
18241 OP_HASH256: 170,
18242 OP_CODESEPARATOR: 171,
18243 OP_CHECKSIG: 172,
18244 OP_CHECKSIGVERIFY: 173,
18245 OP_CHECKMULTISIG: 174,
18246 OP_CHECKMULTISIGVERIFY: 175,
18247
18248 // expansion
18249 OP_NOP1: 176,
18250 OP_NOP2: 177,
18251 OP_NOP3: 178,
18252 OP_NOP4: 179,
18253 OP_NOP5: 180,
18254 OP_NOP6: 181,
18255 OP_NOP7: 182,
18256 OP_NOP8: 183,
18257 OP_NOP9: 184,
18258 OP_NOP10: 185,
18259
18260 // template matching params
18261 OP_PUBKEYHASH: 253,
18262 OP_PUBKEY: 254,
18263 OP_INVALIDOPCODE: 255
18264}
18265
18266},{}],68:[function(require,module,exports){
18267(function (Buffer){
18268var assert = require('assert')
18269var bufferutils = require('./bufferutils')
18270var crypto = require('./crypto')
18271var typeForce = require('typeforce')
18272var opcodes = require('./opcodes')
18273
18274function Script (buffer, chunks) {
18275 typeForce('Buffer', buffer)
18276 typeForce('Array', chunks)
18277
18278 this.buffer = buffer
18279 this.chunks = chunks
18280}
18281
18282Script.fromASM = function (asm) {
18283 var strChunks = asm.split(' ')
18284 var chunks = strChunks.map(function (strChunk) {
18285 // opcode
18286 if (strChunk in opcodes) {
18287 return opcodes[strChunk]
18288
18289 // data chunk
18290 } else {
18291 return new Buffer(strChunk, 'hex')
18292 }
18293 })
18294
18295 return Script.fromChunks(chunks)
18296}
18297
18298Script.fromBuffer = function (buffer) {
18299 var chunks = []
18300 var i = 0
18301
18302 while (i < buffer.length) {
18303 var opcode = buffer.readUInt8(i)
18304
18305 // data chunk
18306 if ((opcode > opcodes.OP_0) && (opcode <= opcodes.OP_PUSHDATA4)) {
18307 var d = bufferutils.readPushDataInt(buffer, i)
18308
18309 // did reading a pushDataInt fail? return non-chunked script
18310 if (d === null) return new Script(buffer, [])
18311 i += d.size
18312
18313 // attempt to read too much data?
18314 if (i + d.number > buffer.length) return new Script(buffer, [])
18315
18316 var data = buffer.slice(i, i + d.number)
18317 i += d.number
18318
18319 chunks.push(data)
18320
18321 // opcode
18322 } else {
18323 chunks.push(opcode)
18324
18325 i += 1
18326 }
18327 }
18328
18329 return new Script(buffer, chunks)
18330}
18331
18332Script.fromChunks = function (chunks) {
18333 typeForce('Array', chunks)
18334
18335 var bufferSize = chunks.reduce(function (accum, chunk) {
18336 // data chunk
18337 if (Buffer.isBuffer(chunk)) {
18338 return accum + bufferutils.pushDataSize(chunk.length) + chunk.length
18339 }
18340
18341 // opcode
18342 return accum + 1
18343 }, 0.0)
18344
18345 var buffer = new Buffer(bufferSize)
18346 var offset = 0
18347
18348 chunks.forEach(function (chunk) {
18349 // data chunk
18350 if (Buffer.isBuffer(chunk)) {
18351 offset += bufferutils.writePushDataInt(buffer, chunk.length, offset)
18352
18353 chunk.copy(buffer, offset)
18354 offset += chunk.length
18355
18356 // opcode
18357 } else {
18358 buffer.writeUInt8(chunk, offset)
18359 offset += 1
18360 }
18361 })
18362
18363 assert.equal(offset, buffer.length, 'Could not decode chunks')
18364 return new Script(buffer, chunks)
18365}
18366
18367Script.fromHex = function (hex) {
18368 return Script.fromBuffer(new Buffer(hex, 'hex'))
18369}
18370
18371Script.EMPTY = Script.fromChunks([])
18372
18373Script.prototype.getHash = function () {
18374 return crypto.hash160(this.buffer)
18375}
18376
18377// FIXME: doesn't work for data chunks, maybe time to use buffertools.compare...
18378Script.prototype.without = function (needle) {
18379 return Script.fromChunks(this.chunks.filter(function (op) {
18380 return op !== needle
18381 }))
18382}
18383
18384var reverseOps = []
18385for (var op in opcodes) {
18386 var code = opcodes[op]
18387 reverseOps[code] = op
18388}
18389
18390Script.prototype.toASM = function () {
18391 return this.chunks.map(function (chunk) {
18392 // data chunk
18393 if (Buffer.isBuffer(chunk)) {
18394 return chunk.toString('hex')
18395
18396 // opcode
18397 } else {
18398 return reverseOps[chunk]
18399 }
18400 }).join(' ')
18401}
18402
18403Script.prototype.toBuffer = function () {
18404 return this.buffer
18405}
18406
18407Script.prototype.toHex = function () {
18408 return this.toBuffer().toString('hex')
18409}
18410
18411module.exports = Script
18412
18413}).call(this,require("buffer").Buffer)
18414},{"./bufferutils":57,"./crypto":58,"./opcodes":67,"assert":5,"buffer":7,"typeforce":53}],69:[function(require,module,exports){
18415(function (Buffer){
18416var assert = require('assert')
18417var ops = require('./opcodes')
18418var typeForce = require('typeforce')
18419
18420var ecurve = require('ecurve')
18421var curve = ecurve.getCurveByName('secp256k1')
18422
18423var ECSignature = require('./ecsignature')
18424var Script = require('./script')
18425
18426function isCanonicalPubKey (buffer) {
18427 if (!Buffer.isBuffer(buffer)) return false
18428
18429 try {
18430 ecurve.Point.decodeFrom(curve, buffer)
18431 } catch (e) {
18432 if (!(e.message.match(/Invalid sequence (length|tag)/)))
18433 throw e
18434
18435 return false
18436 }
18437
18438 return true
18439}
18440
18441function isCanonicalSignature (buffer) {
18442 if (!Buffer.isBuffer(buffer)) return false
18443
18444 try {
18445 ECSignature.parseScriptSignature(buffer)
18446 } catch (e) {
18447 if (!(e.message.match(/Not a DER sequence|Invalid sequence length|Expected a DER integer|R length is zero|S length is zero|R value excessively padded|S value excessively padded|R value is negative|S value is negative|Invalid hashType/))) {
18448 throw e
18449 }
18450
18451 return false
18452 }
18453
18454 return true
18455}
18456
18457function isPubKeyHashInput (script) {
18458 return script.chunks.length === 2 &&
18459 isCanonicalSignature(script.chunks[0]) &&
18460 isCanonicalPubKey(script.chunks[1])
18461}
18462
18463function isPubKeyHashOutput (script) {
18464 return script.chunks.length === 5 &&
18465 script.chunks[0] === ops.OP_DUP &&
18466 script.chunks[1] === ops.OP_HASH160 &&
18467 Buffer.isBuffer(script.chunks[2]) &&
18468 script.chunks[2].length === 20 &&
18469 script.chunks[3] === ops.OP_EQUALVERIFY &&
18470 script.chunks[4] === ops.OP_CHECKSIG
18471}
18472
18473function isPubKeyInput (script) {
18474 return script.chunks.length === 1 &&
18475 isCanonicalSignature(script.chunks[0])
18476}
18477
18478function isPubKeyOutput (script) {
18479 return script.chunks.length === 2 &&
18480 isCanonicalPubKey(script.chunks[0]) &&
18481 script.chunks[1] === ops.OP_CHECKSIG
18482}
18483
18484function isScriptHashInput (script, allowIncomplete) {
18485 if (script.chunks.length < 2) return false
18486
18487 var lastChunk = script.chunks[script.chunks.length - 1]
18488 if (!Buffer.isBuffer(lastChunk)) return false
18489
18490 var scriptSig = Script.fromChunks(script.chunks.slice(0, -1))
18491 var redeemScript = Script.fromBuffer(lastChunk)
18492
18493 // is redeemScript a valid script?
18494 if (redeemScript.chunks.length === 0) return false
18495
18496 return classifyInput(scriptSig, allowIncomplete) === classifyOutput(redeemScript)
18497}
18498
18499function isScriptHashOutput (script) {
18500 return script.chunks.length === 3 &&
18501 script.chunks[0] === ops.OP_HASH160 &&
18502 Buffer.isBuffer(script.chunks[1]) &&
18503 script.chunks[1].length === 20 &&
18504 script.chunks[2] === ops.OP_EQUAL
18505}
18506
18507// allowIncomplete is to account for combining signatures
18508// See https://github.com/bitcoin/bitcoin/blob/f425050546644a36b0b8e0eb2f6934a3e0f6f80f/src/script/sign.cpp#L195-L197
18509function isMultisigInput (script, allowIncomplete) {
18510 if (script.chunks.length < 2) return false
18511 if (script.chunks[0] !== ops.OP_0) return false
18512
18513 if (allowIncomplete) {
18514 return script.chunks.slice(1).every(function (chunk) {
18515 return chunk === ops.OP_0 || isCanonicalSignature(chunk)
18516 })
18517 }
18518
18519 return script.chunks.slice(1).every(isCanonicalSignature)
18520}
18521
18522function isMultisigOutput (script) {
18523 if (script.chunks.length < 4) return false
18524 if (script.chunks[script.chunks.length - 1] !== ops.OP_CHECKMULTISIG) return false
18525
18526 var mOp = script.chunks[0]
18527 if (mOp === ops.OP_0) return false
18528 if (mOp < ops.OP_1) return false
18529 if (mOp > ops.OP_16) return false
18530
18531 var nOp = script.chunks[script.chunks.length - 2]
18532 if (nOp === ops.OP_0) return false
18533 if (nOp < ops.OP_1) return false
18534 if (nOp > ops.OP_16) return false
18535
18536 var m = mOp - (ops.OP_1 - 1)
18537 var n = nOp - (ops.OP_1 - 1)
18538 if (n < m) return false
18539
18540 var pubKeys = script.chunks.slice(1, -2)
18541 if (n < pubKeys.length) return false
18542
18543 return pubKeys.every(isCanonicalPubKey)
18544}
18545
18546function isNullDataOutput (script) {
18547 return script.chunks[0] === ops.OP_RETURN
18548}
18549
18550function classifyOutput (script) {
18551 typeForce('Script', script)
18552
18553 if (isPubKeyHashOutput(script)) {
18554 return 'pubkeyhash'
18555 } else if (isScriptHashOutput(script)) {
18556 return 'scripthash'
18557 } else if (isMultisigOutput(script)) {
18558 return 'multisig'
18559 } else if (isPubKeyOutput(script)) {
18560 return 'pubkey'
18561 } else if (isNullDataOutput(script)) {
18562 return 'nulldata'
18563 }
18564
18565 return 'nonstandard'
18566}
18567
18568function classifyInput (script, allowIncomplete) {
18569 typeForce('Script', script)
18570
18571 if (isPubKeyHashInput(script)) {
18572 return 'pubkeyhash'
18573 } else if (isMultisigInput(script, allowIncomplete)) {
18574 return 'multisig'
18575 } else if (isScriptHashInput(script, allowIncomplete)) {
18576 return 'scripthash'
18577 } else if (isPubKeyInput(script)) {
18578 return 'pubkey'
18579 }
18580
18581 return 'nonstandard'
18582}
18583
18584// Standard Script Templates
18585// {pubKey} OP_CHECKSIG
18586function pubKeyOutput (pubKey) {
18587 return Script.fromChunks([
18588 pubKey.toBuffer(),
18589 ops.OP_CHECKSIG
18590 ])
18591}
18592
18593// OP_DUP OP_HASH160 {pubKeyHash} OP_EQUALVERIFY OP_CHECKSIG
18594function pubKeyHashOutput (hash) {
18595 typeForce('Buffer', hash)
18596
18597 return Script.fromChunks([
18598 ops.OP_DUP,
18599 ops.OP_HASH160,
18600 hash,
18601 ops.OP_EQUALVERIFY,
18602 ops.OP_CHECKSIG
18603 ])
18604}
18605
18606// OP_HASH160 {scriptHash} OP_EQUAL
18607function scriptHashOutput (hash) {
18608 typeForce('Buffer', hash)
18609
18610 return Script.fromChunks([
18611 ops.OP_HASH160,
18612 hash,
18613 ops.OP_EQUAL
18614 ])
18615}
18616
18617// m [pubKeys ...] n OP_CHECKMULTISIG
18618function multisigOutput (m, pubKeys) {
18619 typeForce(['ECPubKey'], pubKeys)
18620
18621 assert(pubKeys.length >= m, 'Not enough pubKeys provided')
18622
18623 var pubKeyBuffers = pubKeys.map(function (pubKey) {
18624 return pubKey.toBuffer()
18625 })
18626 var n = pubKeys.length
18627
18628 return Script.fromChunks([].concat(
18629 (ops.OP_1 - 1) + m,
18630 pubKeyBuffers,
18631 (ops.OP_1 - 1) + n,
18632 ops.OP_CHECKMULTISIG
18633 ))
18634}
18635
18636// {signature}
18637function pubKeyInput (signature) {
18638 typeForce('Buffer', signature)
18639
18640 return Script.fromChunks([signature])
18641}
18642
18643// {signature} {pubKey}
18644function pubKeyHashInput (signature, pubKey) {
18645 typeForce('Buffer', signature)
18646
18647 return Script.fromChunks([signature, pubKey.toBuffer()])
18648}
18649
18650// <scriptSig> {serialized scriptPubKey script}
18651function scriptHashInput (scriptSig, scriptPubKey) {
18652 return Script.fromChunks([].concat(
18653 scriptSig.chunks,
18654 scriptPubKey.toBuffer()
18655 ))
18656}
18657
18658// OP_0 [signatures ...]
18659function multisigInput (signatures, scriptPubKey) {
18660 if (scriptPubKey) {
18661 assert(isMultisigOutput(scriptPubKey))
18662
18663 var mOp = scriptPubKey.chunks[0]
18664 var nOp = scriptPubKey.chunks[scriptPubKey.chunks.length - 2]
18665 var m = mOp - (ops.OP_1 - 1)
18666 var n = nOp - (ops.OP_1 - 1)
18667
18668 assert(signatures.length >= m, 'Not enough signatures provided')
18669 assert(signatures.length <= n, 'Too many signatures provided')
18670 }
18671
18672 return Script.fromChunks([].concat(ops.OP_0, signatures))
18673}
18674
18675function nullDataOutput (data) {
18676 return Script.fromChunks([ops.OP_RETURN, data])
18677}
18678
18679module.exports = {
18680 isCanonicalPubKey: isCanonicalPubKey,
18681 isCanonicalSignature: isCanonicalSignature,
18682 isPubKeyHashInput: isPubKeyHashInput,
18683 isPubKeyHashOutput: isPubKeyHashOutput,
18684 isPubKeyInput: isPubKeyInput,
18685 isPubKeyOutput: isPubKeyOutput,
18686 isScriptHashInput: isScriptHashInput,
18687 isScriptHashOutput: isScriptHashOutput,
18688 isMultisigInput: isMultisigInput,
18689 isMultisigOutput: isMultisigOutput,
18690 isNullDataOutput: isNullDataOutput,
18691 classifyOutput: classifyOutput,
18692 classifyInput: classifyInput,
18693 pubKeyOutput: pubKeyOutput,
18694 pubKeyHashOutput: pubKeyHashOutput,
18695 scriptHashOutput: scriptHashOutput,
18696 multisigOutput: multisigOutput,
18697 pubKeyInput: pubKeyInput,
18698 pubKeyHashInput: pubKeyHashInput,
18699 scriptHashInput: scriptHashInput,
18700 multisigInput: multisigInput,
18701 dataOutput: function (data) {
18702 console.warn('dataOutput is deprecated, use nullDataOutput by 2.0.0')
18703 return nullDataOutput(data)
18704 },
18705 nullDataOutput: nullDataOutput
18706}
18707
18708}).call(this,require("buffer").Buffer)
18709},{"./ecsignature":62,"./opcodes":67,"./script":68,"assert":5,"buffer":7,"ecurve":49,"typeforce":53}],70:[function(require,module,exports){
18710(function (Buffer){
18711var assert = require('assert')
18712var bufferutils = require('./bufferutils')
18713var crypto = require('./crypto')
18714var typeForce = require('typeforce')
18715var opcodes = require('./opcodes')
18716var scripts = require('./scripts')
18717
18718var Address = require('./address')
18719var ECSignature = require('./ecsignature')
18720var Script = require('./script')
18721
18722function Transaction () {
18723 this.version = 1
18724 this.locktime = 0
18725 this.ins = []
18726 this.outs = []
18727}
18728
18729Transaction.DEFAULT_SEQUENCE = 0xffffffff
18730Transaction.SIGHASH_ALL = 0x01
18731Transaction.SIGHASH_NONE = 0x02
18732Transaction.SIGHASH_SINGLE = 0x03
18733Transaction.SIGHASH_ANYONECANPAY = 0x80
18734
18735Transaction.fromBuffer = function (buffer, __disableAssert) {
18736 var offset = 0
18737 function readSlice (n) {
18738 offset += n
18739 return buffer.slice(offset - n, offset)
18740 }
18741
18742 function readUInt32 () {
18743 var i = buffer.readUInt32LE(offset)
18744 offset += 4
18745 return i
18746 }
18747
18748 function readUInt64 () {
18749 var i = bufferutils.readUInt64LE(buffer, offset)
18750 offset += 8
18751 return i
18752 }
18753
18754 function readVarInt () {
18755 var vi = bufferutils.readVarInt(buffer, offset)
18756 offset += vi.size
18757 return vi.number
18758 }
18759
18760 function readScript () {
18761 return Script.fromBuffer(readSlice(readVarInt()))
18762 }
18763
18764 function readGenerationScript () {
18765 return new Script(readSlice(readVarInt()), [])
18766 }
18767
18768 var tx = new Transaction()
18769 tx.version = readUInt32()
18770
18771 var vinLen = readVarInt()
18772 for (var i = 0; i < vinLen; ++i) {
18773 var hash = readSlice(32)
18774
18775 if (Transaction.isCoinbaseHash(hash)) {
18776 tx.ins.push({
18777 hash: hash,
18778 index: readUInt32(),
18779 script: readGenerationScript(),
18780 sequence: readUInt32()
18781 })
18782 } else {
18783 tx.ins.push({
18784 hash: hash,
18785 index: readUInt32(),
18786 script: readScript(),
18787 sequence: readUInt32()
18788 })
18789 }
18790 }
18791
18792 var voutLen = readVarInt()
18793 for (i = 0; i < voutLen; ++i) {
18794 tx.outs.push({
18795 value: readUInt64(),
18796 script: readScript()
18797 })
18798 }
18799
18800 tx.locktime = readUInt32()
18801
18802 if (!__disableAssert) {
18803 assert.equal(offset, buffer.length, 'Transaction has unexpected data')
18804 }
18805
18806 return tx
18807}
18808
18809Transaction.fromHex = function (hex) {
18810 return Transaction.fromBuffer(new Buffer(hex, 'hex'))
18811}
18812
18813Transaction.isCoinbaseHash = function (buffer) {
18814 return Array.prototype.every.call(buffer, function (x) {
18815 return x === 0
18816 })
18817}
18818
18819/**
18820 * Create a new txIn.
18821 *
18822 * Can be called with any of:
18823 *
18824 * - A transaction and an index
18825 * - A transaction hash and an index
18826 *
18827 * Note that this method does not sign the created input.
18828 */
18829Transaction.prototype.addInput = function (hash, index, sequence, script) {
18830 if (sequence === undefined || sequence === null) {
18831 sequence = Transaction.DEFAULT_SEQUENCE
18832 }
18833
18834 script = script || Script.EMPTY
18835
18836 if (typeof hash === 'string') {
18837 // TxId hex is big-endian, we need little-endian
18838 hash = bufferutils.reverse(new Buffer(hash, 'hex'))
18839 } else if (hash instanceof Transaction) {
18840 hash = hash.getHash()
18841 }
18842
18843 typeForce('Buffer', hash)
18844 typeForce('Number', index)
18845 typeForce('Number', sequence)
18846 typeForce('Script', script)
18847
18848 assert.equal(hash.length, 32, 'Expected hash length of 32, got ' + hash.length)
18849
18850 // Add the input and return the input's index
18851 return (this.ins.push({
18852 hash: hash,
18853 index: index,
18854 script: script,
18855 sequence: sequence
18856 }) - 1)
18857}
18858
18859/**
18860 * Create a new txOut.
18861 *
18862 * Can be called with:
18863 *
18864 * - A base58 address string and a value
18865 * - An Address object and a value
18866 * - A scriptPubKey Script and a value
18867 */
18868Transaction.prototype.addOutput = function (scriptPubKey, value) {
18869 // Attempt to get a valid address if it's a base58 address string
18870 if (typeof scriptPubKey === 'string') {
18871 scriptPubKey = Address.fromBase58Check(scriptPubKey)
18872 }
18873
18874 // Attempt to get a valid script if it's an Address object
18875 if (scriptPubKey instanceof Address) {
18876 scriptPubKey = scriptPubKey.toOutputScript()
18877 }
18878
18879 typeForce('Script', scriptPubKey)
18880 typeForce('Number', value)
18881
18882 // Add the output and return the output's index
18883 return (this.outs.push({
18884 script: scriptPubKey,
18885 value: value
18886 }) - 1)
18887}
18888
18889Transaction.prototype.clone = function () {
18890 var newTx = new Transaction()
18891 newTx.version = this.version
18892 newTx.locktime = this.locktime
18893
18894 newTx.ins = this.ins.map(function (txIn) {
18895 return {
18896 hash: txIn.hash,
18897 index: txIn.index,
18898 script: txIn.script,
18899 sequence: txIn.sequence
18900 }
18901 })
18902
18903 newTx.outs = this.outs.map(function (txOut) {
18904 return {
18905 script: txOut.script,
18906 value: txOut.value
18907 }
18908 })
18909
18910 return newTx
18911}
18912
18913/**
18914 * Hash transaction for signing a specific input.
18915 *
18916 * Bitcoin uses a different hash for each signed transaction input. This
18917 * method copies the transaction, makes the necessary changes based on the
18918 * hashType, serializes and finally hashes the result. This hash can then be
18919 * used to sign the transaction input in question.
18920 */
18921Transaction.prototype.hashForSignature = function (inIndex, prevOutScript, hashType) {
18922 // FIXME: remove in 2.x.y
18923 if (arguments[0] instanceof Script) {
18924 console.warn('hashForSignature(prevOutScript, inIndex, ...) has been deprecated. Use hashForSignature(inIndex, prevOutScript, ...)')
18925
18926 // swap the arguments (must be stored in tmp, arguments is special)
18927 var tmp = arguments[0]
18928 inIndex = arguments[1]
18929 prevOutScript = tmp
18930 }
18931
18932 typeForce('Number', inIndex)
18933 typeForce('Script', prevOutScript)
18934 typeForce('Number', hashType)
18935
18936 assert(inIndex >= 0, 'Invalid vin index')
18937 assert(inIndex < this.ins.length, 'Invalid vin index')
18938
18939 var txTmp = this.clone()
18940 var hashScript = prevOutScript.without(opcodes.OP_CODESEPARATOR)
18941
18942 // Blank out other inputs' signatures
18943 txTmp.ins.forEach(function (txIn) {
18944 txIn.script = Script.EMPTY
18945 })
18946 txTmp.ins[inIndex].script = hashScript
18947
18948 var hashTypeModifier = hashType & 0x1f
18949
18950 if (hashTypeModifier === Transaction.SIGHASH_NONE) {
18951 assert(false, 'SIGHASH_NONE not yet supported')
18952 } else if (hashTypeModifier === Transaction.SIGHASH_SINGLE) {
18953 assert(false, 'SIGHASH_SINGLE not yet supported')
18954 }
18955
18956 if (hashType & Transaction.SIGHASH_ANYONECANPAY) {
18957 assert(false, 'SIGHASH_ANYONECANPAY not yet supported')
18958 }
18959
18960 var hashTypeBuffer = new Buffer(4)
18961 hashTypeBuffer.writeInt32LE(hashType, 0)
18962
18963 var buffer = Buffer.concat([txTmp.toBuffer(), hashTypeBuffer])
18964 return crypto.hash256(buffer)
18965}
18966
18967Transaction.prototype.getHash = function () {
18968 return crypto.hash256(this.toBuffer())
18969}
18970
18971Transaction.prototype.getId = function () {
18972 // TxHash is little-endian, we need big-endian
18973 return bufferutils.reverse(this.getHash()).toString('hex')
18974}
18975
18976Transaction.prototype.toBuffer = function () {
18977 function scriptSize (script) {
18978 var length = script.buffer.length
18979
18980 return bufferutils.varIntSize(length) + length
18981 }
18982
18983 var buffer = new Buffer(
18984 8 +
18985 bufferutils.varIntSize(this.ins.length) +
18986 bufferutils.varIntSize(this.outs.length) +
18987 this.ins.reduce(function (sum, input) { return sum + 40 + scriptSize(input.script) }, 0) +
18988 this.outs.reduce(function (sum, output) { return sum + 8 + scriptSize(output.script) }, 0)
18989 )
18990
18991 var offset = 0
18992 function writeSlice (slice) {
18993 slice.copy(buffer, offset)
18994 offset += slice.length
18995 }
18996
18997 function writeUInt32 (i) {
18998 buffer.writeUInt32LE(i, offset)
18999 offset += 4
19000 }
19001
19002 function writeUInt64 (i) {
19003 bufferutils.writeUInt64LE(buffer, i, offset)
19004 offset += 8
19005 }
19006
19007 function writeVarInt (i) {
19008 var n = bufferutils.writeVarInt(buffer, i, offset)
19009 offset += n
19010 }
19011
19012 writeUInt32(this.version)
19013 writeVarInt(this.ins.length)
19014
19015 this.ins.forEach(function (txIn) {
19016 writeSlice(txIn.hash)
19017 writeUInt32(txIn.index)
19018 writeVarInt(txIn.script.buffer.length)
19019 writeSlice(txIn.script.buffer)
19020 writeUInt32(txIn.sequence)
19021 })
19022
19023 writeVarInt(this.outs.length)
19024 this.outs.forEach(function (txOut) {
19025 writeUInt64(txOut.value)
19026 writeVarInt(txOut.script.buffer.length)
19027 writeSlice(txOut.script.buffer)
19028 })
19029
19030 writeUInt32(this.locktime)
19031
19032 return buffer
19033}
19034
19035Transaction.prototype.toHex = function () {
19036 return this.toBuffer().toString('hex')
19037}
19038
19039Transaction.prototype.setInputScript = function (index, script) {
19040 typeForce('Number', index)
19041 typeForce('Script', script)
19042
19043 this.ins[index].script = script
19044}
19045
19046// FIXME: remove in 2.x.y
19047Transaction.prototype.sign = function (index, privKey, hashType) {
19048 console.warn('Transaction.prototype.sign is deprecated. Use TransactionBuilder instead.')
19049
19050 var prevOutScript = privKey.pub.getAddress().toOutputScript()
19051 var signature = this.signInput(index, prevOutScript, privKey, hashType)
19052
19053 var scriptSig = scripts.pubKeyHashInput(signature, privKey.pub)
19054 this.setInputScript(index, scriptSig)
19055}
19056
19057// FIXME: remove in 2.x.y
19058Transaction.prototype.signInput = function (index, prevOutScript, privKey, hashType) {
19059 console.warn('Transaction.prototype.signInput is deprecated. Use TransactionBuilder instead.')
19060
19061 hashType = hashType || Transaction.SIGHASH_ALL
19062
19063 var hash = this.hashForSignature(index, prevOutScript, hashType)
19064 var signature = privKey.sign(hash)
19065
19066 return signature.toScriptSignature(hashType)
19067}
19068
19069// FIXME: remove in 2.x.y
19070Transaction.prototype.validateInput = function (index, prevOutScript, pubKey, buffer) {
19071 console.warn('Transaction.prototype.validateInput is deprecated. Use TransactionBuilder instead.')
19072
19073 var parsed = ECSignature.parseScriptSignature(buffer)
19074 var hash = this.hashForSignature(index, prevOutScript, parsed.hashType)
19075
19076 return pubKey.verify(hash, parsed.signature)
19077}
19078
19079module.exports = Transaction
19080
19081}).call(this,require("buffer").Buffer)
19082},{"./address":54,"./bufferutils":57,"./crypto":58,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"assert":5,"buffer":7,"typeforce":53}],71:[function(require,module,exports){
19083(function (Buffer){
19084var assert = require('assert')
19085var ops = require('./opcodes')
19086var scripts = require('./scripts')
19087
19088var ECPubKey = require('./ecpubkey')
19089var ECSignature = require('./ecsignature')
19090var Script = require('./script')
19091var Transaction = require('./transaction')
19092
19093function extractInput (txIn) {
19094 var redeemScript
19095 var scriptSig = txIn.script
19096 var prevOutScript
19097 var prevOutType = scripts.classifyInput(scriptSig, true)
19098 var scriptType
19099
19100 // Re-classify if scriptHash
19101 if (prevOutType === 'scripthash') {
19102 redeemScript = Script.fromBuffer(scriptSig.chunks.slice(-1)[0])
19103 prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
19104
19105 scriptSig = Script.fromChunks(scriptSig.chunks.slice(0, -1))
19106 scriptType = scripts.classifyInput(scriptSig, true)
19107 } else {
19108 scriptType = prevOutType
19109 }
19110
19111 // Extract hashType, pubKeys and signatures
19112 var hashType, parsed, pubKeys, signatures
19113
19114 switch (scriptType) {
19115 case 'pubkeyhash': {
19116 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
19117 hashType = parsed.hashType
19118 pubKeys = [ECPubKey.fromBuffer(scriptSig.chunks[1])]
19119 signatures = [parsed.signature]
19120 prevOutScript = pubKeys[0].getAddress().toOutputScript()
19121
19122 break
19123 }
19124
19125 case 'pubkey': {
19126 parsed = ECSignature.parseScriptSignature(scriptSig.chunks[0])
19127 hashType = parsed.hashType
19128 signatures = [parsed.signature]
19129
19130 if (redeemScript) {
19131 pubKeys = [ECPubKey.fromBuffer(redeemScript.chunks[0])]
19132 }
19133
19134 break
19135 }
19136
19137 case 'multisig': {
19138 signatures = scriptSig.chunks.slice(1).map(function (chunk) {
19139 if (chunk === ops.OP_0) return chunk
19140
19141 var parsed = ECSignature.parseScriptSignature(chunk)
19142 hashType = parsed.hashType
19143
19144 return parsed.signature
19145 })
19146
19147 if (redeemScript) {
19148 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
19149 }
19150
19151 break
19152 }
19153 }
19154
19155 return {
19156 hashType: hashType,
19157 prevOutScript: prevOutScript,
19158 prevOutType: prevOutType,
19159 pubKeys: pubKeys,
19160 redeemScript: redeemScript,
19161 scriptType: scriptType,
19162 signatures: signatures
19163 }
19164}
19165
19166function TransactionBuilder () {
19167 this.prevTxMap = {}
19168 this.prevOutScripts = {}
19169 this.prevOutTypes = {}
19170
19171 this.inputs = []
19172 this.tx = new Transaction()
19173}
19174
19175TransactionBuilder.fromTransaction = function (transaction) {
19176 var txb = new TransactionBuilder()
19177
19178 // Copy other transaction fields
19179 txb.tx.version = transaction.version
19180 txb.tx.locktime = transaction.locktime
19181
19182 // Extract/add inputs
19183 transaction.ins.forEach(function (txIn) {
19184 txb.addInput(txIn.hash, txIn.index, txIn.sequence)
19185 })
19186
19187 // Extract/add outputs
19188 transaction.outs.forEach(function (txOut) {
19189 txb.addOutput(txOut.script, txOut.value)
19190 })
19191
19192 // Extract/add signatures
19193 txb.inputs = transaction.ins.map(function (txIn) {
19194 // TODO: remove me after testcase added
19195 assert(!Transaction.isCoinbaseHash(txIn.hash), 'coinbase inputs not supported')
19196
19197 // Ignore empty scripts
19198 if (txIn.script.buffer.length === 0) return {}
19199
19200 return extractInput(txIn)
19201 })
19202
19203 return txb
19204}
19205
19206TransactionBuilder.prototype.addInput = function (prevTx, index, sequence, prevOutScript) {
19207 var prevOutHash
19208
19209 // txId
19210 if (typeof prevTx === 'string') {
19211 prevOutHash = new Buffer(prevTx, 'hex')
19212
19213 // TxId hex is big-endian, we want little-endian hash
19214 Array.prototype.reverse.call(prevOutHash)
19215
19216 // Transaction
19217 } else if (prevTx instanceof Transaction) {
19218 prevOutHash = prevTx.getHash()
19219 prevOutScript = prevTx.outs[index].script
19220
19221 // txHash
19222 } else {
19223 prevOutHash = prevTx
19224 }
19225
19226 var input = {}
19227 if (prevOutScript) {
19228 var prevOutType = scripts.classifyOutput(prevOutScript)
19229
19230 // if we can, extract pubKey information
19231 switch (prevOutType) {
19232 case 'multisig': {
19233 input.pubKeys = prevOutScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
19234 break
19235 }
19236
19237 case 'pubkey': {
19238 input.pubKeys = prevOutScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
19239 break
19240 }
19241 }
19242
19243 if (prevOutType !== 'scripthash') {
19244 input.scriptType = prevOutType
19245 }
19246
19247 input.prevOutScript = prevOutScript
19248 input.prevOutType = prevOutType
19249 }
19250
19251 assert(this.inputs.every(function (input2) {
19252 if (input2.hashType === undefined) return true
19253
19254 return input2.hashType & Transaction.SIGHASH_ANYONECANPAY
19255 }), 'No, this would invalidate signatures')
19256
19257 var prevOut = prevOutHash.toString('hex') + ':' + index
19258 assert(!(prevOut in this.prevTxMap), 'Transaction is already an input')
19259
19260 var vin = this.tx.addInput(prevOutHash, index, sequence)
19261 this.inputs[vin] = input
19262 this.prevTxMap[prevOut] = vin
19263
19264 return vin
19265}
19266
19267TransactionBuilder.prototype.addOutput = function (scriptPubKey, value) {
19268 assert(this.inputs.every(function (input) {
19269 if (input.hashType === undefined) return true
19270
19271 return (input.hashType & 0x1f) === Transaction.SIGHASH_SINGLE
19272 }), 'No, this would invalidate signatures')
19273
19274 return this.tx.addOutput(scriptPubKey, value)
19275}
19276
19277TransactionBuilder.prototype.build = function () {
19278 return this.__build(false)
19279}
19280TransactionBuilder.prototype.buildIncomplete = function () {
19281 return this.__build(true)
19282}
19283
19284var canSignTypes = {
19285 'pubkeyhash': true,
19286 'multisig': true,
19287 'pubkey': true
19288}
19289
19290TransactionBuilder.prototype.__build = function (allowIncomplete) {
19291 if (!allowIncomplete) {
19292 assert(this.tx.ins.length > 0, 'Transaction has no inputs')
19293 assert(this.tx.outs.length > 0, 'Transaction has no outputs')
19294 }
19295
19296 var tx = this.tx.clone()
19297
19298 // Create script signatures from signature meta-data
19299 this.inputs.forEach(function (input, index) {
19300 var scriptType = input.scriptType
19301 var scriptSig
19302
19303 if (!allowIncomplete) {
19304 assert(!!scriptType, 'Transaction is not complete')
19305 assert(scriptType in canSignTypes, scriptType + ' not supported')
19306 assert(input.signatures, 'Transaction is missing signatures')
19307 }
19308
19309 if (input.signatures) {
19310 switch (scriptType) {
19311 case 'pubkeyhash': {
19312 var pkhSignature = input.signatures[0].toScriptSignature(input.hashType)
19313 scriptSig = scripts.pubKeyHashInput(pkhSignature, input.pubKeys[0])
19314 break
19315 }
19316
19317 case 'multisig': {
19318 // Array.prototype.map is sparse-compatible
19319 var msSignatures = input.signatures.map(function (signature) {
19320 return signature && signature.toScriptSignature(input.hashType)
19321 })
19322
19323 // fill in blanks with OP_0
19324 if (allowIncomplete) {
19325 for (var i = 0; i < msSignatures.length; ++i) {
19326 if (msSignatures[i]) continue
19327
19328 msSignatures[i] = ops.OP_0
19329 }
19330 } else {
19331 // Array.prototype.filter returns non-sparse array
19332 msSignatures = msSignatures.filter(function (x) { return x })
19333 }
19334
19335 var redeemScript = allowIncomplete ? undefined : input.redeemScript
19336 scriptSig = scripts.multisigInput(msSignatures, redeemScript)
19337 break
19338 }
19339
19340 case 'pubkey': {
19341 var pkSignature = input.signatures[0].toScriptSignature(input.hashType)
19342 scriptSig = scripts.pubKeyInput(pkSignature)
19343 break
19344 }
19345 }
19346 }
19347
19348 // did we build a scriptSig?
19349 if (scriptSig) {
19350 // wrap as scriptHash if necessary
19351 if (input.prevOutType === 'scripthash') {
19352 scriptSig = scripts.scriptHashInput(scriptSig, input.redeemScript)
19353 }
19354
19355 tx.setInputScript(index, scriptSig)
19356 }
19357 })
19358
19359 return tx
19360}
19361
19362TransactionBuilder.prototype.sign = function (index, privKey, redeemScript, hashType) {
19363 assert(index in this.inputs, 'No input at index: ' + index)
19364 hashType = hashType || Transaction.SIGHASH_ALL
19365
19366 var input = this.inputs[index]
19367 var canSign = input.hashType &&
19368 input.prevOutScript &&
19369 input.prevOutType &&
19370 input.pubKeys &&
19371 input.scriptType &&
19372 input.signatures
19373
19374 // are we almost ready to sign?
19375 if (canSign) {
19376 // if redeemScript was provided, enforce consistency
19377 if (redeemScript) {
19378 assert.deepEqual(input.redeemScript, redeemScript, 'Inconsistent redeemScript')
19379 }
19380
19381 assert.equal(input.hashType, hashType, 'Inconsistent hashType')
19382
19383 // no? prepare
19384 } else {
19385 // must be pay-to-scriptHash?
19386 if (redeemScript) {
19387 // if we have a prevOutScript, enforce scriptHash equality to the redeemScript
19388 if (input.prevOutScript) {
19389 assert.equal(input.prevOutType, 'scripthash', 'PrevOutScript must be P2SH')
19390
19391 var scriptHash = input.prevOutScript.chunks[1]
19392 assert.deepEqual(scriptHash, redeemScript.getHash(), 'RedeemScript does not match ' + scriptHash.toString('hex'))
19393 }
19394
19395 var scriptType = scripts.classifyOutput(redeemScript)
19396 assert(scriptType in canSignTypes, 'RedeemScript not supported (' + scriptType + ')')
19397
19398 var pubKeys = []
19399 switch (scriptType) {
19400 case 'multisig': {
19401 pubKeys = redeemScript.chunks.slice(1, -2).map(ECPubKey.fromBuffer)
19402 break
19403 }
19404
19405 case 'pubkeyhash': {
19406 var pkh1 = redeemScript.chunks[2]
19407 var pkh2 = privKey.pub.getAddress().hash
19408
19409 assert.deepEqual(pkh1, pkh2, 'privateKey cannot sign for this input')
19410 pubKeys = [privKey.pub]
19411 break
19412 }
19413
19414 case 'pubkey': {
19415 pubKeys = redeemScript.chunks.slice(0, 1).map(ECPubKey.fromBuffer)
19416 break
19417 }
19418 }
19419
19420 if (!input.prevOutScript) {
19421 input.prevOutScript = scripts.scriptHashOutput(redeemScript.getHash())
19422 input.prevOutType = 'scripthash'
19423 }
19424
19425 input.pubKeys = pubKeys
19426 input.redeemScript = redeemScript
19427 input.scriptType = scriptType
19428
19429 // cannot be pay-to-scriptHash
19430 } else {
19431 assert.notEqual(input.prevOutType, 'scripthash', 'PrevOutScript is P2SH, missing redeemScript')
19432
19433 // can we otherwise sign this?
19434 if (input.scriptType) {
19435 assert(input.pubKeys, input.scriptType + ' not supported')
19436
19437 // we know nothin' Jon Snow, assume pubKeyHash
19438 } else {
19439 input.prevOutScript = privKey.pub.getAddress().toOutputScript()
19440 input.prevOutType = 'pubkeyhash'
19441 input.pubKeys = [privKey.pub]
19442 input.scriptType = input.prevOutType
19443 }
19444 }
19445
19446 input.hashType = hashType
19447 input.signatures = input.signatures || []
19448 }
19449
19450 var signatureScript = input.redeemScript || input.prevOutScript
19451 var signatureHash = this.tx.hashForSignature(index, signatureScript, hashType)
19452
19453 // enforce signature order matches public keys
19454 if (input.scriptType === 'multisig' && input.redeemScript && input.signatures.length !== input.pubKeys.length) {
19455 // maintain a local copy of unmatched signatures
19456 var unmatched = input.signatures.slice()
19457
19458 input.signatures = input.pubKeys.map(function (pubKey) {
19459 var match
19460
19461 // check for any matching signatures
19462 unmatched.some(function (signature, i) {
19463 if (!pubKey.verify(signatureHash, signature)) return false
19464 match = signature
19465
19466 // remove matched signature from unmatched
19467 unmatched.splice(i, 1)
19468
19469 return true
19470 })
19471
19472 return match || undefined
19473 })
19474 }
19475
19476 // enforce in order signing of public keys
19477 assert(input.pubKeys.some(function (pubKey, i) {
19478 if (!privKey.pub.Q.equals(pubKey.Q)) return false
19479
19480 assert(!input.signatures[i], 'Signature already exists')
19481 var signature = privKey.sign(signatureHash)
19482 input.signatures[i] = signature
19483
19484 return true
19485 }, this), 'privateKey cannot sign for this input')
19486}
19487
19488module.exports = TransactionBuilder
19489
19490}).call(this,require("buffer").Buffer)
19491},{"./ecpubkey":61,"./ecsignature":62,"./opcodes":67,"./script":68,"./scripts":69,"./transaction":70,"assert":5,"buffer":7}],72:[function(require,module,exports){
19492(function (Buffer){
19493var assert = require('assert')
19494var bufferutils = require('./bufferutils')
19495var typeForce = require('typeforce')
19496var networks = require('./networks')
19497var randomBytes = require('randombytes')
19498
19499var Address = require('./address')
19500var HDNode = require('./hdnode')
19501var TransactionBuilder = require('./transaction_builder')
19502var Script = require('./script')
19503
19504function Wallet (seed, network) {
19505 console.warn('Wallet is deprecated and will be removed in 2.0.0, see #296')
19506
19507 seed = seed || randomBytes(32)
19508 network = network || networks.bitcoin
19509
19510 // Stored in a closure to make accidental serialization less likely
19511 var masterKey = HDNode.fromSeedBuffer(seed, network)
19512
19513 // HD first-level child derivation method should be hardened
19514 // See https://bitcointalk.org/index.php?topic=405179.msg4415254#msg4415254
19515 var accountZero = masterKey.deriveHardened(0)
19516 var externalAccount = accountZero.derive(0)
19517 var internalAccount = accountZero.derive(1)
19518
19519 this.addresses = []
19520 this.changeAddresses = []
19521 this.network = network
19522 this.unspents = []
19523
19524 // FIXME: remove in 2.0.0
19525 this.unspentMap = {}
19526
19527 // FIXME: remove in 2.0.0
19528 var me = this
19529 this.newMasterKey = function (seed) {
19530 console.warn('newMasterKey is deprecated, please make a new Wallet instance instead')
19531
19532 seed = seed || randomBytes(32)
19533 masterKey = HDNode.fromSeedBuffer(seed, network)
19534
19535 accountZero = masterKey.deriveHardened(0)
19536 externalAccount = accountZero.derive(0)
19537 internalAccount = accountZero.derive(1)
19538
19539 me.addresses = []
19540 me.changeAddresses = []
19541
19542 me.unspents = []
19543 me.unspentMap = {}
19544 }
19545
19546 this.getMasterKey = function () {
19547 return masterKey
19548 }
19549 this.getAccountZero = function () {
19550 return accountZero
19551 }
19552 this.getExternalAccount = function () {
19553 return externalAccount
19554 }
19555 this.getInternalAccount = function () {
19556 return internalAccount
19557 }
19558}
19559
19560Wallet.prototype.createTransaction = function (to, value, options) {
19561 // FIXME: remove in 2.0.0
19562 if (typeof options !== 'object') {
19563 if (options !== undefined) {
19564 console.warn('Non options object parameters are deprecated, use options object instead')
19565
19566 options = {
19567 fixedFee: arguments[2],
19568 changeAddress: arguments[3]
19569 }
19570 }
ab78acc6 19571 }
8b095871
IC
19572
19573 options = options || {}
19574
19575 assert(value > this.network.dustThreshold, value + ' must be above dust threshold (' + this.network.dustThreshold + ' Satoshis)')
19576
19577 var changeAddress = options.changeAddress
19578 var fixedFee = options.fixedFee
19579 var minConf = options.minConf === undefined ? 0 : options.minConf // FIXME: change minConf:1 by default in 2.0.0
19580
19581 // filter by minConf, then pending and sort by descending value
19582 var unspents = this.unspents.filter(function (unspent) {
19583 return unspent.confirmations >= minConf
19584 }).filter(function (unspent) {
19585 return !unspent.pending
19586 }).sort(function (o1, o2) {
19587 return o2.value - o1.value
19588 })
19589
19590 var accum = 0
19591 var addresses = []
19592 var subTotal = value
19593
19594 var txb = new TransactionBuilder()
19595 txb.addOutput(to, value)
19596
19597 for (var i = 0; i < unspents.length; ++i) {
19598 var unspent = unspents[i]
19599 addresses.push(unspent.address)
19600
19601 txb.addInput(unspent.txHash, unspent.index)
19602
19603 var fee = fixedFee === undefined ? estimatePaddedFee(txb.buildIncomplete(), this.network) : fixedFee
19604
19605 accum += unspent.value
19606 subTotal = value + fee
19607
19608 if (accum >= subTotal) {
19609 var change = accum - subTotal
19610
19611 if (change > this.network.dustThreshold) {
19612 txb.addOutput(changeAddress || this.getChangeAddress(), change)
19613 }
19614
19615 break
19616 }
ab78acc6 19617 }
8b095871
IC
19618
19619 assert(accum >= subTotal, 'Not enough funds (incl. fee): ' + accum + ' < ' + subTotal)
19620
19621 return this.signWith(txb, addresses).build()
19622}
19623
19624// FIXME: remove in 2.0.0
19625Wallet.prototype.processPendingTx = function (tx) {
19626 this.__processTx(tx, true)
19627}
19628
19629// FIXME: remove in 2.0.0
19630Wallet.prototype.processConfirmedTx = function (tx) {
19631 this.__processTx(tx, false)
19632}
19633
19634// FIXME: remove in 2.0.0
19635Wallet.prototype.__processTx = function (tx, isPending) {
19636 console.warn('processTransaction is considered harmful, see issue #260 for more information')
19637
19638 var txId = tx.getId()
19639 var txHash = tx.getHash()
19640
19641 tx.outs.forEach(function (txOut, i) {
19642 var address
19643
19644 try {
19645 address = Address.fromOutputScript(txOut.script, this.network).toString()
19646 } catch (e) {
19647 if (!(e.message.match(/has no matching Address/)))
19648 throw e
19649 }
19650
19651 var myAddresses = this.addresses.concat(this.changeAddresses)
19652 if (myAddresses.indexOf(address) > -1) {
19653 var lookup = txId + ':' + i
19654 if (lookup in this.unspentMap) return
19655
19656 // its unique, add it
19657 var unspent = {
19658 address: address,
19659 confirmations: 0, // no way to determine this without more information
19660 index: i,
19661 txHash: txHash,
19662 txId: txId,
19663 value: txOut.value,
19664 pending: isPending
19665 }
19666
19667 this.unspentMap[lookup] = unspent
19668 this.unspents.push(unspent)
19669 }
19670 }, this)
19671
19672 tx.ins.forEach(function (txIn) {
19673 // copy and convert to big-endian hex
19674 var txInId = bufferutils.reverse(txIn.hash).toString('hex')
19675
19676 var lookup = txInId + ':' + txIn.index
19677 if (!(lookup in this.unspentMap)) return
19678
19679 var unspent = this.unspentMap[lookup]
19680
19681 if (isPending) {
19682 unspent.pending = true
19683 unspent.spent = true
19684 } else {
19685 delete this.unspentMap[lookup]
19686
19687 this.unspents = this.unspents.filter(function (unspent2) {
19688 return unspent !== unspent2
19689 })
19690 }
19691 }, this)
19692}
19693
19694Wallet.prototype.generateAddress = function () {
19695 var k = this.addresses.length
19696 var address = this.getExternalAccount().derive(k).getAddress()
19697
19698 this.addresses.push(address.toString())
19699
19700 return this.getReceiveAddress()
19701}
19702
19703Wallet.prototype.generateChangeAddress = function () {
19704 var k = this.changeAddresses.length
19705 var address = this.getInternalAccount().derive(k).getAddress()
19706
19707 this.changeAddresses.push(address.toString())
19708
19709 return this.getChangeAddress()
19710}
19711
19712Wallet.prototype.getAddress = function () {
19713 if (this.addresses.length === 0) {
19714 this.generateAddress()
ab78acc6 19715 }
8b095871
IC
19716
19717 return this.addresses[this.addresses.length - 1]
19718}
19719
19720Wallet.prototype.getBalance = function (minConf) {
19721 minConf = minConf || 0
19722
19723 return this.unspents.filter(function (unspent) {
19724 return unspent.confirmations >= minConf
19725
19726 // FIXME: remove spent filter in 2.0.0
19727 }).filter(function (unspent) {
19728 return !unspent.spent
19729 }).reduce(function (accum, unspent) {
19730 return accum + unspent.value
19731 }, 0)
19732}
19733
19734Wallet.prototype.getChangeAddress = function () {
19735 if (this.changeAddresses.length === 0) {
19736 this.generateChangeAddress()
3af2954a 19737 }
8b095871
IC
19738
19739 return this.changeAddresses[this.changeAddresses.length - 1]
19740}
19741
19742Wallet.prototype.getInternalPrivateKey = function (index) {
19743 return this.getInternalAccount().derive(index).privKey
19744}
19745
19746Wallet.prototype.getPrivateKey = function (index) {
19747 return this.getExternalAccount().derive(index).privKey
19748}
19749
19750Wallet.prototype.getPrivateKeyForAddress = function (address) {
19751 var index
19752
19753 if ((index = this.addresses.indexOf(address)) > -1) {
19754 return this.getPrivateKey(index)
ab78acc6 19755 }
8b095871
IC
19756
19757 if ((index = this.changeAddresses.indexOf(address)) > -1) {
19758 return this.getInternalPrivateKey(index)
19759 }
19760
19761 assert(false, 'Unknown address. Make sure the address is from the keychain and has been generated')
ab78acc6
IC
19762}
19763
8b095871
IC
19764Wallet.prototype.getUnspentOutputs = function (minConf) {
19765 minConf = minConf || 0
19766
19767 return this.unspents.filter(function (unspent) {
19768 return unspent.confirmations >= minConf
19769
19770 // FIXME: remove spent filter in 2.0.0
19771 }).filter(function (unspent) {
19772 return !unspent.spent
19773 }).map(function (unspent) {
19774 return {
19775 address: unspent.address,
19776 confirmations: unspent.confirmations,
19777 index: unspent.index,
19778 txId: unspent.txId,
19779 value: unspent.value,
19780
19781 // FIXME: remove in 2.0.0
19782 hash: unspent.txId,
19783 pending: unspent.pending
19784 }
19785 })
ab78acc6 19786}
3af2954a 19787
8b095871
IC
19788Wallet.prototype.setUnspentOutputs = function (unspents) {
19789 this.unspentMap = {}
19790 this.unspents = unspents.map(function (unspent) {
19791 // FIXME: remove unspent.hash in 2.0.0
19792 var txId = unspent.txId || unspent.hash
19793 var index = unspent.index
3af2954a 19794
8b095871
IC
19795 // FIXME: remove in 2.0.0
19796 if (unspent.hash !== undefined) {
19797 console.warn('unspent.hash is deprecated, use unspent.txId instead')
19798 }
3af2954a 19799
8b095871
IC
19800 // FIXME: remove in 2.0.0
19801 if (index === undefined) {
19802 console.warn('unspent.outputIndex is deprecated, use unspent.index instead')
19803 index = unspent.outputIndex
19804 }
3af2954a 19805
8b095871
IC
19806 typeForce('String', txId)
19807 typeForce('Number', index)
19808 typeForce('Number', unspent.value)
3af2954a 19809
8b095871
IC
19810 assert.equal(txId.length, 64, 'Expected valid txId, got ' + txId)
19811 assert.doesNotThrow(function () {
19812 Address.fromBase58Check(unspent.address)
19813 }, 'Expected Base58 Address, got ' + unspent.address)
19814 assert(isFinite(index), 'Expected finite index, got ' + index)
3af2954a 19815
8b095871
IC
19816 // FIXME: remove branch in 2.0.0
19817 if (unspent.confirmations !== undefined) {
19818 typeForce('Number', unspent.confirmations)
ab78acc6 19819 }
8b095871
IC
19820
19821 var txHash = bufferutils.reverse(new Buffer(txId, 'hex'))
19822
19823 unspent = {
19824 address: unspent.address,
19825 confirmations: unspent.confirmations || 0,
19826 index: index,
19827 txHash: txHash,
19828 txId: txId,
19829 value: unspent.value,
19830
19831 // FIXME: remove in 2.0.0
19832 pending: unspent.pending || false
ab78acc6 19833 }
3af2954a 19834
8b095871
IC
19835 // FIXME: remove in 2.0.0
19836 this.unspentMap[txId + ':' + index] = unspent
19837
19838 return unspent
19839 }, this)
ab78acc6 19840}
3af2954a 19841
8b095871
IC
19842Wallet.prototype.signWith = function (tx, addresses) {
19843 addresses.forEach(function (address, i) {
19844 var privKey = this.getPrivateKeyForAddress(address)
19845
19846 tx.sign(i, privKey)
19847 }, this)
19848
19849 return tx
ab78acc6 19850}
3af2954a 19851
8b095871
IC
19852function estimatePaddedFee (tx, network) {
19853 var tmpTx = tx.clone()
19854 tmpTx.addOutput(Script.EMPTY, network.dustSoftThreshold || 0)
19855
19856 return network.estimateFee(tmpTx)
ab78acc6 19857}
3af2954a 19858
8b095871
IC
19859// FIXME: 1.0.0 shims, remove in 2.0.0
19860Wallet.prototype.getReceiveAddress = Wallet.prototype.getAddress
19861Wallet.prototype.createTx = Wallet.prototype.createTransaction
19862
19863module.exports = Wallet
19864
19865}).call(this,require("buffer").Buffer)
19866},{"./address":54,"./bufferutils":57,"./hdnode":63,"./networks":66,"./script":68,"./transaction_builder":71,"assert":5,"buffer":7,"randombytes":52,"typeforce":53}]},{},[64])(64)
19867});</script>
19868 <script>bitcoin.networks.shadow = {
19869 magicPrefix: '\x19ShadowCash Signed Message:\n',
19870 bip32: {
19871 public: 0xEE80286A,
19872 private: 0xEE8031E8
19873 },
19874 pubKeyHash: 0x3f,
19875 scriptHash: 0x7d,
19876 wif: 0xbf,
19877 dustThreshold: 0,
19878 feePerKb: 1000,
19879 estimateFee: function() { return "unused in this app" },
19880};
19881
19882bitcoin.networks.shadowtn = {
19883 magicPrefix: '\x19ShadowCash Signed Message:\n',
19884 bip32: {
19885 public: 0x76C0FDFB,
19886 private: 0x76C1077A
19887 },
19888 pubKeyHash: 0x7f,
19889 scriptHash: 0xc4,
19890 wif: 0xff,
19891 dustThreshold: 0,
19892 feePerKb: 1000,
19893 estimateFee: function() { return "unused in this app" },
19894};
3af2954a 19895
8b095871
IC
19896bitcoin.networks.clam = {
19897 bip32: {
19898 public: 0xa8c26d64,
19899 private: 0xa8c17826
19900 },
19901 pubKeyHash: 0x89,
19902 wif: 0x85,
19903};
3af2954a 19904
0921f370 19905bitcoin.networks.crown = {
19906 bip32: {
19907 public: 0x0488b21e,
19908 private: 0x0488ade4
19909 },
19910 pubKeyHash: 0x00,
19911 scriptHash: 0x05,
19912 wif: 0x80,
19913};
19914
8b095871
IC
19915bitcoin.networks.dash = {
19916 bip32: {
19917 public: 0x0488b21e,
19918 private: 0x0488ade4
19919 },
19920 pubKeyHash: 0x4c,
19921 scriptHash: 0x10,
19922 wif: 0xcc,
19923};
ab78acc6 19924
c0386f3b
KR
19925bitcoin.networks.dashtn = {
19926 bip32: {
19927 public: 0x043587cf,
19928 private: 0x04358394
19929 },
19930 pubKeyHash: 0x8c,
19931 scriptHash: 0x13,
19932 wif: 0xef,
19933};
19934
f88fab20 19935bitcoin.networks.game = {
19936 bip32: {
19937 public: 0x0488b21e,
19938 private: 0x0488ade4
19939 },
19940 pubKeyHash: 0x26,
19941 scriptHash: 0x05,
19942 wif: 0xa6,
19943};
19944
8b095871
IC
19945bitcoin.networks.namecoin = {
19946 bip32: {
19947 public: 0x0488b21e,
19948 private: 0x0488ade4
19949 },
19950 pubKeyHash: 0x34,
19951 //scriptHash: 0x10,
19952 wif: 0x80,
19953};
3af2954a 19954
8b095871
IC
19955bitcoin.networks.peercoin = {
19956 bip32: {
19957 public: 0x0488b21e,
19958 private: 0x0488ade4
19959 },
19960 pubKeyHash: 0x37,
19961 //scriptHash: 0x10,
19962 wif: 0xb7,
19963};
3af2954a 19964
01e81e53
GH
19965bitcoin.networks.slimcoin = {
19966 bip32: {
19967 public: 0xef6adf10,
19968 private: 0xef69ea80
19969 },
19970 pubKeyHash: 0x3f,
19971 scriptHash: 0x7d,
19972 wif: 0x46,
19973};
19974
19975bitcoin.networks.slimcointn = {
19976 bip32: {
19977 public: 0x043587CF,
19978 private: 0x04358394
19979 },
19980 pubKeyHash: 0x6f,
19981 scriptHash: 0xc4,
19982 wif: 0x57,
19983};
19984
8b095871
IC
19985</script>
19986 <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){
19987(function (global){
19988'use strict';
3af2954a 19989
8b095871
IC
19990// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js
19991// original notice:
3af2954a 19992
8b095871
IC
19993/*!
19994 * The buffer module from node.js, for the browser.
19995 *
19996 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
19997 * @license MIT
19998 */
19999function compare(a, b) {
20000 if (a === b) {
20001 return 0;
20002 }
3af2954a 20003
8b095871
IC
20004 var x = a.length;
20005 var y = b.length;
3af2954a 20006
8b095871
IC
20007 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
20008 if (a[i] !== b[i]) {
20009 x = a[i];
20010 y = b[i];
20011 break;
20012 }
20013 }
3af2954a 20014
8b095871
IC
20015 if (x < y) {
20016 return -1;
20017 }
20018 if (y < x) {
20019 return 1;
20020 }
20021 return 0;
ab78acc6 20022}
8b095871
IC
20023function isBuffer(b) {
20024 if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {
20025 return global.Buffer.isBuffer(b);
20026 }
20027 return !!(b != null && b._isBuffer);
ab78acc6 20028}
3af2954a 20029
8b095871
IC
20030// based on node assert, original notice:
20031
20032// http://wiki.commonjs.org/wiki/Unit_Testing/1.0
20033//
20034// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!
20035//
20036// Originally from narwhal.js (http://narwhaljs.org)
20037// Copyright (c) 2009 Thomas Robinson <280north.com>
20038//
20039// Permission is hereby granted, free of charge, to any person obtaining a copy
20040// of this software and associated documentation files (the 'Software'), to
20041// deal in the Software without restriction, including without limitation the
20042// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
20043// sell copies of the Software, and to permit persons to whom the Software is
20044// furnished to do so, subject to the following conditions:
20045//
20046// The above copyright notice and this permission notice shall be included in
20047// all copies or substantial portions of the Software.
20048//
20049// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20050// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20051// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20052// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20053// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20054// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20055
20056var util = require('util/');
20057var hasOwn = Object.prototype.hasOwnProperty;
20058var pSlice = Array.prototype.slice;
20059var functionsHaveNames = (function () {
20060 return function foo() {}.name === 'foo';
20061}());
20062function pToString (obj) {
20063 return Object.prototype.toString.call(obj);
20064}
20065function isView(arrbuf) {
20066 if (isBuffer(arrbuf)) {
20067 return false;
ab78acc6 20068 }
8b095871
IC
20069 if (typeof global.ArrayBuffer !== 'function') {
20070 return false;
20071 }
20072 if (typeof ArrayBuffer.isView === 'function') {
20073 return ArrayBuffer.isView(arrbuf);
20074 }
20075 if (!arrbuf) {
20076 return false;
20077 }
20078 if (arrbuf instanceof DataView) {
20079 return true;
20080 }
20081 if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {
20082 return true;
20083 }
20084 return false;
ab78acc6 20085}
8b095871
IC
20086// 1. The assert module provides functions that throw
20087// AssertionError's when particular conditions are not met. The
20088// assert module must conform to the following interface.
3af2954a 20089
8b095871 20090var assert = module.exports = ok;
3af2954a 20091
8b095871
IC
20092// 2. The AssertionError is defined in assert.
20093// new assert.AssertionError({ message: message,
20094// actual: actual,
20095// expected: expected })
20096
20097var regex = /\s*function\s+([^\(\s]*)\s*/;
20098// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js
20099function getName(func) {
20100 if (!util.isFunction(func)) {
20101 return;
20102 }
20103 if (functionsHaveNames) {
20104 return func.name;
20105 }
20106 var str = func.toString();
20107 var match = str.match(regex);
20108 return match && match[1];
ab78acc6 20109}
8b095871
IC
20110assert.AssertionError = function AssertionError(options) {
20111 this.name = 'AssertionError';
20112 this.actual = options.actual;
20113 this.expected = options.expected;
20114 this.operator = options.operator;
20115 if (options.message) {
20116 this.message = options.message;
20117 this.generatedMessage = false;
20118 } else {
20119 this.message = getMessage(this);
20120 this.generatedMessage = true;
20121 }
20122 var stackStartFunction = options.stackStartFunction || fail;
20123 if (Error.captureStackTrace) {
20124 Error.captureStackTrace(this, stackStartFunction);
20125 } else {
20126 // non v8 browsers so we can have a stacktrace
20127 var err = new Error();
20128 if (err.stack) {
20129 var out = err.stack;
20130
20131 // try to strip useless frames
20132 var fn_name = getName(stackStartFunction);
20133 var idx = out.indexOf('\n' + fn_name);
20134 if (idx >= 0) {
20135 // once we have located the function frame
20136 // we need to strip out everything before it (and its line)
20137 var next_line = out.indexOf('\n', idx + 1);
20138 out = out.substring(next_line + 1);
20139 }
3af2954a 20140
8b095871
IC
20141 this.stack = out;
20142 }
20143 }
20144};
3af2954a 20145
8b095871
IC
20146// assert.AssertionError instanceof Error
20147util.inherits(assert.AssertionError, Error);
3af2954a 20148
8b095871
IC
20149function truncate(s, n) {
20150 if (typeof s === 'string') {
20151 return s.length < n ? s : s.slice(0, n);
20152 } else {
20153 return s;
3af2954a 20154 }
ab78acc6 20155}
8b095871
IC
20156function inspect(something) {
20157 if (functionsHaveNames || !util.isFunction(something)) {
20158 return util.inspect(something);
20159 }
20160 var rawname = getName(something);
20161 var name = rawname ? ': ' + rawname : '';
20162 return '[Function' + name + ']';
20163}
20164function getMessage(self) {
20165 return truncate(inspect(self.actual), 128) + ' ' +
20166 self.operator + ' ' +
20167 truncate(inspect(self.expected), 128);
ab78acc6 20168}
3af2954a 20169
8b095871
IC
20170// At present only the three keys mentioned above are used and
20171// understood by the spec. Implementations or sub modules can pass
20172// other keys to the AssertionError's constructor - they will be
20173// ignored.
3af2954a 20174
8b095871
IC
20175// 3. All of the following functions must throw an AssertionError
20176// when a corresponding condition is not met, with a message that
20177// may be undefined if not provided. All assertion methods provide
20178// both the actual and expected values to the assertion error for
20179// display purposes.
3af2954a 20180
8b095871
IC
20181function fail(actual, expected, message, operator, stackStartFunction) {
20182 throw new assert.AssertionError({
20183 message: message,
20184 actual: actual,
20185 expected: expected,
20186 operator: operator,
20187 stackStartFunction: stackStartFunction
20188 });
ab78acc6 20189}
3af2954a 20190
8b095871
IC
20191// EXTENSION! allows for well behaved errors defined elsewhere.
20192assert.fail = fail;
3af2954a 20193
8b095871
IC
20194// 4. Pure assertion tests whether a value is truthy, as determined
20195// by !!guard.
20196// assert.ok(guard, message_opt);
20197// This statement is equivalent to assert.equal(true, !!guard,
20198// message_opt);. To test strictly for the value true, use
20199// assert.strictEqual(true, guard, message_opt);.
3af2954a 20200
8b095871
IC
20201function ok(value, message) {
20202 if (!value) fail(value, true, message, '==', assert.ok);
ab78acc6 20203}
8b095871 20204assert.ok = ok;
3af2954a 20205
8b095871
IC
20206// 5. The equality assertion tests shallow, coercive equality with
20207// ==.
20208// assert.equal(actual, expected, message_opt);
3af2954a 20209
8b095871
IC
20210assert.equal = function equal(actual, expected, message) {
20211 if (actual != expected) fail(actual, expected, message, '==', assert.equal);
20212};
3af2954a 20213
8b095871
IC
20214// 6. The non-equality assertion tests for whether two objects are not equal
20215// with != assert.notEqual(actual, expected, message_opt);
3af2954a 20216
8b095871
IC
20217assert.notEqual = function notEqual(actual, expected, message) {
20218 if (actual == expected) {
20219 fail(actual, expected, message, '!=', assert.notEqual);
ab78acc6 20220 }
8b095871
IC
20221};
20222
20223// 7. The equivalence assertion tests a deep equality relation.
20224// assert.deepEqual(actual, expected, message_opt);
20225
20226assert.deepEqual = function deepEqual(actual, expected, message) {
20227 if (!_deepEqual(actual, expected, false)) {
20228 fail(actual, expected, message, 'deepEqual', assert.deepEqual);
ab78acc6 20229 }
8b095871 20230};
3af2954a 20231
8b095871
IC
20232assert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {
20233 if (!_deepEqual(actual, expected, true)) {
20234 fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);
3af2954a 20235 }
8b095871
IC
20236};
20237
20238function _deepEqual(actual, expected, strict, memos) {
20239 // 7.1. All identical values are equivalent, as determined by ===.
20240 if (actual === expected) {
20241 return true;
20242 } else if (isBuffer(actual) && isBuffer(expected)) {
20243 return compare(actual, expected) === 0;
20244
20245 // 7.2. If the expected value is a Date object, the actual value is
20246 // equivalent if it is also a Date object that refers to the same time.
20247 } else if (util.isDate(actual) && util.isDate(expected)) {
20248 return actual.getTime() === expected.getTime();
20249
20250 // 7.3 If the expected value is a RegExp object, the actual value is
20251 // equivalent if it is also a RegExp object with the same source and
20252 // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).
20253 } else if (util.isRegExp(actual) && util.isRegExp(expected)) {
20254 return actual.source === expected.source &&
20255 actual.global === expected.global &&
20256 actual.multiline === expected.multiline &&
20257 actual.lastIndex === expected.lastIndex &&
20258 actual.ignoreCase === expected.ignoreCase;
20259
20260 // 7.4. Other pairs that do not both pass typeof value == 'object',
20261 // equivalence is determined by ==.
20262 } else if ((actual === null || typeof actual !== 'object') &&
20263 (expected === null || typeof expected !== 'object')) {
20264 return strict ? actual === expected : actual == expected;
20265
20266 // If both values are instances of typed arrays, wrap their underlying
20267 // ArrayBuffers in a Buffer each to increase performance
20268 // This optimization requires the arrays to have the same type as checked by
20269 // Object.prototype.toString (aka pToString). Never perform binary
20270 // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their
20271 // bit patterns are not identical.
20272 } else if (isView(actual) && isView(expected) &&
20273 pToString(actual) === pToString(expected) &&
20274 !(actual instanceof Float32Array ||
20275 actual instanceof Float64Array)) {
20276 return compare(new Uint8Array(actual.buffer),
20277 new Uint8Array(expected.buffer)) === 0;
20278
20279 // 7.5 For all other Object pairs, including Array objects, equivalence is
20280 // determined by having the same number of owned properties (as verified
20281 // with Object.prototype.hasOwnProperty.call), the same set of keys
20282 // (although not necessarily the same order), equivalent values for every
20283 // corresponding key, and an identical 'prototype' property. Note: this
20284 // accounts for both named and indexed properties on Arrays.
20285 } else if (isBuffer(actual) !== isBuffer(expected)) {
20286 return false;
20287 } else {
20288 memos = memos || {actual: [], expected: []};
3af2954a 20289
8b095871
IC
20290 var actualIndex = memos.actual.indexOf(actual);
20291 if (actualIndex !== -1) {
20292 if (actualIndex === memos.expected.indexOf(expected)) {
20293 return true;
ab78acc6 20294 }
3af2954a 20295 }
8b095871
IC
20296
20297 memos.actual.push(actual);
20298 memos.expected.push(expected);
20299
20300 return objEquiv(actual, expected, strict, memos);
3af2954a 20301 }
ab78acc6 20302}
3af2954a 20303
8b095871
IC
20304function isArguments(object) {
20305 return Object.prototype.toString.call(object) == '[object Arguments]';
ab78acc6 20306}
3af2954a 20307
8b095871
IC
20308function objEquiv(a, b, strict, actualVisitedObjects) {
20309 if (a === null || a === undefined || b === null || b === undefined)
20310 return false;
20311 // if one is a primitive, the other must be same
20312 if (util.isPrimitive(a) || util.isPrimitive(b))
20313 return a === b;
20314 if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))
20315 return false;
20316 var aIsArgs = isArguments(a);
20317 var bIsArgs = isArguments(b);
20318 if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))
20319 return false;
20320 if (aIsArgs) {
20321 a = pSlice.call(a);
20322 b = pSlice.call(b);
20323 return _deepEqual(a, b, strict);
20324 }
20325 var ka = objectKeys(a);
20326 var kb = objectKeys(b);
20327 var key, i;
20328 // having the same number of owned properties (keys incorporates
20329 // hasOwnProperty)
20330 if (ka.length !== kb.length)
20331 return false;
20332 //the same set of keys (although not necessarily the same order),
20333 ka.sort();
20334 kb.sort();
20335 //~~~cheap key test
20336 for (i = ka.length - 1; i >= 0; i--) {
20337 if (ka[i] !== kb[i])
20338 return false;
20339 }
20340 //equivalent values for every corresponding key, and
20341 //~~~possibly expensive deep test
20342 for (i = ka.length - 1; i >= 0; i--) {
20343 key = ka[i];
20344 if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))
20345 return false;
20346 }
20347 return true;
ab78acc6 20348}
3af2954a 20349
8b095871
IC
20350// 8. The non-equivalence assertion tests for any deep inequality.
20351// assert.notDeepEqual(actual, expected, message_opt);
3af2954a 20352
8b095871
IC
20353assert.notDeepEqual = function notDeepEqual(actual, expected, message) {
20354 if (_deepEqual(actual, expected, false)) {
20355 fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);
3af2954a 20356 }
8b095871 20357};
3af2954a 20358
8b095871
IC
20359assert.notDeepStrictEqual = notDeepStrictEqual;
20360function notDeepStrictEqual(actual, expected, message) {
20361 if (_deepEqual(actual, expected, true)) {
20362 fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);
20363 }
ab78acc6 20364}
3af2954a 20365
3af2954a 20366
8b095871
IC
20367// 9. The strict equality assertion tests strict equality, as determined by ===.
20368// assert.strictEqual(actual, expected, message_opt);
3af2954a 20369
8b095871
IC
20370assert.strictEqual = function strictEqual(actual, expected, message) {
20371 if (actual !== expected) {
20372 fail(actual, expected, message, '===', assert.strictEqual);
20373 }
20374};
3af2954a 20375
8b095871
IC
20376// 10. The strict non-equality assertion tests for strict inequality, as
20377// determined by !==. assert.notStrictEqual(actual, expected, message_opt);
3af2954a 20378
8b095871
IC
20379assert.notStrictEqual = function notStrictEqual(actual, expected, message) {
20380 if (actual === expected) {
20381 fail(actual, expected, message, '!==', assert.notStrictEqual);
20382 }
20383};
3af2954a 20384
8b095871
IC
20385function expectedException(actual, expected) {
20386 if (!actual || !expected) {
20387 return false;
20388 }
3af2954a 20389
8b095871
IC
20390 if (Object.prototype.toString.call(expected) == '[object RegExp]') {
20391 return expected.test(actual);
20392 }
3af2954a 20393
8b095871
IC
20394 try {
20395 if (actual instanceof expected) {
20396 return true;
20397 }
20398 } catch (e) {
20399 // Ignore. The instanceof check doesn't work for arrow functions.
20400 }
3af2954a 20401
8b095871
IC
20402 if (Error.isPrototypeOf(expected)) {
20403 return false;
20404 }
20405
20406 return expected.call({}, actual) === true;
ab78acc6 20407}
3af2954a 20408
8b095871
IC
20409function _tryBlock(block) {
20410 var error;
20411 try {
20412 block();
20413 } catch (e) {
20414 error = e;
20415 }
20416 return error;
ab78acc6 20417}
3af2954a 20418
8b095871
IC
20419function _throws(shouldThrow, block, expected, message) {
20420 var actual;
20421
20422 if (typeof block !== 'function') {
20423 throw new TypeError('"block" argument must be a function');
3af2954a 20424 }
8b095871
IC
20425
20426 if (typeof expected === 'string') {
20427 message = expected;
20428 expected = null;
ab78acc6 20429 }
8b095871
IC
20430
20431 actual = _tryBlock(block);
20432
20433 message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +
20434 (message ? ' ' + message : '.');
20435
20436 if (shouldThrow && !actual) {
20437 fail(actual, expected, 'Missing expected exception' + message);
ab78acc6 20438 }
8b095871
IC
20439
20440 var userProvidedMessage = typeof message === 'string';
20441 var isUnwantedException = !shouldThrow && util.isError(actual);
20442 var isUnexpectedException = !shouldThrow && actual && !expected;
20443
20444 if ((isUnwantedException &&
20445 userProvidedMessage &&
20446 expectedException(actual, expected)) ||
20447 isUnexpectedException) {
20448 fail(actual, expected, 'Got unwanted exception' + message);
ab78acc6 20449 }
3af2954a 20450
8b095871
IC
20451 if ((shouldThrow && actual && expected &&
20452 !expectedException(actual, expected)) || (!shouldThrow && actual)) {
20453 throw actual;
20454 }
ab78acc6 20455}
3af2954a 20456
8b095871
IC
20457// 11. Expected to throw an error:
20458// assert.throws(block, Error_opt, message_opt);
20459
20460assert.throws = function(block, /*optional*/error, /*optional*/message) {
20461 _throws(true, block, error, message);
20462};
20463
20464// EXTENSION! This is annoying to write outside this module.
20465assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {
20466 _throws(false, block, error, message);
20467};
20468
20469assert.ifError = function(err) { if (err) throw err; };
20470
20471var objectKeys = Object.keys || function (obj) {
20472 var keys = [];
20473 for (var key in obj) {
20474 if (hasOwn.call(obj, key)) keys.push(key);
3af2954a 20475 }
8b095871
IC
20476 return keys;
20477};
3af2954a 20478
8b095871
IC
20479}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20480},{"util/":30}],2:[function(require,module,exports){
20481'use strict'
20482
20483exports.byteLength = byteLength
20484exports.toByteArray = toByteArray
20485exports.fromByteArray = fromByteArray
20486
20487var lookup = []
20488var revLookup = []
20489var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
20490
20491var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
20492for (var i = 0, len = code.length; i < len; ++i) {
20493 lookup[i] = code[i]
20494 revLookup[code.charCodeAt(i)] = i
20495}
20496
20497revLookup['-'.charCodeAt(0)] = 62
20498revLookup['_'.charCodeAt(0)] = 63
20499
20500function placeHoldersCount (b64) {
20501 var len = b64.length
20502 if (len % 4 > 0) {
20503 throw new Error('Invalid string. Length must be a multiple of 4')
20504 }
20505
20506 // the number of equal signs (place holders)
20507 // if there are two placeholders, than the two characters before it
20508 // represent one byte
20509 // if there is only one, then the three characters before it represent 2 bytes
20510 // this is just a cheap hack to not do indexOf twice
20511 return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0
ab78acc6
IC
20512}
20513
8b095871
IC
20514function byteLength (b64) {
20515 // base64 is 4/3 + up to two characters of the original data
20516 return b64.length * 3 / 4 - placeHoldersCount(b64)
ab78acc6 20517}
3af2954a 20518
8b095871
IC
20519function toByteArray (b64) {
20520 var i, j, l, tmp, placeHolders, arr
20521 var len = b64.length
20522 placeHolders = placeHoldersCount(b64)
20523
20524 arr = new Arr(len * 3 / 4 - placeHolders)
20525
20526 // if there are placeholders, only get up to the last complete 4 chars
20527 l = placeHolders > 0 ? len - 4 : len
20528
20529 var L = 0
20530
20531 for (i = 0, j = 0; i < l; i += 4, j += 3) {
20532 tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]
20533 arr[L++] = (tmp >> 16) & 0xFF
20534 arr[L++] = (tmp >> 8) & 0xFF
20535 arr[L++] = tmp & 0xFF
20536 }
20537
20538 if (placeHolders === 2) {
20539 tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)
20540 arr[L++] = tmp & 0xFF
20541 } else if (placeHolders === 1) {
20542 tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)
20543 arr[L++] = (tmp >> 8) & 0xFF
20544 arr[L++] = tmp & 0xFF
20545 }
20546
20547 return arr
ab78acc6 20548}
3af2954a 20549
8b095871
IC
20550function tripletToBase64 (num) {
20551 return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]
ab78acc6 20552}
3af2954a 20553
8b095871
IC
20554function encodeChunk (uint8, start, end) {
20555 var tmp
20556 var output = []
20557 for (var i = start; i < end; i += 3) {
20558 tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])
20559 output.push(tripletToBase64(tmp))
20560 }
20561 return output.join('')
ab78acc6 20562}
3af2954a 20563
8b095871
IC
20564function fromByteArray (uint8) {
20565 var tmp
20566 var len = uint8.length
20567 var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
20568 var output = ''
20569 var parts = []
20570 var maxChunkLength = 16383 // must be multiple of 3
20571
20572 // go through the array every three bytes, we'll deal with trailing stuff later
20573 for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
20574 parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
20575 }
20576
20577 // pad the end with zeros, but make sure to not forget the extra bytes
20578 if (extraBytes === 1) {
20579 tmp = uint8[len - 1]
20580 output += lookup[tmp >> 2]
20581 output += lookup[(tmp << 4) & 0x3F]
20582 output += '=='
20583 } else if (extraBytes === 2) {
20584 tmp = (uint8[len - 2] << 8) + (uint8[len - 1])
20585 output += lookup[tmp >> 10]
20586 output += lookup[(tmp >> 4) & 0x3F]
20587 output += lookup[(tmp << 2) & 0x3F]
20588 output += '='
20589 }
20590
20591 parts.push(output)
20592
20593 return parts.join('')
ab78acc6 20594}
3af2954a 20595
8b095871 20596},{}],3:[function(require,module,exports){
3af2954a 20597
8b095871
IC
20598},{}],4:[function(require,module,exports){
20599(function (global){
20600'use strict';
20601
20602var buffer = require('buffer');
20603var Buffer = buffer.Buffer;
20604var SlowBuffer = buffer.SlowBuffer;
20605var MAX_LEN = buffer.kMaxLength || 2147483647;
20606exports.alloc = function alloc(size, fill, encoding) {
20607 if (typeof Buffer.alloc === 'function') {
20608 return Buffer.alloc(size, fill, encoding);
ab78acc6 20609 }
8b095871
IC
20610 if (typeof encoding === 'number') {
20611 throw new TypeError('encoding must not be number');
20612 }
20613 if (typeof size !== 'number') {
20614 throw new TypeError('size must be a number');
20615 }
20616 if (size > MAX_LEN) {
20617 throw new RangeError('size is too large');
20618 }
20619 var enc = encoding;
20620 var _fill = fill;
20621 if (_fill === undefined) {
20622 enc = undefined;
20623 _fill = 0;
20624 }
20625 var buf = new Buffer(size);
20626 if (typeof _fill === 'string') {
20627 var fillBuf = new Buffer(_fill, enc);
20628 var flen = fillBuf.length;
20629 var i = -1;
20630 while (++i < size) {
20631 buf[i] = fillBuf[i % flen];
ab78acc6 20632 }
ab78acc6 20633 } else {
8b095871 20634 buf.fill(_fill);
ab78acc6 20635 }
8b095871 20636 return buf;
ab78acc6 20637}
8b095871
IC
20638exports.allocUnsafe = function allocUnsafe(size) {
20639 if (typeof Buffer.allocUnsafe === 'function') {
20640 return Buffer.allocUnsafe(size);
20641 }
20642 if (typeof size !== 'number') {
20643 throw new TypeError('size must be a number');
20644 }
20645 if (size > MAX_LEN) {
20646 throw new RangeError('size is too large');
20647 }
20648 return new Buffer(size);
ab78acc6 20649}
8b095871
IC
20650exports.from = function from(value, encodingOrOffset, length) {
20651 if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) {
20652 return Buffer.from(value, encodingOrOffset, length);
20653 }
20654 if (typeof value === 'number') {
20655 throw new TypeError('"value" argument must not be a number');
20656 }
20657 if (typeof value === 'string') {
20658 return new Buffer(value, encodingOrOffset);
20659 }
20660 if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {
20661 var offset = encodingOrOffset;
20662 if (arguments.length === 1) {
20663 return new Buffer(value);
20664 }
20665 if (typeof offset === 'undefined') {
20666 offset = 0;
20667 }
20668 var len = length;
20669 if (typeof len === 'undefined') {
20670 len = value.byteLength - offset;
20671 }
20672 if (offset >= value.byteLength) {
20673 throw new RangeError('\'offset\' is out of bounds');
20674 }
20675 if (len > value.byteLength - offset) {
20676 throw new RangeError('\'length\' is out of bounds');
20677 }
20678 return new Buffer(value.slice(offset, offset + len));
20679 }
20680 if (Buffer.isBuffer(value)) {
20681 var out = new Buffer(value.length);
20682 value.copy(out, 0, 0, value.length);
20683 return out;
20684 }
20685 if (value) {
20686 if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) {
20687 return new Buffer(value);
20688 }
20689 if (value.type === 'Buffer' && Array.isArray(value.data)) {
20690 return new Buffer(value.data);
20691 }
20692 }
3af2954a 20693
8b095871 20694 throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.');
ab78acc6 20695}
8b095871
IC
20696exports.allocUnsafeSlow = function allocUnsafeSlow(size) {
20697 if (typeof Buffer.allocUnsafeSlow === 'function') {
20698 return Buffer.allocUnsafeSlow(size);
20699 }
20700 if (typeof size !== 'number') {
20701 throw new TypeError('size must be a number');
20702 }
20703 if (size >= MAX_LEN) {
20704 throw new RangeError('size is too large');
20705 }
20706 return new SlowBuffer(size);
ab78acc6 20707}
3af2954a 20708
8b095871
IC
20709}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
20710},{"buffer":5}],5:[function(require,module,exports){
20711/*!
20712 * The buffer module from node.js, for the browser.
20713 *
20714 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
20715 * @license MIT
20716 */
20717/* eslint-disable no-proto */
3af2954a 20718
8b095871 20719'use strict'
3af2954a 20720
8b095871
IC
20721var base64 = require('base64-js')
20722var ieee754 = require('ieee754')
3af2954a 20723
8b095871
IC
20724exports.Buffer = Buffer
20725exports.SlowBuffer = SlowBuffer
20726exports.INSPECT_MAX_BYTES = 50
20727
20728var K_MAX_LENGTH = 0x7fffffff
20729exports.kMaxLength = K_MAX_LENGTH
20730
20731/**
20732 * If `Buffer.TYPED_ARRAY_SUPPORT`:
20733 * === true Use Uint8Array implementation (fastest)
20734 * === false Print warning and recommend using `buffer` v4.x which has an Object
20735 * implementation (most compatible, even IE6)
20736 *
20737 * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
20738 * Opera 11.6+, iOS 4.2+.
20739 *
20740 * We report that the browser does not support typed arrays if the are not subclassable
20741 * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
20742 * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
20743 * for __proto__ and has a buggy typed array implementation.
20744 */
20745Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
20746
20747if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
20748 typeof console.error === 'function') {
20749 console.error(
20750 'This browser lacks typed array (Uint8Array) support which is required by ' +
20751 '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
20752 )
ab78acc6 20753}
3af2954a 20754
8b095871
IC
20755function typedArraySupport () {
20756 // Can typed array instances can be augmented?
20757 try {
20758 var arr = new Uint8Array(1)
20759 arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}
20760 return arr.foo() === 42
20761 } catch (e) {
20762 return false
20763 }
ab78acc6 20764}
3af2954a 20765
8b095871
IC
20766function createBuffer (length) {
20767 if (length > K_MAX_LENGTH) {
20768 throw new RangeError('Invalid typed array length')
3af2954a 20769 }
8b095871
IC
20770 // Return an augmented `Uint8Array` instance
20771 var buf = new Uint8Array(length)
20772 buf.__proto__ = Buffer.prototype
20773 return buf
ab78acc6 20774}
3af2954a 20775
8b095871
IC
20776/**
20777 * The Buffer constructor returns instances of `Uint8Array` that have their
20778 * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
20779 * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
20780 * and the `Uint8Array` methods. Square bracket notation works as expected -- it
20781 * returns a single octet.
20782 *
20783 * The `Uint8Array` prototype remains unmodified.
20784 */
3af2954a 20785
8b095871
IC
20786function Buffer (arg, encodingOrOffset, length) {
20787 // Common case.
20788 if (typeof arg === 'number') {
20789 if (typeof encodingOrOffset === 'string') {
20790 throw new Error(
20791 'If encoding is specified then the first argument must be a string'
20792 )
20793 }
20794 return allocUnsafe(arg)
20795 }
20796 return from(arg, encodingOrOffset, length)
ab78acc6 20797}
3af2954a 20798
8b095871
IC
20799// Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
20800if (typeof Symbol !== 'undefined' && Symbol.species &&
20801 Buffer[Symbol.species] === Buffer) {
20802 Object.defineProperty(Buffer, Symbol.species, {
20803 value: null,
20804 configurable: true,
20805 enumerable: false,
20806 writable: false
20807 })
ab78acc6 20808}
3af2954a 20809
8b095871 20810Buffer.poolSize = 8192 // not used by this implementation
3af2954a 20811
8b095871
IC
20812function from (value, encodingOrOffset, length) {
20813 if (typeof value === 'number') {
20814 throw new TypeError('"value" argument must not be a number')
20815 }
3af2954a 20816
8b095871
IC
20817 if (value instanceof ArrayBuffer) {
20818 return fromArrayBuffer(value, encodingOrOffset, length)
20819 }
3af2954a 20820
8b095871
IC
20821 if (typeof value === 'string') {
20822 return fromString(value, encodingOrOffset)
20823 }
3af2954a 20824
8b095871 20825 return fromObject(value)
ab78acc6 20826}
3af2954a 20827
8b095871
IC
20828/**
20829 * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
20830 * if value is a number.
20831 * Buffer.from(str[, encoding])
20832 * Buffer.from(array)
20833 * Buffer.from(buffer)
20834 * Buffer.from(arrayBuffer[, byteOffset[, length]])
20835 **/
20836Buffer.from = function (value, encodingOrOffset, length) {
20837 return from(value, encodingOrOffset, length)
ab78acc6 20838}
3af2954a 20839
8b095871
IC
20840// Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
20841// https://github.com/feross/buffer/pull/148
20842Buffer.prototype.__proto__ = Uint8Array.prototype
20843Buffer.__proto__ = Uint8Array
20844
20845function assertSize (size) {
20846 if (typeof size !== 'number') {
20847 throw new TypeError('"size" argument must be a number')
20848 } else if (size < 0) {
20849 throw new RangeError('"size" argument must not be negative')
20850 }
20851}
20852
20853function alloc (size, fill, encoding) {
20854 assertSize(size)
20855 if (size <= 0) {
20856 return createBuffer(size)
3af2954a 20857 }
8b095871
IC
20858 if (fill !== undefined) {
20859 // Only pay attention to encoding if it's a string. This
20860 // prevents accidentally sending in a number that would
20861 // be interpretted as a start offset.
20862 return typeof encoding === 'string'
20863 ? createBuffer(size).fill(fill, encoding)
20864 : createBuffer(size).fill(fill)
20865 }
20866 return createBuffer(size)
ab78acc6 20867}
3af2954a 20868
8b095871
IC
20869/**
20870 * Creates a new filled Buffer instance.
20871 * alloc(size[, fill[, encoding]])
20872 **/
20873Buffer.alloc = function (size, fill, encoding) {
20874 return alloc(size, fill, encoding)
ab78acc6 20875}
3af2954a 20876
8b095871
IC
20877function allocUnsafe (size) {
20878 assertSize(size)
20879 return createBuffer(size < 0 ? 0 : checked(size) | 0)
ab78acc6 20880}
3af2954a 20881
8b095871
IC
20882/**
20883 * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
20884 * */
20885Buffer.allocUnsafe = function (size) {
20886 return allocUnsafe(size)
20887}
20888/**
20889 * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
20890 */
20891Buffer.allocUnsafeSlow = function (size) {
20892 return allocUnsafe(size)
ab78acc6 20893}
3af2954a 20894
8b095871
IC
20895function fromString (string, encoding) {
20896 if (typeof encoding !== 'string' || encoding === '') {
20897 encoding = 'utf8'
20898 }
20899
20900 if (!Buffer.isEncoding(encoding)) {
20901 throw new TypeError('"encoding" must be a valid string encoding')
20902 }
20903
20904 var length = byteLength(string, encoding) | 0
20905 var buf = createBuffer(length)
20906
20907 var actual = buf.write(string, encoding)
20908
20909 if (actual !== length) {
20910 // Writing a hex string, for example, that contains invalid characters will
20911 // cause everything after the first invalid character to be ignored. (e.g.
20912 // 'abxxcd' will be treated as 'ab')
20913 buf = buf.slice(0, actual)
20914 }
20915
20916 return buf
ab78acc6 20917}
3af2954a 20918
8b095871
IC
20919function fromArrayLike (array) {
20920 var length = array.length < 0 ? 0 : checked(array.length) | 0
20921 var buf = createBuffer(length)
20922 for (var i = 0; i < length; i += 1) {
20923 buf[i] = array[i] & 255
20924 }
20925 return buf
20926}
3af2954a 20927
8b095871
IC
20928function fromArrayBuffer (array, byteOffset, length) {
20929 if (byteOffset < 0 || array.byteLength < byteOffset) {
20930 throw new RangeError('\'offset\' is out of bounds')
20931 }
3af2954a 20932
8b095871
IC
20933 if (array.byteLength < byteOffset + (length || 0)) {
20934 throw new RangeError('\'length\' is out of bounds')
ab78acc6
IC
20935 }
20936
8b095871
IC
20937 var buf
20938 if (byteOffset === undefined && length === undefined) {
20939 buf = new Uint8Array(array)
20940 } else if (length === undefined) {
20941 buf = new Uint8Array(array, byteOffset)
20942 } else {
20943 buf = new Uint8Array(array, byteOffset, length)
20944 }
3af2954a 20945
8b095871
IC
20946 // Return an augmented `Uint8Array` instance
20947 buf.__proto__ = Buffer.prototype
20948 return buf
20949}
20950
20951function fromObject (obj) {
20952 if (Buffer.isBuffer(obj)) {
20953 var len = checked(obj.length) | 0
20954 var buf = createBuffer(len)
20955
20956 if (buf.length === 0) {
20957 return buf
ab78acc6 20958 }
8b095871
IC
20959
20960 obj.copy(buf, 0, 0, len)
20961 return buf
20962 }
20963
20964 if (obj) {
20965 if (ArrayBuffer.isView(obj) || 'length' in obj) {
20966 if (typeof obj.length !== 'number' || isnan(obj.length)) {
20967 return createBuffer(0)
ab78acc6 20968 }
8b095871 20969 return fromArrayLike(obj)
ab78acc6 20970 }
3af2954a 20971
8b095871
IC
20972 if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
20973 return fromArrayLike(obj.data)
3af2954a
IC
20974 }
20975 }
8b095871
IC
20976
20977 throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')
ab78acc6 20978}
3af2954a 20979
8b095871
IC
20980function checked (length) {
20981 // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
20982 // length is NaN (which is otherwise coerced to zero.)
20983 if (length >= K_MAX_LENGTH) {
20984 throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
20985 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
ab78acc6 20986 }
8b095871
IC
20987 return length | 0
20988}
20989
20990function SlowBuffer (length) {
20991 if (+length != length) { // eslint-disable-line eqeqeq
20992 length = 0
3af2954a 20993 }
8b095871 20994 return Buffer.alloc(+length)
ab78acc6 20995}
3af2954a 20996
8b095871
IC
20997Buffer.isBuffer = function isBuffer (b) {
20998 return b != null && b._isBuffer === true
ab78acc6 20999}
3af2954a 21000
8b095871
IC
21001Buffer.compare = function compare (a, b) {
21002 if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
21003 throw new TypeError('Arguments must be Buffers')
21004 }
21005
21006 if (a === b) return 0
21007
21008 var x = a.length
21009 var y = b.length
21010
21011 for (var i = 0, len = Math.min(x, y); i < len; ++i) {
21012 if (a[i] !== b[i]) {
21013 x = a[i]
21014 y = b[i]
21015 break
ab78acc6
IC
21016 }
21017 }
8b095871
IC
21018
21019 if (x < y) return -1
21020 if (y < x) return 1
21021 return 0
21022}
21023
21024Buffer.isEncoding = function isEncoding (encoding) {
21025 switch (String(encoding).toLowerCase()) {
21026 case 'hex':
21027 case 'utf8':
21028 case 'utf-8':
21029 case 'ascii':
21030 case 'latin1':
21031 case 'binary':
21032 case 'base64':
21033 case 'ucs2':
21034 case 'ucs-2':
21035 case 'utf16le':
21036 case 'utf-16le':
21037 return true
21038 default:
21039 return false
21040 }
ab78acc6
IC
21041}
21042
8b095871
IC
21043Buffer.concat = function concat (list, length) {
21044 if (!Array.isArray(list)) {
21045 throw new TypeError('"list" argument must be an Array of Buffers')
21046 }
ab78acc6 21047
8b095871
IC
21048 if (list.length === 0) {
21049 return Buffer.alloc(0)
21050 }
ab78acc6 21051
8b095871
IC
21052 var i
21053 if (length === undefined) {
21054 length = 0
21055 for (i = 0; i < list.length; ++i) {
21056 length += list[i].length
21057 }
3af2954a 21058 }
8b095871
IC
21059
21060 var buffer = Buffer.allocUnsafe(length)
21061 var pos = 0
21062 for (i = 0; i < list.length; ++i) {
21063 var buf = list[i]
21064 if (!Buffer.isBuffer(buf)) {
21065 throw new TypeError('"list" argument must be an Array of Buffers')
21066 }
21067 buf.copy(buffer, pos)
21068 pos += buf.length
ab78acc6 21069 }
8b095871 21070 return buffer
ab78acc6
IC
21071}
21072
8b095871
IC
21073function byteLength (string, encoding) {
21074 if (Buffer.isBuffer(string)) {
21075 return string.length
21076 }
21077 if (ArrayBuffer.isView(string) || string instanceof ArrayBuffer) {
21078 return string.byteLength
21079 }
21080 if (typeof string !== 'string') {
21081 string = '' + string
21082 }
21083
21084 var len = string.length
21085 if (len === 0) return 0
21086
21087 // Use a for loop to avoid recursion
21088 var loweredCase = false
21089 for (;;) {
21090 switch (encoding) {
21091 case 'ascii':
21092 case 'latin1':
21093 case 'binary':
21094 return len
21095 case 'utf8':
21096 case 'utf-8':
21097 case undefined:
21098 return utf8ToBytes(string).length
21099 case 'ucs2':
21100 case 'ucs-2':
21101 case 'utf16le':
21102 case 'utf-16le':
21103 return len * 2
21104 case 'hex':
21105 return len >>> 1
21106 case 'base64':
21107 return base64ToBytes(string).length
21108 default:
21109 if (loweredCase) return utf8ToBytes(string).length // assume utf8
21110 encoding = ('' + encoding).toLowerCase()
21111 loweredCase = true
ab78acc6 21112 }
3af2954a 21113 }
ab78acc6 21114}
8b095871 21115Buffer.byteLength = byteLength
3af2954a 21116
8b095871
IC
21117function slowToString (encoding, start, end) {
21118 var loweredCase = false
3af2954a 21119
8b095871
IC
21120 // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
21121 // property of a typed array.
3af2954a 21122
8b095871
IC
21123 // This behaves neither like String nor Uint8Array in that we set start/end
21124 // to their upper/lower bounds if the value passed is out of range.
21125 // undefined is handled specially as per ECMA-262 6th Edition,
21126 // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
21127 if (start === undefined || start < 0) {
21128 start = 0
21129 }
21130 // Return early if start > this.length. Done here to prevent potential uint32
21131 // coercion fail below.
21132 if (start > this.length) {
21133 return ''
21134 }
3af2954a 21135
8b095871
IC
21136 if (end === undefined || end > this.length) {
21137 end = this.length
21138 }
3af2954a 21139
8b095871
IC
21140 if (end <= 0) {
21141 return ''
21142 }
3af2954a 21143
8b095871
IC
21144 // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
21145 end >>>= 0
21146 start >>>= 0
3af2954a 21147
8b095871
IC
21148 if (end <= start) {
21149 return ''
3af2954a
IC
21150 }
21151
8b095871 21152 if (!encoding) encoding = 'utf8'
3af2954a 21153
8b095871
IC
21154 while (true) {
21155 switch (encoding) {
21156 case 'hex':
21157 return hexSlice(this, start, end)
21158
21159 case 'utf8':
21160 case 'utf-8':
21161 return utf8Slice(this, start, end)
21162
21163 case 'ascii':
21164 return asciiSlice(this, start, end)
21165
21166 case 'latin1':
21167 case 'binary':
21168 return latin1Slice(this, start, end)
21169
21170 case 'base64':
21171 return base64Slice(this, start, end)
21172
21173 case 'ucs2':
21174 case 'ucs-2':
21175 case 'utf16le':
21176 case 'utf-16le':
21177 return utf16leSlice(this, start, end)
21178
21179 default:
21180 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
21181 encoding = (encoding + '').toLowerCase()
21182 loweredCase = true
21183 }
21184 }
ab78acc6 21185}
3af2954a 21186
8b095871
IC
21187// This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
21188// to detect a Buffer instance. It's not possible to use `instanceof Buffer`
21189// reliably in a browserify context because there could be multiple different
21190// copies of the 'buffer' package in use. This method works even for Buffer
21191// instances that were created from another copy of the `buffer` package.
21192// See: https://github.com/feross/buffer/issues/154
21193Buffer.prototype._isBuffer = true
21194
21195function swap (b, n, m) {
21196 var i = b[n]
21197 b[n] = b[m]
21198 b[m] = i
ab78acc6 21199}
3af2954a 21200
8b095871
IC
21201Buffer.prototype.swap16 = function swap16 () {
21202 var len = this.length
21203 if (len % 2 !== 0) {
21204 throw new RangeError('Buffer size must be a multiple of 16-bits')
21205 }
21206 for (var i = 0; i < len; i += 2) {
21207 swap(this, i, i + 1)
21208 }
21209 return this
21210}
3af2954a 21211
8b095871
IC
21212Buffer.prototype.swap32 = function swap32 () {
21213 var len = this.length
21214 if (len % 4 !== 0) {
21215 throw new RangeError('Buffer size must be a multiple of 32-bits')
21216 }
21217 for (var i = 0; i < len; i += 4) {
21218 swap(this, i, i + 3)
21219 swap(this, i + 1, i + 2)
21220 }
21221 return this
21222}
3af2954a 21223
8b095871
IC
21224Buffer.prototype.swap64 = function swap64 () {
21225 var len = this.length
21226 if (len % 8 !== 0) {
21227 throw new RangeError('Buffer size must be a multiple of 64-bits')
3af2954a 21228 }
8b095871
IC
21229 for (var i = 0; i < len; i += 8) {
21230 swap(this, i, i + 7)
21231 swap(this, i + 1, i + 6)
21232 swap(this, i + 2, i + 5)
21233 swap(this, i + 3, i + 4)
21234 }
21235 return this
21236}
3af2954a 21237
8b095871
IC
21238Buffer.prototype.toString = function toString () {
21239 var length = this.length
21240 if (length === 0) return ''
21241 if (arguments.length === 0) return utf8Slice(this, 0, length)
21242 return slowToString.apply(this, arguments)
ab78acc6 21243}
3af2954a 21244
8b095871
IC
21245Buffer.prototype.equals = function equals (b) {
21246 if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
21247 if (this === b) return true
21248 return Buffer.compare(this, b) === 0
21249}
3af2954a 21250
8b095871
IC
21251Buffer.prototype.inspect = function inspect () {
21252 var str = ''
21253 var max = exports.INSPECT_MAX_BYTES
21254 if (this.length > 0) {
21255 str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')
21256 if (this.length > max) str += ' ... '
21257 }
21258 return '<Buffer ' + str + '>'
ab78acc6 21259}
3af2954a 21260
8b095871
IC
21261Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
21262 if (!Buffer.isBuffer(target)) {
21263 throw new TypeError('Argument must be a Buffer')
21264 }
3af2954a 21265
8b095871
IC
21266 if (start === undefined) {
21267 start = 0
21268 }
21269 if (end === undefined) {
21270 end = target ? target.length : 0
21271 }
21272 if (thisStart === undefined) {
21273 thisStart = 0
21274 }
21275 if (thisEnd === undefined) {
21276 thisEnd = this.length
21277 }
3af2954a 21278
8b095871
IC
21279 if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
21280 throw new RangeError('out of range index')
21281 }
3af2954a 21282
8b095871
IC
21283 if (thisStart >= thisEnd && start >= end) {
21284 return 0
21285 }
21286 if (thisStart >= thisEnd) {
21287 return -1
21288 }
21289 if (start >= end) {
21290 return 1
21291 }
3af2954a 21292
8b095871
IC
21293 start >>>= 0
21294 end >>>= 0
21295 thisStart >>>= 0
21296 thisEnd >>>= 0
3af2954a 21297
8b095871 21298 if (this === target) return 0
3af2954a 21299
8b095871
IC
21300 var x = thisEnd - thisStart
21301 var y = end - start
21302 var len = Math.min(x, y)
21303
21304 var thisCopy = this.slice(thisStart, thisEnd)
21305 var targetCopy = target.slice(start, end)
21306
21307 for (var i = 0; i < len; ++i) {
21308 if (thisCopy[i] !== targetCopy[i]) {
21309 x = thisCopy[i]
21310 y = targetCopy[i]
21311 break
3af2954a 21312 }
8b095871
IC
21313 }
21314
21315 if (x < y) return -1
21316 if (y < x) return 1
21317 return 0
ab78acc6 21318}
3af2954a 21319
8b095871
IC
21320// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
21321// OR the last index of `val` in `buffer` at offset <= `byteOffset`.
ab78acc6 21322//
8b095871
IC
21323// Arguments:
21324// - buffer - a Buffer to search
21325// - val - a string, Buffer, or number
21326// - byteOffset - an index into `buffer`; will be clamped to an int32
21327// - encoding - an optional encoding, relevant is val is a string
21328// - dir - true for indexOf, false for lastIndexOf
21329function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
21330 // Empty buffer means no match
21331 if (buffer.length === 0) return -1
21332
21333 // Normalize byteOffset
21334 if (typeof byteOffset === 'string') {
21335 encoding = byteOffset
21336 byteOffset = 0
21337 } else if (byteOffset > 0x7fffffff) {
21338 byteOffset = 0x7fffffff
21339 } else if (byteOffset < -0x80000000) {
21340 byteOffset = -0x80000000
21341 }
21342 byteOffset = +byteOffset // Coerce to Number.
21343 if (isNaN(byteOffset)) {
21344 // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
21345 byteOffset = dir ? 0 : (buffer.length - 1)
21346 }
21347
21348 // Normalize byteOffset: negative offsets start from the end of the buffer
21349 if (byteOffset < 0) byteOffset = buffer.length + byteOffset
21350 if (byteOffset >= buffer.length) {
21351 if (dir) return -1
21352 else byteOffset = buffer.length - 1
21353 } else if (byteOffset < 0) {
21354 if (dir) byteOffset = 0
21355 else return -1
21356 }
21357
21358 // Normalize val
21359 if (typeof val === 'string') {
21360 val = Buffer.from(val, encoding)
21361 }
3af2954a 21362
8b095871
IC
21363 // Finally, search either indexOf (if dir is true) or lastIndexOf
21364 if (Buffer.isBuffer(val)) {
21365 // Special case: looking for empty string/buffer always fails
21366 if (val.length === 0) {
21367 return -1
21368 }
21369 return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
21370 } else if (typeof val === 'number') {
21371 val = val & 0xFF // Search for a byte value [0-255]
21372 if (typeof Uint8Array.prototype.indexOf === 'function') {
21373 if (dir) {
21374 return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
21375 } else {
21376 return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
21377 }
21378 }
21379 return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
21380 }
3af2954a 21381
8b095871
IC
21382 throw new TypeError('val must be string, number or Buffer')
21383}
3af2954a 21384
8b095871
IC
21385function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
21386 var indexSize = 1
21387 var arrLength = arr.length
21388 var valLength = val.length
3af2954a 21389
8b095871
IC
21390 if (encoding !== undefined) {
21391 encoding = String(encoding).toLowerCase()
21392 if (encoding === 'ucs2' || encoding === 'ucs-2' ||
21393 encoding === 'utf16le' || encoding === 'utf-16le') {
21394 if (arr.length < 2 || val.length < 2) {
21395 return -1
21396 }
21397 indexSize = 2
21398 arrLength /= 2
21399 valLength /= 2
21400 byteOffset /= 2
21401 }
21402 }
3af2954a 21403
8b095871
IC
21404 function read (buf, i) {
21405 if (indexSize === 1) {
21406 return buf[i]
21407 } else {
21408 return buf.readUInt16BE(i * indexSize)
21409 }
21410 }
3af2954a 21411
8b095871
IC
21412 var i
21413 if (dir) {
21414 var foundIndex = -1
21415 for (i = byteOffset; i < arrLength; i++) {
21416 if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
21417 if (foundIndex === -1) foundIndex = i
21418 if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
21419 } else {
21420 if (foundIndex !== -1) i -= i - foundIndex
21421 foundIndex = -1
21422 }
21423 }
ab78acc6 21424 } else {
8b095871
IC
21425 if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
21426 for (i = byteOffset; i >= 0; i--) {
21427 var found = true
21428 for (var j = 0; j < valLength; j++) {
21429 if (read(arr, i + j) !== read(val, j)) {
21430 found = false
21431 break
21432 }
21433 }
21434 if (found) return i
21435 }
ab78acc6 21436 }
3af2954a 21437
8b095871
IC
21438 return -1
21439}
3af2954a 21440
8b095871
IC
21441Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
21442 return this.indexOf(val, byteOffset, encoding) !== -1
21443}
21444
21445Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
21446 return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
21447}
3af2954a 21448
8b095871
IC
21449Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
21450 return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
21451}
21452
21453function hexWrite (buf, string, offset, length) {
21454 offset = Number(offset) || 0
21455 var remaining = buf.length - offset
21456 if (!length) {
21457 length = remaining
21458 } else {
21459 length = Number(length)
21460 if (length > remaining) {
21461 length = remaining
3af2954a 21462 }
3af2954a
IC
21463 }
21464
8b095871
IC
21465 // must be an even number of digits
21466 var strLen = string.length
21467 if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')
3af2954a 21468
8b095871
IC
21469 if (length > strLen / 2) {
21470 length = strLen / 2
ab78acc6 21471 }
8b095871
IC
21472 for (var i = 0; i < length; ++i) {
21473 var parsed = parseInt(string.substr(i * 2, 2), 16)
21474 if (isNaN(parsed)) return i
21475 buf[offset + i] = parsed
ab78acc6 21476 }
8b095871 21477 return i
ab78acc6 21478}
3af2954a 21479
8b095871
IC
21480function utf8Write (buf, string, offset, length) {
21481 return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
ab78acc6 21482}
3af2954a 21483
8b095871
IC
21484function asciiWrite (buf, string, offset, length) {
21485 return blitBuffer(asciiToBytes(string), buf, offset, length)
ab78acc6 21486}
3af2954a 21487
8b095871
IC
21488function latin1Write (buf, string, offset, length) {
21489 return asciiWrite(buf, string, offset, length)
ab78acc6 21490}
3af2954a 21491
8b095871
IC
21492function base64Write (buf, string, offset, length) {
21493 return blitBuffer(base64ToBytes(string), buf, offset, length)
ab78acc6 21494}
3af2954a 21495
8b095871
IC
21496function ucs2Write (buf, string, offset, length) {
21497 return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
21498}
3af2954a 21499
8b095871
IC
21500Buffer.prototype.write = function write (string, offset, length, encoding) {
21501 // Buffer#write(string)
21502 if (offset === undefined) {
21503 encoding = 'utf8'
21504 length = this.length
21505 offset = 0
21506 // Buffer#write(string, encoding)
21507 } else if (length === undefined && typeof offset === 'string') {
21508 encoding = offset
21509 length = this.length
21510 offset = 0
21511 // Buffer#write(string, offset[, length][, encoding])
21512 } else if (isFinite(offset)) {
21513 offset = offset >>> 0
21514 if (isFinite(length)) {
21515 length = length >>> 0
21516 if (encoding === undefined) encoding = 'utf8'
21517 } else {
21518 encoding = length
21519 length = undefined
21520 }
21521 } else {
21522 throw new Error(
21523 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
21524 )
3af2954a
IC
21525 }
21526
8b095871
IC
21527 var remaining = this.length - offset
21528 if (length === undefined || length > remaining) length = remaining
3af2954a 21529
8b095871
IC
21530 if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
21531 throw new RangeError('Attempt to write outside buffer bounds')
ab78acc6 21532 }
3af2954a 21533
8b095871 21534 if (!encoding) encoding = 'utf8'
3af2954a 21535
8b095871
IC
21536 var loweredCase = false
21537 for (;;) {
21538 switch (encoding) {
21539 case 'hex':
21540 return hexWrite(this, string, offset, length)
3af2954a 21541
8b095871
IC
21542 case 'utf8':
21543 case 'utf-8':
21544 return utf8Write(this, string, offset, length)
3af2954a 21545
8b095871
IC
21546 case 'ascii':
21547 return asciiWrite(this, string, offset, length)
3af2954a 21548
8b095871
IC
21549 case 'latin1':
21550 case 'binary':
21551 return latin1Write(this, string, offset, length)
3af2954a 21552
8b095871
IC
21553 case 'base64':
21554 // Warning: maxLength not taken into account in base64Write
21555 return base64Write(this, string, offset, length)
3af2954a 21556
8b095871
IC
21557 case 'ucs2':
21558 case 'ucs-2':
21559 case 'utf16le':
21560 case 'utf-16le':
21561 return ucs2Write(this, string, offset, length)
3af2954a 21562
8b095871
IC
21563 default:
21564 if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
21565 encoding = ('' + encoding).toLowerCase()
21566 loweredCase = true
21567 }
3af2954a 21568 }
ab78acc6 21569}
3af2954a 21570
8b095871
IC
21571Buffer.prototype.toJSON = function toJSON () {
21572 return {
21573 type: 'Buffer',
21574 data: Array.prototype.slice.call(this._arr || this, 0)
3af2954a 21575 }
ab78acc6
IC
21576}
21577
8b095871
IC
21578function base64Slice (buf, start, end) {
21579 if (start === 0 && end === buf.length) {
21580 return base64.fromByteArray(buf)
21581 } else {
21582 return base64.fromByteArray(buf.slice(start, end))
3af2954a 21583 }
8b095871 21584}
3af2954a 21585
8b095871
IC
21586function utf8Slice (buf, start, end) {
21587 end = Math.min(buf.length, end)
21588 var res = []
3af2954a 21589
8b095871
IC
21590 var i = start
21591 while (i < end) {
21592 var firstByte = buf[i]
21593 var codePoint = null
21594 var bytesPerSequence = (firstByte > 0xEF) ? 4
21595 : (firstByte > 0xDF) ? 3
21596 : (firstByte > 0xBF) ? 2
21597 : 1
3af2954a 21598
8b095871
IC
21599 if (i + bytesPerSequence <= end) {
21600 var secondByte, thirdByte, fourthByte, tempCodePoint
3af2954a 21601
8b095871
IC
21602 switch (bytesPerSequence) {
21603 case 1:
21604 if (firstByte < 0x80) {
21605 codePoint = firstByte
21606 }
21607 break
21608 case 2:
21609 secondByte = buf[i + 1]
21610 if ((secondByte & 0xC0) === 0x80) {
21611 tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
21612 if (tempCodePoint > 0x7F) {
21613 codePoint = tempCodePoint
21614 }
21615 }
21616 break
21617 case 3:
21618 secondByte = buf[i + 1]
21619 thirdByte = buf[i + 2]
21620 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
21621 tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
21622 if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
21623 codePoint = tempCodePoint
21624 }
21625 }
21626 break
21627 case 4:
21628 secondByte = buf[i + 1]
21629 thirdByte = buf[i + 2]
21630 fourthByte = buf[i + 3]
21631 if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
21632 tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
21633 if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
21634 codePoint = tempCodePoint
21635 }
21636 }
21637 }
21638 }
3af2954a 21639
8b095871
IC
21640 if (codePoint === null) {
21641 // we did not generate a valid codePoint so insert a
21642 // replacement char (U+FFFD) and advance only 1 byte
21643 codePoint = 0xFFFD
21644 bytesPerSequence = 1
21645 } else if (codePoint > 0xFFFF) {
21646 // encode to utf16 (surrogate pair dance)
21647 codePoint -= 0x10000
21648 res.push(codePoint >>> 10 & 0x3FF | 0xD800)
21649 codePoint = 0xDC00 | codePoint & 0x3FF
21650 }
21651
21652 res.push(codePoint)
21653 i += bytesPerSequence
3af2954a
IC
21654 }
21655
8b095871 21656 return decodeCodePointsArray(res)
ab78acc6 21657}
3af2954a 21658
8b095871
IC
21659// Based on http://stackoverflow.com/a/22747272/680742, the browser with
21660// the lowest limit is Chrome, with 0x10000 args.
21661// We go 1 magnitude less, for safety
21662var MAX_ARGUMENTS_LENGTH = 0x1000
3af2954a 21663
8b095871
IC
21664function decodeCodePointsArray (codePoints) {
21665 var len = codePoints.length
21666 if (len <= MAX_ARGUMENTS_LENGTH) {
21667 return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
3af2954a
IC
21668 }
21669
8b095871
IC
21670 // Decode in chunks to avoid "call stack size exceeded".
21671 var res = ''
21672 var i = 0
21673 while (i < len) {
21674 res += String.fromCharCode.apply(
21675 String,
21676 codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
21677 )
3af2954a 21678 }
8b095871
IC
21679 return res
21680}
3af2954a 21681
8b095871
IC
21682function asciiSlice (buf, start, end) {
21683 var ret = ''
21684 end = Math.min(buf.length, end)
3af2954a 21685
8b095871
IC
21686 for (var i = start; i < end; ++i) {
21687 ret += String.fromCharCode(buf[i] & 0x7F)
3af2954a 21688 }
8b095871
IC
21689 return ret
21690}
3af2954a 21691
8b095871
IC
21692function latin1Slice (buf, start, end) {
21693 var ret = ''
21694 end = Math.min(buf.length, end)
3af2954a 21695
8b095871
IC
21696 for (var i = start; i < end; ++i) {
21697 ret += String.fromCharCode(buf[i])
3af2954a 21698 }
8b095871 21699 return ret
ab78acc6 21700}
3af2954a 21701
8b095871
IC
21702function hexSlice (buf, start, end) {
21703 var len = buf.length
3af2954a 21704
8b095871
IC
21705 if (!start || start < 0) start = 0
21706 if (!end || end < 0 || end > len) end = len
3af2954a 21707
8b095871
IC
21708 var out = ''
21709 for (var i = start; i < end; ++i) {
21710 out += toHex(buf[i])
3af2954a 21711 }
8b095871
IC
21712 return out
21713}
3af2954a 21714
8b095871
IC
21715function utf16leSlice (buf, start, end) {
21716 var bytes = buf.slice(start, end)
21717 var res = ''
21718 for (var i = 0; i < bytes.length; i += 2) {
21719 res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
21720 }
21721 return res
21722}
3af2954a 21723
8b095871
IC
21724Buffer.prototype.slice = function slice (start, end) {
21725 var len = this.length
21726 start = ~~start
21727 end = end === undefined ? len : ~~end
3af2954a 21728
8b095871
IC
21729 if (start < 0) {
21730 start += len
21731 if (start < 0) start = 0
21732 } else if (start > len) {
21733 start = len
21734 }
3af2954a 21735
8b095871
IC
21736 if (end < 0) {
21737 end += len
21738 if (end < 0) end = 0
21739 } else if (end > len) {
21740 end = len
21741 }
3af2954a 21742
8b095871 21743 if (end < start) end = start
3af2954a 21744
8b095871
IC
21745 var newBuf = this.subarray(start, end)
21746 // Return an augmented `Uint8Array` instance
21747 newBuf.__proto__ = Buffer.prototype
21748 return newBuf
21749}
3af2954a 21750
8b095871
IC
21751/*
21752 * Need to make sure that buffer isn't trying to write out of bounds.
ab78acc6 21753 */
8b095871
IC
21754function checkOffset (offset, ext, length) {
21755 if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
21756 if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
ab78acc6 21757}
3af2954a 21758
8b095871
IC
21759Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
21760 offset = offset >>> 0
21761 byteLength = byteLength >>> 0
21762 if (!noAssert) checkOffset(offset, byteLength, this.length)
21763
21764 var val = this[offset]
21765 var mul = 1
21766 var i = 0
21767 while (++i < byteLength && (mul *= 0x100)) {
21768 val += this[offset + i] * mul
3af2954a
IC
21769 }
21770
8b095871
IC
21771 return val
21772}
3af2954a 21773
8b095871
IC
21774Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
21775 offset = offset >>> 0
21776 byteLength = byteLength >>> 0
21777 if (!noAssert) {
21778 checkOffset(offset, byteLength, this.length)
ab78acc6 21779 }
3af2954a 21780
8b095871
IC
21781 var val = this[offset + --byteLength]
21782 var mul = 1
21783 while (byteLength > 0 && (mul *= 0x100)) {
21784 val += this[offset + --byteLength] * mul
ab78acc6 21785 }
3af2954a 21786
8b095871 21787 return val
ab78acc6 21788}
3af2954a 21789
8b095871
IC
21790Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
21791 offset = offset >>> 0
21792 if (!noAssert) checkOffset(offset, 1, this.length)
21793 return this[offset]
ab78acc6 21794}
3af2954a 21795
8b095871
IC
21796Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
21797 offset = offset >>> 0
21798 if (!noAssert) checkOffset(offset, 2, this.length)
21799 return this[offset] | (this[offset + 1] << 8)
21800}
3af2954a 21801
8b095871
IC
21802Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
21803 offset = offset >>> 0
21804 if (!noAssert) checkOffset(offset, 2, this.length)
21805 return (this[offset] << 8) | this[offset + 1]
21806}
3af2954a 21807
8b095871
IC
21808Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
21809 offset = offset >>> 0
21810 if (!noAssert) checkOffset(offset, 4, this.length)
21811
21812 return ((this[offset]) |
21813 (this[offset + 1] << 8) |
21814 (this[offset + 2] << 16)) +
21815 (this[offset + 3] * 0x1000000)
ab78acc6 21816}
3af2954a 21817
8b095871
IC
21818Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
21819 offset = offset >>> 0
21820 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 21821
8b095871
IC
21822 return (this[offset] * 0x1000000) +
21823 ((this[offset + 1] << 16) |
21824 (this[offset + 2] << 8) |
21825 this[offset + 3])
21826}
3af2954a 21827
8b095871
IC
21828Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
21829 offset = offset >>> 0
21830 byteLength = byteLength >>> 0
21831 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 21832
8b095871
IC
21833 var val = this[offset]
21834 var mul = 1
21835 var i = 0
21836 while (++i < byteLength && (mul *= 0x100)) {
21837 val += this[offset + i] * mul
3af2954a 21838 }
8b095871 21839 mul *= 0x80
3af2954a 21840
8b095871 21841 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
3af2954a 21842
8b095871 21843 return val
ab78acc6 21844}
3af2954a 21845
8b095871
IC
21846Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
21847 offset = offset >>> 0
21848 byteLength = byteLength >>> 0
21849 if (!noAssert) checkOffset(offset, byteLength, this.length)
3af2954a 21850
8b095871
IC
21851 var i = byteLength
21852 var mul = 1
21853 var val = this[offset + --i]
21854 while (i > 0 && (mul *= 0x100)) {
21855 val += this[offset + --i] * mul
3af2954a 21856 }
8b095871 21857 mul *= 0x80
3af2954a 21858
8b095871
IC
21859 if (val >= mul) val -= Math.pow(2, 8 * byteLength)
21860
21861 return val
ab78acc6 21862}
3af2954a 21863
8b095871
IC
21864Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
21865 offset = offset >>> 0
21866 if (!noAssert) checkOffset(offset, 1, this.length)
21867 if (!(this[offset] & 0x80)) return (this[offset])
21868 return ((0xff - this[offset] + 1) * -1)
ab78acc6 21869}
3af2954a 21870
8b095871
IC
21871Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
21872 offset = offset >>> 0
21873 if (!noAssert) checkOffset(offset, 2, this.length)
21874 var val = this[offset] | (this[offset + 1] << 8)
21875 return (val & 0x8000) ? val | 0xFFFF0000 : val
ab78acc6 21876}
3af2954a 21877
8b095871
IC
21878Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
21879 offset = offset >>> 0
21880 if (!noAssert) checkOffset(offset, 2, this.length)
21881 var val = this[offset + 1] | (this[offset] << 8)
21882 return (val & 0x8000) ? val | 0xFFFF0000 : val
21883}
ab78acc6 21884
8b095871
IC
21885Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
21886 offset = offset >>> 0
21887 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 21888
8b095871
IC
21889 return (this[offset]) |
21890 (this[offset + 1] << 8) |
21891 (this[offset + 2] << 16) |
21892 (this[offset + 3] << 24)
ab78acc6 21893}
3af2954a 21894
8b095871
IC
21895Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
21896 offset = offset >>> 0
21897 if (!noAssert) checkOffset(offset, 4, this.length)
3af2954a 21898
8b095871
IC
21899 return (this[offset] << 24) |
21900 (this[offset + 1] << 16) |
21901 (this[offset + 2] << 8) |
21902 (this[offset + 3])
21903}
3af2954a 21904
8b095871
IC
21905Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
21906 offset = offset >>> 0
21907 if (!noAssert) checkOffset(offset, 4, this.length)
21908 return ieee754.read(this, offset, true, 23, 4)
ab78acc6 21909}
3af2954a 21910
8b095871
IC
21911Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
21912 offset = offset >>> 0
21913 if (!noAssert) checkOffset(offset, 4, this.length)
21914 return ieee754.read(this, offset, false, 23, 4)
ab78acc6 21915}
3af2954a 21916
8b095871
IC
21917Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
21918 offset = offset >>> 0
21919 if (!noAssert) checkOffset(offset, 8, this.length)
21920 return ieee754.read(this, offset, true, 52, 8)
21921}
3af2954a 21922
8b095871
IC
21923Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
21924 offset = offset >>> 0
21925 if (!noAssert) checkOffset(offset, 8, this.length)
21926 return ieee754.read(this, offset, false, 52, 8)
ab78acc6 21927}
3af2954a 21928
8b095871
IC
21929function checkInt (buf, value, offset, ext, max, min) {
21930 if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
21931 if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
21932 if (offset + ext > buf.length) throw new RangeError('Index out of range')
ab78acc6 21933}
3af2954a 21934
8b095871
IC
21935Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
21936 value = +value
21937 offset = offset >>> 0
21938 byteLength = byteLength >>> 0
21939 if (!noAssert) {
21940 var maxBytes = Math.pow(2, 8 * byteLength) - 1
21941 checkInt(this, value, offset, byteLength, maxBytes, 0)
3af2954a
IC
21942 }
21943
8b095871 21944 var mul = 1
ab78acc6 21945 var i = 0
8b095871
IC
21946 this[offset] = value & 0xFF
21947 while (++i < byteLength && (mul *= 0x100)) {
21948 this[offset + i] = (value / mul) & 0xFF
21949 }
3af2954a 21950
8b095871
IC
21951 return offset + byteLength
21952}
21953
21954Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
21955 value = +value
21956 offset = offset >>> 0
21957 byteLength = byteLength >>> 0
21958 if (!noAssert) {
21959 var maxBytes = Math.pow(2, 8 * byteLength) - 1
21960 checkInt(this, value, offset, byteLength, maxBytes, 0)
ab78acc6 21961 }
3af2954a 21962
8b095871
IC
21963 var i = byteLength - 1
21964 var mul = 1
21965 this[offset + i] = value & 0xFF
21966 while (--i >= 0 && (mul *= 0x100)) {
21967 this[offset + i] = (value / mul) & 0xFF
ab78acc6 21968 }
3af2954a 21969
8b095871
IC
21970 return offset + byteLength
21971}
21972
21973Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
21974 value = +value
21975 offset = offset >>> 0
21976 if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
21977 this[offset] = (value & 0xff)
21978 return offset + 1
21979}
21980
21981Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
21982 value = +value
21983 offset = offset >>> 0
21984 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
21985 this[offset] = (value & 0xff)
21986 this[offset + 1] = (value >>> 8)
21987 return offset + 2
21988}
21989
21990Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
21991 value = +value
21992 offset = offset >>> 0
21993 if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
21994 this[offset] = (value >>> 8)
21995 this[offset + 1] = (value & 0xff)
21996 return offset + 2
ab78acc6 21997}
3af2954a 21998
8b095871
IC
21999Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
22000 value = +value
22001 offset = offset >>> 0
22002 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
22003 this[offset + 3] = (value >>> 24)
22004 this[offset + 2] = (value >>> 16)
22005 this[offset + 1] = (value >>> 8)
22006 this[offset] = (value & 0xff)
22007 return offset + 4
ab78acc6 22008}
3af2954a 22009
8b095871
IC
22010Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
22011 value = +value
22012 offset = offset >>> 0
22013 if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
22014 this[offset] = (value >>> 24)
22015 this[offset + 1] = (value >>> 16)
22016 this[offset + 2] = (value >>> 8)
22017 this[offset + 3] = (value & 0xff)
22018 return offset + 4
22019}
3af2954a 22020
8b095871
IC
22021Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
22022 value = +value
22023 offset = offset >>> 0
22024 if (!noAssert) {
22025 var limit = Math.pow(2, (8 * byteLength) - 1)
22026
22027 checkInt(this, value, offset, byteLength, limit - 1, -limit)
3af2954a
IC
22028 }
22029
8b095871
IC
22030 var i = 0
22031 var mul = 1
22032 var sub = 0
22033 this[offset] = value & 0xFF
22034 while (++i < byteLength && (mul *= 0x100)) {
22035 if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
22036 sub = 1
ab78acc6 22037 }
8b095871 22038 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a
IC
22039 }
22040
8b095871 22041 return offset + byteLength
ab78acc6 22042}
3af2954a 22043
8b095871
IC
22044Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
22045 value = +value
22046 offset = offset >>> 0
22047 if (!noAssert) {
22048 var limit = Math.pow(2, (8 * byteLength) - 1)
ab78acc6 22049
8b095871
IC
22050 checkInt(this, value, offset, byteLength, limit - 1, -limit)
22051 }
ab78acc6 22052
8b095871
IC
22053 var i = byteLength - 1
22054 var mul = 1
22055 var sub = 0
22056 this[offset + i] = value & 0xFF
22057 while (--i >= 0 && (mul *= 0x100)) {
22058 if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
22059 sub = 1
3af2954a 22060 }
8b095871 22061 this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
3af2954a 22062 }
3af2954a 22063
8b095871
IC
22064 return offset + byteLength
22065}
3af2954a 22066
8b095871
IC
22067Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
22068 value = +value
22069 offset = offset >>> 0
22070 if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
22071 if (value < 0) value = 0xff + value + 1
22072 this[offset] = (value & 0xff)
22073 return offset + 1
22074}
3af2954a 22075
8b095871
IC
22076Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
22077 value = +value
22078 offset = offset >>> 0
22079 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
22080 this[offset] = (value & 0xff)
22081 this[offset + 1] = (value >>> 8)
22082 return offset + 2
22083}
3af2954a 22084
8b095871
IC
22085Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
22086 value = +value
22087 offset = offset >>> 0
22088 if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
22089 this[offset] = (value >>> 8)
22090 this[offset + 1] = (value & 0xff)
22091 return offset + 2
22092}
3af2954a 22093
8b095871
IC
22094Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
22095 value = +value
22096 offset = offset >>> 0
22097 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
22098 this[offset] = (value & 0xff)
22099 this[offset + 1] = (value >>> 8)
22100 this[offset + 2] = (value >>> 16)
22101 this[offset + 3] = (value >>> 24)
22102 return offset + 4
22103}
3af2954a 22104
8b095871
IC
22105Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
22106 value = +value
22107 offset = offset >>> 0
22108 if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
22109 if (value < 0) value = 0xffffffff + value + 1
22110 this[offset] = (value >>> 24)
22111 this[offset + 1] = (value >>> 16)
22112 this[offset + 2] = (value >>> 8)
22113 this[offset + 3] = (value & 0xff)
22114 return offset + 4
22115}
3af2954a 22116
8b095871
IC
22117function checkIEEE754 (buf, value, offset, ext, max, min) {
22118 if (offset + ext > buf.length) throw new RangeError('Index out of range')
22119 if (offset < 0) throw new RangeError('Index out of range')
22120}
3af2954a 22121
8b095871
IC
22122function writeFloat (buf, value, offset, littleEndian, noAssert) {
22123 value = +value
22124 offset = offset >>> 0
22125 if (!noAssert) {
22126 checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
3af2954a 22127 }
8b095871
IC
22128 ieee754.write(buf, value, offset, littleEndian, 23, 4)
22129 return offset + 4
ab78acc6 22130}
3af2954a 22131
8b095871
IC
22132Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
22133 return writeFloat(this, value, offset, true, noAssert)
ab78acc6 22134}
3af2954a 22135
8b095871
IC
22136Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
22137 return writeFloat(this, value, offset, false, noAssert)
ab78acc6 22138}
3af2954a 22139
8b095871
IC
22140function writeDouble (buf, value, offset, littleEndian, noAssert) {
22141 value = +value
22142 offset = offset >>> 0
22143 if (!noAssert) {
22144 checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
3af2954a 22145 }
8b095871
IC
22146 ieee754.write(buf, value, offset, littleEndian, 52, 8)
22147 return offset + 8
ab78acc6 22148}
3af2954a 22149
8b095871
IC
22150Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
22151 return writeDouble(this, value, offset, true, noAssert)
ab78acc6 22152}
3af2954a 22153
8b095871
IC
22154Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
22155 return writeDouble(this, value, offset, false, noAssert)
22156}
3af2954a 22157
8b095871
IC
22158// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
22159Buffer.prototype.copy = function copy (target, targetStart, start, end) {
22160 if (!start) start = 0
22161 if (!end && end !== 0) end = this.length
22162 if (targetStart >= target.length) targetStart = target.length
22163 if (!targetStart) targetStart = 0
22164 if (end > 0 && end < start) end = start
3af2954a 22165
8b095871
IC
22166 // Copy 0 bytes; we're done
22167 if (end === start) return 0
22168 if (target.length === 0 || this.length === 0) return 0
3af2954a 22169
8b095871
IC
22170 // Fatal error conditions
22171 if (targetStart < 0) {
22172 throw new RangeError('targetStart out of bounds')
3af2954a 22173 }
8b095871
IC
22174 if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')
22175 if (end < 0) throw new RangeError('sourceEnd out of bounds')
22176
22177 // Are we oob?
22178 if (end > this.length) end = this.length
22179 if (target.length - targetStart < end - start) {
22180 end = target.length - targetStart + start
3af2954a 22181 }
8b095871
IC
22182
22183 var len = end - start
22184 var i
22185
22186 if (this === target && start < targetStart && targetStart < end) {
22187 // descending copy from end
22188 for (i = len - 1; i >= 0; --i) {
22189 target[i + targetStart] = this[i + start]
3af2954a 22190 }
8b095871
IC
22191 } else if (len < 1000) {
22192 // ascending copy from start
22193 for (i = 0; i < len; ++i) {
22194 target[i + targetStart] = this[i + start]
22195 }
22196 } else {
22197 Uint8Array.prototype.set.call(
22198 target,
22199 this.subarray(start, start + len),
22200 targetStart
22201 )
3af2954a
IC
22202 }
22203
8b095871
IC
22204 return len
22205}
22206
22207// Usage:
22208// buffer.fill(number[, offset[, end]])
22209// buffer.fill(buffer[, offset[, end]])
22210// buffer.fill(string[, offset[, end]][, encoding])
22211Buffer.prototype.fill = function fill (val, start, end, encoding) {
22212 // Handle string cases:
22213 if (typeof val === 'string') {
22214 if (typeof start === 'string') {
22215 encoding = start
22216 start = 0
22217 end = this.length
22218 } else if (typeof end === 'string') {
22219 encoding = end
22220 end = this.length
22221 }
22222 if (val.length === 1) {
22223 var code = val.charCodeAt(0)
22224 if (code < 256) {
22225 val = code
3af2954a 22226 }
3af2954a 22227 }
8b095871
IC
22228 if (encoding !== undefined && typeof encoding !== 'string') {
22229 throw new TypeError('encoding must be a string')
22230 }
22231 if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
22232 throw new TypeError('Unknown encoding: ' + encoding)
22233 }
22234 } else if (typeof val === 'number') {
22235 val = val & 255
ab78acc6 22236 }
3af2954a 22237
8b095871
IC
22238 // Invalid ranges are not set to a default, so can range check early.
22239 if (start < 0 || this.length < start || this.length < end) {
22240 throw new RangeError('Out of range index')
22241 }
3af2954a 22242
8b095871
IC
22243 if (end <= start) {
22244 return this
22245 }
3af2954a 22246
8b095871
IC
22247 start = start >>> 0
22248 end = end === undefined ? this.length : end >>> 0
3af2954a 22249
8b095871
IC
22250 if (!val) val = 0
22251
22252 var i
22253 if (typeof val === 'number') {
22254 for (i = start; i < end; ++i) {
22255 this[i] = val
22256 }
ab78acc6 22257 } else {
8b095871
IC
22258 var bytes = Buffer.isBuffer(val)
22259 ? val
22260 : new Buffer(val, encoding)
22261 var len = bytes.length
22262 for (i = 0; i < end - start; ++i) {
22263 this[i + start] = bytes[i % len]
ab78acc6
IC
22264 }
22265 }
3af2954a 22266
8b095871
IC
22267 return this
22268}
3af2954a 22269
8b095871
IC
22270// HELPER FUNCTIONS
22271// ================
22272
22273var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
22274
22275function base64clean (str) {
22276 // Node strips out invalid characters like \n and \t from the string, base64-js does not
22277 str = stringtrim(str).replace(INVALID_BASE64_RE, '')
22278 // Node converts strings with length < 2 to ''
22279 if (str.length < 2) return ''
22280 // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
22281 while (str.length % 4 !== 0) {
22282 str = str + '='
3af2954a 22283 }
8b095871 22284 return str
ab78acc6
IC
22285}
22286
8b095871
IC
22287function stringtrim (str) {
22288 if (str.trim) return str.trim()
22289 return str.replace(/^\s+|\s+$/g, '')
ab78acc6 22290}
3af2954a 22291
8b095871
IC
22292function toHex (n) {
22293 if (n < 16) return '0' + n.toString(16)
22294 return n.toString(16)
ab78acc6 22295}
3af2954a 22296
8b095871
IC
22297function utf8ToBytes (string, units) {
22298 units = units || Infinity
22299 var codePoint
22300 var length = string.length
22301 var leadSurrogate = null
22302 var bytes = []
3af2954a 22303
8b095871
IC
22304 for (var i = 0; i < length; ++i) {
22305 codePoint = string.charCodeAt(i)
3af2954a 22306
8b095871
IC
22307 // is surrogate component
22308 if (codePoint > 0xD7FF && codePoint < 0xE000) {
22309 // last char was a lead
22310 if (!leadSurrogate) {
22311 // no lead yet
22312 if (codePoint > 0xDBFF) {
22313 // unexpected trail
22314 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22315 continue
22316 } else if (i + 1 === length) {
22317 // unpaired lead
22318 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22319 continue
22320 }
3af2954a 22321
8b095871
IC
22322 // valid lead
22323 leadSurrogate = codePoint
22324
22325 continue
22326 }
22327
22328 // 2 leads in a row
22329 if (codePoint < 0xDC00) {
22330 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22331 leadSurrogate = codePoint
22332 continue
22333 }
22334
22335 // valid surrogate pair
22336 codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
22337 } else if (leadSurrogate) {
22338 // valid bmp char, but last char was a lead
22339 if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
22340 }
22341
22342 leadSurrogate = null
22343
22344 // encode utf8
22345 if (codePoint < 0x80) {
22346 if ((units -= 1) < 0) break
22347 bytes.push(codePoint)
22348 } else if (codePoint < 0x800) {
22349 if ((units -= 2) < 0) break
22350 bytes.push(
22351 codePoint >> 0x6 | 0xC0,
22352 codePoint & 0x3F | 0x80
22353 )
22354 } else if (codePoint < 0x10000) {
22355 if ((units -= 3) < 0) break
22356 bytes.push(
22357 codePoint >> 0xC | 0xE0,
22358 codePoint >> 0x6 & 0x3F | 0x80,
22359 codePoint & 0x3F | 0x80
22360 )
22361 } else if (codePoint < 0x110000) {
22362 if ((units -= 4) < 0) break
22363 bytes.push(
22364 codePoint >> 0x12 | 0xF0,
22365 codePoint >> 0xC & 0x3F | 0x80,
22366 codePoint >> 0x6 & 0x3F | 0x80,
22367 codePoint & 0x3F | 0x80
22368 )
ab78acc6 22369 } else {
8b095871 22370 throw new Error('Invalid code point')
ab78acc6 22371 }
3af2954a
IC
22372 }
22373
8b095871
IC
22374 return bytes
22375}
3af2954a 22376
8b095871
IC
22377function asciiToBytes (str) {
22378 var byteArray = []
22379 for (var i = 0; i < str.length; ++i) {
22380 // Node's code seems to be doing this and not & 0x7F..
22381 byteArray.push(str.charCodeAt(i) & 0xFF)
ab78acc6 22382 }
8b095871
IC
22383 return byteArray
22384}
3af2954a 22385
8b095871
IC
22386function utf16leToBytes (str, units) {
22387 var c, hi, lo
22388 var byteArray = []
22389 for (var i = 0; i < str.length; ++i) {
22390 if ((units -= 2) < 0) break
3af2954a 22391
8b095871
IC
22392 c = str.charCodeAt(i)
22393 hi = c >> 8
22394 lo = c % 256
22395 byteArray.push(lo)
22396 byteArray.push(hi)
22397 }
ebd8d4e8 22398
8b095871
IC
22399 return byteArray
22400}
22401
22402function base64ToBytes (str) {
22403 return base64.toByteArray(base64clean(str))
22404}
22405
22406function blitBuffer (src, dst, offset, length) {
22407 for (var i = 0; i < length; ++i) {
22408 if ((i + offset >= dst.length) || (i >= src.length)) break
22409 dst[i + offset] = src[i]
22410 }
22411 return i
22412}
22413
22414function isnan (val) {
22415 return val !== val // eslint-disable-line no-self-compare
22416}
22417
22418},{"base64-js":2,"ieee754":8}],6:[function(require,module,exports){
22419(function (Buffer){
22420// Copyright Joyent, Inc. and other Node contributors.
22421//
22422// Permission is hereby granted, free of charge, to any person obtaining a
22423// copy of this software and associated documentation files (the
22424// "Software"), to deal in the Software without restriction, including
22425// without limitation the rights to use, copy, modify, merge, publish,
22426// distribute, sublicense, and/or sell copies of the Software, and to permit
22427// persons to whom the Software is furnished to do so, subject to the
22428// following conditions:
22429//
22430// The above copyright notice and this permission notice shall be included
22431// in all copies or substantial portions of the Software.
22432//
22433// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22434// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22435// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22436// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22437// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22438// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22439// USE OR OTHER DEALINGS IN THE SOFTWARE.
22440
22441// NOTE: These type checking functions intentionally don't use `instanceof`
22442// because it is fragile and can be easily faked with `Object.create()`.
ebd8d4e8 22443
8b095871
IC
22444function isArray(arg) {
22445 if (Array.isArray) {
22446 return Array.isArray(arg);
22447 }
22448 return objectToString(arg) === '[object Array]';
22449}
22450exports.isArray = isArray;
ebd8d4e8 22451
8b095871
IC
22452function isBoolean(arg) {
22453 return typeof arg === 'boolean';
22454}
22455exports.isBoolean = isBoolean;
ebd8d4e8 22456
8b095871
IC
22457function isNull(arg) {
22458 return arg === null;
22459}
22460exports.isNull = isNull;
ebd8d4e8 22461
8b095871
IC
22462function isNullOrUndefined(arg) {
22463 return arg == null;
22464}
22465exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 22466
8b095871
IC
22467function isNumber(arg) {
22468 return typeof arg === 'number';
ab78acc6 22469}
8b095871 22470exports.isNumber = isNumber;
212b1b46 22471
8b095871
IC
22472function isString(arg) {
22473 return typeof arg === 'string';
ab78acc6 22474}
8b095871 22475exports.isString = isString;
212b1b46 22476
8b095871
IC
22477function isSymbol(arg) {
22478 return typeof arg === 'symbol';
ab78acc6 22479}
8b095871 22480exports.isSymbol = isSymbol;
ab78acc6 22481
8b095871
IC
22482function isUndefined(arg) {
22483 return arg === void 0;
22484}
22485exports.isUndefined = isUndefined;
ab78acc6 22486
8b095871
IC
22487function isRegExp(re) {
22488 return objectToString(re) === '[object RegExp]';
22489}
22490exports.isRegExp = isRegExp;
ab78acc6 22491
8b095871
IC
22492function isObject(arg) {
22493 return typeof arg === 'object' && arg !== null;
22494}
22495exports.isObject = isObject;
212b1b46 22496
8b095871
IC
22497function isDate(d) {
22498 return objectToString(d) === '[object Date]';
22499}
22500exports.isDate = isDate;
212b1b46 22501
8b095871
IC
22502function isError(e) {
22503 return (objectToString(e) === '[object Error]' || e instanceof Error);
22504}
22505exports.isError = isError;
212b1b46 22506
8b095871
IC
22507function isFunction(arg) {
22508 return typeof arg === 'function';
22509}
22510exports.isFunction = isFunction;
212b1b46 22511
8b095871
IC
22512function isPrimitive(arg) {
22513 return arg === null ||
22514 typeof arg === 'boolean' ||
22515 typeof arg === 'number' ||
22516 typeof arg === 'string' ||
22517 typeof arg === 'symbol' || // ES6 symbol
22518 typeof arg === 'undefined';
ab78acc6 22519}
8b095871 22520exports.isPrimitive = isPrimitive;
212b1b46 22521
8b095871 22522exports.isBuffer = Buffer.isBuffer;
ab78acc6 22523
8b095871
IC
22524function objectToString(o) {
22525 return Object.prototype.toString.call(o);
ab78acc6 22526}
212b1b46 22527
8b095871
IC
22528}).call(this,{"isBuffer":require("../../is-buffer/index.js")})
22529},{"../../is-buffer/index.js":10}],7:[function(require,module,exports){
22530// Copyright Joyent, Inc. and other Node contributors.
22531//
22532// Permission is hereby granted, free of charge, to any person obtaining a
22533// copy of this software and associated documentation files (the
22534// "Software"), to deal in the Software without restriction, including
22535// without limitation the rights to use, copy, modify, merge, publish,
22536// distribute, sublicense, and/or sell copies of the Software, and to permit
22537// persons to whom the Software is furnished to do so, subject to the
22538// following conditions:
22539//
22540// The above copyright notice and this permission notice shall be included
22541// in all copies or substantial portions of the Software.
22542//
22543// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
22544// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22545// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
22546// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
22547// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
22548// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
22549// USE OR OTHER DEALINGS IN THE SOFTWARE.
212b1b46 22550
8b095871
IC
22551function EventEmitter() {
22552 this._events = this._events || {};
22553 this._maxListeners = this._maxListeners || undefined;
ab78acc6 22554}
8b095871 22555module.exports = EventEmitter;
212b1b46 22556
8b095871
IC
22557// Backwards-compat with node 0.10.x
22558EventEmitter.EventEmitter = EventEmitter;
212b1b46 22559
8b095871
IC
22560EventEmitter.prototype._events = undefined;
22561EventEmitter.prototype._maxListeners = undefined;
212b1b46 22562
8b095871
IC
22563// By default EventEmitters will print a warning if more than 10 listeners are
22564// added to it. This is a useful default which helps finding memory leaks.
22565EventEmitter.defaultMaxListeners = 10;
212b1b46 22566
8b095871
IC
22567// Obviously not all Emitters should be limited to 10. This function allows
22568// that to be increased. Set to zero for unlimited.
22569EventEmitter.prototype.setMaxListeners = function(n) {
22570 if (!isNumber(n) || n < 0 || isNaN(n))
22571 throw TypeError('n must be a positive number');
22572 this._maxListeners = n;
22573 return this;
22574};
212b1b46 22575
8b095871
IC
22576EventEmitter.prototype.emit = function(type) {
22577 var er, handler, len, args, i, listeners;
212b1b46 22578
8b095871
IC
22579 if (!this._events)
22580 this._events = {};
212b1b46 22581
8b095871
IC
22582 // If there is no 'error' event listener then throw.
22583 if (type === 'error') {
22584 if (!this._events.error ||
22585 (isObject(this._events.error) && !this._events.error.length)) {
22586 er = arguments[1];
22587 if (er instanceof Error) {
22588 throw er; // Unhandled 'error' event
22589 } else {
22590 // At least give some kind of context to the user
22591 var err = new Error('Uncaught, unspecified "error" event. (' + er + ')');
22592 err.context = er;
22593 throw err;
22594 }
22595 }
ab78acc6 22596 }
212b1b46 22597
8b095871 22598 handler = this._events[type];
212b1b46 22599
8b095871
IC
22600 if (isUndefined(handler))
22601 return false;
22602
22603 if (isFunction(handler)) {
22604 switch (arguments.length) {
22605 // fast cases
22606 case 1:
22607 handler.call(this);
22608 break;
22609 case 2:
22610 handler.call(this, arguments[1]);
22611 break;
22612 case 3:
22613 handler.call(this, arguments[1], arguments[2]);
22614 break;
22615 // slower
22616 default:
22617 args = Array.prototype.slice.call(arguments, 1);
22618 handler.apply(this, args);
3af2954a 22619 }
8b095871
IC
22620 } else if (isObject(handler)) {
22621 args = Array.prototype.slice.call(arguments, 1);
22622 listeners = handler.slice();
22623 len = listeners.length;
22624 for (i = 0; i < len; i++)
22625 listeners[i].apply(this, args);
3af2954a 22626 }
212b1b46 22627
8b095871
IC
22628 return true;
22629};
ebd8d4e8 22630
8b095871
IC
22631EventEmitter.prototype.addListener = function(type, listener) {
22632 var m;
ebd8d4e8 22633
8b095871
IC
22634 if (!isFunction(listener))
22635 throw TypeError('listener must be a function');
ebd8d4e8 22636
8b095871
IC
22637 if (!this._events)
22638 this._events = {};
3af2954a 22639
8b095871
IC
22640 // To avoid recursion in the case that type === "newListener"! Before
22641 // adding it to the listeners, first emit "newListener".
22642 if (this._events.newListener)
22643 this.emit('newListener', type,
22644 isFunction(listener.listener) ?
22645 listener.listener : listener);
3af2954a 22646
8b095871
IC
22647 if (!this._events[type])
22648 // Optimize the case of one listener. Don't need the extra array object.
22649 this._events[type] = listener;
22650 else if (isObject(this._events[type]))
22651 // If we've already got an array, just append.
22652 this._events[type].push(listener);
22653 else
22654 // Adding the second element, need to change to array.
22655 this._events[type] = [this._events[type], listener];
3af2954a 22656
8b095871
IC
22657 // Check for listener leak
22658 if (isObject(this._events[type]) && !this._events[type].warned) {
22659 if (!isUndefined(this._maxListeners)) {
22660 m = this._maxListeners;
22661 } else {
22662 m = EventEmitter.defaultMaxListeners;
22663 }
3af2954a 22664
8b095871
IC
22665 if (m && m > 0 && this._events[type].length > m) {
22666 this._events[type].warned = true;
22667 console.error('(node) warning: possible EventEmitter memory ' +
22668 'leak detected. %d listeners added. ' +
22669 'Use emitter.setMaxListeners() to increase limit.',
22670 this._events[type].length);
22671 if (typeof console.trace === 'function') {
22672 // not supported in IE 10
22673 console.trace();
22674 }
22675 }
3af2954a
IC
22676 }
22677
8b095871
IC
22678 return this;
22679};
3af2954a 22680
8b095871 22681EventEmitter.prototype.on = EventEmitter.prototype.addListener;
3af2954a 22682
8b095871
IC
22683EventEmitter.prototype.once = function(type, listener) {
22684 if (!isFunction(listener))
22685 throw TypeError('listener must be a function');
3af2954a 22686
8b095871 22687 var fired = false;
ebd8d4e8 22688
8b095871
IC
22689 function g() {
22690 this.removeListener(type, g);
3af2954a 22691
8b095871
IC
22692 if (!fired) {
22693 fired = true;
22694 listener.apply(this, arguments);
22695 }
22696 }
3af2954a 22697
8b095871
IC
22698 g.listener = listener;
22699 this.on(type, g);
ebd8d4e8 22700
8b095871
IC
22701 return this;
22702};
ebd8d4e8 22703
8b095871
IC
22704// emits a 'removeListener' event iff the listener was removed
22705EventEmitter.prototype.removeListener = function(type, listener) {
22706 var list, position, length, i;
ebd8d4e8 22707
8b095871
IC
22708 if (!isFunction(listener))
22709 throw TypeError('listener must be a function');
ebd8d4e8 22710
8b095871
IC
22711 if (!this._events || !this._events[type])
22712 return this;
ab78acc6 22713
8b095871
IC
22714 list = this._events[type];
22715 length = list.length;
22716 position = -1;
ebd8d4e8 22717
8b095871
IC
22718 if (list === listener ||
22719 (isFunction(list.listener) && list.listener === listener)) {
22720 delete this._events[type];
22721 if (this._events.removeListener)
22722 this.emit('removeListener', type, listener);
ebd8d4e8 22723
8b095871
IC
22724 } else if (isObject(list)) {
22725 for (i = length; i-- > 0;) {
22726 if (list[i] === listener ||
22727 (list[i].listener && list[i].listener === listener)) {
22728 position = i;
22729 break;
22730 }
22731 }
22732
22733 if (position < 0)
22734 return this;
22735
22736 if (list.length === 1) {
22737 list.length = 0;
22738 delete this._events[type];
22739 } else {
22740 list.splice(position, 1);
22741 }
22742
22743 if (this._events.removeListener)
22744 this.emit('removeListener', type, listener);
ab78acc6 22745 }
ebd8d4e8 22746
8b095871
IC
22747 return this;
22748};
ebd8d4e8 22749
8b095871
IC
22750EventEmitter.prototype.removeAllListeners = function(type) {
22751 var key, listeners;
ebd8d4e8 22752
8b095871
IC
22753 if (!this._events)
22754 return this;
ab78acc6 22755
8b095871
IC
22756 // not listening for removeListener, no need to emit
22757 if (!this._events.removeListener) {
22758 if (arguments.length === 0)
22759 this._events = {};
22760 else if (this._events[type])
22761 delete this._events[type];
22762 return this;
22763 }
ab78acc6 22764
8b095871
IC
22765 // emit removeListener for all listeners on all events
22766 if (arguments.length === 0) {
22767 for (key in this._events) {
22768 if (key === 'removeListener') continue;
22769 this.removeAllListeners(key);
22770 }
22771 this.removeAllListeners('removeListener');
22772 this._events = {};
22773 return this;
22774 }
ebd8d4e8 22775
8b095871 22776 listeners = this._events[type];
ebd8d4e8 22777
8b095871
IC
22778 if (isFunction(listeners)) {
22779 this.removeListener(type, listeners);
22780 } else if (listeners) {
22781 // LIFO order
22782 while (listeners.length)
22783 this.removeListener(type, listeners[listeners.length - 1]);
22784 }
22785 delete this._events[type];
ebd8d4e8 22786
8b095871
IC
22787 return this;
22788};
ebd8d4e8 22789
8b095871
IC
22790EventEmitter.prototype.listeners = function(type) {
22791 var ret;
22792 if (!this._events || !this._events[type])
22793 ret = [];
22794 else if (isFunction(this._events[type]))
22795 ret = [this._events[type]];
22796 else
22797 ret = this._events[type].slice();
22798 return ret;
22799};
ebd8d4e8 22800
8b095871
IC
22801EventEmitter.prototype.listenerCount = function(type) {
22802 if (this._events) {
22803 var evlistener = this._events[type];
ebd8d4e8 22804
8b095871
IC
22805 if (isFunction(evlistener))
22806 return 1;
22807 else if (evlistener)
22808 return evlistener.length;
22809 }
22810 return 0;
22811};
22812
22813EventEmitter.listenerCount = function(emitter, type) {
22814 return emitter.listenerCount(type);
22815};
22816
22817function isFunction(arg) {
22818 return typeof arg === 'function';
ebd8d4e8
IC
22819}
22820
8b095871
IC
22821function isNumber(arg) {
22822 return typeof arg === 'number';
ebd8d4e8
IC
22823}
22824
8b095871
IC
22825function isObject(arg) {
22826 return typeof arg === 'object' && arg !== null;
ebd8d4e8
IC
22827}
22828
8b095871
IC
22829function isUndefined(arg) {
22830 return arg === void 0;
ebd8d4e8
IC
22831}
22832
8b095871
IC
22833},{}],8:[function(require,module,exports){
22834exports.read = function (buffer, offset, isLE, mLen, nBytes) {
22835 var e, m
22836 var eLen = nBytes * 8 - mLen - 1
22837 var eMax = (1 << eLen) - 1
22838 var eBias = eMax >> 1
22839 var nBits = -7
22840 var i = isLE ? (nBytes - 1) : 0
22841 var d = isLE ? -1 : 1
22842 var s = buffer[offset + i]
ebd8d4e8 22843
8b095871 22844 i += d
ebd8d4e8 22845
8b095871
IC
22846 e = s & ((1 << (-nBits)) - 1)
22847 s >>= (-nBits)
22848 nBits += eLen
22849 for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 22850
8b095871
IC
22851 m = e & ((1 << (-nBits)) - 1)
22852 e >>= (-nBits)
22853 nBits += mLen
22854 for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}
ebd8d4e8 22855
8b095871
IC
22856 if (e === 0) {
22857 e = 1 - eBias
22858 } else if (e === eMax) {
22859 return m ? NaN : ((s ? -1 : 1) * Infinity)
22860 } else {
22861 m = m + Math.pow(2, mLen)
22862 e = e - eBias
ab78acc6 22863 }
8b095871 22864 return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
ebd8d4e8
IC
22865}
22866
8b095871
IC
22867exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
22868 var e, m, c
22869 var eLen = nBytes * 8 - mLen - 1
22870 var eMax = (1 << eLen) - 1
22871 var eBias = eMax >> 1
22872 var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
22873 var i = isLE ? 0 : (nBytes - 1)
22874 var d = isLE ? 1 : -1
22875 var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
ebd8d4e8 22876
8b095871 22877 value = Math.abs(value)
ebd8d4e8 22878
8b095871
IC
22879 if (isNaN(value) || value === Infinity) {
22880 m = isNaN(value) ? 1 : 0
22881 e = eMax
ab78acc6 22882 } else {
8b095871
IC
22883 e = Math.floor(Math.log(value) / Math.LN2)
22884 if (value * (c = Math.pow(2, -e)) < 1) {
22885 e--
22886 c *= 2
22887 }
22888 if (e + eBias >= 1) {
22889 value += rt / c
22890 } else {
22891 value += rt * Math.pow(2, 1 - eBias)
22892 }
22893 if (value * c >= 2) {
22894 e++
22895 c /= 2
22896 }
ebd8d4e8 22897
8b095871
IC
22898 if (e + eBias >= eMax) {
22899 m = 0
22900 e = eMax
22901 } else if (e + eBias >= 1) {
22902 m = (value * c - 1) * Math.pow(2, mLen)
22903 e = e + eBias
22904 } else {
22905 m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
22906 e = 0
22907 }
ebd8d4e8 22908 }
ebd8d4e8 22909
8b095871 22910 for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
ebd8d4e8 22911
8b095871
IC
22912 e = (e << mLen) | m
22913 eLen += mLen
22914 for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
ebd8d4e8 22915
8b095871 22916 buffer[offset + i - d] |= s * 128
ab78acc6
IC
22917}
22918
8b095871
IC
22919},{}],9:[function(require,module,exports){
22920if (typeof Object.create === 'function') {
22921 // implementation from standard node.js 'util' module
22922 module.exports = function inherits(ctor, superCtor) {
22923 ctor.super_ = superCtor
22924 ctor.prototype = Object.create(superCtor.prototype, {
22925 constructor: {
22926 value: ctor,
22927 enumerable: false,
22928 writable: true,
22929 configurable: true
22930 }
22931 });
22932 };
22933} else {
22934 // old school shim for old browsers
22935 module.exports = function inherits(ctor, superCtor) {
22936 ctor.super_ = superCtor
22937 var TempCtor = function () {}
22938 TempCtor.prototype = superCtor.prototype
22939 ctor.prototype = new TempCtor()
22940 ctor.prototype.constructor = ctor
ebd8d4e8 22941 }
8b095871 22942}
ab78acc6 22943
8b095871
IC
22944},{}],10:[function(require,module,exports){
22945/*!
22946 * Determine if an object is a Buffer
22947 *
22948 * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
22949 * @license MIT
22950 */
ebd8d4e8 22951
8b095871
IC
22952// The _isBuffer check is for Safari 5-7 support, because it's missing
22953// Object.prototype.constructor. Remove this eventually
22954module.exports = function (obj) {
22955 return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)
ebd8d4e8
IC
22956}
22957
8b095871
IC
22958function isBuffer (obj) {
22959 return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)
22960}
ebd8d4e8 22961
8b095871
IC
22962// For Node v0.10 support. Remove this eventually.
22963function isSlowBuffer (obj) {
22964 return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))
22965}
ebd8d4e8 22966
8b095871
IC
22967},{}],11:[function(require,module,exports){
22968var toString = {}.toString;
ab78acc6 22969
8b095871
IC
22970module.exports = Array.isArray || function (arr) {
22971 return toString.call(arr) == '[object Array]';
22972};
ebd8d4e8 22973
8b095871
IC
22974},{}],12:[function(require,module,exports){
22975(function (process){
22976'use strict';
ebd8d4e8 22977
8b095871
IC
22978if (!process.version ||
22979 process.version.indexOf('v0.') === 0 ||
22980 process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {
22981 module.exports = nextTick;
22982} else {
22983 module.exports = process.nextTick;
22984}
22985
22986function nextTick(fn, arg1, arg2, arg3) {
22987 if (typeof fn !== 'function') {
22988 throw new TypeError('"callback" argument must be a function');
22989 }
22990 var len = arguments.length;
22991 var args, i;
22992 switch (len) {
22993 case 0:
22994 case 1:
22995 return process.nextTick(fn);
22996 case 2:
22997 return process.nextTick(function afterTickOne() {
22998 fn.call(null, arg1);
22999 });
23000 case 3:
23001 return process.nextTick(function afterTickTwo() {
23002 fn.call(null, arg1, arg2);
23003 });
23004 case 4:
23005 return process.nextTick(function afterTickThree() {
23006 fn.call(null, arg1, arg2, arg3);
23007 });
23008 default:
23009 args = new Array(len - 1);
23010 i = 0;
23011 while (i < args.length) {
23012 args[i++] = arguments[i];
23013 }
23014 return process.nextTick(function afterTick() {
23015 fn.apply(null, args);
23016 });
ab78acc6 23017 }
ebd8d4e8
IC
23018}
23019
8b095871
IC
23020}).call(this,require('_process'))
23021},{"_process":13}],13:[function(require,module,exports){
23022// shim for using process in browser
23023var process = module.exports = {};
ebd8d4e8 23024
8b095871
IC
23025// cached from whatever global is present so that test runners that stub it
23026// don't break things. But we need to wrap it in a try catch in case it is
23027// wrapped in strict mode code which doesn't define any globals. It's inside a
23028// function because try/catches deoptimize in certain engines.
ab78acc6 23029
8b095871
IC
23030var cachedSetTimeout;
23031var cachedClearTimeout;
ebd8d4e8 23032
8b095871
IC
23033function defaultSetTimout() {
23034 throw new Error('setTimeout has not been defined');
ab78acc6 23035}
8b095871
IC
23036function defaultClearTimeout () {
23037 throw new Error('clearTimeout has not been defined');
ab78acc6 23038}
8b095871
IC
23039(function () {
23040 try {
23041 if (typeof setTimeout === 'function') {
23042 cachedSetTimeout = setTimeout;
23043 } else {
23044 cachedSetTimeout = defaultSetTimout;
23045 }
23046 } catch (e) {
23047 cachedSetTimeout = defaultSetTimout;
23048 }
23049 try {
23050 if (typeof clearTimeout === 'function') {
23051 cachedClearTimeout = clearTimeout;
23052 } else {
23053 cachedClearTimeout = defaultClearTimeout;
23054 }
23055 } catch (e) {
23056 cachedClearTimeout = defaultClearTimeout;
23057 }
23058} ())
23059function runTimeout(fun) {
23060 if (cachedSetTimeout === setTimeout) {
23061 //normal enviroments in sane situations
23062 return setTimeout(fun, 0);
23063 }
23064 // if setTimeout wasn't available but was latter defined
23065 if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {
23066 cachedSetTimeout = setTimeout;
23067 return setTimeout(fun, 0);
23068 }
23069 try {
23070 // when when somebody has screwed with setTimeout but no I.E. maddness
23071 return cachedSetTimeout(fun, 0);
23072 } catch(e){
23073 try {
23074 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
23075 return cachedSetTimeout.call(null, fun, 0);
23076 } catch(e){
23077 // 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
23078 return cachedSetTimeout.call(this, fun, 0);
23079 }
23080 }
23081
ebd8d4e8 23082
ab78acc6 23083}
8b095871
IC
23084function runClearTimeout(marker) {
23085 if (cachedClearTimeout === clearTimeout) {
23086 //normal enviroments in sane situations
23087 return clearTimeout(marker);
23088 }
23089 // if clearTimeout wasn't available but was latter defined
23090 if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {
23091 cachedClearTimeout = clearTimeout;
23092 return clearTimeout(marker);
23093 }
23094 try {
23095 // when when somebody has screwed with setTimeout but no I.E. maddness
23096 return cachedClearTimeout(marker);
23097 } catch (e){
23098 try {
23099 // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally
23100 return cachedClearTimeout.call(null, marker);
23101 } catch (e){
23102 // 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.
23103 // Some versions of I.E. have different rules for clearTimeout vs setTimeout
23104 return cachedClearTimeout.call(this, marker);
23105 }
23106 }
23107
23108
ebd8d4e8 23109
ab78acc6 23110}
8b095871
IC
23111var queue = [];
23112var draining = false;
23113var currentQueue;
23114var queueIndex = -1;
ebd8d4e8 23115
8b095871
IC
23116function cleanUpNextTick() {
23117 if (!draining || !currentQueue) {
23118 return;
23119 }
23120 draining = false;
23121 if (currentQueue.length) {
23122 queue = currentQueue.concat(queue);
23123 } else {
23124 queueIndex = -1;
23125 }
23126 if (queue.length) {
23127 drainQueue();
23128 }
ebd8d4e8
IC
23129}
23130
8b095871
IC
23131function drainQueue() {
23132 if (draining) {
23133 return;
23134 }
23135 var timeout = runTimeout(cleanUpNextTick);
23136 draining = true;
23137
23138 var len = queue.length;
23139 while(len) {
23140 currentQueue = queue;
23141 queue = [];
23142 while (++queueIndex < len) {
23143 if (currentQueue) {
23144 currentQueue[queueIndex].run();
23145 }
23146 }
23147 queueIndex = -1;
23148 len = queue.length;
23149 }
23150 currentQueue = null;
23151 draining = false;
23152 runClearTimeout(timeout);
ebd8d4e8
IC
23153}
23154
8b095871
IC
23155process.nextTick = function (fun) {
23156 var args = new Array(arguments.length - 1);
23157 if (arguments.length > 1) {
23158 for (var i = 1; i < arguments.length; i++) {
23159 args[i - 1] = arguments[i];
23160 }
23161 }
23162 queue.push(new Item(fun, args));
23163 if (queue.length === 1 && !draining) {
23164 runTimeout(drainQueue);
23165 }
23166};
23167
23168// v8 likes predictible objects
23169function Item(fun, array) {
23170 this.fun = fun;
23171 this.array = array;
ab78acc6 23172}
8b095871
IC
23173Item.prototype.run = function () {
23174 this.fun.apply(null, this.array);
23175};
23176process.title = 'browser';
23177process.browser = true;
23178process.env = {};
23179process.argv = [];
23180process.version = ''; // empty string to avoid regexp issues
23181process.versions = {};
ebd8d4e8 23182
8b095871
IC
23183function noop() {}
23184
23185process.on = noop;
23186process.addListener = noop;
23187process.once = noop;
23188process.off = noop;
23189process.removeListener = noop;
23190process.removeAllListeners = noop;
23191process.emit = noop;
23192
23193process.binding = function (name) {
23194 throw new Error('process.binding is not supported');
23195};
23196
23197process.cwd = function () { return '/' };
23198process.chdir = function (dir) {
23199 throw new Error('process.chdir is not supported');
23200};
23201process.umask = function() { return 0; };
23202
23203},{}],14:[function(require,module,exports){
23204module.exports = require("./lib/_stream_duplex.js")
23205
23206},{"./lib/_stream_duplex.js":15}],15:[function(require,module,exports){
23207// a duplex stream is just a stream that is both readable and writable.
23208// Since JS doesn't have multiple prototypal inheritance, this class
23209// prototypally inherits from Readable, and then parasitically from
23210// Writable.
23211
23212'use strict';
23213
23214/*<replacement>*/
ab78acc6 23215
8b095871
IC
23216var objectKeys = Object.keys || function (obj) {
23217 var keys = [];
23218 for (var key in obj) {
23219 keys.push(key);
23220 }return keys;
23221};
23222/*</replacement>*/
ebd8d4e8 23223
8b095871 23224module.exports = Duplex;
ebd8d4e8 23225
8b095871
IC
23226/*<replacement>*/
23227var processNextTick = require('process-nextick-args');
23228/*</replacement>*/
ebd8d4e8 23229
8b095871
IC
23230/*<replacement>*/
23231var util = require('core-util-is');
23232util.inherits = require('inherits');
23233/*</replacement>*/
ebd8d4e8 23234
8b095871
IC
23235var Readable = require('./_stream_readable');
23236var Writable = require('./_stream_writable');
ebd8d4e8 23237
8b095871
IC
23238util.inherits(Duplex, Readable);
23239
23240var keys = objectKeys(Writable.prototype);
23241for (var v = 0; v < keys.length; v++) {
23242 var method = keys[v];
23243 if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];
ab78acc6 23244}
ebd8d4e8 23245
8b095871
IC
23246function Duplex(options) {
23247 if (!(this instanceof Duplex)) return new Duplex(options);
ebd8d4e8 23248
8b095871
IC
23249 Readable.call(this, options);
23250 Writable.call(this, options);
ebd8d4e8 23251
8b095871 23252 if (options && options.readable === false) this.readable = false;
ebd8d4e8 23253
8b095871 23254 if (options && options.writable === false) this.writable = false;
ebd8d4e8 23255
8b095871
IC
23256 this.allowHalfOpen = true;
23257 if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;
ebd8d4e8 23258
8b095871 23259 this.once('end', onend);
ebd8d4e8
IC
23260}
23261
8b095871
IC
23262// the no-half-open enforcer
23263function onend() {
23264 // if we allow half-open state, or if the writable side ended,
23265 // then we're ok.
23266 if (this.allowHalfOpen || this._writableState.ended) return;
23267
23268 // no more data can be written.
23269 // But allow more writes to happen in this tick.
23270 processNextTick(onEndNT, this);
ebd8d4e8
IC
23271}
23272
8b095871
IC
23273function onEndNT(self) {
23274 self.end();
23275}
ebd8d4e8 23276
8b095871
IC
23277function forEach(xs, f) {
23278 for (var i = 0, l = xs.length; i < l; i++) {
23279 f(xs[i], i);
23280 }
23281}
23282},{"./_stream_readable":17,"./_stream_writable":19,"core-util-is":6,"inherits":9,"process-nextick-args":12}],16:[function(require,module,exports){
23283// a passthrough stream.
23284// basically just the most minimal sort of Transform stream.
23285// Every written chunk gets output as-is.
ebd8d4e8 23286
8b095871 23287'use strict';
ebd8d4e8 23288
8b095871 23289module.exports = PassThrough;
ebd8d4e8 23290
8b095871 23291var Transform = require('./_stream_transform');
ebd8d4e8 23292
8b095871
IC
23293/*<replacement>*/
23294var util = require('core-util-is');
23295util.inherits = require('inherits');
23296/*</replacement>*/
ebd8d4e8 23297
8b095871 23298util.inherits(PassThrough, Transform);
ebd8d4e8 23299
8b095871
IC
23300function PassThrough(options) {
23301 if (!(this instanceof PassThrough)) return new PassThrough(options);
ebd8d4e8 23302
8b095871 23303 Transform.call(this, options);
ebd8d4e8
IC
23304}
23305
8b095871
IC
23306PassThrough.prototype._transform = function (chunk, encoding, cb) {
23307 cb(null, chunk);
23308};
23309},{"./_stream_transform":18,"core-util-is":6,"inherits":9}],17:[function(require,module,exports){
23310(function (process){
23311'use strict';
ebd8d4e8 23312
8b095871 23313module.exports = Readable;
ebd8d4e8 23314
8b095871
IC
23315/*<replacement>*/
23316var processNextTick = require('process-nextick-args');
23317/*</replacement>*/
ebd8d4e8 23318
8b095871
IC
23319/*<replacement>*/
23320var isArray = require('isarray');
23321/*</replacement>*/
ebd8d4e8 23322
8b095871
IC
23323/*<replacement>*/
23324var Duplex;
23325/*</replacement>*/
ebd8d4e8 23326
8b095871 23327Readable.ReadableState = ReadableState;
ebd8d4e8 23328
8b095871
IC
23329/*<replacement>*/
23330var EE = require('events').EventEmitter;
ebd8d4e8 23331
8b095871
IC
23332var EElistenerCount = function (emitter, type) {
23333 return emitter.listeners(type).length;
23334};
23335/*</replacement>*/
ebd8d4e8 23336
8b095871
IC
23337/*<replacement>*/
23338var Stream;
23339(function () {
23340 try {
23341 Stream = require('st' + 'ream');
23342 } catch (_) {} finally {
23343 if (!Stream) Stream = require('events').EventEmitter;
23344 }
23345})();
23346/*</replacement>*/
ebd8d4e8 23347
8b095871
IC
23348var Buffer = require('buffer').Buffer;
23349/*<replacement>*/
23350var bufferShim = require('buffer-shims');
23351/*</replacement>*/
ab78acc6 23352
8b095871
IC
23353/*<replacement>*/
23354var util = require('core-util-is');
23355util.inherits = require('inherits');
23356/*</replacement>*/
ab78acc6 23357
8b095871
IC
23358/*<replacement>*/
23359var debugUtil = require('util');
23360var debug = void 0;
23361if (debugUtil && debugUtil.debuglog) {
23362 debug = debugUtil.debuglog('stream');
23363} else {
23364 debug = function () {};
23365}
23366/*</replacement>*/
ab78acc6 23367
8b095871
IC
23368var BufferList = require('./internal/streams/BufferList');
23369var StringDecoder;
ab78acc6 23370
8b095871 23371util.inherits(Readable, Stream);
ab78acc6 23372
8b095871
IC
23373function prependListener(emitter, event, fn) {
23374 // Sadly this is not cacheable as some libraries bundle their own
23375 // event emitter implementation with them.
23376 if (typeof emitter.prependListener === 'function') {
23377 return emitter.prependListener(event, fn);
23378 } else {
23379 // This is a hack to make sure that our error handler is attached before any
23380 // userland ones. NEVER DO THIS. This is here only because this code needs
23381 // to continue to work with older versions of Node.js that do not include
23382 // the prependListener() method. The goal is to eventually remove this hack.
23383 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 23384 }
ebd8d4e8
IC
23385}
23386
8b095871
IC
23387function ReadableState(options, stream) {
23388 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 23389
8b095871 23390 options = options || {};
ebd8d4e8 23391
8b095871
IC
23392 // object stream flag. Used to make read(n) ignore n and to
23393 // make all the buffer merging and length checks go away
23394 this.objectMode = !!options.objectMode;
ebd8d4e8 23395
8b095871 23396 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode;
ebd8d4e8 23397
8b095871
IC
23398 // the point at which it stops calling _read() to fill the buffer
23399 // Note: 0 is a valid value, means "don't call _read preemptively ever"
23400 var hwm = options.highWaterMark;
23401 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
23402 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6 23403
8b095871
IC
23404 // cast to ints.
23405 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 23406
8b095871
IC
23407 // A linked list is used to store data chunks instead of an array because the
23408 // linked list can remove elements from the beginning faster than
23409 // array.shift()
23410 this.buffer = new BufferList();
23411 this.length = 0;
23412 this.pipes = null;
23413 this.pipesCount = 0;
23414 this.flowing = null;
23415 this.ended = false;
23416 this.endEmitted = false;
23417 this.reading = false;
ab78acc6 23418
8b095871
IC
23419 // a flag to be able to tell if the onwrite cb is called immediately,
23420 // or on a later tick. We set this to true at first, because any
23421 // actions that shouldn't happen until "later" should generally also
23422 // not happen before the first write call.
23423 this.sync = true;
ebd8d4e8 23424
8b095871
IC
23425 // whenever we return null, then we set a flag to say
23426 // that we're awaiting a 'readable' event emission.
23427 this.needReadable = false;
23428 this.emittedReadable = false;
23429 this.readableListening = false;
23430 this.resumeScheduled = false;
ebd8d4e8 23431
8b095871
IC
23432 // Crypto is kind of old and crusty. Historically, its default string
23433 // encoding is 'binary' so we have to make this configurable.
23434 // Everything else in the universe uses 'utf8', though.
23435 this.defaultEncoding = options.defaultEncoding || 'utf8';
ebd8d4e8 23436
8b095871
IC
23437 // when piping, we only care about 'readable' events that happen
23438 // after read()ing all the bytes and not getting any pushback.
23439 this.ranOut = false;
ebd8d4e8 23440
8b095871
IC
23441 // the number of writers that are awaiting a drain event in .pipe()s
23442 this.awaitDrain = 0;
ebd8d4e8 23443
8b095871
IC
23444 // if true, a maybeReadMore has been scheduled
23445 this.readingMore = false;
ebd8d4e8 23446
8b095871
IC
23447 this.decoder = null;
23448 this.encoding = null;
23449 if (options.encoding) {
23450 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
23451 this.decoder = new StringDecoder(options.encoding);
23452 this.encoding = options.encoding;
23453 }
23454}
ebd8d4e8 23455
8b095871
IC
23456function Readable(options) {
23457 Duplex = Duplex || require('./_stream_duplex');
ebd8d4e8 23458
8b095871 23459 if (!(this instanceof Readable)) return new Readable(options);
ebd8d4e8 23460
8b095871 23461 this._readableState = new ReadableState(options, this);
ebd8d4e8 23462
8b095871
IC
23463 // legacy
23464 this.readable = true;
ebd8d4e8 23465
8b095871 23466 if (options && typeof options.read === 'function') this._read = options.read;
ebd8d4e8 23467
8b095871
IC
23468 Stream.call(this);
23469}
ebd8d4e8 23470
8b095871
IC
23471// Manually shove something into the read() buffer.
23472// This returns true if the highWaterMark has not been hit yet,
23473// similar to how Writable.write() returns true if you should
23474// write() some more.
23475Readable.prototype.push = function (chunk, encoding) {
23476 var state = this._readableState;
ebd8d4e8 23477
8b095871
IC
23478 if (!state.objectMode && typeof chunk === 'string') {
23479 encoding = encoding || state.defaultEncoding;
23480 if (encoding !== state.encoding) {
23481 chunk = bufferShim.from(chunk, encoding);
23482 encoding = '';
23483 }
23484 }
ebd8d4e8 23485
8b095871
IC
23486 return readableAddChunk(this, state, chunk, encoding, false);
23487};
ebd8d4e8 23488
8b095871
IC
23489// Unshift should *always* be something directly out of read()
23490Readable.prototype.unshift = function (chunk) {
23491 var state = this._readableState;
23492 return readableAddChunk(this, state, chunk, '', true);
23493};
ebd8d4e8 23494
8b095871
IC
23495Readable.prototype.isPaused = function () {
23496 return this._readableState.flowing === false;
23497};
23498
23499function readableAddChunk(stream, state, chunk, encoding, addToFront) {
23500 var er = chunkInvalid(state, chunk);
23501 if (er) {
23502 stream.emit('error', er);
23503 } else if (chunk === null) {
23504 state.reading = false;
23505 onEofChunk(stream, state);
23506 } else if (state.objectMode || chunk && chunk.length > 0) {
23507 if (state.ended && !addToFront) {
23508 var e = new Error('stream.push() after EOF');
23509 stream.emit('error', e);
23510 } else if (state.endEmitted && addToFront) {
23511 var _e = new Error('stream.unshift() after end event');
23512 stream.emit('error', _e);
23513 } else {
23514 var skipAdd;
23515 if (state.decoder && !addToFront && !encoding) {
23516 chunk = state.decoder.write(chunk);
23517 skipAdd = !state.objectMode && chunk.length === 0;
23518 }
ebd8d4e8 23519
8b095871 23520 if (!addToFront) state.reading = false;
ebd8d4e8 23521
8b095871
IC
23522 // Don't add to the buffer if we've decoded to an empty string chunk and
23523 // we're not in object mode
23524 if (!skipAdd) {
23525 // if we want the data now, just emit it.
23526 if (state.flowing && state.length === 0 && !state.sync) {
23527 stream.emit('data', chunk);
23528 stream.read(0);
23529 } else {
23530 // update the buffer info.
23531 state.length += state.objectMode ? 1 : chunk.length;
23532 if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);
ebd8d4e8 23533
8b095871
IC
23534 if (state.needReadable) emitReadable(stream);
23535 }
23536 }
ab78acc6 23537
8b095871
IC
23538 maybeReadMore(stream, state);
23539 }
23540 } else if (!addToFront) {
23541 state.reading = false;
23542 }
ab78acc6 23543
8b095871
IC
23544 return needMoreData(state);
23545}
ab78acc6 23546
8b095871
IC
23547// if it's past the high water mark, we can push in some more.
23548// Also, if we have no data yet, we can stand some
23549// more bytes. This is to work around cases where hwm=0,
23550// such as the repl. Also, if the push() triggered a
23551// readable event, and the user called read(largeNumber) such that
23552// needReadable was set, then we ought to push more, so that another
23553// 'readable' event will be triggered.
23554function needMoreData(state) {
23555 return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);
23556}
ebd8d4e8 23557
8b095871
IC
23558// backwards compatibility.
23559Readable.prototype.setEncoding = function (enc) {
23560 if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;
23561 this._readableState.decoder = new StringDecoder(enc);
23562 this._readableState.encoding = enc;
23563 return this;
23564};
23565
23566// Don't raise the hwm > 8MB
23567var MAX_HWM = 0x800000;
23568function computeNewHighWaterMark(n) {
23569 if (n >= MAX_HWM) {
23570 n = MAX_HWM;
ab78acc6 23571 } else {
8b095871
IC
23572 // Get the next highest power of 2 to prevent increasing hwm excessively in
23573 // tiny amounts
23574 n--;
23575 n |= n >>> 1;
23576 n |= n >>> 2;
23577 n |= n >>> 4;
23578 n |= n >>> 8;
23579 n |= n >>> 16;
23580 n++;
ebd8d4e8 23581 }
8b095871 23582 return n;
ebd8d4e8
IC
23583}
23584
8b095871
IC
23585// This function is designed to be inlinable, so please take care when making
23586// changes to the function body.
23587function howMuchToRead(n, state) {
23588 if (n <= 0 || state.length === 0 && state.ended) return 0;
23589 if (state.objectMode) return 1;
23590 if (n !== n) {
23591 // Only flow one buffer at a time
23592 if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;
23593 }
23594 // If we're asking for more than the current hwm, then raise the hwm.
23595 if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);
23596 if (n <= state.length) return n;
23597 // Don't have enough
23598 if (!state.ended) {
23599 state.needReadable = true;
23600 return 0;
23601 }
23602 return state.length;
23603}
ebd8d4e8 23604
8b095871
IC
23605// you can override either this method, or the async _read(n) below.
23606Readable.prototype.read = function (n) {
23607 debug('read', n);
23608 n = parseInt(n, 10);
23609 var state = this._readableState;
23610 var nOrig = n;
ebd8d4e8 23611
8b095871 23612 if (n !== 0) state.emittedReadable = false;
ab78acc6 23613
8b095871
IC
23614 // if we're doing read(0) to trigger a readable event, but we
23615 // already have a bunch of data in the buffer, then just trigger
23616 // the 'readable' event and move on.
23617 if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {
23618 debug('read: emitReadable', state.length, state.ended);
23619 if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);
23620 return null;
ebd8d4e8 23621 }
ebd8d4e8 23622
8b095871 23623 n = howMuchToRead(n, state);
ebd8d4e8 23624
8b095871
IC
23625 // if we've ended, and we're now clear, then finish it up.
23626 if (n === 0 && state.ended) {
23627 if (state.length === 0) endReadable(this);
23628 return null;
23629 }
ebd8d4e8 23630
8b095871
IC
23631 // All the actual chunk generation logic needs to be
23632 // *below* the call to _read. The reason is that in certain
23633 // synthetic stream cases, such as passthrough streams, _read
23634 // may be a completely synchronous operation which may change
23635 // the state of the read buffer, providing enough data when
23636 // before there was *not* enough.
23637 //
23638 // So, the steps are:
23639 // 1. Figure out what the state of things will be after we do
23640 // a read from the buffer.
23641 //
23642 // 2. If that resulting state will trigger a _read, then call _read.
23643 // Note that this may be asynchronous, or synchronous. Yes, it is
23644 // deeply ugly to write APIs this way, but that still doesn't mean
23645 // that the Readable class should behave improperly, as streams are
23646 // designed to be sync/async agnostic.
23647 // Take note if the _read call is sync or async (ie, if the read call
23648 // has returned yet), so that we know whether or not it's safe to emit
23649 // 'readable' etc.
23650 //
23651 // 3. Actually pull the requested chunks out of the buffer and return.
ebd8d4e8 23652
8b095871
IC
23653 // if we need a readable event, then we need to do some reading.
23654 var doRead = state.needReadable;
23655 debug('need readable', doRead);
ebd8d4e8 23656
8b095871
IC
23657 // if we currently have less than the highWaterMark, then also read some
23658 if (state.length === 0 || state.length - n < state.highWaterMark) {
23659 doRead = true;
23660 debug('length less than watermark', doRead);
23661 }
ebd8d4e8 23662
8b095871
IC
23663 // however, if we've ended, then there's no point, and if we're already
23664 // reading, then it's unnecessary.
23665 if (state.ended || state.reading) {
23666 doRead = false;
23667 debug('reading or ended', doRead);
23668 } else if (doRead) {
23669 debug('do read');
23670 state.reading = true;
23671 state.sync = true;
23672 // if the length is currently zero, then we *need* a readable event.
23673 if (state.length === 0) state.needReadable = true;
23674 // call internal read method
23675 this._read(state.highWaterMark);
23676 state.sync = false;
23677 // If _read pushed data synchronously, then `reading` will be false,
23678 // and we need to re-evaluate how much data we can return to the user.
23679 if (!state.reading) n = howMuchToRead(nOrig, state);
23680 }
ebd8d4e8 23681
8b095871
IC
23682 var ret;
23683 if (n > 0) ret = fromList(n, state);else ret = null;
ebd8d4e8 23684
8b095871
IC
23685 if (ret === null) {
23686 state.needReadable = true;
23687 n = 0;
23688 } else {
23689 state.length -= n;
23690 }
ebd8d4e8 23691
8b095871
IC
23692 if (state.length === 0) {
23693 // If we have nothing in the buffer, then we want to know
23694 // as soon as we *do* get something into the buffer.
23695 if (!state.ended) state.needReadable = true;
ebd8d4e8 23696
8b095871
IC
23697 // If we tried to read() past the EOF, then emit end on the next tick.
23698 if (nOrig !== n && state.ended) endReadable(this);
23699 }
23700
23701 if (ret !== null) this.emit('data', ret);
23702
23703 return ret;
ab78acc6
IC
23704};
23705
8b095871
IC
23706function chunkInvalid(state, chunk) {
23707 var er = null;
23708 if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) {
23709 er = new TypeError('Invalid non-string/buffer chunk');
23710 }
23711 return er;
23712}
ab78acc6 23713
8b095871
IC
23714function onEofChunk(stream, state) {
23715 if (state.ended) return;
23716 if (state.decoder) {
23717 var chunk = state.decoder.end();
23718 if (chunk && chunk.length) {
23719 state.buffer.push(chunk);
23720 state.length += state.objectMode ? 1 : chunk.length;
23721 }
23722 }
23723 state.ended = true;
23724
23725 // emit 'readable' now to make sure it gets picked up.
23726 emitReadable(stream);
23727}
23728
23729// Don't emit readable right away in sync mode, because this can trigger
23730// another read() call => stack overflow. This way, it might trigger
23731// a nextTick recursion warning, but that's not so bad.
23732function emitReadable(stream) {
23733 var state = stream._readableState;
23734 state.needReadable = false;
23735 if (!state.emittedReadable) {
23736 debug('emitReadable', state.flowing);
23737 state.emittedReadable = true;
23738 if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream);
23739 }
ebd8d4e8
IC
23740}
23741
8b095871
IC
23742function emitReadable_(stream) {
23743 debug('emit readable');
23744 stream.emit('readable');
23745 flow(stream);
23746}
ebd8d4e8 23747
8b095871
IC
23748// at this point, the user has presumably seen the 'readable' event,
23749// and called read() to consume some data. that may have triggered
23750// in turn another _read(n) call, in which case reading = true if
23751// it's in progress.
23752// However, if we're not ended, or reading, and the length < hwm,
23753// then go ahead and try to read some more preemptively.
23754function maybeReadMore(stream, state) {
23755 if (!state.readingMore) {
23756 state.readingMore = true;
23757 processNextTick(maybeReadMore_, stream, state);
23758 }
23759}
ab78acc6 23760
8b095871
IC
23761function maybeReadMore_(stream, state) {
23762 var len = state.length;
23763 while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {
23764 debug('maybeReadMore read 0');
23765 stream.read(0);
23766 if (len === state.length)
23767 // didn't get any data, stop spinning.
23768 break;else len = state.length;
23769 }
23770 state.readingMore = false;
23771}
ab78acc6 23772
8b095871
IC
23773// abstract method. to be overridden in specific implementation classes.
23774// call cb(er, data) where data is <= n in length.
23775// for virtual (non-string, non-buffer) streams, "length" is somewhat
23776// arbitrary, and perhaps not very meaningful.
23777Readable.prototype._read = function (n) {
23778 this.emit('error', new Error('_read() is not implemented'));
ab78acc6
IC
23779};
23780
8b095871
IC
23781Readable.prototype.pipe = function (dest, pipeOpts) {
23782 var src = this;
23783 var state = this._readableState;
ab78acc6 23784
8b095871
IC
23785 switch (state.pipesCount) {
23786 case 0:
23787 state.pipes = dest;
23788 break;
23789 case 1:
23790 state.pipes = [state.pipes, dest];
23791 break;
23792 default:
23793 state.pipes.push(dest);
23794 break;
ab78acc6 23795 }
8b095871
IC
23796 state.pipesCount += 1;
23797 debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);
ab78acc6 23798
8b095871 23799 var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;
ab78acc6 23800
8b095871
IC
23801 var endFn = doEnd ? onend : cleanup;
23802 if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn);
ab78acc6 23803
8b095871
IC
23804 dest.on('unpipe', onunpipe);
23805 function onunpipe(readable) {
23806 debug('onunpipe');
23807 if (readable === src) {
23808 cleanup();
ab78acc6 23809 }
8b095871 23810 }
ebd8d4e8 23811
8b095871
IC
23812 function onend() {
23813 debug('onend');
23814 dest.end();
ebd8d4e8
IC
23815 }
23816
8b095871
IC
23817 // when the dest drains, it reduces the awaitDrain counter
23818 // on the source. This would be more elegant with a .once()
23819 // handler in flow(), but adding and removing repeatedly is
23820 // too slow.
23821 var ondrain = pipeOnDrain(src);
23822 dest.on('drain', ondrain);
ebd8d4e8 23823
8b095871
IC
23824 var cleanedUp = false;
23825 function cleanup() {
23826 debug('cleanup');
23827 // cleanup event handlers once the pipe is broken
23828 dest.removeListener('close', onclose);
23829 dest.removeListener('finish', onfinish);
23830 dest.removeListener('drain', ondrain);
23831 dest.removeListener('error', onerror);
23832 dest.removeListener('unpipe', onunpipe);
23833 src.removeListener('end', onend);
23834 src.removeListener('end', cleanup);
23835 src.removeListener('data', ondata);
ebd8d4e8 23836
8b095871 23837 cleanedUp = true;
ebd8d4e8 23838
8b095871
IC
23839 // if the reader is waiting for a drain event from this
23840 // specific writer, then it would cause it to never start
23841 // flowing again.
23842 // So, if this is awaiting a drain, then we just call it now.
23843 // If we don't know, then assume that we are waiting for one.
23844 if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();
23845 }
ebd8d4e8 23846
8b095871
IC
23847 // If the user pushes more data while we're writing to dest then we'll end up
23848 // in ondata again. However, we only want to increase awaitDrain once because
23849 // dest will only emit one 'drain' event for the multiple writes.
23850 // => Introduce a guard on increasing awaitDrain.
23851 var increasedAwaitDrain = false;
23852 src.on('data', ondata);
23853 function ondata(chunk) {
23854 debug('ondata');
23855 increasedAwaitDrain = false;
23856 var ret = dest.write(chunk);
23857 if (false === ret && !increasedAwaitDrain) {
23858 // If the user unpiped during `dest.write()`, it is possible
23859 // to get stuck in a permanently paused state if that write
23860 // also returned false.
23861 // => Check whether `dest` is still a piping destination.
23862 if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {
23863 debug('false write response, pause', src._readableState.awaitDrain);
23864 src._readableState.awaitDrain++;
23865 increasedAwaitDrain = true;
23866 }
23867 src.pause();
23868 }
23869 }
ebd8d4e8 23870
8b095871
IC
23871 // if the dest has an error, then stop piping into it.
23872 // however, don't suppress the throwing behavior for this.
23873 function onerror(er) {
23874 debug('onerror', er);
23875 unpipe();
23876 dest.removeListener('error', onerror);
23877 if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);
23878 }
ab78acc6 23879
8b095871
IC
23880 // Make sure our error handler is attached before userland ones.
23881 prependListener(dest, 'error', onerror);
ab78acc6 23882
8b095871
IC
23883 // Both close and finish should trigger unpipe, but only once.
23884 function onclose() {
23885 dest.removeListener('finish', onfinish);
23886 unpipe();
23887 }
23888 dest.once('close', onclose);
23889 function onfinish() {
23890 debug('onfinish');
23891 dest.removeListener('close', onclose);
23892 unpipe();
ab78acc6 23893 }
8b095871 23894 dest.once('finish', onfinish);
ebd8d4e8 23895
8b095871
IC
23896 function unpipe() {
23897 debug('unpipe');
23898 src.unpipe(dest);
23899 }
23900
23901 // tell the dest that it's being piped to
23902 dest.emit('pipe', src);
23903
23904 // start the flow if it hasn't been started already.
23905 if (!state.flowing) {
23906 debug('pipe resume');
23907 src.resume();
23908 }
23909
23910 return dest;
ab78acc6 23911};
ebd8d4e8 23912
8b095871
IC
23913function pipeOnDrain(src) {
23914 return function () {
23915 var state = src._readableState;
23916 debug('pipeOnDrain', state.awaitDrain);
23917 if (state.awaitDrain) state.awaitDrain--;
23918 if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {
23919 state.flowing = true;
23920 flow(src);
23921 }
23922 };
23923}
ebd8d4e8 23924
8b095871
IC
23925Readable.prototype.unpipe = function (dest) {
23926 var state = this._readableState;
ebd8d4e8 23927
8b095871
IC
23928 // if we're not piping anywhere, then do nothing.
23929 if (state.pipesCount === 0) return this;
ebd8d4e8 23930
8b095871
IC
23931 // just one destination. most common case.
23932 if (state.pipesCount === 1) {
23933 // passed in one, but it's not the right one.
23934 if (dest && dest !== state.pipes) return this;
ebd8d4e8 23935
8b095871
IC
23936 if (!dest) dest = state.pipes;
23937
23938 // got a match.
23939 state.pipes = null;
23940 state.pipesCount = 0;
23941 state.flowing = false;
23942 if (dest) dest.emit('unpipe', this);
23943 return this;
ab78acc6 23944 }
ebd8d4e8 23945
8b095871 23946 // slow case. multiple pipe destinations.
ebd8d4e8 23947
8b095871
IC
23948 if (!dest) {
23949 // remove all.
23950 var dests = state.pipes;
23951 var len = state.pipesCount;
23952 state.pipes = null;
23953 state.pipesCount = 0;
23954 state.flowing = false;
ebd8d4e8 23955
8b095871
IC
23956 for (var i = 0; i < len; i++) {
23957 dests[i].emit('unpipe', this);
23958 }return this;
23959 }
ebd8d4e8 23960
8b095871
IC
23961 // try to find the right one.
23962 var index = indexOf(state.pipes, dest);
23963 if (index === -1) return this;
ebd8d4e8 23964
8b095871
IC
23965 state.pipes.splice(index, 1);
23966 state.pipesCount -= 1;
23967 if (state.pipesCount === 1) state.pipes = state.pipes[0];
ebd8d4e8 23968
8b095871 23969 dest.emit('unpipe', this);
ab78acc6 23970
8b095871
IC
23971 return this;
23972};
ab78acc6 23973
8b095871
IC
23974// set up data events if they are asked for
23975// Ensure readable listeners eventually get something
23976Readable.prototype.on = function (ev, fn) {
23977 var res = Stream.prototype.on.call(this, ev, fn);
23978
23979 if (ev === 'data') {
23980 // Start flowing on next tick if stream isn't explicitly paused
23981 if (this._readableState.flowing !== false) this.resume();
23982 } else if (ev === 'readable') {
23983 var state = this._readableState;
23984 if (!state.endEmitted && !state.readableListening) {
23985 state.readableListening = state.needReadable = true;
23986 state.emittedReadable = false;
23987 if (!state.reading) {
23988 processNextTick(nReadingNextTick, this);
23989 } else if (state.length) {
23990 emitReadable(this, state);
ebd8d4e8 23991 }
ab78acc6 23992 }
8b095871 23993 }
ebd8d4e8 23994
8b095871
IC
23995 return res;
23996};
23997Readable.prototype.addListener = Readable.prototype.on;
ab78acc6 23998
8b095871
IC
23999function nReadingNextTick(self) {
24000 debug('readable nexttick read 0');
24001 self.read(0);
24002}
ab78acc6 24003
8b095871
IC
24004// pause() and resume() are remnants of the legacy readable stream API
24005// If the user uses them, then switch into old mode.
24006Readable.prototype.resume = function () {
24007 var state = this._readableState;
24008 if (!state.flowing) {
24009 debug('resume');
24010 state.flowing = true;
24011 resume(this, state);
ebd8d4e8 24012 }
ab78acc6 24013 return this;
ebd8d4e8
IC
24014};
24015
8b095871
IC
24016function resume(stream, state) {
24017 if (!state.resumeScheduled) {
24018 state.resumeScheduled = true;
24019 processNextTick(resume_, stream, state);
ebd8d4e8 24020 }
8b095871 24021}
ab78acc6 24022
8b095871
IC
24023function resume_(stream, state) {
24024 if (!state.reading) {
24025 debug('resume read 0');
24026 stream.read(0);
ebd8d4e8 24027 }
ebd8d4e8 24028
8b095871
IC
24029 state.resumeScheduled = false;
24030 state.awaitDrain = 0;
24031 stream.emit('resume');
24032 flow(stream);
24033 if (state.flowing && !state.reading) stream.read(0);
24034}
ab78acc6 24035
8b095871
IC
24036Readable.prototype.pause = function () {
24037 debug('call pause flowing=%j', this._readableState.flowing);
24038 if (false !== this._readableState.flowing) {
24039 debug('pause');
24040 this._readableState.flowing = false;
24041 this.emit('pause');
ebd8d4e8 24042 }
ab78acc6
IC
24043 return this;
24044};
ebd8d4e8 24045
8b095871
IC
24046function flow(stream) {
24047 var state = stream._readableState;
24048 debug('flow', state.flowing);
24049 while (state.flowing && stream.read() !== null) {}
24050}
ebd8d4e8 24051
8b095871
IC
24052// wrap an old-style stream as the async data source.
24053// This is *not* part of the readable stream interface.
24054// It is an ugly unfortunate mess of history.
24055Readable.prototype.wrap = function (stream) {
24056 var state = this._readableState;
24057 var paused = false;
ebd8d4e8 24058
8b095871
IC
24059 var self = this;
24060 stream.on('end', function () {
24061 debug('wrapped end');
24062 if (state.decoder && !state.ended) {
24063 var chunk = state.decoder.end();
24064 if (chunk && chunk.length) self.push(chunk);
24065 }
ebd8d4e8 24066
8b095871
IC
24067 self.push(null);
24068 });
ebd8d4e8 24069
8b095871
IC
24070 stream.on('data', function (chunk) {
24071 debug('wrapped data');
24072 if (state.decoder) chunk = state.decoder.write(chunk);
ebd8d4e8 24073
8b095871
IC
24074 // don't skip over falsy values in objectMode
24075 if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;
ebd8d4e8 24076
8b095871
IC
24077 var ret = self.push(chunk);
24078 if (!ret) {
24079 paused = true;
24080 stream.pause();
24081 }
24082 });
24083
24084 // proxy all the other methods.
24085 // important when wrapping filters and duplexes.
24086 for (var i in stream) {
24087 if (this[i] === undefined && typeof stream[i] === 'function') {
24088 this[i] = function (method) {
24089 return function () {
24090 return stream[method].apply(stream, arguments);
24091 };
24092 }(i);
24093 }
ab78acc6 24094 }
ebd8d4e8 24095
8b095871
IC
24096 // proxy certain important events.
24097 var events = ['error', 'close', 'destroy', 'pause', 'resume'];
24098 forEach(events, function (ev) {
24099 stream.on(ev, self.emit.bind(self, ev));
24100 });
24101
24102 // when we try to consume some more bytes, simply unpause the
24103 // underlying stream.
24104 self._read = function (n) {
24105 debug('wrapped _read', n);
24106 if (paused) {
24107 paused = false;
24108 stream.resume();
24109 }
24110 };
24111
24112 return self;
ebd8d4e8
IC
24113};
24114
8b095871
IC
24115// exposed for testing purposes only.
24116Readable._fromList = fromList;
ebd8d4e8 24117
8b095871
IC
24118// Pluck off n bytes from an array of buffers.
24119// Length is the combined lengths of all the buffers in the list.
24120// This function is designed to be inlinable, so please take care when making
24121// changes to the function body.
24122function fromList(n, state) {
24123 // nothing buffered
24124 if (state.length === 0) return null;
ab78acc6 24125
8b095871
IC
24126 var ret;
24127 if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {
24128 // read it all, truncate the list
24129 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);
24130 state.buffer.clear();
24131 } else {
24132 // read part of list
24133 ret = fromListPartial(n, state.buffer, state.decoder);
24134 }
24135
24136 return ret;
24137}
24138
24139// Extracts only enough buffered data to satisfy the amount requested.
24140// This function is designed to be inlinable, so please take care when making
24141// changes to the function body.
24142function fromListPartial(n, list, hasStrings) {
24143 var ret;
24144 if (n < list.head.data.length) {
24145 // slice is the same for buffers and strings
24146 ret = list.head.data.slice(0, n);
24147 list.head.data = list.head.data.slice(n);
24148 } else if (n === list.head.data.length) {
24149 // first chunk is a perfect match
24150 ret = list.shift();
24151 } else {
24152 // result spans more than one buffer
24153 ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);
24154 }
24155 return ret;
ab78acc6 24156}
ebd8d4e8 24157
8b095871
IC
24158// Copies a specified amount of characters from the list of buffered data
24159// chunks.
24160// This function is designed to be inlinable, so please take care when making
24161// changes to the function body.
24162function copyFromBufferString(n, list) {
24163 var p = list.head;
24164 var c = 1;
24165 var ret = p.data;
24166 n -= ret.length;
24167 while (p = p.next) {
24168 var str = p.data;
24169 var nb = n > str.length ? str.length : n;
24170 if (nb === str.length) ret += str;else ret += str.slice(0, n);
24171 n -= nb;
24172 if (n === 0) {
24173 if (nb === str.length) {
24174 ++c;
24175 if (p.next) list.head = p.next;else list.head = list.tail = null;
24176 } else {
24177 list.head = p;
24178 p.data = str.slice(nb);
24179 }
24180 break;
ab78acc6 24181 }
8b095871
IC
24182 ++c;
24183 }
24184 list.length -= c;
24185 return ret;
ab78acc6
IC
24186}
24187
8b095871
IC
24188// Copies a specified amount of bytes from the list of buffered data chunks.
24189// This function is designed to be inlinable, so please take care when making
24190// changes to the function body.
24191function copyFromBuffer(n, list) {
24192 var ret = bufferShim.allocUnsafe(n);
24193 var p = list.head;
24194 var c = 1;
24195 p.data.copy(ret);
24196 n -= p.data.length;
24197 while (p = p.next) {
24198 var buf = p.data;
24199 var nb = n > buf.length ? buf.length : n;
24200 buf.copy(ret, ret.length - n, 0, nb);
24201 n -= nb;
24202 if (n === 0) {
24203 if (nb === buf.length) {
24204 ++c;
24205 if (p.next) list.head = p.next;else list.head = list.tail = null;
24206 } else {
24207 list.head = p;
24208 p.data = buf.slice(nb);
24209 }
24210 break;
ab78acc6 24211 }
8b095871
IC
24212 ++c;
24213 }
24214 list.length -= c;
24215 return ret;
ab78acc6 24216}
ebd8d4e8 24217
8b095871
IC
24218function endReadable(stream) {
24219 var state = stream._readableState;
ab78acc6 24220
8b095871
IC
24221 // If we get here before consuming all the bytes, then that is a
24222 // bug in node. Should never happen.
24223 if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream');
ab78acc6 24224
8b095871
IC
24225 if (!state.endEmitted) {
24226 state.ended = true;
24227 processNextTick(endReadableNT, state, stream);
24228 }
24229}
ebd8d4e8 24230
8b095871
IC
24231function endReadableNT(state, stream) {
24232 // Check that we didn't get one last unshift.
24233 if (!state.endEmitted && state.length === 0) {
24234 state.endEmitted = true;
24235 stream.readable = false;
24236 stream.emit('end');
24237 }
24238}
ebd8d4e8 24239
8b095871
IC
24240function forEach(xs, f) {
24241 for (var i = 0, l = xs.length; i < l; i++) {
24242 f(xs[i], i);
24243 }
24244}
ebd8d4e8 24245
8b095871
IC
24246function indexOf(xs, x) {
24247 for (var i = 0, l = xs.length; i < l; i++) {
24248 if (xs[i] === x) return i;
24249 }
24250 return -1;
24251}
24252}).call(this,require('_process'))
24253},{"./_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){
24254// a transform stream is a readable/writable stream where you do
24255// something with the data. Sometimes it's called a "filter",
24256// but that's not a great name for it, since that implies a thing where
24257// some bits pass through, and others are simply ignored. (That would
24258// be a valid example of a transform, of course.)
ab78acc6 24259//
8b095871
IC
24260// While the output is causally related to the input, it's not a
24261// necessarily symmetric or synchronous transformation. For example,
24262// a zlib stream might take multiple plain-text writes(), and then
24263// emit a single compressed chunk some time in the future.
ab78acc6 24264//
8b095871 24265// Here's how this works:
ab78acc6 24266//
8b095871
IC
24267// The Transform stream has all the aspects of the readable and writable
24268// stream classes. When you write(chunk), that calls _write(chunk,cb)
24269// internally, and returns false if there's a lot of pending writes
24270// buffered up. When you call read(), that calls _read(n) until
24271// there's enough pending readable data buffered up.
24272//
24273// In a transform stream, the written data is placed in a buffer. When
24274// _read(n) is called, it transforms the queued up data, calling the
24275// buffered _write cb's as it consumes chunks. If consuming a single
24276// written chunk would result in multiple output chunks, then the first
24277// outputted bit calls the readcb, and subsequent chunks just go into
24278// the read buffer, and will cause it to emit 'readable' if necessary.
24279//
24280// This way, back-pressure is actually determined by the reading side,
24281// since _read has to be called to start processing a new chunk. However,
24282// a pathological inflate type of transform can cause excessive buffering
24283// here. For example, imagine a stream where every byte of input is
24284// interpreted as an integer from 0-255, and then results in that many
24285// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in
24286// 1kb of data being output. In this case, you could write a very small
24287// amount of input, and end up with a very large amount of output. In
24288// such a pathological inflating mechanism, there'd be no way to tell
24289// the system to stop doing the transform. A single 4MB write could
24290// cause the system to run out of memory.
24291//
24292// However, even in such a pathological case, only a single written chunk
24293// would be consumed, and then the rest would wait (un-transformed) until
24294// the results of the previous transformed chunk were consumed.
ebd8d4e8 24295
8b095871 24296'use strict';
ebd8d4e8 24297
8b095871 24298module.exports = Transform;
ebd8d4e8 24299
8b095871 24300var Duplex = require('./_stream_duplex');
ebd8d4e8 24301
ab78acc6
IC
24302/*<replacement>*/
24303var util = require('core-util-is');
24304util.inherits = require('inherits');
24305/*</replacement>*/
ebd8d4e8 24306
8b095871 24307util.inherits(Transform, Duplex);
ebd8d4e8 24308
8b095871
IC
24309function TransformState(stream) {
24310 this.afterTransform = function (er, data) {
24311 return afterTransform(stream, er, data);
24312 };
ebd8d4e8 24313
8b095871
IC
24314 this.needTransform = false;
24315 this.transforming = false;
24316 this.writecb = null;
24317 this.writechunk = null;
24318 this.writeencoding = null;
24319}
ebd8d4e8 24320
8b095871
IC
24321function afterTransform(stream, er, data) {
24322 var ts = stream._transformState;
24323 ts.transforming = false;
ebd8d4e8 24324
8b095871 24325 var cb = ts.writecb;
ebd8d4e8 24326
8b095871 24327 if (!cb) return stream.emit('error', new Error('no writecb in Transform class'));
ebd8d4e8 24328
8b095871
IC
24329 ts.writechunk = null;
24330 ts.writecb = null;
ebd8d4e8 24331
8b095871 24332 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 24333
8b095871
IC
24334 cb(er);
24335
24336 var rs = stream._readableState;
24337 rs.reading = false;
24338 if (rs.needReadable || rs.length < rs.highWaterMark) {
24339 stream._read(rs.highWaterMark);
24340 }
ebd8d4e8
IC
24341}
24342
8b095871
IC
24343function Transform(options) {
24344 if (!(this instanceof Transform)) return new Transform(options);
ebd8d4e8 24345
8b095871 24346 Duplex.call(this, options);
ebd8d4e8 24347
8b095871
IC
24348 this._transformState = new TransformState(this);
24349
24350 var stream = this;
24351
24352 // start out asking for a readable event once data is transformed.
24353 this._readableState.needReadable = true;
24354
24355 // we have implemented the _read method, and done the other things
24356 // that Readable wants before the first _read call, so unset the
24357 // sync guard flag.
24358 this._readableState.sync = false;
24359
24360 if (options) {
24361 if (typeof options.transform === 'function') this._transform = options.transform;
24362
24363 if (typeof options.flush === 'function') this._flush = options.flush;
ebd8d4e8 24364 }
8b095871
IC
24365
24366 // When the writable side finishes, then flush out anything remaining.
24367 this.once('prefinish', function () {
24368 if (typeof this._flush === 'function') this._flush(function (er, data) {
24369 done(stream, er, data);
24370 });else done(stream);
24371 });
ab78acc6 24372}
ebd8d4e8 24373
8b095871
IC
24374Transform.prototype.push = function (chunk, encoding) {
24375 this._transformState.needTransform = false;
24376 return Duplex.prototype.push.call(this, chunk, encoding);
24377};
24378
24379// This is the part where you do stuff!
24380// override this function in implementation classes.
24381// 'chunk' is an input chunk.
ab78acc6 24382//
8b095871
IC
24383// Call `push(newChunk)` to pass along transformed output
24384// to the readable side. You may call 'push' zero or more times.
ab78acc6 24385//
8b095871
IC
24386// Call `cb(err)` when you are done with this chunk. If you pass
24387// an error, then that'll put the hurt on the whole operation. If you
24388// never call cb(), then you'll never get another chunk.
24389Transform.prototype._transform = function (chunk, encoding, cb) {
24390 throw new Error('_transform() is not implemented');
24391};
ebd8d4e8 24392
8b095871
IC
24393Transform.prototype._write = function (chunk, encoding, cb) {
24394 var ts = this._transformState;
24395 ts.writecb = cb;
24396 ts.writechunk = chunk;
24397 ts.writeencoding = encoding;
24398 if (!ts.transforming) {
24399 var rs = this._readableState;
24400 if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);
24401 }
24402};
ebd8d4e8 24403
8b095871
IC
24404// Doesn't matter what the args are here.
24405// _transform does all the work.
24406// That we got here means that the readable side wants more data.
24407Transform.prototype._read = function (n) {
24408 var ts = this._transformState;
ebd8d4e8 24409
8b095871
IC
24410 if (ts.writechunk !== null && ts.writecb && !ts.transforming) {
24411 ts.transforming = true;
24412 this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);
24413 } else {
24414 // mark that we need a transform, so that any data that comes in
24415 // will get processed, now that we've asked for it.
24416 ts.needTransform = true;
24417 }
24418};
ebd8d4e8 24419
8b095871
IC
24420function done(stream, er, data) {
24421 if (er) return stream.emit('error', er);
ebd8d4e8 24422
8b095871 24423 if (data !== null && data !== undefined) stream.push(data);
ebd8d4e8 24424
8b095871
IC
24425 // if there's nothing in the write buffer, then that means
24426 // that nothing more will ever be provided
24427 var ws = stream._writableState;
24428 var ts = stream._transformState;
ebd8d4e8 24429
8b095871 24430 if (ws.length) throw new Error('Calling transform done when ws.length != 0');
ebd8d4e8 24431
8b095871 24432 if (ts.transforming) throw new Error('Calling transform done when still transforming');
ebd8d4e8 24433
8b095871
IC
24434 return stream.push(null);
24435}
24436},{"./_stream_duplex":15,"core-util-is":6,"inherits":9}],19:[function(require,module,exports){
ab78acc6 24437(function (process){
8b095871
IC
24438// A bit simpler than readable streams.
24439// Implement an async ._write(chunk, encoding, cb), and it'll handle all
24440// the drain event emission and buffering.
ebd8d4e8 24441
8b095871
IC
24442'use strict';
24443
24444module.exports = Writable;
ebd8d4e8 24445
ab78acc6 24446/*<replacement>*/
8b095871 24447var processNextTick = require('process-nextick-args');
ab78acc6
IC
24448/*</replacement>*/
24449
ab78acc6 24450/*<replacement>*/
8b095871 24451var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick;
ab78acc6
IC
24452/*</replacement>*/
24453
ab78acc6 24454/*<replacement>*/
8b095871 24455var Duplex;
ab78acc6
IC
24456/*</replacement>*/
24457
8b095871 24458Writable.WritableState = WritableState;
ab78acc6
IC
24459
24460/*<replacement>*/
24461var util = require('core-util-is');
24462util.inherits = require('inherits');
24463/*</replacement>*/
24464
8b095871
IC
24465/*<replacement>*/
24466var internalUtil = {
24467 deprecate: require('util-deprecate')
24468};
24469/*</replacement>*/
ab78acc6 24470
8b095871
IC
24471/*<replacement>*/
24472var Stream;
24473(function () {
24474 try {
24475 Stream = require('st' + 'ream');
24476 } catch (_) {} finally {
24477 if (!Stream) Stream = require('events').EventEmitter;
24478 }
24479})();
24480/*</replacement>*/
ab78acc6 24481
8b095871 24482var Buffer = require('buffer').Buffer;
ab78acc6 24483/*<replacement>*/
8b095871 24484var bufferShim = require('buffer-shims');
ab78acc6
IC
24485/*</replacement>*/
24486
8b095871
IC
24487util.inherits(Writable, Stream);
24488
24489function nop() {}
ab78acc6 24490
8b095871
IC
24491function WriteReq(chunk, encoding, cb) {
24492 this.chunk = chunk;
24493 this.encoding = encoding;
24494 this.callback = cb;
24495 this.next = null;
24496}
ab78acc6 24497
8b095871
IC
24498function WritableState(options, stream) {
24499 Duplex = Duplex || require('./_stream_duplex');
ab78acc6
IC
24500
24501 options = options || {};
24502
8b095871
IC
24503 // object stream flag to indicate whether or not this stream
24504 // contains buffers or objects.
24505 this.objectMode = !!options.objectMode;
24506
24507 if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode;
24508
24509 // the point at which write() starts returning false
24510 // Note: 0 is a valid value, means that we always return false if
24511 // the entire buffer is not flushed immediately on write()
ab78acc6 24512 var hwm = options.highWaterMark;
8b095871
IC
24513 var defaultHwm = this.objectMode ? 16 : 16 * 1024;
24514 this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm;
ab78acc6
IC
24515
24516 // cast to ints.
8b095871 24517 this.highWaterMark = ~ ~this.highWaterMark;
ab78acc6 24518
8b095871
IC
24519 // drain event flag.
24520 this.needDrain = false;
24521 // at the start of calling end()
24522 this.ending = false;
24523 // when end() has been called, and returned
ab78acc6 24524 this.ended = false;
8b095871
IC
24525 // when 'finish' is emitted
24526 this.finished = false;
24527
24528 // should we decode strings into buffers before passing to _write?
24529 // this is here so that some node-core streams can optimize string
24530 // handling at a lower level.
24531 var noDecode = options.decodeStrings === false;
24532 this.decodeStrings = !noDecode;
24533
24534 // Crypto is kind of old and crusty. Historically, its default string
24535 // encoding is 'binary' so we have to make this configurable.
24536 // Everything else in the universe uses 'utf8', though.
24537 this.defaultEncoding = options.defaultEncoding || 'utf8';
24538
24539 // not an actual buffer we keep track of, but a measurement
24540 // of how much we're waiting to get pushed to some underlying
24541 // socket or file.
24542 this.length = 0;
24543
24544 // a flag to see when we're in the middle of a write.
24545 this.writing = false;
24546
24547 // when true all writes will be buffered until .uncork() call
24548 this.corked = 0;
ebd8d4e8 24549
ab78acc6
IC
24550 // a flag to be able to tell if the onwrite cb is called immediately,
24551 // or on a later tick. We set this to true at first, because any
24552 // actions that shouldn't happen until "later" should generally also
24553 // not happen before the first write call.
24554 this.sync = true;
ebd8d4e8 24555
8b095871
IC
24556 // a flag to know if we're processing previously buffered items, which
24557 // may call the _write() callback in the same tick, so that we don't
24558 // end up in an overlapped onwrite situation.
24559 this.bufferProcessing = false;
24560
24561 // the callback that's passed to _write(chunk,cb)
24562 this.onwrite = function (er) {
24563 onwrite(stream, er);
24564 };
24565
24566 // the callback that the user supplies to write(chunk,encoding,cb)
24567 this.writecb = null;
24568
24569 // the amount that is being written when _write is called.
24570 this.writelen = 0;
24571
24572 this.bufferedRequest = null;
24573 this.lastBufferedRequest = null;
24574
24575 // number of pending user-supplied write callbacks
24576 // this must be 0 before 'finish' can be emitted
24577 this.pendingcb = 0;
24578
24579 // emit prefinish if the only thing we're waiting for is _write cbs
24580 // This is relevant for synchronous Transform streams
24581 this.prefinished = false;
24582
24583 // True if the error was already emitted and should not be thrown again
24584 this.errorEmitted = false;
24585
24586 // count buffered requests
24587 this.bufferedRequestCount = 0;
24588
24589 // allocate the first CorkedRequest, there is always
24590 // one allocated and free to use, and we maintain at most two
24591 this.corkedRequestsFree = new CorkedRequest(this);
24592}
24593
24594WritableState.prototype.getBuffer = function getBuffer() {
24595 var current = this.bufferedRequest;
24596 var out = [];
24597 while (current) {
24598 out.push(current);
24599 current = current.next;
24600 }
24601 return out;
24602};
24603
24604(function () {
24605 try {
24606 Object.defineProperty(WritableState.prototype, 'buffer', {
24607 get: internalUtil.deprecate(function () {
24608 return this.getBuffer();
24609 }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.')
24610 });
24611 } catch (_) {}
24612})();
24613
24614// Test _writableState for inheritance to account for Duplex streams,
24615// whose prototype chain only points to Readable.
24616var realHasInstance;
24617if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {
24618 realHasInstance = Function.prototype[Symbol.hasInstance];
24619 Object.defineProperty(Writable, Symbol.hasInstance, {
24620 value: function (object) {
24621 if (realHasInstance.call(this, object)) return true;
24622
24623 return object && object._writableState instanceof WritableState;
24624 }
24625 });
24626} else {
24627 realHasInstance = function (object) {
24628 return object instanceof this;
24629 };
24630}
24631
24632function Writable(options) {
24633 Duplex = Duplex || require('./_stream_duplex');
24634
24635 // Writable ctor is applied to Duplexes, too.
24636 // `realHasInstance` is necessary because using plain `instanceof`
24637 // would return false, as no `_writableState` property is attached.
24638
24639 // Trying to use the custom `instanceof` for Writable here will also break the
24640 // Node.js LazyTransform implementation, which has a non-trivial getter for
24641 // `_writableState` that would lead to infinite recursion.
24642 if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {
24643 return new Writable(options);
24644 }
24645
24646 this._writableState = new WritableState(options, this);
24647
24648 // legacy.
24649 this.writable = true;
24650
24651 if (options) {
24652 if (typeof options.write === 'function') this._write = options.write;
24653
24654 if (typeof options.writev === 'function') this._writev = options.writev;
24655 }
24656
24657 Stream.call(this);
24658}
24659
24660// Otherwise people can pipe Writable streams, which is just wrong.
24661Writable.prototype.pipe = function () {
24662 this.emit('error', new Error('Cannot pipe, not readable'));
24663};
24664
24665function writeAfterEnd(stream, cb) {
24666 var er = new Error('write after end');
24667 // TODO: defer error events consistently everywhere, not just the cb
24668 stream.emit('error', er);
24669 processNextTick(cb, er);
24670}
24671
24672// If we get something that is not a buffer, string, null, or undefined,
24673// and we're not in objectMode, then that's an error.
24674// Otherwise stream chunks are all considered to be of length=1, and the
24675// watermarks determine how many objects to keep in the buffer, rather than
24676// how many bytes or characters.
24677function validChunk(stream, state, chunk, cb) {
24678 var valid = true;
24679 var er = false;
24680 // Always throw error if a null is written
24681 // if we are not in object mode then throw
24682 // if it is not a buffer, string, or undefined.
24683 if (chunk === null) {
24684 er = new TypeError('May not write null values to stream');
24685 } else if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {
24686 er = new TypeError('Invalid non-string/buffer chunk');
24687 }
24688 if (er) {
24689 stream.emit('error', er);
24690 processNextTick(cb, er);
24691 valid = false;
24692 }
24693 return valid;
24694}
ebd8d4e8 24695
8b095871
IC
24696Writable.prototype.write = function (chunk, encoding, cb) {
24697 var state = this._writableState;
24698 var ret = false;
ab78acc6 24699
8b095871
IC
24700 if (typeof encoding === 'function') {
24701 cb = encoding;
24702 encoding = null;
24703 }
ab78acc6 24704
8b095871 24705 if (Buffer.isBuffer(chunk)) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;
ab78acc6 24706
8b095871 24707 if (typeof cb !== 'function') cb = nop;
ab78acc6 24708
8b095871
IC
24709 if (state.ended) writeAfterEnd(this, cb);else if (validChunk(this, state, chunk, cb)) {
24710 state.pendingcb++;
24711 ret = writeOrBuffer(this, state, chunk, encoding, cb);
24712 }
ab78acc6 24713
8b095871
IC
24714 return ret;
24715};
ab78acc6 24716
8b095871
IC
24717Writable.prototype.cork = function () {
24718 var state = this._writableState;
ab78acc6 24719
8b095871
IC
24720 state.corked++;
24721};
ebd8d4e8 24722
8b095871
IC
24723Writable.prototype.uncork = function () {
24724 var state = this._writableState;
ab78acc6 24725
8b095871
IC
24726 if (state.corked) {
24727 state.corked--;
ab78acc6 24728
8b095871
IC
24729 if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);
24730 }
24731};
ab78acc6 24732
8b095871
IC
24733Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {
24734 // node::ParseEncoding() requires lower case.
24735 if (typeof encoding === 'string') encoding = encoding.toLowerCase();
24736 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);
24737 this._writableState.defaultEncoding = encoding;
24738 return this;
24739};
ab78acc6 24740
8b095871
IC
24741function decodeChunk(state, chunk, encoding) {
24742 if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {
24743 chunk = bufferShim.from(chunk, encoding);
24744 }
24745 return chunk;
ab78acc6
IC
24746}
24747
8b095871
IC
24748// if we're already writing something, then just put this
24749// in the queue, and wait our turn. Otherwise, call _write
24750// If we return false, then we need a drain event, so set that flag.
24751function writeOrBuffer(stream, state, chunk, encoding, cb) {
24752 chunk = decodeChunk(state, chunk, encoding);
ab78acc6 24753
8b095871
IC
24754 if (Buffer.isBuffer(chunk)) encoding = 'buffer';
24755 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 24756
8b095871 24757 state.length += len;
ebd8d4e8 24758
8b095871
IC
24759 var ret = state.length < state.highWaterMark;
24760 // we must ensure that previous needDrain will not be reset to false.
24761 if (!ret) state.needDrain = true;
ebd8d4e8 24762
8b095871
IC
24763 if (state.writing || state.corked) {
24764 var last = state.lastBufferedRequest;
24765 state.lastBufferedRequest = new WriteReq(chunk, encoding, cb);
24766 if (last) {
24767 last.next = state.lastBufferedRequest;
ebd8d4e8 24768 } else {
8b095871
IC
24769 state.bufferedRequest = state.lastBufferedRequest;
24770 }
24771 state.bufferedRequestCount += 1;
24772 } else {
24773 doWrite(stream, state, false, len, chunk, encoding, cb);
24774 }
ab78acc6 24775
8b095871
IC
24776 return ret;
24777}
ab78acc6 24778
8b095871
IC
24779function doWrite(stream, state, writev, len, chunk, encoding, cb) {
24780 state.writelen = len;
24781 state.writecb = cb;
24782 state.writing = true;
24783 state.sync = true;
24784 if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);
24785 state.sync = false;
24786}
ab78acc6 24787
8b095871
IC
24788function onwriteError(stream, state, sync, er, cb) {
24789 --state.pendingcb;
24790 if (sync) processNextTick(cb, er);else cb(er);
ab78acc6 24791
8b095871
IC
24792 stream._writableState.errorEmitted = true;
24793 stream.emit('error', er);
24794}
ebd8d4e8 24795
8b095871
IC
24796function onwriteStateUpdate(state) {
24797 state.writing = false;
24798 state.writecb = null;
24799 state.length -= state.writelen;
24800 state.writelen = 0;
ab78acc6 24801}
ebd8d4e8 24802
8b095871
IC
24803function onwrite(stream, er) {
24804 var state = stream._writableState;
24805 var sync = state.sync;
24806 var cb = state.writecb;
ab78acc6 24807
8b095871 24808 onwriteStateUpdate(state);
ab78acc6 24809
8b095871
IC
24810 if (er) onwriteError(stream, state, sync, er, cb);else {
24811 // Check if we're actually ready to finish, but don't emit yet
24812 var finished = needFinish(state);
24813
24814 if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {
24815 clearBuffer(stream, state);
24816 }
24817
24818 if (sync) {
24819 /*<replacement>*/
24820 asyncWrite(afterWrite, stream, state, finished, cb);
24821 /*</replacement>*/
24822 } else {
24823 afterWrite(stream, state, finished, cb);
24824 }
24825 }
ab78acc6
IC
24826}
24827
8b095871
IC
24828function afterWrite(stream, state, finished, cb) {
24829 if (!finished) onwriteDrain(stream, state);
24830 state.pendingcb--;
24831 cb();
24832 finishMaybe(stream, state);
24833}
ab78acc6 24834
8b095871
IC
24835// Must force callback to be called on nextTick, so that we don't
24836// emit 'drain' before the write() consumer gets the 'false' return
24837// value, and has a chance to attach a 'drain' listener.
24838function onwriteDrain(stream, state) {
24839 if (state.length === 0 && state.needDrain) {
24840 state.needDrain = false;
24841 stream.emit('drain');
ebd8d4e8 24842 }
ebd8d4e8 24843}
ebd8d4e8 24844
8b095871
IC
24845// if there's something in the buffer waiting, then process it
24846function clearBuffer(stream, state) {
24847 state.bufferProcessing = true;
24848 var entry = state.bufferedRequest;
ebd8d4e8 24849
8b095871
IC
24850 if (stream._writev && entry && entry.next) {
24851 // Fast case, write everything using _writev()
24852 var l = state.bufferedRequestCount;
24853 var buffer = new Array(l);
24854 var holder = state.corkedRequestsFree;
24855 holder.entry = entry;
ebd8d4e8 24856
8b095871
IC
24857 var count = 0;
24858 while (entry) {
24859 buffer[count] = entry;
24860 entry = entry.next;
24861 count += 1;
24862 }
ebd8d4e8 24863
8b095871 24864 doWrite(stream, state, true, state.length, buffer, '', holder.finish);
ebd8d4e8 24865
8b095871
IC
24866 // doWrite is almost always async, defer these to save a bit of time
24867 // as the hot path ends with doWrite
24868 state.pendingcb++;
24869 state.lastBufferedRequest = null;
24870 if (holder.next) {
24871 state.corkedRequestsFree = holder.next;
24872 holder.next = null;
24873 } else {
24874 state.corkedRequestsFree = new CorkedRequest(state);
24875 }
24876 } else {
24877 // Slow case, write chunks one-by-one
24878 while (entry) {
24879 var chunk = entry.chunk;
24880 var encoding = entry.encoding;
24881 var cb = entry.callback;
24882 var len = state.objectMode ? 1 : chunk.length;
ebd8d4e8 24883
8b095871
IC
24884 doWrite(stream, state, false, len, chunk, encoding, cb);
24885 entry = entry.next;
24886 // if we didn't call the onwrite immediately, then
24887 // it means that we need to wait until it does.
24888 // also, that means that the chunk and cb are currently
24889 // being processed, so move the buffer counter past them.
24890 if (state.writing) {
24891 break;
24892 }
24893 }
24894
24895 if (entry === null) state.lastBufferedRequest = null;
ebd8d4e8 24896 }
ab78acc6 24897
8b095871
IC
24898 state.bufferedRequestCount = 0;
24899 state.bufferedRequest = entry;
24900 state.bufferProcessing = false;
ebd8d4e8
IC
24901}
24902
8b095871
IC
24903Writable.prototype._write = function (chunk, encoding, cb) {
24904 cb(new Error('_write() is not implemented'));
24905};
ebd8d4e8 24906
8b095871 24907Writable.prototype._writev = null;
ab78acc6 24908
8b095871
IC
24909Writable.prototype.end = function (chunk, encoding, cb) {
24910 var state = this._writableState;
24911
24912 if (typeof chunk === 'function') {
24913 cb = chunk;
24914 chunk = null;
24915 encoding = null;
24916 } else if (typeof encoding === 'function') {
24917 cb = encoding;
24918 encoding = null;
ab78acc6
IC
24919 }
24920
8b095871 24921 if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);
ab78acc6 24922
8b095871
IC
24923 // .end() fully uncorks
24924 if (state.corked) {
24925 state.corked = 1;
24926 this.uncork();
ab78acc6
IC
24927 }
24928
8b095871
IC
24929 // ignore unnecessary end() calls.
24930 if (!state.ending && !state.finished) endWritable(this, state, cb);
24931};
ab78acc6 24932
8b095871
IC
24933function needFinish(state) {
24934 return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;
24935}
ab78acc6 24936
8b095871
IC
24937function prefinish(stream, state) {
24938 if (!state.prefinished) {
24939 state.prefinished = true;
24940 stream.emit('prefinish');
ab78acc6 24941 }
8b095871 24942}
ab78acc6 24943
8b095871
IC
24944function finishMaybe(stream, state) {
24945 var need = needFinish(state);
24946 if (need) {
24947 if (state.pendingcb === 0) {
24948 prefinish(stream, state);
24949 state.finished = true;
24950 stream.emit('finish');
24951 } else {
24952 prefinish(stream, state);
24953 }
ab78acc6 24954 }
8b095871
IC
24955 return need;
24956}
ab78acc6 24957
8b095871
IC
24958function endWritable(stream, state, cb) {
24959 state.ending = true;
24960 finishMaybe(stream, state);
24961 if (cb) {
24962 if (state.finished) processNextTick(cb);else stream.once('finish', cb);
ab78acc6 24963 }
8b095871
IC
24964 state.ended = true;
24965 stream.writable = false;
24966}
ab78acc6 24967
8b095871
IC
24968// It seems a linked list but it is not
24969// there will be only 2 of these for each stream
24970function CorkedRequest(state) {
24971 var _this = this;
ab78acc6 24972
8b095871
IC
24973 this.next = null;
24974 this.entry = null;
ebd8d4e8 24975
8b095871
IC
24976 this.finish = function (err) {
24977 var entry = _this.entry;
24978 _this.entry = null;
24979 while (entry) {
24980 var cb = entry.callback;
24981 state.pendingcb--;
24982 cb(err);
24983 entry = entry.next;
24984 }
24985 if (state.corkedRequestsFree) {
24986 state.corkedRequestsFree.next = _this;
24987 } else {
24988 state.corkedRequestsFree = _this;
24989 }
24990 };
24991}
24992}).call(this,require('_process'))
24993},{"./_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){
24994'use strict';
ebd8d4e8 24995
8b095871
IC
24996var Buffer = require('buffer').Buffer;
24997/*<replacement>*/
24998var bufferShim = require('buffer-shims');
24999/*</replacement>*/
ebd8d4e8 25000
8b095871 25001module.exports = BufferList;
ebd8d4e8 25002
8b095871
IC
25003function BufferList() {
25004 this.head = null;
25005 this.tail = null;
25006 this.length = 0;
25007}
ab78acc6 25008
8b095871
IC
25009BufferList.prototype.push = function (v) {
25010 var entry = { data: v, next: null };
25011 if (this.length > 0) this.tail.next = entry;else this.head = entry;
25012 this.tail = entry;
25013 ++this.length;
25014};
25015
25016BufferList.prototype.unshift = function (v) {
25017 var entry = { data: v, next: this.head };
25018 if (this.length === 0) this.tail = entry;
25019 this.head = entry;
25020 ++this.length;
25021};
ab78acc6 25022
8b095871
IC
25023BufferList.prototype.shift = function () {
25024 if (this.length === 0) return;
25025 var ret = this.head.data;
25026 if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;
25027 --this.length;
ab78acc6
IC
25028 return ret;
25029};
25030
8b095871
IC
25031BufferList.prototype.clear = function () {
25032 this.head = this.tail = null;
25033 this.length = 0;
25034};
ebd8d4e8 25035
8b095871
IC
25036BufferList.prototype.join = function (s) {
25037 if (this.length === 0) return '';
25038 var p = this.head;
25039 var ret = '' + p.data;
25040 while (p = p.next) {
25041 ret += s + p.data;
25042 }return ret;
25043};
ebd8d4e8 25044
8b095871
IC
25045BufferList.prototype.concat = function (n) {
25046 if (this.length === 0) return bufferShim.alloc(0);
25047 if (this.length === 1) return this.head.data;
25048 var ret = bufferShim.allocUnsafe(n >>> 0);
25049 var p = this.head;
25050 var i = 0;
25051 while (p) {
25052 p.data.copy(ret, i);
25053 i += p.data.length;
25054 p = p.next;
ebd8d4e8 25055 }
8b095871
IC
25056 return ret;
25057};
25058},{"buffer":5,"buffer-shims":4}],21:[function(require,module,exports){
25059module.exports = require("./lib/_stream_passthrough.js")
ebd8d4e8 25060
8b095871
IC
25061},{"./lib/_stream_passthrough.js":16}],22:[function(require,module,exports){
25062(function (process){
25063var Stream = (function (){
25064 try {
25065 return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify
25066 } catch(_){}
25067}());
25068exports = module.exports = require('./lib/_stream_readable.js');
25069exports.Stream = Stream || exports;
25070exports.Readable = exports;
25071exports.Writable = require('./lib/_stream_writable.js');
25072exports.Duplex = require('./lib/_stream_duplex.js');
25073exports.Transform = require('./lib/_stream_transform.js');
25074exports.PassThrough = require('./lib/_stream_passthrough.js');
ab78acc6 25075
8b095871
IC
25076if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) {
25077 module.exports = Stream;
ab78acc6 25078}
ebd8d4e8 25079
8b095871
IC
25080}).call(this,require('_process'))
25081},{"./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){
25082module.exports = require("./lib/_stream_transform.js")
ebd8d4e8 25083
8b095871
IC
25084},{"./lib/_stream_transform.js":18}],24:[function(require,module,exports){
25085module.exports = require("./lib/_stream_writable.js")
ab78acc6 25086
8b095871
IC
25087},{"./lib/_stream_writable.js":19}],25:[function(require,module,exports){
25088// Copyright Joyent, Inc. and other Node contributors.
25089//
25090// Permission is hereby granted, free of charge, to any person obtaining a
25091// copy of this software and associated documentation files (the
25092// "Software"), to deal in the Software without restriction, including
25093// without limitation the rights to use, copy, modify, merge, publish,
25094// distribute, sublicense, and/or sell copies of the Software, and to permit
25095// persons to whom the Software is furnished to do so, subject to the
25096// following conditions:
25097//
25098// The above copyright notice and this permission notice shall be included
25099// in all copies or substantial portions of the Software.
25100//
25101// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25102// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25103// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25104// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25105// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25106// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25107// USE OR OTHER DEALINGS IN THE SOFTWARE.
25108
25109module.exports = Stream;
25110
25111var EE = require('events').EventEmitter;
25112var inherits = require('inherits');
25113
25114inherits(Stream, EE);
25115Stream.Readable = require('readable-stream/readable.js');
25116Stream.Writable = require('readable-stream/writable.js');
25117Stream.Duplex = require('readable-stream/duplex.js');
25118Stream.Transform = require('readable-stream/transform.js');
25119Stream.PassThrough = require('readable-stream/passthrough.js');
ebd8d4e8 25120
8b095871
IC
25121// Backwards-compat with node 0.4.x
25122Stream.Stream = Stream;
ebd8d4e8 25123
ab78acc6 25124
ab78acc6 25125
8b095871
IC
25126// old-style streams. Note that the pipe method (the only relevant
25127// part of this class) is overridden in the Readable class.
ebd8d4e8 25128
8b095871
IC
25129function Stream() {
25130 EE.call(this);
25131}
ebd8d4e8 25132
8b095871
IC
25133Stream.prototype.pipe = function(dest, options) {
25134 var source = this;
ab78acc6 25135
8b095871
IC
25136 function ondata(chunk) {
25137 if (dest.writable) {
25138 if (false === dest.write(chunk) && source.pause) {
25139 source.pause();
25140 }
ab78acc6
IC
25141 }
25142 }
25143
8b095871
IC
25144 source.on('data', ondata);
25145
25146 function ondrain() {
25147 if (source.readable && source.resume) {
25148 source.resume();
25149 }
ab78acc6
IC
25150 }
25151
ab78acc6
IC
25152 dest.on('drain', ondrain);
25153
8b095871
IC
25154 // If the 'end' option is not supplied, dest.end() will be called when
25155 // source gets the 'end' or 'close' events. Only dest.end() once.
25156 if (!dest._isStdio && (!options || options.end !== false)) {
25157 source.on('end', onend);
25158 source.on('close', onclose);
ab78acc6
IC
25159 }
25160
8b095871
IC
25161 var didOnEnd = false;
25162 function onend() {
25163 if (didOnEnd) return;
25164 didOnEnd = true;
ab78acc6 25165
8b095871 25166 dest.end();
ab78acc6 25167 }
ab78acc6
IC
25168
25169
ab78acc6 25170 function onclose() {
8b095871
IC
25171 if (didOnEnd) return;
25172 didOnEnd = true;
ebd8d4e8 25173
8b095871 25174 if (typeof dest.destroy === 'function') dest.destroy();
ebd8d4e8
IC
25175 }
25176
8b095871
IC
25177 // don't leave dangling pipes when there are errors.
25178 function onerror(er) {
25179 cleanup();
25180 if (EE.listenerCount(this, 'error') === 0) {
25181 throw er; // Unhandled stream error in pipe.
25182 }
ebd8d4e8
IC
25183 }
25184
8b095871
IC
25185 source.on('error', onerror);
25186 dest.on('error', onerror);
ab78acc6 25187
8b095871
IC
25188 // remove all the event listeners that were added.
25189 function cleanup() {
25190 source.removeListener('data', ondata);
25191 dest.removeListener('drain', ondrain);
ab78acc6 25192
8b095871
IC
25193 source.removeListener('end', onend);
25194 source.removeListener('close', onclose);
ab78acc6 25195
8b095871
IC
25196 source.removeListener('error', onerror);
25197 dest.removeListener('error', onerror);
ab78acc6 25198
8b095871
IC
25199 source.removeListener('end', cleanup);
25200 source.removeListener('close', cleanup);
ab78acc6 25201
8b095871
IC
25202 dest.removeListener('close', cleanup);
25203 }
ab78acc6 25204
8b095871
IC
25205 source.on('end', cleanup);
25206 source.on('close', cleanup);
ab78acc6 25207
8b095871 25208 dest.on('close', cleanup);
ebd8d4e8 25209
8b095871 25210 dest.emit('pipe', source);
ab78acc6 25211
8b095871
IC
25212 // Allow for unix-like usage: A.pipe(B).pipe(C)
25213 return dest;
25214};
ab78acc6 25215
8b095871
IC
25216},{"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){
25217// Copyright Joyent, Inc. and other Node contributors.
25218//
25219// Permission is hereby granted, free of charge, to any person obtaining a
25220// copy of this software and associated documentation files (the
25221// "Software"), to deal in the Software without restriction, including
25222// without limitation the rights to use, copy, modify, merge, publish,
25223// distribute, sublicense, and/or sell copies of the Software, and to permit
25224// persons to whom the Software is furnished to do so, subject to the
25225// following conditions:
25226//
25227// The above copyright notice and this permission notice shall be included
25228// in all copies or substantial portions of the Software.
25229//
25230// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25231// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25232// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25233// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25234// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25235// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25236// USE OR OTHER DEALINGS IN THE SOFTWARE.
25237
25238var Buffer = require('buffer').Buffer;
ebd8d4e8 25239
8b095871
IC
25240var isBufferEncoding = Buffer.isEncoding
25241 || function(encoding) {
25242 switch (encoding && encoding.toLowerCase()) {
25243 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;
25244 default: return false;
25245 }
25246 }
ab78acc6 25247
ab78acc6 25248
8b095871
IC
25249function assertEncoding(encoding) {
25250 if (encoding && !isBufferEncoding(encoding)) {
25251 throw new Error('Unknown encoding: ' + encoding);
25252 }
25253}
ebd8d4e8 25254
8b095871
IC
25255// StringDecoder provides an interface for efficiently splitting a series of
25256// buffers into a series of JS strings without breaking apart multi-byte
25257// characters. CESU-8 is handled as part of the UTF-8 encoding.
25258//
25259// @TODO Handling all encodings inside a single object makes it very difficult
25260// to reason about this code, so it should be split up in the future.
25261// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code
25262// points as used by CESU-8.
25263var StringDecoder = exports.StringDecoder = function(encoding) {
25264 this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');
25265 assertEncoding(encoding);
25266 switch (this.encoding) {
25267 case 'utf8':
25268 // CESU-8 represents each of Surrogate Pair by 3-bytes
25269 this.surrogateSize = 3;
25270 break;
25271 case 'ucs2':
25272 case 'utf16le':
25273 // UTF-16 represents each of Surrogate Pair by 2-bytes
25274 this.surrogateSize = 2;
25275 this.detectIncompleteChar = utf16DetectIncompleteChar;
25276 break;
25277 case 'base64':
25278 // Base-64 stores 3 bytes in 4 chars, and pads the remainder.
25279 this.surrogateSize = 3;
25280 this.detectIncompleteChar = base64DetectIncompleteChar;
25281 break;
25282 default:
25283 this.write = passThroughWrite;
25284 return;
25285 }
25286
25287 // Enough space to store all bytes of a single character. UTF-8 needs 4
25288 // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).
25289 this.charBuffer = new Buffer(6);
25290 // Number of bytes received for the current incomplete multi-byte character.
25291 this.charReceived = 0;
25292 // Number of bytes expected for the current incomplete multi-byte character.
25293 this.charLength = 0;
ab78acc6
IC
25294};
25295
ab78acc6 25296
8b095871
IC
25297// write decodes the given buffer and returns it as JS string that is
25298// guaranteed to not contain any partial multi-byte characters. Any partial
25299// character found at the end of the buffer is buffered up, and will be
25300// returned when calling write again with the remaining bytes.
25301//
25302// Note: Converting a Buffer containing an orphan surrogate to a String
25303// currently works, but converting a String to a Buffer (via `new Buffer`, or
25304// Buffer#write) will replace incomplete surrogates with the unicode
25305// replacement character. See https://codereview.chromium.org/121173009/ .
25306StringDecoder.prototype.write = function(buffer) {
25307 var charStr = '';
25308 // if our last write ended with an incomplete multibyte character
25309 while (this.charLength) {
25310 // determine how many remaining bytes this buffer has to offer for this char
25311 var available = (buffer.length >= this.charLength - this.charReceived) ?
25312 this.charLength - this.charReceived :
25313 buffer.length;
ab78acc6 25314
8b095871
IC
25315 // add the new bytes to the char buffer
25316 buffer.copy(this.charBuffer, this.charReceived, 0, available);
25317 this.charReceived += available;
25318
25319 if (this.charReceived < this.charLength) {
25320 // still not enough chars in this buffer? wait for more ...
25321 return '';
ebd8d4e8 25322 }
ebd8d4e8 25323
8b095871
IC
25324 // remove bytes belonging to the current character from the buffer
25325 buffer = buffer.slice(available, buffer.length);
ab78acc6 25326
8b095871
IC
25327 // get the character that was split
25328 charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);
25329
25330 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
25331 var charCode = charStr.charCodeAt(charStr.length - 1);
25332 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
25333 this.charLength += this.surrogateSize;
25334 charStr = '';
25335 continue;
ab78acc6 25336 }
8b095871 25337 this.charReceived = this.charLength = 0;
ebd8d4e8 25338
8b095871
IC
25339 // if there are no more bytes in this buffer, just emit our char
25340 if (buffer.length === 0) {
25341 return charStr;
25342 }
25343 break;
ebd8d4e8 25344 }
ebd8d4e8 25345
8b095871
IC
25346 // determine and set charLength / charReceived
25347 this.detectIncompleteChar(buffer);
ebd8d4e8 25348
8b095871
IC
25349 var end = buffer.length;
25350 if (this.charLength) {
25351 // buffer the incomplete character bytes we got
25352 buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);
25353 end -= this.charReceived;
ab78acc6 25354 }
ebd8d4e8 25355
8b095871
IC
25356 charStr += buffer.toString(this.encoding, 0, end);
25357
25358 var end = charStr.length - 1;
25359 var charCode = charStr.charCodeAt(end);
25360 // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character
25361 if (charCode >= 0xD800 && charCode <= 0xDBFF) {
25362 var size = this.surrogateSize;
25363 this.charLength += size;
25364 this.charReceived += size;
25365 this.charBuffer.copy(this.charBuffer, size, 0, size);
25366 buffer.copy(this.charBuffer, 0, 0, size);
25367 return charStr.substring(0, end);
ab78acc6 25368 }
ebd8d4e8 25369
8b095871
IC
25370 // or just emit the charStr
25371 return charStr;
25372};
ebd8d4e8 25373
8b095871
IC
25374// detectIncompleteChar determines if there is an incomplete UTF-8 character at
25375// the end of the given buffer. If so, it sets this.charLength to the byte
25376// length that character, and sets this.charReceived to the number of bytes
25377// that are available for this character.
25378StringDecoder.prototype.detectIncompleteChar = function(buffer) {
25379 // determine how many bytes we have to check at the end of this buffer
25380 var i = (buffer.length >= 3) ? 3 : buffer.length;
ab78acc6 25381
8b095871
IC
25382 // Figure out if one of the last i bytes of our buffer announces an
25383 // incomplete char.
25384 for (; i > 0; i--) {
25385 var c = buffer[buffer.length - i];
ebd8d4e8 25386
8b095871 25387 // See http://en.wikipedia.org/wiki/UTF-8#Description
ebd8d4e8 25388
8b095871
IC
25389 // 110XXXXX
25390 if (i == 1 && c >> 5 == 0x06) {
25391 this.charLength = 2;
25392 break;
ebd8d4e8 25393 }
ab78acc6 25394
8b095871
IC
25395 // 1110XXXX
25396 if (i <= 2 && c >> 4 == 0x0E) {
25397 this.charLength = 3;
25398 break;
25399 }
25400
25401 // 11110XXX
25402 if (i <= 3 && c >> 3 == 0x1E) {
25403 this.charLength = 4;
25404 break;
ebd8d4e8
IC
25405 }
25406 }
8b095871
IC
25407 this.charReceived = i;
25408};
ab78acc6 25409
8b095871
IC
25410StringDecoder.prototype.end = function(buffer) {
25411 var res = '';
25412 if (buffer && buffer.length)
25413 res = this.write(buffer);
ab78acc6 25414
8b095871
IC
25415 if (this.charReceived) {
25416 var cr = this.charReceived;
25417 var buf = this.charBuffer;
25418 var enc = this.encoding;
25419 res += buf.slice(0, cr).toString(enc);
25420 }
ab78acc6 25421
8b095871 25422 return res;
ab78acc6
IC
25423};
25424
8b095871
IC
25425function passThroughWrite(buffer) {
25426 return buffer.toString(this.encoding);
25427}
ab78acc6 25428
8b095871
IC
25429function utf16DetectIncompleteChar(buffer) {
25430 this.charReceived = buffer.length % 2;
25431 this.charLength = this.charReceived ? 2 : 0;
25432}
ab78acc6 25433
8b095871
IC
25434function base64DetectIncompleteChar(buffer) {
25435 this.charReceived = buffer.length % 3;
25436 this.charLength = this.charReceived ? 3 : 0;
25437}
ab78acc6 25438
8b095871
IC
25439},{"buffer":5}],27:[function(require,module,exports){
25440(function (global){
ab78acc6 25441
8b095871
IC
25442/**
25443 * Module exports.
25444 */
ebd8d4e8 25445
8b095871 25446module.exports = deprecate;
ebd8d4e8 25447
8b095871
IC
25448/**
25449 * Mark that a method should not be used.
25450 * Returns a modified function which warns once by default.
25451 *
25452 * If `localStorage.noDeprecation = true` is set, then it is a no-op.
25453 *
25454 * If `localStorage.throwDeprecation = true` is set, then deprecated functions
25455 * will throw an Error when invoked.
25456 *
25457 * If `localStorage.traceDeprecation = true` is set, then deprecated functions
25458 * will invoke `console.trace()` instead of `console.error()`.
25459 *
25460 * @param {Function} fn - the function to deprecate
25461 * @param {String} msg - the string to print to the console when `fn` is invoked
25462 * @returns {Function} a new "deprecated" version of `fn`
25463 * @api public
25464 */
ebd8d4e8 25465
8b095871
IC
25466function deprecate (fn, msg) {
25467 if (config('noDeprecation')) {
25468 return fn;
25469 }
ebd8d4e8 25470
8b095871
IC
25471 var warned = false;
25472 function deprecated() {
25473 if (!warned) {
25474 if (config('throwDeprecation')) {
25475 throw new Error(msg);
25476 } else if (config('traceDeprecation')) {
25477 console.trace(msg);
25478 } else {
25479 console.warn(msg);
ab78acc6 25480 }
8b095871 25481 warned = true;
ab78acc6 25482 }
8b095871 25483 return fn.apply(this, arguments);
ebd8d4e8
IC
25484 }
25485
8b095871 25486 return deprecated;
ebd8d4e8
IC
25487}
25488
8b095871
IC
25489/**
25490 * Checks `localStorage` for boolean values for the given `name`.
25491 *
25492 * @param {String} name
25493 * @returns {Boolean}
25494 * @api private
25495 */
ebd8d4e8 25496
8b095871
IC
25497function config (name) {
25498 // accessing global.localStorage can trigger a DOMException in sandboxed iframes
25499 try {
25500 if (!global.localStorage) return false;
25501 } catch (_) {
25502 return false;
ab78acc6 25503 }
8b095871
IC
25504 var val = global.localStorage[name];
25505 if (null == val) return false;
25506 return String(val).toLowerCase() === 'true';
ebd8d4e8 25507}
ebd8d4e8 25508
8b095871
IC
25509}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
25510},{}],28:[function(require,module,exports){
25511arguments[4][9][0].apply(exports,arguments)
25512},{"dup":9}],29:[function(require,module,exports){
25513module.exports = function isBuffer(arg) {
25514 return arg && typeof arg === 'object'
25515 && typeof arg.copy === 'function'
25516 && typeof arg.fill === 'function'
25517 && typeof arg.readUInt8 === 'function';
ebd8d4e8 25518}
8b095871
IC
25519},{}],30:[function(require,module,exports){
25520(function (process,global){
ab78acc6
IC
25521// Copyright Joyent, Inc. and other Node contributors.
25522//
25523// Permission is hereby granted, free of charge, to any person obtaining a
25524// copy of this software and associated documentation files (the
25525// "Software"), to deal in the Software without restriction, including
25526// without limitation the rights to use, copy, modify, merge, publish,
25527// distribute, sublicense, and/or sell copies of the Software, and to permit
25528// persons to whom the Software is furnished to do so, subject to the
25529// following conditions:
25530//
25531// The above copyright notice and this permission notice shall be included
25532// in all copies or substantial portions of the Software.
25533//
25534// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
25535// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25536// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
25537// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25538// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
25539// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
25540// USE OR OTHER DEALINGS IN THE SOFTWARE.
ebd8d4e8 25541
8b095871
IC
25542var formatRegExp = /%[sdj%]/g;
25543exports.format = function(f) {
25544 if (!isString(f)) {
25545 var objects = [];
25546 for (var i = 0; i < arguments.length; i++) {
25547 objects.push(inspect(arguments[i]));
25548 }
25549 return objects.join(' ');
25550 }
ebd8d4e8 25551
8b095871
IC
25552 var i = 1;
25553 var args = arguments;
25554 var len = args.length;
25555 var str = String(f).replace(formatRegExp, function(x) {
25556 if (x === '%%') return '%';
25557 if (i >= len) return x;
25558 switch (x) {
25559 case '%s': return String(args[i++]);
25560 case '%d': return Number(args[i++]);
25561 case '%j':
25562 try {
25563 return JSON.stringify(args[i++]);
25564 } catch (_) {
25565 return '[Circular]';
25566 }
25567 default:
25568 return x;
25569 }
25570 });
25571 for (var x = args[i]; i < len; x = args[++i]) {
25572 if (isNull(x) || !isObject(x)) {
25573 str += ' ' + x;
25574 } else {
25575 str += ' ' + inspect(x);
25576 }
25577 }
25578 return str;
25579};
ebd8d4e8 25580
ebd8d4e8 25581
8b095871
IC
25582// Mark that a method should not be used.
25583// Returns a modified function which warns once by default.
25584// If --no-deprecation is set, then it is a no-op.
25585exports.deprecate = function(fn, msg) {
25586 // Allow for deprecating things in the process of starting up.
25587 if (isUndefined(global.process)) {
25588 return function() {
25589 return exports.deprecate(fn, msg).apply(this, arguments);
25590 };
25591 }
25592
25593 if (process.noDeprecation === true) {
25594 return fn;
25595 }
25596
25597 var warned = false;
25598 function deprecated() {
25599 if (!warned) {
25600 if (process.throwDeprecation) {
25601 throw new Error(msg);
25602 } else if (process.traceDeprecation) {
25603 console.trace(msg);
25604 } else {
25605 console.error(msg);
25606 }
25607 warned = true;
25608 }
25609 return fn.apply(this, arguments);
25610 }
25611
25612 return deprecated;
25613};
ebd8d4e8 25614
ab78acc6 25615
8b095871
IC
25616var debugs = {};
25617var debugEnviron;
25618exports.debuglog = function(set) {
25619 if (isUndefined(debugEnviron))
25620 debugEnviron = process.env.NODE_DEBUG || '';
25621 set = set.toUpperCase();
25622 if (!debugs[set]) {
25623 if (new RegExp('\\b' + set + '\\b', 'i').test(debugEnviron)) {
25624 var pid = process.pid;
25625 debugs[set] = function() {
25626 var msg = exports.format.apply(exports, arguments);
25627 console.error('%s %d: %s', set, pid, msg);
25628 };
25629 } else {
25630 debugs[set] = function() {};
25631 }
25632 }
25633 return debugs[set];
25634};
ab78acc6
IC
25635
25636
8b095871
IC
25637/**
25638 * Echos the value of a value. Trys to print the value out
25639 * in the best way possible given the different types.
25640 *
25641 * @param {Object} obj The object to print out.
25642 * @param {Object} opts Optional options object that alters the output.
25643 */
25644/* legacy: obj, showHidden, depth, colors*/
25645function inspect(obj, opts) {
25646 // default options
25647 var ctx = {
25648 seen: [],
25649 stylize: stylizeNoColor
ab78acc6 25650 };
8b095871
IC
25651 // legacy...
25652 if (arguments.length >= 3) ctx.depth = arguments[2];
25653 if (arguments.length >= 4) ctx.colors = arguments[3];
25654 if (isBoolean(opts)) {
25655 // legacy...
25656 ctx.showHidden = opts;
25657 } else if (opts) {
25658 // got an "options" object
25659 exports._extend(ctx, opts);
25660 }
25661 // set default options
25662 if (isUndefined(ctx.showHidden)) ctx.showHidden = false;
25663 if (isUndefined(ctx.depth)) ctx.depth = 2;
25664 if (isUndefined(ctx.colors)) ctx.colors = false;
25665 if (isUndefined(ctx.customInspect)) ctx.customInspect = true;
25666 if (ctx.colors) ctx.stylize = stylizeWithColor;
25667 return formatValue(ctx, obj, ctx.depth);
ebd8d4e8 25668}
8b095871 25669exports.inspect = inspect;
ebd8d4e8 25670
ab78acc6 25671
8b095871
IC
25672// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
25673inspect.colors = {
25674 'bold' : [1, 22],
25675 'italic' : [3, 23],
25676 'underline' : [4, 24],
25677 'inverse' : [7, 27],
25678 'white' : [37, 39],
25679 'grey' : [90, 39],
25680 'black' : [30, 39],
25681 'blue' : [34, 39],
25682 'cyan' : [36, 39],
25683 'green' : [32, 39],
25684 'magenta' : [35, 39],
25685 'red' : [31, 39],
25686 'yellow' : [33, 39]
25687};
ab78acc6 25688
8b095871
IC
25689// Don't use 'blue' not visible on cmd.exe
25690inspect.styles = {
25691 'special': 'cyan',
25692 'number': 'yellow',
25693 'boolean': 'yellow',
25694 'undefined': 'grey',
25695 'null': 'bold',
25696 'string': 'green',
25697 'date': 'magenta',
25698 // "name": intentionally not styling
25699 'regexp': 'red'
25700};
ab78acc6 25701
ab78acc6 25702
8b095871
IC
25703function stylizeWithColor(str, styleType) {
25704 var style = inspect.styles[styleType];
ab78acc6 25705
8b095871
IC
25706 if (style) {
25707 return '\u001b[' + inspect.colors[style][0] + 'm' + str +
25708 '\u001b[' + inspect.colors[style][1] + 'm';
25709 } else {
25710 return str;
ab78acc6 25711 }
ebd8d4e8 25712}
ebd8d4e8 25713
ab78acc6 25714
8b095871
IC
25715function stylizeNoColor(str, styleType) {
25716 return str;
25717}
ab78acc6 25718
ab78acc6 25719
8b095871
IC
25720function arrayToHash(array) {
25721 var hash = {};
ab78acc6 25722
8b095871
IC
25723 array.forEach(function(val, idx) {
25724 hash[val] = true;
ab78acc6 25725 });
ebd8d4e8 25726
8b095871
IC
25727 return hash;
25728}
ab78acc6 25729
ab78acc6 25730
8b095871
IC
25731function formatValue(ctx, value, recurseTimes) {
25732 // Provide a hook for user-specified inspect functions.
25733 // Check that value is an object with an inspect function on it
25734 if (ctx.customInspect &&
25735 value &&
25736 isFunction(value.inspect) &&
25737 // Filter out the util module, it's inspect function is special
25738 value.inspect !== exports.inspect &&
25739 // Also filter out any prototype objects using the circular check.
25740 !(value.constructor && value.constructor.prototype === value)) {
25741 var ret = value.inspect(recurseTimes, ctx);
25742 if (!isString(ret)) {
25743 ret = formatValue(ctx, ret, recurseTimes);
25744 }
25745 return ret;
ab78acc6 25746 }
ebd8d4e8 25747
8b095871
IC
25748 // Primitive types cannot have properties
25749 var primitive = formatPrimitive(ctx, value);
25750 if (primitive) {
25751 return primitive;
ab78acc6 25752 }
ebd8d4e8 25753
8b095871
IC
25754 // Look up the keys of the object.
25755 var keys = Object.keys(value);
25756 var visibleKeys = arrayToHash(keys);
ebd8d4e8 25757
8b095871
IC
25758 if (ctx.showHidden) {
25759 keys = Object.getOwnPropertyNames(value);
25760 }
ebd8d4e8 25761
8b095871
IC
25762 // IE doesn't make error fields non-enumerable
25763 // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx
25764 if (isError(value)
25765 && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {
25766 return formatError(value);
25767 }
ebd8d4e8 25768
8b095871
IC
25769 // Some type of object without properties can be shortcutted.
25770 if (keys.length === 0) {
25771 if (isFunction(value)) {
25772 var name = value.name ? ': ' + value.name : '';
25773 return ctx.stylize('[Function' + name + ']', 'special');
25774 }
25775 if (isRegExp(value)) {
25776 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
25777 }
25778 if (isDate(value)) {
25779 return ctx.stylize(Date.prototype.toString.call(value), 'date');
25780 }
25781 if (isError(value)) {
25782 return formatError(value);
25783 }
25784 }
ab78acc6 25785
8b095871 25786 var base = '', array = false, braces = ['{', '}'];
ab78acc6 25787
8b095871
IC
25788 // Make Array say that they are Array
25789 if (isArray(value)) {
25790 array = true;
25791 braces = ['[', ']'];
25792 }
ebd8d4e8 25793
8b095871
IC
25794 // Make functions say that they are functions
25795 if (isFunction(value)) {
25796 var n = value.name ? ': ' + value.name : '';
25797 base = ' [Function' + n + ']';
25798 }
ebd8d4e8 25799
8b095871
IC
25800 // Make RegExps say that they are RegExps
25801 if (isRegExp(value)) {
25802 base = ' ' + RegExp.prototype.toString.call(value);
25803 }
ebd8d4e8 25804
8b095871
IC
25805 // Make dates with properties first say the date
25806 if (isDate(value)) {
25807 base = ' ' + Date.prototype.toUTCString.call(value);
25808 }
ebd8d4e8 25809
8b095871
IC
25810 // Make error with message first say the error
25811 if (isError(value)) {
25812 base = ' ' + formatError(value);
25813 }
ebd8d4e8 25814
8b095871
IC
25815 if (keys.length === 0 && (!array || value.length == 0)) {
25816 return braces[0] + base + braces[1];
25817 }
ebd8d4e8 25818
8b095871
IC
25819 if (recurseTimes < 0) {
25820 if (isRegExp(value)) {
25821 return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');
25822 } else {
25823 return ctx.stylize('[Object]', 'special');
25824 }
25825 }
ebd8d4e8 25826
8b095871 25827 ctx.seen.push(value);
ebd8d4e8 25828
8b095871
IC
25829 var output;
25830 if (array) {
25831 output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);
25832 } else {
25833 output = keys.map(function(key) {
25834 return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);
25835 });
25836 }
ebd8d4e8 25837
8b095871 25838 ctx.seen.pop();
ebd8d4e8 25839
8b095871 25840 return reduceToSingleString(output, base, braces);
ebd8d4e8
IC
25841}
25842
ebd8d4e8 25843
8b095871
IC
25844function formatPrimitive(ctx, value) {
25845 if (isUndefined(value))
25846 return ctx.stylize('undefined', 'undefined');
25847 if (isString(value)) {
25848 var simple = '\'' + JSON.stringify(value).replace(/^"|"$/g, '')
25849 .replace(/'/g, "\\'")
25850 .replace(/\\"/g, '"') + '\'';
25851 return ctx.stylize(simple, 'string');
25852 }
25853 if (isNumber(value))
25854 return ctx.stylize('' + value, 'number');
25855 if (isBoolean(value))
25856 return ctx.stylize('' + value, 'boolean');
25857 // For some reason typeof null is "object", so special case here.
25858 if (isNull(value))
25859 return ctx.stylize('null', 'null');
25860}
ebd8d4e8 25861
ebd8d4e8 25862
8b095871
IC
25863function formatError(value) {
25864 return '[' + Error.prototype.toString.call(value) + ']';
25865}
ebd8d4e8 25866
ebd8d4e8 25867
8b095871
IC
25868function formatArray(ctx, value, recurseTimes, visibleKeys, keys) {
25869 var output = [];
25870 for (var i = 0, l = value.length; i < l; ++i) {
25871 if (hasOwnProperty(value, String(i))) {
25872 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
25873 String(i), true));
25874 } else {
25875 output.push('');
25876 }
25877 }
25878 keys.forEach(function(key) {
25879 if (!key.match(/^\d+$/)) {
25880 output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,
25881 key, true));
25882 }
25883 });
25884 return output;
25885}
ebd8d4e8 25886
ebd8d4e8 25887
8b095871
IC
25888function formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {
25889 var name, str, desc;
25890 desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };
25891 if (desc.get) {
25892 if (desc.set) {
25893 str = ctx.stylize('[Getter/Setter]', 'special');
25894 } else {
25895 str = ctx.stylize('[Getter]', 'special');
25896 }
25897 } else {
25898 if (desc.set) {
25899 str = ctx.stylize('[Setter]', 'special');
25900 }
25901 }
25902 if (!hasOwnProperty(visibleKeys, key)) {
25903 name = '[' + key + ']';
25904 }
25905 if (!str) {
25906 if (ctx.seen.indexOf(desc.value) < 0) {
25907 if (isNull(recurseTimes)) {
25908 str = formatValue(ctx, desc.value, null);
25909 } else {
25910 str = formatValue(ctx, desc.value, recurseTimes - 1);
25911 }
25912 if (str.indexOf('\n') > -1) {
25913 if (array) {
25914 str = str.split('\n').map(function(line) {
25915 return ' ' + line;
25916 }).join('\n').substr(2);
25917 } else {
25918 str = '\n' + str.split('\n').map(function(line) {
25919 return ' ' + line;
25920 }).join('\n');
25921 }
25922 }
25923 } else {
25924 str = ctx.stylize('[Circular]', 'special');
25925 }
25926 }
25927 if (isUndefined(name)) {
25928 if (array && key.match(/^\d+$/)) {
25929 return str;
25930 }
25931 name = JSON.stringify('' + key);
25932 if (name.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)) {
25933 name = name.substr(1, name.length - 2);
25934 name = ctx.stylize(name, 'name');
25935 } else {
25936 name = name.replace(/'/g, "\\'")
25937 .replace(/\\"/g, '"')
25938 .replace(/(^"|"$)/g, "'");
25939 name = ctx.stylize(name, 'string');
25940 }
25941 }
ebd8d4e8 25942
8b095871
IC
25943 return name + ': ' + str;
25944}
ebd8d4e8 25945
ebd8d4e8 25946
8b095871
IC
25947function reduceToSingleString(output, base, braces) {
25948 var numLinesEst = 0;
25949 var length = output.reduce(function(prev, cur) {
25950 numLinesEst++;
25951 if (cur.indexOf('\n') >= 0) numLinesEst++;
25952 return prev + cur.replace(/\u001b\[\d\d?m/g, '').length + 1;
25953 }, 0);
ebd8d4e8 25954
8b095871
IC
25955 if (length > 60) {
25956 return braces[0] +
25957 (base === '' ? '' : base + '\n ') +
25958 ' ' +
25959 output.join(',\n ') +
25960 ' ' +
25961 braces[1];
25962 }
ebd8d4e8 25963
8b095871
IC
25964 return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];
25965}
ebd8d4e8 25966
ebd8d4e8 25967
8b095871
IC
25968// NOTE: These type checking functions intentionally don't use `instanceof`
25969// because it is fragile and can be easily faked with `Object.create()`.
25970function isArray(ar) {
25971 return Array.isArray(ar);
25972}
25973exports.isArray = isArray;
ebd8d4e8 25974
8b095871
IC
25975function isBoolean(arg) {
25976 return typeof arg === 'boolean';
25977}
25978exports.isBoolean = isBoolean;
ebd8d4e8 25979
8b095871
IC
25980function isNull(arg) {
25981 return arg === null;
25982}
25983exports.isNull = isNull;
ebd8d4e8 25984
8b095871
IC
25985function isNullOrUndefined(arg) {
25986 return arg == null;
ebd8d4e8 25987}
8b095871 25988exports.isNullOrUndefined = isNullOrUndefined;
ebd8d4e8 25989
8b095871
IC
25990function isNumber(arg) {
25991 return typeof arg === 'number';
25992}
25993exports.isNumber = isNumber;
ebd8d4e8 25994
8b095871
IC
25995function isString(arg) {
25996 return typeof arg === 'string';
25997}
25998exports.isString = isString;
ebd8d4e8 25999
8b095871
IC
26000function isSymbol(arg) {
26001 return typeof arg === 'symbol';
26002}
26003exports.isSymbol = isSymbol;
ebd8d4e8 26004
8b095871
IC
26005function isUndefined(arg) {
26006 return arg === void 0;
26007}
26008exports.isUndefined = isUndefined;
ebd8d4e8 26009
8b095871
IC
26010function isRegExp(re) {
26011 return isObject(re) && objectToString(re) === '[object RegExp]';
ebd8d4e8 26012}
8b095871 26013exports.isRegExp = isRegExp;
ebd8d4e8 26014
8b095871
IC
26015function isObject(arg) {
26016 return typeof arg === 'object' && arg !== null;
26017}
26018exports.isObject = isObject;
ebd8d4e8 26019
8b095871
IC
26020function isDate(d) {
26021 return isObject(d) && objectToString(d) === '[object Date]';
26022}
26023exports.isDate = isDate;
ebd8d4e8 26024
8b095871
IC
26025function isError(e) {
26026 return isObject(e) &&
26027 (objectToString(e) === '[object Error]' || e instanceof Error);
ebd8d4e8 26028}
8b095871 26029exports.isError = isError;
ebd8d4e8 26030
8b095871
IC
26031function isFunction(arg) {
26032 return typeof arg === 'function';
ebd8d4e8 26033}
8b095871 26034exports.isFunction = isFunction;
ebd8d4e8 26035
8b095871
IC
26036function isPrimitive(arg) {
26037 return arg === null ||
26038 typeof arg === 'boolean' ||
26039 typeof arg === 'number' ||
26040 typeof arg === 'string' ||
26041 typeof arg === 'symbol' || // ES6 symbol
26042 typeof arg === 'undefined';
26043}
26044exports.isPrimitive = isPrimitive;
ebd8d4e8 26045
8b095871 26046exports.isBuffer = require('./support/isBuffer');
ebd8d4e8 26047
8b095871
IC
26048function objectToString(o) {
26049 return Object.prototype.toString.call(o);
26050}
ab78acc6 26051
ab78acc6 26052
8b095871
IC
26053function pad(n) {
26054 return n < 10 ? '0' + n.toString(10) : n.toString(10);
26055}
ebd8d4e8 26056
ab78acc6 26057
8b095871
IC
26058var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',
26059 'Oct', 'Nov', 'Dec'];
ab78acc6 26060
8b095871
IC
26061// 26 Feb 16:19:34
26062function timestamp() {
26063 var d = new Date();
26064 var time = [pad(d.getHours()),
26065 pad(d.getMinutes()),
26066 pad(d.getSeconds())].join(':');
26067 return [d.getDate(), months[d.getMonth()], time].join(' ');
26068}
26069
26070
26071// log is just a thin wrapper to console.log that prepends a timestamp
26072exports.log = function() {
26073 console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));
ab78acc6 26074};
ebd8d4e8 26075
ebd8d4e8 26076
8b095871
IC
26077/**
26078 * Inherit the prototype methods from one constructor into another.
26079 *
26080 * The Function.prototype.inherits from lang.js rewritten as a standalone
26081 * function (not on Function.prototype). NOTE: If this file is to be loaded
26082 * during bootstrapping this function needs to be rewritten using some native
26083 * functions as prototype setup using normal JavaScript does not work as
26084 * expected during bootstrapping (see mirror.js in r114903).
26085 *
26086 * @param {function} ctor Constructor function which needs to inherit the
26087 * prototype.
26088 * @param {function} superCtor Constructor function to inherit prototype from.
26089 */
26090exports.inherits = require('inherits');
ebd8d4e8 26091
8b095871
IC
26092exports._extend = function(origin, add) {
26093 // Don't do anything if add isn't an object
26094 if (!add || !isObject(add)) return origin;
26095
26096 var keys = Object.keys(add);
26097 var i = keys.length;
26098 while (i--) {
26099 origin[keys[i]] = add[keys[i]];
ebd8d4e8 26100 }
8b095871 26101 return origin;
ab78acc6 26102};
ebd8d4e8 26103
8b095871
IC
26104function hasOwnProperty(obj, prop) {
26105 return Object.prototype.hasOwnProperty.call(obj, prop);
ebd8d4e8
IC
26106}
26107
8b095871
IC
26108}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
26109},{"./support/isBuffer":29,"_process":13,"inherits":28}],31:[function(require,module,exports){
26110(function (Buffer){
26111const createKeccakHash = require('keccak')
26112const secp256k1 = require('secp256k1')
26113const assert = require('assert')
26114const rlp = require('rlp')
26115const BN = require('bn.js')
26116const createHash = require('create-hash')
26117Object.assign(exports, require('ethjs-util'))
ab78acc6 26118
8b095871
IC
26119/**
26120 * the max integer that this VM can handle (a ```BN```)
26121 * @var {BN} MAX_INTEGER
26122 */
26123exports.MAX_INTEGER = new BN('ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff', 16)
ab78acc6 26124
8b095871
IC
26125/**
26126 * 2^256 (a ```BN```)
26127 * @var {BN} TWO_POW256
26128 */
26129exports.TWO_POW256 = new BN('10000000000000000000000000000000000000000000000000000000000000000', 16)
ab78acc6 26130
8b095871
IC
26131/**
26132 * SHA3-256 hash of null (a ```String```)
26133 * @var {String} SHA3_NULL_S
26134 */
26135exports.SHA3_NULL_S = 'c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470'
ebd8d4e8 26136
8b095871
IC
26137/**
26138 * SHA3-256 hash of null (a ```Buffer```)
26139 * @var {Buffer} SHA3_NULL
26140 */
26141exports.SHA3_NULL = Buffer.from(exports.SHA3_NULL_S, 'hex')
ebd8d4e8 26142
8b095871
IC
26143/**
26144 * SHA3-256 of an RLP of an empty array (a ```String```)
26145 * @var {String} SHA3_RLP_ARRAY_S
26146 */
26147exports.SHA3_RLP_ARRAY_S = '1dcc4de8dec75d7aab85b567b6ccd41ad312451b948a7413f0a142fd40d49347'
ebd8d4e8 26148
8b095871
IC
26149/**
26150 * SHA3-256 of an RLP of an empty array (a ```Buffer```)
26151 * @var {Buffer} SHA3_RLP_ARRAY
26152 */
26153exports.SHA3_RLP_ARRAY = Buffer.from(exports.SHA3_RLP_ARRAY_S, 'hex')
ebd8d4e8 26154
8b095871
IC
26155/**
26156 * SHA3-256 hash of the RLP of null (a ```String```)
26157 * @var {String} SHA3_RLP_S
26158 */
26159exports.SHA3_RLP_S = '56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b421'
ebd8d4e8 26160
8b095871
IC
26161/**
26162 * SHA3-256 hash of the RLP of null (a ```Buffer```)
26163 * @var {Buffer} SHA3_RLP
26164 */
26165exports.SHA3_RLP = Buffer.from(exports.SHA3_RLP_S, 'hex')
ebd8d4e8 26166
8b095871
IC
26167/**
26168 * [`BN`](https://github.com/indutny/bn.js)
26169 * @var {Function}
26170 */
26171exports.BN = BN
ebd8d4e8 26172
8b095871
IC
26173/**
26174 * [`rlp`](https://github.com/ethereumjs/rlp)
26175 * @var {Function}
26176 */
26177exports.rlp = rlp
ebd8d4e8 26178
8b095871
IC
26179/**
26180 * [`secp256k1`](https://github.com/cryptocoinjs/secp256k1-node/)
26181 * @var {Object}
26182 */
26183exports.secp256k1 = secp256k1
ab78acc6 26184
8b095871
IC
26185/**
26186 * Returns a buffer filled with 0s
26187 * @method zeros
26188 * @param {Number} bytes the number of bytes the buffer should be
26189 * @return {Buffer}
26190 */
26191exports.zeros = function (bytes) {
26192 return Buffer.allocUnsafe(bytes).fill(0)
26193}
26194
26195/**
26196 * Left Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
26197 * Or it truncates the beginning if it exceeds.
26198 * @method lsetLength
26199 * @param {Buffer|Array} msg the value to pad
26200 * @param {Number} length the number of bytes the output should be
26201 * @param {Boolean} [right=false] whether to start padding form the left or right
26202 * @return {Buffer|Array}
26203 */
26204exports.setLengthLeft = exports.setLength = function (msg, length, right) {
26205 var buf = exports.zeros(length)
26206 msg = exports.toBuffer(msg)
26207 if (right) {
26208 if (msg.length < length) {
26209 msg.copy(buf)
26210 return buf
26211 }
26212 return msg.slice(0, length)
26213 } else {
26214 if (msg.length < length) {
26215 msg.copy(buf, length - msg.length)
26216 return buf
ebd8d4e8 26217 }
8b095871 26218 return msg.slice(-length)
ebd8d4e8
IC
26219 }
26220}
26221
8b095871
IC
26222/**
26223 * Right Pads an `Array` or `Buffer` with leading zeros till it has `length` bytes.
26224 * Or it truncates the beginning if it exceeds.
26225 * @param {Buffer|Array} msg the value to pad
26226 * @param {Number} length the number of bytes the output should be
26227 * @return {Buffer|Array}
26228 */
26229exports.setLengthRight = function (msg, length) {
26230 return exports.setLength(msg, length, true)
ab78acc6
IC
26231}
26232
8b095871
IC
26233/**
26234 * Trims leading zeros from a `Buffer` or an `Array`
26235 * @param {Buffer|Array|String} a
26236 * @return {Buffer|Array|String}
26237 */
26238exports.unpad = exports.stripZeros = function (a) {
26239 a = exports.stripHexPrefix(a)
26240 var first = a[0]
26241 while (a.length > 0 && first.toString() === '0') {
26242 a = a.slice(1)
26243 first = a[0]
26244 }
26245 return a
26246}
26247/**
26248 * 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.
26249 * @param {*} v the value
26250 */
26251exports.toBuffer = function (v) {
26252 if (!Buffer.isBuffer(v)) {
26253 if (Array.isArray(v)) {
26254 v = Buffer.from(v)
26255 } else if (typeof v === 'string') {
26256 if (exports.isHexPrefixed(v)) {
26257 v = Buffer.from(exports.padToEven(exports.stripHexPrefix(v)), 'hex')
26258 } else {
26259 v = Buffer.from(v)
26260 }
26261 } else if (typeof v === 'number') {
26262 v = exports.intToBuffer(v)
26263 } else if (v === null || v === undefined) {
26264 v = Buffer.allocUnsafe(0)
26265 } else if (v.toArray) {
26266 // converts a BN to a Buffer
26267 v = Buffer.from(v.toArray())
26268 } else {
26269 throw new Error('invalid type')
26270 }
ebd8d4e8 26271 }
8b095871 26272 return v
ebd8d4e8
IC
26273}
26274
8b095871
IC
26275/**
26276 * Converts a `Buffer` to a `Number`
26277 * @param {Buffer} buf
26278 * @return {Number}
26279 * @throws If the input number exceeds 53 bits.
26280 */
26281exports.bufferToInt = function (buf) {
26282 return new BN(exports.toBuffer(buf)).toNumber()
26283}
ebd8d4e8 26284
8b095871
IC
26285/**
26286 * Converts a `Buffer` into a hex `String`
26287 * @param {Buffer} buf
26288 * @return {String}
26289 */
26290exports.bufferToHex = function (buf) {
26291 buf = exports.toBuffer(buf)
26292 return '0x' + buf.toString('hex')
26293}
ab78acc6 26294
8b095871
IC
26295/**
26296 * Interprets a `Buffer` as a signed integer and returns a `BN`. Assumes 256-bit numbers.
26297 * @param {Buffer} num
26298 * @return {BN}
26299 */
26300exports.fromSigned = function (num) {
26301 return new BN(num).fromTwos(256)
26302}
ab78acc6 26303
8b095871
IC
26304/**
26305 * Converts a `BN` to an unsigned integer and returns it as a `Buffer`. Assumes 256-bit numbers.
26306 * @param {BN} num
26307 * @return {Buffer}
26308 */
26309exports.toUnsigned = function (num) {
26310 return Buffer.from(num.toTwos(256).toArray())
26311}
ab78acc6 26312
8b095871
IC
26313/**
26314 * Creates SHA-3 hash of the input
26315 * @param {Buffer|Array|String|Number} a the input data
26316 * @param {Number} [bits=256] the SHA width
26317 * @return {Buffer}
26318 */
26319exports.sha3 = function (a, bits) {
26320 a = exports.toBuffer(a)
26321 if (!bits) bits = 256
ab78acc6 26322
8b095871
IC
26323 return createKeccakHash('keccak' + bits).update(a).digest()
26324}
ab78acc6 26325
8b095871
IC
26326/**
26327 * Creates SHA256 hash of the input
26328 * @param {Buffer|Array|String|Number} a the input data
26329 * @return {Buffer}
26330 */
26331exports.sha256 = function (a) {
26332 a = exports.toBuffer(a)
26333 return createHash('sha256').update(a).digest()
26334}
ab78acc6 26335
8b095871
IC
26336/**
26337 * Creates RIPEMD160 hash of the input
26338 * @param {Buffer|Array|String|Number} a the input data
26339 * @param {Boolean} padded whether it should be padded to 256 bits or not
26340 * @return {Buffer}
26341 */
26342exports.ripemd160 = function (a, padded) {
26343 a = exports.toBuffer(a)
26344 var hash = createHash('rmd160').update(a).digest()
26345 if (padded === true) {
26346 return exports.setLength(hash, 32)
26347 } else {
26348 return hash
ebd8d4e8 26349 }
8b095871 26350}
ebd8d4e8 26351
8b095871
IC
26352/**
26353 * Creates SHA-3 hash of the RLP encoded version of the input
26354 * @param {Buffer|Array|String|Number} a the input data
26355 * @return {Buffer}
26356 */
26357exports.rlphash = function (a) {
26358 return exports.sha3(rlp.encode(a))
ebd8d4e8
IC
26359}
26360
8b095871
IC
26361/**
26362 * Checks if the private key satisfies the rules of the curve secp256k1.
26363 * @param {Buffer} privateKey
26364 * @return {Boolean}
26365 */
26366exports.isValidPrivate = function (privateKey) {
26367 return secp256k1.privateKeyVerify(privateKey)
26368}
ebd8d4e8 26369
8b095871
IC
26370/**
26371 * Checks if the public key satisfies the rules of the curve secp256k1
26372 * and the requirements of Ethereum.
26373 * @param {Buffer} publicKey The two points of an uncompressed key, unless sanitize is enabled
26374 * @param {Boolean} [sanitize=false] Accept public keys in other formats
26375 * @return {Boolean}
26376 */
26377exports.isValidPublic = function (publicKey, sanitize) {
26378 if (publicKey.length === 64) {
26379 // Convert to SEC1 for secp256k1
26380 return secp256k1.publicKeyVerify(Buffer.concat([ Buffer.from([4]), publicKey ]))
26381 }
ebd8d4e8 26382
8b095871
IC
26383 if (!sanitize) {
26384 return false
26385 }
ebd8d4e8 26386
8b095871
IC
26387 return secp256k1.publicKeyVerify(publicKey)
26388}
ebd8d4e8 26389
8b095871
IC
26390/**
26391 * Returns the ethereum address of a given public key.
26392 * Accepts "Ethereum public keys" and SEC1 encoded keys.
26393 * @param {Buffer} pubKey The two points of an uncompressed key, unless sanitize is enabled
26394 * @param {Boolean} [sanitize=false] Accept public keys in other formats
26395 * @return {Buffer}
26396 */
26397exports.pubToAddress = exports.publicToAddress = function (pubKey, sanitize) {
26398 pubKey = exports.toBuffer(pubKey)
26399 if (sanitize && (pubKey.length !== 64)) {
26400 pubKey = secp256k1.publicKeyConvert(pubKey, false).slice(1)
ab78acc6 26401 }
8b095871
IC
26402 assert(pubKey.length === 64)
26403 // Only take the lower 160bits of the hash
26404 return exports.sha3(pubKey).slice(-20)
26405}
ebd8d4e8 26406
8b095871
IC
26407/**
26408 * Returns the ethereum public key of a given private key
26409 * @param {Buffer} privateKey A private key must be 256 bits wide
26410 * @return {Buffer}
26411 */
26412var privateToPublic = exports.privateToPublic = function (privateKey) {
26413 privateKey = exports.toBuffer(privateKey)
26414 // skip the type flag and use the X, Y points
26415 return secp256k1.publicKeyCreate(privateKey, false).slice(1)
26416}
ab78acc6 26417
8b095871
IC
26418/**
26419 * Converts a public key to the Ethereum format.
26420 * @param {Buffer} publicKey
26421 * @return {Buffer}
26422 */
26423exports.importPublic = function (publicKey) {
26424 publicKey = exports.toBuffer(publicKey)
26425 if (publicKey.length !== 64) {
26426 publicKey = secp256k1.publicKeyConvert(publicKey, false).slice(1)
ebd8d4e8 26427 }
8b095871
IC
26428 return publicKey
26429}
ab78acc6 26430
8b095871
IC
26431/**
26432 * ECDSA sign
26433 * @param {Buffer} msgHash
26434 * @param {Buffer} privateKey
26435 * @return {Object}
26436 */
26437exports.ecsign = function (msgHash, privateKey) {
26438 var sig = secp256k1.sign(msgHash, privateKey)
ab78acc6 26439
8b095871
IC
26440 var ret = {}
26441 ret.r = sig.signature.slice(0, 32)
26442 ret.s = sig.signature.slice(32, 64)
26443 ret.v = sig.recovery + 27
26444 return ret
ebd8d4e8
IC
26445}
26446
8b095871
IC
26447/**
26448 * Returns the keccak-256 hash of `message`, prefixed with the header used by the `eth_sign` RPC call.
26449 * The output of this function can be fed into `ecsign` to produce the same signature as the `eth_sign`
26450 * call for a given `message`, or fed to `ecrecover` along with a signature to recover the public key
26451 * used to produce the signature.
26452 * @param message
26453 * @returns {Buffer} hash
26454 */
26455exports.hashPersonalMessage = function (message) {
26456 var prefix = exports.toBuffer('\u0019Ethereum Signed Message:\n' + message.length.toString())
26457 return exports.sha3(Buffer.concat([prefix, message]))
ebd8d4e8
IC
26458}
26459
8b095871
IC
26460/**
26461 * ECDSA public key recovery from signature
26462 * @param {Buffer} msgHash
26463 * @param {Number} v
26464 * @param {Buffer} r
26465 * @param {Buffer} s
26466 * @return {Buffer} publicKey
26467 */
26468exports.ecrecover = function (msgHash, v, r, s) {
26469 var signature = Buffer.concat([exports.setLength(r, 32), exports.setLength(s, 32)], 64)
26470 var recovery = v - 27
26471 if (recovery !== 0 && recovery !== 1) {
26472 throw new Error('Invalid signature v value')
ab78acc6 26473 }
8b095871
IC
26474 var senderPubKey = secp256k1.recover(msgHash, signature, recovery)
26475 return secp256k1.publicKeyConvert(senderPubKey, false).slice(1)
ab78acc6 26476}
ebd8d4e8 26477
8b095871
IC
26478/**
26479 * Convert signature parameters into the format of `eth_sign` RPC method
26480 * @param {Number} v
26481 * @param {Buffer} r
26482 * @param {Buffer} s
26483 * @return {String} sig
26484 */
26485exports.toRpcSig = function (v, r, s) {
26486 // NOTE: with potential introduction of chainId this might need to be updated
26487 if (v !== 27 && v !== 28) {
26488 throw new Error('Invalid recovery id')
26489 }
26490
26491 // geth (and the RPC eth_sign method) uses the 65 byte format used by Bitcoin
26492 // FIXME: this might change in the future - https://github.com/ethereum/go-ethereum/issues/2053
26493 return exports.bufferToHex(Buffer.concat([
26494 exports.setLengthLeft(r, 32),
26495 exports.setLengthLeft(s, 32),
26496 exports.toBuffer(v - 27)
26497 ]))
ebd8d4e8
IC
26498}
26499
8b095871
IC
26500/**
26501 * Convert signature format of the `eth_sign` RPC method to signature parameters
26502 * NOTE: all because of a bug in geth: https://github.com/ethereum/go-ethereum/issues/2053
26503 * @param {String} sig
26504 * @return {Object}
26505 */
26506exports.fromRpcSig = function (sig) {
26507 sig = exports.toBuffer(sig)
ebd8d4e8 26508
8b095871
IC
26509 // NOTE: with potential introduction of chainId this might need to be updated
26510 if (sig.length !== 65) {
26511 throw new Error('Invalid signature length')
26512 }
26513
26514 var v = sig[64]
26515 // support both versions of `eth_sign` responses
26516 if (v < 27) {
26517 v += 27
26518 }
26519
26520 return {
26521 v: v,
26522 r: sig.slice(0, 32),
26523 s: sig.slice(32, 64)
26524 }
ebd8d4e8
IC
26525}
26526
8b095871
IC
26527/**
26528 * Returns the ethereum address of a given private key
26529 * @param {Buffer} privateKey A private key must be 256 bits wide
26530 * @return {Buffer}
26531 */
26532exports.privateToAddress = function (privateKey) {
26533 return exports.publicToAddress(privateToPublic(privateKey))
ab78acc6 26534}
ebd8d4e8 26535
8b095871
IC
26536/**
26537 * Checks if the address is a valid. Accepts checksummed addresses too
26538 * @param {String} address
26539 * @return {Boolean}
26540 */
26541exports.isValidAddress = function (address) {
26542 return /^0x[0-9a-fA-F]{40}$/i.test(address)
ab78acc6 26543}
ebd8d4e8 26544
8b095871
IC
26545/**
26546 * Returns a checksummed address
26547 * @param {String} address
26548 * @return {String}
26549 */
26550exports.toChecksumAddress = function (address) {
26551 address = exports.stripHexPrefix(address).toLowerCase()
26552 var hash = exports.sha3(address).toString('hex')
26553 var ret = '0x'
26554
26555 for (var i = 0; i < address.length; i++) {
26556 if (parseInt(hash[i], 16) >= 8) {
26557 ret += address[i].toUpperCase()
26558 } else {
26559 ret += address[i]
26560 }
26561 }
26562
26563 return ret
ebd8d4e8
IC
26564}
26565
8b095871
IC
26566/**
26567 * Checks if the address is a valid checksummed address
26568 * @param {Buffer} address
26569 * @return {Boolean}
26570 */
26571exports.isValidChecksumAddress = function (address) {
26572 return exports.isValidAddress(address) && (exports.toChecksumAddress(address) === address)
ab78acc6 26573}
ebd8d4e8 26574
8b095871
IC
26575/**
26576 * Generates an address of a newly created contract
26577 * @param {Buffer} from the address which is creating this new address
26578 * @param {Buffer} nonce the nonce of the from account
26579 * @return {Buffer}
26580 */
26581exports.generateAddress = function (from, nonce) {
26582 from = exports.toBuffer(from)
26583 nonce = new BN(nonce)
26584
26585 if (nonce.isZero()) {
26586 // in RLP we want to encode null in the case of zero nonce
26587 // read the RLP documentation for an answer if you dare
26588 nonce = null
26589 } else {
26590 nonce = Buffer.from(nonce.toArray())
26591 }
26592
26593 // Only take the lower 160bits of the hash
26594 return exports.rlphash([from, nonce]).slice(-20)
ab78acc6 26595}
ebd8d4e8 26596
8b095871
IC
26597/**
26598 * Returns true if the supplied address belongs to a precompiled account
26599 * @param {Buffer|String} address
26600 * @return {Boolean}
26601 */
26602exports.isPrecompiled = function (address) {
26603 var a = exports.unpad(address)
26604 return a.length === 1 && a[0] > 0 && a[0] < 5
ebd8d4e8
IC
26605}
26606
8b095871
IC
26607/**
26608 * Adds "0x" to a given `String` if it does not already start with "0x"
26609 * @param {String} str
26610 * @return {String}
26611 */
26612exports.addHexPrefix = function (str) {
26613 if (typeof str !== 'string') {
26614 return str
26615 }
26616
26617 return exports.isHexPrefixed(str) ? str : '0x' + str
ebd8d4e8
IC
26618}
26619
8b095871
IC
26620/**
26621 * Validate ECDSA signature
26622 * @method isValidSignature
26623 * @param {Buffer} v
26624 * @param {Buffer} r
26625 * @param {Buffer} s
26626 * @param {Boolean} [homestead=true]
26627 * @return {Boolean}
26628 */
26629
26630exports.isValidSignature = function (v, r, s, homestead) {
26631 const SECP256K1_N_DIV_2 = new BN('7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0', 16)
26632 const SECP256K1_N = new BN('fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141', 16)
26633
26634 if (r.length !== 32 || s.length !== 32) {
26635 return false
26636 }
26637
26638 if (v !== 27 && v !== 28) {
26639 return false
26640 }
26641
26642 r = new BN(r)
26643 s = new BN(s)
26644
26645 if (r.isZero() || r.gt(SECP256K1_N) || s.isZero() || s.gt(SECP256K1_N)) {
26646 return false
26647 }
26648
26649 if ((homestead === false) && (new BN(s).cmp(SECP256K1_N_DIV_2) === 1)) {
26650 return false
26651 }
26652
26653 return true
ebd8d4e8
IC
26654}
26655
8b095871
IC
26656/**
26657 * Converts a `Buffer` or `Array` to JSON
26658 * @param {Buffer|Array} ba
26659 * @return {Array|String|null}
26660 */
26661exports.baToJSON = function (ba) {
26662 if (Buffer.isBuffer(ba)) {
26663 return '0x' + ba.toString('hex')
26664 } else if (ba instanceof Array) {
26665 var array = []
26666 for (var i = 0; i < ba.length; i++) {
26667 array.push(exports.baToJSON(ba[i]))
26668 }
26669 return array
26670 }
ab78acc6 26671}
ebd8d4e8 26672
8b095871
IC
26673/**
26674 * Defines properties on a `Object`. It make the assumption that underlying data is binary.
26675 * @param {Object} self the `Object` to define properties on
26676 * @param {Array} fields an array fields to define. Fields can contain:
26677 * * `name` - the name of the properties
26678 * * `length` - the number of bytes the field can have
26679 * * `allowLess` - if the field can be less than the length
26680 * * `allowEmpty`
26681 * @param {*} data data to be validated against the definitions
26682 */
26683exports.defineProperties = function (self, fields, data) {
26684 self.raw = []
26685 self._fields = []
26686
26687 // attach the `toJSON`
26688 self.toJSON = function (label) {
26689 if (label) {
26690 var obj = {}
26691 self._fields.forEach(function (field) {
26692 obj[field] = '0x' + self[field].toString('hex')
26693 })
26694 return obj
26695 }
26696 return exports.baToJSON(this.raw)
26697 }
26698
26699 self.serialize = function serialize () {
26700 return rlp.encode(self.raw)
26701 }
26702
26703 fields.forEach(function (field, i) {
26704 self._fields.push(field.name)
26705 function getter () {
26706 return self.raw[i]
26707 }
26708 function setter (v) {
26709 v = exports.toBuffer(v)
26710
26711 if (v.toString('hex') === '00' && !field.allowZero) {
26712 v = Buffer.allocUnsafe(0)
26713 }
26714
26715 if (field.allowLess && field.length) {
26716 v = exports.stripZeros(v)
26717 assert(field.length >= v.length, 'The field ' + field.name + ' must not have more ' + field.length + ' bytes')
26718 } else if (!(field.allowZero && v.length === 0) && field.length) {
26719 assert(field.length === v.length, 'The field ' + field.name + ' must have byte length of ' + field.length)
26720 }
26721
26722 self.raw[i] = v
26723 }
26724
26725 Object.defineProperty(self, field.name, {
26726 enumerable: true,
26727 configurable: true,
26728 get: getter,
26729 set: setter
26730 })
26731
26732 if (field.default) {
26733 self[field.name] = field.default
26734 }
26735
26736 // attach alias
26737 if (field.alias) {
26738 Object.defineProperty(self, field.alias, {
26739 enumerable: false,
26740 configurable: true,
26741 set: setter,
26742 get: getter
26743 })
26744 }
26745 })
26746
26747 // if the constuctor is passed data
26748 if (data) {
26749 if (typeof data === 'string') {
26750 data = Buffer.from(exports.stripHexPrefix(data), 'hex')
26751 }
26752
26753 if (Buffer.isBuffer(data)) {
26754 data = rlp.decode(data)
26755 }
26756
26757 if (Array.isArray(data)) {
26758 if (data.length > self._fields.length) {
26759 throw (new Error('wrong number of fields in data'))
26760 }
26761
26762 // make sure all the items are buffers
26763 data.forEach(function (d, i) {
26764 self[self._fields[i]] = exports.toBuffer(d)
26765 })
26766 } else if (typeof data === 'object') {
26767 const keys = Object.keys(data)
26768 fields.forEach(function (field) {
26769 if (keys.indexOf(field.name) !== -1) self[field.name] = data[field.name]
26770 if (keys.indexOf(field.alias) !== -1) self[field.alias] = data[field.alias]
26771 })
26772 } else {
26773 throw new Error('invalid data')
26774 }
26775 }
ab78acc6 26776}
ebd8d4e8 26777
8b095871
IC
26778}).call(this,require("buffer").Buffer)
26779},{"assert":1,"bn.js":33,"buffer":5,"create-hash":36,"ethjs-util":56,"keccak":65,"rlp":72,"secp256k1":73}],32:[function(require,module,exports){
26780(function (Buffer){
26781// Reference https://github.com/bitcoin/bips/blob/master/bip-0066.mediawiki
26782// Format: 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
26783// NOTE: SIGHASH byte ignored AND restricted, truncate before use
26784
26785function check (buffer) {
26786 if (buffer.length < 8) return false
26787 if (buffer.length > 72) return false
26788 if (buffer[0] !== 0x30) return false
26789 if (buffer[1] !== buffer.length - 2) return false
26790 if (buffer[2] !== 0x02) return false
26791
26792 var lenR = buffer[3]
26793 if (lenR === 0) return false
26794 if (5 + lenR >= buffer.length) return false
26795 if (buffer[4 + lenR] !== 0x02) return false
26796
26797 var lenS = buffer[5 + lenR]
26798 if (lenS === 0) return false
26799 if ((6 + lenR + lenS) !== buffer.length) return false
26800
26801 if (buffer[4] & 0x80) return false
26802 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) return false
26803
26804 if (buffer[lenR + 6] & 0x80) return false
26805 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) return false
26806 return true
ab78acc6 26807}
ab78acc6 26808
8b095871
IC
26809function decode (buffer) {
26810 if (buffer.length < 8) throw new Error('DER sequence length is too short')
26811 if (buffer.length > 72) throw new Error('DER sequence length is too long')
26812 if (buffer[0] !== 0x30) throw new Error('Expected DER sequence')
26813 if (buffer[1] !== buffer.length - 2) throw new Error('DER sequence length is invalid')
26814 if (buffer[2] !== 0x02) throw new Error('Expected DER integer')
26815
26816 var lenR = buffer[3]
26817 if (lenR === 0) throw new Error('R length is zero')
26818 if (5 + lenR >= buffer.length) throw new Error('R length is too long')
26819 if (buffer[4 + lenR] !== 0x02) throw new Error('Expected DER integer (2)')
26820
26821 var lenS = buffer[5 + lenR]
26822 if (lenS === 0) throw new Error('S length is zero')
26823 if ((6 + lenR + lenS) !== buffer.length) throw new Error('S length is invalid')
26824
26825 if (buffer[4] & 0x80) throw new Error('R value is negative')
26826 if (lenR > 1 && (buffer[4] === 0x00) && !(buffer[5] & 0x80)) throw new Error('R value excessively padded')
26827
26828 if (buffer[lenR + 6] & 0x80) throw new Error('S value is negative')
26829 if (lenS > 1 && (buffer[lenR + 6] === 0x00) && !(buffer[lenR + 7] & 0x80)) throw new Error('S value excessively padded')
26830
26831 // non-BIP66 - extract R, S values
26832 return {
26833 r: buffer.slice(4, 4 + lenR),
26834 s: buffer.slice(6 + lenR)
26835 }
ebd8d4e8
IC
26836}
26837
8b095871
IC
26838/*
26839 * Expects r and s to be positive DER integers.
26840 *
26841 * The DER format uses the most significant bit as a sign bit (& 0x80).
26842 * If the significant bit is set AND the integer is positive, a 0x00 is prepended.
26843 *
26844 * Examples:
26845 *
26846 * 0 => 0x00
26847 * 1 => 0x01
26848 * -1 => 0xff
26849 * 127 => 0x7f
26850 * -127 => 0x81
26851 * 128 => 0x0080
26852 * -128 => 0x80
26853 * 255 => 0x00ff
26854 * -255 => 0xff01
26855 * 16300 => 0x3fac
26856 * -16300 => 0xc054
26857 * 62300 => 0x00f35c
26858 * -62300 => 0xff0ca4
26859*/
26860function encode (r, s) {
26861 var lenR = r.length
26862 var lenS = s.length
26863 if (lenR === 0) throw new Error('R length is zero')
26864 if (lenS === 0) throw new Error('S length is zero')
26865 if (lenR > 33) throw new Error('R length is too long')
26866 if (lenS > 33) throw new Error('S length is too long')
26867 if (r[0] & 0x80) throw new Error('R value is negative')
26868 if (s[0] & 0x80) throw new Error('S value is negative')
26869 if (lenR > 1 && (r[0] === 0x00) && !(r[1] & 0x80)) throw new Error('R value excessively padded')
26870 if (lenS > 1 && (s[0] === 0x00) && !(s[1] & 0x80)) throw new Error('S value excessively padded')
26871
26872 var signature = new Buffer(6 + lenR + lenS)
26873
26874 // 0x30 [total-length] 0x02 [R-length] [R] 0x02 [S-length] [S]
26875 signature[0] = 0x30
26876 signature[1] = signature.length - 2
26877 signature[2] = 0x02
26878 signature[3] = r.length
26879 r.copy(signature, 4)
26880 signature[4 + lenR] = 0x02
26881 signature[5 + lenR] = s.length
26882 s.copy(signature, 6 + lenR)
26883
26884 return signature
ebd8d4e8
IC
26885}
26886
8b095871
IC
26887module.exports = {
26888 check: check,
26889 decode: decode,
26890 encode: encode
ebd8d4e8 26891}
8b095871 26892
ab78acc6 26893}).call(this,require("buffer").Buffer)
8b095871
IC
26894},{"buffer":5}],33:[function(require,module,exports){
26895(function (module, exports) {
26896 'use strict';
ebd8d4e8 26897
8b095871
IC
26898 // Utils
26899 function assert (val, msg) {
26900 if (!val) throw new Error(msg || 'Assertion failed');
26901 }
ebd8d4e8 26902
8b095871
IC
26903 // Could use `inherits` module, but don't want to move from single file
26904 // architecture yet.
26905 function inherits (ctor, superCtor) {
26906 ctor.super_ = superCtor;
26907 var TempCtor = function () {};
26908 TempCtor.prototype = superCtor.prototype;
26909 ctor.prototype = new TempCtor();
26910 ctor.prototype.constructor = ctor;
26911 }
ebd8d4e8 26912
8b095871 26913 // BN
ab78acc6 26914
8b095871
IC
26915 function BN (number, base, endian) {
26916 if (BN.isBN(number)) {
26917 return number;
26918 }
ab78acc6 26919
8b095871
IC
26920 this.negative = 0;
26921 this.words = null;
26922 this.length = 0;
ab78acc6 26923
8b095871
IC
26924 // Reduction context
26925 this.red = null;
ab78acc6 26926
8b095871
IC
26927 if (number !== null) {
26928 if (base === 'le' || base === 'be') {
26929 endian = base;
26930 base = 10;
26931 }
ab78acc6 26932
8b095871
IC
26933 this._init(number || 0, base || 10, endian || 'be');
26934 }
26935 }
26936 if (typeof module === 'object') {
26937 module.exports = BN;
26938 } else {
26939 exports.BN = BN;
26940 }
ab78acc6 26941
8b095871
IC
26942 BN.BN = BN;
26943 BN.wordSize = 26;
ab78acc6 26944
8b095871
IC
26945 var Buffer;
26946 try {
26947 Buffer = require('buf' + 'fer').Buffer;
26948 } catch (e) {
26949 }
ab78acc6 26950
8b095871
IC
26951 BN.isBN = function isBN (num) {
26952 if (num instanceof BN) {
26953 return true;
26954 }
ab78acc6 26955
8b095871
IC
26956 return num !== null && typeof num === 'object' &&
26957 num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);
26958 };
ebd8d4e8 26959
8b095871
IC
26960 BN.max = function max (left, right) {
26961 if (left.cmp(right) > 0) return left;
26962 return right;
26963 };
ebd8d4e8 26964
8b095871
IC
26965 BN.min = function min (left, right) {
26966 if (left.cmp(right) < 0) return left;
26967 return right;
26968 };
26969
26970 BN.prototype._init = function init (number, base, endian) {
26971 if (typeof number === 'number') {
26972 return this._initNumber(number, base, endian);
ab78acc6 26973 }
ebd8d4e8 26974
8b095871
IC
26975 if (typeof number === 'object') {
26976 return this._initArray(number, base, endian);
26977 }
ebd8d4e8 26978
8b095871
IC
26979 if (base === 'hex') {
26980 base = 16;
26981 }
26982 assert(base === (base | 0) && base >= 2 && base <= 36);
26983
26984 number = number.toString().replace(/\s+/g, '');
26985 var start = 0;
26986 if (number[0] === '-') {
26987 start++;
26988 }
26989
26990 if (base === 16) {
26991 this._parseHex(number, start);
26992 } else {
26993 this._parseBase(number, base, start);
ab78acc6 26994 }
ebd8d4e8 26995
8b095871
IC
26996 if (number[0] === '-') {
26997 this.negative = 1;
26998 }
ebd8d4e8 26999
8b095871 27000 this.strip();
ebd8d4e8 27001
8b095871 27002 if (endian !== 'le') return;
ebd8d4e8 27003
8b095871
IC
27004 this._initArray(this.toArray(), base, endian);
27005 };
ebd8d4e8 27006
8b095871
IC
27007 BN.prototype._initNumber = function _initNumber (number, base, endian) {
27008 if (number < 0) {
27009 this.negative = 1;
27010 number = -number;
27011 }
27012 if (number < 0x4000000) {
27013 this.words = [ number & 0x3ffffff ];
27014 this.length = 1;
27015 } else if (number < 0x10000000000000) {
27016 this.words = [
27017 number & 0x3ffffff,
27018 (number / 0x4000000) & 0x3ffffff
27019 ];
27020 this.length = 2;
27021 } else {
27022 assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)
27023 this.words = [
27024 number & 0x3ffffff,
27025 (number / 0x4000000) & 0x3ffffff,
27026 1
27027 ];
27028 this.length = 3;
27029 }
ebd8d4e8 27030
8b095871 27031 if (endian !== 'le') return;
ebd8d4e8 27032
8b095871
IC
27033 // Reverse the bytes
27034 this._initArray(this.toArray(), base, endian);
27035 };
ebd8d4e8 27036
8b095871
IC
27037 BN.prototype._initArray = function _initArray (number, base, endian) {
27038 // Perhaps a Uint8Array
27039 assert(typeof number.length === 'number');
27040 if (number.length <= 0) {
27041 this.words = [ 0 ];
27042 this.length = 1;
27043 return this;
ab78acc6 27044 }
ebd8d4e8 27045
8b095871
IC
27046 this.length = Math.ceil(number.length / 3);
27047 this.words = new Array(this.length);
27048 for (var i = 0; i < this.length; i++) {
27049 this.words[i] = 0;
27050 }
ebd8d4e8 27051
8b095871
IC
27052 var j, w;
27053 var off = 0;
27054 if (endian === 'be') {
27055 for (i = number.length - 1, j = 0; i >= 0; i -= 3) {
27056 w = number[i] | (number[i - 1] << 8) | (number[i - 2] << 16);
27057 this.words[j] |= (w << off) & 0x3ffffff;
27058 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
27059 off += 24;
27060 if (off >= 26) {
27061 off -= 26;
27062 j++;
27063 }
27064 }
27065 } else if (endian === 'le') {
27066 for (i = 0, j = 0; i < number.length; i += 3) {
27067 w = number[i] | (number[i + 1] << 8) | (number[i + 2] << 16);
27068 this.words[j] |= (w << off) & 0x3ffffff;
27069 this.words[j + 1] = (w >>> (26 - off)) & 0x3ffffff;
27070 off += 24;
27071 if (off >= 26) {
27072 off -= 26;
27073 j++;
27074 }
27075 }
27076 }
27077 return this.strip();
27078 };
ebd8d4e8 27079
8b095871
IC
27080 function parseHex (str, start, end) {
27081 var r = 0;
27082 var len = Math.min(str.length, end);
27083 for (var i = start; i < len; i++) {
27084 var c = str.charCodeAt(i) - 48;
ab78acc6 27085
8b095871 27086 r <<= 4;
ab78acc6 27087
8b095871
IC
27088 // 'a' - 'f'
27089 if (c >= 49 && c <= 54) {
27090 r |= c - 49 + 0xa;
ab78acc6 27091
8b095871
IC
27092 // 'A' - 'F'
27093 } else if (c >= 17 && c <= 22) {
27094 r |= c - 17 + 0xa;
ebd8d4e8 27095
8b095871
IC
27096 // '0' - '9'
27097 } else {
27098 r |= c & 0xf;
27099 }
27100 }
27101 return r;
27102 }
27103
27104 BN.prototype._parseHex = function _parseHex (number, start) {
27105 // Create possibly bigger array to ensure that it fits the number
27106 this.length = Math.ceil((number.length - start) / 6);
27107 this.words = new Array(this.length);
27108 for (var i = 0; i < this.length; i++) {
27109 this.words[i] = 0;
27110 }
27111
27112 var j, w;
27113 // Scan 24-bit chunks and add them to the number
27114 var off = 0;
27115 for (i = number.length - 6, j = 0; i >= start; i -= 6) {
27116 w = parseHex(number, i, i + 6);
27117 this.words[j] |= (w << off) & 0x3ffffff;
27118 // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb
27119 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
27120 off += 24;
27121 if (off >= 26) {
27122 off -= 26;
27123 j++;
27124 }
27125 }
27126 if (i + 6 !== start) {
27127 w = parseHex(number, start, i + 6);
27128 this.words[j] |= (w << off) & 0x3ffffff;
27129 this.words[j + 1] |= w >>> (26 - off) & 0x3fffff;
27130 }
27131 this.strip();
27132 };
ebd8d4e8 27133
8b095871
IC
27134 function parseBase (str, start, end, mul) {
27135 var r = 0;
27136 var len = Math.min(str.length, end);
27137 for (var i = start; i < len; i++) {
27138 var c = str.charCodeAt(i) - 48;
ebd8d4e8 27139
8b095871 27140 r *= mul;
ebd8d4e8 27141
8b095871
IC
27142 // 'a'
27143 if (c >= 49) {
27144 r += c - 49 + 0xa;
ebd8d4e8 27145
8b095871
IC
27146 // 'A'
27147 } else if (c >= 17) {
27148 r += c - 17 + 0xa;
ebd8d4e8 27149
8b095871
IC
27150 // '0' - '9'
27151 } else {
27152 r += c;
27153 }
27154 }
27155 return r;
27156 }
ebd8d4e8 27157
8b095871
IC
27158 BN.prototype._parseBase = function _parseBase (number, base, start) {
27159 // Initialize as zero
27160 this.words = [ 0 ];
27161 this.length = 1;
ebd8d4e8 27162
8b095871
IC
27163 // Find length of limb in base
27164 for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {
27165 limbLen++;
27166 }
27167 limbLen--;
27168 limbPow = (limbPow / base) | 0;
ebd8d4e8 27169
8b095871
IC
27170 var total = number.length - start;
27171 var mod = total % limbLen;
27172 var end = Math.min(total, total - mod) + start;
ebd8d4e8 27173
8b095871
IC
27174 var word = 0;
27175 for (var i = start; i < end; i += limbLen) {
27176 word = parseBase(number, i, i + limbLen, base);
ebd8d4e8 27177
8b095871
IC
27178 this.imuln(limbPow);
27179 if (this.words[0] + word < 0x4000000) {
27180 this.words[0] += word;
27181 } else {
27182 this._iaddn(word);
27183 }
27184 }
ebd8d4e8 27185
8b095871
IC
27186 if (mod !== 0) {
27187 var pow = 1;
27188 word = parseBase(number, i, number.length, base);
ebd8d4e8 27189
8b095871
IC
27190 for (i = 0; i < mod; i++) {
27191 pow *= base;
27192 }
ab78acc6 27193
8b095871
IC
27194 this.imuln(pow);
27195 if (this.words[0] + word < 0x4000000) {
27196 this.words[0] += word;
27197 } else {
27198 this._iaddn(word);
27199 }
27200 }
27201 };
ab78acc6 27202
8b095871
IC
27203 BN.prototype.copy = function copy (dest) {
27204 dest.words = new Array(this.length);
27205 for (var i = 0; i < this.length; i++) {
27206 dest.words[i] = this.words[i];
ab78acc6 27207 }
8b095871
IC
27208 dest.length = this.length;
27209 dest.negative = this.negative;
27210 dest.red = this.red;
27211 };
ab78acc6 27212
8b095871
IC
27213 BN.prototype.clone = function clone () {
27214 var r = new BN(null);
27215 this.copy(r);
27216 return r;
27217 };
ab78acc6 27218
8b095871
IC
27219 BN.prototype._expand = function _expand (size) {
27220 while (this.length < size) {
27221 this.words[this.length++] = 0;
27222 }
27223 return this;
27224 };
ab78acc6 27225
8b095871
IC
27226 // Remove leading `0` from `this`
27227 BN.prototype.strip = function strip () {
27228 while (this.length > 1 && this.words[this.length - 1] === 0) {
27229 this.length--;
ab78acc6 27230 }
8b095871
IC
27231 return this._normSign();
27232 };
ebd8d4e8 27233
8b095871
IC
27234 BN.prototype._normSign = function _normSign () {
27235 // -0 = 0
27236 if (this.length === 1 && this.words[0] === 0) {
27237 this.negative = 0;
ab78acc6 27238 }
8b095871
IC
27239 return this;
27240 };
ebd8d4e8 27241
8b095871
IC
27242 BN.prototype.inspect = function inspect () {
27243 return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';
27244 };
ebd8d4e8 27245
8b095871 27246 /*
ebd8d4e8 27247
8b095871
IC
27248 var zeros = [];
27249 var groupSizes = [];
27250 var groupBases = [];
ebd8d4e8 27251
8b095871
IC
27252 var s = '';
27253 var i = -1;
27254 while (++i < BN.wordSize) {
27255 zeros[i] = s;
27256 s += '0';
27257 }
27258 groupSizes[0] = 0;
27259 groupSizes[1] = 0;
27260 groupBases[0] = 0;
27261 groupBases[1] = 0;
27262 var base = 2 - 1;
27263 while (++base < 36 + 1) {
27264 var groupSize = 0;
27265 var groupBase = 1;
27266 while (groupBase < (1 << BN.wordSize) / base) {
27267 groupBase *= base;
27268 groupSize += 1;
27269 }
27270 groupSizes[base] = groupSize;
27271 groupBases[base] = groupBase;
ebd8d4e8
IC
27272 }
27273
8b095871 27274 */
ebd8d4e8 27275
8b095871
IC
27276 var zeros = [
27277 '',
27278 '0',
27279 '00',
27280 '000',
27281 '0000',
27282 '00000',
27283 '000000',
27284 '0000000',
27285 '00000000',
27286 '000000000',
27287 '0000000000',
27288 '00000000000',
27289 '000000000000',
27290 '0000000000000',
27291 '00000000000000',
27292 '000000000000000',
27293 '0000000000000000',
27294 '00000000000000000',
27295 '000000000000000000',
27296 '0000000000000000000',
27297 '00000000000000000000',
27298 '000000000000000000000',
27299 '0000000000000000000000',
27300 '00000000000000000000000',
27301 '000000000000000000000000',
27302 '0000000000000000000000000'
27303 ];
27304
27305 var groupSizes = [
27306 0, 0,
27307 25, 16, 12, 11, 10, 9, 8,
27308 8, 7, 7, 7, 7, 6, 6,
27309 6, 6, 6, 6, 6, 5, 5,
27310 5, 5, 5, 5, 5, 5, 5,
27311 5, 5, 5, 5, 5, 5, 5
27312 ];
27313
27314 var groupBases = [
27315 0, 0,
27316 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216,
27317 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625,
27318 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632,
27319 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149,
27320 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176
27321 ];
27322
27323 BN.prototype.toString = function toString (base, padding) {
27324 base = base || 10;
27325 padding = padding | 0 || 1;
27326
27327 var out;
27328 if (base === 16 || base === 'hex') {
27329 out = '';
27330 var off = 0;
27331 var carry = 0;
27332 for (var i = 0; i < this.length; i++) {
27333 var w = this.words[i];
27334 var word = (((w << off) | carry) & 0xffffff).toString(16);
27335 carry = (w >>> (24 - off)) & 0xffffff;
27336 if (carry !== 0 || i !== this.length - 1) {
27337 out = zeros[6 - word.length] + word + out;
27338 } else {
27339 out = word + out;
27340 }
27341 off += 2;
27342 if (off >= 26) {
27343 off -= 26;
27344 i--;
27345 }
27346 }
27347 if (carry !== 0) {
27348 out = carry.toString(16) + out;
27349 }
27350 while (out.length % padding !== 0) {
27351 out = '0' + out;
27352 }
27353 if (this.negative !== 0) {
27354 out = '-' + out;
27355 }
27356 return out;
27357 }
27358
27359 if (base === (base | 0) && base >= 2 && base <= 36) {
27360 // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));
27361 var groupSize = groupSizes[base];
27362 // var groupBase = Math.pow(base, groupSize);
27363 var groupBase = groupBases[base];
27364 out = '';
27365 var c = this.clone();
27366 c.negative = 0;
27367 while (!c.isZero()) {
27368 var r = c.modn(groupBase).toString(base);
27369 c = c.idivn(groupBase);
27370
27371 if (!c.isZero()) {
27372 out = zeros[groupSize - r.length] + r + out;
27373 } else {
27374 out = r + out;
27375 }
27376 }
27377 if (this.isZero()) {
27378 out = '0' + out;
27379 }
27380 while (out.length % padding !== 0) {
27381 out = '0' + out;
27382 }
27383 if (this.negative !== 0) {
27384 out = '-' + out;
27385 }
27386 return out;
27387 }
27388
27389 assert(false, 'Base should be between 2 and 36');
27390 };
27391
27392 BN.prototype.toNumber = function toNumber () {
27393 var ret = this.words[0];
27394 if (this.length === 2) {
27395 ret += this.words[1] * 0x4000000;
27396 } else if (this.length === 3 && this.words[2] === 0x01) {
27397 // NOTE: at this stage it is known that the top bit is set
27398 ret += 0x10000000000000 + (this.words[1] * 0x4000000);
27399 } else if (this.length > 2) {
27400 assert(false, 'Number can only safely store up to 53 bits');
27401 }
27402 return (this.negative !== 0) ? -ret : ret;
27403 };
27404
27405 BN.prototype.toJSON = function toJSON () {
27406 return this.toString(16);
27407 };
27408
27409 BN.prototype.toBuffer = function toBuffer (endian, length) {
27410 assert(typeof Buffer !== 'undefined');
27411 return this.toArrayLike(Buffer, endian, length);
27412 };
ebd8d4e8 27413
8b095871
IC
27414 BN.prototype.toArray = function toArray (endian, length) {
27415 return this.toArrayLike(Array, endian, length);
27416 };
ebd8d4e8 27417
8b095871
IC
27418 BN.prototype.toArrayLike = function toArrayLike (ArrayType, endian, length) {
27419 var byteLength = this.byteLength();
27420 var reqLength = length || Math.max(1, byteLength);
27421 assert(byteLength <= reqLength, 'byte array longer than desired length');
27422 assert(reqLength > 0, 'Requested array length <= 0');
27423
27424 this.strip();
27425 var littleEndian = endian === 'le';
27426 var res = new ArrayType(reqLength);
27427
27428 var b, i;
27429 var q = this.clone();
27430 if (!littleEndian) {
27431 // Assume big-endian
27432 for (i = 0; i < reqLength - byteLength; i++) {
27433 res[i] = 0;
27434 }
ebd8d4e8 27435
8b095871
IC
27436 for (i = 0; !q.isZero(); i++) {
27437 b = q.andln(0xff);
27438 q.iushrn(8);
ebd8d4e8 27439
8b095871
IC
27440 res[reqLength - i - 1] = b;
27441 }
27442 } else {
27443 for (i = 0; !q.isZero(); i++) {
27444 b = q.andln(0xff);
27445 q.iushrn(8);
ebd8d4e8 27446
8b095871
IC
27447 res[i] = b;
27448 }
27449
27450 for (; i < reqLength; i++) {
27451 res[i] = 0;
27452 }
ab78acc6 27453 }
ebd8d4e8 27454
8b095871
IC
27455 return res;
27456 };
ebd8d4e8 27457
8b095871
IC
27458 if (Math.clz32) {
27459 BN.prototype._countBits = function _countBits (w) {
27460 return 32 - Math.clz32(w);
27461 };
27462 } else {
27463 BN.prototype._countBits = function _countBits (w) {
27464 var t = w;
27465 var r = 0;
27466 if (t >= 0x1000) {
27467 r += 13;
27468 t >>>= 13;
27469 }
27470 if (t >= 0x40) {
27471 r += 7;
27472 t >>>= 7;
27473 }
27474 if (t >= 0x8) {
27475 r += 4;
27476 t >>>= 4;
27477 }
27478 if (t >= 0x02) {
27479 r += 2;
27480 t >>>= 2;
27481 }
27482 return r + t;
27483 };
ebd8d4e8
IC
27484 }
27485
8b095871
IC
27486 BN.prototype._zeroBits = function _zeroBits (w) {
27487 // Short-cut
27488 if (w === 0) return 26;
ebd8d4e8 27489
8b095871
IC
27490 var t = w;
27491 var r = 0;
27492 if ((t & 0x1fff) === 0) {
27493 r += 13;
27494 t >>>= 13;
27495 }
27496 if ((t & 0x7f) === 0) {
27497 r += 7;
27498 t >>>= 7;
27499 }
27500 if ((t & 0xf) === 0) {
27501 r += 4;
27502 t >>>= 4;
27503 }
27504 if ((t & 0x3) === 0) {
27505 r += 2;
27506 t >>>= 2;
27507 }
27508 if ((t & 0x1) === 0) {
27509 r++;
27510 }
27511 return r;
27512 };
ebd8d4e8 27513
8b095871
IC
27514 // Return number of used bits in a BN
27515 BN.prototype.bitLength = function bitLength () {
27516 var w = this.words[this.length - 1];
27517 var hi = this._countBits(w);
27518 return (this.length - 1) * 26 + hi;
27519 };
ebd8d4e8 27520
8b095871
IC
27521 function toBitArray (num) {
27522 var w = new Array(num.bitLength());
ebd8d4e8 27523
8b095871
IC
27524 for (var bit = 0; bit < w.length; bit++) {
27525 var off = (bit / 26) | 0;
27526 var wbit = bit % 26;
ebd8d4e8 27527
8b095871 27528 w[bit] = (num.words[off] & (1 << wbit)) >>> wbit;
ab78acc6 27529 }
8b095871
IC
27530
27531 return w;
ab78acc6 27532 }
ebd8d4e8 27533
8b095871
IC
27534 // Number of trailing zero bits
27535 BN.prototype.zeroBits = function zeroBits () {
27536 if (this.isZero()) return 0;
27537
27538 var r = 0;
27539 for (var i = 0; i < this.length; i++) {
27540 var b = this._zeroBits(this.words[i]);
27541 r += b;
27542 if (b !== 26) break;
ab78acc6 27543 }
8b095871
IC
27544 return r;
27545 };
27546
27547 BN.prototype.byteLength = function byteLength () {
27548 return Math.ceil(this.bitLength() / 8);
27549 };
27550
27551 BN.prototype.toTwos = function toTwos (width) {
27552 if (this.negative !== 0) {
27553 return this.abs().inotn(width).iaddn(1);
ab78acc6 27554 }
8b095871
IC
27555 return this.clone();
27556 };
ebd8d4e8 27557
8b095871
IC
27558 BN.prototype.fromTwos = function fromTwos (width) {
27559 if (this.testn(width - 1)) {
27560 return this.notn(width).iaddn(1).ineg();
27561 }
27562 return this.clone();
27563 };
ebd8d4e8 27564
8b095871
IC
27565 BN.prototype.isNeg = function isNeg () {
27566 return this.negative !== 0;
27567 };
ebd8d4e8 27568
8b095871
IC
27569 // Return negative clone of `this`
27570 BN.prototype.neg = function neg () {
27571 return this.clone().ineg();
27572 };
ebd8d4e8 27573
8b095871
IC
27574 BN.prototype.ineg = function ineg () {
27575 if (!this.isZero()) {
27576 this.negative ^= 1;
ab78acc6 27577 }
ebd8d4e8 27578
8b095871
IC
27579 return this;
27580 };
ebd8d4e8 27581
8b095871
IC
27582 // Or `num` with `this` in-place
27583 BN.prototype.iuor = function iuor (num) {
27584 while (this.length < num.length) {
27585 this.words[this.length++] = 0;
27586 }
ebd8d4e8 27587
8b095871
IC
27588 for (var i = 0; i < num.length; i++) {
27589 this.words[i] = this.words[i] | num.words[i];
ebd8d4e8 27590 }
ebd8d4e8 27591
8b095871
IC
27592 return this.strip();
27593 };
ebd8d4e8 27594
8b095871
IC
27595 BN.prototype.ior = function ior (num) {
27596 assert((this.negative | num.negative) === 0);
27597 return this.iuor(num);
ab78acc6 27598 };
ebd8d4e8 27599
8b095871
IC
27600 // Or `num` with `this`
27601 BN.prototype.or = function or (num) {
27602 if (this.length > num.length) return this.clone().ior(num);
27603 return num.clone().ior(this);
27604 };
ebd8d4e8 27605
8b095871
IC
27606 BN.prototype.uor = function uor (num) {
27607 if (this.length > num.length) return this.clone().iuor(num);
27608 return num.clone().iuor(this);
27609 };
ebd8d4e8 27610
8b095871
IC
27611 // And `num` with `this` in-place
27612 BN.prototype.iuand = function iuand (num) {
27613 // b = min-length(num, this)
27614 var b;
27615 if (this.length > num.length) {
27616 b = num;
27617 } else {
27618 b = this;
27619 }
27620
27621 for (var i = 0; i < b.length; i++) {
27622 this.words[i] = this.words[i] & num.words[i];
27623 }
ebd8d4e8 27624
8b095871 27625 this.length = b.length;
ebd8d4e8 27626
8b095871
IC
27627 return this.strip();
27628 };
ebd8d4e8 27629
8b095871
IC
27630 BN.prototype.iand = function iand (num) {
27631 assert((this.negative | num.negative) === 0);
27632 return this.iuand(num);
27633 };
ebd8d4e8 27634
8b095871
IC
27635 // And `num` with `this`
27636 BN.prototype.and = function and (num) {
27637 if (this.length > num.length) return this.clone().iand(num);
27638 return num.clone().iand(this);
27639 };
ebd8d4e8 27640
8b095871
IC
27641 BN.prototype.uand = function uand (num) {
27642 if (this.length > num.length) return this.clone().iuand(num);
27643 return num.clone().iuand(this);
27644 };
ebd8d4e8 27645
8b095871
IC
27646 // Xor `num` with `this` in-place
27647 BN.prototype.iuxor = function iuxor (num) {
27648 // a.length > b.length
27649 var a;
27650 var b;
27651 if (this.length > num.length) {
27652 a = this;
27653 b = num;
27654 } else {
27655 a = num;
27656 b = this;
27657 }
ebd8d4e8 27658
8b095871
IC
27659 for (var i = 0; i < b.length; i++) {
27660 this.words[i] = a.words[i] ^ b.words[i];
27661 }
ebd8d4e8 27662
8b095871
IC
27663 if (this !== a) {
27664 for (; i < a.length; i++) {
27665 this.words[i] = a.words[i];
27666 }
27667 }
ebd8d4e8 27668
8b095871 27669 this.length = a.length;
ebd8d4e8 27670
8b095871
IC
27671 return this.strip();
27672 };
ebd8d4e8 27673
8b095871
IC
27674 BN.prototype.ixor = function ixor (num) {
27675 assert((this.negative | num.negative) === 0);
27676 return this.iuxor(num);
27677 };
ebd8d4e8 27678
8b095871
IC
27679 // Xor `num` with `this`
27680 BN.prototype.xor = function xor (num) {
27681 if (this.length > num.length) return this.clone().ixor(num);
27682 return num.clone().ixor(this);
27683 };
ebd8d4e8 27684
8b095871
IC
27685 BN.prototype.uxor = function uxor (num) {
27686 if (this.length > num.length) return this.clone().iuxor(num);
27687 return num.clone().iuxor(this);
27688 };
ebd8d4e8 27689
8b095871
IC
27690 // Not ``this`` with ``width`` bitwidth
27691 BN.prototype.inotn = function inotn (width) {
27692 assert(typeof width === 'number' && width >= 0);
ebd8d4e8 27693
8b095871
IC
27694 var bytesNeeded = Math.ceil(width / 26) | 0;
27695 var bitsLeft = width % 26;
ebd8d4e8 27696
8b095871
IC
27697 // Extend the buffer with leading zeroes
27698 this._expand(bytesNeeded);
27699
27700 if (bitsLeft > 0) {
27701 bytesNeeded--;
ab78acc6 27702 }
8b095871
IC
27703
27704 // Handle complete words
27705 for (var i = 0; i < bytesNeeded; i++) {
27706 this.words[i] = ~this.words[i] & 0x3ffffff;
ab78acc6 27707 }
8b095871
IC
27708
27709 // Handle the residue
27710 if (bitsLeft > 0) {
27711 this.words[i] = ~this.words[i] & (0x3ffffff >> (26 - bitsLeft));
ab78acc6 27712 }
ebd8d4e8 27713
8b095871
IC
27714 // And remove leading zeroes
27715 return this.strip();
27716 };
ebd8d4e8 27717
8b095871
IC
27718 BN.prototype.notn = function notn (width) {
27719 return this.clone().inotn(width);
27720 };
ebd8d4e8 27721
8b095871
IC
27722 // Set `bit` of `this`
27723 BN.prototype.setn = function setn (bit, val) {
27724 assert(typeof bit === 'number' && bit >= 0);
ebd8d4e8 27725
8b095871
IC
27726 var off = (bit / 26) | 0;
27727 var wbit = bit % 26;
ebd8d4e8 27728
8b095871 27729 this._expand(off + 1);
ebd8d4e8 27730
8b095871
IC
27731 if (val) {
27732 this.words[off] = this.words[off] | (1 << wbit);
27733 } else {
27734 this.words[off] = this.words[off] & ~(1 << wbit);
27735 }
ebd8d4e8 27736
8b095871
IC
27737 return this.strip();
27738 };
ebd8d4e8 27739
8b095871
IC
27740 // Add `num` to `this` in-place
27741 BN.prototype.iadd = function iadd (num) {
27742 var r;
27743
27744 // negative + positive
27745 if (this.negative !== 0 && num.negative === 0) {
27746 this.negative = 0;
27747 r = this.isub(num);
27748 this.negative ^= 1;
27749 return this._normSign();
27750
27751 // positive + negative
27752 } else if (this.negative === 0 && num.negative !== 0) {
27753 num.negative = 0;
27754 r = this.isub(num);
27755 num.negative = 1;
27756 return r._normSign();
27757 }
27758
27759 // a.length > b.length
27760 var a, b;
27761 if (this.length > num.length) {
27762 a = this;
27763 b = num;
ab78acc6 27764 } else {
8b095871
IC
27765 a = num;
27766 b = this;
27767 }
27768
27769 var carry = 0;
27770 for (var i = 0; i < b.length; i++) {
27771 r = (a.words[i] | 0) + (b.words[i] | 0) + carry;
27772 this.words[i] = r & 0x3ffffff;
27773 carry = r >>> 26;
27774 }
27775 for (; carry !== 0 && i < a.length; i++) {
27776 r = (a.words[i] | 0) + carry;
27777 this.words[i] = r & 0x3ffffff;
27778 carry = r >>> 26;
27779 }
27780
27781 this.length = a.length;
27782 if (carry !== 0) {
27783 this.words[this.length] = carry;
27784 this.length++;
27785 // Copy the rest of the words
27786 } else if (a !== this) {
27787 for (; i < a.length; i++) {
27788 this.words[i] = a.words[i];
27789 }
ab78acc6 27790 }
ebd8d4e8 27791
8b095871
IC
27792 return this;
27793 };
ebd8d4e8 27794
8b095871
IC
27795 // Add `num` to `this`
27796 BN.prototype.add = function add (num) {
27797 var res;
27798 if (num.negative !== 0 && this.negative === 0) {
27799 num.negative = 0;
27800 res = this.sub(num);
27801 num.negative ^= 1;
27802 return res;
27803 } else if (num.negative === 0 && this.negative !== 0) {
27804 this.negative = 0;
27805 res = num.sub(this);
27806 this.negative = 1;
27807 return res;
27808 }
ebd8d4e8 27809
8b095871 27810 if (this.length > num.length) return this.clone().iadd(num);
ebd8d4e8 27811
8b095871
IC
27812 return num.clone().iadd(this);
27813 };
ebd8d4e8 27814
8b095871
IC
27815 // Subtract `num` from `this` in-place
27816 BN.prototype.isub = function isub (num) {
27817 // this - (-num) = this + num
27818 if (num.negative !== 0) {
27819 num.negative = 0;
27820 var r = this.iadd(num);
27821 num.negative = 1;
27822 return r._normSign();
27823
27824 // -this - num = -(this + num)
27825 } else if (this.negative !== 0) {
27826 this.negative = 0;
27827 this.iadd(num);
27828 this.negative = 1;
27829 return this._normSign();
27830 }
27831
27832 // At this point both numbers are positive
27833 var cmp = this.cmp(num);
27834
27835 // Optimization - zeroify
27836 if (cmp === 0) {
27837 this.negative = 0;
27838 this.length = 1;
27839 this.words[0] = 0;
27840 return this;
27841 }
ebd8d4e8 27842
8b095871
IC
27843 // a > b
27844 var a, b;
27845 if (cmp > 0) {
27846 a = this;
27847 b = num;
27848 } else {
27849 a = num;
27850 b = this;
27851 }
ebd8d4e8 27852
8b095871
IC
27853 var carry = 0;
27854 for (var i = 0; i < b.length; i++) {
27855 r = (a.words[i] | 0) - (b.words[i] | 0) + carry;
27856 carry = r >> 26;
27857 this.words[i] = r & 0x3ffffff;
27858 }
27859 for (; carry !== 0 && i < a.length; i++) {
27860 r = (a.words[i] | 0) + carry;
27861 carry = r >> 26;
27862 this.words[i] = r & 0x3ffffff;
27863 }
ebd8d4e8 27864
8b095871
IC
27865 // Copy rest of the words
27866 if (carry === 0 && i < a.length && a !== this) {
27867 for (; i < a.length; i++) {
27868 this.words[i] = a.words[i];
27869 }
27870 }
ebd8d4e8 27871
8b095871 27872 this.length = Math.max(this.length, i);
ebd8d4e8 27873
8b095871
IC
27874 if (a !== this) {
27875 this.negative = 1;
ab78acc6 27876 }
ebd8d4e8 27877
8b095871
IC
27878 return this.strip();
27879 };
ebd8d4e8 27880
8b095871
IC
27881 // Subtract `num` from `this`
27882 BN.prototype.sub = function sub (num) {
27883 return this.clone().isub(num);
27884 };
27885
27886 function smallMulTo (self, num, out) {
27887 out.negative = num.negative ^ self.negative;
27888 var len = (self.length + num.length) | 0;
27889 out.length = len;
27890 len = (len - 1) | 0;
27891
27892 // Peel one iteration (compiler can't do it, because of code complexity)
27893 var a = self.words[0] | 0;
27894 var b = num.words[0] | 0;
27895 var r = a * b;
27896
27897 var lo = r & 0x3ffffff;
27898 var carry = (r / 0x4000000) | 0;
27899 out.words[0] = lo;
27900
27901 for (var k = 1; k < len; k++) {
27902 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
27903 // note that ncarry could be >= 0x3ffffff
27904 var ncarry = carry >>> 26;
27905 var rword = carry & 0x3ffffff;
27906 var maxJ = Math.min(k, num.length - 1);
27907 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
27908 var i = (k - j) | 0;
27909 a = self.words[i] | 0;
27910 b = num.words[j] | 0;
27911 r = a * b + rword;
27912 ncarry += (r / 0x4000000) | 0;
27913 rword = r & 0x3ffffff;
27914 }
27915 out.words[k] = rword | 0;
27916 carry = ncarry | 0;
27917 }
27918 if (carry !== 0) {
27919 out.words[k] = carry | 0;
ab78acc6 27920 } else {
8b095871
IC
27921 out.length--;
27922 }
27923
27924 return out.strip();
27925 }
27926
27927 // TODO(indutny): it may be reasonable to omit it for users who don't need
27928 // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit
27929 // multiplication (like elliptic secp256k1).
27930 var comb10MulTo = function comb10MulTo (self, num, out) {
27931 var a = self.words;
27932 var b = num.words;
27933 var o = out.words;
27934 var c = 0;
27935 var lo;
27936 var mid;
27937 var hi;
27938 var a0 = a[0] | 0;
27939 var al0 = a0 & 0x1fff;
27940 var ah0 = a0 >>> 13;
27941 var a1 = a[1] | 0;
27942 var al1 = a1 & 0x1fff;
27943 var ah1 = a1 >>> 13;
27944 var a2 = a[2] | 0;
27945 var al2 = a2 & 0x1fff;
27946 var ah2 = a2 >>> 13;
27947 var a3 = a[3] | 0;
27948 var al3 = a3 & 0x1fff;
27949 var ah3 = a3 >>> 13;
27950 var a4 = a[4] | 0;
27951 var al4 = a4 & 0x1fff;
27952 var ah4 = a4 >>> 13;
27953 var a5 = a[5] | 0;
27954 var al5 = a5 & 0x1fff;
27955 var ah5 = a5 >>> 13;
27956 var a6 = a[6] | 0;
27957 var al6 = a6 & 0x1fff;
27958 var ah6 = a6 >>> 13;
27959 var a7 = a[7] | 0;
27960 var al7 = a7 & 0x1fff;
27961 var ah7 = a7 >>> 13;
27962 var a8 = a[8] | 0;
27963 var al8 = a8 & 0x1fff;
27964 var ah8 = a8 >>> 13;
27965 var a9 = a[9] | 0;
27966 var al9 = a9 & 0x1fff;
27967 var ah9 = a9 >>> 13;
27968 var b0 = b[0] | 0;
27969 var bl0 = b0 & 0x1fff;
27970 var bh0 = b0 >>> 13;
27971 var b1 = b[1] | 0;
27972 var bl1 = b1 & 0x1fff;
27973 var bh1 = b1 >>> 13;
27974 var b2 = b[2] | 0;
27975 var bl2 = b2 & 0x1fff;
27976 var bh2 = b2 >>> 13;
27977 var b3 = b[3] | 0;
27978 var bl3 = b3 & 0x1fff;
27979 var bh3 = b3 >>> 13;
27980 var b4 = b[4] | 0;
27981 var bl4 = b4 & 0x1fff;
27982 var bh4 = b4 >>> 13;
27983 var b5 = b[5] | 0;
27984 var bl5 = b5 & 0x1fff;
27985 var bh5 = b5 >>> 13;
27986 var b6 = b[6] | 0;
27987 var bl6 = b6 & 0x1fff;
27988 var bh6 = b6 >>> 13;
27989 var b7 = b[7] | 0;
27990 var bl7 = b7 & 0x1fff;
27991 var bh7 = b7 >>> 13;
27992 var b8 = b[8] | 0;
27993 var bl8 = b8 & 0x1fff;
27994 var bh8 = b8 >>> 13;
27995 var b9 = b[9] | 0;
27996 var bl9 = b9 & 0x1fff;
27997 var bh9 = b9 >>> 13;
27998
27999 out.negative = self.negative ^ num.negative;
28000 out.length = 19;
28001 /* k = 0 */
28002 lo = Math.imul(al0, bl0);
28003 mid = Math.imul(al0, bh0);
28004 mid = (mid + Math.imul(ah0, bl0)) | 0;
28005 hi = Math.imul(ah0, bh0);
28006 var w0 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28007 c = (((hi + (mid >>> 13)) | 0) + (w0 >>> 26)) | 0;
28008 w0 &= 0x3ffffff;
28009 /* k = 1 */
28010 lo = Math.imul(al1, bl0);
28011 mid = Math.imul(al1, bh0);
28012 mid = (mid + Math.imul(ah1, bl0)) | 0;
28013 hi = Math.imul(ah1, bh0);
28014 lo = (lo + Math.imul(al0, bl1)) | 0;
28015 mid = (mid + Math.imul(al0, bh1)) | 0;
28016 mid = (mid + Math.imul(ah0, bl1)) | 0;
28017 hi = (hi + Math.imul(ah0, bh1)) | 0;
28018 var w1 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28019 c = (((hi + (mid >>> 13)) | 0) + (w1 >>> 26)) | 0;
28020 w1 &= 0x3ffffff;
28021 /* k = 2 */
28022 lo = Math.imul(al2, bl0);
28023 mid = Math.imul(al2, bh0);
28024 mid = (mid + Math.imul(ah2, bl0)) | 0;
28025 hi = Math.imul(ah2, bh0);
28026 lo = (lo + Math.imul(al1, bl1)) | 0;
28027 mid = (mid + Math.imul(al1, bh1)) | 0;
28028 mid = (mid + Math.imul(ah1, bl1)) | 0;
28029 hi = (hi + Math.imul(ah1, bh1)) | 0;
28030 lo = (lo + Math.imul(al0, bl2)) | 0;
28031 mid = (mid + Math.imul(al0, bh2)) | 0;
28032 mid = (mid + Math.imul(ah0, bl2)) | 0;
28033 hi = (hi + Math.imul(ah0, bh2)) | 0;
28034 var w2 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28035 c = (((hi + (mid >>> 13)) | 0) + (w2 >>> 26)) | 0;
28036 w2 &= 0x3ffffff;
28037 /* k = 3 */
28038 lo = Math.imul(al3, bl0);
28039 mid = Math.imul(al3, bh0);
28040 mid = (mid + Math.imul(ah3, bl0)) | 0;
28041 hi = Math.imul(ah3, bh0);
28042 lo = (lo + Math.imul(al2, bl1)) | 0;
28043 mid = (mid + Math.imul(al2, bh1)) | 0;
28044 mid = (mid + Math.imul(ah2, bl1)) | 0;
28045 hi = (hi + Math.imul(ah2, bh1)) | 0;
28046 lo = (lo + Math.imul(al1, bl2)) | 0;
28047 mid = (mid + Math.imul(al1, bh2)) | 0;
28048 mid = (mid + Math.imul(ah1, bl2)) | 0;
28049 hi = (hi + Math.imul(ah1, bh2)) | 0;
28050 lo = (lo + Math.imul(al0, bl3)) | 0;
28051 mid = (mid + Math.imul(al0, bh3)) | 0;
28052 mid = (mid + Math.imul(ah0, bl3)) | 0;
28053 hi = (hi + Math.imul(ah0, bh3)) | 0;
28054 var w3 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28055 c = (((hi + (mid >>> 13)) | 0) + (w3 >>> 26)) | 0;
28056 w3 &= 0x3ffffff;
28057 /* k = 4 */
28058 lo = Math.imul(al4, bl0);
28059 mid = Math.imul(al4, bh0);
28060 mid = (mid + Math.imul(ah4, bl0)) | 0;
28061 hi = Math.imul(ah4, bh0);
28062 lo = (lo + Math.imul(al3, bl1)) | 0;
28063 mid = (mid + Math.imul(al3, bh1)) | 0;
28064 mid = (mid + Math.imul(ah3, bl1)) | 0;
28065 hi = (hi + Math.imul(ah3, bh1)) | 0;
28066 lo = (lo + Math.imul(al2, bl2)) | 0;
28067 mid = (mid + Math.imul(al2, bh2)) | 0;
28068 mid = (mid + Math.imul(ah2, bl2)) | 0;
28069 hi = (hi + Math.imul(ah2, bh2)) | 0;
28070 lo = (lo + Math.imul(al1, bl3)) | 0;
28071 mid = (mid + Math.imul(al1, bh3)) | 0;
28072 mid = (mid + Math.imul(ah1, bl3)) | 0;
28073 hi = (hi + Math.imul(ah1, bh3)) | 0;
28074 lo = (lo + Math.imul(al0, bl4)) | 0;
28075 mid = (mid + Math.imul(al0, bh4)) | 0;
28076 mid = (mid + Math.imul(ah0, bl4)) | 0;
28077 hi = (hi + Math.imul(ah0, bh4)) | 0;
28078 var w4 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28079 c = (((hi + (mid >>> 13)) | 0) + (w4 >>> 26)) | 0;
28080 w4 &= 0x3ffffff;
28081 /* k = 5 */
28082 lo = Math.imul(al5, bl0);
28083 mid = Math.imul(al5, bh0);
28084 mid = (mid + Math.imul(ah5, bl0)) | 0;
28085 hi = Math.imul(ah5, bh0);
28086 lo = (lo + Math.imul(al4, bl1)) | 0;
28087 mid = (mid + Math.imul(al4, bh1)) | 0;
28088 mid = (mid + Math.imul(ah4, bl1)) | 0;
28089 hi = (hi + Math.imul(ah4, bh1)) | 0;
28090 lo = (lo + Math.imul(al3, bl2)) | 0;
28091 mid = (mid + Math.imul(al3, bh2)) | 0;
28092 mid = (mid + Math.imul(ah3, bl2)) | 0;
28093 hi = (hi + Math.imul(ah3, bh2)) | 0;
28094 lo = (lo + Math.imul(al2, bl3)) | 0;
28095 mid = (mid + Math.imul(al2, bh3)) | 0;
28096 mid = (mid + Math.imul(ah2, bl3)) | 0;
28097 hi = (hi + Math.imul(ah2, bh3)) | 0;
28098 lo = (lo + Math.imul(al1, bl4)) | 0;
28099 mid = (mid + Math.imul(al1, bh4)) | 0;
28100 mid = (mid + Math.imul(ah1, bl4)) | 0;
28101 hi = (hi + Math.imul(ah1, bh4)) | 0;
28102 lo = (lo + Math.imul(al0, bl5)) | 0;
28103 mid = (mid + Math.imul(al0, bh5)) | 0;
28104 mid = (mid + Math.imul(ah0, bl5)) | 0;
28105 hi = (hi + Math.imul(ah0, bh5)) | 0;
28106 var w5 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28107 c = (((hi + (mid >>> 13)) | 0) + (w5 >>> 26)) | 0;
28108 w5 &= 0x3ffffff;
28109 /* k = 6 */
28110 lo = Math.imul(al6, bl0);
28111 mid = Math.imul(al6, bh0);
28112 mid = (mid + Math.imul(ah6, bl0)) | 0;
28113 hi = Math.imul(ah6, bh0);
28114 lo = (lo + Math.imul(al5, bl1)) | 0;
28115 mid = (mid + Math.imul(al5, bh1)) | 0;
28116 mid = (mid + Math.imul(ah5, bl1)) | 0;
28117 hi = (hi + Math.imul(ah5, bh1)) | 0;
28118 lo = (lo + Math.imul(al4, bl2)) | 0;
28119 mid = (mid + Math.imul(al4, bh2)) | 0;
28120 mid = (mid + Math.imul(ah4, bl2)) | 0;
28121 hi = (hi + Math.imul(ah4, bh2)) | 0;
28122 lo = (lo + Math.imul(al3, bl3)) | 0;
28123 mid = (mid + Math.imul(al3, bh3)) | 0;
28124 mid = (mid + Math.imul(ah3, bl3)) | 0;
28125 hi = (hi + Math.imul(ah3, bh3)) | 0;
28126 lo = (lo + Math.imul(al2, bl4)) | 0;
28127 mid = (mid + Math.imul(al2, bh4)) | 0;
28128 mid = (mid + Math.imul(ah2, bl4)) | 0;
28129 hi = (hi + Math.imul(ah2, bh4)) | 0;
28130 lo = (lo + Math.imul(al1, bl5)) | 0;
28131 mid = (mid + Math.imul(al1, bh5)) | 0;
28132 mid = (mid + Math.imul(ah1, bl5)) | 0;
28133 hi = (hi + Math.imul(ah1, bh5)) | 0;
28134 lo = (lo + Math.imul(al0, bl6)) | 0;
28135 mid = (mid + Math.imul(al0, bh6)) | 0;
28136 mid = (mid + Math.imul(ah0, bl6)) | 0;
28137 hi = (hi + Math.imul(ah0, bh6)) | 0;
28138 var w6 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28139 c = (((hi + (mid >>> 13)) | 0) + (w6 >>> 26)) | 0;
28140 w6 &= 0x3ffffff;
28141 /* k = 7 */
28142 lo = Math.imul(al7, bl0);
28143 mid = Math.imul(al7, bh0);
28144 mid = (mid + Math.imul(ah7, bl0)) | 0;
28145 hi = Math.imul(ah7, bh0);
28146 lo = (lo + Math.imul(al6, bl1)) | 0;
28147 mid = (mid + Math.imul(al6, bh1)) | 0;
28148 mid = (mid + Math.imul(ah6, bl1)) | 0;
28149 hi = (hi + Math.imul(ah6, bh1)) | 0;
28150 lo = (lo + Math.imul(al5, bl2)) | 0;
28151 mid = (mid + Math.imul(al5, bh2)) | 0;
28152 mid = (mid + Math.imul(ah5, bl2)) | 0;
28153 hi = (hi + Math.imul(ah5, bh2)) | 0;
28154 lo = (lo + Math.imul(al4, bl3)) | 0;
28155 mid = (mid + Math.imul(al4, bh3)) | 0;
28156 mid = (mid + Math.imul(ah4, bl3)) | 0;
28157 hi = (hi + Math.imul(ah4, bh3)) | 0;
28158 lo = (lo + Math.imul(al3, bl4)) | 0;
28159 mid = (mid + Math.imul(al3, bh4)) | 0;
28160 mid = (mid + Math.imul(ah3, bl4)) | 0;
28161 hi = (hi + Math.imul(ah3, bh4)) | 0;
28162 lo = (lo + Math.imul(al2, bl5)) | 0;
28163 mid = (mid + Math.imul(al2, bh5)) | 0;
28164 mid = (mid + Math.imul(ah2, bl5)) | 0;
28165 hi = (hi + Math.imul(ah2, bh5)) | 0;
28166 lo = (lo + Math.imul(al1, bl6)) | 0;
28167 mid = (mid + Math.imul(al1, bh6)) | 0;
28168 mid = (mid + Math.imul(ah1, bl6)) | 0;
28169 hi = (hi + Math.imul(ah1, bh6)) | 0;
28170 lo = (lo + Math.imul(al0, bl7)) | 0;
28171 mid = (mid + Math.imul(al0, bh7)) | 0;
28172 mid = (mid + Math.imul(ah0, bl7)) | 0;
28173 hi = (hi + Math.imul(ah0, bh7)) | 0;
28174 var w7 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28175 c = (((hi + (mid >>> 13)) | 0) + (w7 >>> 26)) | 0;
28176 w7 &= 0x3ffffff;
28177 /* k = 8 */
28178 lo = Math.imul(al8, bl0);
28179 mid = Math.imul(al8, bh0);
28180 mid = (mid + Math.imul(ah8, bl0)) | 0;
28181 hi = Math.imul(ah8, bh0);
28182 lo = (lo + Math.imul(al7, bl1)) | 0;
28183 mid = (mid + Math.imul(al7, bh1)) | 0;
28184 mid = (mid + Math.imul(ah7, bl1)) | 0;
28185 hi = (hi + Math.imul(ah7, bh1)) | 0;
28186 lo = (lo + Math.imul(al6, bl2)) | 0;
28187 mid = (mid + Math.imul(al6, bh2)) | 0;
28188 mid = (mid + Math.imul(ah6, bl2)) | 0;
28189 hi = (hi + Math.imul(ah6, bh2)) | 0;
28190 lo = (lo + Math.imul(al5, bl3)) | 0;
28191 mid = (mid + Math.imul(al5, bh3)) | 0;
28192 mid = (mid + Math.imul(ah5, bl3)) | 0;
28193 hi = (hi + Math.imul(ah5, bh3)) | 0;
28194 lo = (lo + Math.imul(al4, bl4)) | 0;
28195 mid = (mid + Math.imul(al4, bh4)) | 0;
28196 mid = (mid + Math.imul(ah4, bl4)) | 0;
28197 hi = (hi + Math.imul(ah4, bh4)) | 0;
28198 lo = (lo + Math.imul(al3, bl5)) | 0;
28199 mid = (mid + Math.imul(al3, bh5)) | 0;
28200 mid = (mid + Math.imul(ah3, bl5)) | 0;
28201 hi = (hi + Math.imul(ah3, bh5)) | 0;
28202 lo = (lo + Math.imul(al2, bl6)) | 0;
28203 mid = (mid + Math.imul(al2, bh6)) | 0;
28204 mid = (mid + Math.imul(ah2, bl6)) | 0;
28205 hi = (hi + Math.imul(ah2, bh6)) | 0;
28206 lo = (lo + Math.imul(al1, bl7)) | 0;
28207 mid = (mid + Math.imul(al1, bh7)) | 0;
28208 mid = (mid + Math.imul(ah1, bl7)) | 0;
28209 hi = (hi + Math.imul(ah1, bh7)) | 0;
28210 lo = (lo + Math.imul(al0, bl8)) | 0;
28211 mid = (mid + Math.imul(al0, bh8)) | 0;
28212 mid = (mid + Math.imul(ah0, bl8)) | 0;
28213 hi = (hi + Math.imul(ah0, bh8)) | 0;
28214 var w8 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28215 c = (((hi + (mid >>> 13)) | 0) + (w8 >>> 26)) | 0;
28216 w8 &= 0x3ffffff;
28217 /* k = 9 */
28218 lo = Math.imul(al9, bl0);
28219 mid = Math.imul(al9, bh0);
28220 mid = (mid + Math.imul(ah9, bl0)) | 0;
28221 hi = Math.imul(ah9, bh0);
28222 lo = (lo + Math.imul(al8, bl1)) | 0;
28223 mid = (mid + Math.imul(al8, bh1)) | 0;
28224 mid = (mid + Math.imul(ah8, bl1)) | 0;
28225 hi = (hi + Math.imul(ah8, bh1)) | 0;
28226 lo = (lo + Math.imul(al7, bl2)) | 0;
28227 mid = (mid + Math.imul(al7, bh2)) | 0;
28228 mid = (mid + Math.imul(ah7, bl2)) | 0;
28229 hi = (hi + Math.imul(ah7, bh2)) | 0;
28230 lo = (lo + Math.imul(al6, bl3)) | 0;
28231 mid = (mid + Math.imul(al6, bh3)) | 0;
28232 mid = (mid + Math.imul(ah6, bl3)) | 0;
28233 hi = (hi + Math.imul(ah6, bh3)) | 0;
28234 lo = (lo + Math.imul(al5, bl4)) | 0;
28235 mid = (mid + Math.imul(al5, bh4)) | 0;
28236 mid = (mid + Math.imul(ah5, bl4)) | 0;
28237 hi = (hi + Math.imul(ah5, bh4)) | 0;
28238 lo = (lo + Math.imul(al4, bl5)) | 0;
28239 mid = (mid + Math.imul(al4, bh5)) | 0;
28240 mid = (mid + Math.imul(ah4, bl5)) | 0;
28241 hi = (hi + Math.imul(ah4, bh5)) | 0;
28242 lo = (lo + Math.imul(al3, bl6)) | 0;
28243 mid = (mid + Math.imul(al3, bh6)) | 0;
28244 mid = (mid + Math.imul(ah3, bl6)) | 0;
28245 hi = (hi + Math.imul(ah3, bh6)) | 0;
28246 lo = (lo + Math.imul(al2, bl7)) | 0;
28247 mid = (mid + Math.imul(al2, bh7)) | 0;
28248 mid = (mid + Math.imul(ah2, bl7)) | 0;
28249 hi = (hi + Math.imul(ah2, bh7)) | 0;
28250 lo = (lo + Math.imul(al1, bl8)) | 0;
28251 mid = (mid + Math.imul(al1, bh8)) | 0;
28252 mid = (mid + Math.imul(ah1, bl8)) | 0;
28253 hi = (hi + Math.imul(ah1, bh8)) | 0;
28254 lo = (lo + Math.imul(al0, bl9)) | 0;
28255 mid = (mid + Math.imul(al0, bh9)) | 0;
28256 mid = (mid + Math.imul(ah0, bl9)) | 0;
28257 hi = (hi + Math.imul(ah0, bh9)) | 0;
28258 var w9 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28259 c = (((hi + (mid >>> 13)) | 0) + (w9 >>> 26)) | 0;
28260 w9 &= 0x3ffffff;
28261 /* k = 10 */
28262 lo = Math.imul(al9, bl1);
28263 mid = Math.imul(al9, bh1);
28264 mid = (mid + Math.imul(ah9, bl1)) | 0;
28265 hi = Math.imul(ah9, bh1);
28266 lo = (lo + Math.imul(al8, bl2)) | 0;
28267 mid = (mid + Math.imul(al8, bh2)) | 0;
28268 mid = (mid + Math.imul(ah8, bl2)) | 0;
28269 hi = (hi + Math.imul(ah8, bh2)) | 0;
28270 lo = (lo + Math.imul(al7, bl3)) | 0;
28271 mid = (mid + Math.imul(al7, bh3)) | 0;
28272 mid = (mid + Math.imul(ah7, bl3)) | 0;
28273 hi = (hi + Math.imul(ah7, bh3)) | 0;
28274 lo = (lo + Math.imul(al6, bl4)) | 0;
28275 mid = (mid + Math.imul(al6, bh4)) | 0;
28276 mid = (mid + Math.imul(ah6, bl4)) | 0;
28277 hi = (hi + Math.imul(ah6, bh4)) | 0;
28278 lo = (lo + Math.imul(al5, bl5)) | 0;
28279 mid = (mid + Math.imul(al5, bh5)) | 0;
28280 mid = (mid + Math.imul(ah5, bl5)) | 0;
28281 hi = (hi + Math.imul(ah5, bh5)) | 0;
28282 lo = (lo + Math.imul(al4, bl6)) | 0;
28283 mid = (mid + Math.imul(al4, bh6)) | 0;
28284 mid = (mid + Math.imul(ah4, bl6)) | 0;
28285 hi = (hi + Math.imul(ah4, bh6)) | 0;
28286 lo = (lo + Math.imul(al3, bl7)) | 0;
28287 mid = (mid + Math.imul(al3, bh7)) | 0;
28288 mid = (mid + Math.imul(ah3, bl7)) | 0;
28289 hi = (hi + Math.imul(ah3, bh7)) | 0;
28290 lo = (lo + Math.imul(al2, bl8)) | 0;
28291 mid = (mid + Math.imul(al2, bh8)) | 0;
28292 mid = (mid + Math.imul(ah2, bl8)) | 0;
28293 hi = (hi + Math.imul(ah2, bh8)) | 0;
28294 lo = (lo + Math.imul(al1, bl9)) | 0;
28295 mid = (mid + Math.imul(al1, bh9)) | 0;
28296 mid = (mid + Math.imul(ah1, bl9)) | 0;
28297 hi = (hi + Math.imul(ah1, bh9)) | 0;
28298 var w10 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28299 c = (((hi + (mid >>> 13)) | 0) + (w10 >>> 26)) | 0;
28300 w10 &= 0x3ffffff;
28301 /* k = 11 */
28302 lo = Math.imul(al9, bl2);
28303 mid = Math.imul(al9, bh2);
28304 mid = (mid + Math.imul(ah9, bl2)) | 0;
28305 hi = Math.imul(ah9, bh2);
28306 lo = (lo + Math.imul(al8, bl3)) | 0;
28307 mid = (mid + Math.imul(al8, bh3)) | 0;
28308 mid = (mid + Math.imul(ah8, bl3)) | 0;
28309 hi = (hi + Math.imul(ah8, bh3)) | 0;
28310 lo = (lo + Math.imul(al7, bl4)) | 0;
28311 mid = (mid + Math.imul(al7, bh4)) | 0;
28312 mid = (mid + Math.imul(ah7, bl4)) | 0;
28313 hi = (hi + Math.imul(ah7, bh4)) | 0;
28314 lo = (lo + Math.imul(al6, bl5)) | 0;
28315 mid = (mid + Math.imul(al6, bh5)) | 0;
28316 mid = (mid + Math.imul(ah6, bl5)) | 0;
28317 hi = (hi + Math.imul(ah6, bh5)) | 0;
28318 lo = (lo + Math.imul(al5, bl6)) | 0;
28319 mid = (mid + Math.imul(al5, bh6)) | 0;
28320 mid = (mid + Math.imul(ah5, bl6)) | 0;
28321 hi = (hi + Math.imul(ah5, bh6)) | 0;
28322 lo = (lo + Math.imul(al4, bl7)) | 0;
28323 mid = (mid + Math.imul(al4, bh7)) | 0;
28324 mid = (mid + Math.imul(ah4, bl7)) | 0;
28325 hi = (hi + Math.imul(ah4, bh7)) | 0;
28326 lo = (lo + Math.imul(al3, bl8)) | 0;
28327 mid = (mid + Math.imul(al3, bh8)) | 0;
28328 mid = (mid + Math.imul(ah3, bl8)) | 0;
28329 hi = (hi + Math.imul(ah3, bh8)) | 0;
28330 lo = (lo + Math.imul(al2, bl9)) | 0;
28331 mid = (mid + Math.imul(al2, bh9)) | 0;
28332 mid = (mid + Math.imul(ah2, bl9)) | 0;
28333 hi = (hi + Math.imul(ah2, bh9)) | 0;
28334 var w11 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28335 c = (((hi + (mid >>> 13)) | 0) + (w11 >>> 26)) | 0;
28336 w11 &= 0x3ffffff;
28337 /* k = 12 */
28338 lo = Math.imul(al9, bl3);
28339 mid = Math.imul(al9, bh3);
28340 mid = (mid + Math.imul(ah9, bl3)) | 0;
28341 hi = Math.imul(ah9, bh3);
28342 lo = (lo + Math.imul(al8, bl4)) | 0;
28343 mid = (mid + Math.imul(al8, bh4)) | 0;
28344 mid = (mid + Math.imul(ah8, bl4)) | 0;
28345 hi = (hi + Math.imul(ah8, bh4)) | 0;
28346 lo = (lo + Math.imul(al7, bl5)) | 0;
28347 mid = (mid + Math.imul(al7, bh5)) | 0;
28348 mid = (mid + Math.imul(ah7, bl5)) | 0;
28349 hi = (hi + Math.imul(ah7, bh5)) | 0;
28350 lo = (lo + Math.imul(al6, bl6)) | 0;
28351 mid = (mid + Math.imul(al6, bh6)) | 0;
28352 mid = (mid + Math.imul(ah6, bl6)) | 0;
28353 hi = (hi + Math.imul(ah6, bh6)) | 0;
28354 lo = (lo + Math.imul(al5, bl7)) | 0;
28355 mid = (mid + Math.imul(al5, bh7)) | 0;
28356 mid = (mid + Math.imul(ah5, bl7)) | 0;
28357 hi = (hi + Math.imul(ah5, bh7)) | 0;
28358 lo = (lo + Math.imul(al4, bl8)) | 0;
28359 mid = (mid + Math.imul(al4, bh8)) | 0;
28360 mid = (mid + Math.imul(ah4, bl8)) | 0;
28361 hi = (hi + Math.imul(ah4, bh8)) | 0;
28362 lo = (lo + Math.imul(al3, bl9)) | 0;
28363 mid = (mid + Math.imul(al3, bh9)) | 0;
28364 mid = (mid + Math.imul(ah3, bl9)) | 0;
28365 hi = (hi + Math.imul(ah3, bh9)) | 0;
28366 var w12 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28367 c = (((hi + (mid >>> 13)) | 0) + (w12 >>> 26)) | 0;
28368 w12 &= 0x3ffffff;
28369 /* k = 13 */
28370 lo = Math.imul(al9, bl4);
28371 mid = Math.imul(al9, bh4);
28372 mid = (mid + Math.imul(ah9, bl4)) | 0;
28373 hi = Math.imul(ah9, bh4);
28374 lo = (lo + Math.imul(al8, bl5)) | 0;
28375 mid = (mid + Math.imul(al8, bh5)) | 0;
28376 mid = (mid + Math.imul(ah8, bl5)) | 0;
28377 hi = (hi + Math.imul(ah8, bh5)) | 0;
28378 lo = (lo + Math.imul(al7, bl6)) | 0;
28379 mid = (mid + Math.imul(al7, bh6)) | 0;
28380 mid = (mid + Math.imul(ah7, bl6)) | 0;
28381 hi = (hi + Math.imul(ah7, bh6)) | 0;
28382 lo = (lo + Math.imul(al6, bl7)) | 0;
28383 mid = (mid + Math.imul(al6, bh7)) | 0;
28384 mid = (mid + Math.imul(ah6, bl7)) | 0;
28385 hi = (hi + Math.imul(ah6, bh7)) | 0;
28386 lo = (lo + Math.imul(al5, bl8)) | 0;
28387 mid = (mid + Math.imul(al5, bh8)) | 0;
28388 mid = (mid + Math.imul(ah5, bl8)) | 0;
28389 hi = (hi + Math.imul(ah5, bh8)) | 0;
28390 lo = (lo + Math.imul(al4, bl9)) | 0;
28391 mid = (mid + Math.imul(al4, bh9)) | 0;
28392 mid = (mid + Math.imul(ah4, bl9)) | 0;
28393 hi = (hi + Math.imul(ah4, bh9)) | 0;
28394 var w13 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28395 c = (((hi + (mid >>> 13)) | 0) + (w13 >>> 26)) | 0;
28396 w13 &= 0x3ffffff;
28397 /* k = 14 */
28398 lo = Math.imul(al9, bl5);
28399 mid = Math.imul(al9, bh5);
28400 mid = (mid + Math.imul(ah9, bl5)) | 0;
28401 hi = Math.imul(ah9, bh5);
28402 lo = (lo + Math.imul(al8, bl6)) | 0;
28403 mid = (mid + Math.imul(al8, bh6)) | 0;
28404 mid = (mid + Math.imul(ah8, bl6)) | 0;
28405 hi = (hi + Math.imul(ah8, bh6)) | 0;
28406 lo = (lo + Math.imul(al7, bl7)) | 0;
28407 mid = (mid + Math.imul(al7, bh7)) | 0;
28408 mid = (mid + Math.imul(ah7, bl7)) | 0;
28409 hi = (hi + Math.imul(ah7, bh7)) | 0;
28410 lo = (lo + Math.imul(al6, bl8)) | 0;
28411 mid = (mid + Math.imul(al6, bh8)) | 0;
28412 mid = (mid + Math.imul(ah6, bl8)) | 0;
28413 hi = (hi + Math.imul(ah6, bh8)) | 0;
28414 lo = (lo + Math.imul(al5, bl9)) | 0;
28415 mid = (mid + Math.imul(al5, bh9)) | 0;
28416 mid = (mid + Math.imul(ah5, bl9)) | 0;
28417 hi = (hi + Math.imul(ah5, bh9)) | 0;
28418 var w14 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28419 c = (((hi + (mid >>> 13)) | 0) + (w14 >>> 26)) | 0;
28420 w14 &= 0x3ffffff;
28421 /* k = 15 */
28422 lo = Math.imul(al9, bl6);
28423 mid = Math.imul(al9, bh6);
28424 mid = (mid + Math.imul(ah9, bl6)) | 0;
28425 hi = Math.imul(ah9, bh6);
28426 lo = (lo + Math.imul(al8, bl7)) | 0;
28427 mid = (mid + Math.imul(al8, bh7)) | 0;
28428 mid = (mid + Math.imul(ah8, bl7)) | 0;
28429 hi = (hi + Math.imul(ah8, bh7)) | 0;
28430 lo = (lo + Math.imul(al7, bl8)) | 0;
28431 mid = (mid + Math.imul(al7, bh8)) | 0;
28432 mid = (mid + Math.imul(ah7, bl8)) | 0;
28433 hi = (hi + Math.imul(ah7, bh8)) | 0;
28434 lo = (lo + Math.imul(al6, bl9)) | 0;
28435 mid = (mid + Math.imul(al6, bh9)) | 0;
28436 mid = (mid + Math.imul(ah6, bl9)) | 0;
28437 hi = (hi + Math.imul(ah6, bh9)) | 0;
28438 var w15 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28439 c = (((hi + (mid >>> 13)) | 0) + (w15 >>> 26)) | 0;
28440 w15 &= 0x3ffffff;
28441 /* k = 16 */
28442 lo = Math.imul(al9, bl7);
28443 mid = Math.imul(al9, bh7);
28444 mid = (mid + Math.imul(ah9, bl7)) | 0;
28445 hi = Math.imul(ah9, bh7);
28446 lo = (lo + Math.imul(al8, bl8)) | 0;
28447 mid = (mid + Math.imul(al8, bh8)) | 0;
28448 mid = (mid + Math.imul(ah8, bl8)) | 0;
28449 hi = (hi + Math.imul(ah8, bh8)) | 0;
28450 lo = (lo + Math.imul(al7, bl9)) | 0;
28451 mid = (mid + Math.imul(al7, bh9)) | 0;
28452 mid = (mid + Math.imul(ah7, bl9)) | 0;
28453 hi = (hi + Math.imul(ah7, bh9)) | 0;
28454 var w16 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28455 c = (((hi + (mid >>> 13)) | 0) + (w16 >>> 26)) | 0;
28456 w16 &= 0x3ffffff;
28457 /* k = 17 */
28458 lo = Math.imul(al9, bl8);
28459 mid = Math.imul(al9, bh8);
28460 mid = (mid + Math.imul(ah9, bl8)) | 0;
28461 hi = Math.imul(ah9, bh8);
28462 lo = (lo + Math.imul(al8, bl9)) | 0;
28463 mid = (mid + Math.imul(al8, bh9)) | 0;
28464 mid = (mid + Math.imul(ah8, bl9)) | 0;
28465 hi = (hi + Math.imul(ah8, bh9)) | 0;
28466 var w17 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28467 c = (((hi + (mid >>> 13)) | 0) + (w17 >>> 26)) | 0;
28468 w17 &= 0x3ffffff;
28469 /* k = 18 */
28470 lo = Math.imul(al9, bl9);
28471 mid = Math.imul(al9, bh9);
28472 mid = (mid + Math.imul(ah9, bl9)) | 0;
28473 hi = Math.imul(ah9, bh9);
28474 var w18 = (((c + lo) | 0) + ((mid & 0x1fff) << 13)) | 0;
28475 c = (((hi + (mid >>> 13)) | 0) + (w18 >>> 26)) | 0;
28476 w18 &= 0x3ffffff;
28477 o[0] = w0;
28478 o[1] = w1;
28479 o[2] = w2;
28480 o[3] = w3;
28481 o[4] = w4;
28482 o[5] = w5;
28483 o[6] = w6;
28484 o[7] = w7;
28485 o[8] = w8;
28486 o[9] = w9;
28487 o[10] = w10;
28488 o[11] = w11;
28489 o[12] = w12;
28490 o[13] = w13;
28491 o[14] = w14;
28492 o[15] = w15;
28493 o[16] = w16;
28494 o[17] = w17;
28495 o[18] = w18;
28496 if (c !== 0) {
28497 o[19] = c;
28498 out.length++;
ab78acc6 28499 }
8b095871
IC
28500 return out;
28501 };
28502
28503 // Polyfill comb
28504 if (!Math.imul) {
28505 comb10MulTo = smallMulTo;
28506 }
28507
28508 function bigMulTo (self, num, out) {
28509 out.negative = num.negative ^ self.negative;
28510 out.length = self.length + num.length;
28511
28512 var carry = 0;
28513 var hncarry = 0;
28514 for (var k = 0; k < out.length - 1; k++) {
28515 // Sum all words with the same `i + j = k` and accumulate `ncarry`,
28516 // note that ncarry could be >= 0x3ffffff
28517 var ncarry = hncarry;
28518 hncarry = 0;
28519 var rword = carry & 0x3ffffff;
28520 var maxJ = Math.min(k, num.length - 1);
28521 for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {
28522 var i = k - j;
28523 var a = self.words[i] | 0;
28524 var b = num.words[j] | 0;
28525 var r = a * b;
28526
28527 var lo = r & 0x3ffffff;
28528 ncarry = (ncarry + ((r / 0x4000000) | 0)) | 0;
28529 lo = (lo + rword) | 0;
28530 rword = lo & 0x3ffffff;
28531 ncarry = (ncarry + (lo >>> 26)) | 0;
28532
28533 hncarry += ncarry >>> 26;
28534 ncarry &= 0x3ffffff;
28535 }
28536 out.words[k] = rword;
28537 carry = ncarry;
28538 ncarry = hncarry;
28539 }
28540 if (carry !== 0) {
28541 out.words[k] = carry;
28542 } else {
28543 out.length--;
ab78acc6 28544 }
8b095871
IC
28545
28546 return out.strip();
ab78acc6 28547 }
8b095871
IC
28548
28549 function jumboMulTo (self, num, out) {
28550 var fftm = new FFTM();
28551 return fftm.mulp(self, num, out);
ab78acc6 28552 }
8b095871
IC
28553
28554 BN.prototype.mulTo = function mulTo (num, out) {
28555 var res;
28556 var len = this.length + num.length;
28557 if (this.length === 10 && num.length === 10) {
28558 res = comb10MulTo(this, num, out);
28559 } else if (len < 63) {
28560 res = smallMulTo(this, num, out);
28561 } else if (len < 1024) {
28562 res = bigMulTo(this, num, out);
ab78acc6 28563 } else {
8b095871 28564 res = jumboMulTo(this, num, out);
ab78acc6 28565 }
8b095871
IC
28566
28567 return res;
28568 };
28569
28570 // Cooley-Tukey algorithm for FFT
28571 // slightly revisited to rely on looping instead of recursion
28572
28573 function FFTM (x, y) {
28574 this.x = x;
28575 this.y = y;
ab78acc6 28576 }
8b095871
IC
28577
28578 FFTM.prototype.makeRBT = function makeRBT (N) {
28579 var t = new Array(N);
28580 var l = BN.prototype._countBits(N) - 1;
28581 for (var i = 0; i < N; i++) {
28582 t[i] = this.revBin(i, l, N);
28583 }
28584
28585 return t;
28586 };
28587
28588 // Returns binary-reversed representation of `x`
28589 FFTM.prototype.revBin = function revBin (x, l, N) {
28590 if (x === 0 || x === N - 1) return x;
28591
28592 var rb = 0;
28593 for (var i = 0; i < l; i++) {
28594 rb |= (x & 1) << (l - i - 1);
28595 x >>= 1;
28596 }
28597
28598 return rb;
28599 };
28600
28601 // Performs "tweedling" phase, therefore 'emulating'
28602 // behaviour of the recursive algorithm
28603 FFTM.prototype.permute = function permute (rbt, rws, iws, rtws, itws, N) {
28604 for (var i = 0; i < N; i++) {
28605 rtws[i] = rws[rbt[i]];
28606 itws[i] = iws[rbt[i]];
28607 }
28608 };
28609
28610 FFTM.prototype.transform = function transform (rws, iws, rtws, itws, N, rbt) {
28611 this.permute(rbt, rws, iws, rtws, itws, N);
28612
28613 for (var s = 1; s < N; s <<= 1) {
28614 var l = s << 1;
28615
28616 var rtwdf = Math.cos(2 * Math.PI / l);
28617 var itwdf = Math.sin(2 * Math.PI / l);
28618
28619 for (var p = 0; p < N; p += l) {
28620 var rtwdf_ = rtwdf;
28621 var itwdf_ = itwdf;
28622
28623 for (var j = 0; j < s; j++) {
28624 var re = rtws[p + j];
28625 var ie = itws[p + j];
28626
28627 var ro = rtws[p + j + s];
28628 var io = itws[p + j + s];
28629
28630 var rx = rtwdf_ * ro - itwdf_ * io;
28631
28632 io = rtwdf_ * io + itwdf_ * ro;
28633 ro = rx;
28634
28635 rtws[p + j] = re + ro;
28636 itws[p + j] = ie + io;
28637
28638 rtws[p + j + s] = re - ro;
28639 itws[p + j + s] = ie - io;
28640
28641 /* jshint maxdepth : false */
28642 if (j !== l) {
28643 rx = rtwdf * rtwdf_ - itwdf * itwdf_;
28644
28645 itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;
28646 rtwdf_ = rx;
28647 }
28648 }
28649 }
ab78acc6 28650 }
8b095871
IC
28651 };
28652
28653 FFTM.prototype.guessLen13b = function guessLen13b (n, m) {
28654 var N = Math.max(m, n) | 1;
28655 var odd = N & 1;
28656 var i = 0;
28657 for (N = N / 2 | 0; N; N = N >>> 1) {
28658 i++;
ab78acc6 28659 }
ebd8d4e8 28660
8b095871
IC
28661 return 1 << i + 1 + odd;
28662 };
ebd8d4e8 28663
8b095871
IC
28664 FFTM.prototype.conjugate = function conjugate (rws, iws, N) {
28665 if (N <= 1) return;
ebd8d4e8 28666
8b095871
IC
28667 for (var i = 0; i < N / 2; i++) {
28668 var t = rws[i];
ebd8d4e8 28669
8b095871
IC
28670 rws[i] = rws[N - i - 1];
28671 rws[N - i - 1] = t;
ebd8d4e8 28672
8b095871 28673 t = iws[i];
ebd8d4e8 28674
8b095871
IC
28675 iws[i] = -iws[N - i - 1];
28676 iws[N - i - 1] = -t;
28677 }
28678 };
ebd8d4e8 28679
8b095871
IC
28680 FFTM.prototype.normalize13b = function normalize13b (ws, N) {
28681 var carry = 0;
28682 for (var i = 0; i < N / 2; i++) {
28683 var w = Math.round(ws[2 * i + 1] / N) * 0x2000 +
28684 Math.round(ws[2 * i] / N) +
28685 carry;
ebd8d4e8 28686
8b095871 28687 ws[i] = w & 0x3ffffff;
ebd8d4e8 28688
8b095871
IC
28689 if (w < 0x4000000) {
28690 carry = 0;
28691 } else {
28692 carry = w / 0x4000000 | 0;
28693 }
28694 }
ebd8d4e8 28695
8b095871
IC
28696 return ws;
28697 };
ebd8d4e8 28698
8b095871
IC
28699 FFTM.prototype.convert13b = function convert13b (ws, len, rws, N) {
28700 var carry = 0;
28701 for (var i = 0; i < len; i++) {
28702 carry = carry + (ws[i] | 0);
ebd8d4e8 28703
8b095871
IC
28704 rws[2 * i] = carry & 0x1fff; carry = carry >>> 13;
28705 rws[2 * i + 1] = carry & 0x1fff; carry = carry >>> 13;
28706 }
ebd8d4e8 28707
8b095871
IC
28708 // Pad with zeroes
28709 for (i = 2 * len; i < N; ++i) {
28710 rws[i] = 0;
28711 }
ebd8d4e8 28712
8b095871
IC
28713 assert(carry === 0);
28714 assert((carry & ~0x1fff) === 0);
28715 };
ebd8d4e8 28716
8b095871
IC
28717 FFTM.prototype.stub = function stub (N) {
28718 var ph = new Array(N);
28719 for (var i = 0; i < N; i++) {
28720 ph[i] = 0;
28721 }
ebd8d4e8 28722
8b095871
IC
28723 return ph;
28724 };
ebd8d4e8 28725
8b095871
IC
28726 FFTM.prototype.mulp = function mulp (x, y, out) {
28727 var N = 2 * this.guessLen13b(x.length, y.length);
ebd8d4e8 28728
8b095871 28729 var rbt = this.makeRBT(N);
ebd8d4e8 28730
8b095871 28731 var _ = this.stub(N);
ebd8d4e8 28732
8b095871
IC
28733 var rws = new Array(N);
28734 var rwst = new Array(N);
28735 var iwst = new Array(N);
ebd8d4e8 28736
8b095871
IC
28737 var nrws = new Array(N);
28738 var nrwst = new Array(N);
28739 var niwst = new Array(N);
ebd8d4e8 28740
8b095871
IC
28741 var rmws = out.words;
28742 rmws.length = N;
ebd8d4e8 28743
8b095871
IC
28744 this.convert13b(x.words, x.length, rws, N);
28745 this.convert13b(y.words, y.length, nrws, N);
ebd8d4e8 28746
8b095871
IC
28747 this.transform(rws, _, rwst, iwst, N, rbt);
28748 this.transform(nrws, _, nrwst, niwst, N, rbt);
ebd8d4e8 28749
8b095871
IC
28750 for (var i = 0; i < N; i++) {
28751 var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];
28752 iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];
28753 rwst[i] = rx;
28754 }
ebd8d4e8 28755
8b095871
IC
28756 this.conjugate(rwst, iwst, N);
28757 this.transform(rwst, iwst, rmws, _, N, rbt);
28758 this.conjugate(rmws, _, N);
28759 this.normalize13b(rmws, N);
ebd8d4e8 28760
8b095871
IC
28761 out.negative = x.negative ^ y.negative;
28762 out.length = x.length + y.length;
28763 return out.strip();
28764 };
ebd8d4e8 28765
8b095871
IC
28766 // Multiply `this` by `num`
28767 BN.prototype.mul = function mul (num) {
28768 var out = new BN(null);
28769 out.words = new Array(this.length + num.length);
28770 return this.mulTo(num, out);
28771 };
ab78acc6 28772
8b095871
IC
28773 // Multiply employing FFT
28774 BN.prototype.mulf = function mulf (num) {
28775 var out = new BN(null);
28776 out.words = new Array(this.length + num.length);
28777 return jumboMulTo(this, num, out);
28778 };
ebd8d4e8 28779
8b095871
IC
28780 // In-place Multiplication
28781 BN.prototype.imul = function imul (num) {
28782 return this.clone().mulTo(num, this);
28783 };
ab78acc6 28784
8b095871
IC
28785 BN.prototype.imuln = function imuln (num) {
28786 assert(typeof num === 'number');
28787 assert(num < 0x4000000);
ab78acc6 28788
8b095871
IC
28789 // Carry
28790 var carry = 0;
28791 for (var i = 0; i < this.length; i++) {
28792 var w = (this.words[i] | 0) * num;
28793 var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);
28794 carry >>= 26;
28795 carry += (w / 0x4000000) | 0;
28796 // NOTE: lo is 27bit maximum
28797 carry += lo >>> 26;
28798 this.words[i] = lo & 0x3ffffff;
28799 }
ab78acc6 28800
8b095871
IC
28801 if (carry !== 0) {
28802 this.words[i] = carry;
28803 this.length++;
28804 }
ab78acc6 28805
8b095871
IC
28806 return this;
28807 };
ab78acc6 28808
8b095871
IC
28809 BN.prototype.muln = function muln (num) {
28810 return this.clone().imuln(num);
28811 };
ebd8d4e8 28812
8b095871
IC
28813 // `this` * `this`
28814 BN.prototype.sqr = function sqr () {
28815 return this.mul(this);
28816 };
ebd8d4e8 28817
8b095871
IC
28818 // `this` * `this` in-place
28819 BN.prototype.isqr = function isqr () {
28820 return this.imul(this.clone());
28821 };
ab78acc6 28822
8b095871
IC
28823 // Math.pow(`this`, `num`)
28824 BN.prototype.pow = function pow (num) {
28825 var w = toBitArray(num);
28826 if (w.length === 0) return new BN(1);
ab78acc6 28827
8b095871
IC
28828 // Skip leading zeroes
28829 var res = this;
28830 for (var i = 0; i < w.length; i++, res = res.sqr()) {
28831 if (w[i] !== 0) break;
28832 }
ebd8d4e8 28833
8b095871
IC
28834 if (++i < w.length) {
28835 for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {
28836 if (w[i] === 0) continue;
ebd8d4e8 28837
8b095871
IC
28838 res = res.mul(q);
28839 }
ab78acc6
IC
28840 }
28841
8b095871
IC
28842 return res;
28843 };
ab78acc6 28844
8b095871
IC
28845 // Shift-left in-place
28846 BN.prototype.iushln = function iushln (bits) {
28847 assert(typeof bits === 'number' && bits >= 0);
28848 var r = bits % 26;
28849 var s = (bits - r) / 26;
28850 var carryMask = (0x3ffffff >>> (26 - r)) << (26 - r);
28851 var i;
28852
28853 if (r !== 0) {
28854 var carry = 0;
28855
28856 for (i = 0; i < this.length; i++) {
28857 var newCarry = this.words[i] & carryMask;
28858 var c = ((this.words[i] | 0) - newCarry) << r;
28859 this.words[i] = c | carry;
28860 carry = newCarry >>> (26 - r);
28861 }
28862
28863 if (carry) {
28864 this.words[i] = carry;
28865 this.length++;
28866 }
ab78acc6 28867 }
ebd8d4e8 28868
8b095871
IC
28869 if (s !== 0) {
28870 for (i = this.length - 1; i >= 0; i--) {
28871 this.words[i + s] = this.words[i];
28872 }
ebd8d4e8 28873
8b095871
IC
28874 for (i = 0; i < s; i++) {
28875 this.words[i] = 0;
28876 }
ebd8d4e8 28877
8b095871
IC
28878 this.length += s;
28879 }
ebd8d4e8 28880
8b095871
IC
28881 return this.strip();
28882 };
ebd8d4e8 28883
8b095871
IC
28884 BN.prototype.ishln = function ishln (bits) {
28885 // TODO(indutny): implement me
28886 assert(this.negative === 0);
28887 return this.iushln(bits);
28888 };
ebd8d4e8 28889
8b095871
IC
28890 // Shift-right in-place
28891 // NOTE: `hint` is a lowest bit before trailing zeroes
28892 // NOTE: if `extended` is present - it will be filled with destroyed bits
28893 BN.prototype.iushrn = function iushrn (bits, hint, extended) {
28894 assert(typeof bits === 'number' && bits >= 0);
28895 var h;
28896 if (hint) {
28897 h = (hint - (hint % 26)) / 26;
28898 } else {
28899 h = 0;
28900 }
ebd8d4e8 28901
8b095871
IC
28902 var r = bits % 26;
28903 var s = Math.min((bits - r) / 26, this.length);
28904 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
28905 var maskedWords = extended;
28906
28907 h -= s;
28908 h = Math.max(0, h);
28909
28910 // Extended mode, copy masked part
28911 if (maskedWords) {
28912 for (var i = 0; i < s; i++) {
28913 maskedWords.words[i] = this.words[i];
28914 }
28915 maskedWords.length = s;
ab78acc6 28916 }
ebd8d4e8 28917
8b095871
IC
28918 if (s === 0) {
28919 // No-op, we should not move anything at all
28920 } else if (this.length > s) {
28921 this.length -= s;
28922 for (i = 0; i < this.length; i++) {
28923 this.words[i] = this.words[i + s];
28924 }
28925 } else {
28926 this.words[0] = 0;
28927 this.length = 1;
28928 }
ab78acc6 28929
8b095871
IC
28930 var carry = 0;
28931 for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {
28932 var word = this.words[i] | 0;
28933 this.words[i] = (carry << (26 - r)) | (word >>> r);
28934 carry = word & mask;
ab78acc6 28935 }
ebd8d4e8 28936
8b095871
IC
28937 // Push carried bits as a mask
28938 if (maskedWords && carry !== 0) {
28939 maskedWords.words[maskedWords.length++] = carry;
28940 }
28941
28942 if (this.length === 0) {
28943 this.words[0] = 0;
28944 this.length = 1;
28945 }
28946
28947 return this.strip();
28948 };
28949
28950 BN.prototype.ishrn = function ishrn (bits, hint, extended) {
28951 // TODO(indutny): implement me
28952 assert(this.negative === 0);
28953 return this.iushrn(bits, hint, extended);
28954 };
28955
28956 // Shift-left
28957 BN.prototype.shln = function shln (bits) {
28958 return this.clone().ishln(bits);
28959 };
28960
28961 BN.prototype.ushln = function ushln (bits) {
28962 return this.clone().iushln(bits);
28963 };
28964
28965 // Shift-right
28966 BN.prototype.shrn = function shrn (bits) {
28967 return this.clone().ishrn(bits);
28968 };
ebd8d4e8 28969
8b095871
IC
28970 BN.prototype.ushrn = function ushrn (bits) {
28971 return this.clone().iushrn(bits);
28972 };
ebd8d4e8 28973
8b095871
IC
28974 // Test if n bit is set
28975 BN.prototype.testn = function testn (bit) {
28976 assert(typeof bit === 'number' && bit >= 0);
28977 var r = bit % 26;
28978 var s = (bit - r) / 26;
28979 var q = 1 << r;
ebd8d4e8 28980
8b095871
IC
28981 // Fast case: bit is much higher than all existing words
28982 if (this.length <= s) return false;
ab78acc6 28983
8b095871
IC
28984 // Check bit and return
28985 var w = this.words[s];
ab78acc6 28986
8b095871
IC
28987 return !!(w & q);
28988 };
ab78acc6 28989
8b095871
IC
28990 // Return only lowers bits of number (in-place)
28991 BN.prototype.imaskn = function imaskn (bits) {
28992 assert(typeof bits === 'number' && bits >= 0);
28993 var r = bits % 26;
28994 var s = (bits - r) / 26;
ab78acc6 28995
8b095871 28996 assert(this.negative === 0, 'imaskn works only with positive numbers');
ab78acc6 28997
8b095871
IC
28998 if (this.length <= s) {
28999 return this;
29000 }
ab78acc6 29001
8b095871
IC
29002 if (r !== 0) {
29003 s++;
29004 }
29005 this.length = Math.min(s, this.length);
ab78acc6 29006
8b095871
IC
29007 if (r !== 0) {
29008 var mask = 0x3ffffff ^ ((0x3ffffff >>> r) << r);
29009 this.words[this.length - 1] &= mask;
29010 }
ab78acc6 29011
8b095871
IC
29012 return this.strip();
29013 };
ab78acc6 29014
8b095871
IC
29015 // Return only lowers bits of number
29016 BN.prototype.maskn = function maskn (bits) {
29017 return this.clone().imaskn(bits);
29018 };
ebd8d4e8 29019
8b095871
IC
29020 // Add plain number `num` to `this`
29021 BN.prototype.iaddn = function iaddn (num) {
29022 assert(typeof num === 'number');
29023 assert(num < 0x4000000);
29024 if (num < 0) return this.isubn(-num);
29025
29026 // Possible sign change
29027 if (this.negative !== 0) {
29028 if (this.length === 1 && (this.words[0] | 0) < num) {
29029 this.words[0] = num - (this.words[0] | 0);
29030 this.negative = 0;
29031 return this;
29032 }
ebd8d4e8 29033
8b095871
IC
29034 this.negative = 0;
29035 this.isubn(num);
29036 this.negative = 1;
29037 return this;
29038 }
ebd8d4e8 29039
8b095871
IC
29040 // Add without checks
29041 return this._iaddn(num);
29042 };
ebd8d4e8 29043
8b095871
IC
29044 BN.prototype._iaddn = function _iaddn (num) {
29045 this.words[0] += num;
ebd8d4e8 29046
8b095871
IC
29047 // Carry
29048 for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {
29049 this.words[i] -= 0x4000000;
29050 if (i === this.length - 1) {
29051 this.words[i + 1] = 1;
29052 } else {
29053 this.words[i + 1]++;
29054 }
29055 }
29056 this.length = Math.max(this.length, i + 1);
ebd8d4e8 29057
8b095871
IC
29058 return this;
29059 };
ebd8d4e8 29060
8b095871
IC
29061 // Subtract plain number `num` from `this`
29062 BN.prototype.isubn = function isubn (num) {
29063 assert(typeof num === 'number');
29064 assert(num < 0x4000000);
29065 if (num < 0) return this.iaddn(-num);
ebd8d4e8 29066
8b095871
IC
29067 if (this.negative !== 0) {
29068 this.negative = 0;
29069 this.iaddn(num);
29070 this.negative = 1;
29071 return this;
29072 }
ebd8d4e8 29073
8b095871 29074 this.words[0] -= num;
ab78acc6 29075
8b095871
IC
29076 if (this.length === 1 && this.words[0] < 0) {
29077 this.words[0] = -this.words[0];
29078 this.negative = 1;
29079 } else {
29080 // Carry
29081 for (var i = 0; i < this.length && this.words[i] < 0; i++) {
29082 this.words[i] += 0x4000000;
29083 this.words[i + 1] -= 1;
29084 }
29085 }
ebd8d4e8 29086
8b095871
IC
29087 return this.strip();
29088 };
ab78acc6 29089
8b095871
IC
29090 BN.prototype.addn = function addn (num) {
29091 return this.clone().iaddn(num);
29092 };
ab78acc6 29093
8b095871
IC
29094 BN.prototype.subn = function subn (num) {
29095 return this.clone().isubn(num);
29096 };
ab78acc6 29097
8b095871
IC
29098 BN.prototype.iabs = function iabs () {
29099 this.negative = 0;
ab78acc6 29100
8b095871
IC
29101 return this;
29102 };
ab78acc6 29103
8b095871
IC
29104 BN.prototype.abs = function abs () {
29105 return this.clone().iabs();
29106 };
ab78acc6 29107
8b095871
IC
29108 BN.prototype._ishlnsubmul = function _ishlnsubmul (num, mul, shift) {
29109 var len = num.length + shift;
29110 var i;
ab78acc6 29111
8b095871 29112 this._expand(len);
ab78acc6 29113
8b095871
IC
29114 var w;
29115 var carry = 0;
29116 for (i = 0; i < num.length; i++) {
29117 w = (this.words[i + shift] | 0) + carry;
29118 var right = (num.words[i] | 0) * mul;
29119 w -= right & 0x3ffffff;
29120 carry = (w >> 26) - ((right / 0x4000000) | 0);
29121 this.words[i + shift] = w & 0x3ffffff;
29122 }
29123 for (; i < this.length - shift; i++) {
29124 w = (this.words[i + shift] | 0) + carry;
29125 carry = w >> 26;
29126 this.words[i + shift] = w & 0x3ffffff;
29127 }
ebd8d4e8 29128
8b095871 29129 if (carry === 0) return this.strip();
ab78acc6 29130
8b095871
IC
29131 // Subtraction overflow
29132 assert(carry === -1);
29133 carry = 0;
29134 for (i = 0; i < this.length; i++) {
29135 w = -(this.words[i] | 0) + carry;
29136 carry = w >> 26;
29137 this.words[i] = w & 0x3ffffff;
29138 }
29139 this.negative = 1;
ab78acc6 29140
8b095871
IC
29141 return this.strip();
29142 };
ab78acc6 29143
8b095871
IC
29144 BN.prototype._wordDiv = function _wordDiv (num, mode) {
29145 var shift = this.length - num.length;
ebd8d4e8 29146
8b095871
IC
29147 var a = this.clone();
29148 var b = num;
ab78acc6 29149
8b095871
IC
29150 // Normalize
29151 var bhi = b.words[b.length - 1] | 0;
29152 var bhiBits = this._countBits(bhi);
29153 shift = 26 - bhiBits;
29154 if (shift !== 0) {
29155 b = b.ushln(shift);
29156 a.iushln(shift);
29157 bhi = b.words[b.length - 1] | 0;
29158 }
ebd8d4e8 29159
8b095871
IC
29160 // Initialize quotient
29161 var m = a.length - b.length;
29162 var q;
ab78acc6 29163
8b095871
IC
29164 if (mode !== 'mod') {
29165 q = new BN(null);
29166 q.length = m + 1;
29167 q.words = new Array(q.length);
29168 for (var i = 0; i < q.length; i++) {
29169 q.words[i] = 0;
29170 }
29171 }
ebd8d4e8 29172
8b095871
IC
29173 var diff = a.clone()._ishlnsubmul(b, 1, m);
29174 if (diff.negative === 0) {
29175 a = diff;
29176 if (q) {
29177 q.words[m] = 1;
29178 }
29179 }
ebd8d4e8 29180
8b095871
IC
29181 for (var j = m - 1; j >= 0; j--) {
29182 var qj = (a.words[b.length + j] | 0) * 0x4000000 +
29183 (a.words[b.length + j - 1] | 0);
ebd8d4e8 29184
8b095871
IC
29185 // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max
29186 // (0x7ffffff)
29187 qj = Math.min((qj / bhi) | 0, 0x3ffffff);
ebd8d4e8 29188
8b095871
IC
29189 a._ishlnsubmul(b, qj, j);
29190 while (a.negative !== 0) {
29191 qj--;
29192 a.negative = 0;
29193 a._ishlnsubmul(b, 1, j);
29194 if (!a.isZero()) {
29195 a.negative ^= 1;
29196 }
29197 }
29198 if (q) {
29199 q.words[j] = qj;
29200 }
29201 }
29202 if (q) {
29203 q.strip();
29204 }
29205 a.strip();
ebd8d4e8 29206
8b095871
IC
29207 // Denormalize
29208 if (mode !== 'div' && shift !== 0) {
29209 a.iushrn(shift);
29210 }
ebd8d4e8 29211
8b095871
IC
29212 return {
29213 div: q || null,
29214 mod: a
29215 };
29216 };
ebd8d4e8 29217
8b095871
IC
29218 // NOTE: 1) `mode` can be set to `mod` to request mod only,
29219 // to `div` to request div only, or be absent to
29220 // request both div & mod
29221 // 2) `positive` is true if unsigned mod is requested
29222 BN.prototype.divmod = function divmod (num, mode, positive) {
29223 assert(!num.isZero());
29224
29225 if (this.isZero()) {
29226 return {
29227 div: new BN(0),
29228 mod: new BN(0)
29229 };
29230 }
ebd8d4e8 29231
8b095871
IC
29232 var div, mod, res;
29233 if (this.negative !== 0 && num.negative === 0) {
29234 res = this.neg().divmod(num, mode);
ebd8d4e8 29235
8b095871
IC
29236 if (mode !== 'mod') {
29237 div = res.div.neg();
29238 }
ebd8d4e8 29239
8b095871
IC
29240 if (mode !== 'div') {
29241 mod = res.mod.neg();
29242 if (positive && mod.negative !== 0) {
29243 mod.iadd(num);
29244 }
29245 }
ebd8d4e8 29246
8b095871
IC
29247 return {
29248 div: div,
29249 mod: mod
29250 };
29251 }
ebd8d4e8 29252
8b095871
IC
29253 if (this.negative === 0 && num.negative !== 0) {
29254 res = this.divmod(num.neg(), mode);
ebd8d4e8 29255
8b095871
IC
29256 if (mode !== 'mod') {
29257 div = res.div.neg();
29258 }
ebd8d4e8 29259
8b095871
IC
29260 return {
29261 div: div,
29262 mod: res.mod
29263 };
29264 }
ebd8d4e8 29265
8b095871
IC
29266 if ((this.negative & num.negative) !== 0) {
29267 res = this.neg().divmod(num.neg(), mode);
ebd8d4e8 29268
8b095871
IC
29269 if (mode !== 'div') {
29270 mod = res.mod.neg();
29271 if (positive && mod.negative !== 0) {
29272 mod.isub(num);
29273 }
29274 }
ebd8d4e8 29275
8b095871
IC
29276 return {
29277 div: res.div,
29278 mod: mod
29279 };
29280 }
ebd8d4e8 29281
8b095871 29282 // Both numbers are positive at this point
ebd8d4e8 29283
8b095871
IC
29284 // Strip both numbers to approximate shift value
29285 if (num.length > this.length || this.cmp(num) < 0) {
29286 return {
29287 div: new BN(0),
29288 mod: this
29289 };
29290 }
ebd8d4e8 29291
8b095871
IC
29292 // Very short reduction
29293 if (num.length === 1) {
29294 if (mode === 'div') {
29295 return {
29296 div: this.divn(num.words[0]),
29297 mod: null
29298 };
29299 }
ebd8d4e8 29300
8b095871
IC
29301 if (mode === 'mod') {
29302 return {
29303 div: null,
29304 mod: new BN(this.modn(num.words[0]))
29305 };
29306 }
ebd8d4e8 29307
8b095871
IC
29308 return {
29309 div: this.divn(num.words[0]),
29310 mod: new BN(this.modn(num.words[0]))
29311 };
29312 }
ebd8d4e8 29313
8b095871
IC
29314 return this._wordDiv(num, mode);
29315 };
ab78acc6 29316
8b095871
IC
29317 // Find `this` / `num`
29318 BN.prototype.div = function div (num) {
29319 return this.divmod(num, 'div', false).div;
29320 };
ab78acc6 29321
8b095871
IC
29322 // Find `this` % `num`
29323 BN.prototype.mod = function mod (num) {
29324 return this.divmod(num, 'mod', false).mod;
29325 };
ab78acc6 29326
8b095871
IC
29327 BN.prototype.umod = function umod (num) {
29328 return this.divmod(num, 'mod', true).mod;
29329 };
ebd8d4e8 29330
8b095871
IC
29331 // Find Round(`this` / `num`)
29332 BN.prototype.divRound = function divRound (num) {
29333 var dm = this.divmod(num);
ebd8d4e8 29334
8b095871
IC
29335 // Fast case - exact division
29336 if (dm.mod.isZero()) return dm.div;
ebd8d4e8 29337
8b095871 29338 var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;
ebd8d4e8 29339
8b095871
IC
29340 var half = num.ushrn(1);
29341 var r2 = num.andln(1);
29342 var cmp = mod.cmp(half);
ebd8d4e8 29343
8b095871
IC
29344 // Round down
29345 if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div;
ebd8d4e8 29346
8b095871
IC
29347 // Round up
29348 return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);
29349 };
ab78acc6 29350
8b095871
IC
29351 BN.prototype.modn = function modn (num) {
29352 assert(num <= 0x3ffffff);
29353 var p = (1 << 26) % num;
ab78acc6 29354
8b095871
IC
29355 var acc = 0;
29356 for (var i = this.length - 1; i >= 0; i--) {
29357 acc = (p * acc + (this.words[i] | 0)) % num;
ab78acc6 29358 }
ab78acc6 29359
8b095871
IC
29360 return acc;
29361 };
29362
29363 // In-place division by number
29364 BN.prototype.idivn = function idivn (num) {
29365 assert(num <= 0x3ffffff);
29366
29367 var carry = 0;
29368 for (var i = this.length - 1; i >= 0; i--) {
29369 var w = (this.words[i] | 0) + carry * 0x4000000;
29370 this.words[i] = (w / num) | 0;
29371 carry = w % num;
ebd8d4e8 29372 }
ebd8d4e8 29373
8b095871
IC
29374 return this.strip();
29375 };
ab78acc6 29376
8b095871
IC
29377 BN.prototype.divn = function divn (num) {
29378 return this.clone().idivn(num);
29379 };
ebd8d4e8 29380
8b095871
IC
29381 BN.prototype.egcd = function egcd (p) {
29382 assert(p.negative === 0);
29383 assert(!p.isZero());
ebd8d4e8 29384
8b095871
IC
29385 var x = this;
29386 var y = p.clone();
29387
29388 if (x.negative !== 0) {
29389 x = x.umod(p);
29390 } else {
29391 x = x.clone();
29392 }
29393
29394 // A * x + B * y = x
29395 var A = new BN(1);
29396 var B = new BN(0);
29397
29398 // C * x + D * y = y
29399 var C = new BN(0);
29400 var D = new BN(1);
29401
29402 var g = 0;
29403
29404 while (x.isEven() && y.isEven()) {
29405 x.iushrn(1);
29406 y.iushrn(1);
29407 ++g;
29408 }
ebd8d4e8 29409
8b095871
IC
29410 var yp = y.clone();
29411 var xp = x.clone();
ebd8d4e8 29412
8b095871
IC
29413 while (!x.isZero()) {
29414 for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
29415 if (i > 0) {
29416 x.iushrn(i);
29417 while (i-- > 0) {
29418 if (A.isOdd() || B.isOdd()) {
29419 A.iadd(yp);
29420 B.isub(xp);
29421 }
ebd8d4e8 29422
8b095871
IC
29423 A.iushrn(1);
29424 B.iushrn(1);
29425 }
29426 }
ebd8d4e8 29427
8b095871
IC
29428 for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
29429 if (j > 0) {
29430 y.iushrn(j);
29431 while (j-- > 0) {
29432 if (C.isOdd() || D.isOdd()) {
29433 C.iadd(yp);
29434 D.isub(xp);
29435 }
ab78acc6 29436
8b095871
IC
29437 C.iushrn(1);
29438 D.iushrn(1);
29439 }
29440 }
ebd8d4e8 29441
8b095871
IC
29442 if (x.cmp(y) >= 0) {
29443 x.isub(y);
29444 A.isub(C);
29445 B.isub(D);
29446 } else {
29447 y.isub(x);
29448 C.isub(A);
29449 D.isub(B);
29450 }
29451 }
ebd8d4e8 29452
8b095871
IC
29453 return {
29454 a: C,
29455 b: D,
29456 gcd: y.iushln(g)
29457 };
29458 };
ebd8d4e8 29459
8b095871
IC
29460 // This is reduced incarnation of the binary EEA
29461 // above, designated to invert members of the
29462 // _prime_ fields F(p) at a maximal speed
29463 BN.prototype._invmp = function _invmp (p) {
29464 assert(p.negative === 0);
29465 assert(!p.isZero());
ebd8d4e8 29466
8b095871
IC
29467 var a = this;
29468 var b = p.clone();
ebd8d4e8 29469
8b095871
IC
29470 if (a.negative !== 0) {
29471 a = a.umod(p);
29472 } else {
29473 a = a.clone();
29474 }
ebd8d4e8 29475
8b095871
IC
29476 var x1 = new BN(1);
29477 var x2 = new BN(0);
ebd8d4e8 29478
8b095871 29479 var delta = b.clone();
ebd8d4e8 29480
8b095871
IC
29481 while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {
29482 for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1);
29483 if (i > 0) {
29484 a.iushrn(i);
29485 while (i-- > 0) {
29486 if (x1.isOdd()) {
29487 x1.iadd(delta);
29488 }
ebd8d4e8 29489
8b095871
IC
29490 x1.iushrn(1);
29491 }
29492 }
ab78acc6 29493
8b095871
IC
29494 for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1);
29495 if (j > 0) {
29496 b.iushrn(j);
29497 while (j-- > 0) {
29498 if (x2.isOdd()) {
29499 x2.iadd(delta);
29500 }
ebd8d4e8 29501
8b095871
IC
29502 x2.iushrn(1);
29503 }
29504 }
ebd8d4e8 29505
8b095871
IC
29506 if (a.cmp(b) >= 0) {
29507 a.isub(b);
29508 x1.isub(x2);
29509 } else {
29510 b.isub(a);
29511 x2.isub(x1);
29512 }
29513 }
ebd8d4e8 29514
8b095871
IC
29515 var res;
29516 if (a.cmpn(1) === 0) {
29517 res = x1;
29518 } else {
29519 res = x2;
29520 }
ebd8d4e8 29521
8b095871
IC
29522 if (res.cmpn(0) < 0) {
29523 res.iadd(p);
ab78acc6
IC
29524 }
29525
8b095871
IC
29526 return res;
29527 };
ebd8d4e8 29528
8b095871
IC
29529 BN.prototype.gcd = function gcd (num) {
29530 if (this.isZero()) return num.abs();
29531 if (num.isZero()) return this.abs();
29532
29533 var a = this.clone();
29534 var b = num.clone();
29535 a.negative = 0;
29536 b.negative = 0;
29537
29538 // Remove common factor of two
29539 for (var shift = 0; a.isEven() && b.isEven(); shift++) {
29540 a.iushrn(1);
29541 b.iushrn(1);
ab78acc6 29542 }
ab78acc6 29543
8b095871
IC
29544 do {
29545 while (a.isEven()) {
29546 a.iushrn(1);
29547 }
29548 while (b.isEven()) {
29549 b.iushrn(1);
29550 }
ebd8d4e8 29551
8b095871
IC
29552 var r = a.cmp(b);
29553 if (r < 0) {
29554 // Swap `a` and `b` to make `a` always bigger than `b`
29555 var t = a;
29556 a = b;
29557 b = t;
29558 } else if (r === 0 || b.cmpn(1) === 0) {
29559 break;
29560 }
ab78acc6 29561
8b095871
IC
29562 a.isub(b);
29563 } while (true);
ab78acc6 29564
8b095871
IC
29565 return b.iushln(shift);
29566 };
ab78acc6 29567
8b095871
IC
29568 // Invert number in the field F(num)
29569 BN.prototype.invm = function invm (num) {
29570 return this.egcd(num).a.umod(num);
29571 };
ebd8d4e8 29572
8b095871
IC
29573 BN.prototype.isEven = function isEven () {
29574 return (this.words[0] & 1) === 0;
29575 };
ab78acc6 29576
8b095871
IC
29577 BN.prototype.isOdd = function isOdd () {
29578 return (this.words[0] & 1) === 1;
29579 };
ebd8d4e8 29580
8b095871
IC
29581 // And first word and num
29582 BN.prototype.andln = function andln (num) {
29583 return this.words[0] & num;
29584 };
ebd8d4e8 29585
8b095871
IC
29586 // Increment at the bit position in-line
29587 BN.prototype.bincn = function bincn (bit) {
29588 assert(typeof bit === 'number');
29589 var r = bit % 26;
29590 var s = (bit - r) / 26;
29591 var q = 1 << r;
29592
29593 // Fast case: bit is much higher than all existing words
29594 if (this.length <= s) {
29595 this._expand(s + 1);
29596 this.words[s] |= q;
29597 return this;
29598 }
ebd8d4e8 29599
8b095871
IC
29600 // Add bit and propagate, if needed
29601 var carry = q;
29602 for (var i = s; carry !== 0 && i < this.length; i++) {
29603 var w = this.words[i] | 0;
29604 w += carry;
29605 carry = w >>> 26;
29606 w &= 0x3ffffff;
29607 this.words[i] = w;
29608 }
29609 if (carry !== 0) {
29610 this.words[i] = carry;
29611 this.length++;
29612 }
29613 return this;
29614 };
ebd8d4e8 29615
8b095871
IC
29616 BN.prototype.isZero = function isZero () {
29617 return this.length === 1 && this.words[0] === 0;
29618 };
ebd8d4e8 29619
8b095871
IC
29620 BN.prototype.cmpn = function cmpn (num) {
29621 var negative = num < 0;
ebd8d4e8 29622
8b095871
IC
29623 if (this.negative !== 0 && !negative) return -1;
29624 if (this.negative === 0 && negative) return 1;
ab78acc6 29625
8b095871 29626 this.strip();
ab78acc6 29627
8b095871
IC
29628 var res;
29629 if (this.length > 1) {
29630 res = 1;
29631 } else {
29632 if (negative) {
29633 num = -num;
29634 }
ebd8d4e8 29635
8b095871 29636 assert(num <= 0x3ffffff, 'Number is too big');
ebd8d4e8 29637
8b095871
IC
29638 var w = this.words[0] | 0;
29639 res = w === num ? 0 : w < num ? -1 : 1;
29640 }
29641 if (this.negative !== 0) return -res | 0;
29642 return res;
29643 };
ebd8d4e8 29644
8b095871
IC
29645 // Compare two numbers and return:
29646 // 1 - if `this` > `num`
29647 // 0 - if `this` == `num`
29648 // -1 - if `this` < `num`
29649 BN.prototype.cmp = function cmp (num) {
29650 if (this.negative !== 0 && num.negative === 0) return -1;
29651 if (this.negative === 0 && num.negative !== 0) return 1;
29652
29653 var res = this.ucmp(num);
29654 if (this.negative !== 0) return -res | 0;
29655 return res;
29656 };
ebd8d4e8 29657
8b095871
IC
29658 // Unsigned comparison
29659 BN.prototype.ucmp = function ucmp (num) {
29660 // At this point both numbers have the same sign
29661 if (this.length > num.length) return 1;
29662 if (this.length < num.length) return -1;
29663
29664 var res = 0;
29665 for (var i = this.length - 1; i >= 0; i--) {
29666 var a = this.words[i] | 0;
29667 var b = num.words[i] | 0;
29668
29669 if (a === b) continue;
29670 if (a < b) {
29671 res = -1;
29672 } else if (a > b) {
29673 res = 1;
29674 }
29675 break;
29676 }
29677 return res;
29678 };
ebd8d4e8 29679
8b095871
IC
29680 BN.prototype.gtn = function gtn (num) {
29681 return this.cmpn(num) === 1;
29682 };
ebd8d4e8 29683
8b095871
IC
29684 BN.prototype.gt = function gt (num) {
29685 return this.cmp(num) === 1;
29686 };
ebd8d4e8 29687
8b095871
IC
29688 BN.prototype.gten = function gten (num) {
29689 return this.cmpn(num) >= 0;
29690 };
ab78acc6 29691
8b095871
IC
29692 BN.prototype.gte = function gte (num) {
29693 return this.cmp(num) >= 0;
29694 };
ab78acc6 29695
8b095871
IC
29696 BN.prototype.ltn = function ltn (num) {
29697 return this.cmpn(num) === -1;
29698 };
ab78acc6 29699
8b095871
IC
29700 BN.prototype.lt = function lt (num) {
29701 return this.cmp(num) === -1;
29702 };
ebd8d4e8 29703
8b095871
IC
29704 BN.prototype.lten = function lten (num) {
29705 return this.cmpn(num) <= 0;
29706 };
ab78acc6 29707
8b095871
IC
29708 BN.prototype.lte = function lte (num) {
29709 return this.cmp(num) <= 0;
29710 };
ab78acc6 29711
8b095871
IC
29712 BN.prototype.eqn = function eqn (num) {
29713 return this.cmpn(num) === 0;
29714 };
ab78acc6 29715
8b095871
IC
29716 BN.prototype.eq = function eq (num) {
29717 return this.cmp(num) === 0;
29718 };
ebd8d4e8 29719
8b095871
IC
29720 //
29721 // A reduce context, could be using montgomery or something better, depending
29722 // on the `m` itself.
29723 //
29724 BN.red = function red (num) {
29725 return new Red(num);
29726 };
ab78acc6 29727
8b095871
IC
29728 BN.prototype.toRed = function toRed (ctx) {
29729 assert(!this.red, 'Already a number in reduction context');
29730 assert(this.negative === 0, 'red works only with positives');
29731 return ctx.convertTo(this)._forceRed(ctx);
29732 };
29733
29734 BN.prototype.fromRed = function fromRed () {
29735 assert(this.red, 'fromRed works only with numbers in reduction context');
29736 return this.red.convertFrom(this);
29737 };
29738
29739 BN.prototype._forceRed = function _forceRed (ctx) {
29740 this.red = ctx;
29741 return this;
29742 };
29743
29744 BN.prototype.forceRed = function forceRed (ctx) {
29745 assert(!this.red, 'Already a number in reduction context');
29746 return this._forceRed(ctx);
29747 };
29748
29749 BN.prototype.redAdd = function redAdd (num) {
29750 assert(this.red, 'redAdd works only with red numbers');
29751 return this.red.add(this, num);
29752 };
ebd8d4e8 29753
8b095871
IC
29754 BN.prototype.redIAdd = function redIAdd (num) {
29755 assert(this.red, 'redIAdd works only with red numbers');
29756 return this.red.iadd(this, num);
29757 };
ab78acc6 29758
8b095871
IC
29759 BN.prototype.redSub = function redSub (num) {
29760 assert(this.red, 'redSub works only with red numbers');
29761 return this.red.sub(this, num);
29762 };
ab78acc6 29763
8b095871
IC
29764 BN.prototype.redISub = function redISub (num) {
29765 assert(this.red, 'redISub works only with red numbers');
29766 return this.red.isub(this, num);
29767 };
ebd8d4e8 29768
8b095871
IC
29769 BN.prototype.redShl = function redShl (num) {
29770 assert(this.red, 'redShl works only with red numbers');
29771 return this.red.shl(this, num);
29772 };
ebd8d4e8 29773
8b095871
IC
29774 BN.prototype.redMul = function redMul (num) {
29775 assert(this.red, 'redMul works only with red numbers');
29776 this.red._verify2(this, num);
29777 return this.red.mul(this, num);
29778 };
ebd8d4e8 29779
8b095871
IC
29780 BN.prototype.redIMul = function redIMul (num) {
29781 assert(this.red, 'redMul works only with red numbers');
29782 this.red._verify2(this, num);
29783 return this.red.imul(this, num);
29784 };
ebd8d4e8 29785
8b095871
IC
29786 BN.prototype.redSqr = function redSqr () {
29787 assert(this.red, 'redSqr works only with red numbers');
29788 this.red._verify1(this);
29789 return this.red.sqr(this);
29790 };
ebd8d4e8 29791
8b095871
IC
29792 BN.prototype.redISqr = function redISqr () {
29793 assert(this.red, 'redISqr works only with red numbers');
29794 this.red._verify1(this);
29795 return this.red.isqr(this);
29796 };
ebd8d4e8 29797
8b095871
IC
29798 // Square root over p
29799 BN.prototype.redSqrt = function redSqrt () {
29800 assert(this.red, 'redSqrt works only with red numbers');
29801 this.red._verify1(this);
29802 return this.red.sqrt(this);
29803 };
ebd8d4e8 29804
8b095871
IC
29805 BN.prototype.redInvm = function redInvm () {
29806 assert(this.red, 'redInvm works only with red numbers');
29807 this.red._verify1(this);
29808 return this.red.invm(this);
29809 };
ebd8d4e8 29810
8b095871
IC
29811 // Return negative clone of `this` % `red modulo`
29812 BN.prototype.redNeg = function redNeg () {
29813 assert(this.red, 'redNeg works only with red numbers');
29814 this.red._verify1(this);
29815 return this.red.neg(this);
29816 };
ebd8d4e8 29817
8b095871
IC
29818 BN.prototype.redPow = function redPow (num) {
29819 assert(this.red && !num.red, 'redPow(normalNum)');
29820 this.red._verify1(this);
29821 return this.red.pow(this, num);
29822 };
ebd8d4e8 29823
8b095871
IC
29824 // Prime numbers with efficient reduction
29825 var primes = {
29826 k256: null,
29827 p224: null,
29828 p192: null,
29829 p25519: null
29830 };
ebd8d4e8 29831
8b095871
IC
29832 // Pseudo-Mersenne prime
29833 function MPrime (name, p) {
29834 // P = 2 ^ N - K
29835 this.name = name;
29836 this.p = new BN(p, 16);
29837 this.n = this.p.bitLength();
29838 this.k = new BN(1).iushln(this.n).isub(this.p);
ebd8d4e8 29839
8b095871
IC
29840 this.tmp = this._tmp();
29841 }
ebd8d4e8 29842
8b095871
IC
29843 MPrime.prototype._tmp = function _tmp () {
29844 var tmp = new BN(null);
29845 tmp.words = new Array(Math.ceil(this.n / 13));
29846 return tmp;
29847 };
ebd8d4e8 29848
8b095871
IC
29849 MPrime.prototype.ireduce = function ireduce (num) {
29850 // Assumes that `num` is less than `P^2`
29851 // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)
29852 var r = num;
29853 var rlen;
ebd8d4e8 29854
8b095871
IC
29855 do {
29856 this.split(r, this.tmp);
29857 r = this.imulK(r);
29858 r = r.iadd(this.tmp);
29859 rlen = r.bitLength();
29860 } while (rlen > this.n);
29861
29862 var cmp = rlen < this.n ? -1 : r.ucmp(this.p);
29863 if (cmp === 0) {
29864 r.words[0] = 0;
29865 r.length = 1;
29866 } else if (cmp > 0) {
29867 r.isub(this.p);
29868 } else {
29869 r.strip();
29870 }
ebd8d4e8 29871
8b095871
IC
29872 return r;
29873 };
ebd8d4e8 29874
8b095871
IC
29875 MPrime.prototype.split = function split (input, out) {
29876 input.iushrn(this.n, 0, out);
29877 };
ebd8d4e8 29878
8b095871
IC
29879 MPrime.prototype.imulK = function imulK (num) {
29880 return num.imul(this.k);
29881 };
ebd8d4e8 29882
8b095871
IC
29883 function K256 () {
29884 MPrime.call(
29885 this,
29886 'k256',
29887 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');
29888 }
29889 inherits(K256, MPrime);
ebd8d4e8 29890
8b095871
IC
29891 K256.prototype.split = function split (input, output) {
29892 // 256 = 9 * 26 + 22
29893 var mask = 0x3fffff;
ebd8d4e8 29894
8b095871
IC
29895 var outLen = Math.min(input.length, 9);
29896 for (var i = 0; i < outLen; i++) {
29897 output.words[i] = input.words[i];
29898 }
29899 output.length = outLen;
ebd8d4e8 29900
8b095871
IC
29901 if (input.length <= 9) {
29902 input.words[0] = 0;
29903 input.length = 1;
29904 return;
29905 }
ebd8d4e8 29906
8b095871
IC
29907 // Shift by 9 limbs
29908 var prev = input.words[9];
29909 output.words[output.length++] = prev & mask;
ebd8d4e8 29910
8b095871
IC
29911 for (i = 10; i < input.length; i++) {
29912 var next = input.words[i] | 0;
29913 input.words[i - 10] = ((next & mask) << 4) | (prev >>> 22);
29914 prev = next;
29915 }
29916 prev >>>= 22;
29917 input.words[i - 10] = prev;
29918 if (prev === 0 && input.length > 10) {
29919 input.length -= 10;
29920 } else {
29921 input.length -= 9;
29922 }
29923 };
ebd8d4e8 29924
8b095871
IC
29925 K256.prototype.imulK = function imulK (num) {
29926 // K = 0x1000003d1 = [ 0x40, 0x3d1 ]
29927 num.words[num.length] = 0;
29928 num.words[num.length + 1] = 0;
29929 num.length += 2;
29930
29931 // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390
29932 var lo = 0;
29933 for (var i = 0; i < num.length; i++) {
29934 var w = num.words[i] | 0;
29935 lo += w * 0x3d1;
29936 num.words[i] = lo & 0x3ffffff;
29937 lo = w * 0x40 + ((lo / 0x4000000) | 0);
29938 }
29939
29940 // Fast length reduction
29941 if (num.words[num.length - 1] === 0) {
29942 num.length--;
29943 if (num.words[num.length - 1] === 0) {
29944 num.length--;
29945 }
29946 }
29947 return num;
29948 };
ebd8d4e8 29949
8b095871
IC
29950 function P224 () {
29951 MPrime.call(
29952 this,
29953 'p224',
29954 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');
29955 }
29956 inherits(P224, MPrime);
ebd8d4e8 29957
8b095871
IC
29958 function P192 () {
29959 MPrime.call(
29960 this,
29961 'p192',
29962 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');
29963 }
29964 inherits(P192, MPrime);
ebd8d4e8 29965
8b095871
IC
29966 function P25519 () {
29967 // 2 ^ 255 - 19
29968 MPrime.call(
29969 this,
29970 '25519',
29971 '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');
29972 }
29973 inherits(P25519, MPrime);
ebd8d4e8 29974
8b095871
IC
29975 P25519.prototype.imulK = function imulK (num) {
29976 // K = 0x13
29977 var carry = 0;
29978 for (var i = 0; i < num.length; i++) {
29979 var hi = (num.words[i] | 0) * 0x13 + carry;
29980 var lo = hi & 0x3ffffff;
29981 hi >>>= 26;
ebd8d4e8 29982
8b095871
IC
29983 num.words[i] = lo;
29984 carry = hi;
29985 }
29986 if (carry !== 0) {
29987 num.words[num.length++] = carry;
29988 }
29989 return num;
29990 };
ebd8d4e8 29991
8b095871
IC
29992 // Exported mostly for testing purposes, use plain name instead
29993 BN._prime = function prime (name) {
29994 // Cached version of prime
29995 if (primes[name]) return primes[name];
29996
29997 var prime;
29998 if (name === 'k256') {
29999 prime = new K256();
30000 } else if (name === 'p224') {
30001 prime = new P224();
30002 } else if (name === 'p192') {
30003 prime = new P192();
30004 } else if (name === 'p25519') {
30005 prime = new P25519();
30006 } else {
30007 throw new Error('Unknown prime ' + name);
30008 }
30009 primes[name] = prime;
ab78acc6 30010
8b095871
IC
30011 return prime;
30012 };
ab78acc6 30013
8b095871
IC
30014 //
30015 // Base reduction engine
30016 //
30017 function Red (m) {
30018 if (typeof m === 'string') {
30019 var prime = BN._prime(m);
30020 this.m = prime.p;
30021 this.prime = prime;
30022 } else {
30023 assert(m.gtn(1), 'modulus must be greater than 1');
30024 this.m = m;
30025 this.prime = null;
30026 }
30027 }
ab78acc6 30028
8b095871
IC
30029 Red.prototype._verify1 = function _verify1 (a) {
30030 assert(a.negative === 0, 'red works only with positives');
30031 assert(a.red, 'red works only with red numbers');
30032 };
ab78acc6 30033
8b095871
IC
30034 Red.prototype._verify2 = function _verify2 (a, b) {
30035 assert((a.negative | b.negative) === 0, 'red works only with positives');
30036 assert(a.red && a.red === b.red,
30037 'red works only with red numbers');
30038 };
ebd8d4e8 30039
8b095871
IC
30040 Red.prototype.imod = function imod (a) {
30041 if (this.prime) return this.prime.ireduce(a)._forceRed(this);
30042 return a.umod(this.m)._forceRed(this);
30043 };
ebd8d4e8 30044
8b095871
IC
30045 Red.prototype.neg = function neg (a) {
30046 if (a.isZero()) {
30047 return a.clone();
30048 }
ebd8d4e8 30049
8b095871
IC
30050 return this.m.sub(a)._forceRed(this);
30051 };
ab78acc6 30052
8b095871
IC
30053 Red.prototype.add = function add (a, b) {
30054 this._verify2(a, b);
ab78acc6 30055
8b095871
IC
30056 var res = a.add(b);
30057 if (res.cmp(this.m) >= 0) {
30058 res.isub(this.m);
30059 }
30060 return res._forceRed(this);
30061 };
ab78acc6 30062
8b095871
IC
30063 Red.prototype.iadd = function iadd (a, b) {
30064 this._verify2(a, b);
ab78acc6 30065
8b095871
IC
30066 var res = a.iadd(b);
30067 if (res.cmp(this.m) >= 0) {
30068 res.isub(this.m);
30069 }
30070 return res;
30071 };
ab78acc6 30072
8b095871
IC
30073 Red.prototype.sub = function sub (a, b) {
30074 this._verify2(a, b);
ab78acc6 30075
8b095871
IC
30076 var res = a.sub(b);
30077 if (res.cmpn(0) < 0) {
30078 res.iadd(this.m);
30079 }
30080 return res._forceRed(this);
30081 };
ab78acc6 30082
8b095871
IC
30083 Red.prototype.isub = function isub (a, b) {
30084 this._verify2(a, b);
ebd8d4e8 30085
8b095871
IC
30086 var res = a.isub(b);
30087 if (res.cmpn(0) < 0) {
30088 res.iadd(this.m);
30089 }
30090 return res;
30091 };
ebd8d4e8 30092
8b095871
IC
30093 Red.prototype.shl = function shl (a, num) {
30094 this._verify1(a);
30095 return this.imod(a.ushln(num));
30096 };
ebd8d4e8 30097
8b095871
IC
30098 Red.prototype.imul = function imul (a, b) {
30099 this._verify2(a, b);
30100 return this.imod(a.imul(b));
30101 };
ebd8d4e8 30102
8b095871
IC
30103 Red.prototype.mul = function mul (a, b) {
30104 this._verify2(a, b);
30105 return this.imod(a.mul(b));
30106 };
ebd8d4e8 30107
8b095871
IC
30108 Red.prototype.isqr = function isqr (a) {
30109 return this.imul(a, a.clone());
30110 };
30111
30112 Red.prototype.sqr = function sqr (a) {
30113 return this.mul(a, a);
30114 };
ebd8d4e8 30115
8b095871
IC
30116 Red.prototype.sqrt = function sqrt (a) {
30117 if (a.isZero()) return a.clone();
ebd8d4e8 30118
8b095871
IC
30119 var mod3 = this.m.andln(3);
30120 assert(mod3 % 2 === 1);
ebd8d4e8 30121
8b095871
IC
30122 // Fast case
30123 if (mod3 === 3) {
30124 var pow = this.m.add(new BN(1)).iushrn(2);
30125 return this.pow(a, pow);
30126 }
ebd8d4e8 30127
8b095871
IC
30128 // Tonelli-Shanks algorithm (Totally unoptimized and slow)
30129 //
30130 // Find Q and S, that Q * 2 ^ S = (P - 1)
30131 var q = this.m.subn(1);
30132 var s = 0;
30133 while (!q.isZero() && q.andln(1) === 0) {
30134 s++;
30135 q.iushrn(1);
30136 }
30137 assert(!q.isZero());
ebd8d4e8 30138
8b095871
IC
30139 var one = new BN(1).toRed(this);
30140 var nOne = one.redNeg();
ebd8d4e8 30141
8b095871
IC
30142 // Find quadratic non-residue
30143 // NOTE: Max is such because of generalized Riemann hypothesis.
30144 var lpow = this.m.subn(1).iushrn(1);
30145 var z = this.m.bitLength();
30146 z = new BN(2 * z * z).toRed(this);
ebd8d4e8 30147
8b095871
IC
30148 while (this.pow(z, lpow).cmp(nOne) !== 0) {
30149 z.redIAdd(nOne);
30150 }
ebd8d4e8 30151
8b095871
IC
30152 var c = this.pow(z, q);
30153 var r = this.pow(a, q.addn(1).iushrn(1));
30154 var t = this.pow(a, q);
30155 var m = s;
30156 while (t.cmp(one) !== 0) {
30157 var tmp = t;
30158 for (var i = 0; tmp.cmp(one) !== 0; i++) {
30159 tmp = tmp.redSqr();
30160 }
30161 assert(i < m);
30162 var b = this.pow(c, new BN(1).iushln(m - i - 1));
ebd8d4e8 30163
8b095871
IC
30164 r = r.redMul(b);
30165 c = b.redSqr();
30166 t = t.redMul(c);
30167 m = i;
30168 }
ebd8d4e8 30169
8b095871
IC
30170 return r;
30171 };
ebd8d4e8 30172
8b095871
IC
30173 Red.prototype.invm = function invm (a) {
30174 var inv = a._invmp(this.m);
30175 if (inv.negative !== 0) {
30176 inv.negative = 0;
30177 return this.imod(inv).redNeg();
30178 } else {
30179 return this.imod(inv);
30180 }
30181 };
ebd8d4e8 30182
8b095871
IC
30183 Red.prototype.pow = function pow (a, num) {
30184 if (num.isZero()) return new BN(1);
30185 if (num.cmpn(1) === 0) return a.clone();
ebd8d4e8 30186
8b095871
IC
30187 var windowSize = 4;
30188 var wnd = new Array(1 << windowSize);
30189 wnd[0] = new BN(1).toRed(this);
30190 wnd[1] = a;
30191 for (var i = 2; i < wnd.length; i++) {
30192 wnd[i] = this.mul(wnd[i - 1], a);
30193 }
ebd8d4e8 30194
8b095871
IC
30195 var res = wnd[0];
30196 var current = 0;
30197 var currentLen = 0;
30198 var start = num.bitLength() % 26;
30199 if (start === 0) {
30200 start = 26;
30201 }
ebd8d4e8 30202
8b095871
IC
30203 for (i = num.length - 1; i >= 0; i--) {
30204 var word = num.words[i];
30205 for (var j = start - 1; j >= 0; j--) {
30206 var bit = (word >> j) & 1;
30207 if (res !== wnd[0]) {
30208 res = this.sqr(res);
30209 }
ebd8d4e8 30210
8b095871
IC
30211 if (bit === 0 && current === 0) {
30212 currentLen = 0;
30213 continue;
30214 }
ebd8d4e8 30215
8b095871
IC
30216 current <<= 1;
30217 current |= bit;
30218 currentLen++;
30219 if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;
ebd8d4e8 30220
8b095871
IC
30221 res = this.mul(res, wnd[current]);
30222 currentLen = 0;
30223 current = 0;
30224 }
30225 start = 26;
30226 }
ebd8d4e8 30227
8b095871
IC
30228 return res;
30229 };
ebd8d4e8 30230
8b095871
IC
30231 Red.prototype.convertTo = function convertTo (num) {
30232 var r = num.umod(this.m);
ebd8d4e8 30233
8b095871
IC
30234 return r === num ? r.clone() : r;
30235 };
ebd8d4e8 30236
8b095871
IC
30237 Red.prototype.convertFrom = function convertFrom (num) {
30238 var res = num.clone();
30239 res.red = null;
30240 return res;
30241 };
ebd8d4e8 30242
8b095871
IC
30243 //
30244 // Montgomery method engine
30245 //
ebd8d4e8 30246
8b095871
IC
30247 BN.mont = function mont (num) {
30248 return new Mont(num);
30249 };
ebd8d4e8 30250
8b095871
IC
30251 function Mont (m) {
30252 Red.call(this, m);
ebd8d4e8 30253
8b095871
IC
30254 this.shift = this.m.bitLength();
30255 if (this.shift % 26 !== 0) {
30256 this.shift += 26 - (this.shift % 26);
30257 }
ebd8d4e8 30258
8b095871
IC
30259 this.r = new BN(1).iushln(this.shift);
30260 this.r2 = this.imod(this.r.sqr());
30261 this.rinv = this.r._invmp(this.m);
30262
30263 this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);
30264 this.minv = this.minv.umod(this.r);
30265 this.minv = this.r.sub(this.minv);
ebd8d4e8 30266 }
8b095871 30267 inherits(Mont, Red);
ebd8d4e8 30268
8b095871
IC
30269 Mont.prototype.convertTo = function convertTo (num) {
30270 return this.imod(num.ushln(this.shift));
30271 };
ab78acc6 30272
8b095871
IC
30273 Mont.prototype.convertFrom = function convertFrom (num) {
30274 var r = this.imod(num.mul(this.rinv));
30275 r.red = null;
30276 return r;
30277 };
ebd8d4e8 30278
8b095871
IC
30279 Mont.prototype.imul = function imul (a, b) {
30280 if (a.isZero() || b.isZero()) {
30281 a.words[0] = 0;
30282 a.length = 1;
30283 return a;
30284 }
ebd8d4e8 30285
8b095871
IC
30286 var t = a.imul(b);
30287 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
30288 var u = t.isub(c).iushrn(this.shift);
30289 var res = u;
ab78acc6 30290
8b095871
IC
30291 if (u.cmp(this.m) >= 0) {
30292 res = u.isub(this.m);
30293 } else if (u.cmpn(0) < 0) {
30294 res = u.iadd(this.m);
30295 }
ab78acc6 30296
8b095871
IC
30297 return res._forceRed(this);
30298 };
ab78acc6 30299
8b095871
IC
30300 Mont.prototype.mul = function mul (a, b) {
30301 if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);
ab78acc6 30302
8b095871
IC
30303 var t = a.mul(b);
30304 var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);
30305 var u = t.isub(c).iushrn(this.shift);
30306 var res = u;
30307 if (u.cmp(this.m) >= 0) {
30308 res = u.isub(this.m);
30309 } else if (u.cmpn(0) < 0) {
30310 res = u.iadd(this.m);
30311 }
ab78acc6 30312
8b095871
IC
30313 return res._forceRed(this);
30314 };
ab78acc6 30315
8b095871
IC
30316 Mont.prototype.invm = function invm (a) {
30317 // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R
30318 var res = this.imod(a._invmp(this.m).mul(this.r2));
30319 return res._forceRed(this);
30320 };
30321})(typeof module === 'undefined' || module, this);
ab78acc6 30322
8b095871
IC
30323},{}],34:[function(require,module,exports){
30324var r;
ebd8d4e8 30325
8b095871
IC
30326module.exports = function rand(len) {
30327 if (!r)
30328 r = new Rand(null);
ebd8d4e8 30329
8b095871
IC
30330 return r.generate(len);
30331};
ab78acc6 30332
8b095871
IC
30333function Rand(rand) {
30334 this.rand = rand;
ab78acc6 30335}
8b095871 30336module.exports.Rand = Rand;
ab78acc6 30337
8b095871
IC
30338Rand.prototype.generate = function generate(len) {
30339 return this._rand(len);
30340};
ab78acc6 30341
8b095871
IC
30342if (typeof self === 'object') {
30343 if (self.crypto && self.crypto.getRandomValues) {
30344 // Modern browsers
30345 Rand.prototype._rand = function _rand(n) {
30346 var arr = new Uint8Array(n);
30347 self.crypto.getRandomValues(arr);
30348 return arr;
30349 };
30350 } else if (self.msCrypto && self.msCrypto.getRandomValues) {
30351 // IE
30352 Rand.prototype._rand = function _rand(n) {
30353 var arr = new Uint8Array(n);
30354 self.msCrypto.getRandomValues(arr);
30355 return arr;
30356 };
30357 } else {
30358 // Old junk
30359 Rand.prototype._rand = function() {
30360 throw new Error('Not implemented yet');
30361 };
30362 }
30363} else {
30364 // Node.js or Web worker with no crypto support
30365 try {
30366 var crypto = require('crypto');
ab78acc6 30367
8b095871
IC
30368 Rand.prototype._rand = function _rand(n) {
30369 return crypto.randomBytes(n);
30370 };
30371 } catch (e) {
30372 // Emulate crypto API using randy
30373 Rand.prototype._rand = function _rand(n) {
30374 var res = new Uint8Array(n);
30375 for (var i = 0; i < res.length; i++)
30376 res[i] = this.rand.getByte();
30377 return res;
30378 };
30379 }
30380}
30381
30382},{"crypto":3}],35:[function(require,module,exports){
30383(function (Buffer){
30384var Transform = require('stream').Transform
30385var inherits = require('inherits')
30386var StringDecoder = require('string_decoder').StringDecoder
30387module.exports = CipherBase
30388inherits(CipherBase, Transform)
30389function CipherBase (hashMode) {
30390 Transform.call(this)
30391 this.hashMode = typeof hashMode === 'string'
30392 if (this.hashMode) {
30393 this[hashMode] = this._finalOrDigest
30394 } else {
30395 this.final = this._finalOrDigest
30396 }
30397 this._decoder = null
30398 this._encoding = null
30399}
30400CipherBase.prototype.update = function (data, inputEnc, outputEnc) {
30401 if (typeof data === 'string') {
30402 data = new Buffer(data, inputEnc)
30403 }
30404 var outData = this._update(data)
30405 if (this.hashMode) {
30406 return this
30407 }
30408 if (outputEnc) {
30409 outData = this._toString(outData, outputEnc)
30410 }
30411 return outData
30412}
ab78acc6 30413
8b095871 30414CipherBase.prototype.setAutoPadding = function () {}
ab78acc6 30415
8b095871
IC
30416CipherBase.prototype.getAuthTag = function () {
30417 throw new Error('trying to get auth tag in unsupported state')
30418}
ab78acc6 30419
8b095871
IC
30420CipherBase.prototype.setAuthTag = function () {
30421 throw new Error('trying to set auth tag in unsupported state')
30422}
ab78acc6 30423
8b095871
IC
30424CipherBase.prototype.setAAD = function () {
30425 throw new Error('trying to set aad in unsupported state')
30426}
ab78acc6 30427
8b095871
IC
30428CipherBase.prototype._transform = function (data, _, next) {
30429 var err
30430 try {
30431 if (this.hashMode) {
30432 this._update(data)
30433 } else {
30434 this.push(this._update(data))
30435 }
30436 } catch (e) {
30437 err = e
30438 } finally {
30439 next(err)
30440 }
30441}
30442CipherBase.prototype._flush = function (done) {
30443 var err
30444 try {
30445 this.push(this._final())
30446 } catch (e) {
30447 err = e
30448 } finally {
30449 done(err)
30450 }
30451}
30452CipherBase.prototype._finalOrDigest = function (outputEnc) {
30453 var outData = this._final() || new Buffer('')
30454 if (outputEnc) {
30455 outData = this._toString(outData, outputEnc, true)
30456 }
30457 return outData
30458}
ebd8d4e8 30459
8b095871
IC
30460CipherBase.prototype._toString = function (value, enc, fin) {
30461 if (!this._decoder) {
30462 this._decoder = new StringDecoder(enc)
30463 this._encoding = enc
30464 }
30465 if (this._encoding !== enc) {
30466 throw new Error('can\'t switch encodings')
30467 }
30468 var out = this._decoder.write(value)
30469 if (fin) {
30470 out += this._decoder.end()
ab78acc6 30471 }
8b095871
IC
30472 return out
30473}
ab78acc6 30474
8b095871
IC
30475}).call(this,require("buffer").Buffer)
30476},{"buffer":5,"inherits":63,"stream":25,"string_decoder":26}],36:[function(require,module,exports){
30477(function (Buffer){
30478'use strict';
30479var inherits = require('inherits')
30480var md5 = require('./md5')
30481var rmd160 = require('ripemd160')
30482var sha = require('sha.js')
ebd8d4e8 30483
8b095871 30484var Base = require('cipher-base')
ebd8d4e8 30485
8b095871
IC
30486function HashNoConstructor(hash) {
30487 Base.call(this, 'digest')
ebd8d4e8 30488
8b095871
IC
30489 this._hash = hash
30490 this.buffers = []
30491}
ebd8d4e8 30492
8b095871 30493inherits(HashNoConstructor, Base)
ebd8d4e8 30494
8b095871
IC
30495HashNoConstructor.prototype._update = function (data) {
30496 this.buffers.push(data)
30497}
ebd8d4e8 30498
8b095871
IC
30499HashNoConstructor.prototype._final = function () {
30500 var buf = Buffer.concat(this.buffers)
30501 var r = this._hash(buf)
30502 this.buffers = null
ebd8d4e8 30503
8b095871
IC
30504 return r
30505}
ab78acc6 30506
8b095871
IC
30507function Hash(hash) {
30508 Base.call(this, 'digest')
ab78acc6 30509
8b095871
IC
30510 this._hash = hash
30511}
ab78acc6 30512
8b095871 30513inherits(Hash, Base)
ab78acc6 30514
8b095871
IC
30515Hash.prototype._update = function (data) {
30516 this._hash.update(data)
30517}
ab78acc6 30518
8b095871
IC
30519Hash.prototype._final = function () {
30520 return this._hash.digest()
30521}
ab78acc6 30522
8b095871
IC
30523module.exports = function createHash (alg) {
30524 alg = alg.toLowerCase()
30525 if ('md5' === alg) return new HashNoConstructor(md5)
30526 if ('rmd160' === alg || 'ripemd160' === alg) return new HashNoConstructor(rmd160)
30527
30528 return new Hash(sha(alg))
ab78acc6
IC
30529}
30530
8b095871
IC
30531}).call(this,require("buffer").Buffer)
30532},{"./md5":38,"buffer":5,"cipher-base":35,"inherits":63,"ripemd160":71,"sha.js":80}],37:[function(require,module,exports){
30533(function (Buffer){
30534'use strict';
30535var intSize = 4;
30536var zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);
30537var chrsz = 8;
ab78acc6 30538
8b095871
IC
30539function toArray(buf, bigEndian) {
30540 if ((buf.length % intSize) !== 0) {
30541 var len = buf.length + (intSize - (buf.length % intSize));
30542 buf = Buffer.concat([buf, zeroBuffer], len);
ab78acc6
IC
30543 }
30544
8b095871
IC
30545 var arr = [];
30546 var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;
30547 for (var i = 0; i < buf.length; i += intSize) {
30548 arr.push(fn.call(buf, i));
30549 }
30550 return arr;
ab78acc6
IC
30551}
30552
8b095871
IC
30553function toBuffer(arr, size, bigEndian) {
30554 var buf = new Buffer(size);
30555 var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;
30556 for (var i = 0; i < arr.length; i++) {
30557 fn.call(buf, arr[i], i * 4, true);
30558 }
30559 return buf;
30560}
ab78acc6 30561
8b095871
IC
30562function hash(buf, fn, hashSize, bigEndian) {
30563 if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);
30564 var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);
30565 return toBuffer(arr, hashSize, bigEndian);
30566}
30567exports.hash = hash;
ab78acc6 30568}).call(this,require("buffer").Buffer)
8b095871 30569},{"buffer":5}],38:[function(require,module,exports){
ab78acc6 30570'use strict';
8b095871
IC
30571/*
30572 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
30573 * Digest Algorithm, as defined in RFC 1321.
30574 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
30575 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
30576 * Distributed under the BSD License
30577 * See http://pajhome.org.uk/crypt/md5 for more info.
30578 */
ebd8d4e8 30579
8b095871 30580var helpers = require('./helpers');
ebd8d4e8 30581
8b095871
IC
30582/*
30583 * Calculate the MD5 of an array of little-endian words, and a bit length
30584 */
30585function core_md5(x, len)
30586{
30587 /* append padding */
30588 x[len >> 5] |= 0x80 << ((len) % 32);
30589 x[(((len + 64) >>> 9) << 4) + 14] = len;
ebd8d4e8 30590
8b095871
IC
30591 var a = 1732584193;
30592 var b = -271733879;
30593 var c = -1732584194;
30594 var d = 271733878;
ebd8d4e8 30595
8b095871
IC
30596 for(var i = 0; i < x.length; i += 16)
30597 {
30598 var olda = a;
30599 var oldb = b;
30600 var oldc = c;
30601 var oldd = d;
ebd8d4e8 30602
8b095871
IC
30603 a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
30604 d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
30605 c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);
30606 b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
30607 a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
30608 d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);
30609 c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
30610 b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
30611 a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);
30612 d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
30613 c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
30614 b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
30615 a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);
30616 d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
30617 c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
30618 b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);
ebd8d4e8 30619
8b095871
IC
30620 a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
30621 d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
30622 c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);
30623 b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
30624 a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
30625 d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);
30626 c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
30627 b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
30628 a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);
30629 d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
30630 c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
30631 b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);
30632 a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
30633 d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
30634 c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);
30635 b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);
ebd8d4e8 30636
8b095871
IC
30637 a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
30638 d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
30639 c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);
30640 b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
30641 a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
30642 d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);
30643 c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
30644 b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
30645 a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);
30646 d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
30647 c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
30648 b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);
30649 a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
30650 d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
30651 c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);
30652 b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);
ebd8d4e8 30653
8b095871
IC
30654 a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
30655 d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);
30656 c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
30657 b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
30658 a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);
30659 d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
30660 c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
30661 b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
30662 a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);
30663 d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
30664 c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
30665 b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);
30666 a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
30667 d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
30668 c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);
30669 b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);
ebd8d4e8 30670
8b095871
IC
30671 a = safe_add(a, olda);
30672 b = safe_add(b, oldb);
30673 c = safe_add(c, oldc);
30674 d = safe_add(d, oldd);
ab78acc6 30675 }
8b095871 30676 return Array(a, b, c, d);
ebd8d4e8 30677
ab78acc6 30678}
ebd8d4e8 30679
8b095871
IC
30680/*
30681 * These functions implement the four basic operations the algorithm uses.
30682 */
30683function md5_cmn(q, a, b, x, s, t)
30684{
30685 return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
ab78acc6 30686}
8b095871
IC
30687function md5_ff(a, b, c, d, x, s, t)
30688{
30689 return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
ab78acc6 30690}
8b095871
IC
30691function md5_gg(a, b, c, d, x, s, t)
30692{
30693 return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
ab78acc6 30694}
8b095871
IC
30695function md5_hh(a, b, c, d, x, s, t)
30696{
30697 return md5_cmn(b ^ c ^ d, a, b, x, s, t);
30698}
30699function md5_ii(a, b, c, d, x, s, t)
30700{
30701 return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
ab78acc6 30702}
ebd8d4e8 30703
8b095871
IC
30704/*
30705 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
30706 * to work around bugs in some JS interpreters.
30707 */
30708function safe_add(x, y)
30709{
30710 var lsw = (x & 0xFFFF) + (y & 0xFFFF);
30711 var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
30712 return (msw << 16) | (lsw & 0xFFFF);
ab78acc6 30713}
ebd8d4e8 30714
8b095871
IC
30715/*
30716 * Bitwise rotate a 32-bit number to the left.
30717 */
30718function bit_rol(num, cnt)
30719{
30720 return (num << cnt) | (num >>> (32 - cnt));
30721}
ebd8d4e8 30722
8b095871
IC
30723module.exports = function md5(buf) {
30724 return helpers.hash(buf, core_md5, 16);
30725};
30726},{"./helpers":37}],39:[function(require,module,exports){
30727'use strict';
ebd8d4e8 30728
8b095871 30729var elliptic = exports;
ebd8d4e8 30730
8b095871
IC
30731elliptic.version = require('../package.json').version;
30732elliptic.utils = require('./elliptic/utils');
30733elliptic.rand = require('brorand');
30734elliptic.hmacDRBG = require('./elliptic/hmac-drbg');
30735elliptic.curve = require('./elliptic/curve');
30736elliptic.curves = require('./elliptic/curves');
ebd8d4e8 30737
8b095871
IC
30738// Protocols
30739elliptic.ec = require('./elliptic/ec');
30740elliptic.eddsa = require('./elliptic/eddsa');
ebd8d4e8 30741
8b095871
IC
30742},{"../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){
30743'use strict';
ebd8d4e8 30744
8b095871
IC
30745var BN = require('bn.js');
30746var elliptic = require('../../elliptic');
30747var utils = elliptic.utils;
30748var getNAF = utils.getNAF;
30749var getJSF = utils.getJSF;
30750var assert = utils.assert;
30751
30752function BaseCurve(type, conf) {
30753 this.type = type;
30754 this.p = new BN(conf.p, 16);
30755
30756 // Use Montgomery, when there is no fast reduction for the prime
30757 this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p);
30758
30759 // Useful for many curves
30760 this.zero = new BN(0).toRed(this.red);
30761 this.one = new BN(1).toRed(this.red);
30762 this.two = new BN(2).toRed(this.red);
30763
30764 // Curve configuration, optional
30765 this.n = conf.n && new BN(conf.n, 16);
30766 this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed);
30767
30768 // Temporary arrays
30769 this._wnafT1 = new Array(4);
30770 this._wnafT2 = new Array(4);
30771 this._wnafT3 = new Array(4);
30772 this._wnafT4 = new Array(4);
30773
30774 // Generalized Greg Maxwell's trick
30775 var adjustCount = this.n && this.p.div(this.n);
30776 if (!adjustCount || adjustCount.cmpn(100) > 0) {
30777 this.redN = null;
30778 } else {
30779 this._maxwellTrick = true;
30780 this.redN = this.n.toRed(this.red);
ebd8d4e8 30781 }
ebd8d4e8 30782}
8b095871 30783module.exports = BaseCurve;
ebd8d4e8 30784
8b095871
IC
30785BaseCurve.prototype.point = function point() {
30786 throw new Error('Not implemented');
30787};
ebd8d4e8 30788
8b095871
IC
30789BaseCurve.prototype.validate = function validate() {
30790 throw new Error('Not implemented');
30791};
ebd8d4e8 30792
8b095871
IC
30793BaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {
30794 assert(p.precomputed);
30795 var doubles = p._getDoubles();
ebd8d4e8 30796
8b095871
IC
30797 var naf = getNAF(k, 1);
30798 var I = (1 << (doubles.step + 1)) - (doubles.step % 2 === 0 ? 2 : 1);
30799 I /= 3;
ebd8d4e8 30800
8b095871
IC
30801 // Translate into more windowed form
30802 var repr = [];
30803 for (var j = 0; j < naf.length; j += doubles.step) {
30804 var nafW = 0;
30805 for (var k = j + doubles.step - 1; k >= j; k--)
30806 nafW = (nafW << 1) + naf[k];
30807 repr.push(nafW);
30808 }
ebd8d4e8 30809
8b095871
IC
30810 var a = this.jpoint(null, null, null);
30811 var b = this.jpoint(null, null, null);
30812 for (var i = I; i > 0; i--) {
30813 for (var j = 0; j < repr.length; j++) {
30814 var nafW = repr[j];
30815 if (nafW === i)
30816 b = b.mixedAdd(doubles.points[j]);
30817 else if (nafW === -i)
30818 b = b.mixedAdd(doubles.points[j].neg());
30819 }
30820 a = a.add(b);
30821 }
30822 return a.toP();
30823};
ebd8d4e8 30824
8b095871
IC
30825BaseCurve.prototype._wnafMul = function _wnafMul(p, k) {
30826 var w = 4;
ebd8d4e8 30827
8b095871
IC
30828 // Precompute window
30829 var nafPoints = p._getNAFPoints(w);
30830 w = nafPoints.wnd;
30831 var wnd = nafPoints.points;
ebd8d4e8 30832
8b095871
IC
30833 // Get NAF form
30834 var naf = getNAF(k, w);
ebd8d4e8 30835
8b095871
IC
30836 // Add `this`*(N+1) for every w-NAF index
30837 var acc = this.jpoint(null, null, null);
30838 for (var i = naf.length - 1; i >= 0; i--) {
30839 // Count zeroes
30840 for (var k = 0; i >= 0 && naf[i] === 0; i--)
30841 k++;
30842 if (i >= 0)
30843 k++;
30844 acc = acc.dblp(k);
ebd8d4e8 30845
8b095871
IC
30846 if (i < 0)
30847 break;
30848 var z = naf[i];
30849 assert(z !== 0);
30850 if (p.type === 'affine') {
30851 // J +- P
30852 if (z > 0)
30853 acc = acc.mixedAdd(wnd[(z - 1) >> 1]);
30854 else
30855 acc = acc.mixedAdd(wnd[(-z - 1) >> 1].neg());
30856 } else {
30857 // J +- J
30858 if (z > 0)
30859 acc = acc.add(wnd[(z - 1) >> 1]);
30860 else
30861 acc = acc.add(wnd[(-z - 1) >> 1].neg());
30862 }
ebd8d4e8 30863 }
8b095871
IC
30864 return p.type === 'affine' ? acc.toP() : acc;
30865};
ebd8d4e8 30866
8b095871
IC
30867BaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW,
30868 points,
30869 coeffs,
30870 len,
30871 jacobianResult) {
30872 var wndWidth = this._wnafT1;
30873 var wnd = this._wnafT2;
30874 var naf = this._wnafT3;
30875
30876 // Fill all arrays
30877 var max = 0;
30878 for (var i = 0; i < len; i++) {
30879 var p = points[i];
30880 var nafPoints = p._getNAFPoints(defW);
30881 wndWidth[i] = nafPoints.wnd;
30882 wnd[i] = nafPoints.points;
30883 }
30884
30885 // Comb small window NAFs
30886 for (var i = len - 1; i >= 1; i -= 2) {
30887 var a = i - 1;
30888 var b = i;
30889 if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {
30890 naf[a] = getNAF(coeffs[a], wndWidth[a]);
30891 naf[b] = getNAF(coeffs[b], wndWidth[b]);
30892 max = Math.max(naf[a].length, max);
30893 max = Math.max(naf[b].length, max);
30894 continue;
30895 }
ebd8d4e8 30896
8b095871
IC
30897 var comb = [
30898 points[a], /* 1 */
30899 null, /* 3 */
30900 null, /* 5 */
30901 points[b] /* 7 */
30902 ];
30903
30904 // Try to avoid Projective points, if possible
30905 if (points[a].y.cmp(points[b].y) === 0) {
30906 comb[1] = points[a].add(points[b]);
30907 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
30908 } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {
30909 comb[1] = points[a].toJ().mixedAdd(points[b]);
30910 comb[2] = points[a].add(points[b].neg());
30911 } else {
30912 comb[1] = points[a].toJ().mixedAdd(points[b]);
30913 comb[2] = points[a].toJ().mixedAdd(points[b].neg());
30914 }
ebd8d4e8 30915
8b095871
IC
30916 var index = [
30917 -3, /* -1 -1 */
30918 -1, /* -1 0 */
30919 -5, /* -1 1 */
30920 -7, /* 0 -1 */
30921 0, /* 0 0 */
30922 7, /* 0 1 */
30923 5, /* 1 -1 */
30924 1, /* 1 0 */
30925 3 /* 1 1 */
30926 ];
ebd8d4e8 30927
8b095871
IC
30928 var jsf = getJSF(coeffs[a], coeffs[b]);
30929 max = Math.max(jsf[0].length, max);
30930 naf[a] = new Array(max);
30931 naf[b] = new Array(max);
30932 for (var j = 0; j < max; j++) {
30933 var ja = jsf[0][j] | 0;
30934 var jb = jsf[1][j] | 0;
ebd8d4e8 30935
8b095871
IC
30936 naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];
30937 naf[b][j] = 0;
30938 wnd[a] = comb;
30939 }
30940 }
ebd8d4e8 30941
8b095871
IC
30942 var acc = this.jpoint(null, null, null);
30943 var tmp = this._wnafT4;
30944 for (var i = max; i >= 0; i--) {
30945 var k = 0;
ebd8d4e8 30946
8b095871
IC
30947 while (i >= 0) {
30948 var zero = true;
30949 for (var j = 0; j < len; j++) {
30950 tmp[j] = naf[j][i] | 0;
30951 if (tmp[j] !== 0)
30952 zero = false;
30953 }
30954 if (!zero)
30955 break;
30956 k++;
30957 i--;
30958 }
30959 if (i >= 0)
30960 k++;
30961 acc = acc.dblp(k);
30962 if (i < 0)
30963 break;
ebd8d4e8 30964
8b095871
IC
30965 for (var j = 0; j < len; j++) {
30966 var z = tmp[j];
30967 var p;
30968 if (z === 0)
30969 continue;
30970 else if (z > 0)
30971 p = wnd[j][(z - 1) >> 1];
30972 else if (z < 0)
30973 p = wnd[j][(-z - 1) >> 1].neg();
30974
30975 if (p.type === 'affine')
30976 acc = acc.mixedAdd(p);
30977 else
30978 acc = acc.add(p);
30979 }
30980 }
30981 // Zeroify references
30982 for (var i = 0; i < len; i++)
30983 wnd[i] = null;
ebd8d4e8 30984
8b095871
IC
30985 if (jacobianResult)
30986 return acc;
30987 else
30988 return acc.toP();
30989};
ebd8d4e8 30990
8b095871
IC
30991function BasePoint(curve, type) {
30992 this.curve = curve;
30993 this.type = type;
30994 this.precomputed = null;
30995}
30996BaseCurve.BasePoint = BasePoint;
ebd8d4e8 30997
8b095871
IC
30998BasePoint.prototype.eq = function eq(/*other*/) {
30999 throw new Error('Not implemented');
31000};
ebd8d4e8 31001
8b095871
IC
31002BasePoint.prototype.validate = function validate() {
31003 return this.curve.validate(this);
31004};
ebd8d4e8 31005
8b095871
IC
31006BaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
31007 bytes = utils.toArray(bytes, enc);
ebd8d4e8 31008
8b095871 31009 var len = this.p.byteLength();
ebd8d4e8 31010
8b095871
IC
31011 // uncompressed, hybrid-odd, hybrid-even
31012 if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) &&
31013 bytes.length - 1 === 2 * len) {
31014 if (bytes[0] === 0x06)
31015 assert(bytes[bytes.length - 1] % 2 === 0);
31016 else if (bytes[0] === 0x07)
31017 assert(bytes[bytes.length - 1] % 2 === 1);
ebd8d4e8 31018
8b095871
IC
31019 var res = this.point(bytes.slice(1, 1 + len),
31020 bytes.slice(1 + len, 1 + 2 * len));
ebd8d4e8 31021
8b095871
IC
31022 return res;
31023 } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) &&
31024 bytes.length - 1 === len) {
31025 return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);
ebd8d4e8 31026 }
8b095871
IC
31027 throw new Error('Unknown point format');
31028};
ebd8d4e8 31029
8b095871
IC
31030BasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {
31031 return this.encode(enc, true);
31032};
31033
31034BasePoint.prototype._encode = function _encode(compact) {
31035 var len = this.curve.p.byteLength();
31036 var x = this.getX().toArray('be', len);
31037
31038 if (compact)
31039 return [ this.getY().isEven() ? 0x02 : 0x03 ].concat(x);
31040
31041 return [ 0x04 ].concat(x, this.getY().toArray('be', len)) ;
31042};
31043
31044BasePoint.prototype.encode = function encode(enc, compact) {
31045 return utils.encode(this._encode(compact), enc);
31046};
31047
31048BasePoint.prototype.precompute = function precompute(power) {
31049 if (this.precomputed)
31050 return this;
31051
31052 var precomputed = {
31053 doubles: null,
31054 naf: null,
31055 beta: null
31056 };
31057 precomputed.naf = this._getNAFPoints(8);
31058 precomputed.doubles = this._getDoubles(4, power);
31059 precomputed.beta = this._getBeta();
31060 this.precomputed = precomputed;
31061
31062 return this;
31063};
31064
31065BasePoint.prototype._hasDoubles = function _hasDoubles(k) {
31066 if (!this.precomputed)
31067 return false;
31068
31069 var doubles = this.precomputed.doubles;
31070 if (!doubles)
31071 return false;
31072
31073 return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);
31074};
31075
31076BasePoint.prototype._getDoubles = function _getDoubles(step, power) {
31077 if (this.precomputed && this.precomputed.doubles)
31078 return this.precomputed.doubles;
31079
31080 var doubles = [ this ];
31081 var acc = this;
31082 for (var i = 0; i < power; i += step) {
31083 for (var j = 0; j < step; j++)
31084 acc = acc.dbl();
31085 doubles.push(acc);
ebd8d4e8 31086 }
8b095871
IC
31087 return {
31088 step: step,
31089 points: doubles
31090 };
31091};
ebd8d4e8 31092
8b095871
IC
31093BasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {
31094 if (this.precomputed && this.precomputed.naf)
31095 return this.precomputed.naf;
ebd8d4e8 31096
8b095871
IC
31097 var res = [ this ];
31098 var max = (1 << wnd) - 1;
31099 var dbl = max === 1 ? null : this.dbl();
31100 for (var i = 1; i < max; i++)
31101 res[i] = res[i - 1].add(dbl);
31102 return {
31103 wnd: wnd,
31104 points: res
31105 };
31106};
ebd8d4e8 31107
8b095871
IC
31108BasePoint.prototype._getBeta = function _getBeta() {
31109 return null;
31110};
ebd8d4e8 31111
8b095871
IC
31112BasePoint.prototype.dblp = function dblp(k) {
31113 var r = this;
31114 for (var i = 0; i < k; i++)
31115 r = r.dbl();
31116 return r;
31117};
ebd8d4e8 31118
8b095871
IC
31119},{"../../elliptic":39,"bn.js":33}],41:[function(require,module,exports){
31120'use strict';
ebd8d4e8 31121
8b095871
IC
31122var curve = require('../curve');
31123var elliptic = require('../../elliptic');
31124var BN = require('bn.js');
31125var inherits = require('inherits');
31126var Base = curve.base;
ebd8d4e8 31127
8b095871 31128var assert = elliptic.utils.assert;
ebd8d4e8 31129
8b095871
IC
31130function EdwardsCurve(conf) {
31131 // NOTE: Important as we are creating point in Base.call()
31132 this.twisted = (conf.a | 0) !== 1;
31133 this.mOneA = this.twisted && (conf.a | 0) === -1;
31134 this.extended = this.mOneA;
31135
31136 Base.call(this, 'edwards', conf);
31137
31138 this.a = new BN(conf.a, 16).umod(this.red.m);
31139 this.a = this.a.toRed(this.red);
31140 this.c = new BN(conf.c, 16).toRed(this.red);
31141 this.c2 = this.c.redSqr();
31142 this.d = new BN(conf.d, 16).toRed(this.red);
31143 this.dd = this.d.redAdd(this.d);
31144
31145 assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);
31146 this.oneC = (conf.c | 0) === 1;
ebd8d4e8 31147}
8b095871
IC
31148inherits(EdwardsCurve, Base);
31149module.exports = EdwardsCurve;
ebd8d4e8 31150
8b095871
IC
31151EdwardsCurve.prototype._mulA = function _mulA(num) {
31152 if (this.mOneA)
31153 return num.redNeg();
31154 else
31155 return this.a.redMul(num);
31156};
ebd8d4e8 31157
8b095871
IC
31158EdwardsCurve.prototype._mulC = function _mulC(num) {
31159 if (this.oneC)
31160 return num;
31161 else
31162 return this.c.redMul(num);
31163};
ebd8d4e8 31164
8b095871
IC
31165// Just for compatibility with Short curve
31166EdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {
31167 return this.point(x, y, z, t);
31168};
ebd8d4e8 31169
8b095871
IC
31170EdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {
31171 x = new BN(x, 16);
31172 if (!x.red)
31173 x = x.toRed(this.red);
ebd8d4e8 31174
8b095871
IC
31175 var x2 = x.redSqr();
31176 var rhs = this.c2.redSub(this.a.redMul(x2));
31177 var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));
31178
31179 var y2 = rhs.redMul(lhs.redInvm());
31180 var y = y2.redSqrt();
31181 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
31182 throw new Error('invalid point');
31183
31184 var isOdd = y.fromRed().isOdd();
31185 if (odd && !isOdd || !odd && isOdd)
31186 y = y.redNeg();
31187
31188 return this.point(x, y);
31189};
31190
31191EdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {
31192 y = new BN(y, 16);
31193 if (!y.red)
31194 y = y.toRed(this.red);
31195
31196 // x^2 = (y^2 - 1) / (d y^2 + 1)
31197 var y2 = y.redSqr();
31198 var lhs = y2.redSub(this.one);
31199 var rhs = y2.redMul(this.d).redAdd(this.one);
31200 var x2 = lhs.redMul(rhs.redInvm());
31201
31202 if (x2.cmp(this.zero) === 0) {
31203 if (odd)
31204 throw new Error('invalid point');
31205 else
31206 return this.point(this.zero, y);
ebd8d4e8
IC
31207 }
31208
8b095871
IC
31209 var x = x2.redSqrt();
31210 if (x.redSqr().redSub(x2).cmp(this.zero) !== 0)
31211 throw new Error('invalid point');
ebd8d4e8 31212
8b095871
IC
31213 if (x.isOdd() !== odd)
31214 x = x.redNeg();
ebd8d4e8 31215
8b095871
IC
31216 return this.point(x, y);
31217};
ebd8d4e8 31218
8b095871
IC
31219EdwardsCurve.prototype.validate = function validate(point) {
31220 if (point.isInfinity())
31221 return true;
ebd8d4e8 31222
8b095871
IC
31223 // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)
31224 point.normalize();
ebd8d4e8 31225
8b095871
IC
31226 var x2 = point.x.redSqr();
31227 var y2 = point.y.redSqr();
31228 var lhs = x2.redMul(this.a).redAdd(y2);
31229 var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));
ebd8d4e8 31230
8b095871
IC
31231 return lhs.cmp(rhs) === 0;
31232};
ebd8d4e8 31233
8b095871
IC
31234function Point(curve, x, y, z, t) {
31235 Base.BasePoint.call(this, curve, 'projective');
31236 if (x === null && y === null && z === null) {
31237 this.x = this.curve.zero;
31238 this.y = this.curve.one;
31239 this.z = this.curve.one;
31240 this.t = this.curve.zero;
31241 this.zOne = true;
31242 } else {
31243 this.x = new BN(x, 16);
31244 this.y = new BN(y, 16);
31245 this.z = z ? new BN(z, 16) : this.curve.one;
31246 this.t = t && new BN(t, 16);
31247 if (!this.x.red)
31248 this.x = this.x.toRed(this.curve.red);
31249 if (!this.y.red)
31250 this.y = this.y.toRed(this.curve.red);
31251 if (!this.z.red)
31252 this.z = this.z.toRed(this.curve.red);
31253 if (this.t && !this.t.red)
31254 this.t = this.t.toRed(this.curve.red);
31255 this.zOne = this.z === this.curve.one;
31256
31257 // Use extended coordinates
31258 if (this.curve.extended && !this.t) {
31259 this.t = this.x.redMul(this.y);
31260 if (!this.zOne)
31261 this.t = this.t.redMul(this.z.redInvm());
31262 }
31263 }
31264}
31265inherits(Point, Base.BasePoint);
31266
31267EdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
31268 return Point.fromJSON(this, obj);
31269};
31270
31271EdwardsCurve.prototype.point = function point(x, y, z, t) {
31272 return new Point(this, x, y, z, t);
31273};
31274
31275Point.fromJSON = function fromJSON(curve, obj) {
31276 return new Point(curve, obj[0], obj[1], obj[2]);
31277};
31278
31279Point.prototype.inspect = function inspect() {
31280 if (this.isInfinity())
31281 return '<EC Point Infinity>';
31282 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
31283 ' y: ' + this.y.fromRed().toString(16, 2) +
31284 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
31285};
31286
31287Point.prototype.isInfinity = function isInfinity() {
31288 // XXX This code assumes that zero is always zero in red
31289 return this.x.cmpn(0) === 0 &&
31290 this.y.cmp(this.z) === 0;
31291};
31292
31293Point.prototype._extDbl = function _extDbl() {
31294 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
31295 // #doubling-dbl-2008-hwcd
31296 // 4M + 4S
31297
31298 // A = X1^2
31299 var a = this.x.redSqr();
31300 // B = Y1^2
31301 var b = this.y.redSqr();
31302 // C = 2 * Z1^2
31303 var c = this.z.redSqr();
31304 c = c.redIAdd(c);
31305 // D = a * A
31306 var d = this.curve._mulA(a);
31307 // E = (X1 + Y1)^2 - A - B
31308 var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b);
31309 // G = D + B
31310 var g = d.redAdd(b);
31311 // F = G - C
31312 var f = g.redSub(c);
31313 // H = D - B
31314 var h = d.redSub(b);
31315 // X3 = E * F
31316 var nx = e.redMul(f);
31317 // Y3 = G * H
31318 var ny = g.redMul(h);
31319 // T3 = E * H
31320 var nt = e.redMul(h);
31321 // Z3 = F * G
31322 var nz = f.redMul(g);
31323 return this.curve.point(nx, ny, nz, nt);
31324};
31325
31326Point.prototype._projDbl = function _projDbl() {
31327 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
31328 // #doubling-dbl-2008-bbjlp
31329 // #doubling-dbl-2007-bl
31330 // and others
31331 // Generally 3M + 4S or 2M + 4S
31332
31333 // B = (X1 + Y1)^2
31334 var b = this.x.redAdd(this.y).redSqr();
31335 // C = X1^2
31336 var c = this.x.redSqr();
31337 // D = Y1^2
31338 var d = this.y.redSqr();
31339
31340 var nx;
31341 var ny;
31342 var nz;
31343 if (this.curve.twisted) {
31344 // E = a * C
31345 var e = this.curve._mulA(c);
31346 // F = E + D
31347 var f = e.redAdd(d);
31348 if (this.zOne) {
31349 // X3 = (B - C - D) * (F - 2)
31350 nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two));
31351 // Y3 = F * (E - D)
31352 ny = f.redMul(e.redSub(d));
31353 // Z3 = F^2 - 2 * F
31354 nz = f.redSqr().redSub(f).redSub(f);
31355 } else {
31356 // H = Z1^2
31357 var h = this.z.redSqr();
31358 // J = F - 2 * H
31359 var j = f.redSub(h).redISub(h);
31360 // X3 = (B-C-D)*J
31361 nx = b.redSub(c).redISub(d).redMul(j);
31362 // Y3 = F * (E - D)
31363 ny = f.redMul(e.redSub(d));
31364 // Z3 = F * J
31365 nz = f.redMul(j);
31366 }
31367 } else {
31368 // E = C + D
31369 var e = c.redAdd(d);
31370 // H = (c * Z1)^2
31371 var h = this.curve._mulC(this.c.redMul(this.z)).redSqr();
31372 // J = E - 2 * H
31373 var j = e.redSub(h).redSub(h);
31374 // X3 = c * (B - E) * J
31375 nx = this.curve._mulC(b.redISub(e)).redMul(j);
31376 // Y3 = c * E * (C - D)
31377 ny = this.curve._mulC(e).redMul(c.redISub(d));
31378 // Z3 = E * J
31379 nz = e.redMul(j);
31380 }
31381 return this.curve.point(nx, ny, nz);
31382};
31383
31384Point.prototype.dbl = function dbl() {
31385 if (this.isInfinity())
31386 return this;
31387
31388 // Double in extended coordinates
31389 if (this.curve.extended)
31390 return this._extDbl();
31391 else
31392 return this._projDbl();
31393};
31394
31395Point.prototype._extAdd = function _extAdd(p) {
31396 // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html
31397 // #addition-add-2008-hwcd-3
31398 // 8M
31399
31400 // A = (Y1 - X1) * (Y2 - X2)
31401 var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x));
31402 // B = (Y1 + X1) * (Y2 + X2)
31403 var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x));
31404 // C = T1 * k * T2
31405 var c = this.t.redMul(this.curve.dd).redMul(p.t);
31406 // D = Z1 * 2 * Z2
31407 var d = this.z.redMul(p.z.redAdd(p.z));
31408 // E = B - A
31409 var e = b.redSub(a);
31410 // F = D - C
31411 var f = d.redSub(c);
31412 // G = D + C
31413 var g = d.redAdd(c);
31414 // H = B + A
31415 var h = b.redAdd(a);
31416 // X3 = E * F
31417 var nx = e.redMul(f);
31418 // Y3 = G * H
31419 var ny = g.redMul(h);
31420 // T3 = E * H
31421 var nt = e.redMul(h);
31422 // Z3 = F * G
31423 var nz = f.redMul(g);
31424 return this.curve.point(nx, ny, nz, nt);
31425};
31426
31427Point.prototype._projAdd = function _projAdd(p) {
31428 // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html
31429 // #addition-add-2008-bbjlp
31430 // #addition-add-2007-bl
31431 // 10M + 1S
31432
31433 // A = Z1 * Z2
31434 var a = this.z.redMul(p.z);
31435 // B = A^2
31436 var b = a.redSqr();
31437 // C = X1 * X2
31438 var c = this.x.redMul(p.x);
31439 // D = Y1 * Y2
31440 var d = this.y.redMul(p.y);
31441 // E = d * C * D
31442 var e = this.curve.d.redMul(c).redMul(d);
31443 // F = B - E
31444 var f = b.redSub(e);
31445 // G = B + E
31446 var g = b.redAdd(e);
31447 // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)
31448 var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);
31449 var nx = a.redMul(f).redMul(tmp);
31450 var ny;
31451 var nz;
31452 if (this.curve.twisted) {
31453 // Y3 = A * G * (D - a * C)
31454 ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c)));
31455 // Z3 = F * G
31456 nz = f.redMul(g);
31457 } else {
31458 // Y3 = A * G * (D - C)
31459 ny = a.redMul(g).redMul(d.redSub(c));
31460 // Z3 = c * F * G
31461 nz = this.curve._mulC(f).redMul(g);
ebd8d4e8 31462 }
8b095871
IC
31463 return this.curve.point(nx, ny, nz);
31464};
ebd8d4e8 31465
8b095871
IC
31466Point.prototype.add = function add(p) {
31467 if (this.isInfinity())
31468 return p;
31469 if (p.isInfinity())
31470 return this;
ebd8d4e8 31471
8b095871
IC
31472 if (this.curve.extended)
31473 return this._extAdd(p);
31474 else
31475 return this._projAdd(p);
31476};
ebd8d4e8 31477
8b095871
IC
31478Point.prototype.mul = function mul(k) {
31479 if (this._hasDoubles(k))
31480 return this.curve._fixedNafMul(this, k);
31481 else
31482 return this.curve._wnafMul(this, k);
31483};
ebd8d4e8 31484
8b095871
IC
31485Point.prototype.mulAdd = function mulAdd(k1, p, k2) {
31486 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, false);
31487};
ebd8d4e8 31488
8b095871
IC
31489Point.prototype.jmulAdd = function jmulAdd(k1, p, k2) {
31490 return this.curve._wnafMulAdd(1, [ this, p ], [ k1, k2 ], 2, true);
31491};
ebd8d4e8 31492
8b095871
IC
31493Point.prototype.normalize = function normalize() {
31494 if (this.zOne)
31495 return this;
31496
31497 // Normalize coordinates
31498 var zi = this.z.redInvm();
31499 this.x = this.x.redMul(zi);
31500 this.y = this.y.redMul(zi);
31501 if (this.t)
31502 this.t = this.t.redMul(zi);
31503 this.z = this.curve.one;
31504 this.zOne = true;
31505 return this;
31506};
31507
31508Point.prototype.neg = function neg() {
31509 return this.curve.point(this.x.redNeg(),
31510 this.y,
31511 this.z,
31512 this.t && this.t.redNeg());
31513};
31514
31515Point.prototype.getX = function getX() {
31516 this.normalize();
31517 return this.x.fromRed();
31518};
31519
31520Point.prototype.getY = function getY() {
31521 this.normalize();
31522 return this.y.fromRed();
31523};
31524
31525Point.prototype.eq = function eq(other) {
31526 return this === other ||
31527 this.getX().cmp(other.getX()) === 0 &&
31528 this.getY().cmp(other.getY()) === 0;
31529};
31530
31531Point.prototype.eqXToP = function eqXToP(x) {
31532 var rx = x.toRed(this.curve.red).redMul(this.z);
31533 if (this.x.cmp(rx) === 0)
31534 return true;
ebd8d4e8 31535
8b095871
IC
31536 var xc = x.clone();
31537 var t = this.curve.redN.redMul(this.z);
31538 for (;;) {
31539 xc.iadd(this.curve.n);
31540 if (xc.cmp(this.curve.p) >= 0)
31541 return false;
ebd8d4e8 31542
8b095871
IC
31543 rx.redIAdd(t);
31544 if (this.x.cmp(rx) === 0)
31545 return true;
ebd8d4e8 31546 }
8b095871
IC
31547 return false;
31548};
ebd8d4e8 31549
8b095871
IC
31550// Compatibility with BaseCurve
31551Point.prototype.toP = Point.prototype.normalize;
31552Point.prototype.mixedAdd = Point.prototype.add;
ebd8d4e8 31553
8b095871
IC
31554},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],42:[function(require,module,exports){
31555'use strict';
ebd8d4e8 31556
8b095871 31557var curve = exports;
ebd8d4e8 31558
8b095871
IC
31559curve.base = require('./base');
31560curve.short = require('./short');
31561curve.mont = require('./mont');
31562curve.edwards = require('./edwards');
ebd8d4e8 31563
8b095871
IC
31564},{"./base":40,"./edwards":41,"./mont":43,"./short":44}],43:[function(require,module,exports){
31565'use strict';
ebd8d4e8 31566
8b095871
IC
31567var curve = require('../curve');
31568var BN = require('bn.js');
31569var inherits = require('inherits');
31570var Base = curve.base;
ebd8d4e8 31571
8b095871
IC
31572var elliptic = require('../../elliptic');
31573var utils = elliptic.utils;
ebd8d4e8 31574
8b095871
IC
31575function MontCurve(conf) {
31576 Base.call(this, 'mont', conf);
ebd8d4e8 31577
8b095871
IC
31578 this.a = new BN(conf.a, 16).toRed(this.red);
31579 this.b = new BN(conf.b, 16).toRed(this.red);
31580 this.i4 = new BN(4).toRed(this.red).redInvm();
31581 this.two = new BN(2).toRed(this.red);
31582 this.a24 = this.i4.redMul(this.a.redAdd(this.two));
ebd8d4e8 31583}
8b095871
IC
31584inherits(MontCurve, Base);
31585module.exports = MontCurve;
ebd8d4e8 31586
8b095871
IC
31587MontCurve.prototype.validate = function validate(point) {
31588 var x = point.normalize().x;
31589 var x2 = x.redSqr();
31590 var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);
31591 var y = rhs.redSqrt();
ebd8d4e8 31592
8b095871
IC
31593 return y.redSqr().cmp(rhs) === 0;
31594};
ebd8d4e8 31595
8b095871
IC
31596function Point(curve, x, z) {
31597 Base.BasePoint.call(this, curve, 'projective');
31598 if (x === null && z === null) {
31599 this.x = this.curve.one;
31600 this.z = this.curve.zero;
31601 } else {
31602 this.x = new BN(x, 16);
31603 this.z = new BN(z, 16);
31604 if (!this.x.red)
31605 this.x = this.x.toRed(this.curve.red);
31606 if (!this.z.red)
31607 this.z = this.z.toRed(this.curve.red);
31608 }
31609}
31610inherits(Point, Base.BasePoint);
ebd8d4e8 31611
8b095871
IC
31612MontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {
31613 return this.point(utils.toArray(bytes, enc), 1);
31614};
ebd8d4e8 31615
8b095871
IC
31616MontCurve.prototype.point = function point(x, z) {
31617 return new Point(this, x, z);
31618};
ebd8d4e8 31619
8b095871
IC
31620MontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {
31621 return Point.fromJSON(this, obj);
31622};
ebd8d4e8 31623
8b095871
IC
31624Point.prototype.precompute = function precompute() {
31625 // No-op
31626};
ebd8d4e8 31627
8b095871
IC
31628Point.prototype._encode = function _encode() {
31629 return this.getX().toArray('be', this.curve.p.byteLength());
31630};
ebd8d4e8 31631
8b095871
IC
31632Point.fromJSON = function fromJSON(curve, obj) {
31633 return new Point(curve, obj[0], obj[1] || curve.one);
31634};
ebd8d4e8 31635
8b095871
IC
31636Point.prototype.inspect = function inspect() {
31637 if (this.isInfinity())
31638 return '<EC Point Infinity>';
31639 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
31640 ' z: ' + this.z.fromRed().toString(16, 2) + '>';
31641};
ebd8d4e8 31642
8b095871
IC
31643Point.prototype.isInfinity = function isInfinity() {
31644 // XXX This code assumes that zero is always zero in red
31645 return this.z.cmpn(0) === 0;
31646};
ebd8d4e8 31647
8b095871
IC
31648Point.prototype.dbl = function dbl() {
31649 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3
31650 // 2M + 2S + 4A
31651
31652 // A = X1 + Z1
31653 var a = this.x.redAdd(this.z);
31654 // AA = A^2
31655 var aa = a.redSqr();
31656 // B = X1 - Z1
31657 var b = this.x.redSub(this.z);
31658 // BB = B^2
31659 var bb = b.redSqr();
31660 // C = AA - BB
31661 var c = aa.redSub(bb);
31662 // X3 = AA * BB
31663 var nx = aa.redMul(bb);
31664 // Z3 = C * (BB + A24 * C)
31665 var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));
31666 return this.curve.point(nx, nz);
31667};
ebd8d4e8 31668
8b095871
IC
31669Point.prototype.add = function add() {
31670 throw new Error('Not supported on Montgomery curve');
31671};
ebd8d4e8 31672
8b095871
IC
31673Point.prototype.diffAdd = function diffAdd(p, diff) {
31674 // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3
31675 // 4M + 2S + 6A
31676
31677 // A = X2 + Z2
31678 var a = this.x.redAdd(this.z);
31679 // B = X2 - Z2
31680 var b = this.x.redSub(this.z);
31681 // C = X3 + Z3
31682 var c = p.x.redAdd(p.z);
31683 // D = X3 - Z3
31684 var d = p.x.redSub(p.z);
31685 // DA = D * A
31686 var da = d.redMul(a);
31687 // CB = C * B
31688 var cb = c.redMul(b);
31689 // X5 = Z1 * (DA + CB)^2
31690 var nx = diff.z.redMul(da.redAdd(cb).redSqr());
31691 // Z5 = X1 * (DA - CB)^2
31692 var nz = diff.x.redMul(da.redISub(cb).redSqr());
31693 return this.curve.point(nx, nz);
31694};
ebd8d4e8 31695
8b095871
IC
31696Point.prototype.mul = function mul(k) {
31697 var t = k.clone();
31698 var a = this; // (N / 2) * Q + Q
31699 var b = this.curve.point(null, null); // (N / 2) * Q
31700 var c = this; // Q
31701
31702 for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1))
31703 bits.push(t.andln(1));
31704
31705 for (var i = bits.length - 1; i >= 0; i--) {
31706 if (bits[i] === 0) {
31707 // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q
31708 a = a.diffAdd(b, c);
31709 // N * Q = 2 * ((N / 2) * Q + Q))
31710 b = b.dbl();
31711 } else {
31712 // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)
31713 b = a.diffAdd(b, c);
31714 // N * Q + Q = 2 * ((N / 2) * Q + Q)
31715 a = a.dbl();
31716 }
ebd8d4e8 31717 }
8b095871
IC
31718 return b;
31719};
ebd8d4e8 31720
8b095871
IC
31721Point.prototype.mulAdd = function mulAdd() {
31722 throw new Error('Not supported on Montgomery curve');
31723};
ebd8d4e8 31724
8b095871
IC
31725Point.prototype.jumlAdd = function jumlAdd() {
31726 throw new Error('Not supported on Montgomery curve');
31727};
ebd8d4e8 31728
8b095871
IC
31729Point.prototype.eq = function eq(other) {
31730 return this.getX().cmp(other.getX()) === 0;
31731};
ebd8d4e8 31732
8b095871
IC
31733Point.prototype.normalize = function normalize() {
31734 this.x = this.x.redMul(this.z.redInvm());
31735 this.z = this.curve.one;
31736 return this;
31737};
ebd8d4e8 31738
8b095871
IC
31739Point.prototype.getX = function getX() {
31740 // Normalize coordinates
31741 this.normalize();
31742
31743 return this.x.fromRed();
31744};
31745
31746},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],44:[function(require,module,exports){
ab78acc6 31747'use strict';
ebd8d4e8 31748
8b095871
IC
31749var curve = require('../curve');
31750var elliptic = require('../../elliptic');
31751var BN = require('bn.js');
31752var inherits = require('inherits');
31753var Base = curve.base;
ab78acc6 31754
8b095871 31755var assert = elliptic.utils.assert;
ebd8d4e8 31756
8b095871
IC
31757function ShortCurve(conf) {
31758 Base.call(this, 'short', conf);
ebd8d4e8 31759
8b095871
IC
31760 this.a = new BN(conf.a, 16).toRed(this.red);
31761 this.b = new BN(conf.b, 16).toRed(this.red);
31762 this.tinv = this.two.redInvm();
ab78acc6 31763
8b095871
IC
31764 this.zeroA = this.a.fromRed().cmpn(0) === 0;
31765 this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0;
ab78acc6 31766
8b095871
IC
31767 // If the curve is endomorphic, precalculate beta and lambda
31768 this.endo = this._getEndomorphism(conf);
31769 this._endoWnafT1 = new Array(4);
31770 this._endoWnafT2 = new Array(4);
ebd8d4e8 31771}
8b095871
IC
31772inherits(ShortCurve, Base);
31773module.exports = ShortCurve;
ebd8d4e8 31774
8b095871
IC
31775ShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {
31776 // No efficient endomorphism
31777 if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1)
31778 return;
ebd8d4e8 31779
8b095871
IC
31780 // Compute beta and lambda, that lambda * P = (beta * Px; Py)
31781 var beta;
31782 var lambda;
31783 if (conf.beta) {
31784 beta = new BN(conf.beta, 16).toRed(this.red);
31785 } else {
31786 var betas = this._getEndoRoots(this.p);
31787 // Choose the smallest beta
31788 beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];
31789 beta = beta.toRed(this.red);
31790 }
31791 if (conf.lambda) {
31792 lambda = new BN(conf.lambda, 16);
31793 } else {
31794 // Choose the lambda that is matching selected beta
31795 var lambdas = this._getEndoRoots(this.n);
31796 if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {
31797 lambda = lambdas[0];
31798 } else {
31799 lambda = lambdas[1];
31800 assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);
31801 }
31802 }
ab78acc6 31803
8b095871
IC
31804 // Get basis vectors, used for balanced length-two representation
31805 var basis;
31806 if (conf.basis) {
31807 basis = conf.basis.map(function(vec) {
31808 return {
31809 a: new BN(vec.a, 16),
31810 b: new BN(vec.b, 16)
31811 };
31812 });
31813 } else {
31814 basis = this._getEndoBasis(lambda);
31815 }
ab78acc6 31816
8b095871
IC
31817 return {
31818 beta: beta,
31819 lambda: lambda,
31820 basis: basis
31821 };
31822};
ab78acc6 31823
8b095871
IC
31824ShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {
31825 // Find roots of for x^2 + x + 1 in F
31826 // Root = (-1 +- Sqrt(-3)) / 2
31827 //
31828 var red = num === this.p ? this.red : BN.mont(num);
31829 var tinv = new BN(2).toRed(red).redInvm();
31830 var ntinv = tinv.redNeg();
ab78acc6 31831
8b095871 31832 var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);
ab78acc6 31833
8b095871
IC
31834 var l1 = ntinv.redAdd(s).fromRed();
31835 var l2 = ntinv.redSub(s).fromRed();
31836 return [ l1, l2 ];
31837};
ab78acc6 31838
8b095871
IC
31839ShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {
31840 // aprxSqrt >= sqrt(this.n)
31841 var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2));
31842
31843 // 3.74
31844 // Run EGCD, until r(L + 1) < aprxSqrt
31845 var u = lambda;
31846 var v = this.n.clone();
31847 var x1 = new BN(1);
31848 var y1 = new BN(0);
31849 var x2 = new BN(0);
31850 var y2 = new BN(1);
31851
31852 // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)
31853 var a0;
31854 var b0;
31855 // First vector
31856 var a1;
31857 var b1;
31858 // Second vector
31859 var a2;
31860 var b2;
31861
31862 var prevR;
31863 var i = 0;
31864 var r;
31865 var x;
31866 while (u.cmpn(0) !== 0) {
31867 var q = v.div(u);
31868 r = v.sub(q.mul(u));
31869 x = x2.sub(q.mul(x1));
31870 var y = y2.sub(q.mul(y1));
31871
31872 if (!a1 && r.cmp(aprxSqrt) < 0) {
31873 a0 = prevR.neg();
31874 b0 = x1;
31875 a1 = r.neg();
31876 b1 = x;
31877 } else if (a1 && ++i === 2) {
31878 break;
ab78acc6 31879 }
8b095871 31880 prevR = r;
ab78acc6 31881
8b095871
IC
31882 v = u;
31883 u = r;
31884 x2 = x1;
31885 x1 = x;
31886 y2 = y1;
31887 y1 = y;
ebd8d4e8 31888 }
8b095871
IC
31889 a2 = r.neg();
31890 b2 = x;
ab78acc6 31891
8b095871
IC
31892 var len1 = a1.sqr().add(b1.sqr());
31893 var len2 = a2.sqr().add(b2.sqr());
31894 if (len2.cmp(len1) >= 0) {
31895 a2 = a0;
31896 b2 = b0;
31897 }
ebd8d4e8 31898
8b095871
IC
31899 // Normalize signs
31900 if (a1.negative) {
31901 a1 = a1.neg();
31902 b1 = b1.neg();
31903 }
31904 if (a2.negative) {
31905 a2 = a2.neg();
31906 b2 = b2.neg();
31907 }
ebd8d4e8 31908
8b095871
IC
31909 return [
31910 { a: a1, b: b1 },
31911 { a: a2, b: b2 }
31912 ];
31913};
ab78acc6 31914
8b095871
IC
31915ShortCurve.prototype._endoSplit = function _endoSplit(k) {
31916 var basis = this.endo.basis;
31917 var v1 = basis[0];
31918 var v2 = basis[1];
ab78acc6 31919
8b095871
IC
31920 var c1 = v2.b.mul(k).divRound(this.n);
31921 var c2 = v1.b.neg().mul(k).divRound(this.n);
ab78acc6 31922
8b095871
IC
31923 var p1 = c1.mul(v1.a);
31924 var p2 = c2.mul(v2.a);
31925 var q1 = c1.mul(v1.b);
31926 var q2 = c2.mul(v2.b);
ab78acc6 31927
8b095871
IC
31928 // Calculate answer
31929 var k1 = k.sub(p1).sub(p2);
31930 var k2 = q1.add(q2).neg();
31931 return { k1: k1, k2: k2 };
31932};
ab78acc6 31933
8b095871
IC
31934ShortCurve.prototype.pointFromX = function pointFromX(x, odd) {
31935 x = new BN(x, 16);
31936 if (!x.red)
31937 x = x.toRed(this.red);
ab78acc6 31938
8b095871
IC
31939 var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);
31940 var y = y2.redSqrt();
31941 if (y.redSqr().redSub(y2).cmp(this.zero) !== 0)
31942 throw new Error('invalid point');
ab78acc6 31943
8b095871
IC
31944 // XXX Is there any way to tell if the number is odd without converting it
31945 // to non-red form?
31946 var isOdd = y.fromRed().isOdd();
31947 if (odd && !isOdd || !odd && isOdd)
31948 y = y.redNeg();
ab78acc6 31949
8b095871
IC
31950 return this.point(x, y);
31951};
ab78acc6 31952
8b095871
IC
31953ShortCurve.prototype.validate = function validate(point) {
31954 if (point.inf)
31955 return true;
ab78acc6 31956
8b095871
IC
31957 var x = point.x;
31958 var y = point.y;
ab78acc6 31959
8b095871
IC
31960 var ax = this.a.redMul(x);
31961 var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);
31962 return y.redSqr().redISub(rhs).cmpn(0) === 0;
31963};
ab78acc6 31964
8b095871
IC
31965ShortCurve.prototype._endoWnafMulAdd =
31966 function _endoWnafMulAdd(points, coeffs, jacobianResult) {
31967 var npoints = this._endoWnafT1;
31968 var ncoeffs = this._endoWnafT2;
31969 for (var i = 0; i < points.length; i++) {
31970 var split = this._endoSplit(coeffs[i]);
31971 var p = points[i];
31972 var beta = p._getBeta();
ab78acc6 31973
8b095871
IC
31974 if (split.k1.negative) {
31975 split.k1.ineg();
31976 p = p.neg(true);
31977 }
31978 if (split.k2.negative) {
31979 split.k2.ineg();
31980 beta = beta.neg(true);
ab78acc6 31981 }
ab78acc6 31982
8b095871
IC
31983 npoints[i * 2] = p;
31984 npoints[i * 2 + 1] = beta;
31985 ncoeffs[i * 2] = split.k1;
31986 ncoeffs[i * 2 + 1] = split.k2;
31987 }
31988 var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult);
ab78acc6 31989
8b095871
IC
31990 // Clean-up references to points and coefficients
31991 for (var j = 0; j < i * 2; j++) {
31992 npoints[j] = null;
31993 ncoeffs[j] = null;
31994 }
31995 return res;
31996};
31997
31998function Point(curve, x, y, isRed) {
31999 Base.BasePoint.call(this, curve, 'affine');
32000 if (x === null && y === null) {
32001 this.x = null;
32002 this.y = null;
32003 this.inf = true;
32004 } else {
32005 this.x = new BN(x, 16);
32006 this.y = new BN(y, 16);
32007 // Force redgomery representation when loading from JSON
32008 if (isRed) {
32009 this.x.forceRed(this.curve.red);
32010 this.y.forceRed(this.curve.red);
ab78acc6 32011 }
8b095871
IC
32012 if (!this.x.red)
32013 this.x = this.x.toRed(this.curve.red);
32014 if (!this.y.red)
32015 this.y = this.y.toRed(this.curve.red);
32016 this.inf = false;
32017 }
32018}
32019inherits(Point, Base.BasePoint);
ab78acc6 32020
8b095871
IC
32021ShortCurve.prototype.point = function point(x, y, isRed) {
32022 return new Point(this, x, y, isRed);
32023};
ab78acc6 32024
8b095871
IC
32025ShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {
32026 return Point.fromJSON(this, obj, red);
32027};
ab78acc6 32028
8b095871
IC
32029Point.prototype._getBeta = function _getBeta() {
32030 if (!this.curve.endo)
32031 return;
ab78acc6 32032
8b095871
IC
32033 var pre = this.precomputed;
32034 if (pre && pre.beta)
32035 return pre.beta;
ab78acc6 32036
8b095871
IC
32037 var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);
32038 if (pre) {
32039 var curve = this.curve;
32040 var endoMul = function(p) {
32041 return curve.point(p.x.redMul(curve.endo.beta), p.y);
32042 };
32043 pre.beta = beta;
32044 beta.precomputed = {
32045 beta: null,
32046 naf: pre.naf && {
32047 wnd: pre.naf.wnd,
32048 points: pre.naf.points.map(endoMul)
32049 },
32050 doubles: pre.doubles && {
32051 step: pre.doubles.step,
32052 points: pre.doubles.points.map(endoMul)
32053 }
ab78acc6 32054 };
ab78acc6 32055 }
8b095871 32056 return beta;
ab78acc6
IC
32057};
32058
8b095871
IC
32059Point.prototype.toJSON = function toJSON() {
32060 if (!this.precomputed)
32061 return [ this.x, this.y ];
ab78acc6 32062
8b095871
IC
32063 return [ this.x, this.y, this.precomputed && {
32064 doubles: this.precomputed.doubles && {
32065 step: this.precomputed.doubles.step,
32066 points: this.precomputed.doubles.points.slice(1)
32067 },
32068 naf: this.precomputed.naf && {
32069 wnd: this.precomputed.naf.wnd,
32070 points: this.precomputed.naf.points.slice(1)
32071 }
32072 } ];
32073};
ab78acc6 32074
8b095871
IC
32075Point.fromJSON = function fromJSON(curve, obj, red) {
32076 if (typeof obj === 'string')
32077 obj = JSON.parse(obj);
32078 var res = curve.point(obj[0], obj[1], red);
32079 if (!obj[2])
32080 return res;
ab78acc6 32081
8b095871
IC
32082 function obj2point(obj) {
32083 return curve.point(obj[0], obj[1], red);
32084 }
32085
32086 var pre = obj[2];
32087 res.precomputed = {
32088 beta: null,
32089 doubles: pre.doubles && {
32090 step: pre.doubles.step,
32091 points: [ res ].concat(pre.doubles.points.map(obj2point))
32092 },
32093 naf: pre.naf && {
32094 wnd: pre.naf.wnd,
32095 points: [ res ].concat(pre.naf.points.map(obj2point))
ab78acc6 32096 }
8b095871
IC
32097 };
32098 return res;
32099};
ab78acc6 32100
8b095871
IC
32101Point.prototype.inspect = function inspect() {
32102 if (this.isInfinity())
32103 return '<EC Point Infinity>';
32104 return '<EC Point x: ' + this.x.fromRed().toString(16, 2) +
32105 ' y: ' + this.y.fromRed().toString(16, 2) + '>';
32106};
ab78acc6 32107
8b095871
IC
32108Point.prototype.isInfinity = function isInfinity() {
32109 return this.inf;
32110};
ebd8d4e8 32111
8b095871
IC
32112Point.prototype.add = function add(p) {
32113 // O + P = P
32114 if (this.inf)
32115 return p;
ab78acc6 32116
8b095871
IC
32117 // P + O = P
32118 if (p.inf)
32119 return this;
ab78acc6 32120
8b095871
IC
32121 // P + P = 2P
32122 if (this.eq(p))
32123 return this.dbl();
ab78acc6 32124
8b095871
IC
32125 // P + (-P) = O
32126 if (this.neg().eq(p))
32127 return this.curve.point(null, null);
ab78acc6 32128
8b095871
IC
32129 // P + Q = O
32130 if (this.x.cmp(p.x) === 0)
32131 return this.curve.point(null, null);
ebd8d4e8 32132
8b095871
IC
32133 var c = this.y.redSub(p.y);
32134 if (c.cmpn(0) !== 0)
32135 c = c.redMul(this.x.redSub(p.x).redInvm());
32136 var nx = c.redSqr().redISub(this.x).redISub(p.x);
32137 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
32138 return this.curve.point(nx, ny);
32139};
ab78acc6 32140
8b095871
IC
32141Point.prototype.dbl = function dbl() {
32142 if (this.inf)
32143 return this;
ebd8d4e8 32144
8b095871
IC
32145 // 2P = O
32146 var ys1 = this.y.redAdd(this.y);
32147 if (ys1.cmpn(0) === 0)
32148 return this.curve.point(null, null);
ebd8d4e8 32149
8b095871 32150 var a = this.curve.a;
ebd8d4e8 32151
8b095871
IC
32152 var x2 = this.x.redSqr();
32153 var dyinv = ys1.redInvm();
32154 var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);
ebd8d4e8 32155
8b095871
IC
32156 var nx = c.redSqr().redISub(this.x.redAdd(this.x));
32157 var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);
32158 return this.curve.point(nx, ny);
32159};
ebd8d4e8 32160
8b095871
IC
32161Point.prototype.getX = function getX() {
32162 return this.x.fromRed();
32163};
ab78acc6 32164
8b095871
IC
32165Point.prototype.getY = function getY() {
32166 return this.y.fromRed();
32167};
ebd8d4e8 32168
8b095871
IC
32169Point.prototype.mul = function mul(k) {
32170 k = new BN(k, 16);
ebd8d4e8 32171
8b095871
IC
32172 if (this._hasDoubles(k))
32173 return this.curve._fixedNafMul(this, k);
32174 else if (this.curve.endo)
32175 return this.curve._endoWnafMulAdd([ this ], [ k ]);
32176 else
32177 return this.curve._wnafMul(this, k);
32178};
ebd8d4e8 32179
8b095871
IC
32180Point.prototype.mulAdd = function mulAdd(k1, p2, k2) {
32181 var points = [ this, p2 ];
32182 var coeffs = [ k1, k2 ];
32183 if (this.curve.endo)
32184 return this.curve._endoWnafMulAdd(points, coeffs);
32185 else
32186 return this.curve._wnafMulAdd(1, points, coeffs, 2);
32187};
ebd8d4e8 32188
8b095871
IC
32189Point.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {
32190 var points = [ this, p2 ];
32191 var coeffs = [ k1, k2 ];
32192 if (this.curve.endo)
32193 return this.curve._endoWnafMulAdd(points, coeffs, true);
32194 else
32195 return this.curve._wnafMulAdd(1, points, coeffs, 2, true);
32196};
ebd8d4e8 32197
8b095871
IC
32198Point.prototype.eq = function eq(p) {
32199 return this === p ||
32200 this.inf === p.inf &&
32201 (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);
32202};
ebd8d4e8 32203
8b095871
IC
32204Point.prototype.neg = function neg(_precompute) {
32205 if (this.inf)
32206 return this;
ebd8d4e8 32207
8b095871
IC
32208 var res = this.curve.point(this.x, this.y.redNeg());
32209 if (_precompute && this.precomputed) {
32210 var pre = this.precomputed;
32211 var negate = function(p) {
32212 return p.neg();
32213 };
32214 res.precomputed = {
32215 naf: pre.naf && {
32216 wnd: pre.naf.wnd,
32217 points: pre.naf.points.map(negate)
32218 },
32219 doubles: pre.doubles && {
32220 step: pre.doubles.step,
32221 points: pre.doubles.points.map(negate)
32222 }
32223 };
32224 }
32225 return res;
32226};
ebd8d4e8 32227
8b095871
IC
32228Point.prototype.toJ = function toJ() {
32229 if (this.inf)
32230 return this.curve.jpoint(null, null, null);
ebd8d4e8 32231
8b095871
IC
32232 var res = this.curve.jpoint(this.x, this.y, this.curve.one);
32233 return res;
32234};
ebd8d4e8 32235
8b095871
IC
32236function JPoint(curve, x, y, z) {
32237 Base.BasePoint.call(this, curve, 'jacobian');
32238 if (x === null && y === null && z === null) {
32239 this.x = this.curve.one;
32240 this.y = this.curve.one;
32241 this.z = new BN(0);
32242 } else {
32243 this.x = new BN(x, 16);
32244 this.y = new BN(y, 16);
32245 this.z = new BN(z, 16);
32246 }
32247 if (!this.x.red)
32248 this.x = this.x.toRed(this.curve.red);
32249 if (!this.y.red)
32250 this.y = this.y.toRed(this.curve.red);
32251 if (!this.z.red)
32252 this.z = this.z.toRed(this.curve.red);
ebd8d4e8 32253
8b095871 32254 this.zOne = this.z === this.curve.one;
ab78acc6 32255}
8b095871 32256inherits(JPoint, Base.BasePoint);
ab78acc6 32257
8b095871
IC
32258ShortCurve.prototype.jpoint = function jpoint(x, y, z) {
32259 return new JPoint(this, x, y, z);
32260};
ab78acc6 32261
8b095871
IC
32262JPoint.prototype.toP = function toP() {
32263 if (this.isInfinity())
32264 return this.curve.point(null, null);
ab78acc6 32265
8b095871
IC
32266 var zinv = this.z.redInvm();
32267 var zinv2 = zinv.redSqr();
32268 var ax = this.x.redMul(zinv2);
32269 var ay = this.y.redMul(zinv2).redMul(zinv);
ab78acc6 32270
8b095871
IC
32271 return this.curve.point(ax, ay);
32272};
ab78acc6 32273
8b095871
IC
32274JPoint.prototype.neg = function neg() {
32275 return this.curve.jpoint(this.x, this.y.redNeg(), this.z);
32276};
ab78acc6 32277
8b095871
IC
32278JPoint.prototype.add = function add(p) {
32279 // O + P = P
32280 if (this.isInfinity())
32281 return p;
ab78acc6 32282
8b095871
IC
32283 // P + O = P
32284 if (p.isInfinity())
32285 return this;
ab78acc6 32286
8b095871
IC
32287 // 12M + 4S + 7A
32288 var pz2 = p.z.redSqr();
32289 var z2 = this.z.redSqr();
32290 var u1 = this.x.redMul(pz2);
32291 var u2 = p.x.redMul(z2);
32292 var s1 = this.y.redMul(pz2.redMul(p.z));
32293 var s2 = p.y.redMul(z2.redMul(this.z));
32294
32295 var h = u1.redSub(u2);
32296 var r = s1.redSub(s2);
32297 if (h.cmpn(0) === 0) {
32298 if (r.cmpn(0) !== 0)
32299 return this.curve.jpoint(null, null, null);
32300 else
32301 return this.dbl();
32302 }
ab78acc6 32303
8b095871
IC
32304 var h2 = h.redSqr();
32305 var h3 = h2.redMul(h);
32306 var v = u1.redMul(h2);
ab78acc6 32307
8b095871
IC
32308 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
32309 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
32310 var nz = this.z.redMul(p.z).redMul(h);
ab78acc6 32311
8b095871
IC
32312 return this.curve.jpoint(nx, ny, nz);
32313};
ab78acc6 32314
8b095871
IC
32315JPoint.prototype.mixedAdd = function mixedAdd(p) {
32316 // O + P = P
32317 if (this.isInfinity())
32318 return p.toJ();
ab78acc6 32319
8b095871
IC
32320 // P + O = P
32321 if (p.isInfinity())
32322 return this;
ab78acc6 32323
8b095871
IC
32324 // 8M + 3S + 7A
32325 var z2 = this.z.redSqr();
32326 var u1 = this.x;
32327 var u2 = p.x.redMul(z2);
32328 var s1 = this.y;
32329 var s2 = p.y.redMul(z2).redMul(this.z);
32330
32331 var h = u1.redSub(u2);
32332 var r = s1.redSub(s2);
32333 if (h.cmpn(0) === 0) {
32334 if (r.cmpn(0) !== 0)
32335 return this.curve.jpoint(null, null, null);
32336 else
32337 return this.dbl();
ab78acc6
IC
32338 }
32339
8b095871
IC
32340 var h2 = h.redSqr();
32341 var h3 = h2.redMul(h);
32342 var v = u1.redMul(h2);
ab78acc6 32343
8b095871
IC
32344 var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);
32345 var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));
32346 var nz = this.z.redMul(h);
ab78acc6 32347
8b095871
IC
32348 return this.curve.jpoint(nx, ny, nz);
32349};
ab78acc6 32350
8b095871
IC
32351JPoint.prototype.dblp = function dblp(pow) {
32352 if (pow === 0)
32353 return this;
32354 if (this.isInfinity())
32355 return this;
32356 if (!pow)
32357 return this.dbl();
32358
32359 if (this.curve.zeroA || this.curve.threeA) {
32360 var r = this;
32361 for (var i = 0; i < pow; i++)
32362 r = r.dbl();
32363 return r;
32364 }
32365
32366 // 1M + 2S + 1A + N * (4S + 5M + 8A)
32367 // N = 1 => 6M + 6S + 9A
32368 var a = this.curve.a;
32369 var tinv = this.curve.tinv;
32370
32371 var jx = this.x;
32372 var jy = this.y;
32373 var jz = this.z;
32374 var jz4 = jz.redSqr().redSqr();
32375
32376 // Reuse results
32377 var jyd = jy.redAdd(jy);
32378 for (var i = 0; i < pow; i++) {
32379 var jx2 = jx.redSqr();
32380 var jyd2 = jyd.redSqr();
32381 var jyd4 = jyd2.redSqr();
32382 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
32383
32384 var t1 = jx.redMul(jyd2);
32385 var nx = c.redSqr().redISub(t1.redAdd(t1));
32386 var t2 = t1.redISub(nx);
32387 var dny = c.redMul(t2);
32388 dny = dny.redIAdd(dny).redISub(jyd4);
32389 var nz = jyd.redMul(jz);
32390 if (i + 1 < pow)
32391 jz4 = jz4.redMul(jyd4);
32392
32393 jx = nx;
32394 jz = nz;
32395 jyd = dny;
32396 }
32397
32398 return this.curve.jpoint(jx, jyd.redMul(tinv), jz);
32399};
ab78acc6 32400
8b095871
IC
32401JPoint.prototype.dbl = function dbl() {
32402 if (this.isInfinity())
32403 return this;
ab78acc6 32404
8b095871
IC
32405 if (this.curve.zeroA)
32406 return this._zeroDbl();
32407 else if (this.curve.threeA)
32408 return this._threeDbl();
32409 else
32410 return this._dbl();
32411};
ab78acc6 32412
8b095871
IC
32413JPoint.prototype._zeroDbl = function _zeroDbl() {
32414 var nx;
32415 var ny;
32416 var nz;
32417 // Z = 1
32418 if (this.zOne) {
32419 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
32420 // #doubling-mdbl-2007-bl
32421 // 1M + 5S + 14A
32422
32423 // XX = X1^2
32424 var xx = this.x.redSqr();
32425 // YY = Y1^2
32426 var yy = this.y.redSqr();
32427 // YYYY = YY^2
32428 var yyyy = yy.redSqr();
32429 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
32430 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32431 s = s.redIAdd(s);
32432 // M = 3 * XX + a; a = 0
32433 var m = xx.redAdd(xx).redIAdd(xx);
32434 // T = M ^ 2 - 2*S
32435 var t = m.redSqr().redISub(s).redISub(s);
32436
32437 // 8 * YYYY
32438 var yyyy8 = yyyy.redIAdd(yyyy);
32439 yyyy8 = yyyy8.redIAdd(yyyy8);
32440 yyyy8 = yyyy8.redIAdd(yyyy8);
32441
32442 // X3 = T
32443 nx = t;
32444 // Y3 = M * (S - T) - 8 * YYYY
32445 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
32446 // Z3 = 2*Y1
32447 nz = this.y.redAdd(this.y);
32448 } else {
32449 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html
32450 // #doubling-dbl-2009-l
32451 // 2M + 5S + 13A
32452
32453 // A = X1^2
32454 var a = this.x.redSqr();
32455 // B = Y1^2
32456 var b = this.y.redSqr();
32457 // C = B^2
32458 var c = b.redSqr();
32459 // D = 2 * ((X1 + B)^2 - A - C)
32460 var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);
32461 d = d.redIAdd(d);
32462 // E = 3 * A
32463 var e = a.redAdd(a).redIAdd(a);
32464 // F = E^2
32465 var f = e.redSqr();
32466
32467 // 8 * C
32468 var c8 = c.redIAdd(c);
32469 c8 = c8.redIAdd(c8);
32470 c8 = c8.redIAdd(c8);
32471
32472 // X3 = F - 2 * D
32473 nx = f.redISub(d).redISub(d);
32474 // Y3 = E * (D - X3) - 8 * C
32475 ny = e.redMul(d.redISub(nx)).redISub(c8);
32476 // Z3 = 2 * Y1 * Z1
32477 nz = this.y.redMul(this.z);
32478 nz = nz.redIAdd(nz);
32479 }
32480
32481 return this.curve.jpoint(nx, ny, nz);
32482};
ab78acc6 32483
8b095871
IC
32484JPoint.prototype._threeDbl = function _threeDbl() {
32485 var nx;
32486 var ny;
32487 var nz;
32488 // Z = 1
32489 if (this.zOne) {
32490 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html
32491 // #doubling-mdbl-2007-bl
32492 // 1M + 5S + 15A
32493
32494 // XX = X1^2
32495 var xx = this.x.redSqr();
32496 // YY = Y1^2
32497 var yy = this.y.redSqr();
32498 // YYYY = YY^2
32499 var yyyy = yy.redSqr();
32500 // S = 2 * ((X1 + YY)^2 - XX - YYYY)
32501 var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32502 s = s.redIAdd(s);
32503 // M = 3 * XX + a
32504 var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a);
32505 // T = M^2 - 2 * S
32506 var t = m.redSqr().redISub(s).redISub(s);
32507 // X3 = T
32508 nx = t;
32509 // Y3 = M * (S - T) - 8 * YYYY
32510 var yyyy8 = yyyy.redIAdd(yyyy);
32511 yyyy8 = yyyy8.redIAdd(yyyy8);
32512 yyyy8 = yyyy8.redIAdd(yyyy8);
32513 ny = m.redMul(s.redISub(t)).redISub(yyyy8);
32514 // Z3 = 2 * Y1
32515 nz = this.y.redAdd(this.y);
32516 } else {
32517 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
32518 // 3M + 5S
32519
32520 // delta = Z1^2
32521 var delta = this.z.redSqr();
32522 // gamma = Y1^2
32523 var gamma = this.y.redSqr();
32524 // beta = X1 * gamma
32525 var beta = this.x.redMul(gamma);
32526 // alpha = 3 * (X1 - delta) * (X1 + delta)
32527 var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));
32528 alpha = alpha.redAdd(alpha).redIAdd(alpha);
32529 // X3 = alpha^2 - 8 * beta
32530 var beta4 = beta.redIAdd(beta);
32531 beta4 = beta4.redIAdd(beta4);
32532 var beta8 = beta4.redAdd(beta4);
32533 nx = alpha.redSqr().redISub(beta8);
32534 // Z3 = (Y1 + Z1)^2 - gamma - delta
32535 nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta);
32536 // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2
32537 var ggamma8 = gamma.redSqr();
32538 ggamma8 = ggamma8.redIAdd(ggamma8);
32539 ggamma8 = ggamma8.redIAdd(ggamma8);
32540 ggamma8 = ggamma8.redIAdd(ggamma8);
32541 ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);
32542 }
32543
32544 return this.curve.jpoint(nx, ny, nz);
32545};
ab78acc6 32546
8b095871
IC
32547JPoint.prototype._dbl = function _dbl() {
32548 var a = this.curve.a;
ab78acc6 32549
8b095871
IC
32550 // 4M + 6S + 10A
32551 var jx = this.x;
32552 var jy = this.y;
32553 var jz = this.z;
32554 var jz4 = jz.redSqr().redSqr();
ab78acc6 32555
8b095871
IC
32556 var jx2 = jx.redSqr();
32557 var jy2 = jy.redSqr();
ebd8d4e8 32558
8b095871 32559 var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));
ebd8d4e8 32560
8b095871
IC
32561 var jxd4 = jx.redAdd(jx);
32562 jxd4 = jxd4.redIAdd(jxd4);
32563 var t1 = jxd4.redMul(jy2);
32564 var nx = c.redSqr().redISub(t1.redAdd(t1));
32565 var t2 = t1.redISub(nx);
ebd8d4e8 32566
8b095871
IC
32567 var jyd8 = jy2.redSqr();
32568 jyd8 = jyd8.redIAdd(jyd8);
32569 jyd8 = jyd8.redIAdd(jyd8);
32570 jyd8 = jyd8.redIAdd(jyd8);
32571 var ny = c.redMul(t2).redISub(jyd8);
32572 var nz = jy.redAdd(jy).redMul(jz);
ebd8d4e8 32573
8b095871
IC
32574 return this.curve.jpoint(nx, ny, nz);
32575};
ebd8d4e8 32576
8b095871
IC
32577JPoint.prototype.trpl = function trpl() {
32578 if (!this.curve.zeroA)
32579 return this.dbl().add(this);
32580
32581 // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl
32582 // 5M + 10S + ...
32583
32584 // XX = X1^2
32585 var xx = this.x.redSqr();
32586 // YY = Y1^2
32587 var yy = this.y.redSqr();
32588 // ZZ = Z1^2
32589 var zz = this.z.redSqr();
32590 // YYYY = YY^2
32591 var yyyy = yy.redSqr();
32592 // M = 3 * XX + a * ZZ2; a = 0
32593 var m = xx.redAdd(xx).redIAdd(xx);
32594 // MM = M^2
32595 var mm = m.redSqr();
32596 // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM
32597 var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);
32598 e = e.redIAdd(e);
32599 e = e.redAdd(e).redIAdd(e);
32600 e = e.redISub(mm);
32601 // EE = E^2
32602 var ee = e.redSqr();
32603 // T = 16*YYYY
32604 var t = yyyy.redIAdd(yyyy);
32605 t = t.redIAdd(t);
32606 t = t.redIAdd(t);
32607 t = t.redIAdd(t);
32608 // U = (M + E)^2 - MM - EE - T
32609 var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t);
32610 // X3 = 4 * (X1 * EE - 4 * YY * U)
32611 var yyu4 = yy.redMul(u);
32612 yyu4 = yyu4.redIAdd(yyu4);
32613 yyu4 = yyu4.redIAdd(yyu4);
32614 var nx = this.x.redMul(ee).redISub(yyu4);
32615 nx = nx.redIAdd(nx);
32616 nx = nx.redIAdd(nx);
32617 // Y3 = 8 * Y1 * (U * (T - U) - E * EE)
32618 var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));
32619 ny = ny.redIAdd(ny);
32620 ny = ny.redIAdd(ny);
32621 ny = ny.redIAdd(ny);
32622 // Z3 = (Z1 + E)^2 - ZZ - EE
32623 var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);
32624
32625 return this.curve.jpoint(nx, ny, nz);
32626};
ebd8d4e8 32627
8b095871
IC
32628JPoint.prototype.mul = function mul(k, kbase) {
32629 k = new BN(k, kbase);
ebd8d4e8 32630
8b095871
IC
32631 return this.curve._wnafMul(this, k);
32632};
ebd8d4e8 32633
8b095871
IC
32634JPoint.prototype.eq = function eq(p) {
32635 if (p.type === 'affine')
32636 return this.eq(p.toJ());
ebd8d4e8 32637
8b095871
IC
32638 if (this === p)
32639 return true;
ebd8d4e8 32640
8b095871
IC
32641 // x1 * z2^2 == x2 * z1^2
32642 var z2 = this.z.redSqr();
32643 var pz2 = p.z.redSqr();
32644 if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0)
32645 return false;
ebd8d4e8 32646
8b095871
IC
32647 // y1 * z2^3 == y2 * z1^3
32648 var z3 = z2.redMul(this.z);
32649 var pz3 = pz2.redMul(p.z);
32650 return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;
32651};
ab78acc6 32652
8b095871
IC
32653JPoint.prototype.eqXToP = function eqXToP(x) {
32654 var zs = this.z.redSqr();
32655 var rx = x.toRed(this.curve.red).redMul(zs);
32656 if (this.x.cmp(rx) === 0)
32657 return true;
ebd8d4e8 32658
8b095871
IC
32659 var xc = x.clone();
32660 var t = this.curve.redN.redMul(zs);
32661 for (;;) {
32662 xc.iadd(this.curve.n);
32663 if (xc.cmp(this.curve.p) >= 0)
32664 return false;
ebd8d4e8 32665
8b095871
IC
32666 rx.redIAdd(t);
32667 if (this.x.cmp(rx) === 0)
32668 return true;
32669 }
32670 return false;
32671};
ebd8d4e8 32672
8b095871
IC
32673JPoint.prototype.inspect = function inspect() {
32674 if (this.isInfinity())
32675 return '<EC JPoint Infinity>';
32676 return '<EC JPoint x: ' + this.x.toString(16, 2) +
32677 ' y: ' + this.y.toString(16, 2) +
32678 ' z: ' + this.z.toString(16, 2) + '>';
32679};
ebd8d4e8 32680
8b095871
IC
32681JPoint.prototype.isInfinity = function isInfinity() {
32682 // XXX This code assumes that zero is always zero in red
32683 return this.z.cmpn(0) === 0;
32684};
ebd8d4e8 32685
8b095871
IC
32686},{"../../elliptic":39,"../curve":42,"bn.js":33,"inherits":63}],45:[function(require,module,exports){
32687'use strict';
ebd8d4e8 32688
8b095871 32689var curves = exports;
ebd8d4e8 32690
8b095871
IC
32691var hash = require('hash.js');
32692var elliptic = require('../elliptic');
ebd8d4e8 32693
8b095871 32694var assert = elliptic.utils.assert;
ebd8d4e8 32695
8b095871
IC
32696function PresetCurve(options) {
32697 if (options.type === 'short')
32698 this.curve = new elliptic.curve.short(options);
32699 else if (options.type === 'edwards')
32700 this.curve = new elliptic.curve.edwards(options);
32701 else
32702 this.curve = new elliptic.curve.mont(options);
32703 this.g = this.curve.g;
32704 this.n = this.curve.n;
32705 this.hash = options.hash;
32706
32707 assert(this.g.validate(), 'Invalid curve');
32708 assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');
32709}
32710curves.PresetCurve = PresetCurve;
32711
32712function defineCurve(name, options) {
32713 Object.defineProperty(curves, name, {
32714 configurable: true,
32715 enumerable: true,
32716 get: function() {
32717 var curve = new PresetCurve(options);
32718 Object.defineProperty(curves, name, {
32719 configurable: true,
32720 enumerable: true,
32721 value: curve
32722 });
32723 return curve;
32724 }
32725 });
ebd8d4e8
IC
32726}
32727
8b095871
IC
32728defineCurve('p192', {
32729 type: 'short',
32730 prime: 'p192',
32731 p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',
32732 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',
32733 b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',
32734 n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',
32735 hash: hash.sha256,
32736 gRed: false,
32737 g: [
32738 '188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012',
32739 '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811'
32740 ]
32741});
ebd8d4e8 32742
8b095871
IC
32743defineCurve('p224', {
32744 type: 'short',
32745 prime: 'p224',
32746 p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',
32747 a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',
32748 b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',
32749 n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',
32750 hash: hash.sha256,
32751 gRed: false,
32752 g: [
32753 'b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21',
32754 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34'
32755 ]
32756});
ebd8d4e8 32757
8b095871
IC
32758defineCurve('p256', {
32759 type: 'short',
32760 prime: null,
32761 p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',
32762 a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',
32763 b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',
32764 n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',
32765 hash: hash.sha256,
32766 gRed: false,
32767 g: [
32768 '6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296',
32769 '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5'
32770 ]
32771});
ebd8d4e8 32772
8b095871
IC
32773defineCurve('p384', {
32774 type: 'short',
32775 prime: null,
32776 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32777 'fffffffe ffffffff 00000000 00000000 ffffffff',
32778 a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32779 'fffffffe ffffffff 00000000 00000000 fffffffc',
32780 b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' +
32781 '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',
32782 n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' +
32783 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',
32784 hash: hash.sha384,
32785 gRed: false,
32786 g: [
32787 'aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' +
32788 '5502f25d bf55296c 3a545e38 72760ab7',
32789 '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' +
32790 '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f'
32791 ]
32792});
ebd8d4e8 32793
8b095871
IC
32794defineCurve('p521', {
32795 type: 'short',
32796 prime: null,
32797 p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32798 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32799 'ffffffff ffffffff ffffffff ffffffff ffffffff',
32800 a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32801 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32802 'ffffffff ffffffff ffffffff ffffffff fffffffc',
32803 b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' +
32804 '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' +
32805 '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',
32806 n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' +
32807 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' +
32808 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',
32809 hash: hash.sha512,
32810 gRed: false,
32811 g: [
32812 '000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' +
32813 '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' +
32814 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66',
32815 '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' +
32816 '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' +
32817 '3fad0761 353c7086 a272c240 88be9476 9fd16650'
32818 ]
32819});
ebd8d4e8 32820
8b095871
IC
32821defineCurve('curve25519', {
32822 type: 'mont',
32823 prime: 'p25519',
32824 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
32825 a: '76d06',
32826 b: '1',
32827 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
32828 hash: hash.sha256,
32829 gRed: false,
32830 g: [
32831 '9'
32832 ]
32833});
ebd8d4e8 32834
8b095871
IC
32835defineCurve('ed25519', {
32836 type: 'edwards',
32837 prime: 'p25519',
32838 p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',
32839 a: '-1',
32840 c: '1',
32841 // -121665 * (121666^(-1)) (mod P)
32842 d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',
32843 n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',
32844 hash: hash.sha256,
32845 gRed: false,
32846 g: [
32847 '216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a',
32848
32849 // 4/5
32850 '6666666666666666666666666666666666666666666666666666666666666658'
32851 ]
32852});
ebd8d4e8 32853
8b095871
IC
32854var pre;
32855try {
32856 pre = require('./precomputed/secp256k1');
32857} catch (e) {
32858 pre = undefined;
32859}
32860
32861defineCurve('secp256k1', {
32862 type: 'short',
32863 prime: 'k256',
32864 p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',
32865 a: '0',
32866 b: '7',
32867 n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',
32868 h: '1',
32869 hash: hash.sha256,
32870
32871 // Precomputed endomorphism
32872 beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',
32873 lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',
32874 basis: [
32875 {
32876 a: '3086d221a7d46bcde86c90e49284eb15',
32877 b: '-e4437ed6010e88286f547fa90abfe4c3'
32878 },
32879 {
32880 a: '114ca50f7a8e2f3f657c1108d9d44cfd8',
32881 b: '3086d221a7d46bcde86c90e49284eb15'
32882 }
32883 ],
ebd8d4e8 32884
8b095871
IC
32885 gRed: false,
32886 g: [
32887 '79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798',
32888 '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8',
32889 pre
32890 ]
32891});
ebd8d4e8 32892
8b095871
IC
32893},{"../elliptic":39,"./precomputed/secp256k1":53,"hash.js":57}],46:[function(require,module,exports){
32894'use strict';
ebd8d4e8 32895
8b095871
IC
32896var BN = require('bn.js');
32897var elliptic = require('../../elliptic');
32898var utils = elliptic.utils;
32899var assert = utils.assert;
ebd8d4e8 32900
8b095871
IC
32901var KeyPair = require('./key');
32902var Signature = require('./signature');
ebd8d4e8 32903
8b095871
IC
32904function EC(options) {
32905 if (!(this instanceof EC))
32906 return new EC(options);
ebd8d4e8 32907
8b095871
IC
32908 // Shortcut `elliptic.ec(curve-name)`
32909 if (typeof options === 'string') {
32910 assert(elliptic.curves.hasOwnProperty(options), 'Unknown curve ' + options);
32911
32912 options = elliptic.curves[options];
ebd8d4e8
IC
32913 }
32914
8b095871
IC
32915 // Shortcut for `elliptic.ec(elliptic.curves.curveName)`
32916 if (options instanceof elliptic.curves.PresetCurve)
32917 options = { curve: options };
ebd8d4e8 32918
8b095871
IC
32919 this.curve = options.curve.curve;
32920 this.n = this.curve.n;
32921 this.nh = this.n.ushrn(1);
32922 this.g = this.curve.g;
ebd8d4e8 32923
8b095871
IC
32924 // Point on curve
32925 this.g = options.curve.g;
32926 this.g.precompute(options.curve.n.bitLength() + 1);
ebd8d4e8 32927
8b095871
IC
32928 // Hash for function for DRBG
32929 this.hash = options.hash || options.curve.hash;
ebd8d4e8 32930}
8b095871 32931module.exports = EC;
ebd8d4e8 32932
8b095871
IC
32933EC.prototype.keyPair = function keyPair(options) {
32934 return new KeyPair(this, options);
32935};
32936
32937EC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {
32938 return KeyPair.fromPrivate(this, priv, enc);
32939};
32940
32941EC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {
32942 return KeyPair.fromPublic(this, pub, enc);
32943};
32944
32945EC.prototype.genKeyPair = function genKeyPair(options) {
32946 if (!options)
32947 options = {};
32948
32949 // Instantiate Hmac_DRBG
32950 var drbg = new elliptic.hmacDRBG({
32951 hash: this.hash,
32952 pers: options.pers,
32953 entropy: options.entropy || elliptic.rand(this.hash.hmacStrength),
32954 nonce: this.n.toArray()
32955 });
ebd8d4e8 32956
8b095871
IC
32957 var bytes = this.n.byteLength();
32958 var ns2 = this.n.sub(new BN(2));
32959 do {
32960 var priv = new BN(drbg.generate(bytes));
32961 if (priv.cmp(ns2) > 0)
32962 continue;
ebd8d4e8 32963
8b095871
IC
32964 priv.iaddn(1);
32965 return this.keyFromPrivate(priv);
32966 } while (true);
32967};
ebd8d4e8 32968
8b095871
IC
32969EC.prototype._truncateToN = function truncateToN(msg, truncOnly) {
32970 var delta = msg.byteLength() * 8 - this.n.bitLength();
32971 if (delta > 0)
32972 msg = msg.ushrn(delta);
32973 if (!truncOnly && msg.cmp(this.n) >= 0)
32974 return msg.sub(this.n);
32975 else
32976 return msg;
32977};
ebd8d4e8 32978
8b095871
IC
32979EC.prototype.sign = function sign(msg, key, enc, options) {
32980 if (typeof enc === 'object') {
32981 options = enc;
32982 enc = null;
ebd8d4e8 32983 }
8b095871
IC
32984 if (!options)
32985 options = {};
ebd8d4e8 32986
8b095871
IC
32987 key = this.keyFromPrivate(key, enc);
32988 msg = this._truncateToN(new BN(msg, 16));
ebd8d4e8 32989
8b095871
IC
32990 // Zero-extend key to provide enough entropy
32991 var bytes = this.n.byteLength();
32992 var bkey = key.getPrivate().toArray('be', bytes);
ab78acc6 32993
8b095871
IC
32994 // Zero-extend nonce to have the same byte size as N
32995 var nonce = msg.toArray('be', bytes);
ab78acc6 32996
8b095871
IC
32997 // Instantiate Hmac_DRBG
32998 var drbg = new elliptic.hmacDRBG({
32999 hash: this.hash,
33000 entropy: bkey,
33001 nonce: nonce,
33002 pers: options.pers,
33003 persEnc: options.persEnc
33004 });
ab78acc6 33005
8b095871
IC
33006 // Number of bytes to generate
33007 var ns1 = this.n.sub(new BN(1));
ebd8d4e8 33008
8b095871
IC
33009 for (var iter = 0; true; iter++) {
33010 var k = options.k ?
33011 options.k(iter) :
33012 new BN(drbg.generate(this.n.byteLength()));
33013 k = this._truncateToN(k, true);
33014 if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0)
33015 continue;
ebd8d4e8 33016
8b095871
IC
33017 var kp = this.g.mul(k);
33018 if (kp.isInfinity())
33019 continue;
ebd8d4e8 33020
8b095871
IC
33021 var kpX = kp.getX();
33022 var r = kpX.umod(this.n);
33023 if (r.cmpn(0) === 0)
33024 continue;
ebd8d4e8 33025
8b095871
IC
33026 var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));
33027 s = s.umod(this.n);
33028 if (s.cmpn(0) === 0)
33029 continue;
ebd8d4e8 33030
8b095871
IC
33031 var recoveryParam = (kp.getY().isOdd() ? 1 : 0) |
33032 (kpX.cmp(r) !== 0 ? 2 : 0);
ebd8d4e8 33033
8b095871
IC
33034 // Use complement of `s`, if it is > `n / 2`
33035 if (options.canonical && s.cmp(this.nh) > 0) {
33036 s = this.n.sub(s);
33037 recoveryParam ^= 1;
33038 }
ebd8d4e8 33039
8b095871
IC
33040 return new Signature({ r: r, s: s, recoveryParam: recoveryParam });
33041 }
33042};
ebd8d4e8 33043
8b095871
IC
33044EC.prototype.verify = function verify(msg, signature, key, enc) {
33045 msg = this._truncateToN(new BN(msg, 16));
33046 key = this.keyFromPublic(key, enc);
33047 signature = new Signature(signature, 'hex');
ebd8d4e8 33048
8b095871
IC
33049 // Perform primitive values validation
33050 var r = signature.r;
33051 var s = signature.s;
33052 if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0)
33053 return false;
33054 if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0)
33055 return false;
ebd8d4e8 33056
8b095871
IC
33057 // Validate signature
33058 var sinv = s.invm(this.n);
33059 var u1 = sinv.mul(msg).umod(this.n);
33060 var u2 = sinv.mul(r).umod(this.n);
ebd8d4e8 33061
8b095871
IC
33062 if (!this.curve._maxwellTrick) {
33063 var p = this.g.mulAdd(u1, key.getPublic(), u2);
33064 if (p.isInfinity())
33065 return false;
ebd8d4e8 33066
8b095871
IC
33067 return p.getX().umod(this.n).cmp(r) === 0;
33068 }
ab78acc6 33069
8b095871
IC
33070 // NOTE: Greg Maxwell's trick, inspired by:
33071 // https://git.io/vad3K
ebd8d4e8 33072
8b095871
IC
33073 var p = this.g.jmulAdd(u1, key.getPublic(), u2);
33074 if (p.isInfinity())
33075 return false;
ab78acc6 33076
8b095871
IC
33077 // Compare `p.x` of Jacobian point with `r`,
33078 // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the
33079 // inverse of `p.z^2`
33080 return p.eqXToP(r);
33081};
ab78acc6 33082
8b095871
IC
33083EC.prototype.recoverPubKey = function(msg, signature, j, enc) {
33084 assert((3 & j) === j, 'The recovery param is more than two bits');
33085 signature = new Signature(signature, enc);
ab78acc6 33086
8b095871
IC
33087 var n = this.n;
33088 var e = new BN(msg);
33089 var r = signature.r;
33090 var s = signature.s;
ab78acc6 33091
8b095871
IC
33092 // A set LSB signifies that the y-coordinate is odd
33093 var isYOdd = j & 1;
33094 var isSecondKey = j >> 1;
33095 if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey)
33096 throw new Error('Unable to find sencond key candinate');
33097
33098 // 1.1. Let x = r + jn.
33099 if (isSecondKey)
33100 r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);
33101 else
33102 r = this.curve.pointFromX(r, isYOdd);
ab78acc6 33103
8b095871
IC
33104 var rInv = signature.r.invm(n);
33105 var s1 = n.sub(e).mul(rInv).umod(n);
33106 var s2 = s.mul(rInv).umod(n);
ab78acc6 33107
8b095871
IC
33108 // 1.6.1 Compute Q = r^-1 (sR - eG)
33109 // Q = r^-1 (sR + -eG)
33110 return this.g.mulAdd(s1, r, s2);
33111};
ab78acc6 33112
8b095871
IC
33113EC.prototype.getKeyRecoveryParam = function(e, signature, Q, enc) {
33114 signature = new Signature(signature, enc);
33115 if (signature.recoveryParam !== null)
33116 return signature.recoveryParam;
ab78acc6 33117
8b095871
IC
33118 for (var i = 0; i < 4; i++) {
33119 var Qprime;
33120 try {
33121 Qprime = this.recoverPubKey(e, signature, i);
33122 } catch (e) {
33123 continue;
ab78acc6 33124 }
ab78acc6 33125
8b095871
IC
33126 if (Qprime.eq(Q))
33127 return i;
33128 }
33129 throw new Error('Unable to find valid recovery factor');
33130};
ebd8d4e8 33131
8b095871
IC
33132},{"../../elliptic":39,"./key":47,"./signature":48,"bn.js":33}],47:[function(require,module,exports){
33133'use strict';
ebd8d4e8 33134
8b095871
IC
33135var BN = require('bn.js');
33136var elliptic = require('../../elliptic');
33137var utils = elliptic.utils;
33138var assert = utils.assert;
ebd8d4e8 33139
8b095871
IC
33140function KeyPair(ec, options) {
33141 this.ec = ec;
33142 this.priv = null;
33143 this.pub = null;
ebd8d4e8 33144
8b095871
IC
33145 // KeyPair(ec, { priv: ..., pub: ... })
33146 if (options.priv)
33147 this._importPrivate(options.priv, options.privEnc);
33148 if (options.pub)
33149 this._importPublic(options.pub, options.pubEnc);
33150}
33151module.exports = KeyPair;
ebd8d4e8 33152
8b095871
IC
33153KeyPair.fromPublic = function fromPublic(ec, pub, enc) {
33154 if (pub instanceof KeyPair)
33155 return pub;
ebd8d4e8 33156
8b095871
IC
33157 return new KeyPair(ec, {
33158 pub: pub,
33159 pubEnc: enc
33160 });
33161};
ebd8d4e8 33162
8b095871
IC
33163KeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {
33164 if (priv instanceof KeyPair)
33165 return priv;
ebd8d4e8 33166
8b095871
IC
33167 return new KeyPair(ec, {
33168 priv: priv,
33169 privEnc: enc
33170 });
33171};
ebd8d4e8 33172
8b095871
IC
33173KeyPair.prototype.validate = function validate() {
33174 var pub = this.getPublic();
ebd8d4e8 33175
8b095871
IC
33176 if (pub.isInfinity())
33177 return { result: false, reason: 'Invalid public key' };
33178 if (!pub.validate())
33179 return { result: false, reason: 'Public key is not a point' };
33180 if (!pub.mul(this.ec.curve.n).isInfinity())
33181 return { result: false, reason: 'Public key * N != O' };
ab78acc6 33182
8b095871
IC
33183 return { result: true, reason: null };
33184};
ebd8d4e8 33185
8b095871
IC
33186KeyPair.prototype.getPublic = function getPublic(compact, enc) {
33187 // compact is optional argument
33188 if (typeof compact === 'string') {
33189 enc = compact;
33190 compact = null;
ebd8d4e8
IC
33191 }
33192
8b095871
IC
33193 if (!this.pub)
33194 this.pub = this.ec.g.mul(this.priv);
ebd8d4e8 33195
8b095871
IC
33196 if (!enc)
33197 return this.pub;
ebd8d4e8 33198
8b095871
IC
33199 return this.pub.encode(enc, compact);
33200};
ebd8d4e8 33201
8b095871
IC
33202KeyPair.prototype.getPrivate = function getPrivate(enc) {
33203 if (enc === 'hex')
33204 return this.priv.toString(16, 2);
33205 else
33206 return this.priv;
33207};
ab78acc6 33208
8b095871
IC
33209KeyPair.prototype._importPrivate = function _importPrivate(key, enc) {
33210 this.priv = new BN(key, enc || 16);
ab78acc6 33211
8b095871
IC
33212 // Ensure that the priv won't be bigger than n, otherwise we may fail
33213 // in fixed multiplication method
33214 this.priv = this.priv.umod(this.ec.curve.n);
33215};
ab78acc6 33216
8b095871
IC
33217KeyPair.prototype._importPublic = function _importPublic(key, enc) {
33218 if (key.x || key.y) {
33219 // Montgomery points only have an `x` coordinate.
33220 // Weierstrass/Edwards points on the other hand have both `x` and
33221 // `y` coordinates.
33222 if (this.ec.curve.type === 'mont') {
33223 assert(key.x, 'Need x coordinate');
33224 } else if (this.ec.curve.type === 'short' ||
33225 this.ec.curve.type === 'edwards') {
33226 assert(key.x && key.y, 'Need both x and y coordinate');
33227 }
33228 this.pub = this.ec.curve.point(key.x, key.y);
33229 return;
33230 }
33231 this.pub = this.ec.curve.decodePoint(key, enc);
33232};
ebd8d4e8 33233
8b095871
IC
33234// ECDH
33235KeyPair.prototype.derive = function derive(pub) {
33236 return pub.mul(this.priv).getX();
33237};
ebd8d4e8 33238
8b095871
IC
33239// ECDSA
33240KeyPair.prototype.sign = function sign(msg, enc, options) {
33241 return this.ec.sign(msg, this, enc, options);
33242};
ebd8d4e8 33243
8b095871
IC
33244KeyPair.prototype.verify = function verify(msg, signature) {
33245 return this.ec.verify(msg, signature, this);
33246};
ebd8d4e8 33247
8b095871
IC
33248KeyPair.prototype.inspect = function inspect() {
33249 return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) +
33250 ' pub: ' + (this.pub && this.pub.inspect()) + ' >';
33251};
ebd8d4e8 33252
8b095871
IC
33253},{"../../elliptic":39,"bn.js":33}],48:[function(require,module,exports){
33254'use strict';
ebd8d4e8 33255
8b095871 33256var BN = require('bn.js');
ebd8d4e8 33257
8b095871
IC
33258var elliptic = require('../../elliptic');
33259var utils = elliptic.utils;
33260var assert = utils.assert;
ebd8d4e8 33261
8b095871
IC
33262function Signature(options, enc) {
33263 if (options instanceof Signature)
33264 return options;
ebd8d4e8 33265
8b095871
IC
33266 if (this._importDER(options, enc))
33267 return;
ebd8d4e8 33268
8b095871
IC
33269 assert(options.r && options.s, 'Signature without r or s');
33270 this.r = new BN(options.r, 16);
33271 this.s = new BN(options.s, 16);
33272 if (options.recoveryParam === undefined)
33273 this.recoveryParam = null;
33274 else
33275 this.recoveryParam = options.recoveryParam;
33276}
33277module.exports = Signature;
33278
33279function Position() {
33280 this.place = 0;
33281}
33282
33283function getLength(buf, p) {
33284 var initial = buf[p.place++];
33285 if (!(initial & 0x80)) {
33286 return initial;
33287 }
33288 var octetLen = initial & 0xf;
33289 var val = 0;
33290 for (var i = 0, off = p.place; i < octetLen; i++, off++) {
33291 val <<= 8;
33292 val |= buf[off];
33293 }
33294 p.place = off;
33295 return val;
33296}
33297
33298function rmPadding(buf) {
33299 var i = 0;
33300 var len = buf.length - 1;
33301 while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {
33302 i++;
33303 }
33304 if (i === 0) {
33305 return buf;
33306 }
33307 return buf.slice(i);
33308}
ebd8d4e8 33309
8b095871
IC
33310Signature.prototype._importDER = function _importDER(data, enc) {
33311 data = utils.toArray(data, enc);
33312 var p = new Position();
33313 if (data[p.place++] !== 0x30) {
33314 return false;
33315 }
33316 var len = getLength(data, p);
33317 if ((len + p.place) !== data.length) {
33318 return false;
33319 }
33320 if (data[p.place++] !== 0x02) {
33321 return false;
33322 }
33323 var rlen = getLength(data, p);
33324 var r = data.slice(p.place, rlen + p.place);
33325 p.place += rlen;
33326 if (data[p.place++] !== 0x02) {
33327 return false;
33328 }
33329 var slen = getLength(data, p);
33330 if (data.length !== slen + p.place) {
33331 return false;
33332 }
33333 var s = data.slice(p.place, slen + p.place);
33334 if (r[0] === 0 && (r[1] & 0x80)) {
33335 r = r.slice(1);
33336 }
33337 if (s[0] === 0 && (s[1] & 0x80)) {
33338 s = s.slice(1);
33339 }
ab78acc6 33340
8b095871
IC
33341 this.r = new BN(r);
33342 this.s = new BN(s);
33343 this.recoveryParam = null;
ebd8d4e8 33344
8b095871
IC
33345 return true;
33346};
ab78acc6 33347
8b095871
IC
33348function constructLength(arr, len) {
33349 if (len < 0x80) {
33350 arr.push(len);
33351 return;
33352 }
33353 var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);
33354 arr.push(octets | 0x80);
33355 while (--octets) {
33356 arr.push((len >>> (octets << 3)) & 0xff);
33357 }
33358 arr.push(len);
33359}
33360
33361Signature.prototype.toDER = function toDER(enc) {
33362 var r = this.r.toArray();
33363 var s = this.s.toArray();
33364
33365 // Pad values
33366 if (r[0] & 0x80)
33367 r = [ 0 ].concat(r);
33368 // Pad values
33369 if (s[0] & 0x80)
33370 s = [ 0 ].concat(s);
33371
33372 r = rmPadding(r);
33373 s = rmPadding(s);
33374
33375 while (!s[0] && !(s[1] & 0x80)) {
33376 s = s.slice(1);
33377 }
33378 var arr = [ 0x02 ];
33379 constructLength(arr, r.length);
33380 arr = arr.concat(r);
33381 arr.push(0x02);
33382 constructLength(arr, s.length);
33383 var backHalf = arr.concat(s);
33384 var res = [ 0x30 ];
33385 constructLength(res, backHalf.length);
33386 res = res.concat(backHalf);
33387 return utils.encode(res, enc);
33388};
ab78acc6 33389
8b095871
IC
33390},{"../../elliptic":39,"bn.js":33}],49:[function(require,module,exports){
33391'use strict';
ebd8d4e8 33392
8b095871
IC
33393var hash = require('hash.js');
33394var elliptic = require('../../elliptic');
33395var utils = elliptic.utils;
33396var assert = utils.assert;
33397var parseBytes = utils.parseBytes;
33398var KeyPair = require('./key');
33399var Signature = require('./signature');
ab78acc6 33400
8b095871
IC
33401function EDDSA(curve) {
33402 assert(curve === 'ed25519', 'only tested with ed25519 so far');
ebd8d4e8 33403
8b095871
IC
33404 if (!(this instanceof EDDSA))
33405 return new EDDSA(curve);
ab78acc6 33406
8b095871
IC
33407 var curve = elliptic.curves[curve].curve;
33408 this.curve = curve;
33409 this.g = curve.g;
33410 this.g.precompute(curve.n.bitLength() + 1);
ebd8d4e8 33411
8b095871
IC
33412 this.pointClass = curve.point().constructor;
33413 this.encodingLength = Math.ceil(curve.n.bitLength() / 8);
33414 this.hash = hash.sha512;
33415}
ebd8d4e8 33416
8b095871 33417module.exports = EDDSA;
ebd8d4e8 33418
8b095871
IC
33419/**
33420* @param {Array|String} message - message bytes
33421* @param {Array|String|KeyPair} secret - secret bytes or a keypair
33422* @returns {Signature} - signature
33423*/
33424EDDSA.prototype.sign = function sign(message, secret) {
33425 message = parseBytes(message);
33426 var key = this.keyFromSecret(secret);
33427 var r = this.hashInt(key.messagePrefix(), message);
33428 var R = this.g.mul(r);
33429 var Rencoded = this.encodePoint(R);
33430 var s_ = this.hashInt(Rencoded, key.pubBytes(), message)
33431 .mul(key.priv());
33432 var S = r.add(s_).umod(this.curve.n);
33433 return this.makeSignature({ R: R, S: S, Rencoded: Rencoded });
33434};
ebd8d4e8 33435
8b095871
IC
33436/**
33437* @param {Array} message - message bytes
33438* @param {Array|String|Signature} sig - sig bytes
33439* @param {Array|String|Point|KeyPair} pub - public key
33440* @returns {Boolean} - true if public key matches sig of message
33441*/
33442EDDSA.prototype.verify = function verify(message, sig, pub) {
33443 message = parseBytes(message);
33444 sig = this.makeSignature(sig);
33445 var key = this.keyFromPublic(pub);
33446 var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);
33447 var SG = this.g.mul(sig.S());
33448 var RplusAh = sig.R().add(key.pub().mul(h));
33449 return RplusAh.eq(SG);
33450};
ebd8d4e8 33451
8b095871
IC
33452EDDSA.prototype.hashInt = function hashInt() {
33453 var hash = this.hash();
33454 for (var i = 0; i < arguments.length; i++)
33455 hash.update(arguments[i]);
33456 return utils.intFromLE(hash.digest()).umod(this.curve.n);
33457};
ebd8d4e8 33458
8b095871
IC
33459EDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {
33460 return KeyPair.fromPublic(this, pub);
33461};
ebd8d4e8 33462
8b095871
IC
33463EDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {
33464 return KeyPair.fromSecret(this, secret);
33465};
33466
33467EDDSA.prototype.makeSignature = function makeSignature(sig) {
33468 if (sig instanceof Signature)
33469 return sig;
33470 return new Signature(this, sig);
33471};
ebd8d4e8
IC
33472
33473/**
8b095871
IC
33474* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2
33475*
33476* EDDSA defines methods for encoding and decoding points and integers. These are
33477* helper convenience methods, that pass along to utility functions implied
33478* parameters.
33479*
33480*/
33481EDDSA.prototype.encodePoint = function encodePoint(point) {
33482 var enc = point.getY().toArray('le', this.encodingLength);
33483 enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;
33484 return enc;
33485};
ebd8d4e8 33486
8b095871
IC
33487EDDSA.prototype.decodePoint = function decodePoint(bytes) {
33488 bytes = utils.parseBytes(bytes);
ebd8d4e8 33489
8b095871
IC
33490 var lastIx = bytes.length - 1;
33491 var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);
33492 var xIsOdd = (bytes[lastIx] & 0x80) !== 0;
ebd8d4e8 33493
8b095871
IC
33494 var y = utils.intFromLE(normed);
33495 return this.curve.pointFromY(y, xIsOdd);
33496};
ebd8d4e8 33497
8b095871
IC
33498EDDSA.prototype.encodeInt = function encodeInt(num) {
33499 return num.toArray('le', this.encodingLength);
33500};
ebd8d4e8 33501
8b095871
IC
33502EDDSA.prototype.decodeInt = function decodeInt(bytes) {
33503 return utils.intFromLE(bytes);
33504};
ebd8d4e8 33505
8b095871
IC
33506EDDSA.prototype.isPoint = function isPoint(val) {
33507 return val instanceof this.pointClass;
33508};
ebd8d4e8 33509
8b095871
IC
33510},{"../../elliptic":39,"./key":50,"./signature":51,"hash.js":57}],50:[function(require,module,exports){
33511'use strict';
ebd8d4e8 33512
8b095871
IC
33513var elliptic = require('../../elliptic');
33514var utils = elliptic.utils;
33515var assert = utils.assert;
33516var parseBytes = utils.parseBytes;
33517var cachedProperty = utils.cachedProperty;
ebd8d4e8 33518
8b095871
IC
33519/**
33520* @param {EDDSA} eddsa - instance
33521* @param {Object} params - public/private key parameters
33522*
33523* @param {Array<Byte>} [params.secret] - secret seed bytes
33524* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)
33525* @param {Array<Byte>} [params.pub] - public key point encoded as bytes
33526*
33527*/
33528function KeyPair(eddsa, params) {
33529 this.eddsa = eddsa;
33530 this._secret = parseBytes(params.secret);
33531 if (eddsa.isPoint(params.pub))
33532 this._pub = params.pub;
33533 else
33534 this._pubBytes = parseBytes(params.pub);
ebd8d4e8
IC
33535}
33536
8b095871
IC
33537KeyPair.fromPublic = function fromPublic(eddsa, pub) {
33538 if (pub instanceof KeyPair)
33539 return pub;
33540 return new KeyPair(eddsa, { pub: pub });
33541};
ebd8d4e8 33542
8b095871
IC
33543KeyPair.fromSecret = function fromSecret(eddsa, secret) {
33544 if (secret instanceof KeyPair)
33545 return secret;
33546 return new KeyPair(eddsa, { secret: secret });
33547};
ebd8d4e8 33548
8b095871
IC
33549KeyPair.prototype.secret = function secret() {
33550 return this._secret;
33551};
ebd8d4e8 33552
8b095871
IC
33553cachedProperty(KeyPair, 'pubBytes', function pubBytes() {
33554 return this.eddsa.encodePoint(this.pub());
33555});
ebd8d4e8 33556
8b095871
IC
33557cachedProperty(KeyPair, 'pub', function pub() {
33558 if (this._pubBytes)
33559 return this.eddsa.decodePoint(this._pubBytes);
33560 return this.eddsa.g.mul(this.priv());
33561});
ebd8d4e8 33562
8b095871
IC
33563cachedProperty(KeyPair, 'privBytes', function privBytes() {
33564 var eddsa = this.eddsa;
33565 var hash = this.hash();
33566 var lastIx = eddsa.encodingLength - 1;
ebd8d4e8 33567
8b095871
IC
33568 var a = hash.slice(0, eddsa.encodingLength);
33569 a[0] &= 248;
33570 a[lastIx] &= 127;
33571 a[lastIx] |= 64;
ebd8d4e8 33572
8b095871
IC
33573 return a;
33574});
ebd8d4e8 33575
8b095871
IC
33576cachedProperty(KeyPair, 'priv', function priv() {
33577 return this.eddsa.decodeInt(this.privBytes());
33578});
ebd8d4e8 33579
8b095871
IC
33580cachedProperty(KeyPair, 'hash', function hash() {
33581 return this.eddsa.hash().update(this.secret()).digest();
33582});
ebd8d4e8 33583
8b095871
IC
33584cachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {
33585 return this.hash().slice(this.eddsa.encodingLength);
33586});
ebd8d4e8 33587
8b095871
IC
33588KeyPair.prototype.sign = function sign(message) {
33589 assert(this._secret, 'KeyPair can only verify');
33590 return this.eddsa.sign(message, this);
33591};
ebd8d4e8 33592
8b095871
IC
33593KeyPair.prototype.verify = function verify(message, sig) {
33594 return this.eddsa.verify(message, sig, this);
33595};
ebd8d4e8 33596
8b095871
IC
33597KeyPair.prototype.getSecret = function getSecret(enc) {
33598 assert(this._secret, 'KeyPair is public only');
33599 return utils.encode(this.secret(), enc);
33600};
ebd8d4e8 33601
8b095871
IC
33602KeyPair.prototype.getPublic = function getPublic(enc) {
33603 return utils.encode(this.pubBytes(), enc);
33604};
ebd8d4e8 33605
8b095871 33606module.exports = KeyPair;
ebd8d4e8 33607
8b095871
IC
33608},{"../../elliptic":39}],51:[function(require,module,exports){
33609'use strict';
ebd8d4e8 33610
8b095871
IC
33611var BN = require('bn.js');
33612var elliptic = require('../../elliptic');
33613var utils = elliptic.utils;
33614var assert = utils.assert;
33615var cachedProperty = utils.cachedProperty;
33616var parseBytes = utils.parseBytes;
ebd8d4e8 33617
8b095871
IC
33618/**
33619* @param {EDDSA} eddsa - eddsa instance
33620* @param {Array<Bytes>|Object} sig -
33621* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes
33622* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes
33623* @param {Array<Bytes>} [sig.Rencoded] - R point encoded
33624* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded
33625*/
33626function Signature(eddsa, sig) {
33627 this.eddsa = eddsa;
ebd8d4e8 33628
8b095871
IC
33629 if (typeof sig !== 'object')
33630 sig = parseBytes(sig);
ebd8d4e8 33631
8b095871
IC
33632 if (Array.isArray(sig)) {
33633 sig = {
33634 R: sig.slice(0, eddsa.encodingLength),
33635 S: sig.slice(eddsa.encodingLength)
33636 };
ab78acc6 33637 }
ebd8d4e8 33638
8b095871 33639 assert(sig.R && sig.S, 'Signature without R or S');
ebd8d4e8 33640
8b095871
IC
33641 if (eddsa.isPoint(sig.R))
33642 this._R = sig.R;
33643 if (sig.S instanceof BN)
33644 this._S = sig.S;
33645
33646 this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;
33647 this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;
ebd8d4e8
IC
33648}
33649
8b095871
IC
33650cachedProperty(Signature, 'S', function S() {
33651 return this.eddsa.decodeInt(this.Sencoded());
33652});
ab78acc6 33653
8b095871
IC
33654cachedProperty(Signature, 'R', function R() {
33655 return this.eddsa.decodePoint(this.Rencoded());
33656});
ebd8d4e8 33657
8b095871
IC
33658cachedProperty(Signature, 'Rencoded', function Rencoded() {
33659 return this.eddsa.encodePoint(this.R());
33660});
ebd8d4e8 33661
8b095871
IC
33662cachedProperty(Signature, 'Sencoded', function Sencoded() {
33663 return this.eddsa.encodeInt(this.S());
33664});
ebd8d4e8 33665
8b095871
IC
33666Signature.prototype.toBytes = function toBytes() {
33667 return this.Rencoded().concat(this.Sencoded());
33668};
ebd8d4e8 33669
8b095871
IC
33670Signature.prototype.toHex = function toHex() {
33671 return utils.encode(this.toBytes(), 'hex').toUpperCase();
33672};
ebd8d4e8 33673
8b095871 33674module.exports = Signature;
ebd8d4e8 33675
8b095871
IC
33676},{"../../elliptic":39,"bn.js":33}],52:[function(require,module,exports){
33677'use strict';
ebd8d4e8 33678
8b095871
IC
33679var hash = require('hash.js');
33680var elliptic = require('../elliptic');
33681var utils = elliptic.utils;
33682var assert = utils.assert;
ebd8d4e8 33683
8b095871
IC
33684function HmacDRBG(options) {
33685 if (!(this instanceof HmacDRBG))
33686 return new HmacDRBG(options);
33687 this.hash = options.hash;
33688 this.predResist = !!options.predResist;
ab78acc6 33689
8b095871
IC
33690 this.outLen = this.hash.outSize;
33691 this.minEntropy = options.minEntropy || this.hash.hmacStrength;
ab78acc6 33692
8b095871
IC
33693 this.reseed = null;
33694 this.reseedInterval = null;
33695 this.K = null;
33696 this.V = null;
ebd8d4e8 33697
8b095871
IC
33698 var entropy = utils.toArray(options.entropy, options.entropyEnc);
33699 var nonce = utils.toArray(options.nonce, options.nonceEnc);
33700 var pers = utils.toArray(options.pers, options.persEnc);
33701 assert(entropy.length >= (this.minEntropy / 8),
33702 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
33703 this._init(entropy, nonce, pers);
ebd8d4e8 33704}
8b095871 33705module.exports = HmacDRBG;
ebd8d4e8 33706
8b095871
IC
33707HmacDRBG.prototype._init = function init(entropy, nonce, pers) {
33708 var seed = entropy.concat(nonce).concat(pers);
ebd8d4e8 33709
8b095871
IC
33710 this.K = new Array(this.outLen / 8);
33711 this.V = new Array(this.outLen / 8);
33712 for (var i = 0; i < this.V.length; i++) {
33713 this.K[i] = 0x00;
33714 this.V[i] = 0x01;
33715 }
ebd8d4e8 33716
8b095871
IC
33717 this._update(seed);
33718 this.reseed = 1;
33719 this.reseedInterval = 0x1000000000000; // 2^48
33720};
ebd8d4e8 33721
8b095871
IC
33722HmacDRBG.prototype._hmac = function hmac() {
33723 return new hash.hmac(this.hash, this.K);
33724};
ebd8d4e8 33725
8b095871
IC
33726HmacDRBG.prototype._update = function update(seed) {
33727 var kmac = this._hmac()
33728 .update(this.V)
33729 .update([ 0x00 ]);
33730 if (seed)
33731 kmac = kmac.update(seed);
33732 this.K = kmac.digest();
33733 this.V = this._hmac().update(this.V).digest();
33734 if (!seed)
33735 return;
33736
33737 this.K = this._hmac()
33738 .update(this.V)
33739 .update([ 0x01 ])
33740 .update(seed)
33741 .digest();
33742 this.V = this._hmac().update(this.V).digest();
33743};
33744
33745HmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {
33746 // Optional entropy enc
33747 if (typeof entropyEnc !== 'string') {
33748 addEnc = add;
33749 add = entropyEnc;
33750 entropyEnc = null;
ebd8d4e8 33751 }
ebd8d4e8 33752
8b095871
IC
33753 entropy = utils.toBuffer(entropy, entropyEnc);
33754 add = utils.toBuffer(add, addEnc);
ebd8d4e8 33755
8b095871
IC
33756 assert(entropy.length >= (this.minEntropy / 8),
33757 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');
ebd8d4e8 33758
8b095871
IC
33759 this._update(entropy.concat(add || []));
33760 this.reseed = 1;
33761};
ebd8d4e8 33762
8b095871
IC
33763HmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {
33764 if (this.reseed > this.reseedInterval)
33765 throw new Error('Reseed is required');
ebd8d4e8 33766
8b095871
IC
33767 // Optional encoding
33768 if (typeof enc !== 'string') {
33769 addEnc = add;
33770 add = enc;
33771 enc = null;
33772 }
ebd8d4e8 33773
8b095871
IC
33774 // Optional additional data
33775 if (add) {
33776 add = utils.toArray(add, addEnc);
33777 this._update(add);
ebd8d4e8
IC
33778 }
33779
8b095871
IC
33780 var temp = [];
33781 while (temp.length < len) {
33782 this.V = this._hmac().update(this.V).digest();
33783 temp = temp.concat(this.V);
ebd8d4e8
IC
33784 }
33785
8b095871
IC
33786 var res = temp.slice(0, len);
33787 this._update(add);
33788 this.reseed++;
33789 return utils.encode(res, enc);
33790};
ebd8d4e8 33791
8b095871
IC
33792},{"../elliptic":39,"hash.js":57}],53:[function(require,module,exports){
33793module.exports = {
33794 doubles: {
33795 step: 4,
33796 points: [
33797 [
33798 'e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a',
33799 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'
33800 ],
33801 [
33802 '8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508',
33803 '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'
33804 ],
33805 [
33806 '175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739',
33807 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'
33808 ],
33809 [
33810 '363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640',
33811 '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'
33812 ],
33813 [
33814 '8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c',
33815 '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'
33816 ],
33817 [
33818 '723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda',
33819 '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'
33820 ],
33821 [
33822 'eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa',
33823 '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'
33824 ],
33825 [
33826 '100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0',
33827 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'
33828 ],
33829 [
33830 'e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d',
33831 '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'
33832 ],
33833 [
33834 'feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d',
33835 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'
33836 ],
33837 [
33838 'da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1',
33839 '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'
33840 ],
33841 [
33842 '53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0',
33843 '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'
33844 ],
33845 [
33846 '8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047',
33847 '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'
33848 ],
33849 [
33850 '385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862',
33851 '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'
33852 ],
33853 [
33854 '6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7',
33855 '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'
33856 ],
33857 [
33858 '3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd',
33859 '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'
33860 ],
33861 [
33862 '85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83',
33863 '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'
33864 ],
33865 [
33866 '948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a',
33867 '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'
33868 ],
33869 [
33870 '6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8',
33871 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'
33872 ],
33873 [
33874 'e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d',
33875 '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'
33876 ],
33877 [
33878 'e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725',
33879 '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'
33880 ],
33881 [
33882 '213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754',
33883 '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'
33884 ],
33885 [
33886 '4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c',
33887 '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'
33888 ],
33889 [
33890 'fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6',
33891 '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'
33892 ],
33893 [
33894 '76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39',
33895 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'
33896 ],
33897 [
33898 'c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891',
33899 '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'
33900 ],
33901 [
33902 'd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b',
33903 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'
33904 ],
33905 [
33906 'b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03',
33907 '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'
33908 ],
33909 [
33910 'e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d',
33911 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'
33912 ],
33913 [
33914 'a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070',
33915 '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'
33916 ],
33917 [
33918 '90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4',
33919 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'
33920 ],
33921 [
33922 '8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da',
33923 '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'
33924 ],
33925 [
33926 'e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11',
33927 '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'
33928 ],
33929 [
33930 '8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e',
33931 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'
33932 ],
33933 [
33934 'e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41',
33935 '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'
33936 ],
33937 [
33938 'b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef',
33939 '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'
33940 ],
33941 [
33942 'd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8',
33943 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'
33944 ],
33945 [
33946 '324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d',
33947 '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'
33948 ],
33949 [
33950 '4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96',
33951 '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'
33952 ],
33953 [
33954 '9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd',
33955 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'
33956 ],
33957 [
33958 '6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5',
33959 '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'
33960 ],
33961 [
33962 'a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266',
33963 '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'
33964 ],
33965 [
33966 '7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71',
33967 '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'
33968 ],
33969 [
33970 '928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac',
33971 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'
33972 ],
33973 [
33974 '85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751',
33975 '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'
33976 ],
33977 [
33978 'ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e',
33979 '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'
33980 ],
33981 [
33982 '827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241',
33983 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'
33984 ],
33985 [
33986 'eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3',
33987 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'
33988 ],
33989 [
33990 'e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f',
33991 '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'
33992 ],
33993 [
33994 '1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19',
33995 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'
33996 ],
33997 [
33998 '146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be',
33999 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'
34000 ],
34001 [
34002 'fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9',
34003 '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'
34004 ],
34005 [
34006 'da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2',
34007 '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'
34008 ],
34009 [
34010 'a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13',
34011 '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'
34012 ],
34013 [
34014 '174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c',
34015 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'
34016 ],
34017 [
34018 '959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba',
34019 '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'
34020 ],
34021 [
34022 'd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151',
34023 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'
34024 ],
34025 [
34026 '64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073',
34027 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'
34028 ],
34029 [
34030 '8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458',
34031 '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'
34032 ],
34033 [
34034 '13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b',
34035 '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'
34036 ],
34037 [
34038 'bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366',
34039 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'
34040 ],
34041 [
34042 '8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa',
34043 '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'
34044 ],
34045 [
34046 '8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0',
34047 '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'
34048 ],
34049 [
34050 'dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787',
34051 '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'
34052 ],
34053 [
34054 'f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e',
34055 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82'
34056 ]
34057 ]
34058 },
34059 naf: {
34060 wnd: 7,
34061 points: [
34062 [
34063 'f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9',
34064 '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'
34065 ],
34066 [
34067 '2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4',
34068 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'
34069 ],
34070 [
34071 '5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc',
34072 '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'
34073 ],
34074 [
34075 'acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe',
34076 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'
34077 ],
34078 [
34079 '774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb',
34080 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'
34081 ],
34082 [
34083 'f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8',
34084 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'
34085 ],
34086 [
34087 'd7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e',
34088 '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'
34089 ],
34090 [
34091 'defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34',
34092 '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'
34093 ],
34094 [
34095 '2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c',
34096 '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'
34097 ],
34098 [
34099 '352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5',
34100 '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'
34101 ],
34102 [
34103 '2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f',
34104 '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'
34105 ],
34106 [
34107 '9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714',
34108 '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'
34109 ],
34110 [
34111 'daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729',
34112 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'
34113 ],
34114 [
34115 'c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db',
34116 '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'
34117 ],
34118 [
34119 '6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4',
34120 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'
34121 ],
34122 [
34123 '1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5',
34124 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'
34125 ],
34126 [
34127 '605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479',
34128 '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'
34129 ],
34130 [
34131 '62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d',
34132 '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'
34133 ],
34134 [
34135 '80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f',
34136 '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'
34137 ],
34138 [
34139 '7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb',
34140 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'
34141 ],
34142 [
34143 'd528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9',
34144 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'
34145 ],
34146 [
34147 '49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963',
34148 '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'
34149 ],
34150 [
34151 '77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74',
34152 '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'
34153 ],
34154 [
34155 'f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530',
34156 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'
34157 ],
34158 [
34159 '463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b',
34160 '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'
34161 ],
34162 [
34163 'f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247',
34164 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'
34165 ],
34166 [
34167 'caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1',
34168 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'
34169 ],
34170 [
34171 '2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120',
34172 '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'
34173 ],
34174 [
34175 '7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435',
34176 '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'
34177 ],
34178 [
34179 '754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18',
34180 '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'
34181 ],
34182 [
34183 'e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8',
34184 '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'
34185 ],
34186 [
34187 '186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb',
34188 '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'
34189 ],
34190 [
34191 'df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f',
34192 '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'
34193 ],
34194 [
34195 '5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143',
34196 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'
34197 ],
34198 [
34199 '290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba',
34200 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'
34201 ],
34202 [
34203 'af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45',
34204 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'
34205 ],
34206 [
34207 '766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a',
34208 '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'
34209 ],
34210 [
34211 '59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e',
34212 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'
34213 ],
34214 [
34215 'f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8',
34216 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'
34217 ],
34218 [
34219 '7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c',
34220 '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'
34221 ],
34222 [
34223 '948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519',
34224 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'
34225 ],
34226 [
34227 '7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab',
34228 '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'
34229 ],
34230 [
34231 '3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca',
34232 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'
34233 ],
34234 [
34235 'd3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf',
34236 '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'
34237 ],
34238 [
34239 '1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610',
34240 '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'
34241 ],
34242 [
34243 '733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4',
34244 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'
34245 ],
34246 [
34247 '15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c',
34248 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'
34249 ],
34250 [
34251 'a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940',
34252 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'
34253 ],
34254 [
34255 'e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980',
34256 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'
34257 ],
34258 [
34259 '311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3',
34260 '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'
34261 ],
34262 [
34263 '34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf',
34264 '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'
34265 ],
34266 [
34267 'f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63',
34268 '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'
34269 ],
34270 [
34271 'd7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448',
34272 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'
34273 ],
34274 [
34275 '32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf',
34276 '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'
34277 ],
34278 [
34279 '7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5',
34280 '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'
34281 ],
34282 [
34283 'ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6',
34284 '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'
34285 ],
34286 [
34287 '16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5',
34288 '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'
34289 ],
34290 [
34291 'eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99',
34292 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'
34293 ],
34294 [
34295 '78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51',
34296 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'
34297 ],
34298 [
34299 '494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5',
34300 '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'
34301 ],
34302 [
34303 'a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5',
34304 '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'
34305 ],
34306 [
34307 'c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997',
34308 '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'
34309 ],
34310 [
34311 '841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881',
34312 '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'
34313 ],
34314 [
34315 '5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5',
34316 '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'
34317 ],
34318 [
34319 '36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66',
34320 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'
34321 ],
34322 [
34323 '336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726',
34324 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'
34325 ],
34326 [
34327 '8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede',
34328 '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'
34329 ],
34330 [
34331 '1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94',
34332 '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'
34333 ],
34334 [
34335 '85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31',
34336 '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'
34337 ],
34338 [
34339 '29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51',
34340 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'
34341 ],
34342 [
34343 'a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252',
34344 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'
34345 ],
34346 [
34347 '4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5',
34348 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'
34349 ],
34350 [
34351 'd24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b',
34352 '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'
34353 ],
34354 [
34355 'ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4',
34356 '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'
34357 ],
34358 [
34359 'af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f',
34360 '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'
34361 ],
34362 [
34363 'e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889',
34364 '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'
34365 ],
34366 [
34367 '591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246',
34368 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'
34369 ],
34370 [
34371 '11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984',
34372 '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'
34373 ],
34374 [
34375 '3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a',
34376 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'
34377 ],
34378 [
34379 'cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030',
34380 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'
34381 ],
34382 [
34383 'c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197',
34384 '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'
34385 ],
34386 [
34387 'c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593',
34388 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'
34389 ],
34390 [
34391 'a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef',
34392 '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'
34393 ],
34394 [
34395 '347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38',
34396 '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'
34397 ],
34398 [
34399 'da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a',
34400 '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'
34401 ],
34402 [
34403 'c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111',
34404 '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'
34405 ],
34406 [
34407 '4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502',
34408 '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'
34409 ],
34410 [
34411 '3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea',
34412 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'
34413 ],
34414 [
34415 'cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26',
34416 '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'
34417 ],
34418 [
34419 'b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986',
34420 '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'
34421 ],
34422 [
34423 'd4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e',
34424 '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'
34425 ],
34426 [
34427 '48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4',
34428 '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'
34429 ],
34430 [
34431 'dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda',
34432 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'
34433 ],
34434 [
34435 '6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859',
34436 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'
34437 ],
34438 [
34439 'e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f',
34440 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'
34441 ],
34442 [
34443 'eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c',
34444 '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'
34445 ],
34446 [
34447 '13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942',
34448 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'
34449 ],
34450 [
34451 'ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a',
34452 '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'
34453 ],
34454 [
34455 'b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80',
34456 '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'
34457 ],
34458 [
34459 'ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d',
34460 '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'
34461 ],
34462 [
34463 '8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1',
34464 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'
34465 ],
34466 [
34467 '52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63',
34468 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'
34469 ],
34470 [
34471 'e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352',
34472 '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'
34473 ],
34474 [
34475 '7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193',
34476 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'
34477 ],
34478 [
34479 '5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00',
34480 '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'
34481 ],
34482 [
34483 '32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58',
34484 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'
34485 ],
34486 [
34487 'e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7',
34488 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'
34489 ],
34490 [
34491 '8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8',
34492 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'
34493 ],
34494 [
34495 '4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e',
34496 '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'
34497 ],
34498 [
34499 '3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d',
34500 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'
34501 ],
34502 [
34503 '674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b',
34504 '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'
34505 ],
34506 [
34507 'd32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f',
34508 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'
34509 ],
34510 [
34511 '30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6',
34512 '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'
34513 ],
34514 [
34515 'be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297',
34516 '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'
34517 ],
34518 [
34519 '93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a',
34520 '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'
34521 ],
34522 [
34523 'b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c',
34524 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'
34525 ],
34526 [
34527 'd5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52',
34528 '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'
34529 ],
34530 [
34531 'd3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb',
34532 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'
34533 ],
34534 [
34535 '463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065',
34536 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'
34537 ],
34538 [
34539 '7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917',
34540 '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'
34541 ],
34542 [
34543 '74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9',
34544 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'
34545 ],
34546 [
34547 '30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3',
34548 '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'
34549 ],
34550 [
34551 '9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57',
34552 '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'
34553 ],
34554 [
34555 '176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66',
34556 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'
34557 ],
34558 [
34559 '75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8',
34560 '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'
34561 ],
34562 [
34563 '809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721',
34564 '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'
34565 ],
34566 [
34567 '1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180',
34568 '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9'
34569 ]
34570 ]
34571 }
34572};
ebd8d4e8 34573
8b095871
IC
34574},{}],54:[function(require,module,exports){
34575'use strict';
ebd8d4e8 34576
8b095871
IC
34577var utils = exports;
34578var BN = require('bn.js');
ebd8d4e8 34579
8b095871
IC
34580utils.assert = function assert(val, msg) {
34581 if (!val)
34582 throw new Error(msg || 'Assertion failed');
34583};
ebd8d4e8 34584
8b095871
IC
34585function toArray(msg, enc) {
34586 if (Array.isArray(msg))
34587 return msg.slice();
34588 if (!msg)
34589 return [];
34590 var res = [];
34591 if (typeof msg !== 'string') {
34592 for (var i = 0; i < msg.length; i++)
34593 res[i] = msg[i] | 0;
34594 return res;
34595 }
34596 if (!enc) {
34597 for (var i = 0; i < msg.length; i++) {
34598 var c = msg.charCodeAt(i);
34599 var hi = c >> 8;
34600 var lo = c & 0xff;
34601 if (hi)
34602 res.push(hi, lo);
34603 else
34604 res.push(lo);
34605 }
34606 } else if (enc === 'hex') {
34607 msg = msg.replace(/[^a-z0-9]+/ig, '');
34608 if (msg.length % 2 !== 0)
34609 msg = '0' + msg;
34610 for (var i = 0; i < msg.length; i += 2)
34611 res.push(parseInt(msg[i] + msg[i + 1], 16));
ebd8d4e8 34612 }
8b095871 34613 return res;
ebd8d4e8 34614}
8b095871 34615utils.toArray = toArray;
ebd8d4e8 34616
8b095871
IC
34617function zero2(word) {
34618 if (word.length === 1)
34619 return '0' + word;
34620 else
34621 return word;
34622}
34623utils.zero2 = zero2;
ab78acc6 34624
8b095871
IC
34625function toHex(msg) {
34626 var res = '';
34627 for (var i = 0; i < msg.length; i++)
34628 res += zero2(msg[i].toString(16));
34629 return res;
34630}
34631utils.toHex = toHex;
ebd8d4e8 34632
8b095871
IC
34633utils.encode = function encode(arr, enc) {
34634 if (enc === 'hex')
34635 return toHex(arr);
34636 else
34637 return arr;
34638};
ebd8d4e8 34639
8b095871
IC
34640// Represent num in a w-NAF form
34641function getNAF(num, w) {
34642 var naf = [];
34643 var ws = 1 << (w + 1);
34644 var k = num.clone();
34645 while (k.cmpn(1) >= 0) {
34646 var z;
34647 if (k.isOdd()) {
34648 var mod = k.andln(ws - 1);
34649 if (mod > (ws >> 1) - 1)
34650 z = (ws >> 1) - mod;
34651 else
34652 z = mod;
34653 k.isubn(z);
34654 } else {
34655 z = 0;
34656 }
34657 naf.push(z);
34658
34659 // Optimization, shift by word if possible
34660 var shift = (k.cmpn(0) !== 0 && k.andln(ws - 1) === 0) ? (w + 1) : 1;
34661 for (var i = 1; i < shift; i++)
34662 naf.push(0);
34663 k.iushrn(shift);
34664 }
34665
34666 return naf;
34667}
34668utils.getNAF = getNAF;
34669
34670// Represent k1, k2 in a Joint Sparse Form
34671function getJSF(k1, k2) {
34672 var jsf = [
34673 [],
34674 []
34675 ];
34676
34677 k1 = k1.clone();
34678 k2 = k2.clone();
34679 var d1 = 0;
34680 var d2 = 0;
34681 while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {
34682
34683 // First phase
34684 var m14 = (k1.andln(3) + d1) & 3;
34685 var m24 = (k2.andln(3) + d2) & 3;
34686 if (m14 === 3)
34687 m14 = -1;
34688 if (m24 === 3)
34689 m24 = -1;
34690 var u1;
34691 if ((m14 & 1) === 0) {
34692 u1 = 0;
34693 } else {
34694 var m8 = (k1.andln(7) + d1) & 7;
34695 if ((m8 === 3 || m8 === 5) && m24 === 2)
34696 u1 = -m14;
34697 else
34698 u1 = m14;
34699 }
34700 jsf[0].push(u1);
ebd8d4e8 34701
8b095871
IC
34702 var u2;
34703 if ((m24 & 1) === 0) {
34704 u2 = 0;
34705 } else {
34706 var m8 = (k2.andln(7) + d2) & 7;
34707 if ((m8 === 3 || m8 === 5) && m14 === 2)
34708 u2 = -m24;
34709 else
34710 u2 = m24;
34711 }
34712 jsf[1].push(u2);
ebd8d4e8 34713
8b095871
IC
34714 // Second phase
34715 if (2 * d1 === u1 + 1)
34716 d1 = 1 - d1;
34717 if (2 * d2 === u2 + 1)
34718 d2 = 1 - d2;
34719 k1.iushrn(1);
34720 k2.iushrn(1);
34721 }
ebd8d4e8 34722
8b095871
IC
34723 return jsf;
34724}
34725utils.getJSF = getJSF;
ab78acc6 34726
8b095871
IC
34727function cachedProperty(obj, name, computer) {
34728 var key = '_' + name;
34729 obj.prototype[name] = function cachedProperty() {
34730 return this[key] !== undefined ? this[key] :
34731 this[key] = computer.call(this);
34732 };
34733}
34734utils.cachedProperty = cachedProperty;
ebd8d4e8 34735
8b095871
IC
34736function parseBytes(bytes) {
34737 return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') :
34738 bytes;
34739}
34740utils.parseBytes = parseBytes;
ebd8d4e8 34741
8b095871
IC
34742function intFromLE(bytes) {
34743 return new BN(bytes, 'hex', 'le');
34744}
34745utils.intFromLE = intFromLE;
ebd8d4e8 34746
8b095871
IC
34747
34748},{"bn.js":33}],55:[function(require,module,exports){
34749module.exports={
34750 "_args": [
34751 [
34752 {
34753 "raw": "elliptic@^6.2.3",
34754 "scope": null,
34755 "escapedName": "elliptic",
34756 "name": "elliptic",
34757 "rawSpec": "^6.2.3",
34758 "spec": ">=6.2.3 <7.0.0",
34759 "type": "range"
34760 },
34761 "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1"
34762 ]
34763 ],
34764 "_from": "elliptic@>=6.2.3 <7.0.0",
34765 "_id": "elliptic@6.3.3",
34766 "_inCache": true,
34767 "_location": "/elliptic",
34768 "_nodeVersion": "7.0.0",
34769 "_npmOperationalInternal": {
34770 "host": "packages-18-east.internal.npmjs.com",
34771 "tmp": "tmp/elliptic-6.3.3.tgz_1486422837740_0.10658654430881143"
34772 },
34773 "_npmUser": {
34774 "name": "indutny",
34775 "email": "fedor@indutny.com"
34776 },
34777 "_npmVersion": "3.10.8",
34778 "_phantomChildren": {},
34779 "_requested": {
34780 "raw": "elliptic@^6.2.3",
34781 "scope": null,
34782 "escapedName": "elliptic",
34783 "name": "elliptic",
34784 "rawSpec": "^6.2.3",
34785 "spec": ">=6.2.3 <7.0.0",
34786 "type": "range"
34787 },
34788 "_requiredBy": [
34789 "/browserify-sign",
34790 "/create-ecdh",
34791 "/secp256k1"
34792 ],
34793 "_resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz",
34794 "_shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
34795 "_shrinkwrap": null,
34796 "_spec": "elliptic@^6.2.3",
34797 "_where": "/home/user/ethereum/ethereumjs-util/node_modules/secp256k1",
34798 "author": {
34799 "name": "Fedor Indutny",
34800 "email": "fedor@indutny.com"
34801 },
34802 "bugs": {
34803 "url": "https://github.com/indutny/elliptic/issues"
34804 },
34805 "dependencies": {
34806 "bn.js": "^4.4.0",
34807 "brorand": "^1.0.1",
34808 "hash.js": "^1.0.0",
34809 "inherits": "^2.0.1"
34810 },
34811 "description": "EC cryptography",
34812 "devDependencies": {
34813 "brfs": "^1.4.3",
34814 "coveralls": "^2.11.3",
34815 "grunt": "^0.4.5",
34816 "grunt-browserify": "^5.0.0",
34817 "grunt-cli": "^1.2.0",
34818 "grunt-contrib-connect": "^1.0.0",
34819 "grunt-contrib-copy": "^1.0.0",
34820 "grunt-contrib-uglify": "^1.0.1",
34821 "grunt-mocha-istanbul": "^3.0.1",
34822 "grunt-saucelabs": "^8.6.2",
34823 "istanbul": "^0.4.2",
34824 "jscs": "^2.9.0",
34825 "jshint": "^2.6.0",
34826 "mocha": "^2.1.0"
34827 },
34828 "directories": {},
34829 "dist": {
34830 "shasum": "5482d9646d54bcb89fd7d994fc9e2e9568876e3f",
34831 "tarball": "https://registry.npmjs.org/elliptic/-/elliptic-6.3.3.tgz"
34832 },
34833 "files": [
34834 "lib"
34835 ],
34836 "gitHead": "63aee8d697e9b7fac37ece24222029117a890a7e",
34837 "homepage": "https://github.com/indutny/elliptic",
34838 "keywords": [
34839 "EC",
34840 "Elliptic",
34841 "curve",
34842 "Cryptography"
34843 ],
34844 "license": "MIT",
34845 "main": "lib/elliptic.js",
34846 "maintainers": [
34847 {
34848 "name": "indutny",
34849 "email": "fedor@indutny.com"
34850 }
34851 ],
34852 "name": "elliptic",
34853 "optionalDependencies": {},
34854 "readme": "ERROR: No README data found!",
34855 "repository": {
34856 "type": "git",
34857 "url": "git+ssh://git@github.com/indutny/elliptic.git"
34858 },
34859 "scripts": {
34860 "jscs": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
34861 "jshint": "jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js",
34862 "lint": "npm run jscs && npm run jshint",
34863 "test": "npm run lint && npm run unit",
34864 "unit": "istanbul test _mocha --reporter=spec test/index.js",
34865 "version": "grunt dist && git add dist/"
34866 },
34867 "version": "6.3.3"
ebd8d4e8
IC
34868}
34869
8b095871
IC
34870},{}],56:[function(require,module,exports){
34871(function (Buffer){
34872'use strict';
ab78acc6 34873
8b095871
IC
34874var isHexPrefixed = require('is-hex-prefixed');
34875var stripHexPrefix = require('strip-hex-prefix');
ebd8d4e8 34876
8b095871
IC
34877/**
34878 * Pads a `String` to have an even length
34879 * @param {String} value
34880 * @return {String} output
34881 */
34882function padToEven(value) {
34883 var a = value; // eslint-disable-line
34884
34885 if (typeof a !== 'string') {
34886 throw new Error('[ethjs-util] while padding to even, value must be string, is currently ' + typeof a + ', while padToEven.');
34887 }
34888
34889 if (a.length % 2) {
34890 a = '0' + a;
34891 }
34892
34893 return a;
ebd8d4e8
IC
34894}
34895
8b095871
IC
34896/**
34897 * Converts a `Number` into a hex `String`
34898 * @param {Number} i
34899 * @return {String}
34900 */
34901function intToHex(i) {
34902 var hex = i.toString(16); // eslint-disable-line
ebd8d4e8 34903
8b095871
IC
34904 return '0x' + padToEven(hex);
34905}
ab78acc6 34906
8b095871
IC
34907/**
34908 * Converts an `Number` to a `Buffer`
34909 * @param {Number} i
34910 * @return {Buffer}
34911 */
34912function intToBuffer(i) {
34913 var hex = intToHex(i);
ab78acc6 34914
8b095871
IC
34915 return new Buffer(hex.slice(2), 'hex');
34916}
ebd8d4e8 34917
8b095871
IC
34918/**
34919 * Get the binary size of a string
34920 * @param {String} str
34921 * @return {Number}
34922 */
34923function getBinarySize(str) {
34924 if (typeof str !== 'string') {
34925 throw new Error('[ethjs-util] while getting binary size, method getBinarySize requires input \'str\' to be type String, got \'' + typeof str + '\'.');
34926 }
ebd8d4e8 34927
8b095871
IC
34928 return Buffer.byteLength(str, 'utf8');
34929}
34930
34931/**
34932 * Returns TRUE if the first specified array contains all elements
34933 * from the second one. FALSE otherwise.
34934 *
34935 * @param {array} superset
34936 * @param {array} subset
34937 *
34938 * @returns {boolean}
34939 */
34940function arrayContainsArray(superset, subset, some) {
34941 if (Array.isArray(superset) !== true) {
34942 throw new Error('[ethjs-util] method arrayContainsArray requires input \'superset\' to be an array got type \'' + typeof superset + '\'');
34943 }
34944 if (Array.isArray(subset) !== true) {
34945 throw new Error('[ethjs-util] method arrayContainsArray requires input \'subset\' to be an array got type \'' + typeof subset + '\'');
ebd8d4e8
IC
34946 }
34947
8b095871
IC
34948 return subset[Boolean(some) && 'some' || 'every'](function (value) {
34949 return superset.indexOf(value) >= 0;
34950 });
ebd8d4e8
IC
34951}
34952
8b095871
IC
34953/**
34954 * Should be called to get utf8 from it's hex representation
34955 *
34956 * @method toUtf8
34957 * @param {String} string in hex
34958 * @returns {String} ascii string representation of hex value
34959 */
34960function toUtf8(hex) {
34961 var bufferValue = new Buffer(padToEven(stripHexPrefix(hex).replace(/^0+|0+$/g, '')), 'hex');
ebd8d4e8 34962
8b095871
IC
34963 return bufferValue.toString('utf8');
34964}
ab78acc6 34965
8b095871
IC
34966/**
34967 * Should be called to get ascii from it's hex representation
34968 *
34969 * @method toAscii
34970 * @param {String} string in hex
34971 * @returns {String} ascii string representation of hex value
34972 */
34973function toAscii(hex) {
34974 var str = ''; // eslint-disable-line
34975 var i = 0,
34976 l = hex.length; // eslint-disable-line
ebd8d4e8 34977
8b095871
IC
34978 if (hex.substring(0, 2) === '0x') {
34979 i = 2;
34980 }
ebd8d4e8 34981
8b095871
IC
34982 for (; i < l; i += 2) {
34983 var code = parseInt(hex.substr(i, 2), 16);
34984 str += String.fromCharCode(code);
ebd8d4e8 34985 }
8b095871
IC
34986
34987 return str;
ebd8d4e8
IC
34988}
34989
8b095871
IC
34990/**
34991 * Should be called to get hex representation (prefixed by 0x) of utf8 string
34992 *
34993 * @method fromUtf8
34994 * @param {String} string
34995 * @param {Number} optional padding
34996 * @returns {String} hex representation of input string
34997 */
34998function fromUtf8(stringValue) {
34999 var str = new Buffer(stringValue, 'utf8');
ebd8d4e8 35000
8b095871
IC
35001 return '0x' + padToEven(str.toString('hex')).replace(/^0+|0+$/g, '');
35002}
ab78acc6 35003
8b095871
IC
35004/**
35005 * Should be called to get hex representation (prefixed by 0x) of ascii string
35006 *
35007 * @method fromAscii
35008 * @param {String} string
35009 * @param {Number} optional padding
35010 * @returns {String} hex representation of input string
35011 */
35012function fromAscii(stringValue) {
35013 var hex = ''; // eslint-disable-line
35014 for (var i = 0; i < stringValue.length; i++) {
35015 // eslint-disable-line
35016 var code = stringValue.charCodeAt(i);
35017 var n = code.toString(16);
35018 hex += n.length < 2 ? '0' + n : n;
35019 }
ab78acc6 35020
8b095871
IC
35021 return '0x' + hex;
35022}
ebd8d4e8 35023
8b095871
IC
35024/**
35025 * getKeys([{a: 1, b: 2}, {a: 3, b: 4}], 'a') => [1, 3]
35026 *
35027 * @method getKeys get specific key from inner object array of objects
35028 * @param {String} params
35029 * @param {String} key
35030 * @param {Boolean} allowEmpty
35031 * @returns {Array} output just a simple array of output keys
35032 */
35033function getKeys(params, key, allowEmpty) {
35034 if (!Array.isArray(params)) {
35035 throw new Error('[ethjs-util] method getKeys expecting type Array as \'params\' input, got \'' + typeof params + '\'');
35036 }
35037 if (typeof key !== 'string') {
35038 throw new Error('[ethjs-util] method getKeys expecting type String for input \'key\' got \'' + typeof key + '\'.');
35039 }
ebd8d4e8 35040
8b095871 35041 var result = []; // eslint-disable-line
ebd8d4e8 35042
8b095871
IC
35043 for (var i = 0; i < params.length; i++) {
35044 // eslint-disable-line
35045 var value = params[i][key]; // eslint-disable-line
35046 if (allowEmpty && !value) {
35047 value = '';
35048 } else if (typeof value !== 'string') {
35049 throw new Error('invalid abi');
35050 }
35051 result.push(value);
35052 }
ebd8d4e8 35053
8b095871 35054 return result;
ebd8d4e8
IC
35055}
35056
8b095871
IC
35057/**
35058 * Is the string a hex string.
35059 *
35060 * @method check if string is hex string of specific length
35061 * @param {String} value
35062 * @param {Number} length
35063 * @returns {Boolean} output the string is a hex string
35064 */
35065function isHexString(value, length) {
35066 if (typeof value !== 'string' || !value.match(/^0x[0-9A-Fa-f]*$/)) {
35067 return false;
ab78acc6
IC
35068 }
35069
8b095871
IC
35070 if (length && value.length !== 2 + 2 * length) {
35071 return false;
35072 }
ebd8d4e8 35073
8b095871
IC
35074 return true;
35075}
ab78acc6 35076
8b095871
IC
35077module.exports = {
35078 arrayContainsArray: arrayContainsArray,
35079 intToBuffer: intToBuffer,
35080 getBinarySize: getBinarySize,
35081 isHexPrefixed: isHexPrefixed,
35082 stripHexPrefix: stripHexPrefix,
35083 padToEven: padToEven,
35084 intToHex: intToHex,
35085 fromAscii: fromAscii,
35086 fromUtf8: fromUtf8,
35087 toAscii: toAscii,
35088 toUtf8: toUtf8,
35089 getKeys: getKeys,
35090 isHexString: isHexString
35091};
35092}).call(this,require("buffer").Buffer)
35093},{"buffer":5,"is-hex-prefixed":64,"strip-hex-prefix":87}],57:[function(require,module,exports){
35094var hash = exports;
35095
35096hash.utils = require('./hash/utils');
35097hash.common = require('./hash/common');
35098hash.sha = require('./hash/sha');
35099hash.ripemd = require('./hash/ripemd');
35100hash.hmac = require('./hash/hmac');
35101
35102// Proxy hash functions to the main object
35103hash.sha1 = hash.sha.sha1;
35104hash.sha256 = hash.sha.sha256;
35105hash.sha224 = hash.sha.sha224;
35106hash.sha384 = hash.sha.sha384;
35107hash.sha512 = hash.sha.sha512;
35108hash.ripemd160 = hash.ripemd.ripemd160;
35109
35110},{"./hash/common":58,"./hash/hmac":59,"./hash/ripemd":60,"./hash/sha":61,"./hash/utils":62}],58:[function(require,module,exports){
35111var hash = require('../hash');
35112var utils = hash.utils;
35113var assert = utils.assert;
35114
35115function BlockHash() {
35116 this.pending = null;
35117 this.pendingTotal = 0;
35118 this.blockSize = this.constructor.blockSize;
35119 this.outSize = this.constructor.outSize;
35120 this.hmacStrength = this.constructor.hmacStrength;
35121 this.padLength = this.constructor.padLength / 8;
35122 this.endian = 'big';
35123
35124 this._delta8 = this.blockSize / 8;
35125 this._delta32 = this.blockSize / 32;
35126}
35127exports.BlockHash = BlockHash;
35128
35129BlockHash.prototype.update = function update(msg, enc) {
35130 // Convert message to array, pad it, and join into 32bit blocks
35131 msg = utils.toArray(msg, enc);
35132 if (!this.pending)
35133 this.pending = msg;
35134 else
35135 this.pending = this.pending.concat(msg);
35136 this.pendingTotal += msg.length;
ab78acc6 35137
8b095871
IC
35138 // Enough data, try updating
35139 if (this.pending.length >= this._delta8) {
35140 msg = this.pending;
ebd8d4e8 35141
8b095871
IC
35142 // Process pending data in blocks
35143 var r = msg.length % this._delta8;
35144 this.pending = msg.slice(msg.length - r, msg.length);
35145 if (this.pending.length === 0)
35146 this.pending = null;
ebd8d4e8 35147
8b095871
IC
35148 msg = utils.join32(msg, 0, msg.length - r, this.endian);
35149 for (var i = 0; i < msg.length; i += this._delta32)
35150 this._update(msg, i, i + this._delta32);
ebd8d4e8
IC
35151 }
35152
8b095871
IC
35153 return this;
35154};
ebd8d4e8 35155
8b095871
IC
35156BlockHash.prototype.digest = function digest(enc) {
35157 this.update(this._pad());
35158 assert(this.pending === null);
ebd8d4e8 35159
8b095871
IC
35160 return this._digest(enc);
35161};
ebd8d4e8 35162
8b095871
IC
35163BlockHash.prototype._pad = function pad() {
35164 var len = this.pendingTotal;
35165 var bytes = this._delta8;
35166 var k = bytes - ((len + this.padLength) % bytes);
35167 var res = new Array(k + this.padLength);
35168 res[0] = 0x80;
35169 for (var i = 1; i < k; i++)
35170 res[i] = 0;
35171
35172 // Append length
35173 len <<= 3;
35174 if (this.endian === 'big') {
35175 for (var t = 8; t < this.padLength; t++)
35176 res[i++] = 0;
35177
35178 res[i++] = 0;
35179 res[i++] = 0;
35180 res[i++] = 0;
35181 res[i++] = 0;
35182 res[i++] = (len >>> 24) & 0xff;
35183 res[i++] = (len >>> 16) & 0xff;
35184 res[i++] = (len >>> 8) & 0xff;
35185 res[i++] = len & 0xff;
ebd8d4e8 35186 } else {
8b095871
IC
35187 res[i++] = len & 0xff;
35188 res[i++] = (len >>> 8) & 0xff;
35189 res[i++] = (len >>> 16) & 0xff;
35190 res[i++] = (len >>> 24) & 0xff;
35191 res[i++] = 0;
35192 res[i++] = 0;
35193 res[i++] = 0;
35194 res[i++] = 0;
ebd8d4e8 35195
8b095871
IC
35196 for (var t = 8; t < this.padLength; t++)
35197 res[i++] = 0;
ebd8d4e8
IC
35198 }
35199
8b095871
IC
35200 return res;
35201};
ebd8d4e8 35202
8b095871
IC
35203},{"../hash":57}],59:[function(require,module,exports){
35204var hmac = exports;
ebd8d4e8 35205
8b095871
IC
35206var hash = require('../hash');
35207var utils = hash.utils;
35208var assert = utils.assert;
ebd8d4e8 35209
8b095871
IC
35210function Hmac(hash, key, enc) {
35211 if (!(this instanceof Hmac))
35212 return new Hmac(hash, key, enc);
35213 this.Hash = hash;
35214 this.blockSize = hash.blockSize / 8;
35215 this.outSize = hash.outSize / 8;
35216 this.inner = null;
35217 this.outer = null;
ebd8d4e8 35218
8b095871 35219 this._init(utils.toArray(key, enc));
ebd8d4e8 35220}
8b095871 35221module.exports = Hmac;
ebd8d4e8 35222
8b095871
IC
35223Hmac.prototype._init = function init(key) {
35224 // Shorten key, if needed
35225 if (key.length > this.blockSize)
35226 key = new this.Hash().update(key).digest();
35227 assert(key.length <= this.blockSize);
ebd8d4e8 35228
8b095871
IC
35229 // Add padding to key
35230 for (var i = key.length; i < this.blockSize; i++)
35231 key.push(0);
ab78acc6 35232
8b095871
IC
35233 for (var i = 0; i < key.length; i++)
35234 key[i] ^= 0x36;
35235 this.inner = new this.Hash().update(key);
ab78acc6 35236
8b095871
IC
35237 // 0x36 ^ 0x5c = 0x6a
35238 for (var i = 0; i < key.length; i++)
35239 key[i] ^= 0x6a;
35240 this.outer = new this.Hash().update(key);
35241};
ebd8d4e8 35242
8b095871
IC
35243Hmac.prototype.update = function update(msg, enc) {
35244 this.inner.update(msg, enc);
35245 return this;
35246};
ab78acc6 35247
8b095871
IC
35248Hmac.prototype.digest = function digest(enc) {
35249 this.outer.update(this.inner.digest());
35250 return this.outer.digest(enc);
35251};
ab78acc6 35252
8b095871
IC
35253},{"../hash":57}],60:[function(require,module,exports){
35254var hash = require('../hash');
35255var utils = hash.utils;
35256
35257var rotl32 = utils.rotl32;
35258var sum32 = utils.sum32;
35259var sum32_3 = utils.sum32_3;
35260var sum32_4 = utils.sum32_4;
35261var BlockHash = hash.common.BlockHash;
35262
35263function RIPEMD160() {
35264 if (!(this instanceof RIPEMD160))
35265 return new RIPEMD160();
35266
35267 BlockHash.call(this);
35268
35269 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
35270 this.endian = 'little';
35271}
35272utils.inherits(RIPEMD160, BlockHash);
35273exports.ripemd160 = RIPEMD160;
35274
35275RIPEMD160.blockSize = 512;
35276RIPEMD160.outSize = 160;
35277RIPEMD160.hmacStrength = 192;
35278RIPEMD160.padLength = 64;
35279
35280RIPEMD160.prototype._update = function update(msg, start) {
35281 var A = this.h[0];
35282 var B = this.h[1];
35283 var C = this.h[2];
35284 var D = this.h[3];
35285 var E = this.h[4];
35286 var Ah = A;
35287 var Bh = B;
35288 var Ch = C;
35289 var Dh = D;
35290 var Eh = E;
35291 for (var j = 0; j < 80; j++) {
35292 var T = sum32(
35293 rotl32(
35294 sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
35295 s[j]),
35296 E);
35297 A = E;
35298 E = D;
35299 D = rotl32(C, 10);
35300 C = B;
35301 B = T;
35302 T = sum32(
35303 rotl32(
35304 sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
35305 sh[j]),
35306 Eh);
35307 Ah = Eh;
35308 Eh = Dh;
35309 Dh = rotl32(Ch, 10);
35310 Ch = Bh;
35311 Bh = T;
35312 }
35313 T = sum32_3(this.h[1], C, Dh);
35314 this.h[1] = sum32_3(this.h[2], D, Eh);
35315 this.h[2] = sum32_3(this.h[3], E, Ah);
35316 this.h[3] = sum32_3(this.h[4], A, Bh);
35317 this.h[4] = sum32_3(this.h[0], B, Ch);
35318 this.h[0] = T;
35319};
ebd8d4e8 35320
8b095871
IC
35321RIPEMD160.prototype._digest = function digest(enc) {
35322 if (enc === 'hex')
35323 return utils.toHex32(this.h, 'little');
35324 else
35325 return utils.split32(this.h, 'little');
35326};
ebd8d4e8 35327
8b095871
IC
35328function f(j, x, y, z) {
35329 if (j <= 15)
35330 return x ^ y ^ z;
35331 else if (j <= 31)
35332 return (x & y) | ((~x) & z);
35333 else if (j <= 47)
35334 return (x | (~y)) ^ z;
35335 else if (j <= 63)
35336 return (x & z) | (y & (~z));
35337 else
35338 return x ^ (y | (~z));
35339}
35340
35341function K(j) {
35342 if (j <= 15)
35343 return 0x00000000;
35344 else if (j <= 31)
35345 return 0x5a827999;
35346 else if (j <= 47)
35347 return 0x6ed9eba1;
35348 else if (j <= 63)
35349 return 0x8f1bbcdc;
35350 else
35351 return 0xa953fd4e;
35352}
35353
35354function Kh(j) {
35355 if (j <= 15)
35356 return 0x50a28be6;
35357 else if (j <= 31)
35358 return 0x5c4dd124;
35359 else if (j <= 47)
35360 return 0x6d703ef3;
35361 else if (j <= 63)
35362 return 0x7a6d76e9;
35363 else
35364 return 0x00000000;
35365}
ebd8d4e8 35366
8b095871
IC
35367var r = [
35368 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
35369 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
35370 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
35371 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
35372 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
35373];
ebd8d4e8 35374
8b095871
IC
35375var rh = [
35376 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
35377 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
35378 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
35379 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
35380 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
35381];
ebd8d4e8 35382
8b095871
IC
35383var s = [
35384 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
35385 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
35386 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
35387 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
35388 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
35389];
ebd8d4e8 35390
8b095871
IC
35391var sh = [
35392 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
35393 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
35394 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
35395 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
35396 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
35397];
ebd8d4e8 35398
8b095871
IC
35399},{"../hash":57}],61:[function(require,module,exports){
35400var hash = require('../hash');
35401var utils = hash.utils;
35402var assert = utils.assert;
35403
35404var rotr32 = utils.rotr32;
35405var rotl32 = utils.rotl32;
35406var sum32 = utils.sum32;
35407var sum32_4 = utils.sum32_4;
35408var sum32_5 = utils.sum32_5;
35409var rotr64_hi = utils.rotr64_hi;
35410var rotr64_lo = utils.rotr64_lo;
35411var shr64_hi = utils.shr64_hi;
35412var shr64_lo = utils.shr64_lo;
35413var sum64 = utils.sum64;
35414var sum64_hi = utils.sum64_hi;
35415var sum64_lo = utils.sum64_lo;
35416var sum64_4_hi = utils.sum64_4_hi;
35417var sum64_4_lo = utils.sum64_4_lo;
35418var sum64_5_hi = utils.sum64_5_hi;
35419var sum64_5_lo = utils.sum64_5_lo;
35420var BlockHash = hash.common.BlockHash;
35421
35422var sha256_K = [
35423 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
35424 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
35425 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
35426 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
35427 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
35428 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
35429 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
35430 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
35431 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
35432 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
35433 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
35434 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
35435 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
35436 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
35437 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
35438 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
35439];
ebd8d4e8 35440
8b095871
IC
35441var sha512_K = [
35442 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
35443 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
35444 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
35445 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
35446 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
35447 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
35448 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
35449 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
35450 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
35451 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
35452 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
35453 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
35454 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
35455 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
35456 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
35457 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
35458 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
35459 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
35460 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
35461 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
35462 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
35463 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
35464 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
35465 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
35466 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
35467 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
35468 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
35469 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
35470 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
35471 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
35472 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
35473 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
35474 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
35475 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
35476 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
35477 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
35478 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
35479 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
35480 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
35481 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
35482];
ebd8d4e8 35483
8b095871
IC
35484var sha1_K = [
35485 0x5A827999, 0x6ED9EBA1,
35486 0x8F1BBCDC, 0xCA62C1D6
35487];
ebd8d4e8 35488
8b095871
IC
35489function SHA256() {
35490 if (!(this instanceof SHA256))
35491 return new SHA256();
35492
35493 BlockHash.call(this);
35494 this.h = [ 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
35495 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19 ];
35496 this.k = sha256_K;
35497 this.W = new Array(64);
35498}
35499utils.inherits(SHA256, BlockHash);
35500exports.sha256 = SHA256;
35501
35502SHA256.blockSize = 512;
35503SHA256.outSize = 256;
35504SHA256.hmacStrength = 192;
35505SHA256.padLength = 64;
35506
35507SHA256.prototype._update = function _update(msg, start) {
35508 var W = this.W;
35509
35510 for (var i = 0; i < 16; i++)
35511 W[i] = msg[start + i];
35512 for (; i < W.length; i++)
35513 W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);
35514
35515 var a = this.h[0];
35516 var b = this.h[1];
35517 var c = this.h[2];
35518 var d = this.h[3];
35519 var e = this.h[4];
35520 var f = this.h[5];
35521 var g = this.h[6];
35522 var h = this.h[7];
35523
35524 assert(this.k.length === W.length);
35525 for (var i = 0; i < W.length; i++) {
35526 var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);
35527 var T2 = sum32(s0_256(a), maj32(a, b, c));
35528 h = g;
35529 g = f;
35530 f = e;
35531 e = sum32(d, T1);
35532 d = c;
35533 c = b;
35534 b = a;
35535 a = sum32(T1, T2);
35536 }
35537
35538 this.h[0] = sum32(this.h[0], a);
35539 this.h[1] = sum32(this.h[1], b);
35540 this.h[2] = sum32(this.h[2], c);
35541 this.h[3] = sum32(this.h[3], d);
35542 this.h[4] = sum32(this.h[4], e);
35543 this.h[5] = sum32(this.h[5], f);
35544 this.h[6] = sum32(this.h[6], g);
35545 this.h[7] = sum32(this.h[7], h);
35546};
ebd8d4e8 35547
8b095871
IC
35548SHA256.prototype._digest = function digest(enc) {
35549 if (enc === 'hex')
35550 return utils.toHex32(this.h, 'big');
35551 else
35552 return utils.split32(this.h, 'big');
35553};
ebd8d4e8 35554
8b095871
IC
35555function SHA224() {
35556 if (!(this instanceof SHA224))
35557 return new SHA224();
ebd8d4e8 35558
8b095871
IC
35559 SHA256.call(this);
35560 this.h = [ 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,
35561 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4 ];
35562}
35563utils.inherits(SHA224, SHA256);
35564exports.sha224 = SHA224;
ebd8d4e8 35565
8b095871
IC
35566SHA224.blockSize = 512;
35567SHA224.outSize = 224;
35568SHA224.hmacStrength = 192;
35569SHA224.padLength = 64;
ebd8d4e8 35570
8b095871
IC
35571SHA224.prototype._digest = function digest(enc) {
35572 // Just truncate output
35573 if (enc === 'hex')
35574 return utils.toHex32(this.h.slice(0, 7), 'big');
35575 else
35576 return utils.split32(this.h.slice(0, 7), 'big');
35577};
35578
35579function SHA512() {
35580 if (!(this instanceof SHA512))
35581 return new SHA512();
35582
35583 BlockHash.call(this);
35584 this.h = [ 0x6a09e667, 0xf3bcc908,
35585 0xbb67ae85, 0x84caa73b,
35586 0x3c6ef372, 0xfe94f82b,
35587 0xa54ff53a, 0x5f1d36f1,
35588 0x510e527f, 0xade682d1,
35589 0x9b05688c, 0x2b3e6c1f,
35590 0x1f83d9ab, 0xfb41bd6b,
35591 0x5be0cd19, 0x137e2179 ];
35592 this.k = sha512_K;
35593 this.W = new Array(160);
35594}
35595utils.inherits(SHA512, BlockHash);
35596exports.sha512 = SHA512;
35597
35598SHA512.blockSize = 1024;
35599SHA512.outSize = 512;
35600SHA512.hmacStrength = 192;
35601SHA512.padLength = 128;
35602
35603SHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {
35604 var W = this.W;
35605
35606 // 32 x 32bit words
35607 for (var i = 0; i < 32; i++)
35608 W[i] = msg[start + i];
35609 for (; i < W.length; i += 2) {
35610 var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2
35611 var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);
35612 var c1_hi = W[i - 14]; // i - 7
35613 var c1_lo = W[i - 13];
35614 var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15
35615 var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);
35616 var c3_hi = W[i - 32]; // i - 16
35617 var c3_lo = W[i - 31];
35618
35619 W[i] = sum64_4_hi(c0_hi, c0_lo,
35620 c1_hi, c1_lo,
35621 c2_hi, c2_lo,
35622 c3_hi, c3_lo);
35623 W[i + 1] = sum64_4_lo(c0_hi, c0_lo,
35624 c1_hi, c1_lo,
35625 c2_hi, c2_lo,
35626 c3_hi, c3_lo);
ebd8d4e8 35627 }
8b095871
IC
35628};
35629
35630SHA512.prototype._update = function _update(msg, start) {
35631 this._prepareBlock(msg, start);
35632
35633 var W = this.W;
35634
35635 var ah = this.h[0];
35636 var al = this.h[1];
35637 var bh = this.h[2];
35638 var bl = this.h[3];
35639 var ch = this.h[4];
35640 var cl = this.h[5];
35641 var dh = this.h[6];
35642 var dl = this.h[7];
35643 var eh = this.h[8];
35644 var el = this.h[9];
35645 var fh = this.h[10];
35646 var fl = this.h[11];
35647 var gh = this.h[12];
35648 var gl = this.h[13];
35649 var hh = this.h[14];
35650 var hl = this.h[15];
35651
35652 assert(this.k.length === W.length);
35653 for (var i = 0; i < W.length; i += 2) {
35654 var c0_hi = hh;
35655 var c0_lo = hl;
35656 var c1_hi = s1_512_hi(eh, el);
35657 var c1_lo = s1_512_lo(eh, el);
35658 var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);
35659 var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);
35660 var c3_hi = this.k[i];
35661 var c3_lo = this.k[i + 1];
35662 var c4_hi = W[i];
35663 var c4_lo = W[i + 1];
35664
35665 var T1_hi = sum64_5_hi(c0_hi, c0_lo,
35666 c1_hi, c1_lo,
35667 c2_hi, c2_lo,
35668 c3_hi, c3_lo,
35669 c4_hi, c4_lo);
35670 var T1_lo = sum64_5_lo(c0_hi, c0_lo,
35671 c1_hi, c1_lo,
35672 c2_hi, c2_lo,
35673 c3_hi, c3_lo,
35674 c4_hi, c4_lo);
35675
35676 var c0_hi = s0_512_hi(ah, al);
35677 var c0_lo = s0_512_lo(ah, al);
35678 var c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);
35679 var c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);
35680
35681 var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);
35682 var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);
35683
35684 hh = gh;
35685 hl = gl;
35686
35687 gh = fh;
35688 gl = fl;
35689
35690 fh = eh;
35691 fl = el;
35692
35693 eh = sum64_hi(dh, dl, T1_hi, T1_lo);
35694 el = sum64_lo(dl, dl, T1_hi, T1_lo);
35695
35696 dh = ch;
35697 dl = cl;
35698
35699 ch = bh;
35700 cl = bl;
35701
35702 bh = ah;
35703 bl = al;
35704
35705 ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);
35706 al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);
35707 }
35708
35709 sum64(this.h, 0, ah, al);
35710 sum64(this.h, 2, bh, bl);
35711 sum64(this.h, 4, ch, cl);
35712 sum64(this.h, 6, dh, dl);
35713 sum64(this.h, 8, eh, el);
35714 sum64(this.h, 10, fh, fl);
35715 sum64(this.h, 12, gh, gl);
35716 sum64(this.h, 14, hh, hl);
35717};
35718
35719SHA512.prototype._digest = function digest(enc) {
35720 if (enc === 'hex')
35721 return utils.toHex32(this.h, 'big');
35722 else
35723 return utils.split32(this.h, 'big');
35724};
35725
35726function SHA384() {
35727 if (!(this instanceof SHA384))
35728 return new SHA384();
35729
35730 SHA512.call(this);
35731 this.h = [ 0xcbbb9d5d, 0xc1059ed8,
35732 0x629a292a, 0x367cd507,
35733 0x9159015a, 0x3070dd17,
35734 0x152fecd8, 0xf70e5939,
35735 0x67332667, 0xffc00b31,
35736 0x8eb44a87, 0x68581511,
35737 0xdb0c2e0d, 0x64f98fa7,
35738 0x47b5481d, 0xbefa4fa4 ];
35739}
35740utils.inherits(SHA384, SHA512);
35741exports.sha384 = SHA384;
35742
35743SHA384.blockSize = 1024;
35744SHA384.outSize = 384;
35745SHA384.hmacStrength = 192;
35746SHA384.padLength = 128;
35747
35748SHA384.prototype._digest = function digest(enc) {
35749 if (enc === 'hex')
35750 return utils.toHex32(this.h.slice(0, 12), 'big');
35751 else
35752 return utils.split32(this.h.slice(0, 12), 'big');
35753};
ebd8d4e8 35754
8b095871
IC
35755function SHA1() {
35756 if (!(this instanceof SHA1))
35757 return new SHA1();
ebd8d4e8 35758
8b095871
IC
35759 BlockHash.call(this);
35760 this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe,
35761 0x10325476, 0xc3d2e1f0 ];
35762 this.W = new Array(80);
35763}
ebd8d4e8 35764
8b095871
IC
35765utils.inherits(SHA1, BlockHash);
35766exports.sha1 = SHA1;
ebd8d4e8 35767
8b095871
IC
35768SHA1.blockSize = 512;
35769SHA1.outSize = 160;
35770SHA1.hmacStrength = 80;
35771SHA1.padLength = 64;
ebd8d4e8 35772
8b095871
IC
35773SHA1.prototype._update = function _update(msg, start) {
35774 var W = this.W;
ebd8d4e8 35775
8b095871
IC
35776 for (var i = 0; i < 16; i++)
35777 W[i] = msg[start + i];
ebd8d4e8 35778
8b095871
IC
35779 for(; i < W.length; i++)
35780 W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
ebd8d4e8 35781
8b095871
IC
35782 var a = this.h[0];
35783 var b = this.h[1];
35784 var c = this.h[2];
35785 var d = this.h[3];
35786 var e = this.h[4];
ebd8d4e8 35787
8b095871
IC
35788 for (var i = 0; i < W.length; i++) {
35789 var s = ~~(i / 20);
35790 var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);
35791 e = d;
35792 d = c;
35793 c = rotl32(b, 30);
35794 b = a;
35795 a = t;
ebd8d4e8
IC
35796 }
35797
8b095871
IC
35798 this.h[0] = sum32(this.h[0], a);
35799 this.h[1] = sum32(this.h[1], b);
35800 this.h[2] = sum32(this.h[2], c);
35801 this.h[3] = sum32(this.h[3], d);
35802 this.h[4] = sum32(this.h[4], e);
35803};
ebd8d4e8 35804
8b095871
IC
35805SHA1.prototype._digest = function digest(enc) {
35806 if (enc === 'hex')
35807 return utils.toHex32(this.h, 'big');
35808 else
35809 return utils.split32(this.h, 'big');
35810};
35811
35812function ch32(x, y, z) {
35813 return (x & y) ^ ((~x) & z);
ebd8d4e8
IC
35814}
35815
8b095871
IC
35816function maj32(x, y, z) {
35817 return (x & y) ^ (x & z) ^ (y & z);
ebd8d4e8
IC
35818}
35819
8b095871
IC
35820function p32(x, y, z) {
35821 return x ^ y ^ z;
35822}
ebd8d4e8 35823
8b095871
IC
35824function s0_256(x) {
35825 return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);
35826}
ebd8d4e8 35827
8b095871
IC
35828function s1_256(x) {
35829 return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);
ab78acc6
IC
35830}
35831
8b095871
IC
35832function g0_256(x) {
35833 return rotr32(x, 7) ^ rotr32(x, 18) ^ (x >>> 3);
35834}
ab78acc6 35835
8b095871
IC
35836function g1_256(x) {
35837 return rotr32(x, 17) ^ rotr32(x, 19) ^ (x >>> 10);
35838}
ab78acc6 35839
8b095871
IC
35840function ft_1(s, x, y, z) {
35841 if (s === 0)
35842 return ch32(x, y, z);
35843 if (s === 1 || s === 3)
35844 return p32(x, y, z);
35845 if (s === 2)
35846 return maj32(x, y, z);
35847}
ebd8d4e8 35848
8b095871
IC
35849function ch64_hi(xh, xl, yh, yl, zh, zl) {
35850 var r = (xh & yh) ^ ((~xh) & zh);
35851 if (r < 0)
35852 r += 0x100000000;
35853 return r;
35854}
ebd8d4e8 35855
8b095871
IC
35856function ch64_lo(xh, xl, yh, yl, zh, zl) {
35857 var r = (xl & yl) ^ ((~xl) & zl);
35858 if (r < 0)
35859 r += 0x100000000;
35860 return r;
ebd8d4e8
IC
35861}
35862
8b095871
IC
35863function maj64_hi(xh, xl, yh, yl, zh, zl) {
35864 var r = (xh & yh) ^ (xh & zh) ^ (yh & zh);
35865 if (r < 0)
35866 r += 0x100000000;
35867 return r;
35868}
ebd8d4e8 35869
8b095871
IC
35870function maj64_lo(xh, xl, yh, yl, zh, zl) {
35871 var r = (xl & yl) ^ (xl & zl) ^ (yl & zl);
35872 if (r < 0)
35873 r += 0x100000000;
35874 return r;
35875}
ebd8d4e8 35876
8b095871
IC
35877function s0_512_hi(xh, xl) {
35878 var c0_hi = rotr64_hi(xh, xl, 28);
35879 var c1_hi = rotr64_hi(xl, xh, 2); // 34
35880 var c2_hi = rotr64_hi(xl, xh, 7); // 39
35881
35882 var r = c0_hi ^ c1_hi ^ c2_hi;
35883 if (r < 0)
35884 r += 0x100000000;
35885 return r;
ebd8d4e8
IC
35886}
35887
8b095871
IC
35888function s0_512_lo(xh, xl) {
35889 var c0_lo = rotr64_lo(xh, xl, 28);
35890 var c1_lo = rotr64_lo(xl, xh, 2); // 34
35891 var c2_lo = rotr64_lo(xl, xh, 7); // 39
ab78acc6 35892
8b095871
IC
35893 var r = c0_lo ^ c1_lo ^ c2_lo;
35894 if (r < 0)
35895 r += 0x100000000;
35896 return r;
35897}
ebd8d4e8 35898
8b095871
IC
35899function s1_512_hi(xh, xl) {
35900 var c0_hi = rotr64_hi(xh, xl, 14);
35901 var c1_hi = rotr64_hi(xh, xl, 18);
35902 var c2_hi = rotr64_hi(xl, xh, 9); // 41
ebd8d4e8 35903
8b095871
IC
35904 var r = c0_hi ^ c1_hi ^ c2_hi;
35905 if (r < 0)
35906 r += 0x100000000;
35907 return r;
ebd8d4e8
IC
35908}
35909
8b095871
IC
35910function s1_512_lo(xh, xl) {
35911 var c0_lo = rotr64_lo(xh, xl, 14);
35912 var c1_lo = rotr64_lo(xh, xl, 18);
35913 var c2_lo = rotr64_lo(xl, xh, 9); // 41
35914
35915 var r = c0_lo ^ c1_lo ^ c2_lo;
35916 if (r < 0)
35917 r += 0x100000000;
35918 return r;
ebd8d4e8
IC
35919}
35920
8b095871
IC
35921function g0_512_hi(xh, xl) {
35922 var c0_hi = rotr64_hi(xh, xl, 1);
35923 var c1_hi = rotr64_hi(xh, xl, 8);
35924 var c2_hi = shr64_hi(xh, xl, 7);
ebd8d4e8 35925
8b095871
IC
35926 var r = c0_hi ^ c1_hi ^ c2_hi;
35927 if (r < 0)
35928 r += 0x100000000;
35929 return r;
35930}
35931
35932function g0_512_lo(xh, xl) {
35933 var c0_lo = rotr64_lo(xh, xl, 1);
35934 var c1_lo = rotr64_lo(xh, xl, 8);
35935 var c2_lo = shr64_lo(xh, xl, 7);
35936
35937 var r = c0_lo ^ c1_lo ^ c2_lo;
35938 if (r < 0)
35939 r += 0x100000000;
35940 return r;
35941}
35942
35943function g1_512_hi(xh, xl) {
35944 var c0_hi = rotr64_hi(xh, xl, 19);
35945 var c1_hi = rotr64_hi(xl, xh, 29); // 61
35946 var c2_hi = shr64_hi(xh, xl, 6);
35947
35948 var r = c0_hi ^ c1_hi ^ c2_hi;
35949 if (r < 0)
35950 r += 0x100000000;
35951 return r;
35952}
35953
35954function g1_512_lo(xh, xl) {
35955 var c0_lo = rotr64_lo(xh, xl, 19);
35956 var c1_lo = rotr64_lo(xl, xh, 29); // 61
35957 var c2_lo = shr64_lo(xh, xl, 6);
35958
35959 var r = c0_lo ^ c1_lo ^ c2_lo;
35960 if (r < 0)
35961 r += 0x100000000;
35962 return r;
35963}
35964
35965},{"../hash":57}],62:[function(require,module,exports){
35966var utils = exports;
35967var inherits = require('inherits');
35968
35969function toArray(msg, enc) {
35970 if (Array.isArray(msg))
35971 return msg.slice();
35972 if (!msg)
35973 return [];
35974 var res = [];
35975 if (typeof msg === 'string') {
35976 if (!enc) {
35977 for (var i = 0; i < msg.length; i++) {
35978 var c = msg.charCodeAt(i);
35979 var hi = c >> 8;
35980 var lo = c & 0xff;
35981 if (hi)
35982 res.push(hi, lo);
35983 else
35984 res.push(lo);
35985 }
35986 } else if (enc === 'hex') {
35987 msg = msg.replace(/[^a-z0-9]+/ig, '');
35988 if (msg.length % 2 !== 0)
35989 msg = '0' + msg;
35990 for (var i = 0; i < msg.length; i += 2)
35991 res.push(parseInt(msg[i] + msg[i + 1], 16));
35992 }
35993 } else {
35994 for (var i = 0; i < msg.length; i++)
35995 res[i] = msg[i] | 0;
ebd8d4e8 35996 }
8b095871 35997 return res;
ebd8d4e8 35998}
8b095871 35999utils.toArray = toArray;
ebd8d4e8 36000
8b095871
IC
36001function toHex(msg) {
36002 var res = '';
36003 for (var i = 0; i < msg.length; i++)
36004 res += zero2(msg[i].toString(16));
36005 return res;
36006}
36007utils.toHex = toHex;
ebd8d4e8 36008
8b095871
IC
36009function htonl(w) {
36010 var res = (w >>> 24) |
36011 ((w >>> 8) & 0xff00) |
36012 ((w << 8) & 0xff0000) |
36013 ((w & 0xff) << 24);
36014 return res >>> 0;
36015}
36016utils.htonl = htonl;
ebd8d4e8 36017
8b095871
IC
36018function toHex32(msg, endian) {
36019 var res = '';
36020 for (var i = 0; i < msg.length; i++) {
36021 var w = msg[i];
36022 if (endian === 'little')
36023 w = htonl(w);
36024 res += zero8(w.toString(16));
36025 }
36026 return res;
36027}
36028utils.toHex32 = toHex32;
ebd8d4e8 36029
8b095871
IC
36030function zero2(word) {
36031 if (word.length === 1)
36032 return '0' + word;
36033 else
36034 return word;
36035}
36036utils.zero2 = zero2;
36037
36038function zero8(word) {
36039 if (word.length === 7)
36040 return '0' + word;
36041 else if (word.length === 6)
36042 return '00' + word;
36043 else if (word.length === 5)
36044 return '000' + word;
36045 else if (word.length === 4)
36046 return '0000' + word;
36047 else if (word.length === 3)
36048 return '00000' + word;
36049 else if (word.length === 2)
36050 return '000000' + word;
36051 else if (word.length === 1)
36052 return '0000000' + word;
36053 else
36054 return word;
36055}
36056utils.zero8 = zero8;
36057
36058function join32(msg, start, end, endian) {
36059 var len = end - start;
36060 assert(len % 4 === 0);
36061 var res = new Array(len / 4);
36062 for (var i = 0, k = start; i < res.length; i++, k += 4) {
36063 var w;
36064 if (endian === 'big')
36065 w = (msg[k] << 24) | (msg[k + 1] << 16) | (msg[k + 2] << 8) | msg[k + 3];
36066 else
36067 w = (msg[k + 3] << 24) | (msg[k + 2] << 16) | (msg[k + 1] << 8) | msg[k];
36068 res[i] = w >>> 0;
36069 }
36070 return res;
36071}
36072utils.join32 = join32;
36073
36074function split32(msg, endian) {
36075 var res = new Array(msg.length * 4);
36076 for (var i = 0, k = 0; i < msg.length; i++, k += 4) {
36077 var m = msg[i];
36078 if (endian === 'big') {
36079 res[k] = m >>> 24;
36080 res[k + 1] = (m >>> 16) & 0xff;
36081 res[k + 2] = (m >>> 8) & 0xff;
36082 res[k + 3] = m & 0xff;
36083 } else {
36084 res[k + 3] = m >>> 24;
36085 res[k + 2] = (m >>> 16) & 0xff;
36086 res[k + 1] = (m >>> 8) & 0xff;
36087 res[k] = m & 0xff;
36088 }
ebd8d4e8 36089 }
8b095871 36090 return res;
ebd8d4e8 36091}
8b095871 36092utils.split32 = split32;
ebd8d4e8 36093
8b095871
IC
36094function rotr32(w, b) {
36095 return (w >>> b) | (w << (32 - b));
36096}
36097utils.rotr32 = rotr32;
ebd8d4e8 36098
8b095871
IC
36099function rotl32(w, b) {
36100 return (w << b) | (w >>> (32 - b));
36101}
36102utils.rotl32 = rotl32;
ebd8d4e8 36103
8b095871
IC
36104function sum32(a, b) {
36105 return (a + b) >>> 0;
36106}
36107utils.sum32 = sum32;
ebd8d4e8 36108
8b095871
IC
36109function sum32_3(a, b, c) {
36110 return (a + b + c) >>> 0;
36111}
36112utils.sum32_3 = sum32_3;
ebd8d4e8 36113
8b095871
IC
36114function sum32_4(a, b, c, d) {
36115 return (a + b + c + d) >>> 0;
36116}
36117utils.sum32_4 = sum32_4;
ebd8d4e8 36118
8b095871
IC
36119function sum32_5(a, b, c, d, e) {
36120 return (a + b + c + d + e) >>> 0;
36121}
36122utils.sum32_5 = sum32_5;
ebd8d4e8 36123
8b095871
IC
36124function assert(cond, msg) {
36125 if (!cond)
36126 throw new Error(msg || 'Assertion failed');
36127}
36128utils.assert = assert;
ab78acc6 36129
8b095871 36130utils.inherits = inherits;
ab78acc6 36131
8b095871
IC
36132function sum64(buf, pos, ah, al) {
36133 var bh = buf[pos];
36134 var bl = buf[pos + 1];
ab78acc6 36135
8b095871
IC
36136 var lo = (al + bl) >>> 0;
36137 var hi = (lo < al ? 1 : 0) + ah + bh;
36138 buf[pos] = hi >>> 0;
36139 buf[pos + 1] = lo;
36140}
36141exports.sum64 = sum64;
ebd8d4e8 36142
8b095871
IC
36143function sum64_hi(ah, al, bh, bl) {
36144 var lo = (al + bl) >>> 0;
36145 var hi = (lo < al ? 1 : 0) + ah + bh;
36146 return hi >>> 0;
36147};
36148exports.sum64_hi = sum64_hi;
ebd8d4e8 36149
8b095871
IC
36150function sum64_lo(ah, al, bh, bl) {
36151 var lo = al + bl;
36152 return lo >>> 0;
36153};
36154exports.sum64_lo = sum64_lo;
36155
36156function sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {
36157 var carry = 0;
36158 var lo = al;
36159 lo = (lo + bl) >>> 0;
36160 carry += lo < al ? 1 : 0;
36161 lo = (lo + cl) >>> 0;
36162 carry += lo < cl ? 1 : 0;
36163 lo = (lo + dl) >>> 0;
36164 carry += lo < dl ? 1 : 0;
36165
36166 var hi = ah + bh + ch + dh + carry;
36167 return hi >>> 0;
36168};
36169exports.sum64_4_hi = sum64_4_hi;
ebd8d4e8 36170
8b095871
IC
36171function sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {
36172 var lo = al + bl + cl + dl;
36173 return lo >>> 0;
36174};
36175exports.sum64_4_lo = sum64_4_lo;
36176
36177function sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
36178 var carry = 0;
36179 var lo = al;
36180 lo = (lo + bl) >>> 0;
36181 carry += lo < al ? 1 : 0;
36182 lo = (lo + cl) >>> 0;
36183 carry += lo < cl ? 1 : 0;
36184 lo = (lo + dl) >>> 0;
36185 carry += lo < dl ? 1 : 0;
36186 lo = (lo + el) >>> 0;
36187 carry += lo < el ? 1 : 0;
36188
36189 var hi = ah + bh + ch + dh + eh + carry;
36190 return hi >>> 0;
36191};
36192exports.sum64_5_hi = sum64_5_hi;
36193
36194function sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {
36195 var lo = al + bl + cl + dl + el;
36196
36197 return lo >>> 0;
36198};
36199exports.sum64_5_lo = sum64_5_lo;
36200
36201function rotr64_hi(ah, al, num) {
36202 var r = (al << (32 - num)) | (ah >>> num);
36203 return r >>> 0;
36204};
36205exports.rotr64_hi = rotr64_hi;
36206
36207function rotr64_lo(ah, al, num) {
36208 var r = (ah << (32 - num)) | (al >>> num);
36209 return r >>> 0;
36210};
36211exports.rotr64_lo = rotr64_lo;
36212
36213function shr64_hi(ah, al, num) {
36214 return ah >>> num;
36215};
36216exports.shr64_hi = shr64_hi;
36217
36218function shr64_lo(ah, al, num) {
36219 var r = (ah << (32 - num)) | (al >>> num);
36220 return r >>> 0;
36221};
36222exports.shr64_lo = shr64_lo;
36223
36224},{"inherits":63}],63:[function(require,module,exports){
36225arguments[4][9][0].apply(exports,arguments)
36226},{"dup":9}],64:[function(require,module,exports){
36227/**
36228 * Returns a `Boolean` on whether or not the a `String` starts with '0x'
36229 * @param {String} str the string input value
36230 * @return {Boolean} a boolean if it is or is not hex prefixed
36231 * @throws if the str input is not a string
36232 */
36233module.exports = function isHexPrefixed(str) {
36234 if (typeof str !== 'string') {
36235 throw new Error("[is-hex-prefixed] value must be type 'string', is currently type " + (typeof str) + ", while checking isHexPrefixed.");
36236 }
36237
36238 return str.slice(0, 2) === '0x';
ebd8d4e8
IC
36239}
36240
8b095871
IC
36241},{}],65:[function(require,module,exports){
36242'use strict'
36243module.exports = require('./lib/api')(require('./lib/keccak'))
36244
36245},{"./lib/api":66,"./lib/keccak":70}],66:[function(require,module,exports){
36246'use strict'
36247var createKeccak = require('./keccak')
36248var createShake = require('./shake')
36249
36250module.exports = function (KeccakState) {
36251 var Keccak = createKeccak(KeccakState)
36252 var Shake = createShake(KeccakState)
36253
36254 return function (algorithm, options) {
36255 var hash = typeof algorithm === 'string' ? algorithm.toLowerCase() : algorithm
36256 switch (hash) {
36257 case 'keccak224': return new Keccak(1152, 448, null, 224, options)
36258 case 'keccak256': return new Keccak(1088, 512, null, 256, options)
36259 case 'keccak384': return new Keccak(832, 768, null, 384, options)
36260 case 'keccak512': return new Keccak(576, 1024, null, 512, options)
36261
36262 case 'sha3-224': return new Keccak(1152, 448, 0x06, 224, options)
36263 case 'sha3-256': return new Keccak(1088, 512, 0x06, 256, options)
36264 case 'sha3-384': return new Keccak(832, 768, 0x06, 384, options)
36265 case 'sha3-512': return new Keccak(576, 1024, 0x06, 512, options)
36266
36267 case 'shake128': return new Shake(1344, 256, 0x1f, options)
36268 case 'shake256': return new Shake(1088, 512, 0x1f, options)
36269
36270 default: throw new Error('Invald algorithm: ' + algorithm)
36271 }
36272 }
36273}
36274
36275},{"./keccak":67,"./shake":68}],67:[function(require,module,exports){
ebd8d4e8 36276(function (Buffer){
8b095871
IC
36277'use strict'
36278var Transform = require('stream').Transform
36279var inherits = require('inherits')
36280
36281module.exports = function (KeccakState) {
36282 function Keccak (rate, capacity, delimitedSuffix, hashBitLength, options) {
36283 Transform.call(this, options)
36284
36285 this._rate = rate
36286 this._capacity = capacity
36287 this._delimitedSuffix = delimitedSuffix
36288 this._hashBitLength = hashBitLength
36289 this._options = options
36290
36291 this._state = new KeccakState()
36292 this._state.initialize(rate, capacity)
36293 this._finalized = false
36294 }
36295
36296 inherits(Keccak, Transform)
36297
36298 Keccak.prototype._transform = function (chunk, encoding, callback) {
36299 var error = null
36300 try {
36301 this.update(chunk, encoding)
36302 } catch (err) {
36303 error = err
36304 }
36305
36306 callback(error)
36307 }
36308
36309 Keccak.prototype._flush = function (callback) {
36310 var error = null
36311 try {
36312 this.push(this.digest())
36313 } catch (err) {
36314 error = err
36315 }
36316
36317 callback(error)
36318 }
36319
36320 Keccak.prototype.update = function (data, encoding) {
36321 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
36322 if (this._finalized) throw new Error('Digest already called')
36323 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
36324
36325 this._state.absorb(data)
36326
36327 return this
36328 }
36329
36330 Keccak.prototype.digest = function (encoding) {
36331 if (this._finalized) throw new Error('Digest already called')
36332 this._finalized = true
36333
36334 if (this._delimitedSuffix) this._state.absorbLastFewBits(this._delimitedSuffix)
36335 var digest = this._state.squeeze(this._hashBitLength / 8)
36336 if (encoding !== undefined) digest = digest.toString(encoding)
36337
36338 this._resetState()
36339
36340 return digest
36341 }
36342
36343 // remove result from memory
36344 Keccak.prototype._resetState = function () {
36345 this._state.initialize(this._rate, this._capacity)
36346 return this
36347 }
36348
36349 // because sometimes we need hash right now and little later
36350 Keccak.prototype._clone = function () {
36351 var clone = new Keccak(this._rate, this._capacity, this._delimitedSuffix, this._hashBitLength, this._options)
36352 this._state.copy(clone._state)
36353 clone._finalized = this._finalized
36354
36355 return clone
36356 }
36357
36358 return Keccak
36359}
36360
36361}).call(this,require("buffer").Buffer)
36362},{"buffer":5,"inherits":63,"stream":25}],68:[function(require,module,exports){
36363(function (Buffer){
36364'use strict'
36365var Transform = require('stream').Transform
36366var inherits = require('inherits')
36367
36368module.exports = function (KeccakState) {
36369 function Shake (rate, capacity, delimitedSuffix, options) {
36370 Transform.call(this, options)
36371
36372 this._rate = rate
36373 this._capacity = capacity
36374 this._delimitedSuffix = delimitedSuffix
36375 this._options = options
36376
36377 this._state = new KeccakState()
36378 this._state.initialize(rate, capacity)
36379 this._finalized = false
36380 }
36381
36382 inherits(Shake, Transform)
36383
36384 Shake.prototype._transform = function (chunk, encoding, callback) {
36385 var error = null
36386 try {
36387 this.update(chunk, encoding)
36388 } catch (err) {
36389 error = err
36390 }
ebd8d4e8 36391
8b095871
IC
36392 callback(error)
36393 }
ebd8d4e8 36394
8b095871 36395 Shake.prototype._flush = function () {}
ebd8d4e8 36396
8b095871
IC
36397 Shake.prototype._read = function (size) {
36398 this.push(this.squeeze(size))
36399 }
ebd8d4e8 36400
8b095871
IC
36401 Shake.prototype.update = function (data, encoding) {
36402 if (!Buffer.isBuffer(data) && typeof data !== 'string') throw new TypeError('Data must be a string or a buffer')
36403 if (this._finalized) throw new Error('Squeeze already called')
36404 if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding)
36405
36406 this._state.absorb(data)
36407
36408 return this
36409 }
36410
36411 Shake.prototype.squeeze = function (dataByteLength, encoding) {
36412 if (!this._finalized) {
36413 this._finalized = true
36414 this._state.absorbLastFewBits(this._delimitedSuffix)
ebd8d4e8 36415 }
ebd8d4e8 36416
8b095871
IC
36417 var data = this._state.squeeze(dataByteLength)
36418 if (encoding !== undefined) data = data.toString(encoding)
ebd8d4e8 36419
8b095871
IC
36420 return data
36421 }
ebd8d4e8 36422
8b095871
IC
36423 Shake.prototype._resetState = function () {
36424 this._state.initialize(this._rate, this._capacity)
36425 return this
36426 }
ebd8d4e8 36427
8b095871
IC
36428 Shake.prototype._clone = function () {
36429 var clone = new Shake(this._rate, this._capacity, this._delimitedSuffix, this._options)
36430 this._state.copy(clone._state)
36431 clone._finalized = this._finalized
ab78acc6 36432
8b095871
IC
36433 return clone
36434 }
ebd8d4e8 36435
8b095871
IC
36436 return Shake
36437}
ab78acc6 36438
8b095871
IC
36439}).call(this,require("buffer").Buffer)
36440},{"buffer":5,"inherits":63,"stream":25}],69:[function(require,module,exports){
36441'use strict'
36442var 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]
36443
36444exports.p1600 = function (s) {
36445 for (var round = 0; round < 24; ++round) {
36446 // theta
36447 var lo0 = s[0] ^ s[10] ^ s[20] ^ s[30] ^ s[40]
36448 var hi0 = s[1] ^ s[11] ^ s[21] ^ s[31] ^ s[41]
36449 var lo1 = s[2] ^ s[12] ^ s[22] ^ s[32] ^ s[42]
36450 var hi1 = s[3] ^ s[13] ^ s[23] ^ s[33] ^ s[43]
36451 var lo2 = s[4] ^ s[14] ^ s[24] ^ s[34] ^ s[44]
36452 var hi2 = s[5] ^ s[15] ^ s[25] ^ s[35] ^ s[45]
36453 var lo3 = s[6] ^ s[16] ^ s[26] ^ s[36] ^ s[46]
36454 var hi3 = s[7] ^ s[17] ^ s[27] ^ s[37] ^ s[47]
36455 var lo4 = s[8] ^ s[18] ^ s[28] ^ s[38] ^ s[48]
36456 var hi4 = s[9] ^ s[19] ^ s[29] ^ s[39] ^ s[49]
36457
36458 var lo = lo4 ^ (lo1 << 1 | hi1 >>> 31)
36459 var hi = hi4 ^ (hi1 << 1 | lo1 >>> 31)
36460 var t1slo0 = s[0] ^ lo
36461 var t1shi0 = s[1] ^ hi
36462 var t1slo5 = s[10] ^ lo
36463 var t1shi5 = s[11] ^ hi
36464 var t1slo10 = s[20] ^ lo
36465 var t1shi10 = s[21] ^ hi
36466 var t1slo15 = s[30] ^ lo
36467 var t1shi15 = s[31] ^ hi
36468 var t1slo20 = s[40] ^ lo
36469 var t1shi20 = s[41] ^ hi
36470 lo = lo0 ^ (lo2 << 1 | hi2 >>> 31)
36471 hi = hi0 ^ (hi2 << 1 | lo2 >>> 31)
36472 var t1slo1 = s[2] ^ lo
36473 var t1shi1 = s[3] ^ hi
36474 var t1slo6 = s[12] ^ lo
36475 var t1shi6 = s[13] ^ hi
36476 var t1slo11 = s[22] ^ lo
36477 var t1shi11 = s[23] ^ hi
36478 var t1slo16 = s[32] ^ lo
36479 var t1shi16 = s[33] ^ hi
36480 var t1slo21 = s[42] ^ lo
36481 var t1shi21 = s[43] ^ hi
36482 lo = lo1 ^ (lo3 << 1 | hi3 >>> 31)
36483 hi = hi1 ^ (hi3 << 1 | lo3 >>> 31)
36484 var t1slo2 = s[4] ^ lo
36485 var t1shi2 = s[5] ^ hi
36486 var t1slo7 = s[14] ^ lo
36487 var t1shi7 = s[15] ^ hi
36488 var t1slo12 = s[24] ^ lo
36489 var t1shi12 = s[25] ^ hi
36490 var t1slo17 = s[34] ^ lo
36491 var t1shi17 = s[35] ^ hi
36492 var t1slo22 = s[44] ^ lo
36493 var t1shi22 = s[45] ^ hi
36494 lo = lo2 ^ (lo4 << 1 | hi4 >>> 31)
36495 hi = hi2 ^ (hi4 << 1 | lo4 >>> 31)
36496 var t1slo3 = s[6] ^ lo
36497 var t1shi3 = s[7] ^ hi
36498 var t1slo8 = s[16] ^ lo
36499 var t1shi8 = s[17] ^ hi
36500 var t1slo13 = s[26] ^ lo
36501 var t1shi13 = s[27] ^ hi
36502 var t1slo18 = s[36] ^ lo
36503 var t1shi18 = s[37] ^ hi
36504 var t1slo23 = s[46] ^ lo
36505 var t1shi23 = s[47] ^ hi
36506 lo = lo3 ^ (lo0 << 1 | hi0 >>> 31)
36507 hi = hi3 ^ (hi0 << 1 | lo0 >>> 31)
36508 var t1slo4 = s[8] ^ lo
36509 var t1shi4 = s[9] ^ hi
36510 var t1slo9 = s[18] ^ lo
36511 var t1shi9 = s[19] ^ hi
36512 var t1slo14 = s[28] ^ lo
36513 var t1shi14 = s[29] ^ hi
36514 var t1slo19 = s[38] ^ lo
36515 var t1shi19 = s[39] ^ hi
36516 var t1slo24 = s[48] ^ lo
36517 var t1shi24 = s[49] ^ hi
36518
36519 // rho & pi
36520 var t2slo0 = t1slo0
36521 var t2shi0 = t1shi0
36522 var t2slo16 = (t1shi5 << 4 | t1slo5 >>> 28)
36523 var t2shi16 = (t1slo5 << 4 | t1shi5 >>> 28)
36524 var t2slo7 = (t1slo10 << 3 | t1shi10 >>> 29)
36525 var t2shi7 = (t1shi10 << 3 | t1slo10 >>> 29)
36526 var t2slo23 = (t1shi15 << 9 | t1slo15 >>> 23)
36527 var t2shi23 = (t1slo15 << 9 | t1shi15 >>> 23)
36528 var t2slo14 = (t1slo20 << 18 | t1shi20 >>> 14)
36529 var t2shi14 = (t1shi20 << 18 | t1slo20 >>> 14)
36530 var t2slo10 = (t1slo1 << 1 | t1shi1 >>> 31)
36531 var t2shi10 = (t1shi1 << 1 | t1slo1 >>> 31)
36532 var t2slo1 = (t1shi6 << 12 | t1slo6 >>> 20)
36533 var t2shi1 = (t1slo6 << 12 | t1shi6 >>> 20)
36534 var t2slo17 = (t1slo11 << 10 | t1shi11 >>> 22)
36535 var t2shi17 = (t1shi11 << 10 | t1slo11 >>> 22)
36536 var t2slo8 = (t1shi16 << 13 | t1slo16 >>> 19)
36537 var t2shi8 = (t1slo16 << 13 | t1shi16 >>> 19)
36538 var t2slo24 = (t1slo21 << 2 | t1shi21 >>> 30)
36539 var t2shi24 = (t1shi21 << 2 | t1slo21 >>> 30)
36540 var t2slo20 = (t1shi2 << 30 | t1slo2 >>> 2)
36541 var t2shi20 = (t1slo2 << 30 | t1shi2 >>> 2)
36542 var t2slo11 = (t1slo7 << 6 | t1shi7 >>> 26)
36543 var t2shi11 = (t1shi7 << 6 | t1slo7 >>> 26)
36544 var t2slo2 = (t1shi12 << 11 | t1slo12 >>> 21)
36545 var t2shi2 = (t1slo12 << 11 | t1shi12 >>> 21)
36546 var t2slo18 = (t1slo17 << 15 | t1shi17 >>> 17)
36547 var t2shi18 = (t1shi17 << 15 | t1slo17 >>> 17)
36548 var t2slo9 = (t1shi22 << 29 | t1slo22 >>> 3)
36549 var t2shi9 = (t1slo22 << 29 | t1shi22 >>> 3)
36550 var t2slo5 = (t1slo3 << 28 | t1shi3 >>> 4)
36551 var t2shi5 = (t1shi3 << 28 | t1slo3 >>> 4)
36552 var t2slo21 = (t1shi8 << 23 | t1slo8 >>> 9)
36553 var t2shi21 = (t1slo8 << 23 | t1shi8 >>> 9)
36554 var t2slo12 = (t1slo13 << 25 | t1shi13 >>> 7)
36555 var t2shi12 = (t1shi13 << 25 | t1slo13 >>> 7)
36556 var t2slo3 = (t1slo18 << 21 | t1shi18 >>> 11)
36557 var t2shi3 = (t1shi18 << 21 | t1slo18 >>> 11)
36558 var t2slo19 = (t1shi23 << 24 | t1slo23 >>> 8)
36559 var t2shi19 = (t1slo23 << 24 | t1shi23 >>> 8)
36560 var t2slo15 = (t1slo4 << 27 | t1shi4 >>> 5)
36561 var t2shi15 = (t1shi4 << 27 | t1slo4 >>> 5)
36562 var t2slo6 = (t1slo9 << 20 | t1shi9 >>> 12)
36563 var t2shi6 = (t1shi9 << 20 | t1slo9 >>> 12)
36564 var t2slo22 = (t1shi14 << 7 | t1slo14 >>> 25)
36565 var t2shi22 = (t1slo14 << 7 | t1shi14 >>> 25)
36566 var t2slo13 = (t1slo19 << 8 | t1shi19 >>> 24)
36567 var t2shi13 = (t1shi19 << 8 | t1slo19 >>> 24)
36568 var t2slo4 = (t1slo24 << 14 | t1shi24 >>> 18)
36569 var t2shi4 = (t1shi24 << 14 | t1slo24 >>> 18)
36570
36571 // chi
36572 s[0] = t2slo0 ^ (~t2slo1 & t2slo2)
36573 s[1] = t2shi0 ^ (~t2shi1 & t2shi2)
36574 s[10] = t2slo5 ^ (~t2slo6 & t2slo7)
36575 s[11] = t2shi5 ^ (~t2shi6 & t2shi7)
36576 s[20] = t2slo10 ^ (~t2slo11 & t2slo12)
36577 s[21] = t2shi10 ^ (~t2shi11 & t2shi12)
36578 s[30] = t2slo15 ^ (~t2slo16 & t2slo17)
36579 s[31] = t2shi15 ^ (~t2shi16 & t2shi17)
36580 s[40] = t2slo20 ^ (~t2slo21 & t2slo22)
36581 s[41] = t2shi20 ^ (~t2shi21 & t2shi22)
36582 s[2] = t2slo1 ^ (~t2slo2 & t2slo3)
36583 s[3] = t2shi1 ^ (~t2shi2 & t2shi3)
36584 s[12] = t2slo6 ^ (~t2slo7 & t2slo8)
36585 s[13] = t2shi6 ^ (~t2shi7 & t2shi8)
36586 s[22] = t2slo11 ^ (~t2slo12 & t2slo13)
36587 s[23] = t2shi11 ^ (~t2shi12 & t2shi13)
36588 s[32] = t2slo16 ^ (~t2slo17 & t2slo18)
36589 s[33] = t2shi16 ^ (~t2shi17 & t2shi18)
36590 s[42] = t2slo21 ^ (~t2slo22 & t2slo23)
36591 s[43] = t2shi21 ^ (~t2shi22 & t2shi23)
36592 s[4] = t2slo2 ^ (~t2slo3 & t2slo4)
36593 s[5] = t2shi2 ^ (~t2shi3 & t2shi4)
36594 s[14] = t2slo7 ^ (~t2slo8 & t2slo9)
36595 s[15] = t2shi7 ^ (~t2shi8 & t2shi9)
36596 s[24] = t2slo12 ^ (~t2slo13 & t2slo14)
36597 s[25] = t2shi12 ^ (~t2shi13 & t2shi14)
36598 s[34] = t2slo17 ^ (~t2slo18 & t2slo19)
36599 s[35] = t2shi17 ^ (~t2shi18 & t2shi19)
36600 s[44] = t2slo22 ^ (~t2slo23 & t2slo24)
36601 s[45] = t2shi22 ^ (~t2shi23 & t2shi24)
36602 s[6] = t2slo3 ^ (~t2slo4 & t2slo0)
36603 s[7] = t2shi3 ^ (~t2shi4 & t2shi0)
36604 s[16] = t2slo8 ^ (~t2slo9 & t2slo5)
36605 s[17] = t2shi8 ^ (~t2shi9 & t2shi5)
36606 s[26] = t2slo13 ^ (~t2slo14 & t2slo10)
36607 s[27] = t2shi13 ^ (~t2shi14 & t2shi10)
36608 s[36] = t2slo18 ^ (~t2slo19 & t2slo15)
36609 s[37] = t2shi18 ^ (~t2shi19 & t2shi15)
36610 s[46] = t2slo23 ^ (~t2slo24 & t2slo20)
36611 s[47] = t2shi23 ^ (~t2shi24 & t2shi20)
36612 s[8] = t2slo4 ^ (~t2slo0 & t2slo1)
36613 s[9] = t2shi4 ^ (~t2shi0 & t2shi1)
36614 s[18] = t2slo9 ^ (~t2slo5 & t2slo6)
36615 s[19] = t2shi9 ^ (~t2shi5 & t2shi6)
36616 s[28] = t2slo14 ^ (~t2slo10 & t2slo11)
36617 s[29] = t2shi14 ^ (~t2shi10 & t2shi11)
36618 s[38] = t2slo19 ^ (~t2slo15 & t2slo16)
36619 s[39] = t2shi19 ^ (~t2shi15 & t2shi16)
36620 s[48] = t2slo24 ^ (~t2slo20 & t2slo21)
36621 s[49] = t2shi24 ^ (~t2shi20 & t2shi21)
36622
36623 // iota
36624 s[0] ^= P1600_ROUND_CONSTANTS[round * 2]
36625 s[1] ^= P1600_ROUND_CONSTANTS[round * 2 + 1]
36626 }
36627}
36628
36629},{}],70:[function(require,module,exports){
36630(function (Buffer){
36631'use strict'
36632var keccakState = require('./keccak-state-unroll')
ebd8d4e8 36633
8b095871
IC
36634function Keccak () {
36635 // much faster than `new Array(50)`
36636 this.state = [
36637 0, 0, 0, 0, 0,
36638 0, 0, 0, 0, 0,
36639 0, 0, 0, 0, 0,
36640 0, 0, 0, 0, 0,
36641 0, 0, 0, 0, 0
36642 ]
ebd8d4e8 36643
8b095871
IC
36644 this.blockSize = null
36645 this.count = 0
36646 this.squeezing = false
36647}
ebd8d4e8 36648
8b095871
IC
36649Keccak.prototype.initialize = function (rate, capacity) {
36650 for (var i = 0; i < 50; ++i) this.state[i] = 0
36651 this.blockSize = rate / 8
36652 this.count = 0
36653 this.squeezing = false
36654}
36655
36656Keccak.prototype.absorb = function (data) {
36657 for (var i = 0; i < data.length; ++i) {
36658 this.state[~~(this.count / 4)] ^= data[i] << (8 * (this.count % 4))
36659 this.count += 1
36660 if (this.count === this.blockSize) {
36661 keccakState.p1600(this.state)
36662 this.count = 0
ebd8d4e8
IC
36663 }
36664 }
8b095871 36665}
ebd8d4e8 36666
8b095871
IC
36667Keccak.prototype.absorbLastFewBits = function (bits) {
36668 this.state[~~(this.count / 4)] ^= bits << (8 * (this.count % 4))
36669 if ((bits & 0x80) !== 0 && this.count === (this.blockSize - 1)) keccakState.p1600(this.state)
36670 this.state[~~((this.blockSize - 1) / 4)] ^= 0x80 << (8 * ((this.blockSize - 1) % 4))
36671 keccakState.p1600(this.state)
36672 this.count = 0
36673 this.squeezing = true
ebd8d4e8
IC
36674}
36675
8b095871
IC
36676Keccak.prototype.squeeze = function (length) {
36677 if (!this.squeezing) this.absorbLastFewBits(0x01)
ebd8d4e8 36678
8b095871
IC
36679 var output = Buffer.allocUnsafe(length)
36680 for (var i = 0; i < length; ++i) {
36681 output[i] = (this.state[~~(this.count / 4)] >>> (8 * (this.count % 4))) & 0xff
36682 this.count += 1
36683 if (this.count === this.blockSize) {
36684 keccakState.p1600(this.state)
36685 this.count = 0
ebd8d4e8 36686 }
8b095871 36687 }
ebd8d4e8 36688
8b095871
IC
36689 return output
36690}
ebd8d4e8 36691
8b095871
IC
36692Keccak.prototype.copy = function (dest) {
36693 for (var i = 0; i < 50; ++i) dest.state[i] = this.state[i]
36694 dest.blockSize = this.blockSize
36695 dest.count = this.count
36696 dest.squeezing = this.squeezing
36697}
ebd8d4e8 36698
8b095871 36699module.exports = Keccak
ebd8d4e8 36700
8b095871
IC
36701}).call(this,require("buffer").Buffer)
36702},{"./keccak-state-unroll":69,"buffer":5}],71:[function(require,module,exports){
36703(function (Buffer){
36704/*
36705CryptoJS v3.1.2
36706code.google.com/p/crypto-js
36707(c) 2009-2013 by Jeff Mott. All rights reserved.
36708code.google.com/p/crypto-js/wiki/License
36709*/
36710/** @preserve
36711(c) 2012 by Cédric Mesnil. All rights reserved.
ebd8d4e8 36712
8b095871 36713Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
ebd8d4e8 36714
8b095871
IC
36715 - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
36716 - 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.
36717
36718THIS 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.
36719*/
36720
36721// constants table
36722var zl = [
36723 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
36724 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
36725 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
36726 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
36727 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
36728]
36729
36730var zr = [
36731 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
36732 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
36733 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
36734 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
36735 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
36736]
36737
36738var sl = [
36739 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
36740 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
36741 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
36742 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
36743 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
36744]
36745
36746var sr = [
36747 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
36748 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
36749 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
36750 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
36751 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
36752]
36753
36754var hl = [0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]
36755var hr = [0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]
36756
36757function bytesToWords (bytes) {
36758 var words = []
36759 for (var i = 0, b = 0; i < bytes.length; i++, b += 8) {
36760 words[b >>> 5] |= bytes[i] << (24 - b % 32)
36761 }
36762 return words
ebd8d4e8
IC
36763}
36764
8b095871
IC
36765function wordsToBytes (words) {
36766 var bytes = []
36767 for (var b = 0; b < words.length * 32; b += 8) {
36768 bytes.push((words[b >>> 5] >>> (24 - b % 32)) & 0xFF)
36769 }
36770 return bytes
ebd8d4e8
IC
36771}
36772
8b095871
IC
36773function processBlock (H, M, offset) {
36774 // swap endian
36775 for (var i = 0; i < 16; i++) {
36776 var offset_i = offset + i
36777 var M_offset_i = M[offset_i]
ebd8d4e8 36778
8b095871
IC
36779 // Swap
36780 M[offset_i] = (
36781 (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |
36782 (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)
36783 )
36784 }
ebd8d4e8 36785
8b095871
IC
36786 // Working variables
36787 var al, bl, cl, dl, el
36788 var ar, br, cr, dr, er
36789
36790 ar = al = H[0]
36791 br = bl = H[1]
36792 cr = cl = H[2]
36793 dr = dl = H[3]
36794 er = el = H[4]
36795
36796 // computation
36797 var t
36798 for (i = 0; i < 80; i += 1) {
36799 t = (al + M[offset + zl[i]]) | 0
36800 if (i < 16) {
36801 t += f1(bl, cl, dl) + hl[0]
36802 } else if (i < 32) {
36803 t += f2(bl, cl, dl) + hl[1]
36804 } else if (i < 48) {
36805 t += f3(bl, cl, dl) + hl[2]
36806 } else if (i < 64) {
36807 t += f4(bl, cl, dl) + hl[3]
36808 } else {// if (i<80) {
36809 t += f5(bl, cl, dl) + hl[4]
36810 }
36811 t = t | 0
36812 t = rotl(t, sl[i])
36813 t = (t + el) | 0
36814 al = el
36815 el = dl
36816 dl = rotl(cl, 10)
36817 cl = bl
36818 bl = t
36819
36820 t = (ar + M[offset + zr[i]]) | 0
36821 if (i < 16) {
36822 t += f5(br, cr, dr) + hr[0]
36823 } else if (i < 32) {
36824 t += f4(br, cr, dr) + hr[1]
36825 } else if (i < 48) {
36826 t += f3(br, cr, dr) + hr[2]
36827 } else if (i < 64) {
36828 t += f2(br, cr, dr) + hr[3]
36829 } else {// if (i<80) {
36830 t += f1(br, cr, dr) + hr[4]
36831 }
36832
36833 t = t | 0
36834 t = rotl(t, sr[i])
36835 t = (t + er) | 0
36836 ar = er
36837 er = dr
36838 dr = rotl(cr, 10)
36839 cr = br
36840 br = t
36841 }
36842
36843 // intermediate hash value
36844 t = (H[1] + cl + dr) | 0
36845 H[1] = (H[2] + dl + er) | 0
36846 H[2] = (H[3] + el + ar) | 0
36847 H[3] = (H[4] + al + br) | 0
36848 H[4] = (H[0] + bl + cr) | 0
36849 H[0] = t
ebd8d4e8
IC
36850}
36851
8b095871
IC
36852function f1 (x, y, z) {
36853 return ((x) ^ (y) ^ (z))
ebd8d4e8
IC
36854}
36855
8b095871
IC
36856function f2 (x, y, z) {
36857 return (((x) & (y)) | ((~x) & (z)))
36858}
ebd8d4e8 36859
8b095871
IC
36860function f3 (x, y, z) {
36861 return (((x) | (~(y))) ^ (z))
ebd8d4e8
IC
36862}
36863
8b095871
IC
36864function f4 (x, y, z) {
36865 return (((x) & (z)) | ((y) & (~(z))))
ebd8d4e8
IC
36866}
36867
8b095871
IC
36868function f5 (x, y, z) {
36869 return ((x) ^ ((y) | (~(z))))
ebd8d4e8
IC
36870}
36871
8b095871
IC
36872function rotl (x, n) {
36873 return (x << n) | (x >>> (32 - n))
36874}
ebd8d4e8 36875
8b095871
IC
36876function ripemd160 (message) {
36877 var H = [0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]
ebd8d4e8 36878
8b095871
IC
36879 if (typeof message === 'string') {
36880 message = new Buffer(message, 'utf8')
36881 }
ebd8d4e8 36882
8b095871 36883 var m = bytesToWords(message)
ebd8d4e8 36884
8b095871
IC
36885 var nBitsLeft = message.length * 8
36886 var nBitsTotal = message.length * 8
ebd8d4e8 36887
8b095871
IC
36888 // Add padding
36889 m[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32)
36890 m[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (
36891 (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |
36892 (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)
36893 )
ebd8d4e8 36894
8b095871
IC
36895 for (var i = 0; i < m.length; i += 16) {
36896 processBlock(H, m, i)
ebd8d4e8
IC
36897 }
36898
8b095871
IC
36899 // swap endian
36900 for (i = 0; i < 5; i++) {
36901 // shortcut
36902 var H_i = H[i]
ebd8d4e8 36903
8b095871
IC
36904 // Swap
36905 H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |
36906 (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00)
ebd8d4e8
IC
36907 }
36908
8b095871
IC
36909 var digestbytes = wordsToBytes(H)
36910 return new Buffer(digestbytes)
ebd8d4e8
IC
36911}
36912
8b095871 36913module.exports = ripemd160
ebd8d4e8 36914
8b095871
IC
36915}).call(this,require("buffer").Buffer)
36916},{"buffer":5}],72:[function(require,module,exports){
36917(function (Buffer){
36918const assert = require('assert')
36919/**
36920 * RLP Encoding based on: https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP
36921 * This function takes in a data, convert it to buffer if not, and a length for recursion
36922 *
36923 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
36924 * @returns {Buffer} - returns buffer of encoded data
36925 **/
36926exports.encode = function (input) {
36927 if (input instanceof Array) {
36928 var output = []
36929 for (var i = 0; i < input.length; i++) {
36930 output.push(exports.encode(input[i]))
36931 }
36932 var buf = Buffer.concat(output)
36933 return Buffer.concat([encodeLength(buf.length, 192), buf])
36934 } else {
36935 input = toBuffer(input)
36936 if (input.length === 1 && input[0] < 128) {
36937 return input
36938 } else {
36939 return Buffer.concat([encodeLength(input.length, 128), input])
36940 }
36941 }
ebd8d4e8
IC
36942}
36943
8b095871
IC
36944function safeParseInt (v, base) {
36945 if (v.slice(0, 2) === '00') {
36946 throw (new Error('invalid RLP: extra zeros'))
36947 }
ebd8d4e8 36948
8b095871 36949 return parseInt(v, base)
ebd8d4e8
IC
36950}
36951
8b095871
IC
36952function encodeLength (len, offset) {
36953 if (len < 56) {
36954 return new Buffer([len + offset])
36955 } else {
36956 var hexLength = intToHex(len)
36957 var lLength = hexLength.length / 2
36958 var firstByte = intToHex(offset + 55 + lLength)
36959 return new Buffer(firstByte + hexLength, 'hex')
36960 }
36961}
ebd8d4e8 36962
8b095871
IC
36963/**
36964 * RLP Decoding based on: {@link https://github.com/ethereum/wiki/wiki/%5BEnglish%5D-RLP|RLP}
36965 * @param {Buffer,String,Integer,Array} data - will be converted to buffer
36966 * @returns {Array} - returns decode Array of Buffers containg the original message
36967 **/
36968exports.decode = function (input, stream) {
36969 if (!input || input.length === 0) {
36970 return new Buffer([])
36971 }
ebd8d4e8 36972
8b095871
IC
36973 input = toBuffer(input)
36974 var decoded = _decode(input)
ab78acc6 36975
8b095871
IC
36976 if (stream) {
36977 return decoded
36978 }
ebd8d4e8 36979
8b095871
IC
36980 assert.equal(decoded.remainder.length, 0, 'invalid remainder')
36981 return decoded.data
ebd8d4e8
IC
36982}
36983
8b095871
IC
36984exports.getLength = function (input) {
36985 if (!input || input.length === 0) {
36986 return new Buffer([])
ab78acc6
IC
36987 }
36988
8b095871
IC
36989 input = toBuffer(input)
36990 var firstByte = input[0]
36991 if (firstByte <= 0x7f) {
36992 return input.length
36993 } else if (firstByte <= 0xb7) {
36994 return firstByte - 0x7f
36995 } else if (firstByte <= 0xbf) {
36996 return firstByte - 0xb6
36997 } else if (firstByte <= 0xf7) {
36998 // a list between 0-55 bytes long
36999 return firstByte - 0xbf
37000 } else {
37001 // a list over 55 bytes long
37002 var llength = firstByte - 0xf6
37003 var length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
37004 return llength + length
37005 }
ebd8d4e8
IC
37006}
37007
8b095871
IC
37008function _decode (input) {
37009 var length, llength, data, innerRemainder, d
37010 var decoded = []
37011 var firstByte = input[0]
ebd8d4e8 37012
8b095871
IC
37013 if (firstByte <= 0x7f) {
37014 // a single byte whose value is in the [0x00, 0x7f] range, that byte is its own RLP encoding.
37015 return {
37016 data: input.slice(0, 1),
37017 remainder: input.slice(1)
37018 }
37019 } else if (firstByte <= 0xb7) {
37020 // string is 0-55 bytes long. A single byte with value 0x80 plus the length of the string followed by the string
37021 // The range of the first byte is [0x80, 0xb7]
37022 length = firstByte - 0x7f
ebd8d4e8 37023
8b095871
IC
37024 // set 0x80 null to 0
37025 if (firstByte === 0x80) {
37026 data = new Buffer([])
37027 } else {
37028 data = input.slice(1, length)
37029 }
ebd8d4e8 37030
8b095871
IC
37031 if (length === 2 && data[0] < 0x80) {
37032 throw new Error('invalid rlp encoding: byte must be less 0x80')
37033 }
ebd8d4e8 37034
8b095871
IC
37035 return {
37036 data: data,
37037 remainder: input.slice(length)
37038 }
37039 } else if (firstByte <= 0xbf) {
37040 llength = firstByte - 0xb6
37041 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
37042 data = input.slice(llength, length + llength)
37043 if (data.length < length) {
37044 throw (new Error('invalid RLP'))
37045 }
ebd8d4e8 37046
8b095871
IC
37047 return {
37048 data: data,
37049 remainder: input.slice(length + llength)
37050 }
37051 } else if (firstByte <= 0xf7) {
37052 // a list between 0-55 bytes long
37053 length = firstByte - 0xbf
37054 innerRemainder = input.slice(1, length)
37055 while (innerRemainder.length) {
37056 d = _decode(innerRemainder)
37057 decoded.push(d.data)
37058 innerRemainder = d.remainder
37059 }
ebd8d4e8 37060
8b095871
IC
37061 return {
37062 data: decoded,
37063 remainder: input.slice(length)
37064 }
37065 } else {
37066 // a list over 55 bytes long
37067 llength = firstByte - 0xf6
37068 length = safeParseInt(input.slice(1, llength).toString('hex'), 16)
37069 var totalLength = llength + length
37070 if (totalLength > input.length) {
37071 throw new Error('invalid rlp: total length is larger than the data')
37072 }
ab78acc6 37073
8b095871
IC
37074 innerRemainder = input.slice(llength, totalLength)
37075 if (innerRemainder.length === 0) {
37076 throw new Error('invalid rlp, List has a invalid length')
37077 }
ab78acc6 37078
8b095871
IC
37079 while (innerRemainder.length) {
37080 d = _decode(innerRemainder)
37081 decoded.push(d.data)
37082 innerRemainder = d.remainder
37083 }
37084 return {
37085 data: decoded,
37086 remainder: input.slice(totalLength)
37087 }
ab78acc6 37088 }
8b095871 37089}
ab78acc6 37090
8b095871
IC
37091function isHexPrefixed (str) {
37092 return str.slice(0, 2) === '0x'
ab78acc6
IC
37093}
37094
8b095871
IC
37095// Removes 0x from a given String
37096function stripHexPrefix (str) {
37097 if (typeof str !== 'string') {
37098 return str
37099 }
37100 return isHexPrefixed(str) ? str.slice(2) : str
37101}
ab78acc6 37102
8b095871
IC
37103function intToHex (i) {
37104 var hex = i.toString(16)
37105 if (hex.length % 2) {
37106 hex = '0' + hex
ab78acc6
IC
37107 }
37108
8b095871 37109 return hex
ebd8d4e8
IC
37110}
37111
8b095871
IC
37112function padToEven (a) {
37113 if (a.length % 2) a = '0' + a
37114 return a
ebd8d4e8
IC
37115}
37116
8b095871
IC
37117function intToBuffer (i) {
37118 var hex = intToHex(i)
37119 return new Buffer(hex, 'hex')
ebd8d4e8
IC
37120}
37121
8b095871
IC
37122function toBuffer (v) {
37123 if (!Buffer.isBuffer(v)) {
37124 if (typeof v === 'string') {
37125 if (isHexPrefixed(v)) {
37126 v = new Buffer(padToEven(stripHexPrefix(v)), 'hex')
37127 } else {
37128 v = new Buffer(v)
37129 }
37130 } else if (typeof v === 'number') {
37131 if (!v) {
37132 v = new Buffer([])
37133 } else {
37134 v = intToBuffer(v)
37135 }
37136 } else if (v === null || v === undefined) {
37137 v = new Buffer([])
37138 } else if (v.toArray) {
37139 // converts a BN to a Buffer
37140 v = new Buffer(v.toArray())
37141 } else {
37142 throw new Error('invalid type')
37143 }
37144 }
37145 return v
ebd8d4e8
IC
37146}
37147
8b095871
IC
37148}).call(this,require("buffer").Buffer)
37149},{"assert":1,"buffer":5}],73:[function(require,module,exports){
37150'use strict'
37151module.exports = require('./lib')(require('./lib/elliptic'))
ebd8d4e8 37152
8b095871
IC
37153},{"./lib":77,"./lib/elliptic":76}],74:[function(require,module,exports){
37154(function (Buffer){
37155'use strict'
37156var toString = Object.prototype.toString
ebd8d4e8 37157
8b095871
IC
37158// TypeError
37159exports.isArray = function (value, message) {
37160 if (!Array.isArray(value)) throw TypeError(message)
ebd8d4e8
IC
37161}
37162
8b095871
IC
37163exports.isBoolean = function (value, message) {
37164 if (toString.call(value) !== '[object Boolean]') throw TypeError(message)
37165}
ebd8d4e8 37166
8b095871
IC
37167exports.isBuffer = function (value, message) {
37168 if (!Buffer.isBuffer(value)) throw TypeError(message)
ebd8d4e8
IC
37169}
37170
8b095871
IC
37171exports.isFunction = function (value, message) {
37172 if (toString.call(value) !== '[object Function]') throw TypeError(message)
ebd8d4e8
IC
37173}
37174
8b095871
IC
37175exports.isNumber = function (value, message) {
37176 if (toString.call(value) !== '[object Number]') throw TypeError(message)
37177}
ab78acc6 37178
8b095871
IC
37179exports.isObject = function (value, message) {
37180 if (toString.call(value) !== '[object Object]') throw TypeError(message)
37181}
ebd8d4e8 37182
8b095871
IC
37183// RangeError
37184exports.isBufferLength = function (buffer, length, message) {
37185 if (buffer.length !== length) throw RangeError(message)
37186}
ebd8d4e8 37187
8b095871
IC
37188exports.isBufferLength2 = function (buffer, length1, length2, message) {
37189 if (buffer.length !== length1 && buffer.length !== length2) throw RangeError(message)
ab78acc6
IC
37190}
37191
8b095871
IC
37192exports.isLengthGTZero = function (value, message) {
37193 if (value.length === 0) throw RangeError(message)
ebd8d4e8
IC
37194}
37195
8b095871
IC
37196exports.isNumberInInterval = function (number, x, y, message) {
37197 if (number <= x || number >= y) throw RangeError(message)
ebd8d4e8
IC
37198}
37199
8b095871
IC
37200}).call(this,{"isBuffer":require("../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js")})
37201},{"../../../../../.nvm/versions/node/v7.5.0/lib/node_modules/browserify/node_modules/is-buffer/index.js":10}],75:[function(require,module,exports){
ebd8d4e8 37202(function (Buffer){
8b095871
IC
37203'use strict'
37204var bip66 = require('bip66')
37205
37206var EC_PRIVKEY_EXPORT_DER_COMPRESSED = new Buffer([
37207 // begin
37208 0x30, 0x81, 0xd3, 0x02, 0x01, 0x01, 0x04, 0x20,
37209 // private key
37210 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37211 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37212 // middle
37213 0xa0, 0x81, 0x85, 0x30, 0x81, 0x82, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
37214 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37215 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37216 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
37217 0x21, 0x02, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
37218 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
37219 0x17, 0x98, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37220 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
37221 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x24, 0x03, 0x22, 0x00,
37222 // public key
37223 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37224 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37225 0x00
37226])
37227
37228var EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED = new Buffer([
37229 // begin
37230 0x30, 0x82, 0x01, 0x13, 0x02, 0x01, 0x01, 0x04, 0x20,
37231 // private key
37232 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37233 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37234 // middle
37235 0xa0, 0x81, 0xa5, 0x30, 0x81, 0xa2, 0x02, 0x01, 0x01, 0x30, 0x2c, 0x06, 0x07, 0x2a, 0x86, 0x48,
37236 0xcE, 0x3d, 0x01, 0x01, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37237 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37238 0xff, 0xff, 0xfE, 0xff, 0xff, 0xfc, 0x2f, 0x30, 0x06, 0x04, 0x01, 0x00, 0x04, 0x01, 0x07, 0x04,
37239 0x41, 0x04, 0x79, 0xbE, 0x66, 0x7E, 0xf9, 0xdc, 0xbb, 0xac, 0x55, 0xa0, 0x62, 0x95, 0xcE, 0x87,
37240 0x0b, 0x07, 0x02, 0x9b, 0xfc, 0xdb, 0x2d, 0xcE, 0x28, 0xd9, 0x59, 0xf2, 0x81, 0x5b, 0x16, 0xf8,
37241 0x17, 0x98, 0x48, 0x3a, 0xda, 0x77, 0x26, 0xa3, 0xc4, 0x65, 0x5d, 0xa4, 0xfb, 0xfc, 0x0E, 0x11,
37242 0x08, 0xa8, 0xfd, 0x17, 0xb4, 0x48, 0xa6, 0x85, 0x54, 0x19, 0x9c, 0x47, 0xd0, 0x8f, 0xfb, 0x10,
37243 0xd4, 0xb8, 0x02, 0x21, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
37244 0xff, 0xff, 0xff, 0xff, 0xfE, 0xba, 0xaE, 0xdc, 0xE6, 0xaf, 0x48, 0xa0, 0x3b, 0xbf, 0xd2, 0x5E,
37245 0x8c, 0xd0, 0x36, 0x41, 0x41, 0x02, 0x01, 0x01, 0xa1, 0x44, 0x03, 0x42, 0x00,
37246 // public key
37247 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37249 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37251 0x00
37252])
37253
37254var ZERO_BUFFER_32 = new Buffer([
37255 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
37256 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
37257])
37258
37259exports.privateKeyExport = function (privateKey, publicKey, compressed) {
37260 var result = new Buffer(compressed ? EC_PRIVKEY_EXPORT_DER_COMPRESSED : EC_PRIVKEY_EXPORT_DER_UNCOMPRESSED)
37261 privateKey.copy(result, compressed ? 8 : 9)
37262 publicKey.copy(result, compressed ? 181 : 214)
37263 return result
37264}
37265
37266exports.privateKeyImport = function (privateKey) {
37267 var length = privateKey.length
37268
37269 // sequence header
37270 var index = 0
37271 if (length < index + 1 || privateKey[index] !== 0x30) return
37272 index += 1
37273
37274 // sequence length constructor
37275 if (length < index + 1 || !(privateKey[index] & 0x80)) return
37276
37277 var lenb = privateKey[index] & 0x7f
37278 index += 1
37279 if (lenb < 1 || lenb > 2) return
37280 if (length < index + lenb) return
37281
37282 // sequence length
37283 var len = privateKey[index + lenb - 1] | (lenb > 1 ? privateKey[index + lenb - 2] << 8 : 0)
37284 index += lenb
37285 if (length < index + len) return
37286
37287 // sequence element 0: version number (=1)
37288 if (length < index + 3 ||
37289 privateKey[index] !== 0x02 ||
37290 privateKey[index + 1] !== 0x01 ||
37291 privateKey[index + 2] !== 0x01) {
37292 return
37293 }
37294 index += 3
ab78acc6 37295
8b095871
IC
37296 // sequence element 1: octet string, up to 32 bytes
37297 if (length < index + 2 ||
37298 privateKey[index] !== 0x04 ||
37299 privateKey[index + 1] > 0x20 ||
37300 length < index + 2 + privateKey[index + 1]) {
37301 return
37302 }
ab78acc6 37303
8b095871 37304 return privateKey.slice(index + 2, index + 2 + privateKey[index + 1])
ab78acc6 37305}
ebd8d4e8 37306
8b095871
IC
37307exports.signatureExport = function (sigObj) {
37308 var r = Buffer.concat([new Buffer([0]), sigObj.r])
37309 for (var lenR = 33, posR = 0; lenR > 1 && r[posR] === 0x00 && !(r[posR + 1] & 0x80); --lenR, ++posR);
ebd8d4e8 37310
8b095871
IC
37311 var s = Buffer.concat([new Buffer([0]), sigObj.s])
37312 for (var lenS = 33, posS = 0; lenS > 1 && s[posS] === 0x00 && !(s[posS + 1] & 0x80); --lenS, ++posS);
ab78acc6 37313
8b095871
IC
37314 return bip66.encode(r.slice(posR), s.slice(posS))
37315}
ab78acc6 37316
8b095871
IC
37317exports.signatureImport = function (sig) {
37318 var r = new Buffer(ZERO_BUFFER_32)
37319 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 37320
8b095871
IC
37321 try {
37322 var sigObj = bip66.decode(sig)
37323 if (sigObj.r.length === 33 && sigObj.r[0] === 0x00) sigObj.r = sigObj.r.slice(1)
37324 if (sigObj.r.length > 32) throw new Error('R length is too long')
37325 if (sigObj.s.length === 33 && sigObj.s[0] === 0x00) sigObj.s = sigObj.s.slice(1)
37326 if (sigObj.s.length > 32) throw new Error('S length is too long')
37327 } catch (err) {
37328 return
ab78acc6
IC
37329 }
37330
8b095871
IC
37331 sigObj.r.copy(r, 32 - sigObj.r.length)
37332 sigObj.s.copy(s, 32 - sigObj.s.length)
ab78acc6 37333
8b095871
IC
37334 return { r: r, s: s }
37335}
ab78acc6 37336
8b095871
IC
37337exports.signatureImportLax = function (sig) {
37338 var r = new Buffer(ZERO_BUFFER_32)
37339 var s = new Buffer(ZERO_BUFFER_32)
ab78acc6 37340
8b095871
IC
37341 var length = sig.length
37342 var index = 0
ab78acc6 37343
8b095871
IC
37344 // sequence tag byte
37345 if (sig[index++] !== 0x30) return
37346
37347 // sequence length byte
37348 var lenbyte = sig[index++]
37349 if (lenbyte & 0x80) {
37350 index += lenbyte - 0x80
37351 if (index > length) return
ab78acc6
IC
37352 }
37353
8b095871
IC
37354 // sequence tag byte for r
37355 if (sig[index++] !== 0x02) return
37356
37357 // length for r
37358 var rlen = sig[index++]
37359 if (rlen & 0x80) {
37360 lenbyte = rlen - 0x80
37361 if (index + lenbyte > length) return
37362 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
37363 for (rlen = 0; lenbyte > 0; index += 1, lenbyte -= 1) rlen = (rlen << 8) + sig[index]
ab78acc6 37364 }
8b095871
IC
37365 if (rlen > length - index) return
37366 var rindex = index
37367 index += rlen
ab78acc6 37368
8b095871
IC
37369 // sequence tag byte for s
37370 if (sig[index++] !== 0x02) return
ab78acc6 37371
8b095871
IC
37372 // length for s
37373 var slen = sig[index++]
37374 if (slen & 0x80) {
37375 lenbyte = slen - 0x80
37376 if (index + lenbyte > length) return
37377 for (; lenbyte > 0 && sig[index] === 0x00; index += 1, lenbyte -= 1);
37378 for (slen = 0; lenbyte > 0; index += 1, lenbyte -= 1) slen = (slen << 8) + sig[index]
ab78acc6 37379 }
8b095871
IC
37380 if (slen > length - index) return
37381 var sindex = index
37382 index += slen
ab78acc6 37383
8b095871
IC
37384 // ignore leading zeros in r
37385 for (; rlen > 0 && sig[rindex] === 0x00; rlen -= 1, rindex += 1);
37386 // copy r value
37387 if (rlen > 32) return
37388 var rvalue = sig.slice(rindex, rindex + rlen)
37389 rvalue.copy(r, 32 - rvalue.length)
ab78acc6 37390
8b095871
IC
37391 // ignore leading zeros in s
37392 for (; slen > 0 && sig[sindex] === 0x00; slen -= 1, sindex += 1);
37393 // copy s value
37394 if (slen > 32) return
37395 var svalue = sig.slice(sindex, sindex + slen)
37396 svalue.copy(s, 32 - svalue.length)
37397
37398 return { r: r, s: s }
ab78acc6
IC
37399}
37400
8b095871
IC
37401}).call(this,require("buffer").Buffer)
37402},{"bip66":32,"buffer":5}],76:[function(require,module,exports){
37403(function (Buffer){
37404'use strict'
37405var createHash = require('create-hash')
37406var BN = require('bn.js')
37407var EC = require('elliptic').ec
37408
37409var messages = require('../messages.json')
37410
37411var ec = new EC('secp256k1')
37412var ecparams = ec.curve
37413
37414function loadCompressedPublicKey (first, xBuffer) {
37415 var x = new BN(xBuffer)
37416
37417 // overflow
37418 if (x.cmp(ecparams.p) >= 0) return null
37419 x = x.toRed(ecparams.red)
37420
37421 // compute corresponding Y
37422 var y = x.redSqr().redIMul(x).redIAdd(ecparams.b).redSqrt()
37423 if ((first === 0x03) !== y.isOdd()) y = y.redNeg()
37424
37425 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
37426}
37427
8b095871
IC
37428function loadUncompressedPublicKey (first, xBuffer, yBuffer) {
37429 var x = new BN(xBuffer)
37430 var y = new BN(yBuffer)
ebd8d4e8 37431
8b095871
IC
37432 // overflow
37433 if (x.cmp(ecparams.p) >= 0 || y.cmp(ecparams.p) >= 0) return null
ebd8d4e8 37434
8b095871
IC
37435 x = x.toRed(ecparams.red)
37436 y = y.toRed(ecparams.red)
ebd8d4e8 37437
8b095871
IC
37438 // is odd flag
37439 if ((first === 0x06 || first === 0x07) && y.isOdd() !== (first === 0x07)) return null
ab78acc6 37440
8b095871
IC
37441 // x*x*x + b = y*y
37442 var x3 = x.redSqr().redIMul(x)
37443 if (!y.redSqr().redISub(x3.redIAdd(ecparams.b)).isZero()) return null
ebd8d4e8 37444
8b095871 37445 return ec.keyPair({ pub: { x: x, y: y } })
ebd8d4e8
IC
37446}
37447
8b095871
IC
37448function loadPublicKey (publicKey) {
37449 var first = publicKey[0]
37450 switch (first) {
37451 case 0x02:
37452 case 0x03:
37453 if (publicKey.length !== 33) return null
37454 return loadCompressedPublicKey(first, publicKey.slice(1, 33))
37455 case 0x04:
37456 case 0x06:
37457 case 0x07:
37458 if (publicKey.length !== 65) return null
37459 return loadUncompressedPublicKey(first, publicKey.slice(1, 33), publicKey.slice(33, 65))
37460 default:
37461 return null
ebd8d4e8 37462 }
8b095871 37463}
ebd8d4e8 37464
8b095871
IC
37465exports.privateKeyVerify = function (privateKey) {
37466 var bn = new BN(privateKey)
37467 return bn.cmp(ecparams.n) < 0 && !bn.isZero()
37468}
ebd8d4e8 37469
8b095871
IC
37470exports.privateKeyExport = function (privateKey, compressed) {
37471 var d = new BN(privateKey)
37472 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PRIVATE_KEY_EXPORT_DER_FAIL)
ab78acc6 37473
8b095871 37474 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
ebd8d4e8
IC
37475}
37476
8b095871
IC
37477exports.privateKeyTweakAdd = function (privateKey, tweak) {
37478 var bn = new BN(tweak)
37479 if (bn.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 37480
8b095871
IC
37481 bn.iadd(new BN(privateKey))
37482 if (bn.cmp(ecparams.n) >= 0) bn.isub(ecparams.n)
37483 if (bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_ADD_FAIL)
ab78acc6 37484
8b095871
IC
37485 return bn.toArrayLike(Buffer, 'be', 32)
37486}
37487
37488exports.privateKeyTweakMul = function (privateKey, tweak) {
37489 var bn = new BN(tweak)
37490 if (bn.cmp(ecparams.n) >= 0 || bn.isZero()) throw new Error(messages.EC_PRIVATE_KEY_TWEAK_MUL_FAIL)
37491
37492 bn.imul(new BN(privateKey))
37493 if (bn.cmp(ecparams.n)) bn = bn.umod(ecparams.n)
37494
37495 return bn.toArrayLike(Buffer, 'be', 32)
37496}
37497
37498exports.publicKeyCreate = function (privateKey, compressed) {
37499 var d = new BN(privateKey)
37500 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.EC_PUBLIC_KEY_CREATE_FAIL)
37501
37502 return new Buffer(ec.keyFromPrivate(privateKey).getPublic(compressed, true))
37503}
37504
37505exports.publicKeyConvert = function (publicKey, compressed) {
37506 var pair = loadPublicKey(publicKey)
37507 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 37508
8b095871 37509 return new Buffer(pair.getPublic(compressed, true))
ab78acc6
IC
37510}
37511
8b095871
IC
37512exports.publicKeyVerify = function (publicKey) {
37513 return loadPublicKey(publicKey) !== null
37514}
ab78acc6 37515
8b095871
IC
37516exports.publicKeyTweakAdd = function (publicKey, tweak, compressed) {
37517 var pair = loadPublicKey(publicKey)
37518 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 37519
8b095871
IC
37520 tweak = new BN(tweak)
37521 if (tweak.cmp(ecparams.n) >= 0) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_ADD_FAIL)
ab78acc6 37522
8b095871
IC
37523 return new Buffer(ecparams.g.mul(tweak).add(pair.pub).encode(true, compressed))
37524}
ab78acc6 37525
8b095871
IC
37526exports.publicKeyTweakMul = function (publicKey, tweak, compressed) {
37527 var pair = loadPublicKey(publicKey)
37528 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 37529
8b095871
IC
37530 tweak = new BN(tweak)
37531 if (tweak.cmp(ecparams.n) >= 0 || tweak.isZero()) throw new Error(messages.EC_PUBLIC_KEY_TWEAK_MUL_FAIL)
ab78acc6 37532
8b095871
IC
37533 return new Buffer(pair.pub.mul(tweak).encode(true, compressed))
37534}
ab78acc6 37535
8b095871
IC
37536exports.publicKeyCombine = function (publicKeys, compressed) {
37537 var pairs = new Array(publicKeys.length)
37538 for (var i = 0; i < publicKeys.length; ++i) {
37539 pairs[i] = loadPublicKey(publicKeys[i])
37540 if (pairs[i] === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6
IC
37541 }
37542
8b095871
IC
37543 var point = pairs[0].pub
37544 for (var j = 1; j < pairs.length; ++j) point = point.add(pairs[j].pub)
37545 if (point.isInfinity()) throw new Error(messages.EC_PUBLIC_KEY_COMBINE_FAIL)
ab78acc6 37546
8b095871
IC
37547 return new Buffer(point.encode(true, compressed))
37548}
ab78acc6 37549
8b095871
IC
37550exports.signatureNormalize = function (signature) {
37551 var r = new BN(signature.slice(0, 32))
37552 var s = new BN(signature.slice(32, 64))
37553 if (r.cmp(ecparams.n) >= 0 || s.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37554
37555 var result = new Buffer(signature)
37556 if (s.cmp(ec.nh) === 1) ecparams.n.sub(s).toArrayLike(Buffer, 'be', 32).copy(result, 32)
37557
37558 return result
ab78acc6
IC
37559}
37560
8b095871
IC
37561exports.signatureExport = function (signature) {
37562 var r = signature.slice(0, 32)
37563 var s = signature.slice(32, 64)
37564 if (new BN(r).cmp(ecparams.n) >= 0 || new BN(s).cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37565
37566 return { r: r, s: s }
ab78acc6
IC
37567}
37568
8b095871
IC
37569exports.signatureImport = function (sigObj) {
37570 var r = new BN(sigObj.r)
37571 if (r.cmp(ecparams.n) >= 0) r = new BN(0)
37572
37573 var s = new BN(sigObj.s)
37574 if (s.cmp(ecparams.n) >= 0) s = new BN(0)
37575
37576 return Buffer.concat([
37577 r.toArrayLike(Buffer, 'be', 32),
37578 s.toArrayLike(Buffer, 'be', 32)
37579 ])
ab78acc6
IC
37580}
37581
8b095871
IC
37582exports.sign = function (message, privateKey, noncefn, data) {
37583 if (typeof noncefn === 'function') {
37584 var getNonce = noncefn
37585 noncefn = function (counter) {
37586 var nonce = getNonce(message, privateKey, null, data, counter)
37587 if (!Buffer.isBuffer(nonce) || nonce.length !== 32) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 37588
8b095871
IC
37589 return new BN(nonce)
37590 }
ab78acc6 37591 }
ebd8d4e8 37592
8b095871
IC
37593 var d = new BN(privateKey)
37594 if (d.cmp(ecparams.n) >= 0 || d.isZero()) throw new Error(messages.ECDSA_SIGN_FAIL)
ebd8d4e8 37595
8b095871
IC
37596 var result = ec.sign(message, privateKey, { canonical: true, k: noncefn, pers: data })
37597 return {
37598 signature: Buffer.concat([
37599 result.r.toArrayLike(Buffer, 'be', 32),
37600 result.s.toArrayLike(Buffer, 'be', 32)
37601 ]),
37602 recovery: result.recoveryParam
ebd8d4e8 37603 }
8b095871 37604}
ab78acc6 37605
8b095871
IC
37606exports.verify = function (message, signature, publicKey) {
37607 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ab78acc6 37608
8b095871
IC
37609 var sigr = new BN(sigObj.r)
37610 var sigs = new BN(sigObj.s)
37611 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
37612 if (sigs.cmp(ec.nh) === 1 || sigr.isZero() || sigs.isZero()) return false
ab78acc6 37613
8b095871
IC
37614 var pair = loadPublicKey(publicKey)
37615 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ebd8d4e8 37616
8b095871
IC
37617 return ec.verify(message, sigObj, {x: pair.pub.x, y: pair.pub.y})
37618}
ebd8d4e8 37619
8b095871
IC
37620exports.recover = function (message, signature, recovery, compressed) {
37621 var sigObj = {r: signature.slice(0, 32), s: signature.slice(32, 64)}
ebd8d4e8 37622
8b095871
IC
37623 var sigr = new BN(sigObj.r)
37624 var sigs = new BN(sigObj.s)
37625 if (sigr.cmp(ecparams.n) >= 0 || sigs.cmp(ecparams.n) >= 0) throw new Error(messages.ECDSA_SIGNATURE_PARSE_FAIL)
ebd8d4e8 37626
8b095871
IC
37627 try {
37628 if (sigr.isZero() || sigs.isZero()) throw new Error()
ebd8d4e8 37629
8b095871
IC
37630 var point = ec.recoverPubKey(message, sigObj, recovery)
37631 return new Buffer(point.encode(true, compressed))
37632 } catch (err) {
37633 throw new Error(messages.ECDSA_RECOVER_FAIL)
37634 }
ebd8d4e8
IC
37635}
37636
8b095871
IC
37637exports.ecdh = function (publicKey, privateKey) {
37638 var shared = exports.ecdhUnsafe(publicKey, privateKey, true)
37639 return createHash('sha256').update(shared).digest()
ebd8d4e8
IC
37640}
37641
8b095871
IC
37642exports.ecdhUnsafe = function (publicKey, privateKey, compressed) {
37643 var pair = loadPublicKey(publicKey)
37644 if (pair === null) throw new Error(messages.EC_PUBLIC_KEY_PARSE_FAIL)
ab78acc6 37645
8b095871
IC
37646 var scalar = new BN(privateKey)
37647 if (scalar.cmp(ecparams.n) >= 0 || scalar.isZero()) throw new Error(messages.ECDH_FAIL)
37648
37649 return new Buffer(pair.pub.mul(scalar).encode(true, compressed))
ab78acc6
IC
37650}
37651
8b095871
IC
37652}).call(this,require("buffer").Buffer)
37653},{"../messages.json":78,"bn.js":33,"buffer":5,"create-hash":36,"elliptic":39}],77:[function(require,module,exports){
37654'use strict'
37655var assert = require('./assert')
37656var der = require('./der')
37657var messages = require('./messages.json')
ab78acc6 37658
8b095871
IC
37659function initCompressedValue (value, defaultValue) {
37660 if (value === undefined) return defaultValue
ab78acc6 37661
8b095871
IC
37662 assert.isBoolean(value, messages.COMPRESSED_TYPE_INVALID)
37663 return value
ab78acc6
IC
37664}
37665
8b095871
IC
37666module.exports = function (secp256k1) {
37667 return {
37668 privateKeyVerify: function (privateKey) {
37669 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37670 return privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)
37671 },
ab78acc6 37672
8b095871
IC
37673 privateKeyExport: function (privateKey, compressed) {
37674 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37675 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37676
8b095871
IC
37677 compressed = initCompressedValue(compressed, true)
37678 var publicKey = secp256k1.privateKeyExport(privateKey, compressed)
ab78acc6 37679
8b095871
IC
37680 return der.privateKeyExport(privateKey, publicKey, compressed)
37681 },
ab78acc6 37682
8b095871
IC
37683 privateKeyImport: function (privateKey) {
37684 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
ab78acc6 37685
8b095871
IC
37686 privateKey = der.privateKeyImport(privateKey)
37687 if (privateKey && privateKey.length === 32 && secp256k1.privateKeyVerify(privateKey)) return privateKey
ab78acc6 37688
8b095871
IC
37689 throw new Error(messages.EC_PRIVATE_KEY_IMPORT_DER_FAIL)
37690 },
ab78acc6 37691
8b095871
IC
37692 privateKeyTweakAdd: function (privateKey, tweak) {
37693 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37694 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37695
8b095871
IC
37696 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37697 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 37698
8b095871
IC
37699 return secp256k1.privateKeyTweakAdd(privateKey, tweak)
37700 },
ab78acc6 37701
8b095871
IC
37702 privateKeyTweakMul: function (privateKey, tweak) {
37703 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37704 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37705
8b095871
IC
37706 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37707 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
ab78acc6 37708
8b095871
IC
37709 return secp256k1.privateKeyTweakMul(privateKey, tweak)
37710 },
ab78acc6 37711
8b095871
IC
37712 publicKeyCreate: function (privateKey, compressed) {
37713 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37714 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37715
8b095871 37716 compressed = initCompressedValue(compressed, true)
ab78acc6 37717
8b095871
IC
37718 return secp256k1.publicKeyCreate(privateKey, compressed)
37719 },
ab78acc6 37720
8b095871
IC
37721 publicKeyConvert: function (publicKey, compressed) {
37722 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37723 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 37724
8b095871
IC
37725 compressed = initCompressedValue(compressed, true)
37726
37727 return secp256k1.publicKeyConvert(publicKey, compressed)
37728 },
37729
37730 publicKeyVerify: function (publicKey) {
37731 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37732 return secp256k1.publicKeyVerify(publicKey)
37733 },
37734
37735 publicKeyTweakAdd: function (publicKey, tweak, compressed) {
37736 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37737 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37738
37739 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37740 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
37741
37742 compressed = initCompressedValue(compressed, true)
37743
37744 return secp256k1.publicKeyTweakAdd(publicKey, tweak, compressed)
37745 },
37746
37747 publicKeyTweakMul: function (publicKey, tweak, compressed) {
37748 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37749 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37750
37751 assert.isBuffer(tweak, messages.TWEAK_TYPE_INVALID)
37752 assert.isBufferLength(tweak, 32, messages.TWEAK_LENGTH_INVALID)
37753
37754 compressed = initCompressedValue(compressed, true)
37755
37756 return secp256k1.publicKeyTweakMul(publicKey, tweak, compressed)
37757 },
37758
37759 publicKeyCombine: function (publicKeys, compressed) {
37760 assert.isArray(publicKeys, messages.EC_PUBLIC_KEYS_TYPE_INVALID)
37761 assert.isLengthGTZero(publicKeys, messages.EC_PUBLIC_KEYS_LENGTH_INVALID)
37762 for (var i = 0; i < publicKeys.length; ++i) {
37763 assert.isBuffer(publicKeys[i], messages.EC_PUBLIC_KEY_TYPE_INVALID)
37764 assert.isBufferLength2(publicKeys[i], 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6
IC
37765 }
37766
8b095871 37767 compressed = initCompressedValue(compressed, true)
ab78acc6 37768
8b095871
IC
37769 return secp256k1.publicKeyCombine(publicKeys, compressed)
37770 },
ab78acc6 37771
8b095871
IC
37772 signatureNormalize: function (signature) {
37773 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37774 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 37775
8b095871
IC
37776 return secp256k1.signatureNormalize(signature)
37777 },
ab78acc6 37778
8b095871
IC
37779 signatureExport: function (signature) {
37780 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37781 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37782
37783 var sigObj = secp256k1.signatureExport(signature)
37784 return der.signatureExport(sigObj)
37785 },
37786
37787 signatureImport: function (sig) {
37788 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37789 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37790
37791 var sigObj = der.signatureImport(sig)
37792 if (sigObj) return secp256k1.signatureImport(sigObj)
37793
37794 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
37795 },
37796
37797 signatureImportLax: function (sig) {
37798 assert.isBuffer(sig, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37799 assert.isLengthGTZero(sig, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
37800
37801 var sigObj = der.signatureImportLax(sig)
37802 if (sigObj) return secp256k1.signatureImport(sigObj)
37803
37804 throw new Error(messages.ECDSA_SIGNATURE_PARSE_DER_FAIL)
37805 },
37806
37807 sign: function (message, privateKey, options) {
37808 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37809 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
37810
37811 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37812 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
37813
37814 var data = null
37815 var noncefn = null
37816 if (options !== undefined) {
37817 assert.isObject(options, messages.OPTIONS_TYPE_INVALID)
37818
37819 if (options.data !== undefined) {
37820 assert.isBuffer(options.data, messages.OPTIONS_DATA_TYPE_INVALID)
37821 assert.isBufferLength(options.data, 32, messages.OPTIONS_DATA_LENGTH_INVALID)
37822 data = options.data
37823 }
37824
37825 if (options.noncefn !== undefined) {
37826 assert.isFunction(options.noncefn, messages.OPTIONS_NONCEFN_TYPE_INVALID)
37827 noncefn = options.noncefn
37828 }
ab78acc6
IC
37829 }
37830
8b095871
IC
37831 return secp256k1.sign(message, privateKey, noncefn, data)
37832 },
ab78acc6 37833
8b095871
IC
37834 verify: function (message, signature, publicKey) {
37835 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37836 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 37837
8b095871
IC
37838 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37839 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 37840
8b095871
IC
37841 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37842 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
37843
37844 return secp256k1.verify(message, signature, publicKey)
37845 },
ab78acc6 37846
8b095871
IC
37847 recover: function (message, signature, recovery, compressed) {
37848 assert.isBuffer(message, messages.MSG32_TYPE_INVALID)
37849 assert.isBufferLength(message, 32, messages.MSG32_LENGTH_INVALID)
ab78acc6 37850
8b095871
IC
37851 assert.isBuffer(signature, messages.ECDSA_SIGNATURE_TYPE_INVALID)
37852 assert.isBufferLength(signature, 64, messages.ECDSA_SIGNATURE_LENGTH_INVALID)
ab78acc6 37853
8b095871
IC
37854 assert.isNumber(recovery, messages.RECOVERY_ID_TYPE_INVALID)
37855 assert.isNumberInInterval(recovery, -1, 4, messages.RECOVERY_ID_VALUE_INVALID)
ab78acc6 37856
8b095871 37857 compressed = initCompressedValue(compressed, true)
ab78acc6 37858
8b095871
IC
37859 return secp256k1.recover(message, signature, recovery, compressed)
37860 },
ab78acc6 37861
8b095871
IC
37862 ecdh: function (publicKey, privateKey) {
37863 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37864 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 37865
8b095871
IC
37866 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37867 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37868
8b095871
IC
37869 return secp256k1.ecdh(publicKey, privateKey)
37870 },
ab78acc6 37871
8b095871
IC
37872 ecdhUnsafe: function (publicKey, privateKey, compressed) {
37873 assert.isBuffer(publicKey, messages.EC_PUBLIC_KEY_TYPE_INVALID)
37874 assert.isBufferLength2(publicKey, 33, 65, messages.EC_PUBLIC_KEY_LENGTH_INVALID)
ab78acc6 37875
8b095871
IC
37876 assert.isBuffer(privateKey, messages.EC_PRIVATE_KEY_TYPE_INVALID)
37877 assert.isBufferLength(privateKey, 32, messages.EC_PRIVATE_KEY_LENGTH_INVALID)
ab78acc6 37878
8b095871 37879 compressed = initCompressedValue(compressed, true)
ab78acc6 37880
8b095871
IC
37881 return secp256k1.ecdhUnsafe(publicKey, privateKey, compressed)
37882 }
37883 }
37884}
ab78acc6 37885
8b095871
IC
37886},{"./assert":74,"./der":75,"./messages.json":78}],78:[function(require,module,exports){
37887module.exports={
37888 "COMPRESSED_TYPE_INVALID": "compressed should be a boolean",
37889 "EC_PRIVATE_KEY_TYPE_INVALID": "private key should be a Buffer",
37890 "EC_PRIVATE_KEY_LENGTH_INVALID": "private key length is invalid",
37891 "EC_PRIVATE_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting private key is invalid",
37892 "EC_PRIVATE_KEY_TWEAK_MUL_FAIL": "tweak out of range",
37893 "EC_PRIVATE_KEY_EXPORT_DER_FAIL": "couldn't export to DER format",
37894 "EC_PRIVATE_KEY_IMPORT_DER_FAIL": "couldn't import from DER format",
37895 "EC_PUBLIC_KEYS_TYPE_INVALID": "public keys should be an Array",
37896 "EC_PUBLIC_KEYS_LENGTH_INVALID": "public keys Array should have at least 1 element",
37897 "EC_PUBLIC_KEY_TYPE_INVALID": "public key should be a Buffer",
37898 "EC_PUBLIC_KEY_LENGTH_INVALID": "public key length is invalid",
37899 "EC_PUBLIC_KEY_PARSE_FAIL": "the public key could not be parsed or is invalid",
37900 "EC_PUBLIC_KEY_CREATE_FAIL": "private was invalid, try again",
37901 "EC_PUBLIC_KEY_TWEAK_ADD_FAIL": "tweak out of range or resulting public key is invalid",
37902 "EC_PUBLIC_KEY_TWEAK_MUL_FAIL": "tweak out of range",
37903 "EC_PUBLIC_KEY_COMBINE_FAIL": "the sum of the public keys is not valid",
37904 "ECDH_FAIL": "scalar was invalid (zero or overflow)",
37905 "ECDSA_SIGNATURE_TYPE_INVALID": "signature should be a Buffer",
37906 "ECDSA_SIGNATURE_LENGTH_INVALID": "signature length is invalid",
37907 "ECDSA_SIGNATURE_PARSE_FAIL": "couldn't parse signature",
37908 "ECDSA_SIGNATURE_PARSE_DER_FAIL": "couldn't parse DER signature",
37909 "ECDSA_SIGNATURE_SERIALIZE_DER_FAIL": "couldn't serialize signature to DER format",
37910 "ECDSA_SIGN_FAIL": "nonce generation function failed or private key is invalid",
37911 "ECDSA_RECOVER_FAIL": "couldn't recover public key from signature",
37912 "MSG32_TYPE_INVALID": "message should be a Buffer",
37913 "MSG32_LENGTH_INVALID": "message length is invalid",
37914 "OPTIONS_TYPE_INVALID": "options should be an Object",
37915 "OPTIONS_DATA_TYPE_INVALID": "options.data should be a Buffer",
37916 "OPTIONS_DATA_LENGTH_INVALID": "options.data length is invalid",
37917 "OPTIONS_NONCEFN_TYPE_INVALID": "options.noncefn should be a Function",
37918 "RECOVERY_ID_TYPE_INVALID": "recovery should be a Number",
37919 "RECOVERY_ID_VALUE_INVALID": "recovery should have value between -1 and 4",
37920 "TWEAK_TYPE_INVALID": "tweak should be a Buffer",
37921 "TWEAK_LENGTH_INVALID": "tweak length is invalid"
37922}
37923
37924},{}],79:[function(require,module,exports){
37925(function (Buffer){
37926// prototype class for hash functions
37927function Hash (blockSize, finalSize) {
37928 this._block = new Buffer(blockSize)
37929 this._finalSize = finalSize
37930 this._blockSize = blockSize
37931 this._len = 0
37932 this._s = 0
37933}
37934
37935Hash.prototype.update = function (data, enc) {
37936 if (typeof data === 'string') {
37937 enc = enc || 'utf8'
37938 data = new Buffer(data, enc)
ab78acc6
IC
37939 }
37940
8b095871
IC
37941 var l = this._len += data.length
37942 var s = this._s || 0
37943 var f = 0
37944 var buffer = this._block
ab78acc6 37945
8b095871
IC
37946 while (s < l) {
37947 var t = Math.min(data.length, f + this._blockSize - (s % this._blockSize))
37948 var ch = (t - f)
ab78acc6 37949
8b095871
IC
37950 for (var i = 0; i < ch; i++) {
37951 buffer[(s % this._blockSize) + i] = data[i + f]
ab78acc6
IC
37952 }
37953
8b095871
IC
37954 s += ch
37955 f += ch
ab78acc6 37956
8b095871
IC
37957 if ((s % this._blockSize) === 0) {
37958 this._update(buffer)
37959 }
ab78acc6 37960 }
8b095871 37961 this._s = s
ab78acc6 37962
8b095871
IC
37963 return this
37964}
ab78acc6 37965
8b095871
IC
37966Hash.prototype.digest = function (enc) {
37967 // Suppose the length of the message M, in bits, is l
37968 var l = this._len * 8
ab78acc6 37969
8b095871
IC
37970 // Append the bit 1 to the end of the message
37971 this._block[this._len % this._blockSize] = 0x80
ab78acc6 37972
8b095871
IC
37973 // and then k zero bits, where k is the smallest non-negative solution to the equation (l + 1 + k) === finalSize mod blockSize
37974 this._block.fill(0, this._len % this._blockSize + 1)
ab78acc6 37975
8b095871
IC
37976 if (l % (this._blockSize * 8) >= this._finalSize * 8) {
37977 this._update(this._block)
37978 this._block.fill(0)
37979 }
ab78acc6 37980
8b095871
IC
37981 // to this append the block which is equal to the number l written in binary
37982 // TODO: handle case where l is > Math.pow(2, 29)
37983 this._block.writeInt32BE(l, this._blockSize - 4)
ebd8d4e8 37984
8b095871 37985 var hash = this._update(this._block) || this._hash()
ebd8d4e8 37986
8b095871 37987 return enc ? hash.toString(enc) : hash
ab78acc6 37988}
ebd8d4e8 37989
8b095871
IC
37990Hash.prototype._update = function () {
37991 throw new Error('_update must be implemented by subclass')
ab78acc6 37992}
8b095871
IC
37993
37994module.exports = Hash
37995
37996}).call(this,require("buffer").Buffer)
37997},{"buffer":5}],80:[function(require,module,exports){
37998var exports = module.exports = function SHA (algorithm) {
37999 algorithm = algorithm.toLowerCase()
38000
38001 var Algorithm = exports[algorithm]
38002 if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)')
38003
38004 return new Algorithm()
ab78acc6 38005}
ebd8d4e8 38006
8b095871
IC
38007exports.sha = require('./sha')
38008exports.sha1 = require('./sha1')
38009exports.sha224 = require('./sha224')
38010exports.sha256 = require('./sha256')
38011exports.sha384 = require('./sha384')
38012exports.sha512 = require('./sha512')
38013
38014},{"./sha":81,"./sha1":82,"./sha224":83,"./sha256":84,"./sha384":85,"./sha512":86}],81:[function(require,module,exports){
38015(function (Buffer){
38016/*
38017 * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined
38018 * in FIPS PUB 180-1
38019 * This source code is derived from sha1.js of the same repository.
38020 * The difference between SHA-0 and SHA-1 is just a bitwise rotate left
38021 * operation was added.
38022 */
38023
38024var inherits = require('inherits')
38025var Hash = require('./hash')
38026
38027var K = [
38028 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
38029]
38030
38031var W = new Array(80)
38032
38033function Sha () {
38034 this.init()
38035 this._w = W
38036
38037 Hash.call(this, 64, 56)
ab78acc6 38038}
ebd8d4e8 38039
8b095871 38040inherits(Sha, Hash)
ebd8d4e8 38041
8b095871
IC
38042Sha.prototype.init = function () {
38043 this._a = 0x67452301
38044 this._b = 0xefcdab89
38045 this._c = 0x98badcfe
38046 this._d = 0x10325476
38047 this._e = 0xc3d2e1f0
ebd8d4e8 38048
8b095871
IC
38049 return this
38050}
ebd8d4e8 38051
8b095871
IC
38052function rotl5 (num) {
38053 return (num << 5) | (num >>> 27)
38054}
ebd8d4e8 38055
8b095871
IC
38056function rotl30 (num) {
38057 return (num << 30) | (num >>> 2)
38058}
ebd8d4e8 38059
8b095871
IC
38060function ft (s, b, c, d) {
38061 if (s === 0) return (b & c) | ((~b) & d)
38062 if (s === 2) return (b & c) | (b & d) | (c & d)
38063 return b ^ c ^ d
38064}
ebd8d4e8 38065
8b095871
IC
38066Sha.prototype._update = function (M) {
38067 var W = this._w
ebd8d4e8 38068
8b095871
IC
38069 var a = this._a | 0
38070 var b = this._b | 0
38071 var c = this._c | 0
38072 var d = this._d | 0
38073 var e = this._e | 0
ebd8d4e8 38074
8b095871
IC
38075 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38076 for (; i < 80; ++i) W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]
ebd8d4e8 38077
8b095871
IC
38078 for (var j = 0; j < 80; ++j) {
38079 var s = ~~(j / 20)
38080 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
ebd8d4e8 38081
8b095871
IC
38082 e = d
38083 d = c
38084 c = rotl30(b)
38085 b = a
38086 a = t
38087 }
38088
38089 this._a = (a + this._a) | 0
38090 this._b = (b + this._b) | 0
38091 this._c = (c + this._c) | 0
38092 this._d = (d + this._d) | 0
38093 this._e = (e + this._e) | 0
38094}
38095
38096Sha.prototype._hash = function () {
38097 var H = new Buffer(20)
ab78acc6 38098
8b095871
IC
38099 H.writeInt32BE(this._a | 0, 0)
38100 H.writeInt32BE(this._b | 0, 4)
38101 H.writeInt32BE(this._c | 0, 8)
38102 H.writeInt32BE(this._d | 0, 12)
38103 H.writeInt32BE(this._e | 0, 16)
ebd8d4e8 38104
8b095871 38105 return H
ebd8d4e8
IC
38106}
38107
8b095871 38108module.exports = Sha
ebd8d4e8 38109
8b095871
IC
38110}).call(this,require("buffer").Buffer)
38111},{"./hash":79,"buffer":5,"inherits":63}],82:[function(require,module,exports){
38112(function (Buffer){
38113/*
38114 * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined
38115 * in FIPS PUB 180-1
38116 * Version 2.1a Copyright Paul Johnston 2000 - 2002.
38117 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38118 * Distributed under the BSD License
38119 * See http://pajhome.org.uk/crypt/md5 for details.
38120 */
ebd8d4e8 38121
8b095871
IC
38122var inherits = require('inherits')
38123var Hash = require('./hash')
ebd8d4e8 38124
8b095871
IC
38125var K = [
38126 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0
38127]
ebd8d4e8 38128
8b095871 38129var W = new Array(80)
ab78acc6 38130
8b095871
IC
38131function Sha1 () {
38132 this.init()
38133 this._w = W
ebd8d4e8 38134
8b095871
IC
38135 Hash.call(this, 64, 56)
38136}
ebd8d4e8 38137
8b095871 38138inherits(Sha1, Hash)
ebd8d4e8 38139
8b095871
IC
38140Sha1.prototype.init = function () {
38141 this._a = 0x67452301
38142 this._b = 0xefcdab89
38143 this._c = 0x98badcfe
38144 this._d = 0x10325476
38145 this._e = 0xc3d2e1f0
ebd8d4e8 38146
8b095871
IC
38147 return this
38148}
ebd8d4e8 38149
8b095871
IC
38150function rotl1 (num) {
38151 return (num << 1) | (num >>> 31)
38152}
ebd8d4e8 38153
8b095871
IC
38154function rotl5 (num) {
38155 return (num << 5) | (num >>> 27)
38156}
ebd8d4e8 38157
8b095871
IC
38158function rotl30 (num) {
38159 return (num << 30) | (num >>> 2)
38160}
ebd8d4e8 38161
8b095871
IC
38162function ft (s, b, c, d) {
38163 if (s === 0) return (b & c) | ((~b) & d)
38164 if (s === 2) return (b & c) | (b & d) | (c & d)
38165 return b ^ c ^ d
38166}
ebd8d4e8 38167
8b095871
IC
38168Sha1.prototype._update = function (M) {
38169 var W = this._w
ebd8d4e8 38170
8b095871
IC
38171 var a = this._a | 0
38172 var b = this._b | 0
38173 var c = this._c | 0
38174 var d = this._d | 0
38175 var e = this._e | 0
ebd8d4e8 38176
8b095871
IC
38177 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38178 for (; i < 80; ++i) W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16])
38179
38180 for (var j = 0; j < 80; ++j) {
38181 var s = ~~(j / 20)
38182 var t = (rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s]) | 0
38183
38184 e = d
38185 d = c
38186 c = rotl30(b)
38187 b = a
38188 a = t
ab78acc6
IC
38189 }
38190
8b095871
IC
38191 this._a = (a + this._a) | 0
38192 this._b = (b + this._b) | 0
38193 this._c = (c + this._c) | 0
38194 this._d = (d + this._d) | 0
38195 this._e = (e + this._e) | 0
38196}
ab78acc6 38197
8b095871
IC
38198Sha1.prototype._hash = function () {
38199 var H = new Buffer(20)
ab78acc6 38200
8b095871
IC
38201 H.writeInt32BE(this._a | 0, 0)
38202 H.writeInt32BE(this._b | 0, 4)
38203 H.writeInt32BE(this._c | 0, 8)
38204 H.writeInt32BE(this._d | 0, 12)
38205 H.writeInt32BE(this._e | 0, 16)
ab78acc6 38206
8b095871
IC
38207 return H
38208}
ab78acc6 38209
8b095871 38210module.exports = Sha1
ab78acc6 38211
8b095871
IC
38212}).call(this,require("buffer").Buffer)
38213},{"./hash":79,"buffer":5,"inherits":63}],83:[function(require,module,exports){
38214(function (Buffer){
38215/**
38216 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
38217 * in FIPS 180-2
38218 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
38219 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38220 *
38221 */
ab78acc6 38222
8b095871
IC
38223var inherits = require('inherits')
38224var Sha256 = require('./sha256')
38225var Hash = require('./hash')
ab78acc6 38226
8b095871 38227var W = new Array(64)
ab78acc6 38228
8b095871
IC
38229function Sha224 () {
38230 this.init()
ab78acc6 38231
8b095871 38232 this._w = W // new Array(64)
ebd8d4e8 38233
8b095871
IC
38234 Hash.call(this, 64, 56)
38235}
ebd8d4e8 38236
8b095871 38237inherits(Sha224, Sha256)
ebd8d4e8 38238
8b095871
IC
38239Sha224.prototype.init = function () {
38240 this._a = 0xc1059ed8
38241 this._b = 0x367cd507
38242 this._c = 0x3070dd17
38243 this._d = 0xf70e5939
38244 this._e = 0xffc00b31
38245 this._f = 0x68581511
38246 this._g = 0x64f98fa7
38247 this._h = 0xbefa4fa4
ebd8d4e8 38248
8b095871
IC
38249 return this
38250}
ab78acc6 38251
8b095871
IC
38252Sha224.prototype._hash = function () {
38253 var H = new Buffer(28)
ebd8d4e8 38254
8b095871
IC
38255 H.writeInt32BE(this._a, 0)
38256 H.writeInt32BE(this._b, 4)
38257 H.writeInt32BE(this._c, 8)
38258 H.writeInt32BE(this._d, 12)
38259 H.writeInt32BE(this._e, 16)
38260 H.writeInt32BE(this._f, 20)
38261 H.writeInt32BE(this._g, 24)
ab78acc6 38262
8b095871
IC
38263 return H
38264}
ebd8d4e8 38265
8b095871 38266module.exports = Sha224
ebd8d4e8 38267
8b095871
IC
38268}).call(this,require("buffer").Buffer)
38269},{"./hash":79,"./sha256":84,"buffer":5,"inherits":63}],84:[function(require,module,exports){
38270(function (Buffer){
38271/**
38272 * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined
38273 * in FIPS 180-2
38274 * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.
38275 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
38276 *
38277 */
ebd8d4e8 38278
8b095871
IC
38279var inherits = require('inherits')
38280var Hash = require('./hash')
ab78acc6 38281
8b095871
IC
38282var K = [
38283 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5,
38284 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5,
38285 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3,
38286 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174,
38287 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC,
38288 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA,
38289 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7,
38290 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967,
38291 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13,
38292 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85,
38293 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3,
38294 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070,
38295 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5,
38296 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3,
38297 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208,
38298 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2
38299]
ebd8d4e8 38300
8b095871 38301var W = new Array(64)
ebd8d4e8 38302
8b095871
IC
38303function Sha256 () {
38304 this.init()
ebd8d4e8 38305
8b095871 38306 this._w = W // new Array(64)
ebd8d4e8 38307
8b095871 38308 Hash.call(this, 64, 56)
ab78acc6 38309}
ebd8d4e8 38310
8b095871 38311inherits(Sha256, Hash)
ebd8d4e8 38312
8b095871
IC
38313Sha256.prototype.init = function () {
38314 this._a = 0x6a09e667
38315 this._b = 0xbb67ae85
38316 this._c = 0x3c6ef372
38317 this._d = 0xa54ff53a
38318 this._e = 0x510e527f
38319 this._f = 0x9b05688c
38320 this._g = 0x1f83d9ab
38321 this._h = 0x5be0cd19
ebd8d4e8 38322
8b095871
IC
38323 return this
38324}
ebd8d4e8 38325
8b095871
IC
38326function ch (x, y, z) {
38327 return z ^ (x & (y ^ z))
38328}
ebd8d4e8 38329
8b095871
IC
38330function maj (x, y, z) {
38331 return (x & y) | (z & (x | y))
38332}
ebd8d4e8 38333
8b095871
IC
38334function sigma0 (x) {
38335 return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10)
38336}
ebd8d4e8 38337
8b095871
IC
38338function sigma1 (x) {
38339 return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7)
38340}
ebd8d4e8 38341
8b095871
IC
38342function gamma0 (x) {
38343 return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ (x >>> 3)
38344}
ebd8d4e8 38345
8b095871
IC
38346function gamma1 (x) {
38347 return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ (x >>> 10)
38348}
ab78acc6 38349
8b095871
IC
38350Sha256.prototype._update = function (M) {
38351 var W = this._w
ebd8d4e8 38352
8b095871
IC
38353 var a = this._a | 0
38354 var b = this._b | 0
38355 var c = this._c | 0
38356 var d = this._d | 0
38357 var e = this._e | 0
38358 var f = this._f | 0
38359 var g = this._g | 0
38360 var h = this._h | 0
ab78acc6 38361
8b095871
IC
38362 for (var i = 0; i < 16; ++i) W[i] = M.readInt32BE(i * 4)
38363 for (; i < 64; ++i) W[i] = (gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16]) | 0
ab78acc6 38364
8b095871
IC
38365 for (var j = 0; j < 64; ++j) {
38366 var T1 = (h + sigma1(e) + ch(e, f, g) + K[j] + W[j]) | 0
38367 var T2 = (sigma0(a) + maj(a, b, c)) | 0
ebd8d4e8 38368
8b095871
IC
38369 h = g
38370 g = f
38371 f = e
38372 e = (d + T1) | 0
38373 d = c
38374 c = b
38375 b = a
38376 a = (T1 + T2) | 0
ebd8d4e8
IC
38377 }
38378
8b095871
IC
38379 this._a = (a + this._a) | 0
38380 this._b = (b + this._b) | 0
38381 this._c = (c + this._c) | 0
38382 this._d = (d + this._d) | 0
38383 this._e = (e + this._e) | 0
38384 this._f = (f + this._f) | 0
38385 this._g = (g + this._g) | 0
38386 this._h = (h + this._h) | 0
ab78acc6 38387}
ebd8d4e8 38388
8b095871
IC
38389Sha256.prototype._hash = function () {
38390 var H = new Buffer(32)
ebd8d4e8 38391
8b095871
IC
38392 H.writeInt32BE(this._a, 0)
38393 H.writeInt32BE(this._b, 4)
38394 H.writeInt32BE(this._c, 8)
38395 H.writeInt32BE(this._d, 12)
38396 H.writeInt32BE(this._e, 16)
38397 H.writeInt32BE(this._f, 20)
38398 H.writeInt32BE(this._g, 24)
38399 H.writeInt32BE(this._h, 28)
38400
38401 return H
ab78acc6 38402}
ebd8d4e8 38403
8b095871 38404module.exports = Sha256
ebd8d4e8 38405
8b095871
IC
38406}).call(this,require("buffer").Buffer)
38407},{"./hash":79,"buffer":5,"inherits":63}],85:[function(require,module,exports){
38408(function (Buffer){
38409var inherits = require('inherits')
38410var SHA512 = require('./sha512')
38411var Hash = require('./hash')
ebd8d4e8 38412
8b095871 38413var W = new Array(160)
ebd8d4e8 38414
8b095871
IC
38415function Sha384 () {
38416 this.init()
38417 this._w = W
ab78acc6 38418
8b095871
IC
38419 Hash.call(this, 128, 112)
38420}
ab78acc6 38421
8b095871 38422inherits(Sha384, SHA512)
ebd8d4e8 38423
8b095871
IC
38424Sha384.prototype.init = function () {
38425 this._ah = 0xcbbb9d5d
38426 this._bh = 0x629a292a
38427 this._ch = 0x9159015a
38428 this._dh = 0x152fecd8
38429 this._eh = 0x67332667
38430 this._fh = 0x8eb44a87
38431 this._gh = 0xdb0c2e0d
38432 this._hh = 0x47b5481d
38433
38434 this._al = 0xc1059ed8
38435 this._bl = 0x367cd507
38436 this._cl = 0x3070dd17
38437 this._dl = 0xf70e5939
38438 this._el = 0xffc00b31
38439 this._fl = 0x68581511
38440 this._gl = 0x64f98fa7
38441 this._hl = 0xbefa4fa4
ebd8d4e8 38442
8b095871
IC
38443 return this
38444}
ebd8d4e8 38445
8b095871
IC
38446Sha384.prototype._hash = function () {
38447 var H = new Buffer(48)
ebd8d4e8 38448
8b095871
IC
38449 function writeInt64BE (h, l, offset) {
38450 H.writeInt32BE(h, offset)
38451 H.writeInt32BE(l, offset + 4)
38452 }
ebd8d4e8 38453
8b095871
IC
38454 writeInt64BE(this._ah, this._al, 0)
38455 writeInt64BE(this._bh, this._bl, 8)
38456 writeInt64BE(this._ch, this._cl, 16)
38457 writeInt64BE(this._dh, this._dl, 24)
38458 writeInt64BE(this._eh, this._el, 32)
38459 writeInt64BE(this._fh, this._fl, 40)
ebd8d4e8 38460
8b095871 38461 return H
ab78acc6 38462}
ebd8d4e8 38463
8b095871
IC
38464module.exports = Sha384
38465
38466}).call(this,require("buffer").Buffer)
38467},{"./hash":79,"./sha512":86,"buffer":5,"inherits":63}],86:[function(require,module,exports){
38468(function (Buffer){
38469var inherits = require('inherits')
38470var Hash = require('./hash')
38471
38472var K = [
38473 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,
38474 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
38475 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,
38476 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
38477 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,
38478 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
38479 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,
38480 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
38481 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,
38482 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
38483 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,
38484 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
38485 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,
38486 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
38487 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,
38488 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
38489 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,
38490 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
38491 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,
38492 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
38493 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,
38494 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
38495 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,
38496 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
38497 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,
38498 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
38499 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,
38500 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
38501 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,
38502 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
38503 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,
38504 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
38505 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,
38506 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
38507 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,
38508 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
38509 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,
38510 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
38511 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,
38512 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817
38513]
38514
38515var W = new Array(160)
ebd8d4e8 38516
8b095871
IC
38517function Sha512 () {
38518 this.init()
38519 this._w = W
ebd8d4e8 38520
8b095871 38521 Hash.call(this, 128, 112)
ab78acc6 38522}
ebd8d4e8 38523
8b095871 38524inherits(Sha512, Hash)
ebd8d4e8 38525
8b095871
IC
38526Sha512.prototype.init = function () {
38527 this._ah = 0x6a09e667
38528 this._bh = 0xbb67ae85
38529 this._ch = 0x3c6ef372
38530 this._dh = 0xa54ff53a
38531 this._eh = 0x510e527f
38532 this._fh = 0x9b05688c
38533 this._gh = 0x1f83d9ab
38534 this._hh = 0x5be0cd19
38535
38536 this._al = 0xf3bcc908
38537 this._bl = 0x84caa73b
38538 this._cl = 0xfe94f82b
38539 this._dl = 0x5f1d36f1
38540 this._el = 0xade682d1
38541 this._fl = 0x2b3e6c1f
38542 this._gl = 0xfb41bd6b
38543 this._hl = 0x137e2179
ebd8d4e8 38544
8b095871 38545 return this
ab78acc6 38546}
ebd8d4e8 38547
8b095871
IC
38548function Ch (x, y, z) {
38549 return z ^ (x & (y ^ z))
38550}
ebd8d4e8 38551
8b095871
IC
38552function maj (x, y, z) {
38553 return (x & y) | (z & (x | y))
ab78acc6 38554}
ebd8d4e8 38555
8b095871
IC
38556function sigma0 (x, xl) {
38557 return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25)
38558}
ebd8d4e8 38559
8b095871
IC
38560function sigma1 (x, xl) {
38561 return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23)
38562}
ab78acc6 38563
8b095871
IC
38564function Gamma0 (x, xl) {
38565 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7)
ab78acc6 38566}
ebd8d4e8 38567
8b095871
IC
38568function Gamma0l (x, xl) {
38569 return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25)
38570}
ebd8d4e8 38571
8b095871
IC
38572function Gamma1 (x, xl) {
38573 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6)
ab78acc6
IC
38574}
38575
8b095871
IC
38576function Gamma1l (x, xl) {
38577 return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26)
ab78acc6
IC
38578}
38579
8b095871
IC
38580function getCarry (a, b) {
38581 return (a >>> 0) < (b >>> 0) ? 1 : 0
ab78acc6
IC
38582}
38583
8b095871
IC
38584Sha512.prototype._update = function (M) {
38585 var W = this._w
ebd8d4e8 38586
8b095871
IC
38587 var ah = this._ah | 0
38588 var bh = this._bh | 0
38589 var ch = this._ch | 0
38590 var dh = this._dh | 0
38591 var eh = this._eh | 0
38592 var fh = this._fh | 0
38593 var gh = this._gh | 0
38594 var hh = this._hh | 0
ebd8d4e8 38595
8b095871
IC
38596 var al = this._al | 0
38597 var bl = this._bl | 0
38598 var cl = this._cl | 0
38599 var dl = this._dl | 0
38600 var el = this._el | 0
38601 var fl = this._fl | 0
38602 var gl = this._gl | 0
38603 var hl = this._hl | 0
ebd8d4e8 38604
8b095871
IC
38605 for (var i = 0; i < 32; i += 2) {
38606 W[i] = M.readInt32BE(i * 4)
38607 W[i + 1] = M.readInt32BE(i * 4 + 4)
38608 }
38609 for (; i < 160; i += 2) {
38610 var xh = W[i - 15 * 2]
38611 var xl = W[i - 15 * 2 + 1]
38612 var gamma0 = Gamma0(xh, xl)
38613 var gamma0l = Gamma0l(xl, xh)
ebd8d4e8 38614
8b095871
IC
38615 xh = W[i - 2 * 2]
38616 xl = W[i - 2 * 2 + 1]
38617 var gamma1 = Gamma1(xh, xl)
38618 var gamma1l = Gamma1l(xl, xh)
ebd8d4e8 38619
8b095871
IC
38620 // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]
38621 var Wi7h = W[i - 7 * 2]
38622 var Wi7l = W[i - 7 * 2 + 1]
ebd8d4e8 38623
8b095871
IC
38624 var Wi16h = W[i - 16 * 2]
38625 var Wi16l = W[i - 16 * 2 + 1]
ab78acc6 38626
8b095871
IC
38627 var Wil = (gamma0l + Wi7l) | 0
38628 var Wih = (gamma0 + Wi7h + getCarry(Wil, gamma0l)) | 0
38629 Wil = (Wil + gamma1l) | 0
38630 Wih = (Wih + gamma1 + getCarry(Wil, gamma1l)) | 0
38631 Wil = (Wil + Wi16l) | 0
38632 Wih = (Wih + Wi16h + getCarry(Wil, Wi16l)) | 0
ebd8d4e8 38633
8b095871
IC
38634 W[i] = Wih
38635 W[i + 1] = Wil
38636 }
ebd8d4e8 38637
8b095871
IC
38638 for (var j = 0; j < 160; j += 2) {
38639 Wih = W[j]
38640 Wil = W[j + 1]
ebd8d4e8 38641
8b095871
IC
38642 var majh = maj(ah, bh, ch)
38643 var majl = maj(al, bl, cl)
ebd8d4e8 38644
8b095871
IC
38645 var sigma0h = sigma0(ah, al)
38646 var sigma0l = sigma0(al, ah)
38647 var sigma1h = sigma1(eh, el)
38648 var sigma1l = sigma1(el, eh)
ab78acc6 38649
8b095871
IC
38650 // t1 = h + sigma1 + ch + K[j] + W[j]
38651 var Kih = K[j]
38652 var Kil = K[j + 1]
ab78acc6 38653
8b095871
IC
38654 var chh = Ch(eh, fh, gh)
38655 var chl = Ch(el, fl, gl)
ebd8d4e8 38656
8b095871
IC
38657 var t1l = (hl + sigma1l) | 0
38658 var t1h = (hh + sigma1h + getCarry(t1l, hl)) | 0
38659 t1l = (t1l + chl) | 0
38660 t1h = (t1h + chh + getCarry(t1l, chl)) | 0
38661 t1l = (t1l + Kil) | 0
38662 t1h = (t1h + Kih + getCarry(t1l, Kil)) | 0
38663 t1l = (t1l + Wil) | 0
38664 t1h = (t1h + Wih + getCarry(t1l, Wil)) | 0
ebd8d4e8 38665
8b095871
IC
38666 // t2 = sigma0 + maj
38667 var t2l = (sigma0l + majl) | 0
38668 var t2h = (sigma0h + majh + getCarry(t2l, sigma0l)) | 0
ebd8d4e8 38669
8b095871
IC
38670 hh = gh
38671 hl = gl
38672 gh = fh
38673 gl = fl
38674 fh = eh
38675 fl = el
38676 el = (dl + t1l) | 0
38677 eh = (dh + t1h + getCarry(el, dl)) | 0
38678 dh = ch
38679 dl = cl
38680 ch = bh
38681 cl = bl
38682 bh = ah
38683 bl = al
38684 al = (t1l + t2l) | 0
38685 ah = (t1h + t2h + getCarry(al, t1l)) | 0
38686 }
ab78acc6 38687
8b095871
IC
38688 this._al = (this._al + al) | 0
38689 this._bl = (this._bl + bl) | 0
38690 this._cl = (this._cl + cl) | 0
38691 this._dl = (this._dl + dl) | 0
38692 this._el = (this._el + el) | 0
38693 this._fl = (this._fl + fl) | 0
38694 this._gl = (this._gl + gl) | 0
38695 this._hl = (this._hl + hl) | 0
ab78acc6 38696
8b095871
IC
38697 this._ah = (this._ah + ah + getCarry(this._al, al)) | 0
38698 this._bh = (this._bh + bh + getCarry(this._bl, bl)) | 0
38699 this._ch = (this._ch + ch + getCarry(this._cl, cl)) | 0
38700 this._dh = (this._dh + dh + getCarry(this._dl, dl)) | 0
38701 this._eh = (this._eh + eh + getCarry(this._el, el)) | 0
38702 this._fh = (this._fh + fh + getCarry(this._fl, fl)) | 0
38703 this._gh = (this._gh + gh + getCarry(this._gl, gl)) | 0
38704 this._hh = (this._hh + hh + getCarry(this._hl, hl)) | 0
ab78acc6
IC
38705}
38706
8b095871
IC
38707Sha512.prototype._hash = function () {
38708 var H = new Buffer(64)
ab78acc6 38709
8b095871
IC
38710 function writeInt64BE (h, l, offset) {
38711 H.writeInt32BE(h, offset)
38712 H.writeInt32BE(l, offset + 4)
38713 }
ab78acc6 38714
8b095871
IC
38715 writeInt64BE(this._ah, this._al, 0)
38716 writeInt64BE(this._bh, this._bl, 8)
38717 writeInt64BE(this._ch, this._cl, 16)
38718 writeInt64BE(this._dh, this._dl, 24)
38719 writeInt64BE(this._eh, this._el, 32)
38720 writeInt64BE(this._fh, this._fl, 40)
38721 writeInt64BE(this._gh, this._gl, 48)
38722 writeInt64BE(this._hh, this._hl, 56)
ab78acc6 38723
8b095871 38724 return H
ebd8d4e8
IC
38725}
38726
8b095871 38727module.exports = Sha512
ebd8d4e8 38728
ab78acc6 38729}).call(this,require("buffer").Buffer)
8b095871
IC
38730},{"./hash":79,"buffer":5,"inherits":63}],87:[function(require,module,exports){
38731var isHexPrefixed = require('is-hex-prefixed');
d5dc92fd 38732
8b095871
IC
38733/**
38734 * Removes '0x' from a given `String` is present
38735 * @param {String} str the string value
38736 * @return {String|Optional} a string by pass if necessary
38737 */
38738module.exports = function stripHexPrefix(str) {
38739 if (typeof str !== 'string') {
38740 return str;
38741 }
07ac4350 38742
8b095871
IC
38743 return isHexPrefixed(str) ? str.slice(2) : str;
38744}
07ac4350 38745
8b095871
IC
38746},{"is-hex-prefixed":64}]},{},[31])(31)
38747});</script>
8a1f452d 38748 <script>function convertRippleAdrr(address) {
38749 return window.basex('rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz').encode(
38750 window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(address)
38751 )
38752 }
38753
38754function convertRipplePriv(priv) {
920eb591 38755 return window.basex('123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz').decode(priv).toString("hex").slice(2,66)
8a1f452d 38756}
38757
38758</script>
ab78acc6 38759 <script>// Select components from sjcl to suit the crypto operations bip39 requires.
80c4dd2a
IC
38760
38761//// base.js
38762
38763/** @fileOverview Javascript cryptography implementation.
38764 *
38765 * Crush to remove comments, shorten variable names and
38766 * generally reduce transmission size.
38767 *
38768 * @author Emily Stark
38769 * @author Mike Hamburg
38770 * @author Dan Boneh
38771 */
38772
38773"use strict";
38774/*jslint indent: 2, bitwise: false, nomen: false, plusplus: false, white: false, regexp: false */
38775/*global document, window, escape, unescape, module, require, Uint32Array */
38776
38777/** @namespace The Stanford Javascript Crypto Library, top-level namespace. */
38778var sjcl = {
38779 /** @namespace Symmetric ciphers. */
38780 cipher: {},
38781
38782 /** @namespace Hash functions. Right now only SHA256 is implemented. */
38783 hash: {},
38784
38785 /** @namespace Key exchange functions. Right now only SRP is implemented. */
38786 keyexchange: {},
38787
38788 /** @namespace Block cipher modes of operation. */
38789 mode: {},
38790
38791 /** @namespace Miscellaneous. HMAC and PBKDF2. */
38792 misc: {},
38793
38794 /**
38795 * @namespace Bit array encoders and decoders.
38796 *
38797 * @description
38798 * The members of this namespace are functions which translate between
38799 * SJCL's bitArrays and other objects (usually strings). Because it
38800 * isn't always clear which direction is encoding and which is decoding,
38801 * the method names are "fromBits" and "toBits".
38802 */
38803 codec: {},
38804
38805 /** @namespace Exceptions. */
38806 exception: {
38807 /** @constructor Ciphertext is corrupt. */
38808 corrupt: function(message) {
38809 this.toString = function() { return "CORRUPT: "+this.message; };
38810 this.message = message;
38811 },
38812
38813 /** @constructor Invalid parameter. */
38814 invalid: function(message) {
38815 this.toString = function() { return "INVALID: "+this.message; };
38816 this.message = message;
38817 },
38818
38819 /** @constructor Bug or missing feature in SJCL. @constructor */
38820 bug: function(message) {
38821 this.toString = function() { return "BUG: "+this.message; };
38822 this.message = message;
38823 },
38824
38825 /** @constructor Something isn't ready. */
38826 notReady: function(message) {
38827 this.toString = function() { return "NOT READY: "+this.message; };
38828 this.message = message;
ebd8d4e8 38829 }
80c4dd2a
IC
38830 }
38831};
38832
38833if(typeof module !== 'undefined' && module.exports){
38834 module.exports = sjcl;
38835}
38836if (typeof define === "function") {
38837 define([], function () {
38838 return sjcl;
38839 });
38840}
38841
38842
38843//// bitArray.js
38844
38845/** @fileOverview Arrays of bits, encoded as arrays of Numbers.
38846 *
38847 * @author Emily Stark
38848 * @author Mike Hamburg
38849 * @author Dan Boneh
38850 */
38851
38852/** @namespace Arrays of bits, encoded as arrays of Numbers.
38853 *
38854 * @description
38855 * <p>
38856 * These objects are the currency accepted by SJCL's crypto functions.
38857 * </p>
38858 *
38859 * <p>
38860 * Most of our crypto primitives operate on arrays of 4-byte words internally,
38861 * but many of them can take arguments that are not a multiple of 4 bytes.
38862 * This library encodes arrays of bits (whose size need not be a multiple of 8
38863 * bits) as arrays of 32-bit words. The bits are packed, big-endian, into an
38864 * array of words, 32 bits at a time. Since the words are double-precision
38865 * floating point numbers, they fit some extra data. We use this (in a private,
38866 * possibly-changing manner) to encode the number of bits actually present
38867 * in the last word of the array.
38868 * </p>
38869 *
38870 * <p>
38871 * Because bitwise ops clear this out-of-band data, these arrays can be passed
38872 * to ciphers like AES which want arrays of words.
38873 * </p>
38874 */
38875sjcl.bitArray = {
38876 /**
38877 * Array slices in units of bits.
38878 * @param {bitArray} a The array to slice.
38879 * @param {Number} bstart The offset to the start of the slice, in bits.
38880 * @param {Number} bend The offset to the end of the slice, in bits. If this is undefined,
38881 * slice until the end of the array.
38882 * @return {bitArray} The requested slice.
38883 */
38884 bitSlice: function (a, bstart, bend) {
38885 a = sjcl.bitArray._shiftRight(a.slice(bstart/32), 32 - (bstart & 31)).slice(1);
38886 return (bend === undefined) ? a : sjcl.bitArray.clamp(a, bend-bstart);
38887 },
38888
38889 /**
38890 * Extract a number packed into a bit array.
38891 * @param {bitArray} a The array to slice.
38892 * @param {Number} bstart The offset to the start of the slice, in bits.
38893 * @param {Number} length The length of the number to extract.
38894 * @return {Number} The requested slice.
38895 */
38896 extract: function(a, bstart, blength) {
38897 // FIXME: this Math.floor is not necessary at all, but for some reason
38898 // seems to suppress a bug in the Chromium JIT.
38899 var x, sh = Math.floor((-bstart-blength) & 31);
38900 if ((bstart + blength - 1 ^ bstart) & -32) {
38901 // it crosses a boundary
38902 x = (a[bstart/32|0] << (32 - sh)) ^ (a[bstart/32+1|0] >>> sh);
38903 } else {
38904 // within a single word
38905 x = a[bstart/32|0] >>> sh;
ebd8d4e8 38906 }
80c4dd2a
IC
38907 return x & ((1<<blength) - 1);
38908 },
38909
38910 /**
38911 * Concatenate two bit arrays.
38912 * @param {bitArray} a1 The first array.
38913 * @param {bitArray} a2 The second array.
38914 * @return {bitArray} The concatenation of a1 and a2.
38915 */
38916 concat: function (a1, a2) {
38917 if (a1.length === 0 || a2.length === 0) {
38918 return a1.concat(a2);
38919 }
38920
38921 var last = a1[a1.length-1], shift = sjcl.bitArray.getPartial(last);
38922 if (shift === 32) {
38923 return a1.concat(a2);
38924 } else {
38925 return sjcl.bitArray._shiftRight(a2, shift, last|0, a1.slice(0,a1.length-1));
ebd8d4e8 38926 }
80c4dd2a
IC
38927 },
38928
38929 /**
38930 * Find the length of an array of bits.
38931 * @param {bitArray} a The array.
38932 * @return {Number} The length of a, in bits.
38933 */
38934 bitLength: function (a) {
38935 var l = a.length, x;
38936 if (l === 0) { return 0; }
38937 x = a[l - 1];
38938 return (l-1) * 32 + sjcl.bitArray.getPartial(x);
38939 },
38940
38941 /**
38942 * Truncate an array.
38943 * @param {bitArray} a The array.
38944 * @param {Number} len The length to truncate to, in bits.
38945 * @return {bitArray} A new array, truncated to len bits.
38946 */
38947 clamp: function (a, len) {
38948 if (a.length * 32 < len) { return a; }
38949 a = a.slice(0, Math.ceil(len / 32));
38950 var l = a.length;
38951 len = len & 31;
38952 if (l > 0 && len) {
38953 a[l-1] = sjcl.bitArray.partial(len, a[l-1] & 0x80000000 >> (len-1), 1);
38954 }
38955 return a;
38956 },
38957
38958 /**
38959 * Make a partial word for a bit array.
38960 * @param {Number} len The number of bits in the word.
38961 * @param {Number} x The bits.
38962 * @param {Number} [0] _end Pass 1 if x has already been shifted to the high side.
38963 * @return {Number} The partial word.
38964 */
38965 partial: function (len, x, _end) {
38966 if (len === 32) { return x; }
38967 return (_end ? x|0 : x << (32-len)) + len * 0x10000000000;
38968 },
38969
38970 /**
38971 * Get the number of bits used by a partial word.
38972 * @param {Number} x The partial word.
38973 * @return {Number} The number of bits used by the partial word.
38974 */
38975 getPartial: function (x) {
38976 return Math.round(x/0x10000000000) || 32;
38977 },
38978
38979 /**
38980 * Compare two arrays for equality in a predictable amount of time.
38981 * @param {bitArray} a The first array.
38982 * @param {bitArray} b The second array.
38983 * @return {boolean} true if a == b; false otherwise.
38984 */
38985 equal: function (a, b) {
38986 if (sjcl.bitArray.bitLength(a) !== sjcl.bitArray.bitLength(b)) {
38987 return false;
ebd8d4e8 38988 }
80c4dd2a
IC
38989 var x = 0, i;
38990 for (i=0; i<a.length; i++) {
38991 x |= a[i]^b[i];
ebd8d4e8 38992 }
80c4dd2a
IC
38993 return (x === 0);
38994 },
38995
38996 /** Shift an array right.
38997 * @param {bitArray} a The array to shift.
38998 * @param {Number} shift The number of bits to shift.
38999 * @param {Number} [carry=0] A byte to carry in
39000 * @param {bitArray} [out=[]] An array to prepend to the output.
39001 * @private
39002 */
39003 _shiftRight: function (a, shift, carry, out) {
39004 var i, last2=0, shift2;
39005 if (out === undefined) { out = []; }
39006
39007 for (; shift >= 32; shift -= 32) {
39008 out.push(carry);
39009 carry = 0;
39010 }
39011 if (shift === 0) {
39012 return out.concat(a);
39013 }
39014
39015 for (i=0; i<a.length; i++) {
39016 out.push(carry | a[i]>>>shift);
39017 carry = a[i] << (32-shift);
39018 }
39019 last2 = a.length ? a[a.length-1] : 0;
39020 shift2 = sjcl.bitArray.getPartial(last2);
39021 out.push(sjcl.bitArray.partial(shift+shift2 & 31, (shift + shift2 > 32) ? carry : out.pop(),1));
39022 return out;
39023 },
39024
39025 /** xor a block of 4 words together.
39026 * @private
39027 */
39028 _xor4: function(x,y) {
39029 return [x[0]^y[0],x[1]^y[1],x[2]^y[2],x[3]^y[3]];
39030 },
39031
39032 /** byteswap a word array inplace.
39033 * (does not handle partial words)
39034 * @param {sjcl.bitArray} a word array
39035 * @return {sjcl.bitArray} byteswapped array
39036 */
39037 byteswapM: function(a) {
39038 var i, v, m = 0xff00;
39039 for (i = 0; i < a.length; ++i) {
39040 v = a[i];
39041 a[i] = (v >>> 24) | ((v >>> 8) & m) | ((v & m) << 8) | (v << 24);
ebd8d4e8 39042 }
80c4dd2a
IC
39043 return a;
39044 }
39045};
39046
39047
39048//// codecString.js
39049
39050/** @fileOverview Bit array codec implementations.
39051 *
39052 * @author Emily Stark
39053 * @author Mike Hamburg
39054 * @author Dan Boneh
39055 */
39056
39057/** @namespace UTF-8 strings */
39058sjcl.codec.utf8String = {
39059 /** Convert from a bitArray to a UTF-8 string. */
39060 fromBits: function (arr) {
39061 var out = "", bl = sjcl.bitArray.bitLength(arr), i, tmp;
39062 for (i=0; i<bl/8; i++) {
39063 if ((i&3) === 0) {
39064 tmp = arr[i/4];
39065 }
39066 out += String.fromCharCode(tmp >>> 24);
39067 tmp <<= 8;
ebd8d4e8 39068 }
80c4dd2a
IC
39069 return decodeURIComponent(escape(out));
39070 },
39071
39072 /** Convert from a UTF-8 string to a bitArray. */
39073 toBits: function (str) {
39074 str = unescape(encodeURIComponent(str));
39075 var out = [], i, tmp=0;
39076 for (i=0; i<str.length; i++) {
39077 tmp = tmp << 8 | str.charCodeAt(i);
39078 if ((i&3) === 3) {
39079 out.push(tmp);
39080 tmp = 0;
39081 }
ebd8d4e8 39082 }
80c4dd2a
IC
39083 if (i&3) {
39084 out.push(sjcl.bitArray.partial(8*(i&3), tmp));
ebd8d4e8 39085 }
80c4dd2a
IC
39086 return out;
39087 }
39088};
39089
39090
39091//// codecHex.js
39092
39093/** @fileOverview Bit array codec implementations.
39094 *
39095 * @author Emily Stark
39096 * @author Mike Hamburg
39097 * @author Dan Boneh
39098 */
39099
39100/** @namespace Hexadecimal */
39101sjcl.codec.hex = {
39102 /** Convert from a bitArray to a hex string. */
39103 fromBits: function (arr) {
39104 var out = "", i;
39105 for (i=0; i<arr.length; i++) {
39106 out += ((arr[i]|0)+0xF00000000000).toString(16).substr(4);
ebd8d4e8 39107 }
80c4dd2a
IC
39108 return out.substr(0, sjcl.bitArray.bitLength(arr)/4);//.replace(/(.{8})/g, "$1 ");
39109 },
39110 /** Convert from a hex string to a bitArray. */
39111 toBits: function (str) {
39112 var i, out=[], len;
39113 str = str.replace(/\s|0x/g, "");
39114 len = str.length;
39115 str = str + "00000000";
39116 for (i=0; i<str.length; i+=8) {
39117 out.push(parseInt(str.substr(i,8),16)^0);
ebd8d4e8 39118 }
80c4dd2a
IC
39119 return sjcl.bitArray.clamp(out, len*4);
39120 }
39121};
39122
39123
39124//// sha512.js
39125
39126/** @fileOverview Javascript SHA-512 implementation.
39127 *
39128 * This implementation was written for CryptoJS by Jeff Mott and adapted for
39129 * SJCL by Stefan Thomas.
39130 *
39131 * CryptoJS (c) 2009–2012 by Jeff Mott. All rights reserved.
39132 * Released with New BSD License
39133 *
39134 * @author Emily Stark
39135 * @author Mike Hamburg
39136 * @author Dan Boneh
39137 * @author Jeff Mott
39138 * @author Stefan Thomas
39139 */
39140
39141/**
39142 * Context for a SHA-512 operation in progress.
39143 * @constructor
39144 * @class Secure Hash Algorithm, 512 bits.
39145 */
39146sjcl.hash.sha512 = function (hash) {
39147 if (!this._key[0]) { this._precompute(); }
39148 if (hash) {
39149 this._h = hash._h.slice(0);
39150 this._buffer = hash._buffer.slice(0);
39151 this._length = hash._length;
39152 } else {
39153 this.reset();
39154 }
39155};
39156
39157/**
39158 * Hash a string or an array of words.
39159 * @static
39160 * @param {bitArray|String} data the data to hash.
39161 * @return {bitArray} The hash value, an array of 16 big-endian words.
39162 */
39163sjcl.hash.sha512.hash = function (data) {
39164 return (new sjcl.hash.sha512()).update(data).finalize();
39165};
39166
39167sjcl.hash.sha512.prototype = {
39168 /**
39169 * The hash's block size, in bits.
39170 * @constant
39171 */
39172 blockSize: 1024,
39173
39174 /**
39175 * Reset the hash state.
39176 * @return this
39177 */
39178 reset:function () {
39179 this._h = this._init.slice(0);
39180 this._buffer = [];
39181 this._length = 0;
39182 return this;
39183 },
39184
39185 /**
39186 * Input several words to the hash.
39187 * @param {bitArray|String} data the data to hash.
39188 * @return this
39189 */
39190 update: function (data) {
39191 if (typeof data === "string") {
39192 data = sjcl.codec.utf8String.toBits(data);
ebd8d4e8 39193 }
80c4dd2a
IC
39194 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
39195 ol = this._length,
39196 nl = this._length = ol + sjcl.bitArray.bitLength(data);
39197 for (i = 1024+ol & -1024; i <= nl; i+= 1024) {
39198 this._block(b.splice(0,32));
ebd8d4e8 39199 }
80c4dd2a
IC
39200 return this;
39201 },
39202
39203 /**
39204 * Complete hashing and output the hash value.
39205 * @return {bitArray} The hash value, an array of 16 big-endian words.
39206 */
39207 finalize:function () {
39208 var i, b = this._buffer, h = this._h;
39209
39210 // Round out and push the buffer
39211 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
39212
39213 // Round out the buffer to a multiple of 32 words, less the 4 length words.
39214 for (i = b.length + 4; i & 31; i++) {
39215 b.push(0);
ebd8d4e8 39216 }
80c4dd2a
IC
39217
39218 // append the length
39219 b.push(0);
39220 b.push(0);
39221 b.push(Math.floor(this._length / 0x100000000));
39222 b.push(this._length | 0);
39223
39224 while (b.length) {
39225 this._block(b.splice(0,32));
ebd8d4e8 39226 }
80c4dd2a
IC
39227
39228 this.reset();
39229 return h;
39230 },
39231
39232 /**
39233 * The SHA-512 initialization vector, to be precomputed.
39234 * @private
39235 */
39236 _init:[],
39237
39238 /**
39239 * Least significant 24 bits of SHA512 initialization values.
39240 *
39241 * Javascript only has 53 bits of precision, so we compute the 40 most
39242 * significant bits and add the remaining 24 bits as constants.
39243 *
39244 * @private
39245 */
39246 _initr: [ 0xbcc908, 0xcaa73b, 0x94f82b, 0x1d36f1, 0xe682d1, 0x3e6c1f, 0x41bd6b, 0x7e2179 ],
39247
39248 /*
39249 _init:
39250 [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,
39251 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179],
39252 */
39253
39254 /**
39255 * The SHA-512 hash key, to be precomputed.
39256 * @private
39257 */
39258 _key:[],
39259
39260 /**
39261 * Least significant 24 bits of SHA512 key values.
39262 * @private
39263 */
39264 _keyr:
39265 [0x28ae22, 0xef65cd, 0x4d3b2f, 0x89dbbc, 0x48b538, 0x05d019, 0x194f9b, 0x6d8118,
39266 0x030242, 0x706fbe, 0xe4b28c, 0xffb4e2, 0x7b896f, 0x1696b1, 0xc71235, 0x692694,
39267 0xf14ad2, 0x4f25e3, 0x8cd5b5, 0xac9c65, 0x2b0275, 0xa6e483, 0x41fbd4, 0x1153b5,
39268 0x66dfab, 0xb43210, 0xfb213f, 0xef0ee4, 0xa88fc2, 0x0aa725, 0x03826f, 0x0e6e70,
39269 0xd22ffc, 0x26c926, 0xc42aed, 0x95b3df, 0xaf63de, 0x77b2a8, 0xedaee6, 0x82353b,
39270 0xf10364, 0x423001, 0xf89791, 0x54be30, 0xef5218, 0x65a910, 0x71202a, 0xbbd1b8,
39271 0xd2d0c8, 0x41ab53, 0x8eeb99, 0x9b48a8, 0xc95a63, 0x418acb, 0x63e373, 0xb2b8a3,
39272 0xefb2fc, 0x172f60, 0xf0ab72, 0x6439ec, 0x631e28, 0x82bde9, 0xc67915, 0x72532b,
39273 0x26619c, 0xc0c207, 0xe0eb1e, 0x6ed178, 0x176fba, 0xc898a6, 0xf90dae, 0x1c471b,
39274 0x047d84, 0xc72493, 0xc9bebc, 0x100d4c, 0x3e42b6, 0x657e2a, 0xd6faec, 0x475817],
39275
39276 /*
39277 _key:
39278 [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,
39279 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,
39280 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,
39281 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,
39282 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,
39283 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,
39284 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,
39285 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,
39286 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,
39287 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,
39288 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,
39289 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,
39290 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,
39291 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,
39292 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,
39293 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,
39294 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,
39295 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,
39296 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,
39297 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817],
39298 */
39299
39300 /**
39301 * Function to precompute _init and _key.
39302 * @private
39303 */
39304 _precompute: function () {
39305 // XXX: This code is for precomputing the SHA256 constants, change for
39306 // SHA512 and re-enable.
39307 var i = 0, prime = 2, factor;
39308
39309 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
39310 function frac2(x) { return (x-Math.floor(x)) * 0x10000000000 & 0xff; }
39311
39312 outer: for (; i<80; prime++) {
39313 for (factor=2; factor*factor <= prime; factor++) {
39314 if (prime % factor === 0) {
39315 // not a prime
39316 continue outer;
ebd8d4e8 39317 }
80c4dd2a
IC
39318 }
39319
39320 if (i<8) {
39321 this._init[i*2] = frac(Math.pow(prime, 1/2));
39322 this._init[i*2+1] = (frac2(Math.pow(prime, 1/2)) << 24) | this._initr[i];
39323 }
39324 this._key[i*2] = frac(Math.pow(prime, 1/3));
39325 this._key[i*2+1] = (frac2(Math.pow(prime, 1/3)) << 24) | this._keyr[i];
39326 i++;
ebd8d4e8 39327 }
80c4dd2a
IC
39328 },
39329
39330 /**
39331 * Perform one cycle of SHA-512.
39332 * @param {bitArray} words one block of words.
39333 * @private
39334 */
39335 _block:function (words) {
39336 var i, wrh, wrl,
39337 w = words.slice(0),
39338 h = this._h,
39339 k = this._key,
39340 h0h = h[ 0], h0l = h[ 1], h1h = h[ 2], h1l = h[ 3],
39341 h2h = h[ 4], h2l = h[ 5], h3h = h[ 6], h3l = h[ 7],
39342 h4h = h[ 8], h4l = h[ 9], h5h = h[10], h5l = h[11],
39343 h6h = h[12], h6l = h[13], h7h = h[14], h7l = h[15];
39344
39345 // Working variables
39346 var ah = h0h, al = h0l, bh = h1h, bl = h1l,
39347 ch = h2h, cl = h2l, dh = h3h, dl = h3l,
39348 eh = h4h, el = h4l, fh = h5h, fl = h5l,
39349 gh = h6h, gl = h6l, hh = h7h, hl = h7l;
39350
39351 for (i=0; i<80; i++) {
39352 // load up the input word for this round
39353 if (i<16) {
39354 wrh = w[i * 2];
39355 wrl = w[i * 2 + 1];
39356 } else {
39357 // Gamma0
39358 var gamma0xh = w[(i-15) * 2];
39359 var gamma0xl = w[(i-15) * 2 + 1];
39360 var gamma0h =
39361 ((gamma0xl << 31) | (gamma0xh >>> 1)) ^
39362 ((gamma0xl << 24) | (gamma0xh >>> 8)) ^
39363 (gamma0xh >>> 7);
39364 var gamma0l =
39365 ((gamma0xh << 31) | (gamma0xl >>> 1)) ^
39366 ((gamma0xh << 24) | (gamma0xl >>> 8)) ^
39367 ((gamma0xh << 25) | (gamma0xl >>> 7));
39368
39369 // Gamma1
39370 var gamma1xh = w[(i-2) * 2];
39371 var gamma1xl = w[(i-2) * 2 + 1];
39372 var gamma1h =
39373 ((gamma1xl << 13) | (gamma1xh >>> 19)) ^
39374 ((gamma1xh << 3) | (gamma1xl >>> 29)) ^
39375 (gamma1xh >>> 6);
39376 var gamma1l =
39377 ((gamma1xh << 13) | (gamma1xl >>> 19)) ^
39378 ((gamma1xl << 3) | (gamma1xh >>> 29)) ^
39379 ((gamma1xh << 26) | (gamma1xl >>> 6));
39380
39381 // Shortcuts
39382 var wr7h = w[(i-7) * 2];
39383 var wr7l = w[(i-7) * 2 + 1];
39384
39385 var wr16h = w[(i-16) * 2];
39386 var wr16l = w[(i-16) * 2 + 1];
39387
39388 // W(round) = gamma0 + W(round - 7) + gamma1 + W(round - 16)
39389 wrl = gamma0l + wr7l;
39390 wrh = gamma0h + wr7h + ((wrl >>> 0) < (gamma0l >>> 0) ? 1 : 0);
39391 wrl += gamma1l;
39392 wrh += gamma1h + ((wrl >>> 0) < (gamma1l >>> 0) ? 1 : 0);
39393 wrl += wr16l;
39394 wrh += wr16h + ((wrl >>> 0) < (wr16l >>> 0) ? 1 : 0);
39395 }
39396
39397 w[i*2] = wrh |= 0;
39398 w[i*2 + 1] = wrl |= 0;
39399
39400 // Ch
39401 var chh = (eh & fh) ^ (~eh & gh);
39402 var chl = (el & fl) ^ (~el & gl);
39403
39404 // Maj
39405 var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);
39406 var majl = (al & bl) ^ (al & cl) ^ (bl & cl);
39407
39408 // Sigma0
39409 var sigma0h = ((al << 4) | (ah >>> 28)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));
39410 var sigma0l = ((ah << 4) | (al >>> 28)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));
39411
39412 // Sigma1
39413 var sigma1h = ((el << 18) | (eh >>> 14)) ^ ((el << 14) | (eh >>> 18)) ^ ((eh << 23) | (el >>> 9));
39414 var sigma1l = ((eh << 18) | (el >>> 14)) ^ ((eh << 14) | (el >>> 18)) ^ ((el << 23) | (eh >>> 9));
39415
39416 // K(round)
39417 var krh = k[i*2];
39418 var krl = k[i*2+1];
39419
39420 // t1 = h + sigma1 + ch + K(round) + W(round)
39421 var t1l = hl + sigma1l;
39422 var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);
39423 t1l += chl;
39424 t1h += chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);
39425 t1l += krl;
39426 t1h += krh + ((t1l >>> 0) < (krl >>> 0) ? 1 : 0);
39427 t1l = t1l + wrl|0; // FF32..FF34 perf issue https://bugzilla.mozilla.org/show_bug.cgi?id=1054972
39428 t1h += wrh + ((t1l >>> 0) < (wrl >>> 0) ? 1 : 0);
39429
39430 // t2 = sigma0 + maj
39431 var t2l = sigma0l + majl;
39432 var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);
39433
39434 // Update working variables
39435 hh = gh;
39436 hl = gl;
39437 gh = fh;
39438 gl = fl;
39439 fh = eh;
39440 fl = el;
39441 el = (dl + t1l) | 0;
39442 eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
39443 dh = ch;
39444 dl = cl;
39445 ch = bh;
39446 cl = bl;
39447 bh = ah;
39448 bl = al;
39449 al = (t1l + t2l) | 0;
39450 ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;
39451 }
39452
39453 // Intermediate hash
39454 h0l = h[1] = (h0l + al) | 0;
39455 h[0] = (h0h + ah + ((h0l >>> 0) < (al >>> 0) ? 1 : 0)) | 0;
39456 h1l = h[3] = (h1l + bl) | 0;
39457 h[2] = (h1h + bh + ((h1l >>> 0) < (bl >>> 0) ? 1 : 0)) | 0;
39458 h2l = h[5] = (h2l + cl) | 0;
39459 h[4] = (h2h + ch + ((h2l >>> 0) < (cl >>> 0) ? 1 : 0)) | 0;
39460 h3l = h[7] = (h3l + dl) | 0;
39461 h[6] = (h3h + dh + ((h3l >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;
39462 h4l = h[9] = (h4l + el) | 0;
39463 h[8] = (h4h + eh + ((h4l >>> 0) < (el >>> 0) ? 1 : 0)) | 0;
39464 h5l = h[11] = (h5l + fl) | 0;
39465 h[10] = (h5h + fh + ((h5l >>> 0) < (fl >>> 0) ? 1 : 0)) | 0;
39466 h6l = h[13] = (h6l + gl) | 0;
39467 h[12] = (h6h + gh + ((h6l >>> 0) < (gl >>> 0) ? 1 : 0)) | 0;
39468 h7l = h[15] = (h7l + hl) | 0;
39469 h[14] = (h7h + hh + ((h7l >>> 0) < (hl >>> 0) ? 1 : 0)) | 0;
39470 }
39471};
39472
39473
39474//// hmac.js
39475
39476/** @fileOverview HMAC implementation.
39477 *
39478 * @author Emily Stark
39479 * @author Mike Hamburg
39480 * @author Dan Boneh
39481 */
39482
39483/** HMAC with the specified hash function.
39484 * @constructor
39485 * @param {bitArray} key the key for HMAC.
39486 * @param {Object} [hash=sjcl.hash.sha256] The hash function to use.
39487 */
39488sjcl.misc.hmac = function (key, Hash) {
39489 this._hash = Hash = Hash || sjcl.hash.sha256;
39490 var exKey = [[],[]], i,
39491 bs = Hash.prototype.blockSize / 32;
39492 this._baseHash = [new Hash(), new Hash()];
39493
39494 if (key.length > bs) {
39495 key = Hash.hash(key);
39496 }
39497
39498 for (i=0; i<bs; i++) {
39499 exKey[0][i] = key[i]^0x36363636;
39500 exKey[1][i] = key[i]^0x5C5C5C5C;
39501 }
39502
39503 this._baseHash[0].update(exKey[0]);
39504 this._baseHash[1].update(exKey[1]);
39505 this._resultHash = new Hash(this._baseHash[0]);
39506};
39507
39508/** HMAC with the specified hash function. Also called encrypt since it's a prf.
39509 * @param {bitArray|String} data The data to mac.
39510 */
39511sjcl.misc.hmac.prototype.encrypt = sjcl.misc.hmac.prototype.mac = function (data) {
39512 if (!this._updated) {
39513 this.update(data);
39514 return this.digest(data);
39515 } else {
39516 throw new sjcl.exception.invalid("encrypt on already updated hmac called!");
39517 }
39518};
39519
39520sjcl.misc.hmac.prototype.reset = function () {
39521 this._resultHash = new this._hash(this._baseHash[0]);
39522 this._updated = false;
39523};
39524
39525sjcl.misc.hmac.prototype.update = function (data) {
39526 this._updated = true;
39527 this._resultHash.update(data);
39528};
39529
39530sjcl.misc.hmac.prototype.digest = function () {
39531 var w = this._resultHash.finalize(), result = new (this._hash)(this._baseHash[1]).update(w).finalize();
39532
39533 this.reset();
39534
39535 return result;
39536};
39537
39538
39539//// pbkdf2.js
39540
39541
39542/** @fileOverview Password-based key-derivation function, version 2.0.
39543 *
39544 * @author Emily Stark
39545 * @author Mike Hamburg
39546 * @author Dan Boneh
39547 */
39548
39549/** Password-Based Key-Derivation Function, version 2.0.
39550 *
39551 * Generate keys from passwords using PBKDF2-HMAC-SHA256.
39552 *
39553 * This is the method specified by RSA's PKCS #5 standard.
39554 *
39555 * @param {bitArray|String} password The password.
39556 * @param {bitArray|String} salt The salt. Should have lots of entropy.
39557 * @param {Number} [count=1000] The number of iterations. Higher numbers make the function slower but more secure.
39558 * @param {Number} [length] The length of the derived key. Defaults to the
39559 output size of the hash function.
39560 * @param {Object} [Prff=sjcl.misc.hmac] The pseudorandom function family.
39561 * @return {bitArray} the derived key.
39562 */
39563sjcl.misc.pbkdf2 = function (password, salt, count, length, Prff) {
39564 count = count || 1000;
39565
39566 if (length < 0 || count < 0) {
39567 throw sjcl.exception.invalid("invalid params to pbkdf2");
39568 }
39569
39570 if (typeof password === "string") {
39571 password = sjcl.codec.utf8String.toBits(password);
39572 }
39573
39574 if (typeof salt === "string") {
39575 salt = sjcl.codec.utf8String.toBits(salt);
39576 }
39577
39578 Prff = Prff || sjcl.misc.hmac;
39579
39580 var prf = new Prff(password),
39581 u, ui, i, j, k, out = [], b = sjcl.bitArray;
39582
39583 for (k = 1; 32 * out.length < (length || 1); k++) {
39584 u = ui = prf.encrypt(b.concat(salt,[k]));
39585
39586 for (i=1; i<count; i++) {
39587 ui = prf.encrypt(ui);
39588 for (j=0; j<ui.length; j++) {
39589 u[j] ^= ui[j];
39590 }
ebd8d4e8 39591 }
80c4dd2a
IC
39592
39593 out = out.concat(u);
39594 }
39595
39596 if (length) { out = b.clamp(out, length); }
39597
39598 return out;
39599};
39600
39601
39602//// sha256.js
39603
39604/** @fileOverview Javascript SHA-256 implementation.
39605 *
39606 * An older version of this implementation is available in the public
39607 * domain, but this one is (c) Emily Stark, Mike Hamburg, Dan Boneh,
39608 * Stanford University 2008-2010 and BSD-licensed for liability
39609 * reasons.
39610 *
39611 * Special thanks to Aldo Cortesi for pointing out several bugs in
39612 * this code.
39613 *
39614 * @author Emily Stark
39615 * @author Mike Hamburg
39616 * @author Dan Boneh
39617 */
39618
39619/**
39620 * Context for a SHA-256 operation in progress.
39621 * @constructor
39622 * @class Secure Hash Algorithm, 256 bits.
39623 */
39624sjcl.hash.sha256 = function (hash) {
39625 if (!this._key[0]) { this._precompute(); }
39626 if (hash) {
39627 this._h = hash._h.slice(0);
39628 this._buffer = hash._buffer.slice(0);
39629 this._length = hash._length;
39630 } else {
39631 this.reset();
39632 }
39633};
39634
39635/**
39636 * Hash a string or an array of words.
39637 * @static
39638 * @param {bitArray|String} data the data to hash.
39639 * @return {bitArray} The hash value, an array of 16 big-endian words.
39640 */
39641sjcl.hash.sha256.hash = function (data) {
39642 return (new sjcl.hash.sha256()).update(data).finalize();
39643};
39644
39645sjcl.hash.sha256.prototype = {
39646 /**
39647 * The hash's block size, in bits.
39648 * @constant
39649 */
39650 blockSize: 512,
39651
39652 /**
39653 * Reset the hash state.
39654 * @return this
39655 */
39656 reset:function () {
39657 this._h = this._init.slice(0);
39658 this._buffer = [];
39659 this._length = 0;
39660 return this;
39661 },
39662
39663 /**
39664 * Input several words to the hash.
39665 * @param {bitArray|String} data the data to hash.
39666 * @return this
39667 */
39668 update: function (data) {
39669 if (typeof data === "string") {
39670 data = sjcl.codec.utf8String.toBits(data);
39671 }
39672 var i, b = this._buffer = sjcl.bitArray.concat(this._buffer, data),
39673 ol = this._length,
39674 nl = this._length = ol + sjcl.bitArray.bitLength(data);
39675 for (i = 512+ol & -512; i <= nl; i+= 512) {
39676 this._block(b.splice(0,16));
ebd8d4e8 39677 }
3af2954a 39678 return this;
80c4dd2a
IC
39679 },
39680
39681 /**
39682 * Complete hashing and output the hash value.
39683 * @return {bitArray} The hash value, an array of 8 big-endian words.
39684 */
39685 finalize:function () {
39686 var i, b = this._buffer, h = this._h;
39687
39688 // Round out and push the buffer
39689 b = sjcl.bitArray.concat(b, [sjcl.bitArray.partial(1,1)]);
39690
39691 // Round out the buffer to a multiple of 16 words, less the 2 length words.
39692 for (i = b.length + 2; i & 15; i++) {
39693 b.push(0);
39694 }
39695
39696 // append the length
39697 b.push(Math.floor(this._length / 0x100000000));
39698 b.push(this._length | 0);
39699
39700 while (b.length) {
39701 this._block(b.splice(0,16));
39702 }
39703
39704 this.reset();
39705 return h;
39706 },
39707
39708 /**
39709 * The SHA-256 initialization vector, to be precomputed.
39710 * @private
39711 */
39712 _init:[],
39713 /*
39714 _init:[0x6a09e667,0xbb67ae85,0x3c6ef372,0xa54ff53a,0x510e527f,0x9b05688c,0x1f83d9ab,0x5be0cd19],
39715 */
39716
39717 /**
39718 * The SHA-256 hash key, to be precomputed.
39719 * @private
39720 */
39721 _key:[],
39722 /*
39723 _key:
39724 [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
39725 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
39726 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
39727 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
39728 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
39729 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
39730 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
39731 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2],
39732 */
39733
39734
39735 /**
39736 * Function to precompute _init and _key.
39737 * @private
39738 */
39739 _precompute: function () {
39740 var i = 0, prime = 2, factor;
39741
39742 function frac(x) { return (x-Math.floor(x)) * 0x100000000 | 0; }
39743
39744 outer: for (; i<64; prime++) {
39745 for (factor=2; factor*factor <= prime; factor++) {
39746 if (prime % factor === 0) {
39747 // not a prime
39748 continue outer;
ebd8d4e8 39749 }
80c4dd2a
IC
39750 }
39751
39752 if (i<8) {
39753 this._init[i] = frac(Math.pow(prime, 1/2));
39754 }
39755 this._key[i] = frac(Math.pow(prime, 1/3));
39756 i++;
ebd8d4e8 39757 }
80c4dd2a
IC
39758 },
39759
39760 /**
39761 * Perform one cycle of SHA-256.
39762 * @param {bitArray} words one block of words.
39763 * @private
39764 */
39765 _block:function (words) {
39766 var i, tmp, a, b,
39767 w = words.slice(0),
39768 h = this._h,
39769 k = this._key,
39770 h0 = h[0], h1 = h[1], h2 = h[2], h3 = h[3],
39771 h4 = h[4], h5 = h[5], h6 = h[6], h7 = h[7];
39772
39773 /* Rationale for placement of |0 :
39774 * If a value can overflow is original 32 bits by a factor of more than a few
39775 * million (2^23 ish), there is a possibility that it might overflow the
39776 * 53-bit mantissa and lose precision.
39777 *
39778 * To avoid this, we clamp back to 32 bits by |'ing with 0 on any value that
39779 * propagates around the loop, and on the hash state h[]. I don't believe
39780 * that the clamps on h4 and on h0 are strictly necessary, but it's close
39781 * (for h4 anyway), and better safe than sorry.
39782 *
39783 * The clamps on h[] are necessary for the output to be correct even in the
39784 * common case and for short inputs.
39785 */
39786 for (i=0; i<64; i++) {
39787 // load up the input word for this round
39788 if (i<16) {
39789 tmp = w[i];
39790 } else {
39791 a = w[(i+1 ) & 15];
39792 b = w[(i+14) & 15];
39793 tmp = w[i&15] = ((a>>>7 ^ a>>>18 ^ a>>>3 ^ a<<25 ^ a<<14) +
39794 (b>>>17 ^ b>>>19 ^ b>>>10 ^ b<<15 ^ b<<13) +
39795 w[i&15] + w[(i+9) & 15]) | 0;
39796 }
39797
39798 tmp = (tmp + h7 + (h4>>>6 ^ h4>>>11 ^ h4>>>25 ^ h4<<26 ^ h4<<21 ^ h4<<7) + (h6 ^ h4&(h5^h6)) + k[i]); // | 0;
39799
39800 // shift register
39801 h7 = h6; h6 = h5; h5 = h4;
39802 h4 = h3 + tmp | 0;
39803 h3 = h2; h2 = h1; h1 = h0;
39804
39805 h0 = (tmp + ((h1&h2) ^ (h3&(h1^h2))) + (h1>>>2 ^ h1>>>13 ^ h1>>>22 ^ h1<<30 ^ h1<<19 ^ h1<<10)) | 0;
39806 }
39807
39808 h[0] = h[0]+h0 | 0;
39809 h[1] = h[1]+h1 | 0;
39810 h[2] = h[2]+h2 | 0;
39811 h[3] = h[3]+h3 | 0;
39812 h[4] = h[4]+h4 | 0;
39813 h[5] = h[5]+h5 | 0;
39814 h[6] = h[6]+h6 | 0;
39815 h[7] = h[7]+h7 | 0;
39816 }
39817};
ea87f1d3
IC
39818</script>
39819 <script>// An extremely basic translation library
39820//
39821// Example usage:
39822//
39823// Set some html to be translated. Do this using the 'data-translate' attribute:
39824//
39825// <div data-translate>Test</div>
39826// <div data-translate-html><em>keep em tag</em></div>
52da415f
IC
39827// <input data-translate-placeholder placeholder="Example placeholder">
39828// <span data-translate-title title="Example title"></span>
ea87f1d3
IC
39829//
39830// Obtain all the phrases to be translated via js debug console:
39831//
39832// Translate.phrasesAsJson();
39833//
39834// Use that template to translate the phrases into another language.
39835// Leave the key the same. Change the value to the new language.
39836//
39837// Create a js file to load the new phrases. In this example for Spanish,
39838// es.js will contain the following code:
39839//
39840// Translate.loadForeignPhrases("es", {
39841// "Test": "Test in Spanish",
39842// "<em>keep em tag</em>": "<em>keep em tag in Spanish</em>",
52da415f
IC
39843// "Example placeholder": "Example placeholder in Spanish"
39844// "Example title": "Example title in Spanish"
ea87f1d3
IC
39845// });
39846//
39847// In your UI put a listener for clicking on the Spanish button:
39848//
39849// mySpanishButton.addEventListener("click", function() {
39850// Translate.setLanguage("es");
39851// });
39852// myEnglishButton.addEventListener("click", function() {
39853// Translate.setLanguage("en");
39854// });
39855
39856Translate = new (function() {
39857
39858 var defaultLanguage = "en";
39859
39860 var allPhrases = {};
39861 allPhrases[defaultLanguage] = {};
39862
39863 // Node types
39864
39865 var text = {
39866 selector: "[data-translate]",
39867 getKey: function() {
39868 return this.textContent.trim().replace(/\s+/g, " ");
39869 },
39870 setPhrase: function(p) {
39871 this.textContent = p;
39872 },
39873 }
39874
39875 var html = {
39876 selector: "[data-translate-html]",
39877 getKey: function() {
39878 return this.innerHTML.trim().replace(/\s+/g, " ");
39879 },
39880 setPhrase: function(p) {
39881 this.innerHTML = p;
39882 },
39883 }
39884
39885 var placeholder = {
39886 selector: "[data-translate-placeholder]",
39887 getKey: function() {
39888 return this.getAttribute("placeholder").trim().replace(/\s+/g, " ");
39889 },
39890 setPhrase: function(p) {
39891 this.setAttribute("placeholder", p);
39892 },
39893 }
39894
52da415f
IC
39895 var title = {
39896 selector: "[data-translate-title]",
39897 getKey: function() {
39898 return this.getAttribute("title").trim().replace(/\s+/g, " ");
39899 },
39900 setPhrase: function(p) {
39901 this.setAttribute("title", p);
39902 },
39903 }
39904
ea87f1d3
IC
39905 // Get elements to be translated
39906 var allEls = getEls(text)
39907 .concat(getEls(html))
52da415f
IC
39908 .concat(getEls(placeholder))
39909 .concat(getEls(title));
ea87f1d3
IC
39910
39911 // Provides access to phrases from a non-default language.
39912 // See phrases_en.js for example usage.
39913 this.loadForeignPhrases = function(language, phrases) {
39914 allPhrases[language] = phrases;
39915 }
39916
39917 // Displays a different language, eg "en" or "fr"
39918 this.setLanguage = function(language) {
39919 for (var i=0; i<allEls.length; i++) {
39920 var el = allEls[i];
39921 var key = el.key;
39922 if (!(language in allPhrases)) {
39923 console.log(language + " not in allPhrases");
39924 return;
39925 }
39926 if (!(key in allPhrases[language])) {
39927 console.log(language + " does not contain phrase: " + key);
39928 return;
39929 }
39930 var phrase = allPhrases[language][key];
39931 el.setPhrase(phrase);
39932 }
39933 }
39934
39935 // Converts the phrases to a key-pair json file.
39936 // This is a good way to export phrases for use in translation tools.
39937 this.phrasesAsJson = function(language) {
39938 var keys = [];
39939 for (var i=0; i<allEls.length; i++) {
39940 var el = allEls[i];
39941 var key = el.key;
39942 keys.push(key);
39943 }
39944 keys.sort();
39945 var output = {};
39946 for (var i=0; i<keys.length; i++) {
39947 var key = keys[i];
39948 var translated = "";
39949 if (language in allPhrases && key in allPhrases[language]) {
39950 translated = allPhrases[language][key];
39951 }
39952 output[key] = translated;
39953 }
39954 return JSON.stringify(output, null, 2);
39955 }
39956
39957 function getEls(nodeType) {
39958 var nodes = document.querySelectorAll(nodeType.selector);
39959 var els = [];
39960 for (var i=0; i<nodes.length; i++) {
39961 var node = nodes[i];
39962 node.getKey = nodeType.getKey;
39963 node.setPhrase = nodeType.setPhrase;
39964 node.key = node.getKey();
39965 allPhrases[defaultLanguage][node.key] = node.key;
39966 els.push(node);
39967 }
39968 return els;
39969 }
39970
39971})();
39972</script>
39973 <script>Translate.loadForeignPhrases("en",
39974{
39975 "<code>m/44'/0'/0'/0</code> generates public addresses": "<code>m/44'/0'/0'/0</code> generates public addresses",
39976 "<code>m/44'/0'/0'/1</code> generates change addresses": "<code>m/44'/0'/0'/1</code> generates change addresses",
39977 "<code>m/44'/0'/0'</code> generates extended keys for import / export": "<code>m/44'/0'/0'</code> generates extended keys for import / export",
39978 "<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).",
39979 "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards": "Accepts binary, base 6, 6-sided dice, base 10, hexadecimal, cards",
39980 "Account": "Account",
39981 "Address": "Address",
39982 "Alternatively, download the file from the repository": "Alternatively, download the file from the repository",
39983 "BIP32 Derivation Path": "BIP32 Derivation Path",
39984 "BIP32 Extended Key": "BIP32 Extended Key",
39985 "BIP32 Extended Key (addresses only)": "BIP32 Extended Key (addresses only)",
39986 "BIP32 Root Key": "BIP32 Root Key",
39987 "BIP39 Mnemonic": "BIP39 Mnemonic",
39988 "BIP39 Passphrase (optional)": "BIP39 Passphrase (optional)",
39989 "BIP39 Seed": "BIP39 Seed",
39990 "Base 10": "Base 10",
39991 "Base 6": "Base 6",
39992 "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.",
39993 "Binary": "Binary",
39994 "Bitcoin Core": "Bitcoin Core",
39995 "Bits Per Event": "Bits Per Event",
39996 "Block Explorers": "Block Explorers",
39997 "Can be used with": "Can be used with",
39998 "Card": "Card",
39999 "Coin": "Coin",
40000 "Dice": "Dice",
40001 "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.",
40002 "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.",
40003 "Entropy": "Entropy",
40004 "Entropy Type": "Entropy Type",
40005 "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.",
40006 "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>.",
40007 "Event Count": "Event Count",
40008 "External / Internal": "External / Internal",
40009 "Filtered Entropy": "Filtered Entropy",
40010 "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>",
40011 "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>.",
40012 "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>.",
40013 "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>",
40014 "For more info see the BIP32 spec": "For more info see the BIP32 spec",
40015 "From entropy length (3 words per 32 bits)": "From entropy length (3 words per 32 bits)",
40016 "Generate a random mnemonic, or enter your own below": "Generate a random mnemonic, or enter your own below",
40017 "Get the source code from the repository": "Get the source code from the repository",
40018 "Hex": "Hex",
40019 "Hierarchical Deterministic Wallets": "Hierarchical Deterministic Wallets",
40020 "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.",
40021 "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.",
40022 "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.",
40023 "Libraries": "Libraries",
40024 "Mnemonic Language": "Mnemonic Language",
40025 "Mnemonic Length": "Mnemonic Length",
40026 "Mnemonic code for generating deterministic keys": "Mnemonic code for generating deterministic keys",
40027 "More info": "More info",
40028 "Multi-Account Hierarchy for Deterministic Wallets": "Multi-Account Hierarchy for Deterministic Wallets",
40029 "Mycelium Wallet": "Mycelium Wallet",
40030 "Note these addreses are derived from the BIP32 Extended Key": "Note these addreses are derived from the BIP32 Extended Key",
40031 "Offline Usage": "Offline Usage",
40032 "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.",
40033 "Path": "Path",
40034 "Private Key": "Private Key",
40035 "Private Keys": "Private Keys",
40036 "Public Key": "Public Key",
40037 "Purpose": "Purpose",
40038 "Raw Binary": "Raw Binary",
40039 "Read more": "Read more",
40040 "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>",
40041 "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>",
40042 "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>",
40043 "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>",
40044 "Show": "Show",
40045 "Show more rows": "Show more rows",
40046 "Strength": "Strength",
40047 "Supply my own source of entropy": "Supply my own source of entropy",
40048 "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.",
40049 "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>.",
40050 "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.",
40051 "This project is 100% open-source code": "This project is 100% open-source code",
40052 "Toggle": "Toggle",
40053 "Total Bits": "Total Bits",
40054 "Use hardened addresses": "Use hardened addresses",
40055 "Use path <code>m/0'/0'</code> with hardened addresses.": "Use path <code>m/0'/0'</code> with hardened addresses.",
40056 "Use path <code>m/44'/0'/0'</code>.": "Use path <code>m/44'/0'/0'</code>.",
40057 "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>.",
40058 "Valid entropy values include:": "Valid entropy values include:",
40059 "Warning": "Warning",
40060 "Word Count": "Word Count",
40061 "You are not a good source of entropy.": "You are not a good source of entropy.",
40062 "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).",
40063 "You can use this tool without having to be online.": "You can use this tool without having to be online.",
40064 "words": "words"
40065}
40066);
dc55c6b0 40067</script>
ab78acc6 40068 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
3af2954a 40069WORDLISTS["english"] = [
ebd8d4e8
IC
40070"abandon","ability","able","about","above","absent","absorb","abstract","absurd","abuse",
40071"access","accident","account","accuse","achieve","acid","acoustic","acquire","across","act",
40072"action","actor","actress","actual","adapt","add","addict","address","adjust","admit",
40073"adult","advance","advice","aerobic","affair","afford","afraid","again","age","agent",
40074"agree","ahead","aim","air","airport","aisle","alarm","album","alcohol","alert",
40075"alien","all","alley","allow","almost","alone","alpha","already","also","alter",
40076"always","amateur","amazing","among","amount","amused","analyst","anchor","ancient","anger",
40077"angle","angry","animal","ankle","announce","annual","another","answer","antenna","antique",
40078"anxiety","any","apart","apology","appear","apple","approve","april","arch","arctic",
40079"area","arena","argue","arm","armed","armor","army","around","arrange","arrest",
40080"arrive","arrow","art","artefact","artist","artwork","ask","aspect","assault","asset",
40081"assist","assume","asthma","athlete","atom","attack","attend","attitude","attract","auction",
40082"audit","august","aunt","author","auto","autumn","average","avocado","avoid","awake",
40083"aware","away","awesome","awful","awkward","axis","baby","bachelor","bacon","badge",
40084"bag","balance","balcony","ball","bamboo","banana","banner","bar","barely","bargain",
40085"barrel","base","basic","basket","battle","beach","bean","beauty","because","become",
40086"beef","before","begin","behave","behind","believe","below","belt","bench","benefit",
40087"best","betray","better","between","beyond","bicycle","bid","bike","bind","biology",
40088"bird","birth","bitter","black","blade","blame","blanket","blast","bleak","bless",
40089"blind","blood","blossom","blouse","blue","blur","blush","board","boat","body",
40090"boil","bomb","bone","bonus","book","boost","border","boring","borrow","boss",
40091"bottom","bounce","box","boy","bracket","brain","brand","brass","brave","bread",
40092"breeze","brick","bridge","brief","bright","bring","brisk","broccoli","broken","bronze",
40093"broom","brother","brown","brush","bubble","buddy","budget","buffalo","build","bulb",
40094"bulk","bullet","bundle","bunker","burden","burger","burst","bus","business","busy",
40095"butter","buyer","buzz","cabbage","cabin","cable","cactus","cage","cake","call",
40096"calm","camera","camp","can","canal","cancel","candy","cannon","canoe","canvas",
40097"canyon","capable","capital","captain","car","carbon","card","cargo","carpet","carry",
40098"cart","case","cash","casino","castle","casual","cat","catalog","catch","category",
40099"cattle","caught","cause","caution","cave","ceiling","celery","cement","census","century",
40100"cereal","certain","chair","chalk","champion","change","chaos","chapter","charge","chase",
40101"chat","cheap","check","cheese","chef","cherry","chest","chicken","chief","child",
40102"chimney","choice","choose","chronic","chuckle","chunk","churn","cigar","cinnamon","circle",
40103"citizen","city","civil","claim","clap","clarify","claw","clay","clean","clerk",
40104"clever","click","client","cliff","climb","clinic","clip","clock","clog","close",
40105"cloth","cloud","clown","club","clump","cluster","clutch","coach","coast","coconut",
40106"code","coffee","coil","coin","collect","color","column","combine","come","comfort",
40107"comic","common","company","concert","conduct","confirm","congress","connect","consider","control",
40108"convince","cook","cool","copper","copy","coral","core","corn","correct","cost",
40109"cotton","couch","country","couple","course","cousin","cover","coyote","crack","cradle",
40110"craft","cram","crane","crash","crater","crawl","crazy","cream","credit","creek",
40111"crew","cricket","crime","crisp","critic","crop","cross","crouch","crowd","crucial",
40112"cruel","cruise","crumble","crunch","crush","cry","crystal","cube","culture","cup",
40113"cupboard","curious","current","curtain","curve","cushion","custom","cute","cycle","dad",
40114"damage","damp","dance","danger","daring","dash","daughter","dawn","day","deal",
40115"debate","debris","decade","december","decide","decline","decorate","decrease","deer","defense",
40116"define","defy","degree","delay","deliver","demand","demise","denial","dentist","deny",
40117"depart","depend","deposit","depth","deputy","derive","describe","desert","design","desk",
40118"despair","destroy","detail","detect","develop","device","devote","diagram","dial","diamond",
40119"diary","dice","diesel","diet","differ","digital","dignity","dilemma","dinner","dinosaur",
40120"direct","dirt","disagree","discover","disease","dish","dismiss","disorder","display","distance",
40121"divert","divide","divorce","dizzy","doctor","document","dog","doll","dolphin","domain",
40122"donate","donkey","donor","door","dose","double","dove","draft","dragon","drama",
40123"drastic","draw","dream","dress","drift","drill","drink","drip","drive","drop",
40124"drum","dry","duck","dumb","dune","during","dust","dutch","duty","dwarf",
40125"dynamic","eager","eagle","early","earn","earth","easily","east","easy","echo",
40126"ecology","economy","edge","edit","educate","effort","egg","eight","either","elbow",
40127"elder","electric","elegant","element","elephant","elevator","elite","else","embark","embody",
40128"embrace","emerge","emotion","employ","empower","empty","enable","enact","end","endless",
40129"endorse","enemy","energy","enforce","engage","engine","enhance","enjoy","enlist","enough",
40130"enrich","enroll","ensure","enter","entire","entry","envelope","episode","equal","equip",
40131"era","erase","erode","erosion","error","erupt","escape","essay","essence","estate",
40132"eternal","ethics","evidence","evil","evoke","evolve","exact","example","excess","exchange",
40133"excite","exclude","excuse","execute","exercise","exhaust","exhibit","exile","exist","exit",
40134"exotic","expand","expect","expire","explain","expose","express","extend","extra","eye",
40135"eyebrow","fabric","face","faculty","fade","faint","faith","fall","false","fame",
40136"family","famous","fan","fancy","fantasy","farm","fashion","fat","fatal","father",
40137"fatigue","fault","favorite","feature","february","federal","fee","feed","feel","female",
40138"fence","festival","fetch","fever","few","fiber","fiction","field","figure","file",
40139"film","filter","final","find","fine","finger","finish","fire","firm","first",
40140"fiscal","fish","fit","fitness","fix","flag","flame","flash","flat","flavor",
40141"flee","flight","flip","float","flock","floor","flower","fluid","flush","fly",
40142"foam","focus","fog","foil","fold","follow","food","foot","force","forest",
40143"forget","fork","fortune","forum","forward","fossil","foster","found","fox","fragile",
40144"frame","frequent","fresh","friend","fringe","frog","front","frost","frown","frozen",
40145"fruit","fuel","fun","funny","furnace","fury","future","gadget","gain","galaxy",
40146"gallery","game","gap","garage","garbage","garden","garlic","garment","gas","gasp",
40147"gate","gather","gauge","gaze","general","genius","genre","gentle","genuine","gesture",
40148"ghost","giant","gift","giggle","ginger","giraffe","girl","give","glad","glance",
40149"glare","glass","glide","glimpse","globe","gloom","glory","glove","glow","glue",
40150"goat","goddess","gold","good","goose","gorilla","gospel","gossip","govern","gown",
40151"grab","grace","grain","grant","grape","grass","gravity","great","green","grid",
40152"grief","grit","grocery","group","grow","grunt","guard","guess","guide","guilt",
40153"guitar","gun","gym","habit","hair","half","hammer","hamster","hand","happy",
40154"harbor","hard","harsh","harvest","hat","have","hawk","hazard","head","health",
40155"heart","heavy","hedgehog","height","hello","helmet","help","hen","hero","hidden",
40156"high","hill","hint","hip","hire","history","hobby","hockey","hold","hole",
40157"holiday","hollow","home","honey","hood","hope","horn","horror","horse","hospital",
40158"host","hotel","hour","hover","hub","huge","human","humble","humor","hundred",
40159"hungry","hunt","hurdle","hurry","hurt","husband","hybrid","ice","icon","idea",
40160"identify","idle","ignore","ill","illegal","illness","image","imitate","immense","immune",
40161"impact","impose","improve","impulse","inch","include","income","increase","index","indicate",
40162"indoor","industry","infant","inflict","inform","inhale","inherit","initial","inject","injury",
40163"inmate","inner","innocent","input","inquiry","insane","insect","inside","inspire","install",
40164"intact","interest","into","invest","invite","involve","iron","island","isolate","issue",
40165"item","ivory","jacket","jaguar","jar","jazz","jealous","jeans","jelly","jewel",
40166"job","join","joke","journey","joy","judge","juice","jump","jungle","junior",
40167"junk","just","kangaroo","keen","keep","ketchup","key","kick","kid","kidney",
40168"kind","kingdom","kiss","kit","kitchen","kite","kitten","kiwi","knee","knife",
40169"knock","know","lab","label","labor","ladder","lady","lake","lamp","language",
40170"laptop","large","later","latin","laugh","laundry","lava","law","lawn","lawsuit",
40171"layer","lazy","leader","leaf","learn","leave","lecture","left","leg","legal",
40172"legend","leisure","lemon","lend","length","lens","leopard","lesson","letter","level",
40173"liar","liberty","library","license","life","lift","light","like","limb","limit",
40174"link","lion","liquid","list","little","live","lizard","load","loan","lobster",
40175"local","lock","logic","lonely","long","loop","lottery","loud","lounge","love",
40176"loyal","lucky","luggage","lumber","lunar","lunch","luxury","lyrics","machine","mad",
40177"magic","magnet","maid","mail","main","major","make","mammal","man","manage",
40178"mandate","mango","mansion","manual","maple","marble","march","margin","marine","market",
40179"marriage","mask","mass","master","match","material","math","matrix","matter","maximum",
40180"maze","meadow","mean","measure","meat","mechanic","medal","media","melody","melt",
40181"member","memory","mention","menu","mercy","merge","merit","merry","mesh","message",
40182"metal","method","middle","midnight","milk","million","mimic","mind","minimum","minor",
40183"minute","miracle","mirror","misery","miss","mistake","mix","mixed","mixture","mobile",
40184"model","modify","mom","moment","monitor","monkey","monster","month","moon","moral",
40185"more","morning","mosquito","mother","motion","motor","mountain","mouse","move","movie",
40186"much","muffin","mule","multiply","muscle","museum","mushroom","music","must","mutual",
40187"myself","mystery","myth","naive","name","napkin","narrow","nasty","nation","nature",
40188"near","neck","need","negative","neglect","neither","nephew","nerve","nest","net",
40189"network","neutral","never","news","next","nice","night","noble","noise","nominee",
40190"noodle","normal","north","nose","notable","note","nothing","notice","novel","now",
40191"nuclear","number","nurse","nut","oak","obey","object","oblige","obscure","observe",
40192"obtain","obvious","occur","ocean","october","odor","off","offer","office","often",
40193"oil","okay","old","olive","olympic","omit","once","one","onion","online",
40194"only","open","opera","opinion","oppose","option","orange","orbit","orchard","order",
40195"ordinary","organ","orient","original","orphan","ostrich","other","outdoor","outer","output",
40196"outside","oval","oven","over","own","owner","oxygen","oyster","ozone","pact",
40197"paddle","page","pair","palace","palm","panda","panel","panic","panther","paper",
40198"parade","parent","park","parrot","party","pass","patch","path","patient","patrol",
40199"pattern","pause","pave","payment","peace","peanut","pear","peasant","pelican","pen",
40200"penalty","pencil","people","pepper","perfect","permit","person","pet","phone","photo",
40201"phrase","physical","piano","picnic","picture","piece","pig","pigeon","pill","pilot",
40202"pink","pioneer","pipe","pistol","pitch","pizza","place","planet","plastic","plate",
40203"play","please","pledge","pluck","plug","plunge","poem","poet","point","polar",
40204"pole","police","pond","pony","pool","popular","portion","position","possible","post",
40205"potato","pottery","poverty","powder","power","practice","praise","predict","prefer","prepare",
40206"present","pretty","prevent","price","pride","primary","print","priority","prison","private",
40207"prize","problem","process","produce","profit","program","project","promote","proof","property",
40208"prosper","protect","proud","provide","public","pudding","pull","pulp","pulse","pumpkin",
40209"punch","pupil","puppy","purchase","purity","purpose","purse","push","put","puzzle",
40210"pyramid","quality","quantum","quarter","question","quick","quit","quiz","quote","rabbit",
40211"raccoon","race","rack","radar","radio","rail","rain","raise","rally","ramp",
40212"ranch","random","range","rapid","rare","rate","rather","raven","raw","razor",
40213"ready","real","reason","rebel","rebuild","recall","receive","recipe","record","recycle",
40214"reduce","reflect","reform","refuse","region","regret","regular","reject","relax","release",
40215"relief","rely","remain","remember","remind","remove","render","renew","rent","reopen",
40216"repair","repeat","replace","report","require","rescue","resemble","resist","resource","response",
40217"result","retire","retreat","return","reunion","reveal","review","reward","rhythm","rib",
40218"ribbon","rice","rich","ride","ridge","rifle","right","rigid","ring","riot",
40219"ripple","risk","ritual","rival","river","road","roast","robot","robust","rocket",
40220"romance","roof","rookie","room","rose","rotate","rough","round","route","royal",
40221"rubber","rude","rug","rule","run","runway","rural","sad","saddle","sadness",
40222"safe","sail","salad","salmon","salon","salt","salute","same","sample","sand",
40223"satisfy","satoshi","sauce","sausage","save","say","scale","scan","scare","scatter",
40224"scene","scheme","school","science","scissors","scorpion","scout","scrap","screen","script",
40225"scrub","sea","search","season","seat","second","secret","section","security","seed",
40226"seek","segment","select","sell","seminar","senior","sense","sentence","series","service",
40227"session","settle","setup","seven","shadow","shaft","shallow","share","shed","shell",
40228"sheriff","shield","shift","shine","ship","shiver","shock","shoe","shoot","shop",
40229"short","shoulder","shove","shrimp","shrug","shuffle","shy","sibling","sick","side",
40230"siege","sight","sign","silent","silk","silly","silver","similar","simple","since",
40231"sing","siren","sister","situate","six","size","skate","sketch","ski","skill",
40232"skin","skirt","skull","slab","slam","sleep","slender","slice","slide","slight",
40233"slim","slogan","slot","slow","slush","small","smart","smile","smoke","smooth",
40234"snack","snake","snap","sniff","snow","soap","soccer","social","sock","soda",
40235"soft","solar","soldier","solid","solution","solve","someone","song","soon","sorry",
40236"sort","soul","sound","soup","source","south","space","spare","spatial","spawn",
40237"speak","special","speed","spell","spend","sphere","spice","spider","spike","spin",
40238"spirit","split","spoil","sponsor","spoon","sport","spot","spray","spread","spring",
40239"spy","square","squeeze","squirrel","stable","stadium","staff","stage","stairs","stamp",
40240"stand","start","state","stay","steak","steel","stem","step","stereo","stick",
40241"still","sting","stock","stomach","stone","stool","story","stove","strategy","street",
40242"strike","strong","struggle","student","stuff","stumble","style","subject","submit","subway",
40243"success","such","sudden","suffer","sugar","suggest","suit","summer","sun","sunny",
40244"sunset","super","supply","supreme","sure","surface","surge","surprise","surround","survey",
40245"suspect","sustain","swallow","swamp","swap","swarm","swear","sweet","swift","swim",
40246"swing","switch","sword","symbol","symptom","syrup","system","table","tackle","tag",
40247"tail","talent","talk","tank","tape","target","task","taste","tattoo","taxi",
40248"teach","team","tell","ten","tenant","tennis","tent","term","test","text",
40249"thank","that","theme","then","theory","there","they","thing","this","thought",
40250"three","thrive","throw","thumb","thunder","ticket","tide","tiger","tilt","timber",
40251"time","tiny","tip","tired","tissue","title","toast","tobacco","today","toddler",
40252"toe","together","toilet","token","tomato","tomorrow","tone","tongue","tonight","tool",
40253"tooth","top","topic","topple","torch","tornado","tortoise","toss","total","tourist",
40254"toward","tower","town","toy","track","trade","traffic","tragic","train","transfer",
40255"trap","trash","travel","tray","treat","tree","trend","trial","tribe","trick",
40256"trigger","trim","trip","trophy","trouble","truck","true","truly","trumpet","trust",
40257"truth","try","tube","tuition","tumble","tuna","tunnel","turkey","turn","turtle",
40258"twelve","twenty","twice","twin","twist","two","type","typical","ugly","umbrella",
40259"unable","unaware","uncle","uncover","under","undo","unfair","unfold","unhappy","uniform",
40260"unique","unit","universe","unknown","unlock","until","unusual","unveil","update","upgrade",
40261"uphold","upon","upper","upset","urban","urge","usage","use","used","useful",
40262"useless","usual","utility","vacant","vacuum","vague","valid","valley","valve","van",
40263"vanish","vapor","various","vast","vault","vehicle","velvet","vendor","venture","venue",
40264"verb","verify","version","very","vessel","veteran","viable","vibrant","vicious","victory",
40265"video","view","village","vintage","violin","virtual","virus","visa","visit","visual",
40266"vital","vivid","vocal","voice","void","volcano","volume","vote","voyage","wage",
40267"wagon","wait","walk","wall","walnut","want","warfare","warm","warrior","wash",
40268"wasp","waste","water","wave","way","wealth","weapon","wear","weasel","weather",
40269"web","wedding","weekend","weird","welcome","west","wet","whale","what","wheat",
40270"wheel","when","where","whip","whisper","wide","width","wife","wild","will",
40271"win","window","wine","wing","wink","winner","winter","wire","wisdom","wise",
40272"wish","witness","wolf","woman","wonder","wood","wool","word","work","world",
40273"worry","worth","wrap","wreck","wrestle","wrist","write","wrong","yard","year",
40274"yellow","you","young","youth","zebra","zero","zone","zoo"]
0515eeec
IC
40275</script>
40276 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
40277WORDLISTS["japanese"] = [
40278"あいこくしん", "あいさつ", "あいだ", "あおぞら", "あかちゃん", "あきる", "あけがた", "あける", "あこがれる", "あさい",
40279"あさひ", "あしあと", "あじわう", "あずかる", "あずき", "あそぶ", "あたえる", "あたためる", "あたりまえ", "あたる",
40280"あつい", "あつかう", "あっしゅく", "あつまり", "あつめる", "あてな", "あてはまる", "あひる", "あぶら", "あぶる",
40281"あふれる", "あまい", "あまど", "あまやかす", "あまり", "あみもの", "あめりか", "あやまる", "あゆむ", "あらいぐま",
40282"あらし", "あらすじ", "あらためる", "あらゆる", "あらわす", "ありがとう", "あわせる", "あわてる", "あんい", "あんがい",
40283"あんこ", "あんぜん", "あんてい", "あんない", "あんまり", "いいだす", "いおん", "いがい", "いがく", "いきおい",
40284"いきなり", "いきもの", "いきる", "いくじ", "いくぶん", "いけばな", "いけん", "いこう", "いこく", "いこつ",
40285"いさましい", "いさん", "いしき", "いじゅう", "いじょう", "いじわる", "いずみ", "いずれ", "いせい", "いせえび",
40286"いせかい", "いせき", "いぜん", "いそうろう", "いそがしい", "いだい", "いだく", "いたずら", "いたみ", "いたりあ",
40287"いちおう", "いちじ", "いちど", "いちば", "いちぶ", "いちりゅう", "いつか", "いっしゅん", "いっせい", "いっそう",
40288"いったん", "いっち", "いってい", "いっぽう", "いてざ", "いてん", "いどう", "いとこ", "いない", "いなか",
40289"いねむり", "いのち", "いのる", "いはつ", "いばる", "いはん", "いびき", "いひん", "いふく", "いへん",
40290"いほう", "いみん", "いもうと", "いもたれ", "いもり", "いやがる", "いやす", "いよかん", "いよく", "いらい",
40291"いらすと", "いりぐち", "いりょう", "いれい", "いれもの", "いれる", "いろえんぴつ", "いわい", "いわう", "いわかん",
40292"いわば", "いわゆる", "いんげんまめ", "いんさつ", "いんしょう", "いんよう", "うえき", "うえる", "うおざ", "うがい",
40293"うかぶ", "うかべる", "うきわ", "うくらいな", "うくれれ", "うけたまわる", "うけつけ", "うけとる", "うけもつ", "うける",
40294"うごかす", "うごく", "うこん", "うさぎ", "うしなう", "うしろがみ", "うすい", "うすぎ", "うすぐらい", "うすめる",
40295"うせつ", "うちあわせ", "うちがわ", "うちき", "うちゅう", "うっかり", "うつくしい", "うったえる", "うつる", "うどん",
40296"うなぎ", "うなじ", "うなずく", "うなる", "うねる", "うのう", "うぶげ", "うぶごえ", "うまれる", "うめる",
40297"うもう", "うやまう", "うよく", "うらがえす", "うらぐち", "うらない", "うりあげ", "うりきれ", "うるさい", "うれしい",
40298"うれゆき", "うれる", "うろこ", "うわき", "うわさ", "うんこう", "うんちん", "うんてん", "うんどう", "えいえん",
40299"えいが", "えいきょう", "えいご", "えいせい", "えいぶん", "えいよう", "えいわ", "えおり", "えがお", "えがく",
40300"えきたい", "えくせる", "えしゃく", "えすて", "えつらん", "えのぐ", "えほうまき", "えほん", "えまき", "えもじ",
40301"えもの", "えらい", "えらぶ", "えりあ", "えんえん", "えんかい", "えんぎ", "えんげき", "えんしゅう", "えんぜつ",
40302"えんそく", "えんちょう", "えんとつ", "おいかける", "おいこす", "おいしい", "おいつく", "おうえん", "おうさま", "おうじ",
40303"おうせつ", "おうたい", "おうふく", "おうべい", "おうよう", "おえる", "おおい", "おおう", "おおどおり", "おおや",
40304"おおよそ", "おかえり", "おかず", "おがむ", "おかわり", "おぎなう", "おきる", "おくさま", "おくじょう", "おくりがな",
40305"おくる", "おくれる", "おこす", "おこなう", "おこる", "おさえる", "おさない", "おさめる", "おしいれ", "おしえる",
40306"おじぎ", "おじさん", "おしゃれ", "おそらく", "おそわる", "おたがい", "おたく", "おだやか", "おちつく", "おっと",
40307"おつり", "おでかけ", "おとしもの", "おとなしい", "おどり", "おどろかす", "おばさん", "おまいり", "おめでとう", "おもいで",
40308"おもう", "おもたい", "おもちゃ", "おやつ", "おやゆび", "およぼす", "おらんだ", "おろす", "おんがく", "おんけい",
40309"おんしゃ", "おんせん", "おんだん", "おんちゅう", "おんどけい", "かあつ", "かいが", "がいき", "がいけん", "がいこう",
40310"かいさつ", "かいしゃ", "かいすいよく", "かいぜん", "かいぞうど", "かいつう", "かいてん", "かいとう", "かいふく", "がいへき",
40311"かいほう", "かいよう", "がいらい", "かいわ", "かえる", "かおり", "かかえる", "かがく", "かがし", "かがみ",
40312"かくご", "かくとく", "かざる", "がぞう", "かたい", "かたち", "がちょう", "がっきゅう", "がっこう", "がっさん",
40313"がっしょう", "かなざわし", "かのう", "がはく", "かぶか", "かほう", "かほご", "かまう", "かまぼこ", "かめれおん",
40314"かゆい", "かようび", "からい", "かるい", "かろう", "かわく", "かわら", "がんか", "かんけい", "かんこう",
40315"かんしゃ", "かんそう", "かんたん", "かんち", "がんばる", "きあい", "きあつ", "きいろ", "ぎいん", "きうい",
40316"きうん", "きえる", "きおう", "きおく", "きおち", "きおん", "きかい", "きかく", "きかんしゃ", "ききて",
40317"きくばり", "きくらげ", "きけんせい", "きこう", "きこえる", "きこく", "きさい", "きさく", "きさま", "きさらぎ",
40318"ぎじかがく", "ぎしき", "ぎじたいけん", "ぎじにってい", "ぎじゅつしゃ", "きすう", "きせい", "きせき", "きせつ", "きそう",
40319"きぞく", "きぞん", "きたえる", "きちょう", "きつえん", "ぎっちり", "きつつき", "きつね", "きてい", "きどう",
40320"きどく", "きない", "きなが", "きなこ", "きぬごし", "きねん", "きのう", "きのした", "きはく", "きびしい",
40321"きひん", "きふく", "きぶん", "きぼう", "きほん", "きまる", "きみつ", "きむずかしい", "きめる", "きもだめし",
40322"きもち", "きもの", "きゃく", "きやく", "ぎゅうにく", "きよう", "きょうりゅう", "きらい", "きらく", "きりん",
40323"きれい", "きれつ", "きろく", "ぎろん", "きわめる", "ぎんいろ", "きんかくじ", "きんじょ", "きんようび", "ぐあい",
40324"くいず", "くうかん", "くうき", "くうぐん", "くうこう", "ぐうせい", "くうそう", "ぐうたら", "くうふく", "くうぼ",
40325"くかん", "くきょう", "くげん", "ぐこう", "くさい", "くさき", "くさばな", "くさる", "くしゃみ", "くしょう",
40326"くすのき", "くすりゆび", "くせげ", "くせん", "ぐたいてき", "くださる", "くたびれる", "くちこみ", "くちさき", "くつした",
40327"ぐっすり", "くつろぐ", "くとうてん", "くどく", "くなん", "くねくね", "くのう", "くふう", "くみあわせ", "くみたてる",
40328"くめる", "くやくしょ", "くらす", "くらべる", "くるま", "くれる", "くろう", "くわしい", "ぐんかん", "ぐんしょく",
40329"ぐんたい", "ぐんて", "けあな", "けいかく", "けいけん", "けいこ", "けいさつ", "げいじゅつ", "けいたい", "げいのうじん",
40330"けいれき", "けいろ", "けおとす", "けおりもの", "げきか", "げきげん", "げきだん", "げきちん", "げきとつ", "げきは",
40331"げきやく", "げこう", "げこくじょう", "げざい", "けさき", "げざん", "けしき", "けしごむ", "けしょう", "げすと",
40332"けたば", "けちゃっぷ", "けちらす", "けつあつ", "けつい", "けつえき", "けっこん", "けつじょ", "けっせき", "けってい",
40333"けつまつ", "げつようび", "げつれい", "けつろん", "げどく", "けとばす", "けとる", "けなげ", "けなす", "けなみ",
40334"けぬき", "げねつ", "けねん", "けはい", "げひん", "けぶかい", "げぼく", "けまり", "けみかる", "けむし",
40335"けむり", "けもの", "けらい", "けろけろ", "けわしい", "けんい", "けんえつ", "けんお", "けんか", "げんき",
40336"けんげん", "けんこう", "けんさく", "けんしゅう", "けんすう", "げんそう", "けんちく", "けんてい", "けんとう", "けんない",
40337"けんにん", "げんぶつ", "けんま", "けんみん", "けんめい", "けんらん", "けんり", "こあくま", "こいぬ", "こいびと",
40338"ごうい", "こうえん", "こうおん", "こうかん", "ごうきゅう", "ごうけい", "こうこう", "こうさい", "こうじ", "こうすい",
40339"ごうせい", "こうそく", "こうたい", "こうちゃ", "こうつう", "こうてい", "こうどう", "こうない", "こうはい", "ごうほう",
40340"ごうまん", "こうもく", "こうりつ", "こえる", "こおり", "ごかい", "ごがつ", "ごかん", "こくご", "こくさい",
40341"こくとう", "こくない", "こくはく", "こぐま", "こけい", "こける", "ここのか", "こころ", "こさめ", "こしつ",
40342"こすう", "こせい", "こせき", "こぜん", "こそだて", "こたい", "こたえる", "こたつ", "こちょう", "こっか",
40343"こつこつ", "こつばん", "こつぶ", "こてい", "こてん", "ことがら", "ことし", "ことば", "ことり", "こなごな",
40344"こねこね", "このまま", "このみ", "このよ", "ごはん", "こひつじ", "こふう", "こふん", "こぼれる", "ごまあぶら",
40345"こまかい", "ごますり", "こまつな", "こまる", "こむぎこ", "こもじ", "こもち", "こもの", "こもん", "こやく",
40346"こやま", "こゆう", "こゆび", "こよい", "こよう", "こりる", "これくしょん", "ころっけ", "こわもて", "こわれる",
40347"こんいん", "こんかい", "こんき", "こんしゅう", "こんすい", "こんだて", "こんとん", "こんなん", "こんびに", "こんぽん",
40348"こんまけ", "こんや", "こんれい", "こんわく", "ざいえき", "さいかい", "さいきん", "ざいげん", "ざいこ", "さいしょ",
40349"さいせい", "ざいたく", "ざいちゅう", "さいてき", "ざいりょう", "さうな", "さかいし", "さがす", "さかな", "さかみち",
40350"さがる", "さぎょう", "さくし", "さくひん", "さくら", "さこく", "さこつ", "さずかる", "ざせき", "さたん",
40351"さつえい", "ざつおん", "ざっか", "ざつがく", "さっきょく", "ざっし", "さつじん", "ざっそう", "さつたば", "さつまいも",
40352"さてい", "さといも", "さとう", "さとおや", "さとし", "さとる", "さのう", "さばく", "さびしい", "さべつ",
40353"さほう", "さほど", "さます", "さみしい", "さみだれ", "さむけ", "さめる", "さやえんどう", "さゆう", "さよう",
40354"さよく", "さらだ", "ざるそば", "さわやか", "さわる", "さんいん", "さんか", "さんきゃく", "さんこう", "さんさい",
40355"ざんしょ", "さんすう", "さんせい", "さんそ", "さんち", "さんま", "さんみ", "さんらん", "しあい", "しあげ",
40356"しあさって", "しあわせ", "しいく", "しいん", "しうち", "しえい", "しおけ", "しかい", "しかく", "じかん",
40357"しごと", "しすう", "じだい", "したうけ", "したぎ", "したて", "したみ", "しちょう", "しちりん", "しっかり",
40358"しつじ", "しつもん", "してい", "してき", "してつ", "じてん", "じどう", "しなぎれ", "しなもの", "しなん",
40359"しねま", "しねん", "しのぐ", "しのぶ", "しはい", "しばかり", "しはつ", "しはらい", "しはん", "しひょう",
40360"しふく", "じぶん", "しへい", "しほう", "しほん", "しまう", "しまる", "しみん", "しむける", "じむしょ",
40361"しめい", "しめる", "しもん", "しゃいん", "しゃうん", "しゃおん", "じゃがいも", "しやくしょ", "しゃくほう", "しゃけん",
40362"しゃこ", "しゃざい", "しゃしん", "しゃせん", "しゃそう", "しゃたい", "しゃちょう", "しゃっきん", "じゃま", "しゃりん",
40363"しゃれい", "じゆう", "じゅうしょ", "しゅくはく", "じゅしん", "しゅっせき", "しゅみ", "しゅらば", "じゅんばん", "しょうかい",
40364"しょくたく", "しょっけん", "しょどう", "しょもつ", "しらせる", "しらべる", "しんか", "しんこう", "じんじゃ", "しんせいじ",
40365"しんちく", "しんりん", "すあげ", "すあし", "すあな", "ずあん", "すいえい", "すいか", "すいとう", "ずいぶん",
40366"すいようび", "すうがく", "すうじつ", "すうせん", "すおどり", "すきま", "すくう", "すくない", "すける", "すごい",
40367"すこし", "ずさん", "すずしい", "すすむ", "すすめる", "すっかり", "ずっしり", "ずっと", "すてき", "すてる",
40368"すねる", "すのこ", "すはだ", "すばらしい", "ずひょう", "ずぶぬれ", "すぶり", "すふれ", "すべて", "すべる",
40369"ずほう", "すぼん", "すまい", "すめし", "すもう", "すやき", "すらすら", "するめ", "すれちがう", "すろっと",
40370"すわる", "すんぜん", "すんぽう", "せあぶら", "せいかつ", "せいげん", "せいじ", "せいよう", "せおう", "せかいかん",
40371"せきにん", "せきむ", "せきゆ", "せきらんうん", "せけん", "せこう", "せすじ", "せたい", "せたけ", "せっかく",
40372"せっきゃく", "ぜっく", "せっけん", "せっこつ", "せっさたくま", "せつぞく", "せつだん", "せつでん", "せっぱん", "せつび",
40373"せつぶん", "せつめい", "せつりつ", "せなか", "せのび", "せはば", "せびろ", "せぼね", "せまい", "せまる",
40374"せめる", "せもたれ", "せりふ", "ぜんあく", "せんい", "せんえい", "せんか", "せんきょ", "せんく", "せんげん",
40375"ぜんご", "せんさい", "せんしゅ", "せんすい", "せんせい", "せんぞ", "せんたく", "せんちょう", "せんてい", "せんとう",
40376"せんぬき", "せんねん", "せんぱい", "ぜんぶ", "ぜんぽう", "せんむ", "せんめんじょ", "せんもん", "せんやく", "せんゆう",
40377"せんよう", "ぜんら", "ぜんりゃく", "せんれい", "せんろ", "そあく", "そいとげる", "そいね", "そうがんきょう", "そうき",
40378"そうご", "そうしん", "そうだん", "そうなん", "そうび", "そうめん", "そうり", "そえもの", "そえん", "そがい",
40379"そげき", "そこう", "そこそこ", "そざい", "そしな", "そせい", "そせん", "そそぐ", "そだてる", "そつう",
40380"そつえん", "そっかん", "そつぎょう", "そっけつ", "そっこう", "そっせん", "そっと", "そとがわ", "そとづら", "そなえる",
40381"そなた", "そふぼ", "そぼく", "そぼろ", "そまつ", "そまる", "そむく", "そむりえ", "そめる", "そもそも",
40382"そよかぜ", "そらまめ", "そろう", "そんかい", "そんけい", "そんざい", "そんしつ", "そんぞく", "そんちょう", "ぞんび",
40383"ぞんぶん", "そんみん", "たあい", "たいいん", "たいうん", "たいえき", "たいおう", "だいがく", "たいき", "たいぐう",
40384"たいけん", "たいこ", "たいざい", "だいじょうぶ", "だいすき", "たいせつ", "たいそう", "だいたい", "たいちょう", "たいてい",
40385"だいどころ", "たいない", "たいねつ", "たいのう", "たいはん", "だいひょう", "たいふう", "たいへん", "たいほ", "たいまつばな",
40386"たいみんぐ", "たいむ", "たいめん", "たいやき", "たいよう", "たいら", "たいりょく", "たいる", "たいわん", "たうえ",
40387"たえる", "たおす", "たおる", "たおれる", "たかい", "たかね", "たきび", "たくさん", "たこく", "たこやき",
40388"たさい", "たしざん", "だじゃれ", "たすける", "たずさわる", "たそがれ", "たたかう", "たたく", "ただしい", "たたみ",
40389"たちばな", "だっかい", "だっきゃく", "だっこ", "だっしゅつ", "だったい", "たてる", "たとえる", "たなばた", "たにん",
40390"たぬき", "たのしみ", "たはつ", "たぶん", "たべる", "たぼう", "たまご", "たまる", "だむる", "ためいき",
40391"ためす", "ためる", "たもつ", "たやすい", "たよる", "たらす", "たりきほんがん", "たりょう", "たりる", "たると",
40392"たれる", "たれんと", "たろっと", "たわむれる", "だんあつ", "たんい", "たんおん", "たんか", "たんき", "たんけん",
40393"たんご", "たんさん", "たんじょうび", "だんせい", "たんそく", "たんたい", "だんち", "たんてい", "たんとう", "だんな",
40394"たんにん", "だんねつ", "たんのう", "たんぴん", "だんぼう", "たんまつ", "たんめい", "だんれつ", "だんろ", "だんわ",
40395"ちあい", "ちあん", "ちいき", "ちいさい", "ちえん", "ちかい", "ちから", "ちきゅう", "ちきん", "ちけいず",
40396"ちけん", "ちこく", "ちさい", "ちしき", "ちしりょう", "ちせい", "ちそう", "ちたい", "ちたん", "ちちおや",
40397"ちつじょ", "ちてき", "ちてん", "ちぬき", "ちぬり", "ちのう", "ちひょう", "ちへいせん", "ちほう", "ちまた",
40398"ちみつ", "ちみどろ", "ちめいど", "ちゃんこなべ", "ちゅうい", "ちゆりょく", "ちょうし", "ちょさくけん", "ちらし", "ちらみ",
40399"ちりがみ", "ちりょう", "ちるど", "ちわわ", "ちんたい", "ちんもく", "ついか", "ついたち", "つうか", "つうじょう",
40400"つうはん", "つうわ", "つかう", "つかれる", "つくね", "つくる", "つけね", "つける", "つごう", "つたえる",
40401"つづく", "つつじ", "つつむ", "つとめる", "つながる", "つなみ", "つねづね", "つのる", "つぶす", "つまらない",
40402"つまる", "つみき", "つめたい", "つもり", "つもる", "つよい", "つるぼ", "つるみく", "つわもの", "つわり",
40403"てあし", "てあて", "てあみ", "ていおん", "ていか", "ていき", "ていけい", "ていこく", "ていさつ", "ていし",
40404"ていせい", "ていたい", "ていど", "ていねい", "ていひょう", "ていへん", "ていぼう", "てうち", "ておくれ", "てきとう",
40405"てくび", "でこぼこ", "てさぎょう", "てさげ", "てすり", "てそう", "てちがい", "てちょう", "てつがく", "てつづき",
40406"でっぱ", "てつぼう", "てつや", "でぬかえ", "てぬき", "てぬぐい", "てのひら", "てはい", "てぶくろ", "てふだ",
40407"てほどき", "てほん", "てまえ", "てまきずし", "てみじか", "てみやげ", "てらす", "てれび", "てわけ", "てわたし",
40408"でんあつ", "てんいん", "てんかい", "てんき", "てんぐ", "てんけん", "てんごく", "てんさい", "てんし", "てんすう",
40409"でんち", "てんてき", "てんとう", "てんない", "てんぷら", "てんぼうだい", "てんめつ", "てんらんかい", "でんりょく", "でんわ",
40410"どあい", "といれ", "どうかん", "とうきゅう", "どうぐ", "とうし", "とうむぎ", "とおい", "とおか", "とおく",
40411"とおす", "とおる", "とかい", "とかす", "ときおり", "ときどき", "とくい", "とくしゅう", "とくてん", "とくに",
40412"とくべつ", "とけい", "とける", "とこや", "とさか", "としょかん", "とそう", "とたん", "とちゅう", "とっきゅう",
40413"とっくん", "とつぜん", "とつにゅう", "とどける", "ととのえる", "とない", "となえる", "となり", "とのさま", "とばす",
40414"どぶがわ", "とほう", "とまる", "とめる", "ともだち", "ともる", "どようび", "とらえる", "とんかつ", "どんぶり",
40415"ないかく", "ないこう", "ないしょ", "ないす", "ないせん", "ないそう", "なおす", "ながい", "なくす", "なげる",
40416"なこうど", "なさけ", "なたでここ", "なっとう", "なつやすみ", "ななおし", "なにごと", "なにもの", "なにわ", "なのか",
40417"なふだ", "なまいき", "なまえ", "なまみ", "なみだ", "なめらか", "なめる", "なやむ", "ならう", "ならび",
40418"ならぶ", "なれる", "なわとび", "なわばり", "にあう", "にいがた", "にうけ", "におい", "にかい", "にがて",
40419"にきび", "にくしみ", "にくまん", "にげる", "にさんかたんそ", "にしき", "にせもの", "にちじょう", "にちようび", "にっか",
40420"にっき", "にっけい", "にっこう", "にっさん", "にっしょく", "にっすう", "にっせき", "にってい", "になう", "にほん",
40421"にまめ", "にもつ", "にやり", "にゅういん", "にりんしゃ", "にわとり", "にんい", "にんか", "にんき", "にんげん",
40422"にんしき", "にんずう", "にんそう", "にんたい", "にんち", "にんてい", "にんにく", "にんぷ", "にんまり", "にんむ",
40423"にんめい", "にんよう", "ぬいくぎ", "ぬかす", "ぬぐいとる", "ぬぐう", "ぬくもり", "ぬすむ", "ぬまえび", "ぬめり",
40424"ぬらす", "ぬんちゃく", "ねあげ", "ねいき", "ねいる", "ねいろ", "ねぐせ", "ねくたい", "ねくら", "ねこぜ",
40425"ねこむ", "ねさげ", "ねすごす", "ねそべる", "ねだん", "ねつい", "ねっしん", "ねつぞう", "ねったいぎょ", "ねぶそく",
40426"ねふだ", "ねぼう", "ねほりはほり", "ねまき", "ねまわし", "ねみみ", "ねむい", "ねむたい", "ねもと", "ねらう",
40427"ねわざ", "ねんいり", "ねんおし", "ねんかん", "ねんきん", "ねんぐ", "ねんざ", "ねんし", "ねんちゃく", "ねんど",
40428"ねんぴ", "ねんぶつ", "ねんまつ", "ねんりょう", "ねんれい", "のいず", "のおづま", "のがす", "のきなみ", "のこぎり",
40429"のこす", "のこる", "のせる", "のぞく", "のぞむ", "のたまう", "のちほど", "のっく", "のばす", "のはら",
40430"のべる", "のぼる", "のみもの", "のやま", "のらいぬ", "のらねこ", "のりもの", "のりゆき", "のれん", "のんき",
40431"ばあい", "はあく", "ばあさん", "ばいか", "ばいく", "はいけん", "はいご", "はいしん", "はいすい", "はいせん",
40432"はいそう", "はいち", "ばいばい", "はいれつ", "はえる", "はおる", "はかい", "ばかり", "はかる", "はくしゅ",
40433"はけん", "はこぶ", "はさみ", "はさん", "はしご", "ばしょ", "はしる", "はせる", "ぱそこん", "はそん",
40434"はたん", "はちみつ", "はつおん", "はっかく", "はづき", "はっきり", "はっくつ", "はっけん", "はっこう", "はっさん",
40435"はっしん", "はったつ", "はっちゅう", "はってん", "はっぴょう", "はっぽう", "はなす", "はなび", "はにかむ", "はぶらし",
40436"はみがき", "はむかう", "はめつ", "はやい", "はやし", "はらう", "はろうぃん", "はわい", "はんい", "はんえい",
40437"はんおん", "はんかく", "はんきょう", "ばんぐみ", "はんこ", "はんしゃ", "はんすう", "はんだん", "ぱんち", "ぱんつ",
40438"はんてい", "はんとし", "はんのう", "はんぱ", "はんぶん", "はんぺん", "はんぼうき", "はんめい", "はんらん", "はんろん",
40439"ひいき", "ひうん", "ひえる", "ひかく", "ひかり", "ひかる", "ひかん", "ひくい", "ひけつ", "ひこうき",
40440"ひこく", "ひさい", "ひさしぶり", "ひさん", "びじゅつかん", "ひしょ", "ひそか", "ひそむ", "ひたむき", "ひだり",
40441"ひたる", "ひつぎ", "ひっこし", "ひっし", "ひつじゅひん", "ひっす", "ひつぜん", "ぴったり", "ぴっちり", "ひつよう",
40442"ひてい", "ひとごみ", "ひなまつり", "ひなん", "ひねる", "ひはん", "ひびく", "ひひょう", "ひほう", "ひまわり",
40443"ひまん", "ひみつ", "ひめい", "ひめじし", "ひやけ", "ひやす", "ひよう", "びょうき", "ひらがな", "ひらく",
40444"ひりつ", "ひりょう", "ひるま", "ひるやすみ", "ひれい", "ひろい", "ひろう", "ひろき", "ひろゆき", "ひんかく",
40445"ひんけつ", "ひんこん", "ひんしゅ", "ひんそう", "ぴんち", "ひんぱん", "びんぼう", "ふあん", "ふいうち", "ふうけい",
40446"ふうせん", "ぷうたろう", "ふうとう", "ふうふ", "ふえる", "ふおん", "ふかい", "ふきん", "ふくざつ", "ふくぶくろ",
40447"ふこう", "ふさい", "ふしぎ", "ふじみ", "ふすま", "ふせい", "ふせぐ", "ふそく", "ぶたにく", "ふたん",
40448"ふちょう", "ふつう", "ふつか", "ふっかつ", "ふっき", "ふっこく", "ぶどう", "ふとる", "ふとん", "ふのう",
40449"ふはい", "ふひょう", "ふへん", "ふまん", "ふみん", "ふめつ", "ふめん", "ふよう", "ふりこ", "ふりる",
40450"ふるい", "ふんいき", "ぶんがく", "ぶんぐ", "ふんしつ", "ぶんせき", "ふんそう", "ぶんぽう", "へいあん", "へいおん",
40451"へいがい", "へいき", "へいげん", "へいこう", "へいさ", "へいしゃ", "へいせつ", "へいそ", "へいたく", "へいてん",
40452"へいねつ", "へいわ", "へきが", "へこむ", "べにいろ", "べにしょうが", "へらす", "へんかん", "べんきょう", "べんごし",
40453"へんさい", "へんたい", "べんり", "ほあん", "ほいく", "ぼうぎょ", "ほうこく", "ほうそう", "ほうほう", "ほうもん",
40454"ほうりつ", "ほえる", "ほおん", "ほかん", "ほきょう", "ぼきん", "ほくろ", "ほけつ", "ほけん", "ほこう",
40455"ほこる", "ほしい", "ほしつ", "ほしゅ", "ほしょう", "ほせい", "ほそい", "ほそく", "ほたて", "ほたる",
40456"ぽちぶくろ", "ほっきょく", "ほっさ", "ほったん", "ほとんど", "ほめる", "ほんい", "ほんき", "ほんけ", "ほんしつ",
40457"ほんやく", "まいにち", "まかい", "まかせる", "まがる", "まける", "まこと", "まさつ", "まじめ", "ますく",
40458"まぜる", "まつり", "まとめ", "まなぶ", "まぬけ", "まねく", "まほう", "まもる", "まゆげ", "まよう",
40459"まろやか", "まわす", "まわり", "まわる", "まんが", "まんきつ", "まんぞく", "まんなか", "みいら", "みうち",
40460"みえる", "みがく", "みかた", "みかん", "みけん", "みこん", "みじかい", "みすい", "みすえる", "みせる",
40461"みっか", "みつかる", "みつける", "みてい", "みとめる", "みなと", "みなみかさい", "みねらる", "みのう", "みのがす",
40462"みほん", "みもと", "みやげ", "みらい", "みりょく", "みわく", "みんか", "みんぞく", "むいか", "むえき",
40463"むえん", "むかい", "むかう", "むかえ", "むかし", "むぎちゃ", "むける", "むげん", "むさぼる", "むしあつい",
40464"むしば", "むじゅん", "むしろ", "むすう", "むすこ", "むすぶ", "むすめ", "むせる", "むせん", "むちゅう",
40465"むなしい", "むのう", "むやみ", "むよう", "むらさき", "むりょう", "むろん", "めいあん", "めいうん", "めいえん",
40466"めいかく", "めいきょく", "めいさい", "めいし", "めいそう", "めいぶつ", "めいれい", "めいわく", "めぐまれる", "めざす",
40467"めした", "めずらしい", "めだつ", "めまい", "めやす", "めんきょ", "めんせき", "めんどう", "もうしあげる", "もうどうけん",
40468"もえる", "もくし", "もくてき", "もくようび", "もちろん", "もどる", "もらう", "もんく", "もんだい", "やおや",
40469"やける", "やさい", "やさしい", "やすい", "やすたろう", "やすみ", "やせる", "やそう", "やたい", "やちん",
40470"やっと", "やっぱり", "やぶる", "やめる", "ややこしい", "やよい", "やわらかい", "ゆうき", "ゆうびんきょく", "ゆうべ",
40471"ゆうめい", "ゆけつ", "ゆしゅつ", "ゆせん", "ゆそう", "ゆたか", "ゆちゃく", "ゆでる", "ゆにゅう", "ゆびわ",
40472"ゆらい", "ゆれる", "ようい", "ようか", "ようきゅう", "ようじ", "ようす", "ようちえん", "よかぜ", "よかん",
40473"よきん", "よくせい", "よくぼう", "よけい", "よごれる", "よさん", "よしゅう", "よそう", "よそく", "よっか",
40474"よてい", "よどがわく", "よねつ", "よやく", "よゆう", "よろこぶ", "よろしい", "らいう", "らくがき", "らくご",
40475"らくさつ", "らくだ", "らしんばん", "らせん", "らぞく", "らたい", "らっか", "られつ", "りえき", "りかい",
40476"りきさく", "りきせつ", "りくぐん", "りくつ", "りけん", "りこう", "りせい", "りそう", "りそく", "りてん",
40477"りねん", "りゆう", "りゅうがく", "りよう", "りょうり", "りょかん", "りょくちゃ", "りょこう", "りりく", "りれき",
40478"りろん", "りんご", "るいけい", "るいさい", "るいじ", "るいせき", "るすばん", "るりがわら", "れいかん", "れいぎ",
40479"れいせい", "れいぞうこ", "れいとう", "れいぼう", "れきし", "れきだい", "れんあい", "れんけい", "れんこん", "れんさい",
40480"れんしゅう", "れんぞく", "れんらく", "ろうか", "ろうご", "ろうじん", "ろうそく", "ろくが", "ろこつ", "ろじうら",
40481"ろしゅつ", "ろせん", "ろてん", "ろめん", "ろれつ", "ろんぎ", "ろんぱ", "ろんぶん", "ろんり", "わかす",
40482"わかめ", "わかやま", "わかれる", "わしつ", "わじまし", "わすれもの", "わらう", "われる"]
40483</script>
40484 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
40485WORDLISTS["spanish"] = [
40486"ábaco", "abdomen", "abeja", "abierto", "abogado", "abono", "aborto", "abrazo", "abrir", "abuelo",
40487"abuso", "acabar", "academia", "acceso", "acción", "aceite", "acelga", "acento", "aceptar", "ácido",
40488"aclarar", "acné", "acoger", "acoso", "activo", "acto", "actriz", "actuar", "acudir", "acuerdo",
40489"acusar", "adicto", "admitir", "adoptar", "adorno", "aduana", "adulto", "aéreo", "afectar", "afición",
40490"afinar", "afirmar", "ágil", "agitar", "agonía", "agosto", "agotar", "agregar", "agrio", "agua",
40491"agudo", "águila", "aguja", "ahogo", "ahorro", "aire", "aislar", "ajedrez", "ajeno", "ajuste",
40492"alacrán", "alambre", "alarma", "alba", "álbum", "alcalde", "aldea", "alegre", "alejar", "alerta",
40493"aleta", "alfiler", "alga", "algodón", "aliado", "aliento", "alivio", "alma", "almeja", "almíbar",
40494"altar", "alteza", "altivo", "alto", "altura", "alumno", "alzar", "amable", "amante", "amapola",
40495"amargo", "amasar", "ámbar", "ámbito", "ameno", "amigo", "amistad", "amor", "amparo", "amplio",
40496"ancho", "anciano", "ancla", "andar", "andén", "anemia", "ángulo", "anillo", "ánimo", "anís",
40497"anotar", "antena", "antiguo", "antojo", "anual", "anular", "anuncio", "añadir", "añejo", "año",
40498"apagar", "aparato", "apetito", "apio", "aplicar", "apodo", "aporte", "apoyo", "aprender", "aprobar",
40499"apuesta", "apuro", "arado", "araña", "arar", "árbitro", "árbol", "arbusto", "archivo", "arco",
40500"arder", "ardilla", "arduo", "área", "árido", "aries", "armonía", "arnés", "aroma", "arpa",
40501"arpón", "arreglo", "arroz", "arruga", "arte", "artista", "asa", "asado", "asalto", "ascenso",
40502"asegurar", "aseo", "asesor", "asiento", "asilo", "asistir", "asno", "asombro", "áspero", "astilla",
40503"astro", "astuto", "asumir", "asunto", "atajo", "ataque", "atar", "atento", "ateo", "ático",
40504"atleta", "átomo", "atraer", "atroz", "atún", "audaz", "audio", "auge", "aula", "aumento",
40505"ausente", "autor", "aval", "avance", "avaro", "ave", "avellana", "avena", "avestruz", "avión",
40506"aviso", "ayer", "ayuda", "ayuno", "azafrán", "azar", "azote", "azúcar", "azufre", "azul",
40507"baba", "babor", "bache", "bahía", "baile", "bajar", "balanza", "balcón", "balde", "bambú",
40508"banco", "banda", "baño", "barba", "barco", "barniz", "barro", "báscula", "bastón", "basura",
40509"batalla", "batería", "batir", "batuta", "baúl", "bazar", "bebé", "bebida", "bello", "besar",
40510"beso", "bestia", "bicho", "bien", "bingo", "blanco", "bloque", "blusa", "boa", "bobina",
40511"bobo", "boca", "bocina", "boda", "bodega", "boina", "bola", "bolero", "bolsa", "bomba",
40512"bondad", "bonito", "bono", "bonsái", "borde", "borrar", "bosque", "bote", "botín", "bóveda",
40513"bozal", "bravo", "brazo", "brecha", "breve", "brillo", "brinco", "brisa", "broca", "broma",
40514"bronce", "brote", "bruja", "brusco", "bruto", "buceo", "bucle", "bueno", "buey", "bufanda",
40515"bufón", "búho", "buitre", "bulto", "burbuja", "burla", "burro", "buscar", "butaca", "buzón",
40516"caballo", "cabeza", "cabina", "cabra", "cacao", "cadáver", "cadena", "caer", "café", "caída",
40517"caimán", "caja", "cajón", "cal", "calamar", "calcio", "caldo", "calidad", "calle", "calma",
40518"calor", "calvo", "cama", "cambio", "camello", "camino", "campo", "cáncer", "candil", "canela",
40519"canguro", "canica", "canto", "caña", "cañón", "caoba", "caos", "capaz", "capitán", "capote",
40520"captar", "capucha", "cara", "carbón", "cárcel", "careta", "carga", "cariño", "carne", "carpeta",
40521"carro", "carta", "casa", "casco", "casero", "caspa", "castor", "catorce", "catre", "caudal",
40522"causa", "cazo", "cebolla", "ceder", "cedro", "celda", "célebre", "celoso", "célula", "cemento",
40523"ceniza", "centro", "cerca", "cerdo", "cereza", "cero", "cerrar", "certeza", "césped", "cetro",
40524"chacal", "chaleco", "champú", "chancla", "chapa", "charla", "chico", "chiste", "chivo", "choque",
40525"choza", "chuleta", "chupar", "ciclón", "ciego", "cielo", "cien", "cierto", "cifra", "cigarro",
40526"cima", "cinco", "cine", "cinta", "ciprés", "circo", "ciruela", "cisne", "cita", "ciudad",
40527"clamor", "clan", "claro", "clase", "clave", "cliente", "clima", "clínica", "cobre", "cocción",
40528"cochino", "cocina", "coco", "código", "codo", "cofre", "coger", "cohete", "cojín", "cojo",
40529"cola", "colcha", "colegio", "colgar", "colina", "collar", "colmo", "columna", "combate", "comer",
40530"comida", "cómodo", "compra", "conde", "conejo", "conga", "conocer", "consejo", "contar", "copa",
40531"copia", "corazón", "corbata", "corcho", "cordón", "corona", "correr", "coser", "cosmos", "costa",
40532"cráneo", "cráter", "crear", "crecer", "creído", "crema", "cría", "crimen", "cripta", "crisis",
40533"cromo", "crónica", "croqueta", "crudo", "cruz", "cuadro", "cuarto", "cuatro", "cubo", "cubrir",
40534"cuchara", "cuello", "cuento", "cuerda", "cuesta", "cueva", "cuidar", "culebra", "culpa", "culto",
40535"cumbre", "cumplir", "cuna", "cuneta", "cuota", "cupón", "cúpula", "curar", "curioso", "curso",
40536"curva", "cutis", "dama", "danza", "dar", "dardo", "dátil", "deber", "débil", "década",
40537"decir", "dedo", "defensa", "definir", "dejar", "delfín", "delgado", "delito", "demora", "denso",
40538"dental", "deporte", "derecho", "derrota", "desayuno", "deseo", "desfile", "desnudo", "destino", "desvío",
40539"detalle", "detener", "deuda", "día", "diablo", "diadema", "diamante", "diana", "diario", "dibujo",
40540"dictar", "diente", "dieta", "diez", "difícil", "digno", "dilema", "diluir", "dinero", "directo",
40541"dirigir", "disco", "diseño", "disfraz", "diva", "divino", "doble", "doce", "dolor", "domingo",
40542"don", "donar", "dorado", "dormir", "dorso", "dos", "dosis", "dragón", "droga", "ducha",
40543"duda", "duelo", "dueño", "dulce", "dúo", "duque", "durar", "dureza", "duro", "ébano",
40544"ebrio", "echar", "eco", "ecuador", "edad", "edición", "edificio", "editor", "educar", "efecto",
40545"eficaz", "eje", "ejemplo", "elefante", "elegir", "elemento", "elevar", "elipse", "élite", "elixir",
40546"elogio", "eludir", "embudo", "emitir", "emoción", "empate", "empeño", "empleo", "empresa", "enano",
40547"encargo", "enchufe", "encía", "enemigo", "enero", "enfado", "enfermo", "engaño", "enigma", "enlace",
40548"enorme", "enredo", "ensayo", "enseñar", "entero", "entrar", "envase", "envío", "época", "equipo",
40549"erizo", "escala", "escena", "escolar", "escribir", "escudo", "esencia", "esfera", "esfuerzo", "espada",
40550"espejo", "espía", "esposa", "espuma", "esquí", "estar", "este", "estilo", "estufa", "etapa",
40551"eterno", "ética", "etnia", "evadir", "evaluar", "evento", "evitar", "exacto", "examen", "exceso",
40552"excusa", "exento", "exigir", "exilio", "existir", "éxito", "experto", "explicar", "exponer", "extremo",
40553"fábrica", "fábula", "fachada", "fácil", "factor", "faena", "faja", "falda", "fallo", "falso",
40554"faltar", "fama", "familia", "famoso", "faraón", "farmacia", "farol", "farsa", "fase", "fatiga",
40555"fauna", "favor", "fax", "febrero", "fecha", "feliz", "feo", "feria", "feroz", "fértil",
40556"fervor", "festín", "fiable", "fianza", "fiar", "fibra", "ficción", "ficha", "fideo", "fiebre",
40557"fiel", "fiera", "fiesta", "figura", "fijar", "fijo", "fila", "filete", "filial", "filtro",
40558"fin", "finca", "fingir", "finito", "firma", "flaco", "flauta", "flecha", "flor", "flota",
40559"fluir", "flujo", "flúor", "fobia", "foca", "fogata", "fogón", "folio", "folleto", "fondo",
40560"forma", "forro", "fortuna", "forzar", "fosa", "foto", "fracaso", "frágil", "franja", "frase",
40561"fraude", "freír", "freno", "fresa", "frío", "frito", "fruta", "fuego", "fuente", "fuerza",
40562"fuga", "fumar", "función", "funda", "furgón", "furia", "fusil", "fútbol", "futuro", "gacela",
40563"gafas", "gaita", "gajo", "gala", "galería", "gallo", "gamba", "ganar", "gancho", "ganga",
40564"ganso", "garaje", "garza", "gasolina", "gastar", "gato", "gavilán", "gemelo", "gemir", "gen",
40565"género", "genio", "gente", "geranio", "gerente", "germen", "gesto", "gigante", "gimnasio", "girar",
40566"giro", "glaciar", "globo", "gloria", "gol", "golfo", "goloso", "golpe", "goma", "gordo",
40567"gorila", "gorra", "gota", "goteo", "gozar", "grada", "gráfico", "grano", "grasa", "gratis",
40568"grave", "grieta", "grillo", "gripe", "gris", "grito", "grosor", "grúa", "grueso", "grumo",
40569"grupo", "guante", "guapo", "guardia", "guerra", "guía", "guiño", "guion", "guiso", "guitarra",
40570"gusano", "gustar", "haber", "hábil", "hablar", "hacer", "hacha", "hada", "hallar", "hamaca",
40571"harina", "haz", "hazaña", "hebilla", "hebra", "hecho", "helado", "helio", "hembra", "herir",
40572"hermano", "héroe", "hervir", "hielo", "hierro", "hígado", "higiene", "hijo", "himno", "historia",
40573"hocico", "hogar", "hoguera", "hoja", "hombre", "hongo", "honor", "honra", "hora", "hormiga",
40574"horno", "hostil", "hoyo", "hueco", "huelga", "huerta", "hueso", "huevo", "huida", "huir",
40575"humano", "húmedo", "humilde", "humo", "hundir", "huracán", "hurto", "icono", "ideal", "idioma",
40576"ídolo", "iglesia", "iglú", "igual", "ilegal", "ilusión", "imagen", "imán", "imitar", "impar",
40577"imperio", "imponer", "impulso", "incapaz", "índice", "inerte", "infiel", "informe", "ingenio", "inicio",
40578"inmenso", "inmune", "innato", "insecto", "instante", "interés", "íntimo", "intuir", "inútil", "invierno",
40579"ira", "iris", "ironía", "isla", "islote", "jabalí", "jabón", "jamón", "jarabe", "jardín",
40580"jarra", "jaula", "jazmín", "jefe", "jeringa", "jinete", "jornada", "joroba", "joven", "joya",
40581"juerga", "jueves", "juez", "jugador", "jugo", "juguete", "juicio", "junco", "jungla", "junio",
40582"juntar", "júpiter", "jurar", "justo", "juvenil", "juzgar", "kilo", "koala", "labio", "lacio",
40583"lacra", "lado", "ladrón", "lagarto", "lágrima", "laguna", "laico", "lamer", "lámina", "lámpara",
40584"lana", "lancha", "langosta", "lanza", "lápiz", "largo", "larva", "lástima", "lata", "látex",
40585"latir", "laurel", "lavar", "lazo", "leal", "lección", "leche", "lector", "leer", "legión",
40586"legumbre", "lejano", "lengua", "lento", "leña", "león", "leopardo", "lesión", "letal", "letra",
40587"leve", "leyenda", "libertad", "libro", "licor", "líder", "lidiar", "lienzo", "liga", "ligero",
40588"lima", "límite", "limón", "limpio", "lince", "lindo", "línea", "lingote", "lino", "linterna",
40589"líquido", "liso", "lista", "litera", "litio", "litro", "llaga", "llama", "llanto", "llave",
40590"llegar", "llenar", "llevar", "llorar", "llover", "lluvia", "lobo", "loción", "loco", "locura",
40591"lógica", "logro", "lombriz", "lomo", "lonja", "lote", "lucha", "lucir", "lugar", "lujo",
40592"luna", "lunes", "lupa", "lustro", "luto", "luz", "maceta", "macho", "madera", "madre",
40593"maduro", "maestro", "mafia", "magia", "mago", "maíz", "maldad", "maleta", "malla", "malo",
40594"mamá", "mambo", "mamut", "manco", "mando", "manejar", "manga", "maniquí", "manjar", "mano",
40595"manso", "manta", "mañana", "mapa", "máquina", "mar", "marco", "marea", "marfil", "margen",
40596"marido", "mármol", "marrón", "martes", "marzo", "masa", "máscara", "masivo", "matar", "materia",
40597"matiz", "matriz", "máximo", "mayor", "mazorca", "mecha", "medalla", "medio", "médula", "mejilla",
40598"mejor", "melena", "melón", "memoria", "menor", "mensaje", "mente", "menú", "mercado", "merengue",
40599"mérito", "mes", "mesón", "meta", "meter", "método", "metro", "mezcla", "miedo", "miel",
40600"miembro", "miga", "mil", "milagro", "militar", "millón", "mimo", "mina", "minero", "mínimo",
40601"minuto", "miope", "mirar", "misa", "miseria", "misil", "mismo", "mitad", "mito", "mochila",
40602"moción", "moda", "modelo", "moho", "mojar", "molde", "moler", "molino", "momento", "momia",
40603"monarca", "moneda", "monja", "monto", "moño", "morada", "morder", "moreno", "morir", "morro",
40604"morsa", "mortal", "mosca", "mostrar", "motivo", "mover", "móvil", "mozo", "mucho", "mudar",
40605"mueble", "muela", "muerte", "muestra", "mugre", "mujer", "mula", "muleta", "multa", "mundo",
40606"muñeca", "mural", "muro", "músculo", "museo", "musgo", "música", "muslo", "nácar", "nación",
40607"nadar", "naipe", "naranja", "nariz", "narrar", "nasal", "natal", "nativo", "natural", "náusea",
40608"naval", "nave", "navidad", "necio", "néctar", "negar", "negocio", "negro", "neón", "nervio",
40609"neto", "neutro", "nevar", "nevera", "nicho", "nido", "niebla", "nieto", "niñez", "niño",
40610"nítido", "nivel", "nobleza", "noche", "nómina", "noria", "norma", "norte", "nota", "noticia",
40611"novato", "novela", "novio", "nube", "nuca", "núcleo", "nudillo", "nudo", "nuera", "nueve",
40612"nuez", "nulo", "número", "nutria", "oasis", "obeso", "obispo", "objeto", "obra", "obrero",
40613"observar", "obtener", "obvio", "oca", "ocaso", "océano", "ochenta", "ocho", "ocio", "ocre",
40614"octavo", "octubre", "oculto", "ocupar", "ocurrir", "odiar", "odio", "odisea", "oeste", "ofensa",
40615"oferta", "oficio", "ofrecer", "ogro", "oído", "oír", "ojo", "ola", "oleada", "olfato",
40616"olivo", "olla", "olmo", "olor", "olvido", "ombligo", "onda", "onza", "opaco", "opción",
40617"ópera", "opinar", "oponer", "optar", "óptica", "opuesto", "oración", "orador", "oral", "órbita",
40618"orca", "orden", "oreja", "órgano", "orgía", "orgullo", "oriente", "origen", "orilla", "oro",
40619"orquesta", "oruga", "osadía", "oscuro", "osezno", "oso", "ostra", "otoño", "otro", "oveja",
40620"óvulo", "óxido", "oxígeno", "oyente", "ozono", "pacto", "padre", "paella", "página", "pago",
40621"país", "pájaro", "palabra", "palco", "paleta", "pálido", "palma", "paloma", "palpar", "pan",
40622"panal", "pánico", "pantera", "pañuelo", "papá", "papel", "papilla", "paquete", "parar", "parcela",
40623"pared", "parir", "paro", "párpado", "parque", "párrafo", "parte", "pasar", "paseo", "pasión",
40624"paso", "pasta", "pata", "patio", "patria", "pausa", "pauta", "pavo", "payaso", "peatón",
40625"pecado", "pecera", "pecho", "pedal", "pedir", "pegar", "peine", "pelar", "peldaño", "pelea",
40626"peligro", "pellejo", "pelo", "peluca", "pena", "pensar", "peñón", "peón", "peor", "pepino",
40627"pequeño", "pera", "percha", "perder", "pereza", "perfil", "perico", "perla", "permiso", "perro",
40628"persona", "pesa", "pesca", "pésimo", "pestaña", "pétalo", "petróleo", "pez", "pezuña", "picar",
40629"pichón", "pie", "piedra", "pierna", "pieza", "pijama", "pilar", "piloto", "pimienta", "pino",
40630"pintor", "pinza", "piña", "piojo", "pipa", "pirata", "pisar", "piscina", "piso", "pista",
40631"pitón", "pizca", "placa", "plan", "plata", "playa", "plaza", "pleito", "pleno", "plomo",
40632"pluma", "plural", "pobre", "poco", "poder", "podio", "poema", "poesía", "poeta", "polen",
40633"policía", "pollo", "polvo", "pomada", "pomelo", "pomo", "pompa", "poner", "porción", "portal",
40634"posada", "poseer", "posible", "poste", "potencia", "potro", "pozo", "prado", "precoz", "pregunta",
40635"premio", "prensa", "preso", "previo", "primo", "príncipe", "prisión", "privar", "proa", "probar",
40636"proceso", "producto", "proeza", "profesor", "programa", "prole", "promesa", "pronto", "propio", "próximo",
40637"prueba", "público", "puchero", "pudor", "pueblo", "puerta", "puesto", "pulga", "pulir", "pulmón",
40638"pulpo", "pulso", "puma", "punto", "puñal", "puño", "pupa", "pupila", "puré", "quedar",
40639"queja", "quemar", "querer", "queso", "quieto", "química", "quince", "quitar", "rábano", "rabia",
40640"rabo", "ración", "radical", "raíz", "rama", "rampa", "rancho", "rango", "rapaz", "rápido",
40641"rapto", "rasgo", "raspa", "rato", "rayo", "raza", "razón", "reacción", "realidad", "rebaño",
40642"rebote", "recaer", "receta", "rechazo", "recoger", "recreo", "recto", "recurso", "red", "redondo",
40643"reducir", "reflejo", "reforma", "refrán", "refugio", "regalo", "regir", "regla", "regreso", "rehén",
40644"reino", "reír", "reja", "relato", "relevo", "relieve", "relleno", "reloj", "remar", "remedio",
40645"remo", "rencor", "rendir", "renta", "reparto", "repetir", "reposo", "reptil", "res", "rescate",
40646"resina", "respeto", "resto", "resumen", "retiro", "retorno", "retrato", "reunir", "revés", "revista",
40647"rey", "rezar", "rico", "riego", "rienda", "riesgo", "rifa", "rígido", "rigor", "rincón",
40648"riñón", "río", "riqueza", "risa", "ritmo", "rito", "rizo", "roble", "roce", "rociar",
40649"rodar", "rodeo", "rodilla", "roer", "rojizo", "rojo", "romero", "romper", "ron", "ronco",
40650"ronda", "ropa", "ropero", "rosa", "rosca", "rostro", "rotar", "rubí", "rubor", "rudo",
40651"rueda", "rugir", "ruido", "ruina", "ruleta", "rulo", "rumbo", "rumor", "ruptura", "ruta",
40652"rutina", "sábado", "saber", "sabio", "sable", "sacar", "sagaz", "sagrado", "sala", "saldo",
40653"salero", "salir", "salmón", "salón", "salsa", "salto", "salud", "salvar", "samba", "sanción",
40654"sandía", "sanear", "sangre", "sanidad", "sano", "santo", "sapo", "saque", "sardina", "sartén",
40655"sastre", "satán", "sauna", "saxofón", "sección", "seco", "secreto", "secta", "sed", "seguir",
40656"seis", "sello", "selva", "semana", "semilla", "senda", "sensor", "señal", "señor", "separar",
40657"sepia", "sequía", "ser", "serie", "sermón", "servir", "sesenta", "sesión", "seta", "setenta",
40658"severo", "sexo", "sexto", "sidra", "siesta", "siete", "siglo", "signo", "sílaba", "silbar",
40659"silencio", "silla", "símbolo", "simio", "sirena", "sistema", "sitio", "situar", "sobre", "socio",
40660"sodio", "sol", "solapa", "soldado", "soledad", "sólido", "soltar", "solución", "sombra", "sondeo",
40661"sonido", "sonoro", "sonrisa", "sopa", "soplar", "soporte", "sordo", "sorpresa", "sorteo", "sostén",
40662"sótano", "suave", "subir", "suceso", "sudor", "suegra", "suelo", "sueño", "suerte", "sufrir",
40663"sujeto", "sultán", "sumar", "superar", "suplir", "suponer", "supremo", "sur", "surco", "sureño",
40664"surgir", "susto", "sutil", "tabaco", "tabique", "tabla", "tabú", "taco", "tacto", "tajo",
40665"talar", "talco", "talento", "talla", "talón", "tamaño", "tambor", "tango", "tanque", "tapa",
40666"tapete", "tapia", "tapón", "taquilla", "tarde", "tarea", "tarifa", "tarjeta", "tarot", "tarro",
40667"tarta", "tatuaje", "tauro", "taza", "tazón", "teatro", "techo", "tecla", "técnica", "tejado",
40668"tejer", "tejido", "tela", "teléfono", "tema", "temor", "templo", "tenaz", "tender", "tener",
40669"tenis", "tenso", "teoría", "terapia", "terco", "término", "ternura", "terror", "tesis", "tesoro",
40670"testigo", "tetera", "texto", "tez", "tibio", "tiburón", "tiempo", "tienda", "tierra", "tieso",
40671"tigre", "tijera", "tilde", "timbre", "tímido", "timo", "tinta", "tío", "típico", "tipo",
40672"tira", "tirón", "titán", "títere", "título", "tiza", "toalla", "tobillo", "tocar", "tocino",
40673"todo", "toga", "toldo", "tomar", "tono", "tonto", "topar", "tope", "toque", "tórax",
40674"torero", "tormenta", "torneo", "toro", "torpedo", "torre", "torso", "tortuga", "tos", "tosco",
40675"toser", "tóxico", "trabajo", "tractor", "traer", "tráfico", "trago", "traje", "tramo", "trance",
40676"trato", "trauma", "trazar", "trébol", "tregua", "treinta", "tren", "trepar", "tres", "tribu",
40677"trigo", "tripa", "triste", "triunfo", "trofeo", "trompa", "tronco", "tropa", "trote", "trozo",
40678"truco", "trueno", "trufa", "tubería", "tubo", "tuerto", "tumba", "tumor", "túnel", "túnica",
40679"turbina", "turismo", "turno", "tutor", "ubicar", "úlcera", "umbral", "unidad", "unir", "universo",
40680"uno", "untar", "uña", "urbano", "urbe", "urgente", "urna", "usar", "usuario", "útil",
40681"utopía", "uva", "vaca", "vacío", "vacuna", "vagar", "vago", "vaina", "vajilla", "vale",
40682"válido", "valle", "valor", "válvula", "vampiro", "vara", "variar", "varón", "vaso", "vecino",
40683"vector", "vehículo", "veinte", "vejez", "vela", "velero", "veloz", "vena", "vencer", "venda",
40684"veneno", "vengar", "venir", "venta", "venus", "ver", "verano", "verbo", "verde", "vereda",
40685"verja", "verso", "verter", "vía", "viaje", "vibrar", "vicio", "víctima", "vida", "vídeo",
40686"vidrio", "viejo", "viernes", "vigor", "vil", "villa", "vinagre", "vino", "viñedo", "violín",
40687"viral", "virgo", "virtud", "visor", "víspera", "vista", "vitamina", "viudo", "vivaz", "vivero",
40688"vivir", "vivo", "volcán", "volumen", "volver", "voraz", "votar", "voto", "voz", "vuelo",
40689"vulgar", "yacer", "yate", "yegua", "yema", "yerno", "yeso", "yodo", "yoga", "yogur",
40690"zafiro", "zanja", "zapato", "zarza", "zona", "zorro", "zumo", "zurdo"]
40691</script>
40692 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
40693WORDLISTS["chinese_simplified"] = [
40694"的", "一", "是", "在", "不", "了", "有", "和", "人", "这",
40695"中", "大", "为", "上", "个", "国", "我", "以", "要", "他",
40696"时", "来", "用", "们", "生", "到", "作", "地", "于", "出",
40697"就", "分", "对", "成", "会", "可", "主", "发", "年", "动",
40698"同", "工", "也", "能", "下", "过", "子", "说", "产", "种",
40699"面", "而", "方", "后", "多", "定", "行", "学", "法", "所",
40700"民", "得", "经", "十", "三", "之", "进", "着", "等", "部",
40701"度", "家", "电", "力", "里", "如", "水", "化", "高", "自",
40702"二", "理", "起", "小", "物", "现", "实", "加", "量", "都",
40703"两", "体", "制", "机", "当", "使", "点", "从", "业", "本",
40704"去", "把", "性", "好", "应", "开", "它", "合", "还", "因",
40705"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
40706"那", "社", "义", "事", "平", "形", "相", "全", "表", "间",
40707"样", "与", "关", "各", "重", "新", "线", "内", "数", "正",
40708"心", "反", "你", "明", "看", "原", "又", "么", "利", "比",
40709"或", "但", "质", "气", "第", "向", "道", "命", "此", "变",
40710"条", "只", "没", "结", "解", "问", "意", "建", "月", "公",
40711"无", "系", "军", "很", "情", "者", "最", "立", "代", "想",
40712"已", "通", "并", "提", "直", "题", "党", "程", "展", "五",
40713"果", "料", "象", "员", "革", "位", "入", "常", "文", "总",
40714"次", "品", "式", "活", "设", "及", "管", "特", "件", "长",
40715"求", "老", "头", "基", "资", "边", "流", "路", "级", "少",
40716"图", "山", "统", "接", "知", "较", "将", "组", "见", "计",
40717"别", "她", "手", "角", "期", "根", "论", "运", "农", "指",
40718"几", "九", "区", "强", "放", "决", "西", "被", "干", "做",
40719"必", "战", "先", "回", "则", "任", "取", "据", "处", "队",
40720"南", "给", "色", "光", "门", "即", "保", "治", "北", "造",
40721"百", "规", "热", "领", "七", "海", "口", "东", "导", "器",
40722"压", "志", "世", "金", "增", "争", "济", "阶", "油", "思",
40723"术", "极", "交", "受", "联", "什", "认", "六", "共", "权",
40724"收", "证", "改", "清", "美", "再", "采", "转", "更", "单",
40725"风", "切", "打", "白", "教", "速", "花", "带", "安", "场",
40726"身", "车", "例", "真", "务", "具", "万", "每", "目", "至",
40727"达", "走", "积", "示", "议", "声", "报", "斗", "完", "类",
40728"八", "离", "华", "名", "确", "才", "科", "张", "信", "马",
40729"节", "话", "米", "整", "空", "元", "况", "今", "集", "温",
40730"传", "土", "许", "步", "群", "广", "石", "记", "需", "段",
40731"研", "界", "拉", "林", "律", "叫", "且", "究", "观", "越",
40732"织", "装", "影", "算", "低", "持", "音", "众", "书", "布",
40733"复", "容", "儿", "须", "际", "商", "非", "验", "连", "断",
40734"深", "难", "近", "矿", "千", "周", "委", "素", "技", "备",
40735"半", "办", "青", "省", "列", "习", "响", "约", "支", "般",
40736"史", "感", "劳", "便", "团", "往", "酸", "历", "市", "克",
40737"何", "除", "消", "构", "府", "称", "太", "准", "精", "值",
40738"号", "率", "族", "维", "划", "选", "标", "写", "存", "候",
40739"毛", "亲", "快", "效", "斯", "院", "查", "江", "型", "眼",
40740"王", "按", "格", "养", "易", "置", "派", "层", "片", "始",
40741"却", "专", "状", "育", "厂", "京", "识", "适", "属", "圆",
40742"包", "火", "住", "调", "满", "县", "局", "照", "参", "红",
40743"细", "引", "听", "该", "铁", "价", "严", "首", "底", "液",
40744"官", "德", "随", "病", "苏", "失", "尔", "死", "讲", "配",
40745"女", "黄", "推", "显", "谈", "罪", "神", "艺", "呢", "席",
40746"含", "企", "望", "密", "批", "营", "项", "防", "举", "球",
40747"英", "氧", "势", "告", "李", "台", "落", "木", "帮", "轮",
40748"破", "亚", "师", "围", "注", "远", "字", "材", "排", "供",
40749"河", "态", "封", "另", "施", "减", "树", "溶", "怎", "止",
40750"案", "言", "士", "均", "武", "固", "叶", "鱼", "波", "视",
40751"仅", "费", "紧", "爱", "左", "章", "早", "朝", "害", "续",
40752"轻", "服", "试", "食", "充", "兵", "源", "判", "护", "司",
40753"足", "某", "练", "差", "致", "板", "田", "降", "黑", "犯",
40754"负", "击", "范", "继", "兴", "似", "余", "坚", "曲", "输",
40755"修", "故", "城", "夫", "够", "送", "笔", "船", "占", "右",
40756"财", "吃", "富", "春", "职", "觉", "汉", "画", "功", "巴",
40757"跟", "虽", "杂", "飞", "检", "吸", "助", "升", "阳", "互",
40758"初", "创", "抗", "考", "投", "坏", "策", "古", "径", "换",
40759"未", "跑", "留", "钢", "曾", "端", "责", "站", "简", "述",
40760"钱", "副", "尽", "帝", "射", "草", "冲", "承", "独", "令",
40761"限", "阿", "宣", "环", "双", "请", "超", "微", "让", "控",
40762"州", "良", "轴", "找", "否", "纪", "益", "依", "优", "顶",
40763"础", "载", "倒", "房", "突", "坐", "粉", "敌", "略", "客",
40764"袁", "冷", "胜", "绝", "析", "块", "剂", "测", "丝", "协",
40765"诉", "念", "陈", "仍", "罗", "盐", "友", "洋", "错", "苦",
40766"夜", "刑", "移", "频", "逐", "靠", "混", "母", "短", "皮",
40767"终", "聚", "汽", "村", "云", "哪", "既", "距", "卫", "停",
40768"烈", "央", "察", "烧", "迅", "境", "若", "印", "洲", "刻",
40769"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
40770"侵", "吧", "甲", "游", "久", "菜", "味", "旧", "模", "湖",
40771"货", "损", "预", "阻", "毫", "普", "稳", "乙", "妈", "植",
40772"息", "扩", "银", "语", "挥", "酒", "守", "拿", "序", "纸",
40773"医", "缺", "雨", "吗", "针", "刘", "啊", "急", "唱", "误",
40774"训", "愿", "审", "附", "获", "茶", "鲜", "粮", "斤", "孩",
40775"脱", "硫", "肥", "善", "龙", "演", "父", "渐", "血", "欢",
40776"械", "掌", "歌", "沙", "刚", "攻", "谓", "盾", "讨", "晚",
40777"粒", "乱", "燃", "矛", "乎", "杀", "药", "宁", "鲁", "贵",
40778"钟", "煤", "读", "班", "伯", "香", "介", "迫", "句", "丰",
40779"培", "握", "兰", "担", "弦", "蛋", "沉", "假", "穿", "执",
40780"答", "乐", "谁", "顺", "烟", "缩", "征", "脸", "喜", "松",
40781"脚", "困", "异", "免", "背", "星", "福", "买", "染", "井",
40782"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "静", "补",
40783"评", "翻", "肉", "践", "尼", "衣", "宽", "扬", "棉", "希",
40784"伤", "操", "垂", "秋", "宜", "氢", "套", "督", "振", "架",
40785"亮", "末", "宪", "庆", "编", "牛", "触", "映", "雷", "销",
40786"诗", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
40787"绿", "晶", "厚", "盟", "衡", "鸡", "孙", "延", "危", "胶",
40788"屋", "乡", "临", "陆", "顾", "掉", "呀", "灯", "岁", "措",
40789"束", "耐", "剧", "玉", "赵", "跳", "哥", "季", "课", "凯",
40790"胡", "额", "款", "绍", "卷", "齐", "伟", "蒸", "殖", "永",
40791"宗", "苗", "川", "炉", "岩", "弱", "零", "杨", "奏", "沿",
40792"露", "杆", "探", "滑", "镇", "饭", "浓", "航", "怀", "赶",
40793"库", "夺", "伊", "灵", "税", "途", "灭", "赛", "归", "召",
40794"鼓", "播", "盘", "裁", "险", "康", "唯", "录", "菌", "纯",
40795"借", "糖", "盖", "横", "符", "私", "努", "堂", "域", "枪",
40796"润", "幅", "哈", "竟", "熟", "虫", "泽", "脑", "壤", "碳",
40797"欧", "遍", "侧", "寨", "敢", "彻", "虑", "斜", "薄", "庭",
40798"纳", "弹", "饲", "伸", "折", "麦", "湿", "暗", "荷", "瓦",
40799"塞", "床", "筑", "恶", "户", "访", "塔", "奇", "透", "梁",
40800"刀", "旋", "迹", "卡", "氯", "遇", "份", "毒", "泥", "退",
40801"洗", "摆", "灰", "彩", "卖", "耗", "夏", "择", "忙", "铜",
40802"献", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
40803"阵", "阴", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
40804"楼", "避", "谋", "吨", "野", "猪", "旗", "累", "偏", "典",
40805"馆", "索", "秦", "脂", "潮", "爷", "豆", "忽", "托", "惊",
40806"塑", "遗", "愈", "朱", "替", "纤", "粗", "倾", "尚", "痛",
40807"楚", "谢", "奋", "购", "磨", "君", "池", "旁", "碎", "骨",
40808"监", "捕", "弟", "暴", "割", "贯", "殊", "释", "词", "亡",
40809"壁", "顿", "宝", "午", "尘", "闻", "揭", "炮", "残", "冬",
40810"桥", "妇", "警", "综", "招", "吴", "付", "浮", "遭", "徐",
40811"您", "摇", "谷", "赞", "箱", "隔", "订", "男", "吹", "园",
40812"纷", "唐", "败", "宋", "玻", "巨", "耕", "坦", "荣", "闭",
40813"湾", "键", "凡", "驻", "锅", "救", "恩", "剥", "凝", "碱",
40814"齿", "截", "炼", "麻", "纺", "禁", "废", "盛", "版", "缓",
40815"净", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
40816"庄", "街", "藏", "姑", "贸", "腐", "奴", "啦", "惯", "乘",
40817"伙", "恢", "匀", "纱", "扎", "辩", "耳", "彪", "臣", "亿",
40818"璃", "抵", "脉", "秀", "萨", "俄", "网", "舞", "店", "喷",
40819"纵", "寸", "汗", "挂", "洪", "贺", "闪", "柬", "爆", "烯",
40820"津", "稻", "墙", "软", "勇", "像", "滚", "厘", "蒙", "芳",
40821"肯", "坡", "柱", "荡", "腿", "仪", "旅", "尾", "轧", "冰",
40822"贡", "登", "黎", "削", "钻", "勒", "逃", "障", "氨", "郭",
40823"峰", "币", "港", "伏", "轨", "亩", "毕", "擦", "莫", "刺",
40824"浪", "秘", "援", "株", "健", "售", "股", "岛", "甘", "泡",
40825"睡", "童", "铸", "汤", "阀", "休", "汇", "舍", "牧", "绕",
40826"炸", "哲", "磷", "绩", "朋", "淡", "尖", "启", "陷", "柴",
40827"呈", "徒", "颜", "泪", "稍", "忘", "泵", "蓝", "拖", "洞",
40828"授", "镜", "辛", "壮", "锋", "贫", "虚", "弯", "摩", "泰",
40829"幼", "廷", "尊", "窗", "纲", "弄", "隶", "疑", "氏", "宫",
40830"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "违",
40831"夹", "腰", "缘", "珠", "穷", "森", "枝", "竹", "沟", "催",
40832"绳", "忆", "邦", "剩", "幸", "浆", "栏", "拥", "牙", "贮",
40833"礼", "滤", "钠", "纹", "罢", "拍", "咱", "喊", "袖", "埃",
40834"勤", "罚", "焦", "潜", "伍", "墨", "欲", "缝", "姓", "刊",
40835"饱", "仿", "奖", "铝", "鬼", "丽", "跨", "默", "挖", "链",
40836"扫", "喝", "袋", "炭", "污", "幕", "诸", "弧", "励", "梅",
40837"奶", "洁", "灾", "舟", "鉴", "苯", "讼", "抱", "毁", "懂",
40838"寒", "智", "埔", "寄", "届", "跃", "渡", "挑", "丹", "艰",
40839"贝", "碰", "拔", "爹", "戴", "码", "梦", "芽", "熔", "赤",
40840"渔", "哭", "敬", "颗", "奔", "铅", "仲", "虎", "稀", "妹",
40841"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "仓", "魏",
40842"锐", "晓", "氮", "兼", "隐", "碍", "赫", "拨", "忠", "肃",
40843"缸", "牵", "抢", "博", "巧", "壳", "兄", "杜", "讯", "诚",
40844"碧", "祥", "柯", "页", "巡", "矩", "悲", "灌", "龄", "伦",
40845"票", "寻", "桂", "铺", "圣", "恐", "恰", "郑", "趣", "抬",
40846"荒", "腾", "贴", "柔", "滴", "猛", "阔", "辆", "妻", "填",
40847"撤", "储", "签", "闹", "扰", "紫", "砂", "递", "戏", "吊",
40848"陶", "伐", "喂", "疗", "瓶", "婆", "抚", "臂", "摸", "忍",
40849"虾", "蜡", "邻", "胸", "巩", "挤", "偶", "弃", "槽", "劲",
40850"乳", "邓", "吉", "仁", "烂", "砖", "租", "乌", "舰", "伴",
40851"瓜", "浅", "丙", "暂", "燥", "橡", "柳", "迷", "暖", "牌",
40852"秧", "胆", "详", "簧", "踏", "瓷", "谱", "呆", "宾", "糊",
40853"洛", "辉", "愤", "竞", "隙", "怒", "粘", "乃", "绪", "肩",
40854"籍", "敏", "涂", "熙", "皆", "侦", "悬", "掘", "享", "纠",
40855"醒", "狂", "锁", "淀", "恨", "牲", "霸", "爬", "赏", "逆",
40856"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鸭",
40857"趋", "凤", "晨", "畜", "辈", "秩", "卵", "署", "梯", "炎",
40858"滩", "棋", "驱", "筛", "峡", "冒", "啥", "寿", "译", "浸",
40859"泉", "帽", "迟", "硅", "疆", "贷", "漏", "稿", "冠", "嫩",
40860"胁", "芯", "牢", "叛", "蚀", "奥", "鸣", "岭", "羊", "凭",
40861"串", "塘", "绘", "酵", "融", "盆", "锡", "庙", "筹", "冻",
40862"辅", "摄", "袭", "筋", "拒", "僚", "旱", "钾", "鸟", "漆",
40863"沈", "眉", "疏", "添", "棒", "穗", "硝", "韩", "逼", "扭",
40864"侨", "凉", "挺", "碗", "栽", "炒", "杯", "患", "馏", "劝",
40865"豪", "辽", "勃", "鸿", "旦", "吏", "拜", "狗", "埋", "辊",
40866"掩", "饮", "搬", "骂", "辞", "勾", "扣", "估", "蒋", "绒",
40867"雾", "丈", "朵", "姆", "拟", "宇", "辑", "陕", "雕", "偿",
40868"蓄", "崇", "剪", "倡", "厅", "咬", "驶", "薯", "刷", "斥",
40869"番", "赋", "奉", "佛", "浇", "漫", "曼", "扇", "钙", "桃",
40870"扶", "仔", "返", "俗", "亏", "腔", "鞋", "棱", "覆", "框",
40871"悄", "叔", "撞", "骗", "勘", "旺", "沸", "孤", "吐", "孟",
40872"渠", "屈", "疾", "妙", "惜", "仰", "狠", "胀", "谐", "抛",
40873"霉", "桑", "岗", "嘛", "衰", "盗", "渗", "脏", "赖", "涌",
40874"甜", "曹", "阅", "肌", "哩", "厉", "烃", "纬", "毅", "昨",
40875"伪", "症", "煮", "叹", "钉", "搭", "茎", "笼", "酷", "偷",
40876"弓", "锥", "恒", "杰", "坑", "鼻", "翼", "纶", "叙", "狱",
40877"逮", "罐", "络", "棚", "抑", "膨", "蔬", "寺", "骤", "穆",
40878"冶", "枯", "册", "尸", "凸", "绅", "坯", "牺", "焰", "轰",
40879"欣", "晋", "瘦", "御", "锭", "锦", "丧", "旬", "锻", "垄",
40880"搜", "扑", "邀", "亭", "酯", "迈", "舒", "脆", "酶", "闲",
40881"忧", "酚", "顽", "羽", "涨", "卸", "仗", "陪", "辟", "惩",
40882"杭", "姚", "肚", "捉", "飘", "漂", "昆", "欺", "吾", "郎",
40883"烷", "汁", "呵", "饰", "萧", "雅", "邮", "迁", "燕", "撒",
40884"姻", "赴", "宴", "烦", "债", "帐", "斑", "铃", "旨", "醇",
40885"董", "饼", "雏", "姿", "拌", "傅", "腹", "妥", "揉", "贤",
40886"拆", "歪", "葡", "胺", "丢", "浩", "徽", "昂", "垫", "挡",
40887"览", "贪", "慰", "缴", "汪", "慌", "冯", "诺", "姜", "谊",
40888"凶", "劣", "诬", "耀", "昏", "躺", "盈", "骑", "乔", "溪",
40889"丛", "卢", "抹", "闷", "咨", "刮", "驾", "缆", "悟", "摘",
40890"铒", "掷", "颇", "幻", "柄", "惠", "惨", "佳", "仇", "腊",
40891"窝", "涤", "剑", "瞧", "堡", "泼", "葱", "罩", "霍", "捞",
40892"胎", "苍", "滨", "俩", "捅", "湘", "砍", "霞", "邵", "萄",
40893"疯", "淮", "遂", "熊", "粪", "烘", "宿", "档", "戈", "驳",
40894"嫂", "裕", "徙", "箭", "捐", "肠", "撑", "晒", "辨", "殿",
40895"莲", "摊", "搅", "酱", "屏", "疫", "哀", "蔡", "堵", "沫",
40896"皱", "畅", "叠", "阁", "莱", "敲", "辖", "钩", "痕", "坝",
40897"巷", "饿", "祸", "丘", "玄", "溜", "曰", "逻", "彭", "尝",
40898"卿", "妨", "艇", "吞", "韦", "怨", "矮", "歇" ]
40899</script>
40900 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
40901WORDLISTS["chinese_traditional"] = [
40902"的", "一", "是", "在", "不", "了", "有", "和", "人", "這",
40903"中", "大", "為", "上", "個", "國", "我", "以", "要", "他",
40904"時", "來", "用", "們", "生", "到", "作", "地", "於", "出",
40905"就", "分", "對", "成", "會", "可", "主", "發", "年", "動",
40906"同", "工", "也", "能", "下", "過", "子", "說", "產", "種",
40907"面", "而", "方", "後", "多", "定", "行", "學", "法", "所",
40908"民", "得", "經", "十", "三", "之", "進", "著", "等", "部",
40909"度", "家", "電", "力", "裡", "如", "水", "化", "高", "自",
40910"二", "理", "起", "小", "物", "現", "實", "加", "量", "都",
40911"兩", "體", "制", "機", "當", "使", "點", "從", "業", "本",
40912"去", "把", "性", "好", "應", "開", "它", "合", "還", "因",
40913"由", "其", "些", "然", "前", "外", "天", "政", "四", "日",
40914"那", "社", "義", "事", "平", "形", "相", "全", "表", "間",
40915"樣", "與", "關", "各", "重", "新", "線", "內", "數", "正",
40916"心", "反", "你", "明", "看", "原", "又", "麼", "利", "比",
40917"或", "但", "質", "氣", "第", "向", "道", "命", "此", "變",
40918"條", "只", "沒", "結", "解", "問", "意", "建", "月", "公",
40919"無", "系", "軍", "很", "情", "者", "最", "立", "代", "想",
40920"已", "通", "並", "提", "直", "題", "黨", "程", "展", "五",
40921"果", "料", "象", "員", "革", "位", "入", "常", "文", "總",
40922"次", "品", "式", "活", "設", "及", "管", "特", "件", "長",
40923"求", "老", "頭", "基", "資", "邊", "流", "路", "級", "少",
40924"圖", "山", "統", "接", "知", "較", "將", "組", "見", "計",
40925"別", "她", "手", "角", "期", "根", "論", "運", "農", "指",
40926"幾", "九", "區", "強", "放", "決", "西", "被", "幹", "做",
40927"必", "戰", "先", "回", "則", "任", "取", "據", "處", "隊",
40928"南", "給", "色", "光", "門", "即", "保", "治", "北", "造",
40929"百", "規", "熱", "領", "七", "海", "口", "東", "導", "器",
40930"壓", "志", "世", "金", "增", "爭", "濟", "階", "油", "思",
40931"術", "極", "交", "受", "聯", "什", "認", "六", "共", "權",
40932"收", "證", "改", "清", "美", "再", "採", "轉", "更", "單",
40933"風", "切", "打", "白", "教", "速", "花", "帶", "安", "場",
40934"身", "車", "例", "真", "務", "具", "萬", "每", "目", "至",
40935"達", "走", "積", "示", "議", "聲", "報", "鬥", "完", "類",
40936"八", "離", "華", "名", "確", "才", "科", "張", "信", "馬",
40937"節", "話", "米", "整", "空", "元", "況", "今", "集", "溫",
40938"傳", "土", "許", "步", "群", "廣", "石", "記", "需", "段",
40939"研", "界", "拉", "林", "律", "叫", "且", "究", "觀", "越",
40940"織", "裝", "影", "算", "低", "持", "音", "眾", "書", "布",
40941"复", "容", "兒", "須", "際", "商", "非", "驗", "連", "斷",
40942"深", "難", "近", "礦", "千", "週", "委", "素", "技", "備",
40943"半", "辦", "青", "省", "列", "習", "響", "約", "支", "般",
40944"史", "感", "勞", "便", "團", "往", "酸", "歷", "市", "克",
40945"何", "除", "消", "構", "府", "稱", "太", "準", "精", "值",
40946"號", "率", "族", "維", "劃", "選", "標", "寫", "存", "候",
40947"毛", "親", "快", "效", "斯", "院", "查", "江", "型", "眼",
40948"王", "按", "格", "養", "易", "置", "派", "層", "片", "始",
40949"卻", "專", "狀", "育", "廠", "京", "識", "適", "屬", "圓",
40950"包", "火", "住", "調", "滿", "縣", "局", "照", "參", "紅",
40951"細", "引", "聽", "該", "鐵", "價", "嚴", "首", "底", "液",
40952"官", "德", "隨", "病", "蘇", "失", "爾", "死", "講", "配",
40953"女", "黃", "推", "顯", "談", "罪", "神", "藝", "呢", "席",
40954"含", "企", "望", "密", "批", "營", "項", "防", "舉", "球",
40955"英", "氧", "勢", "告", "李", "台", "落", "木", "幫", "輪",
40956"破", "亞", "師", "圍", "注", "遠", "字", "材", "排", "供",
40957"河", "態", "封", "另", "施", "減", "樹", "溶", "怎", "止",
40958"案", "言", "士", "均", "武", "固", "葉", "魚", "波", "視",
40959"僅", "費", "緊", "愛", "左", "章", "早", "朝", "害", "續",
40960"輕", "服", "試", "食", "充", "兵", "源", "判", "護", "司",
40961"足", "某", "練", "差", "致", "板", "田", "降", "黑", "犯",
40962"負", "擊", "范", "繼", "興", "似", "餘", "堅", "曲", "輸",
40963"修", "故", "城", "夫", "夠", "送", "筆", "船", "佔", "右",
40964"財", "吃", "富", "春", "職", "覺", "漢", "畫", "功", "巴",
40965"跟", "雖", "雜", "飛", "檢", "吸", "助", "昇", "陽", "互",
40966"初", "創", "抗", "考", "投", "壞", "策", "古", "徑", "換",
40967"未", "跑", "留", "鋼", "曾", "端", "責", "站", "簡", "述",
40968"錢", "副", "盡", "帝", "射", "草", "衝", "承", "獨", "令",
40969"限", "阿", "宣", "環", "雙", "請", "超", "微", "讓", "控",
40970"州", "良", "軸", "找", "否", "紀", "益", "依", "優", "頂",
40971"礎", "載", "倒", "房", "突", "坐", "粉", "敵", "略", "客",
40972"袁", "冷", "勝", "絕", "析", "塊", "劑", "測", "絲", "協",
40973"訴", "念", "陳", "仍", "羅", "鹽", "友", "洋", "錯", "苦",
40974"夜", "刑", "移", "頻", "逐", "靠", "混", "母", "短", "皮",
40975"終", "聚", "汽", "村", "雲", "哪", "既", "距", "衛", "停",
40976"烈", "央", "察", "燒", "迅", "境", "若", "印", "洲", "刻",
40977"括", "激", "孔", "搞", "甚", "室", "待", "核", "校", "散",
40978"侵", "吧", "甲", "遊", "久", "菜", "味", "舊", "模", "湖",
40979"貨", "損", "預", "阻", "毫", "普", "穩", "乙", "媽", "植",
40980"息", "擴", "銀", "語", "揮", "酒", "守", "拿", "序", "紙",
40981"醫", "缺", "雨", "嗎", "針", "劉", "啊", "急", "唱", "誤",
40982"訓", "願", "審", "附", "獲", "茶", "鮮", "糧", "斤", "孩",
40983"脫", "硫", "肥", "善", "龍", "演", "父", "漸", "血", "歡",
40984"械", "掌", "歌", "沙", "剛", "攻", "謂", "盾", "討", "晚",
40985"粒", "亂", "燃", "矛", "乎", "殺", "藥", "寧", "魯", "貴",
40986"鐘", "煤", "讀", "班", "伯", "香", "介", "迫", "句", "豐",
40987"培", "握", "蘭", "擔", "弦", "蛋", "沉", "假", "穿", "執",
40988"答", "樂", "誰", "順", "煙", "縮", "徵", "臉", "喜", "松",
40989"腳", "困", "異", "免", "背", "星", "福", "買", "染", "井",
40990"概", "慢", "怕", "磁", "倍", "祖", "皇", "促", "靜", "補",
40991"評", "翻", "肉", "踐", "尼", "衣", "寬", "揚", "棉", "希",
40992"傷", "操", "垂", "秋", "宜", "氫", "套", "督", "振", "架",
40993"亮", "末", "憲", "慶", "編", "牛", "觸", "映", "雷", "銷",
40994"詩", "座", "居", "抓", "裂", "胞", "呼", "娘", "景", "威",
40995"綠", "晶", "厚", "盟", "衡", "雞", "孫", "延", "危", "膠",
40996"屋", "鄉", "臨", "陸", "顧", "掉", "呀", "燈", "歲", "措",
40997"束", "耐", "劇", "玉", "趙", "跳", "哥", "季", "課", "凱",
40998"胡", "額", "款", "紹", "卷", "齊", "偉", "蒸", "殖", "永",
40999"宗", "苗", "川", "爐", "岩", "弱", "零", "楊", "奏", "沿",
41000"露", "桿", "探", "滑", "鎮", "飯", "濃", "航", "懷", "趕",
41001"庫", "奪", "伊", "靈", "稅", "途", "滅", "賽", "歸", "召",
41002"鼓", "播", "盤", "裁", "險", "康", "唯", "錄", "菌", "純",
41003"借", "糖", "蓋", "橫", "符", "私", "努", "堂", "域", "槍",
41004"潤", "幅", "哈", "竟", "熟", "蟲", "澤", "腦", "壤", "碳",
41005"歐", "遍", "側", "寨", "敢", "徹", "慮", "斜", "薄", "庭",
41006"納", "彈", "飼", "伸", "折", "麥", "濕", "暗", "荷", "瓦",
41007"塞", "床", "築", "惡", "戶", "訪", "塔", "奇", "透", "梁",
41008"刀", "旋", "跡", "卡", "氯", "遇", "份", "毒", "泥", "退",
41009"洗", "擺", "灰", "彩", "賣", "耗", "夏", "擇", "忙", "銅",
41010"獻", "硬", "予", "繁", "圈", "雪", "函", "亦", "抽", "篇",
41011"陣", "陰", "丁", "尺", "追", "堆", "雄", "迎", "泛", "爸",
41012"樓", "避", "謀", "噸", "野", "豬", "旗", "累", "偏", "典",
41013"館", "索", "秦", "脂", "潮", "爺", "豆", "忽", "托", "驚",
41014"塑", "遺", "愈", "朱", "替", "纖", "粗", "傾", "尚", "痛",
41015"楚", "謝", "奮", "購", "磨", "君", "池", "旁", "碎", "骨",
41016"監", "捕", "弟", "暴", "割", "貫", "殊", "釋", "詞", "亡",
41017"壁", "頓", "寶", "午", "塵", "聞", "揭", "炮", "殘", "冬",
41018"橋", "婦", "警", "綜", "招", "吳", "付", "浮", "遭", "徐",
41019"您", "搖", "谷", "贊", "箱", "隔", "訂", "男", "吹", "園",
41020"紛", "唐", "敗", "宋", "玻", "巨", "耕", "坦", "榮", "閉",
41021"灣", "鍵", "凡", "駐", "鍋", "救", "恩", "剝", "凝", "鹼",
41022"齒", "截", "煉", "麻", "紡", "禁", "廢", "盛", "版", "緩",
41023"淨", "睛", "昌", "婚", "涉", "筒", "嘴", "插", "岸", "朗",
41024"莊", "街", "藏", "姑", "貿", "腐", "奴", "啦", "慣", "乘",
41025"夥", "恢", "勻", "紗", "扎", "辯", "耳", "彪", "臣", "億",
41026"璃", "抵", "脈", "秀", "薩", "俄", "網", "舞", "店", "噴",
41027"縱", "寸", "汗", "掛", "洪", "賀", "閃", "柬", "爆", "烯",
41028"津", "稻", "牆", "軟", "勇", "像", "滾", "厘", "蒙", "芳",
41029"肯", "坡", "柱", "盪", "腿", "儀", "旅", "尾", "軋", "冰",
41030"貢", "登", "黎", "削", "鑽", "勒", "逃", "障", "氨", "郭",
41031"峰", "幣", "港", "伏", "軌", "畝", "畢", "擦", "莫", "刺",
41032"浪", "秘", "援", "株", "健", "售", "股", "島", "甘", "泡",
41033"睡", "童", "鑄", "湯", "閥", "休", "匯", "舍", "牧", "繞",
41034"炸", "哲", "磷", "績", "朋", "淡", "尖", "啟", "陷", "柴",
41035"呈", "徒", "顏", "淚", "稍", "忘", "泵", "藍", "拖", "洞",
41036"授", "鏡", "辛", "壯", "鋒", "貧", "虛", "彎", "摩", "泰",
41037"幼", "廷", "尊", "窗", "綱", "弄", "隸", "疑", "氏", "宮",
41038"姐", "震", "瑞", "怪", "尤", "琴", "循", "描", "膜", "違",
41039"夾", "腰", "緣", "珠", "窮", "森", "枝", "竹", "溝", "催",
41040"繩", "憶", "邦", "剩", "幸", "漿", "欄", "擁", "牙", "貯",
41041"禮", "濾", "鈉", "紋", "罷", "拍", "咱", "喊", "袖", "埃",
41042"勤", "罰", "焦", "潛", "伍", "墨", "欲", "縫", "姓", "刊",
41043"飽", "仿", "獎", "鋁", "鬼", "麗", "跨", "默", "挖", "鏈",
41044"掃", "喝", "袋", "炭", "污", "幕", "諸", "弧", "勵", "梅",
41045"奶", "潔", "災", "舟", "鑑", "苯", "訟", "抱", "毀", "懂",
41046"寒", "智", "埔", "寄", "屆", "躍", "渡", "挑", "丹", "艱",
41047"貝", "碰", "拔", "爹", "戴", "碼", "夢", "芽", "熔", "赤",
41048"漁", "哭", "敬", "顆", "奔", "鉛", "仲", "虎", "稀", "妹",
41049"乏", "珍", "申", "桌", "遵", "允", "隆", "螺", "倉", "魏",
41050"銳", "曉", "氮", "兼", "隱", "礙", "赫", "撥", "忠", "肅",
41051"缸", "牽", "搶", "博", "巧", "殼", "兄", "杜", "訊", "誠",
41052"碧", "祥", "柯", "頁", "巡", "矩", "悲", "灌", "齡", "倫",
41053"票", "尋", "桂", "鋪", "聖", "恐", "恰", "鄭", "趣", "抬",
41054"荒", "騰", "貼", "柔", "滴", "猛", "闊", "輛", "妻", "填",
41055"撤", "儲", "簽", "鬧", "擾", "紫", "砂", "遞", "戲", "吊",
41056"陶", "伐", "餵", "療", "瓶", "婆", "撫", "臂", "摸", "忍",
41057"蝦", "蠟", "鄰", "胸", "鞏", "擠", "偶", "棄", "槽", "勁",
41058"乳", "鄧", "吉", "仁", "爛", "磚", "租", "烏", "艦", "伴",
41059"瓜", "淺", "丙", "暫", "燥", "橡", "柳", "迷", "暖", "牌",
41060"秧", "膽", "詳", "簧", "踏", "瓷", "譜", "呆", "賓", "糊",
41061"洛", "輝", "憤", "競", "隙", "怒", "粘", "乃", "緒", "肩",
41062"籍", "敏", "塗", "熙", "皆", "偵", "懸", "掘", "享", "糾",
41063"醒", "狂", "鎖", "淀", "恨", "牲", "霸", "爬", "賞", "逆",
41064"玩", "陵", "祝", "秒", "浙", "貌", "役", "彼", "悉", "鴨",
41065"趨", "鳳", "晨", "畜", "輩", "秩", "卵", "署", "梯", "炎",
41066"灘", "棋", "驅", "篩", "峽", "冒", "啥", "壽", "譯", "浸",
41067"泉", "帽", "遲", "矽", "疆", "貸", "漏", "稿", "冠", "嫩",
41068"脅", "芯", "牢", "叛", "蝕", "奧", "鳴", "嶺", "羊", "憑",
41069"串", "塘", "繪", "酵", "融", "盆", "錫", "廟", "籌", "凍",
41070"輔", "攝", "襲", "筋", "拒", "僚", "旱", "鉀", "鳥", "漆",
41071"沈", "眉", "疏", "添", "棒", "穗", "硝", "韓", "逼", "扭",
41072"僑", "涼", "挺", "碗", "栽", "炒", "杯", "患", "餾", "勸",
41073"豪", "遼", "勃", "鴻", "旦", "吏", "拜", "狗", "埋", "輥",
41074"掩", "飲", "搬", "罵", "辭", "勾", "扣", "估", "蔣", "絨",
41075"霧", "丈", "朵", "姆", "擬", "宇", "輯", "陝", "雕", "償",
41076"蓄", "崇", "剪", "倡", "廳", "咬", "駛", "薯", "刷", "斥",
41077"番", "賦", "奉", "佛", "澆", "漫", "曼", "扇", "鈣", "桃",
41078"扶", "仔", "返", "俗", "虧", "腔", "鞋", "棱", "覆", "框",
41079"悄", "叔", "撞", "騙", "勘", "旺", "沸", "孤", "吐", "孟",
41080"渠", "屈", "疾", "妙", "惜", "仰", "狠", "脹", "諧", "拋",
41081"黴", "桑", "崗", "嘛", "衰", "盜", "滲", "臟", "賴", "湧",
41082"甜", "曹", "閱", "肌", "哩", "厲", "烴", "緯", "毅", "昨",
41083"偽", "症", "煮", "嘆", "釘", "搭", "莖", "籠", "酷", "偷",
41084"弓", "錐", "恆", "傑", "坑", "鼻", "翼", "綸", "敘", "獄",
41085"逮", "罐", "絡", "棚", "抑", "膨", "蔬", "寺", "驟", "穆",
41086"冶", "枯", "冊", "屍", "凸", "紳", "坯", "犧", "焰", "轟",
41087"欣", "晉", "瘦", "禦", "錠", "錦", "喪", "旬", "鍛", "壟",
41088"搜", "撲", "邀", "亭", "酯", "邁", "舒", "脆", "酶", "閒",
41089"憂", "酚", "頑", "羽", "漲", "卸", "仗", "陪", "闢", "懲",
41090"杭", "姚", "肚", "捉", "飄", "漂", "昆", "欺", "吾", "郎",
41091"烷", "汁", "呵", "飾", "蕭", "雅", "郵", "遷", "燕", "撒",
41092"姻", "赴", "宴", "煩", "債", "帳", "斑", "鈴", "旨", "醇",
41093"董", "餅", "雛", "姿", "拌", "傅", "腹", "妥", "揉", "賢",
41094"拆", "歪", "葡", "胺", "丟", "浩", "徽", "昂", "墊", "擋",
41095"覽", "貪", "慰", "繳", "汪", "慌", "馮", "諾", "姜", "誼",
41096"兇", "劣", "誣", "耀", "昏", "躺", "盈", "騎", "喬", "溪",
41097"叢", "盧", "抹", "悶", "諮", "刮", "駕", "纜", "悟", "摘",
41098"鉺", "擲", "頗", "幻", "柄", "惠", "慘", "佳", "仇", "臘",
41099"窩", "滌", "劍", "瞧", "堡", "潑", "蔥", "罩", "霍", "撈",
41100"胎", "蒼", "濱", "倆", "捅", "湘", "砍", "霞", "邵", "萄",
41101"瘋", "淮", "遂", "熊", "糞", "烘", "宿", "檔", "戈", "駁",
41102"嫂", "裕", "徙", "箭", "捐", "腸", "撐", "曬", "辨", "殿",
41103"蓮", "攤", "攪", "醬", "屏", "疫", "哀", "蔡", "堵", "沫",
41104"皺", "暢", "疊", "閣", "萊", "敲", "轄", "鉤", "痕", "壩",
41105"巷", "餓", "禍", "丘", "玄", "溜", "曰", "邏", "彭", "嘗",
41106"卿", "妨", "艇", "吞", "韋", "怨", "矮", "歇" ]
41107</script>
41108 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
41109WORDLISTS["french"] = [
41110"abaisser", "abandon", "abdiquer", "abeille", "abolir", "aborder", "aboutir", "aboyer", "abrasif", "abreuver",
41111"abriter", "abroger", "abrupt", "absence", "absolu", "absurde", "abusif", "abyssal", "académie", "acajou",
41112"acarien", "accabler", "accepter", "acclamer", "accolade", "accroche", "accuser", "acerbe", "achat", "acheter",
41113"aciduler", "acier", "acompte", "acquérir", "acronyme", "acteur", "actif", "actuel", "adepte", "adéquat",
41114"adhésif", "adjectif", "adjuger", "admettre", "admirer", "adopter", "adorer", "adoucir", "adresse", "adroit",
41115"adulte", "adverbe", "aérer", "aéronef", "affaire", "affecter", "affiche", "affreux", "affubler", "agacer",
41116"agencer", "agile", "agiter", "agrafer", "agréable", "agrume", "aider", "aiguille", "ailier", "aimable",
41117"aisance", "ajouter", "ajuster", "alarmer", "alchimie", "alerte", "algèbre", "algue", "aliéner", "aliment",
41118"alléger", "alliage", "allouer", "allumer", "alourdir", "alpaga", "altesse", "alvéole", "amateur", "ambigu",
41119"ambre", "aménager", "amertume", "amidon", "amiral", "amorcer", "amour", "amovible", "amphibie", "ampleur",
41120"amusant", "analyse", "anaphore", "anarchie", "anatomie", "ancien", "anéantir", "angle", "angoisse", "anguleux",
41121"animal", "annexer", "annonce", "annuel", "anodin", "anomalie", "anonyme", "anormal", "antenne", "antidote",
41122"anxieux", "apaiser", "apéritif", "aplanir", "apologie", "appareil", "appeler", "apporter", "appuyer", "aquarium",
41123"aqueduc", "arbitre", "arbuste", "ardeur", "ardoise", "argent", "arlequin", "armature", "armement", "armoire",
41124"armure", "arpenter", "arracher", "arriver", "arroser", "arsenic", "artériel", "article", "aspect", "asphalte",
41125"aspirer", "assaut", "asservir", "assiette", "associer", "assurer", "asticot", "astre", "astuce", "atelier",
41126"atome", "atrium", "atroce", "attaque", "attentif", "attirer", "attraper", "aubaine", "auberge", "audace",
41127"audible", "augurer", "aurore", "automne", "autruche", "avaler", "avancer", "avarice", "avenir", "averse",
41128"aveugle", "aviateur", "avide", "avion", "aviser", "avoine", "avouer", "avril", "axial", "axiome",
41129"badge", "bafouer", "bagage", "baguette", "baignade", "balancer", "balcon", "baleine", "balisage", "bambin",
41130"bancaire", "bandage", "banlieue", "bannière", "banquier", "barbier", "baril", "baron", "barque", "barrage",
41131"bassin", "bastion", "bataille", "bateau", "batterie", "baudrier", "bavarder", "belette", "bélier", "belote",
41132"bénéfice", "berceau", "berger", "berline", "bermuda", "besace", "besogne", "bétail", "beurre", "biberon",
41133"bicycle", "bidule", "bijou", "bilan", "bilingue", "billard", "binaire", "biologie", "biopsie", "biotype",
41134"biscuit", "bison", "bistouri", "bitume", "bizarre", "blafard", "blague", "blanchir", "blessant", "blinder",
41135"blond", "bloquer", "blouson", "bobard", "bobine", "boire", "boiser", "bolide", "bonbon", "bondir",
41136"bonheur", "bonifier", "bonus", "bordure", "borne", "botte", "boucle", "boueux", "bougie", "boulon",
41137"bouquin", "bourse", "boussole", "boutique", "boxeur", "branche", "brasier", "brave", "brebis", "brèche",
41138"breuvage", "bricoler", "brigade", "brillant", "brioche", "brique", "brochure", "broder", "bronzer", "brousse",
41139"broyeur", "brume", "brusque", "brutal", "bruyant", "buffle", "buisson", "bulletin", "bureau", "burin",
41140"bustier", "butiner", "butoir", "buvable", "buvette", "cabanon", "cabine", "cachette", "cadeau", "cadre",
41141"caféine", "caillou", "caisson", "calculer", "calepin", "calibre", "calmer", "calomnie", "calvaire", "camarade",
41142"caméra", "camion", "campagne", "canal", "caneton", "canon", "cantine", "canular", "capable", "caporal",
41143"caprice", "capsule", "capter", "capuche", "carabine", "carbone", "caresser", "caribou", "carnage", "carotte",
41144"carreau", "carton", "cascade", "casier", "casque", "cassure", "causer", "caution", "cavalier", "caverne",
41145"caviar", "cédille", "ceinture", "céleste", "cellule", "cendrier", "censurer", "central", "cercle", "cérébral",
41146"cerise", "cerner", "cerveau", "cesser", "chagrin", "chaise", "chaleur", "chambre", "chance", "chapitre",
41147"charbon", "chasseur", "chaton", "chausson", "chavirer", "chemise", "chenille", "chéquier", "chercher", "cheval",
41148"chien", "chiffre", "chignon", "chimère", "chiot", "chlorure", "chocolat", "choisir", "chose", "chouette",
41149"chrome", "chute", "cigare", "cigogne", "cimenter", "cinéma", "cintrer", "circuler", "cirer", "cirque",
41150"citerne", "citoyen", "citron", "civil", "clairon", "clameur", "claquer", "classe", "clavier", "client",
41151"cligner", "climat", "clivage", "cloche", "clonage", "cloporte", "cobalt", "cobra", "cocasse", "cocotier",
41152"coder", "codifier", "coffre", "cogner", "cohésion", "coiffer", "coincer", "colère", "colibri", "colline",
41153"colmater", "colonel", "combat", "comédie", "commande", "compact", "concert", "conduire", "confier", "congeler",
41154"connoter", "consonne", "contact", "convexe", "copain", "copie", "corail", "corbeau", "cordage", "corniche",
41155"corpus", "correct", "cortège", "cosmique", "costume", "coton", "coude", "coupure", "courage", "couteau",
41156"couvrir", "coyote", "crabe", "crainte", "cravate", "crayon", "créature", "créditer", "crémeux", "creuser",
41157"crevette", "cribler", "crier", "cristal", "critère", "croire", "croquer", "crotale", "crucial", "cruel",
41158"crypter", "cubique", "cueillir", "cuillère", "cuisine", "cuivre", "culminer", "cultiver", "cumuler", "cupide",
41159"curatif", "curseur", "cyanure", "cycle", "cylindre", "cynique", "daigner", "damier", "danger", "danseur",
41160"dauphin", "débattre", "débiter", "déborder", "débrider", "débutant", "décaler", "décembre", "déchirer", "décider",
41161"déclarer", "décorer", "décrire", "décupler", "dédale", "déductif", "déesse", "défensif", "défiler", "défrayer",
41162"dégager", "dégivrer", "déglutir", "dégrafer", "déjeuner", "délice", "déloger", "demander", "demeurer", "démolir",
41163"dénicher", "dénouer", "dentelle", "dénuder", "départ", "dépenser", "déphaser", "déplacer", "déposer", "déranger",
41164"dérober", "désastre", "descente", "désert", "désigner", "désobéir", "dessiner", "destrier", "détacher", "détester",
41165"détourer", "détresse", "devancer", "devenir", "deviner", "devoir", "diable", "dialogue", "diamant", "dicter",
41166"différer", "digérer", "digital", "digne", "diluer", "dimanche", "diminuer", "dioxyde", "directif", "diriger",
41167"discuter", "disposer", "dissiper", "distance", "divertir", "diviser", "docile", "docteur", "dogme", "doigt",
41168"domaine", "domicile", "dompter", "donateur", "donjon", "donner", "dopamine", "dortoir", "dorure", "dosage",
41169"doseur", "dossier", "dotation", "douanier", "double", "douceur", "douter", "doyen", "dragon", "draper",
41170"dresser", "dribbler", "droiture", "duperie", "duplexe", "durable", "durcir", "dynastie", "éblouir", "écarter",
41171"écharpe", "échelle", "éclairer", "éclipse", "éclore", "écluse", "école", "économie", "écorce", "écouter",
41172"écraser", "écrémer", "écrivain", "écrou", "écume", "écureuil", "édifier", "éduquer", "effacer", "effectif",
41173"effigie", "effort", "effrayer", "effusion", "égaliser", "égarer", "éjecter", "élaborer", "élargir", "électron",
41174"élégant", "éléphant", "élève", "éligible", "élitisme", "éloge", "élucider", "éluder", "emballer", "embellir",
41175"embryon", "émeraude", "émission", "emmener", "émotion", "émouvoir", "empereur", "employer", "emporter", "emprise",
41176"émulsion", "encadrer", "enchère", "enclave", "encoche", "endiguer", "endosser", "endroit", "enduire", "énergie",
41177"enfance", "enfermer", "enfouir", "engager", "engin", "englober", "énigme", "enjamber", "enjeu", "enlever",
41178"ennemi", "ennuyeux", "enrichir", "enrobage", "enseigne", "entasser", "entendre", "entier", "entourer", "entraver",
41179"énumérer", "envahir", "enviable", "envoyer", "enzyme", "éolien", "épaissir", "épargne", "épatant", "épaule",
41180"épicerie", "épidémie", "épier", "épilogue", "épine", "épisode", "épitaphe", "époque", "épreuve", "éprouver",
41181"épuisant", "équerre", "équipe", "ériger", "érosion", "erreur", "éruption", "escalier", "espadon", "espèce",
41182"espiègle", "espoir", "esprit", "esquiver", "essayer", "essence", "essieu", "essorer", "estime", "estomac",
41183"estrade", "étagère", "étaler", "étanche", "étatique", "éteindre", "étendoir", "éternel", "éthanol", "éthique",
41184"ethnie", "étirer", "étoffer", "étoile", "étonnant", "étourdir", "étrange", "étroit", "étude", "euphorie",
41185"évaluer", "évasion", "éventail", "évidence", "éviter", "évolutif", "évoquer", "exact", "exagérer", "exaucer",
41186"exceller", "excitant", "exclusif", "excuse", "exécuter", "exemple", "exercer", "exhaler", "exhorter", "exigence",
41187"exiler", "exister", "exotique", "expédier", "explorer", "exposer", "exprimer", "exquis", "extensif", "extraire",
41188"exulter", "fable", "fabuleux", "facette", "facile", "facture", "faiblir", "falaise", "fameux", "famille",
41189"farceur", "farfelu", "farine", "farouche", "fasciner", "fatal", "fatigue", "faucon", "fautif", "faveur",
41190"favori", "fébrile", "féconder", "fédérer", "félin", "femme", "fémur", "fendoir", "féodal", "fermer",
41191"féroce", "ferveur", "festival", "feuille", "feutre", "février", "fiasco", "ficeler", "fictif", "fidèle",
41192"figure", "filature", "filetage", "filière", "filleul", "filmer", "filou", "filtrer", "financer", "finir",
41193"fiole", "firme", "fissure", "fixer", "flairer", "flamme", "flasque", "flatteur", "fléau", "flèche",
41194"fleur", "flexion", "flocon", "flore", "fluctuer", "fluide", "fluvial", "folie", "fonderie", "fongible",
41195"fontaine", "forcer", "forgeron", "formuler", "fortune", "fossile", "foudre", "fougère", "fouiller", "foulure",
41196"fourmi", "fragile", "fraise", "franchir", "frapper", "frayeur", "frégate", "freiner", "frelon", "frémir",
41197"frénésie", "frère", "friable", "friction", "frisson", "frivole", "froid", "fromage", "frontal", "frotter",
41198"fruit", "fugitif", "fuite", "fureur", "furieux", "furtif", "fusion", "futur", "gagner", "galaxie",
41199"galerie", "gambader", "garantir", "gardien", "garnir", "garrigue", "gazelle", "gazon", "géant", "gélatine",
41200"gélule", "gendarme", "général", "génie", "genou", "gentil", "géologie", "géomètre", "géranium", "germe",
41201"gestuel", "geyser", "gibier", "gicler", "girafe", "givre", "glace", "glaive", "glisser", "globe",
41202"gloire", "glorieux", "golfeur", "gomme", "gonfler", "gorge", "gorille", "goudron", "gouffre", "goulot",
41203"goupille", "gourmand", "goutte", "graduel", "graffiti", "graine", "grand", "grappin", "gratuit", "gravir",
41204"grenat", "griffure", "griller", "grimper", "grogner", "gronder", "grotte", "groupe", "gruger", "grutier",
41205"gruyère", "guépard", "guerrier", "guide", "guimauve", "guitare", "gustatif", "gymnaste", "gyrostat", "habitude",
41206"hachoir", "halte", "hameau", "hangar", "hanneton", "haricot", "harmonie", "harpon", "hasard", "hélium",
41207"hématome", "herbe", "hérisson", "hermine", "héron", "hésiter", "heureux", "hiberner", "hibou", "hilarant",
41208"histoire", "hiver", "homard", "hommage", "homogène", "honneur", "honorer", "honteux", "horde", "horizon",
41209"horloge", "hormone", "horrible", "houleux", "housse", "hublot", "huileux", "humain", "humble", "humide",
41210"humour", "hurler", "hydromel", "hygiène", "hymne", "hypnose", "idylle", "ignorer", "iguane", "illicite",
41211"illusion", "image", "imbiber", "imiter", "immense", "immobile", "immuable", "impact", "impérial", "implorer",
41212"imposer", "imprimer", "imputer", "incarner", "incendie", "incident", "incliner", "incolore", "indexer", "indice",
41213"inductif", "inédit", "ineptie", "inexact", "infini", "infliger", "informer", "infusion", "ingérer", "inhaler",
41214"inhiber", "injecter", "injure", "innocent", "inoculer", "inonder", "inscrire", "insecte", "insigne", "insolite",
41215"inspirer", "instinct", "insulter", "intact", "intense", "intime", "intrigue", "intuitif", "inutile", "invasion",
41216"inventer", "inviter", "invoquer", "ironique", "irradier", "irréel", "irriter", "isoler", "ivoire", "ivresse",
41217"jaguar", "jaillir", "jambe", "janvier", "jardin", "jauger", "jaune", "javelot", "jetable", "jeton",
41218"jeudi", "jeunesse", "joindre", "joncher", "jongler", "joueur", "jouissif", "journal", "jovial", "joyau",
41219"joyeux", "jubiler", "jugement", "junior", "jupon", "juriste", "justice", "juteux", "juvénile", "kayak",
41220"kimono", "kiosque", "label", "labial", "labourer", "lacérer", "lactose", "lagune", "laine", "laisser",
41221"laitier", "lambeau", "lamelle", "lampe", "lanceur", "langage", "lanterne", "lapin", "largeur", "larme",
41222"laurier", "lavabo", "lavoir", "lecture", "légal", "léger", "légume", "lessive", "lettre", "levier",
41223"lexique", "lézard", "liasse", "libérer", "libre", "licence", "licorne", "liège", "lièvre", "ligature",
41224"ligoter", "ligue", "limer", "limite", "limonade", "limpide", "linéaire", "lingot", "lionceau", "liquide",
41225"lisière", "lister", "lithium", "litige", "littoral", "livreur", "logique", "lointain", "loisir", "lombric",
41226"loterie", "louer", "lourd", "loutre", "louve", "loyal", "lubie", "lucide", "lucratif", "lueur",
41227"lugubre", "luisant", "lumière", "lunaire", "lundi", "luron", "lutter", "luxueux", "machine", "magasin",
41228"magenta", "magique", "maigre", "maillon", "maintien", "mairie", "maison", "majorer", "malaxer", "maléfice",
41229"malheur", "malice", "mallette", "mammouth", "mandater", "maniable", "manquant", "manteau", "manuel", "marathon",
41230"marbre", "marchand", "mardi", "maritime", "marqueur", "marron", "marteler", "mascotte", "massif", "matériel",
41231"matière", "matraque", "maudire", "maussade", "mauve", "maximal", "méchant", "méconnu", "médaille", "médecin",
41232"méditer", "méduse", "meilleur", "mélange", "mélodie", "membre", "mémoire", "menacer", "mener", "menhir",
41233"mensonge", "mentor", "mercredi", "mérite", "merle", "messager", "mesure", "métal", "météore", "méthode",
41234"métier", "meuble", "miauler", "microbe", "miette", "mignon", "migrer", "milieu", "million", "mimique",
41235"mince", "minéral", "minimal", "minorer", "minute", "miracle", "miroiter", "missile", "mixte", "mobile",
41236"moderne", "moelleux", "mondial", "moniteur", "monnaie", "monotone", "monstre", "montagne", "monument", "moqueur",
41237"morceau", "morsure", "mortier", "moteur", "motif", "mouche", "moufle", "moulin", "mousson", "mouton",
41238"mouvant", "multiple", "munition", "muraille", "murène", "murmure", "muscle", "muséum", "musicien", "mutation",
41239"muter", "mutuel", "myriade", "myrtille", "mystère", "mythique", "nageur", "nappe", "narquois", "narrer",
41240"natation", "nation", "nature", "naufrage", "nautique", "navire", "nébuleux", "nectar", "néfaste", "négation",
41241"négliger", "négocier", "neige", "nerveux", "nettoyer", "neurone", "neutron", "neveu", "niche", "nickel",
41242"nitrate", "niveau", "noble", "nocif", "nocturne", "noirceur", "noisette", "nomade", "nombreux", "nommer",
41243"normatif", "notable", "notifier", "notoire", "nourrir", "nouveau", "novateur", "novembre", "novice", "nuage",
41244"nuancer", "nuire", "nuisible", "numéro", "nuptial", "nuque", "nutritif", "obéir", "objectif", "obliger",
41245"obscur", "observer", "obstacle", "obtenir", "obturer", "occasion", "occuper", "océan", "octobre", "octroyer",
41246"octupler", "oculaire", "odeur", "odorant", "offenser", "officier", "offrir", "ogive", "oiseau", "oisillon",
41247"olfactif", "olivier", "ombrage", "omettre", "onctueux", "onduler", "onéreux", "onirique", "opale", "opaque",
41248"opérer", "opinion", "opportun", "opprimer", "opter", "optique", "orageux", "orange", "orbite", "ordonner",
41249"oreille", "organe", "orgueil", "orifice", "ornement", "orque", "ortie", "osciller", "osmose", "ossature",
41250"otarie", "ouragan", "ourson", "outil", "outrager", "ouvrage", "ovation", "oxyde", "oxygène", "ozone",
41251"paisible", "palace", "palmarès", "palourde", "palper", "panache", "panda", "pangolin", "paniquer", "panneau",
41252"panorama", "pantalon", "papaye", "papier", "papoter", "papyrus", "paradoxe", "parcelle", "paresse", "parfumer",
41253"parler", "parole", "parrain", "parsemer", "partager", "parure", "parvenir", "passion", "pastèque", "paternel",
41254"patience", "patron", "pavillon", "pavoiser", "payer", "paysage", "peigne", "peintre", "pelage", "pélican",
41255"pelle", "pelouse", "peluche", "pendule", "pénétrer", "pénible", "pensif", "pénurie", "pépite", "péplum",
41256"perdrix", "perforer", "période", "permuter", "perplexe", "persil", "perte", "peser", "pétale", "petit",
41257"pétrir", "peuple", "pharaon", "phobie", "phoque", "photon", "phrase", "physique", "piano", "pictural",
41258"pièce", "pierre", "pieuvre", "pilote", "pinceau", "pipette", "piquer", "pirogue", "piscine", "piston",
41259"pivoter", "pixel", "pizza", "placard", "plafond", "plaisir", "planer", "plaque", "plastron", "plateau",
41260"pleurer", "plexus", "pliage", "plomb", "plonger", "pluie", "plumage", "pochette", "poésie", "poète",
41261"pointe", "poirier", "poisson", "poivre", "polaire", "policier", "pollen", "polygone", "pommade", "pompier",
41262"ponctuel", "pondérer", "poney", "portique", "position", "posséder", "posture", "potager", "poteau", "potion",
41263"pouce", "poulain", "poumon", "pourpre", "poussin", "pouvoir", "prairie", "pratique", "précieux", "prédire",
41264"préfixe", "prélude", "prénom", "présence", "prétexte", "prévoir", "primitif", "prince", "prison", "priver",
41265"problème", "procéder", "prodige", "profond", "progrès", "proie", "projeter", "prologue", "promener", "propre",
41266"prospère", "protéger", "prouesse", "proverbe", "prudence", "pruneau", "psychose", "public", "puceron", "puiser",
41267"pulpe", "pulsar", "punaise", "punitif", "pupitre", "purifier", "puzzle", "pyramide", "quasar", "querelle",
41268"question", "quiétude", "quitter", "quotient", "racine", "raconter", "radieux", "ragondin", "raideur", "raisin",
41269"ralentir", "rallonge", "ramasser", "rapide", "rasage", "ratisser", "ravager", "ravin", "rayonner", "réactif",
41270"réagir", "réaliser", "réanimer", "recevoir", "réciter", "réclamer", "récolter", "recruter", "reculer", "recycler",
41271"rédiger", "redouter", "refaire", "réflexe", "réformer", "refrain", "refuge", "régalien", "région", "réglage",
41272"régulier", "réitérer", "rejeter", "rejouer", "relatif", "relever", "relief", "remarque", "remède", "remise",
41273"remonter", "remplir", "remuer", "renard", "renfort", "renifler", "renoncer", "rentrer", "renvoi", "replier",
41274"reporter", "reprise", "reptile", "requin", "réserve", "résineux", "résoudre", "respect", "rester", "résultat",
41275"rétablir", "retenir", "réticule", "retomber", "retracer", "réunion", "réussir", "revanche", "revivre", "révolte",
41276"révulsif", "richesse", "rideau", "rieur", "rigide", "rigoler", "rincer", "riposter", "risible", "risque",
41277"rituel", "rival", "rivière", "rocheux", "romance", "rompre", "ronce", "rondin", "roseau", "rosier",
41278"rotatif", "rotor", "rotule", "rouge", "rouille", "rouleau", "routine", "royaume", "ruban", "rubis",
41279"ruche", "ruelle", "rugueux", "ruiner", "ruisseau", "ruser", "rustique", "rythme", "sabler", "saboter",
41280"sabre", "sacoche", "safari", "sagesse", "saisir", "salade", "salive", "salon", "saluer", "samedi",
41281"sanction", "sanglier", "sarcasme", "sardine", "saturer", "saugrenu", "saumon", "sauter", "sauvage", "savant",
41282"savonner", "scalpel", "scandale", "scélérat", "scénario", "sceptre", "schéma", "science", "scinder", "score",
41283"scrutin", "sculpter", "séance", "sécable", "sécher", "secouer", "sécréter", "sédatif", "séduire", "seigneur",
41284"séjour", "sélectif", "semaine", "sembler", "semence", "séminal", "sénateur", "sensible", "sentence", "séparer",
41285"séquence", "serein", "sergent", "sérieux", "serrure", "sérum", "service", "sésame", "sévir", "sevrage",
41286"sextuple", "sidéral", "siècle", "siéger", "siffler", "sigle", "signal", "silence", "silicium", "simple",
41287"sincère", "sinistre", "siphon", "sirop", "sismique", "situer", "skier", "social", "socle", "sodium",
41288"soigneux", "soldat", "soleil", "solitude", "soluble", "sombre", "sommeil", "somnoler", "sonde", "songeur",
41289"sonnette", "sonore", "sorcier", "sortir", "sosie", "sottise", "soucieux", "soudure", "souffle", "soulever",
41290"soupape", "source", "soutirer", "souvenir", "spacieux", "spatial", "spécial", "sphère", "spiral", "stable",
41291"station", "sternum", "stimulus", "stipuler", "strict", "studieux", "stupeur", "styliste", "sublime", "substrat",
41292"subtil", "subvenir", "succès", "sucre", "suffixe", "suggérer", "suiveur", "sulfate", "superbe", "supplier",
41293"surface", "suricate", "surmener", "surprise", "sursaut", "survie", "suspect", "syllabe", "symbole", "symétrie",
41294"synapse", "syntaxe", "système", "tabac", "tablier", "tactile", "tailler", "talent", "talisman", "talonner",
41295"tambour", "tamiser", "tangible", "tapis", "taquiner", "tarder", "tarif", "tartine", "tasse", "tatami",
41296"tatouage", "taupe", "taureau", "taxer", "témoin", "temporel", "tenaille", "tendre", "teneur", "tenir",
41297"tension", "terminer", "terne", "terrible", "tétine", "texte", "thème", "théorie", "thérapie", "thorax",
41298"tibia", "tiède", "timide", "tirelire", "tiroir", "tissu", "titane", "titre", "tituber", "toboggan",
41299"tolérant", "tomate", "tonique", "tonneau", "toponyme", "torche", "tordre", "tornade", "torpille", "torrent",
41300"torse", "tortue", "totem", "toucher", "tournage", "tousser", "toxine", "traction", "trafic", "tragique",
41301"trahir", "train", "trancher", "travail", "trèfle", "tremper", "trésor", "treuil", "triage", "tribunal",
41302"tricoter", "trilogie", "triomphe", "tripler", "triturer", "trivial", "trombone", "tronc", "tropical", "troupeau",
41303"tuile", "tulipe", "tumulte", "tunnel", "turbine", "tuteur", "tutoyer", "tuyau", "tympan", "typhon",
41304"typique", "tyran", "ubuesque", "ultime", "ultrason", "unanime", "unifier", "union", "unique", "unitaire",
41305"univers", "uranium", "urbain", "urticant", "usage", "usine", "usuel", "usure", "utile", "utopie",
41306"vacarme", "vaccin", "vagabond", "vague", "vaillant", "vaincre", "vaisseau", "valable", "valise", "vallon",
41307"valve", "vampire", "vanille", "vapeur", "varier", "vaseux", "vassal", "vaste", "vecteur", "vedette",
41308"végétal", "véhicule", "veinard", "véloce", "vendredi", "vénérer", "venger", "venimeux", "ventouse", "verdure",
41309"vérin", "vernir", "verrou", "verser", "vertu", "veston", "vétéran", "vétuste", "vexant", "vexer",
41310"viaduc", "viande", "victoire", "vidange", "vidéo", "vignette", "vigueur", "vilain", "village", "vinaigre",
41311"violon", "vipère", "virement", "virtuose", "virus", "visage", "viseur", "vision", "visqueux", "visuel",
41312"vital", "vitesse", "viticole", "vitrine", "vivace", "vivipare", "vocation", "voguer", "voile", "voisin",
41313"voiture", "volaille", "volcan", "voltiger", "volume", "vorace", "vortex", "voter", "vouloir", "voyage",
41314"voyelle", "wagon", "xénon", "yacht", "zèbre", "zénith", "zeste", "zoologie"]
41315</script>
41316 <script>WORDLISTS = typeof WORDLISTS == "undefined" ? {} : WORDLISTS;
41317WORDLISTS["italian"] = [
41318"abaco", "abbaglio", "abbinato", "abete", "abisso", "abolire", "abrasivo", "abrogato", "accadere", "accenno",
41319"accusato", "acetone", "achille", "acido", "acqua", "acre", "acrilico", "acrobata", "acuto", "adagio",
41320"addebito", "addome", "adeguato", "aderire", "adipe", "adottare", "adulare", "affabile", "affetto", "affisso",
41321"affranto", "aforisma", "afoso", "africano", "agave", "agente", "agevole", "aggancio", "agire", "agitare",
41322"agonismo", "agricolo", "agrumeto", "aguzzo", "alabarda", "alato", "albatro", "alberato", "albo", "albume",
41323"alce", "alcolico", "alettone", "alfa", "algebra", "aliante", "alibi", "alimento", "allagato", "allegro",
41324"allievo", "allodola", "allusivo", "almeno", "alogeno", "alpaca", "alpestre", "altalena", "alterno", "alticcio",
41325"altrove", "alunno", "alveolo", "alzare", "amalgama", "amanita", "amarena", "ambito", "ambrato", "ameba",
41326"america", "ametista", "amico", "ammasso", "ammenda", "ammirare", "ammonito", "amore", "ampio", "ampliare",
41327"amuleto", "anacardo", "anagrafe", "analista", "anarchia", "anatra", "anca", "ancella", "ancora", "andare",
41328"andrea", "anello", "angelo", "angolare", "angusto", "anima", "annegare", "annidato", "anno", "annuncio",
41329"anonimo", "anticipo", "anzi", "apatico", "apertura", "apode", "apparire", "appetito", "appoggio", "approdo",
41330"appunto", "aprile", "arabica", "arachide", "aragosta", "araldica", "arancio", "aratura", "arazzo", "arbitro",
41331"archivio", "ardito", "arenile", "argento", "argine", "arguto", "aria", "armonia", "arnese", "arredato",
41332"arringa", "arrosto", "arsenico", "arso", "artefice", "arzillo", "asciutto", "ascolto", "asepsi", "asettico",
41333"asfalto", "asino", "asola", "aspirato", "aspro", "assaggio", "asse", "assoluto", "assurdo", "asta",
41334"astenuto", "astice", "astratto", "atavico", "ateismo", "atomico", "atono", "attesa", "attivare", "attorno",
41335"attrito", "attuale", "ausilio", "austria", "autista", "autonomo", "autunno", "avanzato", "avere", "avvenire",
41336"avviso", "avvolgere", "azione", "azoto", "azzimo", "azzurro", "babele", "baccano", "bacino", "baco",
41337"badessa", "badilata", "bagnato", "baita", "balcone", "baldo", "balena", "ballata", "balzano", "bambino",
41338"bandire", "baraonda", "barbaro", "barca", "baritono", "barlume", "barocco", "basilico", "basso", "batosta",
41339"battuto", "baule", "bava", "bavosa", "becco", "beffa", "belgio", "belva", "benda", "benevole",
41340"benigno", "benzina", "bere", "berlina", "beta", "bibita", "bici", "bidone", "bifido", "biga",
41341"bilancia", "bimbo", "binocolo", "biologo", "bipede", "bipolare", "birbante", "birra", "biscotto", "bisesto",
41342"bisnonno", "bisonte", "bisturi", "bizzarro", "blando", "blatta", "bollito", "bonifico", "bordo", "bosco",
41343"botanico", "bottino", "bozzolo", "braccio", "bradipo", "brama", "branca", "bravura", "bretella", "brevetto",
41344"brezza", "briglia", "brillante", "brindare", "broccolo", "brodo", "bronzina", "brullo", "bruno", "bubbone",
41345"buca", "budino", "buffone", "buio", "bulbo", "buono", "burlone", "burrasca", "bussola", "busta",
41346"cadetto", "caduco", "calamaro", "calcolo", "calesse", "calibro", "calmo", "caloria", "cambusa", "camerata",
41347"camicia", "cammino", "camola", "campale", "canapa", "candela", "cane", "canino", "canotto", "cantina",
41348"capace", "capello", "capitolo", "capogiro", "cappero", "capra", "capsula", "carapace", "carcassa", "cardo",
41349"carisma", "carovana", "carretto", "cartolina", "casaccio", "cascata", "caserma", "caso", "cassone", "castello",
41350"casuale", "catasta", "catena", "catrame", "cauto", "cavillo", "cedibile", "cedrata", "cefalo", "celebre",
41351"cellulare", "cena", "cenone", "centesimo", "ceramica", "cercare", "certo", "cerume", "cervello", "cesoia",
41352"cespo", "ceto", "chela", "chiaro", "chicca", "chiedere", "chimera", "china", "chirurgo", "chitarra",
41353"ciao", "ciclismo", "cifrare", "cigno", "cilindro", "ciottolo", "circa", "cirrosi", "citrico", "cittadino",
41354"ciuffo", "civetta", "civile", "classico", "clinica", "cloro", "cocco", "codardo", "codice", "coerente",
41355"cognome", "collare", "colmato", "colore", "colposo", "coltivato", "colza", "coma", "cometa", "commando",
41356"comodo", "computer", "comune", "conciso", "condurre", "conferma", "congelare", "coniuge", "connesso", "conoscere",
41357"consumo", "continuo", "convegno", "coperto", "copione", "coppia", "copricapo", "corazza", "cordata", "coricato",
41358"cornice", "corolla", "corpo", "corredo", "corsia", "cortese", "cosmico", "costante", "cottura", "covato",
41359"cratere", "cravatta", "creato", "credere", "cremoso", "crescita", "creta", "criceto", "crinale", "crisi",
41360"critico", "croce", "cronaca", "crostata", "cruciale", "crusca", "cucire", "cuculo", "cugino", "cullato",
41361"cupola", "curatore", "cursore", "curvo", "cuscino", "custode", "dado", "daino", "dalmata", "damerino",
41362"daniela", "dannoso", "danzare", "datato", "davanti", "davvero", "debutto", "decennio", "deciso", "declino",
41363"decollo", "decreto", "dedicato", "definito", "deforme", "degno", "delegare", "delfino", "delirio", "delta",
41364"demenza", "denotato", "dentro", "deposito", "derapata", "derivare", "deroga", "descritto", "deserto", "desiderio",
41365"desumere", "detersivo", "devoto", "diametro", "dicembre", "diedro", "difeso", "diffuso", "digerire", "digitale",
41366"diluvio", "dinamico", "dinnanzi", "dipinto", "diploma", "dipolo", "diradare", "dire", "dirotto", "dirupo",
41367"disagio", "discreto", "disfare", "disgelo", "disposto", "distanza", "disumano", "dito", "divano", "divelto",
41368"dividere", "divorato", "doblone", "docente", "doganale", "dogma", "dolce", "domato", "domenica", "dominare",
41369"dondolo", "dono", "dormire", "dote", "dottore", "dovuto", "dozzina", "drago", "druido", "dubbio",
41370"dubitare", "ducale", "duna", "duomo", "duplice", "duraturo", "ebano", "eccesso", "ecco", "eclissi",
41371"economia", "edera", "edicola", "edile", "editoria", "educare", "egemonia", "egli", "egoismo", "egregio",
41372"elaborato", "elargire", "elegante", "elencato", "eletto", "elevare", "elfico", "elica", "elmo", "elsa",
41373"eluso", "emanato", "emblema", "emesso", "emiro", "emotivo", "emozione", "empirico", "emulo", "endemico",
41374"enduro", "energia", "enfasi", "enoteca", "entrare", "enzima", "epatite", "epilogo", "episodio", "epocale",
41375"eppure", "equatore", "erario", "erba", "erboso", "erede", "eremita", "erigere", "ermetico", "eroe",
41376"erosivo", "errante", "esagono", "esame", "esanime", "esaudire", "esca", "esempio", "esercito", "esibito",
41377"esigente", "esistere", "esito", "esofago", "esortato", "esoso", "espanso", "espresso", "essenza", "esso",
41378"esteso", "estimare", "estonia", "estroso", "esultare", "etilico", "etnico", "etrusco", "etto", "euclideo",
41379"europa", "evaso", "evidenza", "evitato", "evoluto", "evviva", "fabbrica", "faccenda", "fachiro", "falco",
41380"famiglia", "fanale", "fanfara", "fango", "fantasma", "fare", "farfalla", "farinoso", "farmaco", "fascia",
41381"fastoso", "fasullo", "faticare", "fato", "favoloso", "febbre", "fecola", "fede", "fegato", "felpa",
41382"feltro", "femmina", "fendere", "fenomeno", "fermento", "ferro", "fertile", "fessura", "festivo", "fetta",
41383"feudo", "fiaba", "fiducia", "fifa", "figurato", "filo", "finanza", "finestra", "finire", "fiore",
41384"fiscale", "fisico", "fiume", "flacone", "flamenco", "flebo", "flemma", "florido", "fluente", "fluoro",
41385"fobico", "focaccia", "focoso", "foderato", "foglio", "folata", "folclore", "folgore", "fondente", "fonetico",
41386"fonia", "fontana", "forbito", "forchetta", "foresta", "formica", "fornaio", "foro", "fortezza", "forzare",
41387"fosfato", "fosso", "fracasso", "frana", "frassino", "fratello", "freccetta", "frenata", "fresco", "frigo",
41388"frollino", "fronde", "frugale", "frutta", "fucilata", "fucsia", "fuggente", "fulmine", "fulvo", "fumante",
41389"fumetto", "fumoso", "fune", "funzione", "fuoco", "furbo", "furgone", "furore", "fuso", "futile",
41390"gabbiano", "gaffe", "galateo", "gallina", "galoppo", "gambero", "gamma", "garanzia", "garbo", "garofano",
41391"garzone", "gasdotto", "gasolio", "gastrico", "gatto", "gaudio", "gazebo", "gazzella", "geco", "gelatina",
41392"gelso", "gemello", "gemmato", "gene", "genitore", "gennaio", "genotipo", "gergo", "ghepardo", "ghiaccio",
41393"ghisa", "giallo", "gilda", "ginepro", "giocare", "gioiello", "giorno", "giove", "girato", "girone",
41394"gittata", "giudizio", "giurato", "giusto", "globulo", "glutine", "gnomo", "gobba", "golf", "gomito",
41395"gommone", "gonfio", "gonna", "governo", "gracile", "grado", "grafico", "grammo", "grande", "grattare",
41396"gravoso", "grazia", "greca", "gregge", "grifone", "grigio", "grinza", "grotta", "gruppo", "guadagno",
41397"guaio", "guanto", "guardare", "gufo", "guidare", "ibernato", "icona", "identico", "idillio", "idolo",
41398"idra", "idrico", "idrogeno", "igiene", "ignaro", "ignorato", "ilare", "illeso", "illogico", "illudere",
41399"imballo", "imbevuto", "imbocco", "imbuto", "immane", "immerso", "immolato", "impacco", "impeto", "impiego",
41400"importo", "impronta", "inalare", "inarcare", "inattivo", "incanto", "incendio", "inchino", "incisivo", "incluso",
41401"incontro", "incrocio", "incubo", "indagine", "india", "indole", "inedito", "infatti", "infilare", "inflitto",
41402"ingaggio", "ingegno", "inglese", "ingordo", "ingrosso", "innesco", "inodore", "inoltrare", "inondato", "insano",
41403"insetto", "insieme", "insonnia", "insulina", "intasato", "intero", "intonaco", "intuito", "inumidire", "invalido",
41404"invece", "invito", "iperbole", "ipnotico", "ipotesi", "ippica", "iride", "irlanda", "ironico", "irrigato",
41405"irrorare", "isolato", "isotopo", "isterico", "istituto", "istrice", "italia", "iterare", "labbro", "labirinto",
41406"lacca", "lacerato", "lacrima", "lacuna", "laddove", "lago", "lampo", "lancetta", "lanterna", "lardoso",
41407"larga", "laringe", "lastra", "latenza", "latino", "lattuga", "lavagna", "lavoro", "legale", "leggero",
41408"lembo", "lentezza", "lenza", "leone", "lepre", "lesivo", "lessato", "lesto", "letterale", "leva",
41409"levigato", "libero", "lido", "lievito", "lilla", "limatura", "limitare", "limpido", "lineare", "lingua",
41410"liquido", "lira", "lirica", "lisca", "lite", "litigio", "livrea", "locanda", "lode", "logica",
41411"lombare", "londra", "longevo", "loquace", "lorenzo", "loto", "lotteria", "luce", "lucidato", "lumaca",
41412"luminoso", "lungo", "lupo", "luppolo", "lusinga", "lusso", "lutto", "macabro", "macchina", "macero",
41413"macinato", "madama", "magico", "maglia", "magnete", "magro", "maiolica", "malafede", "malgrado", "malinteso",
41414"malsano", "malto", "malumore", "mana", "mancia", "mandorla", "mangiare", "manifesto", "mannaro", "manovra",
41415"mansarda", "mantide", "manubrio", "mappa", "maratona", "marcire", "maretta", "marmo", "marsupio", "maschera",
41416"massaia", "mastino", "materasso", "matricola", "mattone", "maturo", "mazurca", "meandro", "meccanico", "mecenate",
41417"medesimo", "meditare", "mega", "melassa", "melis", "melodia", "meninge", "meno", "mensola", "mercurio",
41418"merenda", "merlo", "meschino", "mese", "messere", "mestolo", "metallo", "metodo", "mettere", "miagolare",
41419"mica", "micelio", "michele", "microbo", "midollo", "miele", "migliore", "milano", "milite", "mimosa",
41420"minerale", "mini", "minore", "mirino", "mirtillo", "miscela", "missiva", "misto", "misurare", "mitezza",
41421"mitigare", "mitra", "mittente", "mnemonico", "modello", "modifica", "modulo", "mogano", "mogio", "mole",
41422"molosso", "monastero", "monco", "mondina", "monetario", "monile", "monotono", "monsone", "montato", "monviso",
41423"mora", "mordere", "morsicato", "mostro", "motivato", "motosega", "motto", "movenza", "movimento", "mozzo",
41424"mucca", "mucosa", "muffa", "mughetto", "mugnaio", "mulatto", "mulinello", "multiplo", "mummia", "munto",
41425"muovere", "murale", "musa", "muscolo", "musica", "mutevole", "muto", "nababbo", "nafta", "nanometro",
41426"narciso", "narice", "narrato", "nascere", "nastrare", "naturale", "nautica", "naviglio", "nebulosa", "necrosi",
41427"negativo", "negozio", "nemmeno", "neofita", "neretto", "nervo", "nessuno", "nettuno", "neutrale", "neve",
41428"nevrotico", "nicchia", "ninfa", "nitido", "nobile", "nocivo", "nodo", "nome", "nomina", "nordico",
41429"normale", "norvegese", "nostrano", "notare", "notizia", "notturno", "novella", "nucleo", "nulla", "numero",
41430"nuovo", "nutrire", "nuvola", "nuziale", "oasi", "obbedire", "obbligo", "obelisco", "oblio", "obolo",
41431"obsoleto", "occasione", "occhio", "occidente", "occorrere", "occultare", "ocra", "oculato", "odierno", "odorare",
41432"offerta", "offrire", "offuscato", "oggetto", "oggi", "ognuno", "olandese", "olfatto", "oliato", "oliva",
41433"ologramma", "oltre", "omaggio", "ombelico", "ombra", "omega", "omissione", "ondoso", "onere", "onice",
41434"onnivoro", "onorevole", "onta", "operato", "opinione", "opposto", "oracolo", "orafo", "ordine", "orecchino",
41435"orefice", "orfano", "organico", "origine", "orizzonte", "orma", "ormeggio", "ornativo", "orologio", "orrendo",
41436"orribile", "ortensia", "ortica", "orzata", "orzo", "osare", "oscurare", "osmosi", "ospedale", "ospite",
41437"ossa", "ossidare", "ostacolo", "oste", "otite", "otre", "ottagono", "ottimo", "ottobre", "ovale",
41438"ovest", "ovino", "oviparo", "ovocito", "ovunque", "ovviare", "ozio", "pacchetto", "pace", "pacifico",
41439"padella", "padrone", "paese", "paga", "pagina", "palazzina", "palesare", "pallido", "palo", "palude",
41440"pandoro", "pannello", "paolo", "paonazzo", "paprica", "parabola", "parcella", "parere", "pargolo", "pari",
41441"parlato", "parola", "partire", "parvenza", "parziale", "passivo", "pasticca", "patacca", "patologia", "pattume",
41442"pavone", "peccato", "pedalare", "pedonale", "peggio", "peloso", "penare", "pendice", "penisola", "pennuto",
41443"penombra", "pensare", "pentola", "pepe", "pepita", "perbene", "percorso", "perdonato", "perforare", "pergamena",
41444"periodo", "permesso", "perno", "perplesso", "persuaso", "pertugio", "pervaso", "pesatore", "pesista", "peso",
41445"pestifero", "petalo", "pettine", "petulante", "pezzo", "piacere", "pianta", "piattino", "piccino", "picozza",
41446"piega", "pietra", "piffero", "pigiama", "pigolio", "pigro", "pila", "pilifero", "pillola", "pilota",
41447"pimpante", "pineta", "pinna", "pinolo", "pioggia", "piombo", "piramide", "piretico", "pirite", "pirolisi",
41448"pitone", "pizzico", "placebo", "planare", "plasma", "platano", "plenario", "pochezza", "poderoso", "podismo",
41449"poesia", "poggiare", "polenta", "poligono", "pollice", "polmonite", "polpetta", "polso", "poltrona", "polvere",
41450"pomice", "pomodoro", "ponte", "popoloso", "porfido", "poroso", "porpora", "porre", "portata", "posa",
41451"positivo", "possesso", "postulato", "potassio", "potere", "pranzo", "prassi", "pratica", "precluso", "predica",
41452"prefisso", "pregiato", "prelievo", "premere", "prenotare", "preparato", "presenza", "pretesto", "prevalso", "prima",
41453"principe", "privato", "problema", "procura", "produrre", "profumo", "progetto", "prolunga", "promessa", "pronome",
41454"proposta", "proroga", "proteso", "prova", "prudente", "prugna", "prurito", "psiche", "pubblico", "pudica",
41455"pugilato", "pugno", "pulce", "pulito", "pulsante", "puntare", "pupazzo", "pupilla", "puro", "quadro",
41456"qualcosa", "quasi", "querela", "quota", "raccolto", "raddoppio", "radicale", "radunato", "raffica", "ragazzo",
41457"ragione", "ragno", "ramarro", "ramingo", "ramo", "randagio", "rantolare", "rapato", "rapina", "rappreso",
41458"rasatura", "raschiato", "rasente", "rassegna", "rastrello", "rata", "ravveduto", "reale", "recepire", "recinto",
41459"recluta", "recondito", "recupero", "reddito", "redimere", "regalato", "registro", "regola", "regresso", "relazione",
41460"remare", "remoto", "renna", "replica", "reprimere", "reputare", "resa", "residente", "responso", "restauro",
41461"rete", "retina", "retorica", "rettifica", "revocato", "riassunto", "ribadire", "ribelle", "ribrezzo", "ricarica",
41462"ricco", "ricevere", "riciclato", "ricordo", "ricreduto", "ridicolo", "ridurre", "rifasare", "riflesso", "riforma",
41463"rifugio", "rigare", "rigettato", "righello", "rilassato", "rilevato", "rimanere", "rimbalzo", "rimedio", "rimorchio",
41464"rinascita", "rincaro", "rinforzo", "rinnovo", "rinomato", "rinsavito", "rintocco", "rinuncia", "rinvenire", "riparato",
41465"ripetuto", "ripieno", "riportare", "ripresa", "ripulire", "risata", "rischio", "riserva", "risibile", "riso",
41466"rispetto", "ristoro", "risultato", "risvolto", "ritardo", "ritegno", "ritmico", "ritrovo", "riunione", "riva",
41467"riverso", "rivincita", "rivolto", "rizoma", "roba", "robotico", "robusto", "roccia", "roco", "rodaggio",
41468"rodere", "roditore", "rogito", "rollio", "romantico", "rompere", "ronzio", "rosolare", "rospo", "rotante",
41469"rotondo", "rotula", "rovescio", "rubizzo", "rubrica", "ruga", "rullino", "rumine", "rumoroso", "ruolo",
41470"rupe", "russare", "rustico", "sabato", "sabbiare", "sabotato", "sagoma", "salasso", "saldatura", "salgemma",
41471"salivare", "salmone", "salone", "saltare", "saluto", "salvo", "sapere", "sapido", "saporito", "saraceno",
41472"sarcasmo", "sarto", "sassoso", "satellite", "satira", "satollo", "saturno", "savana", "savio", "saziato",
41473"sbadiglio", "sbalzo", "sbancato", "sbarra", "sbattere", "sbavare", "sbendare", "sbirciare", "sbloccato", "sbocciato",
41474"sbrinare", "sbruffone", "sbuffare", "scabroso", "scadenza", "scala", "scambiare", "scandalo", "scapola", "scarso",
41475"scatenare", "scavato", "scelto", "scenico", "scettro", "scheda", "schiena", "sciarpa", "scienza", "scindere",
41476"scippo", "sciroppo", "scivolo", "sclerare", "scodella", "scolpito", "scomparto", "sconforto", "scoprire", "scorta",
41477"scossone", "scozzese", "scriba", "scrollare", "scrutinio", "scuderia", "scultore", "scuola", "scuro", "scusare",
41478"sdebitare", "sdoganare", "seccatura", "secondo", "sedano", "seggiola", "segnalato", "segregato", "seguito", "selciato",
41479"selettivo", "sella", "selvaggio", "semaforo", "sembrare", "seme", "seminato", "sempre", "senso", "sentire",
41480"sepolto", "sequenza", "serata", "serbato", "sereno", "serio", "serpente", "serraglio", "servire", "sestina",
41481"setola", "settimana", "sfacelo", "sfaldare", "sfamato", "sfarzoso", "sfaticato", "sfera", "sfida", "sfilato",
41482"sfinge", "sfocato", "sfoderare", "sfogo", "sfoltire", "sforzato", "sfratto", "sfruttato", "sfuggito", "sfumare",
41483"sfuso", "sgabello", "sgarbato", "sgonfiare", "sgorbio", "sgrassato", "sguardo", "sibilo", "siccome", "sierra",
41484"sigla", "signore", "silenzio", "sillaba", "simbolo", "simpatico", "simulato", "sinfonia", "singolo", "sinistro",
41485"sino", "sintesi", "sinusoide", "sipario", "sisma", "sistole", "situato", "slitta", "slogatura", "sloveno",
41486"smarrito", "smemorato", "smentito", "smeraldo", "smilzo", "smontare", "smottato", "smussato", "snellire", "snervato",
41487"snodo", "sobbalzo", "sobrio", "soccorso", "sociale", "sodale", "soffitto", "sogno", "soldato", "solenne",
41488"solido", "sollazzo", "solo", "solubile", "solvente", "somatico", "somma", "sonda", "sonetto", "sonnifero",
41489"sopire", "soppeso", "sopra", "sorgere", "sorpasso", "sorriso", "sorso", "sorteggio", "sorvolato", "sospiro",
41490"sosta", "sottile", "spada", "spalla", "spargere", "spatola", "spavento", "spazzola", "specie", "spedire",
41491"spegnere", "spelatura", "speranza", "spessore", "spettrale", "spezzato", "spia", "spigoloso", "spillato", "spinoso",
41492"spirale", "splendido", "sportivo", "sposo", "spranga", "sprecare", "spronato", "spruzzo", "spuntino", "squillo",
41493"sradicare", "srotolato", "stabile", "stacco", "staffa", "stagnare", "stampato", "stantio", "starnuto", "stasera",
41494"statuto", "stelo", "steppa", "sterzo", "stiletto", "stima", "stirpe", "stivale", "stizzoso", "stonato",
41495"storico", "strappo", "stregato", "stridulo", "strozzare", "strutto", "stuccare", "stufo", "stupendo", "subentro",
41496"succoso", "sudore", "suggerito", "sugo", "sultano", "suonare", "superbo", "supporto", "surgelato", "surrogato",
41497"sussurro", "sutura", "svagare", "svedese", "sveglio", "svelare", "svenuto", "svezia", "sviluppo", "svista",
41498"svizzera", "svolta", "svuotare", "tabacco", "tabulato", "tacciare", "taciturno", "tale", "talismano", "tampone",
41499"tannino", "tara", "tardivo", "targato", "tariffa", "tarpare", "tartaruga", "tasto", "tattico", "taverna",
41500"tavolata", "tazza", "teca", "tecnico", "telefono", "temerario", "tempo", "temuto", "tendone", "tenero",
41501"tensione", "tentacolo", "teorema", "terme", "terrazzo", "terzetto", "tesi", "tesserato", "testato", "tetro",
41502"tettoia", "tifare", "tigella", "timbro", "tinto", "tipico", "tipografo", "tiraggio", "tiro", "titanio",
41503"titolo", "titubante", "tizio", "tizzone", "toccare", "tollerare", "tolto", "tombola", "tomo", "tonfo",
41504"tonsilla", "topazio", "topologia", "toppa", "torba", "tornare", "torrone", "tortora", "toscano", "tossire",
41505"tostatura", "totano", "trabocco", "trachea", "trafila", "tragedia", "tralcio", "tramonto", "transito", "trapano",
41506"trarre", "trasloco", "trattato", "trave", "treccia", "tremolio", "trespolo", "tributo", "tricheco", "trifoglio",
41507"trillo", "trincea", "trio", "tristezza", "triturato", "trivella", "tromba", "trono", "troppo", "trottola",
41508"trovare", "truccato", "tubatura", "tuffato", "tulipano", "tumulto", "tunisia", "turbare", "turchino", "tuta",
41509"tutela", "ubicato", "uccello", "uccisore", "udire", "uditivo", "uffa", "ufficio", "uguale", "ulisse",
41510"ultimato", "umano", "umile", "umorismo", "uncinetto", "ungere", "ungherese", "unicorno", "unificato", "unisono",
41511"unitario", "unte", "uovo", "upupa", "uragano", "urgenza", "urlo", "usanza", "usato", "uscito",
41512"usignolo", "usuraio", "utensile", "utilizzo", "utopia", "vacante", "vaccinato", "vagabondo", "vagliato", "valanga",
41513"valgo", "valico", "valletta", "valoroso", "valutare", "valvola", "vampata", "vangare", "vanitoso", "vano",
41514"vantaggio", "vanvera", "vapore", "varano", "varcato", "variante", "vasca", "vedetta", "vedova", "veduto",
41515"vegetale", "veicolo", "velcro", "velina", "velluto", "veloce", "venato", "vendemmia", "vento", "verace",
41516"verbale", "vergogna", "verifica", "vero", "verruca", "verticale", "vescica", "vessillo", "vestale", "veterano",
41517"vetrina", "vetusto", "viandante", "vibrante", "vicenda", "vichingo", "vicinanza", "vidimare", "vigilia", "vigneto",
41518"vigore", "vile", "villano", "vimini", "vincitore", "viola", "vipera", "virgola", "virologo", "virulento",
41519"viscoso", "visione", "vispo", "vissuto", "visura", "vita", "vitello", "vittima", "vivanda", "vivido",
41520"viziare", "voce", "voga", "volatile", "volere", "volpe", "voragine", "vulcano", "zampogna", "zanna",
41521"zappato", "zattera", "zavorra", "zefiro", "zelante", "zelo", "zenzero", "zerbino", "zibetto", "zinco",
41522"zircone", "zitto", "zolla", "zotico", "zucchero", "zufolo", "zulu", "zuppa"]
dc55c6b0 41523</script>
ab78acc6 41524 <script>/*
3af2954a
IC
41525 * Copyright (c) 2013 Pavol Rusnak
41526 *
41527 * Permission is hereby granted, free of charge, to any person obtaining a copy of
41528 * this software and associated documentation files (the "Software"), to deal in
41529 * the Software without restriction, including without limitation the rights to
41530 * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
41531 * of the Software, and to permit persons to whom the Software is furnished to do
41532 * so, subject to the following conditions:
41533 *
41534 * The above copyright notice and this permission notice shall be included in all
41535 * copies or substantial portions of the Software.
41536 *
41537 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
41538 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
41539 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
41540 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
41541 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
41542 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
41543 */
41544
41545/*
41546 * Javascript port from python by Ian Coleman
41547 *
80c4dd2a
IC
41548 * Requires code from sjcl
41549 * https://github.com/bitwiseshiftleft/sjcl
3af2954a
IC
41550 */
41551
41552var Mnemonic = function(language) {
41553
41554 var PBKDF2_ROUNDS = 2048;
41555 var RADIX = 2048;
41556
41557 var self = this;
41558 var wordlist = [];
41559
80c4dd2a
IC
41560 var hmacSHA512 = function(key) {
41561 var hasher = new sjcl.misc.hmac(key, sjcl.hash.sha512);
41562 this.encrypt = function() {
41563 return hasher.encrypt.apply(hasher, arguments);
41564 };
41565 };
41566
3af2954a
IC
41567 function init() {
41568 wordlist = WORDLISTS[language];
41569 if (wordlist.length != RADIX) {
41570 err = 'Wordlist should contain ' + RADIX + ' words, but it contains ' + wordlist.length + ' words.';
41571 throw err;
41572 }
41573 }
41574
41575 self.generate = function(strength) {
41576 strength = strength || 128;
41577 var r = strength % 32;
41578 if (r > 0) {
41579 throw 'Strength should be divisible by 32, but it is not (' + r + ').';
41580 }
41581 var hasStrongCrypto = 'crypto' in window && window['crypto'] !== null;
41582 if (!hasStrongCrypto) {
41583 throw 'Mnemonic should be generated with strong randomness, but crypto.getRandomValues is unavailable';
41584 }
41585 var buffer = new Uint8Array(strength / 8);
41586 var data = crypto.getRandomValues(buffer);
41587 return self.toMnemonic(data);
41588 }
41589
80c4dd2a
IC
41590 self.toMnemonic = function(byteArray) {
41591 if (byteArray.length % 4 > 0) {
41592 throw 'Data length in bits should be divisible by 32, but it is not (' + byteArray.length + ' bytes = ' + byteArray.length*8 + ' bits).'
3af2954a
IC
41593 }
41594
41595 //h = hashlib.sha256(data).hexdigest()
80c4dd2a
IC
41596 var data = byteArrayToWordArray(byteArray);
41597 var hash = sjcl.hash.sha256.hash(data);
41598 var h = sjcl.codec.hex.fromBits(hash);
3af2954a
IC
41599
41600 // b is a binary string, eg '00111010101100...'
41601 //b = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8) + \
41602 // bin(int(h, 16))[2:].zfill(256)[:len(data) * 8 / 32]
41603 //
41604 // a = bin(int(binascii.hexlify(data), 16))[2:].zfill(len(data) * 8)
41605 // c = bin(int(h, 16))[2:].zfill(256)
41606 // d = c[:len(data) * 8 / 32]
80c4dd2a
IC
41607 var a = byteArrayToBinaryString(byteArray);
41608 var c = zfill(hexStringToBinaryString(h), 256);
41609 var d = c.substring(0, byteArray.length * 8 / 32);
3af2954a
IC
41610 // b = line1 + line2
41611 var b = a + d;
41612
41613 var result = [];
41614 var blen = b.length / 11;
41615 for (var i=0; i<blen; i++) {
41616 var idx = parseInt(b.substring(i * 11, (i + 1) * 11), 2);
41617 result.push(wordlist[idx]);
41618 }
0515eeec 41619 return self.joinWords(result);
3af2954a
IC
41620 }
41621
41622 self.check = function(mnemonic) {
0515eeec 41623 var mnemonic = self.splitWords(mnemonic);
18abe53b 41624 if (mnemonic.length == 0 || mnemonic.length % 3 > 0) {
3af2954a
IC
41625 return false
41626 }
41627 // idx = map(lambda x: bin(self.wordlist.index(x))[2:].zfill(11), mnemonic)
41628 var idx = [];
41629 for (var i=0; i<mnemonic.length; i++) {
41630 var word = mnemonic[i];
41631 var wordIndex = wordlist.indexOf(word);
41632 if (wordIndex == -1) {
41633 return false;
41634 }
41635 var binaryIndex = zfill(wordIndex.toString(2), 11);
41636 idx.push(binaryIndex);
41637 }
41638 var b = idx.join('');
41639 var l = b.length;
41640 //d = b[:l / 33 * 32]
41641 //h = b[-l / 33:]
41642 var d = b.substring(0, l / 33 * 32);
41643 var h = b.substring(l - l / 33, l);
41644 //nd = binascii.unhexlify(hex(int(d, 2))[2:].rstrip('L').zfill(l / 33 * 8))
80c4dd2a 41645 var nd = binaryStringToWordArray(d);
3af2954a 41646 //nh = bin(int(hashlib.sha256(nd).hexdigest(), 16))[2:].zfill(256)[:l / 33]
80c4dd2a
IC
41647 var ndHash = sjcl.hash.sha256.hash(nd);
41648 var ndHex = sjcl.codec.hex.fromBits(ndHash);
41649 var ndBstr = zfill(hexStringToBinaryString(ndHex), 256);
3af2954a
IC
41650 var nh = ndBstr.substring(0,l/33);
41651 return h == nh;
41652 }
41653
41654 self.toSeed = function(mnemonic, passphrase) {
41655 passphrase = passphrase || '';
599fb39e
IC
41656 mnemonic = self.joinWords(self.splitWords(mnemonic)); // removes duplicate blanks
41657 var mnemonicNormalized = self.normalizeString(mnemonic);
3af2954a
IC
41658 passphrase = self.normalizeString(passphrase)
41659 passphrase = "mnemonic" + passphrase;
599fb39e 41660 var mnemonicBits = sjcl.codec.utf8String.toBits(mnemonicNormalized);
80c4dd2a
IC
41661 var passphraseBits = sjcl.codec.utf8String.toBits(passphrase);
41662 var result = sjcl.misc.pbkdf2(mnemonicBits, passphraseBits, PBKDF2_ROUNDS, 512, hmacSHA512);
41663 var hashHex = sjcl.codec.hex.fromBits(result);
41664 return hashHex;
3af2954a
IC
41665 }
41666
0515eeec
IC
41667 self.splitWords = function(mnemonic) {
41668 return mnemonic.split(/\s/g).filter(function(x) { return x.length; });
41669 }
41670
41671 self.joinWords = function(words) {
41672 // Set space correctly depending on the language
41673 // see https://github.com/bitcoin/bips/blob/master/bip-0039/bip-0039-wordlists.md#japanese
41674 var space = " ";
41675 if (language == "japanese") {
41676 space = "\u3000"; // ideographic space
41677 }
41678 return words.join(space);
41679 }
41680
3af2954a
IC
41681 self.normalizeString = function(str) {
41682 if (typeof str.normalize == "function") {
41683 return str.normalize("NFKD");
41684 }
41685 else {
41686 // TODO decide how to handle this in the future.
41687 // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize
41688 return str;
41689 }
41690 }
41691
80c4dd2a
IC
41692 function byteArrayToWordArray(data) {
41693 var a = [];
41694 for (var i=0; i<data.length/4; i++) {
41695 v = 0;
41696 v += data[i*4 + 0] << 8 * 3;
41697 v += data[i*4 + 1] << 8 * 2;
41698 v += data[i*4 + 2] << 8 * 1;
41699 v += data[i*4 + 3] << 8 * 0;
41700 a.push(v);
41701 }
41702 return a;
41703 }
41704
3af2954a
IC
41705 function byteArrayToBinaryString(data) {
41706 var bin = "";
41707 for (var i=0; i<data.length; i++) {
41708 bin += zfill(data[i].toString(2), 8);
41709 }
41710 return bin;
41711 }
41712
80c4dd2a
IC
41713 function hexStringToBinaryString(hexString) {
41714 binaryString = "";
41715 for (var i=0; i<hexString.length; i++) {
41716 binaryString += zfill(parseInt(hexString[i], 16).toString(2),4);
41717 }
41718 return binaryString;
41719 }
41720
41721 function binaryStringToWordArray(binary) {
41722 var aLen = binary.length / 32;
41723 var a = [];
41724 for (var i=0; i<aLen; i++) {
41725 var valueStr = binary.substring(0,32);
3af2954a 41726 var value = parseInt(valueStr, 2);
80c4dd2a
IC
41727 a.push(value);
41728 binary = binary.slice(32);
3af2954a 41729 }
80c4dd2a 41730 return a;
3af2954a
IC
41731 }
41732
41733 // Pad a numeric string on the left with zero digits until the given width
41734 // is reached.
41735 // Note this differs to the python implementation because it does not
41736 // handle numbers starting with a sign.
41737 function zfill(source, length) {
41738 source = source.toString();
41739 while (source.length < length) {
41740 source = '0' + source;
41741 }
41742 return source;
41743 }
41744
41745 init();
ebd8d4e8 41746
3af2954a 41747}
dc55c6b0 41748</script>
95f04905
IC
41749 <script>/*
41750 JavaScript BigInteger library version 0.9.1
41751 http://silentmatt.com/biginteger/
18abe53b 41752
95f04905
IC
41753 Copyright (c) 2009 Matthew Crumley <email@matthewcrumley.com>
41754 Copyright (c) 2010,2011 by John Tobey <John.Tobey@gmail.com>
41755 Licensed under the MIT license.
c6624d51 41756
95f04905
IC
41757 Support for arbitrary internal representation base was added by
41758 Vitaly Magerya.
41759*/
18abe53b 41760
95f04905
IC
41761/*
41762 File: biginteger.js
18abe53b 41763
95f04905 41764 Exports:
18abe53b 41765
95f04905
IC
41766 <BigInteger>
41767*/
41768(function(exports) {
41769"use strict";
41770/*
41771 Class: BigInteger
41772 An arbitrarily-large integer.
18abe53b 41773
95f04905
IC
41774 <BigInteger> objects should be considered immutable. None of the "built-in"
41775 methods modify *this* or their arguments. All properties should be
41776 considered private.
18abe53b 41777
95f04905
IC
41778 All the methods of <BigInteger> instances can be called "statically". The
41779 static versions are convenient if you don't already have a <BigInteger>
41780 object.
18abe53b 41781
95f04905 41782 As an example, these calls are equivalent.
18abe53b 41783
95f04905
IC
41784 > BigInteger(4).multiply(5); // returns BigInteger(20);
41785 > BigInteger.multiply(4, 5); // returns BigInteger(20);
18abe53b 41786
95f04905
IC
41787 > var a = 42;
41788 > var a = BigInteger.toJSValue("0b101010"); // Not completely useless...
41789*/
c6624d51 41790
95f04905 41791var CONSTRUCT = {}; // Unique token to call "private" version of constructor
c6624d51
IC
41792
41793/*
41794 Constructor: BigInteger()
41795 Convert a value to a <BigInteger>.
41796
41797 Although <BigInteger()> is the constructor for <BigInteger> objects, it is
41798 best not to call it as a constructor. If *n* is a <BigInteger> object, it is
41799 simply returned as-is. Otherwise, <BigInteger()> is equivalent to <parse>
41800 without a radix argument.
41801
41802 > var n0 = BigInteger(); // Same as <BigInteger.ZERO>
41803 > var n1 = BigInteger("123"); // Create a new <BigInteger> with value 123
41804 > var n2 = BigInteger(123); // Create a new <BigInteger> with value 123
41805 > var n3 = BigInteger(n2); // Return n2, unchanged
41806
41807 The constructor form only takes an array and a sign. *n* must be an
41808 array of numbers in little-endian order, where each digit is between 0
41809 and BigInteger.base. The second parameter sets the sign: -1 for
41810 negative, +1 for positive, or 0 for zero. The array is *not copied and
41811 may be modified*. If the array contains only zeros, the sign parameter
41812 is ignored and is forced to zero.
41813
41814 > new BigInteger([5], -1): create a new BigInteger with value -5
41815
41816 Parameters:
41817
41818 n - Value to convert to a <BigInteger>.
41819
41820 Returns:
41821
41822 A <BigInteger> value.
41823
41824 See Also:
41825
41826 <parse>, <BigInteger>
41827*/
41828function BigInteger(n, s, token) {
41829 if (token !== CONSTRUCT) {
41830 if (n instanceof BigInteger) {
41831 return n;
41832 }
41833 else if (typeof n === "undefined") {
41834 return ZERO;
41835 }
41836 return BigInteger.parse(n);
41837 }
41838
41839 n = n || []; // Provide the nullary constructor for subclasses.
41840 while (n.length && !n[n.length - 1]) {
41841 --n.length;
41842 }
41843 this._d = n;
41844 this._s = n.length ? (s || 1) : 0;
41845}
41846
41847BigInteger._construct = function(n, s) {
41848 return new BigInteger(n, s, CONSTRUCT);
41849};
41850
41851// Base-10 speedup hacks in parse, toString, exp10 and log functions
41852// require base to be a power of 10. 10^7 is the largest such power
41853// that won't cause a precision loss when digits are multiplied.
41854var BigInteger_base = 10000000;
41855var BigInteger_base_log10 = 7;
41856
41857BigInteger.base = BigInteger_base;
41858BigInteger.base_log10 = BigInteger_base_log10;
41859
41860var ZERO = new BigInteger([], 0, CONSTRUCT);
41861// Constant: ZERO
41862// <BigInteger> 0.
41863BigInteger.ZERO = ZERO;
41864
41865var ONE = new BigInteger([1], 1, CONSTRUCT);
41866// Constant: ONE
41867// <BigInteger> 1.
41868BigInteger.ONE = ONE;
41869
41870var M_ONE = new BigInteger(ONE._d, -1, CONSTRUCT);
41871// Constant: M_ONE
41872// <BigInteger> -1.
41873BigInteger.M_ONE = M_ONE;
41874
41875// Constant: _0
41876// Shortcut for <ZERO>.
41877BigInteger._0 = ZERO;
41878
41879// Constant: _1
41880// Shortcut for <ONE>.
41881BigInteger._1 = ONE;
41882
41883/*
41884 Constant: small
41885 Array of <BigIntegers> from 0 to 36.
41886
41887 These are used internally for parsing, but useful when you need a "small"
41888 <BigInteger>.
41889
41890 See Also:
41891
41892 <ZERO>, <ONE>, <_0>, <_1>
41893*/
41894BigInteger.small = [
41895 ZERO,
41896 ONE,
41897 /* Assuming BigInteger_base > 36 */
41898 new BigInteger( [2], 1, CONSTRUCT),
41899 new BigInteger( [3], 1, CONSTRUCT),
41900 new BigInteger( [4], 1, CONSTRUCT),
41901 new BigInteger( [5], 1, CONSTRUCT),
41902 new BigInteger( [6], 1, CONSTRUCT),
41903 new BigInteger( [7], 1, CONSTRUCT),
41904 new BigInteger( [8], 1, CONSTRUCT),
41905 new BigInteger( [9], 1, CONSTRUCT),
41906 new BigInteger([10], 1, CONSTRUCT),
41907 new BigInteger([11], 1, CONSTRUCT),
41908 new BigInteger([12], 1, CONSTRUCT),
41909 new BigInteger([13], 1, CONSTRUCT),
41910 new BigInteger([14], 1, CONSTRUCT),
41911 new BigInteger([15], 1, CONSTRUCT),
41912 new BigInteger([16], 1, CONSTRUCT),
41913 new BigInteger([17], 1, CONSTRUCT),
41914 new BigInteger([18], 1, CONSTRUCT),
41915 new BigInteger([19], 1, CONSTRUCT),
41916 new BigInteger([20], 1, CONSTRUCT),
41917 new BigInteger([21], 1, CONSTRUCT),
41918 new BigInteger([22], 1, CONSTRUCT),
41919 new BigInteger([23], 1, CONSTRUCT),
41920 new BigInteger([24], 1, CONSTRUCT),
41921 new BigInteger([25], 1, CONSTRUCT),
41922 new BigInteger([26], 1, CONSTRUCT),
41923 new BigInteger([27], 1, CONSTRUCT),
41924 new BigInteger([28], 1, CONSTRUCT),
41925 new BigInteger([29], 1, CONSTRUCT),
41926 new BigInteger([30], 1, CONSTRUCT),
41927 new BigInteger([31], 1, CONSTRUCT),
41928 new BigInteger([32], 1, CONSTRUCT),
41929 new BigInteger([33], 1, CONSTRUCT),
41930 new BigInteger([34], 1, CONSTRUCT),
41931 new BigInteger([35], 1, CONSTRUCT),
41932 new BigInteger([36], 1, CONSTRUCT)
41933];
41934
41935// Used for parsing/radix conversion
41936BigInteger.digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
41937
41938/*
41939 Method: toString
41940 Convert a <BigInteger> to a string.
41941
41942 When *base* is greater than 10, letters are upper case.
41943
41944 Parameters:
41945
41946 base - Optional base to represent the number in (default is base 10).
41947 Must be between 2 and 36 inclusive, or an Error will be thrown.
41948
41949 Returns:
41950
41951 The string representation of the <BigInteger>.
41952*/
41953BigInteger.prototype.toString = function(base) {
41954 base = +base || 10;
41955 if (base < 2 || base > 36) {
41956 throw new Error("illegal radix " + base + ".");
41957 }
41958 if (this._s === 0) {
41959 return "0";
41960 }
41961 if (base === 10) {
41962 var str = this._s < 0 ? "-" : "";
41963 str += this._d[this._d.length - 1].toString();
41964 for (var i = this._d.length - 2; i >= 0; i--) {
41965 var group = this._d[i].toString();
41966 while (group.length < BigInteger_base_log10) group = '0' + group;
41967 str += group;
41968 }
41969 return str;
41970 }
41971 else {
41972 var numerals = BigInteger.digits;
41973 base = BigInteger.small[base];
41974 var sign = this._s;
41975
41976 var n = this.abs();
41977 var digits = [];
41978 var digit;
41979
41980 while (n._s !== 0) {
41981 var divmod = n.divRem(base);
41982 n = divmod[0];
41983 digit = divmod[1];
41984 // TODO: This could be changed to unshift instead of reversing at the end.
41985 // Benchmark both to compare speeds.
41986 digits.push(numerals[digit.valueOf()]);
41987 }
41988 return (sign < 0 ? "-" : "") + digits.reverse().join("");
41989 }
41990};
41991
41992// Verify strings for parsing
41993BigInteger.radixRegex = [
41994 /^$/,
41995 /^$/,
41996 /^[01]*$/,
41997 /^[012]*$/,
41998 /^[0-3]*$/,
41999 /^[0-4]*$/,
42000 /^[0-5]*$/,
42001 /^[0-6]*$/,
42002 /^[0-7]*$/,
42003 /^[0-8]*$/,
42004 /^[0-9]*$/,
42005 /^[0-9aA]*$/,
42006 /^[0-9abAB]*$/,
42007 /^[0-9abcABC]*$/,
42008 /^[0-9a-dA-D]*$/,
42009 /^[0-9a-eA-E]*$/,
42010 /^[0-9a-fA-F]*$/,
42011 /^[0-9a-gA-G]*$/,
42012 /^[0-9a-hA-H]*$/,
42013 /^[0-9a-iA-I]*$/,
42014 /^[0-9a-jA-J]*$/,
42015 /^[0-9a-kA-K]*$/,
42016 /^[0-9a-lA-L]*$/,
42017 /^[0-9a-mA-M]*$/,
42018 /^[0-9a-nA-N]*$/,
42019 /^[0-9a-oA-O]*$/,
42020 /^[0-9a-pA-P]*$/,
42021 /^[0-9a-qA-Q]*$/,
42022 /^[0-9a-rA-R]*$/,
42023 /^[0-9a-sA-S]*$/,
42024 /^[0-9a-tA-T]*$/,
42025 /^[0-9a-uA-U]*$/,
42026 /^[0-9a-vA-V]*$/,
42027 /^[0-9a-wA-W]*$/,
42028 /^[0-9a-xA-X]*$/,
42029 /^[0-9a-yA-Y]*$/,
42030 /^[0-9a-zA-Z]*$/
42031];
42032
42033/*
42034 Function: parse
42035 Parse a string into a <BigInteger>.
42036
42037 *base* is optional but, if provided, must be from 2 to 36 inclusive. If
42038 *base* is not provided, it will be guessed based on the leading characters
42039 of *s* as follows:
42040
42041 - "0x" or "0X": *base* = 16
42042 - "0c" or "0C": *base* = 8
42043 - "0b" or "0B": *base* = 2
42044 - else: *base* = 10
42045
42046 If no base is provided, or *base* is 10, the number can be in exponential
42047 form. For example, these are all valid:
42048
42049 > BigInteger.parse("1e9"); // Same as "1000000000"
42050 > BigInteger.parse("1.234*10^3"); // Same as 1234
42051 > BigInteger.parse("56789 * 10 ** -2"); // Same as 567
42052
42053 If any characters fall outside the range defined by the radix, an exception
42054 will be thrown.
42055
42056 Parameters:
42057
42058 s - The string to parse.
42059 base - Optional radix (default is to guess based on *s*).
42060
42061 Returns:
42062
42063 a <BigInteger> instance.
42064*/
42065BigInteger.parse = function(s, base) {
42066 // Expands a number in exponential form to decimal form.
42067 // expandExponential("-13.441*10^5") === "1344100";
42068 // expandExponential("1.12300e-1") === "0.112300";
42069 // expandExponential(1000000000000000000000000000000) === "1000000000000000000000000000000";
42070 function expandExponential(str) {
42071 str = str.replace(/\s*[*xX]\s*10\s*(\^|\*\*)\s*/, "e");
42072
42073 return str.replace(/^([+\-])?(\d+)\.?(\d*)[eE]([+\-]?\d+)$/, function(x, s, n, f, c) {
42074 c = +c;
42075 var l = c < 0;
42076 var i = n.length + c;
42077 x = (l ? n : f).length;
42078 c = ((c = Math.abs(c)) >= x ? c - x + l : 0);
42079 var z = (new Array(c + 1)).join("0");
42080 var r = n + f;
42081 return (s || "") + (l ? r = z + r : r += z).substr(0, i += l ? z.length : 0) + (i < r.length ? "." + r.substr(i) : "");
42082 });
42083 }
42084
42085 s = s.toString();
42086 if (typeof base === "undefined" || +base === 10) {
42087 s = expandExponential(s);
42088 }
42089
42090 var prefixRE;
42091 if (typeof base === "undefined") {
42092 prefixRE = '0[xcb]';
42093 }
42094 else if (base == 16) {
42095 prefixRE = '0x';
42096 }
42097 else if (base == 8) {
42098 prefixRE = '0c';
42099 }
42100 else if (base == 2) {
42101 prefixRE = '0b';
42102 }
42103 else {
42104 prefixRE = '';
42105 }
42106 var parts = new RegExp('^([+\\-]?)(' + prefixRE + ')?([0-9a-z]*)(?:\\.\\d*)?$', 'i').exec(s);
42107 if (parts) {
42108 var sign = parts[1] || "+";
42109 var baseSection = parts[2] || "";
42110 var digits = parts[3] || "";
42111
42112 if (typeof base === "undefined") {
42113 // Guess base
42114 if (baseSection === "0x" || baseSection === "0X") { // Hex
42115 base = 16;
42116 }
42117 else if (baseSection === "0c" || baseSection === "0C") { // Octal
42118 base = 8;
42119 }
42120 else if (baseSection === "0b" || baseSection === "0B") { // Binary
42121 base = 2;
42122 }
42123 else {
42124 base = 10;
42125 }
42126 }
42127 else if (base < 2 || base > 36) {
42128 throw new Error("Illegal radix " + base + ".");
42129 }
42130
42131 base = +base;
42132
42133 // Check for digits outside the range
42134 if (!(BigInteger.radixRegex[base].test(digits))) {
42135 throw new Error("Bad digit for radix " + base);
42136 }
42137
42138 // Strip leading zeros, and convert to array
42139 digits = digits.replace(/^0+/, "").split("");
42140 if (digits.length === 0) {
42141 return ZERO;
42142 }
42143
42144 // Get the sign (we know it's not zero)
42145 sign = (sign === "-") ? -1 : 1;
42146
42147 // Optimize 10
42148 if (base == 10) {
42149 var d = [];
42150 while (digits.length >= BigInteger_base_log10) {
42151 d.push(parseInt(digits.splice(digits.length-BigInteger.base_log10, BigInteger.base_log10).join(''), 10));
42152 }
42153 d.push(parseInt(digits.join(''), 10));
42154 return new BigInteger(d, sign, CONSTRUCT);
42155 }
42156
42157 // Do the conversion
42158 var d = ZERO;
42159 base = BigInteger.small[base];
42160 var small = BigInteger.small;
42161 for (var i = 0; i < digits.length; i++) {
42162 d = d.multiply(base).add(small[parseInt(digits[i], 36)]);
42163 }
42164 return new BigInteger(d._d, sign, CONSTRUCT);
42165 }
42166 else {
42167 throw new Error("Invalid BigInteger format: " + s);
42168 }
42169};
42170
42171/*
42172 Function: add
42173 Add two <BigIntegers>.
42174
42175 Parameters:
42176
42177 n - The number to add to *this*. Will be converted to a <BigInteger>.
42178
42179 Returns:
42180
42181 The numbers added together.
42182
42183 See Also:
42184
42185 <subtract>, <multiply>, <quotient>, <next>
42186*/
42187BigInteger.prototype.add = function(n) {
42188 if (this._s === 0) {
42189 return BigInteger(n);
42190 }
42191
42192 n = BigInteger(n);
42193 if (n._s === 0) {
42194 return this;
42195 }
42196 if (this._s !== n._s) {
42197 n = n.negate();
42198 return this.subtract(n);
42199 }
42200
42201 var a = this._d;
42202 var b = n._d;
42203 var al = a.length;
42204 var bl = b.length;
42205 var sum = new Array(Math.max(al, bl) + 1);
42206 var size = Math.min(al, bl);
42207 var carry = 0;
42208 var digit;
42209
42210 for (var i = 0; i < size; i++) {
42211 digit = a[i] + b[i] + carry;
42212 sum[i] = digit % BigInteger_base;
42213 carry = (digit / BigInteger_base) | 0;
42214 }
42215 if (bl > al) {
42216 a = b;
42217 al = bl;
42218 }
42219 for (i = size; carry && i < al; i++) {
42220 digit = a[i] + carry;
42221 sum[i] = digit % BigInteger_base;
42222 carry = (digit / BigInteger_base) | 0;
42223 }
42224 if (carry) {
42225 sum[i] = carry;
42226 }
42227
42228 for ( ; i < al; i++) {
42229 sum[i] = a[i];
42230 }
42231
42232 return new BigInteger(sum, this._s, CONSTRUCT);
42233};
42234
42235/*
42236 Function: negate
42237 Get the additive inverse of a <BigInteger>.
42238
42239 Returns:
42240
42241 A <BigInteger> with the same magnatude, but with the opposite sign.
42242
42243 See Also:
42244
42245 <abs>
42246*/
42247BigInteger.prototype.negate = function() {
42248 return new BigInteger(this._d, (-this._s) | 0, CONSTRUCT);
42249};
42250
42251/*
42252 Function: abs
42253 Get the absolute value of a <BigInteger>.
42254
42255 Returns:
42256
42257 A <BigInteger> with the same magnatude, but always positive (or zero).
42258
42259 See Also:
42260
42261 <negate>
42262*/
42263BigInteger.prototype.abs = function() {
42264 return (this._s < 0) ? this.negate() : this;
42265};
42266
42267/*
42268 Function: subtract
42269 Subtract two <BigIntegers>.
42270
42271 Parameters:
42272
42273 n - The number to subtract from *this*. Will be converted to a <BigInteger>.
42274
42275 Returns:
42276
42277 The *n* subtracted from *this*.
42278
42279 See Also:
42280
42281 <add>, <multiply>, <quotient>, <prev>
42282*/
42283BigInteger.prototype.subtract = function(n) {
42284 if (this._s === 0) {
42285 return BigInteger(n).negate();
42286 }
42287
42288 n = BigInteger(n);
42289 if (n._s === 0) {
42290 return this;
42291 }
42292 if (this._s !== n._s) {
42293 n = n.negate();
42294 return this.add(n);
42295 }
42296
42297 var m = this;
42298 // negative - negative => -|a| - -|b| => -|a| + |b| => |b| - |a|
42299 if (this._s < 0) {
42300 m = new BigInteger(n._d, 1, CONSTRUCT);
42301 n = new BigInteger(this._d, 1, CONSTRUCT);
42302 }
42303
42304 // Both are positive => a - b
42305 var sign = m.compareAbs(n);
42306 if (sign === 0) {
42307 return ZERO;
42308 }
42309 else if (sign < 0) {
42310 // swap m and n
42311 var t = n;
42312 n = m;
42313 m = t;
42314 }
42315
42316 // a > b
42317 var a = m._d;
42318 var b = n._d;
42319 var al = a.length;
42320 var bl = b.length;
42321 var diff = new Array(al); // al >= bl since a > b
42322 var borrow = 0;
42323 var i;
42324 var digit;
42325
42326 for (i = 0; i < bl; i++) {
42327 digit = a[i] - borrow - b[i];
42328 if (digit < 0) {
42329 digit += BigInteger_base;
42330 borrow = 1;
42331 }
42332 else {
42333 borrow = 0;
42334 }
42335 diff[i] = digit;
42336 }
42337 for (i = bl; i < al; i++) {
42338 digit = a[i] - borrow;
42339 if (digit < 0) {
42340 digit += BigInteger_base;
42341 }
42342 else {
42343 diff[i++] = digit;
42344 break;
42345 }
42346 diff[i] = digit;
42347 }
42348 for ( ; i < al; i++) {
42349 diff[i] = a[i];
42350 }
42351
42352 return new BigInteger(diff, sign, CONSTRUCT);
42353};
42354
42355(function() {
42356 function addOne(n, sign) {
42357 var a = n._d;
42358 var sum = a.slice();
42359 var carry = true;
42360 var i = 0;
42361
42362 while (true) {
42363 var digit = (a[i] || 0) + 1;
42364 sum[i] = digit % BigInteger_base;
42365 if (digit <= BigInteger_base - 1) {
42366 break;
42367 }
42368 ++i;
42369 }
42370
42371 return new BigInteger(sum, sign, CONSTRUCT);
42372 }
42373
42374 function subtractOne(n, sign) {
42375 var a = n._d;
42376 var sum = a.slice();
42377 var borrow = true;
42378 var i = 0;
42379
42380 while (true) {
42381 var digit = (a[i] || 0) - 1;
42382 if (digit < 0) {
42383 sum[i] = digit + BigInteger_base;
42384 }
42385 else {
42386 sum[i] = digit;
42387 break;
42388 }
42389 ++i;
42390 }
42391
42392 return new BigInteger(sum, sign, CONSTRUCT);
42393 }
42394
42395 /*
42396 Function: next
42397 Get the next <BigInteger> (add one).
42398
42399 Returns:
42400
42401 *this* + 1.
42402
42403 See Also:
42404
42405 <add>, <prev>
42406 */
42407 BigInteger.prototype.next = function() {
42408 switch (this._s) {
42409 case 0:
42410 return ONE;
42411 case -1:
42412 return subtractOne(this, -1);
42413 // case 1:
42414 default:
42415 return addOne(this, 1);
42416 }
42417 };
42418
42419 /*
42420 Function: prev
42421 Get the previous <BigInteger> (subtract one).
42422
42423 Returns:
42424
42425 *this* - 1.
42426
42427 See Also:
42428
42429 <next>, <subtract>
42430 */
42431 BigInteger.prototype.prev = function() {
42432 switch (this._s) {
42433 case 0:
42434 return M_ONE;
42435 case -1:
42436 return addOne(this, -1);
42437 // case 1:
42438 default:
42439 return subtractOne(this, 1);
42440 }
42441 };
42442})();
42443
42444/*
42445 Function: compareAbs
42446 Compare the absolute value of two <BigIntegers>.
42447
42448 Calling <compareAbs> is faster than calling <abs> twice, then <compare>.
42449
42450 Parameters:
42451
42452 n - The number to compare to *this*. Will be converted to a <BigInteger>.
42453
42454 Returns:
42455
42456 -1, 0, or +1 if *|this|* is less than, equal to, or greater than *|n|*.
42457
42458 See Also:
42459
42460 <compare>, <abs>
42461*/
42462BigInteger.prototype.compareAbs = function(n) {
42463 if (this === n) {
42464 return 0;
42465 }
42466
42467 if (!(n instanceof BigInteger)) {
42468 if (!isFinite(n)) {
42469 return(isNaN(n) ? n : -1);
42470 }
42471 n = BigInteger(n);
42472 }
42473
42474 if (this._s === 0) {
42475 return (n._s !== 0) ? -1 : 0;
42476 }
42477 if (n._s === 0) {
42478 return 1;
42479 }
42480
42481 var l = this._d.length;
42482 var nl = n._d.length;
42483 if (l < nl) {
42484 return -1;
42485 }
42486 else if (l > nl) {
42487 return 1;
42488 }
42489
42490 var a = this._d;
42491 var b = n._d;
42492 for (var i = l-1; i >= 0; i--) {
42493 if (a[i] !== b[i]) {
42494 return a[i] < b[i] ? -1 : 1;
42495 }
42496 }
42497
42498 return 0;
42499};
42500
42501/*
42502 Function: compare
42503 Compare two <BigIntegers>.
42504
42505 Parameters:
42506
42507 n - The number to compare to *this*. Will be converted to a <BigInteger>.
42508
42509 Returns:
42510
42511 -1, 0, or +1 if *this* is less than, equal to, or greater than *n*.
42512
42513 See Also:
42514
42515 <compareAbs>, <isPositive>, <isNegative>, <isUnit>
42516*/
42517BigInteger.prototype.compare = function(n) {
42518 if (this === n) {
42519 return 0;
42520 }
42521
42522 n = BigInteger(n);
42523
42524 if (this._s === 0) {
42525 return -n._s;
42526 }
42527
42528 if (this._s === n._s) { // both positive or both negative
42529 var cmp = this.compareAbs(n);
42530 return cmp * this._s;
42531 }
42532 else {
42533 return this._s;
42534 }
42535};
42536
42537/*
42538 Function: isUnit
42539 Return true iff *this* is either 1 or -1.
42540
42541 Returns:
42542
42543 true if *this* compares equal to <BigInteger.ONE> or <BigInteger.M_ONE>.
42544
42545 See Also:
42546
42547 <isZero>, <isNegative>, <isPositive>, <compareAbs>, <compare>,
42548 <BigInteger.ONE>, <BigInteger.M_ONE>
42549*/
42550BigInteger.prototype.isUnit = function() {
42551 return this === ONE ||
42552 this === M_ONE ||
42553 (this._d.length === 1 && this._d[0] === 1);
42554};
42555
42556/*
42557 Function: multiply
42558 Multiply two <BigIntegers>.
42559
42560 Parameters:
42561
42562 n - The number to multiply *this* by. Will be converted to a
42563 <BigInteger>.
42564
42565 Returns:
42566
42567 The numbers multiplied together.
42568
42569 See Also:
42570
42571 <add>, <subtract>, <quotient>, <square>
42572*/
42573BigInteger.prototype.multiply = function(n) {
42574 // TODO: Consider adding Karatsuba multiplication for large numbers
42575 if (this._s === 0) {
42576 return ZERO;
42577 }
42578
42579 n = BigInteger(n);
42580 if (n._s === 0) {
42581 return ZERO;
42582 }
42583 if (this.isUnit()) {
42584 if (this._s < 0) {
42585 return n.negate();
42586 }
42587 return n;
42588 }
42589 if (n.isUnit()) {
42590 if (n._s < 0) {
42591 return this.negate();
42592 }
42593 return this;
42594 }
42595 if (this === n) {
42596 return this.square();
42597 }
42598
42599 var r = (this._d.length >= n._d.length);
42600 var a = (r ? this : n)._d; // a will be longer than b
42601 var b = (r ? n : this)._d;
42602 var al = a.length;
42603 var bl = b.length;
42604
42605 var pl = al + bl;
42606 var partial = new Array(pl);
42607 var i;
42608 for (i = 0; i < pl; i++) {
42609 partial[i] = 0;
42610 }
42611
42612 for (i = 0; i < bl; i++) {
42613 var carry = 0;
42614 var bi = b[i];
42615 var jlimit = al + i;
42616 var digit;
42617 for (var j = i; j < jlimit; j++) {
42618 digit = partial[j] + bi * a[j - i] + carry;
42619 carry = (digit / BigInteger_base) | 0;
42620 partial[j] = (digit % BigInteger_base) | 0;
42621 }
42622 if (carry) {
42623 digit = partial[j] + carry;
42624 carry = (digit / BigInteger_base) | 0;
42625 partial[j] = digit % BigInteger_base;
42626 }
42627 }
42628 return new BigInteger(partial, this._s * n._s, CONSTRUCT);
42629};
42630
42631// Multiply a BigInteger by a single-digit native number
42632// Assumes that this and n are >= 0
42633// This is not really intended to be used outside the library itself
42634BigInteger.prototype.multiplySingleDigit = function(n) {
42635 if (n === 0 || this._s === 0) {
42636 return ZERO;
42637 }
42638 if (n === 1) {
42639 return this;
42640 }
42641
42642 var digit;
42643 if (this._d.length === 1) {
42644 digit = this._d[0] * n;
42645 if (digit >= BigInteger_base) {
42646 return new BigInteger([(digit % BigInteger_base)|0,
42647 (digit / BigInteger_base)|0], 1, CONSTRUCT);
42648 }
42649 return new BigInteger([digit], 1, CONSTRUCT);
42650 }
42651
42652 if (n === 2) {
42653 return this.add(this);
42654 }
42655 if (this.isUnit()) {
42656 return new BigInteger([n], 1, CONSTRUCT);
42657 }
42658
42659 var a = this._d;
42660 var al = a.length;
42661
42662 var pl = al + 1;
42663 var partial = new Array(pl);
42664 for (var i = 0; i < pl; i++) {
42665 partial[i] = 0;
42666 }
42667
42668 var carry = 0;
42669 for (var j = 0; j < al; j++) {
42670 digit = n * a[j] + carry;
42671 carry = (digit / BigInteger_base) | 0;
42672 partial[j] = (digit % BigInteger_base) | 0;
42673 }
42674 if (carry) {
42675 partial[j] = carry;
42676 }
42677
42678 return new BigInteger(partial, 1, CONSTRUCT);
42679};
42680
42681/*
42682 Function: square
42683 Multiply a <BigInteger> by itself.
42684
42685 This is slightly faster than regular multiplication, since it removes the
42686 duplicated multiplcations.
42687
42688 Returns:
42689
42690 > this.multiply(this)
42691
42692 See Also:
42693 <multiply>
42694*/
42695BigInteger.prototype.square = function() {
42696 // Normally, squaring a 10-digit number would take 100 multiplications.
42697 // Of these 10 are unique diagonals, of the remaining 90 (100-10), 45 are repeated.
42698 // This procedure saves (N*(N-1))/2 multiplications, (e.g., 45 of 100 multiplies).
42699 // Based on code by Gary Darby, Intellitech Systems Inc., www.DelphiForFun.org
42700
42701 if (this._s === 0) {
42702 return ZERO;
42703 }
42704 if (this.isUnit()) {
42705 return ONE;
42706 }
42707
42708 var digits = this._d;
42709 var length = digits.length;
42710 var imult1 = new Array(length + length + 1);
42711 var product, carry, k;
42712 var i;
42713
42714 // Calculate diagonal
42715 for (i = 0; i < length; i++) {
42716 k = i * 2;
42717 product = digits[i] * digits[i];
42718 carry = (product / BigInteger_base) | 0;
42719 imult1[k] = product % BigInteger_base;
42720 imult1[k + 1] = carry;
42721 }
42722
42723 // Calculate repeating part
42724 for (i = 0; i < length; i++) {
42725 carry = 0;
42726 k = i * 2 + 1;
42727 for (var j = i + 1; j < length; j++, k++) {
42728 product = digits[j] * digits[i] * 2 + imult1[k] + carry;
42729 carry = (product / BigInteger_base) | 0;
42730 imult1[k] = product % BigInteger_base;
42731 }
42732 k = length + i;
42733 var digit = carry + imult1[k];
42734 carry = (digit / BigInteger_base) | 0;
42735 imult1[k] = digit % BigInteger_base;
42736 imult1[k + 1] += carry;
42737 }
42738
42739 return new BigInteger(imult1, 1, CONSTRUCT);
42740};
42741
42742/*
42743 Function: quotient
42744 Divide two <BigIntegers> and truncate towards zero.
42745
42746 <quotient> throws an exception if *n* is zero.
42747
42748 Parameters:
42749
42750 n - The number to divide *this* by. Will be converted to a <BigInteger>.
42751
42752 Returns:
42753
42754 The *this* / *n*, truncated to an integer.
42755
42756 See Also:
42757
42758 <add>, <subtract>, <multiply>, <divRem>, <remainder>
42759*/
42760BigInteger.prototype.quotient = function(n) {
42761 return this.divRem(n)[0];
42762};
42763
42764/*
42765 Function: divide
42766 Deprecated synonym for <quotient>.
42767*/
42768BigInteger.prototype.divide = BigInteger.prototype.quotient;
42769
42770/*
42771 Function: remainder
42772 Calculate the remainder of two <BigIntegers>.
42773
42774 <remainder> throws an exception if *n* is zero.
42775
42776 Parameters:
42777
42778 n - The remainder after *this* is divided *this* by *n*. Will be
42779 converted to a <BigInteger>.
42780
42781 Returns:
42782
42783 *this* % *n*.
42784
42785 See Also:
42786
42787 <divRem>, <quotient>
42788*/
42789BigInteger.prototype.remainder = function(n) {
42790 return this.divRem(n)[1];
42791};
42792
42793/*
42794 Function: divRem
42795 Calculate the integer quotient and remainder of two <BigIntegers>.
42796
42797 <divRem> throws an exception if *n* is zero.
42798
42799 Parameters:
42800
42801 n - The number to divide *this* by. Will be converted to a <BigInteger>.
42802
42803 Returns:
42804
42805 A two-element array containing the quotient and the remainder.
42806
42807 > a.divRem(b)
42808
42809 is exactly equivalent to
42810
42811 > [a.quotient(b), a.remainder(b)]
42812
42813 except it is faster, because they are calculated at the same time.
42814
42815 See Also:
42816
42817 <quotient>, <remainder>
42818*/
42819BigInteger.prototype.divRem = function(n) {
42820 n = BigInteger(n);
42821 if (n._s === 0) {
42822 throw new Error("Divide by zero");
42823 }
42824 if (this._s === 0) {
42825 return [ZERO, ZERO];
42826 }
42827 if (n._d.length === 1) {
42828 return this.divRemSmall(n._s * n._d[0]);
42829 }
42830
42831 // Test for easy cases -- |n1| <= |n2|
42832 switch (this.compareAbs(n)) {
42833 case 0: // n1 == n2
42834 return [this._s === n._s ? ONE : M_ONE, ZERO];
42835 case -1: // |n1| < |n2|
42836 return [ZERO, this];
42837 }
42838
42839 var sign = this._s * n._s;
42840 var a = n.abs();
42841 var b_digits = this._d;
42842 var b_index = b_digits.length;
42843 var digits = n._d.length;
42844 var quot = [];
42845 var guess;
42846
42847 var part = new BigInteger([], 0, CONSTRUCT);
42848
42849 while (b_index) {
42850 part._d.unshift(b_digits[--b_index]);
42851 part = new BigInteger(part._d, 1, CONSTRUCT);
42852
42853 if (part.compareAbs(n) < 0) {
42854 quot.push(0);
42855 continue;
42856 }
42857 if (part._s === 0) {
42858 guess = 0;
42859 }
42860 else {
42861 var xlen = part._d.length, ylen = a._d.length;
42862 var highx = part._d[xlen-1]*BigInteger_base + part._d[xlen-2];
42863 var highy = a._d[ylen-1]*BigInteger_base + a._d[ylen-2];
42864 if (part._d.length > a._d.length) {
42865 // The length of part._d can either match a._d length,
42866 // or exceed it by one.
42867 highx = (highx+1)*BigInteger_base;
42868 }
42869 guess = Math.ceil(highx/highy);
42870 }
42871 do {
42872 var check = a.multiplySingleDigit(guess);
42873 if (check.compareAbs(part) <= 0) {
42874 break;
42875 }
42876 guess--;
42877 } while (guess);
42878
42879 quot.push(guess);
42880 if (!guess) {
42881 continue;
42882 }
42883 var diff = part.subtract(check);
42884 part._d = diff._d.slice();
42885 }
42886
42887 return [new BigInteger(quot.reverse(), sign, CONSTRUCT),
42888 new BigInteger(part._d, this._s, CONSTRUCT)];
42889};
42890
42891// Throws an exception if n is outside of (-BigInteger.base, -1] or
42892// [1, BigInteger.base). It's not necessary to call this, since the
42893// other division functions will call it if they are able to.
42894BigInteger.prototype.divRemSmall = function(n) {
42895 var r;
42896 n = +n;
42897 if (n === 0) {
42898 throw new Error("Divide by zero");
42899 }
42900
42901 var n_s = n < 0 ? -1 : 1;
42902 var sign = this._s * n_s;
42903 n = Math.abs(n);
42904
42905 if (n < 1 || n >= BigInteger_base) {
42906 throw new Error("Argument out of range");
42907 }
42908
42909 if (this._s === 0) {
42910 return [ZERO, ZERO];
42911 }
42912
42913 if (n === 1 || n === -1) {
42914 return [(sign === 1) ? this.abs() : new BigInteger(this._d, sign, CONSTRUCT), ZERO];
42915 }
42916
42917 // 2 <= n < BigInteger_base
42918
42919 // divide a single digit by a single digit
42920 if (this._d.length === 1) {
42921 var q = new BigInteger([(this._d[0] / n) | 0], 1, CONSTRUCT);
42922 r = new BigInteger([(this._d[0] % n) | 0], 1, CONSTRUCT);
42923 if (sign < 0) {
42924 q = q.negate();
42925 }
42926 if (this._s < 0) {
42927 r = r.negate();
42928 }
42929 return [q, r];
42930 }
42931
42932 var digits = this._d.slice();
42933 var quot = new Array(digits.length);
42934 var part = 0;
42935 var diff = 0;
42936 var i = 0;
42937 var guess;
42938
42939 while (digits.length) {
42940 part = part * BigInteger_base + digits[digits.length - 1];
42941 if (part < n) {
42942 quot[i++] = 0;
42943 digits.pop();
42944 diff = BigInteger_base * diff + part;
42945 continue;
42946 }
42947 if (part === 0) {
42948 guess = 0;
42949 }
42950 else {
42951 guess = (part / n) | 0;
42952 }
42953
42954 var check = n * guess;
42955 diff = part - check;
42956 quot[i++] = guess;
42957 if (!guess) {
42958 digits.pop();
42959 continue;
42960 }
42961
42962 digits.pop();
42963 part = diff;
42964 }
42965
42966 r = new BigInteger([diff], 1, CONSTRUCT);
42967 if (this._s < 0) {
42968 r = r.negate();
42969 }
42970 return [new BigInteger(quot.reverse(), sign, CONSTRUCT), r];
42971};
42972
42973/*
42974 Function: isEven
42975 Return true iff *this* is divisible by two.
42976
42977 Note that <BigInteger.ZERO> is even.
42978
42979 Returns:
42980
42981 true if *this* is even, false otherwise.
42982
42983 See Also:
42984
42985 <isOdd>
42986*/
42987BigInteger.prototype.isEven = function() {
42988 var digits = this._d;
42989 return this._s === 0 || digits.length === 0 || (digits[0] % 2) === 0;
42990};
42991
42992/*
42993 Function: isOdd
42994 Return true iff *this* is not divisible by two.
42995
42996 Returns:
42997
42998 true if *this* is odd, false otherwise.
42999
43000 See Also:
43001
43002 <isEven>
43003*/
43004BigInteger.prototype.isOdd = function() {
43005 return !this.isEven();
43006};
43007
43008/*
43009 Function: sign
43010 Get the sign of a <BigInteger>.
43011
43012 Returns:
43013
43014 * -1 if *this* < 0
43015 * 0 if *this* == 0
43016 * +1 if *this* > 0
43017
43018 See Also:
43019
43020 <isZero>, <isPositive>, <isNegative>, <compare>, <BigInteger.ZERO>
43021*/
43022BigInteger.prototype.sign = function() {
43023 return this._s;
43024};
43025
43026/*
43027 Function: isPositive
43028 Return true iff *this* > 0.
43029
43030 Returns:
43031
43032 true if *this*.compare(<BigInteger.ZERO>) == 1.
43033
43034 See Also:
43035
43036 <sign>, <isZero>, <isNegative>, <isUnit>, <compare>, <BigInteger.ZERO>
43037*/
43038BigInteger.prototype.isPositive = function() {
43039 return this._s > 0;
43040};
43041
43042/*
43043 Function: isNegative
43044 Return true iff *this* < 0.
43045
43046 Returns:
43047
43048 true if *this*.compare(<BigInteger.ZERO>) == -1.
43049
43050 See Also:
43051
43052 <sign>, <isPositive>, <isZero>, <isUnit>, <compare>, <BigInteger.ZERO>
43053*/
43054BigInteger.prototype.isNegative = function() {
43055 return this._s < 0;
43056};
43057
43058/*
43059 Function: isZero
43060 Return true iff *this* == 0.
43061
43062 Returns:
43063
43064 true if *this*.compare(<BigInteger.ZERO>) == 0.
43065
43066 See Also:
43067
43068 <sign>, <isPositive>, <isNegative>, <isUnit>, <BigInteger.ZERO>
43069*/
43070BigInteger.prototype.isZero = function() {
43071 return this._s === 0;
43072};
43073
43074/*
43075 Function: exp10
43076 Multiply a <BigInteger> by a power of 10.
43077
43078 This is equivalent to, but faster than
43079
43080 > if (n >= 0) {
43081 > return this.multiply(BigInteger("1e" + n));
43082 > }
43083 > else { // n <= 0
43084 > return this.quotient(BigInteger("1e" + -n));
43085 > }
43086
43087 Parameters:
43088
43089 n - The power of 10 to multiply *this* by. *n* is converted to a
43090 javascipt number and must be no greater than <BigInteger.MAX_EXP>
43091 (0x7FFFFFFF), or an exception will be thrown.
43092
43093 Returns:
43094
43095 *this* * (10 ** *n*), truncated to an integer if necessary.
43096
43097 See Also:
43098
43099 <pow>, <multiply>
43100*/
43101BigInteger.prototype.exp10 = function(n) {
43102 n = +n;
43103 if (n === 0) {
43104 return this;
43105 }
43106 if (Math.abs(n) > Number(MAX_EXP)) {
43107 throw new Error("exponent too large in BigInteger.exp10");
43108 }
43109 // Optimization for this == 0. This also keeps us from having to trim zeros in the positive n case
43110 if (this._s === 0) {
43111 return ZERO;
43112 }
43113 if (n > 0) {
43114 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
43115
43116 for (; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
43117 k._d.unshift(0);
43118 }
43119 if (n == 0)
43120 return k;
43121 k._s = 1;
43122 k = k.multiplySingleDigit(Math.pow(10, n));
43123 return (this._s < 0 ? k.negate() : k);
43124 } else if (-n >= this._d.length*BigInteger_base_log10) {
43125 return ZERO;
43126 } else {
43127 var k = new BigInteger(this._d.slice(), this._s, CONSTRUCT);
43128
43129 for (n = -n; n >= BigInteger_base_log10; n -= BigInteger_base_log10) {
43130 k._d.shift();
43131 }
43132 return (n == 0) ? k : k.divRemSmall(Math.pow(10, n))[0];
43133 }
43134};
43135
43136/*
43137 Function: pow
43138 Raise a <BigInteger> to a power.
43139
43140 In this implementation, 0**0 is 1.
43141
43142 Parameters:
43143
43144 n - The exponent to raise *this* by. *n* must be no greater than
43145 <BigInteger.MAX_EXP> (0x7FFFFFFF), or an exception will be thrown.
43146
43147 Returns:
43148
43149 *this* raised to the *nth* power.
43150
43151 See Also:
43152
43153 <modPow>
43154*/
43155BigInteger.prototype.pow = function(n) {
43156 if (this.isUnit()) {
43157 if (this._s > 0) {
43158 return this;
43159 }
43160 else {
43161 return BigInteger(n).isOdd() ? this : this.negate();
43162 }
43163 }
43164
43165 n = BigInteger(n);
43166 if (n._s === 0) {
43167 return ONE;
43168 }
43169 else if (n._s < 0) {
43170 if (this._s === 0) {
43171 throw new Error("Divide by zero");
43172 }
43173 else {
43174 return ZERO;
43175 }
43176 }
43177 if (this._s === 0) {
43178 return ZERO;
43179 }
43180 if (n.isUnit()) {
43181 return this;
43182 }
43183
43184 if (n.compareAbs(MAX_EXP) > 0) {
43185 throw new Error("exponent too large in BigInteger.pow");
43186 }
43187 var x = this;
43188 var aux = ONE;
43189 var two = BigInteger.small[2];
43190
43191 while (n.isPositive()) {
43192 if (n.isOdd()) {
43193 aux = aux.multiply(x);
43194 if (n.isUnit()) {
43195 return aux;
43196 }
43197 }
43198 x = x.square();
43199 n = n.quotient(two);
43200 }
43201
43202 return aux;
43203};
43204
43205/*
43206 Function: modPow
43207 Raise a <BigInteger> to a power (mod m).
43208
43209 Because it is reduced by a modulus, <modPow> is not limited by
43210 <BigInteger.MAX_EXP> like <pow>.
43211
43212 Parameters:
43213
43214 exponent - The exponent to raise *this* by. Must be positive.
43215 modulus - The modulus.
43216
43217 Returns:
43218
43219 *this* ^ *exponent* (mod *modulus*).
43220
43221 See Also:
43222
43223 <pow>, <mod>
43224*/
43225BigInteger.prototype.modPow = function(exponent, modulus) {
43226 var result = ONE;
43227 var base = this;
43228
43229 while (exponent.isPositive()) {
43230 if (exponent.isOdd()) {
43231 result = result.multiply(base).remainder(modulus);
43232 }
43233
43234 exponent = exponent.quotient(BigInteger.small[2]);
43235 if (exponent.isPositive()) {
43236 base = base.square().remainder(modulus);
43237 }
43238 }
43239
43240 return result;
43241};
43242
43243/*
43244 Function: log
43245 Get the natural logarithm of a <BigInteger> as a native JavaScript number.
43246
43247 This is equivalent to
43248
43249 > Math.log(this.toJSValue())
43250
43251 but handles values outside of the native number range.
43252
43253 Returns:
43254
43255 log( *this* )
43256
43257 See Also:
43258
43259 <toJSValue>
43260*/
43261BigInteger.prototype.log = function() {
43262 switch (this._s) {
43263 case 0: return -Infinity;
43264 case -1: return NaN;
43265 default: // Fall through.
43266 }
43267
43268 var l = this._d.length;
43269
43270 if (l*BigInteger_base_log10 < 30) {
43271 return Math.log(this.valueOf());
43272 }
43273
43274 var N = Math.ceil(30/BigInteger_base_log10);
43275 var firstNdigits = this._d.slice(l - N);
43276 return Math.log((new BigInteger(firstNdigits, 1, CONSTRUCT)).valueOf()) + (l - N) * Math.log(BigInteger_base);
43277};
43278
43279/*
43280 Function: valueOf
43281 Convert a <BigInteger> to a native JavaScript integer.
43282
43283 This is called automatically by JavaScipt to convert a <BigInteger> to a
43284 native value.
43285
43286 Returns:
43287
43288 > parseInt(this.toString(), 10)
43289
43290 See Also:
43291
43292 <toString>, <toJSValue>
43293*/
43294BigInteger.prototype.valueOf = function() {
43295 return parseInt(this.toString(), 10);
43296};
43297
43298/*
43299 Function: toJSValue
43300 Convert a <BigInteger> to a native JavaScript integer.
43301
43302 This is the same as valueOf, but more explicitly named.
43303
43304 Returns:
43305
43306 > parseInt(this.toString(), 10)
43307
43308 See Also:
43309
43310 <toString>, <valueOf>
43311*/
43312BigInteger.prototype.toJSValue = function() {
43313 return parseInt(this.toString(), 10);
43314};
43315
43316var MAX_EXP = BigInteger(0x7FFFFFFF);
43317// Constant: MAX_EXP
43318// The largest exponent allowed in <pow> and <exp10> (0x7FFFFFFF or 2147483647).
43319BigInteger.MAX_EXP = MAX_EXP;
43320
43321(function() {
43322 function makeUnary(fn) {
43323 return function(a) {
43324 return fn.call(BigInteger(a));
43325 };
43326 }
43327
43328 function makeBinary(fn) {
43329 return function(a, b) {
43330 return fn.call(BigInteger(a), BigInteger(b));
43331 };
43332 }
43333
43334 function makeTrinary(fn) {
43335 return function(a, b, c) {
43336 return fn.call(BigInteger(a), BigInteger(b), BigInteger(c));
43337 };
43338 }
43339
43340 (function() {
43341 var i, fn;
43342 var unary = "toJSValue,isEven,isOdd,sign,isZero,isNegative,abs,isUnit,square,negate,isPositive,toString,next,prev,log".split(",");
43343 var binary = "compare,remainder,divRem,subtract,add,quotient,divide,multiply,pow,compareAbs".split(",");
43344 var trinary = ["modPow"];
43345
43346 for (i = 0; i < unary.length; i++) {
43347 fn = unary[i];
43348 BigInteger[fn] = makeUnary(BigInteger.prototype[fn]);
43349 }
43350
43351 for (i = 0; i < binary.length; i++) {
43352 fn = binary[i];
43353 BigInteger[fn] = makeBinary(BigInteger.prototype[fn]);
43354 }
43355
43356 for (i = 0; i < trinary.length; i++) {
43357 fn = trinary[i];
43358 BigInteger[fn] = makeTrinary(BigInteger.prototype[fn]);
43359 }
43360
43361 BigInteger.exp10 = function(x, n) {
43362 return BigInteger(x).exp10(n);
43363 };
43364 })();
43365})();
43366
43367exports.BigInteger = BigInteger;
43368})(typeof exports !== 'undefined' ? exports : this);
95f04905
IC
43369</script>
43370 <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){
43371var 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;
43372
43373},{}],2:[function(require,module,exports){
43374var 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;
43375
43376},{"./scoring":6}],3:[function(require,module,exports){
43377var 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(","),
43378english_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(","),
43379female_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(","),
43380us_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(","),
43381male_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;
43382
43383},{}],4:[function(require,module,exports){
43384var 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;
43385
43386},{"./feedback":2,"./matching":5,"./scoring":6,"./time_estimates":7}],5:[function(require,module,exports){
43387var 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;
43388
43389},{"./adjacency_graphs":1,"./frequency_lists":3,"./scoring":6}],6:[function(require,module,exports){
43390var 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;
43391
43392},{"./adjacency_graphs":1}],7:[function(require,module,exports){
43393var 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;
43394
43395},{}]},{},[4])(4)
43396});
43397//# sourceMappingURL=zxcvbn.js.map
43398</script>
43399 <script>/*
43400 * Detects entropy from a string.
43401 *
43402 * Formats include:
43403 * binary [0-1]
43404 * base 6 [0-5]
43405 * dice 6 [1-6]
43406 * decimal [0-9]
43407 * hexadecimal [0-9A-F]
9e97eb76 43408 * card [A2-9TJQK][CDHS]
95f04905
IC
43409 *
43410 * Automatically uses lowest entropy to avoid issues such as interpretting 0101
43411 * as hexadecimal which would be 16 bits when really it's only 4 bits of binary
43412 * entropy.
43413 */
43414
43415window.Entropy = new (function() {
43416
78b8d604
IC
43417 var TWO = new BigInteger(2);
43418
95f04905
IC
43419 // matchers returns an array of the matched events for each type of entropy.
43420 // eg
43421 // matchers.binary("010") returns ["0", "1", "0"]
43422 // matchers.binary("a10") returns ["1", "0"]
43423 // matchers.hex("a10") returns ["a", "1", "0"]
43424 var matchers = {
43425 binary: function(str) {
43426 return str.match(/[0-1]/gi) || [];
43427 },
43428 base6: function(str) {
43429 return str.match(/[0-5]/gi) || [];
43430 },
43431 dice: function(str) {
43432 return str.match(/[1-6]/gi) || []; // ie dice numbers
43433 },
43434 base10: function(str) {
43435 return str.match(/[0-9]/gi) || [];
43436 },
43437 hex: function(str) {
43438 return str.match(/[0-9A-F]/gi) || [];
43439 },
43440 card: function(str) {
43441 // Format is NumberSuit, eg
43442 // AH ace of hearts
43443 // 8C eight of clubs
43444 // TD ten of diamonds
43445 // JS jack of spades
43446 // QH queen of hearts
43447 // KC king of clubs
43448 return str.match(/([A2-9TJQK][CDHS])/gi) || [];
43449 }
43450 }
43451
43452 // Convert array of cards from ["ac", "4d", "ks"]
43453 // to numbers between 0 and 51 [0, 16, 51]
43454 function convertCardsToInts(cards) {
43455 var ints = [];
43456 var values = "a23456789tjqk";
43457 var suits = "cdhs";
43458 for (var i=0; i<cards.length; i++) {
43459 var card = cards[i].toLowerCase();
43460 var value = card[0];
43461 var suit = card[1];
43462 var asInt = 13 * suits.indexOf(suit) + values.indexOf(value);
43463 ints.push(asInt);
43464 }
43465 return ints;
43466 }
43467
43468 this.fromString = function(rawEntropyStr) {
43469 // Find type of entropy being used (binary, hex, dice etc)
43470 var base = getBase(rawEntropyStr);
43471 // Convert dice to base6 entropy (ie 1-6 to 0-5)
43472 // This is done by changing all 6s to 0s
43473 if (base.str == "dice") {
43474 var newParts = [];
43475 var newInts = [];
43476 for (var i=0; i<base.parts.length; i++) {
43477 var c = base.parts[i];
43478 if ("12345".indexOf(c) > -1) {
43479 newParts[i] = base.parts[i];
43480 newInts[i] = base.ints[i];
43481 }
43482 else {
43483 newParts[i] = "0";
43484 newInts[i] = 0;
43485 }
43486 }
43487 base.str = "base 6 (dice)";
43488 base.ints = newInts;
43489 base.parts = newParts;
43490 base.matcher = matchers.base6;
43491 }
43492 // Detect empty entropy
43493 if (base.parts.length == 0) {
43494 return {
43495 binaryStr: "",
43496 cleanStr: "",
43497 cleanHtml: "",
43498 base: base,
43499 };
43500 }
43501 // Convert base.ints to BigInteger.
43502 // Due to using unusual bases, eg cards of base52, this is not as simple as
43503 // using BigInteger.parse()
43504 var entropyInt = BigInteger.ZERO;
43505 for (var i=base.ints.length-1; i>=0; i--) {
43506 var thisInt = BigInteger.parse(base.ints[i]);
43507 var power = (base.ints.length - 1) - i;
43508 var additionalEntropy = BigInteger.parse(base.asInt).pow(power).multiply(thisInt);
43509 entropyInt = entropyInt.add(additionalEntropy);
43510 }
43511 // Convert entropy to binary
43512 var entropyBin = entropyInt.toString(2);
43513 // If the first integer is small, it must be padded with zeros.
43514 // Otherwise the chance of the first bit being 1 is 100%, which is
43515 // obviously incorrect.
43516 // This is not perfect for non-2^n bases.
43517 var expectedBits = Math.floor(base.parts.length * Math.log2(base.asInt));
43518 while (entropyBin.length < expectedBits) {
43519 entropyBin = "0" + entropyBin;
43520 }
94959756
IC
43521 // Calculate the number of bits per event
43522 var bitsPerEvent = Math.log2(base.asInt);
ea87f1d3 43523 // Cards binary must be handled differently, since they're not replaced
9e97eb76 43524 if (base.asInt == 52) {
94959756
IC
43525 var cardEntropy = processCardEntropy(base.parts);
43526 entropyBin = cardEntropy.binaryStr;
43527 bitsPerEvent = cardEntropy.bitsPerEvent;
9e97eb76 43528 }
95f04905
IC
43529 // Supply a 'filtered' entropy string for display purposes
43530 var entropyClean = base.parts.join("");
43531 var entropyHtml = base.parts.join("");
43532 if (base.asInt == 52) {
43533 entropyClean = base.parts.join(" ").toUpperCase();
43534 entropyClean = entropyClean.replace(/C/g, "\u2663");
43535 entropyClean = entropyClean.replace(/D/g, "\u2666");
43536 entropyClean = entropyClean.replace(/H/g, "\u2665");
43537 entropyClean = entropyClean.replace(/S/g, "\u2660");
43538 entropyHtml = base.parts.join(" ").toUpperCase();
43539 entropyHtml = entropyHtml.replace(/C/g, "<span class='card-suit club'>\u2663</span>");
43540 entropyHtml = entropyHtml.replace(/D/g, "<span class='card-suit diamond'>\u2666</span>");
43541 entropyHtml = entropyHtml.replace(/H/g, "<span class='card-suit heart'>\u2665</span>");
43542 entropyHtml = entropyHtml.replace(/S/g, "<span class='card-suit spade'>\u2660</span>");
43543 }
9e97eb76 43544 // Return the result
95f04905
IC
43545 var e = {
43546 binaryStr: entropyBin,
43547 cleanStr: entropyClean,
43548 cleanHtml: entropyHtml,
94959756 43549 bitsPerEvent: bitsPerEvent,
95f04905
IC
43550 base: base,
43551 }
43552 return e;
43553 }
43554
78b8d604
IC
43555 function getSortedDeck() {
43556 var s = [];
43557 var suits = "CDHS";
43558 var values = "A23456789TJQK";
43559 for (var i=0; i<suits.length; i++) {
43560 for (var j=0; j<values.length; j++) {
43561 s.push(values[j]+suits[i]);
43562 }
43563 }
43564 return s;
43565 }
43566
95f04905
IC
43567 function getBase(str) {
43568 // Need to get the lowest base for the supplied entropy.
43569 // This prevents interpreting, say, dice rolls as hexadecimal.
43570 var binaryMatches = matchers.binary(str);
43571 var hexMatches = matchers.hex(str);
43572 // Find the lowest base that can be used, whilst ignoring any irrelevant chars
43573 if (binaryMatches.length == hexMatches.length && hexMatches.length > 0) {
43574 var ints = binaryMatches.map(function(i) { return parseInt(i, 2) });
43575 return {
43576 ints: ints,
43577 parts: binaryMatches,
43578 matcher: matchers.binary,
43579 asInt: 2,
43580 str: "binary",
43581 }
43582 }
43583 var cardMatches = matchers.card(str);
43584 if (cardMatches.length >= hexMatches.length / 2) {
43585 var ints = convertCardsToInts(cardMatches);
43586 return {
43587 ints: ints,
43588 parts: cardMatches,
43589 matcher: matchers.card,
43590 asInt: 52,
43591 str: "card",
43592 }
43593 }
43594 var diceMatches = matchers.dice(str);
43595 if (diceMatches.length == hexMatches.length && hexMatches.length > 0) {
43596 var ints = diceMatches.map(function(i) { return parseInt(i) });
43597 return {
43598 ints: ints,
43599 parts: diceMatches,
43600 matcher: matchers.dice,
43601 asInt: 6,
43602 str: "dice",
43603 }
43604 }
43605 var base6Matches = matchers.base6(str);
43606 if (base6Matches.length == hexMatches.length && hexMatches.length > 0) {
43607 var ints = base6Matches.map(function(i) { return parseInt(i) });
43608 return {
43609 ints: ints,
43610 parts: base6Matches,
43611 matcher: matchers.base6,
43612 asInt: 6,
43613 str: "base 6",
43614 }
43615 }
43616 var base10Matches = matchers.base10(str);
43617 if (base10Matches.length == hexMatches.length && hexMatches.length > 0) {
43618 var ints = base10Matches.map(function(i) { return parseInt(i) });
43619 return {
43620 ints: ints,
43621 parts: base10Matches,
43622 matcher: matchers.base10,
43623 asInt: 10,
43624 str: "base 10",
43625 }
43626 }
43627 var ints = hexMatches.map(function(i) { return parseInt(i, 16) });
43628 return {
43629 ints: ints,
43630 parts: hexMatches,
43631 matcher: matchers.hex,
43632 asInt: 16,
43633 str: "hexadecimal",
43634 }
43635 }
43636
ea87f1d3
IC
43637 // Assume cards are NOT replaced.
43638 // Additional entropy decreases as more cards are used. This means
43639 // total possible entropy is measured using n!, not base^n.
43640 // eg the second last card can be only one of two, not one of fifty two
43641 // so the added entropy for that card is only one bit at most
94959756 43642 function processCardEntropy(cards) {
ea87f1d3
IC
43643 // Track how many instances of each card have been used, and thus
43644 // how many decks are in use.
43645 var cardCounts = {};
43646 var numberOfDecks = 0;
43647 // Work out number of decks by max(duplicates)
43648 for (var i=0; i<cards.length; i++) {
43649 // Get the card that was drawn
43650 var cardLower = cards[i];
43651 var card = cardLower.toUpperCase();
43652 // Initialize the count for this card if needed
43653 if (!(card in cardCounts)) {
43654 cardCounts[card] = 0;
43655 }
43656 cardCounts[card] += 1;
43657 // See if this is max(duplicates)
43658 if (cardCounts[card] > numberOfDecks) {
43659 numberOfDecks = cardCounts[card];
43660 }
43661 }
43662 // Work out the total number of bits for this many decks
43663 // See http://crypto.stackexchange.com/q/41886
fc7c248f
IC
43664 var gainedBits = 0;
43665 // Equivalent of Math.log2(factorial(52*numberOfDecks))
43666 // which becomes infinity for numberOfDecks > 4
43667 for (var i=1; i<=52*numberOfDecks; i++) {
43668 gainedBits = gainedBits + Math.log2(i);
43669 }
ea87f1d3
IC
43670 var lostBits = 52 * Math.log2(factorial(numberOfDecks));
43671 var maxBits = gainedBits - lostBits;
43672 // Convert the drawn cards to a binary representation.
43673 // The exact technique for doing this is unclear.
43674 // See
43675 // http://crypto.stackexchange.com/a/41896
43676 // "I even doubt that this is well defined (only the average entropy
43677 // is, I believe)."
43678 // See
43679 // https://github.com/iancoleman/bip39/issues/33#issuecomment-263021856
43680 // "The binary representation can be the first log(permutations,2) bits
43681 // of the sha-2 hash of the normalized deck string."
43682 //
43683 // In this specific implementation, the first N bits of the hash of the
43684 // normalized cards string is being used. Uppercase, no spaces; eg
43685 // sha256("AH8DQSTC2H")
43686 var totalCards = numberOfDecks * 52;
43687 var percentUsed = cards.length / totalCards;
43688 // Calculate the average number of bits of entropy for the number of
43689 // cards drawn.
43690 var numberOfBits = Math.floor(maxBits * percentUsed);
43691 // Create a normalized string of the selected cards
43692 var normalizedCards = cards.join("").toUpperCase();
43693 // Convert to binary using the SHA256 hash of the normalized cards.
434caecd 43694 // If the number of bits is more than 256, multiple hashes
ea87f1d3
IC
43695 // are used until the required number of bits is reached.
43696 var entropyBin = "";
43697 var iterations = 0;
43698 while (entropyBin.length < numberOfBits) {
434caecd 43699 var hashedCards = sjcl.hash.sha256.hash(normalizedCards + ":" + iterations);
ea87f1d3
IC
43700 var hashHex = sjcl.codec.hex.fromBits(hashedCards);
43701 for (var i=0; i<hashHex.length; i++) {
43702 var decimal = parseInt(hashHex[i], 16);
43703 var binary = decimal.toString(2);
43704 while (binary.length < 4) {
43705 binary = "0" + binary;
43706 }
43707 entropyBin = entropyBin + binary;
43708 }
43709 iterations = iterations + 1;
43710 }
43711 // Truncate to the appropriate number of bits.
43712 entropyBin = entropyBin.substring(0, numberOfBits);
94959756
IC
43713 // Get the number of bits per event
43714 bitsPerEvent = maxBits / totalCards;
43715 return {
43716 binaryStr: entropyBin,
43717 bitsPerEvent: bitsPerEvent,
43718 }
ea87f1d3
IC
43719 }
43720
95f04905
IC
43721 // Polyfill for Math.log2
43722 // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/log2#Polyfill
43723 Math.log2 = Math.log2 || function(x) {
43724 // The polyfill isn't good enough because of the poor accuracy of
43725 // Math.LOG2E
43726 // log2(8) gave 2.9999999999999996 which when floored causes issues.
43727 // So instead use the BigInteger library to get it right.
43728 return BigInteger.log(x) / BigInteger.log(2);
43729 };
43730
9e97eb76
IC
43731 // Depends on BigInteger
43732 function factorial(n) {
43733 if (n == 0) {
43734 return 1;
43735 }
43736 f = BigInteger.ONE;
43737 for (var i=1; i<=n; i++) {
43738 f = f.multiply(new BigInteger(i));
43739 }
43740 return f;
43741 }
43742
95f04905 43743})();
c6624d51
IC
43744</script>
43745 <script>(function() {
43746
43747 // mnemonics is populated as required by getLanguage
43748 var mnemonics = { "english": new Mnemonic("english") };
43749 var mnemonic = mnemonics["english"];
3725abb5 43750 var seed = null;
c6624d51
IC
43751 var bip32RootKey = null;
43752 var bip32ExtendedKey = null;
43753 var network = bitcoin.networks.bitcoin;
43754 var addressRowTemplate = $("#address-row-template");
43755
43756 var showIndex = true;
43757 var showAddress = true;
43758 var showPubKey = true;
43759 var showPrivKey = true;
52da415f 43760 var showQr = false;
c6624d51
IC
43761
43762 var entropyChangeTimeoutEvent = null;
43763 var phraseChangeTimeoutEvent = null;
43764 var rootKeyChangedTimeoutEvent = null;
43765
40892aba
IC
43766 var generationProcesses = [];
43767
c6624d51
IC
43768 var DOM = {};
43769 DOM.network = $(".network");
56530adc 43770 DOM.bip32Client = $("#bip32-client");
c6624d51
IC
43771 DOM.phraseNetwork = $("#network-phrase");
43772 DOM.useEntropy = $(".use-entropy");
43773 DOM.entropyContainer = $(".entropy-container");
43774 DOM.entropy = $(".entropy");
2a6dd137
IC
43775 DOM.entropyFiltered = DOM.entropyContainer.find(".filtered");
43776 DOM.entropyType = DOM.entropyContainer.find(".type");
f1e5d484 43777 DOM.entropyCrackTime = DOM.entropyContainer.find(".crack-time");
2a6dd137
IC
43778 DOM.entropyEventCount = DOM.entropyContainer.find(".event-count");
43779 DOM.entropyBits = DOM.entropyContainer.find(".bits");
43780 DOM.entropyBitsPerEvent = DOM.entropyContainer.find(".bits-per-event");
43781 DOM.entropyWordCount = DOM.entropyContainer.find(".word-count");
43782 DOM.entropyBinary = DOM.entropyContainer.find(".binary");
43783 DOM.entropyMnemonicLength = DOM.entropyContainer.find(".mnemonic-length");
c6624d51
IC
43784 DOM.phrase = $(".phrase");
43785 DOM.passphrase = $(".passphrase");
43786 DOM.generateContainer = $(".generate-container");
43787 DOM.generate = $(".generate");
43788 DOM.seed = $(".seed");
43789 DOM.rootKey = $(".root-key");
43790 DOM.extendedPrivKey = $(".extended-priv-key");
43791 DOM.extendedPubKey = $(".extended-pub-key");
43792 DOM.bip32tab = $("#bip32-tab");
43793 DOM.bip44tab = $("#bip44-tab");
43794 DOM.bip32panel = $("#bip32");
43795 DOM.bip44panel = $("#bip44");
43796 DOM.bip32path = $("#bip32-path");
43797 DOM.bip44path = $("#bip44-path");
43798 DOM.bip44purpose = $("#bip44 .purpose");
43799 DOM.bip44coin = $("#bip44 .coin");
43800 DOM.bip44account = $("#bip44 .account");
20083ab9
IC
43801 DOM.bip44accountXprv = $("#bip44 .account-xprv");
43802 DOM.bip44accountXpub = $("#bip44 .account-xpub");
c6624d51 43803 DOM.bip44change = $("#bip44 .change");
18abe53b 43804 DOM.generatedStrength = $(".generate-container .strength");
c6624d51
IC
43805 DOM.hardenedAddresses = $(".hardened-addresses");
43806 DOM.addresses = $(".addresses");
43807 DOM.rowsToAdd = $(".rows-to-add");
43808 DOM.more = $(".more");
43809 DOM.feedback = $(".feedback");
43810 DOM.tab = $(".derivation-type a");
43811 DOM.indexToggle = $(".index-toggle");
43812 DOM.addressToggle = $(".address-toggle");
43813 DOM.publicKeyToggle = $(".public-key-toggle");
43814 DOM.privateKeyToggle = $(".private-key-toggle");
43815 DOM.languages = $(".languages a");
e00964cc 43816 DOM.qrContainer = $(".qr-container");
52da415f 43817 DOM.qrHider = DOM.qrContainer.find(".qr-hider");
e00964cc
IC
43818 DOM.qrImage = DOM.qrContainer.find(".qr-image");
43819 DOM.qrHint = DOM.qrContainer.find(".qr-hint");
43820 DOM.showQrEls = $("[data-show-qr]");
c6624d51
IC
43821
43822 function init() {
43823 // Events
43824 DOM.network.on("change", networkChanged);
56530adc 43825 DOM.bip32Client.on("change", bip32ClientChanged);
c6624d51
IC
43826 DOM.useEntropy.on("change", setEntropyVisibility);
43827 DOM.entropy.on("input", delayedEntropyChanged);
18abe53b 43828 DOM.entropyMnemonicLength.on("change", entropyChanged);
c6624d51
IC
43829 DOM.phrase.on("input", delayedPhraseChanged);
43830 DOM.passphrase.on("input", delayedPhraseChanged);
43831 DOM.generate.on("click", generateClicked);
43832 DOM.more.on("click", showMore);
43833 DOM.rootKey.on("input", delayedRootKeyChanged);
43834 DOM.bip32path.on("input", calcForDerivationPath);
43835 DOM.bip44purpose.on("input", calcForDerivationPath);
43836 DOM.bip44coin.on("input", calcForDerivationPath);
43837 DOM.bip44account.on("input", calcForDerivationPath);
43838 DOM.bip44change.on("input", calcForDerivationPath);
43839 DOM.tab.on("shown.bs.tab", calcForDerivationPath);
43840 DOM.hardenedAddresses.on("change", calcForDerivationPath);
43841 DOM.indexToggle.on("click", toggleIndexes);
43842 DOM.addressToggle.on("click", toggleAddresses);
43843 DOM.publicKeyToggle.on("click", togglePublicKeys);
43844 DOM.privateKeyToggle.on("click", togglePrivateKeys);
43845 DOM.languages.on("click", languageChanged);
e00964cc 43846 setQrEvents(DOM.showQrEls);
c6624d51
IC
43847 disableForms();
43848 hidePending();
43849 hideValidationError();
43850 populateNetworkSelect();
56530adc 43851 populateClientSelect();
c6624d51
IC
43852 }
43853
43854 // Event handlers
43855
43856 function networkChanged(e) {
43857 var networkIndex = e.target.value;
43858 networks[networkIndex].onSelect();
43859 if (seed != null) {
43860 phraseChanged();
43861 }
43862 else {
43863 rootKeyChanged();
43864 }
43865 }
43866
56530adc
IC
43867 function bip32ClientChanged(e) {
43868 var clientIndex = DOM.bip32Client.val();
43869 if (clientIndex == "custom") {
43870 DOM.bip32path.prop("readonly", false);
43871 }
43872 else {
43873 DOM.bip32path.prop("readonly", true);
43874 clients[clientIndex].onSelect();
43875 if (seed != null) {
43876 phraseChanged();
43877 }
43878 else {
43879 rootKeyChanged();
43880 }
43881 }
43882 }
43883
c6624d51
IC
43884 function setEntropyVisibility() {
43885 if (isUsingOwnEntropy()) {
43886 DOM.entropyContainer.removeClass("hidden");
43887 DOM.generateContainer.addClass("hidden");
43888 DOM.phrase.prop("readonly", true);
43889 DOM.entropy.focus();
43890 entropyChanged();
43891 }
43892 else {
43893 DOM.entropyContainer.addClass("hidden");
43894 DOM.generateContainer.removeClass("hidden");
43895 DOM.phrase.prop("readonly", false);
18abe53b 43896 hidePending();
c6624d51
IC
43897 }
43898 }
43899
43900 function delayedPhraseChanged() {
43901 hideValidationError();
43902 showPending();
43903 if (phraseChangeTimeoutEvent != null) {
43904 clearTimeout(phraseChangeTimeoutEvent);
43905 }
43906 phraseChangeTimeoutEvent = setTimeout(phraseChanged, 400);
43907 }
43908
43909 function phraseChanged() {
43910 showPending();
43911 hideValidationError();
43912 setMnemonicLanguage();
43913 // Get the mnemonic phrase
43914 var phrase = DOM.phrase.val();
43915 var errorText = findPhraseErrors(phrase);
43916 if (errorText) {
43917 showValidationError(errorText);
43918 return;
43919 }
43920 // Calculate and display
43921 var passphrase = DOM.passphrase.val();
43922 calcBip32RootKeyFromSeed(phrase, passphrase);
43923 calcForDerivationPath();
43924 hidePending();
43925 }
43926
43927 function delayedEntropyChanged() {
43928 hideValidationError();
43929 showPending();
43930 if (entropyChangeTimeoutEvent != null) {
43931 clearTimeout(entropyChangeTimeoutEvent);
43932 }
43933 entropyChangeTimeoutEvent = setTimeout(entropyChanged, 400);
43934 }
43935
43936 function entropyChanged() {
18abe53b
IC
43937 // If blank entropy, clear mnemonic, addresses, errors
43938 if (DOM.entropy.val().trim().length == 0) {
43939 clearDisplay();
2a6dd137 43940 clearEntropyFeedback();
18abe53b
IC
43941 DOM.phrase.val("");
43942 showValidationError("Blank entropy");
43943 return;
43944 }
43945 // Get the current phrase to detect changes
43946 var phrase = DOM.phrase.val();
43947 // Set the phrase from the entropy
c6624d51 43948 setMnemonicFromEntropy();
18abe53b
IC
43949 // Recalc addresses if the phrase has changed
43950 var newPhrase = DOM.phrase.val();
43951 if (newPhrase != phrase) {
43952 if (newPhrase.length == 0) {
43953 clearDisplay();
43954 }
43955 else {
43956 phraseChanged();
43957 }
43958 }
43959 else {
43960 hidePending();
43961 }
c6624d51
IC
43962 }
43963
43964 function delayedRootKeyChanged() {
43965 // Warn if there is an existing mnemonic or passphrase.
43966 if (DOM.phrase.val().length > 0 || DOM.passphrase.val().length > 0) {
43967 if (!confirm("This will clear existing mnemonic and passphrase")) {
43968 DOM.rootKey.val(bip32RootKey);
43969 return
43970 }
43971 }
43972 hideValidationError();
43973 showPending();
43974 // Clear existing mnemonic and passphrase
43975 DOM.phrase.val("");
43976 DOM.passphrase.val("");
43977 seed = null;
43978 if (rootKeyChangedTimeoutEvent != null) {
43979 clearTimeout(rootKeyChangedTimeoutEvent);
43980 }
43981 rootKeyChangedTimeoutEvent = setTimeout(rootKeyChanged, 400);
43982 }
43983
43984 function rootKeyChanged() {
43985 showPending();
43986 hideValidationError();
43987 // Validate the root key TODO
43988 var rootKeyBase58 = DOM.rootKey.val();
43989 var errorText = validateRootKey(rootKeyBase58);
43990 if (errorText) {
43991 showValidationError(errorText);
43992 return;
43993 }
43994 // Calculate and display
43995 calcBip32RootKeyFromBase58(rootKeyBase58);
43996 calcForDerivationPath();
c6624d51
IC
43997 }
43998
43999 function calcForDerivationPath() {
44000 showPending();
ba3cb9ec 44001 clearAddressesList();
c6624d51
IC
44002 hideValidationError();
44003 // Get the derivation path
44004 var derivationPath = getDerivationPath();
44005 var errorText = findDerivationPathErrors(derivationPath);
44006 if (errorText) {
44007 showValidationError(errorText);
44008 return;
44009 }
20083ab9
IC
44010 bip32ExtendedKey = calcBip32ExtendedKey(derivationPath);
44011 if (bip44TabSelected()) {
44012 displayBip44Info();
44013 }
c6624d51
IC
44014 displayBip32Info();
44015 hidePending();
44016 }
44017
44018 function generateClicked() {
44019 if (isUsingOwnEntropy()) {
44020 return;
44021 }
44022 clearDisplay();
44023 showPending();
44024 setTimeout(function() {
44025 setMnemonicLanguage();
44026 var phrase = generateRandomPhrase();
44027 if (!phrase) {
44028 return;
44029 }
44030 phraseChanged();
44031 }, 50);
44032 }
44033
44034 function languageChanged() {
44035 setTimeout(function() {
44036 setMnemonicLanguage();
44037 if (DOM.phrase.val().length > 0) {
44038 var newPhrase = convertPhraseToNewLanguage();
44039 DOM.phrase.val(newPhrase);
44040 phraseChanged();
44041 }
44042 else {
44043 DOM.generate.trigger("click");
44044 }
44045 }, 50);
44046 }
44047
44048 function toggleIndexes() {
44049 showIndex = !showIndex;
44050 $("td.index span").toggleClass("invisible");
44051 }
44052
44053 function toggleAddresses() {
44054 showAddress = !showAddress;
44055 $("td.address span").toggleClass("invisible");
44056 }
44057
44058 function togglePublicKeys() {
44059 showPubKey = !showPubKey;
44060 $("td.pubkey span").toggleClass("invisible");
44061 }
44062
44063 function togglePrivateKeys() {
44064 showPrivKey = !showPrivKey;
44065 $("td.privkey span").toggleClass("invisible");
44066 }
44067
44068 // Private methods
44069
44070 function generateRandomPhrase() {
44071 if (!hasStrongRandom()) {
44072 var errorText = "This browser does not support strong randomness";
44073 showValidationError(errorText);
44074 return;
44075 }
18abe53b 44076 var numWords = parseInt(DOM.generatedStrength.val());
c6624d51
IC
44077 var strength = numWords / 3 * 32;
44078 var words = mnemonic.generate(strength);
44079 DOM.phrase.val(words);
44080 return words;
44081 }
44082
44083 function calcBip32RootKeyFromSeed(phrase, passphrase) {
44084 seed = mnemonic.toSeed(phrase, passphrase);
44085 bip32RootKey = bitcoin.HDNode.fromSeedHex(seed, network);
44086 }
44087
44088 function calcBip32RootKeyFromBase58(rootKeyBase58) {
44089 bip32RootKey = bitcoin.HDNode.fromBase58(rootKeyBase58, network);
44090 }
44091
44092 function calcBip32ExtendedKey(path) {
0a1f0259
IC
44093 // Check there's a root key to derive from
44094 if (!bip32RootKey) {
44095 return bip32RootKey;
44096 }
20083ab9 44097 var extendedKey = bip32RootKey;
c6624d51
IC
44098 // Derive the key from the path
44099 var pathBits = path.split("/");
ebd8d4e8
IC
44100 for (var i=0; i<pathBits.length; i++) {
44101 var bit = pathBits[i];
44102 var index = parseInt(bit);
44103 if (isNaN(index)) {
44104 continue;
44105 }
44106 var hardened = bit[bit.length-1] == "'";
ba3cb9ec
IC
44107 var isPriv = "privKey" in extendedKey;
44108 var invalidDerivationPath = hardened && !isPriv;
44109 if (invalidDerivationPath) {
44110 extendedKey = null;
44111 }
44112 else if (hardened) {
20083ab9 44113 extendedKey = extendedKey.deriveHardened(index);
ebd8d4e8
IC
44114 }
44115 else {
20083ab9 44116 extendedKey = extendedKey.derive(index);
ebd8d4e8
IC
44117 }
44118 }
20083ab9 44119 return extendedKey
ebd8d4e8
IC
44120 }
44121
44122 function showValidationError(errorText) {
44123 DOM.feedback
44124 .text(errorText)
44125 .show();
44126 }
44127
44128 function hideValidationError() {
44129 DOM.feedback
44130 .text("")
44131 .hide();
44132 }
44133
44134 function findPhraseErrors(phrase) {
ebd8d4e8 44135 // Preprocess the words
783981de 44136 phrase = mnemonic.normalizeString(phrase);
0515eeec 44137 var words = phraseToWordArray(phrase);
18abe53b
IC
44138 // Detect blank phrase
44139 if (words.length == 0) {
44140 return "Blank mnemonic";
44141 }
563e401a 44142 // Check each word
0515eeec
IC
44143 for (var i=0; i<words.length; i++) {
44144 var word = words[i];
44145 var language = getLanguage();
44146 if (WORDLISTS[language].indexOf(word) == -1) {
563e401a
IC
44147 console.log("Finding closest match to " + word);
44148 var nearestWord = findNearestWord(word);
44149 return word + " not in wordlist, did you mean " + nearestWord + "?";
44150 }
44151 }
ebd8d4e8 44152 // Check the words are valid
0515eeec 44153 var properPhrase = wordArrayToPhrase(words);
ebd8d4e8
IC
44154 var isValid = mnemonic.check(properPhrase);
44155 if (!isValid) {
44156 return "Invalid mnemonic";
44157 }
44158 return false;
44159 }
44160
efe41586
IC
44161 function validateRootKey(rootKeyBase58) {
44162 try {
44163 bitcoin.HDNode.fromBase58(rootKeyBase58);
44164 }
44165 catch (e) {
44166 return "Invalid root key";
44167 }
44168 return "";
44169 }
44170
38523d36 44171 function getDerivationPath() {
20083ab9 44172 if (bip44TabSelected()) {
38523d36
IC
44173 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
44174 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
44175 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
44176 var change = parseIntNoNaN(DOM.bip44change.val(), 0);
44177 var path = "m/";
44178 path += purpose + "'/";
44179 path += coin + "'/";
44180 path += account + "'/";
44181 path += change;
44182 DOM.bip44path.val(path);
44183 var derivationPath = DOM.bip44path.val();
44184 console.log("Using derivation path from BIP44 tab: " + derivationPath);
44185 return derivationPath;
44186 }
20083ab9 44187 else if (bip32TabSelected()) {
38523d36
IC
44188 var derivationPath = DOM.bip32path.val();
44189 console.log("Using derivation path from BIP32 tab: " + derivationPath);
44190 return derivationPath;
44191 }
44192 else {
44193 console.log("Unknown derivation path");
44194 }
44195 }
44196
ebd8d4e8 44197 function findDerivationPathErrors(path) {
30c9e79d
IC
44198 // TODO is not perfect but is better than nothing
44199 // Inspired by
44200 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#test-vectors
44201 // and
44202 // https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#extended-keys
44203 var maxDepth = 255; // TODO verify this!!
44204 var maxIndexValue = Math.pow(2, 31); // TODO verify this!!
44205 if (path[0] != "m") {
44206 return "First character must be 'm'";
44207 }
44208 if (path.length > 1) {
44209 if (path[1] != "/") {
44210 return "Separator must be '/'";
44211 }
44212 var indexes = path.split("/");
44213 if (indexes.length > maxDepth) {
44214 return "Derivation depth is " + indexes.length + ", must be less than " + maxDepth;
44215 }
44216 for (var depth = 1; depth<indexes.length; depth++) {
44217 var index = indexes[depth];
44218 var invalidChars = index.replace(/^[0-9]+'?$/g, "")
44219 if (invalidChars.length > 0) {
44220 return "Invalid characters " + invalidChars + " found at depth " + depth;
44221 }
44222 var indexValue = parseInt(index.replace("'", ""));
44223 if (isNaN(depth)) {
44224 return "Invalid number at depth " + depth;
44225 }
44226 if (indexValue > maxIndexValue) {
44227 return "Value of " + indexValue + " at depth " + depth + " must be less than " + maxIndexValue;
44228 }
44229 }
44230 }
0a1f0259
IC
44231 // Check root key exists or else derivation path is useless!
44232 if (!bip32RootKey) {
44233 return "No root key";
44234 }
ba3cb9ec
IC
44235 // Check no hardened derivation path when using xpub keys
44236 var hardened = path.indexOf("'") > -1;
44237 var isXpubkey = !("privKey" in bip32RootKey);
44238 if (hardened && isXpubkey) {
44239 return "Hardened derivation path is invalid with xpub key";
44240 }
ebd8d4e8
IC
44241 return false;
44242 }
44243
20083ab9
IC
44244 function displayBip44Info() {
44245 // Get the derivation path for the account
44246 var purpose = parseIntNoNaN(DOM.bip44purpose.val(), 44);
44247 var coin = parseIntNoNaN(DOM.bip44coin.val(), 0);
44248 var account = parseIntNoNaN(DOM.bip44account.val(), 0);
44249 var path = "m/";
44250 path += purpose + "'/";
44251 path += coin + "'/";
44252 path += account + "'/";
44253 // Calculate the account extended keys
44254 var accountExtendedKey = calcBip32ExtendedKey(path);
44255 var accountXprv = accountExtendedKey.toBase58();
44256 var accountXpub = accountExtendedKey.toBase58(false);
44257 // Display the extended keys
44258 DOM.bip44accountXprv.val(accountXprv);
44259 DOM.bip44accountXpub.val(accountXpub);
44260 }
44261
ebd8d4e8
IC
44262 function displayBip32Info() {
44263 // Display the key
73161a92 44264 DOM.seed.val(seed);
ebd8d4e8
IC
44265 var rootKey = bip32RootKey.toBase58();
44266 DOM.rootKey.val(rootKey);
ba3cb9ec
IC
44267 var xprvkeyB58 = "NA";
44268 if (bip32ExtendedKey.privKey) {
44269 xprvkeyB58 = bip32ExtendedKey.toBase58();
44270 }
44271 var extendedPrivKey = xprvkeyB58;
ebd8d4e8
IC
44272 DOM.extendedPrivKey.val(extendedPrivKey);
44273 var extendedPubKey = bip32ExtendedKey.toBase58(false);
44274 DOM.extendedPubKey.val(extendedPubKey);
44275 // Display the addresses and privkeys
44276 clearAddressesList();
44277 displayAddresses(0, 20);
44278 }
44279
44280 function displayAddresses(start, total) {
40892aba
IC
44281 generationProcesses.push(new (function() {
44282
44283 var rows = [];
44284
44285 this.stop = function() {
44286 for (var i=0; i<rows.length; i++) {
44287 rows[i].shouldGenerate = false;
44288 }
44289 }
44290
44291 for (var i=0; i<total; i++) {
44292 var index = i + start;
44293 rows.push(new TableRow(index));
44294 }
44295
44296 })());
80c4dd2a
IC
44297 }
44298
44299 function TableRow(index) {
44300
40892aba
IC
44301 var self = this;
44302 this.shouldGenerate = true;
1975bfbc
IC
44303 var useHardenedAddresses = DOM.hardenedAddresses.prop("checked");
44304
80c4dd2a
IC
44305 function init() {
44306 calculateValues();
44307 }
44308
44309 function calculateValues() {
44310 setTimeout(function() {
40892aba
IC
44311 if (!self.shouldGenerate) {
44312 return;
44313 }
1975bfbc
IC
44314 var key = "";
44315 if (useHardenedAddresses) {
44316 key = bip32ExtendedKey.deriveHardened(index);
44317 }
44318 else {
44319 key = bip32ExtendedKey.derive(index);
44320 }
80c4dd2a 44321 var address = key.getAddress().toString();
ba3cb9ec
IC
44322 var privkey = "NA";
44323 if (key.privKey) {
44324 privkey = key.privKey.toWIF(network);
44325 }
1b12b2f5 44326 var pubkey = key.pubKey.toHex();
38523d36 44327 var indexText = getDerivationPath() + "/" + index;
1975bfbc
IC
44328 if (useHardenedAddresses) {
44329 indexText = indexText + "'";
44330 }
8b095871 44331 // Ethereum values are different
534481b6 44332 if (networks[DOM.network.val()].name == "ETH - Ethereum") {
8b095871
IC
44333 var privKeyBuffer = key.privKey.d.toBuffer();
44334 privkey = privKeyBuffer.toString('hex');
44335 var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
49b21f12
IC
44336 var hexAddress = addressBuffer.toString('hex');
44337 var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
44338 address = ethUtil.addHexPrefix(checksumAddress);
920eb591
IC
44339 privkey = ethUtil.addHexPrefix(privkey);
44340 pubkey = ethUtil.addHexPrefix(pubkey);
8b095871 44341 }
8a1f452d 44342 // Ripple values are different
534481b6 44343 if (networks[DOM.network.val()].name == "XRP - Ripple") {
8a1f452d 44344 privkey = convertRipplePriv(privkey);
44345 address = convertRippleAdrr(address);
44346 }
1b12b2f5 44347 addAddressToList(indexText, address, pubkey, privkey);
80c4dd2a 44348 }, 50)
ebd8d4e8 44349 }
80c4dd2a
IC
44350
44351 init();
44352
ebd8d4e8
IC
44353 }
44354
44355 function showMore() {
44356 var start = DOM.addresses.children().length;
44357 var rowsToAdd = parseInt(DOM.rowsToAdd.val());
44358 if (isNaN(rowsToAdd)) {
44359 rowsToAdd = 20;
44360 DOM.rowsToAdd.val("20");
44361 }
44362 if (rowsToAdd > 200) {
44363 var msg = "Generating " + rowsToAdd + " rows could take a while. ";
44364 msg += "Do you want to continue?";
44365 if (!confirm(msg)) {
44366 return;
44367 }
44368 }
ebd8d4e8 44369 displayAddresses(start, rowsToAdd);
ebd8d4e8
IC
44370 }
44371
44372 function clearDisplay() {
44373 clearAddressesList();
44374 clearKey();
44375 hideValidationError();
44376 }
44377
44378 function clearAddressesList() {
44379 DOM.addresses.empty();
40892aba
IC
44380 stopGenerating();
44381 }
44382
44383 function stopGenerating() {
44384 while (generationProcesses.length > 0) {
44385 var generation = generationProcesses.shift();
44386 generation.stop();
44387 }
ebd8d4e8
IC
44388 }
44389
44390 function clearKey() {
44391 DOM.rootKey.val("");
44392 DOM.extendedPrivKey.val("");
44393 DOM.extendedPubKey.val("");
44394 }
44395
1b12b2f5 44396 function addAddressToList(indexText, address, pubkey, privkey) {
ebd8d4e8 44397 var row = $(addressRowTemplate.html());
80c4dd2a
IC
44398 // Elements
44399 var indexCell = row.find(".index span");
44400 var addressCell = row.find(".address span");
1b12b2f5 44401 var pubkeyCell = row.find(".pubkey span");
80c4dd2a
IC
44402 var privkeyCell = row.find(".privkey span");
44403 // Content
ae30fed8 44404 indexCell.text(indexText);
80c4dd2a 44405 addressCell.text(address);
1b12b2f5 44406 pubkeyCell.text(pubkey);
80c4dd2a
IC
44407 privkeyCell.text(privkey);
44408 // Visibility
44409 if (!showIndex) {
44410 indexCell.addClass("invisible");
44411 }
44412 if (!showAddress) {
44413 addressCell.addClass("invisible");
44414 }
1b12b2f5
IC
44415 if (!showPubKey) {
44416 pubkeyCell.addClass("invisible");
44417 }
80c4dd2a 44418 if (!showPrivKey) {
6d628db7 44419 privkeyCell.addClass("invisible");
80c4dd2a 44420 }
ebd8d4e8 44421 DOM.addresses.append(row);
e00964cc
IC
44422 var rowShowQrEls = row.find("[data-show-qr]");
44423 setQrEvents(rowShowQrEls);
ebd8d4e8
IC
44424 }
44425
44426 function hasStrongRandom() {
44427 return 'crypto' in window && window['crypto'] !== null;
44428 }
44429
44430 function disableForms() {
44431 $("form").on("submit", function(e) {
44432 e.preventDefault();
44433 });
44434 }
44435
ebd8d4e8
IC
44436 function parseIntNoNaN(val, defaultVal) {
44437 var v = parseInt(val);
44438 if (isNaN(v)) {
44439 return defaultVal;
44440 }
44441 return v;
44442 }
44443
44444 function showPending() {
44445 DOM.feedback
44446 .text("Calculating...")
44447 .show();
44448 }
44449
563e401a 44450 function findNearestWord(word) {
0515eeec
IC
44451 var language = getLanguage();
44452 var words = WORDLISTS[language];
563e401a
IC
44453 var minDistance = 99;
44454 var closestWord = words[0];
44455 for (var i=0; i<words.length; i++) {
44456 var comparedTo = words[i];
6ea15134
IC
44457 if (comparedTo.indexOf(word) == 0) {
44458 return comparedTo;
44459 }
563e401a
IC
44460 var distance = Levenshtein.get(word, comparedTo);
44461 if (distance < minDistance) {
44462 closestWord = comparedTo;
44463 minDistance = distance;
44464 }
44465 }
44466 return closestWord;
44467 }
44468
ebd8d4e8
IC
44469 function hidePending() {
44470 DOM.feedback
44471 .text("")
44472 .hide();
44473 }
44474
ab78acc6
IC
44475 function populateNetworkSelect() {
44476 for (var i=0; i<networks.length; i++) {
44477 var network = networks[i];
44478 var option = $("<option>");
44479 option.attr("value", i);
44480 option.text(network.name);
44481 DOM.phraseNetwork.append(option);
44482 }
44483 }
44484
56530adc
IC
44485 function populateClientSelect() {
44486 for (var i=0; i<clients.length; i++) {
44487 var client = clients[i];
44488 var option = $("<option>");
44489 option.attr("value", i);
44490 option.text(client.name);
44491 DOM.bip32Client.append(option);
44492 }
44493 }
44494
0515eeec
IC
44495 function getLanguage() {
44496 var defaultLanguage = "english";
44497 // Try to get from existing phrase
44498 var language = getLanguageFromPhrase();
44499 // Try to get from url if not from phrase
44500 if (language.length == 0) {
44501 language = getLanguageFromUrl();
44502 }
44503 // Default to English if no other option
44504 if (language.length == 0) {
44505 language = defaultLanguage;
44506 }
44507 return language;
44508 }
44509
44510 function getLanguageFromPhrase(phrase) {
44511 // Check if how many words from existing phrase match a language.
44512 var language = "";
44513 if (!phrase) {
44514 phrase = DOM.phrase.val();
44515 }
44516 if (phrase.length > 0) {
44517 var words = phraseToWordArray(phrase);
44518 var languageMatches = {};
44519 for (l in WORDLISTS) {
44520 // Track how many words match in this language
44521 languageMatches[l] = 0;
44522 for (var i=0; i<words.length; i++) {
44523 var wordInLanguage = WORDLISTS[l].indexOf(words[i]) > -1;
44524 if (wordInLanguage) {
44525 languageMatches[l]++;
44526 }
44527 }
44528 // Find languages with most word matches.
44529 // This is made difficult due to commonalities between Chinese
44530 // simplified vs traditional.
44531 var mostMatches = 0;
44532 var mostMatchedLanguages = [];
44533 for (var l in languageMatches) {
44534 var numMatches = languageMatches[l];
44535 if (numMatches > mostMatches) {
44536 mostMatches = numMatches;
44537 mostMatchedLanguages = [l];
44538 }
44539 else if (numMatches == mostMatches) {
44540 mostMatchedLanguages.push(l);
44541 }
44542 }
44543 }
44544 if (mostMatchedLanguages.length > 0) {
44545 // Use first language and warn if multiple detected
44546 language = mostMatchedLanguages[0];
44547 if (mostMatchedLanguages.length > 1) {
44548 console.warn("Multiple possible languages");
44549 console.warn(mostMatchedLanguages);
44550 }
44551 }
44552 }
44553 return language;
44554 }
44555
44556 function getLanguageFromUrl() {
c6624d51
IC
44557 for (var language in WORDLISTS) {
44558 if (window.location.hash.indexOf(language) > -1) {
44559 return language;
44560 }
44561 }
44562 return "";
0515eeec
IC
44563 }
44564
44565 function setMnemonicLanguage() {
44566 var language = getLanguage();
44567 // Load the bip39 mnemonic generator for this language if required
44568 if (!(language in mnemonics)) {
44569 mnemonics[language] = new Mnemonic(language);
44570 }
44571 mnemonic = mnemonics[language];
44572 }
44573
44574 function convertPhraseToNewLanguage() {
44575 var oldLanguage = getLanguageFromPhrase();
44576 var newLanguage = getLanguageFromUrl();
44577 var oldPhrase = DOM.phrase.val();
44578 var oldWords = phraseToWordArray(oldPhrase);
44579 var newWords = [];
44580 for (var i=0; i<oldWords.length; i++) {
44581 var oldWord = oldWords[i];
44582 var index = WORDLISTS[oldLanguage].indexOf(oldWord);
44583 var newWord = WORDLISTS[newLanguage][index];
44584 newWords.push(newWord);
44585 }
44586 newPhrase = wordArrayToPhrase(newWords);
44587 return newPhrase;
44588 }
44589
44590 // TODO look at jsbip39 - mnemonic.splitWords
44591 function phraseToWordArray(phrase) {
44592 var words = phrase.split(/\s/g);
44593 var noBlanks = [];
44594 for (var i=0; i<words.length; i++) {
44595 var word = words[i];
44596 if (word.length > 0) {
44597 noBlanks.push(word);
44598 }
44599 }
44600 return noBlanks;
44601 }
44602
44603 // TODO look at jsbip39 - mnemonic.joinWords
44604 function wordArrayToPhrase(words) {
44605 var phrase = words.join(" ");
44606 var language = getLanguageFromPhrase(phrase);
44607 if (language == "japanese") {
44608 phrase = words.join("\u3000");
44609 }
44610 return phrase;
44611 }
44612
c6624d51
IC
44613 function isUsingOwnEntropy() {
44614 return DOM.useEntropy.prop("checked");
44615 }
44616
44617 function setMnemonicFromEntropy() {
2a6dd137 44618 clearEntropyFeedback();
18abe53b 44619 // Get entropy value
c6624d51 44620 var entropyStr = DOM.entropy.val();
18abe53b 44621 // Work out minimum base for entropy
c6624d51 44622 var entropy = Entropy.fromString(entropyStr);
18abe53b 44623 if (entropy.binaryStr.length == 0) {
c6624d51
IC
44624 return;
44625 }
44626 // Show entropy details
18abe53b
IC
44627 showEntropyFeedback(entropy);
44628 // Use entropy hash if not using raw entropy
44629 var bits = entropy.binaryStr;
44630 var mnemonicLength = DOM.entropyMnemonicLength.val();
44631 if (mnemonicLength != "raw") {
44632 // Get bits by hashing entropy with SHA256
44633 var hash = sjcl.hash.sha256.hash(entropy.cleanStr);
44634 var hex = sjcl.codec.hex.fromBits(hash);
44635 bits = BigInteger.parse(hex, 16).toString(2);
53aaab27 44636 while (bits.length % 256 != 0) {
18abe53b
IC
44637 bits = "0" + bits;
44638 }
44639 // Truncate hash to suit number of words
44640 mnemonicLength = parseInt(mnemonicLength);
44641 var numberOfBits = 32 * mnemonicLength / 3;
44642 bits = bits.substring(0, numberOfBits);
c6624d51 44643 }
c6624d51 44644 // Discard trailing entropy
18abe53b 44645 var bitsToUse = Math.floor(bits.length / 32) * 32;
2a6dd137
IC
44646 var start = bits.length - bitsToUse;
44647 var binaryStr = bits.substring(start);
c6624d51
IC
44648 // Convert entropy string to numeric array
44649 var entropyArr = [];
18abe53b
IC
44650 for (var i=0; i<binaryStr.length / 8; i++) {
44651 var byteAsBits = binaryStr.substring(i*8, i*8+8);
44652 var entropyByte = parseInt(byteAsBits, 2);
c6624d51
IC
44653 entropyArr.push(entropyByte)
44654 }
44655 // Convert entropy array to mnemonic
44656 var phrase = mnemonic.toMnemonic(entropyArr);
44657 // Set the mnemonic in the UI
44658 DOM.phrase.val(phrase);
44659 }
44660
2a6dd137 44661 function clearEntropyFeedback() {
f1e5d484 44662 DOM.entropyCrackTime.text("...");
18abe53b 44663 DOM.entropyType.text("");
2a6dd137
IC
44664 DOM.entropyWordCount.text("0");
44665 DOM.entropyEventCount.text("0");
44666 DOM.entropyBitsPerEvent.text("0");
44667 DOM.entropyBits.text("0");
44668 DOM.entropyFiltered.html("&nbsp;");
44669 DOM.entropyBinary.html("&nbsp;");
c6624d51
IC
44670 }
44671
18abe53b 44672 function showEntropyFeedback(entropy) {
9e97eb76 44673 var numberOfBits = entropy.binaryStr.length;
f1e5d484 44674 var timeToCrack = "unknown";
95f04905
IC
44675 try {
44676 var z = zxcvbn(entropy.base.parts.join(""));
f1e5d484
IC
44677 timeToCrack = z.crack_times_display.offline_fast_hashing_1e10_per_second;
44678 if (z.feedback.warning != "") {
44679 timeToCrack = timeToCrack + " - " + z.feedback.warning;
44680 };
18abe53b 44681 }
95f04905 44682 catch (e) {
95f04905
IC
44683 console.log("Error detecting entropy strength with zxcvbn:");
44684 console.log(e);
44685 }
95f04905 44686 var entropyTypeStr = getEntropyTypeStr(entropy);
9e97eb76 44687 var wordCount = Math.floor(numberOfBits / 32) * 3;
94959756 44688 var bitsPerEvent = entropy.bitsPerEvent.toFixed(2);
2a6dd137 44689 DOM.entropyFiltered.html(entropy.cleanHtml);
95f04905 44690 DOM.entropyType.text(entropyTypeStr);
f1e5d484 44691 DOM.entropyCrackTime.text(timeToCrack);
18abe53b 44692 DOM.entropyEventCount.text(entropy.base.ints.length);
9e97eb76 44693 DOM.entropyBits.text(numberOfBits);
2a6dd137
IC
44694 DOM.entropyWordCount.text(wordCount);
44695 DOM.entropyBinary.text(entropy.binaryStr);
9e97eb76 44696 DOM.entropyBitsPerEvent.text(bitsPerEvent);
95f04905
IC
44697 }
44698
44699 function getEntropyTypeStr(entropy) {
44700 var typeStr = entropy.base.str;
44701 // Add some detail if these are cards
44702 if (entropy.base.asInt == 52) {
44703 var cardDetail = []; // array of message strings
44704 // Detect duplicates
44705 var dupes = [];
44706 var dupeTracker = {};
44707 for (var i=0; i<entropy.base.parts.length; i++) {
44708 var card = entropy.base.parts[i];
9e97eb76
IC
44709 var cardUpper = card.toUpperCase();
44710 if (cardUpper in dupeTracker) {
95f04905
IC
44711 dupes.push(card);
44712 }
9e97eb76 44713 dupeTracker[cardUpper] = true;
95f04905
IC
44714 }
44715 if (dupes.length > 0) {
44716 var dupeWord = "duplicates";
44717 if (dupes.length == 1) {
44718 dupeWord = "duplicate";
44719 }
44720 var msg = dupes.length + " " + dupeWord + ": " + dupes.slice(0,3).join(" ");
44721 if (dupes.length > 3) {
44722 msg += "...";
44723 }
44724 cardDetail.push(msg);
44725 }
44726 // Detect full deck
44727 var uniqueCards = [];
44728 for (var uniqueCard in dupeTracker) {
44729 uniqueCards.push(uniqueCard);
44730 }
44731 if (uniqueCards.length == 52) {
44732 cardDetail.unshift("full deck");
44733 }
9e97eb76
IC
44734 // Detect missing cards
44735 var values = "A23456789TJQK";
44736 var suits = "CDHS";
44737 var missingCards = [];
44738 for (var i=0; i<suits.length; i++) {
44739 for (var j=0; j<values.length; j++) {
44740 var card = values[j] + suits[i];
44741 if (!(card in dupeTracker)) {
44742 missingCards.push(card);
44743 }
44744 }
44745 }
44746 // Display missing cards if six or less, ie clearly going for full deck
44747 if (missingCards.length > 0 && missingCards.length <= 6) {
44748 var msg = missingCards.length + " missing: " + missingCards.slice(0,3).join(" ");
44749 if (missingCards.length > 3) {
44750 msg += "...";
44751 }
44752 cardDetail.push(msg);
44753 }
95f04905
IC
44754 // Add card details to typeStr
44755 if (cardDetail.length > 0) {
44756 typeStr += " (" + cardDetail.join(", ") + ")";
44757 }
44758 }
44759 return typeStr;
44760 }
44761
e00964cc
IC
44762 function setQrEvents(els) {
44763 els.on("mouseenter", createQr);
44764 els.on("mouseleave", destroyQr);
44765 els.on("click", toggleQr);
44766 }
44767
44768 function createQr(e) {
44769 var content = e.target.textContent || e.target.value;
44770 if (content) {
44771 var size = 130;
44772 DOM.qrImage.qrcode({width: size, height: size, text: content});
44773 if (!showQr) {
52da415f
IC
44774 DOM.qrHider.addClass("hidden");
44775 }
44776 else {
44777 DOM.qrHider.removeClass("hidden");
e00964cc
IC
44778 }
44779 DOM.qrContainer.removeClass("hidden");
44780 }
44781 }
44782
44783 function destroyQr() {
44784 DOM.qrImage.text("");
44785 DOM.qrContainer.addClass("hidden");
44786 }
44787
44788 function toggleQr() {
44789 showQr = !showQr;
52da415f 44790 DOM.qrHider.toggleClass("hidden");
e00964cc
IC
44791 DOM.qrHint.toggleClass("hidden");
44792 }
44793
20083ab9
IC
44794 function bip44TabSelected() {
44795 return DOM.bip44tab.hasClass("active");
44796 }
44797
44798 function bip32TabSelected() {
44799 return DOM.bip32tab.hasClass("active");
44800 }
44801
ab78acc6
IC
44802 var networks = [
44803 {
534481b6 44804 name: "BTC - Bitcoin",
ab78acc6
IC
44805 onSelect: function() {
44806 network = bitcoin.networks.bitcoin;
44807 DOM.bip44coin.val(0);
ab78acc6
IC
44808 },
44809 },
44810 {
534481b6 44811 name: "BTC - Bitcoin Testnet",
ab78acc6
IC
44812 onSelect: function() {
44813 network = bitcoin.networks.testnet;
44814 DOM.bip44coin.val(1);
ab78acc6
IC
44815 },
44816 },
44817 {
534481b6 44818 name: "CLAM - Clams",
ab78acc6 44819 onSelect: function() {
52d589ea
IC
44820 network = bitcoin.networks.clam;
44821 DOM.bip44coin.val(23);
ab78acc6
IC
44822 },
44823 },
0921f370 44824 {
44825 name: "CRW - Crown",
44826 onSelect: function() {
44827 network = bitcoin.networks.crown;
44828 DOM.bip44coin.val(72);
44829 },
44830 },
ab78acc6 44831 {
534481b6 44832 name: "DASH - Dash",
d5dc92fd 44833 onSelect: function() {
52d589ea
IC
44834 network = bitcoin.networks.dash;
44835 DOM.bip44coin.val(5);
d5dc92fd
IC
44836 },
44837 },
c0386f3b 44838 {
534481b6 44839 name: "DASH - Dash Testnet",
c0386f3b
KR
44840 onSelect: function() {
44841 network = bitcoin.networks.dashtn;
44842 DOM.bip44coin.val(1);
44843 },
44844 },
d5dc92fd 44845 {
534481b6 44846 name: "DOGE - Dogecoin",
44847 onSelect: function() {
44848 network = bitcoin.networks.dogecoin;
44849 DOM.bip44coin.val(3);
44850 },
44851 },
44852 {
44853 name: "ETH - Ethereum",
d5dc92fd 44854 onSelect: function() {
52d589ea
IC
44855 network = bitcoin.networks.bitcoin;
44856 DOM.bip44coin.val(60);
d5dc92fd
IC
44857 },
44858 },
f88fab20 44859 {
534481b6 44860 name: "GAME - GameCredits",
f88fab20 44861 onSelect: function() {
44862 network = bitcoin.networks.game;
44863 DOM.bip44coin.val(101);
44864 },
44865 },
a3baa26e 44866 {
534481b6 44867 name: "JBS - Jumbucks",
a3baa26e 44868 onSelect: function() {
52d589ea
IC
44869 network = bitcoin.networks.jumbucks;
44870 DOM.bip44coin.val(26);
a3baa26e
IC
44871 },
44872 },
44873 {
534481b6 44874 name: "LTC - Litecoin",
a3baa26e 44875 onSelect: function() {
52d589ea
IC
44876 network = bitcoin.networks.litecoin;
44877 DOM.bip44coin.val(2);
a3baa26e
IC
44878 },
44879 },
44880 {
534481b6 44881 name: "NMC - Namecoin",
a3baa26e 44882 onSelect: function() {
52d589ea
IC
44883 network = bitcoin.networks.namecoin;
44884 DOM.bip44coin.val(7);
a3baa26e
IC
44885 },
44886 },
5c434a8a 44887 {
534481b6 44888 name: "PPC - Peercoin",
5c434a8a 44889 onSelect: function() {
52d589ea
IC
44890 network = bitcoin.networks.peercoin;
44891 DOM.bip44coin.val(6);
5c434a8a
CM
44892 },
44893 },
8a1f452d 44894 {
534481b6 44895 name: "SDC - ShadowCash",
5493efc3 44896 onSelect: function() {
52d589ea
IC
44897 network = bitcoin.networks.shadow;
44898 DOM.bip44coin.val(35);
5493efc3 44899 },
44900 },
07ac4350 44901 {
534481b6 44902 name: "SDC - ShadowCash Testnet",
07ac4350 44903 onSelect: function() {
52d589ea
IC
44904 network = bitcoin.networks.shadowtn;
44905 DOM.bip44coin.val(1);
07ac4350 44906 },
44907 },
01e81e53 44908 {
534481b6 44909 name: "SLM - Slimcoin",
01e81e53
GH
44910 onSelect: function() {
44911 network = bitcoin.networks.slimcoin;
44912 DOM.bip44coin.val(63);
44913 },
44914 },
44915 {
534481b6 44916 name: "SLM - Slimcoin Testnet",
01e81e53
GH
44917 onSelect: function() {
44918 network = bitcoin.networks.slimcointn;
44919 DOM.bip44coin.val(111);
44920 },
44921 },
07ac4350 44922 {
534481b6 44923 name: "VIA - Viacoin",
07ac4350 44924 onSelect: function() {
52d589ea
IC
44925 network = bitcoin.networks.viacoin;
44926 DOM.bip44coin.val(14);
07ac4350 44927 },
44928 },
8b095871 44929 {
534481b6 44930 name: "VIA - Viacoin Testnet",
8b095871 44931 onSelect: function() {
52d589ea
IC
44932 network = bitcoin.networks.viacointestnet;
44933 DOM.bip44coin.val(1);
8b095871
IC
44934 },
44935 },
534481b6 44936 {
44937 name: "XRP - Ripple",
44938 onSelect: function() {
44939 network = bitcoin.networks.bitcoin;
44940 DOM.bip44coin.val(144);
44941 },
44942 }
ab78acc6
IC
44943 ]
44944
56530adc
IC
44945 var clients = [
44946 {
44947 name: "Bitcoin Core",
44948 onSelect: function() {
44949 DOM.bip32path.val("m/0'/0'");
44950 DOM.hardenedAddresses.prop('checked', true);
44951 },
44952 },
44953 {
44954 name: "blockchain.info",
44955 onSelect: function() {
44956 DOM.bip32path.val("m/44'/0'/0'");
44957 DOM.hardenedAddresses.prop('checked', false);
44958 },
44959 },
44960 {
44961 name: "MultiBit HD",
44962 onSelect: function() {
44963 DOM.bip32path.val("m/0'/0");
44964 DOM.hardenedAddresses.prop('checked', false);
44965 },
44966 }
44967 ]
44968
ebd8d4e8
IC
44969 init();
44970
44971})();
dc55c6b0 44972</script>
ebd8d4e8
IC
44973 </body>
44974</html>